sqlsaber 0.25.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.

Files changed (121) hide show
  1. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/PKG-INFO +43 -9
  2. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/README.md +42 -8
  3. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/package-lock.json +68 -434
  4. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/package.json +2 -2
  5. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/changelog.md +13 -0
  6. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/queries.mdx +49 -0
  7. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/reference/commands.md +4 -0
  8. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/pyproject.toml +1 -1
  9. sqlsaber-0.26.0/src/sqlsaber/agents/__init__.py +7 -0
  10. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/agents/base.py +1 -1
  11. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/agents/mcp.py +1 -1
  12. sqlsaber-0.26.0/src/sqlsaber/agents/pydantic_ai_agent.py +250 -0
  13. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/commands.py +11 -28
  14. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/completers.py +2 -0
  15. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/database.py +1 -1
  16. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/display.py +29 -9
  17. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/interactive.py +22 -15
  18. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/streaming.py +15 -17
  19. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/threads.py +10 -6
  20. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/config/settings.py +25 -2
  21. sqlsaber-0.26.0/src/sqlsaber/database/__init__.py +63 -0
  22. sqlsaber-0.26.0/src/sqlsaber/database/base.py +124 -0
  23. sqlsaber-0.26.0/src/sqlsaber/database/csv.py +133 -0
  24. sqlsaber-0.26.0/src/sqlsaber/database/duckdb.py +313 -0
  25. sqlsaber-0.26.0/src/sqlsaber/database/mysql.py +345 -0
  26. sqlsaber-0.26.0/src/sqlsaber/database/postgresql.py +328 -0
  27. sqlsaber-0.26.0/src/sqlsaber/database/schema.py +165 -0
  28. sqlsaber-0.26.0/src/sqlsaber/database/sqlite.py +258 -0
  29. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/mcp/mcp.py +1 -1
  30. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/sql_tools.py +1 -1
  31. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_cli/test_threads.py +5 -4
  32. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_config/test_settings.py +1 -1
  33. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_database/test_connection.py +1 -1
  34. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_database/test_csv_connection.py +2 -4
  35. sqlsaber-0.26.0/tests/test_database/test_csv_module.py +357 -0
  36. sqlsaber-0.26.0/tests/test_database/test_duckdb_module.py +410 -0
  37. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_database/test_schema.py +1 -1
  38. sqlsaber-0.26.0/tests/test_database/test_schema_display.py +321 -0
  39. sqlsaber-0.26.0/tests/test_database/test_sqlite_module.py +307 -0
  40. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_database/test_timeout.py +1 -20
  41. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_tools/test_sql_tools.py +1 -1
  42. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/uv.lock +854 -854
  43. sqlsaber-0.25.0/src/sqlsaber/agents/__init__.py +0 -7
  44. sqlsaber-0.25.0/src/sqlsaber/agents/pydantic_ai_agent.py +0 -178
  45. sqlsaber-0.25.0/src/sqlsaber/database/__init__.py +0 -9
  46. sqlsaber-0.25.0/src/sqlsaber/database/connection.py +0 -535
  47. sqlsaber-0.25.0/src/sqlsaber/database/schema.py +0 -1062
  48. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/.github/workflows/claude-code-review.yml +0 -0
  49. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/.github/workflows/claude.yml +0 -0
  50. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/.github/workflows/deploy-docs.yml +0 -0
  51. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/.github/workflows/publish.yml +0 -0
  52. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/.github/workflows/test.yml +0 -0
  53. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/.gitignore +0 -0
  54. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/.python-version +0 -0
  55. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/AGENT.md +0 -0
  56. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/CLAUDE.md +0 -0
  57. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/LICENSE +0 -0
  58. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/.gitignore +0 -0
  59. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/.vscode/extensions.json +0 -0
  60. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/.vscode/launch.json +0 -0
  61. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/CLAUDE.md +0 -0
  62. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/astro.config.mjs +0 -0
  63. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/public/CNAME +0 -0
  64. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/public/favicon.svg +0 -0
  65. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/assets/sqlsaber-hero.svg +0 -0
  66. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/authentication.mdx +0 -0
  67. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/database-setup.mdx +0 -0
  68. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/getting-started.mdx +0 -0
  69. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/memory.mdx +0 -0
  70. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/models.mdx +0 -0
  71. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/guides/threads.md +0 -0
  72. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/index.mdx +0 -0
  73. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content/docs/installation.mdx +0 -0
  74. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/content.config.ts +0 -0
  75. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/src/styles/global.css +0 -0
  76. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/docs/tsconfig.json +0 -0
  77. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/legislators.db +0 -0
  78. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/pytest.ini +0 -0
  79. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/sqlsaber.gif +0 -0
  80. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/sqlsaber.svg +0 -0
  81. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/__init__.py +0 -0
  82. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/__main__.py +0 -0
  83. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/__init__.py +0 -0
  84. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/auth.py +0 -0
  85. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/memory.py +0 -0
  86. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/cli/models.py +0 -0
  87. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/config/__init__.py +0 -0
  88. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/config/api_keys.py +0 -0
  89. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/config/auth.py +0 -0
  90. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/config/database.py +0 -0
  91. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/config/oauth_flow.py +0 -0
  92. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/config/oauth_tokens.py +0 -0
  93. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/config/providers.py +0 -0
  94. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/database/resolver.py +0 -0
  95. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/mcp/__init__.py +0 -0
  96. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/memory/__init__.py +0 -0
  97. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/memory/manager.py +0 -0
  98. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/memory/storage.py +0 -0
  99. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/threads/__init__.py +0 -0
  100. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/threads/storage.py +0 -0
  101. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/__init__.py +0 -0
  102. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/base.py +0 -0
  103. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/enums.py +0 -0
  104. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/instructions.py +0 -0
  105. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/src/sqlsaber/tools/registry.py +0 -0
  106. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/__init__.py +0 -0
  107. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/conftest.py +0 -0
  108. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_cli/__init__.py +0 -0
  109. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_cli/test_auth_reset.py +0 -0
  110. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_cli/test_commands.py +0 -0
  111. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_config/__init__.py +0 -0
  112. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_config/test_database.py +0 -0
  113. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_config/test_oauth.py +0 -0
  114. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_config/test_providers.py +0 -0
  115. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_database/__init__.py +0 -0
  116. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_database_resolver.py +0 -0
  117. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_threads_storage.py +0 -0
  118. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_tools/__init__.py +0 -0
  119. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_tools/test_base.py +0 -0
  120. {sqlsaber-0.25.0 → sqlsaber-0.26.0}/tests/test_tools/test_instructions.py +0 -0
  121. {sqlsaber-0.25.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.25.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
@@ -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
- - 🔍 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, and DuckDB
62
- - 🔌 MCP (Model Context Protocol) server support
63
- - 🎨 Beautiful formatted output
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
@@ -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
- - 🔍 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, and DuckDB
41
- - 🔌 MCP (Model Context Protocol) server support
42
- - 🎨 Beautiful formatted output
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