mito-ai 0.1.44__py3-none-any.whl → 0.1.46__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.
- mito_ai/__init__.py +10 -1
- mito_ai/_version.py +1 -1
- mito_ai/anthropic_client.py +92 -8
- mito_ai/app_deploy/app_deploy_utils.py +25 -0
- mito_ai/app_deploy/handlers.py +9 -12
- mito_ai/app_deploy/models.py +4 -1
- mito_ai/chat_history/handlers.py +63 -0
- mito_ai/chat_history/urls.py +32 -0
- mito_ai/completions/handlers.py +44 -20
- mito_ai/completions/models.py +1 -0
- mito_ai/completions/prompt_builders/prompt_constants.py +22 -4
- mito_ai/constants.py +3 -0
- mito_ai/streamlit_conversion/agent_utils.py +148 -30
- mito_ai/streamlit_conversion/prompts/prompt_constants.py +147 -24
- mito_ai/streamlit_conversion/prompts/streamlit_app_creation_prompt.py +2 -1
- mito_ai/streamlit_conversion/prompts/streamlit_error_correction_prompt.py +2 -2
- mito_ai/streamlit_conversion/prompts/streamlit_finish_todo_prompt.py +4 -3
- mito_ai/streamlit_conversion/prompts/update_existing_app_prompt.py +50 -0
- mito_ai/streamlit_conversion/streamlit_agent_handler.py +101 -104
- mito_ai/streamlit_conversion/streamlit_system_prompt.py +1 -0
- mito_ai/streamlit_conversion/streamlit_utils.py +18 -17
- mito_ai/streamlit_conversion/validate_streamlit_app.py +66 -62
- mito_ai/streamlit_preview/handlers.py +5 -3
- mito_ai/streamlit_preview/utils.py +11 -7
- mito_ai/tests/chat_history/test_chat_history.py +211 -0
- mito_ai/tests/deploy_app/test_app_deploy_utils.py +71 -0
- mito_ai/tests/message_history/test_message_history_utils.py +43 -19
- mito_ai/tests/providers/test_anthropic_client.py +180 -8
- mito_ai/tests/streamlit_conversion/test_apply_patch_to_text.py +368 -0
- mito_ai/tests/streamlit_conversion/test_fix_diff_headers.py +533 -0
- mito_ai/tests/streamlit_conversion/test_streamlit_agent_handler.py +71 -158
- mito_ai/tests/streamlit_conversion/test_streamlit_utils.py +16 -16
- mito_ai/tests/streamlit_conversion/test_validate_streamlit_app.py +16 -28
- mito_ai/tests/streamlit_preview/test_streamlit_preview_handler.py +2 -2
- mito_ai/tests/user/__init__.py +2 -0
- mito_ai/tests/user/test_user.py +120 -0
- mito_ai/tests/utils/test_anthropic_utils.py +4 -4
- mito_ai/user/handlers.py +33 -0
- mito_ai/user/urls.py +21 -0
- mito_ai/utils/anthropic_utils.py +15 -21
- mito_ai/utils/message_history_utils.py +4 -3
- mito_ai/utils/telemetry_utils.py +7 -4
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +100 -100
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
- mito_ai-0.1.44.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.cf2e3ad2797fbb53826b.js → mito_ai-0.1.46.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.20f12766ecd3d430568e.js +1520 -300
- mito_ai-0.1.46.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.20f12766ecd3d430568e.js.map +1 -0
- mito_ai-0.1.44.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.5482493d1270f55b7283.js → mito_ai-0.1.46.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.54126ab6511271265443.js +18 -18
- mito_ai-0.1.44.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.5482493d1270f55b7283.js.map → mito_ai-0.1.46.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.54126ab6511271265443.js.map +1 -1
- {mito_ai-0.1.44.dist-info → mito_ai-0.1.46.dist-info}/METADATA +2 -2
- {mito_ai-0.1.44.dist-info → mito_ai-0.1.46.dist-info}/RECORD +75 -63
- mito_ai-0.1.44.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.cf2e3ad2797fbb53826b.js.map +0 -1
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js.map +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js.map +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_apis_signOut_mjs-node_module-75790d.688c25857e7b81b1740f.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_apis_signOut_mjs-node_module-75790d.688c25857e7b81b1740f.js.map +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_tokenProvider_tokenProvider_-72f1c8.a917210f057fcfe224ad.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_auth_dist_esm_providers_cognito_tokenProvider_tokenProvider_-72f1c8.a917210f057fcfe224ad.js.map +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js.map +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js.map +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_react-dom_client_js-node_modules_aws-amplify_ui-react_dist_styles_css.b43d4249e4d3dac9ad7b.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_react-dom_client_js-node_modules_aws-amplify_ui-react_dist_styles_css.b43d4249e4d3dac9ad7b.js.map +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js.map +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
- {mito_ai-0.1.44.data → mito_ai-0.1.46.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js.map +0 -0
- {mito_ai-0.1.44.dist-info → mito_ai-0.1.46.dist-info}/WHEEL +0 -0
- {mito_ai-0.1.44.dist-info → mito_ai-0.1.46.dist-info}/entry_points.txt +0 -0
- {mito_ai-0.1.44.dist-info → mito_ai-0.1.46.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lib_index_js.cf2e3ad2797fbb53826b.js","mappings":"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0BAA0B,6BAA6B,oCAAoC,oBAAoB,sCAAsC,GAAG,8DAA8D,qBAAqB,yBAAyB,2DAA2D,GAAG,qFAAqF,uBAAuB,GAAG,4BAA4B,oBAAoB,0BAA0B,gBAAgB,IAAI,qBAAqB;AAChkC;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;ACrCvC;AAC0G;AACjB;AACzF,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,yFAAyF,MAAM,YAAY,MAAM,UAAU,YAAY,WAAW,YAAY,WAAW,YAAY,OAAO,YAAY,MAAM,YAAY,aAAa,aAAa,OAAO,YAAY,MAAM,YAAY,aAAa,OAAO,KAAK,YAAY,aAAa,OAAO,YAAY,MAAM,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,aAAa,WAAW,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,UAAU,UAAU,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,UAAU,UAAU,OAAO,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,WAAW,UAAU,UAAU,UAAU,YAAY,WAAW,UAAU,YAAY,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,YAAY,OAAO,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,aAAa,OAAO,KAAK,KAAK,UAAU,YAAY,MAAM,KAAK,UAAU,YAAY,MAAM,MAAM,KAAK,YAAY,aAAa,OAAO,KAAK,YAAY,0NAA0N,kBAAkB,2BAA2B,cAAc,uBAAuB,kBAAkB,sBAAsB,GAAG,uEAAuE,qCAAqC,iCAAiC,0BAA0B,GAAG,mFAAmF,wCAAwC,2BAA2B,GAAG,2BAA2B,wCAAwC,+BAA+B,GAAG,oEAAoE,oBAAoB,qBAAqB,qBAAqB,uBAAuB,GAAG,8DAA8D,0BAA0B,GAAG,2BAA2B,wBAAwB,GAAG,0BAA0B,qBAAqB,sBAAsB,oBAAoB,GAAG,8DAA8D,0BAA0B,GAAG,yBAAyB,cAAc,uBAAuB,GAAG,6DAA6D,0BAA0B,GAAG,+DAA+D,6BAA6B,GAAG,4BAA4B,uBAAuB,oBAAoB,qBAAqB,GAAG,wBAAwB,kBAAkB,4BAA4B,aAAa,mBAAmB,oBAAoB,qBAAqB,GAAG,4DAA4D,0BAA0B,GAAG,8DAA8D,6BAA6B,GAAG,kBAAkB,oBAAoB,mBAAmB,oBAAoB,GAAG,qBAAqB,yBAAyB,wBAAwB,GAAG,oBAAoB,qBAAqB,iBAAiB,eAAe,oBAAoB,kBAAkB,wBAAwB,aAAa,oBAAoB,yBAAyB,+BAA+B,GAAG,wDAAwD,0BAA0B,GAAG,0BAA0B,0BAA0B,GAAG,8DAA8D,0BAA0B,GAAG,gEAAgE,6BAA6B,GAAG,mBAAmB,oBAAoB,oCAAoC,0BAA0B,qCAAqC,GAAG,wBAAwB,8BAA8B,GAAG,sBAAsB,oBAAoB,sBAAsB,iBAAiB,sCAAsC,uBAAuB,uCAAuC,GAAG,0BAA0B,UAAU,iBAAiB,kCAAkC,KAAK,QAAQ,iBAAiB,+BAA+B,KAAK,GAAG,4BAA4B,0CAA0C,4CAA4C,GAAG,kCAAkC,0CAA0C,GAAG,qBAAqB;AACvqJ;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;ACrLvC;AAC0G;AACjB;AACzF,8BAA8B,mFAA2B,CAAC,4FAAqC;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,uFAAuF,MAAM,YAAY,MAAM,UAAU,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,OAAO,KAAK,UAAU,UAAU,YAAY,aAAa,OAAO,KAAK,UAAU,UAAU,MAAM,KAAK,YAAY,WAAW,YAAY,aAAa,aAAa,a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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;;AAEA;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,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,2FAA2F,MAAM,KAAK,UAAU,YAAY,WAAW,YAAY,aAAa,WAAW,YAAY,aAAa,SAAS,KAAK,YAAY,aAAa,aAAa,aAAa,SAAS,KAAK,YAAY,OAAO,KAAK,YAAY,WAAW,UAAU,YAAY,OAAO,KAAK,UAAU,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW,YAAY,aAAa,aAAa,WAAW,YAAY,OAAO,KA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AAO,yCAAyC,4BAA4B,6BAA6B,OAAO,GAAG,mHAAmH,wEAAwE,GAAG,6BAA6B,UAAU,qBAAqB,iDAAiD,OAAO,IAAI,mBAAmB;AAC34L;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;;;;;;;;ACnMvC;AAC0G;AACjB;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;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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/ChatDropdownItems.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/RevertQuestionnaire.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/jupyterSettingsManager.ts","webpack://mito_ai/./src/Extensions/AiChat/token.ts","webpack://mito_ai/./src/Extensions/AiChat/utils.tsx","webpack://mito_ai/./src/Extensions/AiChat/validationUtils.ts","webpack://mito_ai/./src/Extensions/AppDeploy/AppDeployPlugin.ts","webpack://mito_ai/./src/Extensions/AppDeploy/DeployAppNotification.tsx","webpack://mito_ai/./src/Extensions/AppDeploy/DeployStreamlitApp.ts","webpack://mito_ai/./src/Extensions/AppDeploy/auth-popup-deploy.tsx","webpack://mito_ai/./src/Extensions/AppDeploy/auth.ts","webpack://mito_ai/./src/Extensions/AppDeploy/authPopupUtils.tsx","webpack://mito_ai/./src/Extensions/AppDeploy/aws-config.ts","webpack://mito_ai/./src/Extensions/AppDeploy/fileUtils.tsx","webpack://mito_ai/./src/Extensions/AppDeploy/requirementsUtils.tsx","webpack://mito_ai/./src/Extensions/AppManager/AppsList.tsx","webpack://mito_ai/./src/Extensions/AppManager/CheckAppStatusAPI.ts","webpack://mito_ai/./src/Extensions/AppManager/ListAppsAPI.ts","webpack://mito_ai/./src/Extensions/AppManager/ManageAppsPlugin.ts","webpack://mito_ai/./src/Extensions/AppPreview/StreamlitPreviewPlugin.tsx","webpack://mito_ai/./src/Extensions/AppPreview/utils.ts","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/GettingStartedVideo.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/profiler/CapturedRequestsSection.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/profiler/ContextManagerSection.tsx","webpack://mito_ai/./src/Extensions/SettingsManager/profiler/ProfilerPage.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/AgentComponents/AgentComponentHeader.tsx","webpack://mito_ai/./src/components/AgentComponents/AssumptionToolUI.tsx","webpack://mito_ai/./src/components/AgentComponents/ErrorFixupToolUI.tsx","webpack://mito_ai/./src/components/AgentComponents/GetCellOutputToolUI.tsx","webpack://mito_ai/./src/components/AgentComponents/RunAllCellsToolUI.tsx","webpack://mito_ai/./src/components/AttachFileButton.tsx","webpack://mito_ai/./src/components/DatabaseButton.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/AlertIcon.tsx","webpack://mito_ai/./src/icons/CodeIcon.tsx","webpack://mito_ai/./src/icons/CopyIcon.tsx","webpack://mito_ai/./src/icons/DatabaseIcon.tsx","webpack://mito_ai/./src/icons/DatabaseOutlineIcon.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/PaperClipIcon.tsx","webpack://mito_ai/./src/icons/Pencil.tsx","webpack://mito_ai/./src/icons/PhotoIcon.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/cellMetadata.ts","webpack://mito_ai/./src/utils/cellOutput.ts","webpack://mito_ai/./src/utils/chatHistory.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/constants.ts","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/models.ts","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/appDeploy/appDeployWebsocketClient.ts","webpack://mito_ai/./src/websockets/appManager/appManagerWebsocketClient.ts","webpack://mito_ai/./src/websockets/completions/CompletionsWebsocketClient.ts","webpack://mito_ai/./style/AgentComponentHeader.css","webpack://mito_ai/./style/AgentToolUIComponent.css","webpack://mito_ai/./style/AlertBlock.css","webpack://mito_ai/./style/AppsList.css","webpack://mito_ai/./style/AssumptionTool.css","webpack://mito_ai/./style/AuthPopup.css","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/ErrorFixupToolUI.css","webpack://mito_ai/./style/ErrorMimeRendererPlugin.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/ProfilerPage.css","webpack://mito_ai/./style/PythonCode.css","webpack://mito_ai/./style/RevertQuestionnaire.css","webpack://mito_ai/./style/RulesForm.css","webpack://mito_ai/./style/SelectedContextContainer.css","webpack://mito_ai/./style/SettingsWidget.css","webpack://mito_ai/./style/StreamlitPreviewPlugin.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/./style/AgentComponentHeader.css?17f8","webpack://mito_ai/./style/AgentToolUIComponent.css?3751","webpack://mito_ai/./style/AlertBlock.css?37e3","webpack://mito_ai/./style/AppsList.css?11e1","webpack://mito_ai/./style/AssumptionTool.css?6ffc","webpack://mito_ai/./style/AuthPopup.css?ca68","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/ErrorFixupToolUI.css?5132","webpack://mito_ai/./style/ErrorMimeRendererPlugin.css?b90c","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/ProfilerPage.css?76cd","webpack://mito_ai/./style/PythonCode.css?0896","webpack://mito_ai/./style/RevertQuestionnaire.css?93d8","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/StreamlitPreviewPlugin.css?0c1a","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';\nimport { ISettingRegistry } from '@jupyterlab/settingregistry';\nimport { setDefaultWindowingMode, setRenameUntitledFileOnSave } from './jupyterSettingsManager';\nimport { IDocumentManager } from '@jupyterlab/docmanager';\n\n// The Widget Rank determins where the ChatIcon is displayed\n// in the left hand toolbar\nconst WIDGET_RANK = 2000\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 ISettingRegistry,\n IDocumentManager\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 settingRegistry: ISettingRegistry,\n documentManager: IDocumentManager,\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 // Update jupyter settings to work best with mito-ai\n void setRenameUntitledFileOnSave(settingRegistry, documentManager);\n void setDefaultWindowingMode(settingRegistry)\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, NotebookPanel } from '@jupyterlab/notebook';\nimport { getActiveCellCode, getActiveCellID, getActiveCellIDInNotebookPanel, getAIOptimizedCellsInNotebookPanel, getCellCodeByID, getCellCodeByIDInNotebookPanel } from \"../../utils/notebook\";\nimport { AgentResponse, IAgentExecutionMetadata, IAgentSmartDebugMetadata, IChatMessageMetadata, ICodeExplainMetadata, ISmartDebugMetadata } from \"../../websockets/completions/CompletionModels\";\nimport { addMarkdownCodeFormatting } from \"../../utils/strings\";\nimport { isChromeBasedBrowser } from \"../../utils/user\";\nimport { validateAndCorrectAgentResponse } from \"./validationUtils\";\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 additionalContext?: Array<{type: string, value: string}>\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 private _allAssumptions = new Set<string>();\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 // Initialize assumptions from existing history\n this.initializeAssumptionsFromHistory();\n }\n\n private initializeAssumptionsFromHistory(): void {\n this._allAssumptions.clear();\n this.displayOptimizedChatHistory.forEach(item => {\n // Validate the agent response if it exists\n if (item.agentResponse !== undefined) {\n item.agentResponse = validateAndCorrectAgentResponse(item.agentResponse)\n }\n\n // Process the assumptions\n if (item.agentResponse?.analysis_assumptions) {\n item.agentResponse.analysis_assumptions.forEach(assumption => {\n this._allAssumptions.add(assumption);\n });\n }\n });\n }\n\n private deduplicateAssumptions(agentResponse: AgentResponse): AgentResponse {\n\n // If there are no assumptions, return the original response\n if (agentResponse?.analysis_assumptions === undefined || agentResponse?.analysis_assumptions === null) {\n return agentResponse;\n }\n\n const newAssumptions = agentResponse.analysis_assumptions.filter(\n assumption => !this._allAssumptions.has(assumption)\n );\n \n newAssumptions.forEach(assumption => this._allAssumptions.add(assumption));\n \n return {\n ...agentResponse,\n analysis_assumptions: newAssumptions.length > 0 ? newAssumptions : undefined\n };\n }\n\n createDuplicateChatHistoryManager(): ChatHistoryManager {\n const duplicateManager = new ChatHistoryManager(\n this.contextManager, \n this.notebookTracker, \n this.displayOptimizedChatHistory\n );\n\n // Copy the assumptions set to the duplicate\n duplicateManager._allAssumptions = new Set(this._allAssumptions);\n return duplicateManager;\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, additionalContext?: Array<{type: string, value: string}>): Promise<IChatMessageMetadata> {\n const activeCellCode = getActiveCellCode(this.notebookTracker) || ''\n const activeCellID = getActiveCellID(this.notebookTracker) || ''\n\n const activeNotebookContext = this.contextManager.getActiveNotebookContext();\n const chatMessageMetadata: IChatMessageMetadata = {\n promptType: 'chat',\n variables: activeNotebookContext?.variables || [],\n files: activeNotebookContext?.files || [],\n activeCellCode: activeCellCode,\n activeCellId: activeCellID,\n input: input,\n threadId: activeThreadId,\n index: messageIndex,\n additionalContext: additionalContext\n }\n\n this.displayOptimizedChatHistory.push(\n {\n message: getDisplayedOptimizedUserMessage(input, activeCellCode), \n type: 'openai message',\n codeCellID: activeCellID,\n promptType: 'chat',\n additionalContext: additionalContext\n }\n );\n\n return chatMessageMetadata\n }\n\n addAgentExecutionMessage(\n activeThreadId: string, \n notebookPanel: NotebookPanel,\n input?: string, \n additionalContext?: Array<{type: string, value: string}>\n ): IAgentExecutionMetadata {\n\n const aiOptimizedCells = getAIOptimizedCellsInNotebookPanel(notebookPanel)\n const notebookContext = this.contextManager.getNotebookContext(notebookPanel.id);\n\n const agentExecutionMetadata: IAgentExecutionMetadata = {\n promptType: 'agent:execution',\n variables: notebookContext?.variables || [],\n files: notebookContext?.files || [],\n aiOptimizedCells: aiOptimizedCells,\n input: input || '',\n threadId: activeThreadId,\n isChromeBrowser: isChromeBasedBrowser(),\n additionalContext: additionalContext\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 additionalContext: additionalContext\n }\n )\n\n return agentExecutionMetadata\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 activeNotebookContext = this.contextManager.getActiveNotebookContext();\n const smartDebugMetadata: ISmartDebugMetadata = {\n promptType: 'smartDebug',\n variables: activeNotebookContext?.variables || [],\n files: activeNotebookContext?.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, notebookPanel: NotebookPanel): IAgentSmartDebugMetadata {\n\n const activeCellID = getActiveCellIDInNotebookPanel(notebookPanel)\n const activeCellCode = getCellCodeByIDInNotebookPanel(notebookPanel, activeCellID)\n\n const notebookContext = this.contextManager.getNotebookContext(notebookPanel.id);\n const agentSmartDebugMetadata: IAgentSmartDebugMetadata = {\n promptType: 'agent:autoErrorFixup',\n aiOptimizedCells: getAIOptimizedCellsInNotebookPanel(notebookPanel),\n variables: notebookContext?.variables || [],\n files: notebookContext?.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 activeNotebookContext = this.contextManager.getActiveNotebookContext();\n const codeExplainMetadata: ICodeExplainMetadata = {\n promptType: 'codeExplain',\n variables: activeNotebookContext?.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 agentResponse = validateAndCorrectAgentResponse(agentResponse)\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: this.deduplicateAssumptions(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 dropMessagesStartingAtIndex(index: number): void {\n this.displayOptimizedChatHistory.splice(index)\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, { useEffect, useState } from 'react';\nimport { FREE_TIER_LIMIT_REACHED_ERROR_TITLE } from '../../../utils/errors';\nimport { STRIPE_PAYMENT_LINK } from '../../../utils/stripe';\nimport { logEvent } from '../../../restAPI/RestAPI';\nimport '../../../../style/AlertBlock.css';\n\n// Add calendly link constant\nconst CALENDLY_LINK = 'https://calendly.com/jake_from_mito/mito-meeting'\n\ninterface IAlertBlockProps {\n content: string;\n mitoAIConnectionErrorType: string | null;\n}\n\nconst AlertBlock: React.FC<IAlertBlockProps> = ({ content, mitoAIConnectionErrorType }) => {\n const [showEmailDetails, setShowEmailDetails] = useState(false);\n\n // The first time this AlertBlock is rendered, log the error type\n useEffect(() => {\n void logEvent('alert_block_displayed', { 'type': mitoAIConnectionErrorType, 'error': content });\n }, []);\n\n if (mitoAIConnectionErrorType === FREE_TIER_LIMIT_REACHED_ERROR_TITLE) {\n return (\n <div className=\"chat-message-alert-container upgrade\">\n <div className=\"chat-message-alert\">\n <div className=\"alert-error-message\">\n Free Trial Limit Reached\n </div>\n </div>\n <p className=\"alert-actions-title\">\n You've used up your free trial of Mito AI for this month.\n </p>\n <p className=\"alert-actions-title\" style={{marginTop: '0px', marginBottom: '5px'}}>\n Choose how you'd like to continue:\n </p>\n <ol style={{ margin: '0', paddingLeft: '20px' }}>\n <li>\n <form action={STRIPE_PAYMENT_LINK} method=\"POST\" target=\"_blank\" style={{ display: 'inline' }}>\n <button \n type=\"submit\"\n className=\"secondary-option-link\"\n style={{\n background: 'none',\n border: 'none',\n padding: 0,\n font: 'inherit',\n color: 'var(--purple-700)',\n textDecoration: 'underline',\n cursor: 'pointer',\n transition: 'color 0.2s ease'\n }}\n >\n Upgrade to Mito Pro\n </button>\n </form>\n {' '} for unlimited AI access and dedicated support\n </li>\n <li>\n <button \n onClick={() => {\n window.open(CALENDLY_LINK, '_blank');\n }}\n className=\"secondary-option-link\"\n style={{\n background: 'none',\n border: 'none',\n padding: 0,\n font: 'inherit',\n color: 'var(--purple-700)',\n textDecoration: 'underline',\n cursor: 'pointer',\n transition: 'color 0.2s ease'\n }}\n >\n Schedule a call with our founders\n </button>\n {' '} to get 3 free months of Mito Pro\n </li>\n <li>\n <a \n href=\"https://docs.trymito.io/mito-ai/configuring-ai-provider-keys\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"secondary-option-link\"\n >\n Use your own API keys\n </a>\n {' '} to continue using Mito AI\n </li>\n </ol>\n </div>\n )\n }\n\n return (\n <div className=\"chat-message-alert-container error\">\n <div className=\"chat-message-alert\">\n <div className=\"alert-error-message\">\n ⚠ {content}\n </div>\n </div>\n <div>\n <p className=\"alert-actions-title\">If this issue persists, we recommend:</p>\n <ul className=\"alert-actions-list\">\n <li>Restarting JupyterLab completely</li>\n <li>Upgrading to the latest version of Mito AI</li>\n <li>\n Sending us an email to founders@sagacollab.com \n <div className=\"details-toggle\">\n <button \n type=\"button\"\n onClick={() => setShowEmailDetails(!showEmailDetails)}\n className=\"toggle-button\"\n >\n <span className=\"toggle-text\"> Info to send us</span>\n <span className={`toggle-caret ${showEmailDetails ? 'open' : ''}`}>\n ▼\n </span>\n </button>\n </div>\n {showEmailDetails && (\n <div className=\"details-content\">\n <li>A screenshot of your entire Jupyter window</li>\n <li>A screenshot of your browser's console. You can access this by right clicking on this error message, clicking "Inspect", and then clicking the "Console" tab. Then find the red error message at the bottom of the console and screenshot it.</li>\n <li>Your `pip list` output</li>\n </div>\n )}\n </li>\n </ul>\n </div>\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 } from 'react';\nimport PythonCode from './PythonCode';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { classNames } from '../../../utils/classNames';\nimport '../../../../style/CodeBlock.css'\nimport '../../../../style/AgentComponentHeader.css'\nimport { CodeReviewStatus } from '../ChatTaskpane';\nimport CodeIcon from '../../../icons/CodeIcon';\nimport CodeBlockToolbar from './CodeBlockToolbar';\nimport AgentComponentHeader from '../../../components/AgentComponents/AgentComponentHeader';\n\ninterface IAssistantCodeBlockProps {\n code: string;\n codeSummary: string | undefined;\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 isErrorFixup?: boolean;\n}\n\nconst AssistantCodeBlock: React.FC<IAssistantCodeBlockProps> = ({\n code,\n codeSummary,\n isCodeComplete,\n renderMimeRegistry,\n previewAICode,\n acceptAICode,\n rejectAICode,\n isLastAiMessage,\n codeReviewStatus,\n agentModeEnabled,\n isErrorFixup,\n}) => {\n const [isCodeExpanded, setIsCodeExpanded] = useState(false);\n const shouldShowToolbar = isLastAiMessage || isCodeComplete;\n\n if (agentModeEnabled) {\n\n // Handle regular code blocks\n return (\n <div className={classNames('code-block-container', 'agent-mode', {\n 'agent-mode-collapsed': !isCodeExpanded,\n })}>\n <AgentComponentHeader\n icon={<CodeIcon />}\n text={codeSummary ?? 'Generated code'}\n onClick={() => setIsCodeExpanded(!isCodeExpanded)}\n isExpanded={isCodeExpanded}\n displayBorder={!isErrorFixup}\n className={isErrorFixup ? 'error-fixup' : undefined}\n />\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, useRef } from 'react';\nimport { ExpandedVariable } from './ChatInput';\nimport { getDatabaseConnections, getRules } from '../../../restAPI/RestAPI';\nimport { VariableDropdownItem, FileDropdownItem, RuleDropdownItem } from './ChatDropdownItems';\n\ninterface ChatDropdownProps {\n options: ExpandedVariable[];\n onSelect: (option: ChatDropdownOption) => void;\n filterText: string;\n position?: 'above' | 'below';\n isDropdownFromButton?: boolean;\n onFilterChange?: (filterText: string) => void;\n onClose?: () => void;\n}\n\ninterface ChatDropdownVariableOption {\n type: 'variable'\n variable: ExpandedVariable;\n}\n\ninterface ChatDropdownDatabaseOption {\n type: 'db'\n variable: ExpandedVariable;\n}\n\ninterface ChatDropdownRuleOption {\n type: 'rule'\n rule: string;\n}\n\ninterface ChatDropdownFileOption {\n type: 'file'\n file: ExpandedVariable;\n}\n\nexport type ChatDropdownOption =\n | ChatDropdownVariableOption\n | ChatDropdownRuleOption\n | ChatDropdownFileOption\n | ChatDropdownDatabaseOption;\n\nconst priortizeByType = (options: ChatDropdownOption[], maxPerType: number): ChatDropdownOption[] => {\n /* \n Makes sure that some of each type are displayed at the top of the dropdown so \n users can easily see what types of options are available to them.\n */\n const typeCounts: Record<string, number> = {};\n const prioritizedOptions: ChatDropdownOption[] = [];\n const extraOptions: ChatDropdownOption[] = [];\n\n for (const option of options) {\n const type = option.type;\n const currentCount = typeCounts[type] || 0;\n\n if (currentCount < maxPerType) {\n prioritizedOptions.push(option);\n typeCounts[type] = currentCount + 1;\n } else {\n extraOptions.push(option);\n }\n }\n\n // Return prioritized options first, then extras at the bottom\n return [...prioritizedOptions, ...extraOptions];\n};\n\nconst ChatDropdown: React.FC<ChatDropdownProps> = ({\n options,\n onSelect,\n filterText,\n isDropdownFromButton = false,\n onFilterChange,\n onClose,\n}) => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [localFilterText, setLocalFilterText] = useState(filterText);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const [rules, setRules] = useState<string[]>([]);\n const [databaseConnections, setDatabaseConnections] = useState<Record<string, any>>({});\n\n useEffect(() => {\n const fetchRules = async (): Promise<void> => {\n const rules = await getRules();\n setRules(rules);\n };\n const fetchDatabaseConnections = async (): Promise<void> => {\n const databaseConnections = await getDatabaseConnections();\n setDatabaseConnections(databaseConnections);\n };\n void fetchRules();\n void fetchDatabaseConnections();\n }, []);\n\n // Focus search input when dropdown opens with search input\n useEffect(() => {\n if (isDropdownFromButton && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isDropdownFromButton]);\n\n // Use local filter text when search input is shown, otherwise use prop\n const effectiveFilterText = isDropdownFromButton ? localFilterText : filterText;\n\n // Create a list of all options with the format \n // ['type': 'variable', \"expandedVariable\": variable]\n // ['type': 'rule', \"rule\": rule]\n // ['type': 'file', \"file\": file]\n const allOptions: ChatDropdownOption[] = [\n // Rules first\n ...rules.map((rule): ChatDropdownRuleOption => ({\n type: 'rule',\n rule: rule\n })),\n // Files second\n ...options\n .filter(variable => variable.file_name) // Only files\n .map((file): ChatDropdownFileOption => ({\n type: 'file',\n file: file\n })),\n // Databases third\n ...Object.entries(databaseConnections).map(([connectionId, connection]): ChatDropdownDatabaseOption => ({\n type: 'db',\n variable: {\n variable_name: connection.alias || connection.database,\n type: \"db\",\n value: connectionId + \" - \" + connection.type,\n parent_df: connection.type\n }\n })),\n // Dataframes fourth\n ...options\n .filter(variable => !variable.file_name && variable.type === \"pd.DataFrame\")\n .map((variable): ChatDropdownVariableOption => ({\n type: 'variable',\n variable: variable\n })),\n // Columns fifth\n ...options\n .filter(variable => !variable.file_name && variable.parent_df && variable.type !== \"pd.DataFrame\")\n .map((variable): ChatDropdownVariableOption => ({\n type: 'variable',\n variable: variable\n })),\n // Other variables last\n ...options\n .filter(variable => !variable.file_name && !variable.parent_df && variable.type !== \"pd.DataFrame\")\n .map((variable): ChatDropdownVariableOption => ({\n type: 'variable',\n variable: variable\n })),\n ];\n\n let searchFilteredOptions = allOptions.filter((option) => {\n if (option.type === 'variable') {\n return option.variable.variable_name.toLowerCase().includes(effectiveFilterText.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 } else if (option.type === 'file') {\n return option.file.variable_name.toLowerCase().includes(effectiveFilterText.toLowerCase());\n } else if (option.type === 'db') {\n return option.variable.variable_name.toLowerCase().includes(effectiveFilterText.toLowerCase()) ||\n option.variable.value.toLowerCase().includes(effectiveFilterText.toLowerCase());\n } else {\n return option.rule.toLowerCase().includes(effectiveFilterText.toLowerCase());\n }\n });\n\n // If user is searching (has filter text), show all matches\n // Otherwise, show only 3 of each type by default\n if (effectiveFilterText.trim() === '') { \n searchFilteredOptions = priortizeByType(searchFilteredOptions, 3);\n }\n\n useEffect(() => {\n setSelectedIndex(0);\n }, [options, rules, effectiveFilterText]);\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 < searchFilteredOptions.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 : searchFilteredOptions.length - 1\n );\n break;\n case 'Enter':\n case 'Return':\n case 'Tab': {\n event.preventDefault();\n const selectedOption = searchFilteredOptions[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 }, [searchFilteredOptions, selectedIndex]);\n\n // Handle click outside to close dropdown\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent): void => {\n const target = event.target as Node;\n const dropdownElement = document.querySelector('.chat-dropdown');\n\n if (dropdownElement && !dropdownElement.contains(target)) {\n if (onClose) {\n onClose();\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [onClose]);\n\n const handleSearchInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n const newFilterText = event.target.value;\n setLocalFilterText(newFilterText);\n if (onFilterChange) {\n onFilterChange(newFilterText);\n }\n };\n\n const handleSearchInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n if (onFilterChange) {\n onFilterChange(''); // Clear the filter\n }\n if (onClose) {\n onClose(); // Close the dropdown\n }\n }\n };\n\n return (\n <div className={`chat-dropdown`} data-testid=\"chat-dropdown\">\n {isDropdownFromButton && (\n <div className=\"chat-dropdown-search\">\n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder=\"Search variables and rules...\"\n value={localFilterText}\n onChange={handleSearchInputChange}\n onKeyDown={handleSearchInputKeyDown}\n className=\"chat-dropdown-search-input\"\n />\n </div>\n )}\n <ul className=\"chat-dropdown-list\" data-testid=\"chat-dropdown-list\">\n {searchFilteredOptions.length === 0 && (\n <li className=\"chat-dropdown-item\" data-testid=\"chat-dropdown-empty-item\">No variables found</li>\n )}\n\n {searchFilteredOptions.map((option, index) => {\n switch (option.type) {\n case 'variable': {\n const uniqueKey = option.variable.parent_df\n ? `${option.variable.parent_df}.${option.variable.variable_name}`\n : option.variable.variable_name;\n return (\n <VariableDropdownItem\n key={uniqueKey}\n variable={option.variable}\n index={index}\n selectedIndex={selectedIndex}\n onSelect={() => onSelect(option)}\n />\n );\n }\n case 'file': {\n const uniqueKey = option.file.variable_name;\n return (\n <FileDropdownItem\n key={uniqueKey}\n file={option.file}\n index={index}\n selectedIndex={selectedIndex}\n onSelect={() => onSelect(option)}\n />\n );\n }\n case 'rule': {\n const uniqueKey = option.rule;\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 case 'db': {\n const uniqueKey = option.variable.variable_name;\n // You can replace VariableDropdownItem with a custom DBDropdownItem if you want\n return (\n <VariableDropdownItem\n key={uniqueKey}\n variable={option.variable}\n index={index}\n selectedIndex={selectedIndex}\n onSelect={() => onSelect(option)}\n />\n );\n }\n default:\n return null;\n }\n })}\n </ul>\n </div>\n );\n};\n\nexport default ChatDropdown;","/*\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 { classNames } from '../../../utils/classNames';\nimport { ExpandedVariable } from './ChatInput';\n\ninterface VariableDropdownItemProps {\n variable: ExpandedVariable;\n index: number;\n selectedIndex: number;\n onSelect: (variableName: string, parentDf: string | undefined) => void;\n}\n\nexport const 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 FileDropdownItemProps {\n file: ExpandedVariable;\n index: number;\n selectedIndex: number;\n onSelect: (file: ExpandedVariable) => void;\n}\n\nexport const FileDropdownItem: React.FC<FileDropdownItemProps> = ({ file, index, selectedIndex, onSelect }) => {\n return (\n <li\n className={classNames(\"chat-dropdown-item\", { selected: index === selectedIndex })}\n onClick={() => onSelect(file)}\n data-testid={`chat-dropdown-item-${file.variable_name}`}\n >\n <span className=\"chat-dropdown-item-type\"\n title={file.type}\n data-testid={`chat-dropdown-item-type-${file.variable_name}`}\n >\n {file.type}\n </span>\n <span\n className=\"chat-dropdown-item-name\"\n title={file.variable_name}\n data-testid={`chat-dropdown-item-name-${file.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 ? file.variable_name : '';\n }\n }}\n >\n {file.variable_name}\n </span>\n </li>\n )\n}\n\ninterface RuleDropdownItemProps {\n rule: string;\n index: number;\n selectedIndex: number;\n onSelect: (rule: string) => void;\n}\n\nexport const 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 <span className=\"chat-dropdown-item-type\"\n title=\"rule\"\n data-testid={`chat-dropdown-item-type-${rule}`}\n >\n rule\n </span>\n <span\n className=\"chat-dropdown-item-name\"\n title={rule}\n data-testid={`chat-dropdown-item-name-${rule}`}\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 ? rule : '';\n }\n }}\n >\n {rule}\n </span>\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, getActiveCellCode } from '../../../utils/notebook';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport '../../../../style/ChatInput.css';\nimport '../../../../style/ChatDropdown.css';\nimport { useDebouncedFunction } from '../../../hooks/useDebouncedFunction';\nimport { ChatDropdownOption } from './ChatDropdown';\nimport SelectedContextContainer from '../../../components/SelectedContextContainer';\nimport AttachFileButton from '../../../components/AttachFileButton';\nimport DatabaseButton from '../../../components/DatabaseButton';\nimport { JupyterFrontEnd } from '@jupyterlab/application';\nimport { AgentExecutionStatus } from '../ChatTaskpane';\n\ninterface ChatInputProps {\n app: JupyterFrontEnd;\n initialContent: string;\n placeholder: string;\n onSave: (content: string, index?: number, additionalContext?: Array<{ type: string, value: string }>) => void;\n onCancel?: () => void;\n isEditing: boolean;\n contextManager?: IContextManager;\n notebookTracker: INotebookTracker;\n agentModeEnabled: boolean;\n agentExecutionStatus?: AgentExecutionStatus;\n}\n\nexport interface ExpandedVariable extends Variable {\n parent_df?: string;\n file_name?: string;\n}\n\ninterface ContextItem {\n type: string;\n value: string;\n display?: string; // Optional display name, will fallback to value if not provided\n}\n\nconst ChatInput: React.FC<ChatInputProps> = ({\n app,\n initialContent,\n placeholder,\n onSave,\n onCancel,\n isEditing,\n contextManager,\n notebookTracker,\n agentModeEnabled = false,\n agentExecutionStatus = 'idle',\n}) => {\n const [input, setInput] = useState(initialContent);\n const textAreaRef = React.useRef<HTMLTextAreaElement>(null);\n const [activeCellID, setActiveCellID] = useState<string | undefined>(getActiveCellID(notebookTracker));\n const activeCellCode = getActiveCellCode(notebookTracker) || '';\n const [isDropdownVisible, setDropdownVisible] = useState(false);\n const [dropdownFilter, setDropdownFilter] = useState('');\n const [additionalContext, setAdditionalContext] = useState<ContextItem[]>([]);\n const [isDropdownFromButton, setIsDropdownFromButton] = useState(false);\n\n const handleFileUpload = (file: File): void => {\n let uploadType: string;\n\n if (file.type.startsWith('image/')) {\n // If the file is an image, we want to preserve the file type.\n // The type is used to display the image icon in the SelectedContextContainer,\n // and is used to encode the image on the backend.\n uploadType = file.type;\n } else {\n uploadType = 'file';\n }\n\n // Add the uploaded file to the additional context\n setAdditionalContext(prev => [\n ...prev, {\n type: uploadType,\n value: file.name,\n display: file.name\n }\n ]);\n };\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 setIsDropdownFromButton(false);\n } else {\n setDropdownVisible(false);\n setDropdownFilter('');\n setIsDropdownFromButton(false);\n }\n };\n\n const handleOptionSelect = (option: ChatDropdownOption): void => {\n if (isDropdownFromButton) {\n // When triggered by \"Add Context\" button, add to SelectedContextContainer\n if (option.type === 'variable') {\n // For variables, we'll add them as a special context type\n const contextName = option.variable.parent_df\n ? `${option.variable.parent_df}.${option.variable.variable_name}`\n : option.variable.variable_name;\n setAdditionalContext(prev => [...prev, { type: 'variable', value: contextName }]);\n } else if (option.type === 'file') {\n setAdditionalContext(prev => [...prev, { type: 'file', value: option.file.variable_name }]);\n } else if (option.type === 'rule') {\n setAdditionalContext(prev => [...prev, { type: 'rule', value: option.rule }]);\n } else if (option.type === 'db') {\n setAdditionalContext(prev => [\n ...prev,\n {\n type: 'db',\n value: option.variable.value,\n display: option.variable.variable_name\n }\n ]);\n }\n setDropdownVisible(false);\n\n // Use setTimeout to ensure this happens after React's state update cycle\n setTimeout(() => {\n textAreaRef.current?.focus();\n }, 0);\n return;\n }\n\n // Original behavior for @ dropdown - add to text input\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 === 'file') {\n // For files, add them as both back-ticked elements and the additional context container\n contextChatRepresentation = `\\`${option.file.variable_name}\\``\n setAdditionalContext([...additionalContext, { type: 'file', value: option.file.variable_name }]);\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 setAdditionalContext([...additionalContext, { type: 'rule', value: option.rule }]);\n } else if (option.type === 'db') {\n // For databases, add them as back-ticked elements\n contextChatRepresentation = `\\`${option.variable.variable_name}\\``\n setAdditionalContext([\n ...additionalContext,\n { type: 'db', value: option.variable.value, display: option.variable.variable_name }\n ]);\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 const handleDropdownClose = (): void => {\n setDropdownVisible(false);\n setDropdownFilter('');\n setIsDropdownFromButton(false);\n };\n\n const mapAdditionalContext = (): Array<{ type: string, value: string }> => {\n const result: Array<{ type: string, value: string }> = [];\n\n additionalContext.forEach(contextItem => {\n if (contextItem.type === 'db') {\n result.push({\n type: contextItem.type,\n value: contextItem.value\n });\n } else {\n result.push(contextItem);\n }\n });\n\n return result;\n };\n\n const getExpandedVarialbes = (): ExpandedVariable[] => {\n const activeNotebookContext = contextManager?.getActiveNotebookContext();\n const expandedVariables: ExpandedVariable[] = [\n // Add base variables (excluding DataFrames)\n ...(activeNotebookContext?.variables.filter(variable => variable.type !== \"pd.DataFrame\") || []),\n // Add DataFrames\n ...(activeNotebookContext?.variables.filter((variable) => variable.type === \"pd.DataFrame\") || []),\n // Add series with parent DataFrame references\n ...(activeNotebookContext?.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 ...(activeNotebookContext?.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 return expandedVariables;\n }\n\n\n\n // Automatically add active cell context when in Chat mode and there's active cell code\n useEffect(() => {\n if (!agentModeEnabled) {\n // Check if active cell context is already present\n const hasActiveCellContext = additionalContext.some(context => context.type === 'active_cell');\n\n if (!hasActiveCellContext) {\n setAdditionalContext(prev => [...prev, {\n type: 'active_cell',\n value: 'Active Cell',\n display: 'Active Cell'\n }]);\n }\n } else if (agentModeEnabled) {\n // Remove active cell context when in agent mode\n const hasActiveCellContext = additionalContext.some(context => context.type === 'active_cell');\n if (hasActiveCellContext) {\n setAdditionalContext(prev => prev.filter(context => context.type !== 'active_cell'));\n }\n }\n }, [agentModeEnabled, additionalContext, activeCellCode]);\n\n return (\n <div\n className={classNames(\"chat-input-container\")}\n >\n <div className='context-container'>\n <DatabaseButton app={app} />\n <AttachFileButton onFileUploaded={handleFileUpload} notebookTracker={notebookTracker} />\n <button\n className=\"context-button\"\n onClick={() => {\n setDropdownVisible(true);\n setDropdownFilter('');\n setIsDropdownFromButton(true);\n textAreaRef.current?.focus();\n }}\n >\n @ Add Context\n </button>\n {additionalContext.map((context, index) => (\n <SelectedContextContainer\n key={`${context.type}-${context.value}-${index}`}\n title={context.display || context.value}\n type={context.type}\n onRemove={() => setAdditionalContext(additionalContext.filter((_, i) => i !== index))}\n notebookTracker={notebookTracker}\n activeCellID={activeCellID}\n />\n ))}\n </div>\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 disabled={agentExecutionStatus === 'working' || agentExecutionStatus === 'stopping'}\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, mapAdditionalContext())\n\n // Reset\n setInput('')\n setAdditionalContext([])\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={getExpandedVarialbes()}\n onSelect={handleOptionSelect}\n filterText={dropdownFilter}\n isDropdownFromButton={isDropdownFromButton}\n onFilterChange={setDropdownFilter}\n onClose={handleDropdownClose}\n />\n )}\n </div>\n\n {isEditing &&\n <div className=\"message-edit-buttons\">\n <button onClick={() => onSave(input, undefined, mapAdditionalContext())}>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 { 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 '../../../../style/ChatMessage.css';\nimport '../../../../style/MarkdownMessage.css'\nimport { AgentResponse } from '../../../websockets/completions/CompletionModels';\nimport GetCellOutputToolUI from '../../../components/AgentComponents/GetCellOutputToolUI'\nimport AssumptionToolUI from '../../../components/AgentComponents/AssumptionToolUI';\nimport SelectedContextContainer from '../../../components/SelectedContextContainer';\nimport RunAllCellsToolUI from '../../../components/AgentComponents/RunAllCellsToolUI';\n\ninterface IChatMessageProps {\n app: JupyterFrontEnd;\n message: OpenAI.Chat.ChatCompletionMessageParam\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 isLastAiMessage: boolean\n isLastMessage: boolean\n operatingSystem: OperatingSystem\n previewAICode: () => void\n acceptAICode: () => void\n rejectAICode: () => void\n onUpdateMessage: (messageIndex: number, newContent: string, additionalContext?: Array<{ type: string, value: string }>) => void\n contextManager?: IContextManager\n codeReviewStatus: CodeReviewStatus\n setNextSteps: (nextSteps: string[]) => void\n agentModeEnabled: boolean\n additionalContext?: Array<{ type: string, value: string }>\n}\n\nconst ChatMessage: React.FC<IChatMessageProps> = ({\n app,\n message,\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 additionalContext,\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 const messageContent = getContentStringFromMessage(message);\n\n const handleEditClick = (): void => {\n setIsEditing(true);\n };\n\n const handleSave = (\n content: string,\n _index?: number,\n additionalContext?: Array<{ type: string, value: string }>\n ): void => {\n onUpdateMessage(messageIndex, content, additionalContext);\n setIsEditing(false);\n };\n\n const handleCancel = (): void => {\n setIsEditing(false);\n };\n\n if (\n isLastMessage && agentResponse?.type === 'finished_task' &&\n agentResponse.next_steps &&\n agentResponse.next_steps.length > 0\n ) {\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 app={app}\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 agentModeEnabled={false}\n />\n );\n }\n\n if (mitoAIConnectionError) {\n return (\n <div className={classNames(\n \"message\",\n )}>\n <AlertBlock\n content={message.content as string}\n mitoAIConnectionErrorType={mitoAIConnectionErrorType}\n />\n </div>\n )\n }\n\n // If the message is empty, don't render anything\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 codeSummary={agentResponse?.cell_update?.code_summary ?? \n (agentResponse?.type === 'run_all_cells' ? 'Running all cells' : undefined)}\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 {!agentModeEnabled && 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 {!agentModeEnabled && 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 {message.role === 'user' && additionalContext && additionalContext.length > 0 &&\n <>\n {additionalContext\n .filter(context => context.type !== 'active_cell') // Hide active cell context in chat messages\n .map((context, index) => (\n <SelectedContextContainer\n key={`${context.type}-${context.value}-${index}`}\n title={`${context.value}`}\n type={context.type}\n onRemove={() => { }} // Read-only in chat history\n />\n ))}\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 {agentResponse?.analysis_assumptions &&\n <AssumptionToolUI assumptions={agentResponse.analysis_assumptions} />\n }\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 {agentResponse?.type === 'run_all_cells' && agentModeEnabled &&\n <RunAllCellsToolUI />\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.currentWidget, 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 from 'react';\nimport TextButton from '../../../components/TextButton';\nimport { logEvent } from '../../../restAPI/RestAPI';\nimport { ChatHistoryManager } from '../ChatHistoryManager';\nimport '../../../../style/RevertQuestionnaire.css';\n\ninterface RevertQuestionnaireProps {\n onDestroy: () => void;\n getDuplicateChatHistoryManager: () => ChatHistoryManager;\n setChatHistoryManager: (chatHistoryManager: ChatHistoryManager) => void;\n}\n\nconst RevertQuestionnaire: React.FC<RevertQuestionnaireProps> = ({ onDestroy, getDuplicateChatHistoryManager, setChatHistoryManager }) => {\n const CHOICES = [\n 'AI misunderstood me',\n 'Code was buggy/incorrect',\n 'Code was low quality',\n 'I changed my mind about what I wanted'\n ]\n\n const handleButtonClick = (choice: string): void => {\n // Log the event\n void logEvent('mito_ai_revert_questionnaire_choice', { 'reason': choice });\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 // Destroy the component (set showRevertQuestionnaire to false)\n onDestroy();\n };\n\n return (\n <div className='message revert-questionnaire-message'>\n <p className='revert-questionnaire-message-text'>What went wrong?</p>\n {CHOICES.map((choice) => (\n <>\n <TextButton\n text={choice}\n onClick={() => handleButtonClick(choice)}\n title={choice}\n variant='gray'\n width='block'\n textAlign='left'\n className=\"revert-questionnaire-button\"\n />\n </>\n ))}\n </div>\n );\n};\n\nexport default RevertQuestionnaire;","/*\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\n// External libraries\nimport { Compartment, StateEffect } from '@codemirror/state';\nimport OpenAI from \"openai\";\nimport React, { useEffect, useRef, useState } from 'react';\n\n// JupyterLab imports\nimport { JupyterFrontEnd } from '@jupyterlab/application';\nimport { NotebookPanel } from '@jupyterlab/notebook';\nimport { CodeCell } from '@jupyterlab/cells';\nimport { CodeMirrorEditor } from '@jupyterlab/codemirror';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { addIcon, historyIcon, deleteIcon, settingsIcon } from '@jupyterlab/ui-components';\nimport { ReadonlyPartialJSONObject, UUID } from '@lumino/coreutils';\n\n// Internal imports - Commands\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';\n\n// Internal imports - Components\nimport GroupedErrorsAndFixes from '../../components/AgentComponents/ErrorFixupToolUI';\nimport DropdownMenu from '../../components/DropdownMenu';\nimport IconButton from '../../components/IconButton';\nimport LoadingCircle from '../../components/LoadingCircle';\n\nimport { DEFAULT_MODEL } from '../../components/ModelSelector';\nimport ModelSelector from '../../components/ModelSelector';\nimport NextStepsPills from '../../components/NextStepsPills';\nimport TextAndIconButton from '../../components/TextAndIconButton';\nimport ToggleButton from '../../components/ToggleButton';\n\n// Internal imports - Icons\nimport { OpenIndicatorLabIcon } from '../../icons';\nimport MitoLogo from '../../icons/MitoLogo';\nimport UndoIcon from '../../icons/UndoIcon';\n\n// Internal imports - Utils\nimport { acceptAndRunCellUpdate, retryIfExecutionError, runAllCells } from '../../utils/agentActions';\nimport { checkForBlacklistedWords } from '../../utils/blacklistedWords';\nimport { createCheckpoint, restoreCheckpoint } from '../../utils/checkpoint';\nimport { processChatHistoryForErrorGrouping, GroupedErrorMessages } from '../../utils/chatHistory';\nimport { getCodeDiffsAndUnifiedCodeString, UnifiedDiffLine } from '../../utils/codeDiff';\nimport {\n getActiveCellID,\n getCellByID,\n getCellCodeByID,\n highlightCodeCell,\n scrollToCell,\n setActiveCellByID,\n setActiveCellByIDInNotebookPanel,\n writeCodeToCellByID,\n} from '../../utils/notebook';\nimport { getActiveCellOutput } from '../../utils/cellOutput';\nimport { scrollToDiv } from '../../utils/scroll';\nimport { getCodeBlockFromMessage, removeMarkdownCodeFormatting } from '../../utils/strings';\nimport { OperatingSystem } from '../../utils/user';\nimport { waitForNotebookReady } from '../../utils/waitForNotebookReady';\nimport { getBase64EncodedCellOutputInNotebook } from './utils';\n\n// Internal imports - Websockets\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';\n\n// Internal imports - Extensions\nimport { IContextManager } from '../ContextManager/ContextManagerPlugin';\nimport { COMMAND_MITO_AI_SETTINGS } from '../SettingsManager/SettingsManagerPlugin';\nimport { captureCompletionRequest } from '../SettingsManager/profiler/ProfilerPage';\n\n// Internal imports - Chat components\nimport CTACarousel from './CTACarousel';\nimport { codeDiffStripesExtension } from './CodeDiffDisplay';\nimport { getFirstMessageFromCookie } from './FirstMessage';\nimport ChatInput from './ChatMessage/ChatInput';\nimport ChatMessage from './ChatMessage/ChatMessage';\nimport RevertQuestionnaire from './ChatMessage/RevertQuestionnaire';\nimport ScrollableSuggestions from './ChatMessage/ScrollableSuggestions';\nimport { ChatHistoryManager, IDisplayOptimizedChatItem, PromptType } from './ChatHistoryManager';\n\n// Styles\nimport '../../../style/button.css';\nimport '../../../style/ChatTaskpane.css';\nimport '../../../style/TextButton.css';\nimport LoadingDots from '../../components/LoadingDots';\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'\nexport type AgentExecutionStatus = 'working' | 'stopping' | 'idle'\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<AgentExecutionStatus>('idle')\n const agentTargetNotebookPanelRef = useRef<NotebookPanel | null>(null)\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 // Track if revert questionnaire should be shown\n const [showRevertQuestionnaire, setShowRevertQuestionnaire] = 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\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 // Get rid of the revert questionaire if its open\n setShowRevertQuestionnaire(false);\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 // Check if user is in agent mode and switch to chat mode if needed\n if (agentModeEnabledRef.current) {\n await startNewChat();\n setAgentModeEnabled(false);\n // Clear agent checkpoint when switching modes\n setHasCheckpoint(false);\n }\n\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 if (agentTargetNotebookPanelRef.current === null) {\n return\n }\n\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(\n activeThreadIdRef.current, \n errorMessage,\n agentTargetNotebookPanelRef.current\n )\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 sendCellIDOutput: string | undefined = undefined,\n additionalContext?: Array<{type: string, value: string}>\n ): Promise<void> => {\n\n // Step 0: reset the state for a new message\n resetForNewMessage()\n\n const agentTargetNotebookPanel = agentTargetNotebookPanelRef.current\n\n if (agentTargetNotebookPanel === null) {\n return\n }\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(\n activeThreadIdRef.current, \n agentTargetNotebookPanel,\n input,\n additionalContext\n )\n if (messageIndex !== undefined) {\n agentExecutionMetadata.index = messageIndex\n }\n\n agentExecutionMetadata.base64EncodedActiveCellOutput = await getBase64EncodedCellOutputInNotebook(agentTargetNotebookPanel, sendCellIDOutput)\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, additionalContext?: Array<{type: string, value: 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 additionalContext\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 additionalContext?: Array<{type: string, value: string}>\n ): Promise<void> => {\n\n // Then send the new message to replace it\n if (agentModeEnabled) {\n await startAgentExecution(newContent, messageIndex, additionalContext)\n } else {\n await sendChatInputMessage(newContent, messageIndex, additionalContext)\n }\n };\n\n const _sendMessageAndSaveResponse = async (\n completionRequest: ICompletionRequest, newChatHistoryManager: ChatHistoryManager\n ): Promise<boolean> => {\n // Capture the completion request for debugging\n captureCompletionRequest(completionRequest);\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, additionalContext?: Array<{type: string, value: string}>): Promise<void> => {\n agentTargetNotebookPanelRef.current = notebookTracker.currentWidget\n\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 sendCellIDOutput: string | undefined = undefined\n\n // Loop through each message in the plan and send it to the AI\n while (!isAgentFinished && agentExecutionDepth <= AGENT_EXECUTION_DEPTH_LIMIT) {\n\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, undefined, additionalContext)\n } else {\n await sendAgentExecutionMessage('', undefined, sendCellIDOutput)\n // Reset flag back to false until the agent requests the active cell output again\n sendCellIDOutput = undefined\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 (agentTargetNotebookPanelRef.current === null) {\n // If the agent target notebook panel is not set, we don't know where to run the code so we stop\n isAgentFinished = true\n break;\n }\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 agentTargetNotebookPanelRef.current,\n )\n\n const status = await retryIfExecutionError(\n agentTargetNotebookPanelRef.current,\n app,\n sendAgentSmartDebugMessage,\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' && agentResponse.get_cell_output_cell_id !== null && agentResponse.get_cell_output_cell_id !== undefined) {\n // Mark that we should send the cell output to the agent \n // in the next loop iteration\n sendCellIDOutput = agentResponse.get_cell_output_cell_id\n }\n\n if (agentResponse.type === 'run_all_cells') {\n const result = await runAllCells(app, agentTargetNotebookPanelRef.current)\n \n // If run_all_cells resulted in an error, handle it through the error fixup process\n if (!result.success && result.errorMessage && result.errorCellId) {\n // Set the error cell as active so the error retry logic can work with it\n setActiveCellByIDInNotebookPanel(agentTargetNotebookPanelRef.current, result.errorCellId)\n \n const status = await retryIfExecutionError(\n agentTargetNotebookPanelRef.current,\n app,\n sendAgentSmartDebugMessage,\n shouldContinueAgentExecution,\n finalizeAgentStop,\n chatHistoryManagerRef\n )\n\n if (status === 'interupted') {\n break;\n }\n\n if (status === 'failure') {\n addAIMessageFromResponseAndUpdateState(\n \"I apologize, but I encountered an error while running all cells and was unable to fix it after multiple attempts. You may want to check the notebook for errors.\",\n 'agent:execution',\n chatHistoryManager\n )\n break;\n }\n }\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 // 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.currentWidget, 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 setShowRevertQuestionnaire(false);\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 // 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 let processedDisplayOptimizedChatHistory: (IDisplayOptimizedChatItem | GroupedErrorMessages)[] = []\n \n // In agent mode, we group consecutive error messages together. \n // In chat mode, we display messages individually as they were sent\n if (agentModeEnabled) {\n processedDisplayOptimizedChatHistory = processChatHistoryForErrorGrouping(\n chatHistoryManager.getDisplayOptimizedHistory()\n );\n } else {\n processedDisplayOptimizedChatHistory = chatHistoryManager.getDisplayOptimizedHistory()\n }\n\n // Type guard function to check if an item is GroupedErrorMessages\n const isGroupedErrorMessages = (item: GroupedErrorMessages | IDisplayOptimizedChatItem): item is GroupedErrorMessages => {\n return Array.isArray(item);\n };\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 {processedDisplayOptimizedChatHistory.map((displayOptimizedChat, index) => {\n if (isGroupedErrorMessages(displayOptimizedChat)) {\n return (\n <GroupedErrorsAndFixes\n key={index}\n messages={displayOptimizedChat}\n renderMimeRegistry={renderMimeRegistry}\n />\n )\n } else {\n return (\n <ChatMessage\n key={index}\n message={displayOptimizedChat.message}\n promptType={displayOptimizedChat.promptType}\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 additionalContext={displayOptimizedChat.additionalContext}\n />\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={() => {\n void restoreCheckpoint(app, notebookTracker, setHasCheckpoint)\n setDisplayedNextStepsIfAvailable(false)\n setHasCheckpoint(false)\n setShowRevertQuestionnaire(true)\n scrollToDiv(chatMessagesRef);\n }}\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 {/* Revert questionnaire - shows when user clicks revert button */}\n {showRevertQuestionnaire && (\n <RevertQuestionnaire \n onDestroy={() => setShowRevertQuestionnaire(false)} \n getDuplicateChatHistoryManager={getDuplicateChatHistoryManager}\n setChatHistoryManager={setChatHistoryManager}\n />\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 app={app}\n initialContent={''}\n placeholder={\n agentExecutionStatus === 'working' ? `Agent is editing ${agentTargetNotebookPanelRef.current?.context.path.split('/').pop()}` :\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 agentModeEnabled={agentModeEnabled}\n agentExecutionStatus={agentExecutionStatus}\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 setShowRevertQuestionnaire(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, 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 { ISettingRegistry } from \"@jupyterlab/settingregistry\";\nimport { IDocumentManager } from \"@jupyterlab/docmanager\";\n\n// Document manager plugin ID\nconst DOCMANAGER_PLUGIN_ID = '@jupyterlab/docmanager-extension:plugin';\nconst NOTEBOOK_PLUGIN_ID = '@jupyterlab/notebook-extension:tracker'\n\n\n// Set renameUntitledFileOnSave to false when the extension loads\nexport const setRenameUntitledFileOnSave = async (settingRegistry: ISettingRegistry, _documentManager: IDocumentManager): Promise<void> => {\n // Note we don't use the documentManager, but we require it as a parameter to make sure\n // that we leave the documentManager as a required token in the AiChatPlugin.ts file.\n \n try {\n await settingRegistry.set(DOCMANAGER_PLUGIN_ID, 'renameUntitledFileOnSave', false);\n } catch (error) {\n console.error('[mito-ai jupyter settings manager] Failed to set renameUntitledFileOnSave setting:', error);\n }\n};\n\n\nexport const setDefaultWindowingMode = async (settingRegistry: ISettingRegistry): Promise<void> => {\n\n try {\n await settingRegistry.set(NOTEBOOK_PLUGIN_ID, 'windowingMode', 'defer');\n } catch (error) {\n console.log('[mito-ai jupyter settings manager] Failed to set windowingMode to defer', error);\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 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 { INotebookTracker, NotebookPanel } from \"@jupyterlab/notebook\"\nimport { getCellIndexByIDInNotebookPanel } from \"../../utils/notebook\"\nimport { getCellOutputByIDInNotebook } from \"../../utils/cellOutput\"\nimport { logEvent } from \"../../restAPI/RestAPI\"\n\nexport const getBase64EncodedCellOutput = async (notebookTracker: INotebookTracker, cellID: string | undefined): Promise<string | undefined> => {\n const notebookPanel = notebookTracker.currentWidget\n return getBase64EncodedCellOutputInNotebook(notebookPanel, cellID)\n}\n\nexport const getBase64EncodedCellOutputInNotebook = async (notebookPanel: NotebookPanel | null, cellID: string | undefined): Promise<string | undefined> => {\n if (cellID === undefined || notebookPanel === null) {\n return undefined\n }\n\n const cellIndex = getCellIndexByIDInNotebookPanel(notebookPanel, cellID)\n if (cellIndex === undefined) {\n // Log that the cell id is not part of the notebook\n console.log(`Cell with id ${cellID} not found in notebook ${notebookPanel.context.path}`)\n void logEvent('get_cell_output_requested_non_existent_cell')\n return undefined\n } \n \n const activeCellOutput = await getCellOutputByIDInNotebook(notebookPanel, cellID)\n if (activeCellOutput !== undefined) {\n return activeCellOutput\n } \n \n return undefined\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 { AgentResponse } from '../../websockets/completions/CompletionModels';\n\n/**\n * Validates and corrects an AgentResponse to ensure it adheres to the expected format.\n * Handles common mistakes like string instead of array, missing fields, etc.\n */\nexport function validateAndCorrectAgentResponse(agentResponse: AgentResponse): AgentResponse {\n // Create a copy to avoid mutating the original\n const correctedResponse: AgentResponse = { ...agentResponse };\n \n // Ensure type is valid. Default to finished_task if not valid.\n const validTypes = ['cell_update', 'get_cell_output', 'run_all_cells', 'finished_task'];\n correctedResponse.type = (correctedResponse.type && validTypes.includes(correctedResponse.type)) \n ? correctedResponse.type \n : 'finished_task';\n \n // Ensure message is a string. Default to empty string if not valid.\n if (!correctedResponse.message || typeof correctedResponse.message !== 'string') {\n correctedResponse.message = '';\n }\n \n // Correct get_cell_output_cell_id if present\n const getCellOutputCellIdType = typeof correctedResponse.get_cell_output_cell_id;\n correctedResponse.get_cell_output_cell_id = getCellOutputCellIdType === 'string' ? correctedResponse.get_cell_output_cell_id : undefined;\n \n // Correct next_steps - handle string to array conversion\n if (correctedResponse.next_steps !== undefined && correctedResponse.next_steps !== null) {\n correctedResponse.next_steps = correctStringArray(correctedResponse.next_steps);\n }\n \n // Correct analysis_assumptions - handle string to array conversion\n if (correctedResponse.analysis_assumptions !== undefined && correctedResponse.analysis_assumptions !== null) {\n correctedResponse.analysis_assumptions = correctStringArray(correctedResponse.analysis_assumptions);\n }\n\n // For now we don't validate the cell_update object itself, as this is more complex and has \n // not caused issues thus far.\n \n return correctedResponse;\n}\n\n\n/**\n * Corrects a value to be a string array, handling various input formats.\n * Handles cases where the AI returns a string instead of an array of strings.\n */\nfunction correctStringArray(value: any): string[] | null {\n // If it's already a valid array of strings, return it\n if (Array.isArray(value)) {\n return value \n }\n\n if (typeof value === 'string') {\n return [value];\n }\n \n return null;\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 { AppDeployWebsocketClient } from '../../websockets/appDeploy/appDeployWebsocketClient';\n\n/**\n * The token for the AppDeploy service.\n */\nexport const IAppDeployService = new Token<IAppDeployService>(\n 'mito-ai:IAppDeployService',\n 'Token for the AppDeploy service that provides access to the websocket client'\n);\n\n/**\n * Interface for the AppDeploy service.\n */\nexport interface IAppDeployService {\n /**\n * The websocket client for deploying apps.\n */\n readonly client: AppDeployWebsocketClient;\n}\n\n/**\n * Implementation of the AppDeploy service.\n */\nclass AppDeployService implements IAppDeployService {\n /**\n * The websocket client for deploying apps.\n */\n readonly client: AppDeployWebsocketClient;\n\n /**\n * Create a new AppDeploy service.\n */\n constructor(app: JupyterFrontEnd) {\n // Create the websocket client with the app's server settings\n this.client = new AppDeployWebsocketClient({\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 AppDeploy 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 AppDeploy plugin that provides the websocket client.\n */\nconst AppDeployPlugin: JupyterFrontEndPlugin<IAppDeployService> = {\n id: 'mito-ai:app-deploy',\n autoStart: true,\n provides: IAppDeployService,\n activate: (app: JupyterFrontEnd): IAppDeployService => {\n console.log('mito-ai: AppDeployPlugin activated');\n return new AppDeployService(app);\n }\n};\n\nexport default AppDeployPlugin; ","/*\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';\nimport { checkAppStatus } from '../AppManager/CheckAppStatusAPI';\nimport type { IAppManagerService } from '../AppManager/ManageAppsPlugin';\n\nexport const deployAppNotification = (url: string, appManagerService: IAppManagerService): 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 let retryCount = 5;\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 if (isLastStep) {\n const checkUrlAndUpdate = async (): Promise<void> => {\n if (retryCount < 0) {\n console.log(\"Retries done\")\n Notification.update({\n id: notificationId,\n message: \"Unable to deploy. Your app is not reachable\",\n type: 'warning',\n autoClose: false\n });\n return;\n }\n \n try {\n console.log(\"Awaiting response\")\n const urlIsUp = await checkAppStatus(url, appManagerService);\n console.log(`App status check result for ${url}: ${urlIsUp}`);\n\n if (urlIsUp) {\n // Update notification with the button\n Notification.update({\n id: notificationId,\n message: deploymentSteps[i],\n type: 'default',\n autoClose: false,\n actions: [\n {\n label: \"Launch Application Now\",\n displayType: 'accent',\n callback: () => {\n window.open(url, '_blank');\n }\n }\n ]\n });\n } else {\n // Retry after 30s\n console.log(\"In retry for url to be up\")\n retryCount = retryCount - 1;\n setTimeout(() => void checkUrlAndUpdate(), 30000);\n }\n } catch (error) {\n // Retry after 30s\n console.error(\"Error checking app status:\", error);\n retryCount = retryCount - 1;\n setTimeout(() => void checkUrlAndUpdate(), 30000);\n }\n };\n\n void checkUrlAndUpdate();\n } else{\n // Regular intermediate step\n Notification.update({\n id: notificationId,\n message: deploymentSteps[i],\n type: 'in-progress',\n autoClose: false\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 { Notification } from '@jupyterlab/apputils';\nimport { generateRequirementsTxt } from './requirementsUtils';\nimport { saveFileWithKernel } from './fileUtils';\nimport { IAppDeployService } from './AppDeployPlugin';\nimport { IAppManagerService } from '../AppManager/ManageAppsPlugin';\nimport { UUID } from '@lumino/coreutils';\nimport { deployAppNotification } from './DeployAppNotification';\nimport { IDeployAppReply, IDeployAppRequest } from '../../websockets/appDeploy/appDeployModels';\nimport {getJWTToken } from './auth';\nimport { showAuthenticationPopup } from './authPopupUtils';\n\n\n/* \nThis function generates the requirements.txt file needed to host the streamlit app, \nand deploys it! \n*/\nexport const deployStreamlitApp = async (\n notebookTracker: INotebookTracker,\n appDeployService: IAppDeployService,\n appManagerService: IAppManagerService,\n): Promise<void> => {\n\n let jwtToken = await getJWTToken();\n if (!jwtToken) {\n // No token found, show authentication popup\n console.log('User not authenticated, redirected to signup');\n try {\n const user = await showAuthenticationPopup();\n console.log('User authenticated successfully:', user);\n // Try to get the JWT token again after successful authentication\n jwtToken = await getJWTToken();\n if (!jwtToken) {\n console.error('JWT token still not available after authentication');\n Notification.emit('Authentication failed - JWT token not found', 'error', {\n autoClose: false\n });\n return;\n }\n } catch (error) {\n console.log('Authentication cancelled or failed:', error);\n return; // Exit early if authentication was cancelled\n }\n }\n\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\n // Build the 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\n // After building the files, we need to send a request to the backend to deploy the app\n try {\n console.log(\"Sending request to deploy the app\");\n \n // Use the JWT token that was already obtained or refreshed above\n const response: IDeployAppReply = await appDeployService.client.sendMessage<IDeployAppRequest, IDeployAppReply>({\n type: 'deploy-app',\n message_id: UUID.uuid4(),\n notebook_path: notebookPath,\n jwt_token: jwtToken\n });\n\n if (response.error) {\n Notification.emit(response.error.title, 'error', {\n autoClose: false\n });\n } else {\n console.log(\"App deployment response:\", response);\n const url = response.url;\n deployAppNotification(url, appManagerService);\n }\n } catch (error) {\n // TODO: Do something with the error\n console.error(\"Error deploying app:\", 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\n// auth-popup.tsx - Simple authentication popup with CSS-based requirements\nimport React from 'react';\nimport { Authenticator } from '@aws-amplify/ui-react';\nimport '@aws-amplify/ui-react/styles.css';\nimport '../../../style/ConnectionForm.css';\nimport '../../../style/button.css';\nimport '../../../style/AuthPopup.css';\n\ninterface AuthPopupProps {\n isOpen: boolean;\n onClose: () => void;\n onSuccess: (user: any) => void;\n}\n\nexport const AuthPopup: React.FC<AuthPopupProps> = ({\n isOpen,\n onClose,\n onSuccess\n}) => {\n // Track if we've already called onSuccess to prevent infinite loops\n const hasCalledOnSuccess = React.useRef(false);\n // Track if we should show progress bar\n const [showProgress, setShowProgress] = React.useState(false);\n\n // Cleanup on unmount\n React.useEffect(() => {\n return () => {\n setShowProgress(false);\n };\n }, []);\n\n if (!isOpen) return null;\n\n return (\n <div className=\"modal-overlay\">\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <h3>Sign In / Sign Up</h3>\n <button\n onClick={onClose}\n className=\"modal-close-button\"\n title=\"Close\"\n >\n ×\n </button>\n </div>\n\n <Authenticator\n loginMechanisms={['email']}\n signUpAttributes={['name', 'email']}\n formFields={{\n signUp: {\n name: {\n order: 1,\n placeholder: 'Enter your full name',\n label: 'Full Name *',\n required: true\n },\n email: {\n order: 2,\n placeholder: 'Enter your email address',\n label: 'Email *'\n },\n password: {\n order: 3,\n placeholder: 'Enter your password',\n label: 'Password *',\n required: true\n },\n confirm_password: {\n order: 4,\n placeholder: 'Confirm your password',\n label: 'Confirm Password *'\n }\n }\n }}\n >\n {({ user }) => {\n // Call onSuccess when user is authenticated, but only once and with delay\n if (user && !hasCalledOnSuccess.current) {\n // Show the progress bar\n setShowProgress(true);\n\n // Give users time to see the success message before calling onSuccess\n setTimeout(() => {\n if (!hasCalledOnSuccess.current) {\n hasCalledOnSuccess.current = true;\n onSuccess(user);\n }\n }, 3000); // 3 second delay\n }\n\n // If user is signed in, show the welcome message\n if (user) {\n return (\n <div className=\"welcome-message-container\">\n <p className=\"welcome-message-title\">\n Welcome to mito!\n </p>\n\n <p className=\"welcome-message-description\">\n You're all set to deploy your app.\n </p>\n\n {/* Progress bar container */}\n {showProgress && (\n <div className=\"progress-bar-container\">\n {/* Progress bar fill with CSS animation */}\n <div className=\"progress-bar-fill\" />\n </div>\n )}\n\n <p className=\"progress-bar-timer\">\n Closing automatically in a few seconds...\n </p>\n </div>\n );\n }\n\n // If user is not signed in, don't render anything here\n return <div style={{ display: 'none' }} />;\n }}\n </Authenticator>\n\n {/* Password Requirements Display - shown via CSS when sign-up tab is active */}\n <div className=\"password-requirements\">\n <p>Password Requirements:</p>\n <ul>\n <li>At least 8 characters long</li>\n <li>Contains at least one uppercase letter</li>\n <li>Contains at least one lowercase letter</li>\n <li>Contains at least one number</li>\n <li>Contains at least one special character</li>\n </ul>\n </div>\n </div>\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 { fetchAuthSession, signOut } from 'aws-amplify/auth';\nimport { configureAmplify } from './aws-config';\n\n// Ensure Amplify is configured before any auth operations\nconfigureAmplify();\n\n/**\n * Get JWT token from cookies\n */\n\nexport const getJWTToken = async (): Promise<string> => {\n try {\n const session = await fetchAuthSession();\n const accessToken = session.tokens?.accessToken?.toString();\n return accessToken || '';\n } catch (error) {\n console.error('Error getting JWT token:', error);\n return '';\n }\n};\n\n\n/**\n * Get authentication headers for API requests\n */\nexport const getAuthHeaders = async (): Promise<Record<string, string>> => {\n const token = await getJWTToken();\n if (token) {\n return {\n 'Authorization': `Bearer ${token}`\n };\n }\n return {};\n};\n\n/**\n * Logout user and clear all AWS Amplify/Cognito localStorage items\n */\nexport const logoutAndClearJWTTokens = async (): Promise<void> => {\n try {\n // Sign out from AWS Cognito using Amplify\n await signOut();\n console.log('User logged out successfully');\n } catch (error) {\n console.error('Error during logout:', error);\n throw error;\n } finally{\n // Remove all keys that start with common Amplify prefixes\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key && (\n key.startsWith('CognitoIdentityServiceProvider.')\n )) {\n keysToRemove.push(key);\n }\n }\n // Remove all identified keys\n keysToRemove.forEach(key => {\n localStorage.removeItem(key);\n });\n console.log('Auth tokens cleared successfully');\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 { AuthPopup } from './auth-popup-deploy';\n\n/**\n * Shows an authentication popup and returns a promise that resolves when authentication is successful\n */\nexport const showAuthenticationPopup = (): Promise<any> => {\n return new Promise<any>((resolve, reject) => {\n // Create a container for the popup\n const popupContainer = document.createElement('div');\n popupContainer.id = 'auth-popup-container';\n document.body.appendChild(popupContainer);\n\n // Create root for React 18\n const root = createRoot(popupContainer);\n\n const handleSuccess = (user: any): void => {\n // Clean up the popup\n root.unmount();\n document.body.removeChild(popupContainer);\n resolve(user);\n };\n\n const handleClose = (): void => {\n // Clean up the popup\n root.unmount();\n document.body.removeChild(popupContainer);\n reject(new Error('Authentication cancelled'));\n };\n\n // Render the AuthPopup\n root.render(\n <AuthPopup\n isOpen={true}\n onSuccess={handleSuccess}\n onClose={handleClose}\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 { Amplify } from 'aws-amplify';\n\nconst userPoolIdDev = 'us-east-1_Kk0f9mOfx'\nconst userPoolClientIdDev = '6ara3u3l8sss738hrhbq1qtiqf'\n\n// TODO: modify to prod user ID and client ID on after creating teh cognito resources in prod\nconst userPoolId = userPoolIdDev\nconst userPoolClientId = userPoolClientIdDev\n\nexport const configureAmplify = (): void => {\n Amplify.configure({\n Auth: {\n Cognito: {\n userPoolId: userPoolId,\n userPoolClientId: userPoolClientId,\n\n loginWith: {\n email: true,\n username: false,\n }\n },\n }\n });\n\n console.log('Amplify configuration loaded successfully');\n};\n\n// Configure immediately when this module is imported\nconfigureAmplify();\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 const source = cell.model.sharedModel.source;\n // Filter out lines that start with shell commands\n const filteredLines = source.split('\\n').filter(line => {\n const trimmed = line.trim();\n return !trimmed.startsWith('!') && !trimmed.startsWith('%');\n });\n\n if (filteredLines.length > 0) {\n codeContent += filteredLines.join('\\n') + '\\n\\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//app-list.tsx\nimport * as React from 'react';\nimport { copyIcon } from '@jupyterlab/ui-components';\nimport { logoutAndClearJWTTokens } from '../AppDeploy/auth';\nimport { fetchUserApps, GetAppsResponse, AppMetadata, isGetAppsSuccess, AppStatus } from './ListAppsAPI';\nimport { IAppManagerService } from './ManageAppsPlugin';\nimport '../../../style/AppsList.css';\n\n// Add props interface to receive the appManagerService\ninterface AppsListProps {\n appManagerService: IAppManagerService;\n}\n\nexport const AppsList: React.FC<AppsListProps> = ({ appManagerService }) => {\n const [apps, setApps] = React.useState<AppMetadata[]>([]);\n const [loading, setLoading] = React.useState<boolean>(true);\n const [error, setError] = React.useState<string | null>(null);\n\n // Fetch apps on component mount\n React.useEffect(() => {\n const loadApps = async (): Promise<void> => {\n try {\n console.log('[AppsList] Starting to load apps...');\n setLoading(true);\n setError(null);\n\n console.log('[AppsList] Calling fetchUserApps...');\n const response: GetAppsResponse = await fetchUserApps(appManagerService);\n console.log('[AppsList] fetchUserApps response:', response);\n\n if (isGetAppsSuccess(response)) {\n setApps(response.apps);\n } else {\n setError(response.errorMessage || 'Failed to load apps');\n setApps([]);\n }\n } catch (err) {\n console.error('[AppsList] Error loading apps:', err);\n setError(err instanceof Error ? err.message : 'An unexpected error occurred');\n setApps([]);\n } finally {\n setLoading(false);\n }\n };\n\n console.log('[AppsList] Component mounted, calling loadApps...');\n void loadApps();\n }, [appManagerService]);\n\n const refreshApps = async (): Promise<void> => {\n const response = await fetchUserApps(appManagerService);\n if (isGetAppsSuccess(response)) {\n setApps(response.apps);\n setError(null);\n } else {\n setError(response.errorMessage || 'Failed to refresh apps');\n }\n };\n\n const copyToClipboard = async (url: string, appName: string): Promise<void> => {\n try {\n await navigator.clipboard.writeText(url);\n console.log(`Copied URL for ${appName}: ${url}`);\n } catch (err) {\n console.error('Failed to copy URL:', err);\n // Fallback for older browsers\n const textArea = document.createElement('textarea');\n textArea.value = url;\n document.body.appendChild(textArea);\n textArea.select();\n document.execCommand('copy');\n document.body.removeChild(textArea);\n }\n };\n\n const getStatusColor = (status: AppStatus): string => {\n switch (status) {\n case 'active':\n return '#4caf50'; \n case 'error':\n return '#f44336';\n case 'deploying':\n return '#2196f3';\n case 'shut down':\n return '#9e9e9e';\n default:\n return '#9e9e9e';\n }\n };\n\n const getStatusText = (status: string): string => {\n return status.charAt(0).toUpperCase() + status.slice(1);\n };\n\n return (\n <div className=\"apps-list-container\">\n <div className=\"apps-list-header\">\n <h3 className=\"apps-list-title\">\n Your Apps\n </h3>\n <div className=\"apps-list-actions\">\n <button\n onClick={refreshApps}\n disabled={loading}\n className=\"apps-list-button\"\n title=\"Refresh apps\"\n >\n {loading ? 'Loading...' : 'Refresh'}\n </button>\n <button\n onClick={() => {\n console.log('Logout clicked');\n void logoutAndClearJWTTokens();\n }}\n className=\"apps-list-button\"\n title=\"Logout\"\n >\n Logout\n </button>\n </div>\n </div>\n\n {loading ? (\n <div className=\"apps-list-loading\">\n Loading apps...\n </div>\n ) : error ? (\n <div className=\"apps-list-error\">\n Error: {error}\n <div className=\"apps-list-error-actions\">\n <button\n onClick={refreshApps}\n className=\"apps-list-button primary\"\n >\n Try Again\n </button>\n </div>\n </div>\n ) : apps.length === 0 ? (\n <div className=\"apps-list-empty\">\n No apps deployed yet\n </div>\n ) : (\n <div>\n {apps.map((app) => (\n <div key={app.name} className=\"app-item\">\n <div className=\"app-item-header\">\n <div className=\"app-item-content\">\n <div className=\"app-item-name\">\n {app.name}\n </div>\n <div className=\"app-item-status-container\">\n <span\n className=\"app-item-status-indicator\"\n style={{ backgroundColor: getStatusColor(app.status) }}\n />\n <span className=\"app-item-status-text\">\n {getStatusText(app.status)}\n </span>\n </div>\n <div className=\"app-item-last-deployed\">\n Last Deployed at: {app.lastDeployedAt}\n </div>\n </div>\n </div>\n\n <div className=\"app-item-url-container\">\n <div className=\"app-item-url\">\n {app.url}\n </div>\n <button\n onClick={() => copyToClipboard(app.url, app.name)}\n className=\"app-item-copy-button\"\n title={`Copy URL for ${app.name}`}\n >\n <copyIcon.react\n width=\"14px\"\n height=\"14px\"\n fill=\"var(--jp-ui-font-color2)\"\n />\n </button>\n </div>\n </div>\n ))}\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 type { IAppManagerService } from './ManageAppsPlugin';\nimport type { ICheckAppStatusRequest, ICheckAppStatusReply } from '../../websockets/appManager/appManagerModels';\n\n/**\n * Check if an app URL is accessible through the backend.\n */\nexport const checkAppStatus = async (\n appUrl: string,\n appManagerService: IAppManagerService\n): Promise<boolean> => {\n try {\n\n // Create the request message with proper typing\n const request: ICheckAppStatusRequest = {\n type: 'check-app-status',\n app_url: appUrl\n };\n\n // Using websocket service\n const response: ICheckAppStatusReply = await appManagerService.client.sendMessage<ICheckAppStatusRequest, ICheckAppStatusReply>(request);\n\n // Check if the response indicates an error\n if (response.error) {\n console.error('Error checking app status:', response.error.title);\n return false;\n }\n\n console.log('App is accessible:', response.is_accessible);\n return response.is_accessible;\n\n } catch (error) {\n console.error('Error checking app status:', error);\n return 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\n// list-apps-api.ts - Backend API function\n\nimport { IManageAppReply, IManageAppRequest } from '../../websockets/appManager/appManagerModels';\nimport { getJWTToken } from '../AppDeploy/auth';\n\n// Import the actual service interface from the plugin\nimport { IAppManagerService } from './ManageAppsPlugin';\n\nexport type AppStatus = 'active' | 'deploying' | 'error' | 'shut down';\n\nexport interface AppMetadata {\n name: string;\n url: string;\n status: AppStatus;\n lastDeployedAt: string;\n}\n\nexport interface GetAppsSuccess {\n success: true;\n apps: AppMetadata[];\n}\n\nexport interface GetAppsFailure {\n success: false;\n errorMessage: string;\n}\n\nexport type GetAppsResponse = GetAppsSuccess | GetAppsFailure;\n\n// Type guards for working with the discriminated union\nexport const isGetAppsSuccess = (response: GetAppsResponse): response is GetAppsSuccess => {\n return response.success === true;\n};\n\nexport const isGetAppsFailure = (response: GetAppsResponse): response is GetAppsFailure => {\n return response.success === false;\n};\n\nexport const fetchUserApps = async (\n appManagerService: IAppManagerService\n): Promise<GetAppsResponse> => {\n try {\n const jwtToken = await getJWTToken();\n if (!jwtToken) {\n return {\n success: false,\n errorMessage: 'User not authenticated'\n };\n }\n\n // Create the request message with proper typing\n const request: IManageAppRequest = {\n type: 'manage-app',\n jwt_token: jwtToken\n };\n\n // Using websocket service with correct message structure and proper typing\n const response: IManageAppReply = await appManagerService.client.sendMessage<IManageAppRequest, IManageAppReply>(request);\n\n // Check if the response indicates an error\n if (response.error) {\n return {\n success: false,\n errorMessage: response.error.title || 'Failed to fetch apps'\n };\n }\n\n // Transform the response to match expected format\n const apps: AppMetadata[] = (response.apps || []).map(app => ({\n name: app.app_name,\n url: app.url,\n status: (app.status?.toLowerCase() as AppStatus),\n lastDeployedAt: app.last_deployed_at\n }));\n\n return {\n success: true,\n apps\n };\n\n } catch (error) {\n console.error('Error fetching apps:', error);\n return {\n success: false,\n errorMessage: error instanceof Error ? error.message : 'Failed to fetch apps'\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\n// ManageAppsPlugin.ts - Updated with IAppManagerService\nimport {\n JupyterFrontEnd,\n JupyterFrontEndPlugin\n} from '@jupyterlab/application';\nimport { ReactWidget } from '@jupyterlab/apputils';\nimport { Token } from '@lumino/coreutils';\nimport * as React from 'react';\nimport { AppsList } from './AppsList';\nimport { AppManagerWebsocketClient } from '../../websockets/appManager/appManagerWebsocketClient';\nimport { getSetting } from '../../restAPI/RestAPI';\n\n/**\n * The token for the AppManager service.\n */\nexport const IAppManagerService = new Token<IAppManagerService>(\n 'mito-ai:IAppManagerService',\n 'Token for the AppManager service that provides access to the websocket client'\n);\n\n/**\n * Interface for the AppManager service.\n */\nexport interface IAppManagerService {\n /**\n * The websocket client for app management.\n */\n readonly client: AppManagerWebsocketClient;\n}\n\n/**\n * Implementation of the AppManager service.\n */\nclass AppManagerService implements IAppManagerService {\n /**\n * The websocket client for app management.\n */\n readonly client: AppManagerWebsocketClient;\n\n /**\n * Create a new AppManager service.\n */\n constructor(app: JupyterFrontEnd) {\n // Create the websocket client with the app's server settings\n this.client = new AppManagerWebsocketClient({\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 AppManager 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\nclass ManageAppsWidget extends ReactWidget {\n private _appManagerService: IAppManagerService;\n\n constructor(appManagerService: IAppManagerService) {\n super();\n this._appManagerService = appManagerService;\n }\n\n render(): React.ReactElement {\n // Pass the appManagerService as a prop to the AppsList component\n return React.createElement(AppsList, {\n appManagerService: this._appManagerService\n });\n }\n}\n\nconst ManageAppsPlugin: JupyterFrontEndPlugin<IAppManagerService> = {\n id: 'manage-apps:manage-app-plugin',\n autoStart: true,\n provides: IAppManagerService,\n activate: (app: JupyterFrontEnd): IAppManagerService => {\n console.log('ManageApps plugin activated');\n\n // Create the AppManager service\n const appManagerService = new AppManagerService(app);\n\n // Create and add the ManageApps widget\n const widget = new ManageAppsWidget(appManagerService);\n widget.title.label = 'Manage apps';\n widget.id = 'manage-apps-widget';\n\n // For now, only show the manage apps widget if beta mode is enabled\n getSetting('beta_mode').then(value => {\n if (value === 'true') {\n // Add to right sidebar\n app.shell.add(widget, 'right');\n }\n }).catch(error => {\n console.error('Error checking beta mode:', error);\n });\n \n // Return the service so other plugins can use it\n return appManagerService;\n }\n};\n\nexport default ManageAppsPlugin;","/*\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 { ICommandPalette, ToolbarButton } from '@jupyterlab/apputils';\nimport { PathExt } from '@jupyterlab/coreutils';\nimport { MainAreaWidget } from '@jupyterlab/apputils';\nimport { Notification } from '@jupyterlab/apputils';\nimport { Widget } from '@lumino/widgets';\nimport { stopStreamlitPreview } from '../../restAPI/RestAPI';\nimport { deployStreamlitApp } from '../AppDeploy/DeployStreamlitApp';\nimport { IAppDeployService } from '../AppDeploy/AppDeployPlugin';\nimport { IAppManagerService } from '../AppManager/ManageAppsPlugin';\nimport { COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT } from '../../commands';\nimport { DeployLabIcon } from '../../icons';\nimport '../../../style/StreamlitPreviewPlugin.css';\nimport { startStreamlitPreviewAndNotify } from './utils';\n\n/**\n * Interface for the streamlit preview response.\n */\nexport interface StreamlitPreviewResponse {\n id: string;\n port: number;\n url: string;\n}\n\n/**\n * Simple HTML widget for displaying iframe content.\n */\nclass IFrameWidget extends Widget {\n constructor(url: string) {\n super();\n this.addClass('jp-iframe-widget');\n \n const iframe = document.createElement('iframe');\n iframe.src = url;\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n iframe.style.border = 'none';\n \n this.node.appendChild(iframe);\n }\n \n setUrl(url: string): void {\n const iframe = this.node.querySelector('iframe') as HTMLIFrameElement;\n if (iframe) {\n iframe.src = url;\n }\n }\n}\n\n/**\n * The streamlit preview plugin.\n */\nconst StreamlitPreviewPlugin: JupyterFrontEndPlugin<void> = {\n id: 'mito-ai:streamlit-preview',\n autoStart: true,\n requires: [INotebookTracker, ICommandPalette, IAppDeployService, IAppManagerService],\n activate: (\n app: JupyterFrontEnd,\n notebookTracker: INotebookTracker,\n palette: ICommandPalette,\n appDeployService: IAppDeployService,\n appManagerService: IAppManagerService\n ) => {\n console.log('mito-ai: StreamlitPreviewPlugin activated');\n\n // Add command to command palette\n app.commands.addCommand(COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT, {\n label: 'Preview as Streamlit',\n caption: 'Convert current notebook to Streamlit app and preview it',\n execute: async () => {\n await previewNotebookAsStreamlit(app, notebookTracker, appDeployService, appManagerService);\n }\n });\n\n // Add to command palette\n palette.addItem({\n command: COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT,\n category: 'Mito AI'\n });\n }\n};\n\n/**\n * Preview the current notebook as a Streamlit app.\n */\nasync function previewNotebookAsStreamlit(\n app: JupyterFrontEnd,\n notebookTracker: INotebookTracker,\n appDeployService: IAppDeployService,\n appManagerService: IAppManagerService,\n): Promise<void> {\n const notebookPanel = notebookTracker.currentWidget;\n if (!notebookPanel) {\n Notification.error('No notebook is currently active');\n return;\n }\n\n // First save the notebook to ensure the app is up to date\n await notebookPanel.context.save();\n\n const notebookPath = notebookPanel.context.path;\n const notebookName = PathExt.basename(notebookPath, '.ipynb');\n\n let globalNotificationId: string | undefined;\n\n try {\n const { previewData, notificationId } = await startStreamlitPreviewAndNotify(notebookPath);\n globalNotificationId = notificationId;\n\n // Create iframe widget\n // TODO: Instead of having this widget creation code in the previewNotebookAsStreamlit function, \n // I wonder if we can make it part of the StreamlitPreviewPlugin. What we want is the following: \n // a react component that takes the app, notebookTracker, and appDeployService as a prop and is \n // already set up with this layout. Each time it opens, we're just deciding which notebook to display.\n const iframeWidget = new IFrameWidget(previewData.url);\n\n // Create main area widget\n const widget = new MainAreaWidget({ content: iframeWidget });\n widget.title.label = `App Preview (${notebookName})`;\n widget.title.closable = true;\n\n // Add toolbar button to the MainAreaWidget's toolbar\n const deployButton = new ToolbarButton({\n className: 'text-button-mito-ai button-base button-small jp-ToolbarButton mito-deploy-button',\n onClick: (): void => {\n void deployStreamlitApp(notebookTracker, appDeployService, appManagerService);\n },\n tooltip: 'Deploy Streamlit App',\n label: 'Deploy App',\n icon: DeployLabIcon,\n iconClass: 'mito-ai-deploy-icon'\n });\n\n // Add toolbar button to the MainAreaWidget's toolbar\n const refreshButton = new ToolbarButton({\n className: 'text-button-mito-ai button-base button-small jp-ToolbarButton mito-deploy-button',\n onClick: (): void => {\n void startStreamlitPreviewAndNotify(notebookPath, true);\n },\n tooltip: 'Rebuild Streamlit App',\n label: 'Rebuild App',\n icon: DeployLabIcon,\n iconClass: 'mito-ai-deploy-icon'\n });\n \n // Insert the button into the toolbar\n widget.toolbar.insertAfter('spacer', 'refresh-app-button', refreshButton);\n widget.toolbar.insertAfter('spacer', 'deploy-app-button', deployButton);\n\n // Handle widget disposal\n widget.disposed.connect(() => {\n console.log('Widget disposed, stopping preview');\n void stopStreamlitPreview(previewData.id);\n });\n\n // Add widget to main area with split-right mode\n app.shell.add(widget, 'main', {\n mode: 'split-right',\n ref: notebookPanel.id\n });\n\n } catch (error) {\n console.error('Error starting streamlit preview:', error);\n \n // Update notification to error\n if (globalNotificationId) {\n Notification.update({\n id: globalNotificationId,\n message: `Failed to start preview: ${error instanceof Error ? error.message : 'Unknown error'}`,\n type: 'error',\n autoClose: false\n });\n }\n }\n}\n\nexport default StreamlitPreviewPlugin; \n","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { startStreamlitPreview } from \"../../restAPI/RestAPI\";\nimport { StreamlitPreviewResponse } from \"./StreamlitPreviewPlugin\";\nimport { Notification } from \"@jupyterlab/apputils\";\n\n\nexport const startStreamlitPreviewAndNotify = async (notebookPath: string, force_recreate: boolean = false): \n Promise<{ previewData: StreamlitPreviewResponse, notificationId: string }> => {\n \n \n const notificationId = Notification.emit(\n 'Building App Preview...',\n 'in-progress',\n { autoClose: false }\n );\n \n const previewData = await startStreamlitPreview(notebookPath, force_recreate);\n \n // Update notification to success\n Notification.update({\n id: notificationId,\n message: 'Streamlit preview started successfully!',\n type: 'default',\n autoClose: false\n });\n \n return { previewData, notificationId };\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, NotebookPanel } from '@jupyterlab/notebook';\nimport { Token } from '@lumino/coreutils';\nimport { fetchVariablesAndUpdateState, Variable } from './VariableInspector';\nimport { getFiles, File } from './FileInspector';\nimport { KernelMessage } from '@jupyterlab/services';\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 NotebookContext {\n variables: Variable[];\n files: File[];\n}\n\nexport interface IContextManager {\n // Get context for a specific notebook\n getNotebookContext(notebookId: string): NotebookContext | undefined;\n \n // Get context for the currently active notebook\n getActiveNotebookContext(): NotebookContext | undefined;\n \n // Update variables for a specific notebook\n updateNotebookVariables(notebookId: string, variables: Variable[]): void;\n \n // Update files for a specific notebook\n updateNotebookFiles(notebookId: string, files: File[]): void;\n}\n\nexport class ContextManager implements IContextManager {\n private notebookContexts: Map<string, NotebookContext> = new Map();\n private notebookTracker: INotebookTracker;\n\n constructor(app: JupyterFrontEnd, notebookTracker: INotebookTracker) {\n this.notebookTracker = notebookTracker;\n \n // Setup the kernel listener to update context as kernel messages are received\n this.setupKernelListener(app, notebookTracker); \n }\n\n getNotebookContext(notebookId: string): NotebookContext | undefined {\n return this.notebookContexts.get(notebookId);\n }\n\n getActiveNotebookContext(): NotebookContext | undefined {\n const activeNotebook = this.notebookTracker.currentWidget;\n if (!activeNotebook) return undefined;\n \n return this.getNotebookContext(activeNotebook.id);\n }\n\n updateNotebookVariables(notebookID: string, variables: Variable[]): void {\n const context = this.notebookContexts.get(notebookID) || { variables: [], files: [] };\n context.variables = variables;\n\n this.notebookContexts.set(notebookID, context);\n }\n\n updateNotebookFiles(notebookID: string, files: File[]): void {\n const context = this.notebookContexts.get(notebookID) || { variables: [], files: [] };\n context.files = files;\n this.notebookContexts.set(notebookID, context);\n }\n\n private _startKernelListener = async (app: JupyterFrontEnd, notebookPanel: NotebookPanel | null): Promise<void> => {\n if (notebookPanel === null) {\n return;\n }\n \n // Initialize context for this notebook if it doesn't exist\n if (!this.notebookContexts.has(notebookPanel.id)) {\n this.notebookContexts.set(notebookPanel.id, { variables: [], files: [] });\n }\n\n // As soon as the notebook is opened, fetch the files since these are not related to the kernel, \n // but to the notebook itself. This is useful so we can tell the agent which files are available \n // or let the user select a file from the dropdown menu before the kernel is started.\n // We use the notebookPanel.id to identify the notebook because we might need to access\n // NotebookContext even before the kernel is started. For example, to figure out \n // which files are available.\n const updatedFiles = await getFiles(app, notebookPanel);\n this.updateNotebookFiles(notebookPanel.id, updatedFiles);\n \n // Listen for kernel restart or shut down events and clear the variables for this notebook\n notebookPanel.context.sessionContext.statusChanged.connect((sender, status) => {\n if (status === 'restarting' || status === 'terminating' || status === 'unknown') {\n // Clear the variables for this specific notebook, but don't clear the files \n // as they have not changed.\n this.updateNotebookVariables(notebookPanel.id, []); // Clear variables for this specific notebook\n }\n });\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 // TODO: Eventually we should create a document manager listener so if the user uploads a new file\n // to jupyter, we can update the available files even if they have not executed a kernel message.\n if (msg.header.msg_type === 'execute_input') {\n\n void fetchVariablesAndUpdateState(notebookPanel, this.updateNotebookVariables.bind(this, notebookPanel.id));\n\n const updatedFiles = await getFiles(app, notebookPanel);\n this.updateNotebookFiles(notebookPanel.id, updatedFiles);\n }\n });\n }\n\n // Setup kernel execution listener\n private setupKernelListener(app: JupyterFrontEnd, notebookTracker: INotebookTracker): void {\n\n // Start the kernel listener for the currently active notebook\n const notebookPanel = notebookTracker.currentWidget;\n void this._startKernelListener(app, notebookPanel);\n\n // Update the kernel listener whenever the active notebook changes\n notebookTracker.currentChanged.connect(async (_, notebookPanel) => {\n void this._startKernelListener(app, notebookPanel);\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 { NotebookPanel } 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 getFiles = async (\n app: JupyterFrontEnd, \n notebookPanel: NotebookPanel, \n): Promise<File[]> => {\n \n const fileManager = app.serviceManager.contents;\n const relativeNotebookPath = notebookPanel.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 return files;\n } else {\n // If the contents are not a directory, set the files to an empty array\n return [];\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 value_str = str(value)\n if len(value_str) > 50:\n return value_str[:50] + \"...\"\n return value_str\n elif isinstance(value, str) and len(value) > 50:\n # Truncate strings longer than 50 characters\n return value[:50] + \"...\"\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 max_value_length = 4000 # This is roughly 1000 tokens in the LLM\n truncated_value = str(repr(v)) # Force to string\n\n if len(truncated_value) > max_value_length:\n split_length = max_value_length // 2\n truncated_value = truncated_value[:split_length] + '... <middle of value truncated> ...' + truncated_value[-split_length:]\n\n new_variable = {\n \"variable_name\": k,\n \"type\": str(type(v)),\n \"value\": truncated_value\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/* \nFunction to fetch variables and sync with the frontend\n*/\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';\nimport { IContextManager } from '../ContextManager/ContextManagerPlugin';\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, IContextManager],\n optional: [ILayoutRestorer],\n activate: _activate\n}\n\nfunction _activate(\n app: JupyterFrontEnd,\n palette: ICommandPalette,\n contextManager: IContextManager,\n restorer: ILayoutRestorer | null\n): WidgetTracker {\n // Create a widget creator function\n const newWidget = (): MainAreaWidget => {\n const content = new SettingsWidget(contextManager);\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 { ProfilerPage } from './profiler/ProfilerPage';\nimport { IContextManager } from '../ContextManager/ContextManagerPlugin';\nimport '../../../style/SettingsWidget.css';\n\nconst TABS_CONFIG = (contextManager: IContextManager) => ({\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 profiler: {\n label: 'Profiler',\n component: () => <ProfilerPage contextManager={contextManager} />\n },\n support: {\n label: 'Support',\n component: SupportPage\n },\n\n}) as const;\n\ninterface AppProps {\n contextManager: IContextManager;\n}\n\nconst App = ({ contextManager }: AppProps): JSX.Element => {\n const [activeTab, setActiveTab] = useState<keyof ReturnType<typeof TABS_CONFIG>>('database');\n const tabsConfig = TABS_CONFIG(contextManager);\n\n const renderContent = (): JSX.Element => {\n const TabComponent = tabsConfig[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(tabsConfig).map(([key, { label }]) => (\n <li\n key={key}\n className={activeTab === key ? 'active' : ''}\n onClick={() => setActiveTab(key as keyof ReturnType<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 private contextManager: IContextManager;\n\n constructor(contextManager: IContextManager) {\n super();\n this.contextManager = contextManager;\n this.addClass('jp-ReactWidget');\n }\n\n render(): JSX.Element {\n return <App contextManager={this.contextManager} />;\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';\nimport { GettingStartedVideo } from './GettingStartedVideo';\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 (\n <div className=\"no-connections-container\">\n <p>No database connections found.</p>\n <div className=\"video-tutorial\">\n <GettingStartedVideo width=\"560\" height=\"315\" />\n </div>\n </div>\n );\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 className=\"connection-alias\">\n {connection.alias ? connection.alias : connection.database}\n </h3>\n <span className=\"connection-type\">{connection.type.toUpperCase()}</span>\n </div>\n <div className=\"connection-divider\" />\n <div className=\"connection-details\">\n {databaseConfigs[connection.type]?.fields.map(field => {\n // Skip specific fields\n if (field.type === 'password') return null;\n if (field.name === 'alias') 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 { GettingStartedVideo } from './GettingStartedVideo';\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 [showVideoModal, setShowVideoModal] = 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 <div className=\"header-buttons\">\n {/* Show the getting started button if there are connections */}\n {Object.keys(connections).length > 0 && (\n <button\n className=\"button-base button-gray\"\n onClick={() => setShowVideoModal(true)}\n >\n <b>Getting Started</b>\n </button>\n )}\n <button\n className=\"button-base button-purple\"\n onClick={() => setShowModal(true)}\n >\n <b>+ Add Connection</b>\n </button>\n </div>\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\n {showVideoModal && (\n <div className=\"modal-overlay\" onClick={() => setShowVideoModal(false)}>\n <div className=\"modal-content video-modal\" onClick={e => e.stopPropagation()}>\n <div className=\"modal-header\">\n <h3>Getting Started</h3>\n <button\n className=\"modal-close-button\"\n onClick={() => setShowVideoModal(false)}\n >\n ✕\n </button>\n </div>\n <GettingStartedVideo />\n <div className=\"video-description\">\n <p>Still have questions? Check out our <a href=\"https://docs.trymito.io/mito-ai/database-connectors\" target=\"_blank\" rel=\"noopener noreferrer\">documentation</a> for more information.</p>\n </div>\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\ninterface GettingStartedVideoProps {\n width?: string;\n height?: string;\n className?: string;\n}\n\nexport const GettingStartedVideo: React.FC<GettingStartedVideoProps> = ({\n width = \"100%\",\n height = \"400\",\n className = \"\"\n}) => {\n return (\n <div className={`video-container ${className}`}>\n <iframe\n width={width}\n height={height}\n src=\"https://www.youtube.com/embed/sJgphOrmZb4?rel=0\"\n title=\"How to connect to your database with Mito\"\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n ></iframe>\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\nconst ALIAS_PLACEHOLDER = 'Enter a nickname for this database';\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: 'alias',\n type: 'text',\n label: 'Alias',\n placeholder: ALIAS_PLACEHOLDER,\n required: true\n },\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: 'alias',\n type: 'text',\n label: 'Alias',\n placeholder: ALIAS_PLACEHOLDER,\n required: true\n },\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: 'alias',\n type: 'text',\n label: 'Alias',\n placeholder: ALIAS_PLACEHOLDER,\n required: true\n },\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: 'alias',\n type: 'text',\n label: 'Alias',\n placeholder: ALIAS_PLACEHOLDER,\n required: true\n },\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: 'alias',\n type: 'text',\n label: 'Alias',\n placeholder: ALIAS_PLACEHOLDER,\n required: true\n },\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: 'alias',\n type: 'text',\n label: 'Alias',\n placeholder: ALIAS_PLACEHOLDER,\n required: true\n },\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, { useEffect, useState } from 'react';\nimport { EVENT_NAMES } from '../../../utils/constants';\n\nexport const CapturedRequestsSection = (): JSX.Element => {\n const [capturedRequests, setCapturedRequests] = useState<any[]>([]);\n\n // Listen for captured completion requests\n useEffect(() => {\n const handleCapturedRequest = (event: CustomEvent): void => {\n setCapturedRequests(prev => [event.detail, ...prev]);\n };\n\n window.addEventListener(EVENT_NAMES.MITO_AI_CAPTURE_REQUEST, handleCapturedRequest as EventListener);\n\n return () => {\n window.removeEventListener(EVENT_NAMES.MITO_AI_CAPTURE_REQUEST, handleCapturedRequest as EventListener);\n };\n }, []);\n\n const clearCapturedRequests = (): void => {\n setCapturedRequests([]);\n };\n\n const copyRequestToClipboard = async (request: any): Promise<void> => {\n try {\n await navigator.clipboard.writeText(JSON.stringify(request, null, 2));\n console.log('Request copied to clipboard');\n } catch (err) {\n console.error('Failed to copy request to clipboard:', err);\n }\n };\n\n return (\n <div>\n <h3>Captured Completion Requests</h3>\n\n <button\n className=\"button-base profiler-clear-button\"\n onClick={clearCapturedRequests}\n >\n Clear Captured Requests\n </button>\n\n {capturedRequests.length === 0 ? (\n <p className=\"profiler-no-requests\">\n No requests captured yet. Send a message in the AI chat to see captured requests here.\n </p>\n ) : (\n capturedRequests.map((captured, index) => (\n <div key={index} className=\"profiler-request-container\">\n <div className=\"profiler-request-header\">\n <h4>{capturedRequests.length - index}</h4>\n <button\n className=\"button-base profiler-copy-button\"\n onClick={() => copyRequestToClipboard(captured.request)}\n >\n Copy\n </button>\n </div>\n <pre className=\"json-container\">\n {JSON.stringify(captured.request, null, 2)}\n </pre>\n </div>\n ))\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, { useState } from 'react';\nimport { IContextManager } from '../../ContextManager/ContextManagerPlugin';\n\ninterface ContextManagerSectionProps {\n contextManager: IContextManager;\n}\n\nexport const ContextManagerSection = ({ contextManager }: ContextManagerSectionProps): JSX.Element => {\n const [refreshKey, setRefreshKey] = useState(0);\n\n const handleRefreshContextManager = (): void => {\n // Force a re-render by toggling the state\n setRefreshKey(prev => prev + 1);\n };\n\n const activeNotebookContext = contextManager.getActiveNotebookContext();\n\n const copyContextManagerToClipboard = async (): Promise<void> => {\n const jsonContent = JSON.stringify({\n variables: activeNotebookContext?.variables,\n files: activeNotebookContext?.files\n }, null, 2);\n\n try {\n await navigator.clipboard.writeText(jsonContent);\n console.log('Context Manager contents copied to clipboard');\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n };\n\n return (\n <div>\n <h3>Context Manager</h3>\n\n <div className=\"profiler-button-container\">\n <button\n className=\"button-base\"\n onClick={handleRefreshContextManager}\n >\n Refresh\n </button>\n <button\n className=\"button-base\"\n onClick={copyContextManagerToClipboard}\n >\n Copy\n </button>\n </div>\n\n {refreshKey > 0 && (\n <div className=\"settings-option\">\n <pre className=\"json-container\">\n {JSON.stringify({\n variables: activeNotebookContext?.variables,\n files: activeNotebookContext?.files\n }, null, 2)}\n </pre>\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, { useEffect, useState } from 'react';\nimport { IContextManager } from '../../ContextManager/ContextManagerPlugin';\nimport { ContextManagerSection } from './ContextManagerSection';\nimport { CapturedRequestsSection } from './CapturedRequestsSection';\nimport { EVENT_NAMES } from '../../../utils/constants';\nimport { getSetting, updateSettings } from '../../../restAPI/RestAPI';\nimport '../../../../style/ProfilerPage.css';\n\ninterface ProfilerPageProps {\n contextManager: IContextManager;\n}\n\n// Simple event system for capturing completion requests.\n// These events are usually variables that are not stored in the context manager,\n// and are created dynamically. So we capture them before they are sent to the backend.\nexport const captureCompletionRequest = (request: any): void => {\n const event = new CustomEvent(EVENT_NAMES.MITO_AI_CAPTURE_REQUEST, {\n detail: {\n request,\n }\n });\n window.dispatchEvent(event);\n};\n\nexport const ProfilerPage = ({ contextManager }: ProfilerPageProps): JSX.Element => {\n const [hasAcceptedDisclaimer, setHasAcceptedDisclaimer] = useState<boolean>(false);\n\n // When we first open the page, check if the user has already accepted the disclaimer\n useEffect(() => {\n const checkDisclaimerStatus = async (): Promise<void> => {\n try {\n const disclaimerAccepted = await getSetting('profiler_disclaimer_accepted');\n setHasAcceptedDisclaimer(disclaimerAccepted === 'true');\n } catch (error) {\n console.error('Error checking disclaimer status:', error);\n // If there's an error, default to showing the disclaimer\n setHasAcceptedDisclaimer(false);\n }\n };\n void checkDisclaimerStatus();\n }, []);\n\n const handleAcceptDisclaimer = async (): Promise<void> => {\n try {\n await updateSettings('profiler_disclaimer_accepted', 'true');\n setHasAcceptedDisclaimer(true);\n } catch (error) {\n console.error('Error accepting disclaimer:', error);\n }\n };\n\n // Show disclaimer if not yet accepted\n if (!hasAcceptedDisclaimer) {\n return (\n <div>\n <div className=\"settings-header\">\n <h2>Profiler</h2>\n </div>\n <p>The profiler is an internal debugging tool intended for use by the Mito development team. It is not designed, tested, or supported for general usage. Running the profiler may impact performance, produce unstable behavior, or generate incomplete results. Use at your own discretion.</p>\n <button\n className=\"button-base button-gray\"\n onClick={handleAcceptDisclaimer}\n >\n Accept\n </button>\n </div>\n );\n }\n\n // Show the actual profiler content after disclaimer is accepted\n return (\n <div>\n <div className=\"settings-header\">\n <h2>Profiler</h2>\n </div>\n\n <p className=\"profiler-warning\">For internal debugging only.</p>\n\n <ContextManagerSection contextManager={contextManager} />\n\n <CapturedRequestsSection />\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'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'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/cellMetadata';\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 activate: (app: JupyterFrontEnd, notebookTracker: INotebookTracker) => {\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:preview-as-streamlit', {\n label: 'App Mode',\n caption: 'Preview notebook as app and turn on App Mode',\n className: 'text-button-mito-ai button-base button-purple button-small',\n execute: async () => {\n void app.commands.execute('mito-ai:preview-as-streamlit');\n },\n 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:toggle-include-cell-in-app');\n commands.notifyCommandChanged('toolbar-button:preview-as-streamlit');\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'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 <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\n// Streamlit commands\nexport const COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT = 'mito-ai:preview-as-streamlit';\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 { classNames } from '../../utils/classNames';\n\ninterface AgentComponentHeaderProps {\n icon: React.ReactNode;\n text: string;\n onClick: () => void;\n isExpanded: boolean;\n displayBorder?: boolean;\n className?: string;\n}\n\nconst AgentComponentHeader: React.FC<AgentComponentHeaderProps> = ({\n icon,\n text,\n onClick,\n isExpanded,\n displayBorder = true,\n className\n}): JSX.Element => {\n return (\n <div\n onClick={onClick}\n className={classNames('agent-component-header', {\n expanded: isExpanded,\n 'no-border': !displayBorder\n }, className)}\n >\n <span className=\"agent-component-header-content\">\n {icon}\n {text}\n </span>\n <svg\n className={classNames('agent-component-header-expand-icon', {\n expanded: isExpanded\n })}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n transform={isExpanded ? 'rotate(90 8 8)' : 'rotate(0 8 8)'}\n />\n </svg>\n </div>\n );\n};\n\nexport default AgentComponentHeader; ","/*\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 { classNames } from '../../utils/classNames';\nimport '../../../style/AssumptionTool.css';\n\ninterface AssumptionToolUIProps {\n assumptions: string[];\n}\n\nconst AssumptionToolUI: React.FC<AssumptionToolUIProps> = ({\n assumptions,\n}): JSX.Element => {\n return (\n <div className={classNames('assumption-tool-container')}>\n {/* Assumption Header Label */}\n <div className=\"assumption-header-label\">\n Assumption\n </div>\n \n <p className={classNames('assumption-content')}>\n {assumptions.length > 1 && (\n <ul>\n {assumptions.map((assumption, index) => (\n <li key={index}>\n {assumption}\n </li>\n ))}\n </ul>\n )}\n {assumptions.length === 1 && (\n assumptions[0]\n )}\n </p>\n </div>\n );\n};\n\nexport default AssumptionToolUI;","/*\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 { IRenderMimeRegistry } from '@jupyterlab/rendermime';\nimport { OpenAI } from 'openai';\nimport { GroupedErrorMessages } from '../../utils/chatHistory';\nimport { classNames } from '../../utils/classNames';\nimport { getContentStringFromMessage } from '../../utils/strings';\nimport PythonCode from '../../Extensions/AiChat/ChatMessage/PythonCode';\nimport AssistantCodeBlock from '../../Extensions/AiChat/ChatMessage/AssistantCodeBlock';\nimport AlertIcon from '../../icons/AlertIcon';\nimport AgentComponentHeader from './AgentComponentHeader';\nimport '../../../style/ErrorFixupToolUI.css';\nimport '../../../style/AgentComponentHeader.css';\nimport RunAllCellsToolUI from './RunAllCellsToolUI';\n\ninterface IErrorFixupToolUIProps {\n messages: GroupedErrorMessages;\n renderMimeRegistry: IRenderMimeRegistry;\n}\n\nconst parsePythonErrorType = (content: string | undefined): string => {\n if (!content) return 'Error';\n const errorMatch = content.match(/(\\w+Error):/);\n return errorMatch?.[1] || 'Error';\n};\n\nconst processErrorContent = (content: string | undefined): string => {\n if (!content) return '';\n \n // Remove all Python code (content between triple backticks).\n // If we don't do this, the PythonCode component will remove the error content,\n // and only show the code block. \n return content.replace(/```(?:python)?[\\s\\S]*?```/g, '').trim();\n};\n\nconst ErrorDetectedBlock = ({\n errorMessage,\n renderMimeRegistry,\n}: {\n errorMessage: OpenAI.Chat.ChatCompletionMessageParam,\n renderMimeRegistry: IRenderMimeRegistry,\n}): JSX.Element => {\n const [expandedError, setExpandedError] = useState(false);\n\n const rawErrorContent = getContentStringFromMessage(errorMessage);\n const errorContent = processErrorContent(rawErrorContent);\n const errorType = parsePythonErrorType(errorContent);\n\n const toggleError = (): void => {\n setExpandedError(!expandedError);\n };\n\n return (\n <div className={classNames('error-fixup-container', { expanded: expandedError })}>\n <AgentComponentHeader\n icon={<AlertIcon />}\n text={`${errorType} Detected`}\n onClick={toggleError}\n isExpanded={expandedError}\n displayBorder={false}\n />\n {expandedError && errorContent && (\n <div className=\"error-fixup-expanded\">\n <PythonCode\n code={errorContent}\n renderMimeRegistry={renderMimeRegistry}\n />\n </div>\n )}\n </div>\n );\n}\n\nconst GroupedErrorsAndFixes: React.FC<IErrorFixupToolUIProps> = ({\n messages,\n renderMimeRegistry,\n}) => {\n return (\n <div className=\"error-fixup-root\">\n <div className=\"error-fixup-header\">\n <p>Fixing an error</p>\n </div>\n <div className=\"error-fixup-messages-container\">\n {messages.map((messageItem, index) => {\n const isUserMessage = messageItem.message.role === 'user';\n\n if (isUserMessage) {\n return (\n <ErrorDetectedBlock\n key={`error-${index}`}\n errorMessage={messageItem.message}\n renderMimeRegistry={renderMimeRegistry}\n />\n );\n }\n if (messageItem.agentResponse?.type === 'run_all_cells') {\n return (\n <RunAllCellsToolUI key={`run-all-cells-${index}`} inErrorFixup={true}/>\n );\n }\n return (\n <AssistantCodeBlock\n key={`assistant-${index}`}\n code={messageItem.message.content as string}\n codeSummary={messageItem.agentResponse?.cell_update?.code_summary ?? 'Fixing error'}\n isCodeComplete={true}\n renderMimeRegistry={renderMimeRegistry}\n previewAICode={() => { }}\n acceptAICode={() => { }}\n rejectAICode={() => { }}\n isLastAiMessage={false}\n codeReviewStatus=\"chatPreview\"\n agentModeEnabled={true}\n isErrorFixup={true}\n />\n );\n })}\n </div>\n </div>\n );\n};\n\nexport default GroupedErrorsAndFixes;\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 MagnifyingGlassIcon from '../../icons/MagnifyingGlassIcon';\nimport '../../../style/AgentToolUIComponent.css';\n\n\nconst GetCellOutputToolUI: React.FC = () => {\n\n return (\n <div className=\"agent-tool-ui-container\">\n <div className=\"agent-tool-ui-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 from 'react';\nimport PlayButtonIcon from '../../icons/PlayButtonIcon';\nimport '../../../style/AgentToolUIComponent.css';\nimport { classNames } from '../../utils/classNames';\n\n\nconst RunAllCellsToolUI: React.FC<{inErrorFixup?: boolean}> = ({inErrorFixup}) => {\n\n return (\n <div className={classNames('agent-tool-ui-container', {\n 'agent-tool-ui-error-fixup': inErrorFixup,\n })}>\n <div className=\"agent-tool-ui-content\">\n <PlayButtonIcon />\n <span>Running all cells</span>\n </div>\n </div>\n )\n}\n\nexport default RunAllCellsToolUI;","/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport React, { useRef, useState } from 'react';\nimport IconButton from './IconButton';\nimport PaperClipIcon from '../icons/PaperClipIcon';\nimport { requestAPI } from '../restAPI/utils';\nimport { INotebookTracker } from '@jupyterlab/notebook';\nimport { Notification } from '@jupyterlab/apputils';\n\n// Constants for file handling\nconst CHUNKED_UPLOAD_SIZE_CUTOFF = 25 * 1024 * 1024; // 25MB cutoff for chunked uploads\nconst CHUNK_SIZE = 10 * 1024 * 1024; // 10MB chunks\n\ninterface AttachFileButtonProps {\n onFileUploaded: (file: File) => void;\n notebookTracker: INotebookTracker;\n}\n\nconst AttachFileButton: React.FC<AttachFileButtonProps> = ({ onFileUploaded, notebookTracker }) => {\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [isUploading, setIsUploading] = useState(false);\n\n // Helper function to get notebook directory from notebook path\n const getNotebookDirectory = (notebookPath: string): string => {\n const lastSlashIndex = notebookPath.lastIndexOf('/');\n if (lastSlashIndex === -1) {\n // No directory, just filename (root directory)\n return '.';\n }\n return notebookPath.substring(0, lastSlashIndex);\n };\n\n const handleClick = (): void => {\n // Don't allow clicks if uploading\n if (isUploading) return;\n\n // Trigger the hidden file input\n fileInputRef.current?.click();\n };\n\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>): Promise<void> => {\n const files = event.target.files;\n if (!files || files.length === 0) return;\n\n const file = files[0];\n if (!file) return;\n\n // Don't allow new uploads if already uploading\n if (isUploading) return;\n\n setIsUploading(true);\n\n try {\n // Check file size and handle accordingly\n if (file.size > CHUNKED_UPLOAD_SIZE_CUTOFF) {\n console.log(`File ${file.name} is larger than 25MB (${(file.size / (1024 * 1024)).toFixed(2)}MB). Splitting into chunks...`);\n await handleLargeFile(file);\n } else {\n // Upload file directly for files <= 25MB\n await uploadFile(file);\n }\n } catch (error) {\n Notification.emit(`Upload failed: ${error}`, \"error\", {\n autoClose: 5 * 1000 // 5 seconds\n });\n console.error('Error during file upload:', error);\n } finally {\n setIsUploading(false);\n // Clear the file input\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n }\n };\n\n const handleLargeFile = async (file: File): Promise<void> => {\n const totalChunks = Math.ceil(file.size / CHUNK_SIZE);\n console.log(`Splitting file into ${totalChunks} chunks of ${(CHUNK_SIZE / (1024 * 1024)).toFixed(2)}MB each`);\n\n // Get notebook directory path\n const notebookPanel = notebookTracker.currentWidget;\n if (!notebookPanel) {\n console.error('No notebook is currently active');\n throw new Error('No notebook is currently active');\n }\n\n const notebookPath = notebookPanel.context.path;\n const notebookDir = getNotebookDirectory(notebookPath);\n\n for (let chunkIndex = 0; chunkIndex < totalChunks; chunkIndex++) {\n const start = chunkIndex * CHUNK_SIZE;\n const end = Math.min(start + CHUNK_SIZE, file.size);\n const chunk = file.slice(start, end);\n\n console.log(`Uploading chunk ${chunkIndex + 1}/${totalChunks}:`, {\n chunkNumber: chunkIndex + 1,\n totalChunks: totalChunks,\n chunkSize: chunk.size,\n chunkSizeMB: (chunk.size / (1024 * 1024)).toFixed(2),\n startByte: start,\n endByte: end,\n fileName: file.name,\n originalFileSize: file.size,\n originalFileSizeMB: (file.size / (1024 * 1024)).toFixed(2)\n });\n\n // Upload chunk to backend\n const success = await uploadChunk(\n chunk, file.name, chunkIndex + 1, totalChunks, notebookDir\n );\n if (!success) {\n console.error(`Failed to upload chunk ${chunkIndex + 1}`);\n throw new Error(`Failed to upload chunk ${chunkIndex + 1}`);\n }\n }\n\n console.log(`Successfully uploaded all ${totalChunks} chunks for file: ${file.name}`);\n\n // Notify the parent component that the file was uploaded\n onFileUploaded(file);\n };\n\n const uploadChunk = async (chunk: Blob, filename: string, chunkNumber: number, totalChunks: number, notebookDir: string): Promise<boolean> => {\n try {\n // Create FormData for chunk upload\n const formData = new FormData();\n formData.append('file', chunk, filename);\n formData.append('chunk_number', chunkNumber.toString());\n formData.append('total_chunks', totalChunks.toString());\n formData.append('notebook_dir', notebookDir);\n\n // Upload chunk to backend\n const resp = await requestAPI<{\n success: boolean;\n filename?: string;\n path?: string;\n chunk_received?: boolean;\n chunk_complete?: boolean;\n chunk_number?: number;\n total_chunks?: number;\n }>('upload', {\n method: 'POST',\n body: formData\n });\n\n if (resp.error) {\n Notification.emit(`Upload failed: ${resp.error.message}`, \"error\", {\n autoClose: 5 * 1000 // 5 seconds\n });\n console.error(`Chunk ${chunkNumber} upload failed:`, resp.error.message);\n return false;\n } else if (resp.data) {\n if (resp.data.chunk_complete) {\n console.log(`All chunks uploaded successfully. File reconstructed: ${resp.data.filename}`);\n } else if (resp.data.chunk_received) {\n console.log(`Chunk ${resp.data.chunk_number}/${resp.data.total_chunks} uploaded successfully`);\n }\n return true;\n }\n return false;\n } catch (error) {\n Notification.emit(`Upload failed: ${error}`, \"error\", {\n autoClose: 5 * 1000 // 5 seconds\n });\n console.error(`Error uploading chunk ${chunkNumber}:`, error);\n return false;\n }\n };\n\n const uploadFile = async (file: File): Promise<void> => {\n // Get notebook directory path\n const notebookPanel = notebookTracker.currentWidget;\n if (!notebookPanel) {\n console.error('No notebook is currently active');\n throw new Error('No notebook is currently active');\n }\n\n const notebookPath = notebookPanel.context.path;\n const notebookDir = getNotebookDirectory(notebookPath);\n\n // Create FormData for file upload\n const formData = new FormData();\n formData.append('file', file);\n formData.append('notebook_dir', notebookDir);\n\n // Upload file to backend using FormData\n const resp = await requestAPI<{ success: boolean; filename: string; path: string }>('upload', {\n method: 'POST',\n body: formData\n });\n\n if (resp.error) {\n Notification.emit(`Upload failed: ${resp.error.message}`, \"error\", {\n autoClose: 5 * 1000 // 5 seconds\n });\n console.error('Upload failed:', resp.error.message);\n } else if (resp.data) {\n console.log('File uploaded successfully:', resp.data);\n\n // Notify the parent component that the file was uploaded, \n // which will update the context manager.\n onFileUploaded(file);\n }\n };\n\n return (\n <div style={{ position: 'relative' }}>\n {/* Hidden file input */}\n <input\n ref={fileInputRef}\n type=\"file\"\n style={{ display: 'none' }}\n onChange={handleFileSelect}\n accept=\"*\"\n />\n\n {/* File upload button */}\n <IconButton\n icon={<PaperClipIcon />}\n title={isUploading ? 'Uploading...' : 'Attach File'}\n onClick={handleClick}\n className='icon-button-hover'\n disabled={isUploading}\n style={{\n opacity: isUploading ? 0.5 : 1,\n cursor: isUploading ? 'not-allowed' : 'pointer'\n }}\n />\n </div>\n );\n};\n\nexport default AttachFileButton; ","/*\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 IconButton from './IconButton';\nimport DatabaseOutlineIcon from '../icons/DatabaseOutlineIcon';\nimport { JupyterFrontEnd } from '@jupyterlab/application';\nimport { COMMAND_MITO_AI_SETTINGS } from '../Extensions/SettingsManager/SettingsManagerPlugin';\nimport { getDatabaseConnections } from '../restAPI/RestAPI';\n\ninterface DatabaseButtonProps {\n app: JupyterFrontEnd;\n}\n\nconst DatabaseButton: React.FC<DatabaseButtonProps> = ({app}) => {\n const [databaseConnections, setDatabaseConnections] = useState<Record<string, any>>({});\n const [isIconVisible, setIsIconVisible] = useState<boolean>(true);\n\n // Fetch database connections\n const fetchDatabaseConnections = async (): Promise<void> => {\n const databaseConnections = await getDatabaseConnections();\n setDatabaseConnections(databaseConnections);\n };\n\n // Fetch database connections\n useEffect(() => {\n void fetchDatabaseConnections();\n }, []);\n\n // Determine notification dot type based on connections\n const getNotificationDotType = (): 'success' | 'warning' | null => {\n if (!isIconVisible) {\n return null;\n }\n return Object.keys(databaseConnections).length > 0 ? 'success' : 'warning';\n };\n\n return (\n <IconButton\n icon={<DatabaseOutlineIcon />}\n title='Add Database'\n onClick={() => {\n void app.commands.execute(COMMAND_MITO_AI_SETTINGS);\n setIsIconVisible(false);\n }}\n notificationDotType={getNotificationDotType()}\n className='icon-button-hover'\n style={{\n height: 'var(--chat-context-button-height)'\n }}\n />\n );\n};\n\nexport default DatabaseButton; ","/*\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 notificationDotType?: 'success' | 'warning' | 'danger' | null;\n className?: string;\n disabled?: boolean;\n}\n\nconst IconButton: React.FC<IconButtonProps> = ({ icon, onClick, title, style, notificationDotType = null, className, disabled = false }) => {\n\n return (\n <button className={classNames(\"icon-button\", className)} onClick={onClick} title={title} style={style} disabled={disabled}>\n {icon}\n {notificationDotType && <div className={`notification-dot notification-dot-${notificationDotType}`}></div>}\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';\nimport { CLAUDE_SONNET_DISPLAY_NAME, CLAUDE_SONNET_MODEL_NAME } from '../utils/models';\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_SONNET_DISPLAY_NAME, fullName: CLAUDE_SONNET_MODEL_NAME },\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_SONNET_DISPLAY_NAME;\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';\nimport CodeIcon from '../icons/CodeIcon';\nimport DatabaseIcon from '../icons/DatabaseIcon';\nimport PhotoIcon from '../icons/PhotoIcon';\nimport { highlightCodeCell, getCellByID } from '../utils/notebook';\n\ninterface SelectedContextContainerProps {\n title: string;\n type: string;\n onRemove: () => void;\n onClick?: () => void;\n notebookTracker?: any;\n activeCellID?: string;\n}\n\nconst SelectedContextContainer: React.FC<SelectedContextContainerProps> = ({\n title,\n type,\n onRemove,\n onClick,\n notebookTracker,\n activeCellID\n}) => {\n const [isHovered, setIsHovered] = useState(false);\n\n let icon = <RuleIcon />;\n\n if (type.startsWith('image/')) {\n icon = <PhotoIcon />;\n } else if (type === 'rule') {\n icon = <RuleIcon />;\n } else if (type === 'variable') {\n icon = <CodeIcon />;\n } else if (type === 'db') {\n icon = <DatabaseIcon />;\n } else if (type === 'active_cell') {\n icon = <CodeIcon />;\n }\n\n const handleClick = (): void => {\n if (type === 'active_cell') {\n // Handle active cell context click\n if (notebookTracker && activeCellID) {\n // Find the cell \n const cell = getCellByID(notebookTracker, activeCellID);\n if (cell) {\n // Scroll to the cell\n void notebookTracker.currentWidget?.content.scrollToCell(cell, 'center');\n // Highlight the cell\n setTimeout(() => {\n highlightCodeCell(notebookTracker, activeCellID);\n }, 500);\n }\n }\n // If notebookTracker or activeCellID are not available, do nothing\n } else if (onClick) {\n // Call the custom onClick handler for other context types\n onClick();\n }\n };\n\n return (\n <button\n className=\"selected-context-container\"\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onClick={handleClick}\n data-testid=\"selected-context-container\"\n >\n <div\n className={`icon`}\n onClick={(e) => {\n e.stopPropagation(); // Prevent triggering the button's onClick\n onRemove();\n }}\n title={isHovered ? \"Remove rule\" : \"Selected rule\"}\n >\n {isHovered && type !== 'active_cell' ? (\n <span className=\"remove-icon\">X</span>\n ) : (\n <span className=\"icon\">{icon}</span>\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' | 'dark-purple';\n width: 'block' | 'fit-contents';\n textAlign?: 'left' | 'center' | 'right';\n className?: string;\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, textAlign = 'center', className }) => {\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 `text-align-${textAlign}`,\n className\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 `text-align-${textAlign}`,\n className\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 AlertIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 96 84\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M94.0805 67.8053L57.025 5.49763C55.1179 2.28364 51.657 0.313801 47.9194 0.313801C44.1818 0.313801 40.7209 2.28355 38.8137 5.49763L1.91856 67.8053C0.0350518 71.0665 0.0267897 75.0839 1.89611 78.3535C3.76543 81.6232 7.23119 83.6541 10.9969 83.6862H85.1079C88.8549 83.6177 92.2873 81.5723 94.1307 78.3088C95.974 75.0452 95.9546 71.0513 94.0805 67.8053ZM48.0531 73.0989C46.6493 73.0989 45.3023 72.5412 44.3097 71.5486C43.3172 70.5561 42.7594 69.209 42.7594 67.8053C42.7594 66.4015 43.3172 65.0545 44.3097 64.0619C45.3023 63.0694 46.6493 62.5116 48.0531 62.5116C49.4568 62.5116 50.8039 63.0694 51.7964 64.0619C52.789 65.0545 53.3467 66.4015 53.3467 67.8053C53.3467 69.209 52.789 70.5561 51.7964 71.5486C50.8039 72.5412 49.4568 73.0989 48.0531 73.0989ZM53.3467 49.2775C53.3467 51.1693 52.3376 52.9168 50.6999 53.8621C49.0622 54.8074 47.044 54.8074 45.4063 53.8621C43.7686 52.9168 42.7594 51.1692 42.7594 49.2775V28.103C42.7594 26.2112 43.7685 24.4637 45.4063 23.5184C47.044 22.5731 49.0622 22.5731 50.6999 23.5184C52.3376 24.4637 53.3467 26.2113 53.3467 28.103V49.2775Z\" />\n </g>\n </svg>\n);\n\nexport default AlertIcon;\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 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 DatabaseIcon: React.FC = () => (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M50 43.839C71.447 43.839 89.737 41.166 96.839 37.411C98.881 38.49 100 39.659 100 40.88V59.12C100 64.586 77.614 69.017 50 69.017C22.386 69.017 0 64.585 0 59.12V40.88C0 39.659 1.12 38.49 3.161 37.411C10.263 41.166 28.553 43.839 50 43.839ZM3.161 68.393C1.12 69.473 0 70.642 0 71.862V90.102C0 95.568 22.386 100 50 100C77.614 100 100 95.568 100 90.103V71.863C100 70.642 98.881 69.473 96.839 68.393C89.737 72.147 71.447 74.821 50 74.821C28.553 74.821 10.263 72.147 3.161 68.393ZM50 0C22.386 0 0 4.432 0 9.898V28.137C0 33.604 22.386 38.035 50 38.035C77.614 38.035 100 33.604 100 28.137V9.898C100 4.432 77.614 0 50 0Z\" />\n </g>\n </svg>\n);\n\nexport default DatabaseIcon;","/*\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 DatabaseOutlineIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 82 96\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M41 95.5C61.0983 95.5 81.4446 90.198 81.4446 80.0651V15.9349C81.4403 5.80206 61.0963 0.5 41 0.5C20.9037 0.5 0.559864 5.80206 0.555621 15.9349L0.55542 80.0651C0.55542 90.198 20.9017 95.5 41 95.5ZM41 6.83333C63.0713 6.83333 75.1112 12.8476 75.1112 15.938C75.1112 19.0284 63.0713 25.0432 41 25.0432C18.9287 25.0432 6.88875 19.0284 6.88875 15.938C6.88875 12.8476 18.9287 6.83333 41 6.83333ZM6.88875 24.6315C14.4639 29.0832 27.7848 31.3765 41 31.3765C54.2152 31.3765 67.5361 29.0832 75.1112 24.6315V37.3079C75.1112 40.4003 63.0713 46.4198 41 46.4198C18.9287 46.4198 6.88875 40.4003 6.88875 37.3079L6.88875 24.6315ZM6.88875 46.0052C14.4639 50.4589 27.7848 52.7531 41 52.7531C54.2152 52.7531 67.5361 50.4589 75.1112 46.0052V58.6916C75.1112 61.7805 63.0713 67.7932 41 67.7932C18.9287 67.7932 6.88875 61.7805 6.88875 58.6916L6.88875 46.0052ZM6.88875 67.383C14.4639 71.8337 27.7848 74.1265 41 74.1265C54.2152 74.1265 67.5361 71.8337 75.1112 67.383V80.0651C75.1112 83.1544 63.0713 89.1667 41 89.1667C18.9287 89.1667 6.88875 83.1544 6.88875 80.0651L6.88875 67.383Z\" />\n </g>\n </svg>\n);\n\nexport default DatabaseOutlineIcon;\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 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 PaperClipIcon: React.FC = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 72 86\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M70.363 44.59C68.6013 43.258 66.0935 43.6017 64.7575 45.3634L46.4995 69.4724C39.73 78.4099 27.0735 80.6284 17.6905 74.5154C12.71 71.2693 9.39359 66.2537 8.37409 60.3904C7.31939 54.3435 8.8819 48.0154 12.6632 43.0234L35.3312 13.0894C39.5773 7.48783 47.5812 6.37853 53.1902 10.6246C58.7879 14.8668 59.8894 22.8746 55.6472 28.4766L50.8425 34.8204L32.6475 58.8434C31.1709 60.7965 28.4366 61.3629 26.5577 60.109C25.5304 59.4215 24.8546 58.3863 24.6515 57.1832C24.4484 55.984 24.7413 54.7887 25.4757 53.8199L43.8707 29.5389C45.2027 27.7772 44.859 25.2694 43.0973 23.9334C41.3356 22.6014 38.8278 22.9452 37.4918 24.7069L19.0968 48.9879C17.0499 51.691 16.1984 55.1637 16.7648 58.5113C17.296 61.6597 18.964 64.4019 21.4914 66.316C21.6945 66.4722 21.9054 66.6207 22.1203 66.7652C27.3781 70.273 34.5073 69.0933 38.6323 64.1441C38.6948 64.0699 38.769 64.0113 38.8276 63.9332L39.0229 63.6714L62.0229 33.3044C68.9291 24.1833 67.1362 11.1484 58.0112 4.23843C48.8979 -2.66387 35.8632 -0.863167 28.9522 8.25793L6.2842 38.1919L5.88967 38.7115C5.8428 38.774 5.81545 38.8404 5.77248 38.9029C1.03418 45.5435 -0.895518 53.8209 0.491282 61.7619C1.77648 69.1252 5.68268 75.5239 11.5693 79.9849C12.1357 80.4146 12.7216 80.8247 13.3232 81.2154C26.2102 89.606 43.5812 86.567 52.8782 74.2974L71.1362 50.1924C72.4721 48.4307 72.1247 45.9221 70.363 44.59Z\" />\n </g>\n </svg >\n);\n\nexport default PaperClipIcon;\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 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\nimport React from 'react';\n\nconst PhotoIcon: React.FC = () => {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 98 76\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14.85 0.129997H83.15C91.32 0.129997 98 6.82 98 14.98V61.02C98 69.18 91.32 75.87 83.15 75.87H14.85C6.68 75.87 0 69.18 0 61.02V14.98C0 6.82 6.68 0.129997 14.85 0.129997ZM70.01 11.03C74.21 11.03 77.61 14.43 77.61 18.63C77.61 22.83 74.21 26.24 70.01 26.24C65.81 26.24 62.4 22.83 62.4 18.63C62.4 14.43 65.81 11.03 70.01 11.03ZM21.03 52.61L38.48 24.28C39.94 22.6 43.25 22.6 44.71 24.28L56.04 42.66L60.53 35.37C61.57 34.17 63.92 34.17 64.96 35.37L77.35 55.49C79.69 59.29 77.22 63.95 73.08 63.95C57.73 63.95 42.38 63.95 27.03 63.95C21.14 63.95 17.73 57.96 21.03 52.61Z\" />\n </g>\n </svg>\n )\n}\n\nexport default PhotoIcon;\n","/*\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';\nimport DeployIcon from '../../src/icons/App/DeployIcon.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\nexport const DeployLabIcon = new LabIcon({\n name: 'deploy-icon',\n svgstr: DeployIcon\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 AppDeployPlugin from './Extensions/AppDeploy/AppDeployPlugin';\nimport StreamlitPreviewPlugin from './Extensions/AppPreview/StreamlitPreviewPlugin';\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';\nimport ManageAppsPlugin from \"./Extensions/AppManager/ManageAppsPlugin\"\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 AppDeployPlugin,\n StreamlitPreviewPlugin,\n ToolbarButtonsPlugin,\n emptyCellPlaceholder,\n statusItem,\n SettingsManagerPlugin,\n versionCheckPlugin,\n NotebookFooterPlugin,\n ManageAppsPlugin\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\nimport { StreamlitPreviewResponse } from \"../Extensions/AppPreview/StreamlitPreviewPlugin\";\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/************************************\n\nDATABASE ENDPOINTS\n\n************************************/\n\nexport const getDatabaseConnections = async (): Promise<Record<string, any>> => {\n const resp = await requestAPI<Record<string, any>>('db/connections')\n if (resp.error) {\n throw new Error(resp.error.message);\n }\n return resp.data || {};\n}\n\n/************************************\n\nSTREAMLIT PREVIEW ENDPOINTS\n\n************************************/\n\n\nexport const startStreamlitPreview = async (notebookPath: string, force_recreate: boolean = false): Promise<StreamlitPreviewResponse> => {\n const response = await requestAPI<StreamlitPreviewResponse>('streamlit-preview', {\n method: 'POST',\n body: JSON.stringify({ notebook_path: notebookPath, force_recreate: force_recreate }),\n })\n \n if (response.error) {\n throw new Error(response.error.message);\n }\n\n return response.data!;\n}\n\nexport const stopStreamlitPreview = async (previewId: string): Promise<void> => {\n const response = await requestAPI<void>(`streamlit-preview/${previewId}`, {\n method: 'DELETE',\n })\n \n if (response.error) {\n throw new Error(response.error.message);\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 { NotebookActions, NotebookPanel } from \"@jupyterlab/notebook\"\nimport { getFullErrorMessageFromTraceback } from \"../Extensions/ErrorMimeRenderer/errorUtils\"\nimport { sleep } from \"./sleep\"\nimport { createCodeCellAtIndexAndActivate, didCellExecutionError, getActiveCellIDInNotebookPanel, setActiveCellByIDInNotebookPanel, writeCodeToCellByIDInNotebookPanel } from \"./notebook\"\nimport { ChatHistoryManager } from \"../Extensions/AiChat/ChatHistoryManager\"\nimport { MutableRefObject } from \"react\"\nimport { CellUpdate } from \"../websockets/completions/CompletionModels\"\nimport { scrollToCell } from \"./notebook\"\n\nexport const acceptAndRunCellUpdate = async (\n cellUpdate: CellUpdate,\n notebookPanel: NotebookPanel,\n): Promise<void> => {\n\n // If the cellUpdate is creating a new code cell, insert it \n // before previewing and accepting the code. It is safe to do this \n // in the background agent because it does not effect the active cell \n // in other notebooks.\n if (cellUpdate.type === 'new' ) {\n // makes the cell the active cell\n createCodeCellAtIndexAndActivate(notebookPanel, cellUpdate.index)\n } else {\n setActiveCellByIDInNotebookPanel(notebookPanel, cellUpdate.id)\n }\n\n const notebook = notebookPanel.content;\n const context = notebookPanel.context;\n\n if (notebook === undefined) {\n return;\n }\n\n const cellID = getActiveCellIDInNotebookPanel(notebookPanel)\n\n writeCodeToCellByIDInNotebookPanel(notebookPanel, cellUpdate.code, cellID)\n\n // We always create code cells, and then convert to markdown if necessary.\n if (cellUpdate.cell_type === 'markdown') {\n NotebookActions.changeCellType(notebook, 'markdown');\n } else if (cellUpdate.cell_type === 'code') {\n NotebookActions.changeCellType(notebook, '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 NotebookActions.run(notebook, context?.sessionContext);\n \n // Scroll to the bottom of the active cell to show the output\n // as long as we are not operating in background agent mode.\n const activeCellID = getActiveCellIDInNotebookPanel(notebookPanel);\n if (activeCellID) {\n scrollToCell(notebookPanel, 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\n\nexport const retryIfExecutionError = async (\n notebookPanel: NotebookPanel, \n app: JupyterFrontEnd,\n sendAgentSmartDebugMessage: (errorMessage: string) => Promise<void>,\n shouldContinueAgentExecution: MutableRefObject<boolean>,\n finalizeAgentStop: () => void,\n chatHistoryManagerRef: React.MutableRefObject<ChatHistoryManager>\n): Promise<'success' | 'failure' | 'interupted'> => {\n\n const cell = notebookPanel.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 let runAllCellsAttempts = 0;\n const MAX_RUN_ALL_CELLS_ATTEMPTS = 2; // Only allow two run_all_cells attempt per error cycle\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 await sendAgentSmartDebugMessage(errorMessage)\n const aiDisplayOptimizedChatItem = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem();\n\n // Handle different response types from the agent when fixing errors\n const agentResponse = aiDisplayOptimizedChatItem?.agentResponse;\n \n if (!agentResponse) {\n return 'failure'\n }\n\n if (agentResponse.type === 'cell_update') {\n const cellUpdate = agentResponse.cell_update\n \n if (cellUpdate !== undefined && cellUpdate !== null) {\n await acceptAndRunCellUpdate(\n cellUpdate, \n notebookPanel\n )\n }\n } else if (agentResponse.type === 'run_all_cells') {\n // Prevent infinite loops by limiting run_all_cells attempts\n if (runAllCellsAttempts >= MAX_RUN_ALL_CELLS_ATTEMPTS) {\n console.log('Maximum run_all_cells attempts reached, treating as failure');\n return 'failure';\n }\n \n runAllCellsAttempts++;\n // Execute runAllCells to fix NameError issues\n const result = await runAllCells(app, notebookPanel);\n if (!result.success) {\n // If run_all_cells resulted in an error, we should continue with error handling\n // The error will be caught in the main loop\n console.log('Error after running all cells:', result.errorMessage);\n }\n } else {\n // Agent responded with an unexpected type for error fixing\n return 'failure'\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\nexport const runAllCells = async (\n app: JupyterFrontEnd,\n notebookPanel: NotebookPanel\n): Promise<{ success: boolean; errorMessage?: string; errorCellId?: string }> => {\n const notebook = notebookPanel.content;\n const sessionContext = notebookPanel.context?.sessionContext;\n await NotebookActions.runAll(notebook, sessionContext);\n \n // Give the execution some time to complete and update variables\n // This ensures that the variable manager has time to update the state\n await sleep(2000);\n \n // Iterate through all cells to find any with errors\n for (let i = 0; i < notebook.widgets.length; i++) {\n const cell = notebook.widgets[i];\n if (cell && cell.model.type === 'code') {\n const codeCell = cell as CodeCell;\n if (didCellExecutionError(codeCell)) {\n const errorOutput = codeCell.model.outputs?.toJSON().find(output => output.output_type === \"error\");\n if (errorOutput) {\n const errorMessage = getFullErrorMessageFromTraceback(errorOutput.traceback as string[]);\n return { \n success: false, \n errorMessage: errorMessage,\n errorCellId: codeCell.model.id\n };\n }\n }\n }\n }\n \n return { success: true };\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 { getActiveCellID, getCellByID } from \"./notebook\";\n\nconst INCLUDE_CELL_IN_APP = 'include-cell-in-app';\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 * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\nimport { INotebookTracker, NotebookPanel } from \"@jupyterlab/notebook\"\nimport { CodeCell } from \"@jupyterlab/cells\"\nimport { getActiveCellID } from \"./notebook\"\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 const notebookPanel = notebookTracker.currentWidget\n return getCellOutputByIDInNotebook(notebookPanel, codeCellID)\n}\n\nexport const getCellOutputByIDInNotebook = async (notebookPanel: NotebookPanel | null, 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 || notebookPanel === null) {\n return undefined\n }\n\n const cell = notebookPanel.content.widgets.find(cell => cell.model.id === codeCellID);\n\n if (!(cell instanceof CodeCell)) {\n return undefined;\n }\n \n const outputNode = cell.outputArea?.node;\n \n if (!outputNode) return undefined;\n\n // Find the top-level Jupyter image output div\n // so we can check if there is a base64 encoded image \n // already constructed for us.\n const renderedImageDiv = outputNode.querySelector(\n '.jp-RenderedImage.jp-OutputArea-output'\n ) as HTMLDivElement | null;\n\n // If the image is the top-level output, then just use that instead\n // of capturing the entire output node. This is much faster and handles\n // matplotlib graphs.\n if (renderedImageDiv) {\n const img = renderedImageDiv.querySelector('img');\n if (img && img.src.startsWith('data:image')) {\n console.log('image found in top-level output');\n // Remove the data URL prefix\n // The img is initially in the format data:image/png;base64, <base64_data>\n // We want to return the base64 data.\n const base64 = img.src.split(',')[1];\n return base64;\n }\n }\n\n // Fallback: (optional) handle other output types, or use captureNode if needed\n // Previously, we used html2canvas to capture the entire output node. This would\n // give us the output even if it was html, svg, text, etc. However, starting around \n // Chrome release 138, html2canvas became untenably slow. https://issues.chromium.org/issues/429073017\n if (outputNode) {\n // If the AI requested, a cell output that we cannot provide, we just tell it \n // \"Cell Output is present in notebook, but not available to share with the AI right now\"\n return \"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rNkrAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgjliVAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQBJqMwHDjiP3888+jUPXq1cuMPPLI0TB5+NNPP5mff/5Zfrprz549zfjjj+9+640ioAgoAoqAItAKBP7++28zbNiwpKgxxhijFUWWWsZvv/1murq6TI8ePcxoo41Wat7NzKy7495MbDTv4ROBIvZzEUTKaGvt4r1IvUf0tL/++msCAf0C/YPS8I+A2AOMx0cdddRuVeHuzHu3Ano4YlZ13HD0MptclaY5YocOHWpef/118+qrrxruJ5tsMjP11FObxRZbzIwyyiilVuubb74xvXv3juZ5xRVXmEUWWSQaJg+POOIIc9FFF8lPd11ooYXM1Vdf7X43++aLL74wL7/8snnllVfMOOOMY+aee24zxxxzmO44CG82Vp2Y//TTT5+wtdlmm5n+/ft3IovKkyLgENhuu+3Mvffem+jlBx54wD3Xm85A4PLLLzf9+vVLmBk8eLCZccYZO4OxBrmg//z222+Tfuymm25qMFX7o3V33NuPoHLQbgReeukls/baaydsDBo0yKyxxhqpLBW1n1MzbiCgaFtrJ+8NVE+jRBB47733zPLLL5+EHH744aZPnz6RWPqoVQi0atwi9sBKK61kzjzzzFZVr5RyujPvPgA4lPHLCPHuxxtvPPlZdf3hhx/Mu+++W/U89mDKKac0E088cSyoY55l6ReLMK06rgh6I17a0h2xzALsv//+5vbbb4+iOeaYY5oTTjjBrLjiitHwPA+/++47s+CCC0aTNuKIHTBggLnggguq0rfKEcuqgEMOOcRceeWVVTzw4PzzzzfLLLNMNKyshy+++KIZMmRIkt1WW21lJpxwwrKybno+ncK7GDQbbrihGThwYNPrrQV0TwQ6RV633nprgwN20kknNY899lj3BLOFXN92223mjTfeMKOPPrrp27dv00u+7LLLkn6Bgu6++24z00wzNb3MMguQwQsTit3JEdspuGPXiF2ywgormHnmmafM19PRebW6rXU0GDmYe/755816662XpDzxxBOdUzaWVVH7OZZno8+KtrV28t5oHRuJNyLJu++kOOyww8wWW2zRCEQap0kI5Bm35JHXueaay/zyyy+m3Y7Y7sx7URG48847K2zX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\"\n }\n\n return 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 { IDisplayOptimizedChatItem } from '../Extensions/AiChat/ChatHistoryManager';\nimport { getContentStringFromMessage } from './strings';\nimport { isErrorFixupMessage } from './errors';\n\nexport type GroupedErrorMessages = IDisplayOptimizedChatItem[]\n\n/**\n * Processes chat history to group consecutive error fixup messages together.\n * This helps in displaying error messages and their responses as a single unit in the UI.\n * \n * @param displayOptimizedChatHistory - The original chat history to process\n * @returns An array where error fixup messages and their responses are grouped together, \n * while other messages remain as individual items\n */\nexport const processChatHistoryForErrorGrouping = (\n displayOptimizedChatHistory: IDisplayOptimizedChatItem[]\n): (GroupedErrorMessages | IDisplayOptimizedChatItem)[] => {\n const processedDisplayOptimizedChatHistory: (GroupedErrorMessages | IDisplayOptimizedChatItem)[] = [];\n let groupedErrorMessages: GroupedErrorMessages = [];\n\n for (let i = 0; i < displayOptimizedChatHistory.length; i++) {\n const displayOptimizedChatItem = displayOptimizedChatHistory[i];\n if (!displayOptimizedChatItem) {\n continue;\n }\n\n const messageContent = getContentStringFromMessage(displayOptimizedChatItem.message);\n const _isErrorFixupMessage = isErrorFixupMessage(\n displayOptimizedChatItem.promptType, \n displayOptimizedChatItem.message, \n messageContent\n );\n\n if (_isErrorFixupMessage) {\n // If the current message is an error fixup message, we need to group it with the next message\n // which is the ai response to the error fixup message.\n groupedErrorMessages.push(displayOptimizedChatItem);\n \n // Note: We check that the next message is an ai response to the error fixup message.\n // If the user has stopped the agent, it might not be an ai response to the error fixup message.\n\n const next_index = i + 1;\n if (\n next_index < displayOptimizedChatHistory.length &&\n displayOptimizedChatHistory[next_index]?.type === 'openai message' &&\n displayOptimizedChatHistory[next_index]?.message.role === 'assistant'\n ) {\n groupedErrorMessages.push(displayOptimizedChatHistory[next_index]!);\n i = next_index;\n } \n } else {\n if (groupedErrorMessages.length > 0) {\n processedDisplayOptimizedChatHistory.push(groupedErrorMessages);\n // Create a new array object since arrays are mutable and we want to avoid\n // accidentally modifying the array that was just pushed to the history\n groupedErrorMessages = new Array<IDisplayOptimizedChatItem>();\n }\n \n processedDisplayOptimizedChatHistory.push(displayOptimizedChatItem);\n }\n }\n\n // Handle case where the last messages were error messages\n if (groupedErrorMessages.length > 0) {\n processedDisplayOptimizedChatHistory.push(groupedErrorMessages);\n }\n\n return processedDisplayOptimizedChatHistory;\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 { logEvent } from \"../restAPI/RestAPI\";\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): 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 // Log the checkpoint restoration\n void logEvent('mito_ai_checkpoint_restored', {});\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\nexport const EVENT_NAMES = {\n MITO_AI_CAPTURE_REQUEST: 'mito-ai-capture-request',\n} as const;\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\nimport { OpenAI } from \"openai\";\nimport { PromptType } from \"../Extensions/AiChat/ChatHistoryManager\";\n\nexport const FREE_TIER_LIMIT_REACHED_ERROR_TITLE = 'mito_server_free_tier_limit_reached'\n\nexport const isErrorFixupMessage = (\n promptType: PromptType,\n message: OpenAI.Chat.ChatCompletionMessageParam,\n messageContent: string | undefined\n): boolean => {\n\n if (!messageContent) {\n return false;\n }\n\n return (\n // Initially, messages are labeled with the prompt type 'agent:autoErrorFixup'\n promptType === 'agent:autoErrorFixup' ||\n // However, when the chat history is saved, this field is stripped, and every message is labeled as 'chat'.\n // In this case we have to manually determine if the message is an error fixup message.\n (message.role === 'user' && \n messageContent && \n messageContent.includes('->') || messageContent?.includes('^') && \n /\\w+Error:/.test(messageContent)\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\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\nexport const CLAUDE_SONNET_DISPLAY_NAME = 'Claude 4 Sonnet';\nexport const CLAUDE_SONNET_MODEL_NAME = 'claude-sonnet-4-20250514';\n\nexport const GPT_4_1_DISPLAY_NAME = 'GPT 4.1';\nexport const GPT_4_1_MODEL_NAME = 'gpt-4.1';\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, NotebookPanel } from '@jupyterlab/notebook';\nimport { Cell, CodeCell } from '@jupyterlab/cells';\nimport { removeMarkdownCodeFormatting } from './strings';\nimport { AIOptimizedCell } from '../websockets/completions/CompletionModels';\nimport { WindowedList } from '@jupyterlab/ui-components';\n\nexport const getActiveCell = (notebookTracker: INotebookTracker): Cell | undefined => {\n const notebookPanel = notebookTracker.currentWidget;\n return getActiveCellInNotebookPanel(notebookPanel)\n}\n\nexport const getActiveCellInNotebookPanel = (notebookPanel: NotebookPanel | null): Cell | undefined => {\n const activeCell = notebookPanel?.content.activeCell;\n return activeCell || undefined\n}\n\nexport const getCellByID = (notebookTracker: INotebookTracker, cellID: string | undefined): Cell | undefined => {\n const notebook = notebookTracker.currentWidget\n return getCellByIDInNotebookPanel(notebook, cellID)\n}\n\nexport const getCellByIDInNotebookPanel = (notebookPanel: NotebookPanel | null, cellID: string | undefined): Cell | undefined => {\n if (cellID === undefined) {\n return undefined\n } \n\n return notebookPanel?.content.widgets.find(cell => cell.model.id === cellID);\n}\n\nexport const getActiveCellID = (notebookTracker: INotebookTracker): string | undefined => {\n const notebookPanel = notebookTracker.currentWidget;\n return getActiveCellIDInNotebookPanel(notebookPanel)\n}\n\nexport const getActiveCellIDInNotebookPanel = (notebookPanel: NotebookPanel | null): string | undefined => {\n return getActiveCellInNotebookPanel(notebookPanel)?.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 notebookPanel = notebookTracker.currentWidget\n return getCellCodeByIDInNotebookPanel(notebookPanel, codeCellID)\n}\n\nexport const getCellCodeByIDInNotebookPanel = (notebookPanel: NotebookPanel | null, codeCellID: string | undefined): string | undefined => {\n const cell = getCellByIDInNotebookPanel(notebookPanel, codeCellID)\n return cell?.model.sharedModel.source\n}\n\nexport const getCellIndexByID = (notebookTracker: INotebookTracker, cellID: string | undefined): number | undefined => {\n const notebookPanel = notebookTracker.currentWidget\n return getCellIndexByIDInNotebookPanel(notebookPanel, cellID)\n}\n\nexport const getCellIndexByIDInNotebookPanel = (notebookPanel: NotebookPanel | null, cellID: string | undefined): number | undefined => {\n\n const cellList = notebookPanel?.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 notebookPanel = notebookTracker.currentWidget\n setActiveCellByIDInNotebookPanel(notebookPanel, cellID)\n}\n\nexport const setActiveCellByIDInNotebookPanel = (notebookPanel: NotebookPanel | null, cellID: string | undefined): void => {\n const cellIndex = getCellIndexByIDInNotebookPanel(notebookPanel, cellID)\n if (cellIndex !== undefined && notebookPanel !== null) {\n notebookPanel.content.activeCellIndex = cellIndex\n }\n}\n\nexport const writeCodeToCellByID = (\n notebookTracker: INotebookTracker,\n code: string | undefined,\n codeCellID: string,\n): void => {\n const notebookPanel = notebookTracker.currentWidget\n writeCodeToCellByIDInNotebookPanel(notebookPanel, code, codeCellID)\n}\n\nexport const writeCodeToCellByIDInNotebookPanel = (\n notebookPanel: NotebookPanel | null,\n code: string | undefined,\n codeCellID: string | undefined,\n): void => {\n if (code === undefined || codeCellID === undefined) {\n return;\n }\n\n const codeMirrorValidCode = removeMarkdownCodeFormatting(code);\n const notebook = notebookPanel?.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 const notebookPanel = notebookTracker.currentWidget\n return getAIOptimizedCellsInNotebookPanel(notebookPanel)\n}\n\nexport const getAIOptimizedCellsInNotebookPanel = (notebookPanel: NotebookPanel | null): AIOptimizedCell[] => {\n const cellList = notebookPanel?.model?.cells\n \n if (cellList == undefined || cellList == null) {\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(notebookPanel: NotebookPanel, index: number): void {\n /* \n Create a new code cell at index and make it the active cell.\n */\n\n const notebook = notebookPanel.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 notebookPanel: NotebookPanel, \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 = getCellByIDInNotebookPanel(notebookPanel, 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 notebookPanel: NotebookPanel | null, \n cellID: string, \n startLine: number | undefined,\n endLine?: number,\n position: WindowedList.BaseScrollToAlignment = 'center'\n): void => {\n\n if (notebookPanel === null) {\n return;\n }\n\n // Scroll to the cell\n scrollToCell(notebookPanel, 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(notebookPanel, cellID, startLine, endLine);\n } else {\n // If no start line was provided, then we just highlight the entire cell\n highlightLinesOfCodeInCodeCell(notebookPanel, cellID, undefined, undefined);\n }\n }, 500);\n}\n\nexport const scrollToCell = (\n notebookPanel: NotebookPanel | null, \n cellID: string, \n startLine: number | undefined,\n position: WindowedList.BaseScrollToAlignment = 'center'\n): void => {\n\n // Get the cell\n const cell = getCellByIDInNotebookPanel(notebookPanel, cellID);\n if (!cell || notebookPanel === null) {\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 = getCellCodeByIDInNotebookPanel(notebookPanel, 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 setActiveCellByIDInNotebookPanel(notebookPanel, cellID);\n\n // Use the new JupyterLab scrollToCell method instead of DOM node scrollIntoView\n void notebookPanel.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\n\nexport const isElectronBasedFrontend = (): boolean => {\n /* \n Checks if the user is using an Electron-based browser.\n This tells us that they are using Mito Desktop or JupyterLab Desktop.\n */\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('electron')\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\n // This is not critical and we never want it to break the app.\n try {\n // First, wait for a notebook to exist with retry pattern\n let notebook = notebookTracker.currentWidget;\n let attempts = 0;\n const maxAttempts = 30; // Wait up to 30 seconds (30 attempts * 1 second each)\n\n while (!notebook && attempts < maxAttempts) {\n console.log(`🔍 Waiting for notebook to appear (attempt ${attempts + 1}/${maxAttempts})...`);\n await new Promise(resolve => setTimeout(resolve, 1000)); // Wait 1 second\n notebook = notebookTracker.currentWidget;\n attempts++;\n }\n\n if (!notebook) {\n throw new Error(`No active notebook found after ${maxAttempts} seconds`);\n }\n\n console.log('🔍 Notebook found, waiting for it to be ready...');\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 } catch (error) {\n console.error('Error waiting for notebook to be ready:', error);\n throw 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 { 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 IDeployAppReply,\n IAppDeployRequest\n} from './appDeployModels';\nimport { BaseWebsocketClient, IBaseWebsocketClientOptions } from '../BaseWebsocketClient';\n\n/**\n * The instantiation options for the app builder client.\n */\nexport interface IAppDeployWebsocketClientOptions 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 AppDeployWebsocketClient extends BaseWebsocketClient<IAppDeployRequest, IDeployAppReply> {\n /**\n * The service URL for the websocket endpoint.\n */\n protected readonly SERVICE_URL = 'mito-ai/app-deploy';\n\n /**\n * Create a new app builder client.\n */\n constructor(options: IAppDeployWebsocketClientOptions = {}) {\n super(options);\n }\n\n /**\n * App builder messages stream.\n */\n get messages(): IStream<AppDeployWebsocketClient, IDeployAppReply> {\n return this._messages as unknown as IStream<AppDeployWebsocketClient, IDeployAppReply>;\n }\n\n /**\n * Stream of connection status events\n */\n get connectionStatus(): IStream<AppDeployWebsocketClient, 'connected' | 'disconnected'> {\n return this._connectionStatus as unknown as IStream<AppDeployWebsocketClient, 'connected' | 'disconnected'>;\n }\n\n /**\n * Extract the message ID from a request message.\n */\n protected getMessageId(message: IAppDeployRequest): string {\n return message.message_id;\n }\n\n /**\n * Process a message received from the websocket.\n */\n protected _onMessage(message: IDeployAppReply): 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\n// appManagerWebSocketClient\nimport { type IStream } from '@lumino/signaling';\nimport type {\n IManageAppReply,\n ICheckAppStatusReply,\n IAppManagerRequest\n} from './appManagerModels';\nimport { BaseWebsocketClient, IBaseWebsocketClientOptions } from '../BaseWebsocketClient';\n\n/**\n * The instantiation options for the app manager client.\n */\nexport interface IAppManagerWebsocketClientOptions extends IBaseWebsocketClientOptions {}\n\n/**\n * Mito AI app manager client\n *\n * It communicates with the backend over a WebSocket for app managing functionality.\n */\nexport class AppManagerWebsocketClient extends BaseWebsocketClient<IAppManagerRequest, IManageAppReply | ICheckAppStatusReply> {\n /**\n * The service URL for the websocket endpoint.\n */\n protected readonly SERVICE_URL = 'mito-ai/app-manager';\n\n /**\n * Create a new app manager client.\n */\n constructor(options: IAppManagerWebsocketClientOptions = {}) {\n super(options);\n }\n\n /**\n * App manager messages stream.\n */\n get messages(): IStream<AppManagerWebsocketClient, IManageAppReply | ICheckAppStatusReply> {\n return this._messages as unknown as IStream<AppManagerWebsocketClient, IManageAppReply | ICheckAppStatusReply>;\n }\n\n /**\n * Stream of connection status events\n */\n get connectionStatus(): IStream<AppManagerWebsocketClient, 'connected' | 'disconnected'> {\n return this._connectionStatus as unknown as IStream<AppManagerWebsocketClient, 'connected' | 'disconnected'>;\n }\n\n /**\n * Get message ID from request (required by BaseWebsocketClient)\n */\n protected getMessageId(request: IAppManagerRequest): string {\n return `${request.type}_${Date.now()}_${Math.random().toString(36).substring(7)}`;\n }\n\n /**\n * Process a message received from the websocket.\n * Routes responses to the appropriate pending requests.\n */\n protected _onMessage(message: IManageAppReply | ICheckAppStatusReply): void {\n // Emit the message to stream listeners\n this._messages.emit(message);\n\n // Determine which pending request this message belongs to\n let pendingId: string | null = null;\n let pendingReply: any = null;\n\n const messageId = (message as any).message_id;\n\n // First, try to match by message_id\n if (messageId && this._pendingRepliesMap.has(messageId)) {\n pendingId = messageId;\n pendingReply = this._pendingRepliesMap.get(messageId);\n }\n // If no message_id, check if this is a response to a single pending request\n else if (this._pendingRepliesMap.size === 1 && !messageId) {\n const entries = Array.from(this._pendingRepliesMap.entries());\n if (entries.length > 0) {\n const entry = entries[0];\n if (entry) {\n pendingId = entry[0];\n pendingReply = entry[1];\n }\n }\n }\n\n // Guard clause - exit if we couldn't find a matching pending request\n if (!pendingId || !pendingReply) {\n return;\n }\n\n // Common cleanup and resolution logic\n this._pendingRepliesMap.delete(pendingId);\n\n if (message.error) {\n pendingReply.reject(new Error(message.error.title || 'Server error'));\n } else {\n pendingReply.resolve(message as any);\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';\nimport { isElectronBasedFrontend } from '../../utils/user';\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 public readonly isElectron: boolean;\n\n /**\n * Create a new completion client.\n */\n constructor(options: ICompletionWebsocketClientOptions = {}) {\n super(options);\n this.isElectron = isElectronBasedFrontend()\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 // Override sendMessage to automatically add environment info\n sendMessage<T extends ICompletionRequest, R extends CompleterMessage>(message: T): Promise<R> {\n // Add environment info to all messages\n const messageWithEnvironment = {\n ...message,\n environment: {\n isElectron: this.isElectron,\n }\n };\n \n return super.sendMessage(messageWithEnvironment);\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.agent-component-header {\n cursor: pointer;\n padding: 10px var(--chat-taskpane-tool-call-horizontal-padding);\n color: var(--jp-ui-font-color2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--jp-cell-editor-border-color);\n border-radius: var(--chat-taskpane-item-border-radius);\n transition: background-color 0.2s ease, border-color 0.2s ease;\n}\n\n.agent-component-header:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.agent-component-header.no-border {\n border: none;\n}\n\n.agent-component-header.expanded {\n border: none;\n border-radius: 5px 5px 0 0;\n background-color: var(--jp-layout-color2);\n}\n\n.agent-component-header.error-fixup {\n border: none;\n}\n\n.agent-component-header.error-fixup.expanded {\n background-color: var(--jp-layout-color2);\n}\n\n.agent-component-header-content {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n}\n\n.agent-component-header-content svg {\n flex-shrink: 0;\n}\n\n.agent-component-header-expand-icon {\n flex-shrink: 0;\n transition: transform 0.2s ease;\n}\n\n.agent-component-header-expand-icon.expanded {\n transform: rotate(90deg);\n} `, \"\",{\"version\":3,\"sources\":[\"webpack://./style/AgentComponentHeader.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,eAAe;IACf,+DAA+D;IAC/D,+BAA+B;IAC/B,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,oDAAoD;IACpD,sDAAsD;IACtD,8DAA8D;AAClE;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,YAAY;IACZ,0BAA0B;IAC1B,yCAAyC;AAC7C;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,SAAS;IACT,OAAO;IACP,YAAY;AAChB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,cAAc;IACd,+BAA+B;AACnC;;AAEA;IACI,wBAAwB;AAC5B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.agent-component-header {\\n cursor: pointer;\\n padding: 10px var(--chat-taskpane-tool-call-horizontal-padding);\\n color: var(--jp-ui-font-color2);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n border: 1px solid var(--jp-cell-editor-border-color);\\n border-radius: var(--chat-taskpane-item-border-radius);\\n transition: background-color 0.2s ease, border-color 0.2s ease;\\n}\\n\\n.agent-component-header:hover {\\n background-color: var(--jp-layout-color3);\\n}\\n\\n.agent-component-header.no-border {\\n border: none;\\n}\\n\\n.agent-component-header.expanded {\\n border: none;\\n border-radius: 5px 5px 0 0;\\n background-color: var(--jp-layout-color2);\\n}\\n\\n.agent-component-header.error-fixup {\\n border: none;\\n}\\n\\n.agent-component-header.error-fixup.expanded {\\n background-color: var(--jp-layout-color2);\\n}\\n\\n.agent-component-header-content {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n flex: 1;\\n min-width: 0;\\n}\\n\\n.agent-component-header-content svg {\\n flex-shrink: 0;\\n}\\n\\n.agent-component-header-expand-icon {\\n flex-shrink: 0;\\n transition: transform 0.2s ease;\\n}\\n\\n.agent-component-header-expand-icon.expanded {\\n transform: rotate(90deg);\\n} \"],\"sourceRoot\":\"\"}]);\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.agent-tool-ui-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: start;\n background-color: transparent;\n padding: 10px;\n color: var(--jp-ui-font-color2);\n}\n\n.agent-tool-ui-container:not(.agent-tool-ui-error-fixup) {\n margin: 10px 0;\n border-radius: 5px;\n border: 1px solid var(--jp-cell-editor-border-color);\n}\n\n.agent-tool-ui-container:not(.agent-tool-ui-error-fixup) .agent-tool-ui-content {\n margin-left: 5px;\n}\n\n.agent-tool-ui-content {\n display: flex;\n align-items: center;\n gap: 10px;\n} \n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/AgentToolUIComponent.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,6BAA6B;IAC7B,aAAa;IACb,+BAA+B;AACnC;;AAEA;IACI,cAAc;IACd,kBAAkB;IAClB,oDAAoD;AACxD;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,SAAS;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.agent-tool-ui-container {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n justify-content: start;\\n background-color: transparent;\\n padding: 10px;\\n color: var(--jp-ui-font-color2);\\n}\\n\\n.agent-tool-ui-container:not(.agent-tool-ui-error-fixup) {\\n margin: 10px 0;\\n border-radius: 5px;\\n border: 1px solid var(--jp-cell-editor-border-color);\\n}\\n\\n.agent-tool-ui-container:not(.agent-tool-ui-error-fixup) .agent-tool-ui-content {\\n margin-left: 5px;\\n}\\n\\n.agent-tool-ui-content {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\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/* Base alert container styles */\n.chat-message-alert-container {\n display: flex;\n flex-direction: column;\n gap: 10px;\n border-radius: 5px;\n padding: 10px;\n border: 1px solid;\n}\n\n/* Red variant for errors */\n.chat-message-alert-container.error {\n background-color: var(--red-300);\n border-color: var(--red-900);\n color: var(--red-900);\n}\n\n/* Purple variant for upgrades/CTAs */\n.chat-message-alert-container.upgrade {\n background-color: var(--purple-300);\n color: var(--grey-900);\n}\n\n.chat-message-alert a {\n color: var(--purple-700) !important;\n text-decoration: underline;\n}\n\n/* Error message styles - red variant */\n.alert-error-message {\n font-size: 14px;\n font-weight: 600;\n line-height: 1.4;\n margin-bottom: 8px;\n}\n\n.chat-message-alert-container.error .alert-error-message {\n color: var(--red-900);\n}\n\n.alert-actions-header {\n margin-bottom: 12px;\n}\n\n.alert-actions-title {\n font-weight: 500;\n margin: 0 0 8px 0;\n font-size: 13px;\n}\n\n.chat-message-alert-container.error .alert-actions-title {\n color: var(--red-900);\n}\n\n.alert-actions-list {\n margin: 0;\n padding-left: 16px;\n}\n\n.chat-message-alert-container.error .alert-actions-list {\n color: var(--red-800);\n}\n\n.chat-message-alert-container.upgrade .alert-actions-list {\n color: var(--purple-800);\n}\n\n.alert-actions-list li {\n margin-bottom: 4px;\n font-size: 13px;\n line-height: 1.4;\n}\n\n.alert-action-item {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px 0;\n font-size: 13px;\n line-height: 1.4;\n}\n\n.chat-message-alert-container.error .alert-action-item {\n color: var(--red-800);\n}\n\n.chat-message-alert-container.upgrade .alert-action-item {\n color: var(--purple-800);\n}\n\n.action-icon {\n font-size: 16px;\n flex-shrink: 0;\n margin-top: 1px;\n}\n\n.details-toggle {\n display: inline-flex;\n align-items: center;\n}\n\n.toggle-button {\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n font-family: inherit;\n text-decoration: underline;\n}\n\n.chat-message-alert-container.error .toggle-button {\n color: var(--red-900);\n}\n\n.toggle-button:hover {\n text-decoration: none;\n}\n\n.chat-message-alert-container.error .toggle-button:hover {\n color: var(--red-800);\n}\n\n.chat-message-alert-container.upgrade .toggle-button:hover {\n color: var(--purple-800);\n}\n\n.toggle-caret {\n font-size: 10px;\n transition: transform 0.2s ease;\n display: inline-block;\n text-decoration: none !important;\n}\n\n.toggle-caret.open {\n transform: rotate(180deg);\n}\n\n.details-content {\n margin-top: 8px;\n margin-left: 16px;\n padding: 8px;\n background-color: var(--grey-100);\n border-radius: 4px;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.secondary-option-link {\n color: var(--purple-700) !important;\n text-decoration: underline !important;\n}\n\n.secondary-option-link:hover {\n color: var(--purple-600) !important;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/AlertBlock.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF,gCAAgC;AAChC;EACE,aAAa;EACb,sBAAsB;EACtB,SAAS;EACT,kBAAkB;EAClB,aAAa;EACb,iBAAiB;AACnB;;AAEA,2BAA2B;AAC3B;EACE,gCAAgC;EAChC,4BAA4B;EAC5B,qBAAqB;AACvB;;AAEA,qCAAqC;AACrC;EACE,mCAAmC;EACnC,sBAAsB;AACxB;;AAEA;EACE,mCAAmC;EACnC,0BAA0B;AAC5B;;AAEA,uCAAuC;AACvC;EACE,eAAe;EACf,gBAAgB;EAChB,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,SAAS;EACT,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,QAAQ;EACR,cAAc;EACd,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,eAAe;EACf,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,YAAY;EACZ,UAAU;EACV,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,eAAe;EACf,oBAAoB;EACpB,0BAA0B;AAC5B;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,eAAe;EACf,+BAA+B;EAC/B,qBAAqB;EACrB,gCAAgC;AAClC;;AAEA;EACE,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,YAAY;EACZ,iCAAiC;EACjC,kBAAkB;EAClB,kCAAkC;AACpC;;AAEA;EACE;IACE,UAAU;IACV,2BAA2B;EAC7B;EACA;IACE,UAAU;IACV,wBAAwB;EAC1B;AACF;;AAEA;IACI,mCAAmC;IACnC,qCAAqC;AACzC;;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/* Base alert container styles */\\n.chat-message-alert-container {\\n display: flex;\\n flex-direction: column;\\n gap: 10px;\\n border-radius: 5px;\\n padding: 10px;\\n border: 1px solid;\\n}\\n\\n/* Red variant for errors */\\n.chat-message-alert-container.error {\\n background-color: var(--red-300);\\n border-color: var(--red-900);\\n color: var(--red-900);\\n}\\n\\n/* Purple variant for upgrades/CTAs */\\n.chat-message-alert-container.upgrade {\\n background-color: var(--purple-300);\\n color: var(--grey-900);\\n}\\n\\n.chat-message-alert a {\\n color: var(--purple-700) !important;\\n text-decoration: underline;\\n}\\n\\n/* Error message styles - red variant */\\n.alert-error-message {\\n font-size: 14px;\\n font-weight: 600;\\n line-height: 1.4;\\n margin-bottom: 8px;\\n}\\n\\n.chat-message-alert-container.error .alert-error-message {\\n color: var(--red-900);\\n}\\n\\n.alert-actions-header {\\n margin-bottom: 12px;\\n}\\n\\n.alert-actions-title {\\n font-weight: 500;\\n margin: 0 0 8px 0;\\n font-size: 13px;\\n}\\n\\n.chat-message-alert-container.error .alert-actions-title {\\n color: var(--red-900);\\n}\\n\\n.alert-actions-list {\\n margin: 0;\\n padding-left: 16px;\\n}\\n\\n.chat-message-alert-container.error .alert-actions-list {\\n color: var(--red-800);\\n}\\n\\n.chat-message-alert-container.upgrade .alert-actions-list {\\n color: var(--purple-800);\\n}\\n\\n.alert-actions-list li {\\n margin-bottom: 4px;\\n font-size: 13px;\\n line-height: 1.4;\\n}\\n\\n.alert-action-item {\\n display: flex;\\n align-items: flex-start;\\n gap: 8px;\\n padding: 8px 0;\\n font-size: 13px;\\n line-height: 1.4;\\n}\\n\\n.chat-message-alert-container.error .alert-action-item {\\n color: var(--red-800);\\n}\\n\\n.chat-message-alert-container.upgrade .alert-action-item {\\n color: var(--purple-800);\\n}\\n\\n.action-icon {\\n font-size: 16px;\\n flex-shrink: 0;\\n margin-top: 1px;\\n}\\n\\n.details-toggle {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.toggle-button {\\n background: none;\\n border: none;\\n padding: 0;\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n font-size: 12px;\\n font-family: inherit;\\n text-decoration: underline;\\n}\\n\\n.chat-message-alert-container.error .toggle-button {\\n color: var(--red-900);\\n}\\n\\n.toggle-button:hover {\\n text-decoration: none;\\n}\\n\\n.chat-message-alert-container.error .toggle-button:hover {\\n color: var(--red-800);\\n}\\n\\n.chat-message-alert-container.upgrade .toggle-button:hover {\\n color: var(--purple-800);\\n}\\n\\n.toggle-caret {\\n font-size: 10px;\\n transition: transform 0.2s ease;\\n display: inline-block;\\n text-decoration: none !important;\\n}\\n\\n.toggle-caret.open {\\n transform: rotate(180deg);\\n}\\n\\n.details-content {\\n margin-top: 8px;\\n margin-left: 16px;\\n padding: 8px;\\n background-color: var(--grey-100);\\n border-radius: 4px;\\n animation: slideDown 0.2s ease-out;\\n}\\n\\n@keyframes slideDown {\\n from {\\n opacity: 0;\\n transform: translateY(-4px);\\n }\\n to {\\n opacity: 1;\\n transform: translateY(0);\\n }\\n}\\n\\n.secondary-option-link {\\n color: var(--purple-700) !important;\\n text-decoration: underline !important;\\n}\\n\\n.secondary-option-link:hover {\\n color: var(--purple-600) !important;\\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/* apps-list.css */\n.apps-list-container {\n padding: 16px;\n font-size: 13px;\n font-family: var(--jp-ui-font-family);\n}\n\n.apps-list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.apps-list-title {\n margin: 0;\n font-size: 14px;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n}\n\n.apps-list-actions {\n display: flex;\n gap: 8px;\n}\n\n.apps-list-button {\n padding: 4px 8px;\n font-size: 11px;\n background-color: transparent;\n color: var(--jp-ui-font-color2);\n border: 1px solid var(--jp-border-color2);\n border-radius: 3px;\n cursor: pointer;\n font-weight: normal;\n transition: background-color 0.2s ease;\n}\n\n.apps-list-button:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.apps-list-button:disabled {\n cursor: not-allowed;\n}\n\n.apps-list-button.primary {\n background-color: var(--jp-brand-color1);\n color: white;\n border: none;\n}\n\n.apps-list-loading {\n color: var(--jp-ui-font-color2);\n text-align: center;\n padding: 20px 0;\n}\n\n.apps-list-error {\n color: #f44336;\n text-align: center;\n padding: 20px 0;\n background-color: var(--jp-layout-color1);\n border: 1px solid #f44336;\n border-radius: 4px;\n}\n\n.apps-list-error-actions {\n margin-top: 8px;\n}\n\n.apps-list-empty {\n color: var(--jp-ui-font-color2);\n text-align: center;\n padding: 20px 0;\n}\n\n.app-item {\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n padding: 12px;\n margin-bottom: 8px;\n background-color: var(--jp-layout-color0);\n}\n\n.app-item-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 8px;\n}\n\n.app-item-content {\n flex: 1;\n}\n\n.app-item-name {\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n margin-bottom: 4px;\n}\n\n.app-item-status-container {\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n}\n\n.app-item-status-indicator {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 6px;\n}\n\n.app-item-status-text {\n color: var(--jp-ui-font-color2);\n font-size: 12px;\n}\n\n.app-item-last-deployed {\n color: var(--jp-ui-font-color2);\n font-size: 11px;\n}\n\n.app-item-url-container {\n display: flex;\n align-items: center;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 3px;\n padding: 6px 8px;\n}\n\n.app-item-url {\n flex: 1;\n color: var(--jp-ui-font-color1);\n font-size: 11px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-family: var(--jp-code-font-family);\n}\n\n.app-item-copy-button {\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: 8px;\n border-radius: 2px;\n}\n\n.app-item-copy-button:hover {\n background-color: var(--jp-layout-color2);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/AppsList.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF,kBAAkB;AAClB;EACE,aAAa;EACb,eAAe;EACf,qCAAqC;AACvC;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,mBAAmB;AACrB;;AAEA;EACE,SAAS;EACT,eAAe;EACf,iBAAiB;EACjB,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,QAAQ;AACV;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,6BAA6B;EAC7B,+BAA+B;EAC/B,yCAAyC;EACzC,kBAAkB;EAClB,eAAe;EACf,mBAAmB;EACnB,sCAAsC;AACxC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,wCAAwC;EACxC,YAAY;EACZ,YAAY;AACd;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,cAAc;EACd,kBAAkB;EAClB,eAAe;EACf,yCAAyC;EACzC,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,yCAAyC;EACzC,kBAAkB;EAClB,aAAa;EACb,kBAAkB;EAClB,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,uBAAuB;EACvB,kBAAkB;AACpB;;AAEA;EACE,OAAO;AACT;;AAEA;EACE,iBAAiB;EACjB,+BAA+B;EAC/B,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;EACrB,UAAU;EACV,WAAW;EACX,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,+BAA+B;EAC/B,eAAe;AACjB;;AAEA;EACE,+BAA+B;EAC/B,eAAe;AACjB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,gBAAgB;AAClB;;AAEA;EACE,OAAO;EACP,+BAA+B;EAC/B,eAAe;EACf,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;EACnB,uCAAuC;AACzC;;AAEA;EACE,YAAY;EACZ,uBAAuB;EACvB,eAAe;EACf,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA;EACE,yCAAyC;AAC3C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n/* apps-list.css */\\n.apps-list-container {\\n padding: 16px;\\n font-size: 13px;\\n font-family: var(--jp-ui-font-family);\\n}\\n\\n.apps-list-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin-bottom: 16px;\\n}\\n\\n.apps-list-title {\\n margin: 0;\\n font-size: 14px;\\n font-weight: bold;\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.apps-list-actions {\\n display: flex;\\n gap: 8px;\\n}\\n\\n.apps-list-button {\\n padding: 4px 8px;\\n font-size: 11px;\\n background-color: transparent;\\n color: var(--jp-ui-font-color2);\\n border: 1px solid var(--jp-border-color2);\\n border-radius: 3px;\\n cursor: pointer;\\n font-weight: normal;\\n transition: background-color 0.2s ease;\\n}\\n\\n.apps-list-button:hover {\\n background-color: var(--jp-layout-color2);\\n}\\n\\n.apps-list-button:disabled {\\n cursor: not-allowed;\\n}\\n\\n.apps-list-button.primary {\\n background-color: var(--jp-brand-color1);\\n color: white;\\n border: none;\\n}\\n\\n.apps-list-loading {\\n color: var(--jp-ui-font-color2);\\n text-align: center;\\n padding: 20px 0;\\n}\\n\\n.apps-list-error {\\n color: #f44336;\\n text-align: center;\\n padding: 20px 0;\\n background-color: var(--jp-layout-color1);\\n border: 1px solid #f44336;\\n border-radius: 4px;\\n}\\n\\n.apps-list-error-actions {\\n margin-top: 8px;\\n}\\n\\n.apps-list-empty {\\n color: var(--jp-ui-font-color2);\\n text-align: center;\\n padding: 20px 0;\\n}\\n\\n.app-item {\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 4px;\\n padding: 12px;\\n margin-bottom: 8px;\\n background-color: var(--jp-layout-color0);\\n}\\n\\n.app-item-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: flex-start;\\n margin-bottom: 8px;\\n}\\n\\n.app-item-content {\\n flex: 1;\\n}\\n\\n.app-item-name {\\n font-weight: bold;\\n color: var(--jp-ui-font-color1);\\n margin-bottom: 4px;\\n}\\n\\n.app-item-status-container {\\n display: flex;\\n align-items: center;\\n margin-bottom: 4px;\\n}\\n\\n.app-item-status-indicator {\\n display: inline-block;\\n width: 8px;\\n height: 8px;\\n border-radius: 50%;\\n margin-right: 6px;\\n}\\n\\n.app-item-status-text {\\n color: var(--jp-ui-font-color2);\\n font-size: 12px;\\n}\\n\\n.app-item-last-deployed {\\n color: var(--jp-ui-font-color2);\\n font-size: 11px;\\n}\\n\\n.app-item-url-container {\\n display: flex;\\n align-items: center;\\n background-color: var(--jp-layout-color1);\\n border: 1px solid var(--jp-border-color2);\\n border-radius: 3px;\\n padding: 6px 8px;\\n}\\n\\n.app-item-url {\\n flex: 1;\\n color: var(--jp-ui-font-color1);\\n font-size: 11px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n font-family: var(--jp-code-font-family);\\n}\\n\\n.app-item-copy-button {\\n border: none;\\n background: transparent;\\n cursor: pointer;\\n padding: 2px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n margin-left: 8px;\\n border-radius: 2px;\\n}\\n\\n.app-item-copy-button:hover {\\n background-color: var(--jp-layout-color2);\\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.assumption-tool-container {\n color: var(--jp-ui-font-color2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n margin-bottom: 10px;\n position: relative;\n padding: 8px var(--chat-taskpane-tool-call-horizontal-padding);\n border-radius: var(--chat-taskpane-item-border-radius);\n border: 1px solid var(--jp-cell-editor-border-color);\n cursor: default;\n}\n\n.assumption-header-label {\n position: absolute;\n top: -10px;\n left: 12px;\n background-color: var(--chat-background-color);\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n font-style: italic;\n}\n\n.assumption-content {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n line-height: 1.4;\n margin: 0;\n padding: 10px 10px 5px 10px;\n}\n\n.assumption-content ul {\n margin: 0;\n padding-left: 10px;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/AssumptionTool.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,+BAA+B;IAC/B,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,kBAAkB;IAClB,8DAA8D;IAC9D,sDAAsD;IACtD,oDAAoD;IACpD,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,UAAU;IACV,8CAA8C;IAC9C,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,+BAA+B;IAC/B,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,uBAAuB;IACvB,QAAQ;IACR,+BAA+B;IAC/B,eAAe;IACf,gBAAgB;IAChB,SAAS;IACT,2BAA2B;AAC/B;;AAEA;IACI,SAAS;IACT,kBAAkB;AACtB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.assumption-tool-container {\\n color: var(--jp-ui-font-color2);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin-top: 10px;\\n margin-bottom: 10px;\\n position: relative;\\n padding: 8px var(--chat-taskpane-tool-call-horizontal-padding);\\n border-radius: var(--chat-taskpane-item-border-radius);\\n border: 1px solid var(--jp-cell-editor-border-color);\\n cursor: default;\\n}\\n\\n.assumption-header-label {\\n position: absolute;\\n top: -10px;\\n left: 12px;\\n background-color: var(--chat-background-color);\\n padding: 2px 8px;\\n border-radius: 4px;\\n font-size: 12px;\\n color: var(--jp-ui-font-color2);\\n font-style: italic;\\n}\\n\\n.assumption-content {\\n display: flex;\\n align-items: flex-start;\\n gap: 8px;\\n color: var(--jp-ui-font-color2);\\n font-size: 14px;\\n line-height: 1.4;\\n margin: 0;\\n padding: 10px 10px 5px 10px;\\n}\\n\\n.assumption-content ul {\\n margin: 0;\\n padding-left: 10px;\\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/* Auth popup specific styling to integrate AWS Amplify with Mito theme */\n.modal-content .amplify-authenticator {\n --amplify-colors-font-primary: var(--jp-ui-font-color1);\n --amplify-colors-font-secondary: var(--jp-ui-font-color2);\n --amplify-colors-background-primary: var(--jp-layout-color0);\n --amplify-colors-background-secondary: var(--jp-layout-color1);\n --amplify-colors-border-primary: var(--jp-border-color1);\n --amplify-colors-brand-primary-10: var(--purple-700);\n --amplify-colors-brand-primary-80: var(--purple-500);\n --amplify-colors-brand-primary-90: var(--purple-400);\n --amplify-colors-brand-primary-100: var(--purple-300);\n --amplify-radii-small: 4px;\n --amplify-radii-medium: 4px;\n --amplify-space-small: 8px;\n --amplify-space-medium: 12px;\n --amplify-space-large: 16px;\n --amplify-font-sizes-small: 14px;\n --amplify-font-sizes-medium: 14px;\n \n /* Remove the blue top border on active tabs */\n --amplify-components-tabs-item-active-border-width: 0;\n --amplify-components-tabs-item-border-width: 0;\n \n /* Ensure active tab bottom border uses purple */\n --amplify-components-tabs-item-active-border-color: var(--purple-500);\n --amplify-components-tabs-item-active-color: var(--purple-700);\n}\n\n/* Ensure modal content has adequate width for auth form */\n.modal-content:has(.amplify-authenticator) {\n width: 480px;\n max-width: 90vw;\n min-width: 400px;\n}\n\n/* Style the authenticator container */\n.modal-content .amplify-authenticator__modal {\n background: transparent !important;\n box-shadow: none !important;\n border: none !important;\n}\n\n/* Constrain authenticator content within modal bounds */\n.modal-content .amplify-authenticator {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n}\n\n/* Specifically target the data-amplify-container to prevent overflow */\n.modal-content [data-amplify-container] {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n box-sizing: border-box !important;\n}\n\n\n\n/* Constrain the tabs container */\n.modal-content .amplify-tabs {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n}\n\n/* Ensure form fields don't overflow */\n.modal-content .amplify-field,\n.modal-content .amplify-field__group {\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n}\n\n/* Align form elements with Mito styling */\n.modal-content .amplify-field__label {\n color: var(--jp-ui-font-color1) !important;\n font-weight: 500 !important;\n}\n\n.modal-content .amplify-input,\n.modal-content .amplify-select {\n background: var(--jp-layout-color0) !important;\n border: 1px solid var(--jp-border-color1) !important;\n color: var(--jp-ui-font-color1) !important;\n border-radius: 4px !important;\n}\n\n.modal-content .amplify-input:focus,\n.modal-content .amplify-select:focus {\n border-color: var(--purple-500) !important;\n box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1) !important;\n}\n\n\n\n/* Style Amplify buttons to match Mito theme */\n.modal-content .amplify-button--primary {\n background-color: var(--purple-400) !important;\n color: var(--purple-700) !important;\n border: none !important;\n border-radius: 4px !important;\n font-weight: 500 !important;\n padding: 8px 16px !important;\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n}\n\n.modal-content .amplify-button--primary:hover {\n background-color: var(--purple-500) !important;\n}\n\n.modal-content .amplify-button--link {\n color: var(--purple-600) !important;\n text-decoration: none !important;\n}\n\n.modal-content .amplify-button--link:hover {\n color: var(--purple-700) !important;\n text-decoration: underline !important;\n}\n\n/* Error and success message styling */\n.modal-content .amplify-alert--error {\n background-color: var(--red-300) !important;\n color: var(--red-900) !important;\n border: 1px solid var(--red-400) !important;\n border-radius: 4px !important;\n}\n\n.modal-content .amplify-alert--info {\n background-color: var(--purple-300) !important;\n color: var(--purple-700) !important;\n border: 1px solid var(--purple-400) !important;\n border-radius: 4px !important;\n}\n\n/* Tab styling for sign in/sign up tabs */\n.modal-content .amplify-tabs__item {\n color: var(--jp-ui-font-color2) !important;\n border-bottom: 2px solid transparent !important;\n}\n\n.modal-content .amplify-tabs__item[data-state=\"active\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n/* Ensure inactive tabs don't have purple styling */\n.modal-content .amplify-tabs__item[data-state=\"inactive\"] {\n color: var(--jp-ui-font-color2) !important;\n border-bottom: 2px solid transparent !important;\n}\n\n\n\n.modal-content .amplify-tabs__item:hover {\n color: var(--jp-ui-font-color1) !important;\n}\n\n/* Override any default blue tab styling from Amplify */\n.modal-content .amplify-tabs__list {\n border-bottom: 1px solid var(--jp-border-color1) !important;\n}\n\n.modal-content .amplify-tabs__item[data-state=\"active\"]:after,\n.modal-content .amplify-tabs__item[aria-selected=\"true\"]:after {\n background-color: var(--purple-500) !important;\n border-color: var(--purple-500) !important;\n}\n\n/* Override any Amplify default blue colors */\n.modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[data-state=\"active\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n.modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[aria-selected=\"true\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n/* Additional selectors to ensure default active state on initial load */\n.modal-content .amplify-tabs__item[aria-selected=\"true\"] {\n color: var(--purple-700) !important;\n border-bottom: 2px solid var(--purple-500) !important;\n}\n\n\n\n/* Loading spinner colors */\n.modal-content .amplify-loader {\n border-top-color: var(--purple-500) !important;\n}\n\n/* Additional purple color overrides for any remaining blue elements */\n.modal-content .amplify-tabs__item[data-state=\"active\"] *,\n.modal-content .amplify-tabs__item[aria-selected=\"true\"] * {\n color: var(--purple-700) !important;\n}\n\n/* Override focus states to use purple */\n.modal-content .amplify-tabs__item:focus,\n.modal-content .amplify-tabs__item:focus-visible {\n border-bottom-color: var(--purple-500) !important;\n outline-color: var(--purple-500) !important;\n}\n\n/* Ensure any nested tab content uses purple theme */\n.modal-content [data-amplify-authenticator] [data-amplify-router] .amplify-tabs__item[data-state=\"active\"] {\n color: var(--purple-700) !important;\n border-bottom-color: var(--purple-500) !important;\n}\n\n/* Remove any top borders, outlines, or blue styling from tabs */\n.modal-content .amplify-tabs__item {\n border-top: none !important;\n border-left: none !important;\n border-right: none !important;\n outline: none !important;\n}\n\n.modal-content .amplify-tabs__item[data-state=\"active\"],\n.modal-content .amplify-tabs__item[aria-selected=\"true\"] {\n border-top: none !important;\n border-left: none !important;\n border-right: none !important;\n outline: none !important;\n box-shadow: none !important;\n}\n\n/* Remove any pseudo-element borders that might create blue lines */\n.modal-content .amplify-tabs__item:before,\n.modal-content .amplify-tabs__item:after,\n.modal-content .amplify-tabs__item[data-state=\"active\"]:before,\n.modal-content .amplify-tabs__item[aria-selected=\"true\"]:before {\n display: none !important;\n border: none !important;\n background: none !important;\n}\n\n\n\n/* Additional containment rules for better layout */\n.modal-content .amplify-authenticator * {\n box-sizing: border-box !important;\n}\n\n/* Prevent any Amplify containers from overflowing */\n.modal-content [data-amplify-authenticator],\n.modal-content [data-amplify-router],\n.modal-content [data-amplify-authenticator-signin],\n.modal-content [data-amplify-authenticator-signup] {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n box-sizing: border-box !important;\n}\n\n/* Remove any default margins or padding that might cause overflow */\n.modal-content [data-amplify-container] * {\n max-width: 100% !important;\n}\n\n/* Ensure modal content itself doesn't allow horizontal scroll */\n.modal-content:has(.amplify-authenticator) {\n overflow-x: hidden !important;\n}\n\n/* Target main Amplify containers but not inputs */\n.modal-content div[data-amplify-container] {\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n}\n\n/* Ensure tab panels fit within bounds */\n.modal-content .amplify-tabs__panel {\n width: 100% !important;\n max-width: 100% !important;\n overflow: hidden !important;\n padding: 16px !important;\n}\n\n/* Ensure tab list doesn't overflow */\n.modal-content .amplify-tabs__list {\n width: 100% !important;\n max-width: 100% !important;\n display: flex !important;\n justify-content: space-around !important;\n}\n\n.modal-content .amplify-tabs__item {\n flex: 1 !important;\n text-align: center !important;\n max-width: 50% !important;\n}\n\n/* Add this to your AuthPopup.css file */\n\n/* Hide password requirements by default */\n.password-requirements {\n display: none;\n padding: 16px 20px;\n background-color: var(--jp-layout-color2);\n border-top: 1px solid var(--jp-border-color1);\n font-size: 13px;\n}\n\n/* Show password requirements when sign-up form is present */\n.modal-content:has([data-amplify-authenticator-signup]) .password-requirements {\n display: block;\n}\n\n/* Style the requirements content */\n.password-requirements p {\n margin: 0 0 8px 0;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n}\n\n.password-requirements ul {\n margin: 0;\n padding-left: 20px;\n color: var(--jp-ui-font-color2);\n font-size: 12px;\n}\n\n/* Success message styling */\n.auth-success-message {\n padding: 32px 24px;\n text-align: center;\n background: var(--jp-layout-color0);\n border-radius: 8px;\n}\n\n.success-icon {\n margin-bottom: 20px;\n display: flex;\n justify-content: center;\n}\n\n.success-title {\n color: var(--jp-ui-font-color1);\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 12px 0;\n font-family: var(--jp-ui-font-family);\n}\n\n.success-description {\n color: var(--jp-ui-font-color1);\n font-size: 16px;\n margin: 0 0 16px 0;\n font-family: var(--jp-ui-font-family);\n line-height: 1.5;\n}\n\n.success-timer {\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n margin: 0 0 24px 0;\n font-family: var(--jp-ui-font-family);\n font-style: italic;\n}\n\n.success-actions {\n display: flex;\n justify-content: center;\n gap: 12px;\n}\n\n/* Progress bar animation */\n@keyframes progressFill {\n from { width: 0%; }\n to { width: 100%; }\n}\n\n/* Welcome message container styling */\n.welcome-message-container {\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n padding: 32px 24px;\n margin: 16px 0;\n background-color: var(--jp-layout-color0);\n text-align: center;\n}\n\n/* Welcome message title */\n.welcome-message-title {\n color: var(--jp-ui-font-color1);\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 12px 0;\n font-family: var(--jp-ui-font-family);\n}\n\n/* Welcome message description */\n.welcome-message-description {\n color: var(--jp-ui-font-color1);\n font-size: 16px;\n margin: 0 0 16px 0;\n font-family: var(--jp-ui-font-family);\n line-height: 1.5;\n}\n\n/* Progress bar container */\n.progress-bar-container {\n width: 100%;\n height: 4px;\n background-color: var(--jp-border-color1);\n border-radius: 2px;\n overflow: hidden;\n margin-top: 20px;\n margin-bottom: 12px;\n}\n\n/* Progress bar fill with CSS animation */\n.progress-bar-fill {\n width: 0%;\n height: 100%;\n background-color: var(--purple-500);\n border-radius: 2px;\n animation: progressFill 3s linear forwards;\n}\n\n/* Progress bar timer text */\n.progress-bar-timer {\n color: var(--jp-ui-font-color2);\n font-size: 14px;\n margin: 0;\n font-family: var(--jp-ui-font-family);\n font-style: italic;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/AuthPopup.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/* Auth popup specific styling to integrate AWS Amplify with Mito theme */\\n.modal-content .amplify-authenticator {\\n --amplify-colors-font-primary: var(--jp-ui-font-color1);\\n --amplify-colors-font-secondary: var(--jp-ui-font-color2);\\n --amplify-colors-background-primary: var(--jp-layout-color0);\\n --amplify-colors-background-secondary: var(--jp-layout-color1);\\n --amplify-colors-border-primary: var(--jp-border-color1);\\n --amplify-colors-brand-primary-10: var(--purple-700);\\n --amplify-colors-brand-primary-80: var(--purple-500);\\n --amplify-colors-brand-primary-90: var(--purple-400);\\n --amplify-colors-brand-primary-100: var(--purple-300);\\n --amplify-radii-small: 4px;\\n --amplify-radii-medium: 4px;\\n --amplify-space-small: 8px;\\n --amplify-space-medium: 12px;\\n --amplify-space-large: 16px;\\n --amplify-font-sizes-small: 14px;\\n --amplify-font-sizes-medium: 14px;\\n \\n /* Remove the blue top border on active tabs */\\n --amplify-components-tabs-item-active-border-width: 0;\\n --amplify-components-tabs-item-border-width: 0;\\n \\n /* Ensure active tab bottom border uses purple */\\n --amplify-components-tabs-item-active-border-color: var(--purple-500);\\n --amplify-components-tabs-item-active-color: var(--purple-700);\\n}\\n\\n/* Ensure modal content has adequate width for auth form */\\n.modal-content:has(.amplify-authenticator) {\\n width: 480px;\\n max-width: 90vw;\\n min-width: 400px;\\n}\\n\\n/* Style the authenticator container */\\n.modal-content .amplify-authenticator__modal {\\n background: transparent !important;\\n box-shadow: none !important;\\n border: none !important;\\n}\\n\\n/* Constrain authenticator content within modal bounds */\\n.modal-content .amplify-authenticator {\\n width: 100% !important;\\n max-width: 100% !important;\\n overflow: hidden !important;\\n}\\n\\n/* Specifically target the data-amplify-container to prevent overflow */\\n.modal-content [data-amplify-container] {\\n width: 100% !important;\\n max-width: 100% !important;\\n overflow: hidden !important;\\n box-sizing: border-box !important;\\n}\\n\\n\\n\\n/* Constrain the tabs container */\\n.modal-content .amplify-tabs {\\n width: 100% !important;\\n max-width: 100% !important;\\n overflow: hidden !important;\\n}\\n\\n/* Ensure form fields don't overflow */\\n.modal-content .amplify-field,\\n.modal-content .amplify-field__group {\\n width: 100% !important;\\n max-width: 100% !important;\\n box-sizing: border-box !important;\\n}\\n\\n/* Align form elements with Mito styling */\\n.modal-content .amplify-field__label {\\n color: var(--jp-ui-font-color1) !important;\\n font-weight: 500 !important;\\n}\\n\\n.modal-content .amplify-input,\\n.modal-content .amplify-select {\\n background: var(--jp-layout-color0) !important;\\n border: 1px solid var(--jp-border-color1) !important;\\n color: var(--jp-ui-font-color1) !important;\\n border-radius: 4px !important;\\n}\\n\\n.modal-content .amplify-input:focus,\\n.modal-content .amplify-select:focus {\\n border-color: var(--purple-500) !important;\\n box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.1) !important;\\n}\\n\\n\\n\\n/* Style Amplify buttons to match Mito theme */\\n.modal-content .amplify-button--primary {\\n background-color: var(--purple-400) !important;\\n color: var(--purple-700) !important;\\n border: none !important;\\n border-radius: 4px !important;\\n font-weight: 500 !important;\\n padding: 8px 16px !important;\\n width: 100% !important;\\n max-width: 100% !important;\\n box-sizing: border-box !important;\\n}\\n\\n.modal-content .amplify-button--primary:hover {\\n background-color: var(--purple-500) !important;\\n}\\n\\n.modal-content .amplify-button--link {\\n color: var(--purple-600) !important;\\n text-decoration: none !important;\\n}\\n\\n.modal-content .amplify-button--link:hover {\\n color: var(--purple-700) !important;\\n text-decoration: underline !important;\\n}\\n\\n/* Error and success message styling */\\n.modal-content .amplify-alert--error {\\n background-color: var(--red-300) !important;\\n color: var(--red-900) !important;\\n border: 1px solid var(--red-400) !important;\\n border-radius: 4px !important;\\n}\\n\\n.modal-content .amplify-alert--info {\\n background-color: var(--purple-300) !important;\\n color: var(--purple-700) !important;\\n border: 1px solid var(--purple-400) !important;\\n border-radius: 4px !important;\\n}\\n\\n/* Tab styling for sign in/sign up tabs */\\n.modal-content .amplify-tabs__item {\\n color: var(--jp-ui-font-color2) !important;\\n border-bottom: 2px solid transparent !important;\\n}\\n\\n.modal-content .amplify-tabs__item[data-state=\\\"active\\\"] {\\n color: var(--purple-700) !important;\\n border-bottom-color: var(--purple-500) !important;\\n}\\n\\n/* Ensure inactive tabs don't have purple styling */\\n.modal-content .amplify-tabs__item[data-state=\\\"inactive\\\"] {\\n color: var(--jp-ui-font-color2) !important;\\n border-bottom: 2px solid transparent !important;\\n}\\n\\n\\n\\n.modal-content .amplify-tabs__item:hover {\\n color: var(--jp-ui-font-color1) !important;\\n}\\n\\n/* Override any default blue tab styling from Amplify */\\n.modal-content .amplify-tabs__list {\\n border-bottom: 1px solid var(--jp-border-color1) !important;\\n}\\n\\n.modal-content .amplify-tabs__item[data-state=\\\"active\\\"]:after,\\n.modal-content .amplify-tabs__item[aria-selected=\\\"true\\\"]:after {\\n background-color: var(--purple-500) !important;\\n border-color: var(--purple-500) !important;\\n}\\n\\n/* Override any Amplify default blue colors */\\n.modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[data-state=\\\"active\\\"] {\\n color: var(--purple-700) !important;\\n border-bottom-color: var(--purple-500) !important;\\n}\\n\\n.modal-content .amplify-tabs [data-amplify-color-mode] .amplify-tabs__item[aria-selected=\\\"true\\\"] {\\n color: var(--purple-700) !important;\\n border-bottom-color: var(--purple-500) !important;\\n}\\n\\n/* Additional selectors to ensure default active state on initial load */\\n.modal-content .amplify-tabs__item[aria-selected=\\\"true\\\"] {\\n color: var(--purple-700) !important;\\n border-bottom: 2px solid var(--purple-500) !important;\\n}\\n\\n\\n\\n/* Loading spinner colors */\\n.modal-content .amplify-loader {\\n border-top-color: var(--purple-500) !important;\\n}\\n\\n/* Additional purple color overrides for any remaining blue elements */\\n.modal-content .amplify-tabs__item[data-state=\\\"active\\\"] *,\\n.modal-content .amplify-tabs__item[aria-selected=\\\"true\\\"] * {\\n color: var(--purple-700) !important;\\n}\\n\\n/* Override focus states to use purple */\\n.modal-content .amplify-tabs__item:focus,\\n.modal-content .amplify-tabs__item:focus-visible {\\n border-bottom-color: var(--purple-500) !important;\\n outline-color: var(--purple-500) !important;\\n}\\n\\n/* Ensure any nested tab content uses purple theme */\\n.modal-content [data-amplify-authenticator] [data-amplify-router] .amplify-tabs__item[data-state=\\\"active\\\"] {\\n color: var(--purple-700) !important;\\n border-bottom-color: var(--purple-500) !important;\\n}\\n\\n/* Remove any top borders, outlines, or blue styling from tabs */\\n.modal-content .amplify-tabs__item {\\n border-top: none !important;\\n border-left: none !important;\\n border-right: none !important;\\n outline: none !important;\\n}\\n\\n.modal-content .amplify-tabs__item[data-state=\\\"active\\\"],\\n.modal-content .amplify-tabs__item[aria-selected=\\\"true\\\"] {\\n border-top: none !important;\\n border-left: none !important;\\n border-right: none !important;\\n outline: none !important;\\n box-shadow: none !important;\\n}\\n\\n/* Remove any pseudo-element borders that might create blue lines */\\n.modal-content .amplify-tabs__item:before,\\n.modal-content .amplify-tabs__item:after,\\n.modal-content .amplify-tabs__item[data-state=\\\"active\\\"]:before,\\n.modal-content .amplify-tabs__item[aria-selected=\\\"true\\\"]:before {\\n display: none !important;\\n border: none !important;\\n background: none !important;\\n}\\n\\n\\n\\n/* Additional containment rules for better layout */\\n.modal-content .amplify-authenticator * {\\n box-sizing: border-box !important;\\n}\\n\\n/* Prevent any Amplify containers from overflowing */\\n.modal-content [data-amplify-authenticator],\\n.modal-content [data-amplify-router],\\n.modal-content [data-amplify-authenticator-signin],\\n.modal-content [data-amplify-authenticator-signup] {\\n width: 100% !important;\\n max-width: 100% !important;\\n overflow: hidden !important;\\n box-sizing: border-box !important;\\n}\\n\\n/* Remove any default margins or padding that might cause overflow */\\n.modal-content [data-amplify-container] * {\\n max-width: 100% !important;\\n}\\n\\n/* Ensure modal content itself doesn't allow horizontal scroll */\\n.modal-content:has(.amplify-authenticator) {\\n overflow-x: hidden !important;\\n}\\n\\n/* Target main Amplify containers but not inputs */\\n.modal-content div[data-amplify-container] {\\n width: 100% !important;\\n max-width: 100% !important;\\n box-sizing: border-box !important;\\n}\\n\\n/* Ensure tab panels fit within bounds */\\n.modal-content .amplify-tabs__panel {\\n width: 100% !important;\\n max-width: 100% !important;\\n overflow: hidden !important;\\n padding: 16px !important;\\n}\\n\\n/* Ensure tab list doesn't overflow */\\n.modal-content .amplify-tabs__list {\\n width: 100% !important;\\n max-width: 100% !important;\\n display: flex !important;\\n justify-content: space-around !important;\\n}\\n\\n.modal-content .amplify-tabs__item {\\n flex: 1 !important;\\n text-align: center !important;\\n max-width: 50% !important;\\n}\\n\\n/* Add this to your AuthPopup.css file */\\n\\n/* Hide password requirements by default */\\n.password-requirements {\\n display: none;\\n padding: 16px 20px;\\n background-color: var(--jp-layout-color2);\\n border-top: 1px solid var(--jp-border-color1);\\n font-size: 13px;\\n}\\n\\n/* Show password requirements when sign-up form is present */\\n.modal-content:has([data-amplify-authenticator-signup]) .password-requirements {\\n display: block;\\n}\\n\\n/* Style the requirements content */\\n.password-requirements p {\\n margin: 0 0 8px 0;\\n font-weight: bold;\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.password-requirements ul {\\n margin: 0;\\n padding-left: 20px;\\n color: var(--jp-ui-font-color2);\\n font-size: 12px;\\n}\\n\\n/* Success message styling */\\n.auth-success-message {\\n padding: 32px 24px;\\n text-align: center;\\n background: var(--jp-layout-color0);\\n border-radius: 8px;\\n}\\n\\n.success-icon {\\n margin-bottom: 20px;\\n display: flex;\\n justify-content: center;\\n}\\n\\n.success-title {\\n color: var(--jp-ui-font-color1);\\n font-size: 24px;\\n font-weight: 600;\\n margin: 0 0 12px 0;\\n font-family: var(--jp-ui-font-family);\\n}\\n\\n.success-description {\\n color: var(--jp-ui-font-color1);\\n font-size: 16px;\\n margin: 0 0 16px 0;\\n font-family: var(--jp-ui-font-family);\\n line-height: 1.5;\\n}\\n\\n.success-timer {\\n color: var(--jp-ui-font-color2);\\n font-size: 14px;\\n margin: 0 0 24px 0;\\n font-family: var(--jp-ui-font-family);\\n font-style: italic;\\n}\\n\\n.success-actions {\\n display: flex;\\n justify-content: center;\\n gap: 12px;\\n}\\n\\n/* Progress bar animation */\\n@keyframes progressFill {\\n from { width: 0%; }\\n to { width: 100%; }\\n}\\n\\n/* Welcome message container styling */\\n.welcome-message-container {\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 8px;\\n padding: 32px 24px;\\n margin: 16px 0;\\n background-color: var(--jp-layout-color0);\\n text-align: center;\\n}\\n\\n/* Welcome message title */\\n.welcome-message-title {\\n color: var(--jp-ui-font-color1);\\n font-size: 24px;\\n font-weight: 600;\\n margin: 0 0 12px 0;\\n font-family: var(--jp-ui-font-family);\\n}\\n\\n/* Welcome message description */\\n.welcome-message-description {\\n color: var(--jp-ui-font-color1);\\n font-size: 16px;\\n margin: 0 0 16px 0;\\n font-family: var(--jp-ui-font-family);\\n line-height: 1.5;\\n}\\n\\n/* Progress bar container */\\n.progress-bar-container {\\n width: 100%;\\n height: 4px;\\n background-color: var(--jp-border-color1);\\n border-radius: 2px;\\n overflow: hidden;\\n margin-top: 20px;\\n margin-bottom: 12px;\\n}\\n\\n/* Progress bar fill with CSS animation */\\n.progress-bar-fill {\\n width: 0%;\\n height: 100%;\\n background-color: var(--purple-500);\\n border-radius: 2px;\\n animation: progressFill 3s linear forwards;\\n}\\n\\n/* Progress bar timer text */\\n.progress-bar-timer {\\n color: var(--jp-ui-font-color2);\\n font-size: 14px;\\n margin: 0;\\n font-family: var(--jp-ui-font-family);\\n font-style: italic;\\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.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 flex-direction: column;\n width: 100%;\n border: 1px solid var(--jp-border-color1);\n border-radius: 5px;\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 overflow-y: auto;\n max-height: 350px;\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 overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\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-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\n.chat-dropdown-search {\n padding: 8px;\n background-color: var(--jp-layout-color1);\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n}\n\n.chat-dropdown-search-input {\n width: 100%;\n padding: 6px 8px;\n border-radius: 3px;\n font-size: 12px;\n font-family: var(--jp-ui-font-family);\n background-color: var(--jp-layout-color1);\n color: var(--jp-content-font-color1);\n outline: none;\n border: none;\n box-sizing: border-box;\n}\n\n.chat-dropdown-search-input:focus {\n outline: none;\n border: none;\n}\n\n.chat-dropdown-search-input::placeholder {\n color: var(--jp-content-font-color3);\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,sBAAsB;EACtB,WAAW;EACX,yCAAyC;EACzC,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,kBAAkB;EAClB,yCAAyC;EACzC,qBAAqB;EACrB,UAAU;EACV,SAAS;EACT,WAAW;EACX,wCAAwC;EACxC,gBAAgB;EAChB,iBAAiB;AACnB;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,oCAAoC;EACpC,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;;EAEE,yCAAyC;AAC3C;;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;;AAEA;EACE,YAAY;EACZ,yCAAyC;EACzC,2BAA2B;EAC3B,4BAA4B;AAC9B;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,qCAAqC;EACrC,yCAAyC;EACzC,oCAAoC;EACpC,aAAa;EACb,YAAY;EACZ,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,YAAY;AACd;;AAEA;EACE,oCAAoC;AACtC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.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 flex-direction: column;\\n width: 100%;\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 5px;\\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 overflow-y: auto;\\n max-height: 350px;\\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 overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\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-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\\n.chat-dropdown-search {\\n padding: 8px;\\n background-color: var(--jp-layout-color1);\\n border-top-left-radius: 5px;\\n border-top-right-radius: 5px;\\n}\\n\\n.chat-dropdown-search-input {\\n width: 100%;\\n padding: 6px 8px;\\n border-radius: 3px;\\n font-size: 12px;\\n font-family: var(--jp-ui-font-family);\\n background-color: var(--jp-layout-color1);\\n color: var(--jp-content-font-color1);\\n outline: none;\\n border: none;\\n box-sizing: border-box;\\n}\\n\\n.chat-dropdown-search-input:focus {\\n outline: none;\\n border: none;\\n}\\n\\n.chat-dropdown-search-input::placeholder {\\n color: var(--jp-content-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.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}\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\n.context-button {\n display: flex;\n align-items: center;\n background-color: var(--jp-layout-color2);\n border: 1px solid var(--jp-border-color1);\n border-radius: 3px;\n padding: 4px 8px;\n font-size: 12px;\n height: var(--chat-context-button-height);\n cursor: pointer;\n color: var(--jp-content-font-color1);\n transition: background-color 0.2s ease;\n}\n\n.context-button:hover {\n background-color: var(--jp-layout-color3);\n}\n\n/* Disabled state styles */\n.chat-input:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n background-color: var(--jp-layout-color2);\n}\n\n.context-button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n background-color: var(--jp-layout-color2);\n}\n\n.context-button:disabled:hover {\n background-color: var(--jp-layout-color2);\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;AACf;;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;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,yCAAyC;EACzC,eAAe;EACf,oCAAoC;EACpC,sCAAsC;AACxC;;AAEA;EACE,yCAAyC;AAC3C;;AAEA,0BAA0B;AAC1B;EACE,YAAY;EACZ,mBAAmB;EACnB,yCAAyC;AAC3C;;AAEA;EACE,YAAY;EACZ,mBAAmB;EACnB,yCAAyC;AAC3C;;AAEA;EACE,yCAAyC;AAC3C\",\"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}\\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\\n.context-button {\\n display: flex;\\n align-items: center;\\n background-color: var(--jp-layout-color2);\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 3px;\\n padding: 4px 8px;\\n font-size: 12px;\\n height: var(--chat-context-button-height);\\n cursor: pointer;\\n color: var(--jp-content-font-color1);\\n transition: background-color 0.2s ease;\\n}\\n\\n.context-button:hover {\\n background-color: var(--jp-layout-color3);\\n}\\n\\n/* Disabled state styles */\\n.chat-input:disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n background-color: var(--jp-layout-color2);\\n}\\n\\n.context-button:disabled {\\n opacity: 0.6;\\n cursor: not-allowed;\\n background-color: var(--jp-layout-color2);\\n}\\n\\n.context-button:disabled:hover {\\n background-color: var(--jp-layout-color2);\\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: var(--chat-taskpane-item-border-radius);\n padding: 0 var(--chat-taskpane-item-indent);\n}\n\n.message:not(.chat-input) {\n margin-bottom: 20px;\n}\n\n.message:hover .message-start-editing-button {\n opacity: 1 !important;\n}\n\n.message-user {\n background-color: var(--chat-user-message-background-color);\n color: var(--chat-user-message-font-color);\n padding: 10px;\n}\n\n.message-assistant-chat {\n color: var(--chat-assistant-message-font-color);\n}\n\n.chat-message-buttons {\n display: flex;\n flex-direction: row;\n gap: 8px;\n margin-top: 10px;\n margin-bottom: 4px;\n flex-wrap: wrap;\n}\n\n.chat-taskpane-smart-debug-error-message {\n white-space: pre;\n font-family: monospace;\n margin: 0;\n overflow-x: auto;\n}\n\n.message-text {\n align-items: center;\n}\n\n/* Message Action Buttons Container */\n.message-action-buttons {\n position: absolute;\n bottom: 8px;\n right: 8px;\n display: flex;\n border-radius: 4px;\n overflow: hidden; /* Ensures inner buttons don't break the rounded corners */\n}\n\n/* Common styles for action buttons */\n.message-action-buttons button,\n.message-start-editing-button {\n cursor: pointer;\n opacity: 0;\n transition:\n opacity 0.2s ease-in-out,\n background-color 0.2s ease-in-out;\n background-color: var(--jp-layout-color3);\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--jp-content-font-color1);\n}\n\n/* Action buttons in the group */\n.message-action-buttons button {\n width: 28px;\n height: 28px;\n padding: 0;\n border-radius: 0; /* Remove individual button radius */\n}\n\n/* Add subtle separator between buttons */\n.message-action-buttons button:not(:last-child) {\n border-right: 1px solid var(--jp-border-color1);\n}\n\n/* Remove the individual button radius styles since we're handling it at the container level */\n.message-action-buttons button:first-child,\n.message-action-buttons button:last-child {\n border-radius: 0;\n}\n\n/* Standalone edit button */\n.message-start-editing-button {\n position: relative;\n padding: 4px;\n border-radius: 4px;\n}\n\n/* SVG icon color */\n.message-action-buttons button svg {\n color: var(--jp-content-font-color1);\n}\n\n/* Hover states */\n.message-action-buttons button:hover,\n.message-start-editing-button:hover {\n background-color: var(--jp-layout-color4);\n}\n\n/* Show buttons on message hover */\n.message:hover .message-action-buttons button,\n.message:hover .message-start-editing-button {\n opacity: 1;\n}\n\n.message-edit-buttons {\n display: flex;\n gap: 8px;\n padding: 5px;\n}\n\n.message-edit-buttons button {\n padding: 4px 12px;\n border-radius: 4px;\n background-color: var(--jp-layout-color1);\n color: var(--jp-content-font-color1);\n border: 1px solid var(--jp-border-color1);\n cursor: pointer;\n}\n\n.message-edit-buttons button:hover {\n background-color: var(--jp-layout-color2);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ChatMessage.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,mBAAmB;EACnB,sBAAsB;EACtB,WAAW;EACX,eAAe;EACf,sDAAsD;EACtD,2CAA2C;AAC7C;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,2DAA2D;EAC3D,0CAA0C;EAC1C,aAAa;AACf;;AAEA;EACE,+CAA+C;AACjD;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;AACjB;;AAEA;EACE,gBAAgB;EAChB,sBAAsB;EACtB,SAAS;EACT,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;AACrB;;AAEA,qCAAqC;AACrC;EACE,kBAAkB;EAClB,WAAW;EACX,UAAU;EACV,aAAa;EACb,kBAAkB;EAClB,gBAAgB,EAAE,0DAA0D;AAC9E;;AAEA,qCAAqC;AACrC;;EAEE,eAAe;EACf,UAAU;EACV;;qCAEmC;EACnC,yCAAyC;EACzC,YAAY;EACZ,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,oCAAoC;AACtC;;AAEA,gCAAgC;AAChC;EACE,WAAW;EACX,YAAY;EACZ,UAAU;EACV,gBAAgB,EAAE,oCAAoC;AACxD;;AAEA,yCAAyC;AACzC;EACE,+CAA+C;AACjD;;AAEA,8FAA8F;AAC9F;;EAEE,gBAAgB;AAClB;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;AACpB;;AAEA,mBAAmB;AACnB;EACE,oCAAoC;AACtC;;AAEA,iBAAiB;AACjB;;EAEE,yCAAyC;AAC3C;;AAEA,kCAAkC;AAClC;;EAEE,UAAU;AACZ;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,YAAY;AACd;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,yCAAyC;EACzC,oCAAoC;EACpC,yCAAyC;EACzC,eAAe;AACjB;;AAEA;EACE,yCAAyC;AAC3C\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.message {\\n position: relative;\\n height: min-content;\\n box-sizing: border-box;\\n width: 100%;\\n font-size: 14px;\\n border-radius: var(--chat-taskpane-item-border-radius);\\n padding: 0 var(--chat-taskpane-item-indent);\\n}\\n\\n.message:not(.chat-input) {\\n margin-bottom: 20px;\\n}\\n\\n.message:hover .message-start-editing-button {\\n opacity: 1 !important;\\n}\\n\\n.message-user {\\n background-color: var(--chat-user-message-background-color);\\n color: var(--chat-user-message-font-color);\\n padding: 10px;\\n}\\n\\n.message-assistant-chat {\\n color: var(--chat-assistant-message-font-color);\\n}\\n\\n.chat-message-buttons {\\n display: flex;\\n flex-direction: row;\\n gap: 8px;\\n margin-top: 10px;\\n margin-bottom: 4px;\\n flex-wrap: wrap;\\n}\\n\\n.chat-taskpane-smart-debug-error-message {\\n white-space: pre;\\n font-family: monospace;\\n margin: 0;\\n overflow-x: auto;\\n}\\n\\n.message-text {\\n align-items: center;\\n}\\n\\n/* Message Action Buttons Container */\\n.message-action-buttons {\\n position: absolute;\\n bottom: 8px;\\n right: 8px;\\n display: flex;\\n border-radius: 4px;\\n overflow: hidden; /* Ensures inner buttons don't break the rounded corners */\\n}\\n\\n/* Common styles for action buttons */\\n.message-action-buttons button,\\n.message-start-editing-button {\\n cursor: pointer;\\n opacity: 0;\\n transition:\\n opacity 0.2s ease-in-out,\\n background-color 0.2s ease-in-out;\\n background-color: var(--jp-layout-color3);\\n border: none;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: var(--jp-content-font-color1);\\n}\\n\\n/* Action buttons in the group */\\n.message-action-buttons button {\\n width: 28px;\\n height: 28px;\\n padding: 0;\\n border-radius: 0; /* Remove individual button radius */\\n}\\n\\n/* Add subtle separator between buttons */\\n.message-action-buttons button:not(:last-child) {\\n border-right: 1px solid var(--jp-border-color1);\\n}\\n\\n/* Remove the individual button radius styles since we're handling it at the container level */\\n.message-action-buttons button:first-child,\\n.message-action-buttons button:last-child {\\n border-radius: 0;\\n}\\n\\n/* Standalone edit button */\\n.message-start-editing-button {\\n position: relative;\\n padding: 4px;\\n border-radius: 4px;\\n}\\n\\n/* SVG icon color */\\n.message-action-buttons button svg {\\n color: var(--jp-content-font-color1);\\n}\\n\\n/* Hover states */\\n.message-action-buttons button:hover,\\n.message-start-editing-button:hover {\\n background-color: var(--jp-layout-color4);\\n}\\n\\n/* Show buttons on message hover */\\n.message:hover .message-action-buttons button,\\n.message:hover .message-start-editing-button {\\n opacity: 1;\\n}\\n\\n.message-edit-buttons {\\n display: flex;\\n gap: 8px;\\n padding: 5px;\\n}\\n\\n.message-edit-buttons button {\\n padding: 4px 12px;\\n border-radius: 4px;\\n background-color: var(--jp-layout-color1);\\n color: var(--jp-content-font-color1);\\n border: 1px solid var(--jp-border-color1);\\n cursor: pointer;\\n}\\n\\n.message-edit-buttons button:hover {\\n background-color: var(--jp-layout-color2);\\n}\"],\"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(--jp-cell-editor-border-color);\n overflow: hidden;\n}\n\n.code-content {\n width: 100%;\n overflow-x: auto;\n}\n\n.code-block-toolbar {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: end;\n\n width: 100%;\n background-color: var(--chat-user-message-background-color);\n border-bottom: 1px solid var(--jp-cell-editor-border-color);\n font-size: 0.8em;\n}\n\n.code-location {\n flex-grow: 1;\n margin-left: 5px;\n color: var(--chat-user-message-font-color);\n}\n\n.code-block-toolbar button {\n background-color: var(--chat-user-message-background-color);\n border: none;\n border-left: 1px solid var(--jp-cell-editor-border-color);\n border-radius: 0px;\n\n font-size: 0.8em;\n color: var(--chat-user-message-font-color);\n}\n\n.code-block-toolbar button:hover {\n background-color: var(--chat-background-color);\n color: var(--chat-assistant-message-font-color);\n}\n\n.active-cell-code-block {\n opacity: 0.7;\n}\n\n.active-cell-code-block:hover {\n opacity: 1;\n transition: 0.3s;\n}\n\n.code-block-expand-button {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 0;\n width: 100%;\n background-color: var(--chat-background-color);\n transition: background-color 0.2s;\n cursor: pointer;\n}\n\n.code-block-expand-button:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.code-block-expand-button svg {\n display: block;\n margin: 0;\n}\n\n.code-block-expand-button .icon-button {\n background-color: transparent;\n}\n\n.agent-mode-toggle {\n cursor: pointer;\n padding: 10px;\n color: var(--jp-ui-font-color2);\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--jp-cell-editor-border-color);\n border-radius: 5px;\n transition: background-color 0.2s ease, border-color 0.2s ease;\n}\n\n.agent-mode-toggle:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.agent-mode-toggle.error-fixup {\n border: none;\n}\n\n.agent-mode-toggle.error-fixup.expanded {\n background-color: var(--jp-layout-color2);\n}\n\n.agent-mode-toggle-content {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n}\n\n.agent-mode-toggle-content svg {\n flex-shrink: 0;\n}\n\n.agent-mode-toggle svg:last-child {\n flex-shrink: 0;\n}\n\n.agent-mode-toggle.expanded {\n border: none;\n border-radius: 5px 5px 0 0;\n background-color: var(--jp-layout-color2);\n}\n\n.agent-mode-collapsed {\n border: none;\n margin: 0 0;\n}\n\n\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/CodeBlock.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,sBAAsB;EACtB,kBAAkB;EAClB,cAAc;;EAEd,8CAA8C;EAC9C,kBAAkB;EAClB,oDAAoD;EACpD,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;EACnB,oBAAoB;;EAEpB,WAAW;EACX,2DAA2D;EAC3D,2DAA2D;EAC3D,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,gBAAgB;EAChB,0CAA0C;AAC5C;;AAEA;EACE,2DAA2D;EAC3D,YAAY;EACZ,yDAAyD;EACzD,kBAAkB;;EAElB,gBAAgB;EAChB,0CAA0C;AAC5C;;AAEA;EACE,8CAA8C;EAC9C,+CAA+C;AACjD;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,UAAU;EACV,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,cAAc;EACd,WAAW;EACX,8CAA8C;EAC9C,iCAAiC;EACjC,eAAe;AACjB;;AAEA;EACE,qCAAqC;AACvC;;AAEA;EACE,cAAc;EACd,SAAS;AACX;;AAEA;EACE,6BAA6B;AAC/B;;AAEA;EACE,eAAe;EACf,aAAa;EACb,+BAA+B;EAC/B,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,oDAAoD;EACpD,kBAAkB;EAClB,8DAA8D;AAChE;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,SAAS;EACT,OAAO;EACP,YAAY;AACd;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,0BAA0B;EAC1B,yCAAyC;AAC3C;;AAEA;EACE,YAAY;EACZ,WAAW;AACb\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.code-block-container {\\n display: flex;\\n flex-direction: column;\\n position: relative;\\n margin: 10px 0;\\n\\n background-color: var(--chat-background-color);\\n border-radius: 4px;\\n border: 1px solid var(--jp-cell-editor-border-color);\\n overflow: hidden;\\n}\\n\\n.code-content {\\n width: 100%;\\n overflow-x: auto;\\n}\\n\\n.code-block-toolbar {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n justify-content: end;\\n\\n width: 100%;\\n background-color: var(--chat-user-message-background-color);\\n border-bottom: 1px solid var(--jp-cell-editor-border-color);\\n font-size: 0.8em;\\n}\\n\\n.code-location {\\n flex-grow: 1;\\n margin-left: 5px;\\n color: var(--chat-user-message-font-color);\\n}\\n\\n.code-block-toolbar button {\\n background-color: var(--chat-user-message-background-color);\\n border: none;\\n border-left: 1px solid var(--jp-cell-editor-border-color);\\n border-radius: 0px;\\n\\n font-size: 0.8em;\\n color: var(--chat-user-message-font-color);\\n}\\n\\n.code-block-toolbar button:hover {\\n background-color: var(--chat-background-color);\\n color: var(--chat-assistant-message-font-color);\\n}\\n\\n.active-cell-code-block {\\n opacity: 0.7;\\n}\\n\\n.active-cell-code-block:hover {\\n opacity: 1;\\n transition: 0.3s;\\n}\\n\\n.code-block-expand-button {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n padding: 4px 0;\\n width: 100%;\\n background-color: var(--chat-background-color);\\n transition: background-color 0.2s;\\n cursor: pointer;\\n}\\n\\n.code-block-expand-button:hover {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n\\n.code-block-expand-button svg {\\n display: block;\\n margin: 0;\\n}\\n\\n.code-block-expand-button .icon-button {\\n background-color: transparent;\\n}\\n\\n.agent-mode-toggle {\\n cursor: pointer;\\n padding: 10px;\\n color: var(--jp-ui-font-color2);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n border: 1px solid var(--jp-cell-editor-border-color);\\n border-radius: 5px;\\n transition: background-color 0.2s ease, border-color 0.2s ease;\\n}\\n\\n.agent-mode-toggle:hover {\\n background-color: var(--jp-layout-color3);\\n}\\n\\n.agent-mode-toggle.error-fixup {\\n border: none;\\n}\\n\\n.agent-mode-toggle.error-fixup.expanded {\\n background-color: var(--jp-layout-color2);\\n}\\n\\n.agent-mode-toggle-content {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n flex: 1;\\n min-width: 0;\\n}\\n\\n.agent-mode-toggle-content svg {\\n flex-shrink: 0;\\n}\\n\\n.agent-mode-toggle svg:last-child {\\n flex-shrink: 0;\\n}\\n\\n.agent-mode-toggle.expanded {\\n border: none;\\n border-radius: 5px 5px 0 0;\\n background-color: var(--jp-layout-color2);\\n}\\n\\n.agent-mode-collapsed {\\n border: none;\\n margin: 0 0;\\n}\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\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.settings-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.header-buttons {\n display: flex;\n gap: 12px;\n align-items: center;\n}\n\n.header-buttons .button-base {\n min-width: 120px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 16px;\n}\n\n.connections-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 20px;\n margin-top: 20px;\n}\n\n.connection-card {\n background: var(--jp-layout-color0);\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n}\n\n.connection-card:hover {\n border: 1px solid var(--purple-500);\n}\n\n.connection-card-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.connection-alias {\n font-size: 1.2em;\n font-weight: bold;\n color: var(--jp-ui-font-color1);\n margin: 0;\n}\n\n.connection-type {\n background: var(--purple-100);\n color: var(--purple-700);\n border-radius: 12px;\n padding: 2px 10px;\n font-size: 0.85em;\n font-weight: 500;\n text-transform: capitalize;\n margin-left: 8px;\n}\n\n.connection-divider {\n height: 1px;\n background: var(--jp-border-color2);\n margin: 8px 0 12px 0;\n width: 100%;\n}\n\n.connection-details {\n flex-grow: 1;\n}\n\n.connection-details p {\n margin: 4px 0;\n font-size: 0.9em;\n color: var(--jp-ui-font-color2);\n}\n\n.connection-actions {\n display: flex;\n margin-top: 12px;\n gap: 8px;\n}\n\n.connection-actions button {\n padding: 4px 8px;\n font-size: 0.9em;\n}\n\n.connection-actions .delete-button {\n color: var(--jp-error-color1);\n}\n\n.connection-actions .delete-button:hover {\n background-color: var(--jp-error-color2);\n color: white;\n}\n\n.delete-container {\n position: relative;\n}\n\n.confirmation-buttons {\n display: flex;\n gap: 8px;\n}\n\n/* No connections container styles */\n.no-connections-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n padding: 40px 20px;\n}\n\n.no-connections-container p {\n font-size: 1.1em;\n color: var(--jp-ui-font-color2);\n margin-bottom: 32px;\n margin-top: 0;\n}\n\n.video-tutorial {\n border-radius: 8px;\n display: block;\n border: 1px solid var(--purple-500);\n border-radius: 12px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n padding: 12px;\n}\n\n.video-container iframe {\n border-radius: 8px;\n display: block;\n} `, \"\",{\"version\":3,\"sources\":[\"webpack://./style/DatabasePage.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,mBAAmB;AACvB;;AAEA;IACI,aAAa;IACb,SAAS;IACT,mBAAmB;AACvB;;AAEA;IACI,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,iBAAiB;AACrB;;AAEA;IACI,aAAa;IACb,4DAA4D;IAC5D,SAAS;IACT,gBAAgB;AACpB;;AAEA;IACI,mCAAmC;IACnC,yCAAyC;IACzC,kBAAkB;IAClB,aAAa;IACb,yBAAyB;IACzB,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,mCAAmC;AACvC;;AAEA;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;IAChB,iBAAiB;IACjB,+BAA+B;IAC/B,SAAS;AACb;;AAEA;IACI,6BAA6B;IAC7B,wBAAwB;IACxB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,0BAA0B;IAC1B,gBAAgB;AACpB;;AAEA;IACI,WAAW;IACX,mCAAmC;IACnC,oBAAoB;IACpB,WAAW;AACf;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,+BAA+B;AACnC;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,QAAQ;AACZ;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,6BAA6B;AACjC;;AAEA;IACI,wCAAwC;IACxC,YAAY;AAChB;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,QAAQ;AACZ;;AAEA,oCAAoC;AACpC;IACI,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,uBAAuB;IACvB,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;IAChB,+BAA+B;IAC/B,mBAAmB;IACnB,aAAa;AACjB;;AAEA;IACI,kBAAkB;IAClB,cAAc;IACd,mCAAmC;IACnC,mBAAmB;IACnB,yCAAyC;IACzC,aAAa;AACjB;;AAEA;IACI,kBAAkB;IAClB,cAAc;AAClB\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.settings-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin-bottom: 20px;\\n}\\n\\n.header-buttons {\\n display: flex;\\n gap: 12px;\\n align-items: center;\\n}\\n\\n.header-buttons .button-base {\\n min-width: 120px;\\n height: 32px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 8px 16px;\\n}\\n\\n.connections-grid {\\n display: grid;\\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\\n gap: 20px;\\n margin-top: 20px;\\n}\\n\\n.connection-card {\\n background: var(--jp-layout-color0);\\n border: 1px solid var(--jp-border-color1);\\n border-radius: 8px;\\n padding: 16px;\\n transition: all 0.2s ease;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.connection-card:hover {\\n border: 1px solid var(--purple-500);\\n}\\n\\n.connection-card-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin-bottom: 8px;\\n}\\n\\n.connection-alias {\\n font-size: 1.2em;\\n font-weight: bold;\\n color: var(--jp-ui-font-color1);\\n margin: 0;\\n}\\n\\n.connection-type {\\n background: var(--purple-100);\\n color: var(--purple-700);\\n border-radius: 12px;\\n padding: 2px 10px;\\n font-size: 0.85em;\\n font-weight: 500;\\n text-transform: capitalize;\\n margin-left: 8px;\\n}\\n\\n.connection-divider {\\n height: 1px;\\n background: var(--jp-border-color2);\\n margin: 8px 0 12px 0;\\n width: 100%;\\n}\\n\\n.connection-details {\\n flex-grow: 1;\\n}\\n\\n.connection-details p {\\n margin: 4px 0;\\n font-size: 0.9em;\\n color: var(--jp-ui-font-color2);\\n}\\n\\n.connection-actions {\\n display: flex;\\n margin-top: 12px;\\n gap: 8px;\\n}\\n\\n.connection-actions button {\\n padding: 4px 8px;\\n font-size: 0.9em;\\n}\\n\\n.connection-actions .delete-button {\\n color: var(--jp-error-color1);\\n}\\n\\n.connection-actions .delete-button:hover {\\n background-color: var(--jp-error-color2);\\n color: white;\\n}\\n\\n.delete-container {\\n position: relative;\\n}\\n\\n.confirmation-buttons {\\n display: flex;\\n gap: 8px;\\n}\\n\\n/* No connections container styles */\\n.no-connections-container {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n min-height: 400px;\\n text-align: center;\\n padding: 40px 20px;\\n}\\n\\n.no-connections-container p {\\n font-size: 1.1em;\\n color: var(--jp-ui-font-color2);\\n margin-bottom: 32px;\\n margin-top: 0;\\n}\\n\\n.video-tutorial {\\n border-radius: 8px;\\n display: block;\\n border: 1px solid var(--purple-500);\\n border-radius: 12px;\\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\\n padding: 12px;\\n}\\n\\n.video-container iframe {\\n border-radius: 8px;\\n display: block;\\n} \"],\"sourceRoot\":\"\"}]);\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-fixup-root {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.error-fixup-header {\n padding: 0 var(--chat-taskpane-item-indent);\n}\n\n.error-fixup-messages-container {\n margin-left: var(--chat-taskpane-item-indent);\n padding: 0 10px;\n border-left: 1.5px solid var(--jp-cell-editor-border-color);\n}\n\n.error-fixup-container {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: start;\n background-color: transparent;\n margin: 0 0;\n color: var(--jp-ui-font-color2);\n overflow: hidden;\n}\n\n.error-fixup-container.expanded {\n border: 1px solid var(--jp-cell-editor-border-color);\n border-radius: 5px;\n background-color: var(--jp-layout-color2);\n margin-bottom: 5px;\n}\n\n.error-fixup-expanded {\n background-color: transparent;\n color: var(--jp-ui-font-color1);\n white-space: pre-wrap;\n word-break: break-word;\n border: none;\n border-radius: 0;\n}\n\n.error-fixup-indented-block {\n margin-left: 10px;\n padding-left: 10px;\n border-left: 1px solid var(--jp-ui-font-color3);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ErrorFixupToolUI.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,sBAAsB;IACtB,WAAW;AACf;;AAEA;IACI,2CAA2C;AAC/C;;AAEA;IACI,6CAA6C;IAC7C,eAAe;IACf,2DAA2D;AAC/D;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,oBAAoB;IACpB,sBAAsB;IACtB,6BAA6B;IAC7B,WAAW;IACX,+BAA+B;IAC/B,gBAAgB;AACpB;;AAEA;IACI,oDAAoD;IACpD,kBAAkB;IAClB,yCAAyC;IACzC,kBAAkB;AACtB;;AAEA;IACI,6BAA6B;IAC7B,+BAA+B;IAC/B,qBAAqB;IACrB,sBAAsB;IACtB,YAAY;IACZ,gBAAgB;AACpB;;AAEA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,+CAA+C;AACnD\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.error-fixup-root {\\n display: flex;\\n flex-direction: column;\\n width: 100%;\\n}\\n\\n.error-fixup-header {\\n padding: 0 var(--chat-taskpane-item-indent);\\n}\\n\\n.error-fixup-messages-container {\\n margin-left: var(--chat-taskpane-item-indent);\\n padding: 0 10px;\\n border-left: 1.5px solid var(--jp-cell-editor-border-color);\\n}\\n\\n.error-fixup-container {\\n display: flex;\\n flex-direction: column;\\n align-items: stretch;\\n justify-content: start;\\n background-color: transparent;\\n margin: 0 0;\\n color: var(--jp-ui-font-color2);\\n overflow: hidden;\\n}\\n\\n.error-fixup-container.expanded {\\n border: 1px solid var(--jp-cell-editor-border-color);\\n border-radius: 5px;\\n background-color: var(--jp-layout-color2);\\n margin-bottom: 5px;\\n}\\n\\n.error-fixup-expanded {\\n background-color: transparent;\\n color: var(--jp-ui-font-color1);\\n white-space: pre-wrap;\\n word-break: break-word;\\n border: none;\\n border-radius: 0;\\n}\\n\\n.error-fixup-indented-block {\\n margin-left: 10px;\\n padding-left: 10px;\\n border-left: 1px solid var(--jp-ui-font-color3);\\n}\"],\"sourceRoot\":\"\"}]);\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.icon-button {\n display: flex;\n align-items: center;\n text-align: center;\n justify-content: center;\n background-color: transparent;\n border: none;\n cursor: pointer;\n position: relative;\n}\n\n.icon-button-hover:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.notification-dot {\n position: absolute;\n top: -1px;\n right: 1px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n border: 1px solid white;\n}\n\n.notification-dot-success {\n background-color: var(--green-600);\n}\n\n.notification-dot-warning {\n background-color: var(--yellow-600);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/IconButton.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,uBAAuB;EACvB,6BAA6B;EAC7B,YAAY;EACZ,eAAe;EACf,kBAAkB;AACpB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,UAAU;EACV,WAAW;EACX,kBAAkB;EAClB,uBAAuB;AACzB;;AAEA;EACE,kCAAkC;AACpC;;AAEA;EACE,mCAAmC;AACrC\",\"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 text-align: center;\\n justify-content: center;\\n background-color: transparent;\\n border: none;\\n cursor: pointer;\\n position: relative;\\n}\\n\\n.icon-button-hover:hover {\\n background-color: var(--jp-layout-color3);\\n}\\n\\n.notification-dot {\\n position: absolute;\\n top: -1px;\\n right: 1px;\\n width: 8px;\\n height: 8px;\\n border-radius: 50%;\\n border: 1px solid white;\\n}\\n\\n.notification-dot-success {\\n background-color: var(--green-600);\\n}\\n\\n.notification-dot-warning {\\n background-color: var(--yellow-600);\\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: 260px) {\n\n /* Shift the dropdown to the left to help prevent right-edge overflow */\n .model-options {\n left: -40px;\n }\n\n .model-icon {\n display: inline;\n }\n\n .model-name {\n display: none;\n }\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ModelSelector.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF,4DAA4D;;AAE5D;EACE,kBAAkB;EAClB,cAAc;EACd,aAAa;EACb,YAAY,EAAE,mCAAmC;EACjD,aAAa;EACb,mBAAmB,EAAE,sBAAsB;EAC3C,+BAA+B;AACjC;;AAEA;EACE,+BAA+B;AACjC;;AAEA;EACE,kBAAkB;EAClB,YAAY,EAAE,yCAAyC;EACvD,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,mBAAmB,EAAE,0CAA0C;EAC/D,kBAAkB;EAClB,eAAe;AACjB;;;AAGA;EACE,aAAa;EACb,mBAAmB;EACnB,8BAA8B;EAC9B,WAAW;EACX,YAAY;EACZ,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,WAAW;EACX,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE,cAAc;EACd,0BAA0B;EAC1B,gBAAgB;EAChB,cAAc,EAAE,iCAAiC;AACnD;;AAEA,2BAA2B;AAC3B;EACE,kBAAkB;EAClB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB;EAChB,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,yCAAyC;EACzC,aAAa;EACb,WAAW;AACb;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,mCAAmC;EACnC,oCAAoC;EACpC,eAAe;EACf,iCAAiC;EACjC,mBAAmB;EACnB,0BAA0B;AAC5B;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA;EACE,yCAAyC;EACzC,wBAAwB;AAC1B;;AAEA,4EAA4E;AAC5E;EACE,YAAY;EACZ,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,kBAAkB;AACpB;;AAEA,iDAAiD;AACjD;EACE,aAAa;EACb,wCAAwC;AAC1C;;AAEA;EACE,qBAAqB;EACrB,gBAAgB;EAChB,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;EACnB,sBAAsB;AACxB;;AAEA,qDAAqD;AACrD;EACE,aAAa;AACf;;AAEA;EACE,eAAe;AACjB;;AAEA,2CAA2C;AAC3C;;EAEE,uEAAuE;EACvE;IACE,WAAW;EACb;;EAEA;IACE,eAAe;EACjB;;EAEA;IACE,aAAa;EACf;AACF\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n/* ModelSelector.css - responsive design with compact mode */\\n\\n.model-selector {\\n position: relative;\\n flex: 0 0 auto;\\n margin: 0 8px;\\n height: 20px; /* Match height of other elements */\\n display: flex;\\n align-items: center; /* Center vertically */\\n color: var(--jp-ui-font-color2);\\n}\\n\\n.model-selector:hover {\\n color: var(--jp-ui-font-color1);\\n}\\n\\n.model-selector-dropdown {\\n position: relative;\\n height: 20px; /* Fixed height to match other elements */\\n border-radius: 4px;\\n cursor: pointer;\\n display: flex;\\n align-items: center; /* Ensure content is vertically centered */\\n width: min-content;\\n max-width: 18ch;\\n}\\n\\n\\n.selected-model {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n width: 100%;\\n height: 100%;\\n padding: 0 8px;\\n font-size: 12px;\\n font-weight: 500;\\n line-height: 1;\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\\n.model-icon {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 14px;\\n height: 14px;\\n line-height: 1;\\n}\\n\\n.dropdown-arrow {\\n font-size: 8px;\\n transition: transform 0.2s;\\n margin-left: 4px;\\n flex-shrink: 0; /* Prevent arrow from shrinking */\\n}\\n\\n/* Model options dropdown */\\n.model-options {\\n position: absolute;\\n bottom: 100%;\\n max-height: 180px;\\n overflow-y: auto;\\n background-color: var(--jp-layout-color1);\\n border: 1px solid var(--jp-layout-color2);\\n border-radius: 4px;\\n margin-bottom: 4px;\\n box-shadow: 0 -2px 6px rgba(0, 0, 0, 0.1);\\n z-index: 1000;\\n width: auto;\\n}\\n\\n.model-option {\\n padding: 4px 8px;\\n font-size: 12px;\\n /* Keep this size for readability */\\n color: var(--jp-content-font-color1);\\n cursor: pointer;\\n transition: background-color 0.2s;\\n white-space: nowrap;\\n /* Prevent text wrapping */\\n}\\n\\n.model-option:hover {\\n background-color: var(--jp-layout-color2);\\n color: var(--purple-700);\\n}\\n\\n.model-option.selected {\\n background-color: var(--jp-layout-color2);\\n color: var(--purple-700);\\n}\\n\\n/* When inside chat-controls - ensure proper alignment with other controls */\\n.chat-controls .model-selector {\\n height: 20px;\\n display: flex;\\n align-items: center;\\n}\\n\\n.chat-controls .model-selector-dropdown {\\n height: 20px;\\n align-self: center;\\n}\\n\\n/* Ensure dropdown appears above other elements */\\n.model-options {\\n z-index: 1010;\\n /* Higher z-index to ensure visibility */\\n}\\n\\n.model-name {\\n display: inline-block;\\n max-width: 120px;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n vertical-align: bottom;\\n}\\n\\n/* On wider screens, show only the name of the model*/\\n.model-icon {\\n display: none;\\n}\\n\\n.model-name {\\n display: inline;\\n}\\n\\n/* On compact screens, show only the icon */\\n@container (max-width: 260px) {\\n\\n /* Shift the dropdown to the left to help prevent right-edge overflow */\\n .model-options {\\n left: -40px;\\n }\\n\\n .model-icon {\\n display: inline;\\n }\\n\\n .model-name {\\n display: none;\\n }\\n}\"],\"sourceRoot\":\"\"}]);\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.profiler-warning {\n color: red;\n}\n\n.profiler-button-container {\n display: flex;\n gap: 10px;\n margin-bottom: 10px;\n}\n\n.json-container {\n overflow-y: auto;\n padding: 10px;\n background-color: var(--jp-input-background);\n}\n\n.profiler-clear-button {\n margin-bottom: 10px;\n}\n\n.profiler-no-requests {\n color: #666;\n font-style: italic;\n}\n\n.profiler-request-container {\n margin-bottom: 20px;\n}\n\n.profiler-request-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 5px;\n}\n\n.profiler-copy-button {\n font-size: 12px;\n padding: 4px 8px;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ProfilerPage.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,UAAU;AACd;;AAEA;IACI,aAAa;IACb,SAAS;IACT,mBAAmB;AACvB;;AAEA;IACI,gBAAgB;IAChB,aAAa;IACb,4CAA4C;AAChD;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,WAAW;IACX,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,aAAa;IACb,8BAA8B;IAC9B,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,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.profiler-warning {\\n color: red;\\n}\\n\\n.profiler-button-container {\\n display: flex;\\n gap: 10px;\\n margin-bottom: 10px;\\n}\\n\\n.json-container {\\n overflow-y: auto;\\n padding: 10px;\\n background-color: var(--jp-input-background);\\n}\\n\\n.profiler-clear-button {\\n margin-bottom: 10px;\\n}\\n\\n.profiler-no-requests {\\n color: #666;\\n font-style: italic;\\n}\\n\\n.profiler-request-container {\\n margin-bottom: 20px;\\n}\\n\\n.profiler-request-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n margin-bottom: 5px;\\n}\\n\\n.profiler-copy-button {\\n font-size: 12px;\\n padding: 4px 8px;\\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.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 {\n /* Remove default Jupyter padding */\n padding-right: 0px !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}`, \"\",{\"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,mCAAmC;EACnC,6BAA6B;AAC/B;;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 {\\n /* Remove default Jupyter padding */\\n padding-right: 0px !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}\"],\"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.revert-questionnaire-message {\n display: flex;\n flex-direction: column;\n gap: 2px;\n padding: 12px 16px;\n margin: 8px 8px;\n border-radius: 12px;\n background-color: var(--chat-user-message-background-color);\n border: 1px solid var(--jp-border-color2);\n box-sizing: border-box;\n width: calc(100% - 16px);\n max-width: calc(100vw - 32px);\n}\n\n.revert-questionnaire-message-text {\n font-size: 12px;\n color: var(--jp-ui-font-color1);\n margin-bottom: 20px;\n word-wrap: break-word;\n overflow-wrap: break-word;\n max-width: 100%;\n}\n\n.revert-questionnaire-button {\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 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 cursor: pointer;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n text-align: left;\n width: 100%;\n overflow: hidden;\n position: relative;\n margin-bottom: 6px;\n box-sizing: border-box;\n word-wrap: break-word;\n overflow-wrap: break-word;\n white-space: normal;\n min-height: 36px;\n max-width: 100%;\n}\n\n.revert-questionnaire-button::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.revert-questionnaire-button: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 border-color: var(--jp-brand-color1);\n}\n\n.revert-questionnaire-button:hover::before {\n opacity: 1;\n}\n\n.revert-questionnaire-button:active {\n transform: translateY(0) scale(0.98);\n transition: all 0.1s ease;\n}\n\n.revert-questionnaire-button::after {\n content: '→';\n color: var(--jp-brand-color1);\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n opacity: 0;\n transform: translateX(-4px);\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.revert-questionnaire-button:hover::after {\n opacity: 1;\n transform: translateX(0);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/RevertQuestionnaire.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,sBAAsB;IACtB,QAAQ;IACR,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,2DAA2D;IAC3D,yCAAyC;IACzC,sBAAsB;IACtB,wBAAwB;IACxB,6BAA6B;AACjC;;AAEA;IACI,eAAe;IACf,+BAA+B;IAC/B,mBAAmB;IACnB,qBAAqB;IACrB,yBAAyB;IACzB,eAAe;AACnB;;AAEA;IACI,oBAAoB;IACpB,mBAAmB;IACnB,8BAA8B;IAC9B,QAAQ;IACR,iBAAiB;IACjB,mCAAmC;IACnC,yCAAyC;IACzC,mBAAmB;IACnB,+BAA+B;IAC/B,eAAe;IACf,eAAe;IACf,iDAAiD;IACjD,gBAAgB;IAChB,WAAW;IACX,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;AACnB;;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;IACzD,oCAAoC;AACxC;;AAEA;IACI,UAAU;AACd;;AAEA;IACI,oCAAoC;IACpC,yBAAyB;AAC7B;;AAEA;IACI,YAAY;IACZ,6BAA6B;IAC7B,iDAAiD;IACjD,UAAU;IACV,2BAA2B;IAC3B,cAAc;IACd,iBAAiB;AACrB;;AAEA;IACI,UAAU;IACV,wBAAwB;AAC5B\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.revert-questionnaire-message {\\n display: flex;\\n flex-direction: column;\\n gap: 2px;\\n padding: 12px 16px;\\n margin: 8px 8px;\\n border-radius: 12px;\\n background-color: var(--chat-user-message-background-color);\\n border: 1px solid var(--jp-border-color2);\\n box-sizing: border-box;\\n width: calc(100% - 16px);\\n max-width: calc(100vw - 32px);\\n}\\n\\n.revert-questionnaire-message-text {\\n font-size: 12px;\\n color: var(--jp-ui-font-color1);\\n margin-bottom: 20px;\\n word-wrap: break-word;\\n overflow-wrap: break-word;\\n max-width: 100%;\\n}\\n\\n.revert-questionnaire-button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: space-between;\\n gap: 8px;\\n padding: 8px 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 cursor: pointer;\\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\\n text-align: left;\\n width: 100%;\\n overflow: hidden;\\n position: relative;\\n margin-bottom: 6px;\\n box-sizing: border-box;\\n word-wrap: break-word;\\n overflow-wrap: break-word;\\n white-space: normal;\\n min-height: 36px;\\n max-width: 100%;\\n}\\n\\n.revert-questionnaire-button::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.revert-questionnaire-button: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 border-color: var(--jp-brand-color1);\\n}\\n\\n.revert-questionnaire-button:hover::before {\\n opacity: 1;\\n}\\n\\n.revert-questionnaire-button:active {\\n transform: translateY(0) scale(0.98);\\n transition: all 0.1s ease;\\n}\\n\\n.revert-questionnaire-button::after {\\n content: '→';\\n color: var(--jp-brand-color1);\\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\\n opacity: 0;\\n transform: translateX(-4px);\\n flex-shrink: 0;\\n margin-left: auto;\\n}\\n\\n.revert-questionnaire-button:hover::after {\\n opacity: 1;\\n transform: translateX(0);\\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.context-container {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 4px;\n padding: 8px 10px;\n overflow-x: hidden;\n}\n\n/* Consistent spacing for all children of context container */\n.context-container>* {\n margin: 2px;\n}\n\n.selected-context-container {\n display: flex;\n align-items: center;\n text-align: center;\n background-color: var(--jp-layout-color2);\n border-radius: 3px;\n padding: 4px 8px;\n margin: 2px;\n\n font-size: 12px;\n height: 20px;\n max-width: 100%;\n min-width: 0;\n\n border: 1px solid var(--jp-border-color1);\n cursor: pointer;\n}\n\n.selected-context-container:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.selected-context-container .rule-name {\n margin-left: 6px;\n color: var(--jp-content-font-color1);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n.selected-context-container .icon {\n display: flex;\n flex-direction: column;\n justify-content: center;\n width: 12px;\n max-height: 14px;\n color: var(--jp-content-font-color3);\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/SelectedContextContainer.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,QAAQ;EACR,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA,6DAA6D;AAC7D;EACE,WAAW;AACb;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,yCAAyC;EACzC,kBAAkB;EAClB,gBAAgB;EAChB,WAAW;;EAEX,eAAe;EACf,YAAY;EACZ,eAAe;EACf,YAAY;;EAEZ,yCAAyC;EACzC,eAAe;AACjB;;AAEA;EACE,yCAAyC;AAC3C;;AAEA;EACE,gBAAgB;EAChB,oCAAoC;EACpC,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,WAAW;EACX,gBAAgB;EAChB,oCAAoC;AACtC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.context-container {\\n display: flex;\\n flex-wrap: wrap;\\n align-items: center;\\n gap: 4px;\\n padding: 8px 10px;\\n overflow-x: hidden;\\n}\\n\\n/* Consistent spacing for all children of context container */\\n.context-container>* {\\n margin: 2px;\\n}\\n\\n.selected-context-container {\\n display: flex;\\n align-items: center;\\n text-align: center;\\n background-color: var(--jp-layout-color2);\\n border-radius: 3px;\\n padding: 4px 8px;\\n margin: 2px;\\n\\n font-size: 12px;\\n height: 20px;\\n max-width: 100%;\\n min-width: 0;\\n\\n border: 1px solid var(--jp-border-color1);\\n cursor: pointer;\\n}\\n\\n.selected-context-container:hover {\\n background-color: var(--jp-layout-color3);\\n}\\n\\n.selected-context-container .rule-name {\\n margin-left: 6px;\\n color: var(--jp-content-font-color1);\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n max-width: 200px;\\n}\\n\\n.selected-context-container .icon {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n width: 12px;\\n max-height: 14px;\\n color: var(--jp-content-font-color3);\\n}\"],\"sourceRoot\":\"\"}]);\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.mito-deploy-button {\n display: flex !important;\n align-items: center !important;\n gap: 6px !important;\n padding: 4px 8px !important;\n color: var(--jp-ui-font-color1) !important;\n background-color: var(--jp-layout-color2) !important;\n}\n\n.mito-deploy-button:hover {\n background-color: var(--jp-layout-color3) !important;\n}\n\n.mito-deploy-button .mito-ai-deploy-icon {\n display: flex !important;\n align-items: center !important;\n height: 10px !important;\n width: 10px !important;\n font-size: 12px !important;\n}\n\n.mito-deploy-button::slotted(svg),\n.mito-deploy-button svg {\n width: 12px !important;\n height: 12px !important;\n max-width: 12px !important;\n max-height: 12px !important;\n margin-right: 4px !important;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/StreamlitPreviewPlugin.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;IACI,wBAAwB;IACxB,8BAA8B;IAC9B,mBAAmB;IACnB,2BAA2B;IAC3B,0CAA0C;IAC1C,oDAAoD;AACxD;;AAEA;IACI,oDAAoD;AACxD;;AAEA;IACI,wBAAwB;IACxB,8BAA8B;IAC9B,uBAAuB;IACvB,sBAAsB;IACtB,0BAA0B;AAC9B;;AAEA;;IAEI,sBAAsB;IACtB,uBAAuB;IACvB,0BAA0B;IAC1B,2BAA2B;IAC3B,4BAA4B;AAChC\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.mito-deploy-button {\\n display: flex !important;\\n align-items: center !important;\\n gap: 6px !important;\\n padding: 4px 8px !important;\\n color: var(--jp-ui-font-color1) !important;\\n background-color: var(--jp-layout-color2) !important;\\n}\\n\\n.mito-deploy-button:hover {\\n background-color: var(--jp-layout-color3) !important;\\n}\\n\\n.mito-deploy-button .mito-ai-deploy-icon {\\n display: flex !important;\\n align-items: center !important;\\n height: 10px !important;\\n width: 10px !important;\\n font-size: 12px !important;\\n}\\n\\n.mito-deploy-button::slotted(svg),\\n.mito-deploy-button svg {\\n width: 12px !important;\\n height: 12px !important;\\n max-width: 12px !important;\\n max-height: 12px !important;\\n margin-right: 4px !important;\\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\n.text-align-left {\n justify-content: flex-start;\n}\n\n.text-align-center {\n justify-content: space-around;\n}\n\n.text-align-right {\n justify-content: flex-end;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/TextButton.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,mBAAmB;EACnB,6BAA6B;AAC/B;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,6BAA6B;AAC/B;;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.text-button-mito-ai {\\n display: flex;\\n align-items: center;\\n justify-content: space-around;\\n}\\n\\n.text-align-left {\\n justify-content: flex-start;\\n}\\n\\n.text-align-center {\\n justify-content: space-around;\\n}\\n\\n.text-align-right {\\n justify-content: flex-end;\\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 8px;\n}\n\n.toggle-button-half:first-child {\n border-radius: 0px;\n}\n\n.toggle-button-half:last-child {\n border-radius: 0px;\n}\n\n.toggle-button-half.selected {\n opacity: 1;\n background-color: var(--purple-400);\n color: var(--purple-700) !important;\n}\n\n.toggle-button-half.unselected {\n opacity: 0.6;\n background-color: transparent !important;\n color: var(--jp-ui-font-color2) !important;\n}\n\n.toggle-button-icon {\n width: 16px;\n height: 16px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./style/ToggleButton.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;;AAEF;EACE,aAAa;EACb,QAAQ;EACR,yCAAyC;EACzC,0CAA0C;EAC1C,kBAAkB;EAClB,YAAY;EACZ,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,QAAQ;EACR,eAAe;EACf,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,mCAAmC;EACnC,mCAAmC;AACrC;;AAEA;EACE,YAAY;EACZ,wCAAwC;EACxC,0CAA0C;AAC5C;;AAEA;EACE,WAAW;EACX,YAAY;AACd\",\"sourcesContent\":[\"/*\\n * Copyright (c) Saga Inc.\\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\\n */\\n\\n.toggle-button-container {\\n display: flex;\\n gap: 1px;\\n background-color: var(--jp-layout-color2);\\n border: 1px solid var(--jp-ui-font-color3);\\n border-radius: 2px;\\n width: 100px;\\n overflow: hidden;\\n}\\n\\n.toggle-button-half {\\n flex: 0 0 50%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n min-width: 20px;\\n font-size: 12px;\\n padding: 2px 8px;\\n}\\n\\n.toggle-button-half:first-child {\\n border-radius: 0px;\\n}\\n\\n.toggle-button-half:last-child {\\n border-radius: 0px;\\n}\\n\\n.toggle-button-half.selected {\\n opacity: 1;\\n background-color: var(--purple-400);\\n color: var(--purple-700) !important;\\n}\\n\\n.toggle-button-half.unselected {\\n opacity: 0.6;\\n background-color: transparent !important;\\n color: var(--jp-ui-font-color2) !important;\\n}\\n\\n.toggle-button-icon {\\n width: 16px;\\n height: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\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-dark-purple {\n background-color: var(--purple-500);\n color: var(--white) !important;\n}\n\n.button-dark-purple:hover {\n background-color: var(--purple-600);\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}\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,mCAAmC;EACnC,8BAA8B;AAChC;;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-dark-purple {\\n background-color: var(--purple-500);\\n color: var(--white) !important;\\n}\\n\\n.button-dark-purple:hover {\\n background-color: var(--purple-600);\\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}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\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!./AgentComponentHeader.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!./AgentComponentHeader.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!./AgentToolUIComponent.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!./AgentToolUIComponent.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!./AlertBlock.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!./AlertBlock.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!./AppsList.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!./AppsList.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!./AssumptionTool.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!./AssumptionTool.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!./AuthPopup.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!./AuthPopup.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!./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!./ErrorFixupToolUI.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!./ErrorFixupToolUI.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!./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!./ProfilerPage.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!./ProfilerPage.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!./RevertQuestionnaire.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!./RevertQuestionnaire.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!./StreamlitPreviewPlugin.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!./StreamlitPreviewPlugin.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":""}
|