mito-ai 0.1.32__py3-none-any.whl → 0.1.33__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.
Files changed (25) hide show
  1. mito_ai/_version.py +1 -1
  2. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +1 -1
  3. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
  4. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
  5. mito_ai-0.1.32.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.42b54cf8f038cc526980.js → mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.281f4b9af60d620c6fb1.js +49 -33
  6. mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.281f4b9af60d620c6fb1.js.map +1 -0
  7. mito_ai-0.1.32.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.a711c58b58423173bd24.js → mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.4f1d00fd0c58fcc05d8d.js +3 -3
  8. mito_ai-0.1.32.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.a711c58b58423173bd24.js.map → mito_ai-0.1.33.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.4f1d00fd0c58fcc05d8d.js.map +1 -1
  9. {mito_ai-0.1.32.dist-info → mito_ai-0.1.33.dist-info}/METADATA +1 -1
  10. {mito_ai-0.1.32.dist-info → mito_ai-0.1.33.dist-info}/RECORD +24 -24
  11. mito_ai-0.1.32.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.42b54cf8f038cc526980.js.map +0 -1
  12. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
  13. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
  14. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
  15. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.06083e515de4862df010.js +0 -0
  16. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.06083e515de4862df010.js.map +0 -0
  17. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_html2canvas_dist_html2canvas_js.ea47e8c8c906197f8d19.js +0 -0
  18. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_html2canvas_dist_html2canvas_js.ea47e8c8c906197f8d19.js.map +0 -0
  19. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js +0 -0
  20. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.9795f79265ddb416864b.js.map +0 -0
  21. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
  22. {mito_ai-0.1.32.data → mito_ai-0.1.33.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js.map +0 -0
  23. {mito_ai-0.1.32.dist-info → mito_ai-0.1.33.dist-info}/WHEEL +0 -0
  24. {mito_ai-0.1.32.dist-info → mito_ai-0.1.33.dist-info}/entry_points.txt +0 -0
  25. {mito_ai-0.1.32.dist-info → mito_ai-0.1.33.dist-info}/licenses/LICENSE +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"lib_index_js.42b54cf8f038cc526980.js","mappings":"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ACjB;AACzF,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA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B,qBAAqB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sFAAsF,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,sDAAsD,qBAAqB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACpFa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,cAAc;AACrE;AACA;AACA;AACA;AACA;;;;;;;;;;ACfa;;AAEb,QAAQ,mBAAO,CAAC,4DAAW;AAC3B,IAAI,KAAqC,EAAE,EAG1C,CAAC;AACF;AACA,EAAE,kBAAkB;AACpB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,EAAE,mBAAmB;AACrB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;;;;;;;;;;ACxBa;;AAEb;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACnFa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","sources":["webpack://mito_ai/./src/Extensions/AiChat/AiChatPlugin.ts","webpack://mito_ai/./src/Extensions/AiChat/CTACarousel.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatHistoryManager.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/AlertBlock.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/AssistantCodeBlock.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/ChatDropdown.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/ChatInput.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/ChatMessage.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/Citation.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/CodeBlockToolbar.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/MarkdownBlock.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/PythonCode.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/ScrollableSuggestions.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatMessage/UserCodeBlock.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatTaskpane.tsx","webpack://mito_ai/./src/Extensions/AiChat/ChatWidget.tsx","webpack://mito_ai/./src/Extensions/AiChat/CodeDiffDisplay.tsx","webpack://mito_ai/./src/Extensions/AiChat/FirstMessage.ts","webpack://mito_ai/./src/Extensions/AiChat/token.ts","webpack://mito_ai/./src/Extensions/AppBuilder/AppBuilderPlugin.ts","webpack://mito_ai/./src/Extensions/AppBuilder/DeployAppNotification.tsx","webpack://mito_ai/./src/Extensions/AppBuilder/NotebookToStreamlit.tsx","webpack://mito_ai/./src/Extensions/AppBuilder/cellConversionUtils.tsx","webpack://mito_ai/./src/Extensions/AppBuilder/fileUtils.tsx","webpack://mito_ai/./src/Extensions/AppBuilder/requirementsUtils.tsx","webpack://mito_ai/./src/Extensions/AppBuilder/visualizationConversionUtils.tsx","webpack://mito_ai/./src/Extensions/ContextManager/ContextManagerPlugin.ts","webpack://mito_ai/./src/Extensions/ContextManager/FileInspector.tsx","webpack://mito_ai/./src/Extensions/ContextManager/VariableInspector.tsx","webpack://mito_ai/./src/Extensions/ErrorMimeRenderer/CollapsibleWarningBlock.tsx","webpack://mito_ai/./src/Extensions/ErrorMimeRenderer/ErrorMimeRendererPlugin.tsx","webpack://mito_ai/./src/Extensions/ErrorMimeRenderer/errorUtils.tsx","webpack://mito_ai/./src/Extensions/NotebookFooter/NotebookFooter.tsx","webpack://mito_ai/./src/Extensions/NotebookFooter/index.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/SettingsManagerPlugin.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/SettingsWidget.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/database/ConnectionForm.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/database/ConnectionList.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/database/DatabasePage.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/database/model.ts","webpack://mito_ai/./src/Extensions/SettingsManager/general/GeneralPage.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/rules/RulesForm.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/rules/RulesPage.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/support/SupportPage.tsx","webpack://mito_ai/./src/Extensions/ToolbarButtons/ToolbarButtonsPlugin.tsx","webpack://mito_ai/./src/Extensions/VersionCheck/index.ts","webpack://mito_ai/./src/Extensions/emptyCell/EmptyCellPlugin.ts","webpack://mito_ai/./src/Extensions/emptyCell/emptyCell.ts","webpack://mito_ai/./src/Extensions/status/index.tsx","webpack://mito_ai/./src/commands.tsx","webpack://mito_ai/./src/components/AgentToolComponents/GetCellOutputToolUI.tsx","webpack://mito_ai/./src/components/DropdownMenu.tsx","webpack://mito_ai/./src/components/IconButton.tsx","webpack://mito_ai/./src/components/LoadingCircle.tsx","webpack://mito_ai/./src/components/LoadingDots.tsx","webpack://mito_ai/./src/components/ModelSelector.tsx","webpack://mito_ai/./src/components/NextStepsPills.tsx","webpack://mito_ai/./src/components/SelectedContextContainer.tsx","webpack://mito_ai/./src/components/TextAndIconButton.tsx","webpack://mito_ai/./src/components/TextButton.tsx","webpack://mito_ai/./src/components/ToggleButton.tsx","webpack://mito_ai/./src/hooks/useDebouncedFunction.tsx","webpack://mito_ai/./src/icons/AcceptIcon.tsx","webpack://mito_ai/./src/icons/CodeIcon.tsx","webpack://mito_ai/./src/icons/CopyIcon.tsx","webpack://mito_ai/./src/icons/ExpandIcon.tsx","webpack://mito_ai/./src/icons/MagicWand.tsx","webpack://mito_ai/./src/icons/MagnifyingGlassIcon.tsx","webpack://mito_ai/./src/icons/MitoLogo.tsx","webpack://mito_ai/./src/icons/NotebookFooter/CodeIcon.tsx","webpack://mito_ai/./src/icons/NotebookFooter/TextIcon.tsx","webpack://mito_ai/./src/icons/NucleausIcon.tsx","webpack://mito_ai/./src/icons/Pencil.tsx","webpack://mito_ai/./src/icons/PlayButtonIcon.tsx","webpack://mito_ai/./src/icons/RejectIcon.tsx","webpack://mito_ai/./src/icons/RuleIcon.tsx","webpack://mito_ai/./src/icons/UndoIcon.tsx","webpack://mito_ai/./src/icons/index.ts","webpack://mito_ai/./src/index.ts","webpack://mito_ai/./src/restAPI/RestAPI.tsx","webpack://mito_ai/./src/restAPI/utils.ts","webpack://mito_ai/./src/utils/agentActions.tsx","webpack://mito_ai/./src/utils/arrays.tsx","webpack://mito_ai/./src/utils/blacklistedWords.tsx","webpack://mito_ai/./src/utils/checkpoint.tsx","webpack://mito_ai/./src/utils/classNames.tsx","webpack://mito_ai/./src/utils/codeDiff.tsx","webpack://mito_ai/./src/utils/copyToClipboard.tsx","webpack://mito_ai/./src/utils/errors.tsx","webpack://mito_ai/./src/utils/fileName.tsx","webpack://mito_ai/./src/utils/nodeToPng.tsx","webpack://mito_ai/./src/utils/notebook.tsx","webpack://mito_ai/./src/utils/scroll.tsx","webpack://mito_ai/./src/utils/scrollMask.ts","webpack://mito_ai/./src/utils/sleep.ts","webpack://mito_ai/./src/utils/strings.tsx","webpack://mito_ai/./src/utils/stripe.tsx","webpack://mito_ai/./src/utils/user.tsx","webpack://mito_ai/./src/utils/version_check.ts","webpack://mito_ai/./src/utils/waitForNotebookReady.ts","webpack://mito_ai/./src/websockets/BaseWebsocketClient.ts","webpack://mito_ai/./src/websockets/appBuilder/appBuilderWebsocketClient.ts","webpack://mito_ai/./src/websockets/completions/CompletionsWebsocketClient.ts","webpack://mito_ai/./style/CTACarousel.css","webpack://mito_ai/./style/ChatDropdown.css","webpack://mito_ai/./style/ChatInput.css","webpack://mito_ai/./style/ChatMessage.css","webpack://mito_ai/./style/ChatTaskpane.css","webpack://mito_ai/./style/Citation.css","webpack://mito_ai/./style/CodeBlock.css","webpack://mito_ai/./style/ConnectionForm.css","webpack://mito_ai/./style/DatabasePage.css","webpack://mito_ai/./style/DropdownMenu.css","webpack://mito_ai/./style/ErrorMimeRendererPlugin.css","webpack://mito_ai/./style/GetCellOutputToolUI.css","webpack://mito_ai/./style/IconButton.css","webpack://mito_ai/./style/MarkdownMessage.css","webpack://mito_ai/./style/ModelSelector.css","webpack://mito_ai/./style/NextStepsPills.css","webpack://mito_ai/./style/NotebookFooter.css","webpack://mito_ai/./style/PythonCode.css","webpack://mito_ai/./style/RulesForm.css","webpack://mito_ai/./style/SelectedContextContainer.css","webpack://mito_ai/./style/SettingsWidget.css","webpack://mito_ai/./style/TextAndIconButton.css","webpack://mito_ai/./style/TextButton.css","webpack://mito_ai/./style/ToggleButton.css","webpack://mito_ai/./style/button.css","webpack://mito_ai/./node_modules/css-loader/dist/runtime/api.js","webpack://mito_ai/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://mito_ai/./node_modules/react-dom/client.js","webpack://mito_ai/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://mito_ai/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://mito_ai/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://mito_ai/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://mito_ai/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://mito_ai/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://mito_ai/./style/CTACarousel.css?7ae2","webpack://mito_ai/./style/ChatDropdown.css?755b","webpack://mito_ai/./style/ChatInput.css?c747","webpack://mito_ai/./style/ChatMessage.css?36ed","webpack://mito_ai/./style/ChatTaskpane.css?4c0b","webpack://mito_ai/./style/Citation.css?0072","webpack://mito_ai/./style/CodeBlock.css?26a8","webpack://mito_ai/./style/ConnectionForm.css?cf3b","webpack://mito_ai/./style/DatabasePage.css?8132","webpack://mito_ai/./style/DropdownMenu.css?97e9","webpack://mito_ai/./style/ErrorMimeRendererPlugin.css?b90c","webpack://mito_ai/./style/GetCellOutputToolUI.css?cae1","webpack://mito_ai/./style/IconButton.css?1323","webpack://mito_ai/./style/MarkdownMessage.css?7efd","webpack://mito_ai/./style/ModelSelector.css?b1fc","webpack://mito_ai/./style/NextStepsPills.css?f0e9","webpack://mito_ai/./style/NotebookFooter.css?57d5","webpack://mito_ai/./style/PythonCode.css?0896","webpack://mito_ai/./style/RulesForm.css?162f","webpack://mito_ai/./style/SelectedContextContainer.css?b8d8","webpack://mito_ai/./style/SettingsWidget.css?8851","webpack://mito_ai/./style/TextAndIconButton.css?96d3","webpack://mito_ai/./style/TextButton.css?d5ee","webpack://mito_ai/./style/ToggleButton.css?9913","webpack://mito_ai/./style/button.css?9025"],"sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport {\n ILabShell,\n ILayoutRestorer,\n JupyterFrontEnd,\n JupyterFrontEndPlugin,\n} from '@jupyterlab/application';\nimport { ICommandPalette, WidgetTracker } from '@jupyterlab/apputils';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { buildChatWidget, type ChatWidget } from './ChatWidget';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { COMMAND_MITO_AI_OPEN_CHAT } from '../../commands';\nimport { IChatTracker } from './token';\nimport { ReadonlyPartialJSONObject } from '@lumino/coreutils';\nimport { IContextManager } from '../ContextManager/ContextManagerPlugin';\n\n// The Widget Rank determins where the ChatIcon is displayed\n// in the left hand toolbar\nconst WIDGET_RANK = 2000\n\n\n/**\n * Initialization data for the mito-ai extension.\n */\nconst AiChatPlugin: JupyterFrontEndPlugin<WidgetTracker> = {\n id: 'mito_ai:chat',\n description: 'AI chat for JupyterLab',\n autoStart: true,\n requires: [\n ILabShell,\n INotebookTracker,\n ICommandPalette,\n IRenderMimeRegistry,\n IContextManager\n ],\n optional: [ILayoutRestorer],\n provides: IChatTracker,\n activate: (\n app: JupyterFrontEnd,\n labShell: ILabShell,\n notebookTracker: INotebookTracker,\n palette: ICommandPalette,\n rendermime: IRenderMimeRegistry,\n contextManager: IContextManager,\n restorer: ILayoutRestorer | null,\n ): WidgetTracker<ChatWidget> => {\n\n // Define a widget creator function,\n // then call it to make a new widget\n const newWidget = (): ChatWidget => {\n // Create a blank content widget inside of a MainAreaWidget\n const chatWidget = buildChatWidget(\n app,\n notebookTracker,\n rendermime,\n contextManager,\n );\n return chatWidget;\n };\n\n let widget = newWidget();\n\n // Add an application command\n app.commands.addCommand(COMMAND_MITO_AI_OPEN_CHAT, {\n label: 'Your friendly Python Expert chat bot',\n execute: (args?: ReadonlyPartialJSONObject) => {\n // In order for the widget to be accessible, the widget must be:\n // 1. Created\n // 2. Added to the widget tracker\n // 3. Attatched to the frontend\n\n // Step 1: Create the widget if its not already created\n if (!widget || widget.isDisposed) {\n widget = newWidget();\n }\n\n // Step 2: Add the widget to the widget tracker if\n // its not already there\n if (!tracker.has(widget)) {\n void tracker.add(widget);\n }\n\n // Step 3: Attatch the widget to the app if its not already there\n if (!widget.isAttached) {\n void app.shell.add(widget, 'left', { rank: WIDGET_RANK });\n }\n\n // Now that the widget is added to the shell, activating it will open the taskpane\n app.shell.activateById(widget.id);\n\n // If the command is called with focus on chat input set to false, \n // don't focus. This is useful when we don't want to active cell \n // preview to be displayed when using the smart debugger.\n if (args?.focusChatInput === false) {\n return;\n }\n\n // Set focus on the chat input\n const chatInput: HTMLTextAreaElement | null = widget.node.querySelector('.chat-input');\n chatInput?.focus();\n }\n });\n\n app.commands.addKeyBinding({\n command: COMMAND_MITO_AI_OPEN_CHAT,\n keys: ['Accel E'],\n selector: 'body'\n });\n\n app.shell.add(widget, 'left', { rank: WIDGET_RANK });\n\n // Add the command to the palette.\n palette.addItem({\n command: COMMAND_MITO_AI_OPEN_CHAT,\n category: 'AI Chat'\n });\n\n // Track and restore the widget state\n const tracker = new WidgetTracker<ChatWidget>({\n namespace: widget.id\n });\n if (!tracker.has(widget)) {\n void tracker.add(widget);\n }\n\n if (restorer) {\n restorer.add(widget, 'mito_ai');\n } \n \n // Instead of immediately activating the chat widget, wait for app restoration to complete\n // This ensures our widget activation happens after JupyterLab's initial setup which by \n // default tries to open the file browser instead. \n // TODO: It might be nice to only open to chat if a notebook is already open. If a \n // notebook is not already open, then users might want to open to the file browser, \n void app.restored.then(() => {\n // Activate our chat widget after JupyterLab has fully initialized\n // This will override the default file browser selection\n labShell.activateById(widget.id);\n });\n\n // By returning a tracker token, we can require the token in other \n // plugins. This allows us to force plugin load order. For example, \n // we can ensure that the COMMAND_MITO_AI_OPEN_CHAT is created \n // before trying to use it in other plugins\n return tracker;\n }\n};\n\nexport default AiChatPlugin;\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState } from 'react';\nimport { JupyterFrontEnd } from '@jupyterlab/application';\nimport { COMMAND_MITO_AI_SETTINGS } from '../SettingsManager/SettingsManagerPlugin';\nimport '../../../style/CTACarousel.css';\n\ninterface CTACarouselProps {\n app: JupyterFrontEnd;\n}\n\nconst CTACarousel: React.FC<CTACarouselProps> = ({ app }) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n\n // Define messages inside component to access app prop\n const CTACAROUSEL_MESSAGES = [\n {\n content: (\n <span>\n Generate more than just Python code. Talk to your database, no SQL required.\n <br />\n <button\n className=\"button-base button-gray cta-carousel-button\"\n onClick={() => app.commands.execute(COMMAND_MITO_AI_SETTINGS)}\n data-testid=\"cta-carousel-button\"\n >\n <b>+ Add Database</b>\n </button>\n </span>\n )\n },\n {\n content: <span>Use Agent mode to let the AI write and execute cells on your behalf.</span>\n },\n {\n content: <span>Use @ to reference your variables, files, rules, and more.</span>\n }\n ];\n\n const currentMessage = CTACAROUSEL_MESSAGES[Math.min(currentIndex, CTACAROUSEL_MESSAGES.length - 1)]!.content;\n\n return (\n <div className=\"cta-carousel\">\n <div className=\"cta-carousel-container\">\n <div className=\"cta-message\" data-testid=\"cta-message\">\n {currentMessage}\n </div>\n </div>\n <div className=\"cta-carousel-dots\">\n {CTACAROUSEL_MESSAGES.map((_, index) => (\n <div\n key={index}\n className={`cta-carousel-dot ${index === currentIndex ? 'active' : ''}`}\n onClick={() => setCurrentIndex(index)}\n data-testid=\"cta-carousel-dot\"\n role=\"button\"\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default CTACarousel;\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport OpenAI from \"openai\";\nimport { IContextManager } from \"../ContextManager/ContextManagerPlugin\";\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { getActiveCellCode, getActiveCellID, getAIOptimizedCells, getCellCodeByID } from \"../../utils/notebook\";\nimport { AgentResponse, IAgentExecutionMetadata, IAgentSmartDebugMetadata, IChatMessageMetadata, ICodeExplainMetadata, ISmartDebugMetadata } from \"../../websockets/completions/CompletionModels\";\nimport { addMarkdownCodeFormatting } from \"../../utils/strings\";\nimport { isChromeBasedBrowser } from \"../../utils/user\";\n\nexport type PromptType = \n 'chat' | \n 'smartDebug' | \n 'codeExplain' | \n 'agent:execution' | \n 'agent:autoErrorFixup' |\n 'inline_completion' | \n 'fetch_history' |\n 'start_new_chat' |\n 'get_threads' |\n 'delete_thread' |\n 'update_model_config';\n\nexport type ChatMessageType = 'openai message' | 'connection error'\n\n// The display optimized chat history is what we display to the user. Each message\n// is a subset of the corresponding message in aiOptimizedChatHistory. Note that in the \n// displayOptimizedChatHistory, we also include connection error messages so that we can \n// display them in the chat interface. For example, if the user does not have an API key set, \n// we add a message to the chat ui that tells them to set an API key.\nexport interface IDisplayOptimizedChatItem {\n message: OpenAI.Chat.ChatCompletionMessageParam\n type: ChatMessageType,\n promptType: PromptType,\n mitoAIConnectionErrorType?: string | null,\n codeCellID?: string | undefined,\n agentResponse?: AgentResponse\n}\n\n/* \n The ChatHistoryManager is responsible for managing the AI chat history.\n\n It keeps track of messages displayed in the chat interface that only display info the user wants to see, like their original input.\n\n TODO: In the future, we should make this its own extension that provides an interface for adding new messages to the chat history,\n creating new chats, etc. Doing so would allow us to easily append new messages from other extensions without having to do so \n by calling commands with untyped arguments.\n\n Whenever, the chatHistoryManager is updated, it should automatically send a message to the AI. \n*/\nexport class ChatHistoryManager {\n private displayOptimizedChatHistory: IDisplayOptimizedChatItem[];\n private contextManager: IContextManager;\n private notebookTracker: INotebookTracker;\n\n constructor(contextManager: IContextManager, notebookTracker: INotebookTracker, initialHistory?: IDisplayOptimizedChatItem[]) {\n // Initialize the history\n this.displayOptimizedChatHistory = initialHistory || [];\n\n // Save the context manager\n this.contextManager = contextManager;\n\n // Save the notebook tracker\n this.notebookTracker = notebookTracker;\n }\n\n createDuplicateChatHistoryManager(): ChatHistoryManager {\n return new ChatHistoryManager(this.contextManager, this.notebookTracker, this.displayOptimizedChatHistory);\n }\n\n getDisplayOptimizedHistory(): IDisplayOptimizedChatItem[] {\n return this.displayOptimizedChatHistory;\n }\n\n addChatMessageFromHistory(message: OpenAI.Chat.ChatCompletionMessageParam): void {\n this.displayOptimizedChatHistory.push(\n {\n message: message, \n type: 'openai message',\n codeCellID: undefined,\n promptType: 'chat'\n }\n );\n }\n\n async addChatInputMessage(input: string, activeThreadId: string, messageIndex?: number, selectedRules?: string[]): Promise<IChatMessageMetadata> {\n const activeCellCode = getActiveCellCode(this.notebookTracker) || ''\n const activeCellID = getActiveCellID(this.notebookTracker) || ''\n\n const chatMessageMetadata: IChatMessageMetadata = {\n promptType: 'chat',\n variables: this.contextManager.variables,\n files: this.contextManager.files,\n activeCellCode: activeCellCode,\n activeCellId: activeCellID,\n input: input,\n threadId: activeThreadId,\n index: messageIndex,\n selectedRules: selectedRules\n }\n\n this.displayOptimizedChatHistory.push(\n {\n message: getDisplayedOptimizedUserMessage(input, activeCellCode), \n type: 'openai message',\n codeCellID: activeCellID,\n promptType: 'chat'\n }\n );\n\n return chatMessageMetadata\n }\n\n addAgentExecutionMessage(activeThreadId: string, input?: string, selectedRules?: string[]): IAgentExecutionMetadata {\n\n const aiOptimizedCells = getAIOptimizedCells(this.notebookTracker)\n\n const agentExecutionMetadata: IAgentExecutionMetadata = {\n promptType: 'agent:execution',\n variables: this.contextManager.variables,\n files: this.contextManager.files,\n aiOptimizedCells: aiOptimizedCells,\n input: input || '',\n threadId: activeThreadId,\n isChromeBrowser: isChromeBasedBrowser(),\n selectedRules: selectedRules\n }\n\n // We use this function in two ways: \n // 1. When the user sends the original agent:execution message to start the agent\n // 2. When the agent sends itself information about the updated variables, etc. In this case, \n // we don't want to pass an input. \n let userMessage: OpenAI.Chat.ChatCompletionMessageParam\n if (input) {\n userMessage = getDisplayedOptimizedUserMessage(input)\n } else {\n userMessage = {\n role: 'user',\n content: ''\n }\n }\n\n this.displayOptimizedChatHistory.push(\n {\n message: userMessage,\n type: 'openai message',\n promptType: 'chat',\n }\n )\n\n return agentExecutionMetadata\n }\n\n dropMessagesStartingAtIndex(index: number): void {\n this.displayOptimizedChatHistory.splice(index)\n }\n\n\n addSmartDebugMessage(activeThreadId: string, errorMessage: string): ISmartDebugMetadata {\n \n const activeCellID = getActiveCellID(this.notebookTracker) || ''\n const activeCellCode = getCellCodeByID(this.notebookTracker, activeCellID) || ''\n\n const smartDebugMetadata: ISmartDebugMetadata = {\n promptType: 'smartDebug',\n variables: this.contextManager.variables,\n files: this.contextManager.files,\n activeCellCode: activeCellCode,\n activeCellId: activeCellID,\n errorMessage: errorMessage,\n threadId: activeThreadId\n }\n\n this.displayOptimizedChatHistory.push(\n {\n message: getDisplayedOptimizedUserMessage(errorMessage, activeCellCode), \n type: 'openai message',\n codeCellID: activeCellID,\n promptType: 'smartDebug'\n }\n );\n\n return smartDebugMetadata\n }\n\n addAgentSmartDebugMessage(activeThreadId: string, errorMessage: string): IAgentSmartDebugMetadata {\n\n const activeCellID = getActiveCellID(this.notebookTracker)\n const activeCellCode = getActiveCellCode(this.notebookTracker)\n\n const agentSmartDebugMetadata: IAgentSmartDebugMetadata = {\n promptType: 'agent:autoErrorFixup',\n aiOptimizedCells: getAIOptimizedCells(this.notebookTracker),\n variables: this.contextManager.variables,\n files: this.contextManager.files,\n errorMessage: errorMessage,\n error_message_producing_code_cell_id: activeCellID || '',\n threadId: activeThreadId,\n isChromeBrowser: isChromeBasedBrowser()\n }\n\n this.displayOptimizedChatHistory.push(\n {\n message: getDisplayedOptimizedUserMessage(errorMessage, activeCellCode), \n type: 'openai message',\n codeCellID: activeCellID,\n promptType: 'agent:autoErrorFixup'\n }\n );\n\n return agentSmartDebugMetadata\n }\n\n addExplainCodeMessage(activeThreadId: string): ICodeExplainMetadata {\n\n const activeCellID = getActiveCellID(this.notebookTracker)\n const activeCellCode = getCellCodeByID(this.notebookTracker, activeCellID)\n\n const codeExplainMetadata: ICodeExplainMetadata = {\n promptType: 'codeExplain',\n variables: this.contextManager.variables,\n activeCellCode,\n threadId: activeThreadId\n }\n\n this.displayOptimizedChatHistory.push(\n {\n message: getDisplayedOptimizedUserMessage('Explain this code', activeCellCode), \n type: 'openai message',\n codeCellID: activeCellID,\n promptType: 'codeExplain'\n }\n );\n\n return codeExplainMetadata\n }\n\n addAIMessageFromResponse(\n messageContent: string | null, \n promptType: PromptType, \n mitoAIConnectionError: boolean=false,\n mitoAIConnectionErrorType: string | null = null\n ): void {\n if (messageContent === null) {\n return\n }\n\n const aiMessage: OpenAI.Chat.ChatCompletionMessageParam = {\n role: 'assistant',\n content: messageContent\n }\n\n let type: IDisplayOptimizedChatItem['type'];\n if (mitoAIConnectionError) {\n type = 'connection error';\n } else {\n type = 'openai message';\n }\n\n const activeCellID = getActiveCellID(this.notebookTracker)\n\n this.displayOptimizedChatHistory.push(\n {\n message: aiMessage, \n type: type,\n mitoAIConnectionErrorType: mitoAIConnectionErrorType,\n codeCellID: activeCellID,\n promptType: promptType\n }\n );\n }\n\n addStreamingAIMessage(\n messageContent: string,\n promptType: PromptType\n ): void {\n // Find the last AI message in the history\n const lastAIMessageIndex = this.getLastAIMessageIndex();\n \n if (\n lastAIMessageIndex === undefined || \n this.displayOptimizedChatHistory.length !== lastAIMessageIndex + 1\n ) {\n // If no AI message exists, create a new one\n this.addAIMessageFromResponse(messageContent, promptType);\n } else {\n // Update the last AI message with the new content\n const lastMessage = this.displayOptimizedChatHistory[lastAIMessageIndex];\n if (lastMessage) {\n lastMessage.message.content = messageContent;\n }\n }\n }\n\n addAIMessageFromAgentResponse(agentResponse: AgentResponse): void {\n\n let content = agentResponse.message\n if (agentResponse.type === 'cell_update') {\n // For cell_update messages, we want to display the code the agent wrote along with \n // the message it sent. For all other agent responses, we ignore all other fields\n // and just display the message.\n const code = agentResponse.cell_update?.code\n const codeWithMarkdownFormatting = addMarkdownCodeFormatting(code)\n\n if (codeWithMarkdownFormatting !== undefined) {\n content = content + '\\n\\n' + codeWithMarkdownFormatting\n }\n }\n\n const aiMessage: OpenAI.Chat.ChatCompletionMessageParam = {\n role: 'assistant',\n content: content\n }\n\n this.displayOptimizedChatHistory.push(\n {\n message: aiMessage, \n type: 'openai message',\n promptType: 'agent:execution',\n agentResponse: agentResponse\n }\n );\n }\n\n getLastAIMessageIndex = (): number | undefined => {\n // We assume that assistant messages are always separated by user messages.\n // This allows us to simply find the last assistant message in the history.\n // If this invariant changes (e.g., if we need to support consecutive assistant messages),\n // we should modify this to use message IDs instead.\n const displayOptimizedChatHistory = this.getDisplayOptimizedHistory()\n const aiMessageIndexes = displayOptimizedChatHistory.map((chatEntry, index) => {\n if (chatEntry.message.role === 'assistant') {\n return index\n }\n return undefined\n }).filter(index => index !== undefined)\n \n return aiMessageIndexes[aiMessageIndexes.length - 1]\n }\n\n getLastAIDisplayOptimizedChatItem = (): IDisplayOptimizedChatItem | undefined=> {\n const lastAIMessagesIndex = this.getLastAIMessageIndex()\n if (!lastAIMessagesIndex) {\n return\n }\n\n return this.displayOptimizedChatHistory[lastAIMessagesIndex]\n }\n}\n\n\nconst getDisplayedOptimizedUserMessage = (\n input: string, \n activeCellCode?: string, \n messageToAgent: boolean = false\n): OpenAI.Chat.ChatCompletionMessageParam => {\n\n // Don't include the active cell code if it is an agent planning message\n // or if the there is no active cell code provided, which occurs when\n // sending an agent:execution message which uses the entire notebook as context\n // instead of just the active cell\n let activeCellCodeBlock = ''\n if (!messageToAgent && activeCellCode) {\n activeCellCodeBlock = \n`\\`\\`\\`python\n${activeCellCode}\n\\`\\`\\``\n\n }\n\n return {\n role: 'user',\n content:\n`${activeCellCodeBlock}\n${input}`\n };\n}\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport TextButton from '../../../components/TextButton';\nimport { FREE_TIER_LIMIT_REACHED_ERROR_TITLE } from '../../../utils/errors';\nimport { STRIPE_PAYMENT_LINK } from '../../../utils/stripe';\n\n\ninterface IAlertBlockProps {\n content: string;\n mitoAIConnectionErrorType: string | null;\n}\n\nconst AlertBlock: React.FC<IAlertBlockProps> = ({ content, mitoAIConnectionErrorType }) => {\n\n if (mitoAIConnectionErrorType === FREE_TIER_LIMIT_REACHED_ERROR_TITLE) {\n return (\n <div className=\"chat-message-alert\">\n <p>\n You&apos;ve used up your free trial of Mito AI for this month. To continue using Mito AI now, upgrade to <a href=\"https://www.trymito.io/plans\" target=\"_blank\" rel=\"noreferrer\">Mito Pro</a> and get access to:\n </p>\n <ul>\n <li>Unlimited AI Chat and Agent</li>\n <li>Unlimited AI Autocompletes</li>\n <li>All Mito Spreadsheet Pro features</li>\n </ul>\n <p>\n Or supply your own Open AI Key to continue using the basic version of Mito AI. \n </p>\n <TextButton\n title=\"Upgrade to Pro\"\n text=\"Upgrade to Pro\"\n action={STRIPE_PAYMENT_LINK}\n variant=\"purple\"\n width=\"block\"\n />\n </div>\n );\n }\n\n return (\n <div className=\"chat-message-alert\">\n {content}\n </div>\n );\n};\n\nexport default AlertBlock;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState, useMemo } from 'react';\nimport PythonCode from './PythonCode';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { classNames } from '../../../utils/classNames';\nimport '../../../../style/CodeBlock.css'\nimport { CodeReviewStatus } from '../ChatTaskpane';\nimport ExpandIcon from '../../../icons/ExpandIcon';\nimport CodeIcon from '../../../icons/CodeIcon';\nimport CodeBlockToolbar from './CodeBlockToolbar';\n\ninterface IAssistantCodeBlockProps {\n code: string;\n isCodeComplete: boolean;\n renderMimeRegistry: IRenderMimeRegistry;\n previewAICode: () => void;\n acceptAICode: () => void;\n rejectAICode: () => void;\n isLastAiMessage: boolean;\n codeReviewStatus: CodeReviewStatus;\n agentModeEnabled: boolean;\n}\n\nconst AssistantCodeBlock: React.FC<IAssistantCodeBlockProps> = ({\n code,\n isCodeComplete,\n renderMimeRegistry,\n previewAICode,\n acceptAICode,\n rejectAICode,\n isLastAiMessage,\n codeReviewStatus,\n agentModeEnabled\n}) => {\n const [isCodeExpanded, setIsCodeExpanded] = useState(false);\n\n // Memoize calculations\n const lineCount = useMemo(() => code.split('\\n').length - 2, [code]);\n\n const shouldShowToolbar = isLastAiMessage || isCodeComplete;\n\n if (agentModeEnabled) {\n return (\n <div className={classNames('code-block-container', {\n 'agent-mode': true,\n 'agent-mode-collapsed': !isCodeExpanded\n })}>\n <div\n onClick={() => setIsCodeExpanded(!isCodeExpanded)}\n className={classNames('agent-mode-toggle', {\n expanded: isCodeExpanded\n })}\n >\n <span className=\"agent-mode-toggle-content\">\n <CodeIcon />\n Generated {lineCount} lines of code\n </span>\n <ExpandIcon isExpanded={isCodeExpanded} />\n </div>\n {isCodeExpanded && (\n <PythonCode\n code={code}\n renderMimeRegistry={renderMimeRegistry}\n />\n )}\n </div>\n );\n } else {\n return (\n <div className=\"code-block-container\">\n {shouldShowToolbar && (\n <CodeBlockToolbar\n code={code}\n isLastAiMessage={isLastAiMessage}\n codeReviewStatus={codeReviewStatus}\n onPreview={previewAICode}\n onAccept={acceptAICode}\n onReject={rejectAICode}\n />\n )}\n <PythonCode\n code={code}\n renderMimeRegistry={renderMimeRegistry}\n />\n </div>\n );\n }\n};\n\nexport default AssistantCodeBlock;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { classNames } from '../../../utils/classNames';\nimport { ExpandedVariable } from './ChatInput';\nimport { getRules } from '../../../restAPI/RestAPI';\n\ninterface ChatDropdownProps {\n options: ExpandedVariable[];\n onSelect: (option: ChatDropdownOption) => void;\n filterText: string;\n maxDropdownItems?: number;\n position?: 'above' | 'below';\n}\n\ninterface ChatDropdownVariableOption {\n type: 'variable'\n variable: ExpandedVariable;\n}\n\ninterface ChatDropdownRuleOption {\n type: 'rule'\n rule: string;\n}\n\nexport type ChatDropdownOption = ChatDropdownVariableOption | ChatDropdownRuleOption;\n\nconst ChatDropdown: React.FC<ChatDropdownProps> = ({\n options,\n onSelect,\n filterText,\n maxDropdownItems = 10,\n}) => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n const [rules, setRules] = useState<string[]>([]);\n\n useEffect(() => {\n const fetchRules = async (): Promise<void> => {\n const rules = await getRules();\n setRules(rules);\n };\n void fetchRules();\n }, []);\n\n // Create a list of all options with the format \n // ['type': 'variable', \"expandedVariable\": variable]\n // ['type': 'rule', \"rule\": rule]\n const allOptions: ChatDropdownOption[] = [\n ...options.map((variable): ChatDropdownVariableOption => ({ \n type: 'variable', \n variable: variable \n })),\n ...rules.map((rule): ChatDropdownRuleOption => ({ \n type: 'rule', \n rule: rule \n })),\n ];\n\n const filteredOptions = allOptions.filter((option) =>\n option.type === 'variable' ?\n option.variable.variable_name.toLowerCase().includes(filterText.toLowerCase()) &&\n option.variable.type !== \"<class 'module'>\" &&\n option.variable.variable_name !== \"FUNCTIONS\" // This is default exported from mitosheet when you run from mitosheet import * as FUNCTIONS\n :\n option.rule.toLowerCase().includes(filterText.toLowerCase())\n ).slice(0, maxDropdownItems);\n\n useEffect(() => {\n setSelectedIndex(0);\n }, [options, rules, filterText]);\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n case 'Down':\n event.preventDefault();\n setSelectedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : 0\n );\n break;\n case 'ArrowUp':\n case 'Up':\n event.preventDefault();\n setSelectedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredOptions.length - 1\n );\n break;\n case 'Enter':\n case 'Return':\n case 'Tab': {\n event.preventDefault();\n const selectedOption = filteredOptions[selectedIndex];\n if (selectedOption !== undefined) {\n if (selectedOption.type === 'variable') {\n onSelect(selectedOption);\n } else {\n onSelect(selectedOption);\n }\n }\n break;\n }\n }\n };\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [filteredOptions, selectedIndex]);\n\n\n\n\n return (\n <div className={`chat-dropdown`} data-testid=\"chat-dropdown\">\n <ul className=\"chat-dropdown-list\" data-testid=\"chat-dropdown-list\">\n {filteredOptions.length === 0 && (\n <li className=\"chat-dropdown-item\" data-testid=\"chat-dropdown-empty-item\">No variables found</li>\n )}\n\n {filteredOptions.map((option, index) => {\n let uniqueKey: string;\n if (option.type === 'variable') {\n uniqueKey = option.variable.parent_df\n ? `${option.variable.parent_df}.${option.variable.variable_name}`\n : option.variable.variable_name;\n } else {\n uniqueKey = option.rule;\n }\n\n if (option.type === 'variable') {\n return (\n <VariableDropdownItem\n key={uniqueKey}\n variable={option.variable}\n index={index} \n selectedIndex={selectedIndex}\n onSelect={() => onSelect(option)}\n />\n );\n } else {\n return (\n <RuleDropdownItem\n key={uniqueKey}\n rule={option.rule}\n index={index}\n selectedIndex={selectedIndex}\n onSelect={() => onSelect(option)}\n />\n )\n }\n })}\n </ul>\n </div>\n );\n};\n\nexport default ChatDropdown; \n\ninterface VariableDropdownItemProps {\n variable: ExpandedVariable;\n index: number;\n selectedIndex: number;\n onSelect: (variableName: string, parentDf: string | undefined) => void;\n}\n\nconst VariableDropdownItem: React.FC<VariableDropdownItemProps> = ({ variable, index, selectedIndex, onSelect }) => {\n\n const getShortType = (type: string): string => {\n if (type.includes(\"DataFrame\")) {\n return \"df\";\n }\n if (type.includes(\"Series\")) {\n return \"s\";\n }\n if (type.includes(\"<class '\")) {\n return type.split(\"'\")[1] ?? '';\n }\n return type;\n }\n \n return (\n <li\n className={classNames(\"chat-dropdown-item\", { selected: index === selectedIndex })}\n onClick={() => onSelect(variable.variable_name, variable.parent_df)}\n data-testid={`chat-dropdown-item-${variable.variable_name}`}\n >\n <span className=\"chat-dropdown-item-type\"\n title={getShortType(variable.type)}\n data-testid={`chat-dropdown-item-type-${variable.variable_name}`}\n >\n {getShortType(variable.type)}\n </span>\n <span\n className=\"chat-dropdown-item-name\"\n title={variable.variable_name}\n data-testid={`chat-dropdown-item-name-${variable.variable_name}`}\n ref={(el) => {\n // Show full text on hover if the text is too long\n if (el) {\n el.title = el.scrollWidth > el.clientWidth ? variable.variable_name : '';\n }\n }}\n >\n {variable.variable_name}\n </span>\n {variable.parent_df && (\n <span className=\"chat-dropdown-item-parent-df\">\n {variable.parent_df}\n </span>\n )}\n </li>\n )\n}\n\ninterface RuleDropdownItemProps {\n rule: string;\n index: number;\n selectedIndex: number;\n onSelect: (rule: string) => void;\n}\n\nconst RuleDropdownItem: React.FC<RuleDropdownItemProps> = ({ rule, index, selectedIndex, onSelect }) => {\n return (\n <li\n className={classNames(\"chat-dropdown-item\", { selected: index === selectedIndex })}\n onClick={() => onSelect(rule)}\n data-testid={`chat-dropdown-item-${rule}`}\n >\n {rule}\n </li>\n )\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { classNames } from '../../../utils/classNames';\nimport { IContextManager } from '../../ContextManager/ContextManagerPlugin';\nimport ChatDropdown from './ChatDropdown';\nimport { Variable } from '../../ContextManager/VariableInspector';\nimport { getActiveCellID, getCellCodeByID } from '../../../utils/notebook';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport PythonCode from './PythonCode';\nimport '../../../../style/ChatInput.css';\nimport '../../../../style/ChatDropdown.css';\nimport { useDebouncedFunction } from '../../../hooks/useDebouncedFunction';\nimport { ChatDropdownOption } from './ChatDropdown';\nimport SelectedContextContainer from '../../../components/SelectedContextContainer';\n\ninterface ChatInputProps {\n initialContent: string;\n placeholder: string;\n onSave: (content: string, index?: number, selectedRules?: string[]) => void;\n onCancel?: () => void;\n isEditing: boolean;\n contextManager?: IContextManager;\n notebookTracker: INotebookTracker;\n renderMimeRegistry: IRenderMimeRegistry;\n displayActiveCellCode?: boolean;\n agentModeEnabled: boolean;\n}\n\nexport interface ExpandedVariable extends Variable {\n parent_df?: string;\n file_name?: string;\n}\n\nconst ChatInput: React.FC<ChatInputProps> = ({\n initialContent,\n placeholder,\n onSave,\n onCancel,\n isEditing,\n contextManager,\n notebookTracker,\n renderMimeRegistry,\n displayActiveCellCode = true,\n agentModeEnabled = false,\n}) => {\n\n const [input, setInput] = useState(initialContent);\n const [expandedVariables, setExpandedVariables] = useState<ExpandedVariable[]>([]);\n const textAreaRef = React.useRef<HTMLTextAreaElement>(null);\n const [isFocused, setIsFocused] = useState(false);\n const [activeCellID, setActiveCellID] = useState<string | undefined>(getActiveCellID(notebookTracker));\n const [isDropdownVisible, setDropdownVisible] = useState(false);\n const [dropdownFilter, setDropdownFilter] = useState('');\n const [selectedRules, setSelectedRules] = useState<string[]>([]);\n\n // Debounce the active cell ID change to avoid multiple rerenders. \n // We use this to avoid a flickering screen when the active cell changes. \n const debouncedSetActiveCellID = useDebouncedFunction((newID: string | undefined) => {\n setActiveCellID(newID);\n }, 100);\n\n useEffect(() => {\n const activeCellChangedListener = (): void => { \n const newActiveCellID = getActiveCellID(notebookTracker);\n debouncedSetActiveCellID(newActiveCellID);\n };\n\n // Connect the listener once when the component mounts\n notebookTracker.activeCellChanged.connect(activeCellChangedListener);\n \n // Cleanup: disconnect the listener when the component unmounts\n return () => {\n notebookTracker.activeCellChanged.disconnect(activeCellChangedListener);\n };\n \n }, [notebookTracker, activeCellID, debouncedSetActiveCellID]);\n\n // TextAreas cannot automatically adjust their height based on the content that they contain, \n // so instead we re-adjust the height as the content changes here. \n const adjustHeight = (resetHeight: boolean = false): void => {\n const textarea = textAreaRef?.current;\n if (!textarea) return;\n\n textarea.style.minHeight = 'auto';\n textarea.style.height = !textarea.value || resetHeight\n ? '80px' \n : `${Math.max(80, textarea.scrollHeight)}px`;\n };\n\n useEffect(() => {\n adjustHeight();\n }, [textAreaRef?.current?.value]);\n\n const handleInputChange = (event: React.ChangeEvent<HTMLTextAreaElement>): void => {\n const value = event.target.value;\n setInput(value);\n\n const cursorPosition = event.target.selectionStart;\n const textBeforeCursor = value.slice(0, cursorPosition);\n const words = textBeforeCursor.split(/\\s+/);\n const currentWord = words[words.length - 1];\n\n if (currentWord && currentWord.startsWith(\"@\")) {\n const query = currentWord.slice(1);\n setDropdownFilter(query);\n setDropdownVisible(true);\n } else {\n setDropdownVisible(false);\n setDropdownFilter('');\n }\n };\n\n const handleOptionSelect = (option: ChatDropdownOption): void => {\n\n const textarea = textAreaRef.current;\n if (!textarea) return;\n\n const cursorPosition = textarea.selectionStart;\n const textBeforeCursor = input.slice(0, cursorPosition);\n const atIndex = textBeforeCursor.lastIndexOf(\"@\");\n const textAfterCursor = input.slice(cursorPosition);\n\n let contextChatRepresentation: string = ''\n\n if (option.type === 'variable') {\n \n if (option.variable.parent_df) {\n contextChatRepresentation = `\\`${option.variable.variable_name}\\``\n } else {\n contextChatRepresentation = `\\`${option.variable.variable_name}\\``\n }\n } else if (option.type === 'rule') {\n // We don't add the rule as an back ticked element in the chat input, \n // and instead just add it as plain text because we also add it as \n // a context container above the chat input and we want the user to \n // delete the context from there if they want to. \n contextChatRepresentation = option.rule\n setSelectedRules([...selectedRules, option.rule]);\n }\n\n const newValue =\n input.slice(0, atIndex) +\n contextChatRepresentation +\n textAfterCursor;\n setInput(newValue);\n\n setDropdownVisible(false);\n\n // After updating the input value, set the cursor position after the inserted variable name\n // We use setTimeout to ensure this happens after React's state update\n setTimeout(() => {\n if (textarea) {\n const newCursorPosition = atIndex + contextChatRepresentation.length;\n textarea.focus();\n textarea.setSelectionRange(newCursorPosition, newCursorPosition);\n }\n }, 0);\n };\n\n // Update the expandedVariables arr when the variable manager changes\n useEffect(() => {\n const expandedVariables: ExpandedVariable[] = [\n // Add base variables (excluding DataFrames)\n ...(contextManager?.variables.filter(variable => variable.type !== \"pd.DataFrame\") || []),\n // Add DataFrames\n ...(contextManager?.variables.filter((variable) => variable.type === \"pd.DataFrame\") || []),\n // Add series with parent DataFrame references\n ...(contextManager?.variables\n .filter((variable) => variable.type === \"pd.DataFrame\")\n .flatMap((df) =>\n Object.entries(df.value).map(([seriesName, _]) => ({\n variable_name: seriesName,\n type: \"col\",\n value: \"replace_me\",\n parent_df: df.variable_name,\n }))\n ) || []),\n // Add files\n ...(contextManager?.files.map(file => ({\n variable_name: file.file_name,\n type: file.file_name.split('.').pop()?.toLowerCase() || '',\n value: file.file_name,\n file_name: file.file_name\n })) || [])\n ];\n setExpandedVariables(expandedVariables);\n }, [contextManager?.variables, contextManager?.files]);\n\n // If there are more than 8 lines, show the first 8 lines and add a \"...\"\n const activeCellCode = getCellCodeByID(notebookTracker, activeCellID) || ''\n const activeCellCodePreview = activeCellCode.split('\\n').slice(0, 8).join('\\n') + (\n activeCellCode.split('\\n').length > 8 ? '\\n\\n# Rest of active cell code...' : '')\n\n return (\n <div \n className={classNames(\"chat-input-container\")}\n onFocus={() => setIsFocused(true)}\n onBlur={() => {\n setIsFocused(false)\n }}\n >\n {/* Show the active cell preview if the text area has focus or the user has started typing */}\n {selectedRules.length > 0 && (\n <div className='context-container'>\n {selectedRules.map((rule) => (\n <SelectedContextContainer\n key={rule}\n title={rule}\n onRemove={() => setSelectedRules(selectedRules.filter((r) => r !== rule))}\n />\n ))}\n </div>\n )}\n {displayActiveCellCode && activeCellCodePreview.length > 0 && !agentModeEnabled\n && (isFocused || input.length > 0)\n && <div className='active-cell-preview-container' data-testid='active-cell-preview-container'>\n <div className='code-block-container'>\n <PythonCode\n code={activeCellCodePreview}\n renderMimeRegistry={renderMimeRegistry}\n />\n </div>\n </div>\n }\n \n {/* \n Create a relative container for the text area and the dropdown so that when we \n render the dropdown, it is relative to the text area instead of the entire \n div. We do this so that the dropdown sits on top of (ie: covering) the code \n preview instead of sitting higher up the taskpane.\n */}\n <div className='chat-input-text-area-container'>\n <textarea\n ref={textAreaRef}\n className={classNames(\"message\", \"message-user\", 'chat-input', {\"agent-mode\": agentModeEnabled})}\n placeholder={placeholder}\n value={input}\n onChange={handleInputChange}\n onKeyDown={(e) => {\n // If dropdown is visible, only handle escape to close it\n if (isDropdownVisible) {\n if (e.key === 'Escape') {\n e.preventDefault();\n setDropdownVisible(false);\n }\n return;\n }\n\n // Enter key sends the message, but we still want to allow \n // shift + enter to add a new line.\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n adjustHeight(true)\n onSave(input, undefined, selectedRules)\n\n // Reset\n setInput('')\n setSelectedRules([])\n setIsFocused(false)\n }\n // Escape key cancels editing\n if (e.key === 'Escape') {\n e.preventDefault();\n if (onCancel) {\n onCancel();\n }\n }\n }}\n />\n {isDropdownVisible && (\n <ChatDropdown\n options={expandedVariables}\n onSelect={handleOptionSelect}\n filterText={dropdownFilter}\n />\n )}\n </div>\n \n {isEditing &&\n <div className=\"message-edit-buttons\">\n <button onClick={() => onSave(input, undefined, selectedRules)}>Save</button>\n <button onClick={onCancel}>Cancel</button>\n </div>\n }\n </div>\n )\n};\n\nexport default ChatInput;\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState } from 'react';\nimport OpenAI from 'openai';\nimport { classNames } from '../../../utils/classNames';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport UserCodeBlock from './UserCodeBlock';\nimport AssistantCodeBlock from './AssistantCodeBlock';\nimport AlertBlock from './AlertBlock';\nimport MarkdownBlock from './MarkdownBlock';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { getContentStringFromMessage, PYTHON_CODE_BLOCK_START_WITHOUT_NEW_LINE, splitStringWithCodeBlocks } from '../../../utils/strings';\nimport { JupyterFrontEnd } from '@jupyterlab/application';\nimport { OperatingSystem } from '../../../utils/user';\nimport PencilIcon from '../../../icons/Pencil';\nimport ChatInput from './ChatInput';\nimport { IContextManager } from '../../ContextManager/ContextManagerPlugin';\nimport { CodeReviewStatus } from '../ChatTaskpane';\nimport { ChatMessageType, PromptType } from '../ChatHistoryManager';\nimport TextAndIconButton from '../../../components/TextAndIconButton';\nimport PlayButtonIcon from '../../../icons/PlayButtonIcon';\nimport CopyIcon from '../../../icons/CopyIcon';\nimport copyToClipboard from '../../../utils/copyToClipboard';\nimport TextButton from '../../../components/TextButton';\nimport { IDisplayOptimizedChatItem } from '../ChatHistoryManager';\nimport '../../../../style/ChatMessage.css';\nimport '../../../../style/MarkdownMessage.css'\nimport { AgentResponse } from '../../../websockets/completions/CompletionModels';\nimport GetCellOutputToolUI from '../../../components/AgentToolComponents/GetCellOutputToolUI';\n\ninterface IChatMessageProps {\n message: OpenAI.Chat.ChatCompletionMessageParam\n messageType: IDisplayOptimizedChatItem['type']\n codeCellID: string | undefined\n agentResponse: AgentResponse | undefined\n messageIndex: number\n promptType: PromptType\n mitoAIConnectionError: boolean\n mitoAIConnectionErrorType: string | null\n notebookTracker: INotebookTracker\n renderMimeRegistry: IRenderMimeRegistry\n app: JupyterFrontEnd\n isLastAiMessage: boolean\n isLastMessage: boolean\n operatingSystem: OperatingSystem\n previewAICode: () => void\n acceptAICode: () => void\n rejectAICode: () => void\n onUpdateMessage: (messageIndex: number, newContent: string, messageType: ChatMessageType) => void\n contextManager?: IContextManager\n codeReviewStatus: CodeReviewStatus\n setNextSteps: (nextSteps: string[]) => void\n agentModeEnabled: boolean\n}\n\nconst ChatMessage: React.FC<IChatMessageProps> = ({\n message,\n messageType,\n promptType,\n agentResponse,\n messageIndex,\n mitoAIConnectionError,\n mitoAIConnectionErrorType,\n notebookTracker,\n renderMimeRegistry,\n isLastAiMessage,\n isLastMessage,\n operatingSystem,\n previewAICode,\n acceptAICode,\n rejectAICode,\n onUpdateMessage,\n contextManager,\n codeReviewStatus,\n setNextSteps,\n agentModeEnabled,\n}): JSX.Element | null => {\n const [isEditing, setIsEditing] = useState(false);\n\n if (message.role !== 'user' && message.role !== 'assistant') {\n return null;\n }\n\n const editable = message.role === 'user'\n\n const messageContentParts = splitStringWithCodeBlocks(message);\n\n const handleEditClick = (): void => {\n setIsEditing(true);\n };\n\n const handleSave = (content: string): void => {\n onUpdateMessage(messageIndex, content, messageType);\n setIsEditing(false);\n };\n\n const handleCancel = (): void => {\n setIsEditing(false);\n };\n\n if (isLastMessage && agentResponse?.type === 'finished_task' && agentResponse.next_steps && agentResponse.next_steps.length > 0) {\n /* \n We only want to set the next steps if the message is the last message in the chat.\n This is because the next steps are only available after the agent has finished its task.\n\n We handle this in the ChatMessage component to automatically handle reloading a previous chat thread.\n */\n setNextSteps(agentResponse.next_steps);\n }\n\n if (isEditing) {\n return (\n <ChatInput\n initialContent={(message.content as string).replace(/```[\\s\\S]*?```/g, '').trim()}\n placeholder={\"Edit your message\"}\n onSave={handleSave}\n onCancel={handleCancel}\n isEditing={isEditing}\n contextManager={contextManager}\n notebookTracker={notebookTracker}\n renderMimeRegistry={renderMimeRegistry}\n displayActiveCellCode={true}\n agentModeEnabled={false}\n />\n );\n }\n\n if (mitoAIConnectionError) {\n return (\n <div className={classNames(\n \"message\",\n )}>\n <AlertBlock content={message.content as string} mitoAIConnectionErrorType={mitoAIConnectionErrorType} />\n </div>\n )\n }\n\n // If the message is empty, don't render anything\n const messageContent = getContentStringFromMessage(message)\n if (messageContent === undefined || messageContent === '') {\n return <></>\n }\n\n // While the code is streaming back we don't want to show the overwrite button. \n // Users end up applying the code in the middle of streaming and it gets very confusing\n // very quickly for users. \n let isCodeComplete = false;\n\n return (\n <div className={classNames(\n \"message\",\n { \"message-user\": message.role === 'user' },\n { 'message-assistant-chat': message.role === 'assistant'},\n )}>\n {messageContentParts.map((messagePart, index) => {\n if (messagePart.startsWith(PYTHON_CODE_BLOCK_START_WITHOUT_NEW_LINE)) {\n \n isCodeComplete = messagePart.endsWith('```');\n\n // Make sure that there is actually code in the message. \n // An empty code will look like this '```python ```'\n if (messagePart.length > 14) {\n return ( \n <>\n {message.role === 'user' ? (\n <UserCodeBlock\n code={messagePart}\n renderMimeRegistry={renderMimeRegistry}\n agentModeEnabled={agentModeEnabled}\n />\n ) : (\n <AssistantCodeBlock\n code={messagePart}\n isCodeComplete={isCodeComplete}\n renderMimeRegistry={renderMimeRegistry}\n previewAICode={previewAICode}\n acceptAICode={acceptAICode}\n rejectAICode={rejectAICode}\n isLastAiMessage={isLastAiMessage}\n codeReviewStatus={codeReviewStatus}\n agentModeEnabled={agentModeEnabled}\n />\n )}\n\n {isLastAiMessage && isCodeComplete && codeReviewStatus === 'chatPreview' && \n <div className='chat-message-buttons'>\n <TextAndIconButton \n onClick={() => {previewAICode()}}\n text={'Overwrite Active Cell'}\n icon={PlayButtonIcon}\n title={'Write the Ai generated code to the active cell in the jupyter notebook, replacing the current code.'}\n variant='gray'\n width='fit-contents'\n />\n <TextAndIconButton \n onClick={() => {void copyToClipboard(messagePart)}}\n text={'Copy'}\n icon={CopyIcon}\n title={'Copy the Ai generated code to your clipboard'}\n variant='gray'\n width='fit-contents'\n />\n </div>\n }\n {isLastAiMessage && isCodeComplete && codeReviewStatus === 'codeCellPreview' && \n <div className='chat-message-buttons'>\n <TextButton \n onClick={() => {acceptAICode()}}\n text={`Accept code ${operatingSystem === 'mac' ? '⌘Y' : 'Ctrl+Y'}`}\n title={'Accept the Ai generated code'}\n variant='green'\n width='fit-contents'\n />\n <TextButton \n onClick={() => {rejectAICode()}}\n text={`Reject code ${operatingSystem === 'mac' ? '⌘U' : 'Ctrl+U'}`}\n title={'Reject the Ai generated code and revert to the previous version of the code cell'}\n variant='red'\n width='fit-contents'\n />\n </div>\n\n }\n </>\n )\n } else {\n // Return null for empty code blocks\n return null;\n }\n } else {\n return (\n <div key={index + messagePart} className={classNames('markdown-message-part')}>\n <p \n onDoubleClick={() => {\n // Only allow users to edit their own messages, not the AI responses\n if (message.role === 'user') {\n setIsEditing(true)\n }\n }}\n >\n {message.role === 'user' && promptType === 'smartDebug' ? (\n /* Use a pre tag to preserve the newline and indentation of the error message */\n <pre className=\"chat-taskpane-smart-debug-error-message\">\n {messagePart}\n </pre>\n ) : (\n <MarkdownBlock\n markdown={messagePart}\n renderMimeRegistry={renderMimeRegistry}\n notebookTracker={notebookTracker}\n />\n )}\n </p>\n </div>\n )\n }\n })}\n {editable && \n <div className=\"message-action-buttons\">\n <button\n className=\"message-start-editing-button\"\n onClick={handleEditClick}\n title=\"Edit message\"\n >\n <PencilIcon />\n </button>\n </div>\n }\n {agentResponse?.type === 'get_cell_output' && \n <GetCellOutputToolUI />\n }\n </div>\n )\n}\n\nexport default ChatMessage","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport { scrollToAndHighlightCell } from '../../../utils/notebook';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport '../../../../style/Citation.css';\n\n// Citation line can be either a single line number or a range of lines\nexport type CitationLine = number | { start: number; end: number };\n\n// Citation component props interface\nexport interface CitationProps {\n citationIndex: number;\n cellId: string;\n line: CitationLine;\n notebookTracker: INotebookTracker;\n}\n\n// Helper function to get the display text for a line/range\nconst getLineDisplayText = (line: CitationLine): string => {\n if (typeof line === 'number') {\n return `Line ${line}`;\n } else {\n return `Lines ${line.start}-${line.end}`;\n }\n};\n\n// Citation button component\nexport const Citation: React.FC<CitationProps> = ({ citationIndex, cellId, line, notebookTracker }): JSX.Element => {\n \n const handleClick = (): void => {\n const lineStart = typeof line === 'number' ? line : line.start;\n // In order to support old citations that have just one line, we \n // we set the end line to the start line if only a single line number is provided.\n const lineEnd = typeof line === 'number' ? line : line.end;\n\n // Scroll to the cell and highlight the lines\n scrollToAndHighlightCell(notebookTracker, cellId, lineStart, lineEnd);\n };\n\n return (\n <span\n className=\"citation-button\"\n onClick={handleClick}\n title={getLineDisplayText(line)}\n >\n {citationIndex}\n </span>\n );\n};\n\nexport default Citation;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport copyToClipboard from '../../../utils/copyToClipboard';\nimport IconButton from '../../../components/IconButton';\nimport CopyIcon from '../../../icons/CopyIcon';\nimport PlayButtonIcon from '../../../icons/PlayButtonIcon';\nimport { CodeReviewStatus } from '../ChatTaskpane';\nimport AcceptIcon from '../../../icons/AcceptIcon';\nimport RejectIcon from '../../../icons/RejectIcon';\n\ninterface ICodeBlockToolbarProps {\n code: string;\n isLastAiMessage?: boolean;\n codeReviewStatus?: CodeReviewStatus;\n onPreview?: () => void;\n onAccept?: () => void;\n onReject?: () => void;\n}\n\nconst CodeBlockToolbar: React.FC<ICodeBlockToolbarProps> = ({\n code,\n isLastAiMessage = false,\n codeReviewStatus,\n onPreview,\n onAccept,\n onReject\n}) => {\n return (\n <div className='code-block-toolbar'>\n {isLastAiMessage && codeReviewStatus === 'chatPreview' && onPreview && (\n <IconButton\n icon={<PlayButtonIcon />}\n title=\"Overwrite Active Cell\"\n onClick={onPreview}\n />\n )}\n {isLastAiMessage && codeReviewStatus === 'codeCellPreview' && onAccept && onReject && (\n <>\n <IconButton\n icon={<AcceptIcon />}\n title=\"Accept AI Generated Code\"\n onClick={onAccept}\n style={{ color: 'var(--green-700)' }}\n />\n <IconButton\n icon={<RejectIcon />}\n title=\"Reject AI Generated Code\"\n onClick={onReject}\n style={{ color: 'var(--red-700)' }}\n />\n </>\n )}\n {(!isLastAiMessage || codeReviewStatus !== 'codeCellPreview') && (\n <IconButton\n icon={<CopyIcon />}\n title=\"Copy\"\n onClick={() => { void copyToClipboard(code) }}\n />\n )}\n </div>\n );\n};\n\nexport default CodeBlockToolbar; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useEffect, useState, useRef, useCallback } from 'react';\nimport { IRenderMimeRegistry, MimeModel } from '@jupyterlab/rendermime';\nimport { createPortal } from 'react-dom';\nimport { Citation, CitationProps, CitationLine } from './Citation';\nimport { INotebookTracker } from '@jupyterlab/notebook';\n\n/**\n * React Portals in Markdown Rendering\n * -----------------------------------\n * \n * This component uses React Portals to integrate interactive React components (Citations) \n * into markdown content that's rendered by JupyterLab's renderer (non-React).\n * \n * Why Portals?\n * ------------\n * 1. The markdown content is processed by JupyterLab's renderer which outputs regular DOM nodes,\n * not React components.\n * 2. We need to insert interactive React components (Citations) at specific points within this\n * rendered content.\n * 3. React's normal component hierarchy can't directly insert components into arbitrary DOM positions.\n * \n * How Portals are Used Here:\n * -------------------------\n * 1. Citation data is extracted from the markdown and replaced with placeholder text ({{citation-n}})\n * 2. The markdown with placeholders is rendered to HTML using JupyterLab's renderer\n * 3. The rendered HTML is searched for placeholder text\n * 4. When placeholders are found, they're replaced with:\n * - The surrounding text content\n * - Empty <span> elements at the placeholder positions\n * 5. React Portals are created for each <span>, which render Citation components into those\n * specific DOM locations\n * \n * Benefits:\n * --------\n * - We can use a non-React renderer while still having interactive React components\n * - Citations appear exactly where they should in the rendered markdown\n * - React maintains control of the Citation components (event handling, updates, etc.)\n * - The approach is clean and maintainable compared to alternatives\n */\n\n// Citation Portal component to render Citation into DOM\ninterface CitationPortalProps extends CitationProps {\n container: HTMLElement;\n}\n\nconst CitationPortal: React.FC<CitationPortalProps> = ({ container, ...props }) => {\n return createPortal(<Citation {...props} />, container);\n};\n\ninterface IMarkdownCodeProps {\n markdown: string;\n renderMimeRegistry: IRenderMimeRegistry;\n notebookTracker: INotebookTracker;\n}\n\ninterface Citation {\n id: string;\n data: {\n citation_index: number;\n cell_id: string;\n line: CitationLine;\n };\n}\n\nconst MarkdownBlock: React.FC<IMarkdownCodeProps> = ({ markdown, renderMimeRegistry, notebookTracker }) => {\n const [citationPortals, setCitationPortals] = useState<React.ReactElement[]>([]);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Helper function to parse line numbers or ranges\n const parseLineNumber = (lineStr: string): CitationLine => {\n if (lineStr.includes('-')) {\n // Handle range format like \"18-41\"\n const parts = lineStr.split('-');\n const startStr = parts[0];\n const endStr = parts[1];\n \n if (!startStr || !endStr) {\n // Fallback to single line if split fails\n return parseInt(lineStr, 10);\n }\n \n const start = parseInt(startStr, 10);\n const end = parseInt(endStr, 10);\n \n if (isNaN(start) || isNaN(end)) {\n // Fallback to single line if parsing fails\n return parseInt(lineStr, 10);\n }\n \n return { start, end };\n } else {\n // Handle single line number\n return parseInt(lineStr, 10);\n }\n };\n\n // Extract citations from the markdown, returning the markdown with the JSON citations replaced with \n // citation placeholders {{${id}}} and an array of citation objects.\n const extractCitations = useCallback((text: string): { processedMarkdown: string; citations: Citation[] } => {\n // Updated regex to match both single lines and line ranges: [MITO_CITATION:cell_id:line_number] or [MITO_CITATION:cell_id:start_line-end_line]\n const citationRegex = /\\[MITO_CITATION:([^:]+):(\\d+(?:-\\d+)?)\\]/g;\n const citations: Citation[] = [];\n let counter = 0;\n\n // Replace each citation with a placeholder\n const processedMarkdown = text.replace(citationRegex, (match, cellId, lineStr) => {\n try {\n const id = `citation-${counter++}`;\n const line = parseLineNumber(lineStr);\n citations.push({\n id,\n data: {\n citation_index: counter,\n cell_id: cellId,\n line: line\n }\n });\n return `{{${id}}}`;\n } catch (e) {\n console.error(\"Failed to parse citation:\", e);\n return match;\n }\n });\n\n return { processedMarkdown, citations };\n }, []);\n\n // Uses the Jupyter markdowm MimeRenderer to render the markdown content as normal HTML\n const renderMarkdownContent = useCallback(async (processedMarkdown: string): Promise<void> => {\n if (!processedMarkdown || !containerRef.current) return;\n\n try {\n const model = new MimeModel({\n data: { ['text/markdown']: processedMarkdown },\n });\n\n const renderer = renderMimeRegistry.createRenderer('text/markdown');\n await renderer.renderModel(model);\n\n // Clear previous content\n containerRef.current.innerHTML = '';\n containerRef.current.appendChild(renderer.node.cloneNode(true));\n } catch (error) {\n console.error(\"Error rendering markdown:\", error);\n }\n }, [renderMimeRegistry]);\n\n // Replace the citation placeholders with Citation Components in the DOM\n const createCitationPortals = useCallback((citations: Citation[]): React.ReactElement[] => {\n if (!containerRef.current || citations.length === 0) return [];\n\n const newPortals: React.ReactElement[] = [];\n\n // Create a map of placeholder to citation for faster lookup\n const citationMap = new Map(citations.map(citation => [`{{${citation.id}}}`, citation]));\n\n // Find all text nodes that contain our placeholder like {{citation-id}}).\n // Since these placeholders exist within the text content (not as separate DOM elements):\n // - Find all text nodes in the rendered markdown\n // - Check each one to see if it contains any of your placeholders\n // - Process those that do contain placeholders\n const textNodes: Text[] = [];\n const walker = document.createTreeWalker(containerRef.current, NodeFilter.SHOW_TEXT);\n\n let textNode;\n while ((textNode = walker.nextNode() as Text)) {\n textNodes.push(textNode);\n }\n\n // Process all text nodes in a single pass\n textNodes.forEach(node => {\n if (!node.nodeValue) return;\n\n // Check if this node contains any placeholders\n let containsPlaceholder = false;\n for (const placeholder of citationMap.keys()) {\n if (node.nodeValue.includes(placeholder)) {\n containsPlaceholder = true;\n break;\n }\n }\n\n if (!containsPlaceholder) return;\n\n // Create a regex to match all placeholders\n const placeholderPattern = /\\{\\{citation-\\d+\\}\\}/g;\n const matches = [...node.nodeValue.matchAll(placeholderPattern)];\n\n if (matches.length === 0) return;\n\n // Split the text by all placeholders and create a fragment\n const fragment = document.createDocumentFragment();\n let lastIndex = 0;\n\n matches.forEach(match => {\n const placeholder = match[0];\n const citation = citationMap.get(placeholder);\n if (!citation) return;\n\n const startIndex = match.index!;\n\n // Add text before the placeholder\n if (startIndex > lastIndex) {\n fragment.appendChild(\n document.createTextNode(node.nodeValue!.substring(lastIndex, startIndex))\n );\n }\n\n // Create span for the citation\n const span = document.createElement('span');\n span.classList.add('citation-container');\n span.dataset.citationId = citation.id;\n fragment.appendChild(span);\n\n // Create React portal for this span\n newPortals.push(\n <CitationPortal\n key={citation.id + '-' + matches.indexOf(match)}\n container={span}\n citationIndex={citation.data.citation_index}\n cellId={citation.data.cell_id}\n line={citation.data.line}\n notebookTracker={notebookTracker}\n />\n );\n\n lastIndex = startIndex + placeholder.length;\n });\n\n // Add any remaining text after the last placeholder\n if (lastIndex < node.nodeValue.length) {\n fragment.appendChild(\n document.createTextNode(node.nodeValue.substring(lastIndex))\n );\n }\n\n // Replace the original text node with our fragment\n if (node.parentNode) {\n node.parentNode.replaceChild(fragment, node);\n }\n });\n\n return newPortals;\n }, []);\n\n // Process everything in one effect, but with clear separation via helper functions\n useEffect(() => {\n const processMarkdown = async (): Promise<void> => {\n // Step 1: Extract citations and get processed markdown\n const { processedMarkdown, citations } = extractCitations(markdown);\n\n // Step 2: Render markdown with placeholders\n await renderMarkdownContent(processedMarkdown);\n\n // Step 3: Create and insert citation portals\n const portals = createCitationPortals(citations);\n setCitationPortals(portals);\n };\n\n void processMarkdown();\n }, [markdown, extractCitations, renderMarkdownContent, createCitationPortals]);\n\n return (\n <div ref={containerRef} className=\"markdown-block-with-citations\">\n {citationPortals}\n </div>\n );\n};\n\nexport default MarkdownBlock;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport { IRenderMimeRegistry, MimeModel } from '@jupyterlab/rendermime';\nimport { addMarkdownCodeFormatting } from '../../../utils/strings';\nimport '../../../../style/PythonCode.css';\n\ninterface IPythonCodeProps {\n code: string;\n renderMimeRegistry: IRenderMimeRegistry;\n}\n\nconst PythonCode: React.FC<IPythonCodeProps> = ({ code, renderMimeRegistry }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const rendererRef = useRef<any>(null);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n // Create renderer only once\n if (!rendererRef.current) {\n rendererRef.current = renderMimeRegistry.createRenderer('text/markdown');\n }\n\n const model = new MimeModel({\n data: { ['text/markdown']: addMarkdownCodeFormatting(code, true) },\n });\n\n const renderCode = async (): Promise<void> => {\n await rendererRef.current.renderModel(model);\n \n // Clear previous content\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n \n // Append new content\n container.appendChild(rendererRef.current.node);\n };\n\n void renderCode();\n\n // Clean up function\n return () => {\n if (rendererRef.current?.node && rendererRef.current.node.parentNode) {\n rendererRef.current.node.parentNode.removeChild(rendererRef.current.node);\n }\n };\n }, [code, renderMimeRegistry]);\n\n return <div className='code-block-python-code' ref={containerRef} />;\n};\n\nexport default PythonCode;\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useEffect, useRef } from 'react';\nimport { updateScrollMask, initScrollMask } from '../../../utils/scrollMask';\n\ninterface SuggestionOption {\n display: string;\n prompt: string;\n}\n\nconst DEFAULT_SUGGESTION_OPTIONS: SuggestionOption[] = [\n {\n display: \"Plot Meta Acquisitions\",\n prompt: \"Build an annotated graph of how Meta's acquisitions of Instagram, Whatsapp, and Giphy affected the Meta stock price. Use the data from https://raw.githubusercontent.com/mito-ds/mito/refs/heads/dev/jupyterhub/meta_stock_prices.csv\"\n },\n {\n display: \"Analyze Vehicle Fatalities\",\n prompt: \"Visualize which vehicle types are most deadly to pedestrians and cyclists, measuring total fatalities and fatality rate per collision. Use the data from https://raw.githubusercontent.com/mito-ds/mito/refs/heads/dev/jupyterhub/nyc_car_crashes.csv\"\n },\n {\n display: \"Compare Trade Surpluses\",\n prompt: \"Graph the countries that have the highest trade surplus with America. Use the data from https://raw.githubusercontent.com/mito-ds/mito/refs/heads/dev/jupyterhub/us_tarrifs.csv\"\n }\n];\n\ninterface ScrollableSuggestionsProps {\n onSelectSuggestion: (prompt: string) => void;\n}\n\nconst ScrollableSuggestions: React.FC<ScrollableSuggestionsProps> = ({ \n onSelectSuggestion \n}) => {\n const suggestionsRef = useRef<HTMLDivElement>(null);\n\n // Apply the scroll mask to the suggestions container when it mounts, updates, or is scrolled\n useEffect(() => {\n const suggestionsContainer = suggestionsRef.current;\n if (!suggestionsContainer) return;\n \n // Initialize the mask with a delay to ensure content is rendered\n initScrollMask(suggestionsContainer);\n \n // Update mask on scroll\n const handleScroll = (): void => {\n updateScrollMask(suggestionsContainer);\n };\n \n // Update mask on window resize\n const handleResize = (): void => {\n updateScrollMask(suggestionsContainer);\n };\n \n // Create a ResizeObserver to monitor changes to the container's parent\n const resizeObserver = new ResizeObserver(() => {\n updateScrollMask(suggestionsContainer);\n });\n \n // Observe the parent container that has the max-width constraint\n const parentContainer = suggestionsContainer.closest('.suggestions-container');\n if (parentContainer) {\n resizeObserver.observe(parentContainer);\n }\n \n suggestionsContainer.addEventListener('scroll', handleScroll);\n window.addEventListener('resize', handleResize);\n \n // Clean up the event listeners and observers on unmount\n return () => {\n suggestionsContainer.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', handleResize);\n resizeObserver.disconnect();\n };\n }, [DEFAULT_SUGGESTION_OPTIONS.length]); // Re-apply when options change\n\n return (\n <div className=\"chat-suggestions\" ref={suggestionsRef}>\n {DEFAULT_SUGGESTION_OPTIONS.map((opt) => (\n <button\n key={opt.display}\n className=\"suggestion-box\"\n onClick={() => onSelectSuggestion(opt.prompt)}\n >\n {opt.display}\n </button>\n ))}\n </div>\n );\n};\n\nexport default ScrollableSuggestions; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState } from 'react';\nimport PythonCode from './PythonCode';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport '../../../../style/CodeBlock.css'\nimport ExpandIcon from '../../../icons/ExpandIcon';\n\ninterface IUserCodeBlockProps {\n code: string;\n renderMimeRegistry: IRenderMimeRegistry;\n agentModeEnabled: boolean;\n}\n\nconst UserCodeBlock: React.FC<IUserCodeBlockProps> = ({\n code, renderMimeRegistry, agentModeEnabled\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n const numCodePreviewLines = 5;\n const isCodeExpandable = code.split('\\n').length > numCodePreviewLines;\n const previewCode = code.split('\\n').slice(0, numCodePreviewLines).join('\\n');\n\n return (\n <div\n className={`code-block-container active-cell-code-block ${agentModeEnabled ? 'agent-mode' : ''}`}\n onClick={() => setIsExpanded(!isExpanded)}\n style={{ cursor: 'pointer' }}\n >\n <PythonCode\n code={isExpanded ? code : previewCode}\n renderMimeRegistry={renderMimeRegistry}\n />\n {isCodeExpandable && (\n <div\n className='code-block-expand-button'\n title={isExpanded ? \"Collapse\" : \"Expand\"}\n onClick={(e) => {\n e.stopPropagation();\n setIsExpanded(!isExpanded);\n }}\n >\n <ExpandIcon isExpanded={isExpanded} />\n </div>\n )}\n </div>\n );\n};\n\nexport default UserCodeBlock;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { CodeMirrorEditor } from '@jupyterlab/codemirror';\nimport { JupyterFrontEnd } from '@jupyterlab/application';\nimport { CodeCell } from '@jupyterlab/cells';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { ReadonlyPartialJSONObject, UUID } from '@lumino/coreutils';\nimport { Compartment, StateEffect } from '@codemirror/state';\nimport OpenAI from \"openai\";\nimport React, { useEffect, useRef, useState } from 'react';\nimport '../../../style/button.css';\nimport '../../../style/ChatTaskpane.css';\nimport '../../../style/TextButton.css';\nimport { addIcon, historyIcon, deleteIcon, settingsIcon } from '@jupyterlab/ui-components';\nimport { OpenIndicatorLabIcon } from '../../icons';\nimport MitoLogo from '../../icons/MitoLogo';\nimport ChatInput from './ChatMessage/ChatInput';\nimport ChatMessage from './ChatMessage/ChatMessage';\nimport ScrollableSuggestions from './ChatMessage/ScrollableSuggestions';\nimport { ChatHistoryManager, PromptType } from './ChatHistoryManager';\nimport { codeDiffStripesExtension } from './CodeDiffDisplay';\nimport ToggleButton from '../../components/ToggleButton';\nimport IconButton from '../../components/IconButton';\nimport LoadingDots from '../../components/LoadingDots';\nimport {\n COMMAND_MITO_AI_APPLY_LATEST_CODE,\n COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE,\n COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE,\n COMMAND_MITO_AI_PREVIEW_LATEST_CODE,\n COMMAND_MITO_AI_REJECT_LATEST_CODE,\n COMMAND_MITO_AI_SEND_AGENT_MESSAGE,\n COMMAND_MITO_AI_SEND_DEBUG_ERROR_MESSAGE,\n COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE,\n} from '../../commands';\nimport { getCodeDiffsAndUnifiedCodeString, UnifiedDiffLine } from '../../utils/codeDiff';\nimport {\n getActiveCellID,\n getActiveCellOutput,\n getCellByID,\n getCellCodeByID,\n highlightCodeCell,\n scrollToCell,\n setActiveCellByID,\n writeCodeToCellByID,\n} from '../../utils/notebook';\nimport { getCodeBlockFromMessage, removeMarkdownCodeFormatting } from '../../utils/strings';\nimport { OperatingSystem } from '../../utils/user';\nimport type { CompletionWebsocketClient } from '../../websockets/completions/CompletionsWebsocketClient';\nimport {\n IChatThreadMetadataItem,\n IChatMessageMetadata,\n IGetThreadsMetadata,\n IFetchHistoryMetadata,\n IDeleteThreadMetadata,\n ICompletionReply,\n IDeleteThreadReply,\n IFetchHistoryReply,\n IFetchThreadsReply,\n IStartNewChatReply,\n ICompletionRequest,\n ICodeExplainCompletionRequest,\n IChatCompletionRequest,\n ISmartDebugCompletionRequest,\n IFetchHistoryCompletionRequest,\n IAgentAutoErrorFixupCompletionRequest,\n IAgentExecutionCompletionRequest,\n AgentResponse,\n ICompletionStreamChunk\n} from '../../websockets/completions/CompletionModels';\nimport { IContextManager } from '../ContextManager/ContextManagerPlugin';\nimport { acceptAndRunCellUpdate, retryIfExecutionError } from '../../utils/agentActions';\nimport { scrollToDiv } from '../../utils/scroll';\nimport LoadingCircle from '../../components/LoadingCircle';\nimport { DEFAULT_MODEL } from '../../components/ModelSelector';\nimport ModelSelector from \"../../components/ModelSelector\";\nimport { checkForBlacklistedWords } from '../../utils/blacklistedWords';\nimport DropdownMenu from '../../components/DropdownMenu';\nimport { COMMAND_MITO_AI_SETTINGS } from '../SettingsManager/SettingsManagerPlugin';\nimport { getFirstMessageFromCookie } from './FirstMessage';\nimport CTACarousel from './CTACarousel';\nimport NextStepsPills from '../../components/NextStepsPills';\nimport UndoIcon from '../../icons/UndoIcon';\nimport TextAndIconButton from '../../components/TextAndIconButton';\nimport { createCheckpoint, restoreCheckpoint } from '../../utils/checkpoint';\nimport { waitForNotebookReady } from '../../utils/waitForNotebookReady';\n\nconst AGENT_EXECUTION_DEPTH_LIMIT = 20\n\nconst getDefaultChatHistoryManager = (notebookTracker: INotebookTracker, contextManager: IContextManager): ChatHistoryManager => {\n const chatHistoryManager = new ChatHistoryManager(contextManager, notebookTracker)\n return chatHistoryManager\n}\n\ninterface IChatTaskpaneProps {\n notebookTracker: INotebookTracker\n renderMimeRegistry: IRenderMimeRegistry\n contextManager: IContextManager\n app: JupyterFrontEnd\n operatingSystem: OperatingSystem\n websocketClient: CompletionWebsocketClient\n}\n\ninterface ICellStateBeforeDiff {\n codeCellID: string\n code: string\n}\n\nexport type CodeReviewStatus = 'chatPreview' | 'codeCellPreview' | 'applied'\n\nconst ChatTaskpane: React.FC<IChatTaskpaneProps> = ({\n notebookTracker,\n renderMimeRegistry,\n contextManager,\n app,\n operatingSystem,\n websocketClient,\n}) => {\n\n const [chatHistoryManager, setChatHistoryManager] = useState<ChatHistoryManager>(() => getDefaultChatHistoryManager(notebookTracker, contextManager));\n const chatHistoryManagerRef = useRef<ChatHistoryManager>(chatHistoryManager);\n\n const [loadingAIResponse, setLoadingAIResponse] = useState<boolean>(false)\n\n // Store the original cell before diff so that we can revert to it if the user rejects the AI's code\n const cellStateBeforeDiff = useRef<ICellStateBeforeDiff | undefined>(undefined)\n\n // Three possible states:\n // 1. chatPreview: state where the user has not yet pressed the apply button.\n // 2. codeCellPreview: state where the user is seeing the code diffs and deciding how they want to respond.\n // 3. applied: state where the user has applied the code to the code cell\n const [codeReviewStatus, setCodeReviewStatus] = useState<CodeReviewStatus>('chatPreview')\n\n // Add this ref for the chat messages container\n const chatMessagesRef = useRef<HTMLDivElement>(null);\n\n /* \n Keep track of agent mode enabled state and use keep a ref in sync with it \n so that we can access the most up-to-date value during a function's execution.\n Without it, we would always use the initial value of agentModeEnabled.\n */\n const [agentModeEnabled, setAgentModeEnabled] = useState<boolean>(true)\n const agentModeEnabledRef = useRef<boolean>(agentModeEnabled);\n useEffect(() => {\n // Update the ref whenever agentModeEnabled state changes\n agentModeEnabledRef.current = agentModeEnabled;\n }, [agentModeEnabled]);\n\n /* \n Auto-scroll follow mode: tracks whether we should automatically scroll to bottom\n when new messages arrive. Set to false when user manually scrolls up.\n */\n const [autoScrollFollowMode, setAutoScrollFollowMode] = useState<boolean>(true);\n const autoScrollFollowModeRef = useRef<boolean>(autoScrollFollowMode);\n useEffect(() => {\n autoScrollFollowModeRef.current = autoScrollFollowMode;\n }, [autoScrollFollowMode]);\n\n const [chatThreads, setChatThreads] = useState<IChatThreadMetadataItem[]>([]);\n // The active thread id is originally set by the initializeChatHistory function, which will either set it to \n // the last active thread or create a new thread if there are no previously existing threads. So that\n // we don't need to handle the undefined case everywhere, we just default to an empty string knowing that\n // it will always be set to a valid thread id before it is used.\n const activeThreadIdRef = useRef<string>('');\n\n /* \n Three possible states:\n 1. working: the agent is working on the task\n 2. stopping: the agent is stopping after it has received ai response it is waiting on\n 3. idle: the agent is idle\n */\n const [agentExecutionStatus, setAgentExecutionStatus] = useState<'working' | 'stopping' | 'idle'>('idle')\n\n // We use a ref to always access the most up-to-date value during a function's execution. Refs immediately reflect changes, \n // unlike state variables, which are captured at the beginning of a function and may not reflect updates made during execution.\n const shouldContinueAgentExecution = useRef<boolean>(true);\n\n const streamingContentRef = useRef<string>('');\n const streamHandlerRef = useRef<((sender: CompletionWebsocketClient, chunk: ICompletionStreamChunk) => void) | null>(null);\n\n // State for managing next steps from responses\n // If the user hides the next steps, we keep them hidden until they re-open them\n const [nextSteps, setNextSteps] = useState<string[]>([]);\n const [displayedNextStepsIfAvailable, setDisplayedNextStepsIfAvailable] = useState(true);\n\n // Track if checkpoint exists for UI updates\n const [hasCheckpoint, setHasCheckpoint] = useState<boolean>(false);\n\n const updateModelOnBackend = async (model: string): Promise<void> => {\n try {\n await websocketClient.sendMessage({\n type: \"update_model_config\",\n message_id: UUID.uuid4(),\n metadata: {\n promptType: \"update_model_config\",\n model: model\n },\n stream: false\n });\n\n console.log('Model configuration updated on backend:', model);\n } catch (error) {\n console.error('Failed to update model configuration on backend:', error);\n }\n };\n\n const fetchChatThreads = async (): Promise<void> => {\n const metadata: IGetThreadsMetadata = {\n promptType: \"get_threads\"\n };\n\n const chatThreadsResponse = await websocketClient.sendMessage<\n ICompletionRequest,\n IFetchThreadsReply\n >({\n type: \"get_threads\",\n message_id: UUID.uuid4(),\n metadata: metadata,\n stream: false\n });\n\n setChatThreads(chatThreadsResponse.threads);\n };\n\n const fetchChatHistoryAndSetActiveThread = async (threadId: string): Promise<void> => {\n const metadata: IFetchHistoryMetadata = {\n promptType: \"fetch_history\",\n thread_id: threadId\n };\n\n const fetchHistoryCompletionRequest: IFetchHistoryCompletionRequest = {\n type: 'fetch_history',\n message_id: UUID.uuid4(),\n metadata: metadata,\n stream: false\n }\n\n const chatHistoryResponse = await websocketClient.sendMessage<ICompletionRequest, IFetchHistoryReply>(fetchHistoryCompletionRequest);\n\n // Create a fresh ChatHistoryManager and add the initial messages\n const newChatHistoryManager = getDefaultChatHistoryManager(notebookTracker, contextManager);\n\n // Each thread only contains agent or chat messages. For now, we enforce this by clearing the chat \n // when the user switches mode. When the user reloads a chat, we want to put them back into the same\n // chat mode so that we use the correct system message and preserve this one-type of message invariant.\n let isAgentChat: boolean = false\n\n // Add messages to the ChatHistoryManager\n chatHistoryResponse.items.forEach(item => {\n try {\n // If the user sent a message in agent:execution mode, the ai response will be a JSON object which we need to parse. \n // TODO: We need to save the full metadata in the message_history.json so we don't have to do these hacky workarounds!\n const chatHistoryItem = JSON.parse(item.content as string);\n if (Object.prototype.hasOwnProperty.call(chatHistoryItem, 'type')) {\n // If it is a structured output with 'type', then it is an AgentResponse and we should handle it as such\n const agentResponse: AgentResponse = chatHistoryItem\n newChatHistoryManager.addAIMessageFromAgentResponse(agentResponse)\n isAgentChat = true\n } else {\n newChatHistoryManager.addChatMessageFromHistory(item);\n isAgentChat = false\n }\n } catch {\n newChatHistoryManager.addChatMessageFromHistory(item);\n }\n });\n\n // Update the state with the new ChatHistoryManager\n setAgentModeEnabled(isAgentChat)\n setChatHistoryManager(newChatHistoryManager);\n activeThreadIdRef.current = threadId;\n };\n\n const deleteThread = async (threadId: string): Promise<void> => {\n const metadata: IDeleteThreadMetadata = {\n promptType: \"delete_thread\",\n thread_id: threadId\n };\n\n const response = await websocketClient.sendMessage<ICompletionRequest, IDeleteThreadReply>({\n type: \"delete_thread\",\n message_id: UUID.uuid4(),\n metadata: metadata,\n stream: false\n });\n\n if (response.success) {\n const updatedThreads = chatThreads.filter(thread => thread.thread_id !== threadId);\n setChatThreads(updatedThreads);\n if (activeThreadIdRef.current === threadId) {\n if (updatedThreads.length > 0) {\n const latestThread = updatedThreads[0]!;\n await fetchChatHistoryAndSetActiveThread(latestThread.thread_id);\n } else {\n await startNewChat();\n }\n }\n }\n };\n\n const startNewChat = async (): Promise<ChatHistoryManager> => {\n\n // If current thread is empty and we already have an active thread id, do not create a new thread.\n if (chatHistoryManagerRef.current.getDisplayOptimizedHistory().length === 0 && activeThreadIdRef.current !== '') {\n return chatHistoryManager;\n }\n\n // Clear next steps when starting a new chat\n setNextSteps([])\n\n // Clear agent checkpoint when starting new chat\n setHasCheckpoint(false)\n\n // Enable follow mode when starting a new chat\n setAutoScrollFollowMode(true);\n\n // Reset frontend chat history\n const newChatHistoryManager = getDefaultChatHistoryManager(notebookTracker, contextManager);\n setChatHistoryManager(newChatHistoryManager);\n\n // Notify the backend to request a new chat thread and get its ID\n try {\n const response = await websocketClient.sendMessage<ICompletionRequest, IStartNewChatReply>({\n type: 'start_new_chat',\n message_id: UUID.uuid4(),\n metadata: {\n promptType: 'start_new_chat'\n },\n stream: false,\n });\n\n // Set the new thread ID as active\n activeThreadIdRef.current = response.thread_id;\n } catch (error) {\n console.error('Error starting new chat:', error);\n }\n\n return newChatHistoryManager;\n }\n\n useEffect(() => {\n const initializeChatHistory = async (): Promise<void> => {\n try {\n // Check for saved model preference in localStorage\n const storedConfig = localStorage.getItem('llmModelConfig');\n let initialModel = DEFAULT_MODEL;\n if (storedConfig) {\n try {\n const parsedConfig = JSON.parse(storedConfig);\n initialModel = parsedConfig.model || DEFAULT_MODEL;\n } catch (e) {\n console.error('Failed to parse stored LLM config', e);\n }\n }\n\n // Set the model on backend when the taskpane is opened\n void updateModelOnBackend(initialModel);\n\n // 1. Fetch available chat threads.\n const chatThreadsResponse = await websocketClient.sendMessage<ICompletionRequest, IFetchThreadsReply>({\n type: \"get_threads\",\n message_id: UUID.uuid4(),\n metadata: {\n promptType: \"get_threads\"\n },\n stream: false\n });\n\n setChatThreads(chatThreadsResponse.threads);\n\n // 2. If threads exist, load the latest thread; otherwise, start a new chat.\n if (chatThreadsResponse.threads.length > 0) {\n const latestThread = chatThreadsResponse.threads[0]!;\n await fetchChatHistoryAndSetActiveThread(latestThread.thread_id);\n } else {\n await startNewChat();\n }\n\n const firstMessage = getFirstMessageFromCookie();\n if (firstMessage) {\n await waitForNotebookReady(notebookTracker);\n await startAgentExecution(firstMessage);\n }\n\n } catch (error: unknown) {\n const newChatHistoryManager = getDefaultChatHistoryManager(\n notebookTracker,\n contextManager\n );\n addAIMessageFromResponseAndUpdateState(\n (error as { title?: string }).title ? (error as { title?: string }).title! : `${error}`,\n 'chat',\n newChatHistoryManager,\n false\n );\n addAIMessageFromResponseAndUpdateState(\n (error as { hint?: string }).hint ? (error as { hint?: string }).hint! : `${error}`,\n 'chat',\n newChatHistoryManager,\n true\n );\n }\n };\n\n void initializeChatHistory();\n\n }, [websocketClient]);\n\n useEffect(() => {\n /* \n Why we use a ref (chatHistoryManagerRef) instead of directly accessing the state (chatHistoryManager):\n\n The reason we use a ref here is because the function `applyLatestCode` is registered once \n when the component mounts via `app.commands.addCommand`. If we directly used `chatHistoryManager`\n in the command's execute function, it would \"freeze\" the state at the time of the registration \n and wouldn't update as the state changes over time.\n\n React's state (`useState`) is asynchronous, and the registered command won't automatically pick up the \n updated state unless the command is re-registered every time the state changes, which would require \n unregistering and re-registering the command, causing unnecessary complexity.\n\n By using a ref (`chatHistoryManagerRef`), we are able to keep a persistent reference to the \n latest version of `chatHistoryManager`, which is updated in this effect whenever the state \n changes. This allows us to always access the most recent state of `chatHistoryManager` in the \n `applyLatestCode` function, without needing to re-register the command or cause unnecessary re-renders.\n\n We still use `useState` for `chatHistoryManager` so that we can trigger a re-render of the chat\n when the state changes.\n */\n chatHistoryManagerRef.current = chatHistoryManager;\n\n }, [chatHistoryManager]);\n\n // Scroll to bottom whenever chat history updates, but only if in follow mode\n useEffect(() => {\n if (autoScrollFollowMode) {\n scrollToDiv(chatMessagesRef);\n }\n }, [chatHistoryManager.getDisplayOptimizedHistory().length, chatHistoryManager, autoScrollFollowMode]);\n\n // Add scroll event handler to detect manual scrolling\n useEffect(() => {\n const chatContainer = chatMessagesRef.current;\n if (!chatContainer) return;\n\n const handleScroll = (): void => {\n const { scrollTop, scrollHeight, clientHeight } = chatContainer;\n const isAtBottom = scrollTop + clientHeight >= scrollHeight - 10; // 10px threshold\n\n // If user is not at bottom and we're in follow mode, break out of follow mode\n if (!isAtBottom && autoScrollFollowModeRef.current) {\n setAutoScrollFollowMode(false);\n }\n // If user scrolls back to bottom, re-enter follow mode\n else if (isAtBottom && !autoScrollFollowModeRef.current) {\n setAutoScrollFollowMode(true);\n }\n };\n\n chatContainer.addEventListener('scroll', handleScroll);\n return () => chatContainer.removeEventListener('scroll', handleScroll);\n }, []);\n\n const getDuplicateChatHistoryManager = (): ChatHistoryManager => {\n\n /*\n We use getDuplicateChatHistoryManager() instead of directly accessing the state variable because \n the COMMAND_MITO_AI_SEND_MESSAGE is registered in a useEffect on initial render, which\n would otherwise always use the initial state values. By using a function, we ensure we always\n get the most recent chat history, even when the command is executed later. \n */\n return chatHistoryManagerRef.current.createDuplicateChatHistoryManager()\n }\n\n /* \n Send a message with a specific input, clearing what is currently in the chat input.\n This is useful when we want to send the error message from the MIME renderer directly\n to the AI chat.\n */\n const sendSmartDebugMessage = async (errorMessage: string): Promise<void> => {\n // Step 0: reset the state for a new message\n resetForNewMessage()\n\n // Enable follow mode when sending a debug message\n setAutoScrollFollowMode(true);\n\n // Step 1: Add the smart debug message to the chat history\n const newChatHistoryManager = getDuplicateChatHistoryManager()\n\n const smartDebugMetadata = newChatHistoryManager.addSmartDebugMessage(activeThreadIdRef.current, errorMessage)\n setChatHistoryManager(newChatHistoryManager);\n setLoadingAIResponse(true)\n\n // Step 2: Send the message to the AI\n const smartDebugCompletionRequest: ISmartDebugCompletionRequest = {\n type: 'smartDebug',\n message_id: UUID.uuid4(),\n metadata: smartDebugMetadata,\n stream: true\n }\n await _sendMessageAndSaveResponse(smartDebugCompletionRequest, newChatHistoryManager)\n }\n\n const sendAgentSmartDebugMessage = async (errorMessage: string): Promise<void> => {\n // Step 0: reset the state for a new message\n resetForNewMessage()\n\n // Enable follow mode when sending agent debug message (same behavior as other modes)\n setAutoScrollFollowMode(true);\n\n // Step 1: Create message metadata\n const newChatHistoryManager = getDuplicateChatHistoryManager()\n const agentSmartDebugMessage = newChatHistoryManager.addAgentSmartDebugMessage(activeThreadIdRef.current, errorMessage)\n setChatHistoryManager(newChatHistoryManager);\n setLoadingAIResponse(true);\n\n // Step 2: Send the message to the AI\n const smartDebugCompletionRequest: IAgentAutoErrorFixupCompletionRequest = {\n type: 'agent:autoErrorFixup',\n message_id: UUID.uuid4(),\n metadata: agentSmartDebugMessage,\n stream: false\n }\n await _sendMessageAndSaveResponse(smartDebugCompletionRequest, newChatHistoryManager)\n }\n\n const sendExplainCodeMessage = async (): Promise<void> => {\n // Step 0: reset the state for a new message\n resetForNewMessage()\n\n // Enable follow mode when explaining code\n setAutoScrollFollowMode(true);\n\n // Step 1: Add the code explain message to the chat history\n const newChatHistoryManager = getDuplicateChatHistoryManager()\n\n const explainCodeMetadata = newChatHistoryManager.addExplainCodeMessage(activeThreadIdRef.current)\n setChatHistoryManager(newChatHistoryManager)\n setLoadingAIResponse(true)\n\n // Step 2: Send the message to the AI\n const explainCompletionRequest: ICodeExplainCompletionRequest = {\n type: 'codeExplain',\n message_id: UUID.uuid4(),\n metadata: explainCodeMetadata,\n stream: true\n }\n await _sendMessageAndSaveResponse(explainCompletionRequest, newChatHistoryManager)\n\n // Step 3: No post processing step needed for explaining code. \n }\n\n const sendAgentExecutionMessage = async (\n input: string,\n messageIndex?: number,\n sendActiveCellOutput: boolean = false,\n selectedRules?: string[]\n ): Promise<void> => {\n // Step 0: reset the state for a new message\n resetForNewMessage()\n\n // Step 1: Add the user's message to the chat history\n const newChatHistoryManager = getDuplicateChatHistoryManager()\n\n if (messageIndex !== undefined) {\n // Drop all of the messages starting at the message index\n newChatHistoryManager.dropMessagesStartingAtIndex(messageIndex)\n }\n\n const agentExecutionMetadata = newChatHistoryManager.addAgentExecutionMessage(activeThreadIdRef.current, input, selectedRules)\n if (messageIndex !== undefined) {\n agentExecutionMetadata.index = messageIndex\n }\n\n if (sendActiveCellOutput) {\n const activeCellOutput = await getActiveCellOutput(notebookTracker)\n if (activeCellOutput !== undefined) {\n agentExecutionMetadata.base64EncodedActiveCellOutput = activeCellOutput\n }\n }\n\n setChatHistoryManager(newChatHistoryManager)\n setLoadingAIResponse(true);\n\n // Step 2: Send the message to the AI\n const completionRequest: IAgentExecutionCompletionRequest = {\n type: 'agent:execution',\n message_id: UUID.uuid4(),\n metadata: agentExecutionMetadata,\n stream: false\n }\n await _sendMessageAndSaveResponse(completionRequest, newChatHistoryManager)\n }\n\n /* \n Send whatever message is currently in the chat input\n */\n const sendChatInputMessage = async (input: string, messageIndex?: number, selectedRules?: string[]): Promise<void> => {\n // Step 0: reset the state for a new message\n resetForNewMessage()\n\n // Enable follow mode when user sends a new message\n setAutoScrollFollowMode(true);\n\n // Step 1: Add the user's message to the chat history\n const newChatHistoryManager = getDuplicateChatHistoryManager()\n\n if (messageIndex !== undefined) {\n // Drop all of the messages starting at the message index\n newChatHistoryManager.dropMessagesStartingAtIndex(messageIndex)\n }\n\n const chatMessageMetadata: IChatMessageMetadata = await newChatHistoryManager.addChatInputMessage(\n input,\n activeThreadIdRef.current,\n messageIndex,\n selectedRules\n )\n\n setChatHistoryManager(newChatHistoryManager)\n setLoadingAIResponse(true)\n\n // Yield control briefly to allow React to re-render the UI\n // A timeout of 0ms pushes the rest of the function to the next event loop cycle\n // so we don't get stuck behind the slow getActiveCellOutput function.\n await new Promise(resolve => setTimeout(resolve, 0));\n\n // Add the active cell output to the metadata afterwards setting the chatHistoryManager so that \n // we don't have to wait on turning the output into a base64 image before we can add the user's message\n // to the chat.\n const activeCellOutput = await getActiveCellOutput(notebookTracker)\n if (activeCellOutput !== undefined) {\n chatMessageMetadata.base64EncodedActiveCellOutput = activeCellOutput\n }\n\n const completionRequest: IChatCompletionRequest = {\n type: 'chat',\n message_id: UUID.uuid4(),\n metadata: chatMessageMetadata,\n stream: true\n }\n\n // Step 2: Send the message to the AI\n await _sendMessageAndSaveResponse(completionRequest, newChatHistoryManager)\n }\n\n const handleUpdateMessage = async (\n messageIndex: number,\n newContent: string,\n ): Promise<void> => {\n\n // Then send the new message to replace it\n if (agentModeEnabled) {\n await startAgentExecution(newContent, messageIndex)\n } else {\n await sendChatInputMessage(newContent, messageIndex)\n }\n };\n\n const _sendMessageAndSaveResponse = async (\n completionRequest: ICompletionRequest, newChatHistoryManager: ChatHistoryManager\n ): Promise<boolean> => {\n if (completionRequest.stream) {\n // Reset the streaming response and set streaming state\n streamingContentRef.current = '';\n\n // Disconnect any existing stream handler\n if (streamHandlerRef.current) {\n websocketClient.stream.disconnect(streamHandlerRef.current, null);\n streamHandlerRef.current = null;\n }\n\n // Create the stream handler function and store it in the ref\n const streamHandler = (_: CompletionWebsocketClient, chunk: ICompletionStreamChunk): void => {\n if (chunk.error) {\n console.group('Error calling OpenAI API:');\n console.error('Title:', chunk.error.title);\n console.error('Type:', chunk.error.error_type);\n console.error('Hint:', chunk.error.hint);\n console.log('Full Error Details:', chunk.error);\n console.groupEnd();\n\n // Log traceback separately to preserve formatting\n if (chunk.error.traceback) {\n console.group('Error Traceback:');\n console.error(chunk.error.traceback);\n console.groupEnd();\n }\n\n addAIMessageFromResponseAndUpdateState(\n chunk.error.hint || chunk.error.title || \"An error occurred\",\n completionRequest.metadata.promptType,\n newChatHistoryManager,\n true,\n chunk.error.title\n );\n setLoadingAIResponse(false);\n } else if (chunk.done) {\n // Reset states to allow future messages to show the \"Apply\" button\n setCodeReviewStatus('chatPreview');\n } else {\n // Use a ref to accumulate the content properly\n streamingContentRef.current += chunk.chunk.content;\n\n // Create a new chat history manager instance to ensure React detects the state change\n const updatedChatHistoryManager = newChatHistoryManager.createDuplicateChatHistoryManager();\n updatedChatHistoryManager.addStreamingAIMessage(\n streamingContentRef.current,\n completionRequest.metadata.promptType,\n );\n setChatHistoryManager(updatedChatHistoryManager);\n\n // Set loading to false after we receive the first chunk\n if (streamingContentRef.current.length > 0) {\n setLoadingAIResponse(false);\n }\n }\n };\n\n // Store the handler for later cleanup\n streamHandlerRef.current = streamHandler;\n\n // Connect the handler\n websocketClient.stream.connect(streamHandler, null);\n\n try {\n const aiResponse = await websocketClient.sendMessage<ICompletionRequest, ICompletionReply>(completionRequest);\n const content = aiResponse.items[0]?.content ?? '';\n\n if (\n completionRequest.metadata.promptType === 'agent:execution' ||\n completionRequest.metadata.promptType === 'agent:autoErrorFixup'\n ) {\n // Agent:Execution prompts return a CellUpdate object that we need to parse\n const agentResponse: AgentResponse = JSON.parse(content)\n newChatHistoryManager.addAIMessageFromAgentResponse(agentResponse)\n }\n } catch (error) {\n addAIMessageFromResponseAndUpdateState(\n (error as any).title ? (error as any).title : `${error}`,\n 'chat',\n newChatHistoryManager,\n false\n );\n addAIMessageFromResponseAndUpdateState(\n (error as any).hint ? (error as any).hint : `${error}`,\n completionRequest.metadata.promptType,\n newChatHistoryManager,\n true\n );\n }\n } else {\n // NON-STREAMING RESPONSES\n // Once we move everything to streaming, we can remove everything in this else block\n try {\n const aiResponse = await websocketClient.sendMessage<ICompletionRequest, ICompletionReply>(completionRequest);\n\n if (aiResponse.error) {\n\n console.group('Error calling OpenAI API:');\n console.error('Title:', aiResponse.error.title);\n console.error('Type:', aiResponse.error.error_type);\n console.error('Hint:', aiResponse.error.hint);\n console.log('Full Error Details:', aiResponse.error);\n console.groupEnd();\n\n // Log traceback separately to preserve formatting\n if (aiResponse.error.traceback) {\n console.group('Error Traceback:');\n console.error(aiResponse.error.traceback);\n console.groupEnd();\n }\n\n addAIMessageFromResponseAndUpdateState(\n aiResponse.error.hint\n ? aiResponse.error.hint\n : `${aiResponse.error.error_type}: ${aiResponse.error.title}`,\n completionRequest.metadata.promptType,\n newChatHistoryManager,\n true,\n aiResponse.error.title\n );\n } else {\n const content = aiResponse.items[0]?.content ?? '';\n\n if (completionRequest.metadata.promptType === 'agent:execution' || completionRequest.metadata.promptType === 'agent:autoErrorFixup') {\n // Agent:Execution prompts return a CellUpdate object that we need to parse\n const agentResponse: AgentResponse = JSON.parse(content)\n newChatHistoryManager.addAIMessageFromAgentResponse(agentResponse)\n } else {\n // For all other prompt types, we can just add the content to the chat history\n aiResponse.items.forEach((item: any) => {\n newChatHistoryManager.addAIMessageFromResponse(\n item.content || '',\n completionRequest.metadata.promptType\n );\n });\n setChatHistoryManager(newChatHistoryManager);\n }\n }\n } catch (error) {\n addAIMessageFromResponseAndUpdateState(\n (error as any).title ? (error as any).title : `${error}`,\n 'chat',\n newChatHistoryManager,\n false\n );\n addAIMessageFromResponseAndUpdateState(\n (error as any).hint ? (error as any).hint : `${error}`,\n completionRequest.metadata.promptType,\n newChatHistoryManager,\n true\n )\n } finally {\n // Reset states to allow future messages to show the \"Apply\" button\n setCodeReviewStatus('chatPreview');\n setLoadingAIResponse(false);\n }\n }\n\n return true\n }\n\n const addAIMessageFromResponseAndUpdateState = (\n messageContent: string,\n promptType: PromptType,\n chatHistoryManager: ChatHistoryManager,\n mitoAIConnectionError: boolean = false,\n mitoAIConnectionErrorType: string | null = null\n ): void => {\n /* \n Adds a new message to the chat history and updates the state. If we don't update the state \n then the chat history does not update in the UI. \n */\n chatHistoryManager.addAIMessageFromResponse(messageContent, promptType, mitoAIConnectionError, mitoAIConnectionErrorType)\n setChatHistoryManager(chatHistoryManager)\n }\n\n const markAgentForStopping = (): void => {\n // Signal that the agent should stop after current task\n shouldContinueAgentExecution.current = false;\n // Update UI to show stopping state\n setAgentExecutionStatus('stopping');\n }\n\n const finalizeAgentStop = (): void => {\n // Notify user that agent has been stopped\n shouldContinueAgentExecution.current = false;\n const newChatHistoryManager = getDuplicateChatHistoryManager();\n addAIMessageFromResponseAndUpdateState(\n \"Agent execution stopped. You can continue the conversation or start a new one.\",\n 'chat',\n newChatHistoryManager\n );\n // Reset agent to idle state\n setAgentExecutionStatus('idle');\n }\n\n const startAgentExecution = async (input: string, messageIndex?: number, selectedRules?: string[]): Promise<void> => {\n await createCheckpoint(app, setHasCheckpoint);\n setAgentExecutionStatus('working')\n\n // Enable follow mode when user starts agent execution\n setAutoScrollFollowMode(true);\n\n // Reset the execution flag at the start of a new plan\n shouldContinueAgentExecution.current = true;\n\n let isAgentFinished = false\n let agentExecutionDepth = 1\n let sendActiveCellOutput = false\n\n // Loop through each message in the plan and send it to the AI\n while (!isAgentFinished && agentExecutionDepth <= AGENT_EXECUTION_DEPTH_LIMIT) {\n // Check if we should continue execution\n if (!shouldContinueAgentExecution.current) {\n finalizeAgentStop()\n break;\n }\n\n // Only the first message sent to the Agent should contain the user's input.\n // All other messages only contain updated information about the state of the notebook.\n if (agentExecutionDepth === 1) {\n await sendAgentExecutionMessage(input, messageIndex, false, selectedRules)\n } else {\n await sendAgentExecutionMessage('', undefined, sendActiveCellOutput)\n\n // Reset flag back to false until the agent requests the active cell output again\n sendActiveCellOutput = false\n }\n\n // Iterate the agent execution depth\n agentExecutionDepth++\n\n // Check the code generated by the AI for blacklisted words before running it\n const aiDisplayOptimizedChatItem = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem();\n\n // # TODO: Make this is a helper function so we can also use it in the auto error fixup! \n if (aiDisplayOptimizedChatItem) {\n const aiGeneratedCode = getCodeBlockFromMessage(aiDisplayOptimizedChatItem.message);\n if (aiGeneratedCode) {\n const securityCheck = checkForBlacklistedWords(aiGeneratedCode);\n if (!securityCheck.safe) {\n console.error('Security Warning:', securityCheck.reason);\n addAIMessageFromResponseAndUpdateState(\n `I cannot execute this code without your approval because this code did not pass my security checks. ${securityCheck.reason}. For your safety, I am stopping execution of this plan.`,\n 'agent:execution',\n chatHistoryManager\n );\n finalizeAgentStop()\n break;\n }\n }\n }\n\n const agentResponse = aiDisplayOptimizedChatItem?.agentResponse\n\n if (agentResponse === undefined) {\n // If the agent response is undefined, we need to send a message to the agent\n isAgentFinished = true\n break;\n }\n\n if (agentResponse.type === 'finished_task') {\n // If the agent told us that it is finished, we can stop\n isAgentFinished = true\n break;\n }\n\n if (agentResponse.type === 'cell_update' && (agentResponse.cell_update === undefined || agentResponse.cell_update === null)) {\n // If the agent's response is not formatted correctly, stop. This is for typechecking mostly\n isAgentFinished = true\n break;\n }\n\n if (agentResponse.type === 'cell_update' && agentResponse.cell_update) {\n // Run the code and handle any errors\n await acceptAndRunCellUpdate(\n agentResponse.cell_update,\n notebookTracker,\n app,\n previewAICodeToActiveCell,\n acceptAICode\n )\n\n const status = await retryIfExecutionError(\n notebookTracker,\n app,\n getDuplicateChatHistoryManager,\n addAIMessageFromResponseAndUpdateState,\n sendAgentSmartDebugMessage,\n previewAICodeToActiveCell,\n acceptAICode,\n shouldContinueAgentExecution,\n finalizeAgentStop,\n chatHistoryManagerRef\n )\n\n if (status === 'interupted') {\n break;\n }\n\n // If we were not able to run the code, break out of the loop \n // so we don't continue to execute the plan. Instead, we encourage\n // the user to update the plan and try again. \n // TODO: Save this message in backend also even if there is not another message sent. \n // TODO: Move this into the retryIfExecutionError function?\n if (status === 'failure') {\n addAIMessageFromResponseAndUpdateState(\n \"I apologize, but I was unable to fix the error after 3 attempts. You may want to try rephrasing your request or providing more context.\",\n 'agent:execution',\n chatHistoryManager\n )\n break;\n }\n }\n\n if (agentResponse.type === 'get_cell_output') {\n // Mark that we should send the active cell output to the agent \n // in the next loop iteration\n sendActiveCellOutput = true\n }\n }\n\n if (agentExecutionDepth > AGENT_EXECUTION_DEPTH_LIMIT) {\n addAIMessageFromResponseAndUpdateState(\n \"Since I've been working for a while now, give my work a review and then tell me how to continue.\",\n 'agent:execution',\n chatHistoryManager\n )\n }\n\n setAgentExecutionStatus('idle')\n }\n\n const updateCodeDiffStripes = (aiMessage: OpenAI.ChatCompletionMessageParam | undefined, updateCellID: string): void => {\n if (!aiMessage) {\n return\n }\n\n const updateCellCode = getCellCodeByID(notebookTracker, updateCellID)\n\n if (updateCellID === undefined || updateCellCode === undefined) {\n return\n }\n\n // Extract the code from the AI's message and then calculate the code diffs\n const aiGeneratedCode = getCodeBlockFromMessage(aiMessage);\n const aiGeneratedCodeCleaned = removeMarkdownCodeFormatting(aiGeneratedCode || '');\n const { unifiedCodeString, unifiedDiffs } = getCodeDiffsAndUnifiedCodeString(updateCellCode, aiGeneratedCodeCleaned)\n\n\n // Store the code cell ID where we write the code diffs so that we can\n // accept or reject the code diffs to the correct cell\n cellStateBeforeDiff.current = { codeCellID: updateCellID, code: updateCellCode }\n\n // Temporarily write the unified code string to the active cell so we can display\n // the code diffs to the user\n writeCodeToCellByID(notebookTracker, unifiedCodeString, updateCellID)\n updateCodeCellsExtensions(unifiedDiffs)\n\n // Briefly highlight the code cell to draw the user's attention to it\n highlightCodeCell(notebookTracker, updateCellID)\n }\n\n const displayOptimizedChatHistory = chatHistoryManager.getDisplayOptimizedHistory()\n\n const previewAICodeToActiveCell = (): void => {\n setCodeReviewStatus('codeCellPreview')\n\n const activeCellID = getActiveCellID(notebookTracker)\n const lastAIDisplayMessage = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem()\n\n if (activeCellID === undefined || lastAIDisplayMessage === undefined) {\n return\n }\n\n scrollToCell(notebookTracker, activeCellID, undefined, 'end')\n updateCodeDiffStripes(lastAIDisplayMessage.message, activeCellID)\n updateCellToolbarButtons()\n }\n\n const acceptAICode = (): void => {\n const latestChatHistoryManager = chatHistoryManagerRef.current;\n const lastAIMessage = latestChatHistoryManager.getLastAIDisplayOptimizedChatItem()\n\n if (!lastAIMessage || !cellStateBeforeDiff.current) {\n return\n }\n\n const aiGeneratedCode = getCodeBlockFromMessage(lastAIMessage.message);\n if (!aiGeneratedCode) {\n return\n }\n\n setCodeReviewStatus('applied')\n\n const targetCellID = cellStateBeforeDiff.current.codeCellID\n // Write to the cell that has the code diffs\n writeCodeToCellAndTurnOffDiffs(aiGeneratedCode, targetCellID)\n\n // Focus on the active cell after the code is written\n const targetCell = getCellByID(notebookTracker, targetCellID)\n if (targetCell) {\n // Make the target cell the active cell\n setActiveCellByID(notebookTracker, targetCellID)\n // Focus on the active cell\n targetCell.activate();\n }\n }\n\n const resetForNewMessage = (): void => {\n /* \n Before we send the next user message, we need to reset the state for a new message:\n - Reject the previous Ai generated code if they did not accept it yet\n - Clear the next steps\n */\n rejectAICode()\n setNextSteps([])\n }\n\n const rejectAICode = (): void => {\n if (cellStateBeforeDiff.current === undefined) {\n return\n }\n\n setCodeReviewStatus('chatPreview')\n\n writeCodeToCellAndTurnOffDiffs(cellStateBeforeDiff.current.code, cellStateBeforeDiff.current.codeCellID)\n }\n\n const writeCodeToCellAndTurnOffDiffs = (code: string, codeCellID: string | undefined): void => {\n updateCodeCellsExtensions(undefined)\n cellStateBeforeDiff.current = undefined\n\n if (codeCellID !== undefined) {\n writeCodeToCellByID(notebookTracker, code, codeCellID)\n updateCellToolbarButtons()\n }\n }\n\n useEffect(() => {\n /* \n Add a new command to the JupyterLab command registry that applies the latest AI generated code\n to the active code cell. Do this inside of the useEffect so that we only register the command\n the first time we create the chat. Registering the command when it is already created causes\n errors.\n */\n app.commands.addCommand(COMMAND_MITO_AI_PREVIEW_LATEST_CODE, {\n execute: () => {\n previewAICodeToActiveCell()\n }\n });\n\n app.commands.addCommand(COMMAND_MITO_AI_APPLY_LATEST_CODE, {\n execute: () => {\n acceptAICode()\n }\n });\n\n app.commands.addCommand(COMMAND_MITO_AI_REJECT_LATEST_CODE, {\n execute: () => {\n rejectAICode()\n }\n });\n\n /* \n Add a new command to the JupyterLab command registry that sends the current chat message.\n We use this to automatically send the message when the user adds an error to the chat. \n */\n app.commands.addCommand(COMMAND_MITO_AI_SEND_DEBUG_ERROR_MESSAGE, {\n execute: async (args?: ReadonlyPartialJSONObject) => {\n if (args?.input) {\n await sendSmartDebugMessage(args.input.toString())\n }\n }\n });\n\n app.commands.addCommand(COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE, {\n execute: async () => {\n await sendExplainCodeMessage()\n }\n });\n\n app.commands.addCommand(COMMAND_MITO_AI_SEND_AGENT_MESSAGE, {\n execute: async (args?: ReadonlyPartialJSONObject) => {\n if (args?.input) {\n // Make sure we're in agent mode \n console.log('Setting agent mode to true')\n\n // If its not already in agent mode, start a new chat in agent mode\n if (!agentModeEnabledRef.current) {\n await startNewChat();\n setAgentModeEnabled(true);\n }\n\n // Wait for the next tick to ensure state update is processed\n await new Promise(resolve => setTimeout(resolve, 0));\n\n await startAgentExecution(args.input.toString())\n }\n }\n });\n\n\n /* \n Register the code cell toolbar buttons for accepting and rejecting code.\n */\n app.commands.addCommand(COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE, {\n label: `Accept ${operatingSystem === 'mac' ? '⌘Y' : 'Ctrl+Y'}`,\n className: 'text-button-mito-ai button-base button-green',\n caption: 'Accept Code',\n execute: () => { acceptAICode() },\n // We use the cellStateBeforeDiff because it contains the code cell ID that we want to write to\n // and it will only be set when the codeReviewStatus is 'codeCellPreview'\n isVisible: () => {\n try {\n return notebookTracker.activeCell?.model.id === cellStateBeforeDiff.current?.codeCellID\n } catch (error) {\n console.error('Error checking if code cell toolbar accept code is visible', error)\n return false;\n }\n }\n });\n\n app.commands.addCommand(COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE, {\n label: `Reject ${operatingSystem === 'mac' ? '⌘U' : 'Ctrl+U'}`,\n className: 'text-button-mito-ai button-base button-red',\n caption: 'Reject Code',\n execute: () => { rejectAICode() },\n isVisible: () => {\n try {\n return notebookTracker.activeCell?.model.id === cellStateBeforeDiff.current?.codeCellID\n } catch (error) {\n console.error('Error checking if code cell toolbar reject code is visible', error)\n return false;\n }\n }\n });\n }, []);\n\n useEffect(() => {\n // Register keyboard shortcuts \n const accelYDisposable = app.commands.addKeyBinding({\n command: codeReviewStatus === 'chatPreview' ?\n COMMAND_MITO_AI_PREVIEW_LATEST_CODE :\n COMMAND_MITO_AI_APPLY_LATEST_CODE,\n keys: ['Accel Y'],\n selector: 'body',\n });\n\n const accelDDisposable = app.commands.addKeyBinding({\n command: COMMAND_MITO_AI_REJECT_LATEST_CODE,\n keys: ['Accel U'],\n selector: 'body',\n preventDefault: true,\n });\n\n\n // Clean up the key bindings when the component unmounts or when codeReviewStatus changes\n // This prevents keyboard shortcuts from persisting when they shouldn't.\n return () => {\n accelYDisposable.dispose();\n accelDDisposable.dispose();\n };\n }, [codeReviewStatus]);\n\n const updateCellToolbarButtons = (): void => {\n // Tell Jupyter to re-evaluate if the toolbar buttons should be visible.\n // Without this, the user needs to take some action, like switching to a different cell \n // and then switching back in order for the Jupyter to re-evaluate if it should\n // show the toolbar buttons.\n app.commands.notifyCommandChanged(COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE);\n app.commands.notifyCommandChanged(COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE);\n }\n \n const codeDiffStripesCompartments = React.useRef(new Map<string, Compartment>());\n\n // Function to update the extensions of code cells\n const updateCodeCellsExtensions = (unifiedDiffLines: UnifiedDiffLine[] | undefined): void => {\n const notebook = notebookTracker.currentWidget?.content;\n if (!notebook) {\n return;\n }\n\n const activeCellIndex = notebook.activeCellIndex\n\n notebook.widgets.forEach((cell, index) => {\n if (cell.model.type === 'code') {\n\n const isActiveCodeCell = activeCellIndex === index\n\n // TODO: Instead of casting, we should rely on the type system to make \n // sure we're using the correct types!\n const codeCell = cell as CodeCell;\n\n const cmEditor = codeCell.editor as CodeMirrorEditor;\n const editorView = cmEditor?.editor;\n\n if (editorView) {\n const cellId = codeCell.model.id;\n let compartment = codeDiffStripesCompartments.current.get(cellId);\n\n if (!compartment) {\n // Create a new compartment and store it\n compartment = new Compartment();\n codeDiffStripesCompartments.current.set(cellId, compartment);\n\n // Apply the initial configuration\n editorView.dispatch({\n effects: StateEffect.appendConfig.of(\n compartment.of(unifiedDiffLines !== undefined && isActiveCodeCell ? codeDiffStripesExtension({ unifiedDiffLines: unifiedDiffLines }) : [])\n ),\n });\n } else {\n // Reconfigure the compartment\n editorView.dispatch({\n effects: compartment.reconfigure(\n unifiedDiffLines !== undefined && isActiveCodeCell ? codeDiffStripesExtension({ unifiedDiffLines: unifiedDiffLines }) : []\n ),\n });\n }\n } else {\n console.log('Mito AI: editor view not found when applying code diff stripes')\n }\n }\n });\n };\n\n const lastAIMessagesIndex = chatHistoryManager.getLastAIMessageIndex()\n\n return (\n <div className=\"chat-taskpane\">\n <div className=\"chat-taskpane-header\">\n <div className=\"chat-taskpane-header-left\">\n <IconButton\n icon={<settingsIcon.react />}\n title=\"Mito AI Settings\"\n onClick={() => {\n void app.commands.execute(COMMAND_MITO_AI_SETTINGS);\n }}\n />\n </div>\n <div className=\"chat-taskpane-header-right\">\n <IconButton\n icon={<addIcon.react />}\n title=\"Start New Chat\"\n onClick={async () => { await startNewChat() }}\n />\n <DropdownMenu\n trigger={\n <button className=\"icon-button\" title=\"Chat Threads\" onClick={fetchChatThreads}>\n <historyIcon.react />\n </button>\n }\n items={chatThreads.length > 0\n ? chatThreads.map(thread => ({\n label: thread.name,\n primaryIcon: activeThreadIdRef.current === thread.thread_id ? OpenIndicatorLabIcon.react : undefined,\n onClick: () => fetchChatHistoryAndSetActiveThread(thread.thread_id),\n secondaryActions: [\n {\n icon: deleteIcon.react,\n onClick: () => deleteThread(thread.thread_id),\n tooltip: 'Delete this chat',\n }\n ]\n }))\n : [{\n label: \"No chat history available\",\n disabled: true,\n onClick: () => { }\n }]\n }\n alignment=\"right\"\n />\n </div>\n </div>\n <div className=\"chat-messages\" ref={chatMessagesRef}>\n {displayOptimizedChatHistory.length === 0 &&\n <div className=\"chat-empty-message\">\n <div style={{ margin: '0 auto 8px', display: 'block', textAlign: 'center' }}>\n <MitoLogo width=\"60\" height=\"30\" />\n </div>\n <span style={{ display: 'block', textAlign: 'center', fontWeight: 'bold', fontSize: '20px', marginBottom: '15px' }}>Data Copilot</span>\n <CTACarousel app={app} />\n </div>\n }\n {displayOptimizedChatHistory.map((displayOptimizedChat, index) => {\n return (\n <ChatMessage\n key={index}\n message={displayOptimizedChat.message}\n promptType={displayOptimizedChat.promptType}\n messageType={displayOptimizedChat.type}\n agentResponse={displayOptimizedChat.agentResponse}\n codeCellID={displayOptimizedChat.codeCellID}\n mitoAIConnectionError={displayOptimizedChat.type === 'connection error'}\n mitoAIConnectionErrorType={displayOptimizedChat.mitoAIConnectionErrorType || null}\n messageIndex={index}\n notebookTracker={notebookTracker}\n renderMimeRegistry={renderMimeRegistry}\n app={app}\n isLastAiMessage={index === lastAIMessagesIndex}\n isLastMessage={index === displayOptimizedChatHistory.length - 1}\n operatingSystem={operatingSystem}\n previewAICode={previewAICodeToActiveCell}\n acceptAICode={acceptAICode}\n rejectAICode={rejectAICode}\n onUpdateMessage={handleUpdateMessage}\n contextManager={contextManager}\n codeReviewStatus={codeReviewStatus}\n setNextSteps={setNextSteps}\n agentModeEnabled={agentModeEnabled}\n />\n )\n }).filter(message => message !== null)}\n {loadingAIResponse &&\n <div className=\"chat-loading-message\">\n Thinking <LoadingDots />\n </div>\n }\n {/* Agent restore button - shows after agent completes and when agent checkpoint exists */}\n {hasCheckpoint &&\n agentModeEnabled &&\n agentExecutionStatus === 'idle' &&\n displayOptimizedChatHistory.length > 0 && (\n <div className='message message-assistant-chat'>\n <TextAndIconButton\n text=\"Revert changes\"\n icon={UndoIcon}\n title=\"Revert changes\"\n onClick={() => restoreCheckpoint(app, notebookTracker, setHasCheckpoint, getDuplicateChatHistoryManager, setChatHistoryManager)}\n variant=\"gray\"\n width=\"fit-contents\"\n iconPosition=\"left\"\n />\n <p className=\"text-muted text-sm\">\n Undo the most recent changes made by the agent\n </p>\n </div>\n )}\n </div>\n {displayOptimizedChatHistory.length === 0 && (\n <div className=\"suggestions-container\">\n <ScrollableSuggestions\n onSelectSuggestion={(prompt) => {\n if (agentModeEnabled) {\n void startAgentExecution(prompt);\n } else {\n void sendChatInputMessage(prompt);\n }\n }}\n />\n </div>\n )}\n <div className={`connected-input-container ${nextSteps.length > 0 ? 'has-next-steps' : ''}`}>\n {nextSteps.length > 0 && (\n <NextStepsPills\n nextSteps={nextSteps}\n onSelectNextStep={agentModeEnabled ? startAgentExecution : sendChatInputMessage}\n displayedNextStepsIfAvailable={displayedNextStepsIfAvailable}\n setDisplayedNextStepsIfAvailable={setDisplayedNextStepsIfAvailable}\n />\n )}\n <ChatInput\n initialContent={''}\n placeholder={\n agentExecutionStatus === 'working' ? 'Agent is working...' :\n agentExecutionStatus === 'stopping' ? 'Agent is stopping...' :\n agentModeEnabled ? 'Ask agent to do anything' :\n displayOptimizedChatHistory.length < 2 ? `Ask question (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`\n : `Ask followup (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}E), @ to mention`\n }\n onSave={agentModeEnabled ? startAgentExecution : sendChatInputMessage}\n onCancel={undefined}\n isEditing={false}\n contextManager={contextManager}\n notebookTracker={notebookTracker}\n renderMimeRegistry={renderMimeRegistry}\n agentModeEnabled={agentModeEnabled}\n />\n </div>\n {agentExecutionStatus !== 'working' && agentExecutionStatus !== 'stopping' && (\n <div className=\"chat-controls\">\n <div className=\"chat-controls-left\">\n <ToggleButton\n leftText=\"Chat\"\n leftTooltip=\"Chat mode suggests an edit to the active cell and let's you decide to accept or reject it.\"\n rightText=\"Agent\"\n rightTooltip=\"Agent mode writes and executes code until it's finished your request.\"\n isLeftSelected={!agentModeEnabled}\n onChange={async (isLeftSelected) => {\n await startNewChat(); // TODO: delete thread instead of starting new chat\n setAgentModeEnabled(!isLeftSelected);\n // Clear agent checkpoint when switching modes\n setHasCheckpoint(false);\n // Focus the chat input directly\n const chatInput = document.querySelector('.chat-input') as HTMLTextAreaElement;\n if (chatInput) {\n chatInput.focus();\n }\n }}\n />\n <ModelSelector onConfigChange={(config) => {\n // Just update the backend\n void updateModelOnBackend(config.model);\n }} />\n </div>\n <button\n className=\"button-base submit-button\"\n onClick={() => {\n const chatInput = document.querySelector('.chat-input') as HTMLTextAreaElement;\n if (chatInput && chatInput.value) {\n // Simulate an Enter keypress\n // This triggers the existing submission logic in ChatInput.tsx\n const enterEvent = new KeyboardEvent('keydown', {\n key: 'Enter',\n code: 'Enter',\n keyCode: 13,\n which: 13,\n bubbles: true,\n cancelable: true\n });\n chatInput.dispatchEvent(enterEvent);\n }\n }}\n >\n <span className=\"submit-text\">Submit</span> ⏎\n </button>\n </div>\n )}\n {(agentExecutionStatus === 'working' || agentExecutionStatus === 'stopping') && (\n <button\n className=\"button-base button-red stop-agent-button\"\n onClick={markAgentForStopping}\n disabled={agentExecutionStatus === 'stopping'}\n data-testid=\"stop-agent-button\"\n >\n {agentExecutionStatus === 'stopping' ? (\n <div className=\"stop-agent-button-content\">Stopping<LoadingCircle /> </div>\n ) : (\n 'Stop Agent'\n )}\n </button>\n )}\n </div>\n );\n};\n\nexport default ChatTaskpane;\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport { ReactWidget } from '@jupyterlab/apputils';\nimport ChatTaskpane from './ChatTaskpane';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { LabIcon } from '@jupyterlab/ui-components';\nimport chatIconSvg from '../../../src/icons/ChatIcon.svg';\nimport { IContextManager } from '../ContextManager/ContextManagerPlugin';\nimport { JupyterFrontEnd } from '@jupyterlab/application';\nimport { getOperatingSystem, type OperatingSystem } from '../../utils/user';\nimport type { IChatWidget as IChatWidget } from './token';\nimport { Signal, type ISignal } from '@lumino/signaling';\nimport type {\n CompleterMessage,\n ErrorMessage,\n IAICapabilities\n} from '../../websockets/completions/CompletionModels';\nimport { CompletionWebsocketClient } from '../../websockets/completions/CompletionsWebsocketClient';\nexport const chatIcon = new LabIcon({\n name: 'mito_ai',\n svgstr: chatIconSvg\n});\n\nexport class ChatWidget extends ReactWidget implements IChatWidget {\n protected websocketClient: CompletionWebsocketClient;\n private _capabilitiesChanged = new Signal<this, IAICapabilities>(this);\n private _lastErrorChanged = new Signal<this, ErrorMessage>(this);\n\n constructor(\n protected options: {\n app: JupyterFrontEnd;\n notebookTracker: INotebookTracker;\n renderMimeRegistry: IRenderMimeRegistry;\n contextManager: IContextManager;\n operatingSystem: OperatingSystem;\n }\n ) {\n super();\n // Create the websocket client\n this.websocketClient = new CompletionWebsocketClient({\n serverSettings: options.app.serviceManager.serverSettings\n });\n\n this.websocketClient.messages.connect(this.onMessage, this);\n\n // Initialize the websocket client\n this.websocketClient.initialize().catch((error: any) => {\n console.error('Failed to initialized the websocketClient for the Mito AI Chat panel', error);\n });\n this.title.icon = chatIcon;\n this.title.caption = 'AI Chat for your JupyterLab';\n }\n\n /**\n * Signal emitted when the capabilities of the AI provider changes.\n */\n get capabilitiesChanged(): ISignal<this, IAICapabilities> {\n return this._capabilitiesChanged;\n }\n\n /**\n * Signal emitted when the last error of the AI provider changes.\n */\n get lastErrorChanged(): ISignal<this, ErrorMessage> {\n return this._lastErrorChanged;\n }\n\n /**\n * Dispose the widget.\n */\n dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this.websocketClient.dispose();\n super.dispose();\n }\n\n protected render(): JSX.Element {\n return (\n <ChatTaskpane\n app={this.options.app}\n notebookTracker={this.options.notebookTracker}\n renderMimeRegistry={this.options.renderMimeRegistry}\n contextManager={this.options.contextManager}\n operatingSystem={this.options.operatingSystem}\n websocketClient={this.websocketClient}\n />\n );\n }\n\n protected onMessage(\n client: CompletionWebsocketClient,\n message: CompleterMessage\n ): void {\n switch (message.type) {\n case 'ai_capabilities':\n this._capabilitiesChanged.emit(message);\n break;\n case 'error':\n this._lastErrorChanged.emit(message);\n break;\n }\n }\n}\n\nexport function buildChatWidget(\n app: JupyterFrontEnd,\n notebookTracker: INotebookTracker,\n renderMimeRegistry: IRenderMimeRegistry,\n contextManager: IContextManager,\n): ChatWidget {\n // Get the operating system here so we don't have to do it each time the chat changes.\n // The operating system won't change, duh.\n const operatingSystem = getOperatingSystem();\n\n const chatWidget = new ChatWidget({\n app,\n notebookTracker,\n renderMimeRegistry,\n contextManager,\n operatingSystem\n });\n chatWidget.id = 'mito_ai';\n return chatWidget;\n}\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { Extension, Facet, RangeSetBuilder } from '@codemirror/state';\nimport {\n Decoration,\n DecorationSet,\n EditorView,\n ViewPlugin,\n ViewUpdate\n} from '@codemirror/view';\nimport { UnifiedDiffLine } from '../../utils/codeDiff';\nimport { deepEqualArrays } from '../../utils/arrays';\n\n\n// Defines new styles for this extension\nconst baseTheme = EditorView.baseTheme({\n // We need to set some transparency because the stripes are above the selection layer\n '.cm-codeDiffRemovedStripe': { backgroundColor: 'color-mix(in srgb, var(--error-color) 30%, transparent)' },\n '.cm-codeDiffInsertedStripe': { backgroundColor: 'color-mix(in srgb, var(--jp-accent-color2) 35%, transparent)' },\n});\n\n// Resolve step to use in the editor\nconst unifiedDiffLines = Facet.define<UnifiedDiffLine[]>({\n combine: (unifiedDiffLines) => {\n return unifiedDiffLines\n }\n});\n\n// Add decoration to editor lines\nconst removedStripe = Decoration.line({\n attributes: { class: 'cm-codeDiffRemovedStripe' }\n});\n\nconst insertedStripe = Decoration.line({\n attributes: { class: 'cm-codeDiffInsertedStripe' }\n});\n\n// Create the range of lines requiring decorations\nconst getCodeDiffStripesDecoration = (view: EditorView): DecorationSet => {\n const unifiedDiffLinesFacet = view.state.facet(unifiedDiffLines)[0];\n const builder = new RangeSetBuilder<Decoration>();\n for (const { from, to } of view.visibleRanges) {\n for (let pos = from; pos <= to;) {\n const line = view.state.doc.lineAt(pos);\n\n // The code mirror line numbers are 1-indexed, but our diff lines are 0-indexed\n if (line.number - 1 >= (unifiedDiffLinesFacet?.length ?? 0)) {\n /* \n Because we need to rerender the decorations each time the doc changes or viewport updates\n (maybe we don't need to, but the code mirror examples does this so we will to for now) there\n is a race condition where sometimes the content of the code cell updates before the unified diff lines\n are updated. As a result, we need to break out of the loop before we get a null pointer error.\n\n This isn't a problem because right afterwards, the code mirror updates again due to the unified diff lines\n being updated. In that render, we get the correct results. \n */ \n break\n }\n if (unifiedDiffLinesFacet?.[line.number - 1]?.type === 'removed') {\n builder.add(line.from, line.from, removedStripe);\n }\n if (unifiedDiffLinesFacet?.[line.number - 1]?.type === 'inserted') {\n builder.add(line.from, line.from, insertedStripe);\n }\n pos = line.to + 1;\n }\n }\n return builder.finish();\n}\n\n// Update the decoration status of the editor view\nconst showStripes = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = getCodeDiffStripesDecoration(view);\n }\n\n update(update: ViewUpdate): void {\n const oldUnifiedDiffLines = update.startState.facet(unifiedDiffLines);\n const newUnifiedDiffLines = update.view.state.facet(unifiedDiffLines);\n\n if (\n update.docChanged ||\n update.viewportChanged ||\n !deepEqualArrays(oldUnifiedDiffLines[0] ?? [], newUnifiedDiffLines[0] ?? [])\n ) {\n this.decorations = getCodeDiffStripesDecoration(update.view);\n }\n }\n },\n {\n decorations: v => v.decorations\n }\n);\n\n// Create the Code Mirror Extension to apply the code diff stripes to the code mirror editor\nexport function codeDiffStripesExtension(options: { unifiedDiffLines?: UnifiedDiffLine[] } = {}): Extension {\n return [\n baseTheme,\n options.unifiedDiffLines ? unifiedDiffLines.of(options.unifiedDiffLines) : [],\n showStripes\n ];\n}\n\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nconst getCookie = (name: string): string | null => {\n const nameEQ = name + \"=\";\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n if (!c) continue;\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n}\n\nconst deleteCookie = (name: string): void => {\n // Delete for current domain\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\n // Delete for all subdomains\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=.trymito.io;`;\n}\n\nconst getFirstMessageFromCookies = (): string | null => {\n const firstMessage = getCookie('mito-ai-first-message');\n if (firstMessage) {\n // Clean up cookie after reading\n deleteCookie('mito-ai-first-message');\n return firstMessage;\n }\n return null;\n}\n\nexport const getFirstMessageFromCookie = (): string | undefined => {\n // Primary: Check cookies (works through SSO flow)\n const firstMessage = getFirstMessageFromCookies();\n console.log('Cookie check:', firstMessage);\n\n return firstMessage || undefined;\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport type { WidgetTracker } from '@jupyterlab/apputils';\nimport { Token } from '@lumino/coreutils';\nimport type { ISignal } from '@lumino/signaling';\nimport type { Widget } from '@lumino/widgets';\nimport type {\n ErrorMessage,\n IAICapabilities\n} from '../../websockets/completions/CompletionModels';\n\n/**\n * The chat panel interface.\n */\nexport type IChatWidget = Widget & {\n /**\n * Signal emitted when the capabilities of the AI provider changes.\n */\n readonly capabilitiesChanged: ISignal<IChatWidget, IAICapabilities>;\n /**\n * Signal emitted when the last error of the AI provider changes.\n */\n readonly lastErrorChanged: ISignal<IChatWidget, ErrorMessage>;\n};\n\n/* \nBecause other extensions rely on the Chat plugin, we need to make sure that the \nChat plugin is loaded before these other extensions. \n\nFor example, the emptyCell extension relies on the Chat plugin in order to \nfind the keybindings associated with the COMMAND_MITO_AI_OPEN_CHAT command. \n\nBy providing a chat plugin token, we can require it from the other extensions. \nThis makes sure that the chat plugin is loaded before these other extensions. \n*/\n\nexport const IChatTracker = new Token<WidgetTracker<IChatWidget>>(\n 'mito-ai/IChatTracker',\n 'Widget tracker for the chat sidebar.'\n);\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application';\nimport { Token } from '@lumino/coreutils';\nimport { AppBuilderWebsocketClient } from '../../websockets/appBuilder/appBuilderWebsocketClient';\n\n/**\n * The token for the AppBuilder service.\n */\nexport const IAppBuilderService = new Token<IAppBuilderService>(\n 'mito-ai:IAppBuilderService',\n 'Token for the AppBuilder service that provides access to the websocket client'\n);\n\n/**\n * Interface for the AppBuilder service.\n */\nexport interface IAppBuilderService {\n /**\n * The websocket client for app building.\n */\n readonly client: AppBuilderWebsocketClient;\n}\n\n/**\n * Implementation of the AppBuilder service.\n */\nclass AppBuilderService implements IAppBuilderService {\n /**\n * The websocket client for app building.\n */\n readonly client: AppBuilderWebsocketClient;\n\n /**\n * Create a new AppBuilder service.\n */\n constructor(app: JupyterFrontEnd) {\n // Create the websocket client with the app's server settings\n this.client = new AppBuilderWebsocketClient({\n serverSettings: app.serviceManager.serverSettings\n });\n\n // Initialize the websocket connection in the background\n void this.client.initialize().catch(error => {\n console.error('Failed to initialize AppBuilder websocket client:', error);\n // We don't need to throw the error since the client will attempt to reconnect when used\n });\n }\n}\n\n/**\n * The AppBuilder plugin that provides the websocket client.\n */\nconst AppBuilderPlugin: JupyterFrontEndPlugin<IAppBuilderService> = {\n id: 'mito-ai:app-builder',\n autoStart: true,\n provides: IAppBuilderService,\n activate: (app: JupyterFrontEnd): IAppBuilderService => {\n console.log('mito-ai: AppBuilderPlugin activated');\n return new AppBuilderService(app);\n }\n};\n\nexport default AppBuilderPlugin; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { Notification } from '@jupyterlab/apputils';\n\nexport const deployAppNotification = (url: string): void => {\n // Total deployment time in milliseconds (3 minutes = 180000ms)\n const totalDeploymentTime = 180000;\n \n // Create an array of deployment steps\n const deploymentSteps = [\n \"Step 1/7: Preparing your app...\",\n \"Step 2/7: Assembling clouds...\",\n \"Step 3/7: Building your app...\",\n \"Step 4/7: Configuring network settings...\",\n \"Step 5/7: Adding final touches...\",\n \"Step 6/7: Running security checks...\",\n \"Deployment complete! Your app is ready.\"\n ];\n \n // Create initial \"in progress\" notification to get notificaiton id\n const notificationId = Notification.emit(deploymentSteps[0]!, 'in-progress', {\n autoClose: false\n });\n \n // Calculate time between steps (evenly distribute throughout the total deployment time)\n const stepInterval = totalDeploymentTime / (deploymentSteps.length - 1);\n \n // Update message at each step interval\n for (let i = 1; i < deploymentSteps.length; i++) {\n setTimeout(() => {\n const isLastStep = i === deploymentSteps.length - 1;\n Notification.update({\n id: notificationId,\n message: deploymentSteps[i],\n type: isLastStep ? 'default' : 'in-progress',\n autoClose: false,\n ...(isLastStep && {\n actions: [\n {\n label: \"Launch Application Now\",\n displayType: 'accent', // Change display type to link\n callback: () => {\n window.open(url, '_blank');\n }\n }\n ]\n })\n });\n }, i * stepInterval);\n }\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { CodeCell, MarkdownCell } from '@jupyterlab/cells';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { getIncludeCellInApp } from '../../utils/notebook';\nimport { getCellContent, transformMitoAppInput, removeInvalidLines } from './cellConversionUtils';\nimport { generateRequirementsTxt } from './requirementsUtils';\nimport { saveFileWithKernel } from './fileUtils';\nimport { generateDisplayVizFunction, transformVisualizationCell } from './visualizationConversionUtils';\nimport { IAppBuilderService } from './AppBuilderPlugin';\nimport { UUID } from '@lumino/coreutils';\nimport { deployAppNotification } from './DeployAppNotification';\nimport { IBuildAppReply } from '../../websockets/appBuilder/appBuilderModels';\n\n/* \nThis function converts a notebook into a streamlit app. It processes each cell one by one,\nand makes sure to convert specific functionality from the jupyter to streamlit equivalents.\nFor example, in Jupyter, you can display a streamlit graph by calling plt.show(), whereas in Streamlit,\nyou need to call st.plotly_chart().\n\nThis function returns:\n1. A <notebook-name>-streamlit-app.py file\n2. A requirements.txt file that lists the dependencies for the streamlit app\n*/\nexport const convertNotebookToStreamlit = async (\n notebookTracker: INotebookTracker,\n appBuilderService?: IAppBuilderService,\n): Promise<void> => {\n const notebookPanel = notebookTracker.currentWidget;\n if (!notebookPanel) {\n console.error('No notebook is currently active');\n return;\n }\n\n const notebookPath = notebookPanel.context.path;\n const notebookName = PathExt.basename(notebookPath, '.ipynb');\n const appFilePath = `./app.py`;\n\n // Initialize Streamlit code with imports\n let streamlitCode = [\n \"import streamlit as st\",\n \"\",\n `st.title('${notebookName}')`,\n generateDisplayVizFunction(),\n \"\"\n ];\n\n // TODO: we can set the app favicon https://docs.streamlit.io/develop/api-reference/configuration/st.set_page_config\n\n console.log(\"Converting notebook code to streamlit app\")\n // Process each cell\n notebookPanel.content.widgets.forEach((cellWidget) => {\n const cellModel = cellWidget.model;\n let cellContent = getCellContent(cellModel);\n\n // Check if the cell is marked to skip.\n const includeCellInApp = getIncludeCellInApp(notebookTracker, cellModel.id)\n if (!includeCellInApp) {\n return\n }\n\n // Check if it's an empty code cell\n if (cellModel.type === 'code' && !cellModel.sharedModel.source.trim()) {\n return\n }\n\n if (cellWidget instanceof MarkdownCell) {\n streamlitCode.push(\"\\n# Converting Markdown Cell\");\n // Convert markdown cells to st.markdown\n // TODO: The single # Heading markdown in Streamlit is as big as the title, maybe larger.\n // So we might want to downsize them all by one # to make it look nicer.\n const escapedContent = cellContent.replace(/\"\"\"/g, '\\\\\"\\\\\"\\\\\"');\n streamlitCode.push(`st.markdown(\"\"\"${escapedContent}\"\"\")`);\n streamlitCode.push(\"\");\n } else if (cellWidget instanceof CodeCell) {\n\n streamlitCode.push(\"\\n# Converting Code Cell\");\n\n // Convert the Mito App Input into Streamlit components\n // Temporarily replace \\\\n with a placeholder\n const placeholder = '__ESCAPED_NEWLINE_PLACEHOLDER__';\n cellContent = cellContent.replace(/\\\\n/g, placeholder);\n\n cellContent = removeInvalidLines(cellContent);\n\n // Now split on actual newlines safely\n cellContent = cellContent.split('\\n').map(line => {\n return transformMitoAppInput(line);\n }).join('\\n');\n\n // Transform the cell for visualizations using our new unified approach\n cellContent = transformVisualizationCell(cellContent);\n // Restore the \\\\n sequences\n cellContent = cellContent.replace(new RegExp(placeholder, 'g'), '\\\\n');\n\n streamlitCode = streamlitCode.concat(cellContent);\n\n /* \n Displaying dataframes:\n \n Streamlit automatically renders variables that appear alone on a line,\n similar to Jupyter's behavior with the last line of a cell.\n \n Benefits:\n - Default Mito dataframe output works without modification\n \n TODO: Edge cases to handle:\n 1. User/AI-generated display(df) calls. We can tell the AI to not generate this. Users almost never do.\n 2. mitosheet.sheet() calls - consider converting to Mito spreadsheet component or just dataframe output\n */\n }\n });\n\n // Create the streamlit app.py file\n const streamlitSourceCode = streamlitCode.join('\\n');\n\n // Build the requirements.txt file\n console.debug(\"Building requirements.txt file\")\n const requirementsContent = await generateRequirementsTxt(notebookTracker);\n\n // Save the files to the current directory\n await saveFileWithKernel(notebookTracker, './requirements.txt', requirementsContent);\n await saveFileWithKernel(notebookTracker, appFilePath, streamlitSourceCode);\n\n // Get the full path to the folder\n const pathToFolder = PathExt.dirname(notebookPath);\n\n // After building the files, we need to send a request to the backend to deploy the app\n if (appBuilderService) {\n try {\n console.log(\"Sending request to deploy the app\");\n \n const response: IBuildAppReply = await appBuilderService.client.sendMessage({\n type: 'build-app',\n message_id: UUID.uuid4(),\n path: pathToFolder\n });\n \n console.log(\"App deployment response:\", response);\n\n const url = response.url;\n deployAppNotification(url);\n\n } catch (error) {\n // TODO: Do something with the error\n console.error(\"Error deploying app:\", error);\n }\n } else {\n console.warn(\"AppBuilderService not provided - app will not be deployed\");\n }\n};","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { ICellModel } from \"@jupyterlab/cells\";\n\n// Helper function to get cell content\nexport const getCellContent = (cell: ICellModel): string => {\n return cell.sharedModel.source;\n};\n\n// Helper function to get cell type\nexport const getCellType = (cell: ICellModel): string => {\n return cell.type;\n};\n\nconst getVariableNameDefaultAndLabel = (line: string, identifier: string): [string, string, string] => {\n // Split on the equal sign to get the variable name. We must use this full\n // name because its what the python script uses. \n const variableName = line.split(' ')[0]?.trim() || ''\n\n // Split on the identifier to get the unique label for this variable\n let variableLabel = variableName?.split(identifier)[1] || ''\n\n if (variableLabel.startsWith(\"_\")) {\n variableLabel = variableLabel.slice(1)\n }\n\n // Get the value after the equal sign to get the default value for the variable\n const defaultValue = line.split('=')[1]?.trim() || ''\n\n return [variableName, variableLabel, defaultValue]\n}\n\nexport const transformMitoAppInput = (line: string): string => {\n\n const textInputIdentifer = 'mito_app_text_input'\n if (line.startsWith(textInputIdentifer)) {\n const [variableName, variableLabel, defaultValue] = getVariableNameDefaultAndLabel(line, textInputIdentifer)\n return `${variableName} = st.text_input('${variableLabel}', ${defaultValue})`\n }\n\n const numberInputIdentifier = 'mito_app_number_input'\n if (line.startsWith(numberInputIdentifier)) {\n const [variableName, variableLabel, defaultValue] = getVariableNameDefaultAndLabel(line, numberInputIdentifier)\n return `${variableName} = st.number_input('${variableLabel}', ${defaultValue})`\n }\n\n const dateInputIdentifier = 'mito_app_date_input'\n if (line.startsWith(dateInputIdentifier)) {\n const [variableName, variableLabel, defaultValue] = getVariableNameDefaultAndLabel(line, dateInputIdentifier)\n\n // The user is responsible for making sure the right hand side is a valid option:\n // \"today\", datetime.date, datetime.datetime, \"YYYY-MM-DD\". \n return `${variableName} = st.date_input('${variableLabel}', ${defaultValue})`\n }\n\n const booleanInputIdentifier = 'mito_app_boolean_input'\n if (line.startsWith(booleanInputIdentifier)) {\n const [variableName, variableLabel, defaultValue] = getVariableNameDefaultAndLabel(line, booleanInputIdentifier)\n return `${variableName} = st.checkbox('${variableLabel}', ${defaultValue})`\n }\n\n // If there was no text_input to create, then just return the original line.\n return line\n}\n\nexport const removeInvalidLines = (cellContent: string): string => {\n // Remove lines that are special to ipython and won't work in streamlit. These lines start with:\n // ! -> like !pip install pandas\n // % -> like %pip install pandas\n // %% -> like %%pip install pandas\n const invalidLinesPrefixes = ['!', '%', '%%']\n return cellContent.split('\\n').filter(line => !invalidLinesPrefixes.some(prefix => line.trim().startsWith(prefix))).join('\\n')\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { INotebookTracker } from \"@jupyterlab/notebook\";\n\nexport const saveFileWithKernel = async (\n notebookTracker: INotebookTracker,\n filePath: string,\n fileContent: string\n): Promise<void> => {\n const notebookPanel = notebookTracker.currentWidget;\n if (!notebookPanel) {\n console.error('No notebook is currently active');\n return;\n }\n\n try {\n // Use the kernel to execute Python code\n const session = notebookPanel.sessionContext.session;\n if (session) {\n // Escape any triple quotes in the source code\n\n const escapedContent = fileContent\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"');\n\n // Create Python code to save the file\n const pythonCode = `\nimport os\n\n# Ensure directory exists\nos.makedirs(os.path.dirname(\"${filePath.replace(/\\\\/g, '\\\\\\\\')}\"), exist_ok=True)\n\n# Save the file\nwith open(\"${filePath.replace(/\\\\/g, '\\\\\\\\')}\", 'w') as f:\n f.write(\"\"\"${escapedContent}\"\"\")\n\nprint(f\"File saved successfully to ${filePath}\")\n `;\n\n if (!session.kernel) {\n throw new Error('Kernel is not available');\n }\n // Execute the code\n const future = session.kernel.requestExecute({\n code: pythonCode,\n silent: false\n });\n\n // Set up handler for output\n future.onIOPub = (msg: any) => {\n if (msg.header.msg_type === 'stream' && msg.content.name === 'stdout') {\n console.log('Python output:', msg.content.text);\n }\n };\n\n // Wait for execution to complete\n await future.done;\n console.log(`File save completed for: ${filePath}`);\n }\n } catch (error) {\n console.error(`Error saving file to ${filePath}:`, error);\n }\n};","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { INotebookTracker } from \"@jupyterlab/notebook\";\n\n// Function to generate requirements.txt content using the kernel with pipreqs\nexport const generateRequirementsTxt = async (\n notebookTracker: INotebookTracker\n): Promise<string> => {\n const notebookPanel = notebookTracker.currentWidget;\n if (!notebookPanel) {\n console.error('No notebook is currently active');\n return '';\n }\n\n // Initialize with fallback requirements in case kernel execution fails\n let requirementsContent = 'streamlit>=1.28.0'\n\n try {\n // Use the kernel to execute Python code using pipreqs\n const session = notebookPanel.sessionContext.session;\n if (session) {\n // Collect all code in the notebook to analyze with pipreqs\n const notebook = notebookPanel.content;\n let codeContent = '';\n\n // Gather all code cells content\n notebook.widgets.forEach(cell => {\n if (cell.model.type === 'code') {\n codeContent += cell.model.sharedModel.source + '\\n\\n';\n }\n });\n\n // Create Python code to run pipreqs on a temporary directory\n const pythonCode = `\nimport subprocess\nimport os\nimport tempfile\n\n# Create a temporary directory for pipreqs to analyze\nwith tempfile.TemporaryDirectory() as temp_dir:\n # Save the notebook code to a temporary Python file\n temp_file = os.path.join(temp_dir, \"notebook_code.py\")\n with open(temp_file, \"w\") as f:\n f.write(\"\"\"${codeContent.replace(/\\\\/g, '\\\\\\\\').replace(/\"\"\"/g, '\\\\\"\\\\\"\\\\\"')}\"\"\")\n \n # Make sure pipreqs is installed. Then\n # 1. Create a requirements.in file\n # 2. From the requirements.in file, generate the requirements.txt file with the canonical PyPI name of the packages\n # and the versions as they exist on the user's terminal\n try:\n # Run pipreqs on the temporary directory\n generate_req_in_file = subprocess.run(\n ['pipreqs', '--savepath', 'requirements.in', '--force', temp_dir],\n capture_output=True, \n text=True\n )\n\n print(\"Log: \", generate_req_in_file.stderr)\n\n command_for_generating_req_txt_file = r\"\"\"\n cat requirements.in | while read line; do \\\\\n pkg=$(echo $line | cut -d'=' -f1 | tr -d '[:space:]'); \\\\\n version=$(pip show \"$pkg\" 2>/dev/null | grep -i '^Version:' | awk '{print $2}'); \\\\\n name=$(pip show \"$pkg\" 2>/dev/null | grep -i '^Name:' | awk '{print $2}'); \\\\\n if [[ -n \"$name\" && -n \"$version\" ]]; then echo \"$name==$version\"; else echo \"$line\"; fi; \\\\\n done\"\"\"\n\n generate_req_txt_file = subprocess.run(\n command_for_generating_req_txt_file,\n shell=True,\n executable=\"/bin/bash\",\n capture_output=True,\n text=True,\n check=True\n )\n print(generate_req_txt_file.stdout)\n\n except Exception as e:\n print(f\"Error running pipreqs: {e}\")\n`;\n\n const kernel = session.kernel\n\n if (kernel === null) {\n console.error('No kernel found');\n return requirementsContent;\n }\n\n // Execute the code and get the result\n const future = kernel.requestExecute({\n code: pythonCode,\n silent: false\n });\n\n // Variable to store our result\n let resultText = '';\n\n // Set up handler for output\n future.onIOPub = (msg: any): void => {\n if (msg.header.msg_type === 'stream' && msg.content.name === 'stdout') {\n const text = msg.content.text;\n if (text.startsWith('Log: ')) {\n console.error(text);\n } else {\n resultText += text;\n }\n }\n };\n\n // Wait for execution to complete\n await future.done;\n\n // Check if we got a non-empty result, add it to the requirements content\n if (resultText.trim()) {\n // Replace the default with pipreqs results\n requirementsContent = resultText.trim();\n\n const requiredPackages = ['streamlit', 'pandas', 'matplotlib', 'snowflake-sqlalchemy']\n // Make sure the required packages are included\n for (const requiredPackage of requiredPackages) {\n if (!requirementsContent.includes(requiredPackage)) {\n requirementsContent = requiredPackage + '\\n' + requirementsContent;\n }\n }\n }\n }\n } catch (error) {\n console.error('Error generating requirements.txt:', error);\n // Keep using our fallback list\n }\n\n return requirementsContent;\n};\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n// Generate the display_viz helper function for Streamlit\nexport const generateDisplayVizFunction = (): string => {\n return `\ndef display_viz(fig):\n \"\"\"Display a visualization in Streamlit based on its type.\"\"\"\n\n # Check for SymPy plot objects first (most specific)\n if hasattr(fig, '_backend'):\n fig._backend.process_series()\n matplotlib_fig = fig._backend.plt.gcf()\n st.pyplot(matplotlib_fig)\n return\n\n # Check for Plotly figure\n if hasattr(fig, 'update_layout') or str(type(fig)).find('plotly') >= 0:\n st.plotly_chart(fig)\n return\n\n # Check for Matplotlib figure (be more specific to avoid SymPy conflicts)\n if hasattr(fig, 'add_subplot') and hasattr(fig, 'savefig'):\n st.pyplot(fig)\n return\n\n # Fallback - try pyplot as it's most common\n try:\n st.pyplot(fig)\n except Exception as e:\n st.error(f\"Couldn't display visualization of type: {type(fig)}. Error: {str(e)}\")\n st.write(fig) # Show the object for debugging\n`;\n};\n\n// Extract all potential visualization variable names from a code cell\nexport const extractVisualizationVariables = (cellContent: string): string[] => {\n // Clean up the content and trim whitespace\n const trimmedContent = cellContent.trim();\n const vizVariables: string[] = [];\n\n // Check for common visualization patterns for various libraries\n const vizPatterns = [\n // Plotly patterns\n /([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*px\\./,\n /([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*go\\.Figure/,\n /([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*ff\\./,\n /([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*plotly\\./,\n \n // Matplotlib patterns\n /([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*plt\\.figure/,\n /([a-zA-Z_][a-zA-Z0-9_]*)\\s*,\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*plt\\.subplots/,\n \n // Generic patterns that might be visualizations\n /([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*.*\\.(plot|scatter|bar|hist|pie|boxplot|violin)/,\n /([a-zA-Z_][a-zA-Z0-9_]*)\\s*=\\s*.*\\.(figure|Figure)/,\n \n // Any variable involved in a show() call\n /([a-zA-Z_][a-zA-Z0-9_]*)\\.show\\(/\n ];\n\n const lines = trimmedContent.split('\\n');\n\n // Find all variable assignments that match visualization patterns\n for (const line of lines) {\n for (const pattern of vizPatterns) {\n const matches = [...line.matchAll(new RegExp(pattern, 'g'))];\n for (const match of matches) {\n // For plt.subplots(), capture both fig and ax variables\n if (pattern.toString().includes('subplots') && match[2]) {\n if (match[1] && !vizVariables.includes(match[1])) {\n vizVariables.push(match[1]); // fig variable\n }\n if (match[2] && !vizVariables.includes(match[2])) {\n vizVariables.push(match[2]); // ax variable\n }\n } else if (match[1] && !vizVariables.includes(match[1])) {\n // Check if it's not a Python keyword\n const pythonKeywords = ['if', 'else', 'elif', 'for', 'while', 'def', 'class', 'return', 'import', 'from', 'print'];\n if (!pythonKeywords.includes(match[1])) {\n vizVariables.push(match[1]);\n }\n }\n }\n }\n }\n\n return vizVariables;\n};\n\n// Transform visualization code for Streamlit using runtime detection\nexport const transformVisualizationCell = (cellContent: string): string => {\n const lines = cellContent.split('\\n');\n const transformedLines: string[] = [];\n \n // Extract figure variable names\n const figVariables = extractVisualizationVariables(cellContent);\n \n for (let i = 0; i < lines.length; i++) {\n const line = lines[i] ?? '';\n let replacedLine = false;\n\n // Check for plt.show() calls We need to replace these with display_viz(plt.gcf())\n // because we need to make sure we display the current figure.\n if (line.trim().match(/plt\\.show\\(/)) {\n transformedLines.push(\"display_viz(plt.gcf())\");\n replacedLine = true;\n }\n\n // Check for SymPy plot calls\n else if(line.trim().match(/(sp|sym|sy|sm|sympy)\\.plot\\s*\\(.*show\\s*=\\s*True.*\\)/)) {\n const modifiedLine = line.replace(/(.*?)(sp|sym|sy|sm|sympy)\\.plot\\s*\\(/, '$1display_viz($2.plot(') + ')';\n transformedLines.push(modifiedLine);\n replacedLine = true;\n }\n // If show=False, do not call display_viz, just keep the line as is\n else if(line.trim().match(/((sp|sym|sy|sm|sympy)\\.)?plot\\s*\\(.*show\\s*=\\s*False.*\\)/)) {\n // Do nothing, just let it fall through to the original line\n }\n\n // Check for direct plot(...) calls\n else if (line.trim().match(/^plot\\s*\\(/)) {\n const modifiedLine = line.replace(/^plot\\s*\\(/, 'display_viz(plot(') + ')';\n transformedLines.push(modifiedLine);\n replacedLine = true;\n }\n\n // Check for figure.show() calls for any detected figure variables\n else {\n for (const figVar of figVariables) {\n if (line.trim().startsWith(`${figVar}.show`)) {\n transformedLines.push(`display_viz(${figVar})`);\n replacedLine = true;\n break;\n }\n }\n }\n // If we didn't replace the line, keep the original\n if (!replacedLine) {\n transformedLines.push(line);\n }\n }\n \n return transformedLines.join('\\n');\n};","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n// src/ContextManager.ts\nimport { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { Token } from '@lumino/coreutils';\nimport { fetchVariablesAndUpdateState, Variable } from './VariableInspector';\nimport { fetchFilesAndUpdateState, File } from './FileInspector';\nimport { KernelMessage } from '@jupyterlab/services';\n\n\n// The provides field in JupyterLab's JupyterFrontEndPlugin expects a token \n// that can be used to look up the service in the dependency injection system,\n// so we define a new token for the ContextManager\nexport const IContextManager = new Token<IContextManager>('mito-ai:IContextManager');\n\nexport interface IContextManager {\n variables: Variable[];\n setVariables: (newVars: Variable[]) => void;\n files: File[];\n setFiles: (newFiles: File[]) => void;\n}\n\nexport class ContextManager implements IContextManager {\n private _variables: Variable[] = [];\n private _files: File[] = [];\n\n constructor(app: JupyterFrontEnd, notebookTracker: INotebookTracker) {\n // Setup the kernel listener to update context as kernel messages are received\n this.setupKernelListener(app, notebookTracker); \n }\n\n get variables(): Variable[] {\n return this._variables;\n }\n\n setVariables(newVars: Variable[]): void {\n this._variables = newVars;\n }\n\n get files(): File[] {\n return this._files;\n }\n\n setFiles(newFiles: File[]): void {\n this._files = newFiles;\n }\n\n // Setup kernel execution listener\n private setupKernelListener(app: JupyterFrontEnd, notebookTracker: INotebookTracker): void {\n notebookTracker.currentChanged.connect(async (tracker, notebookPanel) => {\n if (!notebookPanel) {\n return;\n }\n\n // Listen for kernel refresh events\n notebookPanel.context.sessionContext.statusChanged.connect((sender, status) => {\n if (status === 'restarting') {\n this.setVariables([]); // Clear variables on kernel refresh\n }\n });\n\n // As soon as the notebook is opened, fetch the files so we don't have to wait for the first message.\n await fetchFilesAndUpdateState(app, notebookTracker, this.setFiles.bind(this));\n\n // Listen to kernel messages\n notebookPanel.context.sessionContext.iopubMessage.connect(async (sender, msg: KernelMessage.IMessage) => {\n\n // Watch for execute_input messages, which indicate is a request to execute code. \n // Previosuly, we watched for 'execute_result' messages, but these are only returned\n // from the kernel when a code cell prints a value to the output cell, which is not what we want.\n // TODO: Check if there is a race condition where we might end up fetching variables before the \n // code is executed. I don't think this is the case because the kernel runs in one thread I believe.\n if (msg.header.msg_type === 'execute_input') {\n await fetchVariablesAndUpdateState(notebookPanel, this.setVariables.bind(this));\n await fetchFilesAndUpdateState(app, notebookTracker, this.setFiles.bind(this));\n }\n });\n });\n }\n}\n\n\nexport const ContextManagerPlugin: JupyterFrontEndPlugin<IContextManager> = {\n id: 'mito-ai:context-manager',\n autoStart: true,\n requires: [INotebookTracker],\n provides: IContextManager,\n activate: (app: JupyterFrontEnd, notebookTracker: INotebookTracker): IContextManager => {\n console.log(\"mito-ai: ContextManagerPlugin activated\");\n return new ContextManager(app, notebookTracker);\n }\n};\n\nexport default ContextManagerPlugin","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { JupyterFrontEnd } from \"@jupyterlab/application\";\nimport { INotebookTracker } from \"@jupyterlab/notebook\";\n\n\nexport type File = {\n file_name: string;\n}\n\n\n/* \n Fetches all files in the current directory and updates the state of the files.\n*/\nexport const fetchFilesAndUpdateState = async (\n app: JupyterFrontEnd, \n notebookTracker: INotebookTracker, \n setFiles: (files: File[]) => void\n): Promise<void> => {\n \n const fileManager = app.serviceManager.contents;\n \n // Get the current notebook\n const currentNotebook = notebookTracker.currentWidget;\n if (!currentNotebook) {\n return;\n }\n \n \n // Get the directory path using PathExt.dirname from @jupyterlab/coreutils\n const relativeNotebookPath = currentNotebook.context.path;\n const relativeDirectoryPath = PathExt.dirname(relativeNotebookPath);\n\n try {\n const contents = await fileManager.get(relativeDirectoryPath);\n if (contents.type === 'directory') {\n // Filter for only csv and Excel files\n const data_files = contents.content.filter((file: any) => {\n const extension = file.name.split('.').pop()?.toLowerCase();\n return extension === 'csv' ||\n extension === 'xlsx' ||\n extension === 'xls' ||\n extension === 'xlsm';\n });\n\n // Map the files to the File type\n const files = data_files.map((file: any) => ({\n file_name: file.name\n }));\n\n // Update the state of the files\n setFiles(files);\n } else {\n // If the contents are not a directory, set the files to an empty array\n setFiles([]);\n }\n \n } catch (error) {\n console.error('Error listing directory contents:', error);\n return;\n }\n};\n\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { NotebookPanel } from '@jupyterlab/notebook';\nimport { KernelMessage } from '@jupyterlab/services';\n\nexport type Variable = {\n variable_name: string;\n type: string;\n value: any;\n}\n\n// TODO: Use something like raw-loader to load an actual python file \n// to make it easier to modify the script without creating syntax errors.\nconst pythonVariableInspectionScript = `import json\nimport inspect\n\n\n# We need to check if pandas is imported so we know if its safe\n# to check for pandas dataframes \n_is_pandas_imported = False\ntry:\n import pandas as pd\n _is_pandas_imported = True\nexcept:\n pass\n\n# Function to convert dataframe to structured format\ndef get_dataframe_structure(df, sample_size=5):\n def convert_value(value):\n if pd.isna(value):\n # Handle None and NaN (convert to None, which maps to null in JSON)\n return None\n elif not isinstance(value, (str, int, float, bool, type(None))):\n return str(value) \n return value \n \n structure = {}\n for column in df.columns:\n structure[column] = {\n \"dtype\": str(df[column].dtype),\n \"samples\": [convert_value(x) for x in df[column].head(sample_size)]\n }\n return structure\n\ndef is_from_mitosheet(obj):\n \"\"\"Check if an object is from any mitosheet module\"\"\"\n try:\n module = inspect.getmodule(obj)\n if module and (module.__name__.startswith('mitosheet')):\n return True\n\n # if the dictionary contains all of the mito functions, then we can assume that the object is from mitosheet\n mito_functions = [\"STRIPTIMETOMONTHS\", \"GETNEXTVALUE\", \"FILLNAN\"]\n if isinstance(obj, dict) and all(key in obj for key in mito_functions):\n return True\n\n\n except Exception:\n return False\n return False\n\ndef structured_globals():\n output = []\n for k, v in globals().items():\n\n # Skip mitosheet functions\n if is_from_mitosheet(v):\n continue\n\n if not k.startswith(\"_\") and k not in (\"In\", \"Out\", \"json\") and not callable(v):\n \n if _is_pandas_imported and isinstance(v, pd.DataFrame):\n\n new_variable = {\n \"variable_name\": k,\n \"type\": \"pd.DataFrame\",\n \"value\": get_dataframe_structure(v)\n }\n\n try:\n # Check if the variable can be converted to JSON.\n # If it can, add it to the outputs. If it can't, we just skip it.\n # We check each variable individually so that we don't crash\n # the entire variable inspection if just one variable cannot be serialized.\n json.dumps(new_variable[\"value\"])\n output.append(new_variable)\n except:\n pass\n\n else:\n\n new_variable = {\n \"variable_name\": k,\n \"type\": str(type(v)),\n \"value\": repr(v)\n }\n\n try:\n # Check if the variable can be converted to JSON.\n # If it can, add it to the outputs. If it can't, we just skip it.\n # We check each variable individually so that we don't crash\n # the entire variable inspection if just one variable cannot be serialized.\n json.dumps(new_variable[\"value\"])\n output.append(new_variable)\n except:\n pass\n\n return json.dumps(output)\n\nprint(structured_globals())\n`\n// Function to fetch variables and sync with the frontend\nexport function fetchVariablesAndUpdateState(notebookPanel: NotebookPanel, setVariables: (variables: Variable[]) => void): void {\n const kernel = notebookPanel.context.sessionContext.session?.kernel;\n\n if (kernel) {\n // Request the kernel to execute a command to fetch global variables\n const future = kernel.requestExecute({\n code: pythonVariableInspectionScript,\n // Adding silent: true prevents a execute_input message from being sent. This is important \n // because it prevents an infinite loop where we fetch variables and in the process trigger \n // a new execute_input which leads to fetching variables again.\n silent: true\n });\n\n // Listen for the output from the kernel\n future.onIOPub = (msg: KernelMessage.IMessage) => {\n // A 'stream' message represents standard output (stdout) or standard error (stderr) produced \n // during the execution of code in the kernel.\n if (KernelMessage.isStreamMsg(msg)) {\n if (msg.content.name === 'stdout') {\n try {\n setVariables(JSON.parse(msg.content.text))\n } catch (e) {\n console.log(\"Error parsing variables\", e)\n }\n }\n }\n };\n }\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState } from 'react';\n\ninterface CollapsibleWarningBlockProps {\n message: string;\n}\n\nexport const CollapsibleWarningBlock = ({ message }: CollapsibleWarningBlockProps): JSX.Element => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const lines = message.split('\\n');\n const warningCount = lines.filter(line => line.includes(\"Warning: \")).length;\n\n return (\n <div className=\"output-block\">\n <span style={{ display: 'flex', alignItems: 'center', gap: '8px', cursor: 'pointer' }} onClick={() => setIsExpanded(!isExpanded)}>\n <button className=\"collapse-button\">\n {isExpanded ? '▼' : '▶'}\n </button>\n <pre style={{ margin: 0, display: 'inline' }}>Warning ({warningCount})</pre>\n </span>\n\n {isExpanded &&\n <div className=\"output-block-expanded\">\n <pre style={{ marginTop: '10px' }}>{message}</pre>\n </div>\n }\n </div>\n );\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application';\nimport { IRenderMimeRegistry} from '@jupyterlab/rendermime';\nimport { IRenderMime } from '@jupyterlab/rendermime-interfaces';\nimport { Widget } from '@lumino/widgets';\nimport { COMMAND_MITO_AI_OPEN_CHAT, COMMAND_MITO_AI_SEND_DEBUG_ERROR_MESSAGE } from '../../commands';\nimport MagicWandIcon from '../../icons/MagicWand';\nimport '../../../style/ErrorMimeRendererPlugin.css'\nimport { CollapsibleWarningBlock } from './CollapsibleWarningBlock';\nimport { getFullErrorMessageFromModel } from './errorUtils';\n\ninterface ErrorMessageProps {\n onDebugClick: () => void;\n}\n\nconst ErrorMessage: React.FC<ErrorMessageProps> = ({ onDebugClick }) => {\n return (\n <div className=\"error-mime-renderer-container\">\n <button onClick={onDebugClick} className='error-mime-renderer-button'>\n <MagicWandIcon />\n <p>Fix Error in AI Chat</p>\n </button>\n </div>\n )\n};\n \n/**\n * A mime renderer plugin for the mimetype application/vnd.jupyter.stderr\n * \n * This plugin augments the standard error output with a prompt to debug the error in the chat interface.\n*/\nconst ErrorMimeRendererPlugin: JupyterFrontEndPlugin<void> = {\n id: 'mito-ai:debug-error-with-ai',\n autoStart: true,\n requires: [IRenderMimeRegistry],\n activate: (app: JupyterFrontEnd, rendermime: IRenderMimeRegistry) => {\n const factory = rendermime.getFactory('application/vnd.jupyter.stderr');\n \n if (factory) {\n rendermime.addFactory({\n safe: true,\n mimeTypes: ['application/vnd.jupyter.stderr'],\n createRenderer: (options: IRenderMime.IRendererOptions) => {\n const originalRenderer = factory.createRenderer(options);\n return new AugmentedStderrRenderer(app, originalRenderer);\n }\n }, -1); // Giving this renderer a lower rank than the default renderer gives this default priority\n }\n console.log(\"mito-ai: ErrorMimeRendererPlugin activated\");\n }\n};\n \n/**\n * A widget that extends the default StderrRenderer.\n*/\nclass AugmentedStderrRenderer extends Widget implements IRenderMime.IRenderer {\n private originalRenderer: IRenderMime.IRenderer;\n private app: JupyterFrontEnd;\n \n constructor(app: JupyterFrontEnd, originalRenderer: IRenderMime.IRenderer) {\n super();\n this.app = app;\n this.originalRenderer = originalRenderer;\n }\n \n /**\n * Render the original error message and append the custom prompt.\n */\n async renderModel(model: IRenderMime.IMimeModel): Promise<void> {\n // Determine if it's an error or a warning. \n // An error has: 'application/vnd.jupyter.error' \n // A warning has: 'application/vnd.jupyter.stderr'\n const isErrorMessage = 'application/vnd.jupyter.error' in model.data;\n\n // Create the container for the custom UI elements\n const resolveInChatDiv = document.createElement('div');\n\n const originalNode = this.originalRenderer.node;\n\n // Only show the Fix Error in AI Chat button if it is an error, not a warning\n if (isErrorMessage) {\n createRoot(resolveInChatDiv).render(\n <ErrorMessage onDebugClick={() => this.openChatInterfaceWithError(model)} />\n );\n\n // Append the chat container before rendering the original output\n this.node.appendChild(resolveInChatDiv);\n \n // Render the original content\n await this.originalRenderer.renderModel(model);\n } else {\n // Apply styling for warnings\n // Strip styling, use ErrorMimeRendererPlugin.css\n originalNode.style.background = 'transparent';\n originalNode.style.padding = '0px';\n\n // Render the OutputBlock component\n createRoot(originalNode).render(\n <CollapsibleWarningBlock message={String(model.data['application/vnd.jupyter.stderr'] || '')} />\n );\n }\n\n // Append the original error/warning rendered node\n this.node.appendChild(originalNode);\n }\n\n /* \n Open the chat interface and preload the error message into \n the user input.\n */\n async openChatInterfaceWithError(model: IRenderMime.IMimeModel): Promise<void> {\n const structuredError = getFullErrorMessageFromModel(model);\n\n await this.app.commands.execute(COMMAND_MITO_AI_OPEN_CHAT, { focusChatInput: false });\n await this.app.commands.execute(COMMAND_MITO_AI_SEND_DEBUG_ERROR_MESSAGE, { input: structuredError });\n }\n}\n \nexport default ErrorMimeRendererPlugin;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { IRenderMime } from '@jupyterlab/rendermime-interfaces';\nimport { stripAnsiCodes } from '../../utils/strings';\n\n/* \nGet the error string from the model. \n \nFor example, if this is the error message: \n\n Cell In[3], line 3\n 1 import pandas as pd\n 2 df = pd.DataFrame({'A': ['1/2/24', '2/2/24', '3/2/24'], 'B': [4, 5, 6]})\n----> 3 df['Year'] = df['A'].dt.year\n\n AttributeError: Can only use .dt accessor with datetimelike values\n\nThis function will return:\n\n AttributeError: Can only use .dt accessor with datetimelike values\n*/\nexport const getConciseErrorMessage = (model: IRenderMime.IMimeModel): string => {\n const error = model.data['application/vnd.jupyter.error']\n if (error && typeof error === 'object' && 'ename' in error && 'evalue' in error) {\n return `${error.ename}: ${error.evalue}`\n }\n return ''\n}\n\n/* \nGets all of the error message parts that contain code in the Jupyter Notebook.\n\nFor example, if this is the error message: \n\n---------------------------------------------------------------------------\nAttributeError Traceback (most recent call last)\nCell In[3], line 3\n 1 import pandas as pd\n 2 df = pd.DataFrame({'A': ['1/2/24', '2/2/24', '3/2/24'], 'B': [4, 5, 6]})\n----> 3 df['Year'] = df['A'].dt.year\n\nFile ~/Mito/mito/mito-ai/venv/lib/python3.11/site-packages/pandas/core/generic.py:6299, in NDFrame.__getattr__(self, name)\n 6292 if (\n 6293 name not in self._internal_names_set\n 6294 and name not in self._metadata\n 6295 and name not in self._accessors\n 6296 and self._info_axis._can_hold_identifiers_and_holds_name(name)\n 6297 ):\n 6298 return self[name]\n-> 6299 return object.__getattribute__(self, name)\n\nFile ~/Mito/mito/mito-ai/venv/lib/python3.11/site-packages/pandas/core/accessor.py:224, in CachedAccessor.__get__(self, obj, cls)\n 221 if obj is None:\n 222 # we're accessing the attribute of the class, i.e., Dataset.geo\n 223 return self._accessor\n--> 224 accessor_obj = self._accessor(obj)\n 225 # Replace the property with the accessor object. Inspired by:\n 226 # https://www.pydanny.com/cached-property.html\n 227 # We need to use object.__setattr__ because we overwrite __setattr__ on\n 228 # NDFrame\n 229 object.__setattr__(obj, self._name, accessor_obj)\n\nFile ~/Mito/mito/mito-ai/venv/lib/python3.11/site-packages/pandas/core/indexes/accessors.py:643, in CombinedDatetimelikeProperties.__new__(cls, data)\n 640 elif isinstance(data.dtype, PeriodDtype):\n 641 return PeriodProperties(data, orig)\n--> 643 raise AttributeError(\"Can only use .dt accessor with datetimelike values\")\n\nAttributeError: Can only use .dt accessor with datetimelike values\n\n\nThis function will only return:\n\nCell In[3], line 3\n 1 import pandas as pd\n 2 df = pd.DataFrame({'A': ['1/2/24', '2/2/24', '3/2/24'], 'B': [4, 5, 6]})\n----> 3 df['Year'] = df['A'].dt.year\n\nAttributeError: Can only use .dt accessor with datetimelike values\n\n*/\n\nexport const getFullErrorMessageFromModel = (model: IRenderMime.IMimeModel): string => {\n const error = model.data['application/vnd.jupyter.error'] as {traceback: string[]}\n return getFullErrorMessageFromTraceback(error['traceback'])\n}\n\n\nexport const getFullErrorMessageFromTraceback = (tracebackArray: string[]): string => {\n\n try {\n // Strip ANSI codes from each line\n const cleanedArray = tracebackArray.map(line => stripAnsiCodes(line));\n \n const filteredLines: string[] = [];\n \n for (const line of cleanedArray) {\n \n // Start capturing when we see a Cell block or its the last line\n if (line.trim().startsWith('Cell In[') || line === cleanedArray[cleanedArray.length - 1]) {\n // Split on any type of line ending (\\r\\n, \\r, \\n, ↵)\n const newLines = line.split(/\\r\\n|\\r|\\n|↵/);\n filteredLines.push(...newLines);\n\n // Add a new line to separate the sections\n filteredLines.push('\\n');\n continue;\n }\n }\n\n const fullErrorMessage = filteredLines.join('\\n');\n\n return fullErrorMessage;\n } catch (error) {\n // If something goes wrong parsing the error, just return the concise error message\n console.error('Error processing traceback:', error);\n return tracebackArray[tracebackArray.length - 1] ?? '';\n }\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from \"react\";\nimport { useState } from \"react\";\nimport { INotebookTracker, NotebookActions } from \"@jupyterlab/notebook\";\nimport { JupyterFrontEnd } from \"@jupyterlab/application\";\nimport { COMMAND_MITO_AI_SEND_AGENT_MESSAGE, COMMAND_MITO_AI_OPEN_CHAT } from \"../../commands\";\nimport '../../../style/NotebookFooter.css';\nimport LoadingCircle from \"../../components/LoadingCircle\";\nimport CodeIcon from \"../../icons/NotebookFooter/CodeIcon\";\nimport TextIcon from \"../../icons/NotebookFooter/TextIcon\";\n\ninterface NotebookFooterProps {\n notebookTracker: INotebookTracker;\n app: JupyterFrontEnd;\n}\n\nconst NotebookFooter: React.FC<NotebookFooterProps> = ({notebookTracker, app}) => {\n const notebook = notebookTracker.currentWidget?.content\n\n const [inputValue, setInputValue] = useState('');\n const [isGenerating, setIsGenerating] = useState(false);\n\n // If the notebook is not loaded yet, don't render anything\n // This must come after the useEffects\n if (notebook === undefined || notebook.model === null) {\n return null;\n }\n\n const addCell = (cellType: 'code' | 'markdown' = 'code'): void => {\n if (notebook.widgets.length && notebook.widgets.length > 0) {\n notebook.activeCellIndex = notebook.widgets.length - 1;\n }\n\n if (cellType === 'code') {\n NotebookActions.insertBelow(notebook);\n } else {\n NotebookActions.insertBelow(notebook);\n // Change the cell type after insertion\n const activeCell = notebook.activeCell;\n if (activeCell && activeCell.model.type !== cellType) {\n NotebookActions.changeCellType(notebook, cellType);\n }\n }\n\n void NotebookActions.focusActiveCell(notebook);\n };\n\n const handleInputSubmit = (): void => {\n const _handleInputSubmitAsync = async (): Promise<void> => {\n const submittedInput = inputValue.trim();\n if (submittedInput !== '') {\n setIsGenerating(true);\n setInputValue('');\n await app.commands.execute(COMMAND_MITO_AI_OPEN_CHAT, { focusChatInput: false });\n await app.commands.execute(COMMAND_MITO_AI_SEND_AGENT_MESSAGE, { input: submittedInput });\n setIsGenerating(false);\n }\n }\n\n void _handleInputSubmitAsync();\n };\n\n /* \n We handle keypress events to prevent JupyterLab from intercepting keyboard events\n and taking some other action while the user is typing in this input field. Jupyter \n might otherwise do things like: change cell type, move focus to a cell, etc. \n */\n const handleKeyPress = (e: React.KeyboardEvent): void => {\n e.stopPropagation();\n };\n const handleInputFocus = (e: React.FocusEvent<HTMLInputElement>): void => {\n e.stopPropagation();\n };\n const handleInputBlur = (e: React.FocusEvent<HTMLInputElement>): void => {\n e.stopPropagation();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n e.stopPropagation();\n setInputValue(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent): void => {\n e.stopPropagation();\n \n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleInputSubmit();\n }\n };\n\n return (\n <div className=\"notebook-footer-container\">\n {/* Input field */}\n <div className=\"input-container\">\n <div className={`input-wrapper ${isGenerating ? 'generating' : ''}`}>\n <div className=\"input-icon-left\">\n {isGenerating ? (\n <LoadingCircle />\n ) : (\n <>✦</>\n )}\n </div>\n <input\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onKeyPress={handleKeyPress}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n placeholder={isGenerating ? 'Generating notebook...' : 'What analysis can I help you with?'}\n className=\"prompt-input\"\n autoComplete=\"off\"\n spellCheck={false}\n disabled={isGenerating}\n />\n <div className=\"input-icons-right\">\n <button \n className=\"input-action-button\"\n onClick={handleInputSubmit}\n onMouseDown={(e) => e.stopPropagation()}\n >\n ▶\n </button>\n </div>\n </div>\n </div>\n\n {/* Button row */}\n <div className=\"button-row\">\n {/* Python button */}\n <button\n onClick={() => addCell('code')}\n className=\"footer-button\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <div className=\"button-content\">\n <div className=\"button-icon\">\n <CodeIcon />\n </div>\n <span className=\"button-label\">Python</span>\n </div>\n </button>\n\n {/* Text button */}\n <button\n onClick={() => addCell('markdown')}\n className=\"footer-button\"\n onMouseDown={(e) => e.stopPropagation()}\n >\n <div className=\"button-content\">\n <div className=\"button-icon\">\n <TextIcon />\n </div>\n <span className=\"button-label\">Text</span>\n </div>\n </button>\n </div>\n </div>\n );\n};\n\nexport default NotebookFooter;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application';\nimport { INotebookTracker, Notebook } from '@jupyterlab/notebook';\nimport { ReactWidget } from '@jupyterlab/ui-components';\nimport NotebookFooter from './NotebookFooter';\nimport React from 'react';\nimport { IChatTracker } from '../AiChat/token';\n\nexport class MitoNotebookFooter extends ReactWidget {\n constructor(protected notebookTracker: INotebookTracker, protected app: JupyterFrontEnd) {\n super();\n }\n\n render(): JSX.Element {\n return (\n <NotebookFooter notebookTracker={this.notebookTracker} app={this.app} />\n );\n }\n}\n\nconst NotebookFooterPlugin: JupyterFrontEndPlugin<void> = {\n id: 'mito-ai:notebook-footer',\n autoStart: true,\n requires: [INotebookTracker, IChatTracker],\n activate: (app: JupyterFrontEnd, notebookTracker: INotebookTracker) => {\n\n const replaceFooter = (notebook: Notebook): void => {\n const layout = notebook.layout;\n\n if (layout === undefined) {\n return;\n }\n\n const customFooter = new MitoNotebookFooter(notebookTracker, app);\n (layout as any).footer = customFooter;\n };\n\n notebookTracker.forEach(widget => {\n replaceFooter(widget.content);\n });\n\n notebookTracker.widgetAdded.connect((sender, widget) => {\n setTimeout(() => {\n replaceFooter(widget.content);\n }, 100);\n });\n }\n};\n\nexport default NotebookFooterPlugin;\n\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { JupyterFrontEnd, JupyterFrontEndPlugin, ILayoutRestorer } from '@jupyterlab/application';\nimport { ICommandPalette, WidgetTracker, MainAreaWidget } from '@jupyterlab/apputils';\nimport { SettingsWidget } from './SettingsWidget';\n\nexport const COMMAND_MITO_AI_SETTINGS = 'mito-ai:open-settings';\n\n/**\n * Initialization data for the mito settings extension.\n */\nconst SettingsManagerPlugin: JupyterFrontEndPlugin<WidgetTracker> = {\n id: 'mito-ai:settings-manager',\n description: 'Mito AI settings manager',\n autoStart: true,\n requires: [ICommandPalette],\n optional: [ILayoutRestorer],\n activate: _activate\n}\n\nfunction _activate(\n app: JupyterFrontEnd,\n palette: ICommandPalette,\n restorer: ILayoutRestorer | null\n): WidgetTracker {\n // Create a widget creator function\n const newWidget = (): MainAreaWidget => {\n const content = new SettingsWidget();\n const widget = new MainAreaWidget({ content });\n widget.id = 'mito-ai-settings';\n widget.title.label = 'Mito AI Settings';\n widget.title.closable = true;\n return widget;\n };\n\n let widget = newWidget();\n\n // Add an application command\n app.commands.addCommand(COMMAND_MITO_AI_SETTINGS, {\n label: 'Mito AI Settings',\n execute: () => {\n // Create the widget if it doesn't exist or is disposed\n if (!widget || widget.isDisposed) {\n widget = newWidget();\n }\n\n // Add the widget to the tracker if not already there\n if (!tracker.has(widget)) {\n void tracker.add(widget);\n }\n\n // Add the widget to the app if not already attached\n if (!widget.isAttached) {\n void app.shell.add(widget, 'main');\n }\n\n // Activate the widget\n app.shell.activateById(widget.id);\n }\n });\n\n // Add the command to the palette\n palette.addItem({\n command: COMMAND_MITO_AI_SETTINGS,\n category: 'Mito AI'\n });\n\n // Track and restore the widget state\n const tracker = new WidgetTracker<MainAreaWidget>({\n namespace: widget.id\n });\n\n if (!tracker.has(widget)) {\n void tracker.add(widget);\n }\n\n if (restorer) {\n restorer.add(widget, 'mito-ai-settings');\n }\n\n return tracker;\n}\n\nexport default SettingsManagerPlugin;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState } from 'react';\nimport { ReactWidget } from '@jupyterlab/apputils';\nimport { DatabasePage } from './database/DatabasePage';\nimport { SupportPage } from './support/SupportPage';\nimport { GeneralPage } from './general/GeneralPage';\nimport { RulesPage } from './rules/RulesPage';\nimport '../../../style/SettingsWidget.css';\n\nconst TABS_CONFIG = {\n database: {\n label: 'Database',\n component: DatabasePage\n },\n general: {\n label: 'General',\n component: GeneralPage\n },\n rules: {\n label: 'Rules',\n component: RulesPage\n },\n support: {\n label: 'Support',\n component: SupportPage\n },\n\n} as const;\n\nconst App = (): JSX.Element => {\n const [activeTab, setActiveTab] = useState<keyof typeof TABS_CONFIG>('database');\n\n const renderContent = (): JSX.Element => {\n const TabComponent = TABS_CONFIG[activeTab].component;\n return <TabComponent />;\n };\n\n return (\n <div className=\"settings-widget\">\n <div className=\"settings-layout\">\n <div className=\"settings-sidebar\">\n <nav>\n <ul>\n {Object.entries(TABS_CONFIG).map(([key, { label }]) => (\n <li\n key={key}\n className={activeTab === key ? 'active' : ''}\n onClick={() => setActiveTab(key as keyof typeof TABS_CONFIG)}\n >\n {label}\n </li>\n ))}\n </ul>\n </nav>\n </div>\n <div className=\"settings-main\">\n {renderContent()}\n </div>\n </div>\n </div>\n );\n};\n\nexport class SettingsWidget extends ReactWidget {\n constructor() {\n super();\n this.addClass('jp-ReactWidget');\n }\n\n render(): JSX.Element {\n return <App />;\n }\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState } from 'react';\nimport { DBConnection, DatabaseField, databaseConfigs } from './model';\nimport '../../../../style/ConnectionForm.css';\nimport LoadingCircle from '../../../components/LoadingCircle';\n\ninterface ConnectionFormProps {\n formData: DBConnection;\n formError: string | null;\n onInputChange: (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>) => void;\n onSubmit: (e: React.FormEvent) => void;\n onClose: () => void;\n}\n\nexport const ConnectionForm: React.FC<ConnectionFormProps> = ({\n formData,\n formError,\n onInputChange,\n onSubmit,\n onClose\n}) => {\n const [isLoading, setIsLoading] = useState(false);\n const selectedConfig = formData.type ? databaseConfigs[formData.type] : undefined;\n\n const handleSubmit = async (e: React.FormEvent): Promise<void> => {\n e.preventDefault();\n setIsLoading(true);\n try {\n await onSubmit(e);\n } finally {\n setIsLoading(false);\n }\n };\n\n const renderField = (field: DatabaseField): JSX.Element => {\n const commonProps = {\n id: field.name,\n name: field.name,\n value: formData[field.name] || '',\n onChange: onInputChange,\n placeholder: field.placeholder,\n required: field.required,\n className: 'form-control'\n };\n\n switch (field.type) {\n case 'select':\n return (\n <select {...commonProps}>\n <option value=\"\">Select {field.label}</option>\n {field.options?.map(option => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n );\n case 'number':\n return (\n <input\n {...commonProps}\n type=\"number\"\n />\n );\n default:\n return (\n <input\n {...commonProps}\n type={field.type}\n />\n );\n }\n };\n\n return (\n <form onSubmit={handleSubmit} className=\"connection-form\">\n {formError && <p className=\"error\">{formError}</p>}\n {selectedConfig?.alertText && (\n <div className=\"alert-banner\" dangerouslySetInnerHTML={{ __html: selectedConfig.alertText }} />\n )}\n\n <div className=\"form-group\">\n <label htmlFor=\"type\">Database Type</label>\n <select\n id=\"type\"\n name=\"type\"\n value={formData.type}\n onChange={onInputChange}\n required\n >\n <option value=\"\">Select Database Type</option>\n {Object.values(databaseConfigs).map(config => (\n <option key={config.type} value={config.type}>\n {config.displayName}\n </option>\n ))}\n </select>\n </div>\n\n {selectedConfig && selectedConfig.fields.map(field => (\n <div key={field.name} className=\"form-group\">\n <label htmlFor={field.name}>{field.label}</label>\n {renderField(field)}\n </div>\n ))}\n\n <div className=\"form-info\">\n <p>\n Mito will automatically install any required database drivers when you connect.\n <a\n href=\"https://docs.trymito.io/mito-ai/database-connectors/database-drivers\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Learn more about database drivers\n </a>\n </p>\n </div>\n\n <div className=\"form-actions\">\n <button\n type=\"button\"\n className=\"button-base button-gray\"\n onClick={onClose}\n disabled={isLoading}\n >\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"button-base button-purple\"\n disabled={isLoading}\n >\n {isLoading ? (\n <>\n Validating Connection<div style={{ color: 'var(--purple-700)' }}>\n <LoadingCircle />\n </div>\n </>\n ) : (\n 'Add Connection'\n )}\n </button>\n </div>\n </form>\n );\n}; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState } from 'react';\nimport { DBConnections, databaseConfigs } from './model';\n\ninterface ConnectionListProps {\n connections: DBConnections;\n loading: boolean;\n error: string | null;\n onDelete: (id: string) => void;\n}\n\nexport const ConnectionList: React.FC<ConnectionListProps> = ({\n connections,\n loading,\n error,\n onDelete\n}) => {\n const [clickedDelete, setClickedDelete] = useState<string | null>(null);\n\n if (loading) {\n return <p>Loading connections...</p>;\n }\n\n if (error) {\n return <p className=\"error\">Error: {error}</p>;\n }\n\n if (Object.keys(connections).length === 0) {\n return <p>No database connections found.</p>;\n }\n\n return (\n <div className=\"connections-grid\">\n {Object.entries(connections).map(([id, connection]) => (\n <div key={id} className=\"connection-card\">\n <div className=\"connection-card-header\">\n <h3>{connection.type}</h3>\n </div>\n <div className=\"connection-details\">\n {databaseConfigs[connection.type]?.fields.map(field => {\n // Skip password fields for security\n if (field.type === 'password') return null;\n \n const value = connection[field.name];\n // Only show fields that have values\n if (value === undefined || value === '') return null;\n \n return (\n <p key={field.name}>\n <strong>{field.label}:</strong> {value}\n </p>\n );\n })}\n </div>\n <div className=\"connection-actions\">\n {clickedDelete === id ? (\n <div className=\"confirmation-buttons\">\n <button\n className=\"button-base button-red\"\n onClick={() => onDelete(id)}\n >\n Yes, I want to delete\n </button>\n <button\n className=\"button-base button-gray\"\n onClick={() => setClickedDelete(null)}\n >\n Cancel\n </button>\n </div>\n ) : (\n <button\n className=\"button-base button-red\"\n onClick={() => setClickedDelete(id)}\n >\n Delete\n </button>\n )}\n </div>\n </div>\n ))}\n </div>\n );\n}; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useEffect, useState } from 'react';\nimport { DBConnections, DBConnection } from './model';\nimport { ConnectionList } from './ConnectionList';\nimport { ConnectionForm } from './ConnectionForm';\nimport { requestAPI } from '../../../restAPI/utils';\nimport '../../../../style/DatabasePage.css';\n\nexport const DatabasePage = (): JSX.Element => {\n const [connections, setConnections] = useState<DBConnections>({});\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [showModal, setShowModal] = useState(false);\n const [formData, setFormData] = useState<DBConnection>({\n type: 'snowflake',\n username: '',\n password: '',\n account: '',\n warehouse: '',\n });\n const [formError, setFormError] = useState<string | null>(null);\n\n const fetchConnections = async (): Promise<void> => {\n const resp = await requestAPI<DBConnections>('db/connections')\n if (resp.error) {\n // Handle error case - you might want to show an error message to the user\n console.error('Failed to fetch database connections:', resp.error.message);\n setError(resp.error.message);\n setConnections({});\n } else if (resp.data) {\n setConnections(resp.data);\n setError(null);\n }\n setLoading(false);\n };\n\n useEffect(() => {\n void fetchConnections();\n }, []);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>): void => {\n const { name, value } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\n }));\n };\n\n const handleSubmit = async (e: React.FormEvent): Promise<void> => {\n e.preventDefault();\n setFormError(null);\n\n const resp = await requestAPI<{ status: string; message: string; connection_id: string }>('db/connections', {\n method: 'POST',\n body: JSON.stringify(formData)\n });\n\n if (resp.error) {\n setFormError(resp.error.message);\n return;\n }\n\n if (resp.data) {\n // Refresh the connections list\n await fetchConnections();\n setShowModal(false);\n setFormData({\n type: 'snowflake',\n username: '',\n password: '',\n account: '',\n warehouse: '',\n });\n }\n\n };\n\n const handleDelete = async (id: string): Promise<void> => {\n const resp = await requestAPI<{ status: string; message: string }>(`db/connections/${id}`, {\n method: 'DELETE',\n });\n\n if (resp.error) {\n setError(resp.error.message);\n return;\n }\n\n if (resp.data) {\n // Refresh the connections list\n await fetchConnections();\n }\n };\n\n return (\n <div className=\"db-connections\">\n <div className=\"settings-header\">\n <h2>Database Connections</h2>\n <button\n className=\"button-base button-purple\"\n onClick={() => setShowModal(true)}\n >\n <b>+ Add Connection</b>\n </button>\n </div>\n\n <ConnectionList\n connections={connections}\n loading={loading}\n error={error}\n onDelete={handleDelete}\n />\n\n {showModal && (\n <div className=\"modal-overlay\" onClick={() => setShowModal(false)}>\n <div className=\"modal-content\" onClick={e => e.stopPropagation()}>\n <div className=\"modal-header\">\n <h3>Add New Connection</h3>\n <button\n className=\"modal-close-button\"\n onClick={() => setShowModal(false)}\n >\n ✕\n </button>\n </div>\n <ConnectionForm\n formData={formData}\n formError={formError}\n onInputChange={handleInputChange}\n onSubmit={handleSubmit}\n onClose={() => setShowModal(false)}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nexport interface DBConnection {\n type: string;\n [key: string]: string | number | undefined;\n}\n\nexport interface DBConnections {\n [key: string]: DBConnection; // key is now UUID\n}\n\nexport interface DatabaseField {\n name: string;\n type: 'text' | 'password' | 'number' | 'select';\n label: string;\n placeholder?: string;\n required: boolean;\n options?: Array<{ value: string; label: string }>;\n}\n\nexport interface DatabaseConfig {\n type: string;\n displayName: string;\n alertText?: string; // Optional HTML content for alerts/notifications\n fields: DatabaseField[];\n}\n\nexport const databaseConfigs: Record<string, DatabaseConfig> = {\n mssql: {\n type: 'mssql',\n displayName: 'Microsoft SQL Server',\n alertText: 'Microsoft SQL Server requires an additional driver. If you\\'ve already installed it, you can safely ignore this message. For more info, consult the <a href=\"https://docs.trymito.io/mito-ai/database-connectors/microsoft-sql-server\" target=\"_blank\">Mito docs</a>.',\n fields: [\n {\n name: 'username',\n type: 'text',\n label: 'Username',\n placeholder: 'john.doe',\n required: true\n },\n {\n name: 'password',\n type: 'password',\n label: 'Password',\n placeholder: 'Enter your password',\n required: true\n },\n {\n name: 'host',\n type: 'text',\n label: 'Host',\n placeholder: 'localhost',\n required: true\n },\n {\n name: 'port',\n type: 'number',\n label: 'Port',\n placeholder: '1433',\n required: true\n },\n {\n name: 'database',\n type: 'text',\n label: 'Database',\n placeholder: 'mydb',\n required: true\n },\n {\n name: 'odbc_driver_version',\n type: 'text',\n label: 'ODBC Driver Version',\n placeholder: '18',\n required: true\n }\n ]\n },\n mysql: {\n type: 'mysql',\n displayName: 'MySQL',\n fields: [\n {\n name: 'username',\n type: 'text',\n label: 'Username',\n placeholder: 'john.doe',\n required: true\n },\n {\n name: 'password',\n type: 'password',\n label: 'Password',\n placeholder: 'Enter your password',\n required: true\n },\n {\n name: 'host',\n type: 'text',\n label: 'Host',\n placeholder: 'localhost',\n required: true\n },\n {\n name: 'port',\n type: 'number',\n label: 'Port',\n placeholder: '3306',\n required: true\n },\n {\n name: 'database',\n type: 'text',\n label: 'Database',\n placeholder: 'mydb',\n required: true\n }\n ]\n },\n oracle: {\n type: 'oracle',\n displayName: 'Oracle',\n fields: [\n {\n name: 'username',\n type: 'text',\n label: 'Username',\n placeholder: 'john.doe',\n required: true\n },\n {\n name: 'password',\n type: 'password',\n label: 'Password',\n placeholder: 'Enter your password',\n required: true\n },\n {\n name: 'host',\n type: 'text',\n label: 'Host',\n placeholder: 'localhost',\n required: true\n },\n {\n name: 'port',\n type: 'number',\n label: 'Port',\n placeholder: '1521',\n required: true\n },\n {\n name: 'service_name',\n type: 'text',\n label: 'Service Name',\n placeholder: 'xe',\n required: true\n }\n ]\n },\n postgres: {\n type: 'postgres',\n displayName: 'PostgreSQL',\n fields: [\n {\n name: 'username',\n type: 'text',\n label: 'Username',\n placeholder: 'john.doe',\n required: true\n },\n {\n name: 'password',\n type: 'password',\n label: 'Password',\n placeholder: 'Enter your password',\n required: true\n },\n {\n name: 'host',\n type: 'text',\n label: 'Host',\n placeholder: 'localhost',\n required: true\n },\n {\n name: 'port',\n type: 'number',\n label: 'Port',\n placeholder: '5432',\n required: true\n },\n {\n name: 'database',\n type: 'text',\n label: 'Database',\n placeholder: 'mydb',\n required: true\n }\n ]\n },\n snowflake: {\n type: 'snowflake',\n displayName: 'Snowflake',\n fields: [\n {\n name: 'username',\n type: 'text',\n label: 'Username',\n placeholder: 'john.doe',\n required: true\n },\n {\n name: 'password',\n type: 'password',\n label: 'Password',\n placeholder: 'Enter your password',\n required: true\n },\n {\n name: 'account',\n type: 'text',\n label: 'Account',\n placeholder: 'tudbfdr-ab12345',\n required: true\n },\n {\n name: 'warehouse',\n type: 'text',\n label: 'Warehouse',\n placeholder: 'COMPUTE_WH',\n required: true\n }\n ]\n },\n sqlite: {\n type: 'sqlite',\n displayName: 'SQLite',\n fields: [\n {\n name: 'database',\n type: 'text',\n label: 'Path to database',\n placeholder: '/Users/jake/db.sqlite3',\n required: true\n }\n ]\n }\n}; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useEffect, useState } from 'react';\nimport { getSetting, updateSettings } from '../../../restAPI/RestAPI';\n\nexport const GeneralPage = (): JSX.Element => {\n\n const [betaMode, setBetaMode] = useState<boolean>(false);\n\n // When we first open the page, load the settings from the server\n useEffect(() => {\n const fetchSettings = async (): Promise<void> => {\n const betaMode = await getSetting('beta_mode');\n setBetaMode(betaMode === 'true');\n };\n void fetchSettings();\n }, []);\n\n const handleBetaModeChange = async (): Promise<void> => {\n const newBetaMode = !betaMode;\n await updateSettings('beta_mode', newBetaMode.toString());\n setBetaMode(newBetaMode);\n };\n \n return (\n <div>\n <div className=\"settings-header\">\n <h2>General</h2>\n </div>\n <div className=\"settings-option\">\n <label className=\"settings-checkbox-label\">\n <input type=\"checkbox\" checked={betaMode} onChange={handleBetaModeChange} />\n <span>Beta Mode</span>\n </label>\n <p className=\"settings-option-description\">\n Enable early access to experimental features. These features may be less stable than regular features.\n </p>\n </div>\n </div>\n );\n};\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState } from 'react';\nimport LoadingCircle from '../../../components/LoadingCircle';\nimport '../../../../style/RulesForm.css';\nimport { Rule } from './models';\nimport { classNames } from '../../../utils/classNames';\n\ninterface RuleFormProps {\n formData: Rule;\n formError: string | null;\n onInputChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\n onSubmit: (e: React.FormEvent) => void;\n onClose: () => void;\n isEditing: boolean;\n}\n\nexport const RulesForm: React.FC<RuleFormProps> = ({\n formData,\n formError,\n onInputChange,\n onSubmit,\n onClose,\n isEditing\n}) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const handleSubmit = async (e: React.FormEvent): Promise<void> => {\n e.preventDefault();\n setIsLoading(true);\n try {\n await onSubmit(e);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <form onSubmit={handleSubmit} className={classNames(\"connection-form\", \"rules-form\")}>\n {formError && <p className=\"error\">{formError}</p>}\n\n <div className=\"form-group\">\n <label htmlFor=\"name\">Rule Name</label>\n <sub>\n <span>Rules must contain only alphanumeric characters, underscores, or hyphens.</span>\n </sub>\n <input\n type=\"text\"\n id=\"name\"\n name=\"name\"\n value={formData.name}\n onChange={onInputChange}\n placeholder=\"Enter rule name\"\n required\n />\n\n </div>\n\n <div className=\"form-group\">\n <label htmlFor=\"description\">Rule Content</label>\n <textarea\n id=\"description\"\n name=\"description\"\n value={formData.description}\n onChange={onInputChange}\n placeholder=\"Enter or paste rule content here\"\n rows={30}\n required\n className=\"form-textarea\"\n />\n </div>\n\n <div className=\"form-actions\">\n <button\n type=\"button\"\n className=\"button-base button-gray\"\n onClick={onClose}\n disabled={isLoading}\n >\n Cancel\n </button>\n <button\n type=\"submit\"\n className=\"button-base button-purple\"\n disabled={isLoading}\n >\n {isLoading ? (\n <>\n Saving Rule<div style={{ color: 'var(--purple-700)' }}>\n <LoadingCircle />\n </div>\n </>\n ) : (\n isEditing ? 'Update Rule' : 'Add Rule'\n )}\n </button>\n </div>\n </form>\n );\n}; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useEffect, useState } from 'react';\nimport { RulesForm } from './RulesForm';\nimport { Rule } from './models';\nimport { getRule, getRules, setRule } from '../../../restAPI/RestAPI';\nimport { isValidFileName, stripFileEnding } from '../../../utils/fileName';\n\nexport const RulesPage = (): JSX.Element => {\n const [modalStatus, setModalStatus] = useState<'new rule' | 'edit rule' | undefined>(undefined);\n const [rules, setRules] = useState<string[]>([]);\n const [error, setError] = useState<string | null>(null);\n\n const [formData, setFormData] = useState<Rule>({\n name: '',\n description: ''\n });\n const [formError, setFormError] = useState<string | null>(null);\n\n const fetchRules = async (): Promise<void> => {\n try {\n const rules = await getRules();\n setRules(rules.sort());\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An error occurred');\n }\n };\n\n useEffect(() => {\n void fetchRules();\n }, []);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>): void => {\n const { name, value } = e.target;\n setFormData(prev => ({ ...prev, [name]: value }));\n };\n\n const handleSubmit = async (e: React.FormEvent): Promise<void> => {\n e.preventDefault();\n\n // Make sure tha the rule is a valid file name\n if (!isValidFileName(formData.name)) {\n setFormError('Invalid rule name. Rules must contain only alphanumeric characters, underscores, or hyphens.');\n return;\n } else {\n setFormError(null);\n }\n\n await setRule(formData.name, formData.description);\n setModalStatus(undefined);\n setFormData({\n name: '',\n description: ''\n });\n void fetchRules();\n };\n\n const handleRuleClick = async (rule: string): Promise<void> => {\n const ruleContent = await getRule(rule);\n setFormData({\n name: stripFileEnding(rule),\n description: ruleContent || ''\n });\n setModalStatus('edit rule');\n };\n\n return (\n <div>\n <div className=\"settings-header\">\n <h2>Rules</h2>\n <button\n className=\"button-base button-purple\"\n onClick={() => setModalStatus('new rule')}\n >\n <b>+ Add Rule</b>\n </button>\n </div>\n <p>Rules provide more context to Ai models to help them follow your preferences, adhere to your organization&apos;s style guides, learn niche topics, and be a better colleague.</p>\n\n {error && <p className=\"error\">{error}</p>}\n \n <div className=\"rules-list\">\n {rules && rules.length > 0 ? rules.map((rule) => (\n <div \n key={rule} \n className=\"rule-item\"\n onClick={() => handleRuleClick(rule)}\n >\n <div className=\"rule-content\">\n <h4 className=\"rule-name\">{stripFileEnding(rule)}</h4>\n <p className=\"rule-description\">Click update to edit this rule&apos;s description and settings.</p>\n </div>\n <div className=\"rule-actions\">\n <button \n className=\"button-base button-gray\"\n >\n Update\n </button>\n </div>\n </div>\n )) : (\n <div className=\"empty-state\">\n <p>No rules created yet. Add your first rule to get started!</p>\n </div>\n )}\n </div>\n\n {modalStatus && (\n <div className=\"modal-overlay\">\n <div className=\"modal-content modal-content-large\" onClick={e => e.stopPropagation()}>\n <RulesForm\n formData={formData}\n formError={formError}\n onInputChange={handleInputChange}\n onSubmit={handleSubmit}\n onClose={() => {\n setModalStatus(undefined);\n setFormData({\n name: '',\n description: ''\n });\n }}\n isEditing={modalStatus === 'edit rule'}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nexport const SupportPage = (): JSX.Element => {\n return (\n <div>\n <div className=\"settings-header\">\n <h2>Support</h2>\n </div>\n <p>To learn more about Mito AI, please visit our <a href=\"https://docs.trymito.io/\" target=\"_blank\" rel=\"noopener noreferrer\">documentation</a>.</p>\n <p>Additional support is available by emailing <a href=\"mailto:founders@sagacollab.com\">founders@sagacollab.com</a></p>\n </div>\n );\n};\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { COMMAND_MITO_AI_BETA_MODE_ENABLED, COMMAND_MITO_AI_OPEN_CHAT, COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE } from '../../commands';\nimport { AppBuilderExcludeCellLabIcon, AppBuilderIncludeCellLabIcon, lightBulbLabIcon } from '../../icons';\nimport { getActiveCellIncludeInApp, toggleActiveCellIncludeInAppMetadata } from '../../utils/notebook';\nimport { convertNotebookToStreamlit } from '../AppBuilder/NotebookToStreamlit';\nimport { IAppBuilderService } from '../AppBuilder/AppBuilderPlugin';\nimport { getSetting } from '../../restAPI/RestAPI';\n\nconst ToolbarButtonsPlugin: JupyterFrontEndPlugin<void> = {\n // Important: The Cell Toolbar Buttons are added to the toolbar registry via the schema/toolbar-buttons.json file.\n // The id here must be mito-ai:toolbar-buttons otherwise the buttons are not successfully added. My understanding is that\n // the id must match the name of the package and `toolbar-buttons` must match the name of the .json file.\n id: 'mito_ai:toolbar-buttons',\n description: 'Adds an \"explain code cell with AI\" button to the cell toolbar',\n autoStart: true,\n requires: [INotebookTracker],\n optional: [IAppBuilderService],\n activate: (app: JupyterFrontEnd, notebookTracker: INotebookTracker, appBuilderService?: IAppBuilderService) => {\n const { commands } = app;\n\n // Important: To add a button to the cell toolbar, the command must start with \"toolbar-button:\"\n // and the command must match the command in the schema/plugin.json file.\n commands.addCommand('toolbar-button:explain-code', {\n icon: lightBulbLabIcon,\n caption: 'Explain code in AI Chat',\n execute: async () => {\n /* \n In order to click on the cell toolbar button, that cell must be the active cell, \n so the ChatHistoryManager will take care of providing the cell context.\n */\n await app.commands.execute(COMMAND_MITO_AI_OPEN_CHAT)\n await app.commands.execute(COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE);\n },\n isVisible: () => notebookTracker.activeCell?.model.type === 'code' && app.commands.hasCommand(COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE)\n });\n\n commands.addCommand('toolbar-button:toggle-include-cell-in-app', {\n icon: () => {\n const includeCellInApp = getActiveCellIncludeInApp(notebookTracker);\n return includeCellInApp ? AppBuilderIncludeCellLabIcon : AppBuilderExcludeCellLabIcon;\n },\n caption: 'Toggle cell output visibility in Streamlit app',\n execute: async () => {\n /* \n In order to click on the cell toolbar button, that cell must be the active cell.\n\n Currently we mark the entire cell as not included in the app.\n \n Future improvement: Allow users to hide only the cell OUTPUT while keeping the code.\n \n Implementation challenges:\n 1. Handling displayed expressions: Streamlit automatically displays hanging variables.\n \n Potential solutions:\n - Use linting (pyright/pylance) to detect reportUnusedExpression in cells that have outputs turned off and remove unused expressions \n - Use AI to identify and remove hanging variables\n - Parse code to find and remove lone variable references and literals\n */\n toggleActiveCellIncludeInAppMetadata(notebookTracker);\n\n // Force command refresh to update the icon\n commands.notifyCommandChanged('toolbar-button:toggle-include-cell-in-app');\n },\n isVisible: () => {\n return app.commands.hasCommand(COMMAND_MITO_AI_BETA_MODE_ENABLED);\n }\n });\n\n commands.addCommand('toolbar-button:convert-to-streamlit', {\n label: 'Deploy App',\n caption: 'Convert to Streamlit',\n className: 'text-button-mito-ai button-base button-purple button-small',\n execute: async () => {\n void convertNotebookToStreamlit(notebookTracker, appBuilderService);\n },\n isVisible: () => {\n // Default to hidden, will be updated after async check since we are not allowed to \n // use async commands in isVisible.\n return app.commands.hasCommand(COMMAND_MITO_AI_BETA_MODE_ENABLED);\n }\n });\n\n // Check if the beta mode is enabled. After checking, tell Jupyter to \n // re-evaluate convert-to-streamlit visibility now that we have had the \n // opportunity to set the mito-ai:beta-mode-enabled command if beta mode is enabled.\n getSetting('beta_mode').then(value => {\n if (value === 'true') {\n commands.addCommand(COMMAND_MITO_AI_BETA_MODE_ENABLED, { execute: () => { /* no-op */ } });\n commands.notifyCommandChanged('toolbar-button:convert-to-streamlit');\n commands.notifyCommandChanged('toolbar-button:toggle-include-cell-in-app');\n }\n }).catch(error => {\n console.error('Error checking beta mode:', error);\n });\n\n console.log(\"mito-ai: ToolbarButtonsPlugin activated\");\n }\n};\n\nexport default ToolbarButtonsPlugin;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport type {\n JupyterFrontEnd,\n JupyterFrontEndPlugin\n} from '@jupyterlab/application';\nimport { checkForUpdates } from '../../utils/version_check';\n\n// Check interval - once per day in milliseconds\nconst CHECK_INTERVAL = 24 * 60 * 60 * 1000; \n\n// Cache key for storing the last check time\nconst CACHE_KEY = 'mito-ai-last-version-check';\n\n/**\n * Plugin to check for updates of Mito AI.\n * This will only show a notification if an update is available.\n * If any errors occur or if the extension can't check for updates, no notification will be shown.\n */\nexport const versionCheckPlugin: JupyterFrontEndPlugin<void> = {\n id: 'mito-ai:version-check',\n autoStart: true,\n requires: [],\n activate: (app: JupyterFrontEnd): void => {\n // Make sure the app is fully initialized before checking for updates\n void app.started.then(() => {\n // Check if we should perform a version check based on last check time\n const shouldCheck = shouldPerformCheck();\n \n if (shouldCheck) {\n // Perform the check and handle any errors\n return performVersionCheck(app)\n .catch(error => {\n console.warn('Error checking for Mito AI updates:', error);\n })\n .finally(() => {\n // Update the last check timestamp regardless of success/failure\n updateLastCheckTime();\n });\n }\n return Promise.resolve();\n }).catch(error => {\n console.warn('Error during JupyterLab initialization:', error);\n });\n \n // Set up periodic checks\n setUpPeriodicChecks(app);\n }\n};\n\n/**\n * Determines if we should perform a version check based on the last check time\n */\nfunction shouldPerformCheck(): boolean {\n try {\n const lastCheck = window.localStorage.getItem(CACHE_KEY);\n \n if (!lastCheck) {\n return true; // No record of previous check, so perform check\n }\n \n const lastCheckTime = parseInt(lastCheck, 10);\n const currentTime = Date.now();\n \n // Check if the last check was more than the check interval ago\n return (currentTime - lastCheckTime) > CHECK_INTERVAL;\n } catch (error) {\n // If there's any error (e.g., localStorage not available), default to performing the check\n console.warn('Error checking last version check time:', error);\n return true;\n }\n}\n\n/**\n * Updates the last check time to the current time\n */\nfunction updateLastCheckTime(): void {\n try {\n window.localStorage.setItem(CACHE_KEY, Date.now().toString());\n } catch (error) {\n console.warn('Error updating last version check time:', error);\n }\n}\n\n/**\n * Performs the version check\n */\nasync function performVersionCheck(app: JupyterFrontEnd): Promise<void> {\n return checkForUpdates(app.serviceManager.serverSettings);\n}\n\n/**\n * Sets up periodic checks for updates\n */\nfunction setUpPeriodicChecks(app: JupyterFrontEnd): void {\n // Don't set up periodic checks in node environments (for testing)\n if (typeof window === 'undefined') {\n return;\n }\n \n // Check once per day\n setInterval(() => {\n void performVersionCheck(app).catch(error => {\n console.warn('Error during periodic version check:', error);\n });\n }, CHECK_INTERVAL);\n} ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport type {\n JupyterFrontEnd,\n JupyterFrontEndPlugin\n} from '@jupyterlab/application';\nimport type { WidgetTracker } from '@jupyterlab/apputils';\nimport type { ICellModel } from '@jupyterlab/cells';\nimport { IEditorMimeTypeService } from '@jupyterlab/codeeditor';\nimport {\n EditorExtensionRegistry,\n IEditorExtensionRegistry\n} from '@jupyterlab/codemirror';\nimport { CommandRegistry } from '@lumino/commands';\nimport { COMMAND_MITO_AI_OPEN_CHAT } from '../../commands';\nimport { IChatTracker } from '../AiChat/token';\nimport { advicePlugin } from './emptyCell';\n\nexport const emptyCellPlaceholder: JupyterFrontEndPlugin<void> = {\n id: 'mito-ai:empty-cell-placeholder',\n description: 'Display a default message in an empty code cell.',\n autoStart: true,\n requires: [IChatTracker, IEditorExtensionRegistry],\n activate: (\n app: JupyterFrontEnd,\n // Trick to ensure the chat plugin is available and loaded before this one\n // so that the keybinding can be properly resolved.\n tracker: WidgetTracker,\n extensions: IEditorExtensionRegistry\n ): void => {\n const keyBindings = app.commands.keyBindings.find(\n b => b.command === COMMAND_MITO_AI_OPEN_CHAT\n );\n const pythonAdvice = `Start writing python or Press ${CommandRegistry.formatKeystroke(\n keyBindings?.keys[0] ?? 'Accel E'\n )\n .split(/[+\\s]/)\n .map(s => `<kbd>${s}</kbd>`)\n .join(' + ')} to ask Mito AI to write code for you.`;\n extensions.addExtension({\n name: 'mito-ai:empty-editor-advice',\n factory: options => {\n let advice = ''; // Default advice\n // Add the advice only for cells (not for file editor)\n if (options.inline) {\n let guessedMimeType = options.model.mimeType;\n if (\n guessedMimeType === IEditorMimeTypeService.defaultMimeType &&\n (options.model as ICellModel).type === 'code'\n ) {\n // Assume the kernel is not yet ready and will be a Python one.\n // FIXME it will be better to deal with model.mimeTypeChanged signal\n // but this is gonna be hard.\n guessedMimeType = 'text/x-ipython';\n }\n // Tune the advice with the mimetype\n switch (guessedMimeType) {\n case 'text/x-ipython': // Python code cell\n advice = pythonAdvice;\n break;\n case 'text/x-ipythongfm': // Jupyter Markdown cell\n advice = 'Start writing markdown.';\n break;\n }\n }\n return EditorExtensionRegistry.createImmutableExtension(\n advicePlugin({\n advice\n })\n );\n }\n });\n console.log(\"mito-ai: EmptyCellPlugin activated\");\n }\n};\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { Facet, type Extension } from '@codemirror/state';\nimport {\n Decoration,\n EditorView,\n ViewPlugin,\n WidgetType,\n type DecorationSet,\n type ViewUpdate\n} from '@codemirror/view';\n\n/**\n * Theme for the advice widget.\n */\nconst adviceTheme = EditorView.baseTheme({\n '& .cm-mito-advice': {\n color: 'var(--jp-ui-font-color3)',\n fontStyle: 'italic'\n },\n '& .cm-mito-advice > kbd': {\n borderRadius: '3px',\n borderStyle: 'solid',\n borderWidth: '1px',\n fontSize: 'calc(var(--jp-code-font-size) - 2px)',\n padding: '3px 5px',\n verticalAlign: 'middle'\n }\n});\n\n/**\n * A facet that stores the chat shortcut.\n */\nconst adviceText = Facet.define<string, string>({\n // @ts-expect-error - Ignoring this error because I don't want to mess with codemirror for now\n combine: values => (values.length ? values[values.length - 1] : '')\n});\n\nclass AdviceWidget extends WidgetType {\n constructor(readonly advice: string) {\n super();\n }\n\n eq(_: AdviceWidget): boolean {\n return false;\n }\n\n toDOM(): HTMLElement {\n const wrap = document.createElement('span');\n wrap.className = 'cm-mito-advice';\n wrap.innerHTML = this.advice;\n return wrap;\n }\n}\n\nfunction shouldDisplayAdvice(view: EditorView): DecorationSet {\n const shortcut = view.state.facet(adviceText);\n const widgets = [];\n if (view.hasFocus && view.state.doc.length == 0) {\n const deco = Decoration.widget({\n widget: new AdviceWidget(shortcut),\n side: 1\n });\n widgets.push(deco.range(0));\n }\n return Decoration.set(widgets);\n}\n\nexport const showAdvice = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = shouldDisplayAdvice(view);\n }\n\n update(update: ViewUpdate): void {\n const advice = update.view.state.facet(adviceText);\n if (\n update.docChanged ||\n update.focusChanged ||\n advice !== update.startState.facet(adviceText)\n ) {\n this.decorations = shouldDisplayAdvice(update.view);\n }\n }\n },\n {\n decorations: v => v.decorations,\n provide: () => [adviceTheme]\n }\n);\n\nexport function advicePlugin(options: { advice?: string } = {}): Extension {\n return [adviceText.of(options.advice ?? ''), showAdvice];\n}\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { JupyterFrontEndPlugin } from '@jupyterlab/application';\nimport type { WidgetTracker } from '@jupyterlab/apputils';\nimport { IStatusBar, Popup, showPopup } from '@jupyterlab/statusbar';\nimport {\n Button,\n ReactWidget,\n VDomModel,\n VDomRenderer\n} from '@jupyterlab/ui-components';\nimport React from 'react';\nimport { NucleusLabIcon } from '../../icons';\nimport type { ErrorMessage, IAICapabilities } from '../../websockets/completions/CompletionModels';\nimport { IChatTracker, type IChatWidget } from '../AiChat/token';\nimport { FREE_TIER_LIMIT_REACHED_ERROR_TITLE } from '../../utils/errors';\nimport TextButton from '../../components/TextButton';\nimport { STRIPE_PAYMENT_LINK } from '../../utils/stripe';\n\n/**\n * Mito AI status model\n */\nclass StatusModel extends VDomModel {\n protected _capabilities?: IAICapabilities;\n protected _lastError?: ErrorMessage;\n\n constructor(protected chatPanel: IChatWidget) {\n super();\n chatPanel.capabilitiesChanged.connect(this._onCapabilitiesChanged, this);\n chatPanel.lastErrorChanged.connect(this._onLastErrorChanged, this);\n }\n\n /**\n * AI capabilities.\n */\n get capabilities(): IAICapabilities | undefined {\n return this._capabilities;\n }\n\n /**\n * Latest seen error.\n */\n get lastError(): ErrorMessage | undefined {\n return this._lastError;\n }\n\n protected _onCapabilitiesChanged(\n _: IChatWidget,\n capabilities: IAICapabilities\n ): void {\n this._capabilities = capabilities;\n this.stateChanged.emit(void 0);\n }\n\n protected _onLastErrorChanged(_: IChatWidget, error: ErrorMessage): void {\n this._lastError = error.error_type ? error : undefined;\n this.stateChanged.emit(void 0);\n }\n}\n\n/**\n * Mito AI status popup.\n */\nclass StatusPopUp extends VDomRenderer<StatusModel> {\n protected render(): JSX.Element {\n\n let status_paragraph = <p className='mito-ai-status-ready'>Ready</p>\n if (this.model.lastError?.title == FREE_TIER_LIMIT_REACHED_ERROR_TITLE) {\n status_paragraph = <p className='mito-ai-status-error'>Free Trial Expired</p>\n }\n\n return (\n <div className=\"mito-ai-status-popup\">\n <h3>Mito AI Status</h3>\n <div className='mito-ai-status-popup-table-row'>\n <p>Status:</p>\n {status_paragraph}\n </div>\n <div className='mito-ai-status-popup-table-row'>\n <p>Provider:</p>\n <p>{this.model.capabilities?.provider ?? 'None'}</p>\n </div>\n {this.model.lastError?.title == FREE_TIER_LIMIT_REACHED_ERROR_TITLE && (\n <>\n <p>\n ⚠️ You&apos;ve used up your free Mito AI completions for this month. Upgrade to <a href=\"https://www.trymito.io/plans\" target=\"_blank\" rel=\"noreferrer\">Mito Pro</a> or supply your own Open AI Key to continue using Mito AI.\n </p>\n <TextButton\n title=\"Upgrade to Pro\"\n text=\"Upgrade to Pro\"\n action={STRIPE_PAYMENT_LINK}\n variant='gray'\n width='block'\n />\n </>\n )}\n {this.model.lastError && this.model.lastError.title !== FREE_TIER_LIMIT_REACHED_ERROR_TITLE && (\n <>\n <p>Last error:</p>\n <ul>\n <li>Type: {this.model.lastError.error_type}</li>\n <li>Title: {this.model.lastError.title}</li>\n {this.model.lastError.hint && (\n <li>Hint: {this.model.lastError.hint}</li>\n )}\n </ul>\n </>\n )}\n </div>\n );\n }\n}\n\nconst MITO_AI_ERROR_CLASS = 'mito-ai-error';\n\n/**\n * Mito widget to display in the status bar.\n */\nclass StatusItem extends ReactWidget {\n private _hasError: boolean = false;\n private _popup: Popup | null = null;\n\n constructor(protected model: StatusModel) {\n super();\n model.stateChanged.connect(this._onLastErrorChanged, this);\n }\n\n render(): JSX.Element {\n return (\n <Button\n className=\"mito-ai-status-button\"\n onClick={() => {\n this._onClick();\n }}\n minimal\n small\n title=\"Mito AI Status\"\n >\n Mito AI &nbsp; <NucleusLabIcon.react tag={'span'} stylesheet={'statusBar'} />\n </Button>\n );\n }\n\n protected _onLastErrorChanged(): void {\n if (this.model.lastError) {\n this._hasError = true;\n this.node.querySelector('button')?.classList.add(MITO_AI_ERROR_CLASS);\n } else {\n if (this._hasError) {\n this._hasError = false;\n this.node\n .querySelector('button')\n ?.classList.remove(MITO_AI_ERROR_CLASS);\n }\n }\n }\n\n protected _onClick(): void {\n if (this._popup && !this._popup.isDisposed) {\n this._popup.dispose();\n } else {\n this._popup = showPopup({\n body: new StatusPopUp(this.model),\n anchor: this,\n align: 'right',\n hasDynamicSize: true\n });\n }\n }\n}\n\nexport const statusItem: JupyterFrontEndPlugin<void> = {\n id: 'mito_ai:status-item',\n autoStart: true,\n requires: [IChatTracker, IStatusBar],\n activate: (\n app,\n chatTracker: WidgetTracker<IChatWidget>,\n statusBar: IStatusBar\n ) => {\n let registered = false;\n \n const registerMitoStatus = (chatPanel: IChatWidget): void => {\n if (registered) {\n return;\n }\n registered = true;\n const model = new StatusModel(chatPanel);\n\n const renderer = new StatusItem(model);\n\n statusBar.registerStatusItem('mito-ai:status-item', {\n item: renderer,\n align: 'right',\n rank: 0\n });\n };\n\n if (chatTracker.currentWidget) {\n registerMitoStatus(chatTracker.currentWidget);\n } else {\n chatTracker.widgetAdded.connect((_, chatPanel) => {\n registerMitoStatus(chatPanel);\n });\n }\n }\n};\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nconst MITO_AI = 'mito_ai'\n\nexport const COMMAND_MITO_AI_OPEN_CHAT = `${MITO_AI}:open-chat`\nexport const COMMAND_MITO_AI_PREVIEW_LATEST_CODE = `${MITO_AI}:preview-latest-code`\nexport const COMMAND_MITO_AI_APPLY_LATEST_CODE = `${MITO_AI}:apply-latest-code`\nexport const COMMAND_MITO_AI_REJECT_LATEST_CODE = `${MITO_AI}:reject-latest-code`\nexport const COMMAND_MITO_AI_SEND_MESSAGE = `${MITO_AI}:send-message`\nexport const COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE = `${MITO_AI}:send-explain-code-message`\nexport const COMMAND_MITO_AI_SEND_DEBUG_ERROR_MESSAGE = `${MITO_AI}:send-debug-error-message`\nexport const COMMAND_MITO_AI_SEND_AGENT_MESSAGE = `${MITO_AI}:send-agent-message`\n\nexport const COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE = `toolbar-button:accept-code`\nexport const COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE = `toolbar-button:reject-code`\n\n// Beta mode commands\nexport const COMMAND_MITO_AI_BETA_MODE_ENABLED = `${MITO_AI}:beta-mode-enabled`","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport MagnifyingGlassIcon from '../../icons/MagnifyingGlassIcon';\nimport '../../../style/GetCellOutputToolUI.css';\n\n\nconst GetCellOutputToolUI: React.FC = () => {\n\n return (\n <div className=\"get-cell-output-container\">\n <div className=\"get-cell-output-content\">\n <MagnifyingGlassIcon />\n <span>Taking a look at the cell output</span>\n </div>\n </div>\n )\n}\n\nexport default GetCellOutputToolUI;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport '../../style/DropdownMenu.css';\nimport { LabIcon } from '@jupyterlab/ui-components';\n\ninterface DropdownSecondaryAction {\n icon: LabIcon.IReact;\n onClick: () => void;\n tooltip?: string;\n disabled?: boolean;\n}\n\ninterface DropdownMenuItem {\n label: string;\n onClick: () => void; // main action\n primaryIcon?: LabIcon.IReact;\n disabled?: boolean;\n disabledTooltip?: string;\n secondaryActions?: DropdownSecondaryAction[];\n}\n\ninterface DropdownMenuProps {\n trigger: React.ReactNode;\n items: DropdownMenuItem[];\n className?: string;\n alignment?: 'left' | 'right';\n}\n\nconst DropdownMenu: React.FC<DropdownMenuProps> = ({\n trigger,\n items,\n className = '',\n alignment = 'left',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent): void => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n // Handle the main click (primary action)\n const handlePrimaryClick = (onClick: () => void, disabled?: boolean): void => {\n if (disabled) return;\n onClick();\n setIsOpen(false);\n };\n\n // Choose the alignment class\n const alignmentClass =\n alignment === 'right' ? 'dropdown-menu-right' : 'dropdown-menu-left';\n\n return (\n <div className={`dropdown-container ${className}`} ref={dropdownRef}>\n <div onClick={() => setIsOpen(!isOpen)}>\n {trigger}\n </div>\n {isOpen && (\n <div className={`dropdown-menu ${alignmentClass}`}>\n {items.map((item, index) => (\n <div\n key={index}\n className={`dropdown-item-row ${item.disabled ? 'dropdown-item-disabled' : ''}`}\n >\n\n <button\n className=\"dropdown-item-main\"\n onClick={() => handlePrimaryClick(item.onClick, item.disabled)}\n disabled={item.disabled}\n title={item.disabled ? item.disabledTooltip : item.label}\n >\n {/* Optional primary icon on the left */}\n <span className=\"dropdown-item-icon\">\n {item.primaryIcon && React.createElement(item.primaryIcon)}\n </span>\n <span className=\"dropdown-item-label\">{item.label}</span>\n </button>\n {item.secondaryActions && item.secondaryActions.map((action, actionIndex) => (\n <button\n key={actionIndex}\n className=\"dropdown-item-secondary\"\n onClick={(e) => {\n e.stopPropagation(); // prevent triggering the main onClick\n if (!action.disabled) {\n action.onClick();\n setIsOpen(false); // optional: close the dropdown after secondary action\n }\n }}\n disabled={action.disabled}\n title={action.tooltip}\n style={{\n background: 'none',\n border: 'none',\n cursor: action.disabled ? 'default' : 'pointer',\n padding: 0,\n }}\n >\n {React.createElement(action.icon, { fill: 'currentColor' })}\n </button>\n ))}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default DropdownMenu;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport '../../style/IconButton.css';\nimport '../../style/button.css';\nimport { classNames } from '../utils/classNames';\n\ninterface IconButtonProps {\n icon: React.ReactNode;\n onClick: () => void;\n title: string;\n style?: React.CSSProperties;\n}\n\nconst IconButton: React.FC<IconButtonProps> = ({ icon, onClick, title, style }) => {\n\n return (\n <button className={classNames(\"icon-button\")} onClick={onClick} title={title} style={style}>\n {icon}\n </button>\n )\n}\n\nexport default IconButton;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n// Copyright (c) Mito\n\nimport React from 'react';\n\n/*\n A spinning circle loading indicator that inherits its color from the parent component.\n*/\nconst LoadingCircle = (): JSX.Element => {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"2\" opacity=\"0.25\"/>\n <path \n d=\"M8 1C11.866 1 15 4.13401 15 8\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n >\n <animateTransform\n attributeName=\"transform\"\n attributeType=\"XML\"\n type=\"rotate\"\n from=\"0 8 8\"\n to=\"360 8 8\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </path>\n </svg>\n )\n}\n\nexport default LoadingCircle;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n// Copyright (c) Mito\n\nimport React, { useEffect, useState } from 'react';\n\n/*\n Dot, dot, dots. They count, so that you can display something as loading.\n*/\nconst LoadingDots = (): JSX.Element => {\n // We use a count to track the number of ...s to display.\n // 0 -> '', 1 -> '.', 2 -> '..', 3 -> '...'. Wraps % 4.\n const [indicatorState, setIndicatorState] = useState(1);\n\n // Schedule a change to update the loading indicator, every .5 seconds\n useEffect(() => {\n const interval = setInterval(() => {\n setIndicatorState(indicatorState => indicatorState + 1);\n }, 500);\n return () => clearInterval(interval);\n }, []);\n\n const someNumberOfDots = '.'.repeat(indicatorState % 4);\n\n return (\n <>\n {someNumberOfDots}\n </>\n );\n};\n\nexport default LoadingDots;\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState, useEffect } from 'react';\nimport '../../style/ModelSelector.css';\nimport NucleausIcon from '../icons/NucleausIcon';\n\ninterface ModelConfig {\n model: string;\n}\n\ninterface ModelMapping {\n displayName: string;\n fullName: string;\n}\n\nconst MODEL_MAPPINGS: ModelMapping[] = [\n { displayName: 'GPT 4.1', fullName: 'gpt-4.1' },\n { displayName: 'Claude 4 Opus', fullName: 'claude-opus-4-20250514' },\n { displayName: 'Claude 4 Sonnet', fullName: 'claude-sonnet-4-20250514' },\n { displayName: 'Gemini 2.5 Pro', fullName: 'gemini-2.5-pro-preview-03-25' }\n];\n\nconst ALL_MODEL_DISPLAY_NAMES = MODEL_MAPPINGS.map(mapping => mapping.displayName);\n\n// Maximum length for displayed model name before truncating\nexport const DEFAULT_MODEL = 'Claude 4 Sonnet';\n\ninterface ModelSelectorProps {\n onConfigChange: (config: ModelConfig) => void;\n}\n\nconst ModelSelector: React.FC<ModelSelectorProps> = ({ onConfigChange }) => {\n const [selectedModel, setSelectedModel] = useState<string>(DEFAULT_MODEL);\n const [isOpen, setIsOpen] = useState<boolean>(false);\n\n // Load config from localStorage on component mount and notify parent\n useEffect(() => {\n const storedConfig = localStorage.getItem('llmModelConfig');\n let fullModelName: string | undefined;\n let displayName: string | undefined;\n\n if (storedConfig) {\n try {\n const parsedConfig = JSON.parse(storedConfig);\n fullModelName = parsedConfig.model;\n displayName = MODEL_MAPPINGS.find(m => m.fullName === fullModelName)?.displayName;\n } catch (e) {\n console.error('Failed to parse stored LLM config', e);\n }\n }\n\n // Fallback to default if not found\n let defaultMapping = MODEL_MAPPINGS.find(m => m.displayName === DEFAULT_MODEL);\n if (!defaultMapping) {\n defaultMapping = MODEL_MAPPINGS[0];\n }\n if (!fullModelName || !displayName) {\n fullModelName = defaultMapping!.fullName;\n displayName = defaultMapping!.displayName;\n }\n\n setSelectedModel(displayName);\n onConfigChange({ model: fullModelName });\n }, [onConfigChange]);\n\n const handleModelChange = (displayName: string): void => {\n setSelectedModel(displayName);\n setIsOpen(false);\n\n const fullModelName = MODEL_MAPPINGS.find(m => m.displayName === displayName)?.fullName || displayName;\n const newConfig = {\n model: fullModelName\n };\n\n localStorage.setItem('llmModelConfig', JSON.stringify(newConfig));\n\n // Notify parent component\n onConfigChange(newConfig);\n };\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent): void => {\n const target = event.target as HTMLElement;\n if (!target.closest('.model-selector')) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, []);\n\n return (\n <div className=\"model-selector\">\n <div\n className={`model-selector-dropdown`}\n onClick={() => setIsOpen(!isOpen)}\n title={selectedModel}\n data-testid=\"model-selector\"\n >\n <div className=\"selected-model\">\n <span className=\"model-icon\">\n <NucleausIcon height={10} width={10} />\n </span>\n <span className=\"model-name\">{selectedModel}</span>\n <span className=\"dropdown-arrow\">▼</span>\n </div>\n {isOpen && (\n <div\n className={`model-options dropup`}\n style={{ minWidth: '150px' }}\n >\n {ALL_MODEL_DISPLAY_NAMES.map(model => (\n <div\n key={model}\n className={`model-option ${model === selectedModel ? 'selected' : ''}`}\n onClick={(e) => {\n e.stopPropagation();\n handleModelChange(model);\n }}\n title={model} // Show full name on hover\n data-testid=\"model-option\"\n >\n {model}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default ModelSelector;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useEffect, useState } from 'react';\nimport '../../style/NextStepsPills.css';\n\ninterface NextStepsPillsProps {\n nextSteps: string[];\n onSelectNextStep?: (nextStep: string) => void;\n displayedNextStepsIfAvailable: boolean;\n setDisplayedNextStepsIfAvailable: (displayedNextStepsIfAvailable: boolean) => void;\n}\n\nconst NextStepsPills: React.FC<NextStepsPillsProps> = ({ nextSteps, onSelectNextStep, displayedNextStepsIfAvailable, setDisplayedNextStepsIfAvailable }) => {\n const [isVisible, setIsVisible] = useState(displayedNextStepsIfAvailable);\n const [isAnimatingOut, setIsAnimatingOut] = useState(false);\n\n /*\n Triggers entrance animation for next steps pills.\n When new next steps are available, waits 50ms before making the component visible\n to ensure smooth CSS animation transitions. The delay allows the DOM to render\n before the animation state change occurs.\n */\n useEffect(() => {\n if (nextSteps.length > 0) {\n // Small delay to trigger the entrance animation\n const timer = setTimeout(() => setIsVisible(true), 50);\n return () => clearTimeout(timer);\n }\n return () => {}; // Return empty cleanup function for the else case\n }, []);\n\n const handleNextStepClick = (nextStep: string): void => {\n // Start exit animation\n setIsAnimatingOut(true);\n \n // Call the callback after a short delay to allow animation\n setTimeout(() => {\n if (onSelectNextStep) {\n onSelectNextStep(nextStep);\n }\n }, 150);\n };\n\n const toggleExpanded = (): void => {\n setDisplayedNextStepsIfAvailable(!displayedNextStepsIfAvailable);\n };\n\n if (nextSteps.length === 0) {\n return null;\n }\n\n return (\n <div className={`next-steps-pills-container ${isVisible ? 'visible' : ''} ${isAnimatingOut ? 'animating-out' : ''}`}>\n <div className=\"next-steps-header\" onClick={toggleExpanded}>\n <div className={`next-steps-caret ${displayedNextStepsIfAvailable ? 'expanded' : 'collapsed'}`}>\n ▼\n </div>\n <span className=\"next-steps-title\">Suggested Next Steps</span>\n </div>\n {displayedNextStepsIfAvailable && (\n <div className=\"next-steps-pills-list\">\n {nextSteps.map((nextStep, index) => (\n <button\n key={index}\n className=\"next-step-pill\"\n onClick={() => handleNextStepClick(nextStep)}\n title={nextStep}\n style={{ animationDelay: `${index * 50}ms` }}\n >\n <span className=\"next-step-pill-text\">{nextStep}</span>\n <div className=\"next-step-pill-icon\">→</div>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default NextStepsPills; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useState } from 'react';\nimport '../../style/SelectedContextContainer.css';\nimport RuleIcon from '../icons/RuleIcon';\n\ninterface SelectedContextContainerProps {\n title: string;\n onRemove: () => void;\n}\n\nconst SelectedContextContainer: React.FC<SelectedContextContainerProps> = ({ title, onRemove }) => {\n const [isHovered, setIsHovered] = useState(false);\n\n return (\n <button \n className=\"selected-context-container\"\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n data-testid=\"selected-context-container\"\n >\n <div\n className={`icon`}\n onClick={() => onRemove()}\n title={isHovered ? \"Remove rule\" : \"Selected rule\"}\n >\n {isHovered ? (\n <span className=\"icon\">✕</span>\n ) : (\n <RuleIcon />\n )}\n </div>\n <span className=\"rule-name\">\n {title}\n </span>\n </button>\n );\n};\n\nexport default SelectedContextContainer;\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport '../../style/TextAndIconButton.css';\nimport '../../style/button.css';\nimport { ButtonProps } from './TextButton';\nimport { classNames } from '../utils/classNames';\n\n\ninterface TextAndIconButtonProps extends ButtonProps {\n icon: React.ComponentType;\n iconPosition?: 'left' | 'right';\n}\n\nconst TextAndIconButton: React.FC<TextAndIconButtonProps> = ({ \n text, \n icon: Icon, \n onClick, \n title, \n variant,\n iconPosition = 'right' // default to right\n}) => {\n const content = iconPosition === 'right' ? (\n <>\n {text}\n <span className=\"text-and-icon-button__icon\">\n <Icon />\n </span>\n </>\n ) : (\n <>\n <span className=\"text-and-icon-button__icon\">\n <Icon />\n </span>\n {text}\n </>\n );\n\n return (\n <button className={classNames(\n 'text-and-icon-button',\n 'button-base',\n `button-${variant}`,\n `button-width-fit-contents`\n )} onClick={onClick} title={title}>\n {content}\n </button>\n )\n}\n\nexport default TextAndIconButton;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport '../../style/TextButton.css';\nimport '../../style/button.css';\nimport { classNames } from '../utils/classNames';\n\n\nexport interface ButtonProps {\n text: string;\n onClick?: () => void;\n action?: string;\n title: string;\n variant: 'green' | 'red' | 'gray' | 'purple';\n width: 'block' | 'fit-contents';\n}\n\n// Text Button is just the basic Button Props, nothing else. \ninterface TextButtonProps extends ButtonProps {}\n\nconst TextButton: React.FC<TextButtonProps> = ({ text, onClick, title, variant, width, action }) => {\n\n if (action) {\n return (\n <form action={action} method=\"POST\" target=\"_blank\">\n <button className={classNames(\n \"text-button-mito-ai\", \n \"button-base\",\n `button-${variant}`,\n `button-width-${width}`\n )} onClick={onClick} title={title}>\n {text}\n </button>\n </form>\n )\n }\n\n return (\n <button className={classNames(\n \"text-button-mito-ai\", \n \"button-base\",\n `button-${variant}`,\n `button-width-${width}`\n )} onClick={onClick} title={title}>\n {text}\n </button>\n )\n}\n\nexport default TextButton;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\nimport '../../style/button.css';\nimport '../../style/ToggleButton.css';\nimport { classNames } from '../utils/classNames';\n\nexport interface ToggleButtonProps {\n leftText: string;\n rightText: string;\n leftTooltip?: string;\n rightTooltip?: string;\n leftIcon?: React.FC<{ fill?: string; height?: string; width?: string; }>;\n rightIcon?: React.FC<{ fill?: string; height?: string; width?: string; }>;\n isLeftSelected: boolean;\n onChange: (isLeftSelected: boolean) => void;\n}\n\nconst ToggleButton: React.FC<ToggleButtonProps> = ({ \n leftText, \n rightText, \n leftTooltip,\n rightTooltip,\n leftIcon: LeftIcon,\n rightIcon: RightIcon,\n isLeftSelected, \n onChange, \n}) => {\n return (\n <div className={classNames(\n \"toggle-button-container\",\n )}>\n <button \n className={classNames(\n \"toggle-button-half\",\n \"button-base\",\n isLeftSelected ? 'selected' : 'unselected'\n )}\n onClick={() => onChange(true)}\n title={leftTooltip}\n >\n {LeftIcon && <LeftIcon width=\"16px\" height=\"16px\" />}\n {leftText}\n </button>\n <button \n className={classNames(\n \"toggle-button-half\",\n \"button-base\",\n !isLeftSelected ? 'selected' : 'unselected'\n )}\n onClick={() => onChange(false)}\n title={rightTooltip}\n >\n {RightIcon && <RightIcon width=\"16px\" height=\"16px\" />}\n {rightText}\n </button>\n </div>\n );\n};\n\nexport default ToggleButton; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { useCallback, useRef } from \"react\";\n\n/**\n * Creates a debounced version of a function that only executes after waiting for a specified delay\n * with no additional calls. If the function is called multiple times within the delay period,\n * only the last call will be executed.\n * \n * @param callback The function to debounce\n * @param delay The delay in milliseconds\n * @returns A debounced version of the callback\n */\nexport const useDebouncedFunction = <T extends (...args: any[]) => any>(\n callback: T,\n delay: number\n): T => {\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n return useCallback(\n (...args: Parameters<T>) => {\n // Clear any existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Set new timeout\n timeoutRef.current = setTimeout(() => {\n callback(...args);\n }, delay);\n },\n [callback, delay]\n ) as T;\n};","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst AcceptIcon: React.FC = () => (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 21 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M10.2236 0C4.70642 0 0.224487 4.48351 0.224487 10.0009C0.224487 15.5182 4.70642 20 10.2236 20C15.7408 20 20.2245 15.5181 20.2245 10.0009C20.2245 4.48368 15.741 0 10.2236 0ZM14.6192 5.46298C14.986 5.46298 15.3511 5.60114 15.6283 5.87746C16.1817 6.43091 16.1817 7.34456 15.6283 7.89886L9.56828 13.9589C9.01482 14.5123 8.10035 14.5123 7.54687 13.9589L4.85354 11.2648C4.30008 10.7114 4.30008 9.79937 4.85354 9.24518C5.407 8.69172 6.319 8.69172 6.87319 9.24518L8.55657 10.9294L13.6083 5.87851C13.8855 5.60054 14.2525 5.46298 14.6192 5.46298Z\" />\n </g>\n </svg>\n\n);\n\nexport default AcceptIcon;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst CodeIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 20 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <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\" />\n </g>\n </svg>\n);\n\nexport default CodeIcon;\n\n\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst CopyIcon: React.FC = () => (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 10 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M3.12502 4.03283H4.27968C4.35507 4.02072 4.4082 3.95276 4.40156 3.87658V2.59542C4.25976 2.64425 4.13359 2.72979 4.03593 2.84385L3.32343 3.65323C3.22929 3.76299 3.16172 3.89307 3.125 4.03291L3.12502 4.03283Z\"/>\n <path d=\"M7.75784 2.55308H4.70626V3.87342C4.71524 4.12263 4.5211 4.33201 4.27188 4.34217H3.0813V9.2C3.08208 9.56993 3.38012 9.8707 3.75005 9.875H7.75788C7.93757 9.87578 8.11022 9.80508 8.23757 9.67852C8.3653 9.55195 8.43717 9.37969 8.43757 9.2V3.22808C8.43718 3.0484 8.3653 2.87613 8.23757 2.74957C8.11022 2.623 7.93757 2.5523 7.75788 2.55308H7.75784Z\"/>\n <path d=\"M3.80163 2.62967C4.01452 2.38553 4.32155 2.24373 4.64538 2.2406H6.91879V1.79998C6.91801 1.43005 6.61997 1.12928 6.25004 1.12498H3.19221V2.44531C3.20119 2.69453 3.00705 2.9039 2.75783 2.91406H1.5625V7.77189C1.56328 8.14416 1.86523 8.44611 2.2375 8.44689H2.76407V4.30631C2.76172 3.98795 2.87578 3.67974 3.08438 3.43914L3.80163 2.62967Z\"/>\n <path d=\"M2.75783 2.60467C2.83322 2.59256 2.88635 2.52459 2.87971 2.44842V1.16725C2.74182 1.21569 2.61916 1.29928 2.52346 1.40943L1.80783 2.21881C1.71096 2.33013 1.64065 2.46217 1.60315 2.60474L2.75783 2.60467Z\"/>\n </g>\n </svg>\n);\n\nexport default CopyIcon;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst ExpandIcon: React.FC<{\n isExpanded: boolean;\n}> = ({\n isExpanded\n}) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n {isExpanded ? (\n <path d=\"M6 2L10 6L9 7L6 4L3 7L2 6L6 2Z\" />\n ) : (\n <path d=\"M6 10L2 6L3 5L6 8L9 5L10 6L6 10Z\" />\n )}\n </g>\n </svg>\n);\n\nexport default ExpandIcon; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst MagicWandIcon: React.FC = () => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clipPath=\"url(#clip0_52_2)\">\n <path d=\"M11.7423 4.48214C11.4704 4.21083 11.0307 4.21083 10.7587 4.48214L7.80698 7.43387L8.79062 8.41751L11.7415 5.46578C12.0129 5.1952 12.0136 4.75411 11.7423 4.48214H11.7423Z\" fill=\"currentColor\" />\n <path d=\"M0.428284 15.796C0.700257 16.068 1.13995 16.068 1.41192 15.796L8.29886 8.90973L7.31522 7.92609L0.428284 14.8124C0.156311 15.0843 0.156311 15.524 0.428284 15.796Z\" fill=\"currentColor\" />\n <path d=\"M11.3549 1.39133L11.0071 0L10.6592 1.39133L9.26791 1.73915L10.6592 2.08701L11.0071 3.47835L11.3549 2.08701L12.7462 1.73915L11.3549 1.39133Z\" fill=\"currentColor\" />\n <path d=\"M14.4858 3.47826L14.1379 4.8696L12.7466 5.21741L14.1379 5.56522L14.4858 6.95656L14.8336 5.56522L16.225 5.21741L14.8336 4.8696L14.4858 3.47826Z\" fill=\"currentColor\" />\n <path d=\"M12.7462 7.65213L12.0506 10.4348L9.26791 11.1304L12.0506 11.8261L12.7462 14.6088L13.4419 11.8261L16.2246 11.1304L13.4419 10.4348L12.7462 7.65213Z\" fill=\"currentColor\" />\n <path d=\"M6.48544 4.17387L9.2681 3.47824L6.48544 2.78256L5.78976 -0.000106812L5.09413 2.78256L2.31146 3.47824L5.09413 4.17387L5.78976 6.95653L6.48544 4.17387Z\" fill=\"currentColor\" />\n </g>\n <defs>\n <clipPath id=\"clip0_52_2\">\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0.224487)\" />\n </clipPath>\n </defs>\n </svg>\n\n);\n\nexport default MagicWandIcon;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst MagnifyingGlassIcon: React.FC = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 21 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M2.96182 19.9992C3.53644 19.9992 4.11107 19.7813 4.54856 19.3447L7.30621 16.5858C7.61783 16.7681 7.94074 16.9313 8.27665 17.0772C9.41116 17.5685 10.609 17.8142 11.8102 17.8142C12.9178 17.8142 14.0271 17.6041 15.0897 17.1839C17.3005 16.3089 19.0375 14.6238 19.9809 12.4415C20.9262 10.2582 20.9644 7.83974 20.0886 5.6287C18.277 1.0529 13.1089 -1.1824 8.53539 0.628434C6.32457 1.50348 4.58668 3.18857 3.64154 5.37091C2.69801 7.55325 2.66068 9.97263 3.53564 12.1837C3.7049 12.6108 3.90455 13.0205 4.13197 13.4112L1.37432 16.1691C0.500226 17.0433 0.500226 18.4679 1.37432 19.3437C1.8118 19.7812 2.38729 20 2.96278 20L2.96182 19.9992ZM18.6852 6.1833C19.4117 8.02022 19.3796 10.0291 18.5949 11.8406C17.812 13.6532 16.3693 15.0527 14.5327 15.7794C12.6977 16.506 10.6873 16.4747 8.8759 15.6908C5.1357 14.0727 3.40838 9.71143 5.02719 5.97068C5.81188 4.15808 7.25524 2.76051 9.09034 2.03195C12.887 0.528388 17.1811 2.38613 18.6855 6.18328L18.6852 6.1833Z\"/>\n </g>\n </svg>\n\n)\n\nexport default MagnifyingGlassIcon; \n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst MitoLogo: React.FC<{\n height?: string;\n width?: string;\n}> = ({\n height = '30',\n width = '60',\n}) => (\n <svg width={width} height={height} viewBox=\"0 0 60 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"2\" width=\"56\" height=\"26\" rx=\"13\" fill=\"#DECEFF\" stroke=\"#9D6CFF\" strokeWidth=\"4\"/>\n <path d=\"M17 29V13\" stroke=\"#9D6CFF\" strokeWidth=\"4\"/>\n <ellipse cx=\"17\" cy=\"13\" rx=\"2\" ry=\"1\" fill=\"#9D6CFF\"/>\n <path d=\"M43 29V13\" stroke=\"#9D6CFF\" strokeWidth=\"4\"/>\n <ellipse cx=\"43\" cy=\"13\" rx=\"2\" ry=\"1\" fill=\"#9D6CFF\"/>\n <path d=\"M30 0.999999V17\" stroke=\"#9D6CFF\" strokeWidth=\"4\"/>\n <ellipse rx=\"2\" ry=\"1\" transform=\"matrix(1 0 0 -1 30 17)\" fill=\"#9D6CFF\"/>\n </svg>\n);\n\nexport default MitoLogo; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst CodeIcon: React.FC = () => (\n <svg width=\"15\" height=\"12\" viewBox=\"0 0 15 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill='currentColor'>\n <path d=\"M4.94038 2.90526C4.94038 2.65884 4.84466 2.42724 4.66957 2.25163C4.3308 1.9148 3.70255 1.91386 3.36425 2.25263L0.270338 5.34702C0.0985595 5.51875 0 5.7566 0 5.99966C0 6.24272 0.0985583 6.48051 0.270338 6.65229L3.36522 9.74766C3.53989 9.92086 3.77144 10.0171 4.01691 10.0171C4.26238 10.0171 4.49398 9.92134 4.67054 9.74624C4.84421 9.5721 4.93993 9.34002 4.93993 9.09408C4.93993 8.84814 4.84421 8.61606 4.66959 8.44145L2.22834 6.00019L4.67008 3.55894C4.84422 3.38427 4.94042 3.15267 4.94042 2.90531L4.94038 2.90526Z\"/>\n <path d=\"M14.279 5.34708L11.1846 2.25268C10.8472 1.91438 10.219 1.91391 9.87875 2.25268C9.70461 2.42682 9.60889 2.6589 9.60889 2.90531C9.60889 3.15315 9.70508 3.38522 9.87875 3.55795L12.3205 5.99969L9.87875 8.44094C9.70461 8.61508 9.60889 8.84716 9.60889 9.09357C9.60889 9.33999 9.7046 9.57207 9.8797 9.7472C10.0544 9.92087 10.2864 10.0166 10.5319 10.0166C10.7773 10.0166 11.0094 9.92088 11.184 9.74673L14.2784 6.65233C14.4502 6.48055 14.5488 6.24276 14.5488 5.9997C14.5488 5.75669 14.4507 5.51884 14.2789 5.34711L14.279 5.34708Z\"/>\n <path d=\"M8.81621 0.0325582C8.2851 -0.111468 7.69701 0.238298 7.56072 0.767032L4.98125 10.7157C4.83912 11.2627 5.16928 11.8239 5.71667 11.9675C5.8004 11.989 5.88656 12 5.97456 12C6.44301 12 6.85116 11.6837 6.96791 11.2311L9.54738 1.28239C9.61677 1.01684 9.57751 0.740717 9.43879 0.505334C9.30002 0.268483 9.07751 0.100535 8.81627 0.0325776L8.81621 0.0325582Z\"/>\n </g>\n </svg>\n);\n\nexport default CodeIcon;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst TextIcon: React.FC = () => (\n <svg width=\"11\" height=\"12\" viewBox=\"0 0 11 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill='currentColor'>\n <path d=\"M9.98373 7.9354e-05C9.9573 7.9354e-05 9.93255 0.00614082 9.90713 0.00761542C9.88171 0.00614094 9.85696 7.9354e-05 9.83104 7.9354e-05H1.16989C1.14346 7.9354e-05 1.11871 0.00614077 1.09278 0.00810691C1.06686 0.00614093 1.04211 7.9354e-05 1.01619 7.9354e-05C0.455038 7.9354e-05 0 0.442923 0 0.988938V2.5733C0 3.11936 0.455081 3.56166 1.01619 3.56166C1.57729 3.56166 2.03237 3.11931 2.03237 2.5733V1.97696H4.50719V10.0223H3.48157C2.92042 10.0223 2.4659 10.4646 2.4659 11.0111C2.4659 11.5567 2.92047 12 3.48157 12H5.51833H5.52355H5.52877H7.56606C8.1272 12 8.58224 11.5567 8.58224 11.0111C8.58224 10.4646 8.12716 10.0223 7.56606 10.0223L6.53944 10.0221V1.97721H8.96763V2.57356C8.96763 3.11961 9.42271 3.56191 9.98382 3.56191C10.545 3.56191 11 3.11957 11 2.57356V0.989194C11.0002 0.442843 10.5449 0 9.98382 0L9.98373 7.9354e-05Z\"/>\n </g>\n </svg>\n);\n\nexport default TextIcon;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst NucleausIcon: React.FC<{\n height?: number;\n width?: number;\n}> = ({\n height = 20,\n width = 20,\n}) => (\n <svg width={width} height={height} viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M18.5775 2.50569L17.3933 1.85818C17.3684 1.84329 17.3461 1.82344 17.3337 1.79616L16.6832 0.61281C16.5715 0.404416 16.353 0 16.1171 0C15.8788 0 15.6628 0.404416 15.5485 0.61281L14.9005 1.79616C14.8856 1.82344 14.8658 1.84329 14.8385 1.85818L13.6542 2.50569C13.4456 2.61981 13.0087 2.83564 13.0087 3.07381C13.0087 3.30949 13.4456 3.52781 13.6542 3.64193L14.8385 4.28944C14.8658 4.30184 14.8856 4.32417 14.9005 4.34898L15.5485 5.53232C15.6628 5.74072 15.8788 6.16746 16.1171 6.16746C16.353 6.16746 16.5715 5.74072 16.6832 5.53232L17.3337 4.34898C17.3461 4.32417 17.3684 4.30184 17.3933 4.28944L18.5775 3.64193C18.7861 3.52781 19.2306 3.30949 19.2306 3.07381C19.2306 2.83564 18.7861 2.61981 18.5775 2.50569Z\" />\n <path d=\"M15.4932 9.95234L12.2462 8.17563C12.1781 8.13478 12.1168 8.08032 12.0828 8.00544L10.2993 4.75843C9.99295 4.18661 9.3939 3.07692 8.7472 3.07692C8.0937 3.07692 7.50145 4.18661 7.18832 4.75843L5.4116 8.00544C5.37075 8.08032 5.3163 8.13478 5.24141 8.17563L1.9944 9.95234C1.42258 10.2655 0.224487 10.8577 0.224487 11.5112C0.224487 12.1579 1.42258 12.757 1.9944 13.0701L5.24141 14.8468C5.3163 14.8809 5.37075 14.9421 5.4116 15.0102L7.18832 18.2572C7.50145 18.829 8.0937 20 8.7472 20C9.3939 20 9.99295 18.829 10.2993 18.2572L12.0828 15.0102C12.1168 14.9421 12.1781 14.8809 12.2462 14.8468L15.4932 13.0701C16.065 12.757 17.2837 12.1579 17.2837 11.5112C17.2837 10.8577 16.065 10.2655 15.4932 9.95234Z\" />\n </g>\n </svg>\n);\n\nexport default NucleausIcon;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst PencilIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill='currentColor'>\n <path d=\"M9.88308 1.82456C9.68326 1.49798 9.43085 1.18192 9.1259 0.876387C8.8209 0.570854 8.5054 0.317998 8.18991 0.117862C7.88492 -0.0717913 7.48531 -0.0296413 7.22238 0.223215L1.15425 6.29155C1.12269 6.32317 1.10167 6.35476 1.08065 6.39691L0.0289843 9.38893C-0.0341088 9.55749 0.00796491 9.73662 0.134151 9.86302C0.218298 9.94732 0.333977 10 0.449651 10C0.502235 10 0.554818 9.98947 0.596894 9.97894L3.58363 8.92541C3.6257 8.91488 3.65723 8.88326 3.6888 8.85168L9.76744 2.78325C10.0304 2.51987 10.0724 2.13008 9.88311 1.82454L9.88308 1.82456ZM1.56439 6.80777C1.86938 6.98685 2.18488 7.2397 2.47934 7.53471C2.77382 7.82972 3.01568 8.14578 3.19449 8.45128L1.46976 9.06235C1.41717 8.957 1.34357 8.85164 1.25942 8.76734C1.16476 8.67252 1.0701 8.60931 0.964937 8.55664L1.56439 6.80777Z\" />\n </g>\n </svg>\n);\n\nexport default PencilIcon;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n\nimport React from 'react';\n\nconst PlayButtonIcon: React.FC = () => (\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 10 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M5 0.5C6.38068 0.5 7.63072 1.05968 8.53558 1.9646C9.44034 2.86935 10 4.11938 10 5.50005C10 6.88071 9.44031 8.13075 8.53558 9.03559C7.63071 9.94034 6.38058 10.5 5 10.5C3.61942 10.5 2.36928 9.94032 1.46442 9.03559C0.559662 8.13073 0 6.88062 0 5.50005C0 4.11948 0.55969 2.86935 1.46461 1.9645C2.36937 1.05975 3.61942 0.500096 5.0001 0.500096L5 0.5ZM7.31017 5.70697C7.34646 5.68679 7.37783 5.65673 7.40006 5.61816C7.46534 5.50465 7.42621 5.35975 7.31271 5.29447L3.89591 3.32169C3.85701 3.29401 3.80938 3.27775 3.75805 3.27775C3.62653 3.27775 3.51992 3.38435 3.51992 3.51588L3.51988 5.50003V7.48417H3.52085C3.52085 7.52427 3.53099 7.56497 3.55237 7.60234C3.61764 7.71585 3.76256 7.75501 3.87606 7.6897L5.59438 6.69758L7.31017 5.70697Z\"/>\n </g>\n </svg>\n);\n\nexport default PlayButtonIcon;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst RejectIcon: React.FC = () => (\n\n <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 21 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M10.2245 0C7.57229 0 5.02869 1.0536 3.15349 2.929C1.27817 4.8044 0.224487 7.348 0.224487 10C0.224487 12.652 1.27809 15.1958 3.15349 17.071C5.02889 18.9463 7.57249 20 10.2245 20C12.8765 20 15.4203 18.9464 17.2955 17.071C19.1708 15.1956 20.2245 12.652 20.2245 10C20.2245 8.2446 19.7624 6.5202 18.8847 5C18.0071 3.47984 16.7447 2.2174 15.2245 1.3398C13.7044 0.46206 11.9799 3.9978e-05 10.2245 3.9978e-05L10.2245 0ZM13.9315 12.293C14.1244 12.4794 14.2344 12.7354 14.2367 13.0036C14.2391 13.2718 14.1335 13.5298 13.9438 13.7194C13.7542 13.9091 13.4962 14.0146 13.228 14.0123C12.9598 14.01 12.7038 13.9 12.5174 13.7071L10.2244 11.4141L7.93143 13.7071C7.67737 13.9524 7.31283 14.0455 6.97229 13.9521C6.63175 13.8588 6.36565 13.5927 6.27229 13.2521C6.17893 12.9116 6.27205 12.5471 6.51737 12.293L8.81037 10L6.51737 7.707C6.27205 7.45294 6.17893 7.0884 6.27229 6.74786C6.36565 6.40732 6.63175 6.14122 6.97229 6.04786C7.31283 5.9545 7.67737 6.04763 7.93143 6.29294L10.2244 8.58594L12.5174 6.29294V6.29286C12.7715 6.04754 13.136 5.95442 13.4766 6.04778C13.8171 6.14114 14.0832 6.40724 14.1766 6.74778C14.2699 7.08832 14.1768 7.45286 13.9315 7.70692L11.6385 9.99992L13.9315 12.293Z\" />\n </g>\n </svg>\n);\n\nexport default RejectIcon;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst RuleIcon: React.FC = () => {\n return (\n <svg width=\"9\" height=\"12\" viewBox=\"0 0 9 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M1.22727 0C0.554444 0 0 0.580846 0 1.28571V10.7143C0 11.4192 0.554444 12 1.22727 12H7.77273C8.44556 12 9 11.4192 9 10.7143V3.42857H6.95455C6.28172 3.42857 5.72727 2.84773 5.72727 2.14286V0H1.22727ZM6.54545 0V2.14286C6.54545 2.38768 6.72085 2.57143 6.95455 2.57143H9C9 2.45777 8.95688 2.3488 8.88013 2.26843L6.83468 0.125577C6.75797 0.0451748 6.65396 0 6.54545 0ZM2.45455 4.71429H6.54545C6.77139 4.71429 6.95455 4.90616 6.95455 5.14286C6.95455 5.37955 6.77139 5.57143 6.54545 5.57143H2.45455C2.22861 5.57143 2.04545 5.37955 2.04545 5.14286C2.04545 4.90616 2.22861 4.71429 2.45455 4.71429ZM2.45455 6.85714H6.54545C6.77139 6.85714 6.95455 7.04902 6.95455 7.28571C6.95455 7.52241 6.77139 7.71429 6.54545 7.71429H2.45455C2.22861 7.71429 2.04545 7.52241 2.04545 7.28571C2.04545 7.04902 2.22861 6.85714 2.45455 6.85714ZM2.45455 9H6.54545C6.77139 9 6.95455 9.19187 6.95455 9.42857C6.95455 9.66527 6.77139 9.85714 6.54545 9.85714H2.45455C2.22861 9.85714 2.04545 9.66527 2.04545 9.42857C2.04545 9.19187 2.22861 9 2.45455 9Z\" />\n </g>\n </svg>\n )\n}\n\nexport default RuleIcon;\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React from 'react';\n\nconst UndoIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 96 76\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M95.5 49.875C95.5 64.277 83.777 76 69.375 76H48C45.3789 76 43.25 73.875 43.25 71.25C43.25 68.625 45.3789 66.5 48 66.5H69.375C78.5391 66.5 86 59.0391 86 49.875C86 40.7109 78.5391 33.25 69.375 33.25H16.719L32.36 48.891C34.2155 50.7465 34.2155 53.7504 32.36 55.6098C31.4303 56.5356 30.2155 57.0004 29.0006 57.0004C27.7857 57.0004 26.5709 56.5356 25.6412 55.6098L1.8912 31.8598C0.0356977 30.0043 0.0356977 27.0004 1.8912 25.141L25.6412 1.391C27.4967 -0.464501 30.5006 -0.464501 32.36 1.391C34.2155 3.2465 34.2155 6.2504 32.36 8.1098L16.719 23.7508H69.375C83.777 23.7508 95.5 35.469 95.5 49.875Z\" />\n </g>\n </svg>\n);\n\nexport default UndoIcon; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { LabIcon } from '@jupyterlab/ui-components';\nimport LightbulbIcon from '../../src/icons/LightbulbIcon.svg';\nimport NucleusIcon from '../../src/icons/NucleusIcon.svg';\nimport OpenIndicatorIcon from '../../src/icons/OpenIndicatorIcon.svg';\nimport AppBuilderExcludeCellIcon from '../../src/icons/AppBuilderExcludeCellIcon.svg';\nimport AppBuilderIncludeCellIcon from '../../src/icons/AppBuilderIncludeCellIcon.svg';\n\nexport const lightBulbLabIcon = new LabIcon({\n name: 'lightbulb-icon',\n svgstr: LightbulbIcon\n});\n\nexport const NucleusLabIcon = new LabIcon({\n name: 'nucleus-icon',\n svgstr: NucleusIcon\n});\n\nexport const OpenIndicatorLabIcon = new LabIcon({\n name: 'open-indicator-icon',\n svgstr: OpenIndicatorIcon\n});\n\nexport const AppBuilderExcludeCellLabIcon = new LabIcon({\n name: 'app-builder-exclude-cell-icon',\n svgstr: AppBuilderExcludeCellIcon\n});\n\nexport const AppBuilderIncludeCellLabIcon = new LabIcon({\n name: 'app-builder-include-cell-icon',\n svgstr: AppBuilderIncludeCellIcon\n});\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport AiChatPlugin from './Extensions/AiChat/AiChatPlugin';\nimport ContextManagerPlugin from './Extensions/ContextManager/ContextManagerPlugin';\nimport ErrorMimeRendererPlugin from './Extensions/ErrorMimeRenderer/ErrorMimeRendererPlugin';\nimport ToolbarButtonsPlugin from './Extensions/ToolbarButtons/ToolbarButtonsPlugin';\nimport AppBuilderPlugin from './Extensions/AppBuilder/AppBuilderPlugin';\nimport { emptyCellPlaceholder } from './Extensions/emptyCell/EmptyCellPlugin';\nimport { statusItem } from './Extensions/status';\nimport SettingsManagerPlugin from './Extensions/SettingsManager/SettingsManagerPlugin';\nimport { versionCheckPlugin } from './Extensions/VersionCheck';\nimport NotebookFooterPlugin from './Extensions/NotebookFooter';\n\n// This is the main entry point to the mito-ai extension. It must export all of the top level\n// extensions that we want to load.\nexport default [\n AiChatPlugin,\n ErrorMimeRendererPlugin,\n ContextManagerPlugin,\n AppBuilderPlugin,\n ToolbarButtonsPlugin,\n emptyCellPlaceholder,\n statusItem,\n SettingsManagerPlugin,\n versionCheckPlugin,\n NotebookFooterPlugin\n];\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/************************************\n\nLOG ENDPOINTS\n\n************************************/\n\nexport const logEvent = async (logEvent: string, params?: Record<string, any>): Promise<void> => {\n const resp = await requestAPI<void>('log', {\n method: 'PUT',\n body: JSON.stringify({ \n log_event: logEvent,\n params: params || {}\n }),\n });\n \n if (resp.error) {\n console.error(resp.error.message);\n }\n}\n\n\n/************************************\n\nSETTINGS ENDPOINTS\n\n************************************/\n\nimport { requestAPI } from \"./utils\";\n\nexport const getSetting = async (settingsKey: string): Promise<string | undefined> => {\n\n const resp = await requestAPI<{key: string, value: string} | undefined>(`settings/${settingsKey}`)\n if (resp.error) {\n throw new Error(resp.error.message);\n }\n\n return resp.data?.value || undefined;\n}\n\nexport const updateSettings = async (settingsKey: string, settingsValue: string): Promise<string> => {\n const resp = await requestAPI<string>(`settings/${settingsKey}`, {\n method: 'PUT',\n body: JSON.stringify({ value: settingsValue }),\n })\n if (resp.error) {\n throw new Error(resp.error.message);\n }\n return resp.data || '';\n}\n\n\n/************************************\n\nRULES ENDPOINTS\n\n************************************/\n\nexport const setRule = async(ruleName: string, ruleContent: string): Promise<string> => {\n const resp = await requestAPI<string>(`rules/${ruleName}`, {\n method: 'PUT',\n body: JSON.stringify({ content: ruleContent }),\n })\n if (resp.error) {\n throw new Error(resp.error.message);\n }\n\n return resp.data || '';\n}\n\nexport const getRule = async(ruleName: string): Promise<string | undefined> => {\n const resp = await requestAPI<{key: string, content: string}>(`rules/${ruleName}`)\n if (resp.error) {\n throw new Error(resp.error.message);\n }\n\n return resp.data?.content;\n}\n\nexport const getRules = async(): Promise<string[]> => {\n const resp = await requestAPI<string[]>(`rules`)\n if (resp.error) {\n throw new Error(resp.error.message);\n }\n return resp.data || [];\n}\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { URLExt } from \"@jupyterlab/coreutils\";\nimport { ServerConnection } from '@jupyterlab/services';\n\ninterface APIResponse<T> {\n data?: T;\n error?: {\n message: string;\n status?: number;\n type: 'network' | 'response' | 'parse';\n };\n}\n\n/**\n * Call the API extension\n *\n * @param endPoint API REST end point for the extension\n * @param init Initial values for the request\n * @returns The response body interpreted as JSON\n */\nexport async function requestAPI<T>(\n endPoint = '',\n init: RequestInit = {}\n): Promise<APIResponse<T>> {\n // Make request to Jupyter API\n const settings = ServerConnection.makeSettings();\n const requestUrl = URLExt.join(\n settings.baseUrl,\n 'mito-ai', // API Namespace\n endPoint\n );\n\n let response: Response;\n try {\n response = await ServerConnection.makeRequest(requestUrl, init, settings);\n } catch (error) {\n console.log(error);\n return {\n error: {\n message: (error as Error).message || 'Network error occurred',\n type: 'network'\n }\n };\n }\n\n let data: any = await response.text();\n\n if (!response.ok) {\n try {\n data = JSON.parse(data);\n return {\n error: {\n message: data.error || 'Server error occurred',\n type: 'response',\n status: response.status\n }\n };\n } catch (error) {\n return {\n error: {\n message: 'Server error occurred',\n type: 'response',\n status: response.status\n }\n };\n }\n }\n\n if (data.length > 0) {\n try {\n data = JSON.parse(data);\n } catch (error) {\n return {\n error: {\n message: 'Invalid JSON response from server',\n type: 'parse',\n status: response.status\n }\n };\n }\n }\n\n return { data };\n}\n\nexport const getXsrfToken = (): string | null | undefined => {\n const cookies = document.cookie.split(';');\n const xsrfCookie = cookies.find(cookie => cookie.trim().startsWith('_xsrf='));\n if (xsrfCookie) {\n return xsrfCookie.split('=')[1];\n }\n return null;\n}\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { JupyterFrontEnd } from \"@jupyterlab/application\"\nimport { CodeCell } from \"@jupyterlab/cells\"\nimport { INotebookTracker } from \"@jupyterlab/notebook\"\nimport { getFullErrorMessageFromTraceback } from \"../Extensions/ErrorMimeRenderer/errorUtils\"\nimport { sleep } from \"./sleep\"\nimport { createCodeCellAtIndexAndActivate, didCellExecutionError, setActiveCellByID, getActiveCellID, scrollToCell } from \"./notebook\"\nimport { ChatHistoryManager, PromptType } from \"../Extensions/AiChat/ChatHistoryManager\"\nimport { MutableRefObject } from \"react\"\nimport { CellUpdate } from \"../websockets/completions/CompletionModels\"\n\nexport const acceptAndRunCellUpdate = async (\n cellUpdate: CellUpdate,\n notebookTracker: INotebookTracker,\n app: JupyterFrontEnd,\n previewAICodeToActiveCell: () => void,\n acceptAICode: () => void\n): Promise<void> => {\n\n // If the cellUpdate is creating a new code cell, insert it \n // before previewing and accepting the code. \n if (cellUpdate.type === 'new' ) {\n // makes the cell the active cell\n createCodeCellAtIndexAndActivate(notebookTracker, cellUpdate.index)\n } else {\n setActiveCellByID(notebookTracker, cellUpdate.id)\n }\n\n // The target cell should now be the active cell\n await acceptAndRunCode(app, notebookTracker, previewAICodeToActiveCell, acceptAICode, cellUpdate.cell_type)\n}\n\nexport const acceptAndRunCode = async (\n app: JupyterFrontEnd,\n notebookTracker: INotebookTracker,\n previewAICodeToActiveCell: () => void,\n acceptAICode: () => void,\n cellType: 'code' | 'markdown'\n): Promise<void> => {\n /* \n PreviewAICode applies the code to the current active code cell, \n so make sure that correct cell is active before calling \n this function\n */\n previewAICodeToActiveCell()\n acceptAICode()\n\n // We always create code cells, and then convert to markdown if necessary.\n if (cellType === 'markdown') {\n await app.commands.execute(\"notebook:change-cell-to-markdown\");\n } else if (cellType === 'code') {\n await app.commands.execute(\"notebook:change-cell-to-code\");\n }\n \n // This awaits until after the execution is finished.\n // Note that it is important that we just run the cell and don't run and advance the cell. \n // We rely on the active cell remaining the same after running the cell in order to get the output\n // of the cell to send to the agent. This is changeable in the future, but for now its an invariant we rely on.\n await app.commands.execute(\"notebook:run-cell\");\n\n // Scroll to the bottom of the active cell to show the output\n const activeCellID = getActiveCellID(notebookTracker);\n if (activeCellID) {\n scrollToCell(notebookTracker, activeCellID, undefined, 'end');\n }\n\n // By sleeping here, we make sure that this function returns after the variable manager\n // has updated the state of the variables. This ensures that on the next Ai message\n // gets the most up to date data.\n await sleep(1000)\n}\n\nexport const retryIfExecutionError = async (\n notebookTracker: INotebookTracker, \n app: JupyterFrontEnd,\n getDuplicateChatHistoryManager: () => ChatHistoryManager,\n addAIMessageFromResponseAndUpdateState: (messageContent: string, promptType: PromptType, chatHistoryManager: ChatHistoryManager, mitoAIConnectionError?: boolean, mitoAIConnectionErrorType?: string | null) => void,\n sendAgentSmartDebugMessage: (errorMessage: string) => Promise<void>,\n previewAICodeToActiveCell: () => void,\n acceptAICode: () => void,\n shouldContinueAgentExecution: MutableRefObject<boolean>,\n finalizeAgentStop: () => void,\n chatHistoryManagerRef: React.MutableRefObject<ChatHistoryManager>\n): Promise<'success' | 'failure' | 'interupted'> => {\n\n const cell = notebookTracker.currentWidget?.content?.activeCell as CodeCell;\n\n // Note: If you update the max retries, update the message we display on each failure\n // attempt to ensure we don't say \"third attempt\" over and over again.\n const MAX_RETRIES = 3;\n let attempts = 0;\n\n while (didCellExecutionError(cell) && attempts < MAX_RETRIES) {\n\n if (!shouldContinueAgentExecution.current) {\n finalizeAgentStop()\n return 'interupted';\n }\n\n // If the code cell has an error, we need to send the error to the AI\n // and get it to fix the error.\n const errorOutput = cell?.model.outputs?.toJSON().find(output => output.output_type === \"error\");\n if (!errorOutput) {\n return 'success'; // If no error output, we're done\n }\n const errorMessage = getFullErrorMessageFromTraceback(errorOutput.traceback as string[]);\n\n const newChatHistoryManager = getDuplicateChatHistoryManager()\n\n addAIMessageFromResponseAndUpdateState(\n attempts === 0 \n ? \"Hmm, looks like my first attempt didn't work. Let me try again.\"\n : `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\"}`,\n 'agent:execution',\n newChatHistoryManager\n )\n\n // Wait two seconds so the use can more easily see what is going on \n await sleep(2000)\n\n await sendAgentSmartDebugMessage(errorMessage)\n const aiDisplayOptimizedChatItem = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem();\n\n // TODO: We expect that the agent responds with a cell_update if they are prompted to fix an error. \n // But we are not enforcing that right now. We can fix this by setting the response_format for agent:smartDebug\n // to only allow cell_updates and then we can return the agentResponse from sendAgentSmartDebugMessage so \n // typescript knows what type it is. \n if (aiDisplayOptimizedChatItem?.agentResponse?.type !== 'cell_update' || aiDisplayOptimizedChatItem?.agentResponse?.cell_update === undefined) {\n return 'failure'\n }\n\n const cellUpdate = aiDisplayOptimizedChatItem.agentResponse.cell_update\n \n if (cellUpdate !== undefined && cellUpdate !== null) {\n await acceptAndRunCellUpdate(\n cellUpdate, \n notebookTracker, \n app,\n previewAICodeToActiveCell, \n acceptAICode\n )\n }\n\n attempts++;\n\n // If this was the last attempt and it still failed\n if (attempts === MAX_RETRIES && didCellExecutionError(cell)) {\n return 'failure'\n }\n }\n\n return 'success'\n}\n\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nexport const deepEqualArrays = (arr1: any[], arr2: any[]): boolean => {\n if (arr1.length !== arr2.length) return false;\n for (let i = 0; i < arr1.length; i++) {\n if (typeof arr1[i] === 'object' && typeof arr2[i] === 'object') {\n if (!deepEqualArrays(arr1[i], arr2[i])) return false;\n } else if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n// Function to check for blacklisted words that could be dangerous for the agent to execute\n\nexport const checkForBlacklistedWords = (code: string): { safe: boolean, reason?: string } => {\n // List of dangerous operations/commands that could delete files or cause harm\n const blacklistedPatterns = [\n {\n pattern: /\\brm\\s+-rf\\b/,\n message: \"This code contains a command (rm -rf) that could recursively delete files and directories from your system\"\n },\n {\n pattern: /\\bfs\\.rmdir\\b/,\n message: \"This code contains a Node.js command (fs.rmdir) that could delete directories from your system\"\n },\n {\n pattern: /\\bfs\\.unlink\\b/,\n message: \"This code contains a Node.js command (fs.unlink) that could delete files from your system\"\n },\n {\n pattern: /\\bshutil\\.rmtree\\b/,\n message: \"This code contains a Python command (shutil.rmtree) that could recursively delete directories and their contents\"\n },\n {\n pattern: /\\bos\\.remove\\b/,\n message: \"This code contains a Python command (os.remove) that could delete files from your system\"\n },\n {\n pattern: /\\bos\\.rmdir\\b/,\n message: \"This code contains a Python command (os.rmdir) that could delete directories from your system\"\n },\n {\n pattern: /\\bos\\.unlink\\b/,\n message: \"This code contains a Python command (os.unlink) that could delete files from your system\"\n },\n {\n pattern: /\\brmdir\\b/,\n message: \"This code contains a command (rmdir) that could delete directories from your system\"\n },\n {\n pattern: /\\bunlink\\b/,\n message: \"This code contains a function (unlink) that could delete files from your system\"\n },\n {\n pattern: /\\bdelete\\s+from\\b/i,\n message: \"This code contains an SQL DELETE command that could remove data from your database\"\n },\n {\n pattern: /\\bdrop\\s+table\\b/i,\n message: \"This code contains an SQL DROP TABLE command that could delete entire tables from your database\"\n },\n {\n pattern: /\\bdrop\\s+database\\b/i,\n message: \"This code contains an SQL DROP DATABASE command that could delete your entire database\"\n },\n {\n pattern: /\\bformat\\s*\\(/,\n message: \"This code contains a format command that could potentially format your drives or storage devices\"\n },\n {\n pattern: /\\bsystem\\s*\\(/,\n message: \"This code contains a system() call that could execute arbitrary system commands, which is a security risk\"\n },\n {\n pattern: /\\beval\\s*\\(/,\n message: \"This code contains an eval() function that could execute arbitrary code, which is a security risk\"\n },\n {\n pattern: /\\bexec\\s*\\(/,\n message: \"This code contains an exec() function that could execute arbitrary code, which is a security risk\"\n },\n ];\n\n for (const { pattern, message } of blacklistedPatterns) {\n if (pattern.test(code)) {\n return {\n safe: false,\n reason: message\n };\n }\n }\n\n return { safe: true };\n};","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { INotebookTracker } from \"@jupyterlab/notebook\";\nimport { getAIOptimizedCells } from \"./notebook\";\nimport { JupyterFrontEnd } from \"@jupyterlab/application\";\nimport { ChatHistoryManager } from \"../Extensions/AiChat/ChatHistoryManager\";\n\n\nexport const createCheckpoint = async (app: JupyterFrontEnd, setHasCheckpoint: (hasCheckpoint: boolean) => void): Promise<void> => {\n // By saving the notebook, we create a checkpoint that we can restore from\n await app.commands.execute(\"docmanager:save\")\n // Despite what the docs say, this does not seem to do anything:\n // await app.commands.execute(\"logconsole:add-checkpoint\")\n setHasCheckpoint(true)\n}\n\n// Helper function to get a hash of the current notebook state\nexport const getNotebookStateHash = (notebookTracker: INotebookTracker): string => {\n const cells = getAIOptimizedCells(notebookTracker);\n // Create a simple hash by concatenating all cell IDs and their content\n const notebookState = cells.map(cell => `${cell.id}:${cell.code}`).join('|');\n return notebookState;\n}\n\nexport const restoreCheckpoint = async (\n app: JupyterFrontEnd, \n notebookTracker: INotebookTracker, \n setHasCheckpoint: (hasCheckpoint: boolean) => void, \n getDuplicateChatHistoryManager: () => ChatHistoryManager, \n setChatHistoryManager: (chatHistoryManager: ChatHistoryManager) => void\n): Promise<void> => { \n // Get the notebook state before attempting restoration\n const notebookStateBefore = getNotebookStateHash(notebookTracker);\n \n // Restore the checkpoint \n await app.commands.execute(\"docmanager:restore-checkpoint\")\n \n // Get the notebook state after the command\n const notebookStateAfter = getNotebookStateHash(notebookTracker);\n \n // Only proceed with state updates if the notebook actually changed\n if (notebookStateBefore === notebookStateAfter) {\n // The user canceled the restoration, so don't update any state\n return;\n }\n \n // The restoration was successful, so update the state\n setHasCheckpoint(false)\n\n // Add a message to the chat history\n const newChatHistoryManager = getDuplicateChatHistoryManager();\n newChatHistoryManager.addAIMessageFromResponse(\n \"I've reverted all previous changes\",\n \"chat\",\n false\n )\n setChatHistoryManager(newChatHistoryManager); \n \n // Restart the run all\n await app.commands.execute(\"notebook:restart-run-all\")\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* \n A utility for constructing a valid classnames string, you can either pass\n a string, or an object that maps a string to a boolean value, indicating if\n it should be included in the final object. \n\n For example:\n classNames('abc', '123') = 'abc 123'\n classNames('abc', {'123': true}) = 'abc 123'\n classNames('abc', {'123': false}) = 'abc'\n*/\nexport const classNames = (...args: (string | undefined | Record<string, boolean | undefined>)[]): string => {\n let finalString = '';\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n // Skip undefined arguments\n if (arg === undefined) {\n continue;\n }\n\n if (typeof arg === 'string') {\n finalString += arg + ' '\n } else {\n Object.entries(arg).map(([className, include]) => {\n if (include) {\n finalString += className + ' ';\n }\n })\n }\n }\n\n return finalString;\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { DiffComputer, IDiffComputerOpts, ILineChange } from \"vscode-diff\";\n\nexport interface UnifiedDiffLine {\n content: string; // The content of the line\n type: 'unchanged' | 'inserted' | 'removed'; // The type of change\n originalLineNumber: number | null; // Line number in the original code\n modifiedLineNumber: number | null; // Line number in the modified code\n}\n\nexport const getCodeDiffLineRanges = (originalLines: string | undefined | null, modifiedLines: string | undefined | null): ILineChange[] => {\n if (originalLines === undefined || originalLines === null) {\n originalLines = ''\n }\n\n if (modifiedLines === undefined || modifiedLines === null) {\n modifiedLines = ''\n }\n\n const originalLinesArray = originalLines.split('\\n')\n const modifiedLinesArray = modifiedLines.split('\\n')\n\n const options: IDiffComputerOpts = {\n shouldPostProcessCharChanges: true,\n shouldIgnoreTrimWhitespace: true,\n shouldMakePrettyDiff: true,\n shouldComputeCharChanges: true,\n maxComputationTime: 0 // time in milliseconds, 0 => no computation limit.\n }\n\n const diffComputer = new DiffComputer(originalLinesArray, modifiedLinesArray, options);\n const lineChanges: ILineChange[] = diffComputer.computeDiff().changes;\n\n return lineChanges || []\n}\n\n\nexport const createUnifiedDiff = (\n originalCode: string | undefined | null,\n modifiedCode: string | undefined | null,\n lineChanges: ILineChange[]\n): UnifiedDiffLine[] => {\n\n if (originalCode === undefined || originalCode === null) {\n originalCode = ''\n }\n\n if (modifiedCode === undefined || modifiedCode === null) {\n modifiedCode = ''\n }\n\n const originalLines = originalCode.split('\\n')\n const modifiedLines = modifiedCode.split('\\n')\n\n /* \n Algorithm explanation:\n \n This function creates a unified diff by comparing the original and modified code.\n It iterates through both versions of the code simultaneously, creating a new representation\n of the code called result that is UnifiedDiffLine[]. Each time the algorithm sees a new line \n of code, it adds it to the result, marking it as unchanged, removed, or inserted.\n\n The algorithm works as follows:\n 1. Process unchanged lines until a change is encountered.\n 2. When a change is found, handle it based on its type:\n a. Modification: Mark original lines as removed, mark modified lines as inserted.\n b. Inserted: Add new lines from the modified code and mark as Inserted.\n c. Removed: Add removed lines from the original code to the result and mark as Removed.\n 3. After processing all changes, handle any remaining lines.\n The result is a unified diff that shows all changes in context.\n */\n\n const result: UnifiedDiffLine[] = [];\n let originalLineNum = 1;\n let modifiedLineNum = 1;\n let changeIndex = 0;\n\n while (\n originalLineNum <= originalLines.length ||\n modifiedLineNum <= modifiedLines.length\n ) {\n if (changeIndex < lineChanges.length) {\n const change = lineChanges[changeIndex];\n\n if (change === undefined) {\n break;\n }\n\n // Process unchanged lines before the next change\n while (\n (originalLineNum < change.originalStartLineNumber ||\n modifiedLineNum < change.modifiedStartLineNumber) &&\n originalLineNum <= originalLines.length &&\n modifiedLineNum <= modifiedLines.length\n ) {\n result.push({\n content: originalLines[originalLineNum - 1] ?? '',\n type: 'unchanged',\n originalLineNumber: originalLineNum,\n modifiedLineNumber: modifiedLineNum,\n });\n originalLineNum++;\n modifiedLineNum++;\n }\n\n // Process the change\n if (\n change.originalEndLineNumber > 0 &&\n change.modifiedEndLineNumber > 0\n ) {\n // Modification\n // First add removed lines\n for (;originalLineNum <= change.originalEndLineNumber; originalLineNum++) {\n result.push({\n content: originalLines[originalLineNum - 1] ?? '',\n type: 'removed',\n originalLineNumber: originalLineNum,\n modifiedLineNumber: null,\n });\n }\n // Then add inserted lines\n for (;modifiedLineNum <= change.modifiedEndLineNumber; modifiedLineNum++) {\n result.push({\n content: modifiedLines[modifiedLineNum - 1] ?? '',\n type: 'inserted',\n originalLineNumber: null,\n modifiedLineNumber: modifiedLineNum,\n });\n }\n } else if (change.originalEndLineNumber === 0) {\n // Inserted Lines\n for (;modifiedLineNum <= change.modifiedEndLineNumber;modifiedLineNum++) {\n result.push({\n content: modifiedLines[modifiedLineNum - 1] ?? '',\n type: 'inserted',\n originalLineNumber: null,\n modifiedLineNumber: modifiedLineNum,\n });\n }\n } else if (change.modifiedEndLineNumber === 0) {\n // Removed lines\n for (;originalLineNum <= change.originalEndLineNumber; originalLineNum++) {\n result.push({\n content: originalLines[originalLineNum - 1] ?? '',\n type: 'removed',\n originalLineNumber: originalLineNum,\n modifiedLineNumber: null,\n });\n }\n }\n changeIndex++;\n } else {\n // Process any remaining unchanged lines\n if (\n originalLineNum <= originalLines.length &&\n modifiedLineNum <= modifiedLines.length\n ) {\n result.push({\n content: originalLines[originalLineNum - 1] ?? '',\n type: 'unchanged',\n originalLineNumber: originalLineNum,\n modifiedLineNumber: modifiedLineNum,\n });\n originalLineNum++;\n modifiedLineNum++;\n } else if (originalLineNum <= originalLines.length) {\n // Remaining lines were removed\n result.push({\n content: originalLines[originalLineNum - 1] ?? '',\n type: 'removed',\n originalLineNumber: originalLineNum,\n modifiedLineNumber: null,\n });\n originalLineNum++;\n } else if (modifiedLineNum <= modifiedLines.length) {\n // Remaining lines were added\n result.push({\n content: modifiedLines[modifiedLineNum - 1] ?? '',\n type: 'inserted',\n originalLineNumber: null,\n modifiedLineNumber: modifiedLineNum,\n });\n modifiedLineNum++;\n } else {\n break;\n }\n }\n }\n\n return result;\n}\n\n\nexport const getCodeDiffsAndUnifiedCodeString = (originalCode: string | undefined | null, modifiedCode: string | undefined | null): {\n unifiedCodeString: string;\n unifiedDiffs: UnifiedDiffLine[];\n} => {\n\n const lineChanges = getCodeDiffLineRanges(originalCode, modifiedCode)\n const unifiedDiffs = createUnifiedDiff(originalCode, modifiedCode, lineChanges)\n\n const unifiedCodeString = (unifiedDiffs.map(line => {\n return line.content !== undefined ? line.content : ''\n }).join('\\n'))\n\n return {\n unifiedCodeString,\n unifiedDiffs\n }\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { removeMarkdownCodeFormatting } from \"./strings\";\n\nconst copyToClipboard = async (text: string): Promise<void> => {\n const codeWithoutMarkdown = removeMarkdownCodeFormatting(text)\n await navigator.clipboard.writeText(codeWithoutMarkdown ?? '')\n}\n\nexport default copyToClipboard;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nexport const FREE_TIER_LIMIT_REACHED_ERROR_TITLE = 'mito_server_free_tier_limit_reached'","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n// This function checks if a given string is a valid file name.\n// It returns true if the string contains only alphanumeric characters, underscores, or hyphens.\nexport const isValidFileName = (fileName: string): boolean => {\n return /^[a-zA-Z0-9_-]+$/.test(fileName);\n};\n\nexport const stripFileEnding = (rule: string): string => {\n return rule.replace('.md', '');\n};","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport html2canvas from 'html2canvas';\nimport { isChromeBasedBrowser } from './user';\n\n/**\n * Captures a DOM element as a PNG image with preserved styles.\n * \n * This utility creates a high-fidelity screenshot of a DOM element by:\n * 1. Cloning the target element\n * 2. Preserving all computed styles with !important flags\n * 3. Capturing the clone using html2canvas\n * 4. Converting the result to a base64-encoded PNG\n * \n * Note: This function is optimized for Chrome browsers and may be slow or \n * unreliable in other browsers like Safari, so we skip the capture if the \n * browser is not Chrome based.\n */\nexport const captureNode = async (node: HTMLElement): Promise<string | undefined> => {\n\n if (!isChromeBasedBrowser()) {\n console.log('Node capture skipped: This feature is optimized for Chrome browsers');\n return undefined;\n }\n \n try {\n if (!node) {\n throw new Error('No node provided');\n }\n\n // Create an off-screen wrapper to hold our clone\n const wrapper = createWrapper(node);\n \n // Create and prepare the clone\n const clone = node.cloneNode(true) as HTMLElement;\n preserveStyles(node, clone);\n \n // Position clone for capture\n wrapper.appendChild(clone);\n document.body.appendChild(wrapper);\n\n try {\n // Perform the capture\n const canvas = await html2canvas(clone, getHtml2CanvasOptions(node));\n return canvas.toDataURL('image/png').split(',')[1]\n } finally {\n // Clean up\n wrapper.parentNode?.removeChild(wrapper);\n }\n\n } catch (error) {\n console.error('Capture failed:', error);\n throw error;\n }\n};\n\n/**\n * Creates an off-screen wrapper element to contain the cloned node.\n * \n * @param node - Reference node to size the wrapper\n * @returns HTMLDivElement - Configured wrapper element\n */\nconst createWrapper = (node: HTMLElement): HTMLDivElement => {\n const wrapper = document.createElement('div');\n wrapper.style.cssText = `\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n width: ${node.offsetWidth}px !important;\n height: ${node.offsetHeight}px !important;\n z-index: -9999 !important;\n background: transparent !important;\n pointer-events: none !important;\n opacity: 0 !important;\n `;\n return wrapper;\n};\n\n/**\n * Recursively copies all computed styles from a source element to a target element.\n * Adds !important to all styles to ensure they're preserved during capture.\n * \n * @param sourceElement - Element to copy styles from\n * @param targetElement - Element to copy styles to\n */\nconst preserveStyles = (sourceElement: HTMLElement, targetElement: HTMLElement): void => {\n // Copy computed styles\n const computed = window.getComputedStyle(sourceElement);\n let stylesText = '';\n \n for (let i = 0; i < computed.length; i++) {\n const property = computed[i];\n\n if (property === undefined) {\n continue;\n }\n\n const value = computed.getPropertyValue(property);\n if (value) {\n stylesText += `${property}: ${value} !important; `;\n }\n }\n \n // Apply styles to target\n targetElement.style.cssText += stylesText;\n \n // Process children recursively\n Array.from(sourceElement.children).forEach((sourceChild, index) => {\n const targetChild = targetElement.children[index];\n if (sourceChild instanceof HTMLElement && targetChild instanceof HTMLElement) {\n preserveStyles(sourceChild, targetChild);\n }\n });\n};\n\n/**\n * Configures html2canvas options for optimal capture.\n * \n * @param node - Reference node for dimensioning\n * @returns html2canvas configuration object\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nconst getHtml2CanvasOptions = (node: HTMLElement) => ({\n scale: window.devicePixelRatio,\n useCORS: true,\n logging: false,\n allowTaint: true,\n backgroundColor: null,\n removeContainer: false,\n foreignObjectRendering: true,\n width: node.offsetWidth,\n height: node.offsetHeight,\n onclone: (document: Document) => {\n // Re-apply styles to cloned element\n const clonedElement = document.body.querySelector('*[data-html2canvas-clone=\"true\"]');\n const originalElement = node.querySelector('*[data-html2canvas-clone=\"true\"]');\n if (clonedElement instanceof HTMLElement && originalElement instanceof HTMLElement) {\n preserveStyles(originalElement, clonedElement);\n }\n }\n});","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { INotebookTracker, NotebookActions } from '@jupyterlab/notebook';\nimport { Cell, CodeCell } from '@jupyterlab/cells';\nimport { removeMarkdownCodeFormatting } from './strings';\nimport { AIOptimizedCell } from '../websockets/completions/CompletionModels';\nimport { captureNode } from './nodeToPng';\nimport { WindowedList } from '@jupyterlab/ui-components';\n\nconst INCLUDE_CELL_IN_APP = 'include-cell-in-app'\n\nexport const getActiveCell = (notebookTracker: INotebookTracker): Cell | undefined => {\n const notebook = notebookTracker.currentWidget?.content;\n const activeCell = notebook?.activeCell;\n return activeCell || undefined\n}\n\nexport const getCellByID = (notebookTracker: INotebookTracker, cellID: string | undefined): Cell | undefined => {\n if (cellID === undefined) {\n return undefined\n }\n\n const notebook = notebookTracker.currentWidget?.content;\n return notebook?.widgets.find(cell => cell.model.id === cellID);\n}\n\nexport const toggleActiveCellIncludeInAppMetadata = (notebookTracker: INotebookTracker): void => {\n const activeCellID = getActiveCellID(notebookTracker);\n toggleIncludeCellInAppMetadata(notebookTracker, activeCellID);\n}\n\nexport const toggleIncludeCellInAppMetadata = (notebookTracker: INotebookTracker, cellID: string | undefined): void => {\n\n if (cellID === undefined) {\n return;\n }\n\n const cell = getCellByID(notebookTracker, cellID);\n if (!cell) {\n return undefined;\n }\n\n if (Object.prototype.hasOwnProperty.call(cell.model.metadata, INCLUDE_CELL_IN_APP)) {\n const originalVisibility = cell.model.getMetadata(INCLUDE_CELL_IN_APP);\n cell.model.setMetadata(INCLUDE_CELL_IN_APP, !originalVisibility);\n } else {\n // If the metadata doesn't exist yet, that means the user has not yet toggled the visibility.\n // The default value is to show the output, so the first toggle should set the visibiltiy to false.\n cell.model.setMetadata(INCLUDE_CELL_IN_APP, false);\n }\n}\n\nexport const getActiveCellIncludeInApp = (notebookTracker: INotebookTracker): boolean => {\n const activeCellID = getActiveCellID(notebookTracker);\n return getIncludeCellInApp(notebookTracker, activeCellID);\n}\n\nexport const getIncludeCellInApp = (notebookTracker: INotebookTracker, cellID: string | undefined): boolean => {\n /* \n Checks the cell metadata tag to see if the user has marked that this cell should not be included in the app.\n */\n const cell = getCellByID(notebookTracker, cellID);\n if (!cell) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(cell.model.metadata, INCLUDE_CELL_IN_APP)) {\n cell.model.setMetadata(INCLUDE_CELL_IN_APP, true);\n }\n\n return cell.model.getMetadata(INCLUDE_CELL_IN_APP);\n}\n\nexport const getActiveCellID = (notebookTracker: INotebookTracker): string | undefined => {\n return getActiveCell(notebookTracker)?.model.id\n}\n\nexport const getActiveCellCode = (notebookTracker: INotebookTracker): string | undefined => {\n const activeCell = getActiveCell(notebookTracker)\n return activeCell?.model.sharedModel.source\n}\n\nexport const getCellCodeByID = (notebookTracker: INotebookTracker, codeCellID: string | undefined): string | undefined => {\n const cell = getCellByID(notebookTracker, codeCellID)\n return cell?.model.sharedModel.source\n}\n\nexport const getActiveCellOutput = async (notebookTracker: INotebookTracker): Promise<string | undefined> => {\n const activeCellID = getActiveCellID(notebookTracker)\n return getCellOutputByID(notebookTracker, activeCellID)\n}\n\nexport const getCellOutputByID = async (notebookTracker: INotebookTracker, codeCellID: string | undefined): Promise<string | undefined> => {\n // TODO: There is a bug where if the cell is not actually rendered on the screen, \n // then the output is not captured. This is pretty unlikely to happen currently because\n // the agent scrolls to the cell.\n\n if (codeCellID === undefined) {\n return undefined\n }\n\n const notebook = notebookTracker.currentWidget?.content;\n const cell = notebook?.widgets.find(cell => cell.model.id === codeCellID);\n\n if (cell instanceof CodeCell) {\n const outputNode = cell.outputArea?.node;\n if (outputNode) {\n const image = await captureNode(outputNode);\n return image;\n }\n }\n return undefined\n}\n\nexport const getCellIndexByID = (notebookTracker: INotebookTracker, cellID: string | undefined): number | undefined => {\n const cellList = notebookTracker.currentWidget?.model?.cells\n\n if (cellList === undefined) {\n return undefined\n }\n\n // In order to get the cell index, we need to iterate over the cells and call the `get` method\n // to see the cells in order. Otherwise, the cells are returned in a random order.\n for (let i = 0; i < cellList.length; i++) {\n const cellModel = cellList.get(i)\n\n if (cellModel.id == cellID) {\n return i\n }\n }\n\n return undefined\n}\n\nexport const setActiveCellByID = (notebookTracker: INotebookTracker, cellID: string | undefined): void => {\n const cellIndex = getCellIndexByID(notebookTracker, cellID)\n const notebookPanel = notebookTracker.currentWidget\n if (notebookPanel !== undefined && notebookPanel !== null && cellIndex !== undefined) {\n notebookPanel.content.activeCellIndex = cellIndex\n }\n}\n\nexport const writeCodeToCellByID = (\n notebookTracker: INotebookTracker,\n code: string | undefined,\n codeCellID: string,\n): void => {\n if (code === undefined) {\n return;\n }\n\n const codeMirrorValidCode = removeMarkdownCodeFormatting(code);\n const notebook = notebookTracker.currentWidget?.content;\n const cell = notebook?.widgets.find(cell => cell.model.id === codeCellID);\n\n if (cell) {\n cell.model.sharedModel.source = codeMirrorValidCode;\n }\n}\n\nexport const getAIOptimizedCells = (\n notebookTracker: INotebookTracker\n): AIOptimizedCell[] => {\n\n const cellList = notebookTracker.currentWidget?.model?.cells\n\n if (cellList == undefined) {\n return []\n }\n\n // In order to get the cell index, we need to iterate over the cells and call the `get` method\n // to see the cells in order. Otherwise, the cells are returned in a random order.\n const cells: AIOptimizedCell[] = []\n for (let i = 0; i < cellList.length; i++) {\n const cellModel = cellList.get(i)\n\n const cell: AIOptimizedCell = {\n id: cellModel.id,\n cell_type: cellModel.type,\n code: cellModel.sharedModel.source\n }\n\n cells.push(cell)\n }\n\n return cells\n}\n\nexport function createCodeCellAtIndexAndActivate(notebookTracker: INotebookTracker, index: number): void {\n /* \n Create a new code cell at index and make it the active cell.\n */\n\n const notebook = notebookTracker.currentWidget?.content\n if (notebook === undefined) {\n return;\n }\n\n if (index > 0) {\n notebook.activeCellIndex = index - 1;\n\n // insertBelow makes the new cell the active cell\n NotebookActions.insertBelow(notebook);\n } else {\n notebook.activeCellIndex = 0\n\n // insertAbove makes the new cell the active cell\n NotebookActions.insertAbove(notebook)\n }\n}\n\nexport const didCellExecutionError = (cell: CodeCell): boolean => {\n /* \n Check the cell's output for an error.\n */\n const outputs = cell?.model.outputs?.toJSON() || [];\n return outputs.some(output => output.output_type === \"error\");\n}\n\nexport const getNotebookName = (notebookTracker: INotebookTracker): string => {\n const notebook = notebookTracker.currentWidget?.content;\n return notebook?.title.label || 'Untitled'\n}\n\nexport const highlightCodeCell = (notebookTracker: INotebookTracker, codeCellID: string): void => {\n /*\n Briefly highlights a code cell, to draw the user's attention to it.\n */\n const notebook = notebookTracker.currentWidget?.content;\n const cell = notebook?.widgets.find(cell => cell.model.id === codeCellID);\n if (cell) {\n const cellElement = cell.node;\n const originalBackground = cellElement.style.background;\n\n // Add a yellow highlight\n cellElement.style.background = 'var(--purple-400)';\n\n // Remove highlight after 500ms\n cellElement.style.transition = 'background 0.5s ease';\n setTimeout(() => {\n cellElement.style.background = originalBackground;\n }, 500);\n }\n}\n\nexport const highlightLinesOfCodeInCodeCell = (\n notebookTracker: INotebookTracker, \n codeCellID: string, \n startLine: number | undefined, \n endLine: number | undefined\n): void => {\n /*\n Briefly highlights a range of lines in a code cell, to draw the user's attention to it.\n\n If no start and end line is provided, then highlight the entire cell.\n \n Args:\n notebookTracker: The notebook tracker.\n codeCellID: The ID of the code cell.\n startLine: The 0-indexed start line number to highlight.\n endLine: The 0-indexed end line number to highlight (inclusive).\n */\n // Get the cell with the given ID\n const cell = getCellByID(notebookTracker, codeCellID);\n if (!cell) {\n return;\n }\n\n // Get the cell's editor\n const editor = cell.editor;\n if (!editor) {\n return;\n }\n\n // We expect the line numbers to be 0-indexed. To be safe, if the line numbers are out of bounds, we clamp them.\n const lines = editor.model.sharedModel.source.split('\\n');\n const targetStartLine = startLine ? Math.min(Math.max(startLine, 0), lines.length - 1) : 0;\n const targetEndLine = endLine ? Math.min(Math.max(endLine, 0), lines.length - 1) : lines.length - 1;\n\n // Find the line elements in the DOM\n const cmEditor = cell.node.querySelector('.jp-Editor');\n if (!cmEditor) {\n return;\n }\n\n // Find all line elements\n const lineElements = cmEditor.querySelectorAll('.cm-line');\n const elementsToHighlight: HTMLElement[] = [];\n const originalBackgrounds: string[] = [];\n\n // Collect all line elements in the range\n for (let i = targetStartLine; i <= targetEndLine; i++) {\n if (i < lineElements.length) {\n const lineElement = lineElements[i] as HTMLElement;\n if (lineElement) {\n elementsToHighlight.push(lineElement);\n originalBackgrounds.push(lineElement.style.background);\n }\n }\n }\n\n // Highlight all lines in the range\n elementsToHighlight.forEach(lineElement => {\n lineElement.style.background = 'var(--purple-400)';\n lineElement.style.transition = 'background 0.5s ease';\n });\n\n // Reset the background colors after a delay\n setTimeout(() => {\n elementsToHighlight.forEach((lineElement, index) => {\n lineElement.style.background = originalBackgrounds[index] || '';\n });\n }, 2000);\n}\n\nexport const scrollToAndHighlightCell = (\n notebookTracker: INotebookTracker, \n cellID: string, \n startLine: number | undefined,\n endLine?: number,\n position: WindowedList.BaseScrollToAlignment = 'center'\n): void => {\n\n // Scroll to the cell\n scrollToCell(notebookTracker, cellID, startLine, position);\n\n // Wait for the scroll animation to complete before highlighting the lines\n // The default smooth scroll takes about 300-500ms to complete\n setTimeout(() => {\n\n if (startLine !== undefined) {\n // If no end line was provided, then we just highlight the single line \n endLine = endLine || startLine;\n highlightLinesOfCodeInCodeCell(notebookTracker, cellID, startLine, endLine);\n } else {\n // If no start line was provided, then we just highlight the entire cell\n highlightLinesOfCodeInCodeCell(notebookTracker, cellID, undefined, undefined);\n }\n }, 500);\n}\n\nexport const scrollToCell = (\n notebookTracker: INotebookTracker, \n cellID: string, \n startLine: number | undefined,\n position: WindowedList.BaseScrollToAlignment = 'center'\n): void => {\n\n // Get the cell\n const cell = getCellByID(notebookTracker, cellID);\n if (!cell) {\n return;\n }\n\n // If line numbers are provided, figure out what position to scroll to \n // based on the start line's position in the cell\n const code = getCellCodeByID(notebookTracker, cellID);\n\n startLine = startLine || 0;\n const relativeLinePosition = startLine / (code?.split('\\n').length || 1);\n\n // These positions must be of type BaseScrollToAlignment defined in @jupyterlab/ui-components\n position = relativeLinePosition < 0.5 ? 'start' : 'end';\n\n // If the cell is not the active cell, the scrolling does not work. \n // It scrolls to the cell and then flashes back to the active cell.\n setActiveCellByID(notebookTracker, cellID);\n\n // Use the new JupyterLab scrollToCell method instead of DOM node scrollIntoView\n void notebookTracker.currentWidget?.content.scrollToCell(cell, position);\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n\n// Helper function to scroll to div\nexport const scrollToDiv = (div: React.RefObject<HTMLDivElement>): void => {\n setTimeout(() => {\n const divContainer = div.current;\n if (divContainer) {\n divContainer.scrollTo({\n top: divContainer.scrollHeight,\n behavior: 'smooth'\n });\n }\n }, 100);\n};","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/**\n * Updates the mask for a scrollable container based on its scroll position and container width\n * @param container - The scrollable container element\n */\nexport const updateScrollMask = (container: HTMLElement | null): void => {\n if (!container) return;\n \n // Get the container and its parent's width\n const scrollLeft = container.scrollLeft;\n const scrollWidth = container.scrollWidth;\n const clientWidth = container.clientWidth;\n const isScrollable = scrollWidth > clientWidth;\n \n // Get the parent container which has the maximum width set\n const parentContainer = container.closest('.suggestions-container');\n const parentWidth = parentContainer?.getBoundingClientRect().width || 0;\n \n // Check if we're at max-width (600px) where we should hide the mask\n const isAtMaxWidth = parentWidth >= 600 && parentWidth <= 601; // Small buffer for rounding errors\n \n // If at max width or not scrollable, no need for any mask\n if (isAtMaxWidth || !isScrollable) {\n container.style.maskImage = 'none';\n container.style.webkitMaskImage = 'none';\n return;\n }\n \n // Determine mask type based on scroll position\n const scrollEnd = scrollWidth - clientWidth;\n const leftEdgeVisible = scrollLeft <= 5; // Add small buffer for precision issues\n const rightEdgeVisible = scrollLeft >= scrollEnd - 5; // Add small buffer for precision issues\n \n let maskImage = '';\n \n if (leftEdgeVisible) {\n // Only right mask when at left edge\n maskImage = 'linear-gradient(to right, black 85%, transparent 100%)';\n } else if (rightEdgeVisible) {\n // Only left mask when at right edge\n maskImage = 'linear-gradient(to left, black 85%, transparent 100%)';\n } else {\n // Both masks when in the middle\n maskImage = 'linear-gradient(to right, transparent 0%, black 15%, black 85%, transparent 100%)';\n }\n \n container.style.maskImage = maskImage;\n container.style.webkitMaskImage = maskImage;\n};\n\n/**\n * Initializes the scroll mask with a delay to ensure content has rendered\n * @param container - The scrollable container element\n * @param delay - Delay in milliseconds before updating the mask\n */\nexport const initScrollMask = (container: HTMLElement | null, delay: number = 100): void => {\n if (!container) return;\n \n // Reset scroll position to start\n container.scrollLeft = 0;\n \n // Apply mask after a short delay to ensure content has rendered\n setTimeout(() => {\n updateScrollMask(container);\n }, delay);\n}; ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/**\n * Pauses the execution of the program for a specified number of milliseconds.\n * \n * @param ms - The number of milliseconds to pause.\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport OpenAI from \"openai\";\n\nexport const PYTHON_CODE_BLOCK_START_WITH_NEW_LINE = '```python\\n'\nexport const PYTHON_CODE_BLOCK_START_WITHOUT_NEW_LINE = '```python'\nexport const PYTHON_CODE_BLOCK_END_WITH_NEW_LINE = '\\n```'\nexport const PYTHON_CODE_BLOCK_END_WITHOUT_NEW_LINE = '```'\n\n\n/* \n Given a message from the OpenAI API, returns the content as a string. \n If the content is not a string, returns undefined.\n*/\nexport const getContentStringFromMessage = (message: OpenAI.Chat.ChatCompletionMessageParam): string | undefined => {\n \n // TODO: We can't assume this is a string. We need to handle the other\n // return options\n if (message.role === 'user' || message.role === 'assistant') {\n\n // Don't convert the message to a string if the content is undefined or null\n // so we can continue to use type checking\n if (message.content === undefined || message.content === null) {\n return undefined\n }\n\n return message.content as string\n }\n\n return undefined\n}\n\n\n/* \n Given a string like \"Hello ```python print('Hello, world!')```\",\n returns [\"Hello\", \"```python print('Hello, world!')```\"]\n\n This is useful for taking an AI generated message and displaying the code in \n code blocks and the rest of the message in plain text.\n*/\nexport const splitStringWithCodeBlocks = (message: OpenAI.Chat.ChatCompletionMessageParam): string[] => {\n const messageContent = getContentStringFromMessage(message)\n\n if (!messageContent) {\n return []\n }\n\n const parts = messageContent.split(/(```[\\s\\S]*?```)/);\n \n // Remove empty strings caused by consecutive delimiters, if any\n return parts.filter(part => part.trim() !== \"\");\n}\n\n/* \n Given a string like \"Hello ```python print('Hello, world!')```\",\n returns \"```python print('Hello, world!')```\"\n*/\nexport const getCodeBlockFromMessage = (message: OpenAI.Chat.ChatCompletionMessageParam): string | undefined => {\n const parts = splitStringWithCodeBlocks(message)\n return parts.find(part => part.startsWith('```'))\n}\n\n\n/* \n To display code in markdown, we need to take input values like this:\n\n ```python x + 1```\n\n And turn them into this:\n\n ```python\n x + 1\n ```\n\n Sometimes, we also want to trim the code to remove any leading or trailing whitespace. For example, \n when we're displaying the code in the chat history this is useful. Othertimes we don't want to trim.\n For example, when we're displaying the code in the active cell, we want to keep the users's whitespace.\n This is important for showing diffs. If the code cell contains no code, the first line will be marked as \n removed in the code diff. To ensure the diff lines up with the code, we need to leave this whitespace line.\n*/\nexport const addMarkdownCodeFormatting = (code: string | undefined, trim?: boolean): string | undefined => {\n\n if (code === undefined) {\n return undefined\n }\n \n let codeWithoutBackticks = code\n \n // If the code already has the code formatting backticks, remove them \n // so we can add them back in the correct format\n if (code.split(PYTHON_CODE_BLOCK_START_WITHOUT_NEW_LINE).length > 1) {\n const parts = code.split(PYTHON_CODE_BLOCK_START_WITHOUT_NEW_LINE);\n if (parts.length > 1 && parts[1] != null) {\n const endParts = parts[1].split(PYTHON_CODE_BLOCK_END_WITHOUT_NEW_LINE);\n codeWithoutBackticks = endParts[0] ?? '';\n }\n } else {\n codeWithoutBackticks = code\n }\n\n if (trim) {\n codeWithoutBackticks = codeWithoutBackticks.trim()\n }\n \n // Note: We add a space after the code because for some unknown reason, the markdown \n // renderer is cutting off the last character in the code block.\n return `${PYTHON_CODE_BLOCK_START_WITH_NEW_LINE}${codeWithoutBackticks} ${PYTHON_CODE_BLOCK_END_WITH_NEW_LINE}`\n}\n\n/* \n To write code in a Jupyter Code Cell, we need to take inputs like this: \n\n ```python\n x + 1\n ```\n\n And turn them into this:\n\n x + 1\n\n Jupyter does not need the backticks. \n*/\nexport const removeMarkdownCodeFormatting = (code: string): string => {\n \n if (code.split(PYTHON_CODE_BLOCK_START_WITH_NEW_LINE).length > 1) {\n const parts = code.split(PYTHON_CODE_BLOCK_START_WITH_NEW_LINE)[1]!.split(PYTHON_CODE_BLOCK_END_WITH_NEW_LINE)[0]!;\n return parts;\n }\n\n return code;\n}\n\n\n/* \n Remove ANSI escape sequences from text. \n For example, this is useful for removing the escape \n codes from the error traceback.\n*/\nexport const stripAnsiCodes = (text: string): string => {\n // eslint-disable-next-line no-control-regex\n const ansiEscape = /\\x1B(?:[@-Z\\\\-_]|\\[[0-?]*[ -/]*[@-~])/g;\n return text.replace(ansiEscape, '');\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nexport const STRIPE_PAYMENT_LINK = \"https://jl76z192i0.execute-api.us-east-1.amazonaws.com/Prod/create_checkout_session/\"","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n\nexport type OperatingSystem = 'mac' | 'windows'\n\nexport const getOperatingSystem = (): OperatingSystem => {\n if (navigator.userAgent.includes('Macintosh')) {\n return 'mac'\n } else {\n return 'windows'\n }\n}\n\nexport const isChromeBasedBrowser = (): boolean => {\n return /chrome/i.test(navigator.userAgent) && !/edge|edg/i.test(navigator.userAgent);\n}","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { ServerConnection } from '@jupyterlab/services';\nimport { Notification } from '@jupyterlab/apputils';\nimport * as semver from 'semver';\n\nconst VERSION_CHECK_TIMEOUT = 5000;\nconst VERSION_CHECK_ENDPOINT = 'mito-ai/version-check';\nconst DOCS_UPDATE_URL = 'https://docs.trymito.io/getting-started/installing-mito';\nconst RELEASE_NOTES_URL = 'https://docs.trymito.io/misc/release-notes';\n\n/**\n * Display a notification when Mito AI is outdated\n */\nexport function showVersionOutdatedNotification(currentVersion: string, latestVersion: string): void {\n Notification.emit(`Your Mito AI version (${currentVersion}) is outdated. Latest version is ${latestVersion}.`, 'warning', {\n autoClose: false,\n actions: [\n {\n label: 'Learn how to update',\n callback: () => {\n window.open(DOCS_UPDATE_URL, '_blank');\n }\n },\n {\n label: 'What\\'s new?',\n callback: () => {\n window.open(RELEASE_NOTES_URL, '_blank');\n }\n }\n ]\n });\n}\n\n/**\n * Check if there's a newer version of Mito AI available\n * @param serverSettings The server settings to use for the request\n * @returns A promise that resolves when the check is complete\n */\nexport async function checkForUpdates(serverSettings: ServerConnection.ISettings): Promise<void> {\n try {\n // Build the URL\n const baseUrl = serverSettings.baseUrl;\n const url = `${baseUrl}${VERSION_CHECK_ENDPOINT}`;\n \n // Set timeout to 5 seconds to prevent hanging requests\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), VERSION_CHECK_TIMEOUT);\n \n try {\n // Make the request\n const response = await ServerConnection.makeRequest(\n url, \n { \n method: 'GET',\n signal: controller.signal \n }, \n serverSettings\n );\n \n if (!response.ok) {\n console.warn('Failed to check for Mito AI updates:', response.statusText);\n return;\n }\n \n const data = await response.json() as { current_version?: string; latest_version?: string };\n const { current_version, latest_version } = data;\n \n if (!current_version || !latest_version) {\n // If versions are null/undefined/empty, the server couldn't get it from PyPI\n // In this case, don't show any notification as requested\n return;\n }\n \n // Use semver to compare versions - first validate both versions\n const validCurrentVersion = semver.valid(current_version);\n const validLatestVersion = semver.valid(latest_version);\n \n if (!validCurrentVersion || !validLatestVersion) {\n console.warn('Invalid semver version format:', { current_version, latest_version });\n return;\n }\n \n // Now compare the valid versions\n if (semver.lt(validCurrentVersion, validLatestVersion)) {\n // Show a notification to the user\n showVersionOutdatedNotification(current_version, latest_version);\n }\n } finally {\n // Ensure timeout is cleared even if there's an error\n clearTimeout(timeoutId);\n }\n } catch (error) {\n // In case of any error, just log it and don't show any notification\n if (error instanceof DOMException && error.name === 'AbortError') {\n console.warn('Version check request timed out');\n } else {\n console.warn('Error checking for Mito AI updates:', error);\n }\n }\n} ","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { INotebookTracker } from \"@jupyterlab/notebook\";\n\n/*\n Wait for the notebook to be ready and attached.\n This is used to wait for the notebook to be ready before sending the first message.\n*/\nexport const waitForNotebookReady = async (notebookTracker: INotebookTracker): Promise<void> => {\n const notebook = notebookTracker.currentWidget;\n if (!notebook) {\n console.warn('No active notebook found');\n return;\n }\n\n // Wait for notebook to be ready and attached\n await notebook.context.ready;\n \n // Wait for attachment\n if (!notebook.content.isAttached) {\n await new Promise<void>(resolve => {\n const checkAttached = (): void => {\n if (notebook.content.isAttached) {\n resolve();\n } else {\n setTimeout(checkAttached, 100);\n }\n };\n checkAttached();\n });\n }\n\n // Wait for all cells to be created and ready\n await new Promise<void>(resolve => {\n const checkCellsReady = (): void => {\n const cells = notebook.content.widgets;\n\n // In large notebooks, not all of the cells are attatched I think. \n // So instead we just wait for any cell to be ready and then give it \n // another 500ms to be ready.\n const anyCellReady = cells.some(cell => cell.isAttached && cell.model);\n \n if (anyCellReady && cells.length > 0) {\n resolve();\n } else {\n setTimeout(checkCellsReady, 100);\n }\n };\n checkCellsReady();\n });\n\n // Small buffer for final initialization\n await new Promise(resolve => setTimeout(resolve, 500));\n};","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { URLExt } from '@jupyterlab/coreutils';\nimport { ServerConnection } from '@jupyterlab/services';\nimport { PromiseDelegate } from '@lumino/coreutils';\nimport { IDisposable } from '@lumino/disposable';\nimport { Signal, Stream, type IStream } from '@lumino/signaling';\n\n/**\n * Error thrown by Mito AI completion\n */\nexport class MitoAIError extends Error {\n name = 'MitoAIError';\n /**\n * Human readable hint to help the user understand the error.\n */\n hint?: string;\n\n constructor(message: string, options: { cause?: unknown; hint?: string } = {}) {\n super(message, { cause: options.cause });\n this.hint = options.hint;\n if (options.cause && typeof options.cause === 'object' && 'stack' in options.cause) {\n this.stack = `${this.stack}\\nCaused by: ${options.cause.stack}`;\n }\n }\n}\n\n/**\n * Base options for websocket clients.\n */\nexport interface IBaseWebsocketClientOptions {\n /**\n * Jupyter server settings.\n */\n serverSettings?: ServerConnection.ISettings;\n}\n\n/**\n * Base Mito AI websocket client\n * \n * It provides the common functionality for all websocket clients.\n */\nexport abstract class BaseWebsocketClient<RequestType, ResponseType, StreamType = any> implements IDisposable {\n /**\n * The server settings used to make API requests.\n */\n readonly serverSettings: ServerConnection.ISettings;\n \n /**\n * The service URL for the websocket endpoint.\n */\n protected abstract readonly SERVICE_URL: string;\n\n /**\n * Create a new websocket client.\n */\n constructor(options: IBaseWebsocketClientOptions = {}) {\n this.serverSettings = options.serverSettings ?? ServerConnection.makeSettings();\n this._ready = new PromiseDelegate<void>();\n }\n\n /**\n * Whether the websocket client is disposed.\n */\n get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n /**\n * Message stream.\n */\n get messages(): IStream<BaseWebsocketClient<RequestType, ResponseType, StreamType>, ResponseType> {\n return this._messages;\n }\n\n /**\n * Stream for specific messages, if the client supports streaming.\n */\n get stream(): IStream<BaseWebsocketClient<RequestType, ResponseType, StreamType>, StreamType> {\n return this._stream;\n }\n\n /**\n * Promise that resolves when the websocket connection is ready.\n */\n get ready(): Promise<void> {\n return this._ready.promise;\n }\n\n /**\n * Stream of connection status events\n */\n get connectionStatus(): IStream<BaseWebsocketClient<RequestType, ResponseType, StreamType>, 'connected' | 'disconnected'> {\n return this._connectionStatus;\n }\n\n /**\n * Check if websocket is currently connected\n */\n get isConnected(): boolean {\n return this._socket !== null && this._socket.readyState === WebSocket.OPEN;\n }\n\n /**\n * Dispose the websocket client.\n */\n dispose(): void {\n if (this.isDisposed) {\n return;\n }\n this._isDisposed = true;\n\n // Clean up socket.\n const socket = this._socket;\n if (socket) {\n this._socket = null;\n socket.onopen = () => undefined;\n socket.onerror = () => undefined;\n socket.onmessage = () => undefined;\n socket.onclose = () => undefined;\n socket.close();\n }\n\n this._stream.stop();\n for (const resolver of this._pendingRepliesMap.values()) {\n resolver.reject(new Error('Websocket client disposed'));\n }\n this._pendingRepliesMap.clear();\n Signal.clearData(this);\n }\n\n /**\n * Initializes the WebSocket connection to the backend. This\n * must be awaited before calling any other method.\n */\n async initialize(): Promise<void> {\n try {\n await this._initialize();\n } catch (error) {\n console.error(`Failed to initialize WebSocket for ${this.SERVICE_URL}:`, error);\n throw error;\n }\n }\n\n /**\n * Sends a message across the WebSocket. Promise resolves to the response\n * when the server sends the reply back.\n * Automatically ensures the websocket is initialized before sending.\n */\n sendMessage<T extends RequestType, R extends ResponseType>(\n message: T\n ): Promise<R> {\n // Create a Promise for the eventual result\n return new Promise<R>((resolve, reject) => {\n // First check if we need to reconnect\n void Promise.resolve().then(async () => {\n try {\n // If the socket is not connected, try to reconnect first\n if (this._socket === null || this._socket.readyState !== WebSocket.OPEN) {\n try {\n console.log('Connection is closed, attempting to reconnect before sending message...');\n \n // Reset the ready promise since we're going to reconnect\n this._ready = new PromiseDelegate<void>();\n \n await this.reconnect();\n console.log('Successfully reconnected, now sending message');\n } catch (reconnectError) {\n console.error('Failed to reconnect websocket:', reconnectError);\n // If the error is a MitoAIError, propagate it directly to preserve the helpful message\n if (reconnectError instanceof MitoAIError) {\n reject(reconnectError);\n } else {\n reject(new Error('Failed to reconnect websocket before sending message'));\n }\n return;\n }\n }\n\n if (this._socket && this._socket.readyState === WebSocket.OPEN) {\n const pendingReply = new PromiseDelegate<R>();\n this._pendingRepliesMap.set(\n this.getMessageId(message),\n pendingReply as PromiseDelegate<ResponseType>\n );\n pendingReply.promise.then(resolve).catch(reject);\n // Send the message\n this._socket.send(JSON.stringify(message));\n } else {\n reject(new Error('Websocket not initialized'));\n }\n } catch (error) {\n reject(error);\n }\n });\n });\n }\n\n /**\n * Extract the message ID from a request message.\n * This is used to match requests with responses.\n */\n protected abstract getMessageId(message: RequestType): string;\n\n /**\n * Process a message received from the websocket.\n * This should handle dispatching messages to the appropriate streams\n * and resolving pending requests.\n */\n protected abstract _onMessage(message: ResponseType): void;\n\n /**\n * Handle websocket connection opened.\n */\n protected _onOpen(_: Event): void {\n console.log(`Mito AI ${this.SERVICE_URL} websocket connected`);\n this._ready.resolve();\n this._connectionStatus.emit('connected');\n }\n\n /**\n * Handle websocket connection closed.\n */\n protected _onClose(_e: CloseEvent): void {\n this._ready.reject(new Error(`${this.SERVICE_URL} websocket disconnected`));\n console.error(`${this.SERVICE_URL} websocket disconnected`);\n this._connectionStatus.emit('disconnected');\n }\n\n /**\n * Initialize the websocket connection.\n */\n protected async _initialize(): Promise<void> {\n if (this.isDisposed) {\n return;\n }\n \n // If we already have a pending initialization, return that\n if (this._initializationInProgress) {\n return this._ready.promise;\n }\n \n // Mark that initialization is in progress to prevent multiple concurrent initializations\n this._initializationInProgress = true;\n \n // Always create a new ready promise to ensure we're starting fresh\n this._ready = new PromiseDelegate<void>();\n \n // Clean up any existing socket first\n if (this._socket) {\n const oldSocket = this._socket;\n this._socket = null;\n \n // Clear handlers before closing to prevent triggering unintended events\n oldSocket.onopen = () => undefined;\n oldSocket.onerror = () => undefined;\n oldSocket.onmessage = () => undefined;\n oldSocket.onclose = () => undefined;\n \n // Close the socket\n oldSocket.close();\n }\n\n console.log(\n `Creating a new websocket connection for ${this.SERVICE_URL}...`\n );\n const { appendToken, token, WebSocket, wsUrl } = this.serverSettings;\n let url = URLExt.join(wsUrl, this.SERVICE_URL);\n if (appendToken && token !== '') {\n url += `?token=${encodeURIComponent(token)}`;\n }\n\n // Check if the service is available before attempting to connect\n try {\n const answer = await fetch(\n URLExt.join(this.serverSettings.baseUrl, `${this.SERVICE_URL}?check_availability=true`),\n {\n method: 'GET',\n credentials: 'include',\n headers: {\n 'Authorization': `token ${token}`\n }\n }\n );\n\n if (!answer.ok) {\n const message =\n answer.status == 404\n ? 'Mito AI extension not enabled.'\n : `Mito AI service not available; error ${answer.status} ${answer.statusText}`;\n const hint =\n answer.status == 404\n ? 'You can enable it by running in a cell `!jupyter server extension enable mito_ai`. Then restart the application.'\n : undefined;\n this._messages.emit({\n type: 'error',\n error_type: 'HTTPError',\n title: message,\n hint\n } as unknown as ResponseType);\n \n const error = new MitoAIError(message, {\n cause: answer,\n hint\n });\n \n this._ready.reject(error);\n this._initializationInProgress = false;\n return this._ready.promise;\n }\n\n const socket = (this._socket = new WebSocket(url));\n \n // Set a timeout to detect stalled connections\n const connectionTimeout = setTimeout(() => {\n if (socket.readyState !== WebSocket.OPEN && socket === this._socket) {\n console.error('WebSocket connection timed out');\n socket.close();\n }\n }, 10000); // 10 second timeout\n \n socket.onopen = e => {\n clearTimeout(connectionTimeout);\n this._onOpen(e);\n this._initializationInProgress = false;\n };\n socket.onclose = e => {\n clearTimeout(connectionTimeout);\n this._onClose(e);\n this._initializationInProgress = false;\n };\n socket.onerror = e => {\n clearTimeout(connectionTimeout);\n this._ready.reject(e);\n this._initializationInProgress = false;\n };\n socket.onmessage = msg => {\n if (msg.data) {\n this._onMessage(JSON.parse(msg.data));\n }\n };\n\n return this._ready.promise;\n } catch (error) {\n this._initializationInProgress = false;\n this._ready.reject(error);\n throw error;\n }\n }\n\n /**\n * Maximum number of reconnection attempts\n */\n private _maxReconnectAttempts = 5;\n\n /**\n * Current reconnection attempt\n */\n private _reconnectAttempt = 0;\n\n /**\n * Attempt to reconnect the websocket with exponential backoff.\n * @param forceReset - If true (default), resets the reconnection attempt counter to 0,\n * effectively starting a fresh sequence of reconnection attempts. When false, maintains\n * the current attempt count, which is used during recursive reconnection attempts within the method.\n * @returns Promise that resolves when reconnection is successful or rejects after max attempts\n * @throws Error if the client is disposed or max reconnection attempts are exceeded\n */\n async reconnect(forceReset: boolean = true): Promise<void> {\n if (this._isDisposed) {\n throw new Error('Client is disposed');\n }\n \n // Reset _reconnectAttempt if this is a manual reconnect\n if (forceReset) {\n this._reconnectAttempt = 0;\n }\n \n if (this._reconnectAttempt >= this._maxReconnectAttempts) {\n this._reconnectAttempt = 0; // Reset for future attempts\n throw new MitoAIError(`Failed to reconnect after ${this._maxReconnectAttempts} attempts`);\n }\n \n // Calculate delay using exponential backoff\n // First attempt is immediate, then 1s, 2s, 4s, 8s\n const delay = this._reconnectAttempt === 0 ? 0 : Math.pow(2, this._reconnectAttempt - 1) * 1000;\n \n if (delay > 0) {\n console.log(`Attempting to reconnect in ${delay / 1000}s (attempt ${this._reconnectAttempt + 1}/${this._maxReconnectAttempts})...`);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n \n this._reconnectAttempt++;\n \n try {\n // Reinitialize connection\n await this._initialize();\n // Reset reconnect attempt counter on success\n this._reconnectAttempt = 0;\n return;\n } catch (error) {\n console.error(`Reconnection attempt ${this._reconnectAttempt} failed:`, error);\n \n // If the error is a MitoAIError (like the extension not being enabled),\n // propagate it immediately instead of retrying\n if (error instanceof MitoAIError) {\n this._reconnectAttempt = 0; // Reset for future attempts\n throw error;\n }\n \n // If we haven't reached max attempts, try again\n if (this._reconnectAttempt < this._maxReconnectAttempts) {\n return this.reconnect(false);\n } else {\n this._reconnectAttempt = 0; // Reset for future attempts\n throw new MitoAIError(`Failed to reconnect after ${this._maxReconnectAttempts} attempts`, {\n cause: error\n });\n }\n }\n }\n\n /** Whether the websocket client is disposed. */\n protected _isDisposed = false;\n \n /** Messages stream */\n protected _messages = new Stream<BaseWebsocketClient<RequestType, ResponseType, StreamType>, ResponseType>(this);\n \n /** The WebSocket connection */\n protected _socket: WebSocket | null = null;\n \n /** Stream for specific messages, if the client supports streaming */\n protected _stream = new Stream<BaseWebsocketClient<RequestType, ResponseType, StreamType>, StreamType>(this);\n \n /** Promise delegate that resolves when the connection is ready */\n protected _ready: PromiseDelegate<void> = new PromiseDelegate<void>();\n \n /** Dictionary mapping message IDs to Promise resolvers. */\n protected _pendingRepliesMap = new Map<string, PromiseDelegate<ResponseType>>();\n \n /** Connection status stream */\n protected _connectionStatus = new Stream<BaseWebsocketClient<RequestType, ResponseType, StreamType>, 'connected' | 'disconnected'>(this);\n \n /** Flag to track if initialization is in progress to prevent multiple concurrent initializations */\n protected _initializationInProgress = false;\n}\n\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { type IStream } from '@lumino/signaling';\nimport type {\n IBuildAppReply,\n IAppBuilderRequest\n} from './appBuilderModels';\nimport { BaseWebsocketClient, IBaseWebsocketClientOptions } from '../BaseWebsocketClient';\n\n/**\n * The instantiation options for the app builder client.\n */\nexport interface IAppBuilderWebsocketClientOptions extends IBaseWebsocketClientOptions {}\n\n/**\n * Mito AI app builder client\n *\n * It communicates with the backend over a WebSocket for app building functionality.\n */\nexport class AppBuilderWebsocketClient extends BaseWebsocketClient<IAppBuilderRequest, IBuildAppReply> {\n /**\n * The service URL for the websocket endpoint.\n */\n protected readonly SERVICE_URL = 'mito-ai/app-builder';\n\n /**\n * Create a new app builder client.\n */\n constructor(options: IAppBuilderWebsocketClientOptions = {}) {\n super(options);\n }\n\n /**\n * App builder messages stream.\n */\n get messages(): IStream<AppBuilderWebsocketClient, IBuildAppReply> {\n return this._messages as unknown as IStream<AppBuilderWebsocketClient, IBuildAppReply>;\n }\n\n /**\n * Stream of connection status events\n */\n get connectionStatus(): IStream<AppBuilderWebsocketClient, 'connected' | 'disconnected'> {\n return this._connectionStatus as unknown as IStream<AppBuilderWebsocketClient, 'connected' | 'disconnected'>;\n }\n\n /**\n * Extract the message ID from a request message.\n */\n protected getMessageId(message: IAppBuilderRequest): string {\n return message.message_id;\n }\n\n /**\n * Process a message received from the websocket.\n */\n protected _onMessage(message: IBuildAppReply): void {\n /**\n * Emit unconditionally the message to interested parties.\n */\n this._messages.emit(message);\n\n /**\n * Dispatch app builder messages\n */\n const resolver = this._pendingRepliesMap.get(message.parent_id);\n if (resolver) {\n resolver.resolve(message);\n this._pendingRepliesMap.delete(message.parent_id);\n } else {\n // For streaming responses, emit the error through the stream\n // We need to do this here because errors do not come in as \"chunk\" messages\n // they come in as \"reply\" messages.\n if (message.error) {\n this._stream.emit({\n type: 'chunk',\n chunk: { content: message.error.hint || message.error.title || \"An error occurred\" },\n done: true,\n parent_id: message.parent_id,\n error: message.error\n } as unknown as any);\n }\n // This will get triggered when streaming and there is an error message.\n // However, errors are handled via the emit seen above above.\n console.warn('Unhandled mito ai app builder message', message);\n }\n }\n}\n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport type {\n CompleterMessage,\n ICompletionRequest,\n ICompletionStreamChunk\n} from './CompletionModels';\nimport { BaseWebsocketClient, IBaseWebsocketClientOptions } from '../BaseWebsocketClient';\nimport { IStream } from '@lumino/signaling';\n\n/**\n * The instantiation options for the inline completion client.\n */\nexport interface ICompletionWebsocketClientOptions extends IBaseWebsocketClientOptions {}\n\n/**\n * Mito AI completion client\n *\n * It communicates with the backend over a WebSocket to allow streaming answer.\n */\nexport class CompletionWebsocketClient extends BaseWebsocketClient<ICompletionRequest, CompleterMessage, ICompletionStreamChunk> {\n /**\n * The service URL for the websocket endpoint.\n */\n protected readonly SERVICE_URL = 'mito-ai/completions';\n\n /**\n * Create a new completion client.\n */\n constructor(options: ICompletionWebsocketClientOptions = {}) {\n super(options);\n }\n\n /**\n * Completion chunk stream.\n */\n get messages(): IStream<CompletionWebsocketClient, CompleterMessage> {\n return this._messages as unknown as IStream<CompletionWebsocketClient, CompleterMessage>;\n }\n\n /**\n * Completion chunk stream.\n */\n get stream(): IStream<CompletionWebsocketClient, ICompletionStreamChunk> {\n return this._stream as unknown as IStream<CompletionWebsocketClient, ICompletionStreamChunk>;\n }\n\n /**\n * Stream of connection status events\n */\n get connectionStatus(): IStream<CompletionWebsocketClient, 'connected' | 'disconnected'> {\n return this._connectionStatus as unknown as IStream<CompletionWebsocketClient, 'connected' | 'disconnected'>;\n }\n\n /**\n * Extract the message ID from a request message.\n */\n protected getMessageId(message: ICompletionRequest): string {\n return message.message_id;\n }\n\n /**\n * Process a message received from the websocket.\n */\n protected _onMessage(message: CompleterMessage): void {\n /**\n * Emit unconditionally the message to interested parties.\n */\n this._messages.emit(message);\n\n /**\n * Dispatch completion messages\n */\n switch (message.type) {\n case 'chunk': {\n // To see the stream in action, uncomment the following line\n // console.log(`[Mito AI Stream] ${message.done ? 'FINAL' : ''} Chunk:`, message.chunk.content);\n this._stream.emit(message);\n break;\n }\n case 'reply': {\n const resolver = this._pendingRepliesMap.get(message.parent_id);\n if (resolver) {\n resolver.resolve(message);\n this._pendingRepliesMap.delete(message.parent_id);\n } else {\n // For streaming responses, emit the error through the stream\n // We need to do this here because errors do not come in as \"chunk\" messages\n // they come in as \"reply\" messages.\n if (message.error) {\n this._stream.emit({\n type: 'chunk',\n chunk: { content: message.error.hint || message.error.title || \"An error occurred\" },\n done: true,\n parent_id: message.parent_id,\n error: message.error\n });\n }\n // This will get triggered when streaming and there is an error message.\n // However, errors are handled via the emit seen above above.\n console.warn('Unhandled mito ai completion message', message);\n }\n break;\n }\n // default: /* no-op */\n }\n }\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.cta-carousel {\n width: 100%;\n}\n\n.cta-carousel-container {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100px;\n}\n\n.cta-message {\n display: block;\n text-align: center;\n font-size: 14px;\n color: var(--jp-ui-font-color3);\n margin-bottom: 15px;\n flex: 1;\n line-height: 1.3;\n min-height: 2.5em;\n padding: 0 8px;\n opacity: 1;\n transition: opacity 0.5s ease-in-out;\n}\n\n.cta-carousel-dots {\n display: flex;\n justify-content: center;\n gap: 8px;\n margin-top: 4px;\n}\n\n.cta-carousel-dot {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: var(--jp-layout-color3);\n cursor: pointer;\n transition: background-color 0.3s ease;\n box-sizing: border-box;\n}\n\n.cta-carousel-dot.active {\n background-color: var(--purple-500);\n}\n\n.cta-carousel-button {\n margin-top: 8px;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/CTACarousel.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,WAAW;AACf;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,iBAAiB;AACrB;;AAEA;IACI,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,+BAA+B;IAC/B,mBAAmB;IACnB,OAAO;IACP,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,UAAU;IACV,oCAAoC;AACxC;;AAEA;IACI,aAAa;IACb,uBAAuB;IACvB,QAAQ;IACR,eAAe;AACnB;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,yCAAyC;IACzC,eAAe;IACf,sCAAsC;IACtC,sBAAsB;AAC1B;;AAEA;IACI,mCAAmC;AACvC;;AAEA;IACI,eAAe;AACnB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.cta-carousel {\\n width: 100%;\\n}\\n\\n.cta-carousel-container {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n min-height: 100px;\\n}\\n\\n.cta-message {\\n display: block;\\n text-align: center;\\n font-size: 14px;\\n color: var(--jp-ui-font-color3);\\n margin-bottom: 15px;\\n flex: 1;\\n line-height: 1.3;\\n min-height: 2.5em;\\n padding: 0 8px;\\n opacity: 1;\\n transition: opacity 0.5s ease-in-out;\\n}\\n\\n.cta-carousel-dots {\\n display: flex;\\n justify-content: center;\\n gap: 8px;\\n margin-top: 4px;\\n}\\n\\n.cta-carousel-dot {\\n width: 12px;\\n height: 12px;\\n border-radius: 50%;\\n background-color: var(--jp-layout-color3);\\n cursor: pointer;\\n transition: background-color 0.3s ease;\\n box-sizing: border-box;\\n}\\n\\n.cta-carousel-dot.active {\\n background-color: var(--purple-500);\\n}\\n\\n.cta-carousel-button {\\n margin-top: 8px;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.chat-dropdown {\n /* Position the dropdown in the right place*/\n position: absolute;\n z-index: 9999;\n bottom: 100%;\n margin-bottom: 5px;\n\n /* Style the dropdown */\n display: flex;\n justify-content: space-evenly;\n align-items: baseline;\n width: 100%;\n}\n\n.chat-dropdown-list {\n position: relative;\n border: 0px;\n border-radius: 5px;\n background-color: var(--jp-layout-color1);\n list-style-type: none;\n padding: 0;\n margin: 0;\n width: 100%;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.chat-dropdown-item {\n padding: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--jp-content-font-color1);\n}\n\n.chat-dropdown-item:hover,\n.chat-dropdown-item.selected {\n background-color: var(--jp-layout-color3);\n}\n\n.chat-dropdown-item:first-child {\n /* Add rounded corners to the top of the first selected dropdown item */\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n}\n\n.chat-dropdown-item:last-child {\n /* Add rounded corners to the bottom of the last selected dropdown item */\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n\n.chat-dropdown-item-type {\n color: var(--jp-brand-color1);\n font-family: var(--jp-code-font-family);\n min-width: 35px;\n width: 35px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.chat-dropdown-item-name {\n font-size: 15px;\n display: flex;\n align-items: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.chat-dropdown-item-parent-df {\n color: var(--muted-text-color);\n font-size: 12px;\n margin-left: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.dropdown-item-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.dropdown-item-disabled:hover {\n background-color: inherit;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ChatDropdown.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,4CAA4C;EAC5C,kBAAkB;EAClB,aAAa;EACb,YAAY;EACZ,kBAAkB;;EAElB,uBAAuB;EACvB,aAAa;EACb,6BAA6B;EAC7B,qBAAqB;EACrB,WAAW;AACb;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,kBAAkB;EAClB,yCAAyC;EACzC,qBAAqB;EACrB,UAAU;EACV,SAAS;EACT,WAAW;EACX,wCAAwC;AAC1C;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,oCAAoC;AACtC;;AAEA;;EAEE,yCAAyC;AAC3C;;AAEA;EACE,uEAAuE;EACvE,2BAA2B;EAC3B,4BAA4B;AAC9B;;AAEA;EACE,yEAAyE;EACzE,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,6BAA6B;EAC7B,uCAAuC;EACvC,eAAe;EACf,WAAW;EACX,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,8BAA8B;EAC9B,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,YAAY;EACZ,mBAAmB;AACrB;;AAEA;EACE,yBAAyB;AAC3B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.chat-dropdown {\\n /* Position the dropdown in the right place*/\\n position: absolute;\\n z-index: 9999;\\n bottom: 100%;\\n margin-bottom: 5px;\\n\\n /* Style the dropdown */\\n display: flex;\\n justify-content: space-evenly;\\n align-items: baseline;\\n width: 100%;\\n}\\n\\n.chat-dropdown-list {\\n position: relative;\\n border: 0px;\\n border-radius: 5px;\\n background-color: var(--jp-layout-color1);\\n list-style-type: none;\\n padding: 0;\\n margin: 0;\\n width: 100%;\\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\\n}\\n\\n.chat-dropdown-item {\\n padding: 8px;\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n color: var(--jp-content-font-color1);\\n}\\n\\n.chat-dropdown-item:hover,\\n.chat-dropdown-item.selected {\\n background-color: var(--jp-layout-color3);\\n}\\n\\n.chat-dropdown-item:first-child {\\n /* Add rounded corners to the top of the first selected dropdown item */\\n border-top-left-radius: 5px;\\n border-top-right-radius: 5px;\\n}\\n\\n.chat-dropdown-item:last-child {\\n /* Add rounded corners to the bottom of the last selected dropdown item */\\n border-bottom-left-radius: 5px;\\n border-bottom-right-radius: 5px;\\n}\\n\\n.chat-dropdown-item-type {\\n color: var(--jp-brand-color1);\\n font-family: var(--jp-code-font-family);\\n min-width: 35px;\\n width: 35px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n.chat-dropdown-item-name {\\n font-size: 15px;\\n display: flex;\\n align-items: center;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n.chat-dropdown-item-parent-df {\\n color: var(--muted-text-color);\\n font-size: 12px;\\n margin-left: 4px;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n.dropdown-item-disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n\\n.dropdown-item-disabled:hover {\\n background-color: inherit;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.chat-input-container {\n position: sticky;\n bottom: 0;\n margin: 10px 0;\n margin-top: auto;\n background-color: var(--chat-user-message-background-color);\n box-shadow: \n 0 4px 12px rgba(0, 0, 0, 0.08),\n 0 2px 4px rgba(0, 0, 0, 0.06),\n 0 0 0 1px rgba(0, 0, 0, 0.02);\n width: 100%;\n border-radius: 12px;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.chat-input-text-area-container {\n position: relative;\n height: min-content;\n}\n\n.chat-input {\n outline: none;\n border: none;\n resize: none;\n width: 100%;\n padding: 10px;\n overflow-y: hidden;\n box-sizing: border-box;\n flex-shrink: 0 !important;\n background-color: var(--chat-user-message-background-color);\n font-size: 12px;\n font-weight: 400;\n font-family: var(--jp-ui-font-family);\n line-height: 1.2;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.active-cell-preview-container {\n padding: 10px;\n background-color: var(--chat-user-message-background-color);\n}\n\n.chat-input-container:focus-within {\n transform: translateY(-1px);\n box-shadow: \n 0 2px 8px rgba(0, 0, 0, 0.12),\n 0 8px 16px rgba(0, 0, 0, 0.08),\n 0 0 0 1px rgba(0, 0, 0, 0.04);\n}\n\n.chat-input:focus {\n color: var(--jp-ui-font-color1);\n}\n\n.chat-input::placeholder {\n color: var(--jp-ui-font-color2);\n transition: color 0.2s ease;\n}\n\n.chat-input:focus::placeholder {\n color: var(--jp-ui-font-color3);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ChatInput.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,gBAAgB;EAChB,SAAS;EACT,cAAc;EACd,gBAAgB;EAChB,2DAA2D;EAC3D;;;iCAG+B;EAC/B,WAAW;EACX,mBAAmB;EACnB,iDAAiD;AACnD;;AAEA;EACE,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,aAAa;EACb,kBAAkB;EAClB,sBAAsB;EACtB,yBAAyB;EACzB,2DAA2D;EAC3D,eAAe;EACf,gBAAgB;EAChB,qCAAqC;EACrC,gBAAgB;EAChB,iDAAiD;AACnD;;AAEA;EACE,aAAa;EACb,2DAA2D;AAC7D;;AAEA;EACE,2BAA2B;EAC3B;;;iCAG+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;EAC/B,2BAA2B;AAC7B;;AAEA;EACE,+BAA+B;AACjC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.chat-input-container {\\n position: sticky;\\n bottom: 0;\\n margin: 10px 0;\\n margin-top: auto;\\n background-color: var(--chat-user-message-background-color);\\n box-shadow: \\n 0 4px 12px rgba(0, 0, 0, 0.08),\\n 0 2px 4px rgba(0, 0, 0, 0.06),\\n 0 0 0 1px rgba(0, 0, 0, 0.02);\\n width: 100%;\\n border-radius: 12px;\\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n\\n.chat-input-text-area-container {\\n position: relative;\\n height: min-content;\\n}\\n\\n.chat-input {\\n outline: none;\\n border: none;\\n resize: none;\\n width: 100%;\\n padding: 10px;\\n overflow-y: hidden;\\n box-sizing: border-box;\\n flex-shrink: 0 !important;\\n background-color: var(--chat-user-message-background-color);\\n font-size: 12px;\\n font-weight: 400;\\n font-family: var(--jp-ui-font-family);\\n line-height: 1.2;\\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n\\n.active-cell-preview-container {\\n padding: 10px;\\n background-color: var(--chat-user-message-background-color);\\n}\\n\\n.chat-input-container:focus-within {\\n transform: translateY(-1px);\\n box-shadow: \\n 0 2px 8px rgba(0, 0, 0, 0.12),\\n 0 8px 16px rgba(0, 0, 0, 0.08),\\n 0 0 0 1px rgba(0, 0, 0, 0.04);\\n}\\n\\n.chat-input:focus {\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.chat-input::placeholder {\\n color: var(--jp-ui-font-color2);\\n transition: color 0.2s ease;\\n}\\n\\n.chat-input:focus::placeholder {\\n color: var(--jp-ui-font-color3);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\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-left: 10px;\n padding-right: 10px;\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`, \"\",{\"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,kBAAkB;EAClB,mBAAmB;AACrB;;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-left: 10px;\\n padding-right: 10px;\\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\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.chat-taskpane {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: var(--chat-background-color) !important;\n --jp-sidebar-min-width: 350px;\n width: 100%;\n box-sizing: border-box;\n overflow-y: hidden;\n /* \n Don't set padding on top from the taskpane so we can instead\n set the padding on the chat-taskpane-header instead to make \n sure the sticky header covers all of the content behind it. \n */\n padding-top: 0px;\n padding-left: 10px;\n padding-right: 10px;\n padding-bottom: 10px;\n /*\n 'container-type: inline-size' enables container queries on this element.\n This allows child elements to use @container rules to react to the width of .chat-taskpane,\n rather than the viewport.\n */\n container-type: inline-size;\n}\n\n.suggestions-container {\n max-width: 600px;\n margin: 0 auto;\n display: flex;\n justify-content: flex-start;\n}\n\n.chat-taskpane-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding-top: 10px;\n padding-bottom: 5px;\n position: sticky;\n /* Make the header sticky */\n top: 0;\n /* Stick to the top of the container */\n background-color: var(--chat-background-color);\n /* Ensure background color covers content behind */\n z-index: 1;\n /* Ensure it stays above other content */\n}\n\n.chat-taskpane-header-left {\n display: flex;\n gap: 8px;\n}\n\n.chat-taskpane-header-right {\n display: flex;\n gap: 8px;\n}\n\n.chat-taskpane-header-title {\n font-size: 14px;\n font-weight: bold;\n margin: 0;\n}\n\n.chat-taskpane-header-buttons {\n display: flex;\n gap: 8px;\n}\n\n.chat-messages {\n flex: 1;\n overflow-y: auto;\n padding-bottom: 10px;\n display: flex;\n flex-direction: column;\n}\n\n.chat-empty-message {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: auto;\n min-height: 200px;\n max-height: 100%;\n text-align: center;\n color: var(--muted-text-color);\n padding: 20px;\n /* Add container query support */\n container-type: inline-size;\n user-select: none;\n overflow-y: hidden;\n margin: auto 0; /* This centers it vertically in the flex container */\n}\n\n.chat-empty-message .long-message {\n font-size: 16px;\n line-height: 1.5;\n max-width: 80%;\n margin: 0 auto;\n}\n\n/* Use container query instead of media query */\n@container (max-width: 300px) {\n .chat-empty-message .long-message {\n display: none;\n }\n}\n\n.chat-loading-message {\n margin-top: 20px;\n margin-bottom: 20px;\n}\n\n.chat-controls {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.chat-controls-left {\n display: flex;\n gap: 4px;\n align-items: center;\n justify-content: flex-start;\n}\n.chat-controls-left > * {\n margin: 0 !important;\n}\n.submit-button {\n background-color: var(--purple-400);\n color: var(--purple-700);\n padding: 2px 10px;\n}\n\n.submit-button:hover {\n background-color: var(--purple-500);\n transition: background-color 0.2s ease-in-out;\n}\n\n.stop-agent-button {\n margin-top: 8px;\n}\n\n.stop-agent-button-content {\n display: flex;\n text-align: center;\n align-items: center;\n gap: 8px;\n justify-content: center;\n}\n\n.agent-controls {\n display: flex;\n gap: 8px;\n width: 100%;\n}\n\n.agent-start-button {\n flex: 1;\n}\n\n.agent-cancel-button {\n width: 32px;\n padding: 0;\n}\n\n/* Add suggestion box container styling */\n.chat-suggestions {\n display: flex;\n flex-wrap: nowrap;\n overflow-x: auto;\n gap: 8px;\n padding-bottom: 16px;\n margin: 8px 0;\n /* smooth scrolling on touch devices */\n -webkit-overflow-scrolling: touch;\n /* Mask properties will be applied dynamically through JavaScript */\n mask-size: 100% 100%;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n -webkit-mask-repeat: no-repeat;\n}\n\n/* Add individual suggestion box styling */\n.suggestion-box {\n background-color: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 16px;\n padding: 6px 12px;\n font-size: 14px;\n cursor: pointer;\n transition: background-color 0.2s ease-in-out;\n flex-shrink: 0;\n /* wrap text onto multiple lines */\n white-space: normal;\n text-align: center;\n /* limit width for wrapping into two lines */\n max-width: 140px;\n /* align content vertically */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.suggestion-box:hover {\n background-color: var(--jp-border-color2);\n}\n\n/* Hide the 'Submit' text in the submit button when the chat-taskpane is narrow */\n@container (max-width: 350px) {\n .submit-button .submit-text {\n display: none;\n }\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ChatTaskpane.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,yDAAyD;EACzD,6BAA6B;EAC7B,WAAW;EACX,sBAAsB;EACtB,kBAAkB;EAClB;;;;KAIG;EACH,gBAAgB;EAChB,kBAAkB;EAClB,mBAAmB;EACnB,oBAAoB;EACpB;;;;GAIC;EACD,2BAA2B;AAC7B;;AAEA;EACE,gBAAgB;EAChB,cAAc;EACd,aAAa;EACb,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,mBAAmB;EACnB,iBAAiB;EACjB,mBAAmB;EACnB,gBAAgB;EAChB,2BAA2B;EAC3B,MAAM;EACN,sCAAsC;EACtC,8CAA8C;EAC9C,kDAAkD;EAClD,UAAU;EACV,wCAAwC;AAC1C;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,SAAS;AACX;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,OAAO;EACP,gBAAgB;EAChB,oBAAoB;EACpB,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,mBAAmB;EACnB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,kBAAkB;EAClB,8BAA8B;EAC9B,aAAa;EACb,gCAAgC;EAChC,2BAA2B;EAC3B,iBAAiB;EACjB,kBAAkB;EAClB,cAAc,EAAE,qDAAqD;AACvE;;AAEA;EACE,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,cAAc;AAChB;;AAEA,+CAA+C;AAC/C;EACE;IACE,aAAa;EACf;AACF;;AAEA;EACE,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,mBAAmB;EACnB,2BAA2B;AAC7B;AACA;EACE,oBAAoB;AACtB;AACA;EACE,mCAAmC;EACnC,wBAAwB;EACxB,iBAAiB;AACnB;;AAEA;EACE,mCAAmC;EACnC,6CAA6C;AAC/C;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,QAAQ;EACR,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,WAAW;AACb;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,WAAW;EACX,UAAU;AACZ;;AAEA,yCAAyC;AACzC;EACE,aAAa;EACb,iBAAiB;EACjB,gBAAgB;EAChB,QAAQ;EACR,oBAAoB;EACpB,aAAa;EACb,sCAAsC;EACtC,iCAAiC;EACjC,mEAAmE;EACnE,oBAAoB;EACpB,sBAAsB;EACtB,4BAA4B;EAC5B,8BAA8B;AAChC;;AAEA,0CAA0C;AAC1C;EACE,yCAAyC;EACzC,+BAA+B;EAC/B,yCAAyC;EACzC,mBAAmB;EACnB,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,6CAA6C;EAC7C,cAAc;EACd,kCAAkC;EAClC,mBAAmB;EACnB,kBAAkB;EAClB,4CAA4C;EAC5C,gBAAgB;EAChB,6BAA6B;EAC7B,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA,iFAAiF;AACjF;EACE;IACE,aAAa;EACf;AACF\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.chat-taskpane {\\n display: flex;\\n flex-direction: column;\\n height: 100%;\\n background-color: var(--chat-background-color) !important;\\n --jp-sidebar-min-width: 350px;\\n width: 100%;\\n box-sizing: border-box;\\n overflow-y: hidden;\\n /* \\n Don't set padding on top from the taskpane so we can instead\\n set the padding on the chat-taskpane-header instead to make \\n sure the sticky header covers all of the content behind it. \\n */\\n padding-top: 0px;\\n padding-left: 10px;\\n padding-right: 10px;\\n padding-bottom: 10px;\\n /*\\n 'container-type: inline-size' enables container queries on this element.\\n This allows child elements to use @container rules to react to the width of .chat-taskpane,\\n rather than the viewport.\\n */\\n container-type: inline-size;\\n}\\n\\n.suggestions-container {\\n max-width: 600px;\\n margin: 0 auto;\\n display: flex;\\n justify-content: flex-start;\\n}\\n\\n.chat-taskpane-header {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n align-items: center;\\n padding-top: 10px;\\n padding-bottom: 5px;\\n position: sticky;\\n /* Make the header sticky */\\n top: 0;\\n /* Stick to the top of the container */\\n background-color: var(--chat-background-color);\\n /* Ensure background color covers content behind */\\n z-index: 1;\\n /* Ensure it stays above other content */\\n}\\n\\n.chat-taskpane-header-left {\\n display: flex;\\n gap: 8px;\\n}\\n\\n.chat-taskpane-header-right {\\n display: flex;\\n gap: 8px;\\n}\\n\\n.chat-taskpane-header-title {\\n font-size: 14px;\\n font-weight: bold;\\n margin: 0;\\n}\\n\\n.chat-taskpane-header-buttons {\\n display: flex;\\n gap: 8px;\\n}\\n\\n.chat-messages {\\n flex: 1;\\n overflow-y: auto;\\n padding-bottom: 10px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.chat-empty-message {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n height: auto;\\n min-height: 200px;\\n max-height: 100%;\\n text-align: center;\\n color: var(--muted-text-color);\\n padding: 20px;\\n /* Add container query support */\\n container-type: inline-size;\\n user-select: none;\\n overflow-y: hidden;\\n margin: auto 0; /* This centers it vertically in the flex container */\\n}\\n\\n.chat-empty-message .long-message {\\n font-size: 16px;\\n line-height: 1.5;\\n max-width: 80%;\\n margin: 0 auto;\\n}\\n\\n/* Use container query instead of media query */\\n@container (max-width: 300px) {\\n .chat-empty-message .long-message {\\n display: none;\\n }\\n}\\n\\n.chat-loading-message {\\n margin-top: 20px;\\n margin-bottom: 20px;\\n}\\n\\n.chat-controls {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n}\\n\\n.chat-controls-left {\\n display: flex;\\n gap: 4px;\\n align-items: center;\\n justify-content: flex-start;\\n}\\n.chat-controls-left > * {\\n margin: 0 !important;\\n}\\n.submit-button {\\n background-color: var(--purple-400);\\n color: var(--purple-700);\\n padding: 2px 10px;\\n}\\n\\n.submit-button:hover {\\n background-color: var(--purple-500);\\n transition: background-color 0.2s ease-in-out;\\n}\\n\\n.stop-agent-button {\\n margin-top: 8px;\\n}\\n\\n.stop-agent-button-content {\\n display: flex;\\n text-align: center;\\n align-items: center;\\n gap: 8px;\\n justify-content: center;\\n}\\n\\n.agent-controls {\\n display: flex;\\n gap: 8px;\\n width: 100%;\\n}\\n\\n.agent-start-button {\\n flex: 1;\\n}\\n\\n.agent-cancel-button {\\n width: 32px;\\n padding: 0;\\n}\\n\\n/* Add suggestion box container styling */\\n.chat-suggestions {\\n display: flex;\\n flex-wrap: nowrap;\\n overflow-x: auto;\\n gap: 8px;\\n padding-bottom: 16px;\\n margin: 8px 0;\\n /* smooth scrolling on touch devices */\\n -webkit-overflow-scrolling: touch;\\n /* Mask properties will be applied dynamically through JavaScript */\\n mask-size: 100% 100%;\\n mask-repeat: no-repeat;\\n -webkit-mask-size: 100% 100%;\\n -webkit-mask-repeat: no-repeat;\\n}\\n\\n/* Add individual suggestion box styling */\\n.suggestion-box {\\n background-color: var(--jp-layout-color1);\\n color: var(--jp-ui-font-color1);\\n border: 1px solid var(--jp-border-color2);\\n border-radius: 16px;\\n padding: 6px 12px;\\n font-size: 14px;\\n cursor: pointer;\\n transition: background-color 0.2s ease-in-out;\\n flex-shrink: 0;\\n /* wrap text onto multiple lines */\\n white-space: normal;\\n text-align: center;\\n /* limit width for wrapping into two lines */\\n max-width: 140px;\\n /* align content vertically */\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.suggestion-box:hover {\\n background-color: var(--jp-border-color2);\\n}\\n\\n/* Hide the 'Submit' text in the submit button when the chat-taskpane is narrow */\\n@container (max-width: 350px) {\\n .submit-button .submit-text {\\n display: none;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.citation-button {\n background-color: var(--purple-400);\n color: var(--purple-700);\n height: 14px;\n width: 14px;\n border-radius: 2px;\n font-size: 12px;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n top: -0.5em; /* Makes it appear as superscript */\n vertical-align: baseline;\n margin-right: 2px;\n}\n\n.citation-button:hover {\n background-color: var(--purple-500);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/Citation.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,mCAAmC;IACnC,wBAAwB;IACxB,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,kBAAkB;IAClB,WAAW,EAAE,mCAAmC;IAChD,wBAAwB;IACxB,iBAAiB;AACrB;;AAEA;IACI,mCAAmC;AACvC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.citation-button {\\n background-color: var(--purple-400);\\n color: var(--purple-700);\\n height: 14px;\\n width: 14px;\\n border-radius: 2px;\\n font-size: 12px;\\n cursor: pointer;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n position: relative;\\n top: -0.5em; /* Makes it appear as superscript */\\n vertical-align: baseline;\\n margin-right: 2px;\\n}\\n\\n.citation-button:hover {\\n background-color: var(--purple-500);\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\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`, \"\",{\"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\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n}\n\n.modal-content {\n background: var(--jp-layout-color0);\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n padding: 20px;\n width: 500px;\n max-width: 90%;\n max-height: 90vh;\n overflow-y: auto;\n position: relative;\n}\n\n.modal-content-large {\n width: 90%;\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.modal-header h3 {\n margin: 0;\n font-size: 1.2em;\n color: var(--jp-ui-font-color1);\n}\n\n.modal-close-button {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px;\n color: var(--jp-ui-font-color2);\n}\n\n.modal-close-button:hover {\n color: var(--jp-ui-font-color1);\n}\n\n.form-group {\n margin-bottom: 20px;\n width: 100%;\n box-sizing: border-box;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: var(--jp-ui-font-color1);\n}\n\n.form-group input,\n.form-group select {\n width: 100%;\n box-sizing: border-box;\n padding: 8px 12px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n background: var(--jp-layout-color0);\n color: var(--jp-ui-font-color1);\n font-size: 14px;\n transition: border-color 0.2s;\n}\n\n.form-group input:focus,\n.form-group select:focus {\n outline: none;\n border-color: var(--purple-500);\n box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1);\n}\n\n.form-group input::placeholder {\n color: var(--jp-ui-font-color3);\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n margin-top: 24px;\n padding-top: 20px;\n border-top: 1px solid var(--jp-border-color1);\n}\n\n.form-actions button {\n min-width: 100px;\n padding: 8px 16px;\n}\n\n.form-actions button[type=\"submit\"] {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n}\n\n.error {\n color: var(--jp-error-color1);\n background: var(--jp-error-color3);\n padding: 12px;\n border-radius: 4px;\n margin-bottom: 20px;\n font-size: 14px;\n}\n\n.form-info {\n font-size: 12px;\n color: var(--jp-ui-font-color3);\n}\n\n.form-info a {\n margin-left: 4px;\n color: var(--purple-700);\n text-decoration: none;\n}\n\n.form-info a:hover {\n text-decoration: underline;\n} \n\n.alert-banner {\n background-color: var(--yellow-100);\n border: 1px solid var(--yellow-500);\n border-radius: 4px;\n padding: 12px;\n margin-bottom: 16px;\n font-size: 14px;\n line-height: 1.5;\n color: var(--grey-900);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ConnectionForm.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,eAAe;IACf,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,oCAAoC;IACpC,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,aAAa;AACjB;;AAEA;IACI,mCAAmC;IACnC,yCAAyC;IACzC,kBAAkB;IAClB,aAAa;IACb,YAAY;IACZ,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;IACI,UAAU;AACd;;AAEA;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,mBAAmB;AACvB;;AAEA;IACI,SAAS;IACT,gBAAgB;IAChB,+BAA+B;AACnC;;AAEA;IACI,gBAAgB;IAChB,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,+BAA+B;AACnC;;AAEA;IACI,+BAA+B;AACnC;;AAEA;IACI,mBAAmB;IACnB,WAAW;IACX,sBAAsB;AAC1B;;AAEA;IACI,cAAc;IACd,kBAAkB;IAClB,gBAAgB;IAChB,+BAA+B;AACnC;;AAEA;;IAEI,WAAW;IACX,sBAAsB;IACtB,iBAAiB;IACjB,yCAAyC;IACzC,kBAAkB;IAClB,mCAAmC;IACnC,+BAA+B;IAC/B,eAAe;IACf,6BAA6B;AACjC;;AAEA;;IAEI,aAAa;IACb,+BAA+B;IAC/B,6CAA6C;AACjD;;AAEA;IACI,+BAA+B;AACnC;;AAEA;IACI,aAAa;IACb,yBAAyB;IACzB,SAAS;IACT,gBAAgB;IAChB,iBAAiB;IACjB,6CAA6C;AACjD;;AAEA;IACI,gBAAgB;IAChB,iBAAiB;AACrB;;AAEA;IACI,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,QAAQ;AACZ;;AAEA;IACI,6BAA6B;IAC7B,kCAAkC;IAClC,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,eAAe;AACnB;;AAEA;IACI,eAAe;IACf,+BAA+B;AACnC;;AAEA;IACI,gBAAgB;IAChB,wBAAwB;IACxB,qBAAqB;AACzB;;AAEA;IACI,0BAA0B;AAC9B;;AAEA;IACI,mCAAmC;IACnC,mCAAmC;IACnC,kBAAkB;IAClB,aAAa;IACb,mBAAmB;IACnB,eAAe;IACf,gBAAgB;IAChB,sBAAsB;AAC1B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.modal-overlay {\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background-color: rgba(0, 0, 0, 0.5);\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n z-index: 1000;\\n}\\n\\n.modal-content {\\n background: var(--jp-layout-color0);\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 4px;\\n padding: 20px;\\n width: 500px;\\n max-width: 90%;\\n max-height: 90vh;\\n overflow-y: auto;\\n position: relative;\\n}\\n\\n.modal-content-large {\\n width: 90%;\\n}\\n\\n.modal-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin-bottom: 20px;\\n}\\n\\n.modal-header h3 {\\n margin: 0;\\n font-size: 1.2em;\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.modal-close-button {\\n background: none;\\n border: none;\\n cursor: pointer;\\n padding: 4px;\\n color: var(--jp-ui-font-color2);\\n}\\n\\n.modal-close-button:hover {\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.form-group {\\n margin-bottom: 20px;\\n width: 100%;\\n box-sizing: border-box;\\n}\\n\\n.form-group label {\\n display: block;\\n margin-bottom: 8px;\\n font-weight: 500;\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.form-group input,\\n.form-group select {\\n width: 100%;\\n box-sizing: border-box;\\n padding: 8px 12px;\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 4px;\\n background: var(--jp-layout-color0);\\n color: var(--jp-ui-font-color1);\\n font-size: 14px;\\n transition: border-color 0.2s;\\n}\\n\\n.form-group input:focus,\\n.form-group select:focus {\\n outline: none;\\n border-color: var(--purple-500);\\n box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1);\\n}\\n\\n.form-group input::placeholder {\\n color: var(--jp-ui-font-color3);\\n}\\n\\n.form-actions {\\n display: flex;\\n justify-content: flex-end;\\n gap: 12px;\\n margin-top: 24px;\\n padding-top: 20px;\\n border-top: 1px solid var(--jp-border-color1);\\n}\\n\\n.form-actions button {\\n min-width: 100px;\\n padding: 8px 16px;\\n}\\n\\n.form-actions button[type=\\\"submit\\\"] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n gap: 8px;\\n}\\n\\n.error {\\n color: var(--jp-error-color1);\\n background: var(--jp-error-color3);\\n padding: 12px;\\n border-radius: 4px;\\n margin-bottom: 20px;\\n font-size: 14px;\\n}\\n\\n.form-info {\\n font-size: 12px;\\n color: var(--jp-ui-font-color3);\\n}\\n\\n.form-info a {\\n margin-left: 4px;\\n color: var(--purple-700);\\n text-decoration: none;\\n}\\n\\n.form-info a:hover {\\n text-decoration: underline;\\n} \\n\\n.alert-banner {\\n background-color: var(--yellow-100);\\n border: 1px solid var(--yellow-500);\\n border-radius: 4px;\\n padding: 12px;\\n margin-bottom: 16px;\\n font-size: 14px;\\n line-height: 1.5;\\n color: var(--grey-900);\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.connections-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 20px;\n margin-top: 20px;\n}\n\n.connection-card {\n background: var(--jp-layout-color0);\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n}\n\n.connection-card:hover {\n border: 1px solid var(--purple-500);\n}\n\n.connection-card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.connection-card-header h3 {\n margin: 0;\n font-size: 1.1em;\n color: var(--jp-ui-font-color1);\n}\n\n.connection-type {\n font-size: 0.9em;\n color: var(--jp-ui-font-color2);\n text-transform: capitalize;\n margin-bottom: 8px;\n}\n\n.connection-details {\n flex-grow: 1;\n}\n\n.connection-details p {\n margin: 4px 0;\n font-size: 0.9em;\n color: var(--jp-ui-font-color2);\n}\n\n.connection-actions {\n display: flex;\n margin-top: 12px;\n gap: 8px;\n}\n\n.connection-actions button {\n padding: 4px 8px;\n font-size: 0.9em;\n}\n\n.connection-actions .delete-button {\n color: var(--jp-error-color1);\n}\n\n.connection-actions .delete-button:hover {\n background-color: var(--jp-error-color2);\n color: white;\n}\n\n.delete-container {\n position: relative;\n}\n\n.confirmation-buttons {\n display: flex;\n gap: 8px;\n} `, \"\",{\"version\":3,\"sources\":[\"webpack://./style/DatabasePage.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,4DAA4D;IAC5D,SAAS;IACT,gBAAgB;AACpB;;AAEA;IACI,mCAAmC;IACnC,yCAAyC;IACzC,kBAAkB;IAClB,aAAa;IACb,yBAAyB;IACzB,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,mCAAmC;AACvC;;AAEA;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,mBAAmB;AACvB;;AAEA;IACI,SAAS;IACT,gBAAgB;IAChB,+BAA+B;AACnC;;AAEA;IACI,gBAAgB;IAChB,+BAA+B;IAC/B,0BAA0B;IAC1B,kBAAkB;AACtB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,+BAA+B;AACnC;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,QAAQ;AACZ;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,6BAA6B;AACjC;;AAEA;IACI,wCAAwC;IACxC,YAAY;AAChB;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,QAAQ;AACZ\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.connections-grid {\\n display: grid;\\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\\n gap: 20px;\\n margin-top: 20px;\\n}\\n\\n.connection-card {\\n background: var(--jp-layout-color0);\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 8px;\\n padding: 16px;\\n transition: all 0.2s ease;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.connection-card:hover {\\n border: 1px solid var(--purple-500);\\n}\\n\\n.connection-card-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin-bottom: 12px;\\n}\\n\\n.connection-card-header h3 {\\n margin: 0;\\n font-size: 1.1em;\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.connection-type {\\n font-size: 0.9em;\\n color: var(--jp-ui-font-color2);\\n text-transform: capitalize;\\n margin-bottom: 8px;\\n}\\n\\n.connection-details {\\n flex-grow: 1;\\n}\\n\\n.connection-details p {\\n margin: 4px 0;\\n font-size: 0.9em;\\n color: var(--jp-ui-font-color2);\\n}\\n\\n.connection-actions {\\n display: flex;\\n margin-top: 12px;\\n gap: 8px;\\n}\\n\\n.connection-actions button {\\n padding: 4px 8px;\\n font-size: 0.9em;\\n}\\n\\n.connection-actions .delete-button {\\n color: var(--jp-error-color1);\\n}\\n\\n.connection-actions .delete-button:hover {\\n background-color: var(--jp-error-color2);\\n color: white;\\n}\\n\\n.delete-container {\\n position: relative;\\n}\\n\\n.confirmation-buttons {\\n display: flex;\\n gap: 8px;\\n} \"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.dropdown-container {\n position: relative;\n display: inline-block;\n}\n\n.dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n z-index: 1000;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 3px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n display: flex;\n flex-direction: column;\n min-width: 200px;\n white-space: nowrap;\n height: 400px;\n min-width: 225px;\n max-width: 350px;\n overflow-y: auto;\n}\n\n/* Left-aligned dropdown */\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n/* Right-aligned dropdown */\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n.dropdown-item-row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n padding: 4px 2px;\n padding-right: 20px; /* Add padding to leave space for the scrollbar */\n}\n\n.dropdown-item-row:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.dropdown-item-main {\n display: flex;\n flex-direction: row;\n align-items: center;\n text-align: left;\n border: none;\n background: none;\n color: var(--jp-ui-font-color1);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.dropdown-item-icon {\n width: 20px;\n min-width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.dropdown-item-label {\n padding-left: 3px; /* Add consistent padding */\n}\n\n.dropdown-item-disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n/* \n When using Lab Icons, we seem to get an extra div around the svg icon\n This makes sure the svg is aligned properly in that div\n*/\n.dropdown-item-icon > div, \n.dropdown-item-secondary > div{\n display: flex;\n align-items: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/DropdownMenu.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,qBAAqB;AACvB;;AAEA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,aAAa;EACb,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,wCAAwC;EACxC,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,mBAAmB;EACnB,aAAa;EACb,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;AAClB;;AAEA,0BAA0B;AAC1B;EACE,OAAO;EACP,WAAW;AACb;;AAEA,2BAA2B;AAC3B;EACE,QAAQ;EACR,UAAU;AACZ;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,mBAAmB,EAAE,iDAAiD;AACxE;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;EAChB,+BAA+B;EAC/B,OAAO;EACP,gBAAgB;EAChB,uBAAuB;EACvB,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,eAAe;EACf,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,iBAAiB,EAAE,2BAA2B;AAChD;;AAEA;EACE,YAAY;EACZ,eAAe;AACjB;;AAEA;;;CAGC;AACD;;EAEE,aAAa;EACb,mBAAmB;AACrB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.dropdown-container {\\n position: relative;\\n display: inline-block;\\n}\\n\\n.dropdown-menu {\\n position: absolute;\\n top: calc(100% + 4px);\\n z-index: 1000;\\n background-color: var(--jp-layout-color1);\\n border: 1px solid var(--jp-layout-color2);\\n border-radius: 3px;\\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\\n display: flex;\\n flex-direction: column;\\n min-width: 200px;\\n white-space: nowrap;\\n height: 400px;\\n min-width: 225px;\\n max-width: 350px;\\n overflow-y: auto;\\n}\\n\\n/* Left-aligned dropdown */\\n.dropdown-menu-left {\\n left: 0;\\n right: auto;\\n}\\n\\n/* Right-aligned dropdown */\\n.dropdown-menu-right {\\n right: 0;\\n left: auto;\\n}\\n\\n.dropdown-item-row {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n align-items: center;\\n gap: 8px;\\n padding: 4px 2px;\\n padding-right: 20px; /* Add padding to leave space for the scrollbar */\\n}\\n\\n.dropdown-item-row:hover {\\n background-color: var(--jp-layout-color2);\\n}\\n\\n.dropdown-item-main {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n text-align: left;\\n border: none;\\n background: none;\\n color: var(--jp-ui-font-color1);\\n flex: 1;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n cursor: pointer;\\n}\\n\\n.dropdown-item-icon {\\n width: 20px;\\n min-width: 20px;\\n height: 20px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.dropdown-item-label {\\n padding-left: 3px; /* Add consistent padding */\\n}\\n\\n.dropdown-item-disabled {\\n opacity: 0.5;\\n cursor: default;\\n}\\n\\n/* \\n When using Lab Icons, we seem to get an extra div around the svg icon\\n This makes sure the svg is aligned properly in that div\\n*/\\n.dropdown-item-icon > div, \\n.dropdown-item-secondary > div{\\n display: flex;\\n align-items: center;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.error-mime-renderer-container {\n display: flex;\n flex-direction: row;\n justify-content: start;\n align-items: start;\n background-color: var(--jp-rendermime-error-background);\n width: 100%;\n}\n\n.error-mime-renderer-button {\n display: flex;\n flex-direction: row;\n justify-content: start;\n align-items: center;\n\n background-color: var(--jp-error-color3);\n border: var(--jp-error-color0) 1px solid;\n color: var(--jp-error-color0);\n\n margin: 10px;\n box-sizing: border-box;\n\n border-radius: 3px;\n font-size: 14px;\n}\n\n.error-mime-renderer-button:hover {\n background-color: var(--jp-error-color4);\n cursor: pointer;\n}\n\n.error-mime-renderer-button svg {\n margin-right: 5px;\n}\n\n.error-mime-renderer-button p {\n margin: 0;\n}\n\n.output-block {\n padding: 10px;\n background-color: var(--yellow-500);\n border-radius: 3px;\n}\n\n.output-block pre {\n color: var(--yellow-900) !important;\n}\n\n.collapse-button {\n background-color: transparent;\n border: none;\n color: var(--yellow-900);\n padding: 0;\n cursor: pointer;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ErrorMimeRendererPlugin.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,kBAAkB;EAClB,uDAAuD;EACvD,WAAW;AACb;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,sBAAsB;EACtB,mBAAmB;;EAEnB,wCAAwC;EACxC,wCAAwC;EACxC,6BAA6B;;EAE7B,YAAY;EACZ,sBAAsB;;EAEtB,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,wCAAwC;EACxC,eAAe;AACjB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,SAAS;AACX;;AAEA;EACE,aAAa;EACb,mCAAmC;EACnC,kBAAkB;AACpB;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,6BAA6B;EAC7B,YAAY;EACZ,wBAAwB;EACxB,UAAU;EACV,eAAe;AACjB\",\"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-mime-renderer-container {\\n display: flex;\\n flex-direction: row;\\n justify-content: start;\\n align-items: start;\\n background-color: var(--jp-rendermime-error-background);\\n width: 100%;\\n}\\n\\n.error-mime-renderer-button {\\n display: flex;\\n flex-direction: row;\\n justify-content: start;\\n align-items: center;\\n\\n background-color: var(--jp-error-color3);\\n border: var(--jp-error-color0) 1px solid;\\n color: var(--jp-error-color0);\\n\\n margin: 10px;\\n box-sizing: border-box;\\n\\n border-radius: 3px;\\n font-size: 14px;\\n}\\n\\n.error-mime-renderer-button:hover {\\n background-color: var(--jp-error-color4);\\n cursor: pointer;\\n}\\n\\n.error-mime-renderer-button svg {\\n margin-right: 5px;\\n}\\n\\n.error-mime-renderer-button p {\\n margin: 0;\\n}\\n\\n.output-block {\\n padding: 10px;\\n background-color: var(--yellow-500);\\n border-radius: 3px;\\n}\\n\\n.output-block pre {\\n color: var(--yellow-900) !important;\\n}\\n\\n.collapse-button {\\n background-color: transparent;\\n border: none;\\n color: var(--yellow-900);\\n padding: 0;\\n cursor: pointer;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\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-ui-font-color2);\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} `, \"\",{\"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,0CAA0C;IAC1C,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-ui-font-color2);\\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\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.icon-button {\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: transparent;\n border: none;\n cursor: pointer;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/IconButton.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,6BAA6B;EAC7B,YAAY;EACZ,eAAe;AACjB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.icon-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background-color: transparent;\\n border: none;\\n cursor: pointer;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.markdown-message-part * .jp-RenderedHTMLCommon :not(pre) > code {\n background-color: var(--purple-300);\n color: var(--purple-700);\n border-radius: 3px;\n display: inline-flex;\n align-items: center;\n}\n\n/* Ensure long URLs in markdown messages wrap instead of overflowing */\n.markdown-message-part a {\n word-break: break-all;\n overflow-wrap: anywhere;\n white-space: pre-line;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/MarkdownMessage.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,mCAAmC;IACnC,wBAAwB;IACxB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;AACvB;;AAEA,sEAAsE;AACtE;IACI,qBAAqB;IACrB,uBAAuB;IACvB,qBAAqB;AACzB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.markdown-message-part * .jp-RenderedHTMLCommon :not(pre) > code {\\n background-color: var(--purple-300);\\n color: var(--purple-700);\\n border-radius: 3px;\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n/* Ensure long URLs in markdown messages wrap instead of overflowing */\\n.markdown-message-part a {\\n word-break: break-all;\\n overflow-wrap: anywhere;\\n white-space: pre-line;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* ModelSelector.css - responsive design with compact mode */\n\n.model-selector {\n position: relative;\n flex: 0 0 auto;\n margin: 0 8px;\n height: 20px; /* Match height of other elements */\n display: flex;\n align-items: center; /* Center vertically */\n color: var(--jp-ui-font-color2);\n}\n\n.model-selector:hover {\n color: var(--jp-ui-font-color1);\n}\n\n.model-selector-dropdown {\n position: relative;\n height: 20px; /* Fixed height to match other elements */\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center; /* Ensure content is vertically centered */\n width: min-content;\n max-width: 18ch;\n}\n\n\n.selected-model {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n padding: 0 8px;\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.model-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n line-height: 1;\n}\n\n.dropdown-arrow {\n font-size: 8px;\n transition: transform 0.2s;\n margin-left: 4px;\n flex-shrink: 0; /* Prevent arrow from shrinking */\n}\n\n/* Model options dropdown */\n.model-options {\n position: absolute;\n bottom: 100%;\n max-height: 180px;\n overflow-y: auto;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-layout-color2);\n border-radius: 4px;\n margin-bottom: 4px;\n box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n width: auto;\n}\n\n.model-option {\n padding: 4px 8px;\n font-size: 12px;\n /* Keep this size for readability */\n color: var(--jp-content-font-color1);\n cursor: pointer;\n transition: background-color 0.2s;\n white-space: nowrap;\n /* Prevent text wrapping */\n}\n\n.model-option:hover {\n background-color: var(--jp-layout-color2);\n color: var(--purple-700);\n}\n\n.model-option.selected {\n background-color: var(--jp-layout-color2);\n color: var(--purple-700);\n}\n\n/* When inside chat-controls - ensure proper alignment with other controls */\n.chat-controls .model-selector {\n height: 20px;\n display: flex;\n align-items: center;\n}\n\n.chat-controls .model-selector-dropdown {\n height: 20px;\n align-self: center;\n}\n\n/* Ensure dropdown appears above other elements */\n.model-options {\n z-index: 1010;\n /* Higher z-index to ensure visibility */\n}\n\n.model-name {\n display: inline-block;\n max-width: 120px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: bottom;\n}\n\n/* On wider screens, show only the name of the model*/\n.model-icon {\n display: none;\n}\n\n.model-name {\n display: inline;\n}\n\n/* On compact screens, show only the icon */\n@container (max-width: 300px) {\n\n /* Shift the dropdown to the left to help prevent right-edge overflow */\n .model-options {\n left: -40px;\n }\n\n .model-icon {\n display: inline;\n }\n\n .model-name {\n display: none;\n }\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ModelSelector.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF,4DAA4D;;AAE5D;EACE,kBAAkB;EAClB,cAAc;EACd,aAAa;EACb,YAAY,EAAE,mCAAmC;EACjD,aAAa;EACb,mBAAmB,EAAE,sBAAsB;EAC3C,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,kBAAkB;EAClB,YAAY,EAAE,yCAAyC;EACvD,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,mBAAmB,EAAE,0CAA0C;EAC/D,kBAAkB;EAClB,eAAe;AACjB;;;AAGA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,WAAW;EACX,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,WAAW;EACX,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,0BAA0B;EAC1B,gBAAgB;EAChB,cAAc,EAAE,iCAAiC;AACnD;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,yCAAyC;EACzC,aAAa;EACb,WAAW;AACb;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,mCAAmC;EACnC,oCAAoC;EACpC,eAAe;EACf,iCAAiC;EACjC,mBAAmB;EACnB,0BAA0B;AAC5B;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA,4EAA4E;AAC5E;EACE,YAAY;EACZ,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,kBAAkB;AACpB;;AAEA,iDAAiD;AACjD;EACE,aAAa;EACb,wCAAwC;AAC1C;;AAEA;EACE,qBAAqB;EACrB,gBAAgB;EAChB,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA,qDAAqD;AACrD;EACE,aAAa;AACf;;AAEA;EACE,eAAe;AACjB;;AAEA,2CAA2C;AAC3C;;EAEE,uEAAuE;EACvE;IACE,WAAW;EACb;;EAEA;IACE,eAAe;EACjB;;EAEA;IACE,aAAa;EACf;AACF\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n/* ModelSelector.css - responsive design with compact mode */\\n\\n.model-selector {\\n position: relative;\\n flex: 0 0 auto;\\n margin: 0 8px;\\n height: 20px; /* Match height of other elements */\\n display: flex;\\n align-items: center; /* Center vertically */\\n color: var(--jp-ui-font-color2);\\n}\\n\\n.model-selector:hover {\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.model-selector-dropdown {\\n position: relative;\\n height: 20px; /* Fixed height to match other elements */\\n border-radius: 4px;\\n cursor: pointer;\\n display: flex;\\n align-items: center; /* Ensure content is vertically centered */\\n width: min-content;\\n max-width: 18ch;\\n}\\n\\n\\n.selected-model {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n width: 100%;\\n height: 100%;\\n padding: 0 8px;\\n font-size: 12px;\\n font-weight: 500;\\n line-height: 1;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n.model-icon {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 14px;\\n height: 14px;\\n line-height: 1;\\n}\\n\\n.dropdown-arrow {\\n font-size: 8px;\\n transition: transform 0.2s;\\n margin-left: 4px;\\n flex-shrink: 0; /* Prevent arrow from shrinking */\\n}\\n\\n/* Model options dropdown */\\n.model-options {\\n position: absolute;\\n bottom: 100%;\\n max-height: 180px;\\n overflow-y: auto;\\n background-color: var(--jp-layout-color1);\\n border: 1px solid var(--jp-layout-color2);\\n border-radius: 4px;\\n margin-bottom: 4px;\\n box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.1);\\n z-index: 1000;\\n width: auto;\\n}\\n\\n.model-option {\\n padding: 4px 8px;\\n font-size: 12px;\\n /* Keep this size for readability */\\n color: var(--jp-content-font-color1);\\n cursor: pointer;\\n transition: background-color 0.2s;\\n white-space: nowrap;\\n /* Prevent text wrapping */\\n}\\n\\n.model-option:hover {\\n background-color: var(--jp-layout-color2);\\n color: var(--purple-700);\\n}\\n\\n.model-option.selected {\\n background-color: var(--jp-layout-color2);\\n color: var(--purple-700);\\n}\\n\\n/* When inside chat-controls - ensure proper alignment with other controls */\\n.chat-controls .model-selector {\\n height: 20px;\\n display: flex;\\n align-items: center;\\n}\\n\\n.chat-controls .model-selector-dropdown {\\n height: 20px;\\n align-self: center;\\n}\\n\\n/* Ensure dropdown appears above other elements */\\n.model-options {\\n z-index: 1010;\\n /* Higher z-index to ensure visibility */\\n}\\n\\n.model-name {\\n display: inline-block;\\n max-width: 120px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n vertical-align: bottom;\\n}\\n\\n/* On wider screens, show only the name of the model*/\\n.model-icon {\\n display: none;\\n}\\n\\n.model-name {\\n display: inline;\\n}\\n\\n/* On compact screens, show only the icon */\\n@container (max-width: 300px) {\\n\\n /* Shift the dropdown to the left to help prevent right-edge overflow */\\n .model-options {\\n left: -40px;\\n }\\n\\n .model-icon {\\n display: inline;\\n }\\n\\n .model-name {\\n display: none;\\n }\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.connected-input-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n border-radius: 8px;\n}\n\n.next-steps-pills-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 8px 20px;\n margin-bottom: 0;\n border-top-left-radius: 12px;\n border-top-right-radius: 12px;\n margin-left: 10px;\n margin-right: 10px;\n align-self: stretch; /* Stretch the container to the width of the parent */\n background-color: var(--chat-user-message-background-color);\n transform: translateY(-10px);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.next-steps-header {\n display: flex;\n align-items: center;\n justify-content: left;\n width: 100%;\n padding: 4px 0;\n cursor: pointer;\n user-select: none;\n gap: 4px;\n}\n\n.next-steps-title {\n font-size: 10px;\n font-weight: 400;\n color: var(--jp-ui-font-color2);\n letter-spacing: 0.5px;\n}\n\n.next-steps-caret {\n font-size: 10px;\n color: var(--jp-ui-font-color2);\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n opacity: 0.7;\n}\n\n.next-steps-header:hover {\n color: var(--jp-ui-font-color1);\n}\n\n.next-steps-caret.expanded {\n transform: rotate(0deg);\n}\n\n.next-steps-caret.collapsed {\n transform: rotate(-90deg);\n}\n\n.next-steps-header:hover .next-steps-caret {\n opacity: 1;\n}\n\n.next-steps-pills-container {\n opacity: 1;\n transform: translateY(0);\n}\n\n.next-steps-pills-container.animating-out {\n opacity: 0;\n transform: translateY(-10px) scale(0.95);\n transition: all 0.2s cubic-bezier(0.4, 0, 1, 1);\n}\n\n.next-steps-pills-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n flex: 1;\n}\n\n.next-step-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 20px;\n color: var(--jp-ui-font-color2);\n font-size: 12px;\n font-weight: 400;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n opacity: 0;\n transform: translateY(5px) scale(0.9);\n animation: pillSlideIn 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n white-space: nowrap;\n width: 100%;\n overflow: hidden;\n position: relative;\n}\n\n.next-step-pill::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(135deg, var(--jp-brand-color3) 0%, rgba(var(--jp-brand-color1), 0.1) 100%);\n border-radius: 20px;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.next-step-pill:hover {\n background: var(--jp-layout-color2);\n transform: translateY(-1px) scale(1.02);\n box-shadow: 0 4px 12px rgba(var(--jp-brand-color1), 0.15);\n}\n\n.next-step-pill:hover::before {\n opacity: 1;\n}\n\n.next-step-pill:active {\n transform: translateY(0) scale(0.98);\n transition: all 0.1s ease;\n}\n\n.next-step-pill-text {\n position: relative;\n z-index: 1;\n line-height: 1.2;\n}\n\n.next-step-pill-icon {\n position: relative;\n z-index: 1;\n color: var(--jp-brand-color1);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n display: none;\n}\n\n.next-step-pill:hover .next-step-pill-icon {\n display: block;\n transform: translateX(2px);\n color: var(--jp-brand-color2);\n}\n\n@keyframes pillSlideIn {\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n/* Responsive design for smaller screens */\n@media (max-width: 600px) {\n .next-step-pill {\n max-width: 150px;\n font-size: 11px;\n padding: 5px 10px;\n }\n \n .next-steps-pills-container {\n padding: 6px 10px;\n margin-bottom: 6px;\n }\n}\n\n/* Animation for when pills are being dismissed */\n.next-steps-pills-container.animating-out .next-step-pill {\n animation: pillSlideOut 0.2s cubic-bezier(0.4, 0, 1, 1) backwards;\n}\n\n@keyframes pillSlideOut {\n to {\n opacity: 0;\n transform: translateY(-5px) scale(0.8);\n }\n} `, \"\",{\"version\":3,\"sources\":[\"webpack://./style/NextStepsPills.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,QAAQ;IACR,iBAAiB;IACjB,gBAAgB;IAChB,4BAA4B;IAC5B,6BAA6B;IAC7B,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB,EAAE,qDAAqD;IAC1E,2DAA2D;IAC3D,4BAA4B;IAC5B,iDAAiD;AACrD;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,qBAAqB;IACrB,WAAW;IACX,cAAc;IACd,eAAe;IACf,iBAAiB;IACjB,QAAQ;AACZ;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,+BAA+B;IAC/B,qBAAqB;AACzB;;AAEA;IACI,eAAe;IACf,+BAA+B;IAC/B,uDAAuD;IACvD,YAAY;AAChB;;AAEA;IACI,+BAA+B;AACnC;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,UAAU;AACd;;AAEA;IACI,UAAU;IACV,wBAAwB;AAC5B;;AAEA;IACI,UAAU;IACV,wCAAwC;IACxC,+CAA+C;AACnD;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,QAAQ;IACR,OAAO;AACX;;AAEA;IACI,oBAAoB;IACpB,mBAAmB;IACnB,QAAQ;IACR,iBAAiB;IACjB,mCAAmC;IACnC,yCAAyC;IACzC,mBAAmB;IACnB,+BAA+B;IAC/B,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,iDAAiD;IACjD,UAAU;IACV,qCAAqC;IACrC,iEAAiE;IACjE,mBAAmB;IACnB,WAAW;IACX,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,kBAAkB;IAClB,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS;IACT,sGAAsG;IACtG,mBAAmB;IACnB,UAAU;IACV,6BAA6B;AACjC;;AAEA;IACI,mCAAmC;IACnC,uCAAuC;IACvC,yDAAyD;AAC7D;;AAEA;IACI,UAAU;AACd;;AAEA;IACI,oCAAoC;IACpC,yBAAyB;AAC7B;;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,gBAAgB;AACpB;;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,6BAA6B;IAC7B,iDAAiD;IACjD,aAAa;AACjB;;AAEA;IACI,cAAc;IACd,0BAA0B;IAC1B,6BAA6B;AACjC;;AAEA;IACI;QACI,UAAU;QACV,iCAAiC;IACrC;AACJ;;AAEA,0CAA0C;AAC1C;IACI;QACI,gBAAgB;QAChB,eAAe;QACf,iBAAiB;IACrB;;IAEA;QACI,iBAAiB;QACjB,kBAAkB;IACtB;AACJ;;AAEA,iDAAiD;AACjD;IACI,iEAAiE;AACrE;;AAEA;IACI;QACI,UAAU;QACV,sCAAsC;IAC1C;AACJ\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.connected-input-container {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n border-radius: 8px;\\n}\\n\\n.next-steps-pills-container {\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n padding: 8px 20px;\\n margin-bottom: 0;\\n border-top-left-radius: 12px;\\n border-top-right-radius: 12px;\\n margin-left: 10px;\\n margin-right: 10px;\\n align-self: stretch; /* Stretch the container to the width of the parent */\\n background-color: var(--chat-user-message-background-color);\\n transform: translateY(-10px);\\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n\\n.next-steps-header {\\n display: flex;\\n align-items: center;\\n justify-content: left;\\n width: 100%;\\n padding: 4px 0;\\n cursor: pointer;\\n user-select: none;\\n gap: 4px;\\n}\\n\\n.next-steps-title {\\n font-size: 10px;\\n font-weight: 400;\\n color: var(--jp-ui-font-color2);\\n letter-spacing: 0.5px;\\n}\\n\\n.next-steps-caret {\\n font-size: 10px;\\n color: var(--jp-ui-font-color2);\\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);\\n opacity: 0.7;\\n}\\n\\n.next-steps-header:hover {\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.next-steps-caret.expanded {\\n transform: rotate(0deg);\\n}\\n\\n.next-steps-caret.collapsed {\\n transform: rotate(-90deg);\\n}\\n\\n.next-steps-header:hover .next-steps-caret {\\n opacity: 1;\\n}\\n\\n.next-steps-pills-container {\\n opacity: 1;\\n transform: translateY(0);\\n}\\n\\n.next-steps-pills-container.animating-out {\\n opacity: 0;\\n transform: translateY(-10px) scale(0.95);\\n transition: all 0.2s cubic-bezier(0.4, 0, 1, 1);\\n}\\n\\n.next-steps-pills-list {\\n display: flex;\\n flex-direction: column;\\n gap: 6px;\\n flex: 1;\\n}\\n\\n.next-step-pill {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 6px 12px;\\n background: var(--jp-layout-color1);\\n border: 1px solid var(--jp-border-color2);\\n border-radius: 20px;\\n color: var(--jp-ui-font-color2);\\n font-size: 12px;\\n font-weight: 400;\\n cursor: pointer;\\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\\n opacity: 0;\\n transform: translateY(5px) scale(0.9);\\n animation: pillSlideIn 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\\n white-space: nowrap;\\n width: 100%;\\n overflow: hidden;\\n position: relative;\\n}\\n\\n.next-step-pill::before {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background: linear-gradient(135deg, var(--jp-brand-color3) 0%, rgba(var(--jp-brand-color1), 0.1) 100%);\\n border-radius: 20px;\\n opacity: 0;\\n transition: opacity 0.2s ease;\\n}\\n\\n.next-step-pill:hover {\\n background: var(--jp-layout-color2);\\n transform: translateY(-1px) scale(1.02);\\n box-shadow: 0 4px 12px rgba(var(--jp-brand-color1), 0.15);\\n}\\n\\n.next-step-pill:hover::before {\\n opacity: 1;\\n}\\n\\n.next-step-pill:active {\\n transform: translateY(0) scale(0.98);\\n transition: all 0.1s ease;\\n}\\n\\n.next-step-pill-text {\\n position: relative;\\n z-index: 1;\\n line-height: 1.2;\\n}\\n\\n.next-step-pill-icon {\\n position: relative;\\n z-index: 1;\\n color: var(--jp-brand-color1);\\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\\n display: none;\\n}\\n\\n.next-step-pill:hover .next-step-pill-icon {\\n display: block;\\n transform: translateX(2px);\\n color: var(--jp-brand-color2);\\n}\\n\\n@keyframes pillSlideIn {\\n to {\\n opacity: 1;\\n transform: translateY(0) scale(1);\\n }\\n}\\n\\n/* Responsive design for smaller screens */\\n@media (max-width: 600px) {\\n .next-step-pill {\\n max-width: 150px;\\n font-size: 11px;\\n padding: 5px 10px;\\n }\\n \\n .next-steps-pills-container {\\n padding: 6px 10px;\\n margin-bottom: 6px;\\n }\\n}\\n\\n/* Animation for when pills are being dismissed */\\n.next-steps-pills-container.animating-out .next-step-pill {\\n animation: pillSlideOut 0.2s cubic-bezier(0.4, 0, 1, 1) backwards;\\n}\\n\\n@keyframes pillSlideOut {\\n to {\\n opacity: 0;\\n transform: translateY(-5px) scale(0.8);\\n }\\n} \"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* Main container */\n.notebook-footer-container {\n position: relative;\n width: 100%;\n padding: 12px 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n/* Input container */\n.input-container {\n width: 80%;\n max-width: 600px;\n}\n\n/* Input wrapper */\n.input-wrapper {\n display: flex;\n align-items: center;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 12px;\n padding: 8px 10px;\n gap: 12px;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n box-shadow: \n 0 2px 8px rgba(0, 0, 0, 0.1),\n 0 1px 3px rgba(0, 0, 0, 0.08),\n inset 0 1px 0 rgba(255, 255, 255, 0.1);\n position: relative;\n overflow: hidden;\n}\n\n.input-wrapper::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--jp-layout-color0);\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n}\n\n.input-wrapper:hover {\n transform: translateY(-1px);\n box-shadow: \n 0 4px 12px rgba(0, 0, 0, 0.15),\n 0 2px 6px rgba(0, 0, 0, 0.1),\n inset 0 1px 0 rgba(255, 255, 255, 0.15);\n}\n\n.input-wrapper:hover::before {\n opacity: 1;\n}\n\n.input-wrapper:focus-within {\n border-color: var(--purple-500);\n box-shadow: \n 0 4px 16px rgba(0, 0, 0, 0.15),\n 0 2px 8px rgba(0, 0, 0, 0.1),\n 0 0 0 3px rgba(147, 51, 234, 0.1),\n inset 0 1px 0 rgba(255, 255, 255, 0.2);\n transform: translateY(-2px);\n}\n\n.input-wrapper:focus-within::before {\n opacity: 1;\n}\n\n/* Left icon */\n.input-icon-left {\n font-size: 18px;\n color: var(--jp-ui-font-color2);\n display: flex;\n align-items: center;\n transition: all 0.3s ease;\n filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));\n font-weight: 500;\n}\n\n.input-wrapper:focus-within .input-icon-left {\n color: var(--purple-600);\n transform: scale(1.1);\n}\n\n.input-wrapper:hover .input-icon-left,\n.input-wrapper:hover .input-action-button,\n.input-wrapper.generating .input-icon-left,\n.input-wrapper.generating .input-action-button {\n color: var(--purple-500);\n transform: scale(1.05);\n}\n\n/* Input field */\n.prompt-input {\n flex: 1;\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n font-weight: 400;\n line-height: 1.4;\n font-family: var(--jp-ui-font-family);\n color: var(--jp-ui-font-color1);\n padding: 6px 0;\n transition: all 0.3s ease;\n position: relative;\n z-index: 1;\n}\n\n.prompt-input::placeholder {\n color: var(--jp-ui-font-color2);\n font-weight: 400;\n}\n\n.prompt-input:focus {\n color: var(--jp-ui-font-color0);\n}\n\n/* Input action buttons */\n.input-action-button {\n width: 32px;\n height: 32px;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.input-action-button:hover:not(:disabled) {\n transform: scale(1.1);\n}\n\n.input-action-button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n transform: none;\n color: var(--jp-ui-font-color2);\n}\n\n/* Right icons container */\n.input-icons-right {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Button row */\n.button-row {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n justify-content: center;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);\n transition: all 0.2s ease;\n}\n\n.button-row:hover {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n border-color: var(--jp-border-color2);\n}\n\n/* Footer buttons */\n.footer-button {\n min-width: 80px;\n padding: 10px 14px;\n font-size: 12px;\n font-weight: 400;\n line-height: 1.3;\n font-family: var(--jp-ui-font-family);\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n box-sizing: border-box;\n position: relative;\n color: var(--jp-ui-font-color1);\n}\n\n.footer-button:not(:last-child)::after {\n content: '';\n position: absolute;\n right: 0;\n top: 30%;\n bottom: 30%;\n width: 1px;\n background: var(--jp-border-color1);\n opacity: 0.6;\n}\n\n.jp-ThemedContainer .button-row button {\n border: none;\n background: transparent;\n border-radius: 0;\n position: relative;\n overflow: hidden;\n height: 100%;\n}\n\n.jp-ThemedContainer .button-row button::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.02);\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.jp-ThemedContainer .button-row button:hover {\n background: var(--jp-layout-color2);\n}\n\n.jp-ThemedContainer .button-row button:hover::before {\n opacity: 1;\n}\n\n/* Button content */\n.button-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n transition: all 0.2s ease;\n}\n\n.footer-button:hover .button-content {\n transform: none;\n}\n\n/* Button icon */\n.button-icon {\n height: 16px;\n width: 16px;\n line-height: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--jp-ui-font-color2);\n transition: color 0.2s ease;\n}\n\n/* Button label */\n.button-label {\n margin-top: 1px;\n font-size: 10px;\n line-height: 1.2;\n color: var(--jp-ui-font-color2);\n transition: color 0.2s ease;\n}\n\n.footer-button:hover .button-icon,\n.footer-button:hover .button-label {\n color: var(--purple-500);\n}\n\n/* Cell info */\n.cell-info {\n font-size: 12px;\n font-weight: 400;\n line-height: 1.4;\n color: var(--jp-ui-font-color2);\n font-family: var(--jp-ui-font-family);\n text-align: center;\n padding: 4px 8px;\n background: rgba(var(--jp-ui-font-color3), 0.05);\n border-radius: 6px;\n backdrop-filter: blur(4px);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/NotebookFooter.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n/* Main container */\\n.notebook-footer-container {\\n position: relative;\\n width: 100%;\\n padding: 12px 16px;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 12px;\\n}\\n\\n/* Input container */\\n.input-container {\\n width: 80%;\\n max-width: 600px;\\n}\\n\\n/* Input wrapper */\\n.input-wrapper {\\n display: flex;\\n align-items: center;\\n background: var(--jp-layout-color1);\\n border: 1px solid var(--jp-border-color2);\\n border-radius: 12px;\\n padding: 8px 10px;\\n gap: 12px;\\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\\n box-shadow: \\n 0 2px 8px rgba(0, 0, 0, 0.1),\\n 0 1px 3px rgba(0, 0, 0, 0.08),\\n inset 0 1px 0 rgba(255, 255, 255, 0.1);\\n position: relative;\\n overflow: hidden;\\n}\\n\\n.input-wrapper::before {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background: var(--jp-layout-color0);\\n opacity: 0;\\n transition: opacity 0.3s ease;\\n pointer-events: none;\\n}\\n\\n.input-wrapper:hover {\\n transform: translateY(-1px);\\n box-shadow: \\n 0 4px 12px rgba(0, 0, 0, 0.15),\\n 0 2px 6px rgba(0, 0, 0, 0.1),\\n inset 0 1px 0 rgba(255, 255, 255, 0.15);\\n}\\n\\n.input-wrapper:hover::before {\\n opacity: 1;\\n}\\n\\n.input-wrapper:focus-within {\\n border-color: var(--purple-500);\\n box-shadow: \\n 0 4px 16px rgba(0, 0, 0, 0.15),\\n 0 2px 8px rgba(0, 0, 0, 0.1),\\n 0 0 0 3px rgba(147, 51, 234, 0.1),\\n inset 0 1px 0 rgba(255, 255, 255, 0.2);\\n transform: translateY(-2px);\\n}\\n\\n.input-wrapper:focus-within::before {\\n opacity: 1;\\n}\\n\\n/* Left icon */\\n.input-icon-left {\\n font-size: 18px;\\n color: var(--jp-ui-font-color2);\\n display: flex;\\n align-items: center;\\n transition: all 0.3s ease;\\n filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));\\n font-weight: 500;\\n}\\n\\n.input-wrapper:focus-within .input-icon-left {\\n color: var(--purple-600);\\n transform: scale(1.1);\\n}\\n\\n.input-wrapper:hover .input-icon-left,\\n.input-wrapper:hover .input-action-button,\\n.input-wrapper.generating .input-icon-left,\\n.input-wrapper.generating .input-action-button {\\n color: var(--purple-500);\\n transform: scale(1.05);\\n}\\n\\n/* Input field */\\n.prompt-input {\\n flex: 1;\\n border: none;\\n outline: none;\\n background: transparent;\\n font-size: 13px;\\n font-weight: 400;\\n line-height: 1.4;\\n font-family: var(--jp-ui-font-family);\\n color: var(--jp-ui-font-color1);\\n padding: 6px 0;\\n transition: all 0.3s ease;\\n position: relative;\\n z-index: 1;\\n}\\n\\n.prompt-input::placeholder {\\n color: var(--jp-ui-font-color2);\\n font-weight: 400;\\n}\\n\\n.prompt-input:focus {\\n color: var(--jp-ui-font-color0);\\n}\\n\\n/* Input action buttons */\\n.input-action-button {\\n width: 32px;\\n height: 32px;\\n border: none;\\n border-radius: 50%;\\n background: transparent;\\n color: var(--jp-ui-font-color2);\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n font-size: 16px;\\n font-weight: 600;\\n transition: all 0.2s ease;\\n}\\n\\n.input-action-button:hover:not(:disabled) {\\n transform: scale(1.1);\\n}\\n\\n.input-action-button:disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n transform: none;\\n color: var(--jp-ui-font-color2);\\n}\\n\\n/* Right icons container */\\n.input-icons-right {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n}\\n\\n/* Button row */\\n.button-row {\\n display: flex;\\n flex-direction: row;\\n align-items: stretch;\\n justify-content: center;\\n background: var(--jp-layout-color1);\\n border: 1px solid var(--jp-border-color2);\\n border-radius: 8px;\\n overflow: hidden;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);\\n transition: all 0.2s ease;\\n}\\n\\n.button-row:hover {\\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\\n border-color: var(--jp-border-color2);\\n}\\n\\n/* Footer buttons */\\n.footer-button {\\n min-width: 80px;\\n padding: 10px 14px;\\n font-size: 12px;\\n font-weight: 400;\\n line-height: 1.3;\\n font-family: var(--jp-ui-font-family);\\n cursor: pointer;\\n transition: all 0.2s ease;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 4px;\\n box-sizing: border-box;\\n position: relative;\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.footer-button:not(:last-child)::after {\\n content: '';\\n position: absolute;\\n right: 0;\\n top: 30%;\\n bottom: 30%;\\n width: 1px;\\n background: var(--jp-border-color1);\\n opacity: 0.6;\\n}\\n\\n.jp-ThemedContainer .button-row button {\\n border: none;\\n background: transparent;\\n border-radius: 0;\\n position: relative;\\n overflow: hidden;\\n height: 100%;\\n}\\n\\n.jp-ThemedContainer .button-row button::before {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n background: rgba(255, 255, 255, 0.02);\\n opacity: 0;\\n transition: opacity 0.2s ease;\\n}\\n\\n.jp-ThemedContainer .button-row button:hover {\\n background: var(--jp-layout-color2);\\n}\\n\\n.jp-ThemedContainer .button-row button:hover::before {\\n opacity: 1;\\n}\\n\\n/* Button content */\\n.button-content {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 4px;\\n transition: all 0.2s ease;\\n}\\n\\n.footer-button:hover .button-content {\\n transform: none;\\n}\\n\\n/* Button icon */\\n.button-icon {\\n height: 16px;\\n width: 16px;\\n line-height: 1;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: var(--jp-ui-font-color2);\\n transition: color 0.2s ease;\\n}\\n\\n/* Button label */\\n.button-label {\\n margin-top: 1px;\\n font-size: 10px;\\n line-height: 1.2;\\n color: var(--jp-ui-font-color2);\\n transition: color 0.2s ease;\\n}\\n\\n.footer-button:hover .button-icon,\\n.footer-button:hover .button-label {\\n color: var(--purple-500);\\n}\\n\\n/* Cell info */\\n.cell-info {\\n font-size: 12px;\\n font-weight: 400;\\n line-height: 1.4;\\n color: var(--jp-ui-font-color2);\\n font-family: var(--jp-ui-font-family);\\n text-align: center;\\n padding: 4px 8px;\\n background: rgba(var(--jp-ui-font-color3), 0.05);\\n border-radius: 6px;\\n backdrop-filter: blur(4px);\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\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-python-code pre {\n flex-grow: 1;\n height: 100%;\n width: 100%;\n margin: 0 !important;\n padding: 10px !important;\n font-size: 12px !important;\n overflow-x: auto;\n}\n\n.code-block-python-code code {\n white-space: pre !important;\n}\n\n.code-block-python-code .jp-RenderedHTMLCommon > *:last-child {\n /* \n Remove the default Jupyter ending margin \n so that the rendered code is flush with the bottom\n of the CodeMessagePart\n */\n margin-bottom: 0px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/PythonCode.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,YAAY;EACZ,YAAY;EACZ,WAAW;EACX,oBAAoB;EACpB,wBAAwB;EACxB,0BAA0B;EAC1B,gBAAgB;AAClB;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE;;;;KAIG;EACH,kBAAkB;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.code-block-python-code pre {\\n flex-grow: 1;\\n height: 100%;\\n width: 100%;\\n margin: 0 !important;\\n padding: 10px !important;\\n font-size: 12px !important;\\n overflow-x: auto;\\n}\\n\\n.code-block-python-code code {\\n white-space: pre !important;\\n}\\n\\n.code-block-python-code .jp-RenderedHTMLCommon > *:last-child {\\n /* \\n Remove the default Jupyter ending margin \\n so that the rendered code is flush with the bottom\\n of the CodeMessagePart\\n */\\n margin-bottom: 0px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.rules-form textarea {\n width: 100%;\n box-sizing: border-box;\n padding: 8px 12px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n background: var(--jp-layout-color0);\n color: var(--jp-ui-font-color1);\n font-size: 14px;\n transition: border-color 0.2s;\n font-family: var(--jp-ui-font-family);\n resize: vertical;\n min-height: 120px;\n}\n\n.rules-form textarea:focus {\n outline: none;\n border-color: var(--purple-500);\n box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1);\n}\n\n.rules-form .form-group sub {\n color: var(--jp-ui-font-color2);\n margin-top: 4px;\n margin-bottom: 4px;\n display: block;\n}\n\n/* Rules List Styling */\n.rules-list {\n margin-top: 24px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.rules-list .rule-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 20px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n background: var(--jp-layout-color0);\n transition: border-color 0.2s, box-shadow 0.2s;\n cursor: pointer;\n}\n\n.rules-list .rule-item:hover {\n border-color: var(--jp-border-color2);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.rules-list .rule-content {\n flex: 1;\n margin-right: 16px;\n}\n\n.rules-list .rule-name {\n margin: 0 0 8px 0;\n color: var(--jp-ui-font-color1);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n}\n\n.rules-list .rule-description {\n margin: 0;\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n line-height: 1.5;\n}\n\n.rules-list .rule-actions {\n display: flex;\n gap: 8px;\n}\n\n.rules-list .empty-state {\n text-align: center;\n padding: 40px 20px;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n}\n\n.rules-list .empty-state p {\n margin: 0;\n font-size: 16px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/RulesForm.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,WAAW;IACX,sBAAsB;IACtB,iBAAiB;IACjB,yCAAyC;IACzC,kBAAkB;IAClB,mCAAmC;IACnC,+BAA+B;IAC/B,eAAe;IACf,6BAA6B;IAC7B,qCAAqC;IACrC,gBAAgB;IAChB,iBAAiB;AACrB;;AAEA;IACI,aAAa;IACb,+BAA+B;IAC/B,6CAA6C;AACjD;;AAEA;IACI,+BAA+B;IAC/B,eAAe;IACf,kBAAkB;IAClB,cAAc;AAClB;;AAEA,uBAAuB;AACvB;IACI,gBAAgB;IAChB,aAAa;IACb,sBAAsB;IACtB,SAAS;AACb;;AAEA;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,aAAa;IACb,yCAAyC;IACzC,kBAAkB;IAClB,mCAAmC;IACnC,8CAA8C;IAC9C,eAAe;AACnB;;AAEA;IACI,qCAAqC;IACrC,wCAAwC;AAC5C;;AAEA;IACI,OAAO;IACP,kBAAkB;AACtB;;AAEA;IACI,iBAAiB;IACjB,+BAA+B;IAC/B,eAAe;IACf,gBAAgB;IAChB,cAAc;AAClB;;AAEA;IACI,SAAS;IACT,+BAA+B;IAC/B,eAAe;IACf,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,QAAQ;AACZ;;AAEA;IACI,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;IAC/B,kBAAkB;AACtB;;AAEA;IACI,SAAS;IACT,eAAe;AACnB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.rules-form textarea {\\n width: 100%;\\n box-sizing: border-box;\\n padding: 8px 12px;\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 4px;\\n background: var(--jp-layout-color0);\\n color: var(--jp-ui-font-color1);\\n font-size: 14px;\\n transition: border-color 0.2s;\\n font-family: var(--jp-ui-font-family);\\n resize: vertical;\\n min-height: 120px;\\n}\\n\\n.rules-form textarea:focus {\\n outline: none;\\n border-color: var(--purple-500);\\n box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1);\\n}\\n\\n.rules-form .form-group sub {\\n color: var(--jp-ui-font-color2);\\n margin-top: 4px;\\n margin-bottom: 4px;\\n display: block;\\n}\\n\\n/* Rules List Styling */\\n.rules-list {\\n margin-top: 24px;\\n display: flex;\\n flex-direction: column;\\n gap: 16px;\\n}\\n\\n.rules-list .rule-item {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n padding: 20px;\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 8px;\\n background: var(--jp-layout-color0);\\n transition: border-color 0.2s, box-shadow 0.2s;\\n cursor: pointer;\\n}\\n\\n.rules-list .rule-item:hover {\\n border-color: var(--jp-border-color2);\\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\\n}\\n\\n.rules-list .rule-content {\\n flex: 1;\\n margin-right: 16px;\\n}\\n\\n.rules-list .rule-name {\\n margin: 0 0 8px 0;\\n color: var(--jp-ui-font-color1);\\n font-size: 14px;\\n font-weight: 500;\\n line-height: 1;\\n}\\n\\n.rules-list .rule-description {\\n margin: 0;\\n color: var(--jp-ui-font-color2);\\n font-size: 14px;\\n line-height: 1.5;\\n}\\n\\n.rules-list .rule-actions {\\n display: flex;\\n gap: 8px;\\n}\\n\\n.rules-list .empty-state {\\n text-align: center;\\n padding: 40px 20px;\\n color: var(--jp-ui-font-color2);\\n font-style: italic;\\n}\\n\\n.rules-list .empty-state p {\\n margin: 0;\\n font-size: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.selected-context-container {\n display: flex;\n align-items: center;\n text-align: center;\n background-color: var(--jp-layout-color2);\n border-radius: 3px;\n padding: 4px 8px;\n margin: 4px;\n\n font-size: 12px;\n height: 20px;\n width: fit-content;\n\n border: 1px solid var(--jp-border-color1);\n cursor: pointer;\n\n &:hover {\n background-color: var(--jp-layout-color3);\n }\n}\n\n.selected-context-container .rule-name {\n margin-left: 6px;\n color: var(--jp-content-font-color1);\n}\n\n.selected-context-container .icon {\n width: 12px;\n height: 12px;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/SelectedContextContainer.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,mBAAmB;IACnB,kBAAkB;IAClB,yCAAyC;IACzC,kBAAkB;IAClB,gBAAgB;IAChB,WAAW;;IAEX,eAAe;IACf,YAAY;IACZ,kBAAkB;;IAElB,yCAAyC;IACzC,eAAe;;IAEf;QACI,yCAAyC;IAC7C;AACJ;;AAEA;IACI,gBAAgB;IAChB,oCAAoC;AACxC;;AAEA;IACI,WAAW;IACX,YAAY;AAChB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.selected-context-container {\\n display: flex;\\n align-items: center;\\n text-align: center;\\n background-color: var(--jp-layout-color2);\\n border-radius: 3px;\\n padding: 4px 8px;\\n margin: 4px;\\n\\n font-size: 12px;\\n height: 20px;\\n width: fit-content;\\n\\n border: 1px solid var(--jp-border-color1);\\n cursor: pointer;\\n\\n &:hover {\\n background-color: var(--jp-layout-color3);\\n }\\n}\\n\\n.selected-context-container .rule-name {\\n margin-left: 6px;\\n color: var(--jp-content-font-color1);\\n}\\n\\n.selected-context-container .icon {\\n width: 12px;\\n height: 12px;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.settings-widget {\n height: 100%;\n width: 100%;\n padding: 20px;\n box-sizing: border-box;\n}\n\n.settings-layout {\n display: flex;\n height: 100%;\n}\n\n.settings-sidebar {\n width: 250px;\n padding: 20px;\n}\n\n.settings-sidebar nav ul {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\n.settings-sidebar nav li {\n padding: 12px 16px;\n margin: 4px 0;\n cursor: pointer;\n border-radius: 4px;\n transition: background-color 0.2s;\n}\n\n.settings-sidebar nav li:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.settings-sidebar nav li.active {\n background-color: var(--jp-layout-color2);\n font-weight: 500;\n}\n\n.settings-main {\n flex: 1;\n padding: 20px;\n overflow-y: auto;\n}\n\na {\n color: var(--purple-500) !important;\n}\n\n.settings-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.settings-header h2 {\n margin: 0;\n font-size: 1.5em;\n color: var(--jp-ui-font-color1);\n}\n\n.settings-option {\n margin: 12px 0;\n}\n\n.settings-checkbox-label {\n display: flex;\n align-items: center; \n cursor: pointer;\n}\n\n.settings-checkbox-label input[type=\"checkbox\"] {\n margin-right: 8px;\n}\n\n.settings-checkbox-label span {\n line-height: 1; /* Ensures text aligns with checkbox */\n}\n\n.settings-option-description {\n margin-top: 4px;\n margin-left: 26px; /* Aligns with the text label text */\n font-size: 0.9em;\n color: var(--jp-ui-font-color2);\n line-height: 1.4;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/SettingsWidget.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,YAAY;IACZ,WAAW;IACX,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,YAAY;AAChB;;AAEA;IACI,YAAY;IACZ,aAAa;AACjB;;AAEA;IACI,gBAAgB;IAChB,UAAU;IACV,SAAS;AACb;;AAEA;IACI,kBAAkB;IAClB,aAAa;IACb,eAAe;IACf,kBAAkB;IAClB,iCAAiC;AACrC;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,yCAAyC;IACzC,gBAAgB;AACpB;;AAEA;IACI,OAAO;IACP,aAAa;IACb,gBAAgB;AACpB;;AAEA;IACI,mCAAmC;AACvC;;AAEA;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,mBAAmB;AACvB;;AAEA;IACI,SAAS;IACT,gBAAgB;IAChB,+BAA+B;AACnC;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,eAAe;AACnB;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,cAAc,EAAE,sCAAsC;AAC1D;;AAEA;IACI,eAAe;IACf,iBAAiB,EAAE,oCAAoC;IACvD,gBAAgB;IAChB,+BAA+B;IAC/B,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.settings-widget {\\n height: 100%;\\n width: 100%;\\n padding: 20px;\\n box-sizing: border-box;\\n}\\n\\n.settings-layout {\\n display: flex;\\n height: 100%;\\n}\\n\\n.settings-sidebar {\\n width: 250px;\\n padding: 20px;\\n}\\n\\n.settings-sidebar nav ul {\\n list-style: none;\\n padding: 0;\\n margin: 0;\\n}\\n\\n.settings-sidebar nav li {\\n padding: 12px 16px;\\n margin: 4px 0;\\n cursor: pointer;\\n border-radius: 4px;\\n transition: background-color 0.2s;\\n}\\n\\n.settings-sidebar nav li:hover {\\n background-color: var(--jp-layout-color2);\\n}\\n\\n.settings-sidebar nav li.active {\\n background-color: var(--jp-layout-color2);\\n font-weight: 500;\\n}\\n\\n.settings-main {\\n flex: 1;\\n padding: 20px;\\n overflow-y: auto;\\n}\\n\\na {\\n color: var(--purple-500) !important;\\n}\\n\\n.settings-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin-bottom: 20px;\\n}\\n\\n.settings-header h2 {\\n margin: 0;\\n font-size: 1.5em;\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.settings-option {\\n margin: 12px 0;\\n}\\n\\n.settings-checkbox-label {\\n display: flex;\\n align-items: center; \\n cursor: pointer;\\n}\\n\\n.settings-checkbox-label input[type=\\\"checkbox\\\"] {\\n margin-right: 8px;\\n}\\n\\n.settings-checkbox-label span {\\n line-height: 1; /* Ensures text aligns with checkbox */\\n}\\n\\n.settings-option-description {\\n margin-top: 4px;\\n margin-left: 26px; /* Aligns with the text label text */\\n font-size: 0.9em;\\n color: var(--jp-ui-font-color2);\\n line-height: 1.4;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.text-and-icon-button {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 5px;\n}\n\n.text-and-icon-button__icon {\n height: 100%;\n display: flex;\n align-items: center;\n}\n\n.text-and-icon-button__icon > svg {\n height: 100%;\n width: auto;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/TextAndIconButton.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,QAAQ;AACV;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,mBAAmB;AACrB;;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.text-and-icon-button {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 5px;\\n}\\n\\n.text-and-icon-button__icon {\\n height: 100%;\\n display: flex;\\n align-items: center;\\n}\\n\\n.text-and-icon-button__icon > svg {\\n height: 100%;\\n width: auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.text-button-mito-ai {\n display: flex;\n align-items: center;\n justify-content: space-around;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/TextButton.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,mBAAmB;EACnB,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.text-button-mito-ai {\\n display: flex;\\n align-items: center;\\n justify-content: space-around;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n.toggle-button-container {\n display: flex;\n gap: 1px;\n background-color: var(--jp-layout-color2);\n border: 1px solid var(--jp-ui-font-color3);\n border-radius: 2px;\n width: 100px;\n overflow: hidden;\n}\n\n.toggle-button-half {\n flex: 0 0 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n min-width: 20px;\n font-size: 12px;\n padding: 2px 10px;\n}\n\n.toggle-button-half:first-child {\n border-radius: 0px;\n}\n\n.toggle-button-half:last-child {\n border-radius: 0px;\n}\n\n.toggle-button-half.selected {\n opacity: 1;\n background-color: var(--purple-400);\n color: var(--purple-700) !important;\n}\n\n.toggle-button-half.unselected {\n opacity: 0.6;\n background-color: transparent !important;\n color: var(--jp-ui-font-color2) !important;\n}\n\n.toggle-button-icon {\n width: 16px;\n height: 16px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ToggleButton.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,QAAQ;EACR,yCAAyC;EACzC,0CAA0C;EAC1C,kBAAkB;EAClB,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,QAAQ;EACR,eAAe;EACf,eAAe;EACf,iBAAiB;AACnB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,mCAAmC;EACnC,mCAAmC;AACrC;;AAEA;EACE,YAAY;EACZ,wCAAwC;EACxC,0CAA0C;AAC5C;;AAEA;EACE,WAAW;EACX,YAAY;AACd\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.toggle-button-container {\\n display: flex;\\n gap: 1px;\\n background-color: var(--jp-layout-color2);\\n border: 1px solid var(--jp-ui-font-color3);\\n border-radius: 2px;\\n width: 100px;\\n overflow: hidden;\\n}\\n\\n.toggle-button-half {\\n flex: 0 0 50%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n min-width: 20px;\\n font-size: 12px;\\n padding: 2px 10px;\\n}\\n\\n.toggle-button-half:first-child {\\n border-radius: 0px;\\n}\\n\\n.toggle-button-half:last-child {\\n border-radius: 0px;\\n}\\n\\n.toggle-button-half.selected {\\n opacity: 1;\\n background-color: var(--purple-400);\\n color: var(--purple-700) !important;\\n}\\n\\n.toggle-button-half.unselected {\\n opacity: 0.6;\\n background-color: transparent !important;\\n color: var(--jp-ui-font-color2) !important;\\n}\\n\\n.toggle-button-icon {\\n width: 16px;\\n height: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* \n Classes that can be used for any button, making it easier to keep \n the theme consistent. For example, use them to make a textButton or\n textAndIconButton green.\n*/\n\n.button-base {\n border: none;\n border-radius: 3px;\n cursor: pointer;\n font-size: 14px;\n /* Make sure the button grows large enough so that the text does not wrap */\n white-space: nowrap;\n padding: 5px 10px;\n}\n\n.button-green {\n background-color: var(--green-400);\n color: var(--green-900) !important;\n}\n\n.button-green:hover {\n background-color: var(--green-500);\n}\n\n.button-red {\n background-color: var(--red-400);\n color: var(--red-900) !important;\n}\n\n.button-red:hover {\n background-color: var(--red-500);\n}\n\n.button-gray {\n background-color: var(--jp-layout-color2);\n color: var(--jp-content-font-color1) !important;\n}\n\n.button-gray:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.button-purple {\n background-color: var(--purple-300);\n color: var(--purple-700) !important;\n}\n\n.button-purple:hover {\n background-color: var(--purple-400);\n}\n\n.button-width-block {\n width: 100%;\n}\n\n.button-width-fit-contents {\n width: fit-content;\n}\n\n.button-small {\n height: 20px;\n font-size: 12px;\n padding: 2px 5px;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/button.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;;;;CAIC;;AAED;EACE,YAAY;EACZ,kBAAkB;EAClB,eAAe;EACf,eAAe;EACf,2EAA2E;EAC3E,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,kCAAkC;EAClC,kCAAkC;AACpC;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,gCAAgC;EAChC,gCAAgC;AAClC;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,yCAAyC;EACzC,+CAA+C;AACjD;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,mCAAmC;EACnC,mCAAmC;AACrC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,gBAAgB;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n/* \\n Classes that can be used for any button, making it easier to keep \\n the theme consistent. For example, use them to make a textButton or\\n textAndIconButton green.\\n*/\\n\\n.button-base {\\n border: none;\\n border-radius: 3px;\\n cursor: pointer;\\n font-size: 14px;\\n /* Make sure the button grows large enough so that the text does not wrap */\\n white-space: nowrap;\\n padding: 5px 10px;\\n}\\n\\n.button-green {\\n background-color: var(--green-400);\\n color: var(--green-900) !important;\\n}\\n\\n.button-green:hover {\\n background-color: var(--green-500);\\n}\\n\\n.button-red {\\n background-color: var(--red-400);\\n color: var(--red-900) !important;\\n}\\n\\n.button-red:hover {\\n background-color: var(--red-500);\\n}\\n\\n.button-gray {\\n background-color: var(--jp-layout-color2);\\n color: var(--jp-content-font-color1) !important;\\n}\\n\\n.button-gray:hover {\\n background-color: var(--jp-layout-color3);\\n}\\n\\n.button-purple {\\n background-color: var(--purple-300);\\n color: var(--purple-700) !important;\\n}\\n\\n.button-purple:hover {\\n background-color: var(--purple-400);\\n}\\n\\n.button-width-block {\\n width: 100%;\\n}\\n\\n.button-width-fit-contents {\\n width: fit-content;\\n}\\n\\n.button-small {\\n height: 20px;\\n font-size: 12px;\\n padding: 2px 5px;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./CTACarousel.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./CTACarousel.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./ChatDropdown.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./ChatDropdown.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./ChatInput.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./ChatInput.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./ChatMessage.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./ChatMessage.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./ChatTaskpane.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./ChatTaskpane.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./Citation.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./Citation.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./CodeBlock.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./CodeBlock.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./ConnectionForm.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./ConnectionForm.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./DatabasePage.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./DatabasePage.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./DropdownMenu.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./DropdownMenu.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./ErrorMimeRendererPlugin.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./ErrorMimeRendererPlugin.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./GetCellOutputToolUI.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./GetCellOutputToolUI.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./IconButton.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./IconButton.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./MarkdownMessage.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./MarkdownMessage.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./ModelSelector.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./ModelSelector.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./NextStepsPills.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./NextStepsPills.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./NotebookFooter.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./NotebookFooter.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./PythonCode.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./PythonCode.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./RulesForm.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./RulesForm.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./SelectedContextContainer.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./SelectedContextContainer.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./SettingsWidget.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./SettingsWidget.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./TextAndIconButton.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./TextAndIconButton.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./TextButton.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./TextButton.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./ToggleButton.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./ToggleButton.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./button.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./button.css\";\n export default content && content.locals ? content.locals : undefined;\n"],"names":[],"sourceRoot":""}