sqlsaber 0.16.0__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.
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/CHANGELOG.md +26 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/PKG-INFO +12 -3
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/README.md +11 -1
- sqlsaber-0.17.0/docs/astro.config.mjs +38 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/docs/package-lock.json +2317 -637
- sqlsaber-0.17.0/docs/package.json +22 -0
- sqlsaber-0.17.0/docs/src/assets/sqlsaber-hero.svg +48 -0
- sqlsaber-0.17.0/docs/src/content/docs/guides/example.md +11 -0
- sqlsaber-0.17.0/docs/src/content/docs/index.mdx +110 -0
- sqlsaber-0.17.0/docs/src/content/docs/reference/example.md +11 -0
- sqlsaber-0.17.0/docs/src/content.config.ts +7 -0
- sqlsaber-0.16.0/docs/src/lib/styles/app.css → sqlsaber-0.17.0/docs/src/styles/global.css +55 -10
- sqlsaber-0.17.0/docs/tsconfig.json +5 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/pyproject.toml +2 -2
- sqlsaber-0.17.0/sqlsaber.gif +0 -0
- sqlsaber-0.17.0/src/sqlsaber/agents/base.py +78 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/commands.py +34 -2
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/display.py +0 -30
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/interactive.py +76 -24
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/streaming.py +0 -4
- sqlsaber-0.17.0/src/sqlsaber/cli/threads.py +301 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/database/schema.py +30 -2
- sqlsaber-0.17.0/src/sqlsaber/threads/__init__.py +5 -0
- sqlsaber-0.17.0/src/sqlsaber/threads/storage.py +303 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/tools/__init__.py +0 -2
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/tools/base.py +0 -12
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/tools/enums.py +0 -2
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/tools/instructions.py +3 -23
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/tools/registry.py +0 -12
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_cli/test_commands.py +1 -1
- sqlsaber-0.17.0/tests/test_cli/test_threads.py +339 -0
- sqlsaber-0.17.0/tests/test_threads_storage.py +89 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_tools/test_base.py +0 -9
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_tools/test_instructions.py +0 -49
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_tools/test_registry.py +4 -19
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/uv.lock +1 -25
- sqlsaber-0.16.0/docs/CLAUDE.md +0 -40
- sqlsaber-0.16.0/docs/astro.config.mjs +0 -17
- sqlsaber-0.16.0/docs/components.json +0 -16
- sqlsaber-0.16.0/docs/package.json +0 -26
- sqlsaber-0.16.0/docs/src/components/FeatureSection.svelte +0 -80
- sqlsaber-0.16.0/docs/src/components/Footer.svelte +0 -74
- sqlsaber-0.16.0/docs/src/components/Hero.svelte +0 -52
- sqlsaber-0.16.0/docs/src/components/Layout.astro +0 -43
- sqlsaber-0.16.0/docs/src/components/Navigation.svelte +0 -112
- sqlsaber-0.16.0/docs/src/lib/components/ui/button/button.svelte +0 -80
- sqlsaber-0.16.0/docs/src/lib/components/ui/button/index.ts +0 -17
- sqlsaber-0.16.0/docs/src/lib/utils.ts +0 -13
- sqlsaber-0.16.0/docs/src/pages/index.astro +0 -95
- sqlsaber-0.16.0/docs/svelte.config.js +0 -5
- sqlsaber-0.16.0/docs/tsconfig.json +0 -14
- sqlsaber-0.16.0/sqlsaber.gif +0 -0
- sqlsaber-0.16.0/src/sqlsaber/agents/base.py +0 -186
- sqlsaber-0.16.0/src/sqlsaber/conversation/__init__.py +0 -12
- sqlsaber-0.16.0/src/sqlsaber/conversation/manager.py +0 -224
- sqlsaber-0.16.0/src/sqlsaber/conversation/models.py +0 -120
- sqlsaber-0.16.0/src/sqlsaber/conversation/storage.py +0 -362
- sqlsaber-0.16.0/src/sqlsaber/models/__init__.py +0 -10
- sqlsaber-0.16.0/src/sqlsaber/models/types.py +0 -40
- sqlsaber-0.16.0/src/sqlsaber/tools/visualization_tools.py +0 -144
- sqlsaber-0.16.0/tests/test_conversation_storage.py +0 -136
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/.github/workflows/claude-code-review.yml +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/.github/workflows/claude.yml +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/.github/workflows/deploy-docs.yml +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/.github/workflows/publish.yml +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/.github/workflows/test.yml +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/.gitignore +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/.python-version +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/AGENT.md +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/CLAUDE.md +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/LICENSE +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/docs/.gitignore +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/docs/.vscode/extensions.json +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/docs/.vscode/launch.json +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/docs/public/CNAME +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/docs/public/favicon.svg +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/pytest.ini +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/sqlsaber.svg +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/__main__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/agents/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/agents/mcp.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/agents/pydantic_ai_agent.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/auth.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/completers.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/database.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/memory.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/cli/models.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/config/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/config/api_keys.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/config/auth.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/config/database.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/config/oauth_flow.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/config/oauth_tokens.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/config/providers.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/config/settings.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/database/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/database/connection.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/database/resolver.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/mcp/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/mcp/mcp.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/memory/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/memory/manager.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/memory/storage.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/src/sqlsaber/tools/sql_tools.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/conftest.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_cli/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_cli/test_auth_reset.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_config/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_config/test_database.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_config/test_oauth.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_config/test_providers.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_config/test_settings.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_database/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_database/test_connection.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_database_resolver.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_tools/__init__.py +0 -0
- {sqlsaber-0.16.0 → sqlsaber-0.17.0}/tests/test_tools/test_sql_tools.py +0 -0
|
@@ -4,6 +4,32 @@ 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
|
+
|
|
26
|
+
## [0.16.1] - 2025-09-04
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- Compile python byte code during installation
|
|
31
|
+
- Updated CLI help string
|
|
32
|
+
|
|
7
33
|
## [0.16.0] - 2025-09-04
|
|
8
34
|
|
|
9
35
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlsaber
|
|
3
|
-
Version: 0.
|
|
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
|
|
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
|
|
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
|
+
});
|