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