signalpilot-ai-internal 0.4.4__tar.gz → 0.4.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.

Potentially problematic release.


This version of signalpilot-ai-internal might be problematic. Click here for more details.

Files changed (298) hide show
  1. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/PKG-INFO +1 -1
  2. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/package.json +1 -1
  3. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/_version.py +1 -1
  4. signalpilot_ai_internal-0.4.6/signalpilot_ai_internal/handlers.py +345 -0
  5. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/package.json +2 -2
  6. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/schemas/signalpilot-ai-internal/package.json.orig +1 -1
  7. signalpilot_ai_internal-0.4.6/signalpilot_ai_internal/labextension/static/839.0be091400e2f58fe8fd2.js +1 -0
  8. signalpilot_ai_internal-0.4.6/signalpilot_ai_internal/labextension/static/923.e80ae4c5cedc1d73f2a1.js +1 -0
  9. signalpilot_ai_internal-0.4.4/signalpilot_ai_internal/labextension/static/remoteEntry.daab3ec6b62db758d12d.js → signalpilot_ai_internal-0.4.6/signalpilot_ai_internal/labextension/static/remoteEntry.61ef7b3a050c161d7a88.js +1 -1
  10. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/AppState.ts +66 -0
  11. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatContextMenu/ChatContextLoaders.ts +41 -17
  12. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatContextMenu/databaseHelper.ts +49 -27
  13. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatHistoryManager.ts +391 -37
  14. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatInputManager.ts +167 -1
  15. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatMessages.ts +23 -0
  16. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatUIHelper.ts +4 -0
  17. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ConversationService.ts +3 -2
  18. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ConversationServiceUtils.ts +22 -4
  19. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/Settings/SettingsWidget.tsx +7 -7
  20. signalpilot_ai_internal-0.4.6/src/Components/WelcomeComponent.ts +237 -0
  21. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/chatbox.ts +349 -15
  22. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/ConfigService.ts +4 -0
  23. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/models.json +4 -0
  24. signalpilot_ai_internal-0.4.6/src/Config/prompts/welcome_prompt.md +27 -0
  25. signalpilot_ai_internal-0.4.6/src/Config/welcome_tools.json +56 -0
  26. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Notebook/NotebookChatContainer.ts +31 -8
  27. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Notebook/NotebookTools.ts +255 -2
  28. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/AnthropicMessageCreator.ts +27 -2
  29. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/AnthropicService.ts +12 -8
  30. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/IChatService.ts +1 -1
  31. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/JupyterAuthService.ts +1 -7
  32. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/ToolService.ts +12 -0
  33. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/activateSage.ts +444 -273
  34. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/commands.ts +46 -0
  35. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/plugin.ts +2 -0
  36. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/databaseEncoder.ts +45 -24
  37. signalpilot_ai_internal-0.4.6/src/utils/launcherDetection.ts +39 -0
  38. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/toolDisplay.ts +7 -0
  39. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/base.css +46 -0
  40. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/index.css +2 -1
  41. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/index.js +1 -0
  42. signalpilot_ai_internal-0.4.6/style/welcome-component.css +118 -0
  43. signalpilot_ai_internal-0.4.4/signalpilot_ai_internal/handlers.py +0 -103
  44. signalpilot_ai_internal-0.4.4/signalpilot_ai_internal/labextension/static/447.1e78c4216aeaaeadff40.js +0 -1
  45. signalpilot_ai_internal-0.4.4/signalpilot_ai_internal/labextension/static/839.be52ed152c5de2006fde.js +0 -1
  46. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/.copier-answers.yml +0 -0
  47. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/.gitignore +0 -0
  48. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/.keep +0 -0
  49. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/.prettierignore +0 -0
  50. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/.vscode/settings.json +0 -0
  51. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/.yarnrc.yml +0 -0
  52. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/CHANGELOG.md +0 -0
  53. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/CLAUDE.md +0 -0
  54. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/LICENSE +0 -0
  55. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/README.md +0 -0
  56. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/RELEASE.md +0 -0
  57. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/__tests__/sage_agent.spec.ts +0 -0
  58. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/babel.config.js +0 -0
  59. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/cli-chat-tool/index.ts +0 -0
  60. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/cli-chat-tool/package-lock.json +0 -0
  61. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/cli-chat-tool/package.json +0 -0
  62. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/cli-chat-tool/tsconfig.json +0 -0
  63. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/cli-chat-tool/yarn.lock +0 -0
  64. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/create_test_data.py +0 -0
  65. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/install.json +0 -0
  66. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/jest.config.js +0 -0
  67. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/jupyter-config/server-config/signalpilot_ai.json +0 -0
  68. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/package-lock.json +0 -0
  69. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/pyproject.toml +0 -0
  70. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/schema/plugin.json +0 -0
  71. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/setup.py +0 -0
  72. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/__init__.py +0 -0
  73. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/cache_handlers.py +0 -0
  74. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/cache_service.py +0 -0
  75. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/schemas/signalpilot-ai-internal/plugin.json +0 -0
  76. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/104.04e170724f369fcbaf19.js +0 -0
  77. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/104.04e170724f369fcbaf19.js.LICENSE.txt +0 -0
  78. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/122.e2dadf63dc64d7b5f1ee.js +0 -0
  79. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/220.328403b5545f268b95c6.js +0 -0
  80. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/262.726e1da31a50868cb297.js +0 -0
  81. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/280.35d8c8b68815702a5238.js +0 -0
  82. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/280.35d8c8b68815702a5238.js.LICENSE.txt +0 -0
  83. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/353.72484b768a04f89bd3dd.js +0 -0
  84. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/364.dbec4c2dc12e7b050dcc.js +0 -0
  85. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/384.fa432bdb7fb6b1c95ad6.js +0 -0
  86. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/439.37e271d7a80336daabe2.js +0 -0
  87. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/476.9b4f05a99f5003f82094.js +0 -0
  88. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/481.73c7a9290b7d35a8b9c1.js +0 -0
  89. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/512.b58fc0093d080b8ee61c.js +0 -0
  90. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/553.b4042a795c91d9ff71ef.js +0 -0
  91. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/553.b4042a795c91d9ff71ef.js.LICENSE.txt +0 -0
  92. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/606.90aaaae46b73dc3c08fb.js +0 -0
  93. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/635.9720593ee20b768da3ca.js +0 -0
  94. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/713.8e6edc9a965bdd578ca7.js +0 -0
  95. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/742.91e7b516c8699eea3373.js +0 -0
  96. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/785.3aa564fc148b37d1d719.js +0 -0
  97. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/888.34054db17bcf6e87ec95.js +0 -0
  98. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/style.js +0 -0
  99. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/labextension/static/third-party-licenses.json +0 -0
  100. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/snowflake_schema_service.py +0 -0
  101. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/tests/__init__.py +0 -0
  102. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/tests/test_handlers.py +0 -0
  103. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/signalpilot_ai_internal/unified_database_schema_service.py +0 -0
  104. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/BackendTools/DatabaseSearchTools.ts +0 -0
  105. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/BackendTools/DatabaseSearchUtil.ts +0 -0
  106. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/BackendTools/DatabaseTools.ts +0 -0
  107. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/BackendTools/FilesystemTools.ts +0 -0
  108. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/BackendTools/WebTools.ts +0 -0
  109. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/BackendTools/index.ts +0 -0
  110. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/BackendTools/tickers.json +0 -0
  111. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/CellTrackingService.ts +0 -0
  112. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ActionHistory.ts +0 -0
  113. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatContextMenu/ChatContextMenu.ts +0 -0
  114. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatContextMenu/ChatContextMenuUtils.ts +0 -0
  115. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatContextMenu/ContextCacheService.ts +0 -0
  116. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatContextMenu/ContextCellHighlighter.ts +0 -0
  117. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatContextMenu/DataLoaderService.ts +0 -0
  118. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatContextMenu/KernelExecutionListener.ts +0 -0
  119. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/ChatContextMenu/icons.ts +0 -0
  120. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Chat/RichTextChatInput.ts +0 -0
  121. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/CodebaseManager.ts +0 -0
  122. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/ChatboxContext.ts +0 -0
  123. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/CheckpointRestorationModal.ts +0 -0
  124. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/CodeConfirmationDialog.ts +0 -0
  125. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DatabaseCreationModal/DatabaseCreationModal.tsx +0 -0
  126. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DatabaseCreationModal/SQLDataForm.tsx +0 -0
  127. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DatabaseCreationModal/SnowflakeDataForm.tsx +0 -0
  128. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DatabaseCreationModal/index.ts +0 -0
  129. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DatabaseManagerWidget/DatabaseManagerWidget.tsx +0 -0
  130. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DatabaseManagerWidget/DatabaseSchemaExplorer.tsx +0 -0
  131. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DatabaseManagerWidget/SnowflakeSchemaViewer.tsx +0 -0
  132. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DiffApprovalDialog.ts +0 -0
  133. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DiffNavigationContent.tsx +0 -0
  134. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/DiffNavigationWidget.tsx +0 -0
  135. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/FileExplorerWidget/FileExplorerContent.tsx +0 -0
  136. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/FileExplorerWidget/FileExplorerWidget.tsx +0 -0
  137. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/FileExplorerWidget/icons.ts +0 -0
  138. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/FileExplorerWidget/index.ts +0 -0
  139. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/FileExplorerWidget/types.ts +0 -0
  140. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/FirstRunModal.tsx +0 -0
  141. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/InlineCompletionWidget.tsx +0 -0
  142. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/JWTAuthModal.tsx +0 -0
  143. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/JwtTokenDialog.ts +0 -0
  144. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/LLMStateDisplay/DiffItem.tsx +0 -0
  145. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/LLMStateDisplay/LLMStateContent.tsx +0 -0
  146. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/LLMStateDisplay/LLMStateDisplay.tsx +0 -0
  147. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/LLMStateDisplay/icons.ts +0 -0
  148. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/LLMStateDisplay/index.ts +0 -0
  149. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/LLMStateDisplay/types.ts +0 -0
  150. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/LoginSuccessModal.tsx +0 -0
  151. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/MoreOptionsDisplay.tsx +0 -0
  152. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/NewChatDisplayWidget.ts +0 -0
  153. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/PlanStateDisplay.tsx +0 -0
  154. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/RejectionFeedbackDialog.ts +0 -0
  155. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/SnippetCreationWidget/SnippetCreationContent.tsx +0 -0
  156. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/SnippetCreationWidget/SnippetCreationWidget.tsx +0 -0
  157. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/SnippetCreationWidget/SnippetFormModal.tsx +0 -0
  158. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/SnippetCreationWidget/SnippetList.tsx +0 -0
  159. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/SnippetCreationWidget/index.ts +0 -0
  160. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/SnippetCreationWidget/types.ts +0 -0
  161. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/UpdateBanner/UpdateBannerWidget.tsx +0 -0
  162. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/databaseIcons.ts +0 -0
  163. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Components/icons.ts +0 -0
  164. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/optional_env.json +0 -0
  165. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/prompts/claude_system_prompt.md +0 -0
  166. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/prompts/claude_system_prompt_ask_mode.md +0 -0
  167. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/prompts/claude_system_prompt_edit_full_cell.md +0 -0
  168. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/prompts/claude_system_prompt_edit_selection.md +0 -0
  169. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/prompts/claude_system_prompt_fast_mode.md +0 -0
  170. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/prompts/plan_generation_prompt.md +0 -0
  171. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Config/tools.json +0 -0
  172. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/DatabaseStateService.ts +0 -0
  173. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Notebook/InlineDiffService.ts +0 -0
  174. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Notebook/NotebookCellTools.ts +0 -0
  175. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Notebook/NotebookContextManager.ts +0 -0
  176. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Notebook/NotebookDiffManager.ts +0 -0
  177. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Notebook/NotebookDiffTools.ts +0 -0
  178. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Notebook/NotebookStateService.ts +0 -0
  179. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Notebook/WaitingUserReplyBoxManager.ts +0 -0
  180. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/NotebookSettingsContainer.ts +0 -0
  181. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/AnthropicStreamHandler.ts +0 -0
  182. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/CheckpointManager.ts +0 -0
  183. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/CompletionManager.ts +0 -0
  184. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/ContextService.ts +0 -0
  185. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/DatabaseMetadataCache.ts +0 -0
  186. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/DiffStateService.ts +0 -0
  187. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/FirstRunModalService.ts +0 -0
  188. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/JWTAuthModalService.ts +0 -0
  189. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/LoginSuccessModalService.ts +0 -0
  190. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/NotebookCellStateService.ts +0 -0
  191. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/PandasSchemaService.ts +0 -0
  192. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/PostHogService.ts +0 -0
  193. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/ServiceFactory.ts +0 -0
  194. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/ServiceUtils.ts +0 -0
  195. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/Services/TabCompletionService.ts +0 -0
  196. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/ThreadManager.ts +0 -0
  197. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/TrackingIDUtility.ts +0 -0
  198. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/eval_commands.ts +0 -0
  199. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/globalWidgets.ts +0 -0
  200. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/handler.ts +0 -0
  201. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/index.ts +0 -0
  202. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/types/json.d.ts +0 -0
  203. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/types.ts +0 -0
  204. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/VariableExtractor.ts +0 -0
  205. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/backendCaching.ts +0 -0
  206. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/caching.ts +0 -0
  207. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/contextTagUtils.ts +0 -0
  208. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/kernelPreview.ts +0 -0
  209. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/kernelUtils.ts +0 -0
  210. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/tokenEncoder.ts +0 -0
  211. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils/tokenUtils.ts +0 -0
  212. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/utils.ts +0 -0
  213. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/src/welcomeCta.ts +0 -0
  214. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/chat-container.css +0 -0
  215. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/chat-mention-dropdown.css +0 -0
  216. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/code-mirror-merge.css +0 -0
  217. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/codebase-manager.css +0 -0
  218. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/data-cta-interface.css +0 -0
  219. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/database-creation-modal.css +0 -0
  220. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/database-manager-widget.css +0 -0
  221. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/database-schema-explorer.css +0 -0
  222. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/diff-approval.css +0 -0
  223. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/diff-edit-mode.css +0 -0
  224. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/diff-mode.css +0 -0
  225. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/diff-navigation.css +0 -0
  226. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/file-explorer.css +0 -0
  227. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/floating-bottom-widget.css +0 -0
  228. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/fonts.css +0 -0
  229. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/agent-mode-shiny.svg +0 -0
  230. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/agent-mode.svg +0 -0
  231. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/approve.svg +0 -0
  232. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/arrow-down.svg +0 -0
  233. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/arrow-up.svg +0 -0
  234. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/ask-mode.svg +0 -0
  235. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/check.svg +0 -0
  236. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/dashed-circle.svg +0 -0
  237. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/hands-on-mode.svg +0 -0
  238. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/open.svg +0 -0
  239. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/reapply.svg +0 -0
  240. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/reject.svg +0 -0
  241. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/run.svg +0 -0
  242. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/search.svg +0 -0
  243. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/send.svg +0 -0
  244. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/chat_input/stop.svg +0 -0
  245. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/context_menu/cell.svg +0 -0
  246. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/context_menu/data.svg +0 -0
  247. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/context_menu/database.svg +0 -0
  248. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/context_menu/insert.svg +0 -0
  249. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/context_menu/search.svg +0 -0
  250. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/context_menu/snippets.svg +0 -0
  251. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/context_menu/variable.svg +0 -0
  252. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/databases/connection.svg +0 -0
  253. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/databases/mysql.svg +0 -0
  254. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/databases/postgresql.svg +0 -0
  255. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/databases/snowflake.svg +0 -0
  256. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/files/arrow-down.svg +0 -0
  257. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/files/folder.svg +0 -0
  258. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/files/magic.svg +0 -0
  259. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/files/open-link.svg +0 -0
  260. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/files/reload-1.svg +0 -0
  261. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/files/reload.svg +0 -0
  262. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/state_display/menu-close.svg +0 -0
  263. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/state_display/menu-icon.svg +0 -0
  264. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/state_display/run_cell.svg +0 -0
  265. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/icons/state_display/warning.svg +0 -0
  266. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/inline-diff-approval.css +0 -0
  267. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/left-side-menu.css +0 -0
  268. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/llm-state-display.css +0 -0
  269. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/minus-icon.css +0 -0
  270. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/modal.css +0 -0
  271. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/mode-selector-dropdown.css +0 -0
  272. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/more-options.css +0 -0
  273. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/new-chat-display.css +0 -0
  274. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/plan-state-display.css +0 -0
  275. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/settings-widget.css +0 -0
  276. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/snippet-creation.css +0 -0
  277. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/style.css +0 -0
  278. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/tab-completion.css +0 -0
  279. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/style/update-banner.css +0 -0
  280. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/templates/rule.example.md +0 -0
  281. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/tsconfig.json +0 -0
  282. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/tsconfig.test.json +0 -0
  283. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/README.md +0 -0
  284. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/jupyter_server_test_config.py +0 -0
  285. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/package.json +0 -0
  286. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/playwright.config.js +0 -0
  287. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/setup-tests.bat +0 -0
  288. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/setup-tests.sh +0 -0
  289. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/slack-test-README.md +0 -0
  290. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/test_slack.py +0 -0
  291. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/tests/README_SAGE_LLM_TESTS.md +0 -0
  292. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/tests/SAGE_LLM_TESTING_PLAN.md +0 -0
  293. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/tests/config-example.ts +0 -0
  294. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/tests/sage_agent.spec.ts +0 -0
  295. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/tests/sage_diff_interactions.spec.ts +0 -0
  296. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/tests/sage_llm_test.spec.ts +0 -0
  297. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/ui-tests/yarn.lock +0 -0
  298. {signalpilot_ai_internal-0.4.4 → signalpilot_ai_internal-0.4.6}/yarn.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalpilot_ai_internal
3
- Version: 0.4.4
3
+ Version: 0.4.6
4
4
  Summary: SignalPilot Agent - Your Jupyter Notebook Assistant
5
5
  Project-URL: Homepage, https://signalpilot.ai/
6
6
  Author-email: Daniel Schaffield <danielschaffield@gmail.com>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "signalpilot-ai-internal",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "SignalPilot Agent - Your Jupyter Notebook Assistant",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -1,4 +1,4 @@
1
1
  # This file is auto-generated by Hatchling. As such, do not:
2
2
  # - modify
3
3
  # - track in version control e.g. be sure to add to .gitignore
4
- __version__ = VERSION = '0.4.4'
4
+ __version__ = VERSION = '0.4.6'
@@ -0,0 +1,345 @@
1
+ import json
2
+ import os
3
+ import re
4
+ from pathlib import Path
5
+ from datetime import datetime
6
+
7
+ from jupyter_server.base.handlers import APIHandler
8
+ from jupyter_server.utils import url_path_join
9
+ import tornado
10
+
11
+ from .cache_service import get_cache_service
12
+ from .cache_handlers import ChatHistoriesHandler, AppValuesHandler, CacheInfoHandler
13
+ from .unified_database_schema_service import UnifiedDatabaseSchemaHandler, UnifiedDatabaseQueryHandler
14
+ from .snowflake_schema_service import SnowflakeSchemaHandler, SnowflakeQueryHandler
15
+
16
+
17
+ class HelloWorldHandler(APIHandler):
18
+ # The following decorator should be present on all verb methods (head, get, post,
19
+ # patch, put, delete, options) to ensure only authorized user can request the
20
+ # Jupyter server
21
+ @tornado.web.authenticated
22
+ def get(self):
23
+ self.finish(json.dumps({
24
+ "data": "Hello World from SignalPilot AI backend!",
25
+ "message": "This is a simple hello world endpoint from the sage agent backend."
26
+ }))
27
+
28
+
29
+ class ReadAllFilesHandler(APIHandler):
30
+ """Handler for reading all notebook and data files in the workspace"""
31
+
32
+ # Common data file extensions
33
+ DATA_EXTENSIONS = {'.csv', '.json', '.xlsx', '.xls', '.parquet', '.pkl', '.pickle',
34
+ '.feather', '.hdf5', '.h5', '.sql', '.db', '.sqlite', '.tsv', '.txt'}
35
+
36
+ # Directories to exclude from search
37
+ EXCLUDE_DIRS = {'.git', '.ipynb_checkpoints', 'node_modules', '__pycache__',
38
+ '.venv', 'venv', 'env', '.pytest_cache', '.mypy_cache',
39
+ 'dist', 'build', '.tox', 'logs', '.vscode'}
40
+
41
+ @tornado.web.authenticated
42
+ def get(self):
43
+ try:
44
+ # Get the root directory where Jupyter Lab is running
45
+ root_dir = Path(os.getcwd())
46
+
47
+ # Find all notebook files
48
+ notebooks = self._find_notebooks(root_dir)
49
+
50
+ # Find all data files
51
+ data_files = self._find_data_files(root_dir)
52
+
53
+ # Get the 10 most recently edited notebooks
54
+ recent_notebooks = self._get_recent_notebooks(notebooks, limit=10)
55
+
56
+ # Analyze each notebook for data dependencies
57
+ notebook_info = []
58
+ all_data_dependencies = set()
59
+ for notebook_path in recent_notebooks:
60
+ info = self._analyze_notebook(notebook_path, data_files, root_dir)
61
+ notebook_info.append(info)
62
+ # Collect all data dependencies from recent notebooks
63
+ all_data_dependencies.update(info['data_dependencies'])
64
+
65
+ # Filter data files to only those referenced by recent notebooks
66
+ referenced_data_files = []
67
+ for data_file in data_files:
68
+ rel_path = str(data_file.relative_to(root_dir))
69
+ rel_path_forward = rel_path.replace('\\', '/')
70
+ file_name = data_file.name
71
+
72
+ # Check if this data file is referenced in any dependency
73
+ if any(dep in [file_name, rel_path, rel_path_forward] or
74
+ file_name in dep or rel_path in dep or rel_path_forward in dep
75
+ for dep in all_data_dependencies):
76
+ referenced_data_files.append(data_file)
77
+
78
+ # Generate the LLM-optimized context string with only referenced data
79
+ welcome_context = self._generate_welcome_context(notebook_info, referenced_data_files, root_dir)
80
+
81
+ self.finish(json.dumps({
82
+ "welcome_context": welcome_context,
83
+ "notebook_count": len(notebooks),
84
+ "data_file_count": len(data_files),
85
+ "recent_notebook_count": len(recent_notebooks),
86
+ "referenced_data_count": len(referenced_data_files)
87
+ }))
88
+
89
+ except Exception as e:
90
+ self.set_status(500)
91
+ self.finish(json.dumps({
92
+ "error": str(e)
93
+ }))
94
+
95
+ def _find_notebooks(self, root_dir: Path) -> list:
96
+ """Find all .ipynb files in the workspace"""
97
+ notebooks = []
98
+ for path in root_dir.rglob('*.ipynb'):
99
+ # Skip excluded directories
100
+ if any(excluded in path.parts for excluded in self.EXCLUDE_DIRS):
101
+ continue
102
+ notebooks.append(path)
103
+ return notebooks
104
+
105
+ def _find_data_files(self, root_dir: Path) -> list:
106
+ """Find all data files in the workspace"""
107
+ data_files = []
108
+ for path in root_dir.rglob('*'):
109
+ # Skip excluded directories
110
+ if any(excluded in path.parts for excluded in self.EXCLUDE_DIRS):
111
+ continue
112
+ # Check if file has a data extension
113
+ if path.is_file() and path.suffix.lower() in self.DATA_EXTENSIONS:
114
+ data_files.append(path)
115
+ return data_files
116
+
117
+ def _get_recent_notebooks(self, notebooks: list, limit: int = 10) -> list:
118
+ """Get the most recently modified notebooks"""
119
+ # Sort by modification time (most recent first)
120
+ notebooks_with_mtime = [(nb, nb.stat().st_mtime) for nb in notebooks]
121
+ notebooks_with_mtime.sort(key=lambda x: x[1], reverse=True)
122
+
123
+ # Return only the paths, limited to the specified number
124
+ return [nb for nb, _ in notebooks_with_mtime[:limit]]
125
+
126
+ def _analyze_notebook(self, notebook_path: Path, data_files: list, root_dir: Path) -> dict:
127
+ """Analyze a notebook to find data dependencies"""
128
+ try:
129
+ with open(notebook_path, 'r', encoding='utf-8') as f:
130
+ notebook_content = f.read()
131
+
132
+ # Find data file references in the notebook
133
+ referenced_data_files = self._find_data_references(notebook_content, data_files, root_dir)
134
+
135
+ # Get relative path from root
136
+ relative_path = notebook_path.relative_to(root_dir)
137
+
138
+ # Get last modified time
139
+ mtime = datetime.fromtimestamp(notebook_path.stat().st_mtime)
140
+
141
+ return {
142
+ 'name': notebook_path.name,
143
+ 'path': str(relative_path),
144
+ 'last_modified': mtime.strftime('%Y-%m-%d %H:%M:%S'),
145
+ 'data_dependencies': referenced_data_files
146
+ }
147
+ except Exception as e:
148
+ # If we can't read the notebook, return basic info
149
+ relative_path = notebook_path.relative_to(root_dir)
150
+ return {
151
+ 'name': notebook_path.name,
152
+ 'path': str(relative_path),
153
+ 'last_modified': 'unknown',
154
+ 'data_dependencies': [],
155
+ 'error': str(e)
156
+ }
157
+
158
+ def _find_data_references(self, content: str, data_files: list, root_dir: Path) -> list:
159
+ """Find references to data files in notebook content"""
160
+ referenced_files = []
161
+
162
+ # Create a set of data file names and paths for matching
163
+ data_file_patterns = set()
164
+ for data_file in data_files:
165
+ # Add the filename
166
+ data_file_patterns.add(data_file.name)
167
+ # Add relative path
168
+ try:
169
+ rel_path = str(data_file.relative_to(root_dir))
170
+ data_file_patterns.add(rel_path)
171
+ # Also add with forward slashes (common in code)
172
+ data_file_patterns.add(rel_path.replace('\\', '/'))
173
+ except ValueError:
174
+ pass
175
+
176
+ # Search for data file references
177
+ # Common patterns: pd.read_csv('file.csv'), open('file.csv'), 'path/to/file.csv'
178
+ patterns = [
179
+ r'["\']([^"\']+\.(?:csv|json|xlsx?|parquet|pkl|pickle|feather|hdf5|h5|sql|db|sqlite|tsv|txt))["\']',
180
+ r'read_(?:csv|json|excel|parquet|pickle|feather|hdf|sql|table)\(["\']([^"\']+)["\']',
181
+ r'to_(?:csv|json|excel|parquet|pickle|feather|hdf|sql)\(["\']([^"\']+)["\']',
182
+ ]
183
+
184
+ found_references = set()
185
+ for pattern in patterns:
186
+ matches = re.finditer(pattern, content, re.IGNORECASE)
187
+ for match in matches:
188
+ file_ref = match.group(1)
189
+ # Check if this reference matches any of our data files
190
+ if file_ref in data_file_patterns or any(file_ref in str(df) for df in data_files):
191
+ found_references.add(file_ref)
192
+
193
+ # Also check for database connection strings
194
+ db_patterns = [
195
+ r'(?:postgresql|mysql|sqlite|mongodb)://[^\s\'"]+',
196
+ r'(?:DATABASE_URL|DB_URL|CONNECTION_STRING)\s*=\s*["\']([^"\']+)["\']'
197
+ ]
198
+
199
+ for pattern in db_patterns:
200
+ matches = re.finditer(pattern, content, re.IGNORECASE)
201
+ for match in matches:
202
+ found_references.add(f"Database: {match.group(0)[:50]}...")
203
+
204
+ return sorted(list(found_references))
205
+
206
+ def _generate_welcome_context(self, notebook_info: list, data_files: list, root_dir: Path) -> str:
207
+ """Generate an LLM-optimized, human-readable context string"""
208
+ lines = []
209
+ lines.append("# Workspace Overview\n")
210
+
211
+ if not notebook_info:
212
+ lines.append("No notebooks found in the workspace.\n")
213
+ else:
214
+ lines.append(f"## Recent Notebooks ({len(notebook_info)})\n")
215
+
216
+ for i, info in enumerate(notebook_info, 1):
217
+ lines.append(f"\n### {i}. {info['name']}")
218
+ lines.append(f" - Path: {info['path']}")
219
+ lines.append(f" - Last Modified: {info['last_modified']}")
220
+
221
+ if info.get('error'):
222
+ lines.append(f" - Note: Could not fully analyze ({info['error']})")
223
+
224
+ if info['data_dependencies']:
225
+ lines.append(f" - Data Dependencies:")
226
+ for dep in info['data_dependencies']:
227
+ lines.append(f" • {dep}")
228
+ else:
229
+ lines.append(f" - Data Dependencies: None detected")
230
+
231
+ # Add summary of data files referenced by recent notebooks
232
+ if data_files:
233
+ lines.append(f"\n## Data Files Referenced by Recent Notebooks ({len(data_files)} total)\n")
234
+
235
+ # Group by extension
236
+ by_extension = {}
237
+ for df in data_files:
238
+ ext = df.suffix.lower()
239
+ if ext not in by_extension:
240
+ by_extension[ext] = []
241
+ try:
242
+ rel_path = str(df.relative_to(root_dir))
243
+ by_extension[ext].append(rel_path)
244
+ except ValueError:
245
+ by_extension[ext].append(str(df))
246
+
247
+ for ext in sorted(by_extension.keys()):
248
+ files = by_extension[ext]
249
+ lines.append(f"\n### {ext} files ({len(files)})")
250
+ # Show all referenced files (they should be limited already)
251
+ for f in sorted(files):
252
+ lines.append(f" - {f}")
253
+ else:
254
+ lines.append(f"\n## Data Files Referenced by Recent Notebooks\n")
255
+ lines.append("No data file dependencies found in recent notebooks.\n")
256
+
257
+ return '\n'.join(lines)
258
+
259
+
260
+ def setup_handlers(web_app):
261
+ host_pattern = ".*$"
262
+ base_url = web_app.settings["base_url"]
263
+
264
+ # Original hello world endpoint
265
+ hello_route = url_path_join(base_url, "signalpilot-ai-internal", "hello-world")
266
+
267
+ # Read all files endpoint
268
+ read_all_files_route = url_path_join(base_url, "signalpilot-ai-internal", "read-all-files")
269
+
270
+ # Cache service endpoints
271
+ chat_histories_route = url_path_join(base_url, "signalpilot-ai-internal", "cache", "chat-histories")
272
+ chat_history_route = url_path_join(base_url, "signalpilot-ai-internal", "cache", "chat-histories", "([^/]+)")
273
+
274
+ app_values_route = url_path_join(base_url, "signalpilot-ai-internal", "cache", "app-values")
275
+ app_value_route = url_path_join(base_url, "signalpilot-ai-internal", "cache", "app-values", "([^/]+)")
276
+
277
+ cache_info_route = url_path_join(base_url, "signalpilot-ai-internal", "cache", "info")
278
+
279
+ # Database service endpoints
280
+ database_schema_route = url_path_join(base_url, "signalpilot-ai-internal", "database", "schema")
281
+ database_query_route = url_path_join(base_url, "signalpilot-ai-internal", "database", "query")
282
+
283
+ # MySQL service endpoints
284
+ mysql_schema_route = url_path_join(base_url, "signalpilot-ai-internal", "mysql", "schema")
285
+ mysql_query_route = url_path_join(base_url, "signalpilot-ai-internal", "mysql", "query")
286
+
287
+ # Snowflake service endpoints
288
+ snowflake_schema_route = url_path_join(base_url, "signalpilot-ai-internal", "snowflake", "schema")
289
+ snowflake_query_route = url_path_join(base_url, "signalpilot-ai-internal", "snowflake", "query")
290
+
291
+ handlers = [
292
+ # Original endpoint
293
+ (hello_route, HelloWorldHandler),
294
+
295
+ # Read all files endpoint
296
+ (read_all_files_route, ReadAllFilesHandler),
297
+
298
+ # Chat histories endpoints
299
+ (chat_histories_route, ChatHistoriesHandler),
300
+ (chat_history_route, ChatHistoriesHandler),
301
+
302
+ # App values endpoints
303
+ (app_values_route, AppValuesHandler),
304
+ (app_value_route, AppValuesHandler),
305
+
306
+ # Cache info endpoint
307
+ (cache_info_route, CacheInfoHandler),
308
+
309
+ # Database service endpoints (unified for PostgreSQL and MySQL)
310
+ (database_schema_route, UnifiedDatabaseSchemaHandler),
311
+ (database_query_route, UnifiedDatabaseQueryHandler),
312
+
313
+ # MySQL service endpoints (use unified handler)
314
+ (mysql_schema_route, UnifiedDatabaseSchemaHandler),
315
+ (mysql_query_route, UnifiedDatabaseQueryHandler),
316
+
317
+ # Snowflake service endpoints
318
+ (snowflake_schema_route, SnowflakeSchemaHandler),
319
+ (snowflake_query_route, SnowflakeQueryHandler),
320
+ ]
321
+
322
+ web_app.add_handlers(host_pattern, handlers)
323
+
324
+ # Initialize cache service on startup
325
+ cache_service = get_cache_service()
326
+ if cache_service.is_available():
327
+ print(f"SignalPilot AI cache service initialized successfully")
328
+ print(f"Cache directory: {cache_service.cache_dir}")
329
+ else:
330
+ print("WARNING: SignalPilot AI cache service failed to initialize!")
331
+
332
+ print("SignalPilot AI backend handlers registered:")
333
+ print(f" - Hello World: {hello_route}")
334
+ print(f" - Read All Files: {read_all_files_route}")
335
+ print(f" - Chat Histories: {chat_histories_route}")
336
+ print(f" - Chat History (by ID): {chat_history_route}")
337
+ print(f" - App Values: {app_values_route}")
338
+ print(f" - App Value (by key): {app_value_route}")
339
+ print(f" - Cache Info: {cache_info_route}")
340
+ print(f" - Database Schema: {database_schema_route}")
341
+ print(f" - Database Query: {database_query_route}")
342
+ print(f" - MySQL Schema: {mysql_schema_route}")
343
+ print(f" - MySQL Query: {mysql_query_route}")
344
+ print(f" - Snowflake Schema: {snowflake_schema_route}")
345
+ print(f" - Snowflake Query: {snowflake_query_route}")
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "signalpilot-ai-internal",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "SignalPilot Agent - Your Jupyter Notebook Assistant",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -133,7 +133,7 @@
133
133
  "outputDir": "signalpilot_ai_internal/labextension",
134
134
  "schemaDir": "schema",
135
135
  "_build": {
136
- "load": "static/remoteEntry.daab3ec6b62db758d12d.js",
136
+ "load": "static/remoteEntry.61ef7b3a050c161d7a88.js",
137
137
  "extension": "./extension",
138
138
  "style": "./style"
139
139
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "signalpilot-ai-internal",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "SignalPilot Agent - Your Jupyter Notebook Assistant",
5
5
  "keywords": [
6
6
  "jupyter",