mito-ai 0.1.50__py3-none-any.whl → 0.1.52__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. mito_ai/_version.py +1 -1
  2. mito_ai/constants.py +1 -1
  3. mito_ai/tests/test_constants.py +1 -1
  4. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/build_log.json +111 -103
  5. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/package.json +2 -2
  6. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/package.json.orig +1 -1
  7. mito_ai-0.1.50.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.8f1845da6bf2b128c049.js → mito_ai-0.1.52.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.5ec1e525d244fc8588cf.js +382 -89
  8. mito_ai-0.1.52.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.5ec1e525d244fc8588cf.js.map +1 -0
  9. mito_ai-0.1.50.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.78d3ccb73e7ca1da3aae.js → mito_ai-0.1.52.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.89927e1d3b5962d57ae3.js +17 -17
  10. mito_ai-0.1.50.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.78d3ccb73e7ca1da3aae.js.map → mito_ai-0.1.52.data/data/share/jupyter/labextensions/mito_ai/static/remoteEntry.89927e1d3b5962d57ae3.js.map +1 -1
  11. {mito_ai-0.1.50.dist-info → mito_ai-0.1.52.dist-info}/METADATA +1 -1
  12. {mito_ai-0.1.50.dist-info → mito_ai-0.1.52.dist-info}/RECORD +36 -36
  13. mito_ai-0.1.50.data/data/share/jupyter/labextensions/mito_ai/static/lib_index_js.8f1845da6bf2b128c049.js.map +0 -1
  14. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/etc/jupyter/jupyter_server_config.d/mito_ai.json +0 -0
  15. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/schemas/mito_ai/toolbar-buttons.json +0 -0
  16. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js +0 -0
  17. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/node_modules_process_browser_js.4b128e94d31a81ebd209.js.map +0 -0
  18. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/style.js +0 -0
  19. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js +0 -0
  20. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/style_index_js.5876024bb17dbd6a3ee6.js.map +0 -0
  21. {mito_ai-0.1.50.data → mito_ai-0.1.52.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
  22. {mito_ai-0.1.50.data → mito_ai-0.1.52.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
  23. {mito_ai-0.1.50.data → mito_ai-0.1.52.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
  24. {mito_ai-0.1.50.data → mito_ai-0.1.52.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
  25. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js +0 -0
  26. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_dist_esm_index_mjs.6bac1a8c4cc93f15f6b7.js.map +0 -0
  27. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js +0 -0
  28. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_aws-amplify_ui-react_dist_esm_index_mjs.4fcecd65bef9e9847609.js.map +0 -0
  29. {mito_ai-0.1.50.data → mito_ai-0.1.52.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
  30. {mito_ai-0.1.50.data → mito_ai-0.1.52.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
  31. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js +0 -0
  32. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_semver_index_js.3f6754ac5116d47de76b.js.map +0 -0
  33. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js +0 -0
  34. {mito_ai-0.1.50.data → mito_ai-0.1.52.data}/data/share/jupyter/labextensions/mito_ai/static/vendors-node_modules_vscode-diff_dist_index_js.ea55f1f9346638aafbcf.js.map +0 -0
  35. {mito_ai-0.1.50.dist-info → mito_ai-0.1.52.dist-info}/WHEEL +0 -0
  36. {mito_ai-0.1.50.dist-info → mito_ai-0.1.52.dist-info}/entry_points.txt +0 -0
  37. {mito_ai-0.1.50.dist-info → mito_ai-0.1.52.dist-info}/licenses/LICENSE +0 -0
@@ -653,9 +653,10 @@ __webpack_require__.r(__webpack_exports__);
653
653
  /* harmony export */ });
654
654
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
655
655
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
656
- /* harmony import */ var _utils_checkpoint__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/checkpoint */ "./lib/utils/checkpoint.js");
656
+ /* harmony import */ var _utils_checkpoint__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/checkpoint */ "./lib/utils/checkpoint.js");
657
657
  /* harmony import */ var _utils_scroll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/scroll */ "./lib/utils/scroll.js");
658
- /* harmony import */ var _components_TextButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../components/TextButton */ "./lib/components/TextButton.js");
658
+ /* harmony import */ var _components_TextButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../components/TextButton */ "./lib/components/TextButton.js");
659
+ /* harmony import */ var _style_AgentChangeControls_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/AgentChangeControls.css */ "./style/AgentChangeControls.css");
659
660
  /*
660
661
  * Copyright (c) Saga Inc.
661
662
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -664,10 +665,44 @@ __webpack_require__.r(__webpack_exports__);
664
665
 
665
666
 
666
667
 
667
- const AgentChangeControls = ({ reviewAgentChanges, app, notebookTracker, setHasCheckpoint, setDisplayedNextStepsIfAvailable, setShowRevertQuestionnaire, chatTaskpaneMessagesRef, acceptAllAICode, rejectAllAICode, setAgentReviewStatus, agentReviewStatus, }) => {
668
+
669
+ const AgentChangeControls = ({ reviewAgentChanges, app, notebookTracker, setHasCheckpoint, setDisplayedNextStepsIfAvailable, setShowRevertQuestionnaire, chatTaskpaneMessagesRef, acceptAllAICode, rejectAllAICode, getReviewProgress, setAgentReviewStatus, agentReviewStatus, }) => {
670
+ const [reviewProgress, setReviewProgress] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
671
+ // Update counts when review starts
672
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
673
+ if (agentReviewStatus === 'in-agent-code-review') {
674
+ const progress = getReviewProgress();
675
+ setReviewProgress(progress);
676
+ }
677
+ else {
678
+ setReviewProgress(null);
679
+ }
680
+ }, [agentReviewStatus, getReviewProgress]);
681
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
682
+ // Update progress periodically during review to reflect when cells are reviewed.
683
+ // We use polling here instead of event-driven updates because it's simpler and more robust -
684
+ // cells can be reviewed through multiple paths (toolbar buttons, keyboard shortcuts, etc.)
685
+ // and polling ensures we catch all updates without having to wire up triggers everywhere.
686
+ if (agentReviewStatus !== 'in-agent-code-review') {
687
+ return;
688
+ }
689
+ const updateProgress = () => {
690
+ const progress = getReviewProgress();
691
+ setReviewProgress(progress);
692
+ };
693
+ // Update immediately
694
+ updateProgress();
695
+ // Set up interval to update progress
696
+ const interval = setInterval(updateProgress, 500);
697
+ return () => clearInterval(interval);
698
+ }, [agentReviewStatus]);
668
699
  const handleReviewChanges = () => {
669
- setAgentReviewStatus('in-agent-code-review');
670
700
  reviewAgentChanges();
701
+ setAgentReviewStatus('in-agent-code-review');
702
+ // Scroll to show the new review controls after the UI updates
703
+ setTimeout(() => {
704
+ (0,_utils_scroll__WEBPACK_IMPORTED_MODULE_2__.scrollToDiv)(chatTaskpaneMessagesRef);
705
+ }, 0);
671
706
  };
672
707
  const handleAcceptAll = () => {
673
708
  acceptAllAICode();
@@ -678,7 +713,7 @@ const AgentChangeControls = ({ reviewAgentChanges, app, notebookTracker, setHasC
678
713
  setAgentReviewStatus('post-agent-code-review');
679
714
  };
680
715
  const handleUndoAll = async () => {
681
- await (0,_utils_checkpoint__WEBPACK_IMPORTED_MODULE_1__.restoreCheckpoint)(app, notebookTracker, setHasCheckpoint);
716
+ await (0,_utils_checkpoint__WEBPACK_IMPORTED_MODULE_3__.restoreCheckpoint)(app, notebookTracker, setHasCheckpoint);
682
717
  setDisplayedNextStepsIfAvailable(false);
683
718
  setHasCheckpoint(false);
684
719
  setAgentReviewStatus('post-agent-code-review');
@@ -687,25 +722,68 @@ const AgentChangeControls = ({ reviewAgentChanges, app, notebookTracker, setHasC
687
722
  };
688
723
  if (agentReviewStatus === 'pre-agent-code-review') {
689
724
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'message message-assistant-chat' },
690
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { style: { display: 'flex', gap: '8px', alignItems: 'center' } },
691
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_3__["default"], { text: "Review Changes", title: "Review the changes made by the agent", onClick: handleReviewChanges, variant: "gray", width: "fit-contents" }),
692
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_3__["default"], { text: "Undo All", title: "Undo all of the most recent changes made by the agent", onClick: handleUndoAll, variant: "gray", width: "fit-contents" }))));
725
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "agent-change-controls-buttons" },
726
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_4__["default"], { text: "Review Changes", title: "Review the changes made by the agent", onClick: handleReviewChanges, variant: "gray", width: "fit-contents" }),
727
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_4__["default"], { text: "Undo All", title: "Undo all of the most recent changes made by the agent", onClick: handleUndoAll, variant: "gray", width: "fit-contents" }))));
693
728
  }
694
729
  if (agentReviewStatus === 'in-agent-code-review') {
695
730
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'message message-assistant-chat' },
696
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { style: { display: 'flex', gap: '8px', alignItems: 'center' } },
697
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-green", title: "Accept all changes", onClick: handleAcceptAll }, "Accept all"),
698
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-red", onClick: handleRejectAll }, "Reject All"))));
731
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "agent-change-controls-container" },
732
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "agent-change-controls-buttons" },
733
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-green", title: "Accept all changes", onClick: handleAcceptAll }, "Accept all"),
734
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", { className: "button-base button-red", onClick: handleRejectAll }, "Reject All")),
735
+ reviewProgress && reviewProgress.total > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "agent-review-progress" },
736
+ reviewProgress.reviewed,
737
+ "/",
738
+ reviewProgress.total,
739
+ " changes reviewed")))));
699
740
  }
700
741
  if (agentReviewStatus === 'post-agent-code-review') {
701
742
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'message message-assistant-chat' },
702
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_3__["default"], { text: "Undo All", onClick: handleUndoAll, variant: "gray", width: "fit-contents", title: "Undo all of the most recent changes made by the agent" })));
743
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_TextButton__WEBPACK_IMPORTED_MODULE_4__["default"], { text: "Undo All", onClick: handleUndoAll, variant: "gray", width: "fit-contents", title: "Undo all of the most recent changes made by the agent" })));
703
744
  }
704
745
  return null;
705
746
  };
706
747
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AgentChangeControls);
707
748
 
708
749
 
750
+ /***/ }),
751
+
752
+ /***/ "./lib/Extensions/AiChat/ChatMessage/AgentChangeSummary.js":
753
+ /*!*****************************************************************!*\
754
+ !*** ./lib/Extensions/AiChat/ChatMessage/AgentChangeSummary.js ***!
755
+ \*****************************************************************/
756
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
757
+
758
+ __webpack_require__.r(__webpack_exports__);
759
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
760
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
761
+ /* harmony export */ });
762
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
763
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
764
+ /* harmony import */ var _style_AgentChangeControls_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../style/AgentChangeControls.css */ "./style/AgentChangeControls.css");
765
+ /*
766
+ * Copyright (c) Saga Inc.
767
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
768
+ */
769
+
770
+
771
+ const AgentChangeSummary = ({ getChangeCounts, }) => {
772
+ const changeCounts = getChangeCounts();
773
+ return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "agent-change-counts" },
774
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-change-count" },
775
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-change-count-number agent-change-count-added" }, changeCounts.added),
776
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-change-count-text" }, changeCounts.added === 1 ? 'cell added' : 'cells added')),
777
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-change-count" },
778
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-change-count-number agent-change-count-modified" }, changeCounts.modified),
779
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-change-count-text" }, changeCounts.modified === 1 ? 'cell modified' : 'cells modified')),
780
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-change-count" },
781
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-change-count-number agent-change-count-removed" }, changeCounts.removed),
782
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", { className: "agent-change-count-text" }, changeCounts.removed === 1 ? 'cell removed' : 'cells removed'))));
783
+ };
784
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AgentChangeSummary);
785
+
786
+
709
787
  /***/ }),
710
788
 
711
789
  /***/ "./lib/Extensions/AiChat/ChatMessage/AlertBlock.js":
@@ -2975,7 +3053,7 @@ const ChatTaskpane = ({ notebookTracker, renderMimeRegistry, contextManager, str
2975
3053
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "chat-loading-message" },
2976
3054
  "Thinking ",
2977
3055
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_LoadingDots__WEBPACK_IMPORTED_MODULE_37__["default"], null)),
2978
- react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentReviewPanel__WEBPACK_IMPORTED_MODULE_38__["default"], { hasCheckpoint: hasCheckpoint, agentModeEnabled: agentModeEnabled, agentExecutionStatus: agentExecution.agentExecutionStatus, displayOptimizedChatHistoryLength: displayOptimizedChatHistory.length, showRevertQuestionnaire: showRevertQuestionnaire, reviewAgentChanges: agentReview.reviewAgentChanges, acceptAllAICode: agentReview.acceptAllAICode, rejectAllAICode: agentReview.rejectAllAICode, setHasCheckpoint: setHasCheckpoint, setDisplayedNextStepsIfAvailable: setDisplayedNextStepsIfAvailable, setShowRevertQuestionnaire: setShowRevertQuestionnaire, getDuplicateChatHistoryManager: getDuplicateChatHistoryManager, setChatHistoryManager: setChatHistoryManager, app: app, notebookTracker: notebookTracker, chatTaskpaneMessagesRef: chatTaskpaneMessagesRef, agentReviewStatus: agentReviewStatus, setAgentReviewStatus: setAgentReviewStatus })),
3056
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_AgentReviewPanel__WEBPACK_IMPORTED_MODULE_38__["default"], { hasCheckpoint: hasCheckpoint, agentModeEnabled: agentModeEnabled, agentExecutionStatus: agentExecution.agentExecutionStatus, showRevertQuestionnaire: showRevertQuestionnaire, reviewAgentChanges: agentReview.reviewAgentChanges, acceptAllAICode: agentReview.acceptAllAICode, rejectAllAICode: agentReview.rejectAllAICode, getChangeCounts: agentReview.getChangeCounts, getReviewProgress: agentReview.getReviewProgress, hasChanges: agentReview.hasChanges, setHasCheckpoint: setHasCheckpoint, setDisplayedNextStepsIfAvailable: setDisplayedNextStepsIfAvailable, setShowRevertQuestionnaire: setShowRevertQuestionnaire, getDuplicateChatHistoryManager: getDuplicateChatHistoryManager, setChatHistoryManager: setChatHistoryManager, app: app, notebookTracker: notebookTracker, chatTaskpaneMessagesRef: chatTaskpaneMessagesRef, agentReviewStatus: agentReviewStatus, setAgentReviewStatus: setAgentReviewStatus })),
2979
3057
  displayOptimizedChatHistory.length === 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "suggestions-container" },
2980
3058
  react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatMessage_ScrollableSuggestions__WEBPACK_IMPORTED_MODULE_39__["default"], { onSelectSuggestion: (prompt) => {
2981
3059
  if (agentModeEnabled) {
@@ -3491,8 +3569,9 @@ __webpack_require__.r(__webpack_exports__);
3491
3569
  /* harmony export */ });
3492
3570
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
3493
3571
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3494
- /* harmony import */ var _ChatMessage_AgentChangeControls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ChatMessage/AgentChangeControls */ "./lib/Extensions/AiChat/ChatMessage/AgentChangeControls.js");
3495
- /* harmony import */ var _ChatMessage_RevertQuestionnaire__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ChatMessage/RevertQuestionnaire */ "./lib/Extensions/AiChat/ChatMessage/RevertQuestionnaire.js");
3572
+ /* harmony import */ var _ChatMessage_AgentChangeControls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ChatMessage/AgentChangeControls */ "./lib/Extensions/AiChat/ChatMessage/AgentChangeControls.js");
3573
+ /* harmony import */ var _ChatMessage_AgentChangeSummary__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ChatMessage/AgentChangeSummary */ "./lib/Extensions/AiChat/ChatMessage/AgentChangeSummary.js");
3574
+ /* harmony import */ var _ChatMessage_RevertQuestionnaire__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ChatMessage/RevertQuestionnaire */ "./lib/Extensions/AiChat/ChatMessage/RevertQuestionnaire.js");
3496
3575
  /*
3497
3576
  * Copyright (c) Saga Inc.
3498
3577
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -3500,13 +3579,16 @@ __webpack_require__.r(__webpack_exports__);
3500
3579
 
3501
3580
 
3502
3581
 
3503
- const AgentReviewPanel = ({ agentReviewStatus, setAgentReviewStatus, hasCheckpoint, agentModeEnabled, agentExecutionStatus, displayOptimizedChatHistoryLength, showRevertQuestionnaire, reviewAgentChanges, acceptAllAICode, rejectAllAICode, setHasCheckpoint, setDisplayedNextStepsIfAvailable, setShowRevertQuestionnaire, getDuplicateChatHistoryManager, setChatHistoryManager, app, notebookTracker, chatTaskpaneMessagesRef }) => {
3582
+
3583
+ const AgentReviewPanel = ({ agentReviewStatus, setAgentReviewStatus, hasCheckpoint, agentModeEnabled, agentExecutionStatus, showRevertQuestionnaire, reviewAgentChanges, acceptAllAICode, rejectAllAICode, getChangeCounts, getReviewProgress, hasChanges, setHasCheckpoint, setDisplayedNextStepsIfAvailable, setShowRevertQuestionnaire, getDuplicateChatHistoryManager, setChatHistoryManager, app, notebookTracker, chatTaskpaneMessagesRef }) => {
3584
+ const agentFinished = hasCheckpoint && agentModeEnabled && agentExecutionStatus === 'idle';
3585
+ const shouldShowAgentChangeControls = agentFinished && hasChanges();
3586
+ const shouldShowSummary = agentFinished && (agentReviewStatus === 'pre-agent-code-review' || agentReviewStatus === 'in-agent-code-review');
3504
3587
  return (react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null,
3505
- hasCheckpoint &&
3506
- agentModeEnabled &&
3507
- agentExecutionStatus === 'idle' &&
3508
- displayOptimizedChatHistoryLength > 0 && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatMessage_AgentChangeControls__WEBPACK_IMPORTED_MODULE_1__["default"], { reviewAgentChanges: reviewAgentChanges, app: app, notebookTracker: notebookTracker, setHasCheckpoint: setHasCheckpoint, setDisplayedNextStepsIfAvailable: setDisplayedNextStepsIfAvailable, setShowRevertQuestionnaire: setShowRevertQuestionnaire, chatTaskpaneMessagesRef: chatTaskpaneMessagesRef, acceptAllAICode: acceptAllAICode, rejectAllAICode: rejectAllAICode, agentReviewStatus: agentReviewStatus, setAgentReviewStatus: setAgentReviewStatus })),
3509
- showRevertQuestionnaire && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatMessage_RevertQuestionnaire__WEBPACK_IMPORTED_MODULE_2__["default"], { onDestroy: () => setShowRevertQuestionnaire(false), getDuplicateChatHistoryManager: getDuplicateChatHistoryManager, setChatHistoryManager: setChatHistoryManager }))));
3588
+ shouldShowSummary && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: 'message message-assistant-chat' },
3589
+ react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatMessage_AgentChangeSummary__WEBPACK_IMPORTED_MODULE_1__["default"], { getChangeCounts: getChangeCounts }))),
3590
+ shouldShowAgentChangeControls && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatMessage_AgentChangeControls__WEBPACK_IMPORTED_MODULE_2__["default"], { reviewAgentChanges: reviewAgentChanges, app: app, notebookTracker: notebookTracker, setHasCheckpoint: setHasCheckpoint, setDisplayedNextStepsIfAvailable: setDisplayedNextStepsIfAvailable, setShowRevertQuestionnaire: setShowRevertQuestionnaire, chatTaskpaneMessagesRef: chatTaskpaneMessagesRef, acceptAllAICode: acceptAllAICode, rejectAllAICode: rejectAllAICode, getReviewProgress: getReviewProgress, agentReviewStatus: agentReviewStatus, setAgentReviewStatus: setAgentReviewStatus })),
3591
+ showRevertQuestionnaire && (react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ChatMessage_RevertQuestionnaire__WEBPACK_IMPORTED_MODULE_3__["default"], { onDestroy: () => setShowRevertQuestionnaire(false), getDuplicateChatHistoryManager: getDuplicateChatHistoryManager, setChatHistoryManager: setChatHistoryManager }))));
3510
3592
  };
3511
3593
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AgentReviewPanel);
3512
3594
 
@@ -3818,9 +3900,9 @@ __webpack_require__.r(__webpack_exports__);
3818
3900
  /* harmony export */ });
3819
3901
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "webpack/sharing/consume/default/react");
3820
3902
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3821
- /* harmony import */ var _AgentReviewUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../AgentReviewUtils */ "./lib/Extensions/AiChat/AgentReviewUtils.js");
3903
+ /* harmony import */ var _AgentReviewUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../AgentReviewUtils */ "./lib/Extensions/AiChat/AgentReviewUtils.js");
3822
3904
  /* harmony import */ var _utils_codeDiff__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../utils/codeDiff */ "./lib/utils/codeDiff.js");
3823
- /* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/notebook */ "./lib/utils/notebook.js");
3905
+ /* harmony import */ var _utils_notebook__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/notebook */ "./lib/utils/notebook.js");
3824
3906
  /*
3825
3907
  * Copyright (c) Saga Inc.
3826
3908
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -3835,50 +3917,44 @@ const useAgentReview = ({ app, agentTargetNotebookPanelRef, codeDiffStripesCompa
3835
3917
  // Store notebook snapshots for comparison
3836
3918
  const notebookSnapshotPreAgentExecutionRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
3837
3919
  const notebookSnapshotAfterAgentExecutionRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
3920
+ // Store change counts (calculated in reviewAgentChanges)
3921
+ const changeCountsRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({
3922
+ added: 0,
3923
+ modified: 0,
3924
+ removed: 0,
3925
+ total: 0
3926
+ });
3838
3927
  const hasUnreviewedChanges = (cellId) => {
3839
3928
  return changedCellsRef.current.some(cell => cell.cellId === cellId && !cell.reviewed);
3840
3929
  };
3841
- const acceptAICodeInAgentMode = () => {
3842
- var _a, _b;
3843
- const activeCellId = (_b = (_a = agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current) === null || _a === void 0 ? void 0 : _a.content.activeCell) === null || _b === void 0 ? void 0 : _b.model.id;
3844
- if (!activeCellId || !hasUnreviewedChanges(activeCellId)) {
3845
- return;
3846
- }
3847
- (0,_AgentReviewUtils__WEBPACK_IMPORTED_MODULE_1__.acceptSingleCellEdit)(activeCellId, agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current, notebookSnapshotAfterAgentExecutionRef.current, codeDiffStripesCompartments, changedCellsRef.current, setAgentReviewStatus);
3848
- updateCellToolbarButtons();
3849
- };
3850
- const rejectAICodeInAgentMode = () => {
3851
- var _a, _b;
3852
- const activeCellId = (_b = (_a = agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current) === null || _a === void 0 ? void 0 : _a.content.activeCell) === null || _b === void 0 ? void 0 : _b.model.id;
3853
- if (!activeCellId || !hasUnreviewedChanges(activeCellId)) {
3854
- return;
3855
- }
3856
- (0,_AgentReviewUtils__WEBPACK_IMPORTED_MODULE_1__.rejectSingleCellEdit)(activeCellId, agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current, codeDiffStripesCompartments, changedCellsRef.current, setAgentReviewStatus, agentTargetNotebookPanelRef || undefined);
3857
- updateCellToolbarButtons();
3858
- };
3859
- const acceptAllAICode = () => {
3860
- (0,_AgentReviewUtils__WEBPACK_IMPORTED_MODULE_1__.acceptAllCellEdits)(agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current, notebookSnapshotAfterAgentExecutionRef.current, codeDiffStripesCompartments, changedCellsRef.current);
3861
- updateCellToolbarButtons();
3930
+ const getChangeCounts = () => {
3931
+ return changeCountsRef.current;
3862
3932
  };
3863
- const rejectAllAICode = () => {
3864
- (0,_AgentReviewUtils__WEBPACK_IMPORTED_MODULE_1__.rejectAllCellEdits)(agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current, codeDiffStripesCompartments, changedCellsRef.current);
3865
- updateCellToolbarButtons();
3933
+ const getReviewProgress = () => {
3934
+ const cells = changedCellsRef.current;
3935
+ const reviewed = cells.filter(cell => cell.reviewed).length;
3936
+ return {
3937
+ reviewed,
3938
+ total: cells.length
3939
+ };
3866
3940
  };
3867
- const reviewAgentChanges = () => {
3941
+ // Helper function to detect and count changes between snapshots
3942
+ // This populates changedCellsRef and changeCountsRef without applying visual diffs
3943
+ const detectChanges = () => {
3868
3944
  var _a;
3869
3945
  if (!(agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current)) {
3870
- return;
3946
+ return [];
3871
3947
  }
3872
- // Make the notebook panel the active notebook panel
3873
- app.shell.activateById(agentTargetNotebookPanelRef.current.id);
3874
- const currentNotebookSnapshot = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_2__.getAIOptimizedCellsInNotebookPanel)(agentTargetNotebookPanelRef.current);
3875
- notebookSnapshotAfterAgentExecutionRef.current = currentNotebookSnapshot;
3948
+ const currentNotebookSnapshot = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_1__.getAIOptimizedCellsInNotebookPanel)(agentTargetNotebookPanelRef.current);
3876
3949
  if (!notebookSnapshotPreAgentExecutionRef.current || !currentNotebookSnapshot) {
3877
- return;
3950
+ return [];
3878
3951
  }
3879
3952
  // Clear and populate the changed cells array
3880
3953
  const changedCells = [];
3881
- changedCellsRef.current = changedCells;
3954
+ // Initialize counters
3955
+ let added = 0;
3956
+ let modified = 0;
3957
+ let removed = 0;
3882
3958
  // Compare each cell in the current snapshot with the original snapshot
3883
3959
  currentNotebookSnapshot.forEach(currentCell => {
3884
3960
  var _a;
@@ -3892,6 +3968,7 @@ const useAgentReview = ({ app, agentTargetNotebookPanelRef, codeDiffStripesCompa
3892
3968
  currentCode: currentCell.code,
3893
3969
  reviewed: false
3894
3970
  });
3971
+ modified++;
3895
3972
  }
3896
3973
  }
3897
3974
  else {
@@ -3902,6 +3979,7 @@ const useAgentReview = ({ app, agentTargetNotebookPanelRef, codeDiffStripesCompa
3902
3979
  currentCode: currentCell.code,
3903
3980
  reviewed: false
3904
3981
  });
3982
+ added++;
3905
3983
  }
3906
3984
  });
3907
3985
  // Check for cells that were removed (exist in original but not in current)
@@ -3915,8 +3993,60 @@ const useAgentReview = ({ app, agentTargetNotebookPanelRef, codeDiffStripesCompa
3915
3993
  currentCode: '',
3916
3994
  reviewed: false
3917
3995
  });
3996
+ removed++;
3918
3997
  }
3919
3998
  });
3999
+ // Update the change counts ref
4000
+ changeCountsRef.current = {
4001
+ added,
4002
+ modified,
4003
+ removed,
4004
+ total: changedCells.length
4005
+ };
4006
+ return changedCells;
4007
+ };
4008
+ const hasChanges = () => {
4009
+ detectChanges();
4010
+ // changeCountsRef is populated by detectChanges()
4011
+ return changeCountsRef.current.total > 0;
4012
+ };
4013
+ const acceptAICodeInAgentMode = () => {
4014
+ var _a, _b;
4015
+ const activeCellId = (_b = (_a = agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current) === null || _a === void 0 ? void 0 : _a.content.activeCell) === null || _b === void 0 ? void 0 : _b.model.id;
4016
+ if (!activeCellId || !hasUnreviewedChanges(activeCellId)) {
4017
+ return;
4018
+ }
4019
+ (0,_AgentReviewUtils__WEBPACK_IMPORTED_MODULE_2__.acceptSingleCellEdit)(activeCellId, agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current, notebookSnapshotAfterAgentExecutionRef.current, codeDiffStripesCompartments, changedCellsRef.current, setAgentReviewStatus);
4020
+ updateCellToolbarButtons();
4021
+ };
4022
+ const rejectAICodeInAgentMode = () => {
4023
+ var _a, _b;
4024
+ const activeCellId = (_b = (_a = agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current) === null || _a === void 0 ? void 0 : _a.content.activeCell) === null || _b === void 0 ? void 0 : _b.model.id;
4025
+ if (!activeCellId || !hasUnreviewedChanges(activeCellId)) {
4026
+ return;
4027
+ }
4028
+ (0,_AgentReviewUtils__WEBPACK_IMPORTED_MODULE_2__.rejectSingleCellEdit)(activeCellId, agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current, codeDiffStripesCompartments, changedCellsRef.current, setAgentReviewStatus, agentTargetNotebookPanelRef || undefined);
4029
+ updateCellToolbarButtons();
4030
+ };
4031
+ const acceptAllAICode = () => {
4032
+ (0,_AgentReviewUtils__WEBPACK_IMPORTED_MODULE_2__.acceptAllCellEdits)(agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current, notebookSnapshotAfterAgentExecutionRef.current, codeDiffStripesCompartments, changedCellsRef.current);
4033
+ updateCellToolbarButtons();
4034
+ };
4035
+ const rejectAllAICode = () => {
4036
+ (0,_AgentReviewUtils__WEBPACK_IMPORTED_MODULE_2__.rejectAllCellEdits)(agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current, codeDiffStripesCompartments, changedCellsRef.current);
4037
+ updateCellToolbarButtons();
4038
+ };
4039
+ const reviewAgentChanges = () => {
4040
+ if (!(agentTargetNotebookPanelRef === null || agentTargetNotebookPanelRef === void 0 ? void 0 : agentTargetNotebookPanelRef.current)) {
4041
+ return;
4042
+ }
4043
+ // Make the notebook panel the active notebook panel
4044
+ app.shell.activateById(agentTargetNotebookPanelRef.current.id);
4045
+ const currentNotebookSnapshot = (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_1__.getAIOptimizedCellsInNotebookPanel)(agentTargetNotebookPanelRef.current);
4046
+ notebookSnapshotAfterAgentExecutionRef.current = currentNotebookSnapshot;
4047
+ // Detect changes and populate refs
4048
+ const changedCells = detectChanges();
4049
+ changedCellsRef.current = changedCells;
3920
4050
  if (changedCells.length === 0) {
3921
4051
  console.log('No changes detected between snapshots');
3922
4052
  return;
@@ -3926,16 +4056,16 @@ const useAgentReview = ({ app, agentTargetNotebookPanelRef, codeDiffStripesCompa
3926
4056
  // Calculate the code diffs
3927
4057
  const { unifiedCodeString, unifiedDiffs } = (0,_utils_codeDiff__WEBPACK_IMPORTED_MODULE_3__.getCodeDiffsAndUnifiedCodeString)(change.originalCode, change.currentCode);
3928
4058
  // Write the unified code string to the cell
3929
- (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_2__.writeCodeToCellByIDInNotebookPanel)(agentTargetNotebookPanelRef.current, unifiedCodeString, change.cellId);
4059
+ (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_1__.writeCodeToCellByIDInNotebookPanel)(agentTargetNotebookPanelRef.current, unifiedCodeString, change.cellId);
3930
4060
  // Apply diff stripes to this cell
3931
4061
  (0,_utils_codeDiff__WEBPACK_IMPORTED_MODULE_3__.applyDiffStripesToCell)(agentTargetNotebookPanelRef.current, change.cellId, unifiedDiffs, codeDiffStripesCompartments.current);
3932
4062
  // Highlight the cell to draw attention
3933
- (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_2__.highlightCodeCellInNotebookPanel)(agentTargetNotebookPanelRef.current, change.cellId);
4063
+ (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_1__.highlightCodeCellInNotebookPanel)(agentTargetNotebookPanelRef.current, change.cellId);
3934
4064
  });
3935
4065
  // Scroll to the first changed cell
3936
4066
  const firstChangedCell = changedCells[0];
3937
4067
  if (firstChangedCell && agentTargetNotebookPanelRef.current) {
3938
- (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_2__.scrollToCell)(agentTargetNotebookPanelRef.current, firstChangedCell.cellId, undefined, 'start');
4068
+ (0,_utils_notebook__WEBPACK_IMPORTED_MODULE_1__.scrollToCell)(agentTargetNotebookPanelRef.current, firstChangedCell.cellId, undefined, 'start');
3939
4069
  }
3940
4070
  // Update toolbar buttons to show accept/reject buttons for cells with diffs
3941
4071
  updateCellToolbarButtons();
@@ -3961,7 +4091,10 @@ const useAgentReview = ({ app, agentTargetNotebookPanelRef, codeDiffStripesCompa
3961
4091
  reviewAgentChanges,
3962
4092
  clearAgentReviewDiffs,
3963
4093
  setNotebookSnapshotPreAgentExecution,
3964
- hasUnreviewedChanges
4094
+ hasUnreviewedChanges,
4095
+ getChangeCounts,
4096
+ getReviewProgress,
4097
+ hasChanges
3965
4098
  };
3966
4099
  };
3967
4100
 
@@ -5149,15 +5282,16 @@ __webpack_require__.r(__webpack_exports__);
5149
5282
  /* harmony export */ });
5150
5283
  /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @jupyterlab/apputils */ "webpack/sharing/consume/default/@jupyterlab/apputils");
5151
5284
  /* harmony import */ var _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__);
5152
- /* harmony import */ var _requirementsUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./requirementsUtils */ "./lib/Extensions/AppDeploy/requirementsUtils.js");
5153
- /* harmony import */ var _fileUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./fileUtils */ "./lib/Extensions/AppDeploy/fileUtils.js");
5285
+ /* harmony import */ var _requirementsUtils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./requirementsUtils */ "./lib/Extensions/AppDeploy/requirementsUtils.js");
5286
+ /* harmony import */ var _fileUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./fileUtils */ "./lib/Extensions/AppDeploy/fileUtils.js");
5154
5287
  /* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @lumino/coreutils */ "webpack/sharing/consume/default/@lumino/coreutils");
5155
5288
  /* harmony import */ var _lumino_coreutils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_lumino_coreutils__WEBPACK_IMPORTED_MODULE_1__);
5156
- /* harmony import */ var _DeployAppNotification__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./DeployAppNotification */ "./lib/Extensions/AppDeploy/DeployAppNotification.js");
5289
+ /* harmony import */ var _DeployAppNotification__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./DeployAppNotification */ "./lib/Extensions/AppDeploy/DeployAppNotification.js");
5157
5290
  /* harmony import */ var _auth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./auth */ "./lib/Extensions/AppDeploy/auth.js");
5158
5291
  /* harmony import */ var _authPopupUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./authPopupUtils */ "./lib/Extensions/AppDeploy/authPopupUtils.js");
5159
- /* harmony import */ var _FilesSelectorUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./FilesSelectorUtils */ "./lib/Extensions/AppDeploy/FilesSelectorUtils.js");
5292
+ /* harmony import */ var _FilesSelectorUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./FilesSelectorUtils */ "./lib/Extensions/AppDeploy/FilesSelectorUtils.js");
5160
5293
  /* harmony import */ var _utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/notebookMetadata */ "./lib/utils/notebookMetadata.js");
5294
+ /* harmony import */ var _AppPreview_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../AppPreview/utils */ "./lib/Extensions/AppPreview/utils.js");
5161
5295
  /*
5162
5296
  * Copyright (c) Saga Inc.
5163
5297
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
@@ -5171,6 +5305,7 @@ __webpack_require__.r(__webpack_exports__);
5171
5305
 
5172
5306
 
5173
5307
 
5308
+
5174
5309
  /*
5175
5310
  This function generates the requirements.txt file needed to host the streamlit app,
5176
5311
  and deploys it!
@@ -5205,16 +5340,17 @@ const deployStreamlitApp = async (notebookPanel, appDeployService, appManagerSer
5205
5340
  }
5206
5341
  const notebookPath = notebookPanel.context.path;
5207
5342
  const notebookID = (0,_utils_notebookMetadata__WEBPACK_IMPORTED_MODULE_4__.getNotebookIDAndSetIfNonexistant)(notebookPanel);
5343
+ const appFilename = notebookID ? (0,_AppPreview_utils__WEBPACK_IMPORTED_MODULE_5__.getAppNameFromNotebookID)(notebookID) : 'app.py';
5208
5344
  const notificationId = _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__.Notification.emit('Step 1/7: Gathering requirements...', 'in-progress', {
5209
5345
  autoClose: false
5210
5346
  });
5211
5347
  // Build the requirements.txt file
5212
- const requirementsContent = await (0,_requirementsUtils__WEBPACK_IMPORTED_MODULE_5__.generateRequirementsTxt)(notebookPanel);
5348
+ const requirementsContent = await (0,_requirementsUtils__WEBPACK_IMPORTED_MODULE_6__.generateRequirementsTxt)(notebookPanel, appFilename);
5213
5349
  // Save the files to the current directory
5214
- await (0,_fileUtils__WEBPACK_IMPORTED_MODULE_6__.saveFileWithKernel)(notebookPanel, './requirements.txt', requirementsContent);
5350
+ await (0,_fileUtils__WEBPACK_IMPORTED_MODULE_7__.saveFileWithKernel)(notebookPanel, './requirements.txt', requirementsContent);
5215
5351
  try {
5216
5352
  _jupyterlab_apputils__WEBPACK_IMPORTED_MODULE_0__.Notification.dismiss(notificationId);
5217
- selectedFiles = await (0,_FilesSelectorUtils__WEBPACK_IMPORTED_MODULE_7__.fileSelectorPopup)(notebookPanel);
5353
+ selectedFiles = await (0,_FilesSelectorUtils__WEBPACK_IMPORTED_MODULE_8__.fileSelectorPopup)(notebookPanel);
5218
5354
  }
5219
5355
  catch (error) {
5220
5356
  const errorMsg = 'Files selection failed: ' + error;
@@ -5259,7 +5395,7 @@ const deployStreamlitApp = async (notebookPanel, appDeployService, appManagerSer
5259
5395
  else {
5260
5396
  console.log("App deployment response:", response);
5261
5397
  const url = response.url;
5262
- (0,_DeployAppNotification__WEBPACK_IMPORTED_MODULE_8__.deployAppNotification)(url, appManagerService, newNotificationId);
5398
+ (0,_DeployAppNotification__WEBPACK_IMPORTED_MODULE_9__.deployAppNotification)(url, appManagerService, newNotificationId);
5263
5399
  }
5264
5400
  }
5265
5401
  catch (error) {
@@ -5604,9 +5740,9 @@ __webpack_require__.r(__webpack_exports__);
5604
5740
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
5605
5741
  */
5606
5742
 
5607
- const userPoolIdDev = 'us-east-1_Kk0f9mOfx';
5608
- const userPoolClientIdDev = '6ara3u3l8sss738hrhbq1qtiqf';
5609
- // TODO: modify to prod user ID and client ID on after creating teh cognito resources in prod
5743
+ const userPoolIdDev = 'us-east-1_s2V9RiyOa';
5744
+ const userPoolClientIdDev = '2sunerv2m6gp1qk3hib4t8oblh';
5745
+ // TODO: modify to prod user ID and client ID on after creating the cognito resources in prod
5610
5746
  const userPoolId = userPoolIdDev;
5611
5747
  const userPoolClientId = userPoolClientIdDev;
5612
5748
  const configureAmplify = () => {
@@ -5708,37 +5844,47 @@ __webpack_require__.r(__webpack_exports__);
5708
5844
  * Distributed under the terms of the GNU Affero General Public License v3.0 License.
5709
5845
  */
5710
5846
  // Function to generate requirements.txt content using the kernel with pipreqs
5711
- const generateRequirementsTxt = async (notebookPanel) => {
5847
+ const generateRequirementsTxt = async (notebookPanel, appFilename) => {
5712
5848
  // Initialize with fallback requirements in case kernel execution fails
5713
5849
  let requirementsContent = 'streamlit>=1.28.0';
5714
5850
  try {
5715
5851
  // Use the kernel to execute Python code using pipreqs
5716
5852
  const session = notebookPanel.sessionContext.session;
5717
5853
  if (session) {
5718
- const appPyPath = `app.py`;
5719
- // Create Python code to run pipreqs on the app.py file
5854
+ const sanitizedAppFilename = JSON.stringify(appFilename);
5855
+ // Create Python code to run pipreqs on the app file
5720
5856
  const pythonCode = `
5721
5857
  import subprocess
5722
5858
  import os
5859
+ import tempfile
5860
+ import shutil
5723
5861
 
5724
- # Check if app.py exists in the notebook directory
5725
- app_py_path = os.path.join(os.getcwd(), "${appPyPath}")
5862
+ # Check if the Streamlit app file exists in the notebook directory
5863
+ app_py_filename = ${sanitizedAppFilename}
5864
+ app_py_path = os.path.join(os.getcwd(), app_py_filename)
5726
5865
  if not os.path.exists(app_py_path):
5727
- print(f"Error: app.py not found at {app_py_path}")
5866
+ print(f"Error: {app_py_filename} not found at {app_py_path}")
5728
5867
  exit(1)
5868
+ notebook_dir = os.path.dirname(app_py_path)
5729
5869
 
5730
- # Make sure pipreqs is installed. Then
5731
- # 1. Create a requirements.in file
5732
- # 2. From the requirements.in file, generate the requirements.txt file with the canonical PyPI name of the packages
5733
- # and the versions as they exist on the user's terminal
5734
5870
  try:
5735
- # Run pipreqs on the directory containing app.py
5736
- notebook_dir = os.path.dirname(app_py_path)
5737
- generate_req_in_file = subprocess.run(
5738
- ['pipreqs', '--encoding=utf-8', '--savepath', 'requirements.in', '--force', notebook_dir],
5739
- capture_output=True,
5740
- text=True
5741
- )
5871
+ # Create a temporary directory and copy the app file into it
5872
+ with tempfile.TemporaryDirectory() as tmpdir:
5873
+ tmp_app_path = os.path.join(tmpdir, app_py_filename)
5874
+ shutil.copy(app_py_path, tmp_app_path)
5875
+
5876
+ # Run pipreqs on the temporary directory
5877
+ generate_req_in_file = subprocess.run(
5878
+ [
5879
+ 'pipreqs',
5880
+ '--encoding=utf-8',
5881
+ '--savepath', os.path.join(notebook_dir, 'requirements.in'),
5882
+ '--force',
5883
+ tmpdir
5884
+ ],
5885
+ capture_output=True,
5886
+ text=True
5887
+ )
5742
5888
 
5743
5889
  print("Log: ", generate_req_in_file.stderr)
5744
5890
 
@@ -10147,7 +10293,8 @@ __webpack_require__.r(__webpack_exports__);
10147
10293
  const MODEL_MAPPINGS = [
10148
10294
  { displayName: 'GPT 4.1', fullName: 'gpt-4.1' },
10149
10295
  { displayName: _utils_models__WEBPACK_IMPORTED_MODULE_2__.CLAUDE_SONNET_DISPLAY_NAME, fullName: _utils_models__WEBPACK_IMPORTED_MODULE_2__.CLAUDE_SONNET_MODEL_NAME },
10150
- { displayName: 'Gemini 2.5 Pro', fullName: 'gemini-2.5-pro-preview-03-25' }
10296
+ { displayName: 'Gemini 2.5 Pro', fullName: 'gemini-2.5-pro-preview-03-25' },
10297
+ { displayName: 'Gemini 3 Pro', fullName: 'gemini-3-pro-preview' }
10151
10298
  ];
10152
10299
  const ALL_MODEL_DISPLAY_NAMES = MODEL_MAPPINGS.map(mapping => mapping.displayName);
10153
10300
  // Maximum length for displayed model name before truncating
@@ -14312,6 +14459,98 @@ class CompletionWebsocketClient extends _BaseWebsocketClient__WEBPACK_IMPORTED_M
14312
14459
  }
14313
14460
 
14314
14461
 
14462
+ /***/ }),
14463
+
14464
+ /***/ "./node_modules/css-loader/dist/cjs.js!./style/AgentChangeControls.css":
14465
+ /*!*****************************************************************************!*\
14466
+ !*** ./node_modules/css-loader/dist/cjs.js!./style/AgentChangeControls.css ***!
14467
+ \*****************************************************************************/
14468
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
14469
+
14470
+ __webpack_require__.r(__webpack_exports__);
14471
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
14472
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
14473
+ /* harmony export */ });
14474
+ /* 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");
14475
+ /* 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__);
14476
+ /* 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");
14477
+ /* 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__);
14478
+ // Imports
14479
+
14480
+
14481
+ 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()));
14482
+ // Module
14483
+ ___CSS_LOADER_EXPORT___.push([module.id, `/*
14484
+ * Copyright (c) Saga Inc.
14485
+ * Distributed under the terms of the GNU Affero General Public License v3.0 License.
14486
+ */
14487
+
14488
+ .agent-change-counts {
14489
+ font-size: 12px;
14490
+ margin-bottom: 4px;
14491
+ display: flex;
14492
+ flex-direction: row;
14493
+ gap: 16px;
14494
+ align-items: center;
14495
+ }
14496
+
14497
+ .agent-change-count {
14498
+ display: inline-flex;
14499
+ align-items: baseline;
14500
+ gap: 4px;
14501
+ }
14502
+
14503
+ .agent-change-count-number {
14504
+ font-weight: bold;
14505
+ font-size: 14px;
14506
+ display: inline-block;
14507
+ text-align: left;
14508
+ }
14509
+
14510
+ .agent-change-count-text {
14511
+ color: var(--muted-text-color);
14512
+ font-size: 11px;
14513
+ }
14514
+
14515
+ .agent-change-count-added {
14516
+ color: var(--green-700);
14517
+ }
14518
+
14519
+ .agent-change-count-modified {
14520
+ color: var(--yellow-600);
14521
+ }
14522
+
14523
+ .agent-change-count-removed {
14524
+ color: var(--red-700);
14525
+ }
14526
+
14527
+ .agent-change-count-separator {
14528
+ color: var(--muted-text-color);
14529
+ margin: 0 4px;
14530
+ }
14531
+
14532
+ .agent-review-progress {
14533
+ font-size: 12px;
14534
+ color: var(--muted-text-color);
14535
+ }
14536
+
14537
+ .agent-change-controls-container {
14538
+ display: flex;
14539
+ flex-direction: column;
14540
+ gap: 8px;
14541
+ }
14542
+
14543
+ .agent-change-controls-buttons {
14544
+ display: flex;
14545
+ gap: 8px;
14546
+ align-items: center;
14547
+ }
14548
+
14549
+ `, "",{"version":3,"sources":["webpack://./style/AgentChangeControls.css"],"names":[],"mappings":"AAAA;;;EAGE;;AAEF;IACI,eAAe;IACf,kBAAkB;IAClB,aAAa;IACb,mBAAmB;IACnB,SAAS;IACT,mBAAmB;AACvB;;AAEA;IACI,oBAAoB;IACpB,qBAAqB;IACrB,QAAQ;AACZ;;AAEA;IACI,iBAAiB;IACjB,eAAe;IACf,qBAAqB;IACrB,gBAAgB;AACpB;;AAEA;IACI,8BAA8B;IAC9B,eAAe;AACnB;;AAEA;IACI,uBAAuB;AAC3B;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,8BAA8B;IAC9B,aAAa;AACjB;;AAEA;IACI,eAAe;IACf,8BAA8B;AAClC;;AAEA;IACI,aAAa;IACb,sBAAsB;IACtB,QAAQ;AACZ;;AAEA;IACI,aAAa;IACb,QAAQ;IACR,mBAAmB;AACvB","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-change-counts {\n font-size: 12px;\n margin-bottom: 4px;\n display: flex;\n flex-direction: row;\n gap: 16px;\n align-items: center;\n}\n\n.agent-change-count {\n display: inline-flex;\n align-items: baseline;\n gap: 4px;\n}\n\n.agent-change-count-number {\n font-weight: bold;\n font-size: 14px;\n display: inline-block;\n text-align: left;\n}\n\n.agent-change-count-text {\n color: var(--muted-text-color);\n font-size: 11px;\n}\n\n.agent-change-count-added {\n color: var(--green-700);\n}\n\n.agent-change-count-modified {\n color: var(--yellow-600);\n}\n\n.agent-change-count-removed {\n color: var(--red-700);\n}\n\n.agent-change-count-separator {\n color: var(--muted-text-color);\n margin: 0 4px;\n}\n\n.agent-review-progress {\n font-size: 12px;\n color: var(--muted-text-color);\n}\n\n.agent-change-controls-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.agent-change-controls-buttons {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n"],"sourceRoot":""}]);
14550
+ // Exports
14551
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
14552
+
14553
+
14315
14554
  /***/ }),
14316
14555
 
14317
14556
  /***/ "./node_modules/css-loader/dist/cjs.js!./style/AgentComponentHeader.css":
@@ -19436,6 +19675,60 @@ module.exports = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 10 10\" fill=\"n
19436
19675
 
19437
19676
  module.exports = "<svg width=\"33\" height=\"33\" viewBox=\"0 0 33 33\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"currentColor\">\n <path d=\"M27.8204 5.193C24.7983 2.1709 20.7805 0.506836 16.5068 0.506836C7.78625 0.506836 0.506836 7.78625 0.506836 16.5068C0.506836 25.2274 7.78625 32.5068 16.5068 32.5068C25.2274 32.5068 32.5068 25.2274 32.5068 16.5068C32.5068 12.2332 30.8426 8.2151 27.8207 5.19329L27.8204 5.193ZM23.627 21.5962L21.7553 17.7403L23.4737 16.9062L24.3955 18.8053L24.4401 18.6209C24.608 17.9267 24.6932 17.2155 24.6932 16.5068C24.6932 11.6336 20.7854 7.66893 15.9819 7.66893C11.1788 7.66893 7.27066 11.6336 7.27066 16.5068C7.27066 21.3572 11.1414 25.3073 15.9137 25.3444V27.2546C10.0885 27.217 5.36066 22.41 5.36066 16.5067C5.36066 10.5804 10.1253 5.75855 15.9819 5.75855C21.8385 5.75855 26.6032 10.5801 26.6032 16.5067C26.6032 17.2903 26.5175 18.0775 26.3484 18.8468L26.315 18.999L27.9027 18.0676L28.8693 19.7151L24.9693 22.003C24.3869 22.4896 23.6689 21.9597 23.6268 21.5962L23.627 21.5962Z\"/>\n </g>\n</svg>\n";
19438
19677
 
19678
+ /***/ }),
19679
+
19680
+ /***/ "./style/AgentChangeControls.css":
19681
+ /*!***************************************!*\
19682
+ !*** ./style/AgentChangeControls.css ***!
19683
+ \***************************************/
19684
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
19685
+
19686
+ __webpack_require__.r(__webpack_exports__);
19687
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
19688
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
19689
+ /* harmony export */ });
19690
+ /* 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");
19691
+ /* 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__);
19692
+ /* 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");
19693
+ /* 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__);
19694
+ /* 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");
19695
+ /* 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__);
19696
+ /* 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");
19697
+ /* 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__);
19698
+ /* 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");
19699
+ /* 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__);
19700
+ /* 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");
19701
+ /* 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__);
19702
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_AgentChangeControls_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./AgentChangeControls.css */ "./node_modules/css-loader/dist/cjs.js!./style/AgentChangeControls.css");
19703
+
19704
+
19705
+
19706
+
19707
+
19708
+
19709
+
19710
+
19711
+
19712
+
19713
+
19714
+ var options = {};
19715
+
19716
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
19717
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
19718
+
19719
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
19720
+
19721
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
19722
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
19723
+
19724
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_AgentChangeControls_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
19725
+
19726
+
19727
+
19728
+
19729
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_AgentChangeControls_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_AgentChangeControls_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_AgentChangeControls_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
19730
+
19731
+
19439
19732
  /***/ }),
19440
19733
 
19441
19734
  /***/ "./style/AgentComponentHeader.css":
@@ -21599,4 +21892,4 @@ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js
21599
21892
  /***/ })
21600
21893
 
21601
21894
  }]);
21602
- //# sourceMappingURL=lib_index_js.8f1845da6bf2b128c049.js.map
21895
+ //# sourceMappingURL=lib_index_js.5ec1e525d244fc8588cf.js.map