synth-ai 0.20.0.dev628__tar.gz → 0.20.0.dev629__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.20.0.dev628/synth_ai.egg-info → synth_ai-0.20.0.dev629}/PKG-INFO +1 -1
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/openapi/index-v1.json +4 -118
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/pyproject.toml +2 -1
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/setup.py +1 -2
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/index.py +40 -8
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/README.md +7 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/server.py +20 -5
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/index.py +13 -4
- synth_ai-0.20.0.dev629/synth_ai/sdk/index/AGENT_SETUP_PROMPT.md +46 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/README.md +85 -30
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/__init__.py +0 -2
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/catalog.py +2 -2
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/client.py +42 -50
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/public.py +11 -7
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/research_intake.py +19 -26
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/search.py +35 -49
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/transfer.py +6 -10
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/usage_accounting.py +2 -7
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/research_intern.py +12 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/_client_helpers.py +55 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/client.py +2 -54
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629/synth_ai.egg-info}/PKG-INFO +1 -1
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai.egg-info/SOURCES.txt +1 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai.egg-info/entry_points.txt +1 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/LICENSE +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/MANIFEST.in +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/README.md +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/openapi/messaging-v1.json +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/openapi/research-v1.json +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/setup.cfg +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/README.md +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/__main__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/AGENTS.md +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/README.md +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/__main__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/main.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/research.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/research_environments.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/research_image_releases.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/cli/research_projects.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/client.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/README.md +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/auth/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/auth/credentials.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/contracts/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/contracts/json_value.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/contracts/pagination.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/errors.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/http/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/http/async_transport.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/http/request.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/http/retry.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/http/streaming.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/http/transport.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/research/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/utils/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/utils/env.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/utils/log_filter.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/utils/paths.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/core/utils/urls.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/__main__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/objective_tools.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/registry.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/request_models.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/approvals.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/artifacts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/datasets.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/environments.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/exports.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/factories.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/factory_results.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/files.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/image_releases.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/integrations.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/intern_program.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/local_files.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/logs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/models.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/outputs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/policy_schemas.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/progress.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/project_data.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/projects.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/prs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/readiness.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/repos.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/research_intern.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/resources.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/runs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/trained_models.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/usage.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/visuals.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/mcp/research/tools/workspace_inputs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/pools.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/py.typed +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/README.md +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/agent_policy.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/answer.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/artifacts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/contracts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/contributions.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/errors.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/lifecycle.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/package.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/index/submission.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/messaging/README.md +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/messaging/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/messaging/client.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/messaging/contracts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/optimizers/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/optimizers/client.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/optimizers/contracts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/pagination.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/_internal/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/_internal/crypto.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/_internal/env.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/_internal/urls.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/account.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/advanced.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/advanced_factories.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/advanced_swarms.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/artifacts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/auth.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/client.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/container_pools/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/container_pools/api.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/container_pools/contracts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/container_pools/operations.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/container_pools/packaging.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/_activity_wire.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/_environment_wire.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/_transcript_wire.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/_wire.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/activity.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/activity_items.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/actor_images.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/billing.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/canonical_usage.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/checkpoints.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/cloud_deployment_claims.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/cloud_deployments.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/common.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/dataset_revisions.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/deliveries.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/dev_environment_evidence.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/economics.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/environment_manifest.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/environments.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/evidence.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/factories.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/factory_evidence.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/factory_lenses.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/factory_operations.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/factory_role_receipts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/failure.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/image_releases.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/intern_blockers.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/intern_grants.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/intern_program.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/intern_resources.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/intern_usage.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/limit_evidence.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/local_execution_profile.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/operator_evidence.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/project.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/project_data.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/project_runtime.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/project_workspace.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/project_workspace_evidence.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/projects.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/promotions.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/resource_settlement.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/run_authority.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/run_control.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/run_diagnostics.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/run_events.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/run_execution.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/run_launch.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/run_observability.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/run_state.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/run_timeline.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/runtime_image.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/runtime_intent.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/runtime_stream.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/runtime_stream_snapshot.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/scientific_integrity.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_actor_models.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_actor_policy_data.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_agent_harnesses.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_agent_kinds.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_agent_models.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_branching.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_credential_providers.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_environment_kinds.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_evidence_obligations.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_funding_sources.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_horizons.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_host_kinds.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_inference_providers.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_network_topology.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_providers.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_resource_kinds.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_roles.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_run_policy.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_runbooks.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_runnable_project.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_runtime_kinds.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_tool_providers.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/smr_work_modes.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/status.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/swarm_rollouts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/swarms.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/tag.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/traces.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/transcript.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/types.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/usage.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/visuals.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/wire_models.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/wire_models_README.md +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/work_products.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/contracts/workspaces.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/economics.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/efforts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/environments.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/errors.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/events.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/experiments.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/facade.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/factories.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/factory_storage.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/image_releases.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/intern_blockers.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/intern_program.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/knowledge.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/models.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/operations.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/project_data.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/project_deliveries.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/project_workspaces.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/projects.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/public.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/readouts.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/research_intern.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/secrets.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/README.md +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/_base.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/_run_authority_mixin.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/approvals.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/billing.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/cloud_deployments.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/config.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/cost.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/datasets.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/dev_environments.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/environments.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/exports.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/factories.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/factory_evidence.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/files.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/github.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/image_releases.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/images.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/logs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/models.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/outputs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/progress.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/project.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/projects.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/prs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/readiness.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/repositories.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/runs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/secrets.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/setup.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/tag.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/trained_models.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/transport.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/usage.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/work_products.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/session/workspace_inputs.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/surface_parity.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/swarms.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/traces.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/transport/__init__.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/transport/http.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/transport/pagination.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/version.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/visuals.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai/sdk/research/wiki.py +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai.egg-info/dependency_links.txt +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai.egg-info/requires.txt +0 -0
- {synth_ai-0.20.0.dev628 → synth_ai-0.20.0.dev629}/synth_ai.egg-info/top_level.txt +0 -0
|
@@ -650,7 +650,7 @@
|
|
|
650
650
|
"properties": {
|
|
651
651
|
"concurrency_limit": {
|
|
652
652
|
"default": 1,
|
|
653
|
-
"maximum":
|
|
653
|
+
"maximum": 50.0,
|
|
654
654
|
"minimum": 1.0,
|
|
655
655
|
"title": "Concurrency Limit",
|
|
656
656
|
"type": "integer"
|
|
@@ -3320,80 +3320,6 @@
|
|
|
3320
3320
|
"title": "PromoCreditSummary",
|
|
3321
3321
|
"type": "object"
|
|
3322
3322
|
},
|
|
3323
|
-
"PublicSearchResult": {
|
|
3324
|
-
"additionalProperties": false,
|
|
3325
|
-
"description": "Anonymous public search: text citing contribution IDs, like every Index search.\n\nSame response rule as the authenticated ``SearchResult`` (inline\n``[<contribution_id>]`` markers equal ``citations`` in first-appearance\norder); no ranked hits, excerpts, titles or URLs.",
|
|
3326
|
-
"properties": {
|
|
3327
|
-
"amount_cents": {
|
|
3328
|
-
"const": 0,
|
|
3329
|
-
"default": 0,
|
|
3330
|
-
"title": "Amount Cents",
|
|
3331
|
-
"type": "integer"
|
|
3332
|
-
},
|
|
3333
|
-
"citations": {
|
|
3334
|
-
"items": {
|
|
3335
|
-
"$ref": "#/components/schemas/ContributionReference"
|
|
3336
|
-
},
|
|
3337
|
-
"maxItems": 10,
|
|
3338
|
-
"title": "Citations",
|
|
3339
|
-
"type": "array"
|
|
3340
|
-
},
|
|
3341
|
-
"corpus_generation": {
|
|
3342
|
-
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,127}$",
|
|
3343
|
-
"title": "Corpus Generation",
|
|
3344
|
-
"type": "string"
|
|
3345
|
-
},
|
|
3346
|
-
"mode": {
|
|
3347
|
-
"const": "fast",
|
|
3348
|
-
"default": "fast",
|
|
3349
|
-
"title": "Mode",
|
|
3350
|
-
"type": "string"
|
|
3351
|
-
},
|
|
3352
|
-
"parser_version": {
|
|
3353
|
-
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,127}$",
|
|
3354
|
-
"title": "Parser Version",
|
|
3355
|
-
"type": "string"
|
|
3356
|
-
},
|
|
3357
|
-
"ranker_version": {
|
|
3358
|
-
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,127}$",
|
|
3359
|
-
"title": "Ranker Version",
|
|
3360
|
-
"type": "string"
|
|
3361
|
-
},
|
|
3362
|
-
"request_id": {
|
|
3363
|
-
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,127}$",
|
|
3364
|
-
"title": "Request Id",
|
|
3365
|
-
"type": "string"
|
|
3366
|
-
},
|
|
3367
|
-
"response": {
|
|
3368
|
-
"maxLength": 16384,
|
|
3369
|
-
"minLength": 1,
|
|
3370
|
-
"title": "Response",
|
|
3371
|
-
"type": "string"
|
|
3372
|
-
},
|
|
3373
|
-
"status": {
|
|
3374
|
-
"const": "completed",
|
|
3375
|
-
"default": "completed",
|
|
3376
|
-
"title": "Status",
|
|
3377
|
-
"type": "string"
|
|
3378
|
-
},
|
|
3379
|
-
"taxonomy_version": {
|
|
3380
|
-
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,127}$",
|
|
3381
|
-
"title": "Taxonomy Version",
|
|
3382
|
-
"type": "string"
|
|
3383
|
-
}
|
|
3384
|
-
},
|
|
3385
|
-
"required": [
|
|
3386
|
-
"request_id",
|
|
3387
|
-
"corpus_generation",
|
|
3388
|
-
"ranker_version",
|
|
3389
|
-
"parser_version",
|
|
3390
|
-
"taxonomy_version",
|
|
3391
|
-
"response",
|
|
3392
|
-
"citations"
|
|
3393
|
-
],
|
|
3394
|
-
"title": "PublicSearchResult",
|
|
3395
|
-
"type": "object"
|
|
3396
|
-
},
|
|
3397
3323
|
"PublicUsage": {
|
|
3398
3324
|
"additionalProperties": false,
|
|
3399
3325
|
"properties": {
|
|
@@ -4805,7 +4731,7 @@
|
|
|
4805
4731
|
},
|
|
4806
4732
|
"SearchExecutionVersions": {
|
|
4807
4733
|
"additionalProperties": false,
|
|
4808
|
-
"description": "Exact implementation identities used by one result
|
|
4734
|
+
"description": "Exact implementation identities used by one result.\n\nAn identity the execution did not use is omitted, never ``null``.",
|
|
4809
4735
|
"properties": {
|
|
4810
4736
|
"agent_version": {
|
|
4811
4737
|
"anyOf": [
|
|
@@ -5137,6 +5063,7 @@
|
|
|
5137
5063
|
"complete",
|
|
5138
5064
|
"insufficient_evidence",
|
|
5139
5065
|
"usable_partial",
|
|
5066
|
+
"infrastructure_stopped",
|
|
5140
5067
|
"no_deliverable",
|
|
5141
5068
|
"infrastructure_failure",
|
|
5142
5069
|
"cancelled",
|
|
@@ -5320,7 +5247,7 @@
|
|
|
5320
5247
|
"type": "null"
|
|
5321
5248
|
}
|
|
5322
5249
|
],
|
|
5323
|
-
"default": "synth.index.fast.
|
|
5250
|
+
"default": "synth.index.fast.v2",
|
|
5324
5251
|
"title": "Price Version"
|
|
5325
5252
|
},
|
|
5326
5253
|
"read_calls": {
|
|
@@ -8906,47 +8833,6 @@
|
|
|
8906
8833
|
]
|
|
8907
8834
|
}
|
|
8908
8835
|
},
|
|
8909
|
-
"/api/v1/index/public/search": {
|
|
8910
|
-
"post": {
|
|
8911
|
-
"operationId": "index.public.search",
|
|
8912
|
-
"requestBody": {
|
|
8913
|
-
"content": {
|
|
8914
|
-
"application/json": {
|
|
8915
|
-
"schema": {
|
|
8916
|
-
"$ref": "#/components/schemas/SearchSpec-Input"
|
|
8917
|
-
}
|
|
8918
|
-
}
|
|
8919
|
-
},
|
|
8920
|
-
"required": true
|
|
8921
|
-
},
|
|
8922
|
-
"responses": {
|
|
8923
|
-
"200": {
|
|
8924
|
-
"content": {
|
|
8925
|
-
"application/json": {
|
|
8926
|
-
"schema": {
|
|
8927
|
-
"$ref": "#/components/schemas/PublicSearchResult"
|
|
8928
|
-
}
|
|
8929
|
-
}
|
|
8930
|
-
},
|
|
8931
|
-
"description": "Successful Response"
|
|
8932
|
-
},
|
|
8933
|
-
"422": {
|
|
8934
|
-
"content": {
|
|
8935
|
-
"application/json": {
|
|
8936
|
-
"schema": {
|
|
8937
|
-
"$ref": "#/components/schemas/HTTPValidationError"
|
|
8938
|
-
}
|
|
8939
|
-
}
|
|
8940
|
-
},
|
|
8941
|
-
"description": "Validation Error"
|
|
8942
|
-
}
|
|
8943
|
-
},
|
|
8944
|
-
"summary": "Search",
|
|
8945
|
-
"tags": [
|
|
8946
|
-
"index-public"
|
|
8947
|
-
]
|
|
8948
|
-
}
|
|
8949
|
-
},
|
|
8950
8836
|
"/api/v1/index/public/tags": {
|
|
8951
8837
|
"get": {
|
|
8952
8838
|
"operationId": "index.public.tags.list",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "synth-ai"
|
|
3
|
-
version = "0.20.0.
|
|
3
|
+
version = "0.20.0.dev629"
|
|
4
4
|
description = "Python SDK and CLI for Synth Managed Research and Research Factory"
|
|
5
5
|
authors = [{name = "Synth AI", email = "josh@usesynth.ai"}]
|
|
6
6
|
license = "MIT"
|
|
@@ -18,6 +18,7 @@ dependencies = [
|
|
|
18
18
|
[project.scripts]
|
|
19
19
|
synth-ai = "synth_ai.cli:cli"
|
|
20
20
|
synth-ai-research-mcp = "synth_ai.mcp.research.server:main"
|
|
21
|
+
synth-ai-index-mcp = "synth_ai.mcp.research.server:main_index"
|
|
21
22
|
|
|
22
23
|
[project.optional-dependencies]
|
|
23
24
|
pools = [
|
|
@@ -5,13 +5,12 @@ contract bytes as the reviewed source. Keep openapi/ as the single source and
|
|
|
5
5
|
copy only the three public contract snapshots into the wheel, never other JSON.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
from pathlib import Path
|
|
9
8
|
import shutil
|
|
9
|
+
from pathlib import Path
|
|
10
10
|
|
|
11
11
|
from setuptools import setup
|
|
12
12
|
from setuptools.command.build_py import build_py
|
|
13
13
|
|
|
14
|
-
|
|
15
14
|
SCHEMAS = ("index-v1.json", "research-v1.json", "messaging-v1.json")
|
|
16
15
|
|
|
17
16
|
|
|
@@ -19,10 +19,10 @@ def index() -> None:
|
|
|
19
19
|
@click.option("--max-results", type=click.IntRange(1, 10), default=5, show_default=True)
|
|
20
20
|
@click.option(
|
|
21
21
|
"--deadline-seconds",
|
|
22
|
-
type=click.IntRange(1,
|
|
23
|
-
default=
|
|
22
|
+
type=click.IntRange(1, 300),
|
|
23
|
+
default=180,
|
|
24
24
|
show_default=True,
|
|
25
|
-
help="Deep execution ceiling;
|
|
25
|
+
help="Durable Deep execution ceiling; omitted from fast requests.",
|
|
26
26
|
)
|
|
27
27
|
@click.option(
|
|
28
28
|
"--private-collection",
|
|
@@ -31,6 +31,10 @@ def index() -> None:
|
|
|
31
31
|
help="Search only these authorized private collection IDs.",
|
|
32
32
|
)
|
|
33
33
|
@click.option("--idempotency-key", help="Stable retry identity for this logical search.")
|
|
34
|
+
@click.option("--allow-wallet", is_flag=True, help="Explicitly allow wallet funding.")
|
|
35
|
+
@click.option(
|
|
36
|
+
"--max-charge-cents", type=click.IntRange(0, 1_000_000), help="Maximum charge in cents."
|
|
37
|
+
)
|
|
34
38
|
@click.option("--backend-url", envvar="SYNTH_BACKEND_URL", help="Synth backend base URL.")
|
|
35
39
|
@click.option("--api-key", envvar="SYNTH_API_KEY", help="Authorized Synth API key.")
|
|
36
40
|
def search(
|
|
@@ -40,6 +44,8 @@ def search(
|
|
|
40
44
|
deadline_seconds: int,
|
|
41
45
|
private_collections: tuple[str, ...],
|
|
42
46
|
idempotency_key: str | None,
|
|
47
|
+
allow_wallet: bool,
|
|
48
|
+
max_charge_cents: int | None,
|
|
43
49
|
backend_url: str | None,
|
|
44
50
|
api_key: str | None,
|
|
45
51
|
) -> None:
|
|
@@ -49,6 +55,7 @@ def search(
|
|
|
49
55
|
from synth_ai import SynthClient
|
|
50
56
|
from synth_ai.core.errors import SynthError
|
|
51
57
|
from synth_ai.sdk.index.search import (
|
|
58
|
+
SearchBillingConstraints,
|
|
52
59
|
SearchExecutionCancelledError,
|
|
53
60
|
SearchExecutionFailedError,
|
|
54
61
|
SearchExecutionLimits,
|
|
@@ -78,6 +85,9 @@ def search(
|
|
|
78
85
|
scope=scope,
|
|
79
86
|
max_results=max_results,
|
|
80
87
|
limits=limits,
|
|
88
|
+
billing=SearchBillingConstraints(
|
|
89
|
+
allow_wallet=allow_wallet, max_charge_cents=max_charge_cents
|
|
90
|
+
),
|
|
81
91
|
idempotency_key=idempotency_key,
|
|
82
92
|
)
|
|
83
93
|
except (
|
|
@@ -125,6 +135,12 @@ def search(
|
|
|
125
135
|
required=True,
|
|
126
136
|
help="Stable retry identity for retrieval, admission and synthesis.",
|
|
127
137
|
)
|
|
138
|
+
@click.option("--allow-wallet", is_flag=True, help="Explicitly allow wallet funding for retrieval.")
|
|
139
|
+
@click.option(
|
|
140
|
+
"--max-charge-cents",
|
|
141
|
+
type=click.IntRange(0, 1_000_000),
|
|
142
|
+
help="Maximum retrieval charge in cents.",
|
|
143
|
+
)
|
|
128
144
|
@click.option("--backend-url", envvar="SYNTH_BACKEND_URL", help="Synth backend base URL.")
|
|
129
145
|
@click.option("--api-key", envvar="SYNTH_API_KEY", help="Authorized Synth API key.")
|
|
130
146
|
def answer(
|
|
@@ -136,6 +152,8 @@ def answer(
|
|
|
136
152
|
deadline_seconds: int,
|
|
137
153
|
private_collections: tuple[str, ...],
|
|
138
154
|
idempotency_key: str,
|
|
155
|
+
allow_wallet: bool,
|
|
156
|
+
max_charge_cents: int | None,
|
|
139
157
|
backend_url: str | None,
|
|
140
158
|
api_key: str | None,
|
|
141
159
|
) -> None:
|
|
@@ -145,6 +163,7 @@ def answer(
|
|
|
145
163
|
from synth_ai import SynthClient
|
|
146
164
|
from synth_ai.core.errors import SynthError
|
|
147
165
|
from synth_ai.sdk.index.search import (
|
|
166
|
+
SearchBillingConstraints,
|
|
148
167
|
SearchExecutionLimits,
|
|
149
168
|
SearchMode,
|
|
150
169
|
SearchScope,
|
|
@@ -173,6 +192,9 @@ def answer(
|
|
|
173
192
|
limits=limits,
|
|
174
193
|
max_answer_tokens=max_answer_tokens,
|
|
175
194
|
max_answer_cost_usd_micros=max_answer_cost_usd_micros,
|
|
195
|
+
billing=SearchBillingConstraints(
|
|
196
|
+
allow_wallet=allow_wallet, max_charge_cents=max_charge_cents
|
|
197
|
+
),
|
|
176
198
|
idempotency_key=idempotency_key,
|
|
177
199
|
)
|
|
178
200
|
except (ValueError, SynthError, HTTPError) as error:
|
|
@@ -192,11 +214,15 @@ def searches() -> None:
|
|
|
192
214
|
@click.argument("query")
|
|
193
215
|
@click.option("--mode", type=click.Choice(("fast", "deep")), default="deep", show_default=True)
|
|
194
216
|
@click.option("--max-results", type=click.IntRange(1, 10), default=5, show_default=True)
|
|
195
|
-
@click.option("--deadline-seconds", type=click.IntRange(1,
|
|
217
|
+
@click.option("--deadline-seconds", type=click.IntRange(1, 300), default=180, show_default=True)
|
|
196
218
|
@click.option("--private-collection", "private_collections", multiple=True)
|
|
197
219
|
@click.option(
|
|
198
220
|
"--idempotency-key", required=True, help="Reuse this key after an uncertain response."
|
|
199
221
|
)
|
|
222
|
+
@click.option("--allow-wallet", is_flag=True, help="Explicitly allow wallet funding.")
|
|
223
|
+
@click.option(
|
|
224
|
+
"--max-charge-cents", type=click.IntRange(0, 1_000_000), help="Maximum charge in cents."
|
|
225
|
+
)
|
|
200
226
|
@click.option("--backend-url", envvar="SYNTH_BACKEND_URL")
|
|
201
227
|
@click.option("--api-key", envvar="SYNTH_API_KEY")
|
|
202
228
|
def searches_create(
|
|
@@ -206,6 +232,8 @@ def searches_create(
|
|
|
206
232
|
deadline_seconds: int,
|
|
207
233
|
private_collections: tuple[str, ...],
|
|
208
234
|
idempotency_key: str,
|
|
235
|
+
allow_wallet: bool,
|
|
236
|
+
max_charge_cents: int | None,
|
|
209
237
|
backend_url: str | None,
|
|
210
238
|
api_key: str | None,
|
|
211
239
|
) -> None:
|
|
@@ -215,6 +243,7 @@ def searches_create(
|
|
|
215
243
|
from synth_ai import SynthClient
|
|
216
244
|
from synth_ai.core.errors import SynthError
|
|
217
245
|
from synth_ai.sdk.index.search import (
|
|
246
|
+
SearchBillingConstraints,
|
|
218
247
|
SearchContent,
|
|
219
248
|
SearchExecutionLimits,
|
|
220
249
|
SearchMode,
|
|
@@ -240,6 +269,9 @@ def searches_create(
|
|
|
240
269
|
if selected_mode is SearchMode.DEEP
|
|
241
270
|
else None
|
|
242
271
|
),
|
|
272
|
+
billing=SearchBillingConstraints(
|
|
273
|
+
allow_wallet=allow_wallet, max_charge_cents=max_charge_cents
|
|
274
|
+
),
|
|
243
275
|
)
|
|
244
276
|
with SynthClient(api_key=api_key, base_url=backend_url) as client:
|
|
245
277
|
snapshot = client.index.searches.create(spec, idempotency_key=idempotency_key).snapshot
|
|
@@ -376,9 +408,9 @@ def submit(
|
|
|
376
408
|
from synth_ai import SynthClient
|
|
377
409
|
from synth_ai.core.errors import SynthError
|
|
378
410
|
from synth_ai.sdk.index.research_intake import (
|
|
379
|
-
|
|
411
|
+
IntakeLockedError,
|
|
380
412
|
IntakeStateError,
|
|
381
|
-
|
|
413
|
+
TerminalRevisionError,
|
|
382
414
|
submit_conversion,
|
|
383
415
|
)
|
|
384
416
|
|
|
@@ -397,9 +429,9 @@ def submit(
|
|
|
397
429
|
TypeError,
|
|
398
430
|
SynthError,
|
|
399
431
|
HTTPError,
|
|
400
|
-
|
|
432
|
+
IntakeLockedError,
|
|
401
433
|
IntakeStateError,
|
|
402
|
-
|
|
434
|
+
TerminalRevisionError,
|
|
403
435
|
) as error:
|
|
404
436
|
raise click.ClickException(str(error)) from error
|
|
405
437
|
click.echo(json.dumps(result, indent=2, sort_keys=True))
|
|
@@ -47,6 +47,13 @@ becoming callable without a scope.
|
|
|
47
47
|
|
|
48
48
|
## What the entrypoint advertises
|
|
49
49
|
|
|
50
|
+
`synth-ai-index-mcp` is the Index-only stdio entrypoint. It requires an explicit
|
|
51
|
+
`SYNTH_BACKEND_URL`, advertises no unrelated Research tools, and defaults to
|
|
52
|
+
read-only. Without `SYNTH_API_KEY` it advertises public browse tools only;
|
|
53
|
+
authenticated search and durable-search lifecycle tools require the key.
|
|
54
|
+
`SYNTH_INDEX_MCP_WRITE_ENABLED=true` separately enables Contribution draft,
|
|
55
|
+
upload, and submission tools. Tool discovery performs no backend request.
|
|
56
|
+
|
|
50
57
|
`synth-ai-research-mcp` advertises the stable subset (64 of 254 tools). The rest
|
|
51
58
|
are built but hidden, and because `call_tool` resolves against the advertised
|
|
52
59
|
set they are also uncallable. Set `SYNTH_RESEARCH_MCP_ADVANCED_TOOLS=1` to
|
|
@@ -413,15 +413,19 @@ class ResearchMcpServer:
|
|
|
413
413
|
include_advanced_tools: bool = False,
|
|
414
414
|
index_client_factory: IndexClientFactory | None = None,
|
|
415
415
|
index_write_enabled: bool = True,
|
|
416
|
+
index_only: bool = False,
|
|
416
417
|
) -> None:
|
|
417
|
-
self._default_api_key = api_key
|
|
418
|
+
self._default_api_key = api_key or None
|
|
418
419
|
self._default_backend_base = backend_base
|
|
419
420
|
self._include_advanced_tools = include_advanced_tools
|
|
420
421
|
self._index_client_factory = index_client_factory
|
|
421
422
|
self._index_write_enabled = index_write_enabled
|
|
423
|
+
self._index_only = index_only
|
|
422
424
|
self._tools = build_tool_registry(self._build_tools())
|
|
423
425
|
|
|
424
426
|
def _advertised_tools(self) -> dict[str, ToolDefinition]:
|
|
427
|
+
if self._index_only:
|
|
428
|
+
return {name: tool for name, tool in self._tools.items() if name in INDEX_TOOL_NAMES}
|
|
425
429
|
if self._include_advanced_tools:
|
|
426
430
|
return self._tools
|
|
427
431
|
return {
|
|
@@ -484,6 +488,7 @@ class ResearchMcpServer:
|
|
|
484
488
|
tool
|
|
485
489
|
for tool in build_index_tools(
|
|
486
490
|
self._index_client_factory,
|
|
491
|
+
include_search=self._default_api_key is not None,
|
|
487
492
|
include_answer=self._default_api_key is not None,
|
|
488
493
|
include_lifecycle=self._default_api_key is not None,
|
|
489
494
|
)
|
|
@@ -2799,7 +2804,10 @@ class ResearchMcpServer:
|
|
|
2799
2804
|
"id": request_id,
|
|
2800
2805
|
"result": {
|
|
2801
2806
|
"protocolVersion": DEFAULT_PROTOCOL_VERSION,
|
|
2802
|
-
"serverInfo": {
|
|
2807
|
+
"serverInfo": {
|
|
2808
|
+
"name": "synth-index" if self._index_only else SERVER_NAME,
|
|
2809
|
+
"version": __version__,
|
|
2810
|
+
},
|
|
2803
2811
|
"capabilities": {"tools": {}},
|
|
2804
2812
|
},
|
|
2805
2813
|
}
|
|
@@ -2887,7 +2895,7 @@ def _explicit_index_flag(name: str) -> bool:
|
|
|
2887
2895
|
return value == "true"
|
|
2888
2896
|
|
|
2889
2897
|
|
|
2890
|
-
def _stdio_server() -> ResearchMcpServer:
|
|
2898
|
+
def _stdio_server(*, index_only: bool = False) -> ResearchMcpServer:
|
|
2891
2899
|
"""Capture explicit Index process config; construct clients only on invocation.
|
|
2892
2900
|
|
|
2893
2901
|
No credential discovery, home files, or network access during MCP discovery.
|
|
@@ -2895,7 +2903,7 @@ def _stdio_server() -> ResearchMcpServer:
|
|
|
2895
2903
|
"""
|
|
2896
2904
|
from contextlib import contextmanager
|
|
2897
2905
|
|
|
2898
|
-
enabled = _explicit_index_flag("SYNTH_INDEX_MCP_ENABLED")
|
|
2906
|
+
enabled = index_only or _explicit_index_flag("SYNTH_INDEX_MCP_ENABLED")
|
|
2899
2907
|
writes = _explicit_index_flag("SYNTH_INDEX_MCP_WRITE_ENABLED")
|
|
2900
2908
|
if writes and not enabled:
|
|
2901
2909
|
raise ValueError("Index MCP writes require SYNTH_INDEX_MCP_ENABLED=true")
|
|
@@ -2903,7 +2911,7 @@ def _stdio_server() -> ResearchMcpServer:
|
|
|
2903
2911
|
api_key = None
|
|
2904
2912
|
backend_base = None
|
|
2905
2913
|
if enabled:
|
|
2906
|
-
api_key = os.environ.get("SYNTH_API_KEY", "").strip()
|
|
2914
|
+
api_key = os.environ.get("SYNTH_API_KEY", "").strip() or None
|
|
2907
2915
|
backend_base = os.environ.get("SYNTH_BACKEND_URL", "").strip()
|
|
2908
2916
|
if not backend_base:
|
|
2909
2917
|
raise ValueError("Index MCP requires explicit SYNTH_BACKEND_URL")
|
|
@@ -2948,6 +2956,7 @@ def _stdio_server() -> ResearchMcpServer:
|
|
|
2948
2956
|
include_advanced_tools=_advanced_tools_requested(),
|
|
2949
2957
|
index_client_factory=factory,
|
|
2950
2958
|
index_write_enabled=writes,
|
|
2959
|
+
index_only=index_only,
|
|
2951
2960
|
)
|
|
2952
2961
|
|
|
2953
2962
|
|
|
@@ -2956,6 +2965,11 @@ def main() -> None:
|
|
|
2956
2965
|
_stdio_server().serve_stdio()
|
|
2957
2966
|
|
|
2958
2967
|
|
|
2968
|
+
def main_index() -> None:
|
|
2969
|
+
"""Index-only stdio MCP entrypoint; no unrelated Research tools."""
|
|
2970
|
+
_stdio_server(index_only=True).serve_stdio()
|
|
2971
|
+
|
|
2972
|
+
|
|
2959
2973
|
__all__ = [
|
|
2960
2974
|
"ADVANCED_TOOLS_ENV",
|
|
2961
2975
|
"DEFAULT_PROTOCOL_VERSION",
|
|
@@ -2964,4 +2978,5 @@ __all__ = [
|
|
|
2964
2978
|
"SUPPORTED_PROTOCOL_VERSIONS",
|
|
2965
2979
|
"_read_message",
|
|
2966
2980
|
"main",
|
|
2981
|
+
"main_index",
|
|
2967
2982
|
]
|
|
@@ -57,7 +57,14 @@ _KEY = Field(min_length=1, max_length=128, pattern=r"^[a-zA-Z0-9_.-]+$")
|
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
class IndexSearchRequest(IndexContract):
|
|
60
|
-
search: SearchSpec
|
|
60
|
+
search: SearchSpec = Field(
|
|
61
|
+
description=(
|
|
62
|
+
"Search intent and caller-owned billing bound. Current FAST public and private "
|
|
63
|
+
"searches cost 5 cents; wallet funding needs billing.allow_wallet=true and "
|
|
64
|
+
"billing.max_charge_cents>=5. DEEP needs a mode grant and a ceiling of "
|
|
65
|
+
"at least 10 cents. Never infer funding consent from the query."
|
|
66
|
+
)
|
|
67
|
+
)
|
|
61
68
|
idempotency_key: str = _KEY
|
|
62
69
|
|
|
63
70
|
|
|
@@ -116,6 +123,7 @@ def read_selected_files(root: str, files: Mapping[str, str]) -> dict[str, bytes]
|
|
|
116
123
|
def build_index_tools(
|
|
117
124
|
client_factory: IndexClientFactory,
|
|
118
125
|
*,
|
|
126
|
+
include_search: bool = True,
|
|
119
127
|
include_answer: bool = True,
|
|
120
128
|
include_lifecycle: bool = True,
|
|
121
129
|
) -> list[ToolDefinition]:
|
|
@@ -219,14 +227,14 @@ def build_index_tools(
|
|
|
219
227
|
tools = [
|
|
220
228
|
ToolDefinition(
|
|
221
229
|
name="index_search",
|
|
222
|
-
description="Search reviewed Synth Index
|
|
230
|
+
description="Search reviewed Synth Index Contributions with an authenticated funding identity. Current FAST public and private searches cost 5 cents; wallet funding requires search.billing.allow_wallet=true and max_charge_cents>=5. Do not infer consent. Reuse the same idempotency key for uncertain retries and preserve exact revision citations.",
|
|
223
231
|
input_schema=IndexSearchRequest.model_json_schema(),
|
|
224
232
|
handler=search,
|
|
225
233
|
required_scopes=read,
|
|
226
234
|
),
|
|
227
235
|
ToolDefinition(
|
|
228
236
|
name="index_search_create",
|
|
229
|
-
description="Create one durable
|
|
237
|
+
description="Create one durable FAST or DEEP Search. Current FAST public/private wallet searches need explicit consent and a ceiling of at least 5 cents; DEEP needs a mode grant and at least 10 cents. Return its Search ID and state immediately; reuse the idempotency key after uncertain responses.",
|
|
230
238
|
input_schema=IndexSearchRequest.model_json_schema(),
|
|
231
239
|
handler=search_create,
|
|
232
240
|
required_scopes=read,
|
|
@@ -319,6 +327,7 @@ def build_index_tools(
|
|
|
319
327
|
return [
|
|
320
328
|
tool
|
|
321
329
|
for tool in tools
|
|
322
|
-
if (
|
|
330
|
+
if (include_search or tool.name != "index_search")
|
|
331
|
+
and (include_answer or tool.name != "index_answer")
|
|
323
332
|
and (include_lifecycle or tool.name not in lifecycle_names)
|
|
324
333
|
]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Coding-agent setup prompt for Synth Index
|
|
2
|
+
|
|
3
|
+
Copy the text below into a coding-agent task after you have chosen the Synth
|
|
4
|
+
backend environment and an authorized way to supply its API key. This prompt
|
|
5
|
+
configures an API/MCP integration; it does not ask the agent to build an Index
|
|
6
|
+
product UI or to run a paid search during setup.
|
|
7
|
+
|
|
8
|
+
> Set up Synth Index for this coding project through the `synth-ai` Python SDK
|
|
9
|
+
> and its `synth-ai-index-mcp` stdio server. Index usage is API/MCP-only. Do
|
|
10
|
+
> not add a search page, browser proxy, or customer-facing product workflow.
|
|
11
|
+
>
|
|
12
|
+
> First inspect the project's existing Python environment and coding-agent MCP
|
|
13
|
+
> configuration. Use the supported `synth-ai` package and verify that the
|
|
14
|
+
> `synth-ai-index-mcp` executable is available. Configure one MCP server with
|
|
15
|
+
> `SYNTH_INDEX_MCP_WRITE_ENABLED=false` and an
|
|
16
|
+
> explicit `SYNTH_BACKEND_URL` for the environment I named. Supply
|
|
17
|
+
> `SYNTH_API_KEY` only through this project's already-authorized, non-committed
|
|
18
|
+
> secret-injection mechanism. Never print, commit, paste into chat, or place the
|
|
19
|
+
> key in tool arguments. Do not use macOS Keychain or another credential store
|
|
20
|
+
> without my explicit authorization for that operation. If the backend URL or
|
|
21
|
+
> authorized key source is missing, report exactly what is missing and stop.
|
|
22
|
+
>
|
|
23
|
+
> Verify that the server starts and advertises `index_search` and
|
|
24
|
+
> `index_search_create` with the key. Without a key it may advertise public
|
|
25
|
+
> browse tools, but it must not advertise search or durable-search lifecycle
|
|
26
|
+
> tools. Tool discovery must not execute a search or incur a charge.
|
|
27
|
+
>
|
|
28
|
+
> For a later search I explicitly request, first state the aggregate maximum
|
|
29
|
+
> charge and use a fresh idempotency key. Current public- and private-scope FAST
|
|
30
|
+
> searches are both priced at 5 cents. Wallet funding requires
|
|
31
|
+
> `search.billing.allow_wallet=true` and `max_charge_cents` of at least 5; do
|
|
32
|
+
> not infer my wallet consent from a query. DEEP also needs a mode grant and a
|
|
33
|
+
> ceiling of at least 10 cents. If a response is uncertain, retry the same
|
|
34
|
+
> logical request with the **same** idempotency key, not a new charge attempt.
|
|
35
|
+
> Preserve returned Contribution and revision IDs when reporting evidence.
|
|
36
|
+
> Do not enable Contribution writes unless I separately ask for them.
|
|
37
|
+
>
|
|
38
|
+
> Report the package version, backend environment name (not a secret), MCP
|
|
39
|
+
> server configuration with secret values redacted, advertised Index tool names,
|
|
40
|
+
> and any blocker. Do not claim live search works unless a separately
|
|
41
|
+
> authorized search actually completes and yields a receipt.
|
|
42
|
+
|
|
43
|
+
The server entry point and environment flags are documented in
|
|
44
|
+
[`README.md`](README.md). The typed billing object is
|
|
45
|
+
`SearchBillingConstraints` in [`search.py`](search.py); the backend remains the
|
|
46
|
+
authority for grants, balances, prices, and receipts.
|