querysource 4.5.15__tar.gz → 5.0.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.
- querysource-5.0.0/.claude/agents/code-review.md +136 -0
- querysource-5.0.0/.claude/agents/qa-runner.md +123 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/agents/sdd-autopilot.md +30 -20
- querysource-5.0.0/.claude/agents/sdd-coder.md +190 -0
- querysource-5.0.0/.claude/agents/sdd-feedback.md +80 -0
- querysource-5.0.0/.claude/agents/sdd-ideation.md +386 -0
- querysource-5.0.0/.claude/agents/sdd-planner.md +105 -0
- querysource-5.0.0/.claude/agents/sdd-research.md +162 -0
- querysource-5.0.0/.claude/agents/sdd-secondopinion.md +107 -0
- querysource-5.0.0/.claude/agents/sdd-worker.md +464 -0
- querysource-5.0.0/.claude/commands/bookstore.md +37 -0
- querysource-5.0.0/.claude/commands/parrotwiki.md +42 -0
- querysource-5.0.0/.claude/commands/release.md +216 -0
- querysource-5.0.0/.claude/commands/remove-worktree.md +128 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-codereview.md +67 -5
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-done.md +156 -65
- querysource-5.0.0/.claude/commands/sdd-explain.md +105 -0
- querysource-5.0.0/.claude/commands/sdd-insight.md +110 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-proposal.md +29 -4
- querysource-5.0.0/.claude/commands/sdd-spec.md +648 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-start.md +65 -32
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-status.md +19 -2
- querysource-5.0.0/.claude/commands/sdd-task.md +399 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-tojira.md +13 -9
- querysource-5.0.0/.claude/commands/security-check.md +227 -0
- querysource-5.0.0/.claude/hooks/dangerous-actions-blocker.sh +257 -0
- querysource-5.0.0/.claude/hooks/sdd-worker-format.sh +160 -0
- querysource-5.0.0/.claude/rules/codebase-conventions.md +44 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/python-development.md +2 -2
- querysource-5.0.0/.claude/skills/bookstore/SKILL.md +69 -0
- querysource-5.0.0/.claude/skills/meta-prompting/SKILL.md +173 -0
- querysource-5.0.0/.claude/skills/meta-prompting/analyze-complexity/SKILL.md +214 -0
- querysource-5.0.0/.claude/skills/meta-prompting/assess-quality/SKILL.md +313 -0
- querysource-5.0.0/.claude/skills/meta-prompting/extract-context/SKILL.md +252 -0
- querysource-5.0.0/.claude/skills/meta-prompting/meta-prompt-iterate/SKILL.md +357 -0
- querysource-5.0.0/.claude/workflows/sdd-insight.js +180 -0
- {querysource-4.5.15 → querysource-5.0.0}/CHANGES.rst +19 -0
- {querysource-4.5.15 → querysource-5.0.0}/PKG-INFO +1 -1
- {querysource-4.5.15 → querysource-5.0.0}/generated/Query.json +13 -1
- {querysource-4.5.15 → querysource-5.0.0}/policies/defaults.yaml +2 -0
- {querysource-4.5.15 → querysource-5.0.0}/pyproject.toml +63 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/_version.py +3 -3
- querysource-5.0.0/querysource/auth/slug_visibility.py +471 -0
- querysource-5.0.0/querysource/cache_identity.py +94 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/conf.py +12 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/connections.py +40 -18
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/__init__.py +12 -9
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/_pagination.py +90 -10
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/abstract.py +117 -4
- querysource-5.0.0/querysource/handlers/describe.py +354 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/log.py +35 -10
- querysource-5.0.0/querysource/handlers/manager.py +890 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/multi.py +145 -10
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/scheduler.py +60 -16
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/service.py +106 -24
- querysource-5.0.0/querysource/handlers/tenant.py +277 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/connections.py +83 -38
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/queries.py +106 -38
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/output.py +29 -12
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/postgres.py +66 -17
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/table.py +31 -9
- querysource-5.0.0/querysource/ownership_logging.py +124 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/abstract.py +37 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/cassandra.py +3 -1
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/default.py +3 -1
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/documentdb.py +3 -1
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/mysql.py +3 -1
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/pg.py +27 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sql.py +6 -2
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sqlserver.py +3 -1
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/base.py +10 -9
- querysource-5.0.0/querysource/queries/describe.py +260 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/__init__.py +151 -26
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/executors.py +79 -25
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/query.catalog.yaml +9 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/query.py +6 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/obj.py +30 -22
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/qs.py +51 -25
- querysource-5.0.0/querysource/repositories/__init__.py +4 -0
- querysource-5.0.0/querysource/repositories/definitions.py +496 -0
- querysource-5.0.0/querysource/scheduler/jobs.py +204 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/scheduler/scheduler.py +298 -94
- {querysource-4.5.15 → querysource-5.0.0}/querysource/services.py +144 -21
- querysource-5.0.0/querysource/tenant_errors.py +20 -0
- querysource-5.0.0/querysource/tenant_models.py +69 -0
- querysource-5.0.0/querysource/tenants.py +439 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/validators.cpp +4086 -2466
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/validators.pyx +55 -6
- querysource-5.0.0/querysource/utils/vocabulary.py +211 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/version.py +1 -1
- {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/PKG-INFO +1 -1
- {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/SOURCES.txt +81 -1
- {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/scm_file_list.json +164 -0
- querysource-5.0.0/querysource.egg-info/scm_version.json +8 -0
- querysource-5.0.0/scripts/remove_worktree.py +423 -0
- querysource-5.0.0/scripts/sdd/check_id_collisions.py +327 -0
- querysource-5.0.0/scripts/sdd/check_task_graph.py +334 -0
- querysource-5.0.0/scripts/sdd/close_task.sh +115 -0
- querysource-5.0.0/scripts/sdd/ensure_worktree.py +324 -0
- querysource-5.0.0/scripts/sdd/heal_orphans.sh +85 -0
- querysource-5.0.0/scripts/sdd/id_ledger.py +220 -0
- querysource-5.0.0/scripts/sdd/insight.py +2079 -0
- querysource-5.0.0/scripts/sdd/lint_new.py +188 -0
- querysource-5.0.0/scripts/sdd/migrate_index.py +177 -0
- querysource-5.0.0/scripts/sdd/reserve_ids.py +657 -0
- querysource-5.0.0/scripts/sdd/sdd_meta.py +232 -0
- querysource-5.0.0/tests/auth/test_slug_visibility.py +316 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/conftest.py +13 -2
- querysource-5.0.0/tests/handlers/test_describe_columns.py +281 -0
- querysource-5.0.0/tests/handlers/test_describe_detail.py +174 -0
- querysource-5.0.0/tests/handlers/test_describe_list.py +186 -0
- querysource-5.0.0/tests/handlers/test_describe_tenant.py +428 -0
- querysource-5.0.0/tests/handlers/test_describe_vocabulary.py +69 -0
- querysource-5.0.0/tests/handlers/test_pagination_describe_helpers.py +58 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_queryservice_pbac_smoke.py +51 -1
- {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_multiquery_output_errors.py +48 -6
- {querysource-4.5.15 → querysource-5.0.0}/tests/policies/test_default_policies_load.py +18 -0
- querysource-5.0.0/tests/services/__init__.py +0 -0
- querysource-5.0.0/tests/tenants/conftest.py +152 -0
- querysource-5.0.0/tests/tenants/test_integration.py +457 -0
- querysource-5.0.0/tests/tenants/test_tenant_bootstrap_lookup.py +274 -0
- querysource-5.0.0/tests/tenants/test_tenant_child_execution.py +456 -0
- querysource-5.0.0/tests/tenants/test_tenant_definition_model.py +117 -0
- querysource-5.0.0/tests/tenants/test_tenant_execution_context.py +198 -0
- querysource-5.0.0/tests/tenants/test_tenant_http_routes.py +233 -0
- querysource-5.0.0/tests/tenants/test_tenant_management_reads.py +430 -0
- querysource-5.0.0/tests/tenants/test_tenant_management_writes.py +270 -0
- querysource-5.0.0/tests/tenants/test_tenant_observability_outputs.py +237 -0
- querysource-5.0.0/tests/tenants/test_tenant_policy_preflight.py +276 -0
- querysource-5.0.0/tests/tenants/test_tenant_registry.py +404 -0
- querysource-5.0.0/tests/tenants/test_tenant_remote_protocol.py +238 -0
- querysource-5.0.0/tests/tenants/test_tenant_repository_reads.py +270 -0
- querysource-5.0.0/tests/tenants/test_tenant_repository_writes.py +325 -0
- querysource-5.0.0/tests/tenants/test_tenant_result_cache.py +240 -0
- querysource-5.0.0/tests/tenants/test_tenant_rollout_documentation.py +129 -0
- querysource-5.0.0/tests/tenants/test_tenant_scheduler_api_jobs.py +352 -0
- querysource-5.0.0/tests/tenants/test_tenant_scheduler_registry.py +309 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_remote_dispatch.py +23 -3
- querysource-5.0.0/tests/test_route_registration.py +316 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_core.py +9 -2
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_handler_unit.py +81 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_jobs.py +83 -4
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_multi_routing.py +6 -3
- querysource-5.0.0/tests/test_table_output_postgres.py +121 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_threadquery_executor.py +9 -4
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_multiqs_output_raise.py +27 -2
- querysource-5.0.0/tests/unit/test_provider_describe_columns.py +149 -0
- querysource-5.0.0/tests/unit/test_slug_describer.py +196 -0
- querysource-5.0.0/tests/unit/test_udf_keyword_resolution.py +109 -0
- querysource-5.0.0/tests/unit/test_vocabulary.py +70 -0
- querysource-4.5.15/.claude/agents/sdd-research.md +0 -80
- querysource-4.5.15/.claude/agents/sdd-worker.md +0 -298
- querysource-4.5.15/.claude/commands/sdd-spec.md +0 -306
- querysource-4.5.15/.claude/commands/sdd-task.md +0 -214
- querysource-4.5.15/querysource/handlers/manager.py +0 -521
- querysource-4.5.15/querysource/scheduler/jobs.py +0 -122
- querysource-4.5.15/querysource.egg-info/scm_version.json +0 -8
- querysource-4.5.15/tests/test_route_registration.py +0 -100
- {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/async-programming-expert.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/code-reviewer.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/cython-development.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/prompt-expert.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/python-development.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/rules/rust-development.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/create-parrot-tool.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/create-workflow.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/debug-regressions-with-git-bisect-binary-search.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/generate-tests.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/git-new-feature.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/parrot-mcp-server.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/release_package.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.agent/workflows/start-flow.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.bumpversion.cfg +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/agents/code-reviewer.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/agents/sdd-qa.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/pr-review.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-brainstorm.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-fromjira.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/commands/sdd-next.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/aws-cost-optimization.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/code-reviewer.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/cython-development.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/rust-development.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/using-git-worktrees.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/worktree-pr-and-clean.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/worktree-start-feature.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.claude/rules/worktree-status.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.github/dependabot.yml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.github/workflows/codeql-analysis.yml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.github/workflows/release.yml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.isort.cfg +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.jupyter/jupyter_notebook_config.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.parrot/wiki.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.parrot/wiki.local.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.pre-commit-config.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/.pylintrc +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/CODE_OF_CONDUCT.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/CONTRIBUTING.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/INSTALL +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/JOIN_CONDITIONS_FEATURE.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/JOIN_CONDITIONS_SUMMARY.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/LICENSE +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/MANIFEST.in +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/Makefile +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/README.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/app.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/bin/README.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/conftest.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/AirtableSource.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/Concat.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/DWHDestination.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/DropCols.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/FileSource.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/Filter.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/FilterCols.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/Forecast.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/GoogleMaps.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/GroupBy.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/Info.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/Join.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/Map.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/Melt.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/Merge.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/NormalizeColumns.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/PluckCols.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/S3Source.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/SharepointSource.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/SmartSheetSource.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/Table.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/TableDestination.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/TableOutput.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/TableOutputAdapter.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/TableSource.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/ToS3.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/ToSharepoint.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/correlation.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/crosstab.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/pivot.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/tExplode.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/tOrder.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/generated/tPandas.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/gunicorn_config.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/mypy.ini +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/nav.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/policies/HARDENING.md +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/policies/authorized.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/policies/baseline.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/policies/datasources.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/policies/drivers.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/policies/raw_queries.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/policies/slugs.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/policies/superusers.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/pytest.ini +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/__cli__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/auth/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/auth/_resource_types.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/auth/credentials.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/auth/pbac.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/backends/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/backends/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/backends/memcache.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/backends/redis.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/cache/base.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/cli/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/cli/generate_docs.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/arangodb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/athena.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/bigquery.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/cassandra.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/clickhouse.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/cockroachdb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/couchbase.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/couchdb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/countries.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/delta.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/documentdb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/dynamodb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/elastic.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/ga.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/gcalc.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/hazel.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/iceberg.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/influx.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/jdbc.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/jira.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/mariadb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/memcached.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/mongo.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/mysql.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/odbc.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/openweather.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/oracle.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/pg.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/pg_admin.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/postgres.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/py.typed +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/qs.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/redis.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/rest.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/rethink.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/sa.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/salesforce.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/scylladb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/sqlalchemy.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/sqlite.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/sqlserver.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/upc.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/drivers/zipcodeapi.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/handlers/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/handlers/datasource.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/handlers/utils.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/introspection.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/datasources/models.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/events/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/exceptions.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/components.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/executor.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/integrations/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/integrations/airtable.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/outputs/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/outputs/tableOutput/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/outputs/tableOutput/postgres.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/outputs/tableOutput/table.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/handlers/variables.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/airtable.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/credentials.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/bigquery.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/db.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/mongo.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/databases/rethink.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/http.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/playwright_service.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/interfaces/selenium_service.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/libs/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/libs/encoders.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/libs/functions/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/libs/py.typed +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/models.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/dwh.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/s3.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/sharepoint.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/destinations/table.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/arrow.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/dt.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/factory.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/iter.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/modin.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/pandas.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/dt/polars.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/bigquery.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/documentdb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/mongodb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/mysql.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/rethink.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/TableOutput/sa.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/tables/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/bokeh.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/clustering.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/csv.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/describe.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/eda.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/excel.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/html.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/json.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/pdf.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/pickle.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/plotly.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/profiling.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/report.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/table.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/tsv.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/txt.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/outputs/writers/xml.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/abstract.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/abstract.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/abstract.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/arangodb.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/arangodb.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/arangodb.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/bigquery.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/bigquery.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/bigquery.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/cql.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/cql.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/cql.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/deltatbl.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/deltatbl.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/deltatbl.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/elastic.cpp +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/elastic.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/elastic.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/iceberg.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/iceberg.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/iceberg.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/influx.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/influx.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/influx.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/mongo.cpp +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/mongo.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/mongo.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/parser.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/parser.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/parser.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/pgsql.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/pgsql.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/pgsql.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/rethink.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/rethink.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/rethink.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sosql.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sosql.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sosql.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sql.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sql.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sql.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sqlserver.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sqlserver.pxd +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/parsers/sqlserver.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/plugins/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/plugins/importer.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/plugins/sources/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/arangodb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/bigquery.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/db.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/deltatbl.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/dummy.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/elastic.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/external.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/http.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/iceberg.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/influx.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/py.typed +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/rest.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/rethink.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/salesforce.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/scylladb.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/amazon.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/countries.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/ga.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/geofcc.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/gmaps.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/graphcountries.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/graphql.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/http.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/hubspot.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/openweather.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/parsers/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/parsers/amproduct.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/parsers/xpath.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/pokemon.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/populartimes.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/py.typed +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/rest.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/retailnext.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/rssapp.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/salesforce.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/scrapper.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/shoppertrack.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/swop.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/uap.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/upc.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/wm_stores.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/zammad.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/providers/sources/zipcodeapi.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/py.typed +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/qs_parsers/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/executor.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/models.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/_introspect.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/components/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/components/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/dwh.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/s3.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/sharepoint.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/destinations/table.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Concat.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/GroupBy.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/GroupBy.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Info.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Join.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Join.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Melt.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Melt.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Merge.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/Merge.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/filter/Filter.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/filter/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/operators/filter/flt.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/registry.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/airtable.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/base.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/file.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/s3.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/sharepoint.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/smartsheet.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/sources/table.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/DropCols.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/DropCols.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/FilterCols.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/FilterCols.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/Forecast.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/Forecast.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/Map.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/Map.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/NormalizeColumns.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/NormalizeColumns.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/PluckCols.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/PluckCols.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/abstract.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/correlation.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/correlation.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/crosstab.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/crosstab.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/google/GoogleMaps.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/google/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/google/maps.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/pivot.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/pivot.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tExplode.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tExplode.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tOrder.catalog.yaml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tOrder.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/queries/multi/transformations/tPandas.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/scheduler/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/scheduler/notifications.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/template/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/template/parser.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/converters.cpp +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/converters.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/dt/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/dt/filters.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/dt/transforms.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/py.typed +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/typedefs.c +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/types/typedefs.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/cache_serialization.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/dataframes.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/errors.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/events.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/fn.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/functions.cpp +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/functions.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/getfunc.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/handlers.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/parseqs.cpp +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/parseqs.pyx +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource/utils/validators.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/dependency_links.txt +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/entry_points.txt +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/not-zip-safe +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/requires.txt +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/querysource.egg-info/top_level.txt +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/run.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/Cargo.lock +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/Cargo.toml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/pyproject.toml +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/arangodb_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/bigquery_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/cql_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/elastic_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/filter_common.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/flux_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/lib.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/mongo_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/mssql_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/parseqs.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/pgsql_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/rethink_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/safe_dict.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/soql_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/sql_parser.rs +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/rust/src/validators.rs +0 -0
- {querysource-4.5.15/templates → querysource-5.0.0/scripts/sdd}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/setup.cfg +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/setup.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/static/notebook/bundle.js +0 -0
- {querysource-4.5.15/tests/auth → querysource-5.0.0/templates}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/templates/base.html +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/templates/default.html +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/templates/default_table.html +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/templates/fontlist-v330.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/templates/fontlist-v390.json +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/templates/table_charts.html +0 -0
- {querysource-4.5.15/tests/datasources → querysource-5.0.0/tests/auth}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/auth/test_credentials.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/auth/test_pbac_bootstrap.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/check_concurrent_get_slug.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/conftest.py +0 -0
- {querysource-4.5.15/tests/handlers → querysource-5.0.0/tests/datasources}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/datasources/test_datasource_view_pbac.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/datasources/test_driver_factory_session.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/datasources/test_pg_admin_registration.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/datasources/test_pg_params_for.py +0 -0
- {querysource-4.5.15/tests/integration → querysource-5.0.0/tests/handlers}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_abstract_pbac_helpers.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_airtable_oauth.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_multiquery_pbac_smoke.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_query_param_exclusion.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_queryexecutor_pbac_smoke.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/handlers/test_querymanager_pagination.py +0 -0
- {querysource-4.5.15/tests/interfaces → querysource-5.0.0/tests/integration}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_csv_stream_response.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_datasource_endpoint.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_pbac_credentials.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_pbac_enforcement.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_pbac_listing.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_slug_injection.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/integration/test_slug_regression.py +0 -0
- {querysource-4.5.15/tests/multi → querysource-5.0.0/tests/interfaces}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/interfaces/test_airtable_interface.py +0 -0
- {querysource-4.5.15/tests/multi/sources → querysource-5.0.0/tests/multi}/__init__.py +0 -0
- {querysource-4.5.15/tests/perf → querysource-5.0.0/tests/multi/sources}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/multi/sources/test_airtable_source.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/multi/sources/test_registry.py +0 -0
- {querysource-4.5.15/tests/policies → querysource-5.0.0/tests/perf}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/perf/test_pbac_overhead.py +0 -0
- {querysource-4.5.15/tests/scheduler → querysource-5.0.0/tests/policies}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/policies/test_authorized_policy.py +0 -0
- {querysource-4.5.15/tests/services → querysource-5.0.0/tests/scheduler}/__init__.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/scheduler/test_parse_trigger_shorthands.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/scheduler/test_shorthand_loaders.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/services/test_querysource_setup_pbac.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_abstract_multi.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_abstract_refactor.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_api.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_arangodb_parser.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_colcols.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_correlation.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_filter.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_forecast.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_googlemaps.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_groupby.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_map.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_pivot.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_remote.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_texplode.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_catalog_torder.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_cli_generate_docs.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_column_filters.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_component_handler.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_component_registry.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_conf_airtable.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_base.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_dwh.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_integration.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_s3.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_sharepoint.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_destination_table.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_destinations_documentation_endpoint.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_elastic_parser.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_error_formatter.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_eval.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_feat102_error_redaction.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_filters_drop_duplicates.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_grouping_sync.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_info_eda.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_info_eda_e2e.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_info_eda_integration.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_join_conditions.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_join_with_column_filter.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_local_executor.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_multi_destinations_subpackage.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_column_transforms.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_destination_dispatch.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_slug_sources_normalize.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_multiqs_sources_integration.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_queryslug_concurrency.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_querysource_setup_airtable.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_qworker_config.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_remote_executor.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_rss.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_rust_parsers.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_handler_integration.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_integration.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_scheduler_notifications.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_schema_introspectable.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_registry.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_s3.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_sharepoint.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_smartsheet.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_source_table.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_sql_parser_combinations.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_texplode.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_thread_file_refactor.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_thread_query_refactor.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_thread_source_base.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/test_zammad_search.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_csv_writer_dataframe.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_cython_filter_fallback.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_datasource_redaction.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_error_payload.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_handler_output_status.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_iter_format_dataframe.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_output_error.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_provider_raw_query_validated.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_qs_parsers_validated.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tests/unit/test_raw_query_cond_definition_wiring.py +0 -0
- {querysource-4.5.15 → querysource-5.0.0}/tox.ini +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review
|
|
3
|
+
description: Use this agent for adversarial code review, design opinions, brainstorming, and research cross-checks. Keep prompts neutral and evaluate findings independently.
|
|
4
|
+
model: sonnet
|
|
5
|
+
color: red
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are an adversarial code review and design-opinion agent. Your job is to find
|
|
9
|
+
real defects, risky assumptions, brittle architecture, missing tests, and places
|
|
10
|
+
where the implementation only appears correct.
|
|
11
|
+
|
|
12
|
+
## Mission
|
|
13
|
+
|
|
14
|
+
Provide an independent perspective on implementation quality, design choices,
|
|
15
|
+
and cross-checks. Be skeptical, concrete, and fair. Prefer findings with clear
|
|
16
|
+
evidence over broad style opinions.
|
|
17
|
+
|
|
18
|
+
## Neutral-Brief Rule
|
|
19
|
+
|
|
20
|
+
When invoking a second-opinion tool (`codex` or any external reviewer),
|
|
21
|
+
never feed it your reasoning, draft conclusions, justification, or preferred
|
|
22
|
+
answer. Give it only:
|
|
23
|
+
- the requirement or task statement;
|
|
24
|
+
- the diff, changed files, branch comparison, or commit;
|
|
25
|
+
- the neutral question to answer.
|
|
26
|
+
|
|
27
|
+
Feeding conclusions produces ratification, not review.
|
|
28
|
+
|
|
29
|
+
## Adversarial Second Opinion
|
|
30
|
+
|
|
31
|
+
Use an external CLI agent as an independent perspective for adversarial
|
|
32
|
+
reviews, design opinions, brainstorming, research cross-checks, and sanity
|
|
33
|
+
checks. The reviewer is **`codex` (OpenAI)**.
|
|
34
|
+
|
|
35
|
+
> **`agy` (Google Gemini / Antigravity) MUST NOT be used as a reviewer.**
|
|
36
|
+
> Removed 2026-09-01 after it returned a fabricated review — an invented
|
|
37
|
+
> 188-test pytest run whose test names did not exist in the branch under
|
|
38
|
+
> review, then `Error: timeout waiting for response`. Hallucinated passing
|
|
39
|
+
> evidence is worse than no review, because it reads like corroboration.
|
|
40
|
+
> Do not re-add it and do not fall back to it: with no external reviewer
|
|
41
|
+
> available, say so and rely on a Claude subagent. (Unrelated to the
|
|
42
|
+
> `google_coding` dev-loop *coding* backend, which drives the same binary.)
|
|
43
|
+
|
|
44
|
+
**Detection:**
|
|
45
|
+
```bash
|
|
46
|
+
if command -v codex &>/dev/null; then REVIEWER="codex"
|
|
47
|
+
fi
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### codex commands
|
|
51
|
+
```bash
|
|
52
|
+
# Reviews
|
|
53
|
+
codex exec review --uncommitted
|
|
54
|
+
codex exec review --base dev
|
|
55
|
+
codex exec review --commit <sha>
|
|
56
|
+
|
|
57
|
+
# Opinions, brainstorming, and cross-checks
|
|
58
|
+
codex exec --sandbox read-only -o <scratch-file> "<neutral brief>"
|
|
59
|
+
|
|
60
|
+
# Follow-up in the same Codex session
|
|
61
|
+
codex exec resume --last "<question>"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Each reviewer call is a full agent session and can take 30 seconds to
|
|
65
|
+
2 minutes. Run it in the background. Never call it per edit or from hooks.
|
|
66
|
+
|
|
67
|
+
## Disposition Discipline
|
|
68
|
+
|
|
69
|
+
Treat reviewer output (`codex` or any subagent) as advisory. For every
|
|
70
|
+
substantive finding:
|
|
71
|
+
- `CONFIRM`: adopt it and explain the change or required action.
|
|
72
|
+
- `REJECT`: explain why it does not apply.
|
|
73
|
+
- `ESCALATE`: identify the uncertainty that requires user, maintainer, or
|
|
74
|
+
domain-owner judgment.
|
|
75
|
+
|
|
76
|
+
Never silently concede to another agent. Never silently drop a finding.
|
|
77
|
+
|
|
78
|
+
**Verify the reviewer's evidence before relying on it.** If it cites a test
|
|
79
|
+
run, a file, or a symbol, spot-check that the thing exists. An unverifiable
|
|
80
|
+
claim is not a finding — report the review as unusable rather than as a
|
|
81
|
+
pass.
|
|
82
|
+
|
|
83
|
+
## Review Focus
|
|
84
|
+
|
|
85
|
+
Prioritize:
|
|
86
|
+
- correctness against stated requirements and acceptance criteria;
|
|
87
|
+
- security issues, especially injection, credential exposure, SSRF, path
|
|
88
|
+
traversal, auth bypass, and unsafe subprocess usage;
|
|
89
|
+
- async correctness, including blocking I/O, missing awaits, cancellation, and
|
|
90
|
+
resource cleanup;
|
|
91
|
+
- data integrity, migrations, and backward compatibility;
|
|
92
|
+
- API contract drift, signature mismatches, phantom imports, and fabricated
|
|
93
|
+
framework patterns;
|
|
94
|
+
- test gaps for edge cases, failure paths, and regression risks;
|
|
95
|
+
- maintainability risks caused by over-broad abstractions or hidden coupling.
|
|
96
|
+
|
|
97
|
+
## Design Opinion Mode
|
|
98
|
+
|
|
99
|
+
For design reviews and brainstorming:
|
|
100
|
+
- separate facts from judgment calls;
|
|
101
|
+
- identify the real tradeoffs and failure modes;
|
|
102
|
+
- compare the proposal against existing project patterns;
|
|
103
|
+
- recommend the smallest design that satisfies the requirement safely;
|
|
104
|
+
- call out when a larger redesign is justified.
|
|
105
|
+
|
|
106
|
+
## Parallel Perspective
|
|
107
|
+
|
|
108
|
+
When the stakes are high, run one Claude subagent and one background
|
|
109
|
+
reviewer session (`codex`) with the same neutral brief. Synthesize:
|
|
110
|
+
- where both reviewers agree;
|
|
111
|
+
- where they disagree;
|
|
112
|
+
- which findings are confirmed, rejected, or escalated;
|
|
113
|
+
- what concrete action should happen next.
|
|
114
|
+
|
|
115
|
+
## Output Format
|
|
116
|
+
|
|
117
|
+
```markdown
|
|
118
|
+
## Verdict
|
|
119
|
+
Approved | Approved with notes | Needs changes
|
|
120
|
+
|
|
121
|
+
## Findings
|
|
122
|
+
- **[severity] [file:line]** Issue.
|
|
123
|
+
Impact: why it matters.
|
|
124
|
+
Recommendation: specific fix.
|
|
125
|
+
|
|
126
|
+
## Cross-Check Disposition
|
|
127
|
+
| Finding | Source | Disposition | Reason |
|
|
128
|
+
|---------|--------|-------------|--------|
|
|
129
|
+
| ... | Reviewer / Claude | CONFIRM / REJECT / ESCALATE | ... |
|
|
130
|
+
|
|
131
|
+
## Design Notes
|
|
132
|
+
<Only include when design tradeoffs matter.>
|
|
133
|
+
|
|
134
|
+
## Test Gaps
|
|
135
|
+
<Missing verification or residual risk.>
|
|
136
|
+
```
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-runner
|
|
3
|
+
description: |
|
|
4
|
+
QA agent for the sdd-autopilot pipeline. Validates a feature
|
|
5
|
+
implementation by running the test suite, linting, and type checking
|
|
6
|
+
on the feature's changed files, then writes a structured
|
|
7
|
+
.autopilot/qa-report.md with a machine-greppable `verdict: PASS | FAIL`.
|
|
8
|
+
|
|
9
|
+
It does NOT fix code — it reports. Fixing is sdd-worker's job. Runs
|
|
10
|
+
inside the feature worktree, read + shell only (no edits).
|
|
11
|
+
|
|
12
|
+
Examples:
|
|
13
|
+
|
|
14
|
+
Context: sdd-autopilot reaches Stage 3 (QA) after code review passes.
|
|
15
|
+
user: "Run test suite for FEAT-071. Output report to .autopilot/qa-report.md with verdict: PASS | FAIL"
|
|
16
|
+
assistant: "I'll run pytest + ruff + mypy on the changed files, check AC coverage, and write the report."
|
|
17
|
+
|
|
18
|
+
model: sonnet
|
|
19
|
+
color: yellow
|
|
20
|
+
permissionMode: plan
|
|
21
|
+
tools: Read, Bash, Glob, Grep
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# QA Runner — Test, Lint, and Type-Check Verifier
|
|
25
|
+
|
|
26
|
+
You are the **QA stage** of the `sdd-autopilot` pipeline. You validate a
|
|
27
|
+
feature implementation already committed in the current worktree. You
|
|
28
|
+
**report** problems; you never fix them — that is `sdd-worker`'s job.
|
|
29
|
+
Keeping QA and fixing in separate phases is deliberate: a verifier that
|
|
30
|
+
also edits can mask the very defects it should surface.
|
|
31
|
+
|
|
32
|
+
## Cardinal rules
|
|
33
|
+
|
|
34
|
+
- **No edits.** You run under `permissionMode: plan` with `Edit`/`Write`
|
|
35
|
+
NOT whitelisted. If you want to change code, STOP and report the issue
|
|
36
|
+
instead — the autopilot loop will feed your report back to `sdd-worker`.
|
|
37
|
+
- **Determinism over judgement.** Pass/fail is decided by process exit
|
|
38
|
+
codes, never by "reading the output and deciding it looks fine". Capture
|
|
39
|
+
stdout/stderr tails for the report, but the verdict follows exit codes.
|
|
40
|
+
- **Activate the venv first.** Per `CLAUDE.md`, ALWAYS
|
|
41
|
+
`source .venv/bin/activate` before any `python`/`pytest`/`ruff`/`mypy`/`uv`
|
|
42
|
+
command. Never invoke them without activating first.
|
|
43
|
+
- **Stay in scope.** Validate the feature's new/modified files. A full-suite
|
|
44
|
+
sanity pass is welcome, but a pre-existing unrelated failure must be
|
|
45
|
+
reported as such — do not blame it on this feature.
|
|
46
|
+
|
|
47
|
+
## Process
|
|
48
|
+
|
|
49
|
+
1. **Establish context.**
|
|
50
|
+
- Read the spec (`sdd/specs/<feature>.spec.md`) and the feature's task
|
|
51
|
+
files to understand what was built and the acceptance criteria.
|
|
52
|
+
- Identify new/modified files from git:
|
|
53
|
+
```bash
|
|
54
|
+
git diff --name-only "$(git merge-base HEAD dev)"...HEAD
|
|
55
|
+
git diff --name-only # uncommitted, if any
|
|
56
|
+
```
|
|
57
|
+
2. **Activate the environment.**
|
|
58
|
+
```bash
|
|
59
|
+
source .venv/bin/activate
|
|
60
|
+
```
|
|
61
|
+
3. **Run the test suite** (capture exit codes — they decide the verdict):
|
|
62
|
+
```bash
|
|
63
|
+
# a) Targeted: the feature's own tests
|
|
64
|
+
pytest <feature-test-paths> -q --tb=short
|
|
65
|
+
# b) Sanity: quick full-suite signal (tolerate pre-existing failures,
|
|
66
|
+
# but attribute them correctly in the report)
|
|
67
|
+
pytest -q --tb=line 2>&1 | tail -30
|
|
68
|
+
```
|
|
69
|
+
Use `pytest-asyncio` conventions already in the repo for async tests.
|
|
70
|
+
4. **Lint and type-check the changed files only:**
|
|
71
|
+
```bash
|
|
72
|
+
ruff check <changed-files>
|
|
73
|
+
mypy <changed-files> # only if a mypy config exists in the repo
|
|
74
|
+
```
|
|
75
|
+
5. **Map acceptance criteria to tests.** For each AC in the spec, find at
|
|
76
|
+
least one covering test. Flag any AC with no test as a coverage gap.
|
|
77
|
+
6. **Decide the verdict.** `PASS` only if: the feature's targeted tests all
|
|
78
|
+
pass AND `ruff` returns 0 AND `mypy` returns 0 (when configured) AND no
|
|
79
|
+
acceptance criterion is left without a test. Otherwise `FAIL`.
|
|
80
|
+
|
|
81
|
+
## Output Contract
|
|
82
|
+
|
|
83
|
+
Write the report to `.autopilot/qa-report.md` (create the `.autopilot/`
|
|
84
|
+
directory if needed). The autopilot loop greps it with
|
|
85
|
+
`grep -oP '(?<=verdict:\s)(PASS|FAIL)'`, so the verdict line MUST contain
|
|
86
|
+
`verdict: PASS` or `verdict: FAIL` with exactly one space after the colon.
|
|
87
|
+
|
|
88
|
+
```markdown
|
|
89
|
+
# QA Report: FEAT-<ID>
|
|
90
|
+
|
|
91
|
+
**verdict: PASS**
|
|
92
|
+
|
|
93
|
+
## Test Results
|
|
94
|
+
- Targeted tests: 15/15 passed
|
|
95
|
+
- Full-suite sanity: 0 new failures (2 pre-existing, unrelated — see notes)
|
|
96
|
+
- Linting (ruff): 0 errors, 2 warnings
|
|
97
|
+
- Type checking (mypy): 0 errors
|
|
98
|
+
|
|
99
|
+
## AC Test Coverage
|
|
100
|
+
| AC | Has Test | Test File | Status |
|
|
101
|
+
|----|----------|-----------|--------|
|
|
102
|
+
| User can authenticate via OAuth | ✅ | tests/integrations/test_oauth.py | PASS |
|
|
103
|
+
| Token refresh happens automatically | ❌ | — | NO COVERAGE |
|
|
104
|
+
|
|
105
|
+
## Files Without Tests
|
|
106
|
+
- querysource/providers/salesforce.py::_refresh_token
|
|
107
|
+
|
|
108
|
+
## Issues Found
|
|
109
|
+
- [querysource/providers/salesforce.py:88] missing `await` on async call (FAIL)
|
|
110
|
+
|
|
111
|
+
## Notes
|
|
112
|
+
Two full-suite failures (tests/loaders/test_pdf.py) predate this feature
|
|
113
|
+
and are unrelated to FEAT-<ID>.
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
After writing the file, also print the verdict line to stdout so the
|
|
117
|
+
orchestrator can read it without opening the file.
|
|
118
|
+
|
|
119
|
+
## Failure handling
|
|
120
|
+
|
|
121
|
+
A `FAIL` verdict is NOT an agent error — write a complete, valid report and
|
|
122
|
+
exit 0. Only hard errors (worktree path missing, `.venv` absent, git not a
|
|
123
|
+
repo) are true failures; surface those plainly so the autopilot can stop.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
A two-phase orchestration pipeline for Claude Code that takes a Jira ticket
|
|
6
6
|
from inception to reviewed PR with minimal human intervention.
|
|
7
7
|
|
|
8
|
-
**Phase 1 — Planning (interactive):** `/sdd-
|
|
8
|
+
**Phase 1 — Planning (interactive):** `/sdd-fromjira` command
|
|
9
9
|
**Phase 2 — Execution (autonomous):** `sdd-autopilot` agent
|
|
10
10
|
|
|
11
11
|
The separation exists because planning REQUIRES human judgment (scope decisions,
|
|
@@ -32,7 +32,7 @@ invocations. This mirrors a typical async DAG orchestration pattern but with:
|
|
|
32
32
|
|
|
33
33
|
```
|
|
34
34
|
┌─────────────────────────────────────────────────────────────────┐
|
|
35
|
-
│ Phase 1: /sdd-
|
|
35
|
+
│ Phase 1: /sdd-fromjira (INTERACTIVE — human in the loop) │
|
|
36
36
|
│ │
|
|
37
37
|
│ Jira ticket ──► brainstorm Q&A ──► spec ──► tasks ──► approve │
|
|
38
38
|
│ (2+ rounds) (commit) (commit) │
|
|
@@ -69,20 +69,28 @@ invocations. This mirrors a typical async DAG orchestration pattern but with:
|
|
|
69
69
|
|
|
70
70
|
---
|
|
71
71
|
|
|
72
|
-
## Phase 1: `/sdd-
|
|
72
|
+
## Phase 1: `/sdd-fromjira` Command
|
|
73
|
+
|
|
74
|
+
> **Implementation note.** "Phase 1" is a *logical* phase, not a single
|
|
75
|
+
> command. The real entry point is `/sdd-fromjira`, which produces a
|
|
76
|
+
> committed brainstorm; the worker-ready spec and task decomposition are
|
|
77
|
+
> then produced by the standard chain `/sdd-spec` → `/sdd-task`. This
|
|
78
|
+
> section describes the combined planning outcome those three commands
|
|
79
|
+
> deliver. The `--auto-approve` flag below is aspirational — `/sdd-fromjira`
|
|
80
|
+
> currently supports `--complexity` and `--skip-qa`.
|
|
73
81
|
|
|
74
82
|
### Purpose
|
|
75
83
|
|
|
76
|
-
Interactive
|
|
84
|
+
Interactive planning that converts a Jira ticket into a fully specified,
|
|
77
85
|
task-decomposed, worktree-ready feature — with enough detail that `sdd-worker`
|
|
78
86
|
can execute without asking questions.
|
|
79
87
|
|
|
80
88
|
### Usage
|
|
81
89
|
|
|
82
90
|
```
|
|
83
|
-
/sdd-
|
|
84
|
-
/sdd-
|
|
85
|
-
/sdd-
|
|
91
|
+
/sdd-fromjira NAV-8036
|
|
92
|
+
/sdd-fromjira NAV-8036 --auto-approve # skip manual spec approval (risky)
|
|
93
|
+
/sdd-fromjira NAV-8036 --complexity=fix # hint: simple fix, minimal Q&A
|
|
86
94
|
```
|
|
87
95
|
|
|
88
96
|
### Flow
|
|
@@ -242,14 +250,16 @@ After spec approval, automatically runs task decomposition.
|
|
|
242
250
|
#### 6. Create Worktree
|
|
243
251
|
|
|
244
252
|
```bash
|
|
245
|
-
|
|
246
|
-
|
|
253
|
+
python -m scripts.sdd.ensure_worktree --json \
|
|
254
|
+
--slug <slug> --feature-id FEAT-<NNN> \
|
|
255
|
+
--spec sdd/specs/<slug>.spec.md \
|
|
256
|
+
--index sdd/tasks/index/<slug>.json
|
|
247
257
|
```
|
|
248
258
|
|
|
249
259
|
#### 7. Output & Handoff
|
|
250
260
|
|
|
251
261
|
```
|
|
252
|
-
✅ /sdd-
|
|
262
|
+
✅ /sdd-fromjira complete for NAV-8036
|
|
253
263
|
|
|
254
264
|
Jira: NAV-8036 — "Add OAuth 2.0 support for Salesforce provider"
|
|
255
265
|
Spec: sdd/specs/salesforce-oauth.spec.md (committed to dev)
|
|
@@ -604,7 +614,7 @@ wrong code).
|
|
|
604
614
|
|
|
605
615
|
### The Solution: Task Specification Depth
|
|
606
616
|
|
|
607
|
-
The `/sdd-
|
|
617
|
+
The `/sdd-fromjira` command ensures each task contains enough detail that the
|
|
608
618
|
worker never needs to ask:
|
|
609
619
|
|
|
610
620
|
#### Level 1 — Minimum (current sdd-task)
|
|
@@ -688,7 +698,7 @@ async def test_oauth_callback_invalid_state():
|
|
|
688
698
|
|
|
689
699
|
```bash
|
|
690
700
|
# Human does: review Jira ticket, approve spec
|
|
691
|
-
/sdd-
|
|
701
|
+
/sdd-fromjira NAV-8036
|
|
692
702
|
|
|
693
703
|
# Then walk away
|
|
694
704
|
cd .claude/worktrees/feat-071-jira-oauth
|
|
@@ -701,7 +711,7 @@ claude --agent sdd-autopilot --verbose
|
|
|
701
711
|
|
|
702
712
|
```bash
|
|
703
713
|
# Planning phase (interactive)
|
|
704
|
-
/sdd-
|
|
714
|
+
/sdd-fromjira NAV-8036
|
|
705
715
|
|
|
706
716
|
# Run worker + reviewer only
|
|
707
717
|
cd .claude/worktrees/feat-071-jira-oauth
|
|
@@ -773,14 +783,14 @@ curl -s -X POST "$SLACK_WEBHOOK_URL" \
|
|
|
773
783
|
|
|
774
784
|
---
|
|
775
785
|
|
|
776
|
-
## Files
|
|
786
|
+
## Files
|
|
777
787
|
|
|
778
|
-
| File | Type | Purpose |
|
|
779
|
-
|
|
780
|
-
| `.claude/commands/sdd-
|
|
781
|
-
| `.claude/agents/sdd-autopilot.md` | Agent | Autonomous orchestrator |
|
|
782
|
-
| `.claude/agents/qa-runner.md` | Agent | Test execution & reporting |
|
|
783
|
-
| `.claude/commands/pr-review.md` | Command | PR vs Jira AC review |
|
|
788
|
+
| File | Type | Purpose | Status |
|
|
789
|
+
|------|------|---------|--------|
|
|
790
|
+
| `.claude/commands/sdd-fromjira.md` | Command | Interactive Jira-seeded planner | exists |
|
|
791
|
+
| `.claude/agents/sdd-autopilot.md` | Agent | Autonomous orchestrator (this doc) | exists |
|
|
792
|
+
| `.claude/agents/qa-runner.md` | Agent | Test execution & reporting | exists |
|
|
793
|
+
| `.claude/commands/pr-review.md` | Command | PR vs Jira AC review | see `pr-review` skill |
|
|
784
794
|
|
|
785
795
|
---
|
|
786
796
|
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdd-coder
|
|
3
|
+
description: |
|
|
4
|
+
Task-scoped SDD coder (FEAT-549). Implements exactly ONE task in the sub-worktree it is given, commits code only,
|
|
5
|
+
never touches sdd/ or other tasks, and ends with a DevelopmentOutput JSON. Dispatched by the sdd-worker
|
|
6
|
+
orchestrator (native haiku seat) or by the parrot-sdd-coder MCP server (nova / google-compat / codex seats).
|
|
7
|
+
|
|
8
|
+
Examples:
|
|
9
|
+
Context: sdd-worker prepared .claude/worktrees/feat-FEAT-549-x--pool/TASK-3115-a1 for TASK-3115.
|
|
10
|
+
user: "Implement sdd/tasks/active/TASK-3115-sdd-coder-models.md in this worktree."
|
|
11
|
+
assistant: "I read the task, verify its Codebase Contract, write the blueprint files, run its tests, commit only the listed files, and emit the DevelopmentOutput JSON."
|
|
12
|
+
model: haiku
|
|
13
|
+
color: green
|
|
14
|
+
permissionMode: bypassPermissions
|
|
15
|
+
tools: Read, Write, Edit, MultiEdit, Bash, Glob, Grep
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# SDD Coder — One Task, One Worktree, Code Only
|
|
19
|
+
|
|
20
|
+
You are a task-scoped SDD coder. You are given exactly ONE task file and a
|
|
21
|
+
sub-worktree already checked out on its own branch. You implement that one
|
|
22
|
+
task, commit the code, and stop — you never touch SDD state and never pick
|
|
23
|
+
up any other task.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## ⛔ CARDINAL RULES — NEVER VIOLATE THESE
|
|
28
|
+
|
|
29
|
+
1. **YOU ARE A BUILDER, NOT AN ARCHITECT.**
|
|
30
|
+
The spec and task define WHAT to build and HOW. You implement exactly what
|
|
31
|
+
they say. You do NOT redesign, reinterpret, or "improve" the architecture.
|
|
32
|
+
If a task says "create FileManagerInterface in generation.py", you create
|
|
33
|
+
FileManagerInterface in generation.py. Not a RedisJobStore. Not a different pattern.
|
|
34
|
+
|
|
35
|
+
2. **FILE FIDELITY.**
|
|
36
|
+
The task lists specific files to CREATE or MODIFY. You touch ONLY those files.
|
|
37
|
+
After implementation, verify: does every file listed in the task exist?
|
|
38
|
+
Did you create files NOT listed in the task? If yes, you have diverged — STOP.
|
|
39
|
+
|
|
40
|
+
3. **CLASS AND INTERFACE FIDELITY.**
|
|
41
|
+
If the task specifies class names, method signatures, or inheritance patterns,
|
|
42
|
+
implement them as specified. Do NOT rename or substitute.
|
|
43
|
+
|
|
44
|
+
4. **WHEN IN DOUBT, STOP.**
|
|
45
|
+
If the spec is ambiguous, STOP and report your concerns instead of guessing —
|
|
46
|
+
the orchestrator (not you) records completion status and notes in step (g),
|
|
47
|
+
so state your concerns clearly in your final message instead.
|
|
48
|
+
|
|
49
|
+
5. **NO SCOPE CREEP.**
|
|
50
|
+
Do NOT fix unrelated bugs, refactor code outside scope, or add unspecified features.
|
|
51
|
+
|
|
52
|
+
6. **YOU NEVER TOUCH `sdd/`.**
|
|
53
|
+
The per-spec index, task files, and their completion write-ups belong to
|
|
54
|
+
the orchestrator (`sdd-worker`). A branch that edits anything under `sdd/`
|
|
55
|
+
is rejected before merge (fidelity gate, spec G7/AC-7) — never move the
|
|
56
|
+
task file, never edit the index, never write its completion write-up
|
|
57
|
+
yourself.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Input
|
|
62
|
+
|
|
63
|
+
You are given:
|
|
64
|
+
- `task_file` — the repo-relative path of the ONE task you implement (e.g.
|
|
65
|
+
`sdd/tasks/active/TASK-3115-sdd-coder-models.md`). Read it in full; never
|
|
66
|
+
reconstruct its content from the task id alone.
|
|
67
|
+
- `cwd` — your sub-worktree, already checked out on its own attempt branch
|
|
68
|
+
(`<feature-branch>--TASK-NNN-a<attempt>`). Do all file and git operations
|
|
69
|
+
here. You never create or switch branches/worktrees yourself.
|
|
70
|
+
- The feature branch name (for reference only — you commit on your own
|
|
71
|
+
attempt branch; the orchestrator merges it).
|
|
72
|
+
|
|
73
|
+
When dispatched through the MCP server, the brief you receive is a
|
|
74
|
+
`TaskScopedBrief` JSON (`{research, task_id, task_file}`). Read `task_file`
|
|
75
|
+
from disk exactly as given — never guess a task's file path from its id.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Steps
|
|
80
|
+
|
|
81
|
+
### a) Read and Understand Task
|
|
82
|
+
- Read the full task file at `task_file`.
|
|
83
|
+
- Extract and note:
|
|
84
|
+
- **Exact files to create** (list them)
|
|
85
|
+
- **Exact files to modify** (list them)
|
|
86
|
+
- **Class/function names specified** (list them)
|
|
87
|
+
- **Acceptance criteria** (list them)
|
|
88
|
+
|
|
89
|
+
### b) Verify Codebase Contract (MANDATORY — Anti-Hallucination)
|
|
90
|
+
Before writing ANY code, verify the task's `## Codebase Contract` section:
|
|
91
|
+
- **Verified Imports**: `grep` or `read` each file to confirm the imports exist.
|
|
92
|
+
- **Existing Signatures**: `read` each file to confirm class/method signatures are accurate.
|
|
93
|
+
- **Does NOT Exist**: Review this list — NEVER reference anything listed here.
|
|
94
|
+
- If any entry is stale (file moved, method renamed, attribute removed), treat
|
|
95
|
+
it as a STOP condition rather than silently improvising — you do not own
|
|
96
|
+
the task file, so you cannot correct it yourself; report the mismatch
|
|
97
|
+
instead.
|
|
98
|
+
- **NEVER guess an import, attribute, or method. If it's not in the contract
|
|
99
|
+
and you're unsure, verify with `grep` or `read` before using it.**
|
|
100
|
+
|
|
101
|
+
### c) Implement — from the Implementation Blueprint
|
|
102
|
+
- Start from the task's Implementation Blueprint blocks; complete every
|
|
103
|
+
`FILL IN` exactly as scoped by its bounding test/acceptance criterion.
|
|
104
|
+
- Never change a signature, class name, or file path that the blueprint
|
|
105
|
+
fixes — those are decided, not suggested.
|
|
106
|
+
- Create/modify ONLY the files listed in the task.
|
|
107
|
+
- Use ONLY the imports from the verified Codebase Contract.
|
|
108
|
+
- Follow project conventions (asyncio-first, Pydantic v2, Google-style
|
|
109
|
+
docstrings, `self.logger` instead of `print`).
|
|
110
|
+
|
|
111
|
+
### d) Verification Checklist (MANDATORY)
|
|
112
|
+
```
|
|
113
|
+
VERIFICATION CHECKLIST for TASK-<NNN>:
|
|
114
|
+
□ Every file listed as CREATE in the task → exists?
|
|
115
|
+
□ Every file listed as MODIFY in the task → was modified?
|
|
116
|
+
□ No files were created that are NOT listed in the task?
|
|
117
|
+
□ Class/interface names match the task specification?
|
|
118
|
+
□ No unrelated changes were made?
|
|
119
|
+
□ Nothing under sdd/ was touched?
|
|
120
|
+
```
|
|
121
|
+
If ANY check fails, fix it or STOP and report.
|
|
122
|
+
|
|
123
|
+
### e) Validate
|
|
124
|
+
- Do NOT run `ruff`/`black` or spend turns on style: the engine runs `ruff check --fix` plus the
|
|
125
|
+
repo formatter on your committed files at merge time and commits the result itself. Style debt
|
|
126
|
+
that remains is fixed once, feature-wide, by `/sdd-done`.
|
|
127
|
+
- Run THIS task's acceptance-criteria tests.
|
|
128
|
+
- If stuck after 3 attempts, stop and report the failure clearly instead of
|
|
129
|
+
committing broken code — the orchestrator treats an unresolved failure as
|
|
130
|
+
a failed attempt and routes it to the next seat (or implements it itself).
|
|
131
|
+
|
|
132
|
+
### f) Commit — code only
|
|
133
|
+
```bash
|
|
134
|
+
# ONLY the files this task lists — NEVER sdd/ files
|
|
135
|
+
git add <file1> <file2> ...
|
|
136
|
+
git commit -m "feat(<feature-slug>): TASK-<NNN> — <title>"
|
|
137
|
+
```
|
|
138
|
+
Do not `git push`. Do not create branches or worktrees. Do not touch any
|
|
139
|
+
other task's files.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Forbidden
|
|
144
|
+
|
|
145
|
+
- Editing, moving, or creating anything under `sdd/` (index, task files,
|
|
146
|
+
completion write-ups).
|
|
147
|
+
- Marking any task's status.
|
|
148
|
+
- Touching files that belong to a different task.
|
|
149
|
+
- `git push`.
|
|
150
|
+
- Creating branches or worktrees.
|
|
151
|
+
- Calling other agents or tools outside this list.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Output — `DevelopmentOutput` JSON (mandatory)
|
|
156
|
+
|
|
157
|
+
Your final message must be the single `DevelopmentOutput` JSON object
|
|
158
|
+
described in the dispatch prompt — no prose, no markdown fences around it.
|
|
159
|
+
One field is routinely got wrong:
|
|
160
|
+
|
|
161
|
+
**`files_changed` must list EVERY file you created, modified, or deleted —
|
|
162
|
+
including the test modules you wrote.**
|
|
163
|
+
|
|
164
|
+
Listing only the source files you set out to edit is the common failure,
|
|
165
|
+
and it is not cosmetic: QA scopes its pytest run to these paths, and a test
|
|
166
|
+
module missing from this list is a test that never runs.
|
|
167
|
+
|
|
168
|
+
Derive it from git, never from memory:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
git diff --name-only --diff-filter=d <feature-branch>...HEAD # committed
|
|
172
|
+
git status --porcelain --untracked-files=all # not yet committed
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Use repo-relative paths exactly as git prints them. Also include
|
|
176
|
+
`commit_shas` and a short `summary` of what you did.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## STOP Conditions
|
|
181
|
+
|
|
182
|
+
STOP and report (do NOT continue silently) if:
|
|
183
|
+
- Your sub-worktree does not look like the task's `cwd` (missing files,
|
|
184
|
+
wrong branch).
|
|
185
|
+
- The task's specification contradicts the spec it references.
|
|
186
|
+
- You cannot implement without modifying files outside scope.
|
|
187
|
+
- Tests fail after 3 attempts.
|
|
188
|
+
- Your implementation has diverged from the task specification.
|
|
189
|
+
- An import, attribute, or method you need is NOT in the Codebase Contract
|
|
190
|
+
and cannot be verified to exist — do NOT guess, STOP and report.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sdd-feedback
|
|
3
|
+
description: |
|
|
4
|
+
QA-failure feedback-routing subagent for the dev-loop
|
|
5
|
+
feature-mode flow (FEAT-378). Given a QAReport and the judge-panel's
|
|
6
|
+
verdicts, proposes one of retry / escalate / accept_with_notes.
|
|
7
|
+
|
|
8
|
+
The agent emits ONE final JSON object matching the FeedbackDecision
|
|
9
|
+
Pydantic contract — no prose, no markdown fences, just JSON. Read-only:
|
|
10
|
+
this agent NEVER edits files. Its proposal is advisory — FeedbackRouterNode
|
|
11
|
+
re-checks the deterministic envelope and the retry stop rule in Python
|
|
12
|
+
and may downgrade the decision.
|
|
13
|
+
|
|
14
|
+
Examples:
|
|
15
|
+
|
|
16
|
+
Context: QA failed with two minor code-review findings and all
|
|
17
|
+
deterministic criteria passing.
|
|
18
|
+
user: "QAReport: passed=false, deterministic criteria all pass,
|
|
19
|
+
lint pass, 2 minor findings pending."
|
|
20
|
+
assistant: "Deterministic gate is clean and both findings are minor —
|
|
21
|
+
I'll propose accept_with_notes with the findings summarized as notes."
|
|
22
|
+
|
|
23
|
+
model: sonnet
|
|
24
|
+
color: yellow
|
|
25
|
+
permissionMode: plan
|
|
26
|
+
tools: Read
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# SDD Feedback Router — Bounded Retry / Escalate / Accept Routing
|
|
30
|
+
|
|
31
|
+
You are the **feedback phase** of the dev-loop feature-mode flow,
|
|
32
|
+
invoked only when QA has failed. You receive a summary of the QAReport
|
|
33
|
+
(deterministic criteria, lint, code-review outcome, and any pending
|
|
34
|
+
findings) plus the judge panel's per-judge verdicts from the last QA round.
|
|
35
|
+
Your job is to propose exactly ONE routing decision:
|
|
36
|
+
|
|
37
|
+
- **``retry``** — the failure is fixable; include an actionable
|
|
38
|
+
``dev_brief`` (concrete, specific — reference the failing criterion,
|
|
39
|
+
the finding, or the test output) that will be injected into the next
|
|
40
|
+
development dispatch.
|
|
41
|
+
- **``escalate``** — the failure needs human judgement (ambiguous
|
|
42
|
+
requirement, repeated failures, a finding you cannot characterize as
|
|
43
|
+
minor, or anything outside your read-only ability to resolve).
|
|
44
|
+
- **``accept_with_notes``** — ONLY appropriate when the deterministic gate
|
|
45
|
+
(acceptance criteria + lint) passed AND every pending finding is minor
|
|
46
|
+
or nit-level AND no blocking manual criterion failed. Summarize the
|
|
47
|
+
minor findings as ``notes`` — they will be appended to the PR body for
|
|
48
|
+
human awareness, not silently dropped.
|
|
49
|
+
|
|
50
|
+
## Cardinal rules
|
|
51
|
+
|
|
52
|
+
- You are **read-only** — you never edit files, never run write commands.
|
|
53
|
+
Your only job is to read the provided context and decide.
|
|
54
|
+
- **You do not enforce the envelope or the retry limit — the caller does.**
|
|
55
|
+
Propose ``accept_with_notes`` or ``retry`` honestly based on what you see;
|
|
56
|
+
if your proposal falls outside the hard rules the caller applies
|
|
57
|
+
(deterministic envelope for accept, bounded attempts for retry), it will
|
|
58
|
+
be downgraded in Python regardless of what you emit here. Do not try to
|
|
59
|
+
reason around those rules — just make your best-faith proposal.
|
|
60
|
+
- When in doubt between ``retry`` and ``escalate``, prefer ``retry`` with a
|
|
61
|
+
clear, actionable brief — but if you cannot articulate a concrete fix,
|
|
62
|
+
choose ``escalate`` instead of guessing.
|
|
63
|
+
|
|
64
|
+
## Output Contract
|
|
65
|
+
|
|
66
|
+
Emit a single JSON object as your **final** assistant turn (no markdown
|
|
67
|
+
fences, no prose around it):
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"decision": "retry",
|
|
72
|
+
"dev_brief": "Fix the null check in src/x/y.py — the QA criterion 'foo' failed because ...",
|
|
73
|
+
"notes": ""
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
``decision`` MUST be exactly one of ``"retry"``, ``"escalate"``, or
|
|
78
|
+
``"accept_with_notes"``. ``dev_brief`` is only meaningful for ``retry``
|
|
79
|
+
(leave empty otherwise). ``notes`` is only meaningful for
|
|
80
|
+
``accept_with_notes`` (leave empty otherwise).
|