sqlspec 0.25.0__tar.gz → 0.27.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 sqlspec might be problematic. Click here for more details.

Files changed (583) hide show
  1. sqlspec-0.27.0/.claude/AGENTS.md +554 -0
  2. sqlspec-0.27.0/.claude/README.md +263 -0
  3. sqlspec-0.27.0/.claude/agents/docs-vision.md +819 -0
  4. sqlspec-0.27.0/.claude/agents/expert.md +514 -0
  5. sqlspec-0.27.0/.claude/agents/planner.md +297 -0
  6. sqlspec-0.27.0/.claude/agents/testing.md +462 -0
  7. sqlspec-0.27.0/.claude/commands/implement.md +36 -0
  8. sqlspec-0.27.0/.claude/commands/plan.md +26 -0
  9. sqlspec-0.27.0/.claude/commands/review.md +42 -0
  10. sqlspec-0.27.0/.claude/commands/test.md +25 -0
  11. {sqlspec-0.25.0 → sqlspec-0.27.0}/.gitignore +19 -15
  12. {sqlspec-0.25.0 → sqlspec-0.27.0}/.pre-commit-config.yaml +2 -2
  13. sqlspec-0.27.0/AGENTS.md +1585 -0
  14. sqlspec-0.27.0/CLAUDE.md +5 -0
  15. sqlspec-0.27.0/GEMINI.md +5 -0
  16. {sqlspec-0.25.0 → sqlspec-0.27.0}/Makefile +11 -11
  17. {sqlspec-0.25.0 → sqlspec-0.27.0}/PKG-INFO +40 -21
  18. {sqlspec-0.25.0 → sqlspec-0.27.0}/README.md +36 -17
  19. {sqlspec-0.25.0 → sqlspec-0.27.0}/pyproject.toml +39 -16
  20. sqlspec-0.27.0/specs/README.md +175 -0
  21. sqlspec-0.27.0/specs/template-spec/README.md +70 -0
  22. sqlspec-0.27.0/specs/template-spec/prd.md +158 -0
  23. sqlspec-0.27.0/specs/template-spec/recovery.md +144 -0
  24. sqlspec-0.27.0/specs/template-spec/tasks.md +73 -0
  25. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/__init__.py +7 -15
  26. sqlspec-0.27.0/sqlspec/_serialization.py +309 -0
  27. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/_typing.py +71 -52
  28. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/_types.py +1 -1
  29. sqlspec-0.27.0/sqlspec/adapters/adbc/adk/__init__.py +5 -0
  30. sqlspec-0.27.0/sqlspec/adapters/adbc/adk/store.py +870 -0
  31. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/config.py +69 -12
  32. sqlspec-0.27.0/sqlspec/adapters/adbc/data_dictionary.py +340 -0
  33. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/driver.py +266 -58
  34. sqlspec-0.27.0/sqlspec/adapters/adbc/litestar/__init__.py +5 -0
  35. sqlspec-0.27.0/sqlspec/adapters/adbc/litestar/store.py +504 -0
  36. sqlspec-0.27.0/sqlspec/adapters/adbc/type_converter.py +153 -0
  37. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/_types.py +1 -1
  38. sqlspec-0.27.0/sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
  39. sqlspec-0.27.0/sqlspec/adapters/aiosqlite/adk/store.py +527 -0
  40. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/config.py +88 -15
  41. sqlspec-0.27.0/sqlspec/adapters/aiosqlite/data_dictionary.py +149 -0
  42. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/driver.py +143 -40
  43. sqlspec-0.27.0/sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
  44. sqlspec-0.27.0/sqlspec/adapters/aiosqlite/litestar/store.py +281 -0
  45. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/pool.py +7 -7
  46. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncmy/__init__.py +7 -1
  47. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncmy/_types.py +2 -2
  48. sqlspec-0.27.0/sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
  49. sqlspec-0.27.0/sqlspec/adapters/asyncmy/adk/store.py +493 -0
  50. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncmy/config.py +68 -23
  51. sqlspec-0.27.0/sqlspec/adapters/asyncmy/data_dictionary.py +161 -0
  52. sqlspec-0.27.0/sqlspec/adapters/asyncmy/driver.py +565 -0
  53. sqlspec-0.27.0/sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
  54. sqlspec-0.27.0/sqlspec/adapters/asyncmy/litestar/store.py +296 -0
  55. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncpg/__init__.py +2 -1
  56. sqlspec-0.27.0/sqlspec/adapters/asyncpg/_type_handlers.py +71 -0
  57. sqlspec-0.27.0/sqlspec/adapters/asyncpg/_types.py +21 -0
  58. sqlspec-0.27.0/sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
  59. sqlspec-0.27.0/sqlspec/adapters/asyncpg/adk/store.py +450 -0
  60. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncpg/config.py +59 -35
  61. sqlspec-0.27.0/sqlspec/adapters/asyncpg/data_dictionary.py +173 -0
  62. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncpg/driver.py +170 -25
  63. sqlspec-0.27.0/sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
  64. sqlspec-0.27.0/sqlspec/adapters/asyncpg/litestar/store.py +253 -0
  65. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/bigquery/_types.py +1 -1
  66. sqlspec-0.27.0/sqlspec/adapters/bigquery/adk/__init__.py +5 -0
  67. sqlspec-0.27.0/sqlspec/adapters/bigquery/adk/store.py +576 -0
  68. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/bigquery/config.py +27 -10
  69. sqlspec-0.27.0/sqlspec/adapters/bigquery/data_dictionary.py +149 -0
  70. sqlspec-0.27.0/sqlspec/adapters/bigquery/driver.py +760 -0
  71. sqlspec-0.27.0/sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
  72. sqlspec-0.27.0/sqlspec/adapters/bigquery/litestar/store.py +327 -0
  73. sqlspec-0.27.0/sqlspec/adapters/bigquery/type_converter.py +125 -0
  74. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/_types.py +1 -1
  75. sqlspec-0.27.0/sqlspec/adapters/duckdb/adk/__init__.py +14 -0
  76. sqlspec-0.27.0/sqlspec/adapters/duckdb/adk/store.py +553 -0
  77. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/config.py +80 -20
  78. sqlspec-0.27.0/sqlspec/adapters/duckdb/data_dictionary.py +163 -0
  79. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/driver.py +167 -45
  80. sqlspec-0.27.0/sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
  81. sqlspec-0.27.0/sqlspec/adapters/duckdb/litestar/store.py +332 -0
  82. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/pool.py +4 -4
  83. sqlspec-0.27.0/sqlspec/adapters/duckdb/type_converter.py +133 -0
  84. sqlspec-0.27.0/sqlspec/adapters/oracledb/_numpy_handlers.py +133 -0
  85. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/_types.py +20 -2
  86. sqlspec-0.27.0/sqlspec/adapters/oracledb/adk/__init__.py +5 -0
  87. sqlspec-0.27.0/sqlspec/adapters/oracledb/adk/store.py +1745 -0
  88. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/config.py +122 -32
  89. sqlspec-0.27.0/sqlspec/adapters/oracledb/data_dictionary.py +509 -0
  90. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/driver.py +353 -91
  91. sqlspec-0.27.0/sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
  92. sqlspec-0.27.0/sqlspec/adapters/oracledb/litestar/store.py +767 -0
  93. sqlspec-0.27.0/sqlspec/adapters/oracledb/migrations.py +532 -0
  94. sqlspec-0.27.0/sqlspec/adapters/oracledb/type_converter.py +207 -0
  95. sqlspec-0.27.0/sqlspec/adapters/psqlpy/_type_handlers.py +44 -0
  96. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/_types.py +2 -1
  97. sqlspec-0.27.0/sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
  98. sqlspec-0.27.0/sqlspec/adapters/psqlpy/adk/store.py +482 -0
  99. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/config.py +46 -17
  100. sqlspec-0.27.0/sqlspec/adapters/psqlpy/data_dictionary.py +172 -0
  101. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/driver.py +123 -209
  102. sqlspec-0.27.0/sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
  103. sqlspec-0.27.0/sqlspec/adapters/psqlpy/litestar/store.py +272 -0
  104. sqlspec-0.27.0/sqlspec/adapters/psqlpy/type_converter.py +102 -0
  105. sqlspec-0.27.0/sqlspec/adapters/psycopg/_type_handlers.py +80 -0
  106. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/psycopg/_types.py +2 -1
  107. sqlspec-0.27.0/sqlspec/adapters/psycopg/adk/__init__.py +5 -0
  108. sqlspec-0.27.0/sqlspec/adapters/psycopg/adk/store.py +944 -0
  109. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/psycopg/config.py +69 -35
  110. sqlspec-0.27.0/sqlspec/adapters/psycopg/data_dictionary.py +331 -0
  111. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/psycopg/driver.py +238 -81
  112. sqlspec-0.27.0/sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
  113. sqlspec-0.27.0/sqlspec/adapters/psycopg/litestar/store.py +554 -0
  114. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/__init__.py +2 -1
  115. sqlspec-0.27.0/sqlspec/adapters/sqlite/_type_handlers.py +86 -0
  116. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/_types.py +1 -1
  117. sqlspec-0.27.0/sqlspec/adapters/sqlite/adk/__init__.py +5 -0
  118. sqlspec-0.27.0/sqlspec/adapters/sqlite/adk/store.py +572 -0
  119. sqlspec-0.27.0/sqlspec/adapters/sqlite/config.py +203 -0
  120. sqlspec-0.27.0/sqlspec/adapters/sqlite/data_dictionary.py +149 -0
  121. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/driver.py +137 -54
  122. sqlspec-0.27.0/sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
  123. sqlspec-0.27.0/sqlspec/adapters/sqlite/litestar/store.py +318 -0
  124. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/pool.py +18 -9
  125. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/base.py +45 -26
  126. sqlspec-0.27.0/sqlspec/builder/__init__.py +137 -0
  127. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/builder/_base.py +162 -89
  128. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/builder/_column.py +62 -29
  129. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/builder/_ddl.py +180 -121
  130. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/builder/_delete.py +5 -4
  131. sqlspec-0.27.0/sqlspec/builder/_dml.py +388 -0
  132. sqlspec-0.25.0/sqlspec/_sql.py → sqlspec-0.27.0/sqlspec/builder/_factory.py +53 -94
  133. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/builder/_insert.py +32 -131
  134. sqlspec-0.27.0/sqlspec/builder/_join.py +375 -0
  135. sqlspec-0.27.0/sqlspec/builder/_merge.py +506 -0
  136. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/builder/_parsing_utils.py +111 -17
  137. sqlspec-0.27.0/sqlspec/builder/_select.py +1604 -0
  138. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/builder/_update.py +11 -42
  139. sqlspec-0.27.0/sqlspec/cli.py +608 -0
  140. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/config.py +252 -67
  141. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/core/__init__.py +5 -4
  142. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/core/cache.py +17 -17
  143. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/core/compiler.py +62 -9
  144. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/core/filters.py +37 -37
  145. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/core/hashing.py +9 -9
  146. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/core/parameters.py +83 -48
  147. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/core/result.py +102 -46
  148. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/core/splitter.py +16 -17
  149. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/core/statement.py +36 -30
  150. sqlspec-0.27.0/sqlspec/core/type_conversion.py +235 -0
  151. sqlspec-0.27.0/sqlspec/driver/__init__.py +20 -0
  152. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/driver/_async.py +188 -151
  153. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/driver/_common.py +285 -80
  154. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/driver/_sync.py +188 -152
  155. sqlspec-0.27.0/sqlspec/driver/mixins/_result_tools.py +61 -0
  156. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/driver/mixins/_sql_translator.py +4 -4
  157. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/exceptions.py +75 -7
  158. sqlspec-0.27.0/sqlspec/extensions/adk/__init__.py +53 -0
  159. sqlspec-0.27.0/sqlspec/extensions/adk/_types.py +51 -0
  160. sqlspec-0.27.0/sqlspec/extensions/adk/converters.py +172 -0
  161. sqlspec-0.27.0/sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +144 -0
  162. sqlspec-0.27.0/sqlspec/extensions/adk/service.py +181 -0
  163. sqlspec-0.27.0/sqlspec/extensions/adk/store.py +536 -0
  164. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/extensions/aiosql/adapter.py +73 -53
  165. sqlspec-0.27.0/sqlspec/extensions/litestar/__init__.py +23 -0
  166. sqlspec-0.27.0/sqlspec/extensions/litestar/cli.py +92 -0
  167. sqlspec-0.27.0/sqlspec/extensions/litestar/config.py +69 -0
  168. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/extensions/litestar/handlers.py +46 -17
  169. sqlspec-0.27.0/sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
  170. sqlspec-0.27.0/sqlspec/extensions/litestar/migrations/__init__.py +3 -0
  171. sqlspec-0.27.0/sqlspec/extensions/litestar/plugin.py +487 -0
  172. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/extensions/litestar/providers.py +25 -25
  173. sqlspec-0.27.0/sqlspec/extensions/litestar/store.py +265 -0
  174. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/loader.py +30 -49
  175. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/migrations/__init__.py +4 -3
  176. sqlspec-0.27.0/sqlspec/migrations/base.py +666 -0
  177. sqlspec-0.27.0/sqlspec/migrations/commands.py +929 -0
  178. sqlspec-0.27.0/sqlspec/migrations/context.py +142 -0
  179. sqlspec-0.27.0/sqlspec/migrations/fix.py +199 -0
  180. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/migrations/loaders.py +68 -23
  181. sqlspec-0.27.0/sqlspec/migrations/runner.py +734 -0
  182. sqlspec-0.27.0/sqlspec/migrations/tracker.py +403 -0
  183. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/migrations/utils.py +51 -3
  184. sqlspec-0.27.0/sqlspec/migrations/validation.py +177 -0
  185. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/protocols.py +66 -36
  186. sqlspec-0.27.0/sqlspec/py.typed +0 -0
  187. sqlspec-0.27.0/sqlspec/storage/_utils.py +98 -0
  188. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/storage/backends/fsspec.py +134 -106
  189. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/storage/backends/local.py +78 -51
  190. sqlspec-0.27.0/sqlspec/storage/backends/obstore.py +590 -0
  191. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/storage/registry.py +75 -39
  192. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/typing.py +16 -84
  193. sqlspec-0.27.0/sqlspec/utils/config_resolver.py +153 -0
  194. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/correlation.py +4 -5
  195. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/data_transformation.py +3 -2
  196. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/deprecation.py +9 -8
  197. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/fixtures.py +4 -4
  198. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/logging.py +46 -6
  199. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/module_loader.py +2 -2
  200. sqlspec-0.27.0/sqlspec/utils/schema.py +288 -0
  201. sqlspec-0.27.0/sqlspec/utils/serializers.py +58 -0
  202. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/sync_tools.py +21 -17
  203. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/text.py +1 -2
  204. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/type_guards.py +111 -20
  205. sqlspec-0.27.0/sqlspec/utils/version.py +433 -0
  206. sqlspec-0.27.0/tests/__init__.py +0 -0
  207. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/conftest.py +5 -0
  208. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/example_usage.py +3 -5
  209. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/sql_utils.py +7 -7
  210. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/conftest.py +0 -10
  211. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/conftest.py +22 -3
  212. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_backends.py +14 -4
  213. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_driver.py +114 -12
  214. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_data_dictionary.py +140 -0
  215. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_exceptions.py +118 -0
  216. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/__init__.py +1 -0
  217. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/__init__.py +1 -0
  218. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_dialect_integration.py +229 -0
  219. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_dialect_support.py +198 -0
  220. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_edge_cases.py +269 -0
  221. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_event_operations.py +320 -0
  222. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_owner_id_column.py +145 -0
  223. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_session_operations.py +184 -0
  224. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_litestar/__init__.py +1 -0
  225. sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_litestar/test_store.py +262 -0
  226. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_migrations.py +16 -8
  227. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/conftest.py +4 -8
  228. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_connection.py +19 -28
  229. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_driver.py +91 -0
  230. sqlspec-0.27.0/tests/integration/test_adapters/test_aiosqlite/test_exceptions.py +124 -0
  231. sqlspec-0.27.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/__init__.py +1 -0
  232. sqlspec-0.27.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/__init__.py +1 -0
  233. sqlspec-0.27.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/test_store.py +234 -0
  234. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_migrations.py +9 -2
  235. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_asyncmy_features.py +0 -7
  236. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_config.py +82 -2
  237. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_driver.py +130 -14
  238. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_exceptions.py +137 -0
  239. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/__init__.py +1 -0
  240. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/__init__.py +1 -0
  241. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/conftest.py +104 -0
  242. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/test_store.py +332 -0
  243. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_litestar/__init__.py +1 -0
  244. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_litestar/test_store.py +252 -0
  245. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_migrations.py +3 -7
  246. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_parameter_styles.py +4 -23
  247. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/conftest.py +22 -0
  248. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_data_dictionary.py +105 -0
  249. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_driver.py +203 -0
  250. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_exceptions.py +130 -0
  251. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_execute_many.py +0 -10
  252. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/__init__.py +1 -0
  253. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/__init__.py +1 -0
  254. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/conftest.py +68 -0
  255. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/test_owner_id_column.py +411 -0
  256. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/test_session_operations.py +134 -0
  257. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_litestar/__init__.py +1 -0
  258. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_litestar/test_store.py +246 -0
  259. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_migrations.py +6 -6
  260. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_parameter_styles.py +0 -17
  261. sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_schema_migration.py +321 -0
  262. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/conftest.py +3 -5
  263. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/test_driver.py +52 -0
  264. sqlspec-0.27.0/tests/integration/test_adapters/test_bigquery/test_exceptions.py +96 -0
  265. sqlspec-0.27.0/tests/integration/test_adapters/test_bigquery/test_type_handler_config.py +0 -0
  266. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_connection.py +14 -11
  267. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_driver.py +107 -0
  268. sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_driver_features.py +151 -0
  269. sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_exceptions.py +128 -0
  270. sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/__init__.py +1 -0
  271. sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/test_adk/__init__.py +0 -0
  272. sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/test_adk/test_store.py +692 -0
  273. sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/test_litestar/__init__.py +1 -0
  274. sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/test_litestar/test_store.py +272 -0
  275. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_migrations.py +12 -8
  276. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/utils.py +1 -2
  277. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_driver_async.py +206 -9
  278. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_driver_sync.py +215 -23
  279. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_exceptions.py +142 -0
  280. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_execute_many.py +27 -29
  281. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/__init__.py +0 -0
  282. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/__init__.py +1 -0
  283. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/test_inmemory.py +407 -0
  284. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/test_oracle_specific.py +530 -0
  285. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/__init__.py +0 -0
  286. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_store_async.py +248 -0
  287. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_store_sync.py +248 -0
  288. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_migrations.py +165 -25
  289. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_msgspec_clob.py +525 -0
  290. sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_numpy_vectors.py +376 -0
  291. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_oracle_features.py +29 -26
  292. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_parameter_styles.py +123 -105
  293. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_connection.py +0 -7
  294. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_driver.py +107 -1
  295. sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_exceptions.py +131 -0
  296. sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/__init__.py +1 -0
  297. sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_adk/__init__.py +1 -0
  298. sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_adk/test_owner_id_column.py +142 -0
  299. sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_litestar/__init__.py +1 -0
  300. sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_litestar/test_store.py +246 -0
  301. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_migrations.py +6 -6
  302. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_async_copy.py +0 -4
  303. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_driver.py +107 -0
  304. sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_exceptions.py +161 -0
  305. sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/__init__.py +0 -0
  306. sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_adk/__init__.py +0 -0
  307. sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_adk/test_owner_id_column.py +180 -0
  308. sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/__init__.py +0 -0
  309. sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/test_store_async.py +249 -0
  310. sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/test_store_sync.py +267 -0
  311. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_migrations.py +19 -20
  312. sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_data_dictionary.py +92 -0
  313. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_driver.py +67 -0
  314. sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_driver_features.py +111 -0
  315. sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_exceptions.py +120 -0
  316. sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/__init__.py +1 -0
  317. sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_adk/__init__.py +1 -0
  318. sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_adk/test_owner_id_column.py +386 -0
  319. sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_litestar/__init__.py +1 -0
  320. sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_litestar/test_store.py +253 -0
  321. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_migrations.py +26 -13
  322. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_pooling.py +6 -3
  323. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_query_mixin.py +2 -2
  324. sqlspec-0.27.0/tests/integration/test_async_migrations.py +278 -0
  325. sqlspec-0.27.0/tests/integration/test_dishka/__init__.py +1 -0
  326. sqlspec-0.27.0/tests/integration/test_dishka/conftest.py +113 -0
  327. sqlspec-0.27.0/tests/integration/test_dishka/test_dishka_integration.py +536 -0
  328. sqlspec-0.27.0/tests/integration/test_migrations/test_auto_sync.py +333 -0
  329. sqlspec-0.27.0/tests/integration/test_migrations/test_fix_checksum_stability.py +203 -0
  330. sqlspec-0.27.0/tests/integration/test_migrations/test_fix_file_operations.py +376 -0
  331. sqlspec-0.27.0/tests/integration/test_migrations/test_fix_idempotency_workflow.py +353 -0
  332. sqlspec-0.27.0/tests/integration/test_migrations/test_schema_migration.py +311 -0
  333. sqlspec-0.27.0/tests/integration/test_migrations/test_upgrade_downgrade_versions.py +409 -0
  334. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_storage/test_storage_integration.py +16 -8
  335. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/conftest.py +82 -18
  336. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_adapters/conftest.py +72 -9
  337. sqlspec-0.27.0/tests/unit/test_adapters/test_adbc/test_adbc_serialization.py +120 -0
  338. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_adapters/test_async_adapters.py +12 -51
  339. sqlspec-0.27.0/tests/unit/test_adapters/test_asyncmy/__init__.py +0 -0
  340. sqlspec-0.27.0/tests/unit/test_adapters/test_asyncpg/__init__.py +1 -0
  341. sqlspec-0.27.0/tests/unit/test_adapters/test_asyncpg/test_config.py +0 -0
  342. sqlspec-0.27.0/tests/unit/test_adapters/test_asyncpg/test_type_handlers.py +66 -0
  343. sqlspec-0.27.0/tests/unit/test_adapters/test_bigquery/__init__.py +1 -0
  344. sqlspec-0.27.0/tests/unit/test_adapters/test_duckdb/__init__.py +1 -0
  345. sqlspec-0.27.0/tests/unit/test_adapters/test_duckdb/test_type_converter.py +82 -0
  346. sqlspec-0.27.0/tests/unit/test_adapters/test_extension_config.py +194 -0
  347. sqlspec-0.27.0/tests/unit/test_adapters/test_oracledb/test_numpy_handlers.py +228 -0
  348. sqlspec-0.27.0/tests/unit/test_adapters/test_oracledb/test_type_converter_vectors.py +192 -0
  349. sqlspec-0.27.0/tests/unit/test_adapters/test_psycopg/test_type_handlers.py +83 -0
  350. sqlspec-0.27.0/tests/unit/test_adapters/test_sqlite/__init__.py +0 -0
  351. sqlspec-0.27.0/tests/unit/test_adapters/test_sqlite/test_type_handlers.py +44 -0
  352. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_adapters/test_sync_adapters.py +12 -12
  353. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_builder/test_insert_builder.py +1 -2
  354. sqlspec-0.27.0/tests/unit/test_builder/test_select_locking.py +235 -0
  355. sqlspec-0.27.0/tests/unit/test_cli/__init__.py +0 -0
  356. sqlspec-0.27.0/tests/unit/test_cli/test_config_loading.py +162 -0
  357. sqlspec-0.27.0/tests/unit/test_cli/test_migration_commands.py +778 -0
  358. sqlspec-0.27.0/tests/unit/test_cli/test_shell_completion.py +72 -0
  359. sqlspec-0.27.0/tests/unit/test_config_resolver.py +197 -0
  360. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_core/test_compiler.py +1 -0
  361. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_core/test_parameters.py +3 -3
  362. sqlspec-0.27.0/tests/unit/test_core/test_result.py +298 -0
  363. sqlspec-0.27.0/tests/unit/test_driver/__init__.py +0 -0
  364. sqlspec-0.27.0/tests/unit/test_driver/test_data_dictionary.py +328 -0
  365. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_driver/test_result_tools.py +65 -5
  366. sqlspec-0.27.0/tests/unit/test_exceptions.py +44 -0
  367. sqlspec-0.27.0/tests/unit/test_extensions/test_litestar/test_handlers.py +277 -0
  368. sqlspec-0.27.0/tests/unit/test_migration_context.py +172 -0
  369. sqlspec-0.27.0/tests/unit/test_migrations/test_checksum_canonicalization.py +345 -0
  370. sqlspec-0.27.0/tests/unit/test_migrations/test_extension_discovery.py +108 -0
  371. sqlspec-0.27.0/tests/unit/test_migrations/test_fix_regex_precision.py +368 -0
  372. sqlspec-0.27.0/tests/unit/test_migrations/test_migration_commands.py +387 -0
  373. sqlspec-0.27.0/tests/unit/test_migrations/test_migration_context.py +36 -0
  374. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_migrations/test_migration_execution.py +8 -2
  375. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_migrations/test_migration_runner.py +276 -0
  376. sqlspec-0.27.0/tests/unit/test_migrations/test_tracker_idempotency.py +317 -0
  377. sqlspec-0.27.0/tests/unit/test_migrations/test_utils.py +274 -0
  378. sqlspec-0.27.0/tests/unit/test_migrations/test_validation.py +206 -0
  379. sqlspec-0.27.0/tests/unit/test_migrations/test_version.py +225 -0
  380. sqlspec-0.27.0/tests/unit/test_migrations/test_version_conversion.py +303 -0
  381. sqlspec-0.27.0/tests/unit/test_migrations/test_version_parsing_edge_cases.py +236 -0
  382. sqlspec-0.27.0/tests/unit/test_serialization.py +615 -0
  383. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_sql_factory.py +61 -10
  384. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_storage/test_storage_registry.py +61 -21
  385. sqlspec-0.27.0/tests/unit/test_storage/test_storage_utils.py +74 -0
  386. sqlspec-0.27.0/tests/unit/test_type_conversion.py +305 -0
  387. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_correlation.py +0 -1
  388. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_fixtures.py +0 -9
  389. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_sync_tools.py +0 -14
  390. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_type_guards.py +40 -13
  391. sqlspec-0.27.0/tools/__init__.py +0 -0
  392. sqlspec-0.27.0/tools/build_docs.py +35 -0
  393. sqlspec-0.27.0/tools/fix_documentation.py +227 -0
  394. {sqlspec-0.25.0 → sqlspec-0.27.0}/tools/sphinx_ext/changelog.py +2 -2
  395. {sqlspec-0.25.0 → sqlspec-0.27.0}/tools/sphinx_ext/missing_references.py +12 -63
  396. sqlspec-0.27.0/uv.lock +6843 -0
  397. sqlspec-0.25.0/NOTICE +0 -29
  398. sqlspec-0.25.0/sqlspec/_serialization.py +0 -77
  399. sqlspec-0.25.0/sqlspec/adapters/asyncmy/driver.py +0 -310
  400. sqlspec-0.25.0/sqlspec/adapters/asyncpg/_types.py +0 -17
  401. sqlspec-0.25.0/sqlspec/adapters/bigquery/driver.py +0 -534
  402. sqlspec-0.25.0/sqlspec/adapters/oracledb/migrations.py +0 -257
  403. sqlspec-0.25.0/sqlspec/adapters/sqlite/config.py +0 -131
  404. sqlspec-0.25.0/sqlspec/builder/__init__.py +0 -68
  405. sqlspec-0.25.0/sqlspec/builder/_merge.py +0 -71
  406. sqlspec-0.25.0/sqlspec/builder/_select.py +0 -171
  407. sqlspec-0.25.0/sqlspec/builder/mixins/__init__.py +0 -55
  408. sqlspec-0.25.0/sqlspec/builder/mixins/_cte_and_set_ops.py +0 -254
  409. sqlspec-0.25.0/sqlspec/builder/mixins/_delete_operations.py +0 -50
  410. sqlspec-0.25.0/sqlspec/builder/mixins/_insert_operations.py +0 -282
  411. sqlspec-0.25.0/sqlspec/builder/mixins/_join_operations.py +0 -389
  412. sqlspec-0.25.0/sqlspec/builder/mixins/_merge_operations.py +0 -592
  413. sqlspec-0.25.0/sqlspec/builder/mixins/_order_limit_operations.py +0 -152
  414. sqlspec-0.25.0/sqlspec/builder/mixins/_pivot_operations.py +0 -157
  415. sqlspec-0.25.0/sqlspec/builder/mixins/_select_operations.py +0 -936
  416. sqlspec-0.25.0/sqlspec/builder/mixins/_update_operations.py +0 -218
  417. sqlspec-0.25.0/sqlspec/builder/mixins/_where_clause.py +0 -1304
  418. sqlspec-0.25.0/sqlspec/cli.py +0 -495
  419. sqlspec-0.25.0/sqlspec/driver/__init__.py +0 -19
  420. sqlspec-0.25.0/sqlspec/driver/mixins/_result_tools.py +0 -277
  421. sqlspec-0.25.0/sqlspec/extensions/litestar/__init__.py +0 -6
  422. sqlspec-0.25.0/sqlspec/extensions/litestar/cli.py +0 -48
  423. sqlspec-0.25.0/sqlspec/extensions/litestar/config.py +0 -276
  424. sqlspec-0.25.0/sqlspec/extensions/litestar/plugin.py +0 -386
  425. sqlspec-0.25.0/sqlspec/migrations/base.py +0 -403
  426. sqlspec-0.25.0/sqlspec/migrations/commands.py +0 -462
  427. sqlspec-0.25.0/sqlspec/migrations/runner.py +0 -298
  428. sqlspec-0.25.0/sqlspec/migrations/tracker.py +0 -187
  429. sqlspec-0.25.0/sqlspec/storage/backends/obstore.py +0 -474
  430. sqlspec-0.25.0/sqlspec/utils/serializers.py +0 -10
  431. sqlspec-0.25.0/tests/unit/test_core/test_result.py +0 -140
  432. sqlspec-0.25.0/tests/unit/test_extensions/test_litestar/test_config.py +0 -482
  433. sqlspec-0.25.0/tests/unit/test_migrations/test_migration_commands.py +0 -317
  434. sqlspec-0.25.0/tools/build_docs.py +0 -93
  435. sqlspec-0.25.0/uv.lock +0 -6211
  436. {sqlspec-0.25.0 → sqlspec-0.27.0}/CONTRIBUTING.rst +0 -0
  437. {sqlspec-0.25.0 → sqlspec-0.27.0}/LICENSE +0 -0
  438. /sqlspec-0.25.0/sqlspec/adapters/__init__.py → /sqlspec-0.27.0/specs/active/.gitkeep +0 -0
  439. /sqlspec-0.25.0/sqlspec/extensions/__init__.py → /sqlspec-0.27.0/specs/archive/.gitkeep +0 -0
  440. /sqlspec-0.25.0/sqlspec/py.typed → /sqlspec-0.27.0/specs/template-spec/research/.gitkeep +0 -0
  441. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/__main__.py +0 -0
  442. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/__metadata__.py +0 -0
  443. {sqlspec-0.25.0/tests → sqlspec-0.27.0/sqlspec/adapters}/__init__.py +0 -0
  444. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/__init__.py +0 -0
  445. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/__init__.py +0 -0
  446. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/bigquery/__init__.py +0 -0
  447. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/__init__.py +0 -0
  448. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/__init__.py +0 -0
  449. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/__init__.py +0 -0
  450. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/adapters/psycopg/__init__.py +0 -0
  451. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/builder/_expression_wrappers.py +0 -0
  452. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/driver/mixins/__init__.py +0 -0
  453. {sqlspec-0.25.0/tests/unit/test_driver → sqlspec-0.27.0/sqlspec/extensions}/__init__.py +0 -0
  454. {sqlspec-0.25.0/tools → sqlspec-0.27.0/sqlspec/extensions/adk/migrations}/__init__.py +0 -0
  455. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/extensions/aiosql/__init__.py +0 -0
  456. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/extensions/litestar/_utils.py +0 -0
  457. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/storage/__init__.py +0 -0
  458. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/storage/backends/__init__.py +0 -0
  459. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/storage/backends/base.py +0 -0
  460. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/__init__.py +0 -0
  461. {sqlspec-0.25.0 → sqlspec-0.27.0}/sqlspec/utils/singleton.py +0 -0
  462. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/__init__.py +0 -0
  463. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/asset_maintenance.sql +0 -0
  464. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/ddls-mysql-collection.sql +0 -0
  465. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/ddls-postgres-collection.sql +0 -0
  466. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/init.sql +0 -0
  467. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-config.sql +0 -0
  468. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-data_types.sql +0 -0
  469. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-database_details.sql +0 -0
  470. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-engines.sql +0 -0
  471. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-hostname.sql +0 -0
  472. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-plugins.sql +0 -0
  473. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-process_list.sql +0 -0
  474. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-resource-groups.sql +0 -0
  475. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-schema_objects.sql +0 -0
  476. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-table_details.sql +0 -0
  477. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-users.sql +0 -0
  478. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/mysql/init.sql +0 -0
  479. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/oracle.ddl.sql +0 -0
  480. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-applications.sql +0 -0
  481. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-aws_extension_dependency.sql +0 -0
  482. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-aws_oracle_exists.sql +0 -0
  483. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-bg_writer_stats.sql +0 -0
  484. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-calculated_metrics.sql +0 -0
  485. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-data_types.sql +0 -0
  486. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-database_details.sql +0 -0
  487. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-extensions.sql +0 -0
  488. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-index_details.sql +0 -0
  489. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-pglogical-details.sql +0 -0
  490. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-privileges.sql +0 -0
  491. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-replication_slots.sql +0 -0
  492. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-replication_stats.sql +0 -0
  493. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-schema_details.sql +0 -0
  494. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-schema_objects.sql +0 -0
  495. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-settings.sql +0 -0
  496. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-source_details.sql +0 -0
  497. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-table_details.sql +0 -0
  498. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/extended-collection-all-databases.sql +0 -0
  499. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/postgres/init.sql +0 -0
  500. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/fixtures/readiness-check.sql +0 -0
  501. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/__init__.py +0 -0
  502. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/__init__.py +0 -0
  503. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/__init__.py +0 -0
  504. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_arrow_features.py +0 -0
  505. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_connection.py +0 -0
  506. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_edge_cases.py +0 -0
  507. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_results.py +0 -0
  508. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_parameter_styles.py +0 -0
  509. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/__init__.py +0 -0
  510. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_parameter_styles.py +0 -0
  511. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_pooling.py +0 -0
  512. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/__init__.py +0 -0
  513. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/conftest.py +0 -0
  514. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/__init__.py +0 -0
  515. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_connection.py +0 -0
  516. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/__init__.py +0 -0
  517. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/test_bigquery_features.py +0 -0
  518. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/test_config.py +0 -0
  519. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/test_connection.py +0 -0
  520. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/__init__.py +0 -0
  521. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_execute_many.py +0 -0
  522. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_mixed_parameter_styles.py +0 -0
  523. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_parameter_styles.py +0 -0
  524. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_pooling.py +0 -0
  525. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/__init__.py +0 -0
  526. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/conftest.py +0 -0
  527. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_connection.py +0 -0
  528. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/__init__.py +0 -0
  529. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/conftest.py +0 -0
  530. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_parameter_styles.py +0 -0
  531. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_psqlpy_features.py +0 -0
  532. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/__init__.py +0 -0
  533. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/conftest.py +0 -0
  534. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_connection.py +0 -0
  535. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_execute_many.py +0 -0
  536. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_parameter_styles.py +0 -0
  537. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/__init__.py +0 -0
  538. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/conftest.py +0 -0
  539. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_parameter_styles.py +0 -0
  540. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_loader/__init__.py +0 -0
  541. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_loader/test_file_system_loading.py +0 -0
  542. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_migrations/__init__.py +0 -0
  543. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/integration/test_storage/__init__.py +0 -0
  544. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_adapters/__init__.py +0 -0
  545. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_adapters/test_adapter_implementations.py +0 -0
  546. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_base/__init__.py +0 -0
  547. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_base/test_sql_integration.py +0 -0
  548. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_base/test_sqlspec_class.py +0 -0
  549. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_builder/__init__.py +0 -0
  550. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_builder/test_lateral_joins.py +0 -0
  551. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_builder/test_parameter_naming.py +0 -0
  552. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_builder_parameter_naming.py +0 -0
  553. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_core/test_cache.py +0 -0
  554. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_core/test_filters.py +0 -0
  555. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_core/test_hashing.py +0 -0
  556. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_core/test_statement.py +0 -0
  557. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_cte_parameter_collisions.py +0 -0
  558. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_extensions/__init__.py +0 -0
  559. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_extensions/test_litestar/__init__.py +0 -0
  560. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_loader/__init__.py +0 -0
  561. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_loader/test_cache_integration.py +0 -0
  562. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_loader/test_fixtures_directory_loading.py +0 -0
  563. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_loader/test_loading_patterns.py +0 -0
  564. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_loader/test_sql_file_loader.py +0 -0
  565. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_migrations/__init__.py +0 -0
  566. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_migrations/test_migration.py +0 -0
  567. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_parsing_utils.py +0 -0
  568. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_storage/__init__.py +0 -0
  569. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_storage/test_fsspec_backend.py +0 -0
  570. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_storage/test_local_store.py +0 -0
  571. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_storage/test_obstore_backend.py +0 -0
  572. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/__init__.py +0 -0
  573. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_data_transformation.py +0 -0
  574. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_deprecation.py +0 -0
  575. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_logging.py +0 -0
  576. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_module_loader.py +0 -0
  577. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_serializers.py +0 -0
  578. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_singleton.py +0 -0
  579. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_text.py +0 -0
  580. {sqlspec-0.25.0 → sqlspec-0.27.0}/tests/unit/test_where_or_operations.py +0 -0
  581. {sqlspec-0.25.0 → sqlspec-0.27.0}/tools/local-infra.sh +0 -0
  582. {sqlspec-0.25.0 → sqlspec-0.27.0}/tools/pypi_readme.py +0 -0
  583. {sqlspec-0.25.0 → sqlspec-0.27.0}/tools/sphinx_ext/__init__.py +0 -0
@@ -0,0 +1,554 @@
1
+ # Agent Coordination Guide
2
+
3
+ Comprehensive guide for the SQLSpec multi-agent workflow system. All agents (Claude Code, Gemini, Codex, etc.) should follow this workflow.
4
+
5
+ ## Quick Reference
6
+
7
+ - **Active work**: `specs/active/{requirement}/`
8
+ - **Archived work**: `specs/archive/{requirement}/`
9
+ - **Templates**: `specs/template-spec/`
10
+ - **Main standards**: `AGENTS.md` (SQLSpec-specific patterns)
11
+
12
+ ## Agent Responsibilities
13
+
14
+ | Agent | Primary Role | Key Tools | Auto-Invoked By |
15
+ |-------|--------------|-----------|-----------------|
16
+ | **Planner** | Research & planning | zen.planner, zen.consensus, Context7, WebSearch | User (`/plan`) |
17
+ | **Expert** | Implementation & orchestration | zen.debug, zen.thinkdeep, zen.analyze, Context7 | User (`/implement`) |
18
+ | **Testing** | Comprehensive test creation | pytest, Bash | Expert (automatic) |
19
+ | **Docs & Vision** | Documentation, QA, knowledge capture, cleanup | Sphinx, Bash | Expert (automatic) |
20
+
21
+ ## Complete Workflow
22
+
23
+ ```
24
+ User runs: /plan {feature-description}
25
+
26
+ ┌─────────────────────────────────────────────────────────────┐
27
+ │ PLANNER AGENT │
28
+ │ • Research (guides, Context7, WebSearch) │
29
+ │ • Use zen.planner for structured planning │
30
+ │ • Get zen.consensus on complex decisions │
31
+ │ • Create workspace: specs/active/{requirement}/ │
32
+ │ • Write: prd.md, tasks.md, research/plan.md, recovery.md │
33
+ └─────────────────────────────────────────────────────────────┘
34
+
35
+ User runs: /implement
36
+
37
+ ┌─────────────────────────────────────────────────────────────┐
38
+ │ EXPERT AGENT │
39
+ │ 1. Read plan (prd.md, tasks.md, research/plan.md) │
40
+ │ 2. Research (guides, Context7) │
41
+ │ 3. Implement following AGENTS.md standards │
42
+ │ 4. Self-test & verify │
43
+ │ 5. ──► Auto-Invoke Testing Agent (subagent) │
44
+ │ ├─► Create unit tests │
45
+ │ ├─► Create integration tests │
46
+ │ ├─► Test edge cases │
47
+ │ └─► Verify coverage & all tests pass │
48
+ │ 6. ──► Auto-Invoke Docs & Vision Agent (subagent) │
49
+ │ ├─► Phase 1: Update documentation │
50
+ │ ├─► Phase 2: Quality gate validation │
51
+ │ ├─► Phase 3: Knowledge capture (AGENTS.md+guides) │
52
+ │ ├─► Phase 4: Re-validate after updates │
53
+ │ ├─► Phase 5: Clean tmp/ and archive │
54
+ │ └─► Generate completion report │
55
+ │ 7. Return complete summary │
56
+ └─────────────────────────────────────────────────────────────┘
57
+ ```
58
+
59
+ ## Agent-Specific Guidance
60
+
61
+ ### For Planner Agent
62
+
63
+ **Responsibilities:**
64
+
65
+ - Research-grounded planning
66
+ - Structured planning with zen.planner
67
+ - Multi-model consensus for complex decisions
68
+ - Workspace creation in `specs/active/`
69
+
70
+ **Workflow:**
71
+
72
+ ```python
73
+ # 1. Research first
74
+ Read("docs/guides/...")
75
+ mcp__context7__get-library-docs(...)
76
+ WebSearch(query="...")
77
+
78
+ # 2. Use zen.planner for structured planning
79
+ mcp__zen__planner(
80
+ step="Plan vector search implementation",
81
+ step_number=1,
82
+ total_steps=6,
83
+ next_step_required=True
84
+ )
85
+
86
+ # 3. Get consensus on complex decisions
87
+ mcp__zen__consensus(
88
+ step="Evaluate: Protocol vs ABC for driver base",
89
+ models=[
90
+ {"model": "gemini-2.5-pro", "stance": "neutral"},
91
+ {"model": "openai/gpt-5", "stance": "neutral"}
92
+ ],
93
+ relevant_files=["sqlspec/protocols.py"],
94
+ next_step_required=False
95
+ )
96
+
97
+ # 4. Create workspace
98
+ Write("specs/active/{requirement}/prd.md", ...)
99
+ Write("specs/active/{requirement}/tasks.md", ...)
100
+ Write("specs/active/{requirement}/research/plan.md", ...)
101
+ Write("specs/active/{requirement}/recovery.md", ...)
102
+ ```
103
+
104
+ **Output:** Complete workspace in `specs/active/{requirement}/`
105
+
106
+ ### For Expert Agent
107
+
108
+ **Responsibilities:**
109
+
110
+ - Implementation following AGENTS.md standards
111
+ - Auto-invoke Testing agent when implementation complete
112
+ - Auto-invoke Docs & Vision agent after tests pass
113
+ - Orchestrate entire development lifecycle
114
+
115
+ **Workflow:**
116
+
117
+ ```python
118
+ # 1. Read the plan
119
+ Read("specs/active/{requirement}/prd.md")
120
+ Read("specs/active/{requirement}/tasks.md")
121
+ Read("specs/active/{requirement}/research/plan.md")
122
+
123
+ # 2. Research implementation details
124
+ Read(f"docs/guides/adapters/{adapter}.md")
125
+ Read("docs/guides/performance/sqlglot-best-practices.md")
126
+ Read("AGENTS.md") # Code quality standards
127
+ mcp__context7__get-library-docs(...) # Library-specific docs
128
+
129
+ # 3. Implement with quality standards (see AGENTS.md)
130
+ Edit(file_path="...", old_string="...", new_string="...")
131
+
132
+ # 4. Self-test
133
+ Bash(command="uv run pytest tests/integration/test_adapters/test_asyncpg/ -v")
134
+ Bash(command="make lint")
135
+
136
+ # 5. AUTO-INVOKE Testing Agent (MANDATORY)
137
+ Task(
138
+ subagent_type="testing",
139
+ description="Create comprehensive test suite",
140
+ prompt=f"""
141
+ Create comprehensive tests for specs/active/{requirement}.
142
+
143
+ Requirements:
144
+ 1. Read specs/active/{requirement}/prd.md for acceptance criteria
145
+ 2. Create unit tests for all new functionality
146
+ 3. Create integration tests for affected adapters
147
+ 4. Test edge cases (empty, errors, boundaries)
148
+ 5. Achieve >80% coverage
149
+ 6. Update specs/active/{requirement}/tasks.md
150
+ 7. Update specs/active/{requirement}/recovery.md
151
+
152
+ All tests must pass before returning control.
153
+ """
154
+ )
155
+
156
+ # 6. AUTO-INVOKE Docs & Vision Agent (MANDATORY)
157
+ Task(
158
+ subagent_type="docs-vision",
159
+ description="Documentation, quality gate, knowledge capture, archive",
160
+ prompt=f"""
161
+ Complete 5-phase workflow for specs/active/{requirement}:
162
+
163
+ Phase 1 - Documentation:
164
+ • Update Sphinx documentation
165
+ • Create/update guides in docs/guides/
166
+ • Validate code examples
167
+ • Build docs without errors
168
+
169
+ Phase 2 - Quality Gate:
170
+ • Verify all PRD acceptance criteria met
171
+ • Verify all tests passing
172
+ • Check AGENTS.md standards compliance
173
+ • BLOCK if any criteria not met
174
+
175
+ Phase 3 - Knowledge Capture (MANDATORY):
176
+ • Analyze implementation for new patterns
177
+ • Extract best practices and conventions
178
+ • Update AGENTS.md with new patterns/examples
179
+ • Update relevant guides in docs/guides/
180
+ • Document with working code examples
181
+
182
+ Phase 4 - Re-validation (MANDATORY):
183
+ • Re-run tests after documentation updates
184
+ • Rebuild documentation
185
+ • Check pattern consistency
186
+ • Verify no breaking changes
187
+ • BLOCK if re-validation fails
188
+
189
+ Phase 5 - Cleanup & Archive (MANDATORY):
190
+ • Remove all tmp/ directories
191
+ • Move specs/active/{requirement} to specs/archive/
192
+ • Generate completion report
193
+
194
+ Return comprehensive summary when complete.
195
+ """
196
+ )
197
+
198
+ # 7. Update workspace
199
+ Edit("specs/active/{requirement}/tasks.md", ...)
200
+ Edit("specs/active/{requirement}/recovery.md", ...)
201
+ ```
202
+
203
+ **IMPORTANT:** Expert MUST NOT mark work complete until Docs & Vision agent confirms:
204
+
205
+ - Quality gate passed
206
+ - Knowledge captured in AGENTS.md and guides
207
+ - Spec archived to specs/archive/
208
+
209
+ ### For Testing Agent
210
+
211
+ **Responsibilities:**
212
+
213
+ - Create comprehensive unit tests
214
+ - Create integration tests for all affected adapters
215
+ - Test edge cases and error conditions
216
+ - Achieve required coverage (>80% adapters, >90% core)
217
+
218
+ **Auto-invoked by:** Expert agent
219
+
220
+ **Workflow:**
221
+
222
+ ```python
223
+ # 1. Read implementation context
224
+ Read("specs/active/{requirement}/prd.md")
225
+ Read("specs/active/{requirement}/recovery.md")
226
+ Read("docs/guides/testing/testing.md")
227
+
228
+ # 2. Create unit tests
229
+ Write("tests/unit/test_{module}/test_{feature}.py", ...)
230
+
231
+ # 3. Create integration tests
232
+ Write("tests/integration/test_adapters/test_{adapter}/test_{feature}.py", ...)
233
+
234
+ # 4. Verify all tests pass
235
+ Bash(command="uv run pytest -n 2 --dist=loadgroup")
236
+ Bash(command="uv run pytest --cov")
237
+
238
+ # 5. Update workspace
239
+ Edit("specs/active/{requirement}/tasks.md", ...)
240
+ Edit("specs/active/{requirement}/recovery.md", ...)
241
+ ```
242
+
243
+ **Must verify:** All tests passing before returning control to Expert
244
+
245
+ ### For Docs & Vision Agent
246
+
247
+ **Responsibilities:**
248
+
249
+ - Update documentation (Sphinx, guides)
250
+ - Quality gate validation (BLOCKS if fails)
251
+ - **Knowledge capture** - Update AGENTS.md and guides with new patterns
252
+ - **Re-validation** - Verify consistency after documentation updates
253
+ - Cleanup and archive (MANDATORY)
254
+
255
+ **Auto-invoked by:** Expert agent
256
+
257
+ **5-Phase Workflow:**
258
+
259
+ #### Phase 1: Documentation
260
+
261
+ ```python
262
+ # Update API reference
263
+ Edit("docs/reference/adapters.rst", ...)
264
+
265
+ # Create/update guides
266
+ Write("docs/guides/{category}/{guide}.md", ...)
267
+
268
+ # Build docs
269
+ Bash(command="make docs")
270
+ ```
271
+
272
+ #### Phase 2: Quality Gate (BLOCKS IF FAILS)
273
+
274
+ ```bash
275
+ # Run all checks - MUST PASS
276
+ make lint
277
+ uv run pytest -n 2 --dist=loadgroup
278
+
279
+ # Verify PRD acceptance criteria
280
+ # Check AGENTS.md standards compliance
281
+ # BLOCK if any failures
282
+ ```
283
+
284
+ #### Phase 3: Knowledge Capture (MANDATORY - NEW)
285
+
286
+ ```python
287
+ # 1. Analyze implementation for new patterns
288
+ Read("sqlspec/adapters/{adapter}/{module}.py")
289
+
290
+ # 2. Extract patterns and add to AGENTS.md
291
+ Edit(
292
+ file_path="AGENTS.md",
293
+ old_string="### Compliance Table",
294
+ new_string="""### New Pattern: {Pattern Name}
295
+
296
+ When implementing {pattern}:
297
+
298
+ ```python
299
+ # Example code showing the pattern
300
+ class ExampleClass:
301
+ def example_method(self):
302
+ # Pattern implementation
303
+ pass
304
+ ```
305
+
306
+ **Why this pattern:**
307
+
308
+ - Reason 1
309
+ - Reason 2
310
+
311
+ **Example from {adapter}:**
312
+ See `sqlspec/adapters/{adapter}/{file}.py:{line}`
313
+
314
+ ### Compliance Table"""
315
+
316
+ )
317
+
318
+ # 3. Update relevant guides
319
+
320
+ Edit("docs/guides/{category}/{guide}.md", ...)
321
+
322
+ # 4. Document with working examples
323
+
324
+ ```
325
+
326
+ **What to capture in AGENTS.md:**
327
+ - New design patterns discovered
328
+ - Performance optimizations applied
329
+ - Type annotation patterns
330
+ - Error handling approaches
331
+ - Testing strategies
332
+ - Database-specific patterns
333
+
334
+ **How to update AGENTS.md:**
335
+ - Add to existing sections (don't create new top-level sections)
336
+ - Include working code examples
337
+ - Reference actual files with line numbers
338
+ - Explain WHY not just WHAT
339
+
340
+ #### Phase 4: Re-validation (MANDATORY - NEW)
341
+
342
+ ```bash
343
+ # Re-run tests after doc updates
344
+ uv run pytest -n 2 --dist=loadgroup
345
+
346
+ # Rebuild docs
347
+ make docs
348
+
349
+ # Verify pattern consistency across project
350
+ # Check no breaking changes introduced
351
+
352
+ # BLOCK if re-validation fails
353
+ ```
354
+
355
+ #### Phase 5: Cleanup & Archive (MANDATORY)
356
+
357
+ ```bash
358
+ # Remove tmp files
359
+ find specs/active/{requirement}/tmp -type f -delete
360
+ rmdir specs/active/{requirement}/tmp
361
+
362
+ # Archive requirement
363
+ mv specs/active/{requirement} specs/archive/{requirement}
364
+
365
+ # Generate completion report
366
+ ```
367
+
368
+ ## Workspace Structure
369
+
370
+ ```
371
+ specs/
372
+ ├── active/ # Current work (gitignored)
373
+ │ └── {requirement}/
374
+ │ ├── prd.md # Product requirements
375
+ │ ├── tasks.md # Implementation checklist
376
+ │ ├── recovery.md # Session resume guide
377
+ │ ├── research/ # Research findings
378
+ │ │ └── plan.md
379
+ │ └── tmp/ # Temp files (cleaned by Docs & Vision)
380
+ ├── archive/ # Completed work (gitignored)
381
+ │ └── {old-requirement}/
382
+ └── template-spec/ # Template files (committed)
383
+ ├── prd.md
384
+ ├── tasks.md
385
+ ├── recovery.md
386
+ └── README.md
387
+ ```
388
+
389
+ ## Cross-Agent Patterns
390
+
391
+ ### Session Continuity
392
+
393
+ To resume work after context reset:
394
+
395
+ ```python
396
+ # 1. Find active work
397
+ Glob("specs/active/*/prd.md")
398
+
399
+ # 2. Read recovery.md for each
400
+ Read("specs/active/{requirement}/recovery.md")
401
+
402
+ # 3. Resume from most recent
403
+ Read("specs/active/{requirement}/tasks.md")
404
+ ```
405
+
406
+ ### Quality Standards
407
+
408
+ All agents enforce AGENTS.md standards:
409
+
410
+ ✅ **ALWAYS:**
411
+
412
+ - Stringified type hints: `def foo(config: "SQLConfig"):`
413
+ - Type guards: `if supports_where(obj):`
414
+ - Function-based tests: `def test_something():`
415
+ - Functions under 75 lines
416
+
417
+ ❌ **NEVER:**
418
+
419
+ - `from __future__ import annotations`
420
+ - Defensive patterns: `hasattr()`, `getattr()`
421
+ - Class-based tests: `class TestSomething:`
422
+ - Nested imports (except TYPE_CHECKING)
423
+
424
+ See `AGENTS.md` for complete standards.
425
+
426
+ ## Model-Specific Instructions
427
+
428
+ ### For Codex
429
+
430
+ Codex can emulate slash commands by following agent workflows:
431
+
432
+ **To run implementation phase:**
433
+
434
+ ```
435
+ Follow every step in expert.md workflow, then auto-invoke Testing and Docs & Vision agents as subagents.
436
+ Always read specs/active/{requirement}/ before making changes.
437
+ ```
438
+
439
+ See `.claude/agents/expert.md` lines 22-23 for details.
440
+
441
+ ### For Gemini
442
+
443
+ Gemini can use the same workflow patterns. When asked to "implement feature X":
444
+
445
+ 1. **Check for existing workspace**: `Glob("specs/active/*/prd.md")`
446
+ 2. **If workspace exists**: Follow Expert workflow (read plan → research → implement → auto-invoke Testing → auto-invoke Docs & Vision)
447
+ 3. **If no workspace**: Suggest user run `/plan` first, or create minimal workspace yourself
448
+
449
+ **Gemini-specific macro for implementation:**
450
+
451
+ ```
452
+ You are implementing {feature} for SQLSpec. Follow this workflow:
453
+
454
+ PHASE 1 - Read Plan:
455
+ • Read specs/active/{requirement}/prd.md
456
+ • Read specs/active/{requirement}/tasks.md
457
+ • Read specs/active/{requirement}/research/plan.md
458
+
459
+ PHASE 2 - Research:
460
+ • Read AGENTS.md for code standards
461
+ • Read docs/guides/adapters/{adapter}.md
462
+ • Read docs/guides/performance/sqlglot-best-practices.md
463
+ • Use zen.chat or Context7 for library docs
464
+
465
+ PHASE 3 - Implement:
466
+ • Follow AGENTS.md standards ruthlessly
467
+ • Self-test with: uv run pytest tests/...
468
+ • Update specs/active/{requirement}/tasks.md
469
+
470
+ PHASE 4 - Auto-Invoke Testing Agent:
471
+ • Use zen.chat with testing agent instructions
472
+ • Pass requirement name and acceptance criteria
473
+ • Wait for confirmation all tests pass
474
+
475
+ PHASE 5 - Auto-Invoke Docs & Vision Agent:
476
+ • Use zen.chat with docs-vision agent instructions
477
+ • Pass requirement name
478
+ • Wait for 5-phase completion (docs, QA, knowledge, re-validation, archive)
479
+
480
+ PHASE 6 - Complete:
481
+ • Verify spec archived to specs/archive/
482
+ • Return comprehensive summary
483
+ ```
484
+
485
+ ### For Claude Code
486
+
487
+ Claude Code uses native slash commands:
488
+
489
+ - `/plan {feature}` - Invokes Planner agent
490
+ - `/implement` - Invokes Expert agent (auto-invokes Testing and Docs & Vision)
491
+ - `/test` - Directly invokes Testing agent (rarely needed)
492
+ - `/review` - Directly invokes Docs & Vision agent (rarely needed)
493
+
494
+ ## MCP Tools Reference
495
+
496
+ ### zen.planner
497
+
498
+ - **Who**: Planner agent
499
+ - **When**: Structured multi-step planning
500
+ - **Pattern**: Iterative steps with branching/revision
501
+
502
+ ### zen.consensus
503
+
504
+ - **Who**: Planner, Expert
505
+ - **When**: Complex architectural decisions
506
+ - **Pattern**: Multi-model consultation with stances
507
+
508
+ ### zen.debug
509
+
510
+ - **Who**: Expert
511
+ - **When**: Systematic debugging, root cause analysis
512
+ - **Pattern**: Hypothesis-driven investigation
513
+
514
+ ### zen.thinkdeep
515
+
516
+ - **Who**: Expert
517
+ - **When**: Deep analysis for complex decisions
518
+ - **Pattern**: Multi-step reasoning with evidence
519
+
520
+ ### zen.analyze
521
+
522
+ - **Who**: Expert
523
+ - **When**: Code analysis (architecture, performance, security)
524
+ - **Pattern**: Systematic code review
525
+
526
+ ### zen.chat
527
+
528
+ - **Who**: Any agent (especially Gemini)
529
+ - **When**: General collaboration, brainstorming, sub-agent emulation
530
+ - **Pattern**: Conversational with context files
531
+
532
+ ### Context7
533
+
534
+ - **Who**: All agents
535
+ - **When**: Need library documentation
536
+ - **Pattern**: Resolve library ID → Get docs with topic
537
+
538
+ ### WebSearch
539
+
540
+ - **Who**: All agents
541
+ - **When**: Research current best practices (2025+)
542
+ - **Pattern**: Search query with date filtering
543
+
544
+ ## Summary
545
+
546
+ This workflow ensures:
547
+
548
+ ✅ **Automated orchestration** - Expert agent handles entire lifecycle
549
+ ✅ **Knowledge preservation** - Every feature updates AGENTS.md and guides
550
+ ✅ **Quality assurance** - Multi-phase validation before completion
551
+ ✅ **Session continuity** - Workspace enables cross-session resume
552
+ ✅ **Multi-model support** - Works with Claude Code, Gemini, Codex
553
+
554
+ The key innovation: **Knowledge Capture (Phase 3)** and **Re-validation (Phase 4)** ensure every feature improves the project's documentation and maintains consistency.