synth-ai 0.22.0.dev663__tar.gz → 0.22.1.dev668__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.
- {synth_ai-0.22.0.dev663/synth_ai.egg-info → synth_ai-0.22.1.dev668}/PKG-INFO +3 -3
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/README.md +2 -2
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/openapi/index-v1.json +325 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/pyproject.toml +1 -1
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/client.py +90 -1
- synth_ai-0.22.1.dev668/synth_ai/sdk/index/rights.py +65 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668/synth_ai.egg-info}/PKG-INFO +3 -3
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai.egg-info/SOURCES.txt +1 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/LICENSE +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/MANIFEST.in +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/openapi/messaging-v1.json +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/openapi/research-v1.json +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/setup.cfg +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/setup.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/README.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/__main__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/AGENTS.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/README.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/__main__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/index.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/main.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/research.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/research_environments.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/research_image_releases.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/cli/research_projects.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/client.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/README.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/auth/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/auth/credentials.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/contracts/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/contracts/json_value.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/contracts/pagination.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/errors.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/http/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/http/async_transport.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/http/request.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/http/retry.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/http/streaming.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/http/transport.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/research/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/utils/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/utils/env.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/utils/log_filter.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/utils/paths.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/core/utils/urls.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/README.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/__main__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/objective_tools.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/registry.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/request_models.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/server.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/approvals.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/artifacts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/datasets.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/environments.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/exports.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/factories.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/factory_results.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/files.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/image_releases.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/index.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/index_qa.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/integrations.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/intern_program.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/local_files.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/logs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/models.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/outputs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/policy_schemas.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/progress.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/project_data.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/projects.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/prs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/readiness.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/repos.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/research_intern.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/resources.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/runs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/trained_models.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/usage.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/visuals.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/mcp/research/tools/workspace_inputs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/pools.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/py.typed +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/README.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/AGENT_SETUP_PROMPT.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/README.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/agent_policy.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/artifacts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/catalog.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/classification.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/contracts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/contributions.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/errors.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/intake.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/lifecycle.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/manifest.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/oauth.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/package.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/public.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/public_search.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/qa.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/qa_checks.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/qa_preflight.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/qa_reviews.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/research/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/research/build.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/research/capture.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/research/contracts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/research/files.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/research/release.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/research_intake.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/retry.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/scope_errors.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/scopes.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/search.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/submission.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/timeouts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/transfer.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/upload_session.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/usage_accounting.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/value.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/index/wallet_search.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/messaging/README.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/messaging/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/messaging/client.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/messaging/contracts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/optimizers/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/optimizers/client.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/optimizers/contracts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/pagination.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/_internal/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/_internal/crypto.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/_internal/env.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/_internal/urls.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/account.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/advanced.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/advanced_factories.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/advanced_swarms.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/artifacts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/auth.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/client.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/container_pools/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/container_pools/api.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/container_pools/contracts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/container_pools/operations.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/container_pools/packaging.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/_activity_wire.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/_environment_wire.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/_transcript_wire.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/_wire.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/activity.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/activity_items.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/actor_images.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/billing.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/canonical_usage.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/checkpoints.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/cloud_deployment_claims.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/cloud_deployments.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/common.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/dataset_revisions.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/deliveries.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/dev_environment_evidence.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/economics.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/environment_manifest.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/environments.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/evidence.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/factories.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/factory_evidence.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/factory_lenses.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/factory_operations.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/factory_role_receipts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/failure.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/image_releases.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/intern_blockers.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/intern_grants.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/intern_program.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/intern_resources.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/intern_usage.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/limit_evidence.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/local_execution_profile.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/operator_evidence.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/project.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/project_data.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/project_runtime.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/project_workspace.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/project_workspace_evidence.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/projects.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/promotions.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/research_intern.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/resource_settlement.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/run_authority.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/run_control.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/run_diagnostics.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/run_events.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/run_execution.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/run_launch.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/run_observability.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/run_state.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/run_timeline.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/runtime_image.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/runtime_intent.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/runtime_stream.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/runtime_stream_snapshot.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/scientific_integrity.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_actor_models.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_actor_policy_data.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_agent_harnesses.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_agent_kinds.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_agent_models.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_branching.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_credential_providers.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_environment_kinds.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_evidence_obligations.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_funding_sources.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_horizons.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_host_kinds.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_inference_providers.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_network_topology.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_providers.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_resource_kinds.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_roles.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_run_policy.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_runbooks.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_runnable_project.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_runtime_kinds.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_tool_providers.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/smr_work_modes.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/status.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/swarm_rollouts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/swarms.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/tag.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/traces.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/transcript.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/types.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/usage.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/visuals.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/wire_models.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/wire_models_README.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/work_products.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/contracts/workspaces.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/economics.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/efforts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/environments.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/errors.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/events.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/experiments.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/facade.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/factories.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/factory_storage.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/image_releases.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/intern_blockers.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/intern_program.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/knowledge.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/models.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/operations.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/project_data.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/project_deliveries.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/project_workspaces.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/projects.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/public.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/readouts.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/research_intern.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/secrets.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/README.md +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/_base.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/_client_helpers.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/_run_authority_mixin.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/approvals.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/billing.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/client.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/cloud_deployments.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/config.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/cost.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/datasets.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/dev_environments.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/environments.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/exports.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/factories.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/factory_evidence.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/files.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/github.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/image_releases.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/images.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/logs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/models.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/outputs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/progress.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/project.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/projects.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/prs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/readiness.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/repositories.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/runs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/secrets.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/setup.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/tag.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/trained_models.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/transport.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/usage.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/work_products.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/session/workspace_inputs.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/surface_parity.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/swarms.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/traces.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/transport/__init__.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/transport/http.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/transport/pagination.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/version.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/visuals.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai/sdk/research/wiki.py +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai.egg-info/dependency_links.txt +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai.egg-info/entry_points.txt +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai.egg-info/requires.txt +0 -0
- {synth_ai-0.22.0.dev663 → synth_ai-0.22.1.dev668}/synth_ai.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: synth-ai
|
|
3
|
-
Version: 0.22.
|
|
3
|
+
Version: 0.22.1.dev668
|
|
4
4
|
Summary: Python SDK, CLI and MCP servers for Synth Index search and Swarms
|
|
5
5
|
Author-email: Synth AI <josh@usesynth.ai>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -30,9 +30,9 @@ Dynamic: license-file
|
|
|
30
30
|
|
|
31
31
|
# Synth AI SDK
|
|
32
32
|
|
|
33
|
-
<!-- CI release pins: PyPI-0.22.
|
|
33
|
+
<!-- CI release pins: PyPI-0.22.1-orange synth-ai==0.22.1 -->
|
|
34
34
|
|
|
35
|
-
> 0.22.
|
|
35
|
+
> The 0.22.1 development candidate completes Index v0.2 client coverage for revision rights and research corrections. Stable 0.22.0 remains published.
|
|
36
36
|
|
|
37
37
|
[](https://pypi.org/project/synth-ai/)
|
|
38
38
|
[](https://pypi.org/project/synth-ai/)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Synth AI SDK
|
|
2
2
|
|
|
3
|
-
<!-- CI release pins: PyPI-0.22.
|
|
3
|
+
<!-- CI release pins: PyPI-0.22.1-orange synth-ai==0.22.1 -->
|
|
4
4
|
|
|
5
|
-
> 0.22.
|
|
5
|
+
> The 0.22.1 development candidate completes Index v0.2 client coverage for revision rights and research corrections. Stable 0.22.0 remains published.
|
|
6
6
|
|
|
7
7
|
[](https://pypi.org/project/synth-ai/)
|
|
8
8
|
[](https://pypi.org/project/synth-ai/)
|
|
@@ -7756,6 +7756,164 @@
|
|
|
7756
7756
|
"title": "RewardReverseSpec",
|
|
7757
7757
|
"type": "object"
|
|
7758
7758
|
},
|
|
7759
|
+
"RightsAttestationSpec": {
|
|
7760
|
+
"additionalProperties": false,
|
|
7761
|
+
"description": "Rights owner's exact claim; every digest must match the sealed revision.",
|
|
7762
|
+
"properties": {
|
|
7763
|
+
"descriptor_digest": {
|
|
7764
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
7765
|
+
"title": "Descriptor Digest",
|
|
7766
|
+
"type": "string"
|
|
7767
|
+
},
|
|
7768
|
+
"licenses": {
|
|
7769
|
+
"items": {
|
|
7770
|
+
"maxLength": 256,
|
|
7771
|
+
"minLength": 1,
|
|
7772
|
+
"type": "string"
|
|
7773
|
+
},
|
|
7774
|
+
"maxItems": 64,
|
|
7775
|
+
"minItems": 1,
|
|
7776
|
+
"title": "Licenses",
|
|
7777
|
+
"type": "array"
|
|
7778
|
+
},
|
|
7779
|
+
"manifest_digest": {
|
|
7780
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
7781
|
+
"title": "Manifest Digest",
|
|
7782
|
+
"type": "string"
|
|
7783
|
+
},
|
|
7784
|
+
"notices_digest": {
|
|
7785
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
7786
|
+
"title": "Notices Digest",
|
|
7787
|
+
"type": "string"
|
|
7788
|
+
},
|
|
7789
|
+
"rights_decision_ref": {
|
|
7790
|
+
"maxLength": 512,
|
|
7791
|
+
"minLength": 1,
|
|
7792
|
+
"title": "Rights Decision Ref",
|
|
7793
|
+
"type": "string"
|
|
7794
|
+
}
|
|
7795
|
+
},
|
|
7796
|
+
"required": [
|
|
7797
|
+
"manifest_digest",
|
|
7798
|
+
"descriptor_digest",
|
|
7799
|
+
"rights_decision_ref",
|
|
7800
|
+
"licenses",
|
|
7801
|
+
"notices_digest"
|
|
7802
|
+
],
|
|
7803
|
+
"title": "RightsAttestationSpec",
|
|
7804
|
+
"type": "object"
|
|
7805
|
+
},
|
|
7806
|
+
"RightsAttestationView": {
|
|
7807
|
+
"additionalProperties": false,
|
|
7808
|
+
"properties": {
|
|
7809
|
+
"attested_at": {
|
|
7810
|
+
"format": "date-time",
|
|
7811
|
+
"title": "Attested At",
|
|
7812
|
+
"type": "string"
|
|
7813
|
+
},
|
|
7814
|
+
"attester_org_id": {
|
|
7815
|
+
"anyOf": [
|
|
7816
|
+
{
|
|
7817
|
+
"format": "uuid",
|
|
7818
|
+
"type": "string"
|
|
7819
|
+
},
|
|
7820
|
+
{
|
|
7821
|
+
"type": "null"
|
|
7822
|
+
}
|
|
7823
|
+
],
|
|
7824
|
+
"title": "Attester Org Id"
|
|
7825
|
+
},
|
|
7826
|
+
"attester_user_id": {
|
|
7827
|
+
"format": "uuid",
|
|
7828
|
+
"title": "Attester User Id",
|
|
7829
|
+
"type": "string"
|
|
7830
|
+
},
|
|
7831
|
+
"authority": {
|
|
7832
|
+
"$ref": "#/components/schemas/RightsAuthority"
|
|
7833
|
+
},
|
|
7834
|
+
"descriptor_digest": {
|
|
7835
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
7836
|
+
"title": "Descriptor Digest",
|
|
7837
|
+
"type": "string"
|
|
7838
|
+
},
|
|
7839
|
+
"licenses": {
|
|
7840
|
+
"items": {
|
|
7841
|
+
"maxLength": 256,
|
|
7842
|
+
"minLength": 1,
|
|
7843
|
+
"type": "string"
|
|
7844
|
+
},
|
|
7845
|
+
"title": "Licenses",
|
|
7846
|
+
"type": "array"
|
|
7847
|
+
},
|
|
7848
|
+
"manifest_digest": {
|
|
7849
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
7850
|
+
"title": "Manifest Digest",
|
|
7851
|
+
"type": "string"
|
|
7852
|
+
},
|
|
7853
|
+
"notices_digest": {
|
|
7854
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
7855
|
+
"title": "Notices Digest",
|
|
7856
|
+
"type": "string"
|
|
7857
|
+
},
|
|
7858
|
+
"queue": {
|
|
7859
|
+
"anyOf": [
|
|
7860
|
+
{
|
|
7861
|
+
"$ref": "#/components/schemas/RightsQueue"
|
|
7862
|
+
},
|
|
7863
|
+
{
|
|
7864
|
+
"type": "null"
|
|
7865
|
+
}
|
|
7866
|
+
]
|
|
7867
|
+
},
|
|
7868
|
+
"revision_id": {
|
|
7869
|
+
"title": "Revision Id",
|
|
7870
|
+
"type": "string"
|
|
7871
|
+
},
|
|
7872
|
+
"rights_decision_ref": {
|
|
7873
|
+
"maxLength": 512,
|
|
7874
|
+
"minLength": 1,
|
|
7875
|
+
"title": "Rights Decision Ref",
|
|
7876
|
+
"type": "string"
|
|
7877
|
+
},
|
|
7878
|
+
"schema_version": {
|
|
7879
|
+
"default": "research-rights-attestation-v1",
|
|
7880
|
+
"title": "Schema Version",
|
|
7881
|
+
"type": "string"
|
|
7882
|
+
}
|
|
7883
|
+
},
|
|
7884
|
+
"required": [
|
|
7885
|
+
"revision_id",
|
|
7886
|
+
"authority",
|
|
7887
|
+
"queue",
|
|
7888
|
+
"attester_user_id",
|
|
7889
|
+
"attester_org_id",
|
|
7890
|
+
"manifest_digest",
|
|
7891
|
+
"descriptor_digest",
|
|
7892
|
+
"rights_decision_ref",
|
|
7893
|
+
"licenses",
|
|
7894
|
+
"notices_digest",
|
|
7895
|
+
"attested_at"
|
|
7896
|
+
],
|
|
7897
|
+
"title": "RightsAttestationView",
|
|
7898
|
+
"type": "object"
|
|
7899
|
+
},
|
|
7900
|
+
"RightsAuthority": {
|
|
7901
|
+
"description": "Who may attest; mirrors ``index_rights_attestations.authority`` (SYN-3437).\n\nSynth-origin work is attested by the queue rights owner. Any other origin is\nattested by an OWNER/ADMIN of the contributing org, who holds the rights.",
|
|
7902
|
+
"enum": [
|
|
7903
|
+
"queue_rights_owner",
|
|
7904
|
+
"contributing_org_admin"
|
|
7905
|
+
],
|
|
7906
|
+
"title": "RightsAuthority",
|
|
7907
|
+
"type": "string"
|
|
7908
|
+
},
|
|
7909
|
+
"RightsQueue": {
|
|
7910
|
+
"description": "Queues whose owner may attest rights; mirrors ``index_rights_owners.queue``.",
|
|
7911
|
+
"enum": [
|
|
7912
|
+
"index-corpus-qa"
|
|
7913
|
+
],
|
|
7914
|
+
"title": "RightsQueue",
|
|
7915
|
+
"type": "string"
|
|
7916
|
+
},
|
|
7759
7917
|
"RunPreflightSpec": {
|
|
7760
7918
|
"additionalProperties": false,
|
|
7761
7919
|
"properties": {
|
|
@@ -11958,6 +12116,109 @@
|
|
|
11958
12116
|
]
|
|
11959
12117
|
}
|
|
11960
12118
|
},
|
|
12119
|
+
"/api/v1/index/contributions/{contribution_id}/revisions/{revision_id}/research-registration": {
|
|
12120
|
+
"post": {
|
|
12121
|
+
"description": "Bind a resealed export bundle to a research correction child draft.",
|
|
12122
|
+
"operationId": "index.contributions.research.correction_registration",
|
|
12123
|
+
"parameters": [
|
|
12124
|
+
{
|
|
12125
|
+
"in": "path",
|
|
12126
|
+
"name": "contribution_id",
|
|
12127
|
+
"required": true,
|
|
12128
|
+
"schema": {
|
|
12129
|
+
"maxLength": 128,
|
|
12130
|
+
"minLength": 1,
|
|
12131
|
+
"title": "Contribution Id",
|
|
12132
|
+
"type": "string"
|
|
12133
|
+
}
|
|
12134
|
+
},
|
|
12135
|
+
{
|
|
12136
|
+
"in": "path",
|
|
12137
|
+
"name": "revision_id",
|
|
12138
|
+
"required": true,
|
|
12139
|
+
"schema": {
|
|
12140
|
+
"maxLength": 128,
|
|
12141
|
+
"minLength": 1,
|
|
12142
|
+
"title": "Revision Id",
|
|
12143
|
+
"type": "string"
|
|
12144
|
+
}
|
|
12145
|
+
},
|
|
12146
|
+
{
|
|
12147
|
+
"in": "header",
|
|
12148
|
+
"name": "Idempotency-Key",
|
|
12149
|
+
"required": true,
|
|
12150
|
+
"schema": {
|
|
12151
|
+
"maxLength": 128,
|
|
12152
|
+
"minLength": 1,
|
|
12153
|
+
"pattern": "^[a-zA-Z0-9_.-]+$",
|
|
12154
|
+
"title": "Idempotency-Key",
|
|
12155
|
+
"type": "string"
|
|
12156
|
+
}
|
|
12157
|
+
},
|
|
12158
|
+
{
|
|
12159
|
+
"in": "header",
|
|
12160
|
+
"name": "Synth-Acceptance-Context",
|
|
12161
|
+
"required": false,
|
|
12162
|
+
"schema": {
|
|
12163
|
+
"anyOf": [
|
|
12164
|
+
{
|
|
12165
|
+
"type": "string"
|
|
12166
|
+
},
|
|
12167
|
+
{
|
|
12168
|
+
"type": "null"
|
|
12169
|
+
}
|
|
12170
|
+
],
|
|
12171
|
+
"title": "Synth-Acceptance-Context"
|
|
12172
|
+
}
|
|
12173
|
+
},
|
|
12174
|
+
{
|
|
12175
|
+
"in": "header",
|
|
12176
|
+
"name": "Synth-Acceptance-Signature",
|
|
12177
|
+
"required": false,
|
|
12178
|
+
"schema": {
|
|
12179
|
+
"anyOf": [
|
|
12180
|
+
{
|
|
12181
|
+
"type": "string"
|
|
12182
|
+
},
|
|
12183
|
+
{
|
|
12184
|
+
"type": "null"
|
|
12185
|
+
}
|
|
12186
|
+
],
|
|
12187
|
+
"title": "Synth-Acceptance-Signature"
|
|
12188
|
+
}
|
|
12189
|
+
}
|
|
12190
|
+
],
|
|
12191
|
+
"requestBody": {
|
|
12192
|
+
"content": {
|
|
12193
|
+
"application/json": {
|
|
12194
|
+
"schema": {
|
|
12195
|
+
"$ref": "#/components/schemas/CreateResearchContributionSpec"
|
|
12196
|
+
}
|
|
12197
|
+
}
|
|
12198
|
+
},
|
|
12199
|
+
"required": true
|
|
12200
|
+
},
|
|
12201
|
+
"responses": {
|
|
12202
|
+
"204": {
|
|
12203
|
+
"description": "Successful Response"
|
|
12204
|
+
},
|
|
12205
|
+
"422": {
|
|
12206
|
+
"content": {
|
|
12207
|
+
"application/json": {
|
|
12208
|
+
"schema": {
|
|
12209
|
+
"$ref": "#/components/schemas/HTTPValidationError"
|
|
12210
|
+
}
|
|
12211
|
+
}
|
|
12212
|
+
},
|
|
12213
|
+
"description": "Validation Error"
|
|
12214
|
+
}
|
|
12215
|
+
},
|
|
12216
|
+
"summary": "Register Correction",
|
|
12217
|
+
"tags": [
|
|
12218
|
+
"index-contributions"
|
|
12219
|
+
]
|
|
12220
|
+
}
|
|
12221
|
+
},
|
|
11961
12222
|
"/api/v1/index/contributions/{contribution_id}/revisions/{revision_id}/reviews": {
|
|
11962
12223
|
"post": {
|
|
11963
12224
|
"operationId": "index.contributions.reviews.create",
|
|
@@ -12065,6 +12326,70 @@
|
|
|
12065
12326
|
]
|
|
12066
12327
|
}
|
|
12067
12328
|
},
|
|
12329
|
+
"/api/v1/index/contributions/{contribution_id}/revisions/{revision_id}/rights-attestation": {
|
|
12330
|
+
"post": {
|
|
12331
|
+
"description": "The rights holder attests one exact sealed revision; separate from consent.\n\nSynth-origin: this environment's current ``index_queue_policies`` rights\nowner, read in the same transaction; an unset queue refuses\n(``queue_policy_unset``). Other origins: an OWNER/ADMIN of the\ncontributing org (SYN-3437), which needs no queue policy.",
|
|
12332
|
+
"operationId": "index.research.rights_attestation.create",
|
|
12333
|
+
"parameters": [
|
|
12334
|
+
{
|
|
12335
|
+
"in": "path",
|
|
12336
|
+
"name": "contribution_id",
|
|
12337
|
+
"required": true,
|
|
12338
|
+
"schema": {
|
|
12339
|
+
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,127}$",
|
|
12340
|
+
"title": "Contribution Id",
|
|
12341
|
+
"type": "string"
|
|
12342
|
+
}
|
|
12343
|
+
},
|
|
12344
|
+
{
|
|
12345
|
+
"in": "path",
|
|
12346
|
+
"name": "revision_id",
|
|
12347
|
+
"required": true,
|
|
12348
|
+
"schema": {
|
|
12349
|
+
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,127}$",
|
|
12350
|
+
"title": "Revision Id",
|
|
12351
|
+
"type": "string"
|
|
12352
|
+
}
|
|
12353
|
+
}
|
|
12354
|
+
],
|
|
12355
|
+
"requestBody": {
|
|
12356
|
+
"content": {
|
|
12357
|
+
"application/json": {
|
|
12358
|
+
"schema": {
|
|
12359
|
+
"$ref": "#/components/schemas/RightsAttestationSpec"
|
|
12360
|
+
}
|
|
12361
|
+
}
|
|
12362
|
+
},
|
|
12363
|
+
"required": true
|
|
12364
|
+
},
|
|
12365
|
+
"responses": {
|
|
12366
|
+
"200": {
|
|
12367
|
+
"content": {
|
|
12368
|
+
"application/json": {
|
|
12369
|
+
"schema": {
|
|
12370
|
+
"$ref": "#/components/schemas/RightsAttestationView"
|
|
12371
|
+
}
|
|
12372
|
+
}
|
|
12373
|
+
},
|
|
12374
|
+
"description": "Successful Response"
|
|
12375
|
+
},
|
|
12376
|
+
"422": {
|
|
12377
|
+
"content": {
|
|
12378
|
+
"application/json": {
|
|
12379
|
+
"schema": {
|
|
12380
|
+
"$ref": "#/components/schemas/HTTPValidationError"
|
|
12381
|
+
}
|
|
12382
|
+
}
|
|
12383
|
+
},
|
|
12384
|
+
"description": "Validation Error"
|
|
12385
|
+
}
|
|
12386
|
+
},
|
|
12387
|
+
"summary": "Attest Revision Rights",
|
|
12388
|
+
"tags": [
|
|
12389
|
+
"index-research"
|
|
12390
|
+
]
|
|
12391
|
+
}
|
|
12392
|
+
},
|
|
12068
12393
|
"/api/v1/index/contributions/{contribution_id}/revisions/{revision_id}/submit": {
|
|
12069
12394
|
"post": {
|
|
12070
12395
|
"operationId": "index.contributions.submit",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "synth-ai"
|
|
3
|
-
version = "0.22.
|
|
3
|
+
version = "0.22.1.dev668"
|
|
4
4
|
description = "Python SDK, CLI and MCP servers for Synth Index search and Swarms"
|
|
5
5
|
keywords = ["synth", "index", "search", "citations", "research", "swarms", "mcp", "sdk"]
|
|
6
6
|
authors = [{name = "Synth AI", email = "josh@usesynth.ai"}]
|
|
@@ -13,7 +13,7 @@ from collections.abc import Callable, Mapping, Sequence
|
|
|
13
13
|
from dataclasses import dataclass
|
|
14
14
|
from datetime import datetime
|
|
15
15
|
from hashlib import sha256
|
|
16
|
-
from typing import
|
|
16
|
+
from typing import Any, Awaitable
|
|
17
17
|
from uuid import UUID, uuid4
|
|
18
18
|
|
|
19
19
|
from synth_ai.core.errors import SynthError
|
|
@@ -117,6 +117,7 @@ from .retry import (
|
|
|
117
117
|
is_transient_search_failure,
|
|
118
118
|
search_id_from_error,
|
|
119
119
|
)
|
|
120
|
+
from .rights import RightsAttestationSpec, RightsAttestationView
|
|
120
121
|
from .search import (
|
|
121
122
|
ContentsResult,
|
|
122
123
|
ContentsSpec,
|
|
@@ -164,6 +165,9 @@ OPERATIONS: Mapping[str, tuple[str, str]] = {
|
|
|
164
165
|
"index.contents.retrieve": ("POST", f"{_P}/contents"),
|
|
165
166
|
"index.contributions.create": ("POST", f"{_P}/contributions"),
|
|
166
167
|
"index.contributions.research.create": ("POST", f"{_P}/contributions/research"),
|
|
168
|
+
"index.contributions.research.correction_registration": (
|
|
169
|
+
"POST", f"{_R}/research-registration"
|
|
170
|
+
),
|
|
167
171
|
"index.qa.cases.create": ("POST", _P + "/qa/cases"),
|
|
168
172
|
"index.qa.cases.get": ("GET", _P + "/qa/cases/{case_id}"),
|
|
169
173
|
"index.qa.events.list": ("GET", _P + "/qa/cases/{case_id}/events"),
|
|
@@ -217,6 +221,7 @@ OPERATIONS: Mapping[str, tuple[str, str]] = {
|
|
|
217
221
|
"index.research.binding.create": ("POST", f"{_R}/research-binding"),
|
|
218
222
|
"index.research.consent.create": ("POST", f"{_R}/release-consent"),
|
|
219
223
|
"index.research.reproduction.create": ("POST", f"{_R}/reproduction-attestations"),
|
|
224
|
+
"index.research.rights_attestation.create": ("POST", f"{_R}/rights-attestation"),
|
|
220
225
|
"index.research.disclosure.revoke": ("POST", f"{_R}/disclosure-revocation"),
|
|
221
226
|
"index.reviews.list": ("GET", f"{_P}/reviews"),
|
|
222
227
|
"index.tags.list": ("GET", f"{_P}/tags"),
|
|
@@ -1530,6 +1535,52 @@ class ContributionsAPI(_Resource):
|
|
|
1530
1535
|
)
|
|
1531
1536
|
)
|
|
1532
1537
|
|
|
1538
|
+
def register_research_correction(
|
|
1539
|
+
self,
|
|
1540
|
+
reference: ContributionReference,
|
|
1541
|
+
spec: ResearchDraftSpec,
|
|
1542
|
+
*,
|
|
1543
|
+
idempotency_key: str,
|
|
1544
|
+
) -> None | Awaitable[None]:
|
|
1545
|
+
"""Bind a resealed export bundle to an existing private correction draft.
|
|
1546
|
+
|
|
1547
|
+
See sibling backend/notes/specifications/synth-index/research-export-bundle.md.
|
|
1548
|
+
|
|
1549
|
+
Args:
|
|
1550
|
+
reference: Exact existing child Contribution revision to register.
|
|
1551
|
+
spec: Resealed bundle digest and immutable research source proof.
|
|
1552
|
+
idempotency_key: Explicit key reused only with the identical request.
|
|
1553
|
+
|
|
1554
|
+
Returns:
|
|
1555
|
+
None on acknowledgement, or an awaitable for an async client.
|
|
1556
|
+
|
|
1557
|
+
The backend requires research-import authority and verifies the child's
|
|
1558
|
+
parent/source lineage. This operation grants no rights, consent, QA
|
|
1559
|
+
approval or publication; those remain separate backend decisions.
|
|
1560
|
+
|
|
1561
|
+
Raises:
|
|
1562
|
+
ValueError: Request identifiers/key or acknowledgement are invalid.
|
|
1563
|
+
|
|
1564
|
+
Example:
|
|
1565
|
+
client.index.contributions.register_research_correction(
|
|
1566
|
+
reference, spec, idempotency_key="repair-registration-1"
|
|
1567
|
+
)
|
|
1568
|
+
"""
|
|
1569
|
+
|
|
1570
|
+
def acknowledge(payload: object) -> None:
|
|
1571
|
+
if payload != {}:
|
|
1572
|
+
raise ValueError("Research correction acknowledgement must be empty")
|
|
1573
|
+
|
|
1574
|
+
return self._run(
|
|
1575
|
+
_Call(
|
|
1576
|
+
"index.contributions.research.correction_registration",
|
|
1577
|
+
acknowledge,
|
|
1578
|
+
path_parameters=_revision(reference),
|
|
1579
|
+
json_body=_body(spec),
|
|
1580
|
+
headers=_key(idempotency_key, required="Research correction registration"),
|
|
1581
|
+
)
|
|
1582
|
+
)
|
|
1583
|
+
|
|
1533
1584
|
def retrieve(self, contribution_id: str) -> Any:
|
|
1534
1585
|
"""Contribution, its current revision and revision history (404 when hidden)."""
|
|
1535
1586
|
return self._run(
|
|
@@ -1544,6 +1595,44 @@ class ContributionsAPI(_Resource):
|
|
|
1544
1595
|
)
|
|
1545
1596
|
)
|
|
1546
1597
|
|
|
1598
|
+
def attest_rights(
|
|
1599
|
+
self, reference: ContributionReference, spec: RightsAttestationSpec
|
|
1600
|
+
) -> RightsAttestationView | Awaitable[RightsAttestationView]:
|
|
1601
|
+
"""Record a rights claim for the exact sealed revision.
|
|
1602
|
+
|
|
1603
|
+
Args:
|
|
1604
|
+
reference: Contribution and revision whose immutable bytes are attested.
|
|
1605
|
+
spec: Manifest, descriptor, licenses and notices supporting this claim.
|
|
1606
|
+
|
|
1607
|
+
Returns:
|
|
1608
|
+
The exact stored rights fact, or its awaitable for an async client.
|
|
1609
|
+
|
|
1610
|
+
The backend requires the configured queue owner for Synth-origin work,
|
|
1611
|
+
or a contributing-org owner/admin without QA staff authority for external
|
|
1612
|
+
work. This records neither release consent nor QA/publication approval.
|
|
1613
|
+
Repeating the identical claim is safe; a changed claim conflicts.
|
|
1614
|
+
|
|
1615
|
+
Example:
|
|
1616
|
+
fact = client.index.contributions.attest_rights(reference, spec)
|
|
1617
|
+
"""
|
|
1618
|
+
return self._run(
|
|
1619
|
+
_Call(
|
|
1620
|
+
"index.research.rights_attestation.create",
|
|
1621
|
+
_bound(
|
|
1622
|
+
RightsAttestationView,
|
|
1623
|
+
lambda view: view.revision_id == reference.revision_id
|
|
1624
|
+
and view.manifest_digest == spec.manifest_digest
|
|
1625
|
+
and view.descriptor_digest == spec.descriptor_digest
|
|
1626
|
+
and view.notices_digest == spec.notices_digest
|
|
1627
|
+
and view.licenses == spec.licenses
|
|
1628
|
+
and view.rights_decision_ref == spec.rights_decision_ref,
|
|
1629
|
+
"Rights response does not bind the requested sealed revision",
|
|
1630
|
+
),
|
|
1631
|
+
path_parameters=_revision(reference),
|
|
1632
|
+
json_body=_body(spec),
|
|
1633
|
+
)
|
|
1634
|
+
)
|
|
1635
|
+
|
|
1547
1636
|
def prepare_upload(self, draft: ContributionDraft, spec: ContributionUploadSpec) -> Any:
|
|
1548
1637
|
"""Prepare transfer instructions only; reuse the publication ID for retries."""
|
|
1549
1638
|
reference = draft.reference
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""Exact revision rights claims; the backend alone decides attester authority.
|
|
2
|
+
|
|
3
|
+
See backend notes/specifications/synth-index/research-rights-attestation.md.
|
|
4
|
+
Rights attestation is separate from consent, QA acceptance and publication.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
from enum import StrEnum
|
|
9
|
+
from typing import Annotated
|
|
10
|
+
from uuid import UUID
|
|
11
|
+
|
|
12
|
+
from pydantic import Field, StringConstraints, field_validator
|
|
13
|
+
|
|
14
|
+
from .contracts import IndexContract
|
|
15
|
+
|
|
16
|
+
Digest = Annotated[str, StringConstraints(pattern=r"^[0-9a-f]{64}$")]
|
|
17
|
+
LicenseExpression = Annotated[str, StringConstraints(min_length=1, max_length=256)]
|
|
18
|
+
DecisionReference = Annotated[str, StringConstraints(min_length=1, max_length=512)]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class RightsQueue(StrEnum):
|
|
22
|
+
"""The configured queue for Synth-origin rights claims."""
|
|
23
|
+
|
|
24
|
+
INDEX_CORPUS_QA = "index-corpus-qa"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class RightsAuthority(StrEnum):
|
|
28
|
+
"""Authority selected by the backend from the sealed contribution origin."""
|
|
29
|
+
|
|
30
|
+
QUEUE_RIGHTS_OWNER = "queue_rights_owner"
|
|
31
|
+
CONTRIBUTING_ORG_ADMIN = "contributing_org_admin"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class RightsAttestationSpec(IndexContract):
|
|
35
|
+
"""Exact rights claim for sealed bytes, without granting publication permission."""
|
|
36
|
+
|
|
37
|
+
manifest_digest: Digest
|
|
38
|
+
descriptor_digest: Digest
|
|
39
|
+
rights_decision_ref: DecisionReference
|
|
40
|
+
licenses: tuple[LicenseExpression, ...] = Field(min_length=1, max_length=64)
|
|
41
|
+
notices_digest: Digest
|
|
42
|
+
|
|
43
|
+
@field_validator("licenses")
|
|
44
|
+
@classmethod
|
|
45
|
+
def _canonical_licenses(cls, value: tuple[str, ...]) -> tuple[str, ...]:
|
|
46
|
+
if len(set(value)) != len(value):
|
|
47
|
+
raise ValueError("licenses must be distinct")
|
|
48
|
+
return tuple(sorted(value))
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class RightsAttestationView(IndexContract):
|
|
52
|
+
"""A stored rights fact bound to one exact revision; never a publication decision."""
|
|
53
|
+
|
|
54
|
+
schema_version: str = "research-rights-attestation-v1"
|
|
55
|
+
revision_id: str
|
|
56
|
+
authority: RightsAuthority
|
|
57
|
+
queue: RightsQueue | None
|
|
58
|
+
attester_user_id: UUID
|
|
59
|
+
attester_org_id: UUID | None
|
|
60
|
+
manifest_digest: Digest
|
|
61
|
+
descriptor_digest: Digest
|
|
62
|
+
rights_decision_ref: DecisionReference
|
|
63
|
+
licenses: tuple[LicenseExpression, ...]
|
|
64
|
+
notices_digest: Digest
|
|
65
|
+
attested_at: datetime
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: synth-ai
|
|
3
|
-
Version: 0.22.
|
|
3
|
+
Version: 0.22.1.dev668
|
|
4
4
|
Summary: Python SDK, CLI and MCP servers for Synth Index search and Swarms
|
|
5
5
|
Author-email: Synth AI <josh@usesynth.ai>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -30,9 +30,9 @@ Dynamic: license-file
|
|
|
30
30
|
|
|
31
31
|
# Synth AI SDK
|
|
32
32
|
|
|
33
|
-
<!-- CI release pins: PyPI-0.22.
|
|
33
|
+
<!-- CI release pins: PyPI-0.22.1-orange synth-ai==0.22.1 -->
|
|
34
34
|
|
|
35
|
-
> 0.22.
|
|
35
|
+
> The 0.22.1 development candidate completes Index v0.2 client coverage for revision rights and research corrections. Stable 0.22.0 remains published.
|
|
36
36
|
|
|
37
37
|
[](https://pypi.org/project/synth-ai/)
|
|
38
38
|
[](https://pypi.org/project/synth-ai/)
|
|
@@ -114,6 +114,7 @@ synth_ai/sdk/index/qa_preflight.py
|
|
|
114
114
|
synth_ai/sdk/index/qa_reviews.py
|
|
115
115
|
synth_ai/sdk/index/research_intake.py
|
|
116
116
|
synth_ai/sdk/index/retry.py
|
|
117
|
+
synth_ai/sdk/index/rights.py
|
|
117
118
|
synth_ai/sdk/index/scope_errors.py
|
|
118
119
|
synth_ai/sdk/index/scopes.py
|
|
119
120
|
synth_ai/sdk/index/search.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|