sqlsaber 0.30.0__tar.gz → 0.30.2__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.30.0 → sqlsaber-0.30.2}/PKG-INFO +2 -1
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/changelog.md +12 -2
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/pyproject.toml +4 -3
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/config/api_keys.py +1 -1
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/config/oauth_tokens.py +2 -2
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/config/settings.py +1 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/uv.lock +966 -852
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/.github/workflows/claude-code-review.yml +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/.github/workflows/claude.yml +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/.github/workflows/deploy-docs.yml +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/.github/workflows/publish.yml +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/.github/workflows/test.yml +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/.gitignore +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/.python-version +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/AGENT.md +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/CLAUDE.md +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/LICENSE +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/README.md +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/.gitignore +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/.vscode/extensions.json +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/.vscode/launch.json +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/CLAUDE.md +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/astro.config.mjs +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/package-lock.json +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/package.json +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/public/CNAME +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/public/favicon.svg +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/assets/sqlsaber.gif +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/guides/authentication.mdx +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/guides/database-setup.mdx +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/guides/getting-started.mdx +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/guides/memory.mdx +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/guides/models.mdx +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/guides/queries.mdx +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/guides/threads.md +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/index.mdx +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/installation.mdx +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content/docs/reference/commands.md +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/content.config.ts +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/src/styles/global.css +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/docs/tsconfig.json +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/legislators.db +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/pytest.ini +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/sqlsaber.gif +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/sqlsaber.svg +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/__main__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/agents/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/agents/base.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/agents/pydantic_ai_agent.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/application/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/application/auth_setup.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/application/db_setup.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/application/model_selection.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/application/prompts.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/auth.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/commands.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/completers.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/database.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/display.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/interactive.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/memory.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/models.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/onboarding.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/streaming.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/theme.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/cli/threads.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/config/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/config/auth.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/config/database.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/config/oauth_flow.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/config/providers.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/database/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/database/base.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/database/csv.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/database/duckdb.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/database/mysql.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/database/postgresql.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/database/resolver.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/database/schema.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/database/sqlite.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/memory/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/memory/manager.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/memory/storage.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/theme/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/theme/manager.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/threads/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/threads/storage.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/tools/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/tools/base.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/tools/registry.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/tools/sql_guard.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/src/sqlsaber/tools/sql_tools.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/conftest.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_cli/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_cli/test_auth_reset.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_cli/test_commands.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_cli/test_threads.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_config/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_config/test_database.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_config/test_oauth.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_config/test_providers.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_config/test_settings.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database/test_connection.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database/test_csv_connection.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database/test_csv_module.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database/test_duckdb_module.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database/test_schema.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database/test_schema_display.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database/test_sqlite_module.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database/test_timeout.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_database_resolver.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_theme/test_manager.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_threads_storage.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_tools/__init__.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_tools/test_base.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_tools/test_registry.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_tools/test_sql_guard.py +0 -0
- {sqlsaber-0.30.0 → sqlsaber-0.30.2}/tests/test_tools/test_sql_tools.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlsaber
|
|
3
|
-
Version: 0.30.
|
|
3
|
+
Version: 0.30.2
|
|
4
4
|
Summary: SQLsaber - Open-source agentic SQL assistant
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -11,6 +11,7 @@ Requires-Dist: cyclopts>=3.22.1
|
|
|
11
11
|
Requires-Dist: duckdb>=0.9.2
|
|
12
12
|
Requires-Dist: httpx>=0.28.1
|
|
13
13
|
Requires-Dist: keyring>=25.6.0
|
|
14
|
+
Requires-Dist: keyrings-cryptfile; sys_platform == 'linux'
|
|
14
15
|
Requires-Dist: platformdirs>=4.0.0
|
|
15
16
|
Requires-Dist: prompt-toolkit>3.0.51
|
|
16
17
|
Requires-Dist: pydantic-ai
|
|
@@ -7,8 +7,20 @@ All notable changes to SQLsaber will be documented here.
|
|
|
7
7
|
|
|
8
8
|
### Unreleased
|
|
9
9
|
|
|
10
|
+
### v0.30.2
|
|
11
|
+
|
|
12
|
+
#### Changed
|
|
13
|
+
|
|
14
|
+
- Added `keyrings.cryptfile` as Linux-only dependency for better keyring support on Linux systems
|
|
15
|
+
|
|
10
16
|
---
|
|
11
17
|
|
|
18
|
+
### v0.30.1 - 2025-10-07
|
|
19
|
+
|
|
20
|
+
#### Fixed
|
|
21
|
+
|
|
22
|
+
- Minor styling fixes
|
|
23
|
+
|
|
12
24
|
### v0.30.0 - 2025-10-07
|
|
13
25
|
|
|
14
26
|
#### Removed
|
|
@@ -19,8 +31,6 @@ All notable changes to SQLsaber will be documented here.
|
|
|
19
31
|
>
|
|
20
32
|
> Just *ask* the coding agent to invoke `sqlsaber` cli with your question.
|
|
21
33
|
|
|
22
|
-
|
|
23
|
-
|
|
24
34
|
### v0.29.1 - 2025-10-05
|
|
25
35
|
|
|
26
36
|
#### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sqlsaber"
|
|
3
|
-
version = "0.30.
|
|
3
|
+
version = "0.30.2"
|
|
4
4
|
description = "SQLsaber - Open-source agentic SQL assistant"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -9,6 +9,7 @@ dependencies = [
|
|
|
9
9
|
"rich>=13.7.0",
|
|
10
10
|
"pydantic-ai",
|
|
11
11
|
"keyring>=25.6.0",
|
|
12
|
+
"keyrings.cryptfile; sys_platform == 'linux'",
|
|
12
13
|
"platformdirs>=4.0.0",
|
|
13
14
|
"questionary>=2.1.0",
|
|
14
15
|
"httpx>=0.28.1",
|
|
@@ -20,8 +21,8 @@ dependencies = [
|
|
|
20
21
|
"sqlglot[rs]>=27.20.0",
|
|
21
22
|
]
|
|
22
23
|
|
|
23
|
-
[
|
|
24
|
-
dev
|
|
24
|
+
[dependency-groups]
|
|
25
|
+
dev = ["ruff>=0.12.0", "pytest>=8.0.0", "pytest-asyncio>=1.0.0"]
|
|
25
26
|
|
|
26
27
|
[build-system]
|
|
27
28
|
requires = ["hatchling"]
|
|
@@ -36,7 +36,7 @@ class APIKeyManager:
|
|
|
36
36
|
return api_key
|
|
37
37
|
except Exception as e:
|
|
38
38
|
# Keyring access failed, continue to prompt
|
|
39
|
-
console.print(f"Keyring access failed: {e}", style="
|
|
39
|
+
console.print(f"Keyring access failed: {e}", style="warning")
|
|
40
40
|
|
|
41
41
|
# 3. Prompt user for API key
|
|
42
42
|
return self._prompt_and_store_key(provider, env_var_name, service_name)
|
|
@@ -97,14 +97,14 @@ class OAuthTokenManager:
|
|
|
97
97
|
if token.is_expired():
|
|
98
98
|
console.print(
|
|
99
99
|
f"OAuth token for {provider} has expired and needs refresh",
|
|
100
|
-
style="muted
|
|
100
|
+
style="muted",
|
|
101
101
|
)
|
|
102
102
|
return token # Return anyway for refresh attempt
|
|
103
103
|
|
|
104
104
|
if token.expires_soon():
|
|
105
105
|
console.print(
|
|
106
106
|
f"OAuth token for {provider} expires soon, consider refreshing",
|
|
107
|
-
style="muted
|
|
107
|
+
style="muted",
|
|
108
108
|
)
|
|
109
109
|
|
|
110
110
|
return token
|
|
@@ -103,6 +103,7 @@ class Config:
|
|
|
103
103
|
def __init__(self):
|
|
104
104
|
self.model_config_manager = ModelConfigManager()
|
|
105
105
|
self.model_name = self.model_config_manager.get_model()
|
|
106
|
+
self.api_key = None
|
|
106
107
|
self.api_key_manager = APIKeyManager()
|
|
107
108
|
self.auth_config_manager = AuthConfigManager()
|
|
108
109
|
|