synth-ai 0.18.1.dev596__tar.gz → 0.18.1.dev597__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.18.1.dev596/synth_ai.egg-info → synth_ai-0.18.1.dev597}/PKG-INFO +1 -1
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/pyproject.toml +1 -1
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/__init__.py +90 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/server.py +50 -7
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/__init__.py +2 -0
- synth_ai-0.18.1.dev597/synth_ai/mcp/research/tools/research_intern.py +838 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/usage.py +10 -3
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/__init__.py +50 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/canonical_usage.py +95 -11
- synth_ai-0.18.1.dev597/synth_ai/sdk/research/contracts/limit_evidence.py +406 -0
- synth_ai-0.18.1.dev597/synth_ai/sdk/research/contracts/research_intern.py +791 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/wire_models.py +20 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/errors.py +82 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/operations.py +90 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/public.py +84 -0
- synth_ai-0.18.1.dev597/synth_ai/sdk/research/research_intern.py +4100 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/__init__.py +61 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/client.py +46 -4
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/runs.py +44 -4
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/usage.py +52 -4
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/transport/http.py +21 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597/synth_ai.egg-info}/PKG-INFO +1 -1
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai.egg-info/SOURCES.txt +2 -0
- synth_ai-0.18.1.dev596/synth_ai/sdk/research/contracts/research_intern.py +0 -394
- synth_ai-0.18.1.dev596/synth_ai/sdk/research/research_intern.py +0 -1330
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/LICENSE +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/MANIFEST.in +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/README.md +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/setup.cfg +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/README.md +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/__main__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/cli/AGENTS.md +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/cli/README.md +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/cli/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/cli/__main__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/cli/main.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/cli/research.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/cli/research_environments.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/cli/research_image_releases.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/cli/research_projects.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/client.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/README.md +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/auth/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/auth/credentials.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/contracts/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/contracts/json_value.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/contracts/pagination.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/errors.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/http/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/http/async_transport.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/http/request.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/http/retry.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/http/streaming.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/http/transport.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/research/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/utils/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/utils/env.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/utils/log_filter.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/utils/paths.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/core/utils/urls.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/README.md +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/__main__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/objective_tools.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/registry.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/request_models.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/approvals.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/artifacts.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/datasets.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/environments.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/exports.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/factories.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/factory_results.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/files.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/image_releases.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/integrations.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/logs.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/models.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/outputs.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/policy_schemas.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/progress.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/project_data.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/projects.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/prs.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/readiness.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/repos.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/resources.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/runs.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/trained_models.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/visuals.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/mcp/research/tools/workspace_inputs.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/py.typed +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/README.md +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/pagination.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/_internal/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/_internal/crypto.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/_internal/env.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/_internal/urls.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/account.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/advanced.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/advanced_factories.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/advanced_swarms.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/artifacts.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/auth.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/client.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/_activity_wire.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/_environment_wire.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/_transcript_wire.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/_wire.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/activity.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/activity_items.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/actor_images.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/billing.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/checkpoints.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/cloud_deployment_claims.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/cloud_deployments.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/common.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/dataset_revisions.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/deliveries.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/dev_environment_evidence.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/economics.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/environment_manifest.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/environments.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/evidence.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/factories.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/factory_evidence.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/factory_lenses.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/factory_operations.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/factory_role_receipts.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/failure.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/image_releases.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/local_execution_profile.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/operator_evidence.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/project.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/project_data.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/project_runtime.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/project_workspace.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/project_workspace_evidence.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/projects.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/promotions.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/run_authority.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/run_control.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/run_diagnostics.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/run_events.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/run_execution.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/run_launch.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/run_observability.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/run_state.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/run_timeline.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/runtime_image.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/runtime_intent.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/runtime_stream.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/runtime_stream_snapshot.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/scientific_integrity.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_actor_models.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_actor_policy_data.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_agent_harnesses.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_agent_kinds.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_agent_models.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_branching.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_credential_providers.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_environment_kinds.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_evidence_obligations.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_funding_sources.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_horizons.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_host_kinds.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_inference_providers.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_network_topology.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_providers.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_resource_kinds.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_roles.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_run_policy.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_runbooks.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_runnable_project.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_runtime_kinds.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_tool_providers.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/smr_work_modes.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/status.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/swarms.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/tag.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/traces.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/transcript.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/types.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/usage.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/visuals.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/wire_models_README.md +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/work_products.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/contracts/workspaces.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/economics.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/efforts.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/environments.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/events.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/experiments.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/facade.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/factories.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/factory_storage.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/image_releases.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/knowledge.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/models.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/project_data.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/project_deliveries.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/project_workspaces.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/projects.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/readouts.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/secrets.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/README.md +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/_base.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/_client_helpers.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/_run_authority_mixin.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/approvals.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/billing.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/cloud_deployments.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/config.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/cost.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/datasets.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/dev_environments.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/environments.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/exports.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/factories.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/factory_evidence.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/files.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/github.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/image_releases.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/images.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/logs.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/models.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/outputs.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/progress.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/project.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/projects.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/prs.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/readiness.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/repositories.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/secrets.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/setup.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/tag.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/trained_models.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/transport.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/work_products.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/session/workspace_inputs.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/swarms.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/traces.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/transport/__init__.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/transport/pagination.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/version.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/visuals.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai/sdk/research/wiki.py +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai.egg-info/dependency_links.txt +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai.egg-info/entry_points.txt +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai.egg-info/requires.txt +0 -0
- {synth_ai-0.18.1.dev596 → synth_ai-0.18.1.dev597}/synth_ai.egg-info/top_level.txt +0 -0
|
@@ -37,6 +37,7 @@ except _PackageNotFoundError:
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
__all__ = [
|
|
40
|
+
"AsyncResearchInternReactiveSession",
|
|
40
41
|
"AsyncSynthClient",
|
|
41
42
|
"DataBindingCreateRequest",
|
|
42
43
|
"DatasetRevisionCreateRequest",
|
|
@@ -52,6 +53,8 @@ __all__ = [
|
|
|
52
53
|
"FactoryRoleReceiptRuntimeEvidence",
|
|
53
54
|
"FactoryStorageAuthorityResponse",
|
|
54
55
|
"ResearchApiError",
|
|
56
|
+
"MagiDecisionKind",
|
|
57
|
+
"MagiDecisionReceiptResponse",
|
|
55
58
|
"MagiDecisionRequest",
|
|
56
59
|
"MagiMode",
|
|
57
60
|
"ProjectComputerCleanupReceiptResponse",
|
|
@@ -69,14 +72,29 @@ __all__ = [
|
|
|
69
72
|
"ResearchConcurrentRunLimitExceededError",
|
|
70
73
|
"ResearchInsufficientCreditsError",
|
|
71
74
|
"ResearchLimitExceededError",
|
|
75
|
+
"ResearchLimitExtensionGuardedResumeBlockedError",
|
|
76
|
+
"ResearchLimitExtensionIdempotencyConflictError",
|
|
77
|
+
"ResearchLimitRevisionConflictError",
|
|
72
78
|
"ResearchProjectCreateRequest",
|
|
73
79
|
"ResearchInternProvisionRequest",
|
|
80
|
+
"ResearchInternReactiveSession",
|
|
81
|
+
"ResearchInternEventStreamCursor",
|
|
82
|
+
"ResearchInternEventStreamEvent",
|
|
83
|
+
"ResearchInternEventStreamHeartbeat",
|
|
74
84
|
"ResearchInternResponse",
|
|
85
|
+
"ResearchInternSessionCreateRequest",
|
|
86
|
+
"ResearchInternSessionResponse",
|
|
75
87
|
"ResearchInternStatus",
|
|
88
|
+
"ResearchInternTracePublicationRequest",
|
|
89
|
+
"ResearchInternTracePublicationResponse",
|
|
90
|
+
"ResearchInternTurnControl",
|
|
91
|
+
"ResearchInternTurnRequest",
|
|
92
|
+
"ResearchInternTurnResponse",
|
|
76
93
|
"ResearchSwarmLaunchRequest",
|
|
77
94
|
"ResearchSwarmState",
|
|
78
95
|
"ResearchVisual",
|
|
79
96
|
"ResearchVisualPage",
|
|
97
|
+
"ResearchUnsafeLimitExtensionError",
|
|
80
98
|
"ResearchVisualPatchRequest",
|
|
81
99
|
"ResearchVisualPromotionRequest",
|
|
82
100
|
"ResearchVisualVersions",
|
|
@@ -84,6 +102,10 @@ __all__ = [
|
|
|
84
102
|
]
|
|
85
103
|
|
|
86
104
|
_EXPORTS: dict[str, tuple[str, str]] = {
|
|
105
|
+
"AsyncResearchInternReactiveSession": (
|
|
106
|
+
"synth_ai.sdk.research.research_intern",
|
|
107
|
+
"AsyncResearchInternReactiveSession",
|
|
108
|
+
),
|
|
87
109
|
"DataBindingCreateRequest": (
|
|
88
110
|
"synth_ai.sdk.research.contracts",
|
|
89
111
|
"DataBindingCreateRequest",
|
|
@@ -140,6 +162,14 @@ _EXPORTS: dict[str, tuple[str, str]] = {
|
|
|
140
162
|
"synth_ai.sdk.research.contracts",
|
|
141
163
|
"MagiDecisionRequest",
|
|
142
164
|
),
|
|
165
|
+
"MagiDecisionKind": (
|
|
166
|
+
"synth_ai.sdk.research.contracts",
|
|
167
|
+
"MagiDecisionKind",
|
|
168
|
+
),
|
|
169
|
+
"MagiDecisionReceiptResponse": (
|
|
170
|
+
"synth_ai.sdk.research.contracts",
|
|
171
|
+
"MagiDecisionReceiptResponse",
|
|
172
|
+
),
|
|
143
173
|
"MagiMode": ("synth_ai.sdk.research.contracts", "MagiMode"),
|
|
144
174
|
"ProjectComputerCleanupReceiptResponse": (
|
|
145
175
|
"synth_ai.sdk.research.contracts",
|
|
@@ -195,6 +225,22 @@ _EXPORTS: dict[str, tuple[str, str]] = {
|
|
|
195
225
|
"ResearchInsufficientCreditsError",
|
|
196
226
|
),
|
|
197
227
|
"ResearchLimitExceededError": ("synth_ai.sdk.research.errors", "ResearchLimitExceededError"),
|
|
228
|
+
"ResearchLimitExtensionGuardedResumeBlockedError": (
|
|
229
|
+
"synth_ai.sdk.research.errors",
|
|
230
|
+
"ResearchLimitExtensionGuardedResumeBlockedError",
|
|
231
|
+
),
|
|
232
|
+
"ResearchLimitExtensionIdempotencyConflictError": (
|
|
233
|
+
"synth_ai.sdk.research.errors",
|
|
234
|
+
"ResearchLimitExtensionIdempotencyConflictError",
|
|
235
|
+
),
|
|
236
|
+
"ResearchLimitRevisionConflictError": (
|
|
237
|
+
"synth_ai.sdk.research.errors",
|
|
238
|
+
"ResearchLimitRevisionConflictError",
|
|
239
|
+
),
|
|
240
|
+
"ResearchUnsafeLimitExtensionError": (
|
|
241
|
+
"synth_ai.sdk.research.errors",
|
|
242
|
+
"ResearchUnsafeLimitExtensionError",
|
|
243
|
+
),
|
|
198
244
|
"SmrApiError": ("synth_ai.sdk.research.errors", "ResearchApiError"),
|
|
199
245
|
"SmrConcurrentRunLimitExceededError": (
|
|
200
246
|
"synth_ai.sdk.research.errors",
|
|
@@ -214,14 +260,58 @@ _EXPORTS: dict[str, tuple[str, str]] = {
|
|
|
214
260
|
"synth_ai.sdk.research.contracts",
|
|
215
261
|
"ResearchInternProvisionRequest",
|
|
216
262
|
),
|
|
263
|
+
"ResearchInternReactiveSession": (
|
|
264
|
+
"synth_ai.sdk.research.research_intern",
|
|
265
|
+
"ResearchInternReactiveSession",
|
|
266
|
+
),
|
|
267
|
+
"ResearchInternEventStreamCursor": (
|
|
268
|
+
"synth_ai.sdk.research.contracts",
|
|
269
|
+
"ResearchInternEventStreamCursor",
|
|
270
|
+
),
|
|
271
|
+
"ResearchInternEventStreamEvent": (
|
|
272
|
+
"synth_ai.sdk.research.contracts",
|
|
273
|
+
"ResearchInternEventStreamEvent",
|
|
274
|
+
),
|
|
275
|
+
"ResearchInternEventStreamHeartbeat": (
|
|
276
|
+
"synth_ai.sdk.research.contracts",
|
|
277
|
+
"ResearchInternEventStreamHeartbeat",
|
|
278
|
+
),
|
|
217
279
|
"ResearchInternResponse": (
|
|
218
280
|
"synth_ai.sdk.research.contracts",
|
|
219
281
|
"ResearchInternResponse",
|
|
220
282
|
),
|
|
283
|
+
"ResearchInternSessionCreateRequest": (
|
|
284
|
+
"synth_ai.sdk.research.contracts",
|
|
285
|
+
"ResearchInternSessionCreateRequest",
|
|
286
|
+
),
|
|
287
|
+
"ResearchInternSessionResponse": (
|
|
288
|
+
"synth_ai.sdk.research.contracts",
|
|
289
|
+
"ResearchInternSessionResponse",
|
|
290
|
+
),
|
|
221
291
|
"ResearchInternStatus": (
|
|
222
292
|
"synth_ai.sdk.research.contracts",
|
|
223
293
|
"ResearchInternStatus",
|
|
224
294
|
),
|
|
295
|
+
"ResearchInternTracePublicationRequest": (
|
|
296
|
+
"synth_ai.sdk.research.contracts",
|
|
297
|
+
"ResearchInternTracePublicationRequest",
|
|
298
|
+
),
|
|
299
|
+
"ResearchInternTracePublicationResponse": (
|
|
300
|
+
"synth_ai.sdk.research.contracts",
|
|
301
|
+
"ResearchInternTracePublicationResponse",
|
|
302
|
+
),
|
|
303
|
+
"ResearchInternTurnControl": (
|
|
304
|
+
"synth_ai.sdk.research.contracts",
|
|
305
|
+
"ResearchInternTurnControl",
|
|
306
|
+
),
|
|
307
|
+
"ResearchInternTurnRequest": (
|
|
308
|
+
"synth_ai.sdk.research.contracts",
|
|
309
|
+
"ResearchInternTurnRequest",
|
|
310
|
+
),
|
|
311
|
+
"ResearchInternTurnResponse": (
|
|
312
|
+
"synth_ai.sdk.research.contracts",
|
|
313
|
+
"ResearchInternTurnResponse",
|
|
314
|
+
),
|
|
225
315
|
"ResearchSwarmLaunchRequest": (
|
|
226
316
|
"synth_ai.sdk.research.contracts",
|
|
227
317
|
"ResearchSwarmLaunchRequest",
|
|
@@ -6,6 +6,8 @@ import json
|
|
|
6
6
|
import os
|
|
7
7
|
import sys
|
|
8
8
|
from dataclasses import asdict, is_dataclass
|
|
9
|
+
from datetime import date, datetime, time
|
|
10
|
+
from enum import Enum
|
|
9
11
|
from typing import Any
|
|
10
12
|
|
|
11
13
|
from synth_ai.core.errors import SynthError
|
|
@@ -54,6 +56,7 @@ from synth_ai.mcp.research.tools.projects import build_project_tools
|
|
|
54
56
|
from synth_ai.mcp.research.tools.prs import build_pr_tools
|
|
55
57
|
from synth_ai.mcp.research.tools.readiness import build_readiness_tools
|
|
56
58
|
from synth_ai.mcp.research.tools.repos import build_repo_tools
|
|
59
|
+
from synth_ai.mcp.research.tools.research_intern import build_research_intern_tools
|
|
57
60
|
from synth_ai.mcp.research.tools.resources import build_resource_tools
|
|
58
61
|
from synth_ai.mcp.research.tools.runs import build_run_tools
|
|
59
62
|
from synth_ai.mcp.research.tools.trained_models import build_trained_model_tools
|
|
@@ -92,6 +95,7 @@ def _optional_int_default(args: JSONDict, name: str, default: int) -> int:
|
|
|
92
95
|
|
|
93
96
|
_STABLE_TOOL_NAMES = frozenset(
|
|
94
97
|
{
|
|
98
|
+
"research_append_research_intern_event",
|
|
95
99
|
"research_archive_factory",
|
|
96
100
|
"research_archive_project",
|
|
97
101
|
"research_branch_run_from_checkpoint",
|
|
@@ -156,6 +160,27 @@ _STABLE_TOOL_NAMES = frozenset(
|
|
|
156
160
|
"research_upload_workspace_files",
|
|
157
161
|
"research_watch_run_events",
|
|
158
162
|
"research_attach_source_repo",
|
|
163
|
+
"research_attach_research_intern_factory",
|
|
164
|
+
"research_close_research_intern_session",
|
|
165
|
+
"research_create_research_intern_session",
|
|
166
|
+
"research_exchange_research_intern_turn",
|
|
167
|
+
"research_get_research_intern",
|
|
168
|
+
"research_get_research_intern_acceptance_receipt",
|
|
169
|
+
"research_get_research_intern_decision",
|
|
170
|
+
"research_get_research_intern_session",
|
|
171
|
+
"research_list_research_intern_acceptance_receipts",
|
|
172
|
+
"research_list_research_intern_decisions",
|
|
173
|
+
"research_list_research_intern_events",
|
|
174
|
+
"research_list_research_intern_factories",
|
|
175
|
+
"research_list_research_intern_sessions",
|
|
176
|
+
"research_provision_research_intern",
|
|
177
|
+
"research_publish_research_intern_acceptance_receipt",
|
|
178
|
+
"research_publish_research_intern_session_trace",
|
|
179
|
+
"research_record_research_intern_decision",
|
|
180
|
+
"research_run_research_intern_turn",
|
|
181
|
+
"research_sync_research_intern_session",
|
|
182
|
+
"research_update_research_intern",
|
|
183
|
+
"research_watch_research_intern_events",
|
|
159
184
|
}
|
|
160
185
|
)
|
|
161
186
|
|
|
@@ -285,13 +310,26 @@ def _optional_string_tuple_arg(args: JSONDict, key: str) -> tuple[str, ...]:
|
|
|
285
310
|
|
|
286
311
|
def _mcp_jsonable(value: Any) -> Any:
|
|
287
312
|
if is_dataclass(value):
|
|
288
|
-
return asdict(value)
|
|
289
|
-
if isinstance(value,
|
|
290
|
-
return
|
|
291
|
-
if isinstance(value,
|
|
313
|
+
return _mcp_jsonable(asdict(value))
|
|
314
|
+
if isinstance(value, Enum):
|
|
315
|
+
return _mcp_jsonable(value.value)
|
|
316
|
+
if isinstance(value, (datetime, date, time)):
|
|
317
|
+
return value.isoformat()
|
|
318
|
+
if isinstance(value, (list, tuple)):
|
|
292
319
|
return [_mcp_jsonable(item) for item in value]
|
|
293
320
|
if isinstance(value, dict):
|
|
294
321
|
return {str(key): _mcp_jsonable(item) for key, item in value.items()}
|
|
322
|
+
if isinstance(value, (set, frozenset)):
|
|
323
|
+
normalized = [_mcp_jsonable(item) for item in value]
|
|
324
|
+
return sorted(
|
|
325
|
+
normalized,
|
|
326
|
+
key=lambda item: json.dumps(
|
|
327
|
+
item,
|
|
328
|
+
ensure_ascii=False,
|
|
329
|
+
sort_keys=True,
|
|
330
|
+
separators=(",", ":"),
|
|
331
|
+
),
|
|
332
|
+
)
|
|
295
333
|
return value
|
|
296
334
|
|
|
297
335
|
|
|
@@ -411,6 +449,7 @@ class ResearchMcpServer:
|
|
|
411
449
|
*build_model_tools(self),
|
|
412
450
|
*build_output_tools(self),
|
|
413
451
|
*build_readiness_tools(self),
|
|
452
|
+
*build_research_intern_tools(self._core_client_from_args),
|
|
414
453
|
*build_resource_tools(self),
|
|
415
454
|
*build_run_tools(self),
|
|
416
455
|
*build_progress_tools(self),
|
|
@@ -1326,9 +1365,13 @@ class ResearchMcpServer:
|
|
|
1326
1365
|
)
|
|
1327
1366
|
limit_value = self._optional_float_arg(args, "limit_value")
|
|
1328
1367
|
additional_value = self._optional_float_arg(args, "additional_value")
|
|
1329
|
-
|
|
1330
|
-
|
|
1368
|
+
expected_revision = optional_int(args, "expected_revision")
|
|
1369
|
+
if expected_revision is None or expected_revision < 1:
|
|
1370
|
+
raise ValueError("expected_revision must be an integer greater than or equal to 1")
|
|
1371
|
+
resolve_blockers = optional_bool(args, "resolve_blockers", default=False)
|
|
1372
|
+
resume = optional_bool(args, "resume", default=False)
|
|
1331
1373
|
kwargs = {
|
|
1374
|
+
"expected_revision": expected_revision,
|
|
1332
1375
|
"limit_value": limit_value,
|
|
1333
1376
|
"additional_value": additional_value,
|
|
1334
1377
|
"reason": optional_string(args, "reason"),
|
|
@@ -2722,7 +2765,7 @@ class ResearchMcpServer:
|
|
|
2722
2765
|
arguments = params.get("arguments")
|
|
2723
2766
|
if arguments is not None and not isinstance(arguments, dict):
|
|
2724
2767
|
raise RpcError(-32602, "tools/call arguments must be an object")
|
|
2725
|
-
result = self.call_tool(tool_name, arguments)
|
|
2768
|
+
result = _mcp_jsonable(self.call_tool(tool_name, arguments))
|
|
2726
2769
|
return {
|
|
2727
2770
|
"jsonrpc": "2.0",
|
|
2728
2771
|
"id": request_id,
|
|
@@ -13,6 +13,7 @@ from synth_ai.mcp.research.tools.project_data import build_project_data_tools
|
|
|
13
13
|
from synth_ai.mcp.research.tools.projects import build_project_tools
|
|
14
14
|
from synth_ai.mcp.research.tools.prs import build_pr_tools
|
|
15
15
|
from synth_ai.mcp.research.tools.readiness import build_readiness_tools
|
|
16
|
+
from synth_ai.mcp.research.tools.research_intern import build_research_intern_tools
|
|
16
17
|
from synth_ai.mcp.research.tools.repos import build_repo_tools
|
|
17
18
|
from synth_ai.mcp.research.tools.runs import build_run_tools
|
|
18
19
|
from synth_ai.mcp.research.tools.visuals import build_visual_tools
|
|
@@ -32,6 +33,7 @@ __all__ = [
|
|
|
32
33
|
"build_project_tools",
|
|
33
34
|
"build_pr_tools",
|
|
34
35
|
"build_readiness_tools",
|
|
36
|
+
"build_research_intern_tools",
|
|
35
37
|
"build_repo_tools",
|
|
36
38
|
"build_run_tools",
|
|
37
39
|
"build_visual_tools",
|