synth-ai 0.18.2.dev607__tar.gz → 0.18.2.dev609__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.
Files changed (252) hide show
  1. {synth_ai-0.18.2.dev607/synth_ai.egg-info → synth_ai-0.18.2.dev609}/PKG-INFO +1 -1
  2. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/pyproject.toml +1 -1
  3. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/factories.py +8 -0
  4. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/advanced_factories.py +3 -0
  5. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/__init__.py +4 -0
  6. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/factory_operations.py +13 -0
  7. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/research_intern.py +46 -0
  8. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/public.py +4 -0
  9. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/research_intern.py +33 -0
  10. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/factories.py +3 -0
  11. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609/synth_ai.egg-info}/PKG-INFO +1 -1
  12. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/LICENSE +0 -0
  13. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/MANIFEST.in +0 -0
  14. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/README.md +0 -0
  15. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/setup.cfg +0 -0
  16. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/README.md +0 -0
  17. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/__init__.py +0 -0
  18. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/__main__.py +0 -0
  19. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/cli/AGENTS.md +0 -0
  20. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/cli/README.md +0 -0
  21. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/cli/__init__.py +0 -0
  22. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/cli/__main__.py +0 -0
  23. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/cli/main.py +0 -0
  24. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/cli/research.py +0 -0
  25. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/cli/research_environments.py +0 -0
  26. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/cli/research_image_releases.py +0 -0
  27. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/cli/research_projects.py +0 -0
  28. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/client.py +0 -0
  29. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/README.md +0 -0
  30. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/__init__.py +0 -0
  31. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/auth/__init__.py +0 -0
  32. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/auth/credentials.py +0 -0
  33. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/contracts/__init__.py +0 -0
  34. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/contracts/json_value.py +0 -0
  35. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/contracts/pagination.py +0 -0
  36. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/errors.py +0 -0
  37. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/http/__init__.py +0 -0
  38. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/http/async_transport.py +0 -0
  39. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/http/request.py +0 -0
  40. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/http/retry.py +0 -0
  41. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/http/streaming.py +0 -0
  42. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/http/transport.py +0 -0
  43. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/research/__init__.py +0 -0
  44. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/utils/__init__.py +0 -0
  45. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/utils/env.py +0 -0
  46. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/utils/log_filter.py +0 -0
  47. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/utils/paths.py +0 -0
  48. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/core/utils/urls.py +0 -0
  49. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/README.md +0 -0
  50. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/__init__.py +0 -0
  51. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/__main__.py +0 -0
  52. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/objective_tools.py +0 -0
  53. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/registry.py +0 -0
  54. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/request_models.py +0 -0
  55. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/server.py +0 -0
  56. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/__init__.py +0 -0
  57. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/approvals.py +0 -0
  58. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/artifacts.py +0 -0
  59. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/datasets.py +0 -0
  60. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/environments.py +0 -0
  61. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/exports.py +0 -0
  62. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/factory_results.py +0 -0
  63. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/files.py +0 -0
  64. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/image_releases.py +0 -0
  65. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/integrations.py +0 -0
  66. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/logs.py +0 -0
  67. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/models.py +0 -0
  68. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/outputs.py +0 -0
  69. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/policy_schemas.py +0 -0
  70. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/progress.py +0 -0
  71. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/project_data.py +0 -0
  72. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/projects.py +0 -0
  73. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/prs.py +0 -0
  74. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/readiness.py +0 -0
  75. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/repos.py +0 -0
  76. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/research_intern.py +0 -0
  77. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/resources.py +0 -0
  78. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/runs.py +0 -0
  79. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/trained_models.py +0 -0
  80. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/usage.py +0 -0
  81. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/visuals.py +0 -0
  82. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/mcp/research/tools/workspace_inputs.py +0 -0
  83. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/py.typed +0 -0
  84. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/README.md +0 -0
  85. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/__init__.py +0 -0
  86. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/pagination.py +0 -0
  87. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/__init__.py +0 -0
  88. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/_internal/__init__.py +0 -0
  89. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/_internal/crypto.py +0 -0
  90. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/_internal/env.py +0 -0
  91. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/_internal/urls.py +0 -0
  92. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/account.py +0 -0
  93. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/advanced.py +0 -0
  94. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/advanced_swarms.py +0 -0
  95. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/artifacts.py +0 -0
  96. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/auth.py +0 -0
  97. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/client.py +0 -0
  98. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/_activity_wire.py +0 -0
  99. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/_environment_wire.py +0 -0
  100. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/_transcript_wire.py +0 -0
  101. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/_wire.py +0 -0
  102. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/activity.py +0 -0
  103. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/activity_items.py +0 -0
  104. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/actor_images.py +0 -0
  105. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/billing.py +0 -0
  106. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/canonical_usage.py +0 -0
  107. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/checkpoints.py +0 -0
  108. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/cloud_deployment_claims.py +0 -0
  109. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/cloud_deployments.py +0 -0
  110. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/common.py +0 -0
  111. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/dataset_revisions.py +0 -0
  112. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/deliveries.py +0 -0
  113. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/dev_environment_evidence.py +0 -0
  114. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/economics.py +0 -0
  115. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/environment_manifest.py +0 -0
  116. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/environments.py +0 -0
  117. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/evidence.py +0 -0
  118. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/factories.py +0 -0
  119. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/factory_evidence.py +0 -0
  120. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/factory_lenses.py +0 -0
  121. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/factory_role_receipts.py +0 -0
  122. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/failure.py +0 -0
  123. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/image_releases.py +0 -0
  124. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/limit_evidence.py +0 -0
  125. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/local_execution_profile.py +0 -0
  126. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/operator_evidence.py +0 -0
  127. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/project.py +0 -0
  128. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/project_data.py +0 -0
  129. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/project_runtime.py +0 -0
  130. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/project_workspace.py +0 -0
  131. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/project_workspace_evidence.py +0 -0
  132. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/projects.py +0 -0
  133. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/promotions.py +0 -0
  134. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/run_authority.py +0 -0
  135. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/run_control.py +0 -0
  136. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/run_diagnostics.py +0 -0
  137. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/run_events.py +0 -0
  138. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/run_execution.py +0 -0
  139. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/run_launch.py +0 -0
  140. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/run_observability.py +0 -0
  141. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/run_state.py +0 -0
  142. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/run_timeline.py +0 -0
  143. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/runtime_image.py +0 -0
  144. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/runtime_intent.py +0 -0
  145. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/runtime_stream.py +0 -0
  146. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/runtime_stream_snapshot.py +0 -0
  147. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/scientific_integrity.py +0 -0
  148. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_actor_models.py +0 -0
  149. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_actor_policy_data.py +0 -0
  150. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_agent_harnesses.py +0 -0
  151. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_agent_kinds.py +0 -0
  152. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_agent_models.py +0 -0
  153. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_branching.py +0 -0
  154. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_credential_providers.py +0 -0
  155. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_environment_kinds.py +0 -0
  156. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_evidence_obligations.py +0 -0
  157. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_funding_sources.py +0 -0
  158. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_horizons.py +0 -0
  159. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_host_kinds.py +0 -0
  160. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_inference_providers.py +0 -0
  161. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_network_topology.py +0 -0
  162. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_providers.py +0 -0
  163. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_resource_kinds.py +0 -0
  164. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_roles.py +0 -0
  165. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_run_policy.py +0 -0
  166. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_runbooks.py +0 -0
  167. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_runnable_project.py +0 -0
  168. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_runtime_kinds.py +0 -0
  169. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_tool_providers.py +0 -0
  170. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/smr_work_modes.py +0 -0
  171. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/status.py +0 -0
  172. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/swarms.py +0 -0
  173. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/tag.py +0 -0
  174. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/traces.py +0 -0
  175. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/transcript.py +0 -0
  176. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/types.py +0 -0
  177. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/usage.py +0 -0
  178. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/visuals.py +0 -0
  179. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/wire_models.py +0 -0
  180. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/wire_models_README.md +0 -0
  181. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/work_products.py +0 -0
  182. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/contracts/workspaces.py +0 -0
  183. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/economics.py +0 -0
  184. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/efforts.py +0 -0
  185. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/environments.py +0 -0
  186. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/errors.py +0 -0
  187. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/events.py +0 -0
  188. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/experiments.py +0 -0
  189. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/facade.py +0 -0
  190. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/factories.py +0 -0
  191. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/factory_storage.py +0 -0
  192. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/image_releases.py +0 -0
  193. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/knowledge.py +0 -0
  194. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/models.py +0 -0
  195. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/operations.py +0 -0
  196. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/project_data.py +0 -0
  197. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/project_deliveries.py +0 -0
  198. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/project_workspaces.py +0 -0
  199. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/projects.py +0 -0
  200. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/readouts.py +0 -0
  201. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/secrets.py +0 -0
  202. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/README.md +0 -0
  203. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/__init__.py +0 -0
  204. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/_base.py +0 -0
  205. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/_client_helpers.py +0 -0
  206. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/_run_authority_mixin.py +0 -0
  207. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/approvals.py +0 -0
  208. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/billing.py +0 -0
  209. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/client.py +0 -0
  210. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/cloud_deployments.py +0 -0
  211. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/config.py +0 -0
  212. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/cost.py +0 -0
  213. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/datasets.py +0 -0
  214. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/dev_environments.py +0 -0
  215. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/environments.py +0 -0
  216. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/exports.py +0 -0
  217. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/factory_evidence.py +0 -0
  218. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/files.py +0 -0
  219. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/github.py +0 -0
  220. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/image_releases.py +0 -0
  221. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/images.py +0 -0
  222. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/logs.py +0 -0
  223. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/models.py +0 -0
  224. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/outputs.py +0 -0
  225. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/progress.py +0 -0
  226. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/project.py +0 -0
  227. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/projects.py +0 -0
  228. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/prs.py +0 -0
  229. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/readiness.py +0 -0
  230. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/repositories.py +0 -0
  231. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/runs.py +0 -0
  232. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/secrets.py +0 -0
  233. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/setup.py +0 -0
  234. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/tag.py +0 -0
  235. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/trained_models.py +0 -0
  236. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/transport.py +0 -0
  237. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/usage.py +0 -0
  238. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/work_products.py +0 -0
  239. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/session/workspace_inputs.py +0 -0
  240. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/swarms.py +0 -0
  241. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/traces.py +0 -0
  242. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/transport/__init__.py +0 -0
  243. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/transport/http.py +0 -0
  244. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/transport/pagination.py +0 -0
  245. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/version.py +0 -0
  246. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/visuals.py +0 -0
  247. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai/sdk/research/wiki.py +0 -0
  248. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai.egg-info/SOURCES.txt +0 -0
  249. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai.egg-info/dependency_links.txt +0 -0
  250. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai.egg-info/entry_points.txt +0 -0
  251. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai.egg-info/requires.txt +0 -0
  252. {synth_ai-0.18.2.dev607 → synth_ai-0.18.2.dev609}/synth_ai.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.18.2.dev607
3
+ Version: 0.18.2.dev609
4
4
  Summary: Python SDK and CLI for Synth Managed Research and Research Factory
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "synth-ai"
3
- version = "0.18.2.dev607"
3
+ version = "0.18.2.dev609"
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"
@@ -277,6 +277,7 @@ def build_factory_tools(server: Any) -> list[ToolDefinition]:
277
277
  return client.factories.wake_due(
278
278
  str(args["factory_id"]),
279
279
  launch_request=args.get("launch_request"),
280
+ effort_ids=tuple(str(value) for value in args.get("effort_ids") or []),
280
281
  limit=int(args.get("limit") or 10),
281
282
  allow_overlap=bool(args.get("allow_overlap") or False),
282
283
  dry_run=True,
@@ -765,6 +766,13 @@ def build_factory_tools(server: Any) -> list[ToolDefinition]:
765
766
  "type": "object",
766
767
  "description": "Optional default launch request.",
767
768
  },
769
+ "effort_ids": {
770
+ "type": "array",
771
+ "items": {"type": "string"},
772
+ "maxItems": 100,
773
+ "uniqueItems": True,
774
+ "description": "Optional exact Effort scope for the preview.",
775
+ },
768
776
  "limit": {
769
777
  "type": "integer",
770
778
  "description": "Maximum due Efforts to evaluate.",
@@ -287,6 +287,7 @@ class ResearchFactoriesAPI:
287
287
  factory_id: str,
288
288
  *,
289
289
  launch_request: Mapping[str, Any] | dict[str, Any] | None = None,
290
+ effort_ids: tuple[str, ...] = (),
290
291
  limit: int = 10,
291
292
  allow_overlap: bool = False,
292
293
  continue_on_error: bool = True,
@@ -295,6 +296,7 @@ class ResearchFactoriesAPI:
295
296
  return self._session.factories.wake_due(
296
297
  factory_id,
297
298
  launch_request=launch_request,
299
+ effort_ids=effort_ids,
298
300
  limit=limit,
299
301
  allow_overlap=allow_overlap,
300
302
  dry_run=True,
@@ -322,6 +324,7 @@ class ResearchFactoriesAPI:
322
324
  result = self._session.factories.wake_due(
323
325
  factory_id,
324
326
  launch_request=contract.launch_request,
327
+ effort_ids=contract.effort_ids,
325
328
  limit=contract.limit,
326
329
  allow_overlap=contract.allow_overlap,
327
330
  dry_run=False,
@@ -296,6 +296,8 @@ from synth_ai.sdk.research.contracts.research_intern import (
296
296
  InternSyncCommandKind,
297
297
  InternSyncCommandReceipt,
298
298
  InternSyncCommandRequest,
299
+ InternSyncDeployPacket,
300
+ InternSyncDeployPacketEndpoint,
299
301
  InternSyncEvent,
300
302
  InternSyncEventPage,
301
303
  InternSyncEventStreamEnvelope,
@@ -842,6 +844,8 @@ __all__ = [
842
844
  "InternSyncCommandKind",
843
845
  "InternSyncCommandReceipt",
844
846
  "InternSyncCommandRequest",
847
+ "InternSyncDeployPacket",
848
+ "InternSyncDeployPacketEndpoint",
845
849
  "InternSyncEvent",
846
850
  "InternSyncEventPage",
847
851
  "InternSyncEventStreamEnvelope",
@@ -2150,6 +2150,7 @@ class FactoryStatus:
2150
2150
  @dataclass(frozen=True)
2151
2151
  class FactoryWakeDueRequest:
2152
2152
  launch_request: dict[str, Any] | None = None
2153
+ effort_ids: tuple[str, ...] = ()
2153
2154
  limit: int = 10
2154
2155
  allow_overlap: bool = False
2155
2156
  dry_run: bool = False
@@ -2163,6 +2164,7 @@ class FactoryWakeDueRequest:
2163
2164
  mapping = _require_mapping(payload, label="factory wake request contract")
2164
2165
  allowed_keys = {
2165
2166
  "launch_request",
2167
+ "effort_ids",
2166
2168
  "limit",
2167
2169
  "allow_overlap",
2168
2170
  "continue_on_error",
@@ -2194,12 +2196,21 @@ class FactoryWakeDueRequest:
2194
2196
  if not 1 <= limit <= 100:
2195
2197
  raise ValueError("factory wake limit must be between 1 and 100")
2196
2198
  continue_on_error = _optional_bool(mapping, "continue_on_error")
2199
+ raw_effort_ids = mapping.get("effort_ids") or ()
2200
+ if not isinstance(raw_effort_ids, (list, tuple)):
2201
+ raise ValueError("factory wake effort_ids must be an array")
2202
+ effort_ids = tuple(str(value).strip() for value in raw_effort_ids)
2203
+ if any(not value for value in effort_ids) or len(set(effort_ids)) != len(effort_ids):
2204
+ raise ValueError("factory wake effort_ids must be unique non-empty strings")
2205
+ if len(effort_ids) > 100:
2206
+ raise ValueError("factory wake effort_ids must contain at most 100 entries")
2197
2207
  return cls(
2198
2208
  launch_request=(
2199
2209
  _optional_object_dict(launch_request, label="factory wake launch_request")
2200
2210
  if launch_request is not None
2201
2211
  else None
2202
2212
  ),
2213
+ effort_ids=effort_ids,
2203
2214
  limit=limit,
2204
2215
  allow_overlap=bool(_optional_bool(mapping, "allow_overlap")),
2205
2216
  dry_run=bool(_optional_bool(mapping, "dry_run")),
@@ -2214,6 +2225,7 @@ class FactoryWakeDueRequest:
2214
2225
  "launch_request": (
2215
2226
  dict(self.launch_request) if self.launch_request is not None else None
2216
2227
  ),
2228
+ "effort_ids": list(self.effort_ids),
2217
2229
  "limit": self.limit,
2218
2230
  "allow_overlap": self.allow_overlap,
2219
2231
  "continue_on_error": self.continue_on_error,
@@ -2222,6 +2234,7 @@ class FactoryWakeDueRequest:
2222
2234
 
2223
2235
  def to_wire(self) -> dict[str, Any]:
2224
2236
  payload: dict[str, Any] = {
2237
+ "effort_ids": list(self.effort_ids),
2225
2238
  "limit": self.limit,
2226
2239
  "allow_overlap": self.allow_overlap,
2227
2240
  "dry_run": self.dry_run,
@@ -164,7 +164,12 @@ class InternSyncStatus(StrEnum):
164
164
 
165
165
  class InternRuntimeOutcome(StrEnum):
166
166
  COMPLETED = "completed"
167
+ PARTIAL = "partial"
168
+ BLOCKED = "blocked"
167
169
  CANCELLED = "cancelled"
170
+ CANCELED = "canceled"
171
+ STOPPED = "stopped"
172
+ ARCHIVED = "archived"
168
173
  FAILED = "failed"
169
174
 
170
175
 
@@ -182,6 +187,9 @@ class InternSyncSessionCreateRequest(_StrictContract):
182
187
  idempotency_key: str = Field(min_length=1, max_length=512)
183
188
  binding: InternRuntimeBinding = Field(default_factory=InternRuntimeBinding)
184
189
  metadata: dict[str, Any] = Field(default_factory=dict)
190
+ execution_mode: Literal["fast", "standard", "deep"] = "standard"
191
+ task_template: str | None = Field(default=None, min_length=1, max_length=128)
192
+ objective_bounds: dict[str, Any] | None = None
185
193
 
186
194
 
187
195
  class SyncTemplateProvisionedResource(_StrictContract):
@@ -317,12 +325,16 @@ class InternSyncSession(_StrictContract):
317
325
  state_generation: int = Field(ge=0)
318
326
  last_event_sequence: int = Field(ge=0)
319
327
  binding: InternRuntimeBinding
328
+ metadata: dict[str, Any] = Field(default_factory=dict)
329
+ objective_bounds: dict[str, Any] | None = None
320
330
  pending_turn_id: str | None = None
321
331
  pending_action_id: str | None = None
322
332
  pending_interaction_id: str | None = None
323
333
  outcome: InternRuntimeOutcome | None = None
324
334
  failure_code: str | None = None
325
335
  temporal_workflow_id: str
336
+ execution_mode: Literal["fast", "standard", "deep"] = "standard"
337
+ execution_profile_id: Literal["intern_sync"] = "intern_sync"
326
338
  # Server-minted projection stamps. Old backends omit them entirely; new
327
339
  # backends stamp them once the corresponding effect lands. The SDK only
328
340
  # observes these receipts — the backend remains the minting authority.
@@ -331,6 +343,10 @@ class InternSyncSession(_StrictContract):
331
343
  trace_publication: SyncTracePublicationReceipt | None = None
332
344
  kit_associations: tuple[SyncKitAssociationReceipt, ...] = ()
333
345
  kit_readiness: SyncKitReadiness | None = None
346
+ visuals: tuple[dict[str, Any], ...] = ()
347
+ kit_state_receipts: tuple[dict[str, Any], ...] = ()
348
+ experiments: tuple[dict[str, Any], ...] = ()
349
+ harness_bundle_available: bool = False
334
350
  created_at: datetime
335
351
  updated_at: datetime
336
352
  closed_at: datetime | None = None
@@ -342,6 +358,10 @@ class InternSyncCommandRequest(_StrictContract):
342
358
  expected_generation: int = Field(ge=0)
343
359
  command_kind: InternSyncCommandKind
344
360
  payload: dict[str, Any] = Field(default_factory=dict)
361
+ execution_mode: Literal["fast", "standard", "deep"] = "standard"
362
+ visual_selection: dict[str, Any] | None = None
363
+ mode: Literal["sync", "async"] = "sync"
364
+ evidence_refs: tuple[str, ...] = Field(default=(), max_length=128)
345
365
 
346
366
  @model_validator(mode="after")
347
367
  def validate_command_payload(self) -> InternSyncCommandRequest:
@@ -370,6 +390,32 @@ class InternSyncCommandRequest(_StrictContract):
370
390
  return self
371
391
 
372
392
 
393
+ class InternSyncDeployPacketEndpoint(_StrictContract):
394
+ purpose: Literal[
395
+ "upload_files",
396
+ "upload_workspace",
397
+ "confirm_push",
398
+ "assign_container",
399
+ "container_health",
400
+ ]
401
+ method: Literal["GET", "POST"]
402
+ path: str
403
+
404
+
405
+ class InternSyncDeployPacket(_StrictContract):
406
+ schema_version: Literal["smr.intern-sync-deploy-packet.v1"]
407
+ sync_session_id: str
408
+ project_id: str
409
+ task_template: str | None = None
410
+ auth_scheme: Literal["bearer"]
411
+ auth_env_var: Literal["SYNTH_API_KEY"]
412
+ required_paths: tuple[str, ...] = ()
413
+ endpoints: tuple[InternSyncDeployPacketEndpoint, ...]
414
+ done_signal: Literal["workspace_confirm_push"]
415
+ image_kind: Literal["craftax_eval"]
416
+ instructions: str
417
+
418
+
373
419
  class InternSyncCommandReceipt(_StrictContract):
374
420
  schema_version: Literal["smr.intern-runtime-command-receipt.v1"]
375
421
  command_id: str
@@ -166,6 +166,8 @@ from synth_ai.sdk.research.contracts import (
166
166
  InternSyncCommandKind,
167
167
  InternSyncCommandReceipt,
168
168
  InternSyncCommandRequest,
169
+ InternSyncDeployPacket,
170
+ InternSyncDeployPacketEndpoint,
169
171
  InternSyncEvent,
170
172
  InternSyncEventPage,
171
173
  InternSyncEventStreamEnvelope,
@@ -493,6 +495,8 @@ __all__ = [
493
495
  "InternSyncCommandKind",
494
496
  "InternSyncCommandReceipt",
495
497
  "InternSyncCommandRequest",
498
+ "InternSyncDeployPacket",
499
+ "InternSyncDeployPacketEndpoint",
496
500
  "InternSyncEvent",
497
501
  "InternSyncEventPage",
498
502
  "InternSyncEventStreamEnvelope",
@@ -60,6 +60,7 @@ from synth_ai.sdk.research.contracts.research_intern import (
60
60
  InternSyncCommandKind,
61
61
  InternSyncCommandReceipt,
62
62
  InternSyncCommandRequest,
63
+ InternSyncDeployPacket,
63
64
  InternSyncEvent,
64
65
  InternSyncEventPage,
65
66
  InternSyncEventStreamEnvelope,
@@ -2134,6 +2135,19 @@ class ResearchInternSyncRuntimeAPI:
2134
2135
  raise ValueError("Sync Intern session identity drifted")
2135
2136
  return session
2136
2137
 
2138
+ def deploy_packet(self, sync_session_id: str) -> InternSyncDeployPacket:
2139
+ packet = InternSyncDeployPacket.from_wire(
2140
+ self._transport.execute(
2141
+ _request(
2142
+ "get_intern_sync_deploy_packet",
2143
+ f"{self._PATH}/{sync_session_id}/deploy-packet",
2144
+ )
2145
+ )
2146
+ )
2147
+ if packet.sync_session_id != sync_session_id:
2148
+ raise ValueError("Sync Intern deploy packet identity drifted")
2149
+ return packet
2150
+
2137
2151
  def command(
2138
2152
  self,
2139
2153
  sync_session_id: str,
@@ -2562,6 +2576,25 @@ class ResearchInternAsyncRuntimeAPI:
2562
2576
  after_sequence=after_sequence,
2563
2577
  )
2564
2578
 
2579
+ def mcp_actions(self, *, limit: int = 100) -> tuple[JsonObject, ...]:
2580
+ """Read the shared runtime MCP-action ledger for this Async Intern."""
2581
+
2582
+ runtime_id = self.get().async_runtime_id
2583
+ response = self._transport.execute(
2584
+ _request(
2585
+ "list_intern_async_runtime_mcp_actions",
2586
+ f"/smr/research-intern/runtimes/async/{runtime_id}/mcp-actions",
2587
+ query={"limit": _bounded_limit(limit)},
2588
+ )
2589
+ )
2590
+ items = array_value(
2591
+ cast(JsonValue, response),
2592
+ operation_id="list_intern_async_runtime_mcp_actions",
2593
+ )
2594
+ if any(not isinstance(item, dict) for item in items):
2595
+ raise ValueError("Async Intern MCP-action ledger must contain objects")
2596
+ return tuple(cast(JsonObject, item) for item in items)
2597
+
2565
2598
  def stream_events(
2566
2599
  self,
2567
2600
  *,
@@ -219,6 +219,7 @@ def _wake_due_preview_kwargs(plan: Mapping[str, Any]) -> dict[str, Any]:
219
219
  field="wake_due.launch_request",
220
220
  )
221
221
  or None,
222
+ "effort_ids": tuple(str(value) for value in wake_due.get("effort_ids") or []),
222
223
  "limit": int(wake_due.get("limit") or 10),
223
224
  "allow_overlap": bool(wake_due.get("allow_overlap") or False),
224
225
  "continue_on_error": bool(wake_due.get("continue_on_error", True)),
@@ -1170,6 +1171,7 @@ class FactoriesAPI(_ClientNamespace):
1170
1171
  factory_id: str,
1171
1172
  *,
1172
1173
  launch_request: Mapping[str, Any] | dict[str, Any] | None = None,
1174
+ effort_ids: tuple[str, ...] = (),
1173
1175
  limit: int = 10,
1174
1176
  allow_overlap: bool = False,
1175
1177
  dry_run: bool = False,
@@ -1190,6 +1192,7 @@ class FactoriesAPI(_ClientNamespace):
1190
1192
  factory_id,
1191
1193
  FactoryWakeDueRequest(
1192
1194
  launch_request=dict(launch_request) if launch_request else None,
1195
+ effort_ids=effort_ids,
1193
1196
  limit=limit,
1194
1197
  allow_overlap=allow_overlap,
1195
1198
  dry_run=dry_run,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.18.2.dev607
3
+ Version: 0.18.2.dev609
4
4
  Summary: Python SDK and CLI for Synth Managed Research and Research Factory
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT