sqlsaber 0.16.1__tar.gz → 0.17.0__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 sqlsaber might be problematic. Click here for more details.

Files changed (120) hide show
  1. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/CHANGELOG.md +19 -0
  2. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/PKG-INFO +12 -3
  3. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/README.md +11 -1
  4. sqlsaber-0.17.0/docs/astro.config.mjs +38 -0
  5. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/docs/package-lock.json +2317 -637
  6. sqlsaber-0.17.0/docs/package.json +22 -0
  7. sqlsaber-0.17.0/docs/src/assets/sqlsaber-hero.svg +48 -0
  8. sqlsaber-0.17.0/docs/src/content/docs/guides/example.md +11 -0
  9. sqlsaber-0.17.0/docs/src/content/docs/index.mdx +110 -0
  10. sqlsaber-0.17.0/docs/src/content/docs/reference/example.md +11 -0
  11. sqlsaber-0.17.0/docs/src/content.config.ts +7 -0
  12. sqlsaber-0.16.1/docs/src/lib/styles/app.css → sqlsaber-0.17.0/docs/src/styles/global.css +55 -10
  13. sqlsaber-0.17.0/docs/tsconfig.json +5 -0
  14. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/pyproject.toml +1 -2
  15. sqlsaber-0.17.0/sqlsaber.gif +0 -0
  16. sqlsaber-0.17.0/src/sqlsaber/agents/base.py +78 -0
  17. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/commands.py +33 -1
  18. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/display.py +0 -30
  19. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/interactive.py +76 -24
  20. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/streaming.py +0 -4
  21. sqlsaber-0.17.0/src/sqlsaber/cli/threads.py +301 -0
  22. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/database/schema.py +30 -2
  23. sqlsaber-0.17.0/src/sqlsaber/threads/__init__.py +5 -0
  24. sqlsaber-0.17.0/src/sqlsaber/threads/storage.py +303 -0
  25. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/tools/__init__.py +0 -2
  26. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/tools/base.py +0 -12
  27. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/tools/enums.py +0 -2
  28. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/tools/instructions.py +3 -23
  29. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/tools/registry.py +0 -12
  30. sqlsaber-0.17.0/tests/test_cli/test_threads.py +339 -0
  31. sqlsaber-0.17.0/tests/test_threads_storage.py +89 -0
  32. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_tools/test_base.py +0 -9
  33. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_tools/test_instructions.py +0 -49
  34. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_tools/test_registry.py +4 -19
  35. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/uv.lock +1 -25
  36. sqlsaber-0.16.1/docs/CLAUDE.md +0 -40
  37. sqlsaber-0.16.1/docs/astro.config.mjs +0 -17
  38. sqlsaber-0.16.1/docs/components.json +0 -16
  39. sqlsaber-0.16.1/docs/package.json +0 -26
  40. sqlsaber-0.16.1/docs/src/components/FeatureSection.svelte +0 -80
  41. sqlsaber-0.16.1/docs/src/components/Footer.svelte +0 -74
  42. sqlsaber-0.16.1/docs/src/components/Hero.svelte +0 -52
  43. sqlsaber-0.16.1/docs/src/components/Layout.astro +0 -43
  44. sqlsaber-0.16.1/docs/src/components/Navigation.svelte +0 -112
  45. sqlsaber-0.16.1/docs/src/lib/components/ui/button/button.svelte +0 -80
  46. sqlsaber-0.16.1/docs/src/lib/components/ui/button/index.ts +0 -17
  47. sqlsaber-0.16.1/docs/src/lib/utils.ts +0 -13
  48. sqlsaber-0.16.1/docs/src/pages/index.astro +0 -95
  49. sqlsaber-0.16.1/docs/svelte.config.js +0 -5
  50. sqlsaber-0.16.1/docs/tsconfig.json +0 -14
  51. sqlsaber-0.16.1/sqlsaber.gif +0 -0
  52. sqlsaber-0.16.1/src/sqlsaber/agents/base.py +0 -186
  53. sqlsaber-0.16.1/src/sqlsaber/conversation/__init__.py +0 -12
  54. sqlsaber-0.16.1/src/sqlsaber/conversation/manager.py +0 -224
  55. sqlsaber-0.16.1/src/sqlsaber/conversation/models.py +0 -120
  56. sqlsaber-0.16.1/src/sqlsaber/conversation/storage.py +0 -362
  57. sqlsaber-0.16.1/src/sqlsaber/models/__init__.py +0 -10
  58. sqlsaber-0.16.1/src/sqlsaber/models/types.py +0 -40
  59. sqlsaber-0.16.1/src/sqlsaber/tools/visualization_tools.py +0 -144
  60. sqlsaber-0.16.1/tests/test_conversation_storage.py +0 -136
  61. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/.github/workflows/claude-code-review.yml +0 -0
  62. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/.github/workflows/claude.yml +0 -0
  63. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/.github/workflows/deploy-docs.yml +0 -0
  64. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/.github/workflows/publish.yml +0 -0
  65. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/.github/workflows/test.yml +0 -0
  66. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/.gitignore +0 -0
  67. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/.python-version +0 -0
  68. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/AGENT.md +0 -0
  69. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/CLAUDE.md +0 -0
  70. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/LICENSE +0 -0
  71. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/docs/.gitignore +0 -0
  72. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/docs/.vscode/extensions.json +0 -0
  73. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/docs/.vscode/launch.json +0 -0
  74. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/docs/public/CNAME +0 -0
  75. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/docs/public/favicon.svg +0 -0
  76. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/pytest.ini +0 -0
  77. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/sqlsaber.svg +0 -0
  78. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/__init__.py +0 -0
  79. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/__main__.py +0 -0
  80. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/agents/__init__.py +0 -0
  81. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/agents/mcp.py +0 -0
  82. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/agents/pydantic_ai_agent.py +0 -0
  83. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/__init__.py +0 -0
  84. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/auth.py +0 -0
  85. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/completers.py +0 -0
  86. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/database.py +0 -0
  87. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/memory.py +0 -0
  88. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/cli/models.py +0 -0
  89. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/config/__init__.py +0 -0
  90. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/config/api_keys.py +0 -0
  91. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/config/auth.py +0 -0
  92. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/config/database.py +0 -0
  93. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/config/oauth_flow.py +0 -0
  94. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/config/oauth_tokens.py +0 -0
  95. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/config/providers.py +0 -0
  96. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/config/settings.py +0 -0
  97. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/database/__init__.py +0 -0
  98. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/database/connection.py +0 -0
  99. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/database/resolver.py +0 -0
  100. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/mcp/__init__.py +0 -0
  101. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/mcp/mcp.py +0 -0
  102. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/memory/__init__.py +0 -0
  103. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/memory/manager.py +0 -0
  104. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/memory/storage.py +0 -0
  105. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/src/sqlsaber/tools/sql_tools.py +0 -0
  106. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/__init__.py +0 -0
  107. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/conftest.py +0 -0
  108. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_cli/__init__.py +0 -0
  109. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_cli/test_auth_reset.py +0 -0
  110. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_cli/test_commands.py +0 -0
  111. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_config/__init__.py +0 -0
  112. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_config/test_database.py +0 -0
  113. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_config/test_oauth.py +0 -0
  114. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_config/test_providers.py +0 -0
  115. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_config/test_settings.py +0 -0
  116. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_database/__init__.py +0 -0
  117. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_database/test_connection.py +0 -0
  118. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_database_resolver.py +0 -0
  119. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_tools/__init__.py +0 -0
  120. {sqlsaber-0.16.1 → sqlsaber-0.17.0}/tests/test_tools/test_sql_tools.py +0 -0
@@ -4,6 +4,25 @@ All notable changes to SQLsaber will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.17.0] - 2025-09-08
8
+
9
+ ### Added
10
+
11
+ - Conversation threads system for storing, displaying, and resuming conversations
12
+ - Automatic thread creation for both interactive and non-interactive sessions
13
+ - `saber threads list` - List all conversation threads with filtering options
14
+ - `saber threads show THREAD_ID` - Display full transcript of a conversation thread
15
+ - `saber threads resume THREAD_ID` - Continue a previous conversation in interactive mode
16
+ - `saber threads prune` - Clean up old threads based on age
17
+ - Thread persistence with metadata (title, model, database, last activity)
18
+ - Seamless resumption of conversation context and history
19
+
20
+ ### Removed
21
+
22
+ - Removed visualization tools and plotting capabilities
23
+ - Removed PlotDataTool and uniplot dependency
24
+ - Cleaned up visualization-related code from CLI, registry, and instructions
25
+
7
26
  ## [0.16.1] - 2025-09-04
8
27
 
9
28
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlsaber
3
- Version: 0.16.1
3
+ Version: 0.17.0
4
4
  Summary: SQLsaber - Open-source agentic SQL assistant
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -16,7 +16,6 @@ Requires-Dist: platformdirs>=4.0.0
16
16
  Requires-Dist: pydantic-ai
17
17
  Requires-Dist: questionary>=2.1.0
18
18
  Requires-Dist: rich>=13.7.0
19
- Requires-Dist: uniplot>=0.21.2
20
19
  Description-Content-Type: text/markdown
21
20
 
22
21
  # SQLsaber
@@ -40,6 +39,7 @@ Ask your questions in natural language and `sqlsaber` will gather the right cont
40
39
  - [Usage](#usage)
41
40
  - [Interactive Mode](#interactive-mode)
42
41
  - [Single Query](#single-query)
42
+ - [Resume Past Conversation](#resume-past-conversation)
43
43
  - [Database Selection](#database-selection)
44
44
  - [Examples](#examples)
45
45
  - [MCP Server Integration](#mcp-server-integration)
@@ -56,6 +56,7 @@ Ask your questions in natural language and `sqlsaber` will gather the right cont
56
56
  - 🛡️ Safe query execution (read-only by default)
57
57
  - 🧠 Memory management
58
58
  - 💬 Interactive REPL mode
59
+ - 🧵 Conversation threads (store, display, and resume conversations)
59
60
  - 🗄️ Support for PostgreSQL, SQLite, and MySQL
60
61
  - 🔌 MCP (Model Context Protocol) server support
61
62
  - 🎨 Beautiful formatted output
@@ -147,6 +148,14 @@ echo "show me all users created this month" | saber
147
148
  cat query.txt | saber
148
149
  ```
149
150
 
151
+ ### Resume Past Conversation
152
+
153
+ Continue a previous conversation thread:
154
+
155
+ ```bash
156
+ saber threads resume THREAD_ID
157
+ ```
158
+
150
159
  ### Database Selection
151
160
 
152
161
  Use a specific database connection:
@@ -230,7 +239,7 @@ SQLsaber uses a multi-step agentic process to gather the right context and execu
230
239
 
231
240
  4. **SQL Generation**: Creates optimized SQL queries based on natural language input
232
241
  5. **Safe Execution**: Runs read-only queries with built-in protections against destructive operations
233
- 6. **Result Formatting**: Presents results with explanations in tables and optionally, visualizes using plots
242
+ 6. **Result Formatting**: Presents results with explanations in tables
234
243
 
235
244
  ## Contributing
236
245
 
@@ -19,6 +19,7 @@ Ask your questions in natural language and `sqlsaber` will gather the right cont
19
19
  - [Usage](#usage)
20
20
  - [Interactive Mode](#interactive-mode)
21
21
  - [Single Query](#single-query)
22
+ - [Resume Past Conversation](#resume-past-conversation)
22
23
  - [Database Selection](#database-selection)
23
24
  - [Examples](#examples)
24
25
  - [MCP Server Integration](#mcp-server-integration)
@@ -35,6 +36,7 @@ Ask your questions in natural language and `sqlsaber` will gather the right cont
35
36
  - 🛡️ Safe query execution (read-only by default)
36
37
  - 🧠 Memory management
37
38
  - 💬 Interactive REPL mode
39
+ - 🧵 Conversation threads (store, display, and resume conversations)
38
40
  - 🗄️ Support for PostgreSQL, SQLite, and MySQL
39
41
  - 🔌 MCP (Model Context Protocol) server support
40
42
  - 🎨 Beautiful formatted output
@@ -126,6 +128,14 @@ echo "show me all users created this month" | saber
126
128
  cat query.txt | saber
127
129
  ```
128
130
 
131
+ ### Resume Past Conversation
132
+
133
+ Continue a previous conversation thread:
134
+
135
+ ```bash
136
+ saber threads resume THREAD_ID
137
+ ```
138
+
129
139
  ### Database Selection
130
140
 
131
141
  Use a specific database connection:
@@ -209,7 +219,7 @@ SQLsaber uses a multi-step agentic process to gather the right context and execu
209
219
 
210
220
  4. **SQL Generation**: Creates optimized SQL queries based on natural language input
211
221
  5. **Safe Execution**: Runs read-only queries with built-in protections against destructive operations
212
- 6. **Result Formatting**: Presents results with explanations in tables and optionally, visualizes using plots
222
+ 6. **Result Formatting**: Presents results with explanations in tables
213
223
 
214
224
  ## Contributing
215
225
 
@@ -0,0 +1,38 @@
1
+ // @ts-check
2
+
3
+ import starlight from "@astrojs/starlight";
4
+ import tailwindcss from "@tailwindcss/vite";
5
+ import { defineConfig } from "astro/config";
6
+
7
+ // https://astro.build/config
8
+ export default defineConfig({
9
+ integrations: [
10
+ starlight({
11
+ title: "SQLsaber",
12
+ customCss: ["./src/styles/global.css"],
13
+ social: [
14
+ {
15
+ icon: "github",
16
+ label: "GitHub",
17
+ href: "https://github.com/SarthakJariwala/sqlsaber",
18
+ },
19
+ ],
20
+ sidebar: [
21
+ {
22
+ label: "Guides",
23
+ items: [
24
+ // Each item here is one entry in the navigation menu.
25
+ { label: "Example Guide", slug: "guides/example" },
26
+ ],
27
+ },
28
+ {
29
+ label: "Reference",
30
+ autogenerate: { directory: "reference" },
31
+ },
32
+ ],
33
+ }),
34
+ ],
35
+ vite: { plugins: [tailwindcss()] },
36
+
37
+ site: "https://sqlsaber.com",
38
+ });