sqlspec 0.26.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.
- sqlspec-0.27.0/.claude/AGENTS.md +554 -0
- sqlspec-0.27.0/.claude/README.md +263 -0
- sqlspec-0.27.0/.claude/agents/docs-vision.md +819 -0
- sqlspec-0.27.0/.claude/agents/expert.md +514 -0
- sqlspec-0.27.0/.claude/agents/planner.md +297 -0
- sqlspec-0.27.0/.claude/agents/testing.md +462 -0
- sqlspec-0.27.0/.claude/commands/implement.md +36 -0
- sqlspec-0.27.0/.claude/commands/plan.md +26 -0
- sqlspec-0.27.0/.claude/commands/review.md +42 -0
- sqlspec-0.27.0/.claude/commands/test.md +25 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/.gitignore +19 -18
- {sqlspec-0.26.0 → sqlspec-0.27.0}/.pre-commit-config.yaml +2 -2
- sqlspec-0.27.0/AGENTS.md +1585 -0
- sqlspec-0.27.0/CLAUDE.md +5 -0
- sqlspec-0.27.0/GEMINI.md +5 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/Makefile +11 -11
- {sqlspec-0.26.0 → sqlspec-0.27.0}/PKG-INFO +40 -21
- {sqlspec-0.26.0 → sqlspec-0.27.0}/README.md +36 -17
- {sqlspec-0.26.0 → sqlspec-0.27.0}/pyproject.toml +32 -17
- sqlspec-0.27.0/specs/README.md +175 -0
- sqlspec-0.27.0/specs/template-spec/README.md +70 -0
- sqlspec-0.27.0/specs/template-spec/prd.md +158 -0
- sqlspec-0.27.0/specs/template-spec/recovery.md +144 -0
- sqlspec-0.27.0/specs/template-spec/tasks.md +73 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/__init__.py +7 -15
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/_serialization.py +55 -25
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/_typing.py +62 -52
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/_types.py +1 -1
- sqlspec-0.27.0/sqlspec/adapters/adbc/adk/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/adbc/adk/store.py +870 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/config.py +62 -12
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/data_dictionary.py +52 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/driver.py +144 -45
- sqlspec-0.27.0/sqlspec/adapters/adbc/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/adbc/litestar/store.py +504 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/type_converter.py +44 -50
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/_types.py +1 -1
- sqlspec-0.27.0/sqlspec/adapters/aiosqlite/adk/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/aiosqlite/adk/store.py +527 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/config.py +86 -16
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/data_dictionary.py +34 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/driver.py +127 -38
- sqlspec-0.27.0/sqlspec/adapters/aiosqlite/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/aiosqlite/litestar/store.py +281 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/pool.py +7 -7
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncmy/__init__.py +7 -1
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncmy/_types.py +1 -1
- sqlspec-0.27.0/sqlspec/adapters/asyncmy/adk/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/asyncmy/adk/store.py +493 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncmy/config.py +59 -17
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncmy/data_dictionary.py +41 -2
- sqlspec-0.27.0/sqlspec/adapters/asyncmy/driver.py +565 -0
- sqlspec-0.27.0/sqlspec/adapters/asyncmy/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/asyncmy/litestar/store.py +296 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncpg/__init__.py +2 -1
- sqlspec-0.27.0/sqlspec/adapters/asyncpg/_type_handlers.py +71 -0
- sqlspec-0.27.0/sqlspec/adapters/asyncpg/_types.py +21 -0
- sqlspec-0.27.0/sqlspec/adapters/asyncpg/adk/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/asyncpg/adk/store.py +450 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncpg/config.py +57 -36
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncpg/data_dictionary.py +41 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/asyncpg/driver.py +153 -23
- sqlspec-0.27.0/sqlspec/adapters/asyncpg/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/asyncpg/litestar/store.py +253 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/bigquery/_types.py +1 -1
- sqlspec-0.27.0/sqlspec/adapters/bigquery/adk/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/bigquery/adk/store.py +576 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/bigquery/config.py +25 -11
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/bigquery/data_dictionary.py +42 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/bigquery/driver.py +352 -144
- sqlspec-0.27.0/sqlspec/adapters/bigquery/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/bigquery/litestar/store.py +327 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/bigquery/type_converter.py +55 -23
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/_types.py +2 -2
- sqlspec-0.27.0/sqlspec/adapters/duckdb/adk/__init__.py +14 -0
- sqlspec-0.27.0/sqlspec/adapters/duckdb/adk/store.py +553 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/config.py +79 -21
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/data_dictionary.py +41 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/driver.py +138 -43
- sqlspec-0.27.0/sqlspec/adapters/duckdb/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/duckdb/litestar/store.py +332 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/pool.py +5 -5
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/type_converter.py +51 -21
- sqlspec-0.27.0/sqlspec/adapters/oracledb/_numpy_handlers.py +133 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/_types.py +20 -2
- sqlspec-0.27.0/sqlspec/adapters/oracledb/adk/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/oracledb/adk/store.py +1745 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/config.py +120 -36
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/data_dictionary.py +87 -20
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/driver.py +292 -84
- sqlspec-0.27.0/sqlspec/adapters/oracledb/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/oracledb/litestar/store.py +767 -0
- sqlspec-0.27.0/sqlspec/adapters/oracledb/migrations.py +532 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/type_converter.py +91 -16
- sqlspec-0.27.0/sqlspec/adapters/psqlpy/_type_handlers.py +44 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/_types.py +2 -1
- sqlspec-0.27.0/sqlspec/adapters/psqlpy/adk/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/psqlpy/adk/store.py +482 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/config.py +45 -19
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/data_dictionary.py +41 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/driver.py +101 -31
- sqlspec-0.27.0/sqlspec/adapters/psqlpy/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/psqlpy/litestar/store.py +272 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/type_converter.py +40 -11
- sqlspec-0.27.0/sqlspec/adapters/psycopg/_type_handlers.py +80 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psycopg/_types.py +2 -1
- sqlspec-0.27.0/sqlspec/adapters/psycopg/adk/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/psycopg/adk/store.py +944 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psycopg/config.py +65 -37
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psycopg/data_dictionary.py +77 -3
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psycopg/driver.py +200 -78
- sqlspec-0.27.0/sqlspec/adapters/psycopg/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/psycopg/litestar/store.py +554 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/__init__.py +2 -1
- sqlspec-0.27.0/sqlspec/adapters/sqlite/_type_handlers.py +86 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/_types.py +1 -1
- sqlspec-0.27.0/sqlspec/adapters/sqlite/adk/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/sqlite/adk/store.py +572 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/config.py +85 -16
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/data_dictionary.py +34 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/driver.py +120 -52
- sqlspec-0.27.0/sqlspec/adapters/sqlite/litestar/__init__.py +5 -0
- sqlspec-0.27.0/sqlspec/adapters/sqlite/litestar/store.py +318 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/sqlite/pool.py +5 -5
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/base.py +45 -26
- sqlspec-0.27.0/sqlspec/builder/__init__.py +137 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/builder/_base.py +91 -58
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/builder/_column.py +5 -5
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/builder/_ddl.py +98 -89
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/builder/_delete.py +5 -4
- sqlspec-0.27.0/sqlspec/builder/_dml.py +388 -0
- sqlspec-0.26.0/sqlspec/_sql.py → sqlspec-0.27.0/sqlspec/builder/_factory.py +41 -44
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/builder/_insert.py +5 -82
- sqlspec-0.26.0/sqlspec/builder/mixins/_join_operations.py → sqlspec-0.27.0/sqlspec/builder/_join.py +145 -143
- sqlspec-0.27.0/sqlspec/builder/_merge.py +506 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/builder/_parsing_utils.py +9 -11
- sqlspec-0.27.0/sqlspec/builder/_select.py +1604 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/builder/_update.py +11 -42
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/cli.py +76 -69
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/config.py +231 -60
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/__init__.py +5 -4
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/cache.py +18 -18
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/compiler.py +6 -8
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/filters.py +37 -37
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/hashing.py +9 -9
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/parameters.py +76 -45
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/result.py +102 -46
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/splitter.py +16 -17
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/statement.py +32 -31
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/core/type_conversion.py +3 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/driver/__init__.py +1 -3
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/driver/_async.py +95 -161
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/driver/_common.py +133 -80
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/driver/_sync.py +95 -162
- sqlspec-0.27.0/sqlspec/driver/mixins/_result_tools.py +61 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/driver/mixins/_sql_translator.py +4 -4
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/exceptions.py +70 -7
- sqlspec-0.27.0/sqlspec/extensions/adk/__init__.py +53 -0
- sqlspec-0.27.0/sqlspec/extensions/adk/_types.py +51 -0
- sqlspec-0.27.0/sqlspec/extensions/adk/converters.py +172 -0
- sqlspec-0.27.0/sqlspec/extensions/adk/migrations/0001_create_adk_tables.py +144 -0
- sqlspec-0.27.0/sqlspec/extensions/adk/service.py +181 -0
- sqlspec-0.27.0/sqlspec/extensions/adk/store.py +536 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/extensions/aiosql/adapter.py +73 -53
- sqlspec-0.27.0/sqlspec/extensions/litestar/__init__.py +23 -0
- sqlspec-0.27.0/sqlspec/extensions/litestar/cli.py +92 -0
- sqlspec-0.27.0/sqlspec/extensions/litestar/config.py +69 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/extensions/litestar/handlers.py +46 -17
- sqlspec-0.27.0/sqlspec/extensions/litestar/migrations/0001_create_session_table.py +137 -0
- sqlspec-0.27.0/sqlspec/extensions/litestar/migrations/__init__.py +3 -0
- sqlspec-0.27.0/sqlspec/extensions/litestar/plugin.py +487 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/extensions/litestar/providers.py +25 -25
- sqlspec-0.27.0/sqlspec/extensions/litestar/store.py +265 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/loader.py +30 -49
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/migrations/base.py +200 -76
- sqlspec-0.27.0/sqlspec/migrations/commands.py +929 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/migrations/context.py +6 -9
- sqlspec-0.27.0/sqlspec/migrations/fix.py +199 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/migrations/loaders.py +47 -19
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/migrations/runner.py +241 -75
- sqlspec-0.27.0/sqlspec/migrations/tracker.py +403 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/migrations/utils.py +51 -3
- sqlspec-0.27.0/sqlspec/migrations/validation.py +177 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/protocols.py +66 -36
- sqlspec-0.27.0/sqlspec/py.typed +0 -0
- sqlspec-0.27.0/sqlspec/storage/_utils.py +98 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/storage/backends/fsspec.py +134 -106
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/storage/backends/local.py +78 -51
- sqlspec-0.27.0/sqlspec/storage/backends/obstore.py +590 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/storage/registry.py +75 -39
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/typing.py +14 -84
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/config_resolver.py +6 -6
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/correlation.py +4 -5
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/data_transformation.py +3 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/deprecation.py +9 -8
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/fixtures.py +4 -4
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/logging.py +46 -6
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/module_loader.py +2 -2
- sqlspec-0.27.0/sqlspec/utils/schema.py +288 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/serializers.py +3 -3
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/sync_tools.py +21 -17
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/text.py +1 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/type_guards.py +111 -20
- sqlspec-0.27.0/sqlspec/utils/version.py +433 -0
- sqlspec-0.27.0/tests/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/conftest.py +5 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/example_usage.py +3 -5
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/sql_utils.py +7 -7
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/conftest.py +0 -10
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/conftest.py +2 -2
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_exceptions.py +118 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_dialect_integration.py +229 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_dialect_support.py +198 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_edge_cases.py +269 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_event_operations.py +320 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_owner_id_column.py +145 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_adk/test_session_operations.py +184 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_litestar/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_adbc/test_extensions/test_litestar/test_store.py +262 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_migrations.py +16 -8
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/conftest.py +4 -8
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_connection.py +19 -28
- sqlspec-0.27.0/tests/integration/test_adapters/test_aiosqlite/test_exceptions.py +124 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_aiosqlite/test_extensions/test_litestar/test_store.py +234 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_migrations.py +9 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_asyncmy_features.py +0 -7
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_config.py +82 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_driver.py +53 -17
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_exceptions.py +137 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/conftest.py +104 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_adk/test_store.py +332 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_litestar/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncmy/test_extensions/test_litestar/test_store.py +252 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_migrations.py +3 -7
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/test_parameter_styles.py +4 -23
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_exceptions.py +130 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_execute_many.py +0 -10
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/conftest.py +68 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/test_owner_id_column.py +411 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_adk/test_session_operations.py +134 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_litestar/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_extensions/test_litestar/test_store.py +246 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_migrations.py +6 -6
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_parameter_styles.py +0 -17
- sqlspec-0.27.0/tests/integration/test_adapters/test_asyncpg/test_schema_migration.py +321 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/conftest.py +3 -5
- sqlspec-0.27.0/tests/integration/test_adapters/test_bigquery/test_exceptions.py +96 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_bigquery/test_type_handler_config.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_connection.py +14 -11
- sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_driver_features.py +151 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_exceptions.py +128 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/test_adk/__init__.py +0 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/test_adk/test_store.py +692 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/test_litestar/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_duckdb/test_extensions/test_litestar/test_store.py +272 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_migrations.py +12 -8
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/utils.py +1 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_driver_async.py +84 -12
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_driver_sync.py +84 -12
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_exceptions.py +142 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_execute_many.py +27 -29
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/__init__.py +0 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/test_inmemory.py +407 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_adk/test_oracle_specific.py +530 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/__init__.py +0 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_store_async.py +248 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_extensions/test_litestar/test_store_sync.py +248 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_migrations.py +164 -24
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_msgspec_clob.py +525 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_oracledb/test_numpy_vectors.py +376 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_oracle_features.py +29 -26
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_parameter_styles.py +104 -88
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_connection.py +0 -7
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_driver.py +0 -1
- sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_exceptions.py +131 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_adk/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_adk/test_owner_id_column.py +142 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_litestar/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psqlpy/test_extensions/test_litestar/test_store.py +246 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_migrations.py +6 -6
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_async_copy.py +0 -4
- sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_exceptions.py +161 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/__init__.py +0 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_adk/__init__.py +0 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_adk/test_owner_id_column.py +180 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/__init__.py +0 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/test_store_async.py +249 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_psycopg/test_extensions/test_litestar/test_store_sync.py +267 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_migrations.py +19 -20
- sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_driver_features.py +111 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_exceptions.py +120 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_adk/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_adk/test_owner_id_column.py +386 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_litestar/__init__.py +1 -0
- sqlspec-0.27.0/tests/integration/test_adapters/test_sqlite/test_extensions/test_litestar/test_store.py +253 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_migrations.py +16 -8
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_pooling.py +6 -3
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_query_mixin.py +2 -2
- sqlspec-0.27.0/tests/integration/test_migrations/test_auto_sync.py +333 -0
- sqlspec-0.27.0/tests/integration/test_migrations/test_fix_checksum_stability.py +203 -0
- sqlspec-0.27.0/tests/integration/test_migrations/test_fix_file_operations.py +376 -0
- sqlspec-0.27.0/tests/integration/test_migrations/test_fix_idempotency_workflow.py +353 -0
- sqlspec-0.27.0/tests/integration/test_migrations/test_schema_migration.py +311 -0
- sqlspec-0.27.0/tests/integration/test_migrations/test_upgrade_downgrade_versions.py +409 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_storage/test_storage_integration.py +16 -8
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/conftest.py +22 -21
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_adapters/conftest.py +12 -12
- sqlspec-0.27.0/tests/unit/test_adapters/test_adbc/test_adbc_serialization.py +120 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_adapters/test_async_adapters.py +12 -51
- sqlspec-0.27.0/tests/unit/test_adapters/test_asyncmy/__init__.py +0 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_asyncpg/__init__.py +1 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_asyncpg/test_config.py +0 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_asyncpg/test_type_handlers.py +66 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_bigquery/__init__.py +1 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_duckdb/__init__.py +1 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_duckdb/test_type_converter.py +82 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_extension_config.py +194 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_oracledb/test_numpy_handlers.py +228 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_oracledb/test_type_converter_vectors.py +192 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_psycopg/test_type_handlers.py +83 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_sqlite/__init__.py +0 -0
- sqlspec-0.27.0/tests/unit/test_adapters/test_sqlite/test_type_handlers.py +44 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_adapters/test_sync_adapters.py +12 -12
- sqlspec-0.27.0/tests/unit/test_cli/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_cli/test_config_loading.py +33 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_cli/test_migration_commands.py +43 -7
- sqlspec-0.27.0/tests/unit/test_cli/test_shell_completion.py +72 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_core/test_parameters.py +3 -3
- sqlspec-0.27.0/tests/unit/test_core/test_result.py +298 -0
- sqlspec-0.27.0/tests/unit/test_driver/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_driver/test_result_tools.py +65 -5
- sqlspec-0.27.0/tests/unit/test_exceptions.py +44 -0
- sqlspec-0.27.0/tests/unit/test_extensions/test_litestar/test_handlers.py +277 -0
- sqlspec-0.27.0/tests/unit/test_migrations/test_checksum_canonicalization.py +345 -0
- sqlspec-0.27.0/tests/unit/test_migrations/test_fix_regex_precision.py +368 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_migrations/test_migration_commands.py +98 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_migrations/test_migration_execution.py +8 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_migrations/test_migration_runner.py +276 -0
- sqlspec-0.27.0/tests/unit/test_migrations/test_tracker_idempotency.py +317 -0
- sqlspec-0.27.0/tests/unit/test_migrations/test_utils.py +274 -0
- sqlspec-0.27.0/tests/unit/test_migrations/test_validation.py +206 -0
- sqlspec-0.27.0/tests/unit/test_migrations/test_version.py +225 -0
- sqlspec-0.27.0/tests/unit/test_migrations/test_version_conversion.py +303 -0
- sqlspec-0.27.0/tests/unit/test_migrations/test_version_parsing_edge_cases.py +236 -0
- sqlspec-0.27.0/tests/unit/test_serialization.py +615 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_sql_factory.py +8 -7
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_storage/test_storage_registry.py +61 -21
- sqlspec-0.27.0/tests/unit/test_storage/test_storage_utils.py +74 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_correlation.py +0 -1
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_fixtures.py +0 -9
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_sync_tools.py +0 -14
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_type_guards.py +40 -13
- sqlspec-0.27.0/tools/__init__.py +0 -0
- sqlspec-0.27.0/tools/build_docs.py +35 -0
- sqlspec-0.27.0/tools/fix_documentation.py +227 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tools/sphinx_ext/changelog.py +2 -2
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tools/sphinx_ext/missing_references.py +12 -63
- {sqlspec-0.26.0 → sqlspec-0.27.0}/uv.lock +2360 -1842
- sqlspec-0.26.0/NOTICE +0 -29
- sqlspec-0.26.0/sqlspec/adapters/asyncmy/driver.py +0 -334
- sqlspec-0.26.0/sqlspec/adapters/asyncpg/_types.py +0 -17
- sqlspec-0.26.0/sqlspec/adapters/oracledb/migrations.py +0 -241
- sqlspec-0.26.0/sqlspec/builder/__init__.py +0 -68
- sqlspec-0.26.0/sqlspec/builder/_merge.py +0 -71
- sqlspec-0.26.0/sqlspec/builder/_select.py +0 -316
- sqlspec-0.26.0/sqlspec/builder/mixins/__init__.py +0 -55
- sqlspec-0.26.0/sqlspec/builder/mixins/_cte_and_set_ops.py +0 -253
- sqlspec-0.26.0/sqlspec/builder/mixins/_delete_operations.py +0 -50
- sqlspec-0.26.0/sqlspec/builder/mixins/_insert_operations.py +0 -282
- sqlspec-0.26.0/sqlspec/builder/mixins/_merge_operations.py +0 -698
- sqlspec-0.26.0/sqlspec/builder/mixins/_order_limit_operations.py +0 -145
- sqlspec-0.26.0/sqlspec/builder/mixins/_pivot_operations.py +0 -157
- sqlspec-0.26.0/sqlspec/builder/mixins/_select_operations.py +0 -930
- sqlspec-0.26.0/sqlspec/builder/mixins/_update_operations.py +0 -199
- sqlspec-0.26.0/sqlspec/builder/mixins/_where_clause.py +0 -1298
- sqlspec-0.26.0/sqlspec/driver/mixins/_result_tools.py +0 -277
- sqlspec-0.26.0/sqlspec/extensions/litestar/__init__.py +0 -6
- sqlspec-0.26.0/sqlspec/extensions/litestar/cli.py +0 -48
- sqlspec-0.26.0/sqlspec/extensions/litestar/config.py +0 -276
- sqlspec-0.26.0/sqlspec/extensions/litestar/plugin.py +0 -386
- sqlspec-0.26.0/sqlspec/migrations/commands.py +0 -400
- sqlspec-0.26.0/sqlspec/migrations/tracker.py +0 -187
- sqlspec-0.26.0/sqlspec/storage/backends/obstore.py +0 -474
- sqlspec-0.26.0/tests/unit/test_cli/__init__.py +0 -1
- sqlspec-0.26.0/tests/unit/test_core/test_result.py +0 -140
- sqlspec-0.26.0/tests/unit/test_extensions/test_litestar/test_config.py +0 -482
- sqlspec-0.26.0/tests/unit/test_serialization.py +0 -254
- sqlspec-0.26.0/tools/build_docs.py +0 -93
- {sqlspec-0.26.0 → sqlspec-0.27.0}/CONTRIBUTING.rst +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/LICENSE +0 -0
- /sqlspec-0.26.0/sqlspec/adapters/__init__.py → /sqlspec-0.27.0/specs/active/.gitkeep +0 -0
- /sqlspec-0.26.0/sqlspec/extensions/__init__.py → /sqlspec-0.27.0/specs/archive/.gitkeep +0 -0
- /sqlspec-0.26.0/sqlspec/py.typed → /sqlspec-0.27.0/specs/template-spec/research/.gitkeep +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/__main__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/__metadata__.py +0 -0
- {sqlspec-0.26.0/tests → sqlspec-0.27.0/sqlspec/adapters}/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/adbc/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/aiosqlite/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/bigquery/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/duckdb/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/oracledb/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psqlpy/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/adapters/psycopg/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/builder/_expression_wrappers.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/driver/mixins/__init__.py +0 -0
- {sqlspec-0.26.0/tests/unit/test_driver → sqlspec-0.27.0/sqlspec/extensions}/__init__.py +0 -0
- {sqlspec-0.26.0/tools → sqlspec-0.27.0/sqlspec/extensions/adk/migrations}/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/extensions/aiosql/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/extensions/litestar/_utils.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/migrations/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/storage/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/storage/backends/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/storage/backends/base.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/sqlspec/utils/singleton.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/asset_maintenance.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/ddls-mysql-collection.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/ddls-postgres-collection.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/init.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-config.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-data_types.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-database_details.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-engines.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-hostname.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-plugins.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-process_list.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-resource-groups.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-schema_objects.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-table_details.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/collection-users.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/mysql/init.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/oracle.ddl.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-applications.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-aws_extension_dependency.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-aws_oracle_exists.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-bg_writer_stats.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-calculated_metrics.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-data_types.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-database_details.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-extensions.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-index_details.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-pglogical-details.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-privileges.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-replication_slots.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-replication_stats.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-schema_details.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-schema_objects.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-settings.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-source_details.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/collection-table_details.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/extended-collection-all-databases.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/postgres/init.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/fixtures/readiness-check.sql +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_arrow_features.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_backends.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_connection.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_driver.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_edge_cases.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_adbc_results.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_data_dictionary.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_adbc/test_parameter_styles.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_driver.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_parameter_styles.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_aiosqlite/test_pooling.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncmy/conftest.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/conftest.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_connection.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_data_dictionary.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_asyncpg/test_driver.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/test_bigquery_features.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/test_config.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/test_connection.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_bigquery/test_driver.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_driver.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_execute_many.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_mixed_parameter_styles.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_parameter_styles.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_duckdb/test_pooling.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/conftest.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_oracledb/test_connection.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/conftest.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_parameter_styles.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psqlpy/test_psqlpy_features.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/conftest.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_connection.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_driver.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_execute_many.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_psycopg/test_parameter_styles.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/conftest.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_data_dictionary.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_driver.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_adapters/test_sqlite/test_parameter_styles.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_async_migrations.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_dishka/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_dishka/conftest.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_dishka/test_dishka_integration.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_loader/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_loader/test_file_system_loading.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_migrations/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/integration/test_storage/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_adapters/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_adapters/test_adapter_implementations.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_base/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_base/test_sql_integration.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_base/test_sqlspec_class.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_builder/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_builder/test_insert_builder.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_builder/test_lateral_joins.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_builder/test_parameter_naming.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_builder/test_select_locking.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_builder_parameter_naming.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_config_resolver.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_core/test_cache.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_core/test_compiler.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_core/test_filters.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_core/test_hashing.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_core/test_statement.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_cte_parameter_collisions.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_driver/test_data_dictionary.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_extensions/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_extensions/test_litestar/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_loader/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_loader/test_cache_integration.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_loader/test_fixtures_directory_loading.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_loader/test_loading_patterns.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_loader/test_sql_file_loader.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_migration_context.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_migrations/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_migrations/test_extension_discovery.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_migrations/test_migration.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_migrations/test_migration_context.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_parsing_utils.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_storage/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_storage/test_fsspec_backend.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_storage/test_local_store.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_storage/test_obstore_backend.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_type_conversion.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/__init__.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_data_transformation.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_deprecation.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_logging.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_module_loader.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_serializers.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_singleton.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_utils/test_text.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tests/unit/test_where_or_operations.py +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tools/local-infra.sh +0 -0
- {sqlspec-0.26.0 → sqlspec-0.27.0}/tools/pypi_readme.py +0 -0
- {sqlspec-0.26.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.
|