mito-ai 0.1.55__py3-none-any.whl → 0.1.57__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 +2 -0
- mito_ai/_version.py +1 -1
- mito_ai/anthropic_client.py +7 -6
- mito_ai/chart_wizard/__init__.py +3 -0
- mito_ai/chart_wizard/handlers.py +52 -0
- mito_ai/chart_wizard/urls.py +23 -0
- mito_ai/completions/completion_handlers/completion_handler.py +11 -2
- mito_ai/completions/completion_handlers/scratchpad_result_handler.py +66 -0
- mito_ai/completions/handlers.py +5 -0
- mito_ai/completions/models.py +24 -3
- mito_ai/completions/prompt_builders/agent_execution_prompt.py +18 -50
- mito_ai/completions/prompt_builders/agent_smart_debug_prompt.py +82 -95
- mito_ai/completions/prompt_builders/agent_system_message.py +304 -276
- mito_ai/completions/prompt_builders/chart_conversion_prompt.py +27 -0
- mito_ai/completions/prompt_builders/chat_prompt.py +15 -100
- mito_ai/completions/prompt_builders/chat_system_message.py +98 -72
- mito_ai/completions/prompt_builders/explain_code_prompt.py +22 -24
- mito_ai/completions/prompt_builders/inline_completer_prompt.py +78 -107
- mito_ai/completions/prompt_builders/prompt_constants.py +35 -45
- mito_ai/completions/prompt_builders/prompt_section_registry/__init__.py +70 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/active_cell_code.py +15 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/active_cell_id.py +10 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/active_cell_output.py +20 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/base.py +37 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/error_traceback.py +17 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/example.py +19 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/files.py +17 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/generic.py +15 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/get_cell_output_tool_response.py +21 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/notebook.py +19 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/rules.py +39 -0
- mito_ai/completions/prompt_builders/{utils.py → prompt_section_registry/selected_context.py} +51 -42
- mito_ai/completions/prompt_builders/prompt_section_registry/streamlit_app_status.py +25 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/task.py +12 -0
- mito_ai/completions/prompt_builders/prompt_section_registry/variables.py +18 -0
- mito_ai/completions/prompt_builders/scratchpad_result_prompt.py +17 -0
- mito_ai/completions/prompt_builders/smart_debug_prompt.py +48 -63
- mito_ai/constants.py +0 -3
- mito_ai/tests/completions/test_prompt_section_registry.py +44 -0
- mito_ai/tests/message_history/test_message_history_utils.py +273 -340
- mito_ai/tests/providers/test_anthropic_client.py +7 -3
- mito_ai/utils/message_history_utils.py +68 -44
- mito_ai/utils/provider_utils.py +8 -1
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +102 -102
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
- mito_ai-0.1.55.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.49c79c62671528877c61.js → mito_ai-0.1.57.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.9d26322f3e78beb2b666.js +2778 -297
- mito_ai-0.1.57.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.9d26322f3e78beb2b666.js.map +1 -0
- mito_ai-0.1.55.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.9dfbffc3592eb6f0aef9.js → mito_ai-0.1.57.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.79c1ea8a3cda73a4cb6f.js +17 -17
- mito_ai-0.1.55.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.9dfbffc3592eb6f0aef9.js.map → mito_ai-0.1.57.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.79c1ea8a3cda73a4cb6f.js.map +1 -1
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/themes/mito_ai/index.css +7 -2
- {mito_ai-0.1.55.dist-info → mito_ai-0.1.57.dist-info}/METADATA +5 -1
- {mito_ai-0.1.55.dist-info → mito_ai-0.1.57.dist-info}/RECORD +78 -56
- mito_ai-0.1.55.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.49c79c62671528877c61.js.map +0 -1
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js.map +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.f5d476ac514294615881.js +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.f5d476ac514294615881.js.map +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js.map +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
- {mito_ai-0.1.55.data → mito_ai-0.1.57.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.55.data → mito_ai-0.1.57.data}/data/share/jupyter/labextensions/mito_ai/themes/mito_ai/index.js +0 -0
- {mito_ai-0.1.55.dist-info → mito_ai-0.1.57.dist-info}/WHEEL +0 -0
- {mito_ai-0.1.55.dist-info → mito_ai-0.1.57.dist-info}/entry_points.txt +0 -0
- {mito_ai-0.1.55.dist-info → mito_ai-0.1.57.dist-info}/licenses/LICENSE +0 -0
|
@@ -173,7 +173,7 @@ const AiChatPlugin = {
|
|
|
173
173
|
// then call it to make a new widget
|
|
174
174
|
const newWidget = () => {
|
|
175
175
|
// Create a blank content widget inside of a MainAreaWidget
|
|
176
|
-
const chatWidget = (0,_ChatWidget__WEBPACK_IMPORTED_MODULE_9__.buildChatWidget)(app, notebookTracker, rendermime, contextManager, streamlitPreviewManager);
|
|
176
|
+
const chatWidget = (0,_ChatWidget__WEBPACK_IMPORTED_MODULE_9__.buildChatWidget)(app, notebookTracker, rendermime, contextManager, streamlitPreviewManager, documentManager);
|
|
177
177
|
return chatWidget;
|
|
178
178
|
};
|
|
179
179
|
let widget = newWidget();
|
|
@@ -489,6 +489,25 @@ class ChatHistoryManager {
|
|
|
489
489
|
});
|
|
490
490
|
return agentExecutionMetadata;
|
|
491
491
|
}
|
|
492
|
+
addScratchpadResultMessage(activeThreadId, scratchpadResult) {
|
|
493
|
+
const scratchpadResultMetadata = {
|
|
494
|
+
promptType: 'agent:scratchpad-result',
|
|
495
|
+
threadId: activeThreadId,
|
|
496
|
+
scratchpadResult: scratchpadResult,
|
|
497
|
+
};
|
|
498
|
+
// Add empty user message to display history (like agent execution does for empty input)
|
|
499
|
+
const userMessage = {
|
|
500
|
+
role: 'user',
|
|
501
|
+
content: ''
|
|
502
|
+
};
|
|
503
|
+
this.displayOptimizedChatHistory.push({
|
|
504
|
+
message: userMessage,
|
|
505
|
+
type: 'openai message',
|
|
506
|
+
promptType: 'agent:scratchpad-result',
|
|
507
|
+
scratchpadResult: scratchpadResult,
|
|
508
|
+
});
|
|
509
|
+
return scratchpadResultMetadata;
|
|
510
|
+
}
|
|
492
511
|
addSmartDebugMessage(activeThreadId, errorMessage) {
|
|
493
512
|
const activeCellID = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_1__.getActiveCellID)(this.notebookTracker) || '';
|
|
494
513
|
const activeCellCode = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_1__.getCellCodeByID)(this.notebookTracker, activeCellID) || '';
|
|
@@ -1327,17 +1346,19 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1327
1346
|
/* harmony export */ });
|
|
1328
1347
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
1329
1348
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
1330
|
-
/* harmony import */ var
|
|
1331
|
-
/* harmony import */ var
|
|
1349
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../utils/classNames */ "./lib/utils/classNames.js");
|
|
1350
|
+
/* harmony import */ var _ChatDropdown__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ChatDropdown */ "./lib/Extensions/AiChat/ChatMessage/ChatDropdown.js");
|
|
1332
1351
|
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/notebook */ "./lib/utils/notebook.js");
|
|
1333
|
-
/* harmony import */ var
|
|
1352
|
+
/* harmony import */ var _utils_cellReferences__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../utils/cellReferences */ "./lib/utils/cellReferences.js");
|
|
1334
1353
|
/* harmony import */ var _style_ChatInput_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/ChatInput.css */ "./style/ChatInput.css");
|
|
1335
1354
|
/* harmony import */ var _style_ChatDropdown_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../style/ChatDropdown.css */ "./style/ChatDropdown.css");
|
|
1336
|
-
/* harmony import */ var
|
|
1337
|
-
/* harmony import */ var
|
|
1338
|
-
/* harmony import */ var
|
|
1339
|
-
/* harmony import */ var
|
|
1340
|
-
/* harmony import */ var
|
|
1355
|
+
/* harmony import */ var _hooks_useDebouncedFunction__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../hooks/useDebouncedFunction */ "./lib/hooks/useDebouncedFunction.js");
|
|
1356
|
+
/* harmony import */ var _hooks_useCellOrder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../hooks/useCellOrder */ "./lib/hooks/useCellOrder.js");
|
|
1357
|
+
/* harmony import */ var _hooks_useLineSelection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../hooks/useLineSelection */ "./lib/hooks/useLineSelection.js");
|
|
1358
|
+
/* harmony import */ var _components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../components/SelectedContextContainer */ "./lib/components/SelectedContextContainer.js");
|
|
1359
|
+
/* harmony import */ var _components_AttachFileButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../components/AttachFileButton */ "./lib/components/AttachFileButton.js");
|
|
1360
|
+
/* harmony import */ var _components_DatabaseButton__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../components/DatabaseButton */ "./lib/components/DatabaseButton.js");
|
|
1361
|
+
/* harmony import */ var _utils_fileUpload__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../utils/fileUpload */ "./lib/utils/fileUpload.js");
|
|
1341
1362
|
/*
|
|
1342
1363
|
* Copyright (c) Saga Inc.
|
|
1343
1364
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -1354,6 +1375,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1354
1375
|
|
|
1355
1376
|
|
|
1356
1377
|
|
|
1378
|
+
|
|
1379
|
+
|
|
1357
1380
|
const ChatInput = ({ app, initialContent, handleSubmitUserMessage, onCancel, isEditing, contextManager, notebookTracker, agentModeEnabled = false, agentExecutionStatus = 'idle', operatingSystem = 'mac', displayOptimizedChatHistoryLength = 0, agentTargetNotebookPanelRef, isSignedUp = true, messageIndex, }) => {
|
|
1358
1381
|
var _a;
|
|
1359
1382
|
const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialContent);
|
|
@@ -1366,6 +1389,9 @@ const ChatInput = ({ app, initialContent, handleSubmitUserMessage, onCancel, isE
|
|
|
1366
1389
|
const [isDropdownFromButton, setIsDropdownFromButton] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
1367
1390
|
const [isDragOver, setIsDragOver] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
1368
1391
|
const [isUploading, setIsUploading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
1392
|
+
// Track cell order and line selection
|
|
1393
|
+
const cellOrder = (0,_hooks_useCellOrder__WEBPACK_IMPORTED_MODULE_4__.useCellOrder)(notebookTracker);
|
|
1394
|
+
const lineSelection = (0,_hooks_useLineSelection__WEBPACK_IMPORTED_MODULE_5__.useLineSelection)(notebookTracker, cellOrder);
|
|
1369
1395
|
const handleFileUpload = (file) => {
|
|
1370
1396
|
let uploadType;
|
|
1371
1397
|
if (file.type.startsWith('image/')) {
|
|
@@ -1409,7 +1435,7 @@ const ChatInput = ({ app, initialContent, handleSubmitUserMessage, onCancel, isE
|
|
|
1409
1435
|
setIsUploading(true);
|
|
1410
1436
|
try {
|
|
1411
1437
|
// Upload all files to backend using the shared utility
|
|
1412
|
-
const uploadPromises = Array.from(files).map(file => (0,
|
|
1438
|
+
const uploadPromises = Array.from(files).map(file => (0,_utils_fileUpload__WEBPACK_IMPORTED_MODULE_6__.uploadFileToBackend)(file, notebookTracker, handleFileUpload));
|
|
1413
1439
|
// Use allSettled so we wait for all uploads to finish (success or failure)
|
|
1414
1440
|
// before clearing the uploading state. This avoids background uploads
|
|
1415
1441
|
// mutating state after isUploading becomes false.
|
|
@@ -1420,9 +1446,41 @@ const ChatInput = ({ app, initialContent, handleSubmitUserMessage, onCancel, isE
|
|
|
1420
1446
|
}
|
|
1421
1447
|
}
|
|
1422
1448
|
};
|
|
1449
|
+
const handlePaste = async (e) => {
|
|
1450
|
+
const items = e.clipboardData.items;
|
|
1451
|
+
const clipboardItem = items === null || items === void 0 ? void 0 : items[items.length - 1];
|
|
1452
|
+
if (!clipboardItem)
|
|
1453
|
+
return;
|
|
1454
|
+
// Check if it's a file (images are also files)
|
|
1455
|
+
if (clipboardItem.kind === 'file') {
|
|
1456
|
+
e.preventDefault();
|
|
1457
|
+
const blob = clipboardItem.getAsFile();
|
|
1458
|
+
if (!blob)
|
|
1459
|
+
return;
|
|
1460
|
+
// Determine file name - use blob name if available, otherwise generate one
|
|
1461
|
+
let fileName = blob.name;
|
|
1462
|
+
if (!fileName) {
|
|
1463
|
+
// Generate a filename based on the MIME type
|
|
1464
|
+
const extension = clipboardItem.type.startsWith('image/')
|
|
1465
|
+
? clipboardItem.type.split('/')[1]
|
|
1466
|
+
: 'file';
|
|
1467
|
+
fileName = `pasted-${Date.now()}.${extension}`;
|
|
1468
|
+
}
|
|
1469
|
+
const file = new File([blob], fileName, { type: clipboardItem.type });
|
|
1470
|
+
if (isUploading)
|
|
1471
|
+
return; // Prevent multiple simultaneous uploads
|
|
1472
|
+
setIsUploading(true);
|
|
1473
|
+
try {
|
|
1474
|
+
await (0,_utils_fileUpload__WEBPACK_IMPORTED_MODULE_6__.uploadFileToBackend)(file, notebookTracker, handleFileUpload);
|
|
1475
|
+
}
|
|
1476
|
+
finally {
|
|
1477
|
+
setIsUploading(false);
|
|
1478
|
+
}
|
|
1479
|
+
}
|
|
1480
|
+
};
|
|
1423
1481
|
// Debounce the active cell ID change to avoid multiple rerenders.
|
|
1424
1482
|
// We use this to avoid a flickering screen when the active cell changes.
|
|
1425
|
-
const debouncedSetActiveCellID = (0,
|
|
1483
|
+
const debouncedSetActiveCellID = (0,_hooks_useDebouncedFunction__WEBPACK_IMPORTED_MODULE_7__.useDebouncedFunction)((newID) => {
|
|
1426
1484
|
setActiveCellID(newID);
|
|
1427
1485
|
}, 100);
|
|
1428
1486
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
@@ -1592,7 +1650,7 @@ const ChatInput = ({ app, initialContent, handleSubmitUserMessage, onCancel, isE
|
|
|
1592
1650
|
};
|
|
1593
1651
|
// Convert @Cell N references to [MITO_CELL_REF:cell_id] format before submitting
|
|
1594
1652
|
const processMessageForSubmission = (messageText) => {
|
|
1595
|
-
return (0,
|
|
1653
|
+
return (0,_utils_cellReferences__WEBPACK_IMPORTED_MODULE_8__.convertCellReferencesToStableFormat)(messageText, notebookTracker.currentWidget);
|
|
1596
1654
|
};
|
|
1597
1655
|
const getExpandedVarialbes = () => {
|
|
1598
1656
|
const activeNotebookContext = contextManager === null || contextManager === void 0 ? void 0 : contextManager.getActiveNotebookContext();
|
|
@@ -1680,13 +1738,58 @@ const ChatInput = ({ app, initialContent, handleSubmitUserMessage, onCancel, isE
|
|
|
1680
1738
|
}
|
|
1681
1739
|
}
|
|
1682
1740
|
}, [agentModeEnabled, additionalContext, activeCellCode]);
|
|
1683
|
-
|
|
1741
|
+
// Manage line selection context - shows selected lines when user has text selected in a code cell
|
|
1742
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
1743
|
+
const LINE_SELECTION_TYPE = 'line_selection';
|
|
1744
|
+
// Build the new value data for comparison (lines are 0-indexed internally)
|
|
1745
|
+
const newValueData = lineSelection.hasSelection
|
|
1746
|
+
? JSON.stringify({
|
|
1747
|
+
cellId: lineSelection.cellId,
|
|
1748
|
+
startLine: lineSelection.startLine,
|
|
1749
|
+
endLine: lineSelection.endLine,
|
|
1750
|
+
selectedCode: lineSelection.selectedCode
|
|
1751
|
+
})
|
|
1752
|
+
: null;
|
|
1753
|
+
// Treat null and undefined as the same "no selection" state
|
|
1754
|
+
const normalizedNewValue = newValueData !== null && newValueData !== void 0 ? newValueData : null;
|
|
1755
|
+
setAdditionalContext(prev => {
|
|
1756
|
+
var _a;
|
|
1757
|
+
// Find existing line selection context in the latest state (avoid stale render closures)
|
|
1758
|
+
const existingContext = prev.find(context => context.type === LINE_SELECTION_TYPE);
|
|
1759
|
+
const normalizedExistingValue = (_a = existingContext === null || existingContext === void 0 ? void 0 : existingContext.value) !== null && _a !== void 0 ? _a : null;
|
|
1760
|
+
// Only update if the selection has changed (null and undefined are equivalent)
|
|
1761
|
+
if (normalizedNewValue === normalizedExistingValue) {
|
|
1762
|
+
return prev;
|
|
1763
|
+
}
|
|
1764
|
+
// Remove old line selection context if it exists
|
|
1765
|
+
let additionalContextCopy = prev.filter(context => context.type !== LINE_SELECTION_TYPE);
|
|
1766
|
+
// Add new line selection context if there is text selected
|
|
1767
|
+
if (normalizedNewValue) {
|
|
1768
|
+
// Build display text with 1-indexed lines for user display
|
|
1769
|
+
const displayStartLine = lineSelection.startLine + 1;
|
|
1770
|
+
const displayEndLine = lineSelection.endLine + 1;
|
|
1771
|
+
const displayText = displayStartLine === displayEndLine
|
|
1772
|
+
? `Cell ${lineSelection.cellNumber} line ${displayStartLine}`
|
|
1773
|
+
: `Cell ${lineSelection.cellNumber} line ${displayStartLine}-${displayEndLine}`;
|
|
1774
|
+
additionalContextCopy = [
|
|
1775
|
+
...additionalContextCopy,
|
|
1776
|
+
{
|
|
1777
|
+
type: LINE_SELECTION_TYPE,
|
|
1778
|
+
value: normalizedNewValue,
|
|
1779
|
+
display: displayText
|
|
1780
|
+
}
|
|
1781
|
+
];
|
|
1782
|
+
}
|
|
1783
|
+
return additionalContextCopy;
|
|
1784
|
+
});
|
|
1785
|
+
}, [lineSelection]);
|
|
1786
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_9__.classNames)("chat-input-container", {
|
|
1684
1787
|
"editing": isEditing,
|
|
1685
1788
|
"drag-over": isDragOver
|
|
1686
1789
|
}), onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop },
|
|
1687
1790
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'context-container' },
|
|
1688
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1689
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1791
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_DatabaseButton__WEBPACK_IMPORTED_MODULE_10__["default"], { app: app }),
|
|
1792
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AttachFileButton__WEBPACK_IMPORTED_MODULE_11__["default"], { onFileUploaded: handleFileUpload, notebookTracker: notebookTracker }),
|
|
1690
1793
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "context-button", onClick: () => {
|
|
1691
1794
|
var _a;
|
|
1692
1795
|
setDropdownVisible(true);
|
|
@@ -1694,9 +1797,9 @@ const ChatInput = ({ app, initialContent, handleSubmitUserMessage, onCancel, isE
|
|
|
1694
1797
|
setIsDropdownFromButton(true);
|
|
1695
1798
|
(_a = textAreaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
1696
1799
|
} }, "\uFF20 Add Context"),
|
|
1697
|
-
additionalContext.map((context, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1800
|
+
additionalContext.map((context, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_12__["default"], { key: `${context.type}-${context.value}-${index}`, title: context.display || context.value, type: context.type, onRemove: () => setAdditionalContext(additionalContext.filter((_, i) => i !== index)), notebookTracker: notebookTracker, activeCellID: activeCellID, value: context.value })))),
|
|
1698
1801
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-input-text-area-container' },
|
|
1699
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", { ref: textAreaRef, className: (0,
|
|
1802
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", { ref: textAreaRef, className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_9__.classNames)("message", "message-user", 'chat-input', { "agent-mode": agentModeEnabled }), placeholder: getPlaceholderText(), value: input, disabled: agentExecutionStatus === 'working' || agentExecutionStatus === 'stopping', onChange: handleInputChange, onPaste: handlePaste, onKeyDown: (e) => {
|
|
1700
1803
|
// If dropdown is visible, only handle escape to close it
|
|
1701
1804
|
if (isDropdownVisible) {
|
|
1702
1805
|
if (e.key === 'Escape') {
|
|
@@ -1725,7 +1828,7 @@ const ChatInput = ({ app, initialContent, handleSubmitUserMessage, onCancel, isE
|
|
|
1725
1828
|
}
|
|
1726
1829
|
}
|
|
1727
1830
|
} }),
|
|
1728
|
-
isDropdownVisible && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1831
|
+
isDropdownVisible && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatDropdown__WEBPACK_IMPORTED_MODULE_13__["default"], { options: getExpandedVarialbes(), onSelect: handleOptionSelect, filterText: dropdownFilter, isDropdownFromButton: isDropdownFromButton, onFilterChange: setDropdownFilter, onClose: handleDropdownClose, notebookTracker: notebookTracker }))),
|
|
1729
1832
|
isEditing &&
|
|
1730
1833
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "message-edit-buttons" },
|
|
1731
1834
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { onClick: () => {
|
|
@@ -1752,14 +1855,14 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1752
1855
|
/* harmony export */ });
|
|
1753
1856
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
1754
1857
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
1755
|
-
/* harmony import */ var
|
|
1756
|
-
/* harmony import */ var
|
|
1757
|
-
/* harmony import */ var
|
|
1758
|
-
/* harmony import */ var
|
|
1858
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/classNames */ "./lib/utils/classNames.js");
|
|
1859
|
+
/* harmony import */ var _UserCodeBlock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./UserCodeBlock */ "./lib/Extensions/AiChat/ChatMessage/UserCodeBlock.js");
|
|
1860
|
+
/* harmony import */ var _AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./AssistantCodeBlock */ "./lib/Extensions/AiChat/ChatMessage/AssistantCodeBlock.js");
|
|
1861
|
+
/* harmony import */ var _AlertBlock__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./AlertBlock */ "./lib/Extensions/AiChat/ChatMessage/AlertBlock.js");
|
|
1759
1862
|
/* harmony import */ var _MarkdownBlock__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./MarkdownBlock */ "./lib/Extensions/AiChat/ChatMessage/MarkdownBlock.js");
|
|
1760
|
-
/* harmony import */ var
|
|
1863
|
+
/* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/strings */ "./lib/utils/strings.js");
|
|
1761
1864
|
/* harmony import */ var _icons_Pencil__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../icons/Pencil */ "./lib/icons/Pencil.js");
|
|
1762
|
-
/* harmony import */ var
|
|
1865
|
+
/* harmony import */ var _ChatInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ChatInput */ "./lib/Extensions/AiChat/ChatMessage/ChatInput.js");
|
|
1763
1866
|
/* harmony import */ var _components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../components/TextAndIconButton */ "./lib/components/TextAndIconButton.js");
|
|
1764
1867
|
/* harmony import */ var _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../icons/PlayButtonIcon */ "./lib/icons/PlayButtonIcon.js");
|
|
1765
1868
|
/* harmony import */ var _icons_CopyIcon__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../icons/CopyIcon */ "./lib/icons/CopyIcon.js");
|
|
@@ -1767,13 +1870,15 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1767
1870
|
/* harmony import */ var _components_TextButton__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../components/TextButton */ "./lib/components/TextButton.js");
|
|
1768
1871
|
/* harmony import */ var _style_ChatMessage_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/ChatMessage.css */ "./style/ChatMessage.css");
|
|
1769
1872
|
/* harmony import */ var _style_MarkdownMessage_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../style/MarkdownMessage.css */ "./style/MarkdownMessage.css");
|
|
1770
|
-
/* harmony import */ var
|
|
1873
|
+
/* harmony import */ var _cellUpdateUtils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../cellUpdateUtils */ "./lib/Extensions/AiChat/cellUpdateUtils.js");
|
|
1771
1874
|
/* harmony import */ var _components_AgentComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../../components/AgentComponents/GetCellOutputToolUI */ "./lib/components/AgentComponents/GetCellOutputToolUI.js");
|
|
1772
1875
|
/* harmony import */ var _components_AgentComponents_AssumptionToolUI__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../../components/AgentComponents/AssumptionToolUI */ "./lib/components/AgentComponents/AssumptionToolUI.js");
|
|
1773
1876
|
/* harmony import */ var _components_SelectedContextContainer__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../components/SelectedContextContainer */ "./lib/components/SelectedContextContainer.js");
|
|
1774
|
-
/* harmony import */ var
|
|
1775
|
-
/* harmony import */ var
|
|
1776
|
-
/* harmony import */ var
|
|
1877
|
+
/* harmony import */ var _components_AgentComponents_RunAllCellsToolUI__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../../components/AgentComponents/RunAllCellsToolUI */ "./lib/components/AgentComponents/RunAllCellsToolUI.js");
|
|
1878
|
+
/* harmony import */ var _components_AgentComponents_AskUserQuestionToolUI__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../../components/AgentComponents/AskUserQuestionToolUI */ "./lib/components/AgentComponents/AskUserQuestionToolUI.js");
|
|
1879
|
+
/* harmony import */ var _components_AgentComponents_ScratchpadToolUI__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../../components/AgentComponents/ScratchpadToolUI */ "./lib/components/AgentComponents/ScratchpadToolUI.js");
|
|
1880
|
+
/* harmony import */ var _components_AgentComponents_CreateStreamlitAppToolUI__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../../components/AgentComponents/CreateStreamlitAppToolUI */ "./lib/components/AgentComponents/CreateStreamlitAppToolUI.js");
|
|
1881
|
+
/* harmony import */ var _components_AgentComponents_EditStreamlitAppToolUI__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../../components/AgentComponents/EditStreamlitAppToolUI */ "./lib/components/AgentComponents/EditStreamlitAppToolUI.js");
|
|
1777
1882
|
/*
|
|
1778
1883
|
* Copyright (c) Saga Inc.
|
|
1779
1884
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -1801,24 +1906,16 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1801
1906
|
|
|
1802
1907
|
|
|
1803
1908
|
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
}
|
|
1808
|
-
if (cellUpdate.type === 'modification') {
|
|
1809
|
-
return cellUpdate.id;
|
|
1810
|
-
}
|
|
1811
|
-
// For 'new' type, get the cell ID by index
|
|
1812
|
-
return (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_3__.getCellIDByIndexInNotebookPanel)(notebookTracker.currentWidget, cellUpdate.index);
|
|
1813
|
-
};
|
|
1814
|
-
const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mitoAIConnectionError, mitoAIConnectionErrorType, notebookTracker, renderMimeRegistry, isLastAiMessage, isLastMessage, operatingSystem, previewAICode, acceptAICode, rejectAICode, contextManager, codeReviewStatus, setNextSteps, agentModeEnabled, additionalContext, handleSubmitUserMessage, }) => {
|
|
1909
|
+
|
|
1910
|
+
|
|
1911
|
+
const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mitoAIConnectionError, mitoAIConnectionErrorType, notebookTracker, renderMimeRegistry, isLastAiMessage, isLastMessage, operatingSystem, previewAICode, acceptAICode, rejectAICode, contextManager, codeReviewStatus, setNextSteps, agentModeEnabled, additionalContext, handleSubmitUserMessage, scratchpadResult, }) => {
|
|
1815
1912
|
const [isEditing, setIsEditing] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
1816
1913
|
if (message.role !== 'user' && message.role !== 'assistant') {
|
|
1817
1914
|
return null;
|
|
1818
1915
|
}
|
|
1819
1916
|
const editable = message.role === 'user';
|
|
1820
|
-
const messageContentParts = (0,
|
|
1821
|
-
const messageContent = (0,
|
|
1917
|
+
const messageContentParts = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_3__.splitStringWithCodeBlocks)(message);
|
|
1918
|
+
const messageContent = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_3__.getContentStringFromMessage)(message);
|
|
1822
1919
|
const handleEditClick = () => {
|
|
1823
1920
|
setIsEditing(true);
|
|
1824
1921
|
};
|
|
@@ -1841,11 +1938,11 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
|
|
|
1841
1938
|
setNextSteps(agentResponse.next_steps);
|
|
1842
1939
|
}
|
|
1843
1940
|
if (isEditing) {
|
|
1844
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1941
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatInput__WEBPACK_IMPORTED_MODULE_4__["default"], { app: app, initialContent: message.content.replace(/```[\s\S]*?```/g, '').trim(), onCancel: handleCancel, isEditing: isEditing, contextManager: contextManager, notebookTracker: notebookTracker, agentModeEnabled: agentModeEnabled, handleSubmitUserMessage: handleSubmitUserMessageAndCloseEditing, messageIndex: messageIndex }));
|
|
1845
1942
|
}
|
|
1846
1943
|
if (mitoAIConnectionError) {
|
|
1847
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,
|
|
1848
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1944
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("message") },
|
|
1945
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AlertBlock__WEBPACK_IMPORTED_MODULE_6__["default"], { content: message.content, mitoAIConnectionErrorType: mitoAIConnectionErrorType })));
|
|
1849
1946
|
}
|
|
1850
1947
|
// If the message is empty, don't render anything
|
|
1851
1948
|
if (messageContent === undefined || messageContent === '') {
|
|
@@ -1855,16 +1952,16 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
|
|
|
1855
1952
|
// Users end up applying the code in the middle of streaming and it gets very confusing
|
|
1856
1953
|
// very quickly for users.
|
|
1857
1954
|
let isCodeComplete = false;
|
|
1858
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,
|
|
1955
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)("message", { "message-user": message.role === 'user' }, { 'message-assistant-chat': message.role === 'assistant' }) },
|
|
1859
1956
|
messageContentParts.map((messagePart, index) => {
|
|
1860
1957
|
var _a, _b;
|
|
1861
|
-
if (messagePart.startsWith(
|
|
1958
|
+
if (messagePart.startsWith(_utils_strings__WEBPACK_IMPORTED_MODULE_3__.PYTHON_CODE_BLOCK_START_WITHOUT_NEW_LINE)) {
|
|
1862
1959
|
isCodeComplete = messagePart.endsWith('```');
|
|
1863
1960
|
// Make sure that there is actually code in the message.
|
|
1864
1961
|
// An empty code will look like this '```python ```'
|
|
1865
1962
|
if (messagePart.length > 14) {
|
|
1866
1963
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
1867
|
-
message.role === 'user' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
1964
|
+
message.role === 'user' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_UserCodeBlock__WEBPACK_IMPORTED_MODULE_7__["default"], { code: messagePart, renderMimeRegistry: renderMimeRegistry, agentModeEnabled: agentModeEnabled })) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_8__["default"], { code: messagePart, codeSummary: (_b = (_a = agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.cell_update) === null || _a === void 0 ? void 0 : _a.code_summary) !== null && _b !== void 0 ? _b : ((agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'run_all_cells' ? 'Running all cells' : undefined), isCodeComplete: isCodeComplete, renderMimeRegistry: renderMimeRegistry, previewAICode: previewAICode, acceptAICode: acceptAICode, rejectAICode: rejectAICode, isLastAiMessage: isLastAiMessage, codeReviewStatus: codeReviewStatus, agentModeEnabled: agentModeEnabled, cellId: (0,_cellUpdateUtils__WEBPACK_IMPORTED_MODULE_9__.getCellIdFromCellUpdate)(agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.cell_update, notebookTracker), notebookPanel: notebookTracker.currentWidget })),
|
|
1868
1965
|
!agentModeEnabled && isLastAiMessage && isCodeComplete && codeReviewStatus === 'chatPreview' &&
|
|
1869
1966
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'chat-message-buttons' },
|
|
1870
1967
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_10__["default"], { onClick: () => { previewAICode(); }, text: 'Overwrite Active Cell', icon: _icons_PlayButtonIcon__WEBPACK_IMPORTED_MODULE_11__["default"], title: 'Write the Ai generated code to the active cell in the jupyter notebook, replacing the current code.', variant: 'gray', width: 'fit-contents' }),
|
|
@@ -1884,7 +1981,7 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
|
|
|
1884
1981
|
}
|
|
1885
1982
|
}
|
|
1886
1983
|
else {
|
|
1887
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: index + messagePart, className: (0,
|
|
1984
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: index + messagePart, className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_5__.classNames)('markdown-message-part') },
|
|
1888
1985
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { onDoubleClick: () => {
|
|
1889
1986
|
// Only allow users to edit their own messages, not the AI responses
|
|
1890
1987
|
if (message.role === 'user') {
|
|
@@ -1903,12 +2000,18 @@ const ChatMessage = ({ app, message, promptType, agentResponse, messageIndex, mi
|
|
|
1903
2000
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_Pencil__WEBPACK_IMPORTED_MODULE_18__["default"], null))),
|
|
1904
2001
|
(agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'get_cell_output' &&
|
|
1905
2002
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_GetCellOutputToolUI__WEBPACK_IMPORTED_MODULE_19__["default"], null),
|
|
2003
|
+
(agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'scratchpad' &&
|
|
2004
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_ScratchpadToolUI__WEBPACK_IMPORTED_MODULE_20__["default"], { scratchpadCode: agentResponse.scratchpad_code, scratchpadSummary: agentResponse.scratchpad_summary, scratchpadResult: scratchpadResult, renderMimeRegistry: renderMimeRegistry }),
|
|
1906
2005
|
(agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'run_all_cells' && agentModeEnabled &&
|
|
1907
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
2006
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_RunAllCellsToolUI__WEBPACK_IMPORTED_MODULE_21__["default"], null),
|
|
2007
|
+
(agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'ask_user_question' &&
|
|
2008
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_AskUserQuestionToolUI__WEBPACK_IMPORTED_MODULE_22__["default"], { question: agentResponse.question || '', answers: agentResponse.answers, isLastMessage: isLastMessage, onAnswerSelected: (answer) => {
|
|
2009
|
+
handleSubmitUserMessage(answer);
|
|
2010
|
+
} }),
|
|
1908
2011
|
(agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'create_streamlit_app' && agentModeEnabled &&
|
|
1909
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
2012
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_CreateStreamlitAppToolUI__WEBPACK_IMPORTED_MODULE_23__["default"], { isRunning: isLastMessage }),
|
|
1910
2013
|
(agentResponse === null || agentResponse === void 0 ? void 0 : agentResponse.type) === 'edit_streamlit_app' && agentModeEnabled &&
|
|
1911
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
2014
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_EditStreamlitAppToolUI__WEBPACK_IMPORTED_MODULE_24__["default"], { isRunning: isLastMessage })));
|
|
1912
2015
|
};
|
|
1913
2016
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatMessage);
|
|
1914
2017
|
|
|
@@ -2526,8 +2629,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2526
2629
|
/* harmony import */ var _utils_chatHistory__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../utils/chatHistory */ "./lib/utils/chatHistory.js");
|
|
2527
2630
|
/* harmony import */ var _utils_codeDiff__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../utils/codeDiff */ "./lib/utils/codeDiff.js");
|
|
2528
2631
|
/* harmony import */ var _utils_cellOutput__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../utils/cellOutput */ "./lib/utils/cellOutput.js");
|
|
2529
|
-
/* harmony import */ var _utils_waitForNotebookReady__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../utils/waitForNotebookReady */ "./lib/utils/waitForNotebookReady.js");
|
|
2530
2632
|
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./utils */ "./lib/Extensions/AiChat/utils.js");
|
|
2633
|
+
/* harmony import */ var _utils_waitForNotebookReady__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../utils/waitForNotebookReady */ "./lib/utils/waitForNotebookReady.js");
|
|
2531
2634
|
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
2532
2635
|
/* harmony import */ var _utils_sound__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../utils/sound */ "./lib/utils/sound.js");
|
|
2533
2636
|
/* harmony import */ var _SettingsManager_SettingsManagerPlugin__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../SettingsManager/SettingsManagerPlugin */ "./lib/Extensions/SettingsManager/SettingsManagerPlugin.js");
|
|
@@ -2586,6 +2689,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2586
2689
|
|
|
2587
2690
|
|
|
2588
2691
|
|
|
2692
|
+
|
|
2589
2693
|
// Internal imports - Chat components
|
|
2590
2694
|
|
|
2591
2695
|
|
|
@@ -2617,7 +2721,7 @@ const getDefaultChatHistoryManager = (notebookTracker, contextManager, app) => {
|
|
|
2617
2721
|
const chatHistoryManager = new _ChatHistoryManager__WEBPACK_IMPORTED_MODULE_6__.ChatHistoryManager(contextManager, notebookTracker, app);
|
|
2618
2722
|
return chatHistoryManager;
|
|
2619
2723
|
};
|
|
2620
|
-
const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, streamlitPreviewManager, app, operatingSystem, websocketClient, }) => {
|
|
2724
|
+
const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, streamlitPreviewManager, app, operatingSystem, websocketClient, documentManager, }) => {
|
|
2621
2725
|
// User signup state
|
|
2622
2726
|
const { isSignedUp, refreshUserSignupState } = (0,_hooks_useUserSignup__WEBPACK_IMPORTED_MODULE_7__.useUserSignup)();
|
|
2623
2727
|
// Core chat state management
|
|
@@ -2779,21 +2883,17 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, str
|
|
|
2779
2883
|
const sendAgentExecutionMessage = async (input, messageIndex, sendCellIDOutput = undefined, additionalContext) => {
|
|
2780
2884
|
// Step 0: reset the state for a new message
|
|
2781
2885
|
resetForNewMessage();
|
|
2782
|
-
const agentTargetNotebookPanel = agentTargetNotebookPanelRef.current;
|
|
2783
|
-
if (agentTargetNotebookPanel === null) {
|
|
2784
|
-
return;
|
|
2785
|
-
}
|
|
2786
2886
|
// Step 1: Add the user's message to the chat history
|
|
2787
2887
|
const newChatHistoryManager = getDuplicateChatHistoryManager();
|
|
2788
2888
|
if (messageIndex !== undefined) {
|
|
2789
2889
|
// Drop all of the messages starting at the message index
|
|
2790
2890
|
newChatHistoryManager.dropMessagesStartingAtIndex(messageIndex);
|
|
2791
2891
|
}
|
|
2792
|
-
const agentExecutionMetadata = newChatHistoryManager.addAgentExecutionMessage(activeThreadIdRef.current,
|
|
2892
|
+
const agentExecutionMetadata = newChatHistoryManager.addAgentExecutionMessage(activeThreadIdRef.current, agentTargetNotebookPanelRef.current, input, additionalContext);
|
|
2793
2893
|
if (messageIndex !== undefined) {
|
|
2794
2894
|
agentExecutionMetadata.index = messageIndex;
|
|
2795
2895
|
}
|
|
2796
|
-
agentExecutionMetadata.base64EncodedActiveCellOutput = await (0,_utils__WEBPACK_IMPORTED_MODULE_17__.getBase64EncodedCellOutputInNotebook)(
|
|
2896
|
+
agentExecutionMetadata.base64EncodedActiveCellOutput = await (0,_utils__WEBPACK_IMPORTED_MODULE_17__.getBase64EncodedCellOutputInNotebook)(agentTargetNotebookPanelRef.current, sendCellIDOutput);
|
|
2797
2897
|
setChatHistoryManager(newChatHistoryManager);
|
|
2798
2898
|
setLoadingStatus('thinking');
|
|
2799
2899
|
// Step 2: Send the message to the AI
|
|
@@ -2805,12 +2905,31 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, str
|
|
|
2805
2905
|
};
|
|
2806
2906
|
await _sendMessageAndSaveResponse(completionRequest, newChatHistoryManager);
|
|
2807
2907
|
};
|
|
2908
|
+
const sendScratchpadResultMessage = async (scratchpadResult) => {
|
|
2909
|
+
// Step 0: reset the state for a new message
|
|
2910
|
+
resetForNewMessage();
|
|
2911
|
+
// Step 1: Add the scratchpad result message to the chat history
|
|
2912
|
+
const newChatHistoryManager = getDuplicateChatHistoryManager();
|
|
2913
|
+
const scratchpadResultMetadata = newChatHistoryManager.addScratchpadResultMessage(activeThreadIdRef.current, scratchpadResult);
|
|
2914
|
+
setChatHistoryManager(newChatHistoryManager);
|
|
2915
|
+
setLoadingStatus('thinking');
|
|
2916
|
+
// Step 2: Send the message to the AI
|
|
2917
|
+
const completionRequest = {
|
|
2918
|
+
type: 'agent:scratchpad-result',
|
|
2919
|
+
message_id: _lumino_coreutils__WEBPACK_IMPORTED_MODULE_2__.UUID.uuid4(),
|
|
2920
|
+
metadata: scratchpadResultMetadata,
|
|
2921
|
+
stream: false
|
|
2922
|
+
};
|
|
2923
|
+
await _sendMessageAndSaveResponse(completionRequest, newChatHistoryManager);
|
|
2924
|
+
};
|
|
2808
2925
|
/*
|
|
2809
2926
|
Send whatever message is currently in the chat input
|
|
2810
2927
|
*/
|
|
2811
2928
|
const sendChatInputMessage = async (input, messageIndex, additionalContext) => {
|
|
2812
2929
|
// Step 0: reset the state for a new message
|
|
2813
2930
|
resetForNewMessage();
|
|
2931
|
+
// Ensure a notebook exists before proceeding
|
|
2932
|
+
await (0,_utils__WEBPACK_IMPORTED_MODULE_17__.ensureNotebookExists)(notebookTracker, documentManager);
|
|
2814
2933
|
// Enable follow mode when user sends a new message
|
|
2815
2934
|
setAutoScrollFollowMode(true);
|
|
2816
2935
|
// Step 1: Add the user's message to the chat history
|
|
@@ -2951,8 +3070,8 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, str
|
|
|
2951
3070
|
}
|
|
2952
3071
|
else {
|
|
2953
3072
|
const content = (_b = (_a = aiResponse.items[0]) === null || _a === void 0 ? void 0 : _a.content) !== null && _b !== void 0 ? _b : '';
|
|
2954
|
-
if (completionRequest.metadata.promptType === 'agent:execution' || completionRequest.metadata.promptType === 'agent:autoErrorFixup') {
|
|
2955
|
-
// Agent:Execution prompts return a CellUpdate object that we need to parse
|
|
3073
|
+
if (completionRequest.metadata.promptType === 'agent:execution' || completionRequest.metadata.promptType === 'agent:scratchpad-result' || completionRequest.metadata.promptType === 'agent:autoErrorFixup') {
|
|
3074
|
+
// Agent:Execution and Agent:ScratchpadResult prompts return a CellUpdate object that we need to parse
|
|
2956
3075
|
const agentResponse = JSON.parse(content);
|
|
2957
3076
|
newChatHistoryManager.addAIMessageFromAgentResponse(agentResponse);
|
|
2958
3077
|
}
|
|
@@ -3004,6 +3123,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, str
|
|
|
3004
3123
|
app,
|
|
3005
3124
|
streamlitPreviewManager,
|
|
3006
3125
|
websocketClient,
|
|
3126
|
+
documentManager,
|
|
3007
3127
|
chatHistoryManagerRef,
|
|
3008
3128
|
activeThreadIdRef,
|
|
3009
3129
|
activeRequestControllerRef,
|
|
@@ -3013,6 +3133,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, str
|
|
|
3013
3133
|
addAIMessageFromResponseAndUpdateState,
|
|
3014
3134
|
getDuplicateChatHistoryManager,
|
|
3015
3135
|
sendAgentExecutionMessage,
|
|
3136
|
+
sendScratchpadResultMessage,
|
|
3016
3137
|
sendAgentSmartDebugMessage,
|
|
3017
3138
|
agentReview,
|
|
3018
3139
|
agentTargetNotebookPanelRef,
|
|
@@ -3146,6 +3267,24 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, str
|
|
|
3146
3267
|
execute: rejectAICode,
|
|
3147
3268
|
isVisible: () => (0,_utils_codeDiff__WEBPACK_IMPORTED_MODULE_26__.shouldShowDiffToolbarButtons)(notebookTracker, cellStateBeforeDiff.current, agentReview.changedCellsRef.current)
|
|
3148
3269
|
});
|
|
3270
|
+
/*
|
|
3271
|
+
Register global command for starting a new chat.
|
|
3272
|
+
This can be triggered from anywhere with CMD+K (Mac) or Ctrl+K (Windows/Linux).
|
|
3273
|
+
*/
|
|
3274
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_13__.COMMAND_MITO_AI_START_NEW_CHAT, {
|
|
3275
|
+
label: 'Start New Chat',
|
|
3276
|
+
execute: async () => {
|
|
3277
|
+
await startNewChat();
|
|
3278
|
+
// Focus the chat input after starting new chat
|
|
3279
|
+
const chatInput = document.querySelector('.chat-input');
|
|
3280
|
+
chatInput === null || chatInput === void 0 ? void 0 : chatInput.focus();
|
|
3281
|
+
}
|
|
3282
|
+
});
|
|
3283
|
+
app.commands.addKeyBinding({
|
|
3284
|
+
command: _commands__WEBPACK_IMPORTED_MODULE_13__.COMMAND_MITO_AI_START_NEW_CHAT,
|
|
3285
|
+
keys: ['Accel K'],
|
|
3286
|
+
selector: 'body',
|
|
3287
|
+
});
|
|
3149
3288
|
}, []);
|
|
3150
3289
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
3151
3290
|
// Register keyboard shortcuts
|
|
@@ -3217,7 +3356,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, str
|
|
|
3217
3356
|
} }),
|
|
3218
3357
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_UsageBadge__WEBPACK_IMPORTED_MODULE_31__["default"], { app: app, ref: usageBadgeRef })),
|
|
3219
3358
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-taskpane-header-right" },
|
|
3220
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_29__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_1__.addIcon.react, null), title:
|
|
3359
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_IconButton__WEBPACK_IMPORTED_MODULE_29__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_1__.addIcon.react, null), title: `Start New Chat (${operatingSystem === 'mac' ? '⌘' : 'Ctrl'}K)`, onClick: async () => { await startNewChat(); } }),
|
|
3221
3360
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_DropdownMenu__WEBPACK_IMPORTED_MODULE_32__["default"], { trigger: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "icon-button", title: "Chat Threads", onClick: fetchChatThreads },
|
|
3222
3361
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_jupyterlab_ui_components__WEBPACK_IMPORTED_MODULE_1__.historyIcon.react, null)), items: chatThreads.length > 0
|
|
3223
3362
|
? chatThreads.map(thread => ({
|
|
@@ -3247,7 +3386,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, str
|
|
|
3247
3386
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentComponents_ErrorFixupToolUI__WEBPACK_IMPORTED_MODULE_36__["default"], { key: index, messages: displayOptimizedChat, renderMimeRegistry: renderMimeRegistry, notebookTracker: notebookTracker }));
|
|
3248
3387
|
}
|
|
3249
3388
|
else {
|
|
3250
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatMessage_ChatMessage__WEBPACK_IMPORTED_MODULE_37__["default"], { key: index, message: displayOptimizedChat.message, promptType: displayOptimizedChat.promptType, agentResponse: displayOptimizedChat.agentResponse, codeCellID: displayOptimizedChat.codeCellID, mitoAIConnectionError: displayOptimizedChat.type === 'connection error', mitoAIConnectionErrorType: displayOptimizedChat.mitoAIConnectionErrorType || null, messageIndex: index, notebookTracker: notebookTracker, renderMimeRegistry: renderMimeRegistry, app: app, isLastAiMessage: index === lastAIMessagesIndex, isLastMessage: index === displayOptimizedChatHistory.length - 1, operatingSystem: operatingSystem, previewAICode: previewAICodeToActiveCell, acceptAICode: acceptAICode, rejectAICode: rejectAICode, handleSubmitUserMessage: handleSubmitUserMessage, contextManager: contextManager, codeReviewStatus: codeReviewStatus, setNextSteps: setNextSteps, agentModeEnabled: agentModeEnabled, additionalContext: displayOptimizedChat.additionalContext }));
|
|
3389
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatMessage_ChatMessage__WEBPACK_IMPORTED_MODULE_37__["default"], { key: index, message: displayOptimizedChat.message, promptType: displayOptimizedChat.promptType, agentResponse: displayOptimizedChat.agentResponse, codeCellID: displayOptimizedChat.codeCellID, mitoAIConnectionError: displayOptimizedChat.type === 'connection error', mitoAIConnectionErrorType: displayOptimizedChat.mitoAIConnectionErrorType || null, messageIndex: index, notebookTracker: notebookTracker, renderMimeRegistry: renderMimeRegistry, app: app, isLastAiMessage: index === lastAIMessagesIndex, isLastMessage: index === displayOptimizedChatHistory.length - 1, operatingSystem: operatingSystem, previewAICode: previewAICodeToActiveCell, acceptAICode: acceptAICode, rejectAICode: rejectAICode, handleSubmitUserMessage: handleSubmitUserMessage, contextManager: contextManager, codeReviewStatus: codeReviewStatus, setNextSteps: setNextSteps, agentModeEnabled: agentModeEnabled, additionalContext: displayOptimizedChat.additionalContext, scratchpadResult: displayOptimizedChat.scratchpadResult }));
|
|
3251
3390
|
}
|
|
3252
3391
|
}).filter(message => message !== null),
|
|
3253
3392
|
loadingStatus === 'thinking' &&
|
|
@@ -3398,7 +3537,7 @@ class ChatWidget extends _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.React
|
|
|
3398
3537
|
super.dispose();
|
|
3399
3538
|
}
|
|
3400
3539
|
render() {
|
|
3401
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatTaskpane__WEBPACK_IMPORTED_MODULE_6__["default"], { app: this.options.app, notebookTracker: this.options.notebookTracker, renderMimeRegistry: this.options.renderMimeRegistry, contextManager: this.options.contextManager, streamlitPreviewManager: this.options.streamlitPreviewManager, operatingSystem: this.options.operatingSystem, websocketClient: this.websocketClient }));
|
|
3540
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatTaskpane__WEBPACK_IMPORTED_MODULE_6__["default"], { app: this.options.app, notebookTracker: this.options.notebookTracker, renderMimeRegistry: this.options.renderMimeRegistry, contextManager: this.options.contextManager, streamlitPreviewManager: this.options.streamlitPreviewManager, operatingSystem: this.options.operatingSystem, websocketClient: this.websocketClient, documentManager: this.options.documentManager }));
|
|
3402
3541
|
}
|
|
3403
3542
|
onMessage(client, message) {
|
|
3404
3543
|
switch (message.type) {
|
|
@@ -3411,7 +3550,7 @@ class ChatWidget extends _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.React
|
|
|
3411
3550
|
}
|
|
3412
3551
|
}
|
|
3413
3552
|
}
|
|
3414
|
-
function buildChatWidget(app, notebookTracker, renderMimeRegistry, contextManager, streamlitPreviewManager) {
|
|
3553
|
+
function buildChatWidget(app, notebookTracker, renderMimeRegistry, contextManager, streamlitPreviewManager, documentManager) {
|
|
3415
3554
|
// Get the operating system here so we don't have to do it each time the chat changes.
|
|
3416
3555
|
// The operating system won't change, duh.
|
|
3417
3556
|
const operatingSystem = (0,_utils_user__WEBPACK_IMPORTED_MODULE_7__.getOperatingSystem)();
|
|
@@ -3421,7 +3560,8 @@ function buildChatWidget(app, notebookTracker, renderMimeRegistry, contextManage
|
|
|
3421
3560
|
renderMimeRegistry,
|
|
3422
3561
|
contextManager,
|
|
3423
3562
|
streamlitPreviewManager: streamlitPreviewManager,
|
|
3424
|
-
operatingSystem
|
|
3563
|
+
operatingSystem,
|
|
3564
|
+
documentManager
|
|
3425
3565
|
});
|
|
3426
3566
|
chatWidget.id = 'mito_ai';
|
|
3427
3567
|
return chatWidget;
|
|
@@ -3760,6 +3900,50 @@ UsageBadge.displayName = 'UsageBadge';
|
|
|
3760
3900
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UsageBadge);
|
|
3761
3901
|
|
|
3762
3902
|
|
|
3903
|
+
/***/ }),
|
|
3904
|
+
|
|
3905
|
+
/***/ "./lib/Extensions/AiChat/cellUpdateUtils.js":
|
|
3906
|
+
/*!**************************************************!*\
|
|
3907
|
+
!*** ./lib/Extensions/AiChat/cellUpdateUtils.js ***!
|
|
3908
|
+
\**************************************************/
|
|
3909
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
3910
|
+
|
|
3911
|
+
__webpack_require__.r(__webpack_exports__);
|
|
3912
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
3913
|
+
/* harmony export */ getCellIdFromCellUpdate: () => (/* binding */ getCellIdFromCellUpdate)
|
|
3914
|
+
/* harmony export */ });
|
|
3915
|
+
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/notebook */ "./lib/utils/notebook.js");
|
|
3916
|
+
/*
|
|
3917
|
+
* Copyright (c) Saga Inc.
|
|
3918
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
3919
|
+
*/
|
|
3920
|
+
|
|
3921
|
+
const getCellIdFromCellUpdate = (cellUpdate, notebookTracker) => {
|
|
3922
|
+
if (!cellUpdate) {
|
|
3923
|
+
return undefined;
|
|
3924
|
+
}
|
|
3925
|
+
if (cellUpdate.type === 'modification') {
|
|
3926
|
+
return cellUpdate.id;
|
|
3927
|
+
}
|
|
3928
|
+
// For 'new' type, find the cell that was inserted after after_cell_id
|
|
3929
|
+
const notebookPanel = notebookTracker.currentWidget;
|
|
3930
|
+
if (!notebookPanel) {
|
|
3931
|
+
return undefined;
|
|
3932
|
+
}
|
|
3933
|
+
if (cellUpdate.after_cell_id === 'new cell') {
|
|
3934
|
+
// New cell was inserted at the top, so it's at index 0
|
|
3935
|
+
return (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_0__.getCellIDByIndexInNotebookPanel)(notebookPanel, 0);
|
|
3936
|
+
}
|
|
3937
|
+
// Get the index of the cell we inserted after, then get the next cell's ID
|
|
3938
|
+
const afterCellIndex = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_0__.getCellIndexByIDInNotebookPanel)(notebookPanel, cellUpdate.after_cell_id);
|
|
3939
|
+
if (afterCellIndex === undefined) {
|
|
3940
|
+
return undefined;
|
|
3941
|
+
}
|
|
3942
|
+
// The new cell is at index afterCellIndex + 1
|
|
3943
|
+
return (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_0__.getCellIDByIndexInNotebookPanel)(notebookPanel, afterCellIndex + 1);
|
|
3944
|
+
};
|
|
3945
|
+
|
|
3946
|
+
|
|
3763
3947
|
/***/ }),
|
|
3764
3948
|
|
|
3765
3949
|
/***/ "./lib/Extensions/AiChat/components/AgentReviewPanel.js":
|
|
@@ -3814,12 +3998,14 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
3814
3998
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
3815
3999
|
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
|
|
3816
4000
|
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_1__);
|
|
3817
|
-
/* harmony import */ var
|
|
3818
|
-
/* harmony import */ var
|
|
3819
|
-
/* harmony import */ var
|
|
4001
|
+
/* harmony import */ var _utils_checkpoint__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/checkpoint */ "./lib/utils/checkpoint.js");
|
|
4002
|
+
/* harmony import */ var _utils_agentActions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../utils/agentActions */ "./lib/utils/agentActions.js");
|
|
4003
|
+
/* harmony import */ var _utils_blacklistedWords__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../utils/blacklistedWords */ "./lib/utils/blacklistedWords.js");
|
|
3820
4004
|
/* harmony import */ var _utils_sound__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/sound */ "./lib/utils/sound.js");
|
|
3821
|
-
/* harmony import */ var
|
|
3822
|
-
/* harmony import */ var
|
|
4005
|
+
/* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../utils/strings */ "./lib/utils/strings.js");
|
|
4006
|
+
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../utils/notebook */ "./lib/utils/notebook.js");
|
|
4007
|
+
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./lib/Extensions/AiChat/utils.js");
|
|
4008
|
+
/* harmony import */ var _utils_scratchpadExecution__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../utils/scratchpadExecution */ "./lib/utils/scratchpadExecution.js");
|
|
3823
4009
|
/*
|
|
3824
4010
|
* Copyright (c) Saga Inc.
|
|
3825
4011
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -3832,8 +4018,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
3832
4018
|
|
|
3833
4019
|
|
|
3834
4020
|
|
|
4021
|
+
|
|
4022
|
+
|
|
3835
4023
|
const AGENT_EXECUTION_DEPTH_LIMIT = 20;
|
|
3836
|
-
const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, websocketClient, chatHistoryManagerRef, activeThreadIdRef, activeRequestControllerRef, setLoadingStatus, setAutoScrollFollowMode, setHasCheckpoint, addAIMessageFromResponseAndUpdateState, getDuplicateChatHistoryManager, sendAgentExecutionMessage, sendAgentSmartDebugMessage, agentReview, agentTargetNotebookPanelRef, audioContextRef, }) => {
|
|
4024
|
+
const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, websocketClient, documentManager, chatHistoryManagerRef, activeThreadIdRef, activeRequestControllerRef, setLoadingStatus, setAutoScrollFollowMode, setHasCheckpoint, addAIMessageFromResponseAndUpdateState, getDuplicateChatHistoryManager, sendAgentExecutionMessage, sendScratchpadResultMessage, sendAgentSmartDebugMessage, agentReview, agentTargetNotebookPanelRef, audioContextRef, }) => {
|
|
3837
4025
|
// Agent execution state
|
|
3838
4026
|
const [agentExecutionStatus, setAgentExecutionStatus] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('idle');
|
|
3839
4027
|
const shouldContinueAgentExecution = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(true);
|
|
@@ -3866,10 +4054,12 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3866
4054
|
(0,_utils_sound__WEBPACK_IMPORTED_MODULE_2__.playCompletionSound)(audioContextRef.current);
|
|
3867
4055
|
};
|
|
3868
4056
|
const startAgentExecution = async (input, setAgentReviewStatus, messageIndex, additionalContext) => {
|
|
3869
|
-
|
|
4057
|
+
// Ensure a notebook exists before proceeding with agent execution
|
|
4058
|
+
const agentTargetNotebookPanel = await (0,_utils__WEBPACK_IMPORTED_MODULE_3__.ensureNotebookExists)(notebookTracker, documentManager);
|
|
4059
|
+
agentTargetNotebookPanelRef.current = agentTargetNotebookPanel;
|
|
3870
4060
|
agentReview.acceptAllAICode();
|
|
3871
|
-
agentReview.setNotebookSnapshotPreAgentExecution((0,
|
|
3872
|
-
await (0,
|
|
4061
|
+
agentReview.setNotebookSnapshotPreAgentExecution((0,_utils_notebook__WEBPACK_IMPORTED_MODULE_4__.getAIOptimizedCellsInNotebookPanel)(agentTargetNotebookPanelRef.current));
|
|
4062
|
+
await (0,_utils_checkpoint__WEBPACK_IMPORTED_MODULE_5__.createCheckpoint)(app, setHasCheckpoint);
|
|
3873
4063
|
setAgentExecutionStatus('working');
|
|
3874
4064
|
setAgentReviewStatus('pre-agent-code-review');
|
|
3875
4065
|
// Enable follow mode when user starts agent execution
|
|
@@ -3879,6 +4069,7 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3879
4069
|
let isAgentFinished = false;
|
|
3880
4070
|
let agentExecutionDepth = 1;
|
|
3881
4071
|
let sendCellIDOutput = undefined;
|
|
4072
|
+
let processedScratchpadResult = undefined;
|
|
3882
4073
|
// Sometimes its useful to send extra information back to the agent. For example,
|
|
3883
4074
|
// if the agent tries to create a streamlit app and it errors, we want to let the
|
|
3884
4075
|
// orchestrator agent know about the issue.
|
|
@@ -3898,6 +4089,11 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3898
4089
|
if (agentExecutionDepth === 1) {
|
|
3899
4090
|
await sendAgentExecutionMessage(input, messageIndex, undefined, additionalContext);
|
|
3900
4091
|
}
|
|
4092
|
+
else if (processedScratchpadResult !== undefined) {
|
|
4093
|
+
// If we have scratchpad results, send them using the scratchpad result message type
|
|
4094
|
+
await sendScratchpadResultMessage(processedScratchpadResult);
|
|
4095
|
+
processedScratchpadResult = undefined;
|
|
4096
|
+
}
|
|
3901
4097
|
else {
|
|
3902
4098
|
await sendAgentExecutionMessage(messageToShareWithAgent || '', undefined, sendCellIDOutput);
|
|
3903
4099
|
// Reset flag back to false until the agent requests the active cell output again
|
|
@@ -3910,12 +4106,12 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3910
4106
|
const aiDisplayOptimizedChatItem = chatHistoryManagerRef.current.getLastAIDisplayOptimizedChatItem();
|
|
3911
4107
|
// # TODO: Make this is a helper function so we can also use it in the auto error fixup!
|
|
3912
4108
|
if (aiDisplayOptimizedChatItem) {
|
|
3913
|
-
const aiGeneratedCode = (0,
|
|
4109
|
+
const aiGeneratedCode = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_6__.getCodeBlockFromMessage)(aiDisplayOptimizedChatItem.message);
|
|
3914
4110
|
if (aiGeneratedCode) {
|
|
3915
|
-
const securityCheck = (0,
|
|
4111
|
+
const securityCheck = (0,_utils_blacklistedWords__WEBPACK_IMPORTED_MODULE_7__.checkForBlacklistedWords)(aiGeneratedCode);
|
|
3916
4112
|
if (!securityCheck.safe) {
|
|
3917
4113
|
console.error('Security Warning:', securityCheck.reason);
|
|
3918
|
-
addAIMessageFromResponseAndUpdateState(`I cannot execute this code
|
|
4114
|
+
addAIMessageFromResponseAndUpdateState(`I cannot automatically execute this code because it did not pass my security checks. ${securityCheck.reason}. If you decide that this code is safe, you can manually run it.`, 'agent:execution', chatHistoryManagerRef.current);
|
|
3919
4115
|
await markAgentForStopping();
|
|
3920
4116
|
break;
|
|
3921
4117
|
}
|
|
@@ -3956,12 +4152,12 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3956
4152
|
// Run the code and handle any errors
|
|
3957
4153
|
setLoadingStatus('running-code');
|
|
3958
4154
|
try {
|
|
3959
|
-
await (0,
|
|
4155
|
+
await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_8__.acceptAndRunCellUpdate)(agentResponse.cell_update, agentTargetNotebookPanelRef.current);
|
|
3960
4156
|
}
|
|
3961
4157
|
finally {
|
|
3962
4158
|
setLoadingStatus(undefined);
|
|
3963
4159
|
}
|
|
3964
|
-
const status = await (0,
|
|
4160
|
+
const status = await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_8__.retryIfExecutionError)(agentTargetNotebookPanelRef.current, app, sendAgentSmartDebugMessage, shouldContinueAgentExecution, markAgentForStopping, chatHistoryManagerRef, setLoadingStatus);
|
|
3965
4161
|
if (status === 'interupted') {
|
|
3966
4162
|
break;
|
|
3967
4163
|
}
|
|
@@ -3984,7 +4180,7 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3984
4180
|
setLoadingStatus('running-code');
|
|
3985
4181
|
let result;
|
|
3986
4182
|
try {
|
|
3987
|
-
result = await (0,
|
|
4183
|
+
result = await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_8__.runAllCells)(app, agentTargetNotebookPanelRef.current);
|
|
3988
4184
|
}
|
|
3989
4185
|
finally {
|
|
3990
4186
|
setLoadingStatus(undefined);
|
|
@@ -3992,8 +4188,8 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
3992
4188
|
// If run_all_cells resulted in an error, handle it through the error fixup process
|
|
3993
4189
|
if (!result.success && result.errorMessage && result.errorCellId) {
|
|
3994
4190
|
// Set the error cell as active so the error retry logic can work with it
|
|
3995
|
-
(0,
|
|
3996
|
-
const status = await (0,
|
|
4191
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_4__.setActiveCellByIDInNotebookPanel)(agentTargetNotebookPanelRef.current, result.errorCellId);
|
|
4192
|
+
const status = await (0,_utils_agentActions__WEBPACK_IMPORTED_MODULE_8__.retryIfExecutionError)(agentTargetNotebookPanelRef.current, app, sendAgentSmartDebugMessage, shouldContinueAgentExecution, markAgentForStopping, chatHistoryManagerRef, setLoadingStatus);
|
|
3997
4193
|
if (status === 'interupted') {
|
|
3998
4194
|
break;
|
|
3999
4195
|
}
|
|
@@ -4003,6 +4199,13 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
4003
4199
|
}
|
|
4004
4200
|
}
|
|
4005
4201
|
}
|
|
4202
|
+
if (agentResponse.type === 'ask_user_question') {
|
|
4203
|
+
// When the agent asks a question, we stop execution and wait for the user's response.
|
|
4204
|
+
// The agent will automatically resume when the user responds
|
|
4205
|
+
await markAgentForStopping();
|
|
4206
|
+
isAgentFinished = true;
|
|
4207
|
+
break;
|
|
4208
|
+
}
|
|
4006
4209
|
if (agentResponse.type === 'create_streamlit_app') {
|
|
4007
4210
|
// Create new preview using the service
|
|
4008
4211
|
const createStreamlitAppPrompt = agentResponse.streamlit_app_prompt || '';
|
|
@@ -4024,6 +4227,27 @@ const useAgentExecution = ({ notebookTracker, app, streamlitPreviewManager, webs
|
|
|
4024
4227
|
messageToShareWithAgent = streamlitPreviewResponse.message;
|
|
4025
4228
|
}
|
|
4026
4229
|
}
|
|
4230
|
+
if (agentResponse.type === 'scratchpad' && agentResponse.scratchpad_code) {
|
|
4231
|
+
// Check the scratchpad code for blacklisted words before executing it
|
|
4232
|
+
const securityCheck = (0,_utils_blacklistedWords__WEBPACK_IMPORTED_MODULE_7__.checkForBlacklistedWords)(agentResponse.scratchpad_code);
|
|
4233
|
+
if (!securityCheck.safe) {
|
|
4234
|
+
console.error('Security Warning:', securityCheck.reason);
|
|
4235
|
+
addAIMessageFromResponseAndUpdateState(`I cannot automatically execute this code because it did not pass my security checks. ${securityCheck.reason}. If you decide that this code is safe, you can manually run it.`, 'agent:execution', chatHistoryManagerRef.current);
|
|
4236
|
+
await markAgentForStopping();
|
|
4237
|
+
break;
|
|
4238
|
+
}
|
|
4239
|
+
// Execute scratchpad code silently
|
|
4240
|
+
setLoadingStatus('running-code');
|
|
4241
|
+
let scratchpadResult;
|
|
4242
|
+
try {
|
|
4243
|
+
scratchpadResult = await (0,_utils_scratchpadExecution__WEBPACK_IMPORTED_MODULE_9__.executeScratchpadCode)(agentTargetNotebookPanelRef.current, agentResponse.scratchpad_code);
|
|
4244
|
+
}
|
|
4245
|
+
finally {
|
|
4246
|
+
setLoadingStatus(undefined);
|
|
4247
|
+
}
|
|
4248
|
+
// Format the results for the agent
|
|
4249
|
+
processedScratchpadResult = (0,_utils_scratchpadExecution__WEBPACK_IMPORTED_MODULE_9__.formatScratchpadResult)(scratchpadResult);
|
|
4250
|
+
}
|
|
4027
4251
|
}
|
|
4028
4252
|
if (agentExecutionDepth > AGENT_EXECUTION_DEPTH_LIMIT) {
|
|
4029
4253
|
addAIMessageFromResponseAndUpdateState("Since I've been working for a while now, give my work a review and then tell me how to continue.", 'agent:execution', chatHistoryManagerRef.current);
|
|
@@ -5098,12 +5322,15 @@ const IChatTracker = new _lumino_coreutils__WEBPACK_IMPORTED_MODULE_0__.Token('m
|
|
|
5098
5322
|
|
|
5099
5323
|
__webpack_require__.r(__webpack_exports__);
|
|
5100
5324
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
5325
|
+
/* harmony export */ ensureNotebookExists: () => (/* binding */ ensureNotebookExists),
|
|
5101
5326
|
/* harmony export */ getBase64EncodedCellOutput: () => (/* binding */ getBase64EncodedCellOutput),
|
|
5102
5327
|
/* harmony export */ getBase64EncodedCellOutputInNotebook: () => (/* binding */ getBase64EncodedCellOutputInNotebook)
|
|
5103
5328
|
/* harmony export */ });
|
|
5104
5329
|
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/notebook */ "./lib/utils/notebook.js");
|
|
5105
5330
|
/* harmony import */ var _utils_cellOutput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/cellOutput */ "./lib/utils/cellOutput.js");
|
|
5106
5331
|
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
5332
|
+
/* harmony import */ var _utils_waitForNotebookReady__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/waitForNotebookReady */ "./lib/utils/waitForNotebookReady.js");
|
|
5333
|
+
/* harmony import */ var _utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/notebookMetadata */ "./lib/utils/notebookMetadata.js");
|
|
5107
5334
|
/*
|
|
5108
5335
|
* Copyright (c) Saga Inc.
|
|
5109
5336
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -5111,6 +5338,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
5111
5338
|
|
|
5112
5339
|
|
|
5113
5340
|
|
|
5341
|
+
|
|
5342
|
+
|
|
5114
5343
|
const getBase64EncodedCellOutput = async (notebookTracker, cellID) => {
|
|
5115
5344
|
const notebookPanel = notebookTracker.currentWidget;
|
|
5116
5345
|
return getBase64EncodedCellOutputInNotebook(notebookPanel, cellID);
|
|
@@ -5132,6 +5361,38 @@ const getBase64EncodedCellOutputInNotebook = async (notebookPanel, cellID) => {
|
|
|
5132
5361
|
}
|
|
5133
5362
|
return undefined;
|
|
5134
5363
|
};
|
|
5364
|
+
/*
|
|
5365
|
+
Ensure a notebook exists. If no notebook is open, create a new one.
|
|
5366
|
+
Returns the notebook panel.
|
|
5367
|
+
*/
|
|
5368
|
+
const ensureNotebookExists = async (notebookTracker, documentManager) => {
|
|
5369
|
+
// Check if a notebook already exists
|
|
5370
|
+
let notebookPanel = notebookTracker.currentWidget;
|
|
5371
|
+
if (notebookPanel !== null) {
|
|
5372
|
+
return notebookPanel;
|
|
5373
|
+
}
|
|
5374
|
+
// No notebook exists, create a new one
|
|
5375
|
+
try {
|
|
5376
|
+
// Create a new notebook model (Contents.IModel has a path property)
|
|
5377
|
+
const model = await documentManager.newUntitled({ type: 'notebook' });
|
|
5378
|
+
// Open the notebook using the path from the model
|
|
5379
|
+
await documentManager.open(model.path);
|
|
5380
|
+
// Wait for the notebook to appear in the tracker and be ready
|
|
5381
|
+
await (0,_utils_waitForNotebookReady__WEBPACK_IMPORTED_MODULE_3__.waitForNotebookReady)(notebookTracker);
|
|
5382
|
+
// Get the notebook panel from the tracker
|
|
5383
|
+
notebookPanel = notebookTracker.currentWidget;
|
|
5384
|
+
if (notebookPanel === null) {
|
|
5385
|
+
throw new Error('Failed to get notebook panel after creation');
|
|
5386
|
+
}
|
|
5387
|
+
// Set the notebook ID if it doesn't exist
|
|
5388
|
+
(0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_4__.setNotebookID)(notebookPanel);
|
|
5389
|
+
return notebookPanel;
|
|
5390
|
+
}
|
|
5391
|
+
catch (error) {
|
|
5392
|
+
console.error('Error creating new notebook:', error);
|
|
5393
|
+
throw error;
|
|
5394
|
+
}
|
|
5395
|
+
};
|
|
5135
5396
|
|
|
5136
5397
|
|
|
5137
5398
|
/***/ }),
|
|
@@ -5159,7 +5420,16 @@ function validateAndCorrectAgentResponse(agentResponse) {
|
|
|
5159
5420
|
// Create a copy to avoid mutating the original
|
|
5160
5421
|
const correctedResponse = { ...agentResponse };
|
|
5161
5422
|
// Ensure type is valid. Default to finished_task if not valid.
|
|
5162
|
-
const validTypes = [
|
|
5423
|
+
const validTypes = [
|
|
5424
|
+
'cell_update',
|
|
5425
|
+
'get_cell_output',
|
|
5426
|
+
'run_all_cells',
|
|
5427
|
+
'ask_user_question',
|
|
5428
|
+
'finished_task',
|
|
5429
|
+
'create_streamlit_app',
|
|
5430
|
+
'edit_streamlit_app',
|
|
5431
|
+
'scratchpad'
|
|
5432
|
+
];
|
|
5163
5433
|
correctedResponse.type = (correctedResponse.type && validTypes.includes(correctedResponse.type))
|
|
5164
5434
|
? correctedResponse.type
|
|
5165
5435
|
: 'finished_task';
|
|
@@ -5174,6 +5444,13 @@ function validateAndCorrectAgentResponse(agentResponse) {
|
|
|
5174
5444
|
if (correctedResponse.next_steps !== undefined && correctedResponse.next_steps !== null) {
|
|
5175
5445
|
correctedResponse.next_steps = correctStringArray(correctedResponse.next_steps);
|
|
5176
5446
|
}
|
|
5447
|
+
// Correct ask_user_question
|
|
5448
|
+
if (correctedResponse.answers !== undefined && correctedResponse.answers !== null) {
|
|
5449
|
+
correctedResponse.answers = correctStringArray(correctedResponse.answers);
|
|
5450
|
+
}
|
|
5451
|
+
if (correctedResponse.type === 'ask_user_question' && typeof correctedResponse.question !== 'string') {
|
|
5452
|
+
correctedResponse.question = "";
|
|
5453
|
+
}
|
|
5177
5454
|
// Correct analysis_assumptions - handle string to array conversion
|
|
5178
5455
|
if (correctedResponse.analysis_assumptions !== undefined && correctedResponse.analysis_assumptions !== null) {
|
|
5179
5456
|
correctedResponse.analysis_assumptions = correctStringArray(correctedResponse.analysis_assumptions);
|
|
@@ -5183,6 +5460,13 @@ function validateAndCorrectAgentResponse(agentResponse) {
|
|
|
5183
5460
|
// Correct streamlit_app_prompt - ensure it's a string when present
|
|
5184
5461
|
const editStreamlitAppPromptType = typeof correctedResponse.streamlit_app_prompt;
|
|
5185
5462
|
correctedResponse.streamlit_app_prompt = editStreamlitAppPromptType === 'string' ? correctedResponse.streamlit_app_prompt : undefined;
|
|
5463
|
+
// Correct scratchpad_code and scratchpad_summary - ensure they're strings when present
|
|
5464
|
+
if (correctedResponse.type === 'scratchpad') {
|
|
5465
|
+
const scratchpadCodeType = typeof correctedResponse.scratchpad_code;
|
|
5466
|
+
correctedResponse.scratchpad_code = scratchpadCodeType === 'string' ? correctedResponse.scratchpad_code : undefined;
|
|
5467
|
+
const scratchpadSummaryType = typeof correctedResponse.scratchpad_summary;
|
|
5468
|
+
correctedResponse.scratchpad_summary = scratchpadSummaryType === 'string' ? correctedResponse.scratchpad_summary : undefined;
|
|
5469
|
+
}
|
|
5186
5470
|
// For now we don't validate the cell_update object itself, as this is more complex and has
|
|
5187
5471
|
// not caused issues thus far.
|
|
5188
5472
|
return correctedResponse;
|
|
@@ -7135,25 +7419,37 @@ const getAppNameFromNotebookID = (notebookID) => {
|
|
|
7135
7419
|
|
|
7136
7420
|
/***/ }),
|
|
7137
7421
|
|
|
7138
|
-
/***/ "./lib/Extensions/
|
|
7139
|
-
|
|
7140
|
-
!*** ./lib/Extensions/
|
|
7141
|
-
|
|
7422
|
+
/***/ "./lib/Extensions/ChartWizard/ChartWizardPlugin.js":
|
|
7423
|
+
/*!*********************************************************!*\
|
|
7424
|
+
!*** ./lib/Extensions/ChartWizard/ChartWizardPlugin.js ***!
|
|
7425
|
+
\*********************************************************/
|
|
7142
7426
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
7143
7427
|
|
|
7144
7428
|
__webpack_require__.r(__webpack_exports__);
|
|
7145
7429
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7146
|
-
/* harmony export */ ContextManager: () => (/* binding */ ContextManager),
|
|
7147
|
-
/* harmony export */ ContextManagerPlugin: () => (/* binding */ ContextManagerPlugin),
|
|
7148
|
-
/* harmony export */ IContextManager: () => (/* binding */ IContextManager),
|
|
7149
7430
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
7150
7431
|
/* harmony export */ });
|
|
7151
|
-
/* harmony import */ var
|
|
7152
|
-
/* harmony import */ var
|
|
7153
|
-
/* harmony import */ var
|
|
7154
|
-
/* harmony import */ var
|
|
7155
|
-
/* harmony import */ var
|
|
7156
|
-
/* harmony import */ var
|
|
7432
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
7433
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
7434
|
+
/* harmony import */ var react_dom_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom/client */ "./node_modules/react-dom/client.js");
|
|
7435
|
+
/* harmony import */ var _jupyterlab_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @jupyterlab/application */ "webpack/sharing/consume/default/@jupyterlab/application");
|
|
7436
|
+
/* harmony import */ var _jupyterlab_application__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_application__WEBPACK_IMPORTED_MODULE_2__);
|
|
7437
|
+
/* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
|
|
7438
|
+
/* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_3__);
|
|
7439
|
+
/* harmony import */ var _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @jupyterlab/notebook */ "webpack/sharing/consume/default/@jupyterlab/notebook");
|
|
7440
|
+
/* harmony import */ var _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_4__);
|
|
7441
|
+
/* harmony import */ var _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @jupyterlab/cells */ "webpack/sharing/consume/default/@jupyterlab/cells");
|
|
7442
|
+
/* harmony import */ var _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_cells__WEBPACK_IMPORTED_MODULE_5__);
|
|
7443
|
+
/* harmony import */ var _jupyterlab_rendermime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @jupyterlab/rendermime */ "webpack/sharing/consume/default/@jupyterlab/rendermime");
|
|
7444
|
+
/* harmony import */ var _jupyterlab_rendermime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_rendermime__WEBPACK_IMPORTED_MODULE_6__);
|
|
7445
|
+
/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @lumino/widgets */ "webpack/sharing/consume/default/@lumino/widgets");
|
|
7446
|
+
/* harmony import */ var _lumino_widgets__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_lumino_widgets__WEBPACK_IMPORTED_MODULE_7__);
|
|
7447
|
+
/* harmony import */ var _ChartWizardWidget__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ChartWizardWidget */ "./lib/Extensions/ChartWizard/ChartWizardWidget.js");
|
|
7448
|
+
/* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../commands */ "./lib/commands.js");
|
|
7449
|
+
/* harmony import */ var _components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../components/TextAndIconButton */ "./lib/components/TextAndIconButton.js");
|
|
7450
|
+
/* harmony import */ var _icons_MagicWand__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../icons/MagicWand */ "./lib/icons/MagicWand.js");
|
|
7451
|
+
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
7452
|
+
/* harmony import */ var _style_ChartWizardPlugin_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../style/ChartWizardPlugin.css */ "./style/ChartWizardPlugin.css");
|
|
7157
7453
|
/*
|
|
7158
7454
|
* Copyright (c) Saga Inc.
|
|
7159
7455
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -7162,65 +7458,1038 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7162
7458
|
|
|
7163
7459
|
|
|
7164
7460
|
|
|
7165
|
-
|
|
7166
|
-
|
|
7167
|
-
|
|
7168
|
-
|
|
7169
|
-
|
|
7170
|
-
|
|
7171
|
-
|
|
7172
|
-
|
|
7173
|
-
|
|
7174
|
-
|
|
7461
|
+
|
|
7462
|
+
|
|
7463
|
+
|
|
7464
|
+
|
|
7465
|
+
|
|
7466
|
+
|
|
7467
|
+
|
|
7468
|
+
|
|
7469
|
+
|
|
7470
|
+
|
|
7471
|
+
const ChartWizardButton = ({ onButtonClick }) => {
|
|
7472
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
7473
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextAndIconButton__WEBPACK_IMPORTED_MODULE_9__["default"], { icon: _icons_MagicWand__WEBPACK_IMPORTED_MODULE_10__["default"], text: "Chart Wizard", title: "Chart Wizard", onClick: onButtonClick, variant: 'purple', width: 'fit-contents', iconPosition: 'left' })));
|
|
7474
|
+
};
|
|
7475
|
+
const ChartWizardPlugin = {
|
|
7476
|
+
id: 'mito-ai:chart-wizard',
|
|
7477
|
+
autoStart: true,
|
|
7478
|
+
requires: [_jupyterlab_rendermime__WEBPACK_IMPORTED_MODULE_6__.IRenderMimeRegistry, _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_3__.ICommandPalette, _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_4__.INotebookTracker],
|
|
7479
|
+
optional: [_jupyterlab_application__WEBPACK_IMPORTED_MODULE_2__.ILayoutRestorer],
|
|
7480
|
+
activate: (app, rendermime, palette, notebookTracker, restorer) => {
|
|
7481
|
+
// Create the Chart Wizard widget
|
|
7482
|
+
const widget = new _ChartWizardWidget__WEBPACK_IMPORTED_MODULE_11__.ChartWizardWidget();
|
|
7483
|
+
widget.id = 'mito-ai-chart-wizard';
|
|
7484
|
+
widget.title.label = 'Chart Wizard';
|
|
7485
|
+
widget.title.closable = true;
|
|
7486
|
+
// Track and restore the widget state
|
|
7487
|
+
const tracker = new _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_3__.WidgetTracker({
|
|
7488
|
+
namespace: widget.id
|
|
7489
|
+
});
|
|
7490
|
+
// Function to open/update the Chart Wizard panel
|
|
7491
|
+
const openChartWizard = (chartData) => {
|
|
7492
|
+
// Update widget with new data if provided
|
|
7493
|
+
if (chartData) {
|
|
7494
|
+
widget.updateChartData(chartData);
|
|
7175
7495
|
}
|
|
7176
|
-
//
|
|
7177
|
-
if (!
|
|
7178
|
-
|
|
7496
|
+
// Add the widget to the tracker if not already there
|
|
7497
|
+
if (!tracker.has(widget)) {
|
|
7498
|
+
void tracker.add(widget);
|
|
7179
7499
|
}
|
|
7180
|
-
//
|
|
7181
|
-
|
|
7182
|
-
|
|
7183
|
-
//
|
|
7184
|
-
|
|
7185
|
-
|
|
7186
|
-
|
|
7187
|
-
|
|
7188
|
-
|
|
7189
|
-
|
|
7190
|
-
if (status === 'restarting' || status === 'terminating' || status === 'unknown') {
|
|
7191
|
-
// Clear the variables for this specific notebook, but don't clear the files
|
|
7192
|
-
// as they have not changed.
|
|
7193
|
-
this.updateNotebookVariables(notebookPanel.id, []); // Clear variables for this specific notebook
|
|
7500
|
+
// Get the current notebook panel for split-right mode
|
|
7501
|
+
const notebookPanel = notebookTracker.currentWidget;
|
|
7502
|
+
const refId = notebookPanel === null || notebookPanel === void 0 ? void 0 : notebookPanel.id;
|
|
7503
|
+
// Add the widget to main area with split-right mode (like StreamlitPreviewPlugin)
|
|
7504
|
+
if (!widget.isAttached) {
|
|
7505
|
+
if (refId) {
|
|
7506
|
+
app.shell.add(widget, 'main', {
|
|
7507
|
+
mode: 'split-right',
|
|
7508
|
+
ref: refId
|
|
7509
|
+
});
|
|
7194
7510
|
}
|
|
7195
|
-
|
|
7196
|
-
|
|
7197
|
-
|
|
7198
|
-
// Watch for execute_input messages, which indicate is a request to execute code.
|
|
7199
|
-
// Previosuly, we watched for 'execute_result' messages, but these are only returned
|
|
7200
|
-
// from the kernel when a code cell prints a value to the output cell, which is not what we want.
|
|
7201
|
-
// TODO: Check if there is a race condition where we might end up fetching variables before the
|
|
7202
|
-
// code is executed. I don't think this is the case because the kernel runs in one thread I believe.
|
|
7203
|
-
// TODO: Eventually we should create a document manager listener so if the user uploads a new file
|
|
7204
|
-
// to jupyter, we can update the available files even if they have not executed a kernel message.
|
|
7205
|
-
if (msg.header.msg_type === 'execute_input') {
|
|
7206
|
-
void (0,_VariableInspector__WEBPACK_IMPORTED_MODULE_3__.fetchVariablesAndUpdateState)(notebookPanel, this.updateNotebookVariables.bind(this, notebookPanel.id));
|
|
7207
|
-
const updatedFiles = await (0,_FileInspector__WEBPACK_IMPORTED_MODULE_2__.getFiles)(app, notebookPanel);
|
|
7208
|
-
this.updateNotebookFiles(notebookPanel.id, updatedFiles);
|
|
7511
|
+
else {
|
|
7512
|
+
// Fallback to right sidebar if no notebook is open
|
|
7513
|
+
app.shell.add(widget, 'right');
|
|
7209
7514
|
}
|
|
7210
|
-
}
|
|
7515
|
+
}
|
|
7516
|
+
// Activate the widget
|
|
7517
|
+
app.shell.activateById(widget.id);
|
|
7211
7518
|
};
|
|
7212
|
-
|
|
7213
|
-
|
|
7214
|
-
|
|
7519
|
+
app.commands.addCommand(_commands__WEBPACK_IMPORTED_MODULE_12__.COMMAND_MITO_AI_OPEN_CHART_WIZARD, {
|
|
7520
|
+
label: 'Open Chart Wizard',
|
|
7521
|
+
execute: () => {
|
|
7522
|
+
void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_13__.logEvent)('clicked_chart_wizard_button', { source: 'command_palette' });
|
|
7523
|
+
openChartWizard();
|
|
7524
|
+
}
|
|
7525
|
+
});
|
|
7526
|
+
palette.addItem({
|
|
7527
|
+
command: _commands__WEBPACK_IMPORTED_MODULE_12__.COMMAND_MITO_AI_OPEN_CHART_WIZARD,
|
|
7528
|
+
category: 'Mito AI'
|
|
7529
|
+
});
|
|
7530
|
+
if (!tracker.has(widget)) {
|
|
7531
|
+
void tracker.add(widget);
|
|
7532
|
+
}
|
|
7533
|
+
if (restorer) {
|
|
7534
|
+
restorer.add(widget, 'mito-ai-chart-wizard');
|
|
7535
|
+
}
|
|
7536
|
+
const factory = rendermime.getFactory('image/png');
|
|
7537
|
+
if (factory) {
|
|
7538
|
+
rendermime.addFactory({
|
|
7539
|
+
safe: true,
|
|
7540
|
+
mimeTypes: ['image/png'],
|
|
7541
|
+
createRenderer: (options) => {
|
|
7542
|
+
const originalRenderer = factory.createRenderer(options);
|
|
7543
|
+
return new AugmentedImageRenderer(app, originalRenderer, notebookTracker, openChartWizard);
|
|
7544
|
+
}
|
|
7545
|
+
}, -1); // Giving this renderer a lower rank than the default renderer gives this default priority
|
|
7546
|
+
}
|
|
7547
|
+
console.log("mito-ai: ChartWizardPlugin activated");
|
|
7215
7548
|
}
|
|
7216
|
-
|
|
7217
|
-
|
|
7549
|
+
};
|
|
7550
|
+
/**
|
|
7551
|
+
* A widget that extends the default ImageRenderer for matplotlib charts.
|
|
7552
|
+
*/
|
|
7553
|
+
class AugmentedImageRenderer extends _lumino_widgets__WEBPACK_IMPORTED_MODULE_7__.Widget {
|
|
7554
|
+
constructor(_app, originalRenderer, notebookTracker, openChartWizard) {
|
|
7555
|
+
super();
|
|
7556
|
+
this.reactRoot = null;
|
|
7557
|
+
this.originalRenderer = originalRenderer;
|
|
7558
|
+
this.notebookTracker = notebookTracker;
|
|
7559
|
+
this.openChartWizard = openChartWizard;
|
|
7218
7560
|
}
|
|
7219
|
-
|
|
7220
|
-
|
|
7221
|
-
|
|
7222
|
-
|
|
7223
|
-
|
|
7561
|
+
/**
|
|
7562
|
+
* Render the original image and append the Chart Wizard button.
|
|
7563
|
+
*/
|
|
7564
|
+
async renderModel(model) {
|
|
7565
|
+
// Clean up any existing React root before creating a new one
|
|
7566
|
+
if (this.reactRoot) {
|
|
7567
|
+
this.reactRoot.unmount();
|
|
7568
|
+
this.reactRoot = null;
|
|
7569
|
+
}
|
|
7570
|
+
const chartWizardDiv = document.createElement('div');
|
|
7571
|
+
chartWizardDiv.className = 'chart-wizard-button-container';
|
|
7572
|
+
const originalNode = this.originalRenderer.node;
|
|
7573
|
+
// Store the root reference so we can unmount it later
|
|
7574
|
+
this.reactRoot = (0,react_dom_client__WEBPACK_IMPORTED_MODULE_1__.createRoot)(chartWizardDiv);
|
|
7575
|
+
this.reactRoot.render(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ChartWizardButton, { onButtonClick: () => this.handleButtonClick(model) }));
|
|
7576
|
+
this.node.style.position = 'relative';
|
|
7577
|
+
this.node.classList.add('chart-wizard-output-container');
|
|
7578
|
+
this.node.appendChild(chartWizardDiv);
|
|
7579
|
+
await this.originalRenderer.renderModel(model);
|
|
7580
|
+
this.node.appendChild(originalNode);
|
|
7581
|
+
}
|
|
7582
|
+
/**
|
|
7583
|
+
* Dispose of the widget and clean up the React root.
|
|
7584
|
+
*/
|
|
7585
|
+
dispose() {
|
|
7586
|
+
if (this.reactRoot) {
|
|
7587
|
+
this.reactRoot.unmount();
|
|
7588
|
+
this.reactRoot = null;
|
|
7589
|
+
}
|
|
7590
|
+
super.dispose();
|
|
7591
|
+
}
|
|
7592
|
+
/*
|
|
7593
|
+
Handle the Chart Wizard button click.
|
|
7594
|
+
Extracts chart data and source code, then opens the Chart Wizard panel.
|
|
7595
|
+
*/
|
|
7596
|
+
handleButtonClick(_model) {
|
|
7597
|
+
void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_13__.logEvent)('clicked_chart_wizard_button', { source: 'chart_output_button' });
|
|
7598
|
+
// Get the notebook panel
|
|
7599
|
+
const notebookPanel = this.notebookTracker.currentWidget;
|
|
7600
|
+
if (!notebookPanel) {
|
|
7601
|
+
console.error('No active notebook panel');
|
|
7602
|
+
return;
|
|
7603
|
+
}
|
|
7604
|
+
// Find the cell that contains this output by traversing up the DOM tree
|
|
7605
|
+
const cellElement = this.node.closest('.jp-Cell');
|
|
7606
|
+
if (!cellElement) {
|
|
7607
|
+
console.error('Could not find cell element');
|
|
7608
|
+
return;
|
|
7609
|
+
}
|
|
7610
|
+
// Find the cell widget by checking which cell's node contains our element
|
|
7611
|
+
const cellWidget = notebookPanel.content.widgets.find(cell => {
|
|
7612
|
+
if (cell instanceof _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_5__.CodeCell) {
|
|
7613
|
+
return cell.node.contains(cellElement) || cellElement.contains(cell.node);
|
|
7614
|
+
}
|
|
7615
|
+
return false;
|
|
7616
|
+
});
|
|
7617
|
+
if (!(cellWidget instanceof _jupyterlab_cells__WEBPACK_IMPORTED_MODULE_5__.CodeCell)) {
|
|
7618
|
+
console.warn('Could not find CodeCell widget for this output');
|
|
7619
|
+
return;
|
|
7620
|
+
}
|
|
7621
|
+
const sourceCode = cellWidget.model.sharedModel.source;
|
|
7622
|
+
const cellId = cellWidget.model.id;
|
|
7623
|
+
// Open the Chart Wizard with the extracted data
|
|
7624
|
+
this.openChartWizard({ sourceCode, cellId, notebookTracker: this.notebookTracker });
|
|
7625
|
+
}
|
|
7626
|
+
}
|
|
7627
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChartWizardPlugin);
|
|
7628
|
+
|
|
7629
|
+
|
|
7630
|
+
/***/ }),
|
|
7631
|
+
|
|
7632
|
+
/***/ "./lib/Extensions/ChartWizard/ChartWizardWidget.js":
|
|
7633
|
+
/*!*********************************************************!*\
|
|
7634
|
+
!*** ./lib/Extensions/ChartWizard/ChartWizardWidget.js ***!
|
|
7635
|
+
\*********************************************************/
|
|
7636
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
7637
|
+
|
|
7638
|
+
__webpack_require__.r(__webpack_exports__);
|
|
7639
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7640
|
+
/* harmony export */ ChartWizardWidget: () => (/* binding */ ChartWizardWidget)
|
|
7641
|
+
/* harmony export */ });
|
|
7642
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
7643
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
7644
|
+
/* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
|
|
7645
|
+
/* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__);
|
|
7646
|
+
/* harmony import */ var _utils_parser__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/parser */ "./lib/Extensions/ChartWizard/utils/parser.js");
|
|
7647
|
+
/* harmony import */ var _restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../restAPI/RestAPI */ "./lib/restAPI/RestAPI.js");
|
|
7648
|
+
/* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
|
|
7649
|
+
/* harmony import */ var _components_LoadingDots__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../components/LoadingDots */ "./lib/components/LoadingDots.js");
|
|
7650
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/BooleanInputRow.js");
|
|
7651
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/TupleInputRow.js");
|
|
7652
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/NumberInputRow.js");
|
|
7653
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/utils.js");
|
|
7654
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/ColorInputRow.js");
|
|
7655
|
+
/* harmony import */ var _inputs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./inputs */ "./lib/Extensions/ChartWizard/inputs/StringInputRow.js");
|
|
7656
|
+
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ "./lib/Extensions/ChartWizard/hooks/useChartConfig.js");
|
|
7657
|
+
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks */ "./lib/Extensions/ChartWizard/hooks/useDebouncedNotebookUpdate.js");
|
|
7658
|
+
/* harmony import */ var _style_ChartWizardWidget_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/ChartWizardWidget.css */ "./style/ChartWizardWidget.css");
|
|
7659
|
+
/*
|
|
7660
|
+
* Copyright (c) Saga Inc.
|
|
7661
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
7662
|
+
*/
|
|
7663
|
+
|
|
7664
|
+
|
|
7665
|
+
|
|
7666
|
+
|
|
7667
|
+
|
|
7668
|
+
|
|
7669
|
+
|
|
7670
|
+
|
|
7671
|
+
|
|
7672
|
+
/**
|
|
7673
|
+
* Formats a variable name into a human-readable label.
|
|
7674
|
+
* Converts snake_case to Title Case (e.g., "figure_size" -> "Figure Size").
|
|
7675
|
+
*/
|
|
7676
|
+
const formatVariableLabel = (variableName) => {
|
|
7677
|
+
return variableName
|
|
7678
|
+
.replace(/_/g, ' ')
|
|
7679
|
+
.toLowerCase()
|
|
7680
|
+
.replace(/\b\w/g, (l) => l.toUpperCase());
|
|
7681
|
+
};
|
|
7682
|
+
const ChartWizardContent = ({ chartData }) => {
|
|
7683
|
+
const [isConverting, setIsConverting] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
7684
|
+
const [currentSourceCode, setCurrentSourceCode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
|
|
7685
|
+
// Reset currentSourceCode when switching to a different chart
|
|
7686
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
7687
|
+
setCurrentSourceCode(null);
|
|
7688
|
+
}, [chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode]);
|
|
7689
|
+
// Use custom hook for chart config management
|
|
7690
|
+
const { configVariables, setConfigVariables, hasConfig } = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useChartConfig)({
|
|
7691
|
+
sourceCode: chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode,
|
|
7692
|
+
currentSourceCode,
|
|
7693
|
+
});
|
|
7694
|
+
// Use custom hook for debounced notebook updates
|
|
7695
|
+
const { updateNotebookCell, scheduleUpdate, clearPendingUpdate } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useDebouncedNotebookUpdate)({
|
|
7696
|
+
chartData,
|
|
7697
|
+
debounceDelay: 500,
|
|
7698
|
+
});
|
|
7699
|
+
/**
|
|
7700
|
+
* Handles variable value changes with debounced notebook updates.
|
|
7701
|
+
*/
|
|
7702
|
+
const handleVariableChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((variableName, newValue) => {
|
|
7703
|
+
const codeToUse = currentSourceCode || (chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode);
|
|
7704
|
+
if (!codeToUse)
|
|
7705
|
+
return;
|
|
7706
|
+
// Update config variables state
|
|
7707
|
+
const updated = configVariables.map((v) => v.name === variableName ? { ...v, value: newValue } : v);
|
|
7708
|
+
setConfigVariables(updated);
|
|
7709
|
+
// Update the source code
|
|
7710
|
+
const updatedCode = (0,_utils_parser__WEBPACK_IMPORTED_MODULE_5__.updateChartConfig)(codeToUse, updated);
|
|
7711
|
+
setCurrentSourceCode(updatedCode);
|
|
7712
|
+
// Schedule debounced notebook update
|
|
7713
|
+
scheduleUpdate(updatedCode);
|
|
7714
|
+
}, [chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode, currentSourceCode, configVariables, setConfigVariables, scheduleUpdate]);
|
|
7715
|
+
/**
|
|
7716
|
+
* Handles chart conversion from matplotlib to Chart Wizard format.
|
|
7717
|
+
*/
|
|
7718
|
+
const handleConvertChart = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {
|
|
7719
|
+
void (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_6__.logEvent)('clicked_convert_chart_button');
|
|
7720
|
+
if (!(chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode)) {
|
|
7721
|
+
console.error('No source code available');
|
|
7722
|
+
return;
|
|
7723
|
+
}
|
|
7724
|
+
// Clear any pending debounced updates to prevent race conditions
|
|
7725
|
+
clearPendingUpdate();
|
|
7726
|
+
setIsConverting(true);
|
|
7727
|
+
try {
|
|
7728
|
+
const response = await (0,_restAPI_RestAPI__WEBPACK_IMPORTED_MODULE_6__.convertChartCode)(chartData.sourceCode);
|
|
7729
|
+
if (response.converted_code) {
|
|
7730
|
+
// Extract code from markdown code blocks if present
|
|
7731
|
+
const extractedCode = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_7__.removeMarkdownCodeFormatting)(response.converted_code);
|
|
7732
|
+
// Validate that extracted code is not empty to prevent deleting user's code
|
|
7733
|
+
if (!extractedCode || extractedCode.trim().length === 0) {
|
|
7734
|
+
console.error('Error: Extracted code is empty. Cannot update notebook cell.');
|
|
7735
|
+
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit('Chart conversion failed: The converted code is empty. Please try again or check your chart code.', 'error', {
|
|
7736
|
+
autoClose: 5000
|
|
7737
|
+
});
|
|
7738
|
+
return;
|
|
7739
|
+
}
|
|
7740
|
+
// Update current source code so the useEffect will parse it
|
|
7741
|
+
setCurrentSourceCode(extractedCode);
|
|
7742
|
+
// Update the cell with the converted code and re-execute
|
|
7743
|
+
updateNotebookCell(extractedCode);
|
|
7744
|
+
}
|
|
7745
|
+
}
|
|
7746
|
+
catch (error) {
|
|
7747
|
+
console.error('Error converting chart code:', error);
|
|
7748
|
+
const errorMessage = error instanceof Error ? error.message : 'An unknown error occurred';
|
|
7749
|
+
_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.Notification.emit(`Chart conversion failed: ${errorMessage}. Please try again.`, 'error', {
|
|
7750
|
+
autoClose: 5000
|
|
7751
|
+
});
|
|
7752
|
+
}
|
|
7753
|
+
finally {
|
|
7754
|
+
setIsConverting(false);
|
|
7755
|
+
}
|
|
7756
|
+
}, [chartData === null || chartData === void 0 ? void 0 : chartData.sourceCode, clearPendingUpdate, updateNotebookCell]);
|
|
7757
|
+
/**
|
|
7758
|
+
* Renders the appropriate input field component based on variable type.
|
|
7759
|
+
*/
|
|
7760
|
+
const renderInputField = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((variable) => {
|
|
7761
|
+
const label = formatVariableLabel(variable.name);
|
|
7762
|
+
const commonProps = {
|
|
7763
|
+
variable,
|
|
7764
|
+
label,
|
|
7765
|
+
onVariableChange: handleVariableChange,
|
|
7766
|
+
};
|
|
7767
|
+
switch (variable.type) {
|
|
7768
|
+
case 'boolean':
|
|
7769
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_8__.BooleanInputRow, { key: variable.name, ...commonProps });
|
|
7770
|
+
case 'tuple':
|
|
7771
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_9__.TupleInputRow, { key: variable.name, ...commonProps });
|
|
7772
|
+
case 'number':
|
|
7773
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_10__.NumberInputRow, { key: variable.name, ...commonProps });
|
|
7774
|
+
case 'string': {
|
|
7775
|
+
// String input - check if it's a hex color
|
|
7776
|
+
const stringValue = variable.value;
|
|
7777
|
+
const isColor = (0,_inputs__WEBPACK_IMPORTED_MODULE_11__.isHexColor)(stringValue);
|
|
7778
|
+
if (isColor) {
|
|
7779
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_12__.ColorInputRow, { key: variable.name, ...commonProps });
|
|
7780
|
+
}
|
|
7781
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_13__.StringInputRow, { key: variable.name, ...commonProps });
|
|
7782
|
+
}
|
|
7783
|
+
default:
|
|
7784
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inputs__WEBPACK_IMPORTED_MODULE_13__.StringInputRow, { key: variable.name, ...commonProps });
|
|
7785
|
+
}
|
|
7786
|
+
}, [handleVariableChange]);
|
|
7787
|
+
// Memoize input fields to prevent unnecessary re-renders
|
|
7788
|
+
const inputFields = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => configVariables.map(renderInputField), [configVariables, renderInputField]);
|
|
7789
|
+
// Early return for empty state
|
|
7790
|
+
if (!chartData) {
|
|
7791
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-empty-state" },
|
|
7792
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", null, "Chart Wizard"),
|
|
7793
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Click the Chart Wizard button on a matplotlib chart to get started.")));
|
|
7794
|
+
}
|
|
7795
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-widget" },
|
|
7796
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", null, "Chart Wizard"),
|
|
7797
|
+
hasConfig ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-config-container" },
|
|
7798
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", { className: "chart-wizard-config-description" }, "Edit values below to customize your chart. Changes will be reflected in the notebook."),
|
|
7799
|
+
inputFields)) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-no-config" },
|
|
7800
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null,
|
|
7801
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("strong", null, "This chart isn't ready for Chart Wizard yet."),
|
|
7802
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null),
|
|
7803
|
+
"Run the converter below or let Mito AI handle it automatically."),
|
|
7804
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-purple", disabled: isConverting, onClick: handleConvertChart, type: "button" }, isConverting ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
7805
|
+
"Converting",
|
|
7806
|
+
' ',
|
|
7807
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "chart-wizard-loading-dots" },
|
|
7808
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_LoadingDots__WEBPACK_IMPORTED_MODULE_14__["default"], null)))) : ('Convert'))))));
|
|
7809
|
+
};
|
|
7810
|
+
class ChartWizardWidget extends _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_1__.ReactWidget {
|
|
7811
|
+
constructor() {
|
|
7812
|
+
super();
|
|
7813
|
+
this.chartData = null;
|
|
7814
|
+
this.addClass('chart-wizard-widget');
|
|
7815
|
+
}
|
|
7816
|
+
updateChartData(chartData) {
|
|
7817
|
+
this.chartData = chartData;
|
|
7818
|
+
this.update();
|
|
7819
|
+
}
|
|
7820
|
+
render() {
|
|
7821
|
+
return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ChartWizardContent, { chartData: this.chartData });
|
|
7822
|
+
}
|
|
7823
|
+
}
|
|
7824
|
+
|
|
7825
|
+
|
|
7826
|
+
/***/ }),
|
|
7827
|
+
|
|
7828
|
+
/***/ "./lib/Extensions/ChartWizard/hooks/useChartConfig.js":
|
|
7829
|
+
/*!************************************************************!*\
|
|
7830
|
+
!*** ./lib/Extensions/ChartWizard/hooks/useChartConfig.js ***!
|
|
7831
|
+
\************************************************************/
|
|
7832
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
7833
|
+
|
|
7834
|
+
__webpack_require__.r(__webpack_exports__);
|
|
7835
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7836
|
+
/* harmony export */ useChartConfig: () => (/* binding */ useChartConfig)
|
|
7837
|
+
/* harmony export */ });
|
|
7838
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
7839
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
7840
|
+
/* harmony import */ var _utils_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/parser */ "./lib/Extensions/ChartWizard/utils/parser.js");
|
|
7841
|
+
/*
|
|
7842
|
+
* Copyright (c) Saga Inc.
|
|
7843
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
7844
|
+
*/
|
|
7845
|
+
|
|
7846
|
+
|
|
7847
|
+
/**
|
|
7848
|
+
* Hook to manage chart configuration parsing and state.
|
|
7849
|
+
*
|
|
7850
|
+
* Parses chart configuration from source code and provides:
|
|
7851
|
+
* - configVariables: Array of parsed configuration variables
|
|
7852
|
+
* - hasConfig: Boolean indicating if configuration exists
|
|
7853
|
+
*/
|
|
7854
|
+
const useChartConfig = ({ sourceCode, currentSourceCode }) => {
|
|
7855
|
+
const [configVariables, setConfigVariables] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
|
|
7856
|
+
// Parse config when chart data or current source code changes
|
|
7857
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
7858
|
+
const codeToParse = currentSourceCode || sourceCode;
|
|
7859
|
+
if (!codeToParse) {
|
|
7860
|
+
setConfigVariables([]);
|
|
7861
|
+
return;
|
|
7862
|
+
}
|
|
7863
|
+
const parsed = (0,_utils_parser__WEBPACK_IMPORTED_MODULE_1__.parseChartConfig)(codeToParse);
|
|
7864
|
+
if (parsed) {
|
|
7865
|
+
setConfigVariables(parsed.variables);
|
|
7866
|
+
}
|
|
7867
|
+
else {
|
|
7868
|
+
setConfigVariables([]);
|
|
7869
|
+
}
|
|
7870
|
+
}, [sourceCode, currentSourceCode]);
|
|
7871
|
+
const hasConfig = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => configVariables.length > 0, [configVariables.length]);
|
|
7872
|
+
return {
|
|
7873
|
+
configVariables,
|
|
7874
|
+
setConfigVariables,
|
|
7875
|
+
hasConfig,
|
|
7876
|
+
};
|
|
7877
|
+
};
|
|
7878
|
+
|
|
7879
|
+
|
|
7880
|
+
/***/ }),
|
|
7881
|
+
|
|
7882
|
+
/***/ "./lib/Extensions/ChartWizard/hooks/useDebouncedNotebookUpdate.js":
|
|
7883
|
+
/*!************************************************************************!*\
|
|
7884
|
+
!*** ./lib/Extensions/ChartWizard/hooks/useDebouncedNotebookUpdate.js ***!
|
|
7885
|
+
\************************************************************************/
|
|
7886
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
7887
|
+
|
|
7888
|
+
__webpack_require__.r(__webpack_exports__);
|
|
7889
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7890
|
+
/* harmony export */ useDebouncedNotebookUpdate: () => (/* binding */ useDebouncedNotebookUpdate)
|
|
7891
|
+
/* harmony export */ });
|
|
7892
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
7893
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
7894
|
+
/* harmony import */ var _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jupyterlab/notebook */ "webpack/sharing/consume/default/@jupyterlab/notebook");
|
|
7895
|
+
/* harmony import */ var _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_1__);
|
|
7896
|
+
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/notebook */ "./lib/utils/notebook.js");
|
|
7897
|
+
/*
|
|
7898
|
+
* Copyright (c) Saga Inc.
|
|
7899
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
7900
|
+
*/
|
|
7901
|
+
|
|
7902
|
+
|
|
7903
|
+
|
|
7904
|
+
/**
|
|
7905
|
+
* Hook to manage debounced notebook cell updates.
|
|
7906
|
+
*
|
|
7907
|
+
* Provides:
|
|
7908
|
+
* - updateNotebookCell: Function to update and re-execute notebook cell with debouncing
|
|
7909
|
+
* - clearPendingUpdate: Function to clear any pending debounced updates
|
|
7910
|
+
*/
|
|
7911
|
+
const useDebouncedNotebookUpdate = ({ chartData, debounceDelay = 500, }) => {
|
|
7912
|
+
const executeTimeoutRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
|
|
7913
|
+
// Cleanup timeout on unmount
|
|
7914
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
7915
|
+
return () => {
|
|
7916
|
+
if (executeTimeoutRef.current) {
|
|
7917
|
+
clearTimeout(executeTimeoutRef.current);
|
|
7918
|
+
}
|
|
7919
|
+
};
|
|
7920
|
+
}, []);
|
|
7921
|
+
const updateNotebookCell = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((updatedCode) => {
|
|
7922
|
+
var _a;
|
|
7923
|
+
if (!chartData)
|
|
7924
|
+
return;
|
|
7925
|
+
const notebookPanel = chartData.notebookTracker.currentWidget;
|
|
7926
|
+
if (!notebookPanel)
|
|
7927
|
+
return;
|
|
7928
|
+
// Update the cell code
|
|
7929
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_2__.writeCodeToCellByIDInNotebookPanel)(notebookPanel, updatedCode, chartData.cellId);
|
|
7930
|
+
// Re-execute the cell to show updated chart
|
|
7931
|
+
const notebook = notebookPanel.content;
|
|
7932
|
+
const sessionContext = (_a = notebookPanel.context) === null || _a === void 0 ? void 0 : _a.sessionContext;
|
|
7933
|
+
void _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_1__.NotebookActions.run(notebook, sessionContext);
|
|
7934
|
+
}, [chartData]);
|
|
7935
|
+
const scheduleUpdate = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((updatedCode) => {
|
|
7936
|
+
// Clear previous timeout
|
|
7937
|
+
if (executeTimeoutRef.current) {
|
|
7938
|
+
clearTimeout(executeTimeoutRef.current);
|
|
7939
|
+
}
|
|
7940
|
+
// Debounce the cell update and execution
|
|
7941
|
+
executeTimeoutRef.current = setTimeout(() => {
|
|
7942
|
+
updateNotebookCell(updatedCode);
|
|
7943
|
+
}, debounceDelay);
|
|
7944
|
+
}, [updateNotebookCell, debounceDelay]);
|
|
7945
|
+
const clearPendingUpdate = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
7946
|
+
if (executeTimeoutRef.current) {
|
|
7947
|
+
clearTimeout(executeTimeoutRef.current);
|
|
7948
|
+
executeTimeoutRef.current = null;
|
|
7949
|
+
}
|
|
7950
|
+
}, []);
|
|
7951
|
+
return {
|
|
7952
|
+
updateNotebookCell,
|
|
7953
|
+
scheduleUpdate,
|
|
7954
|
+
clearPendingUpdate,
|
|
7955
|
+
};
|
|
7956
|
+
};
|
|
7957
|
+
|
|
7958
|
+
|
|
7959
|
+
/***/ }),
|
|
7960
|
+
|
|
7961
|
+
/***/ "./lib/Extensions/ChartWizard/inputs/BooleanInputRow.js":
|
|
7962
|
+
/*!**************************************************************!*\
|
|
7963
|
+
!*** ./lib/Extensions/ChartWizard/inputs/BooleanInputRow.js ***!
|
|
7964
|
+
\**************************************************************/
|
|
7965
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
7966
|
+
|
|
7967
|
+
__webpack_require__.r(__webpack_exports__);
|
|
7968
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7969
|
+
/* harmony export */ BooleanInputRow: () => (/* binding */ BooleanInputRow)
|
|
7970
|
+
/* harmony export */ });
|
|
7971
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
7972
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
7973
|
+
/*
|
|
7974
|
+
* Copyright (c) Saga Inc.
|
|
7975
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
7976
|
+
*/
|
|
7977
|
+
|
|
7978
|
+
const BooleanInputRow = ({ variable, label, onVariableChange }) => {
|
|
7979
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: variable.name, className: "chart-wizard-input-row chart-wizard-boolean-row" },
|
|
7980
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { className: "chart-wizard-input-label chart-wizard-boolean-label" }, label),
|
|
7981
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { className: "chart-wizard-toggle-container" },
|
|
7982
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "checkbox", checked: variable.value, onChange: (e) => onVariableChange(variable.name, e.target.checked), className: "chart-wizard-toggle-input" }),
|
|
7983
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "chart-wizard-toggle-slider" }))));
|
|
7984
|
+
};
|
|
7985
|
+
|
|
7986
|
+
|
|
7987
|
+
/***/ }),
|
|
7988
|
+
|
|
7989
|
+
/***/ "./lib/Extensions/ChartWizard/inputs/ColorInputRow.js":
|
|
7990
|
+
/*!************************************************************!*\
|
|
7991
|
+
!*** ./lib/Extensions/ChartWizard/inputs/ColorInputRow.js ***!
|
|
7992
|
+
\************************************************************/
|
|
7993
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
7994
|
+
|
|
7995
|
+
__webpack_require__.r(__webpack_exports__);
|
|
7996
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
7997
|
+
/* harmony export */ ColorInputRow: () => (/* binding */ ColorInputRow)
|
|
7998
|
+
/* harmony export */ });
|
|
7999
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
8000
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
8001
|
+
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./lib/Extensions/ChartWizard/inputs/utils.js");
|
|
8002
|
+
/*
|
|
8003
|
+
* Copyright (c) Saga Inc.
|
|
8004
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8005
|
+
*/
|
|
8006
|
+
|
|
8007
|
+
|
|
8008
|
+
const ColorInputRow = ({ variable, label, onVariableChange }) => {
|
|
8009
|
+
const stringValue = variable.value;
|
|
8010
|
+
const normalizedColor = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.normalizeHexColor)(stringValue);
|
|
8011
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: variable.name, className: "chart-wizard-input-row" },
|
|
8012
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { className: "chart-wizard-input-label" }, label),
|
|
8013
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-color-container" },
|
|
8014
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "color", value: normalizedColor, onChange: (e) => {
|
|
8015
|
+
// Color picker returns #RRGGBB, store with #
|
|
8016
|
+
onVariableChange(variable.name, e.target.value);
|
|
8017
|
+
}, className: "chart-wizard-color-picker" }),
|
|
8018
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "text", value: normalizedColor, onChange: (e) => {
|
|
8019
|
+
let newValue = e.target.value.trim();
|
|
8020
|
+
// Normalize: ensure it has # for valid hex colors
|
|
8021
|
+
if (newValue && !newValue.startsWith('#')) {
|
|
8022
|
+
if ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.isHexColor)(newValue)) {
|
|
8023
|
+
newValue = `#${newValue}`;
|
|
8024
|
+
}
|
|
8025
|
+
}
|
|
8026
|
+
// Only update if it's a valid hex color
|
|
8027
|
+
if ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.isHexColor)(newValue) || newValue === '') {
|
|
8028
|
+
onVariableChange(variable.name, newValue);
|
|
8029
|
+
}
|
|
8030
|
+
}, placeholder: "#RRGGBB", className: "chart-wizard-color-input" }))));
|
|
8031
|
+
};
|
|
8032
|
+
|
|
8033
|
+
|
|
8034
|
+
/***/ }),
|
|
8035
|
+
|
|
8036
|
+
/***/ "./lib/Extensions/ChartWizard/inputs/NumberInputRow.js":
|
|
8037
|
+
/*!*************************************************************!*\
|
|
8038
|
+
!*** ./lib/Extensions/ChartWizard/inputs/NumberInputRow.js ***!
|
|
8039
|
+
\*************************************************************/
|
|
8040
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8041
|
+
|
|
8042
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8043
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8044
|
+
/* harmony export */ NumberInputRow: () => (/* binding */ NumberInputRow)
|
|
8045
|
+
/* harmony export */ });
|
|
8046
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
8047
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
8048
|
+
/*
|
|
8049
|
+
* Copyright (c) Saga Inc.
|
|
8050
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8051
|
+
*/
|
|
8052
|
+
|
|
8053
|
+
const NumberInputRow = ({ variable, label, onVariableChange }) => {
|
|
8054
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: variable.name, className: "chart-wizard-input-row" },
|
|
8055
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { className: "chart-wizard-input-label" }, label),
|
|
8056
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "number", value: variable.value, onChange: (e) => onVariableChange(variable.name, parseFloat(e.target.value) || 0), className: "chart-wizard-number-input" })));
|
|
8057
|
+
};
|
|
8058
|
+
|
|
8059
|
+
|
|
8060
|
+
/***/ }),
|
|
8061
|
+
|
|
8062
|
+
/***/ "./lib/Extensions/ChartWizard/inputs/StringInputRow.js":
|
|
8063
|
+
/*!*************************************************************!*\
|
|
8064
|
+
!*** ./lib/Extensions/ChartWizard/inputs/StringInputRow.js ***!
|
|
8065
|
+
\*************************************************************/
|
|
8066
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8067
|
+
|
|
8068
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8069
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8070
|
+
/* harmony export */ StringInputRow: () => (/* binding */ StringInputRow)
|
|
8071
|
+
/* harmony export */ });
|
|
8072
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
8073
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
8074
|
+
/*
|
|
8075
|
+
* Copyright (c) Saga Inc.
|
|
8076
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8077
|
+
*/
|
|
8078
|
+
|
|
8079
|
+
const StringInputRow = ({ variable, label, onVariableChange }) => {
|
|
8080
|
+
const stringValue = variable.value;
|
|
8081
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: variable.name, className: "chart-wizard-input-row" },
|
|
8082
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { className: "chart-wizard-input-label" }, label),
|
|
8083
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "text", value: stringValue, onChange: (e) => onVariableChange(variable.name, e.target.value), className: "chart-wizard-text-input" })));
|
|
8084
|
+
};
|
|
8085
|
+
|
|
8086
|
+
|
|
8087
|
+
/***/ }),
|
|
8088
|
+
|
|
8089
|
+
/***/ "./lib/Extensions/ChartWizard/inputs/TupleInputRow.js":
|
|
8090
|
+
/*!************************************************************!*\
|
|
8091
|
+
!*** ./lib/Extensions/ChartWizard/inputs/TupleInputRow.js ***!
|
|
8092
|
+
\************************************************************/
|
|
8093
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8094
|
+
|
|
8095
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8096
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8097
|
+
/* harmony export */ TupleInputRow: () => (/* binding */ TupleInputRow)
|
|
8098
|
+
/* harmony export */ });
|
|
8099
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
8100
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
8101
|
+
/*
|
|
8102
|
+
* Copyright (c) Saga Inc.
|
|
8103
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8104
|
+
*/
|
|
8105
|
+
|
|
8106
|
+
const TupleInputRow = ({ variable, label, onVariableChange }) => {
|
|
8107
|
+
const tupleValue = variable.value;
|
|
8108
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { key: variable.name, className: "chart-wizard-input-row" },
|
|
8109
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", { className: "chart-wizard-input-label" }, label),
|
|
8110
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chart-wizard-tuple-container" },
|
|
8111
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, "("),
|
|
8112
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "number", value: tupleValue[0], onChange: (e) => {
|
|
8113
|
+
const newValue = [parseFloat(e.target.value) || 0, tupleValue[1]];
|
|
8114
|
+
onVariableChange(variable.name, newValue);
|
|
8115
|
+
}, className: "chart-wizard-tuple-input" }),
|
|
8116
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, ","),
|
|
8117
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", { type: "number", value: tupleValue[1], onChange: (e) => {
|
|
8118
|
+
const newValue = [tupleValue[0], parseFloat(e.target.value) || 0];
|
|
8119
|
+
onVariableChange(variable.name, newValue);
|
|
8120
|
+
}, className: "chart-wizard-tuple-input" }),
|
|
8121
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, ")"))));
|
|
8122
|
+
};
|
|
8123
|
+
|
|
8124
|
+
|
|
8125
|
+
/***/ }),
|
|
8126
|
+
|
|
8127
|
+
/***/ "./lib/Extensions/ChartWizard/inputs/utils.js":
|
|
8128
|
+
/*!****************************************************!*\
|
|
8129
|
+
!*** ./lib/Extensions/ChartWizard/inputs/utils.js ***!
|
|
8130
|
+
\****************************************************/
|
|
8131
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8132
|
+
|
|
8133
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8134
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8135
|
+
/* harmony export */ isHexColor: () => (/* binding */ isHexColor),
|
|
8136
|
+
/* harmony export */ normalizeHexColor: () => (/* binding */ normalizeHexColor)
|
|
8137
|
+
/* harmony export */ });
|
|
8138
|
+
/*
|
|
8139
|
+
* Copyright (c) Saga Inc.
|
|
8140
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8141
|
+
*/
|
|
8142
|
+
/**
|
|
8143
|
+
* Checks if a string is a valid hex color code
|
|
8144
|
+
*/
|
|
8145
|
+
const isHexColor = (value) => {
|
|
8146
|
+
const hexPattern = /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/;
|
|
8147
|
+
return hexPattern.test(value);
|
|
8148
|
+
};
|
|
8149
|
+
/**
|
|
8150
|
+
* Normalizes hex color to ensure it has a # prefix and is in 6-digit format
|
|
8151
|
+
* Expands 3-digit hex codes (e.g., #FFF) to 6-digit format (e.g., #FFFFFF)
|
|
8152
|
+
* HTML color inputs require exactly 7 characters in #RRGGBB format
|
|
8153
|
+
*/
|
|
8154
|
+
const normalizeHexColor = (value) => {
|
|
8155
|
+
// Remove # if present to work with the hex digits only
|
|
8156
|
+
const hexDigits = value.startsWith('#') ? value.slice(1) : value;
|
|
8157
|
+
// If it's a 3-digit hex code, expand it to 6-digit format
|
|
8158
|
+
if (hexDigits.length === 3 && /^[0-9A-Fa-f]{3}$/.test(hexDigits)) {
|
|
8159
|
+
// Expand each digit: #FFF -> #FFFFFF, #abc -> #aabbcc
|
|
8160
|
+
const expanded = hexDigits
|
|
8161
|
+
.split('')
|
|
8162
|
+
.map(char => char + char)
|
|
8163
|
+
.join('');
|
|
8164
|
+
return `#${expanded}`;
|
|
8165
|
+
}
|
|
8166
|
+
// For 6-digit codes, just ensure it has the # prefix
|
|
8167
|
+
if (value.startsWith('#')) {
|
|
8168
|
+
return value;
|
|
8169
|
+
}
|
|
8170
|
+
return `#${value}`;
|
|
8171
|
+
};
|
|
8172
|
+
|
|
8173
|
+
|
|
8174
|
+
/***/ }),
|
|
8175
|
+
|
|
8176
|
+
/***/ "./lib/Extensions/ChartWizard/utils/parser.js":
|
|
8177
|
+
/*!****************************************************!*\
|
|
8178
|
+
!*** ./lib/Extensions/ChartWizard/utils/parser.js ***!
|
|
8179
|
+
\****************************************************/
|
|
8180
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8181
|
+
|
|
8182
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8183
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8184
|
+
/* harmony export */ parseChartConfig: () => (/* binding */ parseChartConfig),
|
|
8185
|
+
/* harmony export */ updateChartConfig: () => (/* binding */ updateChartConfig)
|
|
8186
|
+
/* harmony export */ });
|
|
8187
|
+
/*
|
|
8188
|
+
* Copyright (c) Saga Inc.
|
|
8189
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8190
|
+
*/
|
|
8191
|
+
/**
|
|
8192
|
+
* Parses the chart configuration section from Python code.
|
|
8193
|
+
* Looks for variables between "# === CHART CONFIG ===" and "# === END CONFIG ===" markers.
|
|
8194
|
+
*/
|
|
8195
|
+
function parseChartConfig(sourceCode) {
|
|
8196
|
+
const configStartMarker = '# === CHART CONFIG ===';
|
|
8197
|
+
const configEndMarker = '# === END CONFIG ===';
|
|
8198
|
+
const startIndex = sourceCode.indexOf(configStartMarker);
|
|
8199
|
+
const endIndex = sourceCode.indexOf(configEndMarker);
|
|
8200
|
+
if (startIndex === -1 || endIndex === -1 || startIndex >= endIndex) {
|
|
8201
|
+
return null;
|
|
8202
|
+
}
|
|
8203
|
+
const configSection = sourceCode.substring(startIndex + configStartMarker.length, endIndex).trim();
|
|
8204
|
+
const lines = configSection.split('\n').map(line => line.trim()).filter(line => line.length > 0);
|
|
8205
|
+
const variables = [];
|
|
8206
|
+
for (const line of lines) {
|
|
8207
|
+
// Skip comment lines
|
|
8208
|
+
if (line.startsWith('#')) {
|
|
8209
|
+
continue;
|
|
8210
|
+
}
|
|
8211
|
+
// Parse single variable assignments (one variable per line)
|
|
8212
|
+
const match = line.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*(.+)$/);
|
|
8213
|
+
if (match && match[1] && match[2]) {
|
|
8214
|
+
const varName = match[1];
|
|
8215
|
+
const valueStr = match[2];
|
|
8216
|
+
const parsed = parseValue(valueStr.trim());
|
|
8217
|
+
if (parsed) {
|
|
8218
|
+
variables.push({
|
|
8219
|
+
name: varName,
|
|
8220
|
+
value: parsed.value,
|
|
8221
|
+
type: parsed.type
|
|
8222
|
+
});
|
|
8223
|
+
}
|
|
8224
|
+
}
|
|
8225
|
+
}
|
|
8226
|
+
return {
|
|
8227
|
+
variables,
|
|
8228
|
+
configStartIndex: startIndex,
|
|
8229
|
+
configEndIndex: endIndex + configEndMarker.length
|
|
8230
|
+
};
|
|
8231
|
+
}
|
|
8232
|
+
/**
|
|
8233
|
+
* Parses a Python value string into its appropriate type.
|
|
8234
|
+
*/
|
|
8235
|
+
function parseValue(valueStr) {
|
|
8236
|
+
// Remove surrounding whitespace
|
|
8237
|
+
valueStr = valueStr.trim();
|
|
8238
|
+
// Boolean values
|
|
8239
|
+
if (valueStr === 'True') {
|
|
8240
|
+
return { value: true, type: 'boolean' };
|
|
8241
|
+
}
|
|
8242
|
+
if (valueStr === 'False') {
|
|
8243
|
+
return { value: false, type: 'boolean' };
|
|
8244
|
+
}
|
|
8245
|
+
// Tuple (e.g., (12, 6) or (-10, 6))
|
|
8246
|
+
const tupleMatch = valueStr.match(/^\((-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)\)$/);
|
|
8247
|
+
if (tupleMatch) {
|
|
8248
|
+
return {
|
|
8249
|
+
value: [parseFloat(tupleMatch[1] || '0'), parseFloat(tupleMatch[2] || '0')],
|
|
8250
|
+
type: 'tuple'
|
|
8251
|
+
};
|
|
8252
|
+
}
|
|
8253
|
+
// Number
|
|
8254
|
+
if (/^-?\d+(?:\.\d+)?$/.test(valueStr)) {
|
|
8255
|
+
return { value: parseFloat(valueStr), type: 'number' };
|
|
8256
|
+
}
|
|
8257
|
+
// String (remove quotes and unescape)
|
|
8258
|
+
const stringMatch = valueStr.match(/^(['"])(.*)\1$/);
|
|
8259
|
+
if (stringMatch && stringMatch[1]) {
|
|
8260
|
+
const quoteChar = stringMatch[1];
|
|
8261
|
+
const stringContent = stringMatch[2] || '';
|
|
8262
|
+
// Unescape the string content (convert \' to ', \\ to \, etc.)
|
|
8263
|
+
const unescaped = unescapePythonString(stringContent, quoteChar);
|
|
8264
|
+
return { value: unescaped, type: 'string' };
|
|
8265
|
+
}
|
|
8266
|
+
// Check if it's a Python expression (contains function calls, operators, etc.)
|
|
8267
|
+
// This includes things like pd.to_datetime('2012-04-09'), list comprehensions, etc.
|
|
8268
|
+
if (isPythonExpression(valueStr)) {
|
|
8269
|
+
return { value: valueStr, type: 'expression' };
|
|
8270
|
+
}
|
|
8271
|
+
// If it doesn't match any pattern, treat as string literal
|
|
8272
|
+
return { value: valueStr, type: 'string' };
|
|
8273
|
+
}
|
|
8274
|
+
/**
|
|
8275
|
+
* Unescapes a Python string content, converting escape sequences to their actual characters.
|
|
8276
|
+
*/
|
|
8277
|
+
function unescapePythonString(content, quoteChar) {
|
|
8278
|
+
let result = '';
|
|
8279
|
+
let i = 0;
|
|
8280
|
+
while (i < content.length) {
|
|
8281
|
+
if (content[i] === '\\' && i + 1 < content.length) {
|
|
8282
|
+
const next = content[i + 1];
|
|
8283
|
+
if (next !== undefined) {
|
|
8284
|
+
switch (next) {
|
|
8285
|
+
case '\\':
|
|
8286
|
+
result += '\\';
|
|
8287
|
+
i += 2;
|
|
8288
|
+
break;
|
|
8289
|
+
case quoteChar:
|
|
8290
|
+
result += quoteChar;
|
|
8291
|
+
i += 2;
|
|
8292
|
+
break;
|
|
8293
|
+
case 'n':
|
|
8294
|
+
result += '\n';
|
|
8295
|
+
i += 2;
|
|
8296
|
+
break;
|
|
8297
|
+
case 't':
|
|
8298
|
+
result += '\t';
|
|
8299
|
+
i += 2;
|
|
8300
|
+
break;
|
|
8301
|
+
case 'r':
|
|
8302
|
+
result += '\r';
|
|
8303
|
+
i += 2;
|
|
8304
|
+
break;
|
|
8305
|
+
default:
|
|
8306
|
+
// Unknown escape sequence, keep as-is
|
|
8307
|
+
result += content[i] + next;
|
|
8308
|
+
i += 2;
|
|
8309
|
+
break;
|
|
8310
|
+
}
|
|
8311
|
+
}
|
|
8312
|
+
else {
|
|
8313
|
+
result += content[i];
|
|
8314
|
+
i += 1;
|
|
8315
|
+
}
|
|
8316
|
+
}
|
|
8317
|
+
else {
|
|
8318
|
+
result += content[i];
|
|
8319
|
+
i += 1;
|
|
8320
|
+
}
|
|
8321
|
+
}
|
|
8322
|
+
return result;
|
|
8323
|
+
}
|
|
8324
|
+
/**
|
|
8325
|
+
* Escapes a string for use in a Python single-quoted string literal.
|
|
8326
|
+
*/
|
|
8327
|
+
function escapePythonString(content) {
|
|
8328
|
+
return content
|
|
8329
|
+
.replace(/\\/g, '\\\\') // Escape backslashes first
|
|
8330
|
+
.replace(/'/g, "\\'"); // Then escape single quotes
|
|
8331
|
+
}
|
|
8332
|
+
/**
|
|
8333
|
+
* Determines if a string is a Python expression (function call, operator, etc.)
|
|
8334
|
+
* rather than a simple string literal.
|
|
8335
|
+
*/
|
|
8336
|
+
function isPythonExpression(valueStr) {
|
|
8337
|
+
// Check for function calls (e.g., pd.to_datetime(...), datetime(...))
|
|
8338
|
+
if (/[a-zA-Z_][a-zA-Z0-9_]*\s*\(/.test(valueStr)) {
|
|
8339
|
+
return true;
|
|
8340
|
+
}
|
|
8341
|
+
// Check for operators (arithmetic, comparison, etc.)
|
|
8342
|
+
if (/[+\-*/%<>=!&|]/.test(valueStr)) {
|
|
8343
|
+
return true;
|
|
8344
|
+
}
|
|
8345
|
+
// Check for list/dict comprehensions, slices, etc.
|
|
8346
|
+
if (/\[.*\]|{.*}/.test(valueStr) && !/^['"]/.test(valueStr)) {
|
|
8347
|
+
return true;
|
|
8348
|
+
}
|
|
8349
|
+
// Check for attribute access (e.g., obj.attr)
|
|
8350
|
+
if (/\.[a-zA-Z_][a-zA-Z0-9_]*/.test(valueStr)) {
|
|
8351
|
+
return true;
|
|
8352
|
+
}
|
|
8353
|
+
return false;
|
|
8354
|
+
}
|
|
8355
|
+
/**
|
|
8356
|
+
* Updates the chart configuration section with new variable values.
|
|
8357
|
+
* Regenerates the config section in a simple, consistent format.
|
|
8358
|
+
*/
|
|
8359
|
+
function updateChartConfig(sourceCode, variables) {
|
|
8360
|
+
const parsed = parseChartConfig(sourceCode);
|
|
8361
|
+
if (!parsed) {
|
|
8362
|
+
return sourceCode;
|
|
8363
|
+
}
|
|
8364
|
+
// Create a map of variable names to their new values
|
|
8365
|
+
const varMap = new Map();
|
|
8366
|
+
variables.forEach(v => varMap.set(v.name, v));
|
|
8367
|
+
// Build new config section - simple one variable per line format
|
|
8368
|
+
const configStartMarker = '# === CHART CONFIG ===';
|
|
8369
|
+
const configEndMarker = '# === END CONFIG ===';
|
|
8370
|
+
let newConfigSection = configStartMarker + '\n\n';
|
|
8371
|
+
// Use updated variables if available, otherwise keep original
|
|
8372
|
+
const variablesToWrite = parsed.variables.map(v => varMap.get(v.name) || v);
|
|
8373
|
+
for (const variable of variablesToWrite) {
|
|
8374
|
+
const formattedValue = formatValue(variable.value, variable.type);
|
|
8375
|
+
newConfigSection += `${variable.name} = ${formattedValue}\n`;
|
|
8376
|
+
}
|
|
8377
|
+
newConfigSection += '\n' + configEndMarker;
|
|
8378
|
+
// Replace the old config section with the new one
|
|
8379
|
+
const beforeConfig = sourceCode.substring(0, parsed.configStartIndex);
|
|
8380
|
+
const afterConfig = sourceCode.substring(parsed.configEndIndex);
|
|
8381
|
+
return beforeConfig + newConfigSection + afterConfig;
|
|
8382
|
+
}
|
|
8383
|
+
/**
|
|
8384
|
+
* Formats a value back to its Python string representation.
|
|
8385
|
+
*/
|
|
8386
|
+
function formatValue(value, type) {
|
|
8387
|
+
if (type === 'boolean') {
|
|
8388
|
+
return value ? 'True' : 'False';
|
|
8389
|
+
}
|
|
8390
|
+
if (type === 'tuple' && Array.isArray(value)) {
|
|
8391
|
+
return `(${value[0]}, ${value[1]})`;
|
|
8392
|
+
}
|
|
8393
|
+
if (type === 'number') {
|
|
8394
|
+
return String(value);
|
|
8395
|
+
}
|
|
8396
|
+
if (type === 'expression') {
|
|
8397
|
+
// Python expressions should be preserved as-is without quotes
|
|
8398
|
+
return String(value);
|
|
8399
|
+
}
|
|
8400
|
+
// String - escape properly and wrap in single quotes
|
|
8401
|
+
return `'${escapePythonString(String(value))}'`;
|
|
8402
|
+
}
|
|
8403
|
+
|
|
8404
|
+
|
|
8405
|
+
/***/ }),
|
|
8406
|
+
|
|
8407
|
+
/***/ "./lib/Extensions/ContextManager/ContextManagerPlugin.js":
|
|
8408
|
+
/*!***************************************************************!*\
|
|
8409
|
+
!*** ./lib/Extensions/ContextManager/ContextManagerPlugin.js ***!
|
|
8410
|
+
\***************************************************************/
|
|
8411
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8412
|
+
|
|
8413
|
+
__webpack_require__.r(__webpack_exports__);
|
|
8414
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8415
|
+
/* harmony export */ ContextManager: () => (/* binding */ ContextManager),
|
|
8416
|
+
/* harmony export */ ContextManagerPlugin: () => (/* binding */ ContextManagerPlugin),
|
|
8417
|
+
/* harmony export */ IContextManager: () => (/* binding */ IContextManager),
|
|
8418
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
8419
|
+
/* harmony export */ });
|
|
8420
|
+
/* harmony import */ var _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @jupyterlab/notebook */ "webpack/sharing/consume/default/@jupyterlab/notebook");
|
|
8421
|
+
/* harmony import */ var _jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__);
|
|
8422
|
+
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
|
|
8423
|
+
/* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_1__);
|
|
8424
|
+
/* harmony import */ var _VariableInspector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VariableInspector */ "./lib/Extensions/ContextManager/VariableInspector.js");
|
|
8425
|
+
/* harmony import */ var _FileInspector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FileInspector */ "./lib/Extensions/ContextManager/FileInspector.js");
|
|
8426
|
+
/*
|
|
8427
|
+
* Copyright (c) Saga Inc.
|
|
8428
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
8429
|
+
*/
|
|
8430
|
+
|
|
8431
|
+
|
|
8432
|
+
|
|
8433
|
+
|
|
8434
|
+
// The provides field in JupyterLab's JupyterFrontEndPlugin expects a token
|
|
8435
|
+
// that can be used to look up the service in the dependency injection system,
|
|
8436
|
+
// so we define a new token for the ContextManager
|
|
8437
|
+
const IContextManager = new _lumino_coreutils__WEBPACK_IMPORTED_MODULE_1__.Token('mito-ai:IContextManager');
|
|
8438
|
+
class ContextManager {
|
|
8439
|
+
constructor(app, notebookTracker) {
|
|
8440
|
+
this.notebookContexts = new Map();
|
|
8441
|
+
this._startKernelListener = async (app, notebookPanel) => {
|
|
8442
|
+
if (notebookPanel === null) {
|
|
8443
|
+
return;
|
|
8444
|
+
}
|
|
8445
|
+
// Initialize context for this notebook if it doesn't exist
|
|
8446
|
+
if (!this.notebookContexts.has(notebookPanel.id)) {
|
|
8447
|
+
this.notebookContexts.set(notebookPanel.id, { variables: [], files: [] });
|
|
8448
|
+
}
|
|
8449
|
+
// As soon as the notebook is opened, fetch the files since these are not related to the kernel,
|
|
8450
|
+
// but to the notebook itself. This is useful so we can tell the agent which files are available
|
|
8451
|
+
// or let the user select a file from the dropdown menu before the kernel is started.
|
|
8452
|
+
// We use the notebookPanel.id to identify the notebook because we might need to access
|
|
8453
|
+
// NotebookContext even before the kernel is started. For example, to figure out
|
|
8454
|
+
// which files are available.
|
|
8455
|
+
const updatedFiles = await (0,_FileInspector__WEBPACK_IMPORTED_MODULE_2__.getFiles)(app, notebookPanel);
|
|
8456
|
+
this.updateNotebookFiles(notebookPanel.id, updatedFiles);
|
|
8457
|
+
// Listen for kernel restart or shut down events and clear the variables for this notebook
|
|
8458
|
+
notebookPanel.context.sessionContext.statusChanged.connect((sender, status) => {
|
|
8459
|
+
if (status === 'restarting' || status === 'terminating' || status === 'unknown') {
|
|
8460
|
+
// Clear the variables for this specific notebook, but don't clear the files
|
|
8461
|
+
// as they have not changed.
|
|
8462
|
+
this.updateNotebookVariables(notebookPanel.id, []); // Clear variables for this specific notebook
|
|
8463
|
+
}
|
|
8464
|
+
});
|
|
8465
|
+
// Listen to kernel messages
|
|
8466
|
+
notebookPanel.context.sessionContext.iopubMessage.connect(async (sender, msg) => {
|
|
8467
|
+
// Watch for execute_input messages, which indicate is a request to execute code.
|
|
8468
|
+
// Previosuly, we watched for 'execute_result' messages, but these are only returned
|
|
8469
|
+
// from the kernel when a code cell prints a value to the output cell, which is not what we want.
|
|
8470
|
+
// TODO: Check if there is a race condition where we might end up fetching variables before the
|
|
8471
|
+
// code is executed. I don't think this is the case because the kernel runs in one thread I believe.
|
|
8472
|
+
// TODO: Eventually we should create a document manager listener so if the user uploads a new file
|
|
8473
|
+
// to jupyter, we can update the available files even if they have not executed a kernel message.
|
|
8474
|
+
if (msg.header.msg_type === 'execute_input') {
|
|
8475
|
+
void (0,_VariableInspector__WEBPACK_IMPORTED_MODULE_3__.fetchVariablesAndUpdateState)(notebookPanel, this.updateNotebookVariables.bind(this, notebookPanel.id));
|
|
8476
|
+
const updatedFiles = await (0,_FileInspector__WEBPACK_IMPORTED_MODULE_2__.getFiles)(app, notebookPanel);
|
|
8477
|
+
this.updateNotebookFiles(notebookPanel.id, updatedFiles);
|
|
8478
|
+
}
|
|
8479
|
+
});
|
|
8480
|
+
};
|
|
8481
|
+
this.notebookTracker = notebookTracker;
|
|
8482
|
+
// Setup the kernel listener to update context as kernel messages are received
|
|
8483
|
+
this.setupKernelListener(app, notebookTracker);
|
|
8484
|
+
}
|
|
8485
|
+
getNotebookContext(notebookId) {
|
|
8486
|
+
return this.notebookContexts.get(notebookId);
|
|
8487
|
+
}
|
|
8488
|
+
getActiveNotebookContext() {
|
|
8489
|
+
const activeNotebook = this.notebookTracker.currentWidget;
|
|
8490
|
+
if (!activeNotebook)
|
|
8491
|
+
return undefined;
|
|
8492
|
+
return this.getNotebookContext(activeNotebook.id);
|
|
7224
8493
|
}
|
|
7225
8494
|
updateNotebookVariables(notebookID, variables) {
|
|
7226
8495
|
const context = this.notebookContexts.get(notebookID) || { variables: [], files: [] };
|
|
@@ -7396,6 +8665,10 @@ def structured_globals():
|
|
|
7396
8665
|
if is_from_mitosheet(v):
|
|
7397
8666
|
continue
|
|
7398
8667
|
|
|
8668
|
+
if k.startswith("scratch_"):
|
|
8669
|
+
# Skip scratchpad variables the agent creates
|
|
8670
|
+
continue
|
|
8671
|
+
|
|
7399
8672
|
if not k.startswith("_") and k not in ("In", "Out", "json") and not callable(v):
|
|
7400
8673
|
|
|
7401
8674
|
if _is_pandas_imported and isinstance(v, pd.DataFrame):
|
|
@@ -7996,6 +9269,11 @@ const plugin = {
|
|
|
7996
9269
|
removeButtonsFromAllNotebooks();
|
|
7997
9270
|
}
|
|
7998
9271
|
});
|
|
9272
|
+
// Set Mito Light as default theme if user hasn't explicitly chosen a different theme
|
|
9273
|
+
// This runs after registration so the theme is available
|
|
9274
|
+
if (manager.theme === 'JupyterLab Light' || !manager.theme) {
|
|
9275
|
+
void manager.setTheme('Mito Light');
|
|
9276
|
+
}
|
|
7999
9277
|
},
|
|
8000
9278
|
autoStart: true
|
|
8001
9279
|
};
|
|
@@ -9890,11 +11168,12 @@ const emptyCellPlaceholder = {
|
|
|
9890
11168
|
// so that the keybinding can be properly resolved.
|
|
9891
11169
|
tracker, extensions) => {
|
|
9892
11170
|
var _a;
|
|
9893
|
-
const
|
|
9894
|
-
const
|
|
11171
|
+
const openChatKeyBindings = app.commands.keyBindings.find(b => b.command === _commands__WEBPACK_IMPORTED_MODULE_4__.COMMAND_MITO_AI_OPEN_CHAT);
|
|
11172
|
+
const openChatKeystroke = _lumino_commands__WEBPACK_IMPORTED_MODULE_2__.CommandRegistry.formatKeystroke((_a = openChatKeyBindings === null || openChatKeyBindings === void 0 ? void 0 : openChatKeyBindings.keys[0]) !== null && _a !== void 0 ? _a : 'Accel E')
|
|
9895
11173
|
.split(/[+\s]/)
|
|
9896
11174
|
.map(s => `<kbd>${s}</kbd>`)
|
|
9897
|
-
.join(' + ')
|
|
11175
|
+
.join(' + ');
|
|
11176
|
+
const pythonAdvice = `Write Python or Press ${openChatKeystroke} to open Mito AI`;
|
|
9898
11177
|
extensions.addExtension({
|
|
9899
11178
|
name: 'mito-ai:empty-editor-advice',
|
|
9900
11179
|
factory: options => {
|
|
@@ -10221,6 +11500,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
10221
11500
|
/* harmony export */ COMMAND_MITO_AI_BETA_MODE_ENABLED: () => (/* binding */ COMMAND_MITO_AI_BETA_MODE_ENABLED),
|
|
10222
11501
|
/* harmony export */ COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE: () => (/* binding */ COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE),
|
|
10223
11502
|
/* harmony export */ COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE: () => (/* binding */ COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE),
|
|
11503
|
+
/* harmony export */ COMMAND_MITO_AI_OPEN_CHART_WIZARD: () => (/* binding */ COMMAND_MITO_AI_OPEN_CHART_WIZARD),
|
|
10224
11504
|
/* harmony export */ COMMAND_MITO_AI_OPEN_CHAT: () => (/* binding */ COMMAND_MITO_AI_OPEN_CHAT),
|
|
10225
11505
|
/* harmony export */ COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT: () => (/* binding */ COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT),
|
|
10226
11506
|
/* harmony export */ COMMAND_MITO_AI_PREVIEW_LATEST_CODE: () => (/* binding */ COMMAND_MITO_AI_PREVIEW_LATEST_CODE),
|
|
@@ -10228,7 +11508,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
10228
11508
|
/* harmony export */ COMMAND_MITO_AI_SEND_AGENT_MESSAGE: () => (/* binding */ COMMAND_MITO_AI_SEND_AGENT_MESSAGE),
|
|
10229
11509
|
/* harmony export */ COMMAND_MITO_AI_SEND_DEBUG_ERROR_MESSAGE: () => (/* binding */ COMMAND_MITO_AI_SEND_DEBUG_ERROR_MESSAGE),
|
|
10230
11510
|
/* harmony export */ COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE: () => (/* binding */ COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE),
|
|
10231
|
-
/* harmony export */ COMMAND_MITO_AI_SEND_MESSAGE: () => (/* binding */ COMMAND_MITO_AI_SEND_MESSAGE)
|
|
11511
|
+
/* harmony export */ COMMAND_MITO_AI_SEND_MESSAGE: () => (/* binding */ COMMAND_MITO_AI_SEND_MESSAGE),
|
|
11512
|
+
/* harmony export */ COMMAND_MITO_AI_START_NEW_CHAT: () => (/* binding */ COMMAND_MITO_AI_START_NEW_CHAT)
|
|
10232
11513
|
/* harmony export */ });
|
|
10233
11514
|
/*
|
|
10234
11515
|
* Copyright (c) Saga Inc.
|
|
@@ -10245,12 +11526,15 @@ const COMMAND_MITO_AI_SEND_MESSAGE = `${MITO_AI}:send-message`;
|
|
|
10245
11526
|
const COMMAND_MITO_AI_SEND_EXPLAIN_CODE_MESSAGE = `${MITO_AI}:send-explain-code-message`;
|
|
10246
11527
|
const COMMAND_MITO_AI_SEND_DEBUG_ERROR_MESSAGE = `${MITO_AI}:send-debug-error-message`;
|
|
10247
11528
|
const COMMAND_MITO_AI_SEND_AGENT_MESSAGE = `${MITO_AI}:send-agent-message`;
|
|
11529
|
+
const COMMAND_MITO_AI_START_NEW_CHAT = `${MITO_AI}:start-new-chat`;
|
|
10248
11530
|
const COMMAND_MITO_AI_CELL_TOOLBAR_ACCEPT_CODE = `toolbar-button:accept-code`;
|
|
10249
11531
|
const COMMAND_MITO_AI_CELL_TOOLBAR_REJECT_CODE = `toolbar-button:reject-code`;
|
|
10250
11532
|
// Beta mode commands
|
|
10251
11533
|
const COMMAND_MITO_AI_BETA_MODE_ENABLED = `${MITO_AI}:beta-mode-enabled`;
|
|
10252
11534
|
// Streamlit commands
|
|
10253
11535
|
const COMMAND_MITO_AI_PREVIEW_AS_STREAMLIT = 'mito-ai:preview-as-streamlit';
|
|
11536
|
+
// Chart Wizard commands
|
|
11537
|
+
const COMMAND_MITO_AI_OPEN_CHART_WIZARD = 'mito-ai:open-chart-wizard';
|
|
10254
11538
|
|
|
10255
11539
|
|
|
10256
11540
|
/***/ }),
|
|
@@ -10292,6 +11576,70 @@ const AgentComponentHeader = ({ icon, text, onClick, isExpanded, displayBorder =
|
|
|
10292
11576
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AgentComponentHeader);
|
|
10293
11577
|
|
|
10294
11578
|
|
|
11579
|
+
/***/ }),
|
|
11580
|
+
|
|
11581
|
+
/***/ "./lib/components/AgentComponents/AskUserQuestionToolUI.js":
|
|
11582
|
+
/*!*****************************************************************!*\
|
|
11583
|
+
!*** ./lib/components/AgentComponents/AskUserQuestionToolUI.js ***!
|
|
11584
|
+
\*****************************************************************/
|
|
11585
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
11586
|
+
|
|
11587
|
+
__webpack_require__.r(__webpack_exports__);
|
|
11588
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
11589
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
11590
|
+
/* harmony export */ });
|
|
11591
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
11592
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
11593
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
|
|
11594
|
+
/* harmony import */ var _style_AgentToolUIComponent_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/AgentToolUIComponent.css */ "./style/AgentToolUIComponent.css");
|
|
11595
|
+
/* harmony import */ var _style_AskUserQuestionToolUI_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/AskUserQuestionToolUI.css */ "./style/AskUserQuestionToolUI.css");
|
|
11596
|
+
/* harmony import */ var _icons_QuestionIcon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../icons/QuestionIcon */ "./lib/icons/QuestionIcon.js");
|
|
11597
|
+
/* harmony import */ var _AgentComponentHeader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AgentComponentHeader */ "./lib/components/AgentComponents/AgentComponentHeader.js");
|
|
11598
|
+
/*
|
|
11599
|
+
* Copyright (c) Saga Inc.
|
|
11600
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
11601
|
+
*/
|
|
11602
|
+
|
|
11603
|
+
|
|
11604
|
+
|
|
11605
|
+
|
|
11606
|
+
|
|
11607
|
+
|
|
11608
|
+
const AskUserQuestionToolUI = ({ question, answers, onAnswerSelected, isLastMessage = false, }) => {
|
|
11609
|
+
const [isExpanded, setIsExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
11610
|
+
const cleanedAnswers = answers === null || answers === void 0 ? void 0 : answers.filter(answer => answer.trim() !== '');
|
|
11611
|
+
const handleAnswerClick = (answer) => {
|
|
11612
|
+
if (onAnswerSelected) {
|
|
11613
|
+
onAnswerSelected(answer);
|
|
11614
|
+
}
|
|
11615
|
+
};
|
|
11616
|
+
if (question.trim() === '') {
|
|
11617
|
+
return null;
|
|
11618
|
+
}
|
|
11619
|
+
// Collapsed mode: show as expandable item like Cell Updates
|
|
11620
|
+
if (!isLastMessage) {
|
|
11621
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_3__.classNames)('ask-user-question-collapsed', { expanded: isExpanded }) },
|
|
11622
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AgentComponentHeader__WEBPACK_IMPORTED_MODULE_4__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_QuestionIcon__WEBPACK_IMPORTED_MODULE_5__["default"], null), text: question, onClick: () => setIsExpanded(!isExpanded), isExpanded: isExpanded, displayBorder: true }),
|
|
11623
|
+
isExpanded && cleanedAnswers && cleanedAnswers.length > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "ask-user-question-expanded-content" },
|
|
11624
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", { className: "ask-user-question-collapsed-answers" }, cleanedAnswers.map((answer, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", { key: index }, answer))))))));
|
|
11625
|
+
}
|
|
11626
|
+
// Active mode: show interactive UI with clickable buttons and purple glow
|
|
11627
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_3__.classNames)('agent-tool-ui-container', 'ask-user-question-container', 'ask-user-question-active') },
|
|
11628
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "agent-tool-ui-content" },
|
|
11629
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "ask-user-question-pill" },
|
|
11630
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_QuestionIcon__WEBPACK_IMPORTED_MODULE_5__["default"], null),
|
|
11631
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "ask-user-question-pill-text" }, "User Question")),
|
|
11632
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "ask-user-question-content" },
|
|
11633
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "ask-user-question-question" }, question),
|
|
11634
|
+
cleanedAnswers && cleanedAnswers.length > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "ask-user-question-answers" }, cleanedAnswers.map((answer, index) => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { key: index, className: "ask-user-question-answer-button", onClick: () => handleAnswerClick(answer), title: answer },
|
|
11635
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { className: "ask-user-question-radio-icon", width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
11636
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("circle", { cx: "8", cy: "8", r: "7", stroke: "currentColor", strokeWidth: "1.5", fill: "none" })),
|
|
11637
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "ask-user-question-answer-text" }, answer)))))),
|
|
11638
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "ask-user-question-subtext" }, cleanedAnswers && cleanedAnswers.length > 0 ? 'Or respond in the Chat Input below' : 'Respond in the Chat Input below')))));
|
|
11639
|
+
};
|
|
11640
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AskUserQuestionToolUI);
|
|
11641
|
+
|
|
11642
|
+
|
|
10295
11643
|
/***/ }),
|
|
10296
11644
|
|
|
10297
11645
|
/***/ "./lib/components/AgentComponents/AssumptionToolUI.js":
|
|
@@ -10409,16 +11757,16 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
10409
11757
|
/* harmony export */ });
|
|
10410
11758
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
10411
11759
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
10412
|
-
/* harmony import */ var
|
|
10413
|
-
/* harmony import */ var
|
|
10414
|
-
/* harmony import */ var
|
|
10415
|
-
/* harmony import */ var
|
|
10416
|
-
/* harmony import */ var
|
|
10417
|
-
/* harmony import */ var
|
|
10418
|
-
/* harmony import */ var
|
|
11760
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
|
|
11761
|
+
/* harmony import */ var _utils_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/strings */ "./lib/utils/strings.js");
|
|
11762
|
+
/* harmony import */ var _Extensions_AiChat_cellUpdateUtils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../Extensions/AiChat/cellUpdateUtils */ "./lib/Extensions/AiChat/cellUpdateUtils.js");
|
|
11763
|
+
/* harmony import */ var _Extensions_AiChat_ChatMessage_PythonCode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../Extensions/AiChat/ChatMessage/PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
|
|
11764
|
+
/* harmony import */ var _Extensions_AiChat_ChatMessage_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../Extensions/AiChat/ChatMessage/AssistantCodeBlock */ "./lib/Extensions/AiChat/ChatMessage/AssistantCodeBlock.js");
|
|
11765
|
+
/* harmony import */ var _icons_AlertIcon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../icons/AlertIcon */ "./lib/icons/AlertIcon.js");
|
|
11766
|
+
/* harmony import */ var _AgentComponentHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AgentComponentHeader */ "./lib/components/AgentComponents/AgentComponentHeader.js");
|
|
10419
11767
|
/* harmony import */ var _style_ErrorFixupToolUI_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/ErrorFixupToolUI.css */ "./style/ErrorFixupToolUI.css");
|
|
10420
11768
|
/* harmony import */ var _style_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/AgentComponentHeader.css */ "./style/AgentComponentHeader.css");
|
|
10421
|
-
/* harmony import */ var
|
|
11769
|
+
/* harmony import */ var _RunAllCellsToolUI__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./RunAllCellsToolUI */ "./lib/components/AgentComponents/RunAllCellsToolUI.js");
|
|
10422
11770
|
/*
|
|
10423
11771
|
* Copyright (c) Saga Inc.
|
|
10424
11772
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -10434,16 +11782,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
10434
11782
|
|
|
10435
11783
|
|
|
10436
11784
|
|
|
10437
|
-
const getCellIdFromCellUpdate = (cellUpdate, notebookTracker) => {
|
|
10438
|
-
if (!cellUpdate) {
|
|
10439
|
-
return undefined;
|
|
10440
|
-
}
|
|
10441
|
-
if (cellUpdate.type === 'modification') {
|
|
10442
|
-
return cellUpdate.id;
|
|
10443
|
-
}
|
|
10444
|
-
// For 'new' type, get the cell ID by index
|
|
10445
|
-
return (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_3__.getCellIDByIndexInNotebookPanel)(notebookTracker.currentWidget, cellUpdate.index);
|
|
10446
|
-
};
|
|
10447
11785
|
const parsePythonErrorType = (content) => {
|
|
10448
11786
|
if (!content)
|
|
10449
11787
|
return 'Error';
|
|
@@ -10460,16 +11798,16 @@ const processErrorContent = (content) => {
|
|
|
10460
11798
|
};
|
|
10461
11799
|
const ErrorDetectedBlock = ({ errorMessage, renderMimeRegistry, }) => {
|
|
10462
11800
|
const [expandedError, setExpandedError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
10463
|
-
const rawErrorContent = (0,
|
|
11801
|
+
const rawErrorContent = (0,_utils_strings__WEBPACK_IMPORTED_MODULE_3__.getContentStringFromMessage)(errorMessage);
|
|
10464
11802
|
const errorContent = processErrorContent(rawErrorContent);
|
|
10465
11803
|
const errorType = parsePythonErrorType(errorContent);
|
|
10466
11804
|
const toggleError = () => {
|
|
10467
11805
|
setExpandedError(!expandedError);
|
|
10468
11806
|
};
|
|
10469
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,
|
|
10470
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
11807
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_4__.classNames)('error-fixup-container', { expanded: expandedError }) },
|
|
11808
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AgentComponentHeader__WEBPACK_IMPORTED_MODULE_5__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_AlertIcon__WEBPACK_IMPORTED_MODULE_6__["default"], null), text: `${errorType} Detected`, onClick: toggleError, isExpanded: expandedError, displayBorder: false }),
|
|
10471
11809
|
expandedError && errorContent && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-expanded" },
|
|
10472
|
-
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
11810
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Extensions_AiChat_ChatMessage_PythonCode__WEBPACK_IMPORTED_MODULE_7__["default"], { code: errorContent, renderMimeRegistry: renderMimeRegistry })))));
|
|
10473
11811
|
};
|
|
10474
11812
|
const GroupedErrorsAndFixes = ({ messages, renderMimeRegistry, notebookTracker, }) => {
|
|
10475
11813
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "error-fixup-root" },
|
|
@@ -10482,9 +11820,9 @@ const GroupedErrorsAndFixes = ({ messages, renderMimeRegistry, notebookTracker,
|
|
|
10482
11820
|
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ErrorDetectedBlock, { key: `error-${index}`, errorMessage: messageItem.message, renderMimeRegistry: renderMimeRegistry }));
|
|
10483
11821
|
}
|
|
10484
11822
|
if (((_a = messageItem.agentResponse) === null || _a === void 0 ? void 0 : _a.type) === 'run_all_cells') {
|
|
10485
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
11823
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_RunAllCellsToolUI__WEBPACK_IMPORTED_MODULE_8__["default"], { key: `run-all-cells-${index}`, inErrorFixup: true }));
|
|
10486
11824
|
}
|
|
10487
|
-
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(
|
|
11825
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Extensions_AiChat_ChatMessage_AssistantCodeBlock__WEBPACK_IMPORTED_MODULE_9__["default"], { key: `assistant-${index}`, code: messageItem.message.content, codeSummary: (_d = (_c = (_b = messageItem.agentResponse) === null || _b === void 0 ? void 0 : _b.cell_update) === null || _c === void 0 ? void 0 : _c.code_summary) !== null && _d !== void 0 ? _d : 'Fixing error', isCodeComplete: true, renderMimeRegistry: renderMimeRegistry, previewAICode: () => { }, acceptAICode: () => { }, rejectAICode: () => { }, isLastAiMessage: false, codeReviewStatus: "chatPreview", agentModeEnabled: true, isErrorFixup: true, cellId: (0,_Extensions_AiChat_cellUpdateUtils__WEBPACK_IMPORTED_MODULE_10__.getCellIdFromCellUpdate)((_e = messageItem.agentResponse) === null || _e === void 0 ? void 0 : _e.cell_update, notebookTracker), notebookPanel: notebookTracker.currentWidget }));
|
|
10488
11826
|
}))));
|
|
10489
11827
|
};
|
|
10490
11828
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GroupedErrorsAndFixes);
|
|
@@ -10558,6 +11896,55 @@ const RunAllCellsToolUI = ({ inErrorFixup }) => {
|
|
|
10558
11896
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RunAllCellsToolUI);
|
|
10559
11897
|
|
|
10560
11898
|
|
|
11899
|
+
/***/ }),
|
|
11900
|
+
|
|
11901
|
+
/***/ "./lib/components/AgentComponents/ScratchpadToolUI.js":
|
|
11902
|
+
/*!************************************************************!*\
|
|
11903
|
+
!*** ./lib/components/AgentComponents/ScratchpadToolUI.js ***!
|
|
11904
|
+
\************************************************************/
|
|
11905
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
11906
|
+
|
|
11907
|
+
__webpack_require__.r(__webpack_exports__);
|
|
11908
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
11909
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
11910
|
+
/* harmony export */ });
|
|
11911
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
11912
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
11913
|
+
/* harmony import */ var _utils_classNames__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/classNames */ "./lib/utils/classNames.js");
|
|
11914
|
+
/* harmony import */ var _style_AgentToolUIComponent_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../style/AgentToolUIComponent.css */ "./style/AgentToolUIComponent.css");
|
|
11915
|
+
/* harmony import */ var _style_AgentComponentHeader_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../style/AgentComponentHeader.css */ "./style/AgentComponentHeader.css");
|
|
11916
|
+
/* harmony import */ var _style_CodeBlock_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../style/CodeBlock.css */ "./style/CodeBlock.css");
|
|
11917
|
+
/* harmony import */ var _AgentComponentHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AgentComponentHeader */ "./lib/components/AgentComponents/AgentComponentHeader.js");
|
|
11918
|
+
/* harmony import */ var _icons_NotepadIcon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../icons/NotepadIcon */ "./lib/icons/NotepadIcon.js");
|
|
11919
|
+
/* harmony import */ var _Extensions_AiChat_ChatMessage_PythonCode__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../Extensions/AiChat/ChatMessage/PythonCode */ "./lib/Extensions/AiChat/ChatMessage/PythonCode.js");
|
|
11920
|
+
/*
|
|
11921
|
+
* Copyright (c) Saga Inc.
|
|
11922
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
11923
|
+
*/
|
|
11924
|
+
|
|
11925
|
+
|
|
11926
|
+
|
|
11927
|
+
|
|
11928
|
+
|
|
11929
|
+
|
|
11930
|
+
|
|
11931
|
+
|
|
11932
|
+
const ScratchpadToolUI = ({ scratchpadCode, scratchpadSummary, scratchpadResult, renderMimeRegistry, }) => {
|
|
11933
|
+
const [isExpanded, setIsExpanded] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
11934
|
+
if (!scratchpadCode || scratchpadCode.trim() === '') {
|
|
11935
|
+
return null;
|
|
11936
|
+
}
|
|
11937
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: (0,_utils_classNames__WEBPACK_IMPORTED_MODULE_4__.classNames)('code-block-container', 'agent-mode', {
|
|
11938
|
+
'agent-mode-collapsed': !isExpanded,
|
|
11939
|
+
}) },
|
|
11940
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_AgentComponentHeader__WEBPACK_IMPORTED_MODULE_5__["default"], { icon: react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_NotepadIcon__WEBPACK_IMPORTED_MODULE_6__["default"], null), text: scratchpadSummary || "Exploration code", onClick: () => setIsExpanded(!isExpanded), isExpanded: isExpanded, displayBorder: true }),
|
|
11941
|
+
isExpanded && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
|
|
11942
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Extensions_AiChat_ChatMessage_PythonCode__WEBPACK_IMPORTED_MODULE_7__["default"], { code: scratchpadCode, renderMimeRegistry: renderMimeRegistry }),
|
|
11943
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "scratchpad-result" }, scratchpadResult ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("pre", null, scratchpadResult)) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("pre", { className: "scratchpad-result-warning" }, "Scratchpad results not available for display")))))));
|
|
11944
|
+
};
|
|
11945
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ScratchpadToolUI);
|
|
11946
|
+
|
|
11947
|
+
|
|
10561
11948
|
/***/ }),
|
|
10562
11949
|
|
|
10563
11950
|
/***/ "./lib/components/AgentComponents/ShimmerWrapper.js":
|
|
@@ -11001,7 +12388,7 @@ const MODEL_MAPPINGS = [
|
|
|
11001
12388
|
];
|
|
11002
12389
|
const ALL_MODEL_DISPLAY_NAMES = MODEL_MAPPINGS.map(mapping => mapping.displayName);
|
|
11003
12390
|
// Maximum length for displayed model name before truncating
|
|
11004
|
-
const DEFAULT_MODEL = _utils_models__WEBPACK_IMPORTED_MODULE_3__.
|
|
12391
|
+
const DEFAULT_MODEL = _utils_models__WEBPACK_IMPORTED_MODULE_3__.CLAUDE_HAIKU_DISPLAY_NAME;
|
|
11005
12392
|
const ModelSelector = ({ onConfigChange }) => {
|
|
11006
12393
|
const [selectedModel, setSelectedModel] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(DEFAULT_MODEL);
|
|
11007
12394
|
const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
@@ -11513,6 +12900,9 @@ const SelectedContextContainer = ({ title, type, onRemove, onClick, notebookTrac
|
|
|
11513
12900
|
else if (type === 'cell') {
|
|
11514
12901
|
icon = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_CodeIcon__WEBPACK_IMPORTED_MODULE_4__["default"], null);
|
|
11515
12902
|
}
|
|
12903
|
+
else if (type === 'line_selection') {
|
|
12904
|
+
icon = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_icons_CodeIcon__WEBPACK_IMPORTED_MODULE_4__["default"], null);
|
|
12905
|
+
}
|
|
11516
12906
|
const handleClick = () => {
|
|
11517
12907
|
var _a;
|
|
11518
12908
|
if (type === 'active_cell') {
|
|
@@ -11541,16 +12931,66 @@ const SelectedContextContainer = ({ title, type, onRemove, onClick, notebookTrac
|
|
|
11541
12931
|
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_6__.highlightCodeCell)(notebookTracker, value);
|
|
11542
12932
|
}, 500);
|
|
11543
12933
|
}
|
|
12934
|
+
else if (type === 'line_selection' && notebookTracker && value) {
|
|
12935
|
+
// Handle line selection context click - scroll to and highlight selected lines
|
|
12936
|
+
try {
|
|
12937
|
+
const selectionInfo = JSON.parse(value);
|
|
12938
|
+
const currentWidget = notebookTracker.currentWidget;
|
|
12939
|
+
if (currentWidget) {
|
|
12940
|
+
// Scroll to the cell, positioning based on the start line
|
|
12941
|
+
// Lines are stored 0-indexed, matching the citation format
|
|
12942
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_6__.scrollToCell)(currentWidget, selectionInfo.cellId, selectionInfo.startLine, 'center');
|
|
12943
|
+
// Highlight the selected lines
|
|
12944
|
+
setTimeout(() => {
|
|
12945
|
+
// Re-check currentWidget inside the callback since it may have changed
|
|
12946
|
+
const widget = notebookTracker.currentWidget;
|
|
12947
|
+
if (widget) {
|
|
12948
|
+
(0,_utils_notebook__WEBPACK_IMPORTED_MODULE_6__.highlightLinesOfCodeInCodeCell)(widget, selectionInfo.cellId, selectionInfo.startLine, selectionInfo.endLine);
|
|
12949
|
+
}
|
|
12950
|
+
}, 500);
|
|
12951
|
+
}
|
|
12952
|
+
}
|
|
12953
|
+
catch (_b) {
|
|
12954
|
+
// Ignore JSON parse errors
|
|
12955
|
+
}
|
|
12956
|
+
}
|
|
11544
12957
|
else if (onClick) {
|
|
11545
12958
|
// Call the custom onClick handler for other context types
|
|
11546
12959
|
onClick();
|
|
11547
12960
|
}
|
|
11548
12961
|
};
|
|
11549
|
-
|
|
12962
|
+
const getTooltipText = () => {
|
|
12963
|
+
if (type.startsWith('image/')) {
|
|
12964
|
+
return `The AI will be able to view the ${title} image before deciding how to respond`;
|
|
12965
|
+
}
|
|
12966
|
+
else if (type === 'file') {
|
|
12967
|
+
return `The path ${title} will be shared with the AI`;
|
|
12968
|
+
}
|
|
12969
|
+
else if (type === 'notebook') {
|
|
12970
|
+
return "The AI will be able to read all of the code and markdown in your notebook. It is included by default in Agent mode.";
|
|
12971
|
+
}
|
|
12972
|
+
else if (type === 'active_cell') {
|
|
12973
|
+
return "The AI will write its code based on the currently active cell. It is included by default in Chat mode.";
|
|
12974
|
+
}
|
|
12975
|
+
else if (type === 'cell') {
|
|
12976
|
+
return `The AI will be able to see the code in ${title}`;
|
|
12977
|
+
}
|
|
12978
|
+
else if (type === 'variable') {
|
|
12979
|
+
return `The AI will receive a summary of the ${title} variable`;
|
|
12980
|
+
}
|
|
12981
|
+
else if (type === 'rule') {
|
|
12982
|
+
return `The AI will be guided by the ${title} rule`;
|
|
12983
|
+
}
|
|
12984
|
+
else if (type === 'db') {
|
|
12985
|
+
return `The AI will be able to access the ${title} database connection`;
|
|
12986
|
+
}
|
|
12987
|
+
return "This context will be included in your message to help the AI understand what you're working with";
|
|
12988
|
+
};
|
|
12989
|
+
return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "selected-context-container", onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), onClick: handleClick, "data-testid": "selected-context-container", "data-type": type, title: getTooltipText() },
|
|
11550
12990
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: `icon`, onClick: (e) => {
|
|
11551
12991
|
e.stopPropagation(); // Prevent triggering the button's onClick
|
|
11552
12992
|
onRemove();
|
|
11553
|
-
}, title: isHovered ? "Remove rule" : "Selected rule" }, isHovered && type !== 'active_cell' && type !== 'notebook' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "remove-icon" }, "X")) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "icon" }, icon))),
|
|
12993
|
+
}, title: isHovered ? "Remove rule" : "Selected rule" }, isHovered && type !== 'active_cell' && type !== 'notebook' && type !== 'line_selection' ? (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "remove-icon" }, "X")) : (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "icon" }, icon))),
|
|
11554
12994
|
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "rule-name" }, title)));
|
|
11555
12995
|
};
|
|
11556
12996
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SelectedContextContainer);
|
|
@@ -11790,6 +13230,125 @@ const useDebouncedFunction = (callback, delay) => {
|
|
|
11790
13230
|
};
|
|
11791
13231
|
|
|
11792
13232
|
|
|
13233
|
+
/***/ }),
|
|
13234
|
+
|
|
13235
|
+
/***/ "./lib/hooks/useLineSelection.js":
|
|
13236
|
+
/*!***************************************!*\
|
|
13237
|
+
!*** ./lib/hooks/useLineSelection.js ***!
|
|
13238
|
+
\***************************************/
|
|
13239
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
13240
|
+
|
|
13241
|
+
__webpack_require__.r(__webpack_exports__);
|
|
13242
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
13243
|
+
/* harmony export */ useLineSelection: () => (/* binding */ useLineSelection)
|
|
13244
|
+
/* harmony export */ });
|
|
13245
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
13246
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
13247
|
+
/* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/notebook */ "./lib/utils/notebook.js");
|
|
13248
|
+
/* harmony import */ var _useDebouncedFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useDebouncedFunction */ "./lib/hooks/useDebouncedFunction.js");
|
|
13249
|
+
/*
|
|
13250
|
+
* Copyright (c) Saga Inc.
|
|
13251
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
13252
|
+
*/
|
|
13253
|
+
|
|
13254
|
+
|
|
13255
|
+
|
|
13256
|
+
const NO_SELECTION = {
|
|
13257
|
+
cellId: '',
|
|
13258
|
+
cellNumber: 0,
|
|
13259
|
+
startLine: 0,
|
|
13260
|
+
endLine: 0,
|
|
13261
|
+
selectedCode: '',
|
|
13262
|
+
hasSelection: false
|
|
13263
|
+
};
|
|
13264
|
+
/**
|
|
13265
|
+
* Hook that tracks text selection in the active code cell.
|
|
13266
|
+
* Returns selection info when user has text selected (not just cursor position).
|
|
13267
|
+
*
|
|
13268
|
+
* @param notebookTracker - The notebook tracker to monitor
|
|
13269
|
+
* @param cellOrder - Map of cellId to cellNumber (1-indexed)
|
|
13270
|
+
* @returns LineSelectionInfo with selection details, or hasSelection: false if no selection
|
|
13271
|
+
*/
|
|
13272
|
+
const useLineSelection = (notebookTracker, cellOrder) => {
|
|
13273
|
+
const [selection, setSelection] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(NO_SELECTION);
|
|
13274
|
+
// Debounce selection updates to avoid excessive re-renders during text selection
|
|
13275
|
+
// `setSelection` is stable, so this keeps the debounced function stable too.
|
|
13276
|
+
const debouncedSetSelection = (0,_useDebouncedFunction__WEBPACK_IMPORTED_MODULE_1__.useDebouncedFunction)(setSelection, 100);
|
|
13277
|
+
// Get current selection from active cell
|
|
13278
|
+
const checkSelection = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
13279
|
+
const activeCell = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_2__.getActiveCell)(notebookTracker);
|
|
13280
|
+
if (!activeCell || activeCell.model.type !== 'code') {
|
|
13281
|
+
debouncedSetSelection(NO_SELECTION);
|
|
13282
|
+
return;
|
|
13283
|
+
}
|
|
13284
|
+
const cellId = activeCell.model.id;
|
|
13285
|
+
const codeCell = activeCell;
|
|
13286
|
+
const cmEditor = codeCell.editor;
|
|
13287
|
+
const editorView = cmEditor === null || cmEditor === void 0 ? void 0 : cmEditor.editor;
|
|
13288
|
+
if (!editorView) {
|
|
13289
|
+
debouncedSetSelection(NO_SELECTION);
|
|
13290
|
+
return;
|
|
13291
|
+
}
|
|
13292
|
+
const state = editorView.state;
|
|
13293
|
+
const mainSelection = state.selection.main;
|
|
13294
|
+
// Check if there's actual text selected (not just cursor)
|
|
13295
|
+
if (mainSelection.from === mainSelection.to) {
|
|
13296
|
+
debouncedSetSelection(NO_SELECTION);
|
|
13297
|
+
return;
|
|
13298
|
+
}
|
|
13299
|
+
// Get 0-indexed line numbers (matching citation format)
|
|
13300
|
+
// CodeMirror's lineAt().number is 1-indexed, so subtract 1
|
|
13301
|
+
const startLineInfo = state.doc.lineAt(mainSelection.from);
|
|
13302
|
+
const endLineInfo = state.doc.lineAt(mainSelection.to);
|
|
13303
|
+
const startLine = startLineInfo.number - 1;
|
|
13304
|
+
const endLine = endLineInfo.number - 1;
|
|
13305
|
+
const cellNumber = cellOrder.get(cellId) || 0;
|
|
13306
|
+
// Extract the full lines that contain the selection
|
|
13307
|
+
const selectedLines = [];
|
|
13308
|
+
for (let lineNum = startLineInfo.number; lineNum <= endLineInfo.number; lineNum++) {
|
|
13309
|
+
const line = state.doc.line(lineNum);
|
|
13310
|
+
selectedLines.push(line.text);
|
|
13311
|
+
}
|
|
13312
|
+
const selectedCode = selectedLines.join('\n');
|
|
13313
|
+
debouncedSetSelection({
|
|
13314
|
+
cellId,
|
|
13315
|
+
cellNumber,
|
|
13316
|
+
startLine,
|
|
13317
|
+
endLine,
|
|
13318
|
+
selectedCode,
|
|
13319
|
+
hasSelection: true
|
|
13320
|
+
});
|
|
13321
|
+
}, [notebookTracker, cellOrder, debouncedSetSelection]);
|
|
13322
|
+
// Poll for selection changes using document-level events
|
|
13323
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
13324
|
+
// Check selection on various events that might indicate selection change
|
|
13325
|
+
const handleSelectionChange = () => {
|
|
13326
|
+
checkSelection();
|
|
13327
|
+
};
|
|
13328
|
+
// Listen to selection changes at document level
|
|
13329
|
+
document.addEventListener('selectionchange', handleSelectionChange);
|
|
13330
|
+
// Also listen to mouseup for drag selections
|
|
13331
|
+
document.addEventListener('mouseup', handleSelectionChange);
|
|
13332
|
+
// Listen to keyup for keyboard selections (shift+arrow keys)
|
|
13333
|
+
document.addEventListener('keyup', handleSelectionChange);
|
|
13334
|
+
// Check on active cell change
|
|
13335
|
+
const handleActiveCellChanged = () => {
|
|
13336
|
+
checkSelection();
|
|
13337
|
+
};
|
|
13338
|
+
notebookTracker.activeCellChanged.connect(handleActiveCellChanged);
|
|
13339
|
+
// Initial check
|
|
13340
|
+
checkSelection();
|
|
13341
|
+
return () => {
|
|
13342
|
+
document.removeEventListener('selectionchange', handleSelectionChange);
|
|
13343
|
+
document.removeEventListener('mouseup', handleSelectionChange);
|
|
13344
|
+
document.removeEventListener('keyup', handleSelectionChange);
|
|
13345
|
+
notebookTracker.activeCellChanged.disconnect(handleActiveCellChanged);
|
|
13346
|
+
};
|
|
13347
|
+
}, [notebookTracker, checkSelection]);
|
|
13348
|
+
return selection;
|
|
13349
|
+
};
|
|
13350
|
+
|
|
13351
|
+
|
|
11793
13352
|
/***/ }),
|
|
11794
13353
|
|
|
11795
13354
|
/***/ "./lib/icons/AcceptIcon.js":
|
|
@@ -12304,6 +13863,34 @@ const TextIcon = () => (react__WEBPACK_IMPORTED_MODULE_0___default().createEleme
|
|
|
12304
13863
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TextIcon);
|
|
12305
13864
|
|
|
12306
13865
|
|
|
13866
|
+
/***/ }),
|
|
13867
|
+
|
|
13868
|
+
/***/ "./lib/icons/NotepadIcon.js":
|
|
13869
|
+
/*!**********************************!*\
|
|
13870
|
+
!*** ./lib/icons/NotepadIcon.js ***!
|
|
13871
|
+
\**********************************/
|
|
13872
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
13873
|
+
|
|
13874
|
+
__webpack_require__.r(__webpack_exports__);
|
|
13875
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
13876
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
13877
|
+
/* harmony export */ });
|
|
13878
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
13879
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
13880
|
+
/*
|
|
13881
|
+
* Copyright (c) Saga Inc.
|
|
13882
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
13883
|
+
*/
|
|
13884
|
+
|
|
13885
|
+
const NotepadIcon = () => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { width: "14", height: "14", viewBox: "0 0 100 100", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
13886
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("rect", { x: "18", y: "18", width: "64", height: "72", rx: "8", ry: "8", fill: "none", stroke: "currentColor", strokeWidth: "4", strokeLinecap: "round", strokeLinejoin: "round", opacity: "0.3" }),
|
|
13887
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("rect", { x: "10", y: "10", width: "64", height: "72", rx: "8", ry: "8", fill: "none", stroke: "currentColor", strokeWidth: "4", strokeLinecap: "round", strokeLinejoin: "round" }),
|
|
13888
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("line", { x1: "24", y1: "35", x2: "60", y2: "35", stroke: "currentColor", strokeWidth: "4", strokeLinecap: "round" }),
|
|
13889
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("line", { x1: "24", y1: "48", x2: "60", y2: "48", stroke: "currentColor", strokeWidth: "4", strokeLinecap: "round" }),
|
|
13890
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("line", { x1: "24", y1: "61", x2: "60", y2: "61", stroke: "currentColor", strokeWidth: "4", strokeLinecap: "round" })));
|
|
13891
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NotepadIcon);
|
|
13892
|
+
|
|
13893
|
+
|
|
12307
13894
|
/***/ }),
|
|
12308
13895
|
|
|
12309
13896
|
/***/ "./lib/icons/NucleausIcon.js":
|
|
@@ -12432,6 +14019,32 @@ const PlayButtonIcon = () => (react__WEBPACK_IMPORTED_MODULE_0___default().creat
|
|
|
12432
14019
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PlayButtonIcon);
|
|
12433
14020
|
|
|
12434
14021
|
|
|
14022
|
+
/***/ }),
|
|
14023
|
+
|
|
14024
|
+
/***/ "./lib/icons/QuestionIcon.js":
|
|
14025
|
+
/*!***********************************!*\
|
|
14026
|
+
!*** ./lib/icons/QuestionIcon.js ***!
|
|
14027
|
+
\***********************************/
|
|
14028
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
14029
|
+
|
|
14030
|
+
__webpack_require__.r(__webpack_exports__);
|
|
14031
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
14032
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
14033
|
+
/* harmony export */ });
|
|
14034
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
|
|
14035
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
14036
|
+
/*
|
|
14037
|
+
* Copyright (c) Saga Inc.
|
|
14038
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
14039
|
+
*/
|
|
14040
|
+
|
|
14041
|
+
const QuestionIcon = () => (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", { width: "14", height: "14", viewBox: "0 0 15 15", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
14042
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M7.50018 11.5909C7.87674 11.5909 8.182 11.2856 8.182 10.9091C8.182 10.5325 7.87674 10.2273 7.50018 10.2273C7.12362 10.2273 6.81836 10.5325 6.81836 10.9091C6.81836 11.2856 7.12362 11.5909 7.50018 11.5909Z", fill: "currentColor" }),
|
|
14043
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M7.74299 5.15462C7.41191 5.16915 7.23537 5.30235 7.17425 5.4322C7.0139 5.77291 6.60771 5.91912 6.267 5.75877C5.92629 5.59841 5.78008 5.19222 5.94044 4.85151C6.29647 4.09503 7.06347 3.81949 7.6832 3.79229C8.27933 3.76613 9.02119 3.95601 9.43162 4.49121C9.74745 4.90306 9.92489 5.42514 9.85323 5.97406C9.78058 6.53067 9.46309 7.02995 8.94794 7.40893C8.26004 7.91501 8.26125 8.17321 8.26143 8.21081C8.26143 8.21136 8.26144 8.21186 8.26144 8.21232C8.26144 8.58887 7.95618 8.89413 7.57962 8.89413C7.20306 8.89413 6.8978 8.58887 6.8978 8.21232C6.8978 7.56001 7.27722 6.94514 8.13987 6.31051C8.40503 6.11545 8.48394 5.92881 8.50107 5.79756C8.5192 5.65864 8.47982 5.49093 8.34953 5.32102C8.34036 5.30907 8.29056 5.25933 8.16587 5.21452C8.04681 5.17174 7.8971 5.14785 7.74299 5.15462Z", fill: "currentColor" }),
|
|
14044
|
+
react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", { d: "M7.5 15C3.34091 15 0 11.6591 0 7.5C0 3.34091 3.34091 0 7.5 0C11.6591 0 15 3.34091 15 7.5C15 11.6591 11.6591 15 7.5 15ZM7.5 1.36364C4.09091 1.36364 1.36364 4.09091 1.36364 7.5C1.36364 10.9091 4.09091 13.6364 7.5 13.6364C10.9091 13.6364 13.6364 10.9091 13.6364 7.5C13.6364 4.09091 10.9091 1.36364 7.5 1.36364Z", fill: "currentColor" })));
|
|
14045
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (QuestionIcon);
|
|
14046
|
+
|
|
14047
|
+
|
|
12435
14048
|
/***/ }),
|
|
12436
14049
|
|
|
12437
14050
|
/***/ "./lib/icons/RejectIcon.js":
|
|
@@ -12708,6 +14321,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
12708
14321
|
/* harmony import */ var _Extensions_NotebookFooter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Extensions/NotebookFooter */ "./lib/Extensions/NotebookFooter/index.js");
|
|
12709
14322
|
/* harmony import */ var _Extensions_MitoThemeLight__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Extensions/MitoThemeLight */ "./lib/Extensions/MitoThemeLight/index.js");
|
|
12710
14323
|
/* harmony import */ var _Extensions_AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Extensions/AppManager/ManageAppsPlugin */ "./lib/Extensions/AppManager/ManageAppsPlugin.js");
|
|
14324
|
+
/* harmony import */ var _Extensions_ChartWizard_ChartWizardPlugin__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Extensions/ChartWizard/ChartWizardPlugin */ "./lib/Extensions/ChartWizard/ChartWizardPlugin.js");
|
|
12711
14325
|
/*
|
|
12712
14326
|
* Copyright (c) Saga Inc.
|
|
12713
14327
|
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
@@ -12725,6 +14339,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
12725
14339
|
|
|
12726
14340
|
|
|
12727
14341
|
|
|
14342
|
+
|
|
12728
14343
|
// This is the main entry point to the mito-ai extension. It must export all of the top level
|
|
12729
14344
|
// extensions that we want to load.
|
|
12730
14345
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([
|
|
@@ -12740,7 +14355,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
12740
14355
|
_Extensions_VersionCheck__WEBPACK_IMPORTED_MODULE_9__.versionCheckPlugin,
|
|
12741
14356
|
_Extensions_NotebookFooter__WEBPACK_IMPORTED_MODULE_10__["default"],
|
|
12742
14357
|
_Extensions_AppManager_ManageAppsPlugin__WEBPACK_IMPORTED_MODULE_11__["default"],
|
|
12743
|
-
_Extensions_MitoThemeLight__WEBPACK_IMPORTED_MODULE_12__["default"]
|
|
14358
|
+
_Extensions_MitoThemeLight__WEBPACK_IMPORTED_MODULE_12__["default"],
|
|
14359
|
+
_Extensions_ChartWizard_ChartWizardPlugin__WEBPACK_IMPORTED_MODULE_13__["default"]
|
|
12744
14360
|
]);
|
|
12745
14361
|
|
|
12746
14362
|
|
|
@@ -12754,6 +14370,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
12754
14370
|
|
|
12755
14371
|
__webpack_require__.r(__webpack_exports__);
|
|
12756
14372
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
14373
|
+
/* harmony export */ convertChartCode: () => (/* binding */ convertChartCode),
|
|
12757
14374
|
/* harmony export */ getChatHistoryThread: () => (/* binding */ getChatHistoryThread),
|
|
12758
14375
|
/* harmony export */ getChatHistoryThreads: () => (/* binding */ getChatHistoryThreads),
|
|
12759
14376
|
/* harmony export */ getDatabaseConnections: () => (/* binding */ getDatabaseConnections),
|
|
@@ -12911,6 +14528,21 @@ const setUserKey = async (key, value) => {
|
|
|
12911
14528
|
}
|
|
12912
14529
|
return resp.data || '';
|
|
12913
14530
|
};
|
|
14531
|
+
/************************************
|
|
14532
|
+
|
|
14533
|
+
CHART WIZARD ENDPOINTS
|
|
14534
|
+
|
|
14535
|
+
************************************/
|
|
14536
|
+
const convertChartCode = async (code) => {
|
|
14537
|
+
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('chart-wizard', {
|
|
14538
|
+
method: 'POST',
|
|
14539
|
+
body: JSON.stringify({ code }),
|
|
14540
|
+
});
|
|
14541
|
+
if (resp.error) {
|
|
14542
|
+
throw new Error(resp.error.message);
|
|
14543
|
+
}
|
|
14544
|
+
return resp.data;
|
|
14545
|
+
};
|
|
12914
14546
|
const getChatHistoryThreads = async () => {
|
|
12915
14547
|
var _a;
|
|
12916
14548
|
const resp = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.requestAPI)('chat-history/threads');
|
|
@@ -13058,7 +14690,11 @@ const acceptAndRunCellUpdate = async (cellUpdate, notebookPanel) => {
|
|
|
13058
14690
|
// in other notebooks.
|
|
13059
14691
|
if (cellUpdate.type === 'new') {
|
|
13060
14692
|
// makes the cell the active cell
|
|
13061
|
-
(
|
|
14693
|
+
if (cellUpdate.after_cell_id === undefined || cellUpdate.after_cell_id === null) {
|
|
14694
|
+
console.error('after_cell_id is required for new cell creation');
|
|
14695
|
+
return;
|
|
14696
|
+
}
|
|
14697
|
+
(0,_notebook__WEBPACK_IMPORTED_MODULE_1__.createCodeCellAfterCellIDAndActivate)(notebookPanel, cellUpdate.after_cell_id);
|
|
13062
14698
|
}
|
|
13063
14699
|
else {
|
|
13064
14700
|
(0,_notebook__WEBPACK_IMPORTED_MODULE_1__.setActiveCellByIDInNotebookPanel)(notebookPanel, cellUpdate.id);
|
|
@@ -13155,6 +14791,12 @@ const retryIfExecutionError = async (notebookPanel, app, sendAgentSmartDebugMess
|
|
|
13155
14791
|
console.log('Error after running all cells:', result.errorMessage);
|
|
13156
14792
|
}
|
|
13157
14793
|
}
|
|
14794
|
+
else if (agentResponse.type === 'ask_user_question' || agentResponse.type === 'finished_task') {
|
|
14795
|
+
// When the agent asks a question during error retry, we should stop the agent execution
|
|
14796
|
+
// and wait for the user's response, just like in the main execution loop
|
|
14797
|
+
await markAgentForStopping();
|
|
14798
|
+
return 'interupted';
|
|
14799
|
+
}
|
|
13158
14800
|
else {
|
|
13159
14801
|
// Agent responded with an unexpected type for error fixing
|
|
13160
14802
|
return 'failure';
|
|
@@ -13625,24 +15267,62 @@ const processChatHistoryForErrorGrouping = (displayOptimizedChatHistory) => {
|
|
|
13625
15267
|
const processedDisplayOptimizedChatHistory = [];
|
|
13626
15268
|
let groupedErrorMessages = [];
|
|
13627
15269
|
for (let i = 0; i < displayOptimizedChatHistory.length; i++) {
|
|
13628
|
-
|
|
15270
|
+
let displayOptimizedChatItem = displayOptimizedChatHistory[i];
|
|
13629
15271
|
if (!displayOptimizedChatItem) {
|
|
13630
15272
|
continue;
|
|
13631
15273
|
}
|
|
15274
|
+
// Associate scratchpad results with their corresponding scratchpad tool calls
|
|
15275
|
+
// The scratchpad result is stored in the next message (the user message that follows the AI's scratchpad response)
|
|
15276
|
+
if (((_a = displayOptimizedChatItem.agentResponse) === null || _a === void 0 ? void 0 : _a.type) === 'scratchpad') {
|
|
15277
|
+
const nextIndex = i + 1;
|
|
15278
|
+
if (nextIndex < displayOptimizedChatHistory.length) {
|
|
15279
|
+
const nextItem = displayOptimizedChatHistory[nextIndex];
|
|
15280
|
+
if (nextItem === null || nextItem === void 0 ? void 0 : nextItem.scratchpadResult) {
|
|
15281
|
+
displayOptimizedChatItem = {
|
|
15282
|
+
...displayOptimizedChatItem,
|
|
15283
|
+
scratchpadResult: nextItem.scratchpadResult
|
|
15284
|
+
};
|
|
15285
|
+
}
|
|
15286
|
+
}
|
|
15287
|
+
}
|
|
13632
15288
|
const messageContent = (0,_strings__WEBPACK_IMPORTED_MODULE_0__.getContentStringFromMessage)(displayOptimizedChatItem.message);
|
|
13633
15289
|
const _isErrorFixupMessage = (0,_errors__WEBPACK_IMPORTED_MODULE_1__.isErrorFixupMessage)(displayOptimizedChatItem.promptType, displayOptimizedChatItem.message, messageContent);
|
|
13634
15290
|
if (_isErrorFixupMessage) {
|
|
13635
|
-
// If the current message is an error fixup message, we
|
|
13636
|
-
//
|
|
15291
|
+
// If the current message is an error fixup message, we add it to the current group.
|
|
15292
|
+
// This allows consecutive error/cell_update cycles to be grouped together, which
|
|
15293
|
+
// results in a collapsed UI that keeps the error-fixing flow out of the way for users.
|
|
15294
|
+
// For example: [error1, cellUpdate1, error2, askUserQuestion] →
|
|
15295
|
+
// [[error1, cellUpdate1, error2], askUserQuestion]
|
|
15296
|
+
// All the error-fixing is grouped together, and askUserQuestion displays separately with its UI.
|
|
13637
15297
|
groupedErrorMessages.push(displayOptimizedChatItem);
|
|
13638
15298
|
// Note: We check that the next message is an ai response to the error fixup message.
|
|
13639
15299
|
// If the user has stopped the agent, it might not be an ai response to the error fixup message.
|
|
13640
15300
|
const next_index = i + 1;
|
|
15301
|
+
const nextItem = displayOptimizedChatHistory[next_index];
|
|
13641
15302
|
if (next_index < displayOptimizedChatHistory.length &&
|
|
13642
|
-
(
|
|
13643
|
-
(
|
|
13644
|
-
|
|
13645
|
-
|
|
15303
|
+
(nextItem === null || nextItem === void 0 ? void 0 : nextItem.type) === 'openai message' &&
|
|
15304
|
+
(nextItem === null || nextItem === void 0 ? void 0 : nextItem.message.role) === 'assistant') {
|
|
15305
|
+
// Only group if the agent response is cell_update or run_all_cells.
|
|
15306
|
+
// Other types (finished_task, ask_user_question) should be displayed normally
|
|
15307
|
+
// with their UI components, not grouped with the error message.
|
|
15308
|
+
const agentResponseType = (_b = nextItem.agentResponse) === null || _b === void 0 ? void 0 : _b.type;
|
|
15309
|
+
if (agentResponseType === 'cell_update' || agentResponseType === 'run_all_cells') {
|
|
15310
|
+
groupedErrorMessages.push(nextItem);
|
|
15311
|
+
i = next_index;
|
|
15312
|
+
}
|
|
15313
|
+
else {
|
|
15314
|
+
// Don't group - push the error message as a standalone item and let the next message
|
|
15315
|
+
// be displayed normally with its UI component (finished_task, ask_user_question, etc.)
|
|
15316
|
+
processedDisplayOptimizedChatHistory.push(groupedErrorMessages);
|
|
15317
|
+
groupedErrorMessages = new Array();
|
|
15318
|
+
// Continue to next iteration - don't skip the next item, let it be processed normally
|
|
15319
|
+
}
|
|
15320
|
+
}
|
|
15321
|
+
else {
|
|
15322
|
+
// No next message or next message is not an assistant message
|
|
15323
|
+
// Push the error message as a standalone item
|
|
15324
|
+
processedDisplayOptimizedChatHistory.push(groupedErrorMessages);
|
|
15325
|
+
groupedErrorMessages = new Array();
|
|
13646
15326
|
}
|
|
13647
15327
|
}
|
|
13648
15328
|
else {
|
|
@@ -14377,7 +16057,7 @@ const GEMINI_3_PRO_MODEL_NAME = 'gemini-3-pro-preview';
|
|
|
14377
16057
|
__webpack_require__.r(__webpack_exports__);
|
|
14378
16058
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
14379
16059
|
/* harmony export */ applyCellEditorExtension: () => (/* binding */ applyCellEditorExtension),
|
|
14380
|
-
/* harmony export */
|
|
16060
|
+
/* harmony export */ createCodeCellAfterCellIDAndActivate: () => (/* binding */ createCodeCellAfterCellIDAndActivate),
|
|
14381
16061
|
/* harmony export */ didCellExecutionError: () => (/* binding */ didCellExecutionError),
|
|
14382
16062
|
/* harmony export */ getAIOptimizedCells: () => (/* binding */ getAIOptimizedCells),
|
|
14383
16063
|
/* harmony export */ getAIOptimizedCellsInNotebookPanel: () => (/* binding */ getAIOptimizedCellsInNotebookPanel),
|
|
@@ -14538,24 +16218,33 @@ const getAIOptimizedCellsInNotebookPanel = (notebookPanel) => {
|
|
|
14538
16218
|
}
|
|
14539
16219
|
return cells;
|
|
14540
16220
|
};
|
|
14541
|
-
function
|
|
16221
|
+
function createCodeCellAfterCellIDAndActivate(notebookPanel, afterCellID) {
|
|
14542
16222
|
/*
|
|
14543
|
-
Create a new code cell
|
|
16223
|
+
Create a new code cell after the cell with the given ID and make it the active cell.
|
|
16224
|
+
If afterCellID is 'new cell', insert at the very top of the notebook.
|
|
14544
16225
|
*/
|
|
14545
16226
|
const notebook = notebookPanel.content;
|
|
14546
16227
|
if (notebook === undefined) {
|
|
14547
16228
|
return;
|
|
14548
16229
|
}
|
|
14549
|
-
if (
|
|
14550
|
-
|
|
14551
|
-
// insertBelow makes the new cell the active cell
|
|
14552
|
-
_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__.NotebookActions.insertBelow(notebook);
|
|
14553
|
-
}
|
|
14554
|
-
else {
|
|
16230
|
+
if (afterCellID === 'new cell') {
|
|
16231
|
+
// Insert at the very top of the notebook
|
|
14555
16232
|
notebook.activeCellIndex = 0;
|
|
14556
16233
|
// insertAbove makes the new cell the active cell
|
|
14557
16234
|
_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__.NotebookActions.insertAbove(notebook);
|
|
14558
16235
|
}
|
|
16236
|
+
else {
|
|
16237
|
+
// Find the cell by ID and get its index
|
|
16238
|
+
const cellIndex = getCellIndexByIDInNotebookPanel(notebookPanel, afterCellID);
|
|
16239
|
+
if (cellIndex === undefined) {
|
|
16240
|
+
console.error(`Cell with ID ${afterCellID} not found`);
|
|
16241
|
+
return;
|
|
16242
|
+
}
|
|
16243
|
+
// Set the active cell to the cell we want to insert after
|
|
16244
|
+
notebook.activeCellIndex = cellIndex;
|
|
16245
|
+
// insertBelow makes the new cell the active cell
|
|
16246
|
+
_jupyterlab_notebook__WEBPACK_IMPORTED_MODULE_0__.NotebookActions.insertBelow(notebook);
|
|
16247
|
+
}
|
|
14559
16248
|
}
|
|
14560
16249
|
const didCellExecutionError = (cell) => {
|
|
14561
16250
|
var _a;
|
|
@@ -14847,6 +16536,143 @@ const getNotebookIDAndSetIfNonexistant = (notebookPanel) => {
|
|
|
14847
16536
|
};
|
|
14848
16537
|
|
|
14849
16538
|
|
|
16539
|
+
/***/ }),
|
|
16540
|
+
|
|
16541
|
+
/***/ "./lib/utils/scratchpadExecution.js":
|
|
16542
|
+
/*!******************************************!*\
|
|
16543
|
+
!*** ./lib/utils/scratchpadExecution.js ***!
|
|
16544
|
+
\******************************************/
|
|
16545
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
16546
|
+
|
|
16547
|
+
__webpack_require__.r(__webpack_exports__);
|
|
16548
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
16549
|
+
/* harmony export */ executeScratchpadCode: () => (/* binding */ executeScratchpadCode),
|
|
16550
|
+
/* harmony export */ formatScratchpadResult: () => (/* binding */ formatScratchpadResult)
|
|
16551
|
+
/* harmony export */ });
|
|
16552
|
+
/* harmony import */ var _jupyterlab_services__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @jupyterlab/services */ "webpack/sharing/consume/default/@jupyterlab/services");
|
|
16553
|
+
/* harmony import */ var _jupyterlab_services__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_services__WEBPACK_IMPORTED_MODULE_0__);
|
|
16554
|
+
/* harmony import */ var _Extensions_ErrorMimeRenderer_errorUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Extensions/ErrorMimeRenderer/errorUtils */ "./lib/Extensions/ErrorMimeRenderer/errorUtils.js");
|
|
16555
|
+
/*
|
|
16556
|
+
* Copyright (c) Saga Inc.
|
|
16557
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
16558
|
+
*/
|
|
16559
|
+
|
|
16560
|
+
|
|
16561
|
+
/**
|
|
16562
|
+
* Executes Python code silently in the kernel and captures the output.
|
|
16563
|
+
* This is used for scratchpad exploration work that shouldn't leave code in the notebook.
|
|
16564
|
+
*
|
|
16565
|
+
* @param notebookPanel - The notebook panel containing the kernel
|
|
16566
|
+
* @param code - The Python code to execute
|
|
16567
|
+
* @returns Promise resolving to the execution result with stdout, stderr, and any errors
|
|
16568
|
+
*/
|
|
16569
|
+
async function executeScratchpadCode(notebookPanel, code) {
|
|
16570
|
+
var _a;
|
|
16571
|
+
const kernel = (_a = notebookPanel.context.sessionContext.session) === null || _a === void 0 ? void 0 : _a.kernel;
|
|
16572
|
+
if (!kernel) {
|
|
16573
|
+
return {
|
|
16574
|
+
success: false,
|
|
16575
|
+
stdout: '',
|
|
16576
|
+
stderr: '',
|
|
16577
|
+
error: 'No kernel available'
|
|
16578
|
+
};
|
|
16579
|
+
}
|
|
16580
|
+
return new Promise((resolve) => {
|
|
16581
|
+
let stdout = '';
|
|
16582
|
+
let stderr = '';
|
|
16583
|
+
let errorMessage = undefined;
|
|
16584
|
+
let traceback = undefined;
|
|
16585
|
+
let hasError = false;
|
|
16586
|
+
// Request the kernel to execute the code silently
|
|
16587
|
+
const future = kernel.requestExecute({
|
|
16588
|
+
code: code,
|
|
16589
|
+
// Adding silent: true prevents an execute_input message from being sent
|
|
16590
|
+
silent: true
|
|
16591
|
+
});
|
|
16592
|
+
// Listen for output from the kernel
|
|
16593
|
+
future.onIOPub = (msg) => {
|
|
16594
|
+
// Handle stream messages (stdout/stderr)
|
|
16595
|
+
if (_jupyterlab_services__WEBPACK_IMPORTED_MODULE_0__.KernelMessage.isStreamMsg(msg)) {
|
|
16596
|
+
if (msg.content.name === 'stdout') {
|
|
16597
|
+
// Accumulate stdout output (may come in chunks)
|
|
16598
|
+
stdout += msg.content.text;
|
|
16599
|
+
}
|
|
16600
|
+
else if (msg.content.name === 'stderr') {
|
|
16601
|
+
// Accumulate stderr output (may come in chunks)
|
|
16602
|
+
stderr += msg.content.text;
|
|
16603
|
+
}
|
|
16604
|
+
}
|
|
16605
|
+
// Handle error messages
|
|
16606
|
+
else if (msg.header.msg_type === 'error') {
|
|
16607
|
+
hasError = true;
|
|
16608
|
+
const errorContent = msg.content;
|
|
16609
|
+
errorMessage = errorContent.ename + ': ' + errorContent.evalue;
|
|
16610
|
+
// Extract traceback if available
|
|
16611
|
+
if (errorContent.traceback && Array.isArray(errorContent.traceback)) {
|
|
16612
|
+
traceback = (0,_Extensions_ErrorMimeRenderer_errorUtils__WEBPACK_IMPORTED_MODULE_1__.getFullErrorMessageFromTraceback)(errorContent.traceback);
|
|
16613
|
+
}
|
|
16614
|
+
else if (errorContent.traceback) {
|
|
16615
|
+
traceback = String(errorContent.traceback);
|
|
16616
|
+
}
|
|
16617
|
+
}
|
|
16618
|
+
};
|
|
16619
|
+
// Handle execution completion
|
|
16620
|
+
future.done.then(() => {
|
|
16621
|
+
resolve({
|
|
16622
|
+
success: !hasError,
|
|
16623
|
+
stdout: stdout.trim(),
|
|
16624
|
+
stderr: stderr.trim(),
|
|
16625
|
+
error: errorMessage,
|
|
16626
|
+
traceback: traceback
|
|
16627
|
+
});
|
|
16628
|
+
}).catch((error) => {
|
|
16629
|
+
// Handle execution failure
|
|
16630
|
+
resolve({
|
|
16631
|
+
success: false,
|
|
16632
|
+
stdout: stdout.trim(),
|
|
16633
|
+
stderr: stderr.trim(),
|
|
16634
|
+
error: error.message || 'Execution failed',
|
|
16635
|
+
traceback: error.stack
|
|
16636
|
+
});
|
|
16637
|
+
});
|
|
16638
|
+
});
|
|
16639
|
+
}
|
|
16640
|
+
/**
|
|
16641
|
+
* Formats a scratchpad execution result into a string message for the agent.
|
|
16642
|
+
* Handles both success and error cases, formatting stdout, stderr, errors, and tracebacks.
|
|
16643
|
+
*
|
|
16644
|
+
* @param scratchpadResult - The result from executing scratchpad code
|
|
16645
|
+
* @returns Formatted string message containing the execution results
|
|
16646
|
+
*/
|
|
16647
|
+
function formatScratchpadResult(scratchpadResult) {
|
|
16648
|
+
let resultMessage = '';
|
|
16649
|
+
if (scratchpadResult.success) {
|
|
16650
|
+
if (scratchpadResult.stdout) {
|
|
16651
|
+
resultMessage += scratchpadResult.stdout;
|
|
16652
|
+
}
|
|
16653
|
+
if (scratchpadResult.stderr) {
|
|
16654
|
+
resultMessage += (resultMessage ? '\n' : '') + `[stderr]\n${scratchpadResult.stderr}`;
|
|
16655
|
+
}
|
|
16656
|
+
}
|
|
16657
|
+
else {
|
|
16658
|
+
resultMessage += '[Execution Error]\n';
|
|
16659
|
+
if (scratchpadResult.error) {
|
|
16660
|
+
resultMessage += `${scratchpadResult.error}\n`;
|
|
16661
|
+
}
|
|
16662
|
+
if (scratchpadResult.traceback) {
|
|
16663
|
+
resultMessage += `\n${scratchpadResult.traceback}`;
|
|
16664
|
+
}
|
|
16665
|
+
if (scratchpadResult.stdout) {
|
|
16666
|
+
resultMessage += `\n[stdout before error]\n${scratchpadResult.stdout}`;
|
|
16667
|
+
}
|
|
16668
|
+
if (scratchpadResult.stderr) {
|
|
16669
|
+
resultMessage += `\n[stderr]\n${scratchpadResult.stderr}`;
|
|
16670
|
+
}
|
|
16671
|
+
}
|
|
16672
|
+
return resultMessage;
|
|
16673
|
+
}
|
|
16674
|
+
|
|
16675
|
+
|
|
14850
16676
|
/***/ }),
|
|
14851
16677
|
|
|
14852
16678
|
/***/ "./lib/utils/scroll.js":
|
|
@@ -16279,6 +18105,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
16279
18105
|
|
|
16280
18106
|
.agent-component-header:hover {
|
|
16281
18107
|
background-color: var(--jp-layout-color3);
|
|
18108
|
+
opacity: 0.75;
|
|
16282
18109
|
}
|
|
16283
18110
|
|
|
16284
18111
|
.agent-component-header.no-border {
|
|
@@ -16289,6 +18116,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
16289
18116
|
border: none;
|
|
16290
18117
|
border-radius: 5px 5px 0 0;
|
|
16291
18118
|
background-color: var(--jp-layout-color2);
|
|
18119
|
+
opacity: 0.85;
|
|
16292
18120
|
}
|
|
16293
18121
|
|
|
16294
18122
|
.agent-component-header.error-fixup {
|
|
@@ -16345,7 +18173,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
16345
18173
|
|
|
16346
18174
|
.agent-component-header-expand-icon.expanded {
|
|
16347
18175
|
transform: rotate(90deg);
|
|
16348
|
-
} `, "",{"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;
|
|
18176
|
+
} `, "",{"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;IACzC,aAAa;AACjB;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,YAAY;IACZ,0BAA0B;IAC1B,yCAAyC;IACzC,aAAa;AACjB;;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,aAAa;IACb,mBAAmB;IACnB,QAAQ;IACR,cAAc;AAClB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,uBAAuB;IACvB,eAAe;IACf,kBAAkB;IAClB,+BAA+B;IAC/B,yDAAyD;IACzD,UAAU;AACd;;AAEA;IACI,yCAAyC;IACzC,+BAA+B;AACnC;;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 opacity: 0.75;\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 opacity: 0.85;\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-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.agent-component-header-action-button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: 4px;\n color: var(--jp-ui-font-color2);\n transition: background-color 0.15s ease, color 0.15s ease;\n padding: 0;\n}\n\n.agent-component-header-action-button:hover {\n background-color: var(--jp-layout-color3);\n color: var(--jp-ui-font-color1);\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":""}]);
|
|
16349
18177
|
// Exports
|
|
16350
18178
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
16351
18179
|
|
|
@@ -16771,65 +18599,293 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
16771
18599
|
margin-bottom: 4px;
|
|
16772
18600
|
}
|
|
16773
18601
|
|
|
16774
|
-
.app-item-status-container {
|
|
16775
|
-
display: flex;
|
|
16776
|
-
align-items: center;
|
|
16777
|
-
margin-bottom: 4px;
|
|
18602
|
+
.app-item-status-container {
|
|
18603
|
+
display: flex;
|
|
18604
|
+
align-items: center;
|
|
18605
|
+
margin-bottom: 4px;
|
|
18606
|
+
}
|
|
18607
|
+
|
|
18608
|
+
.app-item-status-indicator {
|
|
18609
|
+
display: inline-block;
|
|
18610
|
+
width: 8px;
|
|
18611
|
+
height: 8px;
|
|
18612
|
+
border-radius: 50%;
|
|
18613
|
+
margin-right: 6px;
|
|
18614
|
+
}
|
|
18615
|
+
|
|
18616
|
+
.app-item-status-text {
|
|
18617
|
+
color: var(--jp-ui-font-color2);
|
|
18618
|
+
font-size: 12px;
|
|
18619
|
+
}
|
|
18620
|
+
|
|
18621
|
+
.app-item-last-deployed {
|
|
18622
|
+
color: var(--jp-ui-font-color2);
|
|
18623
|
+
font-size: 11px;
|
|
18624
|
+
}
|
|
18625
|
+
|
|
18626
|
+
.app-item-url-container {
|
|
18627
|
+
display: flex;
|
|
18628
|
+
align-items: center;
|
|
18629
|
+
background-color: var(--jp-layout-color1);
|
|
18630
|
+
border: 1px solid var(--jp-border-color2);
|
|
18631
|
+
border-radius: 3px;
|
|
18632
|
+
padding: 6px 8px;
|
|
18633
|
+
}
|
|
18634
|
+
|
|
18635
|
+
.app-item-url {
|
|
18636
|
+
flex: 1;
|
|
18637
|
+
color: var(--jp-ui-font-color1);
|
|
18638
|
+
font-size: 11px;
|
|
18639
|
+
overflow: hidden;
|
|
18640
|
+
text-overflow: ellipsis;
|
|
18641
|
+
white-space: nowrap;
|
|
18642
|
+
font-family: var(--jp-code-font-family);
|
|
18643
|
+
}
|
|
18644
|
+
|
|
18645
|
+
.app-item-copy-button {
|
|
18646
|
+
border: none;
|
|
18647
|
+
background: transparent;
|
|
18648
|
+
cursor: pointer;
|
|
18649
|
+
padding: 2px;
|
|
18650
|
+
display: flex;
|
|
18651
|
+
align-items: center;
|
|
18652
|
+
justify-content: center;
|
|
18653
|
+
margin-left: 8px;
|
|
18654
|
+
border-radius: 2px;
|
|
18655
|
+
}
|
|
18656
|
+
|
|
18657
|
+
.app-item-copy-button:hover {
|
|
18658
|
+
background-color: var(--jp-layout-color2);
|
|
18659
|
+
}
|
|
18660
|
+
`, "",{"version":3,"sources":["webpack://./style/AppsList.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,kBAAkB;AAClB;EACE,aAAa;EACb,sBAAsB;EACtB,YAAY;EACZ,eAAe;EACf,qCAAqC;EACrC,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,aAAa;EACb,cAAc;EACd,gDAAgD;AAClD;;AAEA;EACE,OAAO;EACP,gBAAgB;EAChB,aAAa;EACb,aAAa;AACf;;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,yCAAyC;EACzC,yCAAyC;EACzC,kBAAkB;EAClB,kBAAkB;EAClB,kBAAkB;EAClB,aAAa;EACb,sBAAsB;EACtB,mBAAmB;EACnB,SAAS;AACX;;AAEA;EACE,eAAe;EACf,iBAAiB;EACjB,qCAAqC;AACvC;;AAEA;EACE,eAAe;EACf,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 display: flex;\n flex-direction: column;\n height: 100%;\n font-size: 13px;\n font-family: var(--jp-ui-font-family);\n overflow: hidden;\n}\n\n.apps-list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n flex-shrink: 0;\n border-bottom: 1px solid var(--jp-border-color2);\n}\n\n.apps-list-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n min-height: 0;\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-auth-message {\n color: var(--jp-ui-font-color1);\n background-color: var(--jp-layout-color0);\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n padding: 24px 16px;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.apps-list-auth-text {\n font-size: 14px;\n font-weight: bold;\n font-family: var(--jp-ui-font-family);\n}\n\n.apps-list-auth-login-button {\n font-size: 13px;\n min-width: 96px;\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":""}]);
|
|
18661
|
+
// Exports
|
|
18662
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
18663
|
+
|
|
18664
|
+
|
|
18665
|
+
/***/ }),
|
|
18666
|
+
|
|
18667
|
+
/***/ "./node_modules/css-loader/dist/cjs.js!./style/AskUserQuestionToolUI.css":
|
|
18668
|
+
/*!*******************************************************************************!*\
|
|
18669
|
+
!*** ./node_modules/css-loader/dist/cjs.js!./style/AskUserQuestionToolUI.css ***!
|
|
18670
|
+
\*******************************************************************************/
|
|
18671
|
+
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
18672
|
+
|
|
18673
|
+
__webpack_require__.r(__webpack_exports__);
|
|
18674
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
18675
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
18676
|
+
/* harmony export */ });
|
|
18677
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
|
|
18678
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
18679
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
|
18680
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
18681
|
+
// Imports
|
|
18682
|
+
|
|
18683
|
+
|
|
18684
|
+
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
18685
|
+
// Module
|
|
18686
|
+
___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
18687
|
+
* Copyright (c) Saga Inc.
|
|
18688
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
18689
|
+
*/
|
|
18690
|
+
|
|
18691
|
+
/* Active mode: purple border with glow effect */
|
|
18692
|
+
.ask-user-question-active {
|
|
18693
|
+
border: 2px solid var(--jp-brand-color1) !important;
|
|
18694
|
+
border-radius: 5px !important;
|
|
18695
|
+
box-shadow: 0 0 8px rgba(76, 29, 149, 0.2), 0 0 16px rgba(76, 29, 149, 0.1), 0 0 2px rgba(76, 29, 149, 0.15) inset;
|
|
18696
|
+
background-color: var(--jp-layout-color1);
|
|
18697
|
+
}
|
|
18698
|
+
|
|
18699
|
+
.ask-user-question-container {
|
|
18700
|
+
flex-direction: column;
|
|
18701
|
+
align-items: flex-start;
|
|
18702
|
+
padding: 12px;
|
|
18703
|
+
}
|
|
18704
|
+
|
|
18705
|
+
.ask-user-question-container .agent-tool-ui-content {
|
|
18706
|
+
width: 100%;
|
|
18707
|
+
flex-direction: column;
|
|
18708
|
+
align-items: flex-start;
|
|
18709
|
+
gap: 12px;
|
|
18710
|
+
}
|
|
18711
|
+
|
|
18712
|
+
/* Purple pill badge for active mode */
|
|
18713
|
+
.ask-user-question-pill {
|
|
18714
|
+
display: inline-flex;
|
|
18715
|
+
align-items: center;
|
|
18716
|
+
gap: 6px;
|
|
18717
|
+
padding: 4px 10px;
|
|
18718
|
+
background-color: var(--purple-300);
|
|
18719
|
+
border-radius: 12px;
|
|
18720
|
+
color: var(--purple-700);
|
|
18721
|
+
font-size: 11px;
|
|
18722
|
+
font-weight: 500;
|
|
18723
|
+
line-height: 1;
|
|
18724
|
+
}
|
|
18725
|
+
|
|
18726
|
+
.ask-user-question-pill svg {
|
|
18727
|
+
width: 12px;
|
|
18728
|
+
height: 12px;
|
|
18729
|
+
flex-shrink: 0;
|
|
18730
|
+
}
|
|
18731
|
+
|
|
18732
|
+
.ask-user-question-pill-text {
|
|
18733
|
+
white-space: nowrap;
|
|
18734
|
+
}
|
|
18735
|
+
|
|
18736
|
+
.ask-user-question-content {
|
|
18737
|
+
display: flex;
|
|
18738
|
+
flex-direction: column;
|
|
18739
|
+
gap: 10px;
|
|
18740
|
+
width: 100%;
|
|
18741
|
+
margin-left: 0;
|
|
18742
|
+
}
|
|
18743
|
+
|
|
18744
|
+
.ask-user-question-message {
|
|
18745
|
+
color: var(--jp-ui-font-color1);
|
|
18746
|
+
font-size: var(--jp-ui-font-size1);
|
|
18747
|
+
line-height: 1.5;
|
|
18748
|
+
}
|
|
18749
|
+
|
|
18750
|
+
.ask-user-question-question {
|
|
18751
|
+
color: var(--jp-ui-font-color0);
|
|
18752
|
+
font-size: var(--jp-ui-font-size1);
|
|
18753
|
+
font-weight: 500;
|
|
18754
|
+
line-height: 1.5;
|
|
18755
|
+
}
|
|
18756
|
+
|
|
18757
|
+
.ask-user-question-answers {
|
|
18758
|
+
display: flex;
|
|
18759
|
+
flex-direction: column;
|
|
18760
|
+
gap: 0;
|
|
18761
|
+
width: 100%;
|
|
18762
|
+
margin-top: 4px;
|
|
18763
|
+
border-radius: 4px;
|
|
18764
|
+
overflow: hidden;
|
|
18765
|
+
}
|
|
18766
|
+
|
|
18767
|
+
.ask-user-question-answer-button {
|
|
18768
|
+
display: flex;
|
|
18769
|
+
align-items: center;
|
|
18770
|
+
gap: 10px;
|
|
18771
|
+
padding: 10px 14px;
|
|
18772
|
+
background-color: var(--jp-layout-color1);
|
|
18773
|
+
border: none;
|
|
18774
|
+
border-bottom: 1px solid var(--jp-border-color2);
|
|
18775
|
+
border-radius: 0;
|
|
18776
|
+
color: var(--jp-ui-font-color1);
|
|
18777
|
+
font-size: var(--jp-ui-font-size1);
|
|
18778
|
+
cursor: pointer;
|
|
18779
|
+
transition: background-color 0.2s ease;
|
|
18780
|
+
text-align: left;
|
|
18781
|
+
width: 100%;
|
|
18782
|
+
}
|
|
18783
|
+
|
|
18784
|
+
.ask-user-question-answer-button:last-child {
|
|
18785
|
+
border-bottom: none;
|
|
18786
|
+
}
|
|
18787
|
+
|
|
18788
|
+
.ask-user-question-answer-button:hover:not(:disabled) {
|
|
18789
|
+
background-color: var(--jp-layout-color2);
|
|
18790
|
+
color: var(--jp-ui-font-color0);
|
|
18791
|
+
}
|
|
18792
|
+
|
|
18793
|
+
.ask-user-question-answer-button:active:not(:disabled) {
|
|
18794
|
+
background-color: var(--jp-layout-color3);
|
|
18795
|
+
}
|
|
18796
|
+
|
|
18797
|
+
.ask-user-question-answer-button:disabled {
|
|
18798
|
+
opacity: 0.6;
|
|
18799
|
+
cursor: not-allowed;
|
|
18800
|
+
}
|
|
18801
|
+
|
|
18802
|
+
.ask-user-question-radio-icon {
|
|
18803
|
+
flex-shrink: 0;
|
|
18804
|
+
color: var(--jp-ui-font-color2);
|
|
18805
|
+
width: 16px;
|
|
18806
|
+
height: 16px;
|
|
18807
|
+
}
|
|
18808
|
+
|
|
18809
|
+
.ask-user-question-answer-button:hover:not(:disabled) .ask-user-question-radio-icon {
|
|
18810
|
+
color: var(--jp-brand-color1);
|
|
18811
|
+
}
|
|
18812
|
+
|
|
18813
|
+
.ask-user-question-answer-text {
|
|
18814
|
+
flex: 1;
|
|
18815
|
+
text-align: left;
|
|
18816
|
+
}
|
|
18817
|
+
|
|
18818
|
+
.ask-user-question-subtext {
|
|
18819
|
+
color: var(--jp-ui-font-color2);
|
|
18820
|
+
font-size: 11px;
|
|
18821
|
+
line-height: 1.4;
|
|
18822
|
+
margin-top: 8px;
|
|
18823
|
+
font-style: italic;
|
|
18824
|
+
opacity: 0.7;
|
|
18825
|
+
}
|
|
18826
|
+
|
|
18827
|
+
/* Align subtext with radio button circles when options are present */
|
|
18828
|
+
.ask-user-question-answers + .ask-user-question-subtext {
|
|
18829
|
+
padding-left: 14px; /* Matches button left padding to align with radio button circles */
|
|
16778
18830
|
}
|
|
16779
18831
|
|
|
16780
|
-
|
|
16781
|
-
|
|
16782
|
-
|
|
16783
|
-
|
|
16784
|
-
|
|
16785
|
-
|
|
18832
|
+
/* Collapsed mode styles */
|
|
18833
|
+
.ask-user-question-collapsed {
|
|
18834
|
+
display: flex;
|
|
18835
|
+
flex-direction: column;
|
|
18836
|
+
align-items: stretch;
|
|
18837
|
+
justify-content: start;
|
|
18838
|
+
background-color: transparent;
|
|
18839
|
+
margin: 0 0;
|
|
18840
|
+
color: var(--jp-ui-font-color2);
|
|
18841
|
+
overflow: hidden;
|
|
16786
18842
|
}
|
|
16787
18843
|
|
|
16788
|
-
.
|
|
16789
|
-
|
|
16790
|
-
|
|
18844
|
+
.ask-user-question-collapsed.expanded {
|
|
18845
|
+
border: 1px solid var(--jp-cell-editor-border-color);
|
|
18846
|
+
border-radius: 5px;
|
|
18847
|
+
background-color: var(--chat-background-color);
|
|
18848
|
+
margin-bottom: 5px;
|
|
16791
18849
|
}
|
|
16792
18850
|
|
|
16793
|
-
.
|
|
16794
|
-
|
|
16795
|
-
|
|
18851
|
+
.ask-user-question-collapsed-content {
|
|
18852
|
+
display: flex;
|
|
18853
|
+
flex-direction: column;
|
|
18854
|
+
gap: 6px;
|
|
18855
|
+
flex: 1;
|
|
16796
18856
|
}
|
|
16797
18857
|
|
|
16798
|
-
.
|
|
16799
|
-
|
|
16800
|
-
|
|
16801
|
-
|
|
16802
|
-
|
|
16803
|
-
border-radius: 3px;
|
|
16804
|
-
padding: 6px 8px;
|
|
18858
|
+
.ask-user-question-collapsed .ask-user-question-question {
|
|
18859
|
+
color: var(--jp-ui-font-color1);
|
|
18860
|
+
font-size: var(--jp-ui-font-size1);
|
|
18861
|
+
font-weight: 500;
|
|
18862
|
+
line-height: 1.5;
|
|
16805
18863
|
}
|
|
16806
18864
|
|
|
16807
|
-
.
|
|
16808
|
-
|
|
16809
|
-
|
|
16810
|
-
|
|
16811
|
-
|
|
16812
|
-
|
|
16813
|
-
|
|
16814
|
-
font-family: var(--jp-code-font-family);
|
|
18865
|
+
.ask-user-question-collapsed-answers {
|
|
18866
|
+
margin: 0;
|
|
18867
|
+
padding-left: 20px;
|
|
18868
|
+
color: var(--jp-ui-font-color1);
|
|
18869
|
+
font-size: var(--jp-ui-font-size1);
|
|
18870
|
+
line-height: 1.5;
|
|
18871
|
+
list-style-type: disc;
|
|
16815
18872
|
}
|
|
16816
18873
|
|
|
16817
|
-
.
|
|
16818
|
-
|
|
16819
|
-
background: transparent;
|
|
16820
|
-
cursor: pointer;
|
|
16821
|
-
padding: 2px;
|
|
16822
|
-
display: flex;
|
|
16823
|
-
align-items: center;
|
|
16824
|
-
justify-content: center;
|
|
16825
|
-
margin-left: 8px;
|
|
16826
|
-
border-radius: 2px;
|
|
18874
|
+
.ask-user-question-collapsed-answers li {
|
|
18875
|
+
margin: 4px 0;
|
|
16827
18876
|
}
|
|
16828
18877
|
|
|
16829
|
-
|
|
16830
|
-
|
|
18878
|
+
/* Expanded content for collapsed mode */
|
|
18879
|
+
.ask-user-question-expanded-content {
|
|
18880
|
+
padding: 10px var(--chat-taskpane-tool-call-horizontal-padding);
|
|
18881
|
+
background-color: transparent;
|
|
18882
|
+
color: var(--jp-ui-font-color1);
|
|
18883
|
+
white-space: pre-wrap;
|
|
18884
|
+
word-break: break-word;
|
|
18885
|
+
border: none;
|
|
18886
|
+
border-radius: 0;
|
|
16831
18887
|
}
|
|
16832
|
-
`, "",{"version":3,"sources":["webpack://./style/
|
|
18888
|
+
`, "",{"version":3,"sources":["webpack://./style/AskUserQuestionToolUI.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,gDAAgD;AAChD;IACI,mDAAmD;IACnD,6BAA6B;IAC7B,kHAAkH;IAClH,yCAAyC;AAC7C;;AAEA;IACI,sBAAsB;IACtB,uBAAuB;IACvB,aAAa;AACjB;;AAEA;IACI,WAAW;IACX,sBAAsB;IACtB,uBAAuB;IACvB,SAAS;AACb;;AAEA,sCAAsC;AACtC;IACI,oBAAoB;IACpB,mBAAmB;IACnB,QAAQ;IACR,iBAAiB;IACjB,mCAAmC;IACnC,mBAAmB;IACnB,wBAAwB;IACxB,eAAe;IACf,gBAAgB;IAChB,cAAc;AAClB;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,cAAc;AAClB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,SAAS;IACT,WAAW;IACX,cAAc;AAClB;;AAEA;IACI,+BAA+B;IAC/B,kCAAkC;IAClC,gBAAgB;AACpB;;AAEA;IACI,+BAA+B;IAC/B,kCAAkC;IAClC,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,MAAM;IACN,WAAW;IACX,eAAe;IACf,kBAAkB;IAClB,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,SAAS;IACT,kBAAkB;IAClB,yCAAyC;IACzC,YAAY;IACZ,gDAAgD;IAChD,gBAAgB;IAChB,+BAA+B;IAC/B,kCAAkC;IAClC,eAAe;IACf,sCAAsC;IACtC,gBAAgB;IAChB,WAAW;AACf;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,yCAAyC;IACzC,+BAA+B;AACnC;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,YAAY;IACZ,mBAAmB;AACvB;;AAEA;IACI,cAAc;IACd,+BAA+B;IAC/B,WAAW;IACX,YAAY;AAChB;;AAEA;IACI,6BAA6B;AACjC;;AAEA;IACI,OAAO;IACP,gBAAgB;AACpB;;AAEA;IACI,+BAA+B;IAC/B,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB;;AAEA,qEAAqE;AACrE;IACI,kBAAkB,EAAE,mEAAmE;AAC3F;;AAEA,0BAA0B;AAC1B;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,8CAA8C;IAC9C,kBAAkB;AACtB;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,QAAQ;IACR,OAAO;AACX;;AAEA;IACI,+BAA+B;IAC/B,kCAAkC;IAClC,gBAAgB;IAChB,gBAAgB;AACpB;;AAEA;IACI,SAAS;IACT,kBAAkB;IAClB,+BAA+B;IAC/B,kCAAkC;IAClC,gBAAgB;IAChB,qBAAqB;AACzB;;AAEA;IACI,aAAa;AACjB;;AAEA,wCAAwC;AACxC;IACI,+DAA+D;IAC/D,6BAA6B;IAC7B,+BAA+B;IAC/B,qBAAqB;IACrB,sBAAsB;IACtB,YAAY;IACZ,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/* Active mode: purple border with glow effect */\n.ask-user-question-active {\n border: 2px solid var(--jp-brand-color1) !important;\n border-radius: 5px !important;\n box-shadow: 0 0 8px rgba(76, 29, 149, 0.2), 0 0 16px rgba(76, 29, 149, 0.1), 0 0 2px rgba(76, 29, 149, 0.15) inset;\n background-color: var(--jp-layout-color1);\n}\n\n.ask-user-question-container {\n flex-direction: column;\n align-items: flex-start;\n padding: 12px;\n}\n\n.ask-user-question-container .agent-tool-ui-content {\n width: 100%;\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n}\n\n/* Purple pill badge for active mode */\n.ask-user-question-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background-color: var(--purple-300);\n border-radius: 12px;\n color: var(--purple-700);\n font-size: 11px;\n font-weight: 500;\n line-height: 1;\n}\n\n.ask-user-question-pill svg {\n width: 12px;\n height: 12px;\n flex-shrink: 0;\n}\n\n.ask-user-question-pill-text {\n white-space: nowrap;\n}\n\n.ask-user-question-content {\n display: flex;\n flex-direction: column;\n gap: 10px;\n width: 100%;\n margin-left: 0;\n}\n\n.ask-user-question-message {\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size1);\n line-height: 1.5;\n}\n\n.ask-user-question-question {\n color: var(--jp-ui-font-color0);\n font-size: var(--jp-ui-font-size1);\n font-weight: 500;\n line-height: 1.5;\n}\n\n.ask-user-question-answers {\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 100%;\n margin-top: 4px;\n border-radius: 4px;\n overflow: hidden;\n}\n\n.ask-user-question-answer-button {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n background-color: var(--jp-layout-color1);\n border: none;\n border-bottom: 1px solid var(--jp-border-color2);\n border-radius: 0;\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size1);\n cursor: pointer;\n transition: background-color 0.2s ease;\n text-align: left;\n width: 100%;\n}\n\n.ask-user-question-answer-button:last-child {\n border-bottom: none;\n}\n\n.ask-user-question-answer-button:hover:not(:disabled) {\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color0);\n}\n\n.ask-user-question-answer-button:active:not(:disabled) {\n background-color: var(--jp-layout-color3);\n}\n\n.ask-user-question-answer-button:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.ask-user-question-radio-icon {\n flex-shrink: 0;\n color: var(--jp-ui-font-color2);\n width: 16px;\n height: 16px;\n}\n\n.ask-user-question-answer-button:hover:not(:disabled) .ask-user-question-radio-icon {\n color: var(--jp-brand-color1);\n}\n\n.ask-user-question-answer-text {\n flex: 1;\n text-align: left;\n}\n\n.ask-user-question-subtext {\n color: var(--jp-ui-font-color2);\n font-size: 11px;\n line-height: 1.4;\n margin-top: 8px;\n font-style: italic;\n opacity: 0.7;\n}\n\n/* Align subtext with radio button circles when options are present */\n.ask-user-question-answers + .ask-user-question-subtext {\n padding-left: 14px; /* Matches button left padding to align with radio button circles */\n}\n\n/* Collapsed mode styles */\n.ask-user-question-collapsed {\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.ask-user-question-collapsed.expanded {\n border: 1px solid var(--jp-cell-editor-border-color);\n border-radius: 5px;\n background-color: var(--chat-background-color);\n margin-bottom: 5px;\n}\n\n.ask-user-question-collapsed-content {\n display: flex;\n flex-direction: column;\n gap: 6px;\n flex: 1;\n}\n\n.ask-user-question-collapsed .ask-user-question-question {\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size1);\n font-weight: 500;\n line-height: 1.5;\n}\n\n.ask-user-question-collapsed-answers {\n margin: 0;\n padding-left: 20px;\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size1);\n line-height: 1.5;\n list-style-type: disc;\n}\n\n.ask-user-question-collapsed-answers li {\n margin: 4px 0;\n}\n\n/* Expanded content for collapsed mode */\n.ask-user-question-expanded-content {\n padding: 10px var(--chat-taskpane-tool-call-horizontal-padding);\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"],"sourceRoot":""}]);
|
|
16833
18889
|
// Exports
|
|
16834
18890
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
16835
18891
|
|
|
@@ -17463,62 +19519,288 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
17463
19519
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
17464
19520
|
|
|
17465
19521
|
|
|
17466
|
-
/***/ }),
|
|
19522
|
+
/***/ }),
|
|
19523
|
+
|
|
19524
|
+
/***/ "./node_modules/css-loader/dist/cjs.js!./style/CellReference.css":
|
|
19525
|
+
/*!***********************************************************************!*\
|
|
19526
|
+
!*** ./node_modules/css-loader/dist/cjs.js!./style/CellReference.css ***!
|
|
19527
|
+
\***********************************************************************/
|
|
19528
|
+
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
19529
|
+
|
|
19530
|
+
__webpack_require__.r(__webpack_exports__);
|
|
19531
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
19532
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
19533
|
+
/* harmony export */ });
|
|
19534
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
|
|
19535
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
19536
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
|
19537
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
19538
|
+
// Imports
|
|
19539
|
+
|
|
19540
|
+
|
|
19541
|
+
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
19542
|
+
// Module
|
|
19543
|
+
___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
19544
|
+
* Copyright (c) Saga Inc.
|
|
19545
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
19546
|
+
*/
|
|
19547
|
+
|
|
19548
|
+
/* Cell reference links in chat messages - styled as standard links */
|
|
19549
|
+
.cell-reference {
|
|
19550
|
+
color: var(--purple-600);
|
|
19551
|
+
text-decoration: underline;
|
|
19552
|
+
cursor: pointer;
|
|
19553
|
+
font-weight: 500;
|
|
19554
|
+
padding: 1px 5px;
|
|
19555
|
+
border-radius: 3px;
|
|
19556
|
+
position: relative;
|
|
19557
|
+
vertical-align: baseline;
|
|
19558
|
+
}
|
|
19559
|
+
|
|
19560
|
+
.cell-reference:hover {
|
|
19561
|
+
background-color: var(--purple-300);
|
|
19562
|
+
color: var(--purple-700);
|
|
19563
|
+
}
|
|
19564
|
+
|
|
19565
|
+
/* Greyed out style for missing/unresolved cell references (deleted or in different notebook) */
|
|
19566
|
+
.cell-reference.cell-reference-missing {
|
|
19567
|
+
color: var(--jp-ui-font-color2);
|
|
19568
|
+
text-decoration: none;
|
|
19569
|
+
cursor: default;
|
|
19570
|
+
opacity: 0.6;
|
|
19571
|
+
}
|
|
19572
|
+
|
|
19573
|
+
.cell-reference.cell-reference-missing:hover {
|
|
19574
|
+
background-color: var(--jp-layout-color3);
|
|
19575
|
+
color: var(--jp-ui-font-color2);
|
|
19576
|
+
}
|
|
19577
|
+
`, "",{"version":3,"sources":["webpack://./style/CellReference.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,qEAAqE;AACrE;IACI,wBAAwB;IACxB,0BAA0B;IAC1B,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;IAClB,kBAAkB;IAClB,wBAAwB;AAC5B;;AAEA;IACI,mCAAmC;IACnC,wBAAwB;AAC5B;;AAEA,+FAA+F;AAC/F;IACI,+BAA+B;IAC/B,qBAAqB;IACrB,eAAe;IACf,YAAY;AAChB;;AAEA;IACI,yCAAyC;IACzC,+BAA+B;AACnC","sourcesContent":["/*\n * Copyright (c) Saga Inc.\n * Distributed under the terms of the GNU Affero General Public License v3.0 License.\n */\n\n/* Cell reference links in chat messages - styled as standard links */\n.cell-reference {\n color: var(--purple-600);\n text-decoration: underline;\n cursor: pointer;\n font-weight: 500;\n padding: 1px 5px;\n border-radius: 3px;\n position: relative;\n vertical-align: baseline;\n}\n\n.cell-reference:hover {\n background-color: var(--purple-300);\n color: var(--purple-700);\n}\n\n/* Greyed out style for missing/unresolved cell references (deleted or in different notebook) */\n.cell-reference.cell-reference-missing {\n color: var(--jp-ui-font-color2);\n text-decoration: none;\n cursor: default;\n opacity: 0.6;\n}\n\n.cell-reference.cell-reference-missing:hover {\n background-color: var(--jp-layout-color3);\n color: var(--jp-ui-font-color2);\n}\n"],"sourceRoot":""}]);
|
|
19578
|
+
// Exports
|
|
19579
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
19580
|
+
|
|
19581
|
+
|
|
19582
|
+
/***/ }),
|
|
19583
|
+
|
|
19584
|
+
/***/ "./node_modules/css-loader/dist/cjs.js!./style/ChartWizardPlugin.css":
|
|
19585
|
+
/*!***************************************************************************!*\
|
|
19586
|
+
!*** ./node_modules/css-loader/dist/cjs.js!./style/ChartWizardPlugin.css ***!
|
|
19587
|
+
\***************************************************************************/
|
|
19588
|
+
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
19589
|
+
|
|
19590
|
+
__webpack_require__.r(__webpack_exports__);
|
|
19591
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
19592
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
19593
|
+
/* harmony export */ });
|
|
19594
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
|
|
19595
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
19596
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
|
19597
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
19598
|
+
// Imports
|
|
19599
|
+
|
|
19600
|
+
|
|
19601
|
+
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
19602
|
+
// Module
|
|
19603
|
+
___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
19604
|
+
* Copyright (c) Saga Inc.
|
|
19605
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
19606
|
+
*/
|
|
19607
|
+
|
|
19608
|
+
/* Position the button container in the upper right */
|
|
19609
|
+
.chart-wizard-button-container {
|
|
19610
|
+
position: absolute;
|
|
19611
|
+
top: 8px;
|
|
19612
|
+
right: 8px;
|
|
19613
|
+
z-index: 10;
|
|
19614
|
+
opacity: 0;
|
|
19615
|
+
transition: opacity 0.2s ease-in-out;
|
|
19616
|
+
}
|
|
19617
|
+
|
|
19618
|
+
.chart-wizard-output-container:hover .chart-wizard-button-container {
|
|
19619
|
+
opacity: 1;
|
|
19620
|
+
}`, "",{"version":3,"sources":["webpack://./style/ChartWizardPlugin.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF,qDAAqD;AACrD;IACI,kBAAkB;IAClB,QAAQ;IACR,UAAU;IACV,WAAW;IACX,UAAU;IACV,oCAAoC;AACxC;;AAEA;IACI,UAAU;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/* Position the button container in the upper right */\n.chart-wizard-button-container {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 10;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n}\n\n.chart-wizard-output-container:hover .chart-wizard-button-container {\n opacity: 1;\n}"],"sourceRoot":""}]);
|
|
19621
|
+
// Exports
|
|
19622
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
19623
|
+
|
|
19624
|
+
|
|
19625
|
+
/***/ }),
|
|
19626
|
+
|
|
19627
|
+
/***/ "./node_modules/css-loader/dist/cjs.js!./style/ChartWizardWidget.css":
|
|
19628
|
+
/*!***************************************************************************!*\
|
|
19629
|
+
!*** ./node_modules/css-loader/dist/cjs.js!./style/ChartWizardWidget.css ***!
|
|
19630
|
+
\***************************************************************************/
|
|
19631
|
+
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
19632
|
+
|
|
19633
|
+
__webpack_require__.r(__webpack_exports__);
|
|
19634
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
19635
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
19636
|
+
/* harmony export */ });
|
|
19637
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
|
|
19638
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
19639
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
|
19640
|
+
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
19641
|
+
// Imports
|
|
19642
|
+
|
|
19643
|
+
|
|
19644
|
+
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
19645
|
+
// Module
|
|
19646
|
+
___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
19647
|
+
* Copyright (c) Saga Inc.
|
|
19648
|
+
* Distributed under the terms of the GNU Affero General Public License v3.0 License.
|
|
19649
|
+
*/
|
|
19650
|
+
|
|
19651
|
+
.chart-wizard-widget {
|
|
19652
|
+
padding: 10px;
|
|
19653
|
+
height: 100%;
|
|
19654
|
+
overflow-y: auto;
|
|
19655
|
+
display: flex;
|
|
19656
|
+
flex-direction: column;
|
|
19657
|
+
box-sizing: border-box;
|
|
19658
|
+
}
|
|
19659
|
+
|
|
19660
|
+
.chart-wizard-input-row {
|
|
19661
|
+
display: flex;
|
|
19662
|
+
flex-direction: column;
|
|
19663
|
+
margin-bottom: 15px;
|
|
19664
|
+
gap: 5px;
|
|
19665
|
+
}
|
|
19666
|
+
|
|
19667
|
+
.chart-wizard-boolean-row {
|
|
19668
|
+
flex-direction: row;
|
|
19669
|
+
align-items: center;
|
|
19670
|
+
justify-content: space-between;
|
|
19671
|
+
margin-bottom: 12px;
|
|
19672
|
+
gap: 12px;
|
|
19673
|
+
}
|
|
19674
|
+
|
|
19675
|
+
.chart-wizard-input-label {
|
|
19676
|
+
color: var(--jp-content-font-color2);
|
|
19677
|
+
font-size: 12px;
|
|
19678
|
+
font-weight: 500;
|
|
19679
|
+
text-transform: none;
|
|
19680
|
+
}
|
|
19681
|
+
|
|
19682
|
+
.chart-wizard-boolean-label {
|
|
19683
|
+
flex: 1;
|
|
19684
|
+
margin: 0;
|
|
19685
|
+
cursor: pointer;
|
|
19686
|
+
}
|
|
19687
|
+
|
|
19688
|
+
.chart-wizard-toggle-container {
|
|
19689
|
+
position: relative;
|
|
19690
|
+
display: inline-flex;
|
|
19691
|
+
align-items: center;
|
|
19692
|
+
cursor: pointer;
|
|
19693
|
+
flex-shrink: 0;
|
|
19694
|
+
}
|
|
19695
|
+
|
|
19696
|
+
.chart-wizard-toggle-input {
|
|
19697
|
+
position: absolute;
|
|
19698
|
+
opacity: 0;
|
|
19699
|
+
cursor: pointer;
|
|
19700
|
+
width: 0;
|
|
19701
|
+
height: 0;
|
|
19702
|
+
margin: 0;
|
|
19703
|
+
}
|
|
19704
|
+
|
|
19705
|
+
.chart-wizard-toggle-slider {
|
|
19706
|
+
position: relative;
|
|
19707
|
+
display: inline-block;
|
|
19708
|
+
width: 44px;
|
|
19709
|
+
height: 24px;
|
|
19710
|
+
background-color: var(--jp-border-color2);
|
|
19711
|
+
border-radius: 12px;
|
|
19712
|
+
transition: background-color 0.3s ease;
|
|
19713
|
+
box-sizing: border-box;
|
|
19714
|
+
}
|
|
19715
|
+
|
|
19716
|
+
.chart-wizard-toggle-slider::before {
|
|
19717
|
+
content: '';
|
|
19718
|
+
position: absolute;
|
|
19719
|
+
width: 20px;
|
|
19720
|
+
height: 20px;
|
|
19721
|
+
left: 2px;
|
|
19722
|
+
top: 2px;
|
|
19723
|
+
background-color: white;
|
|
19724
|
+
border-radius: 50%;
|
|
19725
|
+
transition: transform 0.3s ease;
|
|
19726
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
|
19727
|
+
}
|
|
19728
|
+
|
|
19729
|
+
.chart-wizard-toggle-input:checked + .chart-wizard-toggle-slider {
|
|
19730
|
+
background-color: var(--jp-brand-color1);
|
|
19731
|
+
}
|
|
19732
|
+
|
|
19733
|
+
.chart-wizard-toggle-input:checked + .chart-wizard-toggle-slider::before {
|
|
19734
|
+
transform: translateX(20px);
|
|
19735
|
+
}
|
|
17467
19736
|
|
|
17468
|
-
|
|
17469
|
-
|
|
17470
|
-
|
|
17471
|
-
\***********************************************************************/
|
|
17472
|
-
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
19737
|
+
.chart-wizard-toggle-input:focus + .chart-wizard-toggle-slider {
|
|
19738
|
+
box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.2);
|
|
19739
|
+
}
|
|
17473
19740
|
|
|
17474
|
-
|
|
17475
|
-
|
|
17476
|
-
|
|
17477
|
-
/* harmony export */ });
|
|
17478
|
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
|
|
17479
|
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
17480
|
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
|
17481
|
-
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
17482
|
-
// Imports
|
|
19741
|
+
.chart-wizard-toggle-input:hover + .chart-wizard-toggle-slider {
|
|
19742
|
+
background-color: var(--jp-border-color1);
|
|
19743
|
+
}
|
|
17483
19744
|
|
|
19745
|
+
.chart-wizard-toggle-input:checked:hover + .chart-wizard-toggle-slider {
|
|
19746
|
+
background-color: var(--jp-brand-color0);
|
|
19747
|
+
}
|
|
17484
19748
|
|
|
17485
|
-
|
|
17486
|
-
|
|
17487
|
-
|
|
17488
|
-
|
|
17489
|
-
|
|
17490
|
-
|
|
19749
|
+
.chart-wizard-number-input,
|
|
19750
|
+
.chart-wizard-text-input,
|
|
19751
|
+
.chart-wizard-color-input,
|
|
19752
|
+
.chart-wizard-tuple-input {
|
|
19753
|
+
width: 100%;
|
|
19754
|
+
box-sizing: border-box;
|
|
19755
|
+
}
|
|
17491
19756
|
|
|
17492
|
-
|
|
17493
|
-
|
|
17494
|
-
|
|
17495
|
-
|
|
17496
|
-
cursor: pointer;
|
|
17497
|
-
font-weight: 500;
|
|
17498
|
-
padding: 1px 5px;
|
|
17499
|
-
border-radius: 3px;
|
|
17500
|
-
position: relative;
|
|
17501
|
-
vertical-align: baseline;
|
|
19757
|
+
.chart-wizard-color-container {
|
|
19758
|
+
display: flex;
|
|
19759
|
+
gap: 8px;
|
|
19760
|
+
width: 100%;
|
|
17502
19761
|
}
|
|
17503
19762
|
|
|
17504
|
-
.
|
|
17505
|
-
|
|
17506
|
-
color: var(--purple-700);
|
|
19763
|
+
.chart-wizard-color-picker {
|
|
19764
|
+
flex-shrink: 0;
|
|
17507
19765
|
}
|
|
17508
19766
|
|
|
17509
|
-
|
|
17510
|
-
|
|
17511
|
-
color: var(--jp-ui-font-color2);
|
|
17512
|
-
text-decoration: none;
|
|
17513
|
-
cursor: default;
|
|
17514
|
-
opacity: 0.6;
|
|
19767
|
+
.chart-wizard-color-input {
|
|
19768
|
+
flex: 1;
|
|
17515
19769
|
}
|
|
17516
19770
|
|
|
17517
|
-
.
|
|
17518
|
-
|
|
17519
|
-
|
|
19771
|
+
.chart-wizard-tuple-container {
|
|
19772
|
+
display: flex;
|
|
19773
|
+
align-items: center;
|
|
19774
|
+
gap: 5px;
|
|
19775
|
+
width: 100%;
|
|
17520
19776
|
}
|
|
17521
|
-
|
|
19777
|
+
|
|
19778
|
+
.chart-wizard-tuple-input {
|
|
19779
|
+
flex: 1;
|
|
19780
|
+
}
|
|
19781
|
+
|
|
19782
|
+
.chart-wizard-config-container {
|
|
19783
|
+
flex: 1;
|
|
19784
|
+
min-height: 0;
|
|
19785
|
+
}
|
|
19786
|
+
|
|
19787
|
+
.chart-wizard-empty-state,
|
|
19788
|
+
.chart-wizard-no-config {
|
|
19789
|
+
flex: 1;
|
|
19790
|
+
display: flex;
|
|
19791
|
+
flex-direction: column;
|
|
19792
|
+
justify-content: center;
|
|
19793
|
+
}
|
|
19794
|
+
|
|
19795
|
+
.chart-wizard-no-config p {
|
|
19796
|
+
text-align: center;
|
|
19797
|
+
}
|
|
19798
|
+
|
|
19799
|
+
.chart-wizard-loading-dots {
|
|
19800
|
+
display: inline-block;
|
|
19801
|
+
min-width: 1.5em;
|
|
19802
|
+
text-align: left;
|
|
19803
|
+
}`, "",{"version":3,"sources":["webpack://./style/ChartWizardWidget.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,aAAa;IACb,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,sBAAsB;IACtB,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,QAAQ;AACZ;;AAEA;IACI,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,mBAAmB;IACnB,SAAS;AACb;;AAEA;IACI,oCAAoC;IACpC,eAAe;IACf,gBAAgB;IAChB,oBAAoB;AACxB;;AAEA;IACI,OAAO;IACP,SAAS;IACT,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,eAAe;IACf,cAAc;AAClB;;AAEA;IACI,kBAAkB;IAClB,UAAU;IACV,eAAe;IACf,QAAQ;IACR,SAAS;IACT,SAAS;AACb;;AAEA;IACI,kBAAkB;IAClB,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,yCAAyC;IACzC,mBAAmB;IACnB,sCAAsC;IACtC,sBAAsB;AAC1B;;AAEA;IACI,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,uBAAuB;IACvB,kBAAkB;IAClB,+BAA+B;IAC/B,wCAAwC;AAC5C;;AAEA;IACI,wCAAwC;AAC5C;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,6CAA6C;AACjD;;AAEA;IACI,yCAAyC;AAC7C;;AAEA;IACI,wCAAwC;AAC5C;;AAEA;;;;IAII,WAAW;IACX,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,QAAQ;IACR,WAAW;AACf;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,OAAO;AACX;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,QAAQ;IACR,WAAW;AACf;;AAEA;IACI,OAAO;AACX;;AAEA;IACI,OAAO;IACP,aAAa;AACjB;;AAEA;;IAEI,OAAO;IACP,aAAa;IACb,sBAAsB;IACtB,uBAAuB;AAC3B;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,qBAAqB;IACrB,gBAAgB;IAChB,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.chart-wizard-widget {\n padding: 10px;\n height: 100%;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n}\n\n.chart-wizard-input-row {\n display: flex;\n flex-direction: column;\n margin-bottom: 15px;\n gap: 5px;\n}\n\n.chart-wizard-boolean-row {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n gap: 12px;\n}\n\n.chart-wizard-input-label {\n color: var(--jp-content-font-color2);\n font-size: 12px;\n font-weight: 500;\n text-transform: none;\n}\n\n.chart-wizard-boolean-label {\n flex: 1;\n margin: 0;\n cursor: pointer;\n}\n\n.chart-wizard-toggle-container {\n position: relative;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.chart-wizard-toggle-input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n width: 0;\n height: 0;\n margin: 0;\n}\n\n.chart-wizard-toggle-slider {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n background-color: var(--jp-border-color2);\n border-radius: 12px;\n transition: background-color 0.3s ease;\n box-sizing: border-box;\n}\n\n.chart-wizard-toggle-slider::before {\n content: '';\n position: absolute;\n width: 20px;\n height: 20px;\n left: 2px;\n top: 2px;\n background-color: white;\n border-radius: 50%;\n transition: transform 0.3s ease;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n}\n\n.chart-wizard-toggle-input:checked + .chart-wizard-toggle-slider {\n background-color: var(--jp-brand-color1);\n}\n\n.chart-wizard-toggle-input:checked + .chart-wizard-toggle-slider::before {\n transform: translateX(20px);\n}\n\n.chart-wizard-toggle-input:focus + .chart-wizard-toggle-slider {\n box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.2);\n}\n\n.chart-wizard-toggle-input:hover + .chart-wizard-toggle-slider {\n background-color: var(--jp-border-color1);\n}\n\n.chart-wizard-toggle-input:checked:hover + .chart-wizard-toggle-slider {\n background-color: var(--jp-brand-color0);\n}\n\n.chart-wizard-number-input,\n.chart-wizard-text-input,\n.chart-wizard-color-input,\n.chart-wizard-tuple-input {\n width: 100%;\n box-sizing: border-box;\n}\n\n.chart-wizard-color-container {\n display: flex;\n gap: 8px;\n width: 100%;\n}\n\n.chart-wizard-color-picker {\n flex-shrink: 0;\n}\n\n.chart-wizard-color-input {\n flex: 1;\n}\n\n.chart-wizard-tuple-container {\n display: flex;\n align-items: center;\n gap: 5px;\n width: 100%;\n}\n\n.chart-wizard-tuple-input {\n flex: 1;\n}\n\n.chart-wizard-config-container {\n flex: 1;\n min-height: 0;\n}\n\n.chart-wizard-empty-state,\n.chart-wizard-no-config {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\n.chart-wizard-no-config p {\n text-align: center;\n}\n\n.chart-wizard-loading-dots {\n display: inline-block;\n min-width: 1.5em;\n text-align: left;\n}"],"sourceRoot":""}]);
|
|
17522
19804
|
// Exports
|
|
17523
19805
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
17524
19806
|
|
|
@@ -17834,6 +20116,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
17834
20116
|
font-size: 14px;
|
|
17835
20117
|
border-radius: var(--chat-taskpane-item-border-radius);
|
|
17836
20118
|
padding: 0 var(--chat-taskpane-item-indent);
|
|
20119
|
+
margin-bottom: 10px;
|
|
17837
20120
|
}
|
|
17838
20121
|
|
|
17839
20122
|
.message:hover .message-start-editing-button {
|
|
@@ -17957,7 +20240,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
17957
20240
|
|
|
17958
20241
|
.message-edit-buttons button:hover {
|
|
17959
20242
|
background-color: var(--jp-layout-color2);
|
|
17960
|
-
}`, "",{"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;
|
|
20243
|
+
}`, "",{"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;EAC3C,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,2DAA2D;EAC3D,0CAA0C;EAC1C,aAAa;EACb,kBAAkB;AACpB;;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 margin-bottom: 10px;\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 margin-bottom: 5px;\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":""}]);
|
|
17961
20244
|
// Exports
|
|
17962
20245
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
17963
20246
|
|
|
@@ -18444,9 +20727,29 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
18444
20727
|
margin: 0 0;
|
|
18445
20728
|
}
|
|
18446
20729
|
|
|
20730
|
+
.scratchpad-result {
|
|
20731
|
+
padding: 8px 12px;
|
|
20732
|
+
border-top: 1px solid var(--jp-cell-editor-border-color);
|
|
20733
|
+
background-color: var(--jp-layout-color1);
|
|
20734
|
+
}
|
|
20735
|
+
|
|
20736
|
+
.scratchpad-result pre {
|
|
20737
|
+
margin: 0;
|
|
20738
|
+
font-family: var(--jp-code-font-family);
|
|
20739
|
+
font-size: var(--jp-code-font-size);
|
|
20740
|
+
color: var(--jp-ui-font-color2);
|
|
20741
|
+
white-space: pre-wrap;
|
|
20742
|
+
word-wrap: break-word;
|
|
20743
|
+
max-height: 200px;
|
|
20744
|
+
overflow-y: auto;
|
|
20745
|
+
}
|
|
18447
20746
|
|
|
20747
|
+
.scratchpad-result-warning {
|
|
20748
|
+
color: var(--jp-warn-color1, #f0a000);
|
|
20749
|
+
font-style: italic;
|
|
20750
|
+
}
|
|
18448
20751
|
|
|
18449
|
-
`, "",{"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":""}]);
|
|
20752
|
+
`, "",{"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;;AAEA;EACE,iBAAiB;EACjB,wDAAwD;EACxD,yCAAyC;AAC3C;;AAEA;EACE,SAAS;EACT,uCAAuC;EACvC,mCAAmC;EACnC,+BAA+B;EAC/B,qBAAqB;EACrB,qBAAqB;EACrB,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;EACE,qCAAqC;EACrC,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-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.scratchpad-result {\n padding: 8px 12px;\n border-top: 1px solid var(--jp-cell-editor-border-color);\n background-color: var(--jp-layout-color1);\n}\n\n.scratchpad-result pre {\n margin: 0;\n font-family: var(--jp-code-font-family);\n font-size: var(--jp-code-font-size);\n color: var(--jp-ui-font-color2);\n white-space: pre-wrap;\n word-wrap: break-word;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.scratchpad-result-warning {\n color: var(--jp-warn-color1, #f0a000);\n font-style: italic;\n}\n\n"],"sourceRoot":""}]);
|
|
18450
20753
|
// Exports
|
|
18451
20754
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
18452
20755
|
|
|
@@ -20942,7 +23245,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
20942
23245
|
display: flex;
|
|
20943
23246
|
align-items: center;
|
|
20944
23247
|
text-align: center;
|
|
20945
|
-
background-color: var(--
|
|
23248
|
+
background-color: var(--purple-300);
|
|
20946
23249
|
border-radius: 3px;
|
|
20947
23250
|
padding: 4px 8px;
|
|
20948
23251
|
margin: 2px;
|
|
@@ -20952,17 +23255,23 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
20952
23255
|
max-width: 100%;
|
|
20953
23256
|
min-width: 0;
|
|
20954
23257
|
|
|
20955
|
-
border:
|
|
23258
|
+
border: none;
|
|
20956
23259
|
cursor: pointer;
|
|
20957
23260
|
}
|
|
20958
23261
|
|
|
20959
23262
|
.selected-context-container:hover {
|
|
20960
|
-
background-color: var(--
|
|
23263
|
+
background-color: var(--purple-400);
|
|
23264
|
+
}
|
|
23265
|
+
|
|
23266
|
+
/* Disable hover effect for notebook and active_cell types since they don't have user actions */
|
|
23267
|
+
.selected-context-container[data-type="notebook"]:hover,
|
|
23268
|
+
.selected-context-container[data-type="active_cell"]:hover {
|
|
23269
|
+
background-color: var(--purple-300);
|
|
20961
23270
|
}
|
|
20962
23271
|
|
|
20963
23272
|
.selected-context-container .rule-name {
|
|
20964
23273
|
margin-left: 6px;
|
|
20965
|
-
color: var(--
|
|
23274
|
+
color: var(--purple-700);
|
|
20966
23275
|
white-space: nowrap;
|
|
20967
23276
|
overflow: hidden;
|
|
20968
23277
|
text-overflow: ellipsis;
|
|
@@ -20975,8 +23284,8 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
20975
23284
|
justify-content: center;
|
|
20976
23285
|
width: 12px;
|
|
20977
23286
|
max-height: 14px;
|
|
20978
|
-
color: var(--
|
|
20979
|
-
}`, "",{"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,
|
|
23287
|
+
color: var(--purple-700);
|
|
23288
|
+
}`, "",{"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,mCAAmC;EACnC,kBAAkB;EAClB,gBAAgB;EAChB,WAAW;;EAEX,eAAe;EACf,YAAY;EACZ,eAAe;EACf,YAAY;;EAEZ,YAAY;EACZ,eAAe;AACjB;;AAEA;EACE,mCAAmC;AACrC;;AAEA,+FAA+F;AAC/F;;EAEE,mCAAmC;AACrC;;AAEA;EACE,gBAAgB;EAChB,wBAAwB;EACxB,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;EACvB,gBAAgB;AAClB;;AAEA;EACE,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,WAAW;EACX,gBAAgB;EAChB,wBAAwB;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.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(--purple-300);\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: none;\n cursor: pointer;\n}\n\n.selected-context-container:hover {\n background-color: var(--purple-400);\n}\n\n/* Disable hover effect for notebook and active_cell types since they don't have user actions */\n.selected-context-container[data-type=\"notebook\"]:hover,\n.selected-context-container[data-type=\"active_cell\"]:hover {\n background-color: var(--purple-300);\n}\n\n.selected-context-container .rule-name {\n margin-left: 6px;\n color: var(--purple-700);\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(--purple-700);\n}"],"sourceRoot":""}]);
|
|
20980
23289
|
// Exports
|
|
20981
23290
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
20982
23291
|
|
|
@@ -21724,6 +24033,12 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
21724
24033
|
padding: 5px 10px;
|
|
21725
24034
|
}
|
|
21726
24035
|
|
|
24036
|
+
.button-base:disabled {
|
|
24037
|
+
opacity: 0.6;
|
|
24038
|
+
cursor: not-allowed;
|
|
24039
|
+
pointer-events: none;
|
|
24040
|
+
}
|
|
24041
|
+
|
|
21727
24042
|
.button-green {
|
|
21728
24043
|
background-color: var(--green-400);
|
|
21729
24044
|
color: var(--green-900) !important;
|
|
@@ -21760,6 +24075,10 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
21760
24075
|
background-color: var(--purple-400);
|
|
21761
24076
|
}
|
|
21762
24077
|
|
|
24078
|
+
.button-purple:disabled:hover {
|
|
24079
|
+
background-color: var(--purple-300);
|
|
24080
|
+
}
|
|
24081
|
+
|
|
21763
24082
|
.button-blue {
|
|
21764
24083
|
background-color: var(--blue-300);
|
|
21765
24084
|
color: var(--blue-900) !important;
|
|
@@ -21793,7 +24112,7 @@ ___CSS_LOADER_EXPORT___.push([module.id, `/*
|
|
|
21793
24112
|
font-size: 12px;
|
|
21794
24113
|
padding: 2px 5px;
|
|
21795
24114
|
}
|
|
21796
|
-
`, "",{"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,iCAAiC;EACjC,iCAAiC;EACjC,mCAAmC;EACnC,kBAAkB;AACpB;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,mCAAmC;EACnC,8BAA8B;AAChC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;EACpC,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-blue {\n background-color: var(--blue-300);\n color: var(--blue-900) !important;\n border: 0.5px solid var(--blue-900);\n border-radius: 4px;\n}\n\n.button-blue:hover {\n background-color: var(--blue-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: var(--toolbar-button-height);\n font-size: 12px;\n padding: 2px 5px;\n}\n"],"sourceRoot":""}]);
|
|
24115
|
+
`, "",{"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,YAAY;EACZ,mBAAmB;EACnB,oBAAoB;AACtB;;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;AACrC;;AAEA;EACE,iCAAiC;EACjC,iCAAiC;EACjC,mCAAmC;EACnC,kBAAkB;AACpB;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,mCAAmC;EACnC,8BAA8B;AAChC;;AAEA;EACE,mCAAmC;AACrC;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oCAAoC;EACpC,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-base:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\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-purple:disabled:hover {\n background-color: var(--purple-300);\n}\n\n.button-blue {\n background-color: var(--blue-300);\n color: var(--blue-900) !important;\n border: 0.5px solid var(--blue-900);\n border-radius: 4px;\n}\n\n.button-blue:hover {\n background-color: var(--blue-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: var(--toolbar-button-height);\n font-size: 12px;\n padding: 2px 5px;\n}\n"],"sourceRoot":""}]);
|
|
21797
24116
|
// Exports
|
|
21798
24117
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
21799
24118
|
|
|
@@ -22158,6 +24477,60 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
22158
24477
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AppsList_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AppsList_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AppsList_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
22159
24478
|
|
|
22160
24479
|
|
|
24480
|
+
/***/ }),
|
|
24481
|
+
|
|
24482
|
+
/***/ "./style/AskUserQuestionToolUI.css":
|
|
24483
|
+
/*!*****************************************!*\
|
|
24484
|
+
!*** ./style/AskUserQuestionToolUI.css ***!
|
|
24485
|
+
\*****************************************/
|
|
24486
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
24487
|
+
|
|
24488
|
+
__webpack_require__.r(__webpack_exports__);
|
|
24489
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
24490
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
24491
|
+
/* harmony export */ });
|
|
24492
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
|
|
24493
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
24494
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
|
|
24495
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
24496
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
|
|
24497
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
24498
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
|
|
24499
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
|
|
24500
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
|
|
24501
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
|
|
24502
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
|
|
24503
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
|
|
24504
|
+
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_AskUserQuestionToolUI_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./AskUserQuestionToolUI.css */ "./node_modules/css-loader/dist/cjs.js!./style/AskUserQuestionToolUI.css");
|
|
24505
|
+
|
|
24506
|
+
|
|
24507
|
+
|
|
24508
|
+
|
|
24509
|
+
|
|
24510
|
+
|
|
24511
|
+
|
|
24512
|
+
|
|
24513
|
+
|
|
24514
|
+
|
|
24515
|
+
|
|
24516
|
+
var options = {};
|
|
24517
|
+
|
|
24518
|
+
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
|
24519
|
+
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
|
24520
|
+
|
|
24521
|
+
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
|
24522
|
+
|
|
24523
|
+
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
|
24524
|
+
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
|
24525
|
+
|
|
24526
|
+
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_AskUserQuestionToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
|
24527
|
+
|
|
24528
|
+
|
|
24529
|
+
|
|
24530
|
+
|
|
24531
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AskUserQuestionToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AskUserQuestionToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AskUserQuestionToolUI_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
24532
|
+
|
|
24533
|
+
|
|
22161
24534
|
/***/ }),
|
|
22162
24535
|
|
|
22163
24536
|
/***/ "./style/AssumptionTool.css":
|
|
@@ -22374,6 +24747,114 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
22374
24747
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_CellReference_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_CellReference_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_CellReference_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
22375
24748
|
|
|
22376
24749
|
|
|
24750
|
+
/***/ }),
|
|
24751
|
+
|
|
24752
|
+
/***/ "./style/ChartWizardPlugin.css":
|
|
24753
|
+
/*!*************************************!*\
|
|
24754
|
+
!*** ./style/ChartWizardPlugin.css ***!
|
|
24755
|
+
\*************************************/
|
|
24756
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
24757
|
+
|
|
24758
|
+
__webpack_require__.r(__webpack_exports__);
|
|
24759
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
24760
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
24761
|
+
/* harmony export */ });
|
|
24762
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
|
|
24763
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
24764
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
|
|
24765
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
24766
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
|
|
24767
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
24768
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
|
|
24769
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
|
|
24770
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
|
|
24771
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
|
|
24772
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
|
|
24773
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
|
|
24774
|
+
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ChartWizardPlugin_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./ChartWizardPlugin.css */ "./node_modules/css-loader/dist/cjs.js!./style/ChartWizardPlugin.css");
|
|
24775
|
+
|
|
24776
|
+
|
|
24777
|
+
|
|
24778
|
+
|
|
24779
|
+
|
|
24780
|
+
|
|
24781
|
+
|
|
24782
|
+
|
|
24783
|
+
|
|
24784
|
+
|
|
24785
|
+
|
|
24786
|
+
var options = {};
|
|
24787
|
+
|
|
24788
|
+
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
|
24789
|
+
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
|
24790
|
+
|
|
24791
|
+
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
|
24792
|
+
|
|
24793
|
+
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
|
24794
|
+
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
|
24795
|
+
|
|
24796
|
+
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ChartWizardPlugin_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
|
24797
|
+
|
|
24798
|
+
|
|
24799
|
+
|
|
24800
|
+
|
|
24801
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ChartWizardPlugin_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_ChartWizardPlugin_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_ChartWizardPlugin_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
24802
|
+
|
|
24803
|
+
|
|
24804
|
+
/***/ }),
|
|
24805
|
+
|
|
24806
|
+
/***/ "./style/ChartWizardWidget.css":
|
|
24807
|
+
/*!*************************************!*\
|
|
24808
|
+
!*** ./style/ChartWizardWidget.css ***!
|
|
24809
|
+
\*************************************/
|
|
24810
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
24811
|
+
|
|
24812
|
+
__webpack_require__.r(__webpack_exports__);
|
|
24813
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
24814
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
24815
|
+
/* harmony export */ });
|
|
24816
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
|
|
24817
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
24818
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
|
|
24819
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
24820
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
|
|
24821
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
24822
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
|
|
24823
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
|
|
24824
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
|
|
24825
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
|
|
24826
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
|
|
24827
|
+
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
|
|
24828
|
+
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ChartWizardWidget_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./ChartWizardWidget.css */ "./node_modules/css-loader/dist/cjs.js!./style/ChartWizardWidget.css");
|
|
24829
|
+
|
|
24830
|
+
|
|
24831
|
+
|
|
24832
|
+
|
|
24833
|
+
|
|
24834
|
+
|
|
24835
|
+
|
|
24836
|
+
|
|
24837
|
+
|
|
24838
|
+
|
|
24839
|
+
|
|
24840
|
+
var options = {};
|
|
24841
|
+
|
|
24842
|
+
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
|
24843
|
+
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
|
24844
|
+
|
|
24845
|
+
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
|
24846
|
+
|
|
24847
|
+
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
|
24848
|
+
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
|
24849
|
+
|
|
24850
|
+
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ChartWizardWidget_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
|
24851
|
+
|
|
24852
|
+
|
|
24853
|
+
|
|
24854
|
+
|
|
24855
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ChartWizardWidget_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_ChartWizardWidget_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_ChartWizardWidget_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
24856
|
+
|
|
24857
|
+
|
|
22377
24858
|
/***/ }),
|
|
22378
24859
|
|
|
22379
24860
|
/***/ "./style/ChatDropdown.css":
|
|
@@ -24213,4 +26694,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
|
|
|
24213
26694
|
/***/ })
|
|
24214
26695
|
|
|
24215
26696
|
}]);
|
|
24216
|
-
//# sourceMappingURL=lib_index_js.
|
|
26697
|
+
//# sourceMappingURL=lib_index_js.9d26322f3e78beb2b666.js.map
|