sqlsaber 0.24.0__tar.gz → 0.26.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.24.0 → sqlsaber-0.26.0}/PKG-INFO +45 -10
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/README.md +43 -8
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/package-lock.json +68 -434
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/package.json +2 -2
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/changelog.md +21 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/database-setup.mdx +15 -2
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/getting-started.mdx +2 -1
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/queries.mdx +53 -1
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/index.mdx +1 -1
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/reference/commands.md +52 -7
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/pyproject.toml +2 -2
- sqlsaber-0.26.0/src/sqlsaber/agents/__init__.py +7 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/agents/base.py +5 -2
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/agents/mcp.py +1 -1
- sqlsaber-0.26.0/src/sqlsaber/agents/pydantic_ai_agent.py +250 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/commands.py +17 -26
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/completers.py +2 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/database.py +18 -7
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/display.py +29 -9
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/interactive.py +28 -16
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/streaming.py +15 -17
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/threads.py +10 -6
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/config/database.py +3 -1
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/config/settings.py +25 -2
- sqlsaber-0.26.0/src/sqlsaber/database/__init__.py +63 -0
- sqlsaber-0.26.0/src/sqlsaber/database/base.py +124 -0
- sqlsaber-0.26.0/src/sqlsaber/database/csv.py +133 -0
- sqlsaber-0.26.0/src/sqlsaber/database/duckdb.py +313 -0
- sqlsaber-0.26.0/src/sqlsaber/database/mysql.py +345 -0
- sqlsaber-0.26.0/src/sqlsaber/database/postgresql.py +328 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/database/resolver.py +7 -3
- sqlsaber-0.26.0/src/sqlsaber/database/schema.py +165 -0
- sqlsaber-0.26.0/src/sqlsaber/database/sqlite.py +258 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/mcp/mcp.py +1 -1
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/sql_tools.py +1 -1
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_cli/test_threads.py +5 -4
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_config/test_database.py +26 -1
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_config/test_settings.py +1 -1
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_database/test_connection.py +10 -1
- sqlsaber-0.26.0/tests/test_database/test_csv_connection.py +40 -0
- sqlsaber-0.26.0/tests/test_database/test_csv_module.py +357 -0
- sqlsaber-0.26.0/tests/test_database/test_duckdb_module.py +410 -0
- sqlsaber-0.26.0/tests/test_database/test_schema.py +47 -0
- sqlsaber-0.26.0/tests/test_database/test_schema_display.py +321 -0
- sqlsaber-0.26.0/tests/test_database/test_sqlite_module.py +307 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_database/test_timeout.py +1 -20
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_database_resolver.py +24 -2
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_tools/test_sql_tools.py +1 -1
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/uv.lock +26 -99
- sqlsaber-0.24.0/src/sqlsaber/agents/__init__.py +0 -7
- sqlsaber-0.24.0/src/sqlsaber/agents/pydantic_ai_agent.py +0 -175
- sqlsaber-0.24.0/src/sqlsaber/database/__init__.py +0 -9
- sqlsaber-0.24.0/src/sqlsaber/database/connection.py +0 -511
- sqlsaber-0.24.0/src/sqlsaber/database/schema.py +0 -838
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/.github/workflows/claude-code-review.yml +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/.github/workflows/claude.yml +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/.github/workflows/deploy-docs.yml +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/.github/workflows/publish.yml +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/.github/workflows/test.yml +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/.gitignore +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/.python-version +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/AGENT.md +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/CLAUDE.md +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/LICENSE +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/.gitignore +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/.vscode/extensions.json +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/.vscode/launch.json +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/CLAUDE.md +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/astro.config.mjs +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/public/CNAME +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/public/favicon.svg +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/assets/sqlsaber-hero.svg +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/authentication.mdx +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/memory.mdx +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/models.mdx +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/threads.md +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content/docs/installation.mdx +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/content.config.ts +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/src/styles/global.css +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/docs/tsconfig.json +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/legislators.db +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/pytest.ini +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/sqlsaber.gif +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/sqlsaber.svg +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/__main__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/auth.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/memory.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/models.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/config/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/config/api_keys.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/config/auth.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/config/oauth_flow.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/config/oauth_tokens.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/config/providers.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/mcp/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/memory/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/memory/manager.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/memory/storage.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/threads/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/threads/storage.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/base.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/enums.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/instructions.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/registry.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/conftest.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_cli/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_cli/test_auth_reset.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_cli/test_commands.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_config/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_config/test_oauth.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_config/test_providers.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_database/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_threads_storage.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_tools/__init__.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_tools/test_base.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_tools/test_instructions.py +0 -0
- {sqlsaber-0.24.0 → sqlsaber-0.26.0}/tests/test_tools/test_registry.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlsaber
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Summary: SQLsaber - Open-source agentic SQL assistant
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -8,10 +8,10 @@ Requires-Dist: aiomysql>=0.2.0
|
|
|
8
8
|
Requires-Dist: aiosqlite>=0.21.0
|
|
9
9
|
Requires-Dist: asyncpg>=0.30.0
|
|
10
10
|
Requires-Dist: cyclopts>=3.22.1
|
|
11
|
+
Requires-Dist: duckdb>=0.9.2
|
|
11
12
|
Requires-Dist: fastmcp>=2.9.0
|
|
12
13
|
Requires-Dist: httpx>=0.28.1
|
|
13
14
|
Requires-Dist: keyring>=25.6.0
|
|
14
|
-
Requires-Dist: pandas>=2.0.0
|
|
15
15
|
Requires-Dist: platformdirs>=4.0.0
|
|
16
16
|
Requires-Dist: prompt-toolkit>3.0.51
|
|
17
17
|
Requires-Dist: pydantic-ai
|
|
@@ -53,14 +53,15 @@ Ask your questions in natural language and `sqlsaber` will gather the right cont
|
|
|
53
53
|
|
|
54
54
|
## Features
|
|
55
55
|
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
56
|
+
- Automatic database schema introspection
|
|
57
|
+
- Safe query execution (read-only by default)
|
|
58
|
+
- Memory management
|
|
59
|
+
- Interactive REPL mode
|
|
60
|
+
- Conversation threads (store, display, and resume conversations)
|
|
61
|
+
- Support for PostgreSQL, MySQL, SQLite, DuckDB, and CSVs
|
|
62
|
+
- MCP (Model Context Protocol) server support
|
|
63
|
+
- Extended thinking mode for select models (Anthropic, OpenAI, Google, Groq)
|
|
64
|
+
- Beautiful formatted output
|
|
64
65
|
|
|
65
66
|
## Installation
|
|
66
67
|
|
|
@@ -122,6 +123,39 @@ saber memory list
|
|
|
122
123
|
|
|
123
124
|
> You can also add memories in an interactive query session by starting with the `#` sign
|
|
124
125
|
|
|
126
|
+
### Extended Thinking Mode
|
|
127
|
+
|
|
128
|
+
For complex queries that require deeper reasoning, `sqlsaber` supports extended thinking mode. When enabled, you will see the model's reasoning process as it generates SQL queries and arrives at conclusions.
|
|
129
|
+
|
|
130
|
+
**Enable/disable via CLI flags:**
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Enable thinking for a single query
|
|
134
|
+
saber --thinking "analyze sales trends across regions"
|
|
135
|
+
|
|
136
|
+
# Disable thinking for a single query
|
|
137
|
+
saber --no-thinking "show me all users"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Toggle in interactive mode:**
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# In interactive mode, use slash commands
|
|
144
|
+
/thinking on # Enable thinking
|
|
145
|
+
/thinking off # Disable thinking
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Configure default setting:**
|
|
149
|
+
|
|
150
|
+
Thinking is disabled by default. To change the default, edit your config file at `~/.config/sqlsaber/model_config.json`:
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"model": "anthropic:claude-sonnet-4-20250514",
|
|
155
|
+
"thinking_enabled": true
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
125
159
|
## Usage
|
|
126
160
|
|
|
127
161
|
### Interactive Mode
|
|
@@ -170,6 +204,7 @@ saber -d mydb "count all orders"
|
|
|
170
204
|
|
|
171
205
|
# You can also pass a connection string
|
|
172
206
|
saber -d "postgresql://user:password@localhost:5432/mydb" "count all orders"
|
|
207
|
+
saber -d "duckdb:///path/to/data.duckdb" "top customers"
|
|
173
208
|
```
|
|
174
209
|
|
|
175
210
|
## Examples
|
|
@@ -32,14 +32,15 @@ Ask your questions in natural language and `sqlsaber` will gather the right cont
|
|
|
32
32
|
|
|
33
33
|
## Features
|
|
34
34
|
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
35
|
+
- Automatic database schema introspection
|
|
36
|
+
- Safe query execution (read-only by default)
|
|
37
|
+
- Memory management
|
|
38
|
+
- Interactive REPL mode
|
|
39
|
+
- Conversation threads (store, display, and resume conversations)
|
|
40
|
+
- Support for PostgreSQL, MySQL, SQLite, DuckDB, and CSVs
|
|
41
|
+
- MCP (Model Context Protocol) server support
|
|
42
|
+
- Extended thinking mode for select models (Anthropic, OpenAI, Google, Groq)
|
|
43
|
+
- Beautiful formatted output
|
|
43
44
|
|
|
44
45
|
## Installation
|
|
45
46
|
|
|
@@ -101,6 +102,39 @@ saber memory list
|
|
|
101
102
|
|
|
102
103
|
> You can also add memories in an interactive query session by starting with the `#` sign
|
|
103
104
|
|
|
105
|
+
### Extended Thinking Mode
|
|
106
|
+
|
|
107
|
+
For complex queries that require deeper reasoning, `sqlsaber` supports extended thinking mode. When enabled, you will see the model's reasoning process as it generates SQL queries and arrives at conclusions.
|
|
108
|
+
|
|
109
|
+
**Enable/disable via CLI flags:**
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Enable thinking for a single query
|
|
113
|
+
saber --thinking "analyze sales trends across regions"
|
|
114
|
+
|
|
115
|
+
# Disable thinking for a single query
|
|
116
|
+
saber --no-thinking "show me all users"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Toggle in interactive mode:**
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# In interactive mode, use slash commands
|
|
123
|
+
/thinking on # Enable thinking
|
|
124
|
+
/thinking off # Disable thinking
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Configure default setting:**
|
|
128
|
+
|
|
129
|
+
Thinking is disabled by default. To change the default, edit your config file at `~/.config/sqlsaber/model_config.json`:
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"model": "anthropic:claude-sonnet-4-20250514",
|
|
134
|
+
"thinking_enabled": true
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
104
138
|
## Usage
|
|
105
139
|
|
|
106
140
|
### Interactive Mode
|
|
@@ -149,6 +183,7 @@ saber -d mydb "count all orders"
|
|
|
149
183
|
|
|
150
184
|
# You can also pass a connection string
|
|
151
185
|
saber -d "postgresql://user:password@localhost:5432/mydb" "count all orders"
|
|
186
|
+
saber -d "duckdb:///path/to/data.duckdb" "top customers"
|
|
152
187
|
```
|
|
153
188
|
|
|
154
189
|
## Examples
|