sage-agent-internal 0.2.5__tar.gz → 0.2.6__tar.gz
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.
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/.gitignore +1 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/PKG-INFO +1 -1
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/package.json +1 -1
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/_version.py +1 -1
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/package.json +2 -2
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/schemas/sage-agent-internal/package.json.orig +1 -1
- sage_agent_internal-0.2.5/sage_agent_internal/labextension/static/remoteEntry.c97bd67ec0a2caecdfcb.js → sage_agent_internal-0.2.6/sage_agent_internal/labextension/static/remoteEntry.4a1093a43fdce6a4f6e0.js +1 -1
- sage_agent_internal-0.2.6/ui-tests/README.md +22 -0
- sage_agent_internal-0.2.6/ui-tests/package.json +22 -0
- sage_agent_internal-0.2.6/ui-tests/playwright.config.js +27 -0
- sage_agent_internal-0.2.6/ui-tests/setup-tests.bat +38 -0
- sage_agent_internal-0.2.6/ui-tests/setup-tests.sh +36 -0
- sage_agent_internal-0.2.6/ui-tests/tests/README_SAGE_LLM_TESTS.md +133 -0
- sage_agent_internal-0.2.6/ui-tests/tests/SAGE_LLM_TESTING_PLAN.md +238 -0
- sage_agent_internal-0.2.6/ui-tests/tests/config-example.ts +64 -0
- sage_agent_internal-0.2.6/ui-tests/tests/sage_agent.spec.ts +55 -0
- sage_agent_internal-0.2.6/ui-tests/tests/sage_diff_interactions.spec.ts +571 -0
- sage_agent_internal-0.2.6/ui-tests/tests/sage_llm_test.spec.ts +814 -0
- sage_agent_internal-0.2.6/ui-tests/yarn.lock +5159 -0
- sage_agent_internal-0.2.5/ui-tests/README.md +0 -167
- sage_agent_internal-0.2.5/ui-tests/package.json +0 -15
- sage_agent_internal-0.2.5/ui-tests/playwright.config.js +0 -14
- sage_agent_internal-0.2.5/ui-tests/tests/sage_agent.spec.ts +0 -36
- sage_agent_internal-0.2.5/ui-tests/yarn.lock +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/.copier-answers.yml +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/.keep +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/.prettierignore +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/.vscode/settings.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/.yarnrc.yml +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/CHANGELOG.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/CLAUDE.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/LICENSE +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/README.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/RELEASE.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/__tests__/sage_agent.spec.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/babel.config.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/cli-chat-tool/index.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/cli-chat-tool/package-lock.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/cli-chat-tool/package.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/cli-chat-tool/tsconfig.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/cli-chat-tool/yarn.lock +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/install.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/jest.config.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/package-lock.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/pyproject.toml +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/__init__.py +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/schemas/sage-agent-internal/plugin.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/122.3c2c200586e65203b674.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/220.d384edfd5bbcfda33a2a.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/262.3fc4ad88e6f8c273d4ad.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/353.2c285601a208c3735929.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/363.6fc8d18eedbf137940f2.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/364.c2fb82c6f484097228c6.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/439.3cb9ac7022c8a6074647.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/481.96b91d018df31d54d173.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/553.b7906877d98a62265533.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/553.b7906877d98a62265533.js.LICENSE.txt +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/635.8c395c854aa2b140b668.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/713.103cb5ae248be385b08a.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/742.b204789055ded4e07883.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/747.b8e9485ebcbb3066eb4b.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/821.b58f29814f5900f1f6f8.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/845.cc2bc80fbfea6d20a396.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/888.09382cc93a2ad3932b31.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/968.980219bfdaa6b20f56cb.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/973.016a586759b281b79f91.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/973.016a586759b281b79f91.js.LICENSE.txt +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/style.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/sage_agent_internal/labextension/static/third-party-licenses.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/schema/plugin.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/setup.py +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/AppState.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/BackendTools/DatabaseTools.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/BackendTools/FilesystemTools.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/BackendTools/WebTools.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/BackendTools/index.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/BackendTools/tickers.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/CellTrackingService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ActionHistory.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatContextMenu/ChatContextLoaders.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatContextMenu/ChatContextMenu.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatContextMenu/ChatContextMenuLogic.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatContextMenu/ChatContextMenuUtils.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatContextMenu/ContextCacheService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatContextMenu/ContextCellHighlighter.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatContextMenu/KernelExecutionListener.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatContextMenu/icons.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatHistoryManager.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatInputManager.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatMessages.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ChatUIHelper.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ConversationService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/ConversationServiceUtils.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Chat/RichTextChatInput.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/CodebaseManager.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/ChatboxContext.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/CodeConfirmationDialog.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/DiffApprovalDialog.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/DiffNavigationContent.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/DiffNavigationWidget.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/InlineCompletionWidget.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/LLMStateDisplay/DiffItem.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/LLMStateDisplay/LLMStateContent.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/LLMStateDisplay/LLMStateDisplay.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/LLMStateDisplay/icons.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/LLMStateDisplay/index.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/LLMStateDisplay/types.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/MoreOptionsDisplay.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/NewChatDisplayWidget.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/PlanStateDisplay.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/RejectionFeedbackDialog.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/Settings/SettingsWidget.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/SnippetCreationWidget/SnippetCreationContent.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/SnippetCreationWidget/SnippetCreationWidget.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/SnippetCreationWidget/SnippetForm.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/SnippetCreationWidget/SnippetFormModal.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/SnippetCreationWidget/SnippetList.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/SnippetCreationWidget/index.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/SnippetCreationWidget/types.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/UpdateBanner/UpdateBannerWidget.tsx +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/chatbox.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Components/icons.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Config/ConfigService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Config/models.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Config/optional_env.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Config/prompts/claude_system_prompt.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Config/prompts/claude_system_prompt_ask_mode.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Config/prompts/claude_system_prompt_edit_full_cell.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Config/prompts/claude_system_prompt_edit_selection.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Config/prompts/claude_system_prompt_fast_mode.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Config/tools.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Notebook/InlineDiffService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Notebook/NotebookCellTools.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Notebook/NotebookChatContainer.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Notebook/NotebookContextManager.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Notebook/NotebookDiffManager.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Notebook/NotebookDiffTools.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Notebook/NotebookStateService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Notebook/NotebookTools.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Notebook/WaitingUserReplyBoxManager.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/NotebookSettingsContainer.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/AnthropicMessageCreator.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/AnthropicService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/AnthropicStreamHandler.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/CompletionManager.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/ContextService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/DatabaseMetadataCache.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/DiffStateService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/IChatService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/NotebookCellStateService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/ServiceFactory.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/ServiceUtils.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/TabCompletionService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/Services/ToolService.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/ThreadManager.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/TrackingIDUtility.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/commands.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/eval_commands.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/index.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/plugin.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/types/json.d.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/types.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/utils/VariableExtractor.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/utils/caching.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/utils/contextTagUtils.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/utils/kernelPreview.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/utils/kernelUtils.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/utils/stateDBCaching.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/utils/tokenUtils.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/utils/toolDisplay.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/src/utils.ts +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/base.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/chat-container.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/chat-mention-dropdown.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/code-mirror-merge.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/codebase-manager.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/diff-approval.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/diff-edit-mode.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/diff-mode.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/diff-navigation.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/floating-bottom-widget.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/fonts.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/agent-mode-shiny.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/agent-mode.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/approve.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/arrow-down.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/arrow-up.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/ask-mode.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/check.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/dashed-circle.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/hands-on-mode.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/open.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/reapply.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/reject.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/run.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/search.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/send.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/chat_input/stop.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/context_menu/cell.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/context_menu/data.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/context_menu/insert.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/context_menu/search.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/context_menu/snippets.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/context_menu/variable.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/state_display/menu-close.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/state_display/menu-icon.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/icons/state_display/run_cell.svg +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/index.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/index.js +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/inline-diff-approval.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/left-side-menu.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/llm-state-display.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/minus-icon.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/modal.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/mode-selector-dropdown.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/more-options.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/new-chat-display.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/plan-state-display.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/settings-widget.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/snippet-creation.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/style.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/tab-completion.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/style/update-banner.css +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/templates/rule.example.md +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/tsconfig.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/tsconfig.test.json +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/ui-tests/jupyter_server_test_config.py +0 -0
- {sage_agent_internal-0.2.5 → sage_agent_internal-0.2.6}/yarn.lock +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: sage_agent_internal
|
3
|
-
Version: 0.2.
|
3
|
+
Version: 0.2.6
|
4
4
|
Summary: Sage Agent - Your Jupyter Notebook Assistant
|
5
5
|
Project-URL: Homepage, https://github.com/AlpineX-Labs/jupyter-sage-agent-internal
|
6
6
|
Project-URL: Bug Tracker, https://github.com/AlpineX-Labs/jupyter-sage-agent-internal/issues
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "sage-agent-internal",
|
3
|
-
"version": "0.2.
|
3
|
+
"version": "0.2.6",
|
4
4
|
"description": "Sage Agent - Your Jupyter Notebook Assistant",
|
5
5
|
"keywords": [
|
6
6
|
"jupyter",
|
@@ -127,7 +127,7 @@
|
|
127
127
|
"outputDir": "sage_agent_internal/labextension",
|
128
128
|
"schemaDir": "schema",
|
129
129
|
"_build": {
|
130
|
-
"load": "static/remoteEntry.
|
130
|
+
"load": "static/remoteEntry.4a1093a43fdce6a4f6e0.js",
|
131
131
|
"extension": "./extension",
|
132
132
|
"style": "./style"
|
133
133
|
}
|
@@ -1 +1 @@
|
|
1
|
-
var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,f,d,l,u,c,s,p,h,b,m,g,v,y,j,w,P,k,S,O={484:(e,r,t)=>{var a={"./index":()=>Promise.all([t.e(353),t.e(747),t.e(122),t.e(973),t.e(760),t.e(345),t.e(379),t.e(839),t.e(968)]).then(()=>()=>t(9040)),"./extension":()=>Promise.all([t.e(353),t.e(747),t.e(122),t.e(973),t.e(760),t.e(345),t.e(379),t.e(839),t.e(968)]).then(()=>()=>t(9040)),"./style":()=>t.e(363).then(()=>()=>t(8363))},n=(e,r)=>(t.R=r,r=t.o(a,e)?a[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),o=(e,r)=>{if(t.S){var a="default",n=t.S[a];if(n&&n!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[a]=e,t.I(a,r)}};t.d(r,{get:()=>n,init:()=>o})}},x={};function _(e){var r=x[e];if(void 0!==r)return r.exports;var t=x[e]={id:e,exports:{}};return O[e].call(t.exports,t,t.exports,_),t.exports}_.m=O,_.c=x,_.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return _.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,_.t=function(t,a){if(1&a&&(t=this(t)),8&a)return t;if("object"==typeof t&&t){if(4&a&&t.__esModule)return t;if(16&a&&"function"==typeof t.then)return t}var n=Object.create(null);_.r(n);var o={};e=e||[null,r({}),r([]),r(r)];for(var i=2&a&&t;("object"==typeof i||"function"==typeof i)&&!~e.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach(e=>o[e]=()=>t[e]);return o.default=()=>t,_.d(n,o),n},_.d=(e,r)=>{for(var t in r)_.o(r,t)&&!_.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},_.f={},_.e=e=>Promise.all(Object.keys(_.f).reduce((r,t)=>(_.f[t](e,r),r),[])),_.u=e=>e+"."+{122:"3c2c200586e65203b674",220:"d384edfd5bbcfda33a2a",262:"3fc4ad88e6f8c273d4ad",353:"2c285601a208c3735929",363:"6fc8d18eedbf137940f2",364:"c2fb82c6f484097228c6",439:"3cb9ac7022c8a6074647",481:"96b91d018df31d54d173",553:"b7906877d98a62265533",635:"8c395c854aa2b140b668",713:"103cb5ae248be385b08a",742:"b204789055ded4e07883",747:"b8e9485ebcbb3066eb4b",821:"b58f29814f5900f1f6f8",845:"cc2bc80fbfea6d20a396",888:"09382cc93a2ad3932b31",968:"980219bfdaa6b20f56cb",973:"016a586759b281b79f91"}[e]+".js?v="+{122:"3c2c200586e65203b674",220:"d384edfd5bbcfda33a2a",262:"3fc4ad88e6f8c273d4ad",353:"2c285601a208c3735929",363:"6fc8d18eedbf137940f2",364:"c2fb82c6f484097228c6",439:"3cb9ac7022c8a6074647",481:"96b91d018df31d54d173",553:"b7906877d98a62265533",635:"8c395c854aa2b140b668",713:"103cb5ae248be385b08a",742:"b204789055ded4e07883",747:"b8e9485ebcbb3066eb4b",821:"b58f29814f5900f1f6f8",845:"cc2bc80fbfea6d20a396",888:"09382cc93a2ad3932b31",968:"980219bfdaa6b20f56cb",973:"016a586759b281b79f91"}[e],_.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),_.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},a="sage-agent-internal:",_.l=(e,r,n,o)=>{if(t[e])t[e].push(r);else{var i,f;if(void 0!==n)for(var d=document.getElementsByTagName("script"),l=0;l<d.length;l++){var u=d[l];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==a+n){i=u;break}}i||(f=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,_.nc&&i.setAttribute("nonce",_.nc),i.setAttribute("data-webpack",a+n),i.src=e),t[e]=[r];var c=(r,a)=>{i.onerror=i.onload=null,clearTimeout(s);var n=t[e];if(delete t[e],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(a)),r)return r(a)},s=setTimeout(c.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=c.bind(null,i.onerror),i.onload=c.bind(null,i.onload),f&&document.head.appendChild(i)}},_.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{_.S={};var e={},r={};_.I=(t,a)=>{a||(a=[]);var n=r[t];if(n||(n=r[t]={}),!(a.indexOf(n)>=0)){if(a.push(n),e[t])return e[t];_.o(_.S,t)||(_.S[t]={});var o=_.S[t],i="sage-agent-internal",f=(e,r,t,a)=>{var n=o[e]=o[e]||{},f=n[r];(!f||!f.loaded&&(!a!=!f.eager?a:i>f.from))&&(n[r]={get:t,from:i,eager:!!a})},d=[];return"default"===t&&(f("@anthropic-ai/sdk","0.54.0",()=>_.e(742).then(()=>()=>_(2742))),f("best-effort-json-parser","1.2.1",()=>_.e(439).then(()=>()=>_(7820))),f("codemirror-merge-alpinex","6.10.4",()=>Promise.all([_.e(353),_.e(635),_.e(760),_.e(839)]).then(()=>()=>_(7635))),f("codemirror","6.0.2",()=>Promise.all([_.e(353),_.e(821),_.e(747),_.e(760)]).then(()=>()=>_(8821))),f("diff2html","3.4.52",()=>Promise.all([_.e(122),_.e(379)]).then(()=>()=>_(2122))),f("diff","7.0.0",()=>_.e(713).then(()=>()=>_(5713))),f("diff","0",()=>_.e(481).then(()=>()=>_(7481))),f("marked","15.0.12",()=>_.e(364).then(()=>()=>_(4364))),f("partial-json","0.1.7",()=>_.e(220).then(()=>()=>_(9220))),f("react-bootstrap","2.10.10",()=>Promise.all([_.e(553),_.e(345),_.e(628)]).then(()=>()=>_(4553))),f("rxjs","7.8.2",()=>_.e(888).then(()=>()=>_(2888))),f("sage-agent-internal","0.2.5",()=>Promise.all([_.e(353),_.e(747),_.e(122),_.e(973),_.e(760),_.e(345),_.e(379),_.e(839),_.e(968)]).then(()=>()=>_(9040))),f("uuid","11.1.0",()=>_.e(262).then(()=>()=>_(8262)))),e[t]=d.length?Promise.all(d).then(()=>e[t]=1):1}}})(),(()=>{var e;_.g.importScripts&&(e=_.g.location+"");var r=_.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),_.p=e})(),n=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),a=t[1]?r(t[1]):[];return t[2]&&(a.length++,a.push.apply(a,r(t[2]))),t[3]&&(a.push([]),a.push.apply(a,r(t[3]))),a},o=(e,r)=>{e=n(e),r=n(r);for(var t=0;;){if(t>=e.length)return t<r.length&&"u"!=(typeof r[t])[0];var a=e[t],o=(typeof a)[0];if(t>=r.length)return"u"==o;var i=r[t],f=(typeof i)[0];if(o!=f)return"o"==o&&"n"==f||"s"==f||"u"==o;if("o"!=o&&"u"!=o&&a!=i)return a<i;t++}},i=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var a=1,n=1;n<e.length;n++)a--,t+="u"==(typeof(f=e[n]))[0]?"-":(a>0?".":"")+(a=2,f);return t}var o=[];for(n=1;n<e.length;n++){var f=e[n];o.push(0===f?"not("+d()+")":1===f?"("+d()+" || "+d()+")":2===f?o.pop()+" "+o.pop():i(f))}return d();function d(){return o.pop().replace(/^\((.+)\)$/,"$1")}},f=(e,r)=>{if(0 in e){r=n(r);var t=e[0],a=t<0;a&&(t=-t-1);for(var o=0,i=1,d=!0;;i++,o++){var l,u,c=i<e.length?(typeof e[i])[0]:"";if(o>=r.length||"o"==(u=(typeof(l=r[o]))[0]))return!d||("u"==c?i>t&&!a:""==c!=a);if("u"==u){if(!d||"u"!=c)return!1}else if(d)if(c==u)if(i<=t){if(l!=e[i])return!1}else{if(a?l>e[i]:l<e[i])return!1;l!=e[i]&&(d=!1)}else if("s"!=c&&"n"!=c){if(a||i<=t)return!1;d=!1,i--}else{if(i<=t||u<c!=a)return!1;d=!1}else"s"!=c&&"n"!=c&&(d=!1,i--)}}var s=[],p=s.pop.bind(s);for(o=1;o<e.length;o++){var h=e[o];s.push(1==h?p()|p():2==h?p()&p():h?f(h,r):!p())}return!!p()},d=(e,r)=>e&&_.o(e,r),l=e=>(e.loaded=1,e.get()),u=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),c=(e,r,t,a)=>{var n=a?u(e[r]):e[r];return(r=Object.keys(n).reduce((e,r)=>!f(t,r)||e&&!o(e,r)?e:r,0))&&n[r]},s=(e,r,t)=>{var a=t?u(e[r]):e[r];return Object.keys(a).reduce((e,r)=>!e||!a[e].loaded&&o(e,r)?r:e,0)},p=(e,r,t,a)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+i(a)+")",h=(e,r,t,a,n)=>{var o=e[t];return"No satisfying version ("+i(a)+")"+(n?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(o).map(e=>e+" from "+o[e].from).join(", ")},b=e=>{throw new Error(e)},m=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},v=(e,r,t)=>t?t():((e,r)=>b("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),y=(g=e=>function(r,t,a,n,o){var i=_.I(r);return i&&i.then&&!a?i.then(e.bind(e,r,_.S[r],t,!1,n,o)):e(r,_.S[r],t,a,n,o)})((e,r,t,a,n,o)=>{if(!d(r,t))return v(e,t,o);var i=c(r,t,n,a);return i?l(i):o?o():void b(h(r,e,t,n,a))}),j=g((e,r,t,a,n,o)=>{if(!d(r,t))return v(e,t,o);var i=s(r,t,a);return f(n,i)||m(p(r,t,i,n)),l(r[t][i])}),w={},P={195:()=>j("default","@codemirror/state",!1,[1,6,2,0]),2084:()=>j("default","@codemirror/language",!1,[1,6,0,0]),3708:()=>j("default","@lezer/common",!1,[1,1,0,0]),5024:()=>j("default","@codemirror/view",!1,[1,6,9,6]),3345:()=>j("default","react",!1,[1,18,2,0]),3379:()=>y("default","diff",!1,[1,7,0,0],()=>_.e(713).then(()=>()=>_(5713))),1839:()=>j("default","@lezer/highlight",!1,[1,1,0,0]),113:()=>y("default","diff",!1,[1,8,0,1],()=>_.e(481).then(()=>()=>_(7481))),135:()=>y("default","@anthropic-ai/sdk",!1,[2,0,54,0],()=>_.e(742).then(()=>()=>_(2742))),389:()=>j("default","@jupyterlab/statedb",!1,[1,4,4,6]),1336:()=>y("default","diff2html",!1,[1,3,4,51],()=>()=>_(2122)),2311:()=>y("default","react-bootstrap",!1,[1,2,10,10],()=>Promise.all([_.e(553),_.e(628)]).then(()=>()=>_(4553))),3139:()=>y("default","codemirror-merge-alpinex",!1,[1,6,10,4],()=>_.e(635).then(()=>()=>_(7635))),3427:()=>j("default","@jupyterlab/docmanager",!1,[1,4,4,6]),3550:()=>y("default","marked",!1,[1,15,0,11],()=>_.e(364).then(()=>()=>_(4364))),4602:()=>j("default","@lumino/signaling",!1,[1,2,0,0]),4744:()=>y("default","uuid",!1,[1,11,1,0],()=>_.e(262).then(()=>()=>_(8262))),5256:()=>j("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",0]),5280:()=>j("default","@jupyterlab/extensionmanager",!1,[1,4,4,6]),6750:()=>y("default","rxjs",!1,[1,7,8,2],()=>_.e(888).then(()=>()=>_(2888))),7332:()=>y("default","codemirror",!1,[1,6,0,2],()=>_.e(821).then(()=>()=>_(8821))),7570:()=>y("default","partial-json",!1,[2,0,1,7],()=>_.e(220).then(()=>()=>_(9220))),8118:()=>j("default","@jupyterlab/codemirror",!1,[1,4,4,6]),8276:()=>y("default","best-effort-json-parser",!1,[1,1,1,3],()=>_.e(439).then(()=>()=>_(7820))),8361:()=>j("default","@jupyterlab/settingregistry",!1,[1,4,4,6]),8531:()=>j("default","@jupyterlab/notebook",!1,[1,4,4,6]),9159:()=>j("default","@jupyterlab/ui-components",!1,[1,4,4,6]),9715:()=>j("default","@jupyterlab/apputils",!1,[1,4,5,6]),7628:()=>j("default","react-dom",!1,[1,18,2,0])},k={345:[3345],379:[3379],628:[7628],760:[195,2084,3708,5024],839:[1839],968:[113,135,389,1336,2311,3139,3427,3550,4602,4744,5256,5280,6750,7332,7570,8118,8276,8361,8531,9159,9715]},S={},_.f.consumes=(e,r)=>{_.o(k,e)&&k[e].forEach(e=>{if(_.o(w,e))return r.push(w[e]);if(!S[e]){var t=r=>{w[e]=0,_.m[e]=t=>{delete _.c[e],t.exports=r()}};S[e]=!0;var a=r=>{delete w[e],_.m[e]=t=>{throw delete _.c[e],r}};try{var n=P[e]();n.then?r.push(w[e]=n.then(t).catch(a)):t(n)}catch(e){a(e)}}})},(()=>{_.b=document.baseURI||self.location.href;var e={431:0};_.f.j=(r,t)=>{var a=_.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(345|379|628|760|839)$/.test(r))e[r]=0;else{var n=new Promise((t,n)=>a=e[r]=[t,n]);t.push(a[2]=n);var o=_.p+_.u(r),i=new Error;_.l(o,t=>{if(_.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+n+": "+o+")",i.name="ChunkLoadError",i.type=n,i.request=o,a[1](i)}},"chunk-"+r,r)}};var r=(r,t)=>{var a,n,[o,i,f]=t,d=0;if(o.some(r=>0!==e[r])){for(a in i)_.o(i,a)&&(_.m[a]=i[a]);f&&f(_)}for(r&&r(t);d<o.length;d++)n=o[d],_.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunksage_agent_internal=self.webpackChunksage_agent_internal||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),_.nc=void 0;var E=_(484);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["sage-agent-internal"]=E})();
|
1
|
+
var _JUPYTERLAB;(()=>{"use strict";var e,r,t,a,n,o,i,f,d,l,u,c,s,p,h,b,m,g,v,y,j,w,P,k,S,O={484:(e,r,t)=>{var a={"./index":()=>Promise.all([t.e(353),t.e(747),t.e(122),t.e(973),t.e(760),t.e(345),t.e(379),t.e(839),t.e(968)]).then(()=>()=>t(9040)),"./extension":()=>Promise.all([t.e(353),t.e(747),t.e(122),t.e(973),t.e(760),t.e(345),t.e(379),t.e(839),t.e(968)]).then(()=>()=>t(9040)),"./style":()=>t.e(363).then(()=>()=>t(8363))},n=(e,r)=>(t.R=r,r=t.o(a,e)?a[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),t.R=void 0,r),o=(e,r)=>{if(t.S){var a="default",n=t.S[a];if(n&&n!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[a]=e,t.I(a,r)}};t.d(r,{get:()=>n,init:()=>o})}},x={};function _(e){var r=x[e];if(void 0!==r)return r.exports;var t=x[e]={id:e,exports:{}};return O[e].call(t.exports,t,t.exports,_),t.exports}_.m=O,_.c=x,_.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return _.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,_.t=function(t,a){if(1&a&&(t=this(t)),8&a)return t;if("object"==typeof t&&t){if(4&a&&t.__esModule)return t;if(16&a&&"function"==typeof t.then)return t}var n=Object.create(null);_.r(n);var o={};e=e||[null,r({}),r([]),r(r)];for(var i=2&a&&t;("object"==typeof i||"function"==typeof i)&&!~e.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach(e=>o[e]=()=>t[e]);return o.default=()=>t,_.d(n,o),n},_.d=(e,r)=>{for(var t in r)_.o(r,t)&&!_.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},_.f={},_.e=e=>Promise.all(Object.keys(_.f).reduce((r,t)=>(_.f[t](e,r),r),[])),_.u=e=>e+"."+{122:"3c2c200586e65203b674",220:"d384edfd5bbcfda33a2a",262:"3fc4ad88e6f8c273d4ad",353:"2c285601a208c3735929",363:"6fc8d18eedbf137940f2",364:"c2fb82c6f484097228c6",439:"3cb9ac7022c8a6074647",481:"96b91d018df31d54d173",553:"b7906877d98a62265533",635:"8c395c854aa2b140b668",713:"103cb5ae248be385b08a",742:"b204789055ded4e07883",747:"b8e9485ebcbb3066eb4b",821:"b58f29814f5900f1f6f8",845:"cc2bc80fbfea6d20a396",888:"09382cc93a2ad3932b31",968:"980219bfdaa6b20f56cb",973:"016a586759b281b79f91"}[e]+".js?v="+{122:"3c2c200586e65203b674",220:"d384edfd5bbcfda33a2a",262:"3fc4ad88e6f8c273d4ad",353:"2c285601a208c3735929",363:"6fc8d18eedbf137940f2",364:"c2fb82c6f484097228c6",439:"3cb9ac7022c8a6074647",481:"96b91d018df31d54d173",553:"b7906877d98a62265533",635:"8c395c854aa2b140b668",713:"103cb5ae248be385b08a",742:"b204789055ded4e07883",747:"b8e9485ebcbb3066eb4b",821:"b58f29814f5900f1f6f8",845:"cc2bc80fbfea6d20a396",888:"09382cc93a2ad3932b31",968:"980219bfdaa6b20f56cb",973:"016a586759b281b79f91"}[e],_.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),_.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},a="sage-agent-internal:",_.l=(e,r,n,o)=>{if(t[e])t[e].push(r);else{var i,f;if(void 0!==n)for(var d=document.getElementsByTagName("script"),l=0;l<d.length;l++){var u=d[l];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==a+n){i=u;break}}i||(f=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,_.nc&&i.setAttribute("nonce",_.nc),i.setAttribute("data-webpack",a+n),i.src=e),t[e]=[r];var c=(r,a)=>{i.onerror=i.onload=null,clearTimeout(s);var n=t[e];if(delete t[e],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(a)),r)return r(a)},s=setTimeout(c.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=c.bind(null,i.onerror),i.onload=c.bind(null,i.onload),f&&document.head.appendChild(i)}},_.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{_.S={};var e={},r={};_.I=(t,a)=>{a||(a=[]);var n=r[t];if(n||(n=r[t]={}),!(a.indexOf(n)>=0)){if(a.push(n),e[t])return e[t];_.o(_.S,t)||(_.S[t]={});var o=_.S[t],i="sage-agent-internal",f=(e,r,t,a)=>{var n=o[e]=o[e]||{},f=n[r];(!f||!f.loaded&&(!a!=!f.eager?a:i>f.from))&&(n[r]={get:t,from:i,eager:!!a})},d=[];return"default"===t&&(f("@anthropic-ai/sdk","0.54.0",()=>_.e(742).then(()=>()=>_(2742))),f("best-effort-json-parser","1.2.1",()=>_.e(439).then(()=>()=>_(7820))),f("codemirror-merge-alpinex","6.10.4",()=>Promise.all([_.e(353),_.e(635),_.e(760),_.e(839)]).then(()=>()=>_(7635))),f("codemirror","6.0.2",()=>Promise.all([_.e(353),_.e(821),_.e(747),_.e(760)]).then(()=>()=>_(8821))),f("diff2html","3.4.52",()=>Promise.all([_.e(122),_.e(379)]).then(()=>()=>_(2122))),f("diff","7.0.0",()=>_.e(713).then(()=>()=>_(5713))),f("diff","0",()=>_.e(481).then(()=>()=>_(7481))),f("marked","15.0.12",()=>_.e(364).then(()=>()=>_(4364))),f("partial-json","0.1.7",()=>_.e(220).then(()=>()=>_(9220))),f("react-bootstrap","2.10.10",()=>Promise.all([_.e(553),_.e(345),_.e(628)]).then(()=>()=>_(4553))),f("rxjs","7.8.2",()=>_.e(888).then(()=>()=>_(2888))),f("sage-agent-internal","0.2.6",()=>Promise.all([_.e(353),_.e(747),_.e(122),_.e(973),_.e(760),_.e(345),_.e(379),_.e(839),_.e(968)]).then(()=>()=>_(9040))),f("uuid","11.1.0",()=>_.e(262).then(()=>()=>_(8262)))),e[t]=d.length?Promise.all(d).then(()=>e[t]=1):1}}})(),(()=>{var e;_.g.importScripts&&(e=_.g.location+"");var r=_.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var a=t.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=t[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),_.p=e})(),n=e=>{var r=e=>e.split(".").map(e=>+e==e?+e:e),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),a=t[1]?r(t[1]):[];return t[2]&&(a.length++,a.push.apply(a,r(t[2]))),t[3]&&(a.push([]),a.push.apply(a,r(t[3]))),a},o=(e,r)=>{e=n(e),r=n(r);for(var t=0;;){if(t>=e.length)return t<r.length&&"u"!=(typeof r[t])[0];var a=e[t],o=(typeof a)[0];if(t>=r.length)return"u"==o;var i=r[t],f=(typeof i)[0];if(o!=f)return"o"==o&&"n"==f||"s"==f||"u"==o;if("o"!=o&&"u"!=o&&a!=i)return a<i;t++}},i=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var a=1,n=1;n<e.length;n++)a--,t+="u"==(typeof(f=e[n]))[0]?"-":(a>0?".":"")+(a=2,f);return t}var o=[];for(n=1;n<e.length;n++){var f=e[n];o.push(0===f?"not("+d()+")":1===f?"("+d()+" || "+d()+")":2===f?o.pop()+" "+o.pop():i(f))}return d();function d(){return o.pop().replace(/^\((.+)\)$/,"$1")}},f=(e,r)=>{if(0 in e){r=n(r);var t=e[0],a=t<0;a&&(t=-t-1);for(var o=0,i=1,d=!0;;i++,o++){var l,u,c=i<e.length?(typeof e[i])[0]:"";if(o>=r.length||"o"==(u=(typeof(l=r[o]))[0]))return!d||("u"==c?i>t&&!a:""==c!=a);if("u"==u){if(!d||"u"!=c)return!1}else if(d)if(c==u)if(i<=t){if(l!=e[i])return!1}else{if(a?l>e[i]:l<e[i])return!1;l!=e[i]&&(d=!1)}else if("s"!=c&&"n"!=c){if(a||i<=t)return!1;d=!1,i--}else{if(i<=t||u<c!=a)return!1;d=!1}else"s"!=c&&"n"!=c&&(d=!1,i--)}}var s=[],p=s.pop.bind(s);for(o=1;o<e.length;o++){var h=e[o];s.push(1==h?p()|p():2==h?p()&p():h?f(h,r):!p())}return!!p()},d=(e,r)=>e&&_.o(e,r),l=e=>(e.loaded=1,e.get()),u=e=>Object.keys(e).reduce((r,t)=>(e[t].eager&&(r[t]=e[t]),r),{}),c=(e,r,t,a)=>{var n=a?u(e[r]):e[r];return(r=Object.keys(n).reduce((e,r)=>!f(t,r)||e&&!o(e,r)?e:r,0))&&n[r]},s=(e,r,t)=>{var a=t?u(e[r]):e[r];return Object.keys(a).reduce((e,r)=>!e||!a[e].loaded&&o(e,r)?r:e,0)},p=(e,r,t,a)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+i(a)+")",h=(e,r,t,a,n)=>{var o=e[t];return"No satisfying version ("+i(a)+")"+(n?" for eager consumption":"")+" of shared module "+t+" found in shared scope "+r+".\nAvailable versions: "+Object.keys(o).map(e=>e+" from "+o[e].from).join(", ")},b=e=>{throw new Error(e)},m=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},v=(e,r,t)=>t?t():((e,r)=>b("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),y=(g=e=>function(r,t,a,n,o){var i=_.I(r);return i&&i.then&&!a?i.then(e.bind(e,r,_.S[r],t,!1,n,o)):e(r,_.S[r],t,a,n,o)})((e,r,t,a,n,o)=>{if(!d(r,t))return v(e,t,o);var i=c(r,t,n,a);return i?l(i):o?o():void b(h(r,e,t,n,a))}),j=g((e,r,t,a,n,o)=>{if(!d(r,t))return v(e,t,o);var i=s(r,t,a);return f(n,i)||m(p(r,t,i,n)),l(r[t][i])}),w={},P={195:()=>j("default","@codemirror/state",!1,[1,6,2,0]),2084:()=>j("default","@codemirror/language",!1,[1,6,0,0]),3708:()=>j("default","@lezer/common",!1,[1,1,0,0]),5024:()=>j("default","@codemirror/view",!1,[1,6,9,6]),3345:()=>j("default","react",!1,[1,18,2,0]),3379:()=>y("default","diff",!1,[1,7,0,0],()=>_.e(713).then(()=>()=>_(5713))),1839:()=>j("default","@lezer/highlight",!1,[1,1,0,0]),113:()=>y("default","diff",!1,[1,8,0,1],()=>_.e(481).then(()=>()=>_(7481))),135:()=>y("default","@anthropic-ai/sdk",!1,[2,0,54,0],()=>_.e(742).then(()=>()=>_(2742))),389:()=>j("default","@jupyterlab/statedb",!1,[1,4,4,6]),1336:()=>y("default","diff2html",!1,[1,3,4,51],()=>()=>_(2122)),2311:()=>y("default","react-bootstrap",!1,[1,2,10,10],()=>Promise.all([_.e(553),_.e(628)]).then(()=>()=>_(4553))),3139:()=>y("default","codemirror-merge-alpinex",!1,[1,6,10,4],()=>_.e(635).then(()=>()=>_(7635))),3427:()=>j("default","@jupyterlab/docmanager",!1,[1,4,4,6]),3550:()=>y("default","marked",!1,[1,15,0,11],()=>_.e(364).then(()=>()=>_(4364))),4602:()=>j("default","@lumino/signaling",!1,[1,2,0,0]),4744:()=>y("default","uuid",!1,[1,11,1,0],()=>_.e(262).then(()=>()=>_(8262))),5256:()=>j("default","@lumino/widgets",!1,[1,2,3,1,,"alpha",0]),5280:()=>j("default","@jupyterlab/extensionmanager",!1,[1,4,4,6]),6750:()=>y("default","rxjs",!1,[1,7,8,2],()=>_.e(888).then(()=>()=>_(2888))),7332:()=>y("default","codemirror",!1,[1,6,0,2],()=>_.e(821).then(()=>()=>_(8821))),7570:()=>y("default","partial-json",!1,[2,0,1,7],()=>_.e(220).then(()=>()=>_(9220))),8118:()=>j("default","@jupyterlab/codemirror",!1,[1,4,4,6]),8276:()=>y("default","best-effort-json-parser",!1,[1,1,1,3],()=>_.e(439).then(()=>()=>_(7820))),8361:()=>j("default","@jupyterlab/settingregistry",!1,[1,4,4,6]),8531:()=>j("default","@jupyterlab/notebook",!1,[1,4,4,6]),9159:()=>j("default","@jupyterlab/ui-components",!1,[1,4,4,6]),9715:()=>j("default","@jupyterlab/apputils",!1,[1,4,5,6]),7628:()=>j("default","react-dom",!1,[1,18,2,0])},k={345:[3345],379:[3379],628:[7628],760:[195,2084,3708,5024],839:[1839],968:[113,135,389,1336,2311,3139,3427,3550,4602,4744,5256,5280,6750,7332,7570,8118,8276,8361,8531,9159,9715]},S={},_.f.consumes=(e,r)=>{_.o(k,e)&&k[e].forEach(e=>{if(_.o(w,e))return r.push(w[e]);if(!S[e]){var t=r=>{w[e]=0,_.m[e]=t=>{delete _.c[e],t.exports=r()}};S[e]=!0;var a=r=>{delete w[e],_.m[e]=t=>{throw delete _.c[e],r}};try{var n=P[e]();n.then?r.push(w[e]=n.then(t).catch(a)):t(n)}catch(e){a(e)}}})},(()=>{_.b=document.baseURI||self.location.href;var e={431:0};_.f.j=(r,t)=>{var a=_.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(345|379|628|760|839)$/.test(r))e[r]=0;else{var n=new Promise((t,n)=>a=e[r]=[t,n]);t.push(a[2]=n);var o=_.p+_.u(r),i=new Error;_.l(o,t=>{if(_.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+n+": "+o+")",i.name="ChunkLoadError",i.type=n,i.request=o,a[1](i)}},"chunk-"+r,r)}};var r=(r,t)=>{var a,n,[o,i,f]=t,d=0;if(o.some(r=>0!==e[r])){for(a in i)_.o(i,a)&&(_.m[a]=i[a]);f&&f(_)}for(r&&r(t);d<o.length;d++)n=o[d],_.o(e,n)&&e[n]&&e[n][0](),e[n]=0},t=self.webpackChunksage_agent_internal=self.webpackChunksage_agent_internal||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),_.nc=void 0;var E=_(484);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["sage-agent-internal"]=E})();
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
# Running Sage_AI Tests
|
3
|
+
|
4
|
+
## Step 1: Configure `config.ts`
|
5
|
+
Copy the example config file:
|
6
|
+
|
7
|
+
```bash
|
8
|
+
cp tests/config-example.ts tests/config.ts
|
9
|
+
```
|
10
|
+
## Step 2: Add Configs
|
11
|
+
|
12
|
+
Update `tests/config.ts` with your API key and other required configs.
|
13
|
+
|
14
|
+
## Step 3: Install & Run Tests
|
15
|
+
|
16
|
+
Navigate to the UI tests folder, install dependencies, and run the tests:
|
17
|
+
|
18
|
+
```bash
|
19
|
+
cd jupyter-sage-agent-internal/ui-tests
|
20
|
+
jlpm install
|
21
|
+
jlpm run test
|
22
|
+
```
|
@@ -0,0 +1,22 @@
|
|
1
|
+
{
|
2
|
+
"name": "sage-agent-internal-ui-tests",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"description": "JupyterLab sage-agent-internal Integration Tests",
|
5
|
+
"private": true,
|
6
|
+
"scripts": {
|
7
|
+
"start": "jupyter lab --config jupyter_server_test_config.py",
|
8
|
+
"clean:screenshots": "node -e \"const fs = require('fs'); const path = require('path'); const screenshotsDir = path.join(__dirname, 'screenshots'); if (fs.existsSync(screenshotsDir)) { fs.rmSync(screenshotsDir, { recursive: true, force: true }); console.log('Screenshots directory cleaned'); } else { console.log('Screenshots directory does not exist'); }\"",
|
9
|
+
"test": "npm run clean:screenshots && jlpm playwright test sage_diff_interactions",
|
10
|
+
"test:update": "npm run clean:screenshots && jlpm playwright test --update-snapshots",
|
11
|
+
"test:llm": "npm run clean:screenshots && jlpm playwright test sage_llm_test",
|
12
|
+
"test:diffs": "npm run clean:screenshots && jlpm playwright test sage_diff_interactions",
|
13
|
+
"test:headed": "npm run clean:screenshots && jlpm playwright test --headed",
|
14
|
+
"test:debug": "npm run clean:screenshots && jlpm playwright test --debug",
|
15
|
+
"setup": "echo '✅ Setup complete! Please edit tests/config.ts with your API key.'"
|
16
|
+
},
|
17
|
+
"devDependencies": {
|
18
|
+
"@jupyterlab/galata": "^5.0.5",
|
19
|
+
"@playwright/test": "^1.37.0",
|
20
|
+
"@types/node": "^20.0.0"
|
21
|
+
}
|
22
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
/**
|
2
|
+
* Configuration for Playwright using default from @jupyterlab/galata
|
3
|
+
*/
|
4
|
+
const baseConfig = require('@jupyterlab/galata/lib/playwright-config');
|
5
|
+
|
6
|
+
module.exports = {
|
7
|
+
...baseConfig,
|
8
|
+
// Add 1 retry for each test
|
9
|
+
retries: 1,
|
10
|
+
use: {
|
11
|
+
...baseConfig.use,
|
12
|
+
headless: true,
|
13
|
+
viewport: { width: 1920, height: 1080 }
|
14
|
+
},
|
15
|
+
// Add multiple reporters for better CI integration
|
16
|
+
reporter: [
|
17
|
+
['html'], // Keep the existing HTML reporter
|
18
|
+
['json', { outputFile: 'test-results.json' }], // Add JSON reporter for easier parsing
|
19
|
+
['list'] // Add list reporter for console output
|
20
|
+
],
|
21
|
+
webServer: {
|
22
|
+
command: 'jlpm start',
|
23
|
+
url: 'http://localhost:8888/lab',
|
24
|
+
timeout: 120 * 1000,
|
25
|
+
reuseExistingServer: !process.env.CI
|
26
|
+
}
|
27
|
+
};
|
@@ -0,0 +1,38 @@
|
|
1
|
+
@echo off
|
2
|
+
REM Sage LLM Test Setup Script for Windows
|
3
|
+
REM This script helps set up the testing environment
|
4
|
+
|
5
|
+
echo 🚀 Setting up Sage LLM Test Environment
|
6
|
+
|
7
|
+
REM Configuration is now handled via tests/config.ts
|
8
|
+
echo 📝 Configuration is managed in tests/config.ts
|
9
|
+
echo ⚠️ IMPORTANT: Please edit tests/config.ts and set your API key before running tests!
|
10
|
+
echo Update SAGE_API_KEY in tests/config.ts with your actual API key
|
11
|
+
|
12
|
+
REM Check if node_modules exists
|
13
|
+
if not exist "node_modules" (
|
14
|
+
echo 📦 Installing dependencies...
|
15
|
+
npm install
|
16
|
+
) else (
|
17
|
+
echo ✅ Dependencies already installed
|
18
|
+
)
|
19
|
+
|
20
|
+
REM Create screenshots directory
|
21
|
+
if not exist "screenshots" (
|
22
|
+
echo 📁 Creating screenshots directory...
|
23
|
+
mkdir screenshots\states\idle
|
24
|
+
mkdir screenshots\states\diff_approval
|
25
|
+
mkdir screenshots\states\interaction
|
26
|
+
mkdir screenshots\states\generation
|
27
|
+
mkdir screenshots\test_runs
|
28
|
+
) else (
|
29
|
+
echo ✅ Screenshots directory already exists
|
30
|
+
)
|
31
|
+
|
32
|
+
echo.
|
33
|
+
echo 🎯 Setup complete! To run the tests:
|
34
|
+
echo 1. Make sure your API key is set in tests/config.ts
|
35
|
+
echo 2. Start JupyterLab: npm run start
|
36
|
+
echo 3. In another terminal, run tests: npm test
|
37
|
+
echo.
|
38
|
+
echo 📸 Screenshots will be saved in the screenshots\ directory
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# Sage LLM Test Setup Script
|
4
|
+
# This script helps set up the testing environment
|
5
|
+
|
6
|
+
echo "🚀 Setting up Sage LLM Test Environment"
|
7
|
+
|
8
|
+
# Configuration is now handled via tests/config.ts
|
9
|
+
echo "📝 Configuration is managed in tests/config.ts"
|
10
|
+
echo "⚠️ IMPORTANT: Please edit tests/config.ts and set your API key before running tests!"
|
11
|
+
echo " Update SAGE_API_KEY in tests/config.ts with your actual API key"
|
12
|
+
|
13
|
+
# Check if node_modules exists
|
14
|
+
if [ ! -d "node_modules" ]; then
|
15
|
+
echo "📦 Installing dependencies..."
|
16
|
+
npm install
|
17
|
+
else
|
18
|
+
echo "✅ Dependencies already installed"
|
19
|
+
fi
|
20
|
+
|
21
|
+
# Create screenshots directory
|
22
|
+
if [ ! -d "screenshots" ]; then
|
23
|
+
echo "📁 Creating screenshots directory..."
|
24
|
+
mkdir -p screenshots/states/{idle,diff_approval,interaction,generation}
|
25
|
+
mkdir -p screenshots/test_runs
|
26
|
+
else
|
27
|
+
echo "✅ Screenshots directory already exists"
|
28
|
+
fi
|
29
|
+
|
30
|
+
echo ""
|
31
|
+
echo "🎯 Setup complete! To run the tests:"
|
32
|
+
echo " 1. Make sure your API key is set in tests/config.ts"
|
33
|
+
echo " 2. Start JupyterLab: npm run start"
|
34
|
+
echo " 3. In another terminal, run tests: npm test"
|
35
|
+
echo ""
|
36
|
+
echo "📸 Screenshots will be saved in the screenshots/ directory"
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# Sage LLM State Testing
|
2
|
+
|
3
|
+
This directory contains comprehensive tests for all LLM interaction states in the Sage Agent extension.
|
4
|
+
|
5
|
+
## Quick Setup
|
6
|
+
|
7
|
+
### Windows:
|
8
|
+
```bash
|
9
|
+
.\setup-tests.bat
|
10
|
+
```
|
11
|
+
|
12
|
+
### Linux/Mac:
|
13
|
+
```bash
|
14
|
+
chmod +x setup-tests.sh
|
15
|
+
./setup-tests.sh
|
16
|
+
```
|
17
|
+
|
18
|
+
### Manual Setup:
|
19
|
+
1. Edit `tests/config.ts` and set your `SAGE_API_KEY`
|
20
|
+
2. Install dependencies: `npm install`
|
21
|
+
3. Create screenshots directory: `mkdir -p screenshots`
|
22
|
+
|
23
|
+
## Running Tests
|
24
|
+
|
25
|
+
1. **Start JupyterLab** (in one terminal):
|
26
|
+
```bash
|
27
|
+
npm run start
|
28
|
+
```
|
29
|
+
|
30
|
+
2. **Run Tests** (in another terminal):
|
31
|
+
```bash
|
32
|
+
npm test # Run all tests
|
33
|
+
npm test sage_llm_test # Run only LLM state tests
|
34
|
+
```
|
35
|
+
|
36
|
+
## Configuration
|
37
|
+
|
38
|
+
**IMPORTANT:** Before running tests, you must set your API key in one of these ways:
|
39
|
+
|
40
|
+
## Configuration
|
41
|
+
|
42
|
+
Edit `tests/config.ts` and set your API key:
|
43
|
+
```typescript
|
44
|
+
const CONFIG: Config = {
|
45
|
+
SAGE_API_KEY: 'your-actual-api-key-here', // Replace with your actual API key
|
46
|
+
CLAUDE_MODEL_URL: 'https://sage.alpinex.ai:8760',
|
47
|
+
CLAUDE_MODEL_ID: 'claude-sonnet-4-20250514',
|
48
|
+
// ... other config
|
49
|
+
};
|
50
|
+
```
|
51
|
+
|
52
|
+
## Test Categories
|
53
|
+
|
54
|
+
### 🏠 Idle States
|
55
|
+
- Empty interface (no interactions)
|
56
|
+
- Finished chat without diffs
|
57
|
+
- Page reload with chat history
|
58
|
+
- New chat creation
|
59
|
+
|
60
|
+
### 🔄 Diff Approval States
|
61
|
+
- **Single File Diffs**: Approval → Accept/Reject → Execute
|
62
|
+
- **Multi-File Diffs**: Approval → Accept/Reject → Execute
|
63
|
+
|
64
|
+
### ⚡ Interaction States
|
65
|
+
- Context picker activation
|
66
|
+
- Cell execution requests
|
67
|
+
- Tool calls and function execution
|
68
|
+
- Waiting for user replies
|
69
|
+
|
70
|
+
### 🤖 Generation States
|
71
|
+
- Active LLM generation
|
72
|
+
- Tool execution with loading
|
73
|
+
- Long-running generation tracking
|
74
|
+
|
75
|
+
## Screenshots
|
76
|
+
|
77
|
+
All screenshots are automatically captured and organized in:
|
78
|
+
```
|
79
|
+
screenshots/
|
80
|
+
├── test_runs/
|
81
|
+
│ └── [timestamp]/ # Screenshots from each test run
|
82
|
+
└── states/ # Organized by state category
|
83
|
+
├── idle/
|
84
|
+
├── diff_approval/
|
85
|
+
├── interaction/
|
86
|
+
└── generation/
|
87
|
+
```
|
88
|
+
|
89
|
+
## Test Prompts
|
90
|
+
|
91
|
+
The tests use specific prompts designed to trigger different states:
|
92
|
+
|
93
|
+
- **Simple Query**: `"What is the current time?"` (no diffs)
|
94
|
+
- **Single Diff**: `"Please fix this Python syntax error: print('hello world'"`
|
95
|
+
- **Multi-File Diff**: `"Create a new React component with TypeScript interfaces and CSS styling"`
|
96
|
+
- **Tool Call**: `"Check the current git status and list recent commits"`
|
97
|
+
- **Context Analysis**: `"Analyze the current codebase structure and suggest improvements"`
|
98
|
+
- **Long Generation**: `"Write comprehensive documentation for this entire project..."`
|
99
|
+
|
100
|
+
## Troubleshooting
|
101
|
+
|
102
|
+
### Common Issues:
|
103
|
+
|
104
|
+
1. **API Key Error**: Make sure `SAGE_API_KEY` is set correctly
|
105
|
+
2. **JupyterLab Not Starting**: Check if port 8888 is available
|
106
|
+
3. **Tests Timing Out**: Increase timeout values in config
|
107
|
+
4. **Screenshots Not Saving**: Check directory permissions
|
108
|
+
|
109
|
+
### Debug Mode:
|
110
|
+
Set `headless: false` in playwright config to see browser interactions.
|
111
|
+
|
112
|
+
## Test Development
|
113
|
+
|
114
|
+
To add new states or modify existing tests:
|
115
|
+
|
116
|
+
1. **Add new prompts** in the `TEST_PROMPTS` object
|
117
|
+
2. **Create new test cases** following the existing pattern
|
118
|
+
3. **Update selectors** if UI elements change
|
119
|
+
4. **Add new screenshot categories** as needed
|
120
|
+
|
121
|
+
## Performance Notes
|
122
|
+
|
123
|
+
- Tests run with visual browser by default (for debugging)
|
124
|
+
- Screenshots are full-page captures (may be large)
|
125
|
+
- Long generation tests may take several minutes
|
126
|
+
- Each test run creates a timestamped screenshot directory
|
127
|
+
|
128
|
+
## CI/CD Integration
|
129
|
+
|
130
|
+
For automated testing:
|
131
|
+
- Set `headless: true` in playwright config
|
132
|
+
- Use environment variables for sensitive data
|
133
|
+
- Archive screenshot artifacts for failed tests
|
@@ -0,0 +1,238 @@
|
|
1
|
+
# Sage LLM State Testing Plan
|
2
|
+
|
3
|
+
## Overview
|
4
|
+
This document outlines the comprehensive testing strategy for all LLM interaction states in the Sage Agent. The tests will capture screenshots at each state and validate UI components to ensure proper functionality across all interaction scenarios.
|
5
|
+
|
6
|
+
## Test States Overview
|
7
|
+
|
8
|
+
### 1. Idle States
|
9
|
+
- **None**: Empty chat interface, no interactions
|
10
|
+
- **No diff but finished chat**: Chat completed without code diffs
|
11
|
+
- **Reloaded page chat**: Page refreshed with existing chat history
|
12
|
+
- **Create new chat**: Fresh chat session initiated
|
13
|
+
|
14
|
+
### 2. Diff Approval States
|
15
|
+
|
16
|
+
#### Single Diff States:
|
17
|
+
- **Approval**: Single file diff awaiting user approval
|
18
|
+
- **Accepted**: User accepted single diff
|
19
|
+
- **Rejected**: User rejected single diff
|
20
|
+
- **Run**: Single diff being executed
|
21
|
+
|
22
|
+
#### Multi Diff States:
|
23
|
+
- **Approval**: Multiple file diffs awaiting user approval
|
24
|
+
- **Accepted**: User accepted multi-file diffs
|
25
|
+
- **Rejected**: User rejected multi-file diffs
|
26
|
+
- **Run**: Multi-file diffs being executed
|
27
|
+
|
28
|
+
### 3. Interaction States
|
29
|
+
- **Context picker open**: File/context selection interface displayed
|
30
|
+
- **Run cell request**: Cell execution in progress
|
31
|
+
- **Generating States**: LLM generating response
|
32
|
+
- **Running tool call**: Tool/function execution
|
33
|
+
- **Waiting for user reply**: LLM awaiting user input
|
34
|
+
|
35
|
+
### 4. Generating States
|
36
|
+
- **Generating**: LLM actively generating response
|
37
|
+
- **Running tool call**: Tool execution with loading indicators
|
38
|
+
- **Waiting for user reply**: Paused state awaiting user interaction
|
39
|
+
|
40
|
+
## Test Implementation Strategy
|
41
|
+
|
42
|
+
### Setup Requirements
|
43
|
+
1. **Environment Configuration**
|
44
|
+
- Configuration via `tests/config.ts` file with API keys and model settings
|
45
|
+
- Automated API key injection via settings UI
|
46
|
+
- Playwright browser automation
|
47
|
+
|
48
|
+
2. **Screenshot Management**
|
49
|
+
- Organized folder structure: `screenshots/states/[category]/[state]/`
|
50
|
+
- Full-page screenshots for comprehensive state capture
|
51
|
+
- Timestamped filenames for test run identification
|
52
|
+
|
53
|
+
3. **State Triggering**
|
54
|
+
- Specific prompts designed to trigger each state
|
55
|
+
- Automated UI interactions to navigate through states
|
56
|
+
- Validation of state transitions
|
57
|
+
|
58
|
+
### Test Structure
|
59
|
+
|
60
|
+
#### Core Test File: `sage_llm_test.spec.ts`
|
61
|
+
- Main orchestrator for all state tests
|
62
|
+
- Handles environment setup and teardown
|
63
|
+
- Manages screenshot capture and organization
|
64
|
+
|
65
|
+
#### Test Categories:
|
66
|
+
1. **Idle State Tests** (`idle_states.spec.ts`)
|
67
|
+
2. **Diff Approval Tests** (`diff_approval.spec.ts`)
|
68
|
+
3. **Interaction State Tests** (`interaction_states.spec.ts`)
|
69
|
+
4. **Generation State Tests** (`generation_states.spec.ts`)
|
70
|
+
|
71
|
+
### Prompts for State Triggering
|
72
|
+
|
73
|
+
#### Single-line Diffs
|
74
|
+
```
|
75
|
+
"Please fix this Python syntax error: print('hello world'"
|
76
|
+
```
|
77
|
+
|
78
|
+
#### Multiple Edits (Single File)
|
79
|
+
```
|
80
|
+
"Refactor this function to be more readable and add error handling"
|
81
|
+
```
|
82
|
+
|
83
|
+
#### Multi-file Diffs
|
84
|
+
```
|
85
|
+
"Create a new React component with TypeScript interfaces and CSS styling"
|
86
|
+
```
|
87
|
+
|
88
|
+
#### Context Picker
|
89
|
+
```
|
90
|
+
"Analyze the current codebase structure and suggest improvements"
|
91
|
+
```
|
92
|
+
|
93
|
+
#### Tool Calls
|
94
|
+
```
|
95
|
+
"Check the current git status and create a new branch"
|
96
|
+
```
|
97
|
+
|
98
|
+
#### Long Generation
|
99
|
+
```
|
100
|
+
"Write a comprehensive documentation for this entire project including setup, usage, and API reference"
|
101
|
+
```
|
102
|
+
|
103
|
+
### Screenshot Organization
|
104
|
+
```
|
105
|
+
screenshots/
|
106
|
+
├── states/
|
107
|
+
│ ├── idle/
|
108
|
+
│ │ ├── none/
|
109
|
+
│ │ ├── finished_no_diff/
|
110
|
+
│ │ ├── reloaded_page/
|
111
|
+
│ │ └── new_chat/
|
112
|
+
│ ├── diff_approval/
|
113
|
+
│ │ ├── single/
|
114
|
+
│ │ │ ├── approval/
|
115
|
+
│ │ │ ├── accepted/
|
116
|
+
│ │ │ ├── rejected/
|
117
|
+
│ │ │ └── run/
|
118
|
+
│ │ └── multi/
|
119
|
+
│ │ ├── approval/
|
120
|
+
│ │ ├── accepted/
|
121
|
+
│ │ ├── rejected/
|
122
|
+
│ │ └── run/
|
123
|
+
│ ├── interaction/
|
124
|
+
│ │ ├── context_picker/
|
125
|
+
│ │ ├── run_cell/
|
126
|
+
│ │ └── generating/
|
127
|
+
│ └── generation/
|
128
|
+
│ ├── generating/
|
129
|
+
│ ├── tool_call/
|
130
|
+
│ └── waiting_reply/
|
131
|
+
└── test_runs/
|
132
|
+
└── [timestamp]/
|
133
|
+
└── [copied from states/]
|
134
|
+
```
|
135
|
+
|
136
|
+
### Validation Strategy
|
137
|
+
|
138
|
+
#### Component Visibility Tests
|
139
|
+
- Chat container presence and visibility
|
140
|
+
- Input field accessibility
|
141
|
+
- Send button state validation
|
142
|
+
- Loading indicators during generation
|
143
|
+
- Diff approval UI elements
|
144
|
+
- Error states and messages
|
145
|
+
|
146
|
+
#### State Transition Validation
|
147
|
+
- Proper state changes after user actions
|
148
|
+
- Loading states during async operations
|
149
|
+
- Error recovery mechanisms
|
150
|
+
- UI responsiveness during long operations
|
151
|
+
|
152
|
+
#### Screenshot Comparison
|
153
|
+
- Visual regression testing capabilities
|
154
|
+
- Baseline screenshot establishment
|
155
|
+
- Automated difference detection
|
156
|
+
- Manual review flags for significant changes
|
157
|
+
|
158
|
+
### Environment Setup
|
159
|
+
|
160
|
+
#### Required Configuration
|
161
|
+
```typescript
|
162
|
+
// tests/config.ts file
|
163
|
+
const CONFIG = {
|
164
|
+
SAGE_API_KEY: 'your_api_key_here',
|
165
|
+
CLAUDE_MODEL_URL: 'https://sage.alpinex.ai:8760',
|
166
|
+
CLAUDE_MODEL_ID: 'claude-sonnet-4-20250514',
|
167
|
+
DATABASE_URL: 'your_database_url_here'
|
168
|
+
};
|
169
|
+
```
|
170
|
+
|
171
|
+
#### API Key Injection Strategy
|
172
|
+
1. Load configuration from tests/config.ts at test startup
|
173
|
+
2. Navigate to Settings UI programmatically
|
174
|
+
3. Inject API key via form automation
|
175
|
+
4. Validate successful configuration
|
176
|
+
5. Proceed with state testing
|
177
|
+
|
178
|
+
### Execution Flow
|
179
|
+
|
180
|
+
#### Pre-Test Setup
|
181
|
+
1. Launch JupyterLab with Sage extension
|
182
|
+
2. Wait for full application load
|
183
|
+
3. Configure API settings automatically
|
184
|
+
4. Create clean chat environment
|
185
|
+
5. Initialize screenshot directories
|
186
|
+
|
187
|
+
#### Test Execution
|
188
|
+
1. Execute state-specific prompts
|
189
|
+
2. Wait for state transitions
|
190
|
+
3. Capture full-page screenshots
|
191
|
+
4. Validate component states
|
192
|
+
5. Record test metrics and timing
|
193
|
+
|
194
|
+
#### Post-Test Cleanup
|
195
|
+
1. Archive screenshots with timestamps
|
196
|
+
2. Generate test report with state coverage
|
197
|
+
3. Clean up temporary files
|
198
|
+
4. Reset application state for next run
|
199
|
+
|
200
|
+
### Success Criteria
|
201
|
+
|
202
|
+
#### Functional Validation
|
203
|
+
- All states successfully triggered
|
204
|
+
- UI components behave as expected
|
205
|
+
- No crashes or errors during state transitions
|
206
|
+
- Proper error handling for failed operations
|
207
|
+
|
208
|
+
#### Visual Validation
|
209
|
+
- Screenshots capture complete UI state
|
210
|
+
- All relevant UI elements visible
|
211
|
+
- Consistent styling across states
|
212
|
+
- Loading indicators work properly
|
213
|
+
|
214
|
+
#### Performance Validation
|
215
|
+
- State transitions complete within reasonable timeframes
|
216
|
+
- No memory leaks during extended testing
|
217
|
+
- Responsive UI during long operations
|
218
|
+
- Proper cleanup after test completion
|
219
|
+
|
220
|
+
## Implementation Notes
|
221
|
+
|
222
|
+
### Technical Considerations
|
223
|
+
- Use Playwright's built-in waiting mechanisms
|
224
|
+
- Implement robust error handling for flaky operations
|
225
|
+
- Add retry logic for network-dependent operations
|
226
|
+
- Maintain state isolation between tests
|
227
|
+
|
228
|
+
### Maintenance Strategy
|
229
|
+
- Regular baseline screenshot updates
|
230
|
+
- Prompt refinement based on model updates
|
231
|
+
- UI selector updates for component changes
|
232
|
+
- Documentation updates for new states
|
233
|
+
|
234
|
+
### Future Enhancements
|
235
|
+
- Automated state coverage reporting
|
236
|
+
- Integration with CI/CD pipeline
|
237
|
+
- Performance benchmarking across states
|
238
|
+
- Cross-browser compatibility testing
|