synth-ai 0.18.2.dev611__tar.gz → 0.18.2.dev613__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.dev611/synth_ai.egg-info → synth_ai-0.18.2.dev613}/PKG-INFO +1 -1
  2. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/pyproject.toml +1 -1
  3. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/research_intern.py +126 -6
  4. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/__init__.py +24 -0
  5. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/evidence.py +7 -0
  6. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/research_intern.py +122 -0
  7. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/operations.py +37 -0
  8. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/public.py +28 -0
  9. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/research_intern.py +249 -4
  10. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613/synth_ai.egg-info}/PKG-INFO +1 -1
  11. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/LICENSE +0 -0
  12. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/MANIFEST.in +0 -0
  13. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/README.md +0 -0
  14. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/setup.cfg +0 -0
  15. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/README.md +0 -0
  16. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/__init__.py +0 -0
  17. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/__main__.py +0 -0
  18. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/cli/AGENTS.md +0 -0
  19. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/cli/README.md +0 -0
  20. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/cli/__init__.py +0 -0
  21. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/cli/__main__.py +0 -0
  22. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/cli/main.py +0 -0
  23. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/cli/research.py +0 -0
  24. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/cli/research_environments.py +0 -0
  25. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/cli/research_image_releases.py +0 -0
  26. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/cli/research_projects.py +0 -0
  27. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/client.py +0 -0
  28. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/README.md +0 -0
  29. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/__init__.py +0 -0
  30. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/auth/__init__.py +0 -0
  31. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/auth/credentials.py +0 -0
  32. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/contracts/__init__.py +0 -0
  33. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/contracts/json_value.py +0 -0
  34. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/contracts/pagination.py +0 -0
  35. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/errors.py +0 -0
  36. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/http/__init__.py +0 -0
  37. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/http/async_transport.py +0 -0
  38. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/http/request.py +0 -0
  39. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/http/retry.py +0 -0
  40. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/http/streaming.py +0 -0
  41. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/http/transport.py +0 -0
  42. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/research/__init__.py +0 -0
  43. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/utils/__init__.py +0 -0
  44. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/utils/env.py +0 -0
  45. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/utils/log_filter.py +0 -0
  46. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/utils/paths.py +0 -0
  47. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/core/utils/urls.py +0 -0
  48. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/README.md +0 -0
  49. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/__init__.py +0 -0
  50. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/__main__.py +0 -0
  51. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/objective_tools.py +0 -0
  52. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/registry.py +0 -0
  53. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/request_models.py +0 -0
  54. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/server.py +0 -0
  55. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/__init__.py +0 -0
  56. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/approvals.py +0 -0
  57. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/artifacts.py +0 -0
  58. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/datasets.py +0 -0
  59. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/environments.py +0 -0
  60. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/exports.py +0 -0
  61. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/factories.py +0 -0
  62. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/factory_results.py +0 -0
  63. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/files.py +0 -0
  64. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/image_releases.py +0 -0
  65. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/integrations.py +0 -0
  66. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/logs.py +0 -0
  67. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/models.py +0 -0
  68. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/outputs.py +0 -0
  69. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/policy_schemas.py +0 -0
  70. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/progress.py +0 -0
  71. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/project_data.py +0 -0
  72. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/projects.py +0 -0
  73. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/prs.py +0 -0
  74. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/readiness.py +0 -0
  75. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/repos.py +0 -0
  76. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/resources.py +0 -0
  77. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/runs.py +0 -0
  78. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/trained_models.py +0 -0
  79. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/usage.py +0 -0
  80. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/visuals.py +0 -0
  81. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/mcp/research/tools/workspace_inputs.py +0 -0
  82. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/py.typed +0 -0
  83. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/README.md +0 -0
  84. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/__init__.py +0 -0
  85. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/pagination.py +0 -0
  86. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/__init__.py +0 -0
  87. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/_internal/__init__.py +0 -0
  88. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/_internal/crypto.py +0 -0
  89. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/_internal/env.py +0 -0
  90. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/_internal/urls.py +0 -0
  91. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/account.py +0 -0
  92. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/advanced.py +0 -0
  93. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/advanced_factories.py +0 -0
  94. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/advanced_swarms.py +0 -0
  95. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/artifacts.py +0 -0
  96. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/auth.py +0 -0
  97. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/client.py +0 -0
  98. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/_activity_wire.py +0 -0
  99. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/_environment_wire.py +0 -0
  100. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/_transcript_wire.py +0 -0
  101. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/_wire.py +0 -0
  102. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/activity.py +0 -0
  103. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/activity_items.py +0 -0
  104. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/actor_images.py +0 -0
  105. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/billing.py +0 -0
  106. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/canonical_usage.py +0 -0
  107. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/checkpoints.py +0 -0
  108. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/cloud_deployment_claims.py +0 -0
  109. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/cloud_deployments.py +0 -0
  110. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/common.py +0 -0
  111. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/dataset_revisions.py +0 -0
  112. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/deliveries.py +0 -0
  113. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/dev_environment_evidence.py +0 -0
  114. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/economics.py +0 -0
  115. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/environment_manifest.py +0 -0
  116. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/environments.py +0 -0
  117. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/factories.py +0 -0
  118. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/factory_evidence.py +0 -0
  119. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/factory_lenses.py +0 -0
  120. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/factory_operations.py +0 -0
  121. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/factory_role_receipts.py +0 -0
  122. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/failure.py +0 -0
  123. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/image_releases.py +0 -0
  124. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/limit_evidence.py +0 -0
  125. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/local_execution_profile.py +0 -0
  126. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/operator_evidence.py +0 -0
  127. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/project.py +0 -0
  128. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/project_data.py +0 -0
  129. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/project_runtime.py +0 -0
  130. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/project_workspace.py +0 -0
  131. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/project_workspace_evidence.py +0 -0
  132. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/projects.py +0 -0
  133. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/promotions.py +0 -0
  134. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/run_authority.py +0 -0
  135. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/run_control.py +0 -0
  136. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/run_diagnostics.py +0 -0
  137. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/run_events.py +0 -0
  138. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/run_execution.py +0 -0
  139. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/run_launch.py +0 -0
  140. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/run_observability.py +0 -0
  141. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/run_state.py +0 -0
  142. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/run_timeline.py +0 -0
  143. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/runtime_image.py +0 -0
  144. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/runtime_intent.py +0 -0
  145. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/runtime_stream.py +0 -0
  146. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/runtime_stream_snapshot.py +0 -0
  147. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/scientific_integrity.py +0 -0
  148. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_actor_models.py +0 -0
  149. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_actor_policy_data.py +0 -0
  150. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_agent_harnesses.py +0 -0
  151. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_agent_kinds.py +0 -0
  152. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_agent_models.py +0 -0
  153. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_branching.py +0 -0
  154. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_credential_providers.py +0 -0
  155. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_environment_kinds.py +0 -0
  156. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_evidence_obligations.py +0 -0
  157. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_funding_sources.py +0 -0
  158. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_horizons.py +0 -0
  159. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_host_kinds.py +0 -0
  160. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_inference_providers.py +0 -0
  161. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_network_topology.py +0 -0
  162. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_providers.py +0 -0
  163. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_resource_kinds.py +0 -0
  164. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_roles.py +0 -0
  165. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_run_policy.py +0 -0
  166. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_runbooks.py +0 -0
  167. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_runnable_project.py +0 -0
  168. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_runtime_kinds.py +0 -0
  169. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_tool_providers.py +0 -0
  170. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/smr_work_modes.py +0 -0
  171. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/status.py +0 -0
  172. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/swarms.py +0 -0
  173. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/tag.py +0 -0
  174. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/traces.py +0 -0
  175. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/transcript.py +0 -0
  176. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/types.py +0 -0
  177. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/usage.py +0 -0
  178. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/visuals.py +0 -0
  179. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/wire_models.py +0 -0
  180. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/wire_models_README.md +0 -0
  181. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/work_products.py +0 -0
  182. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/contracts/workspaces.py +0 -0
  183. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/economics.py +0 -0
  184. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/efforts.py +0 -0
  185. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/environments.py +0 -0
  186. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/errors.py +0 -0
  187. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/events.py +0 -0
  188. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/experiments.py +0 -0
  189. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/facade.py +0 -0
  190. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/factories.py +0 -0
  191. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/factory_storage.py +0 -0
  192. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/image_releases.py +0 -0
  193. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/knowledge.py +0 -0
  194. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/models.py +0 -0
  195. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/project_data.py +0 -0
  196. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/project_deliveries.py +0 -0
  197. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/project_workspaces.py +0 -0
  198. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/projects.py +0 -0
  199. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/readouts.py +0 -0
  200. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/secrets.py +0 -0
  201. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/README.md +0 -0
  202. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/__init__.py +0 -0
  203. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/_base.py +0 -0
  204. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/_client_helpers.py +0 -0
  205. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/_run_authority_mixin.py +0 -0
  206. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/approvals.py +0 -0
  207. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/billing.py +0 -0
  208. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/client.py +0 -0
  209. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/cloud_deployments.py +0 -0
  210. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/config.py +0 -0
  211. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/cost.py +0 -0
  212. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/datasets.py +0 -0
  213. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/dev_environments.py +0 -0
  214. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/environments.py +0 -0
  215. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/exports.py +0 -0
  216. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/factories.py +0 -0
  217. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/factory_evidence.py +0 -0
  218. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/files.py +0 -0
  219. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/github.py +0 -0
  220. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/image_releases.py +0 -0
  221. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/images.py +0 -0
  222. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/logs.py +0 -0
  223. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/models.py +0 -0
  224. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/outputs.py +0 -0
  225. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/progress.py +0 -0
  226. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/project.py +0 -0
  227. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/projects.py +0 -0
  228. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/prs.py +0 -0
  229. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/readiness.py +0 -0
  230. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/repositories.py +0 -0
  231. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/runs.py +0 -0
  232. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/secrets.py +0 -0
  233. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/setup.py +0 -0
  234. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/tag.py +0 -0
  235. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/trained_models.py +0 -0
  236. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/transport.py +0 -0
  237. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/usage.py +0 -0
  238. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/work_products.py +0 -0
  239. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/session/workspace_inputs.py +0 -0
  240. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/swarms.py +0 -0
  241. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/traces.py +0 -0
  242. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/transport/__init__.py +0 -0
  243. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/transport/http.py +0 -0
  244. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/transport/pagination.py +0 -0
  245. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/version.py +0 -0
  246. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/visuals.py +0 -0
  247. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai/sdk/research/wiki.py +0 -0
  248. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai.egg-info/SOURCES.txt +0 -0
  249. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai.egg-info/dependency_links.txt +0 -0
  250. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai.egg-info/entry_points.txt +0 -0
  251. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/synth_ai.egg-info/requires.txt +0 -0
  252. {synth_ai-0.18.2.dev611 → synth_ai-0.18.2.dev613}/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.dev611
3
+ Version: 0.18.2.dev613
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.dev611"
3
+ version = "0.18.2.dev613"
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"
@@ -25,6 +25,7 @@ from synth_ai.sdk.research.contracts.research_intern import (
25
25
  InternAsyncEnsureRequest,
26
26
  InternAsyncInstructionKind,
27
27
  InternAsyncInstructionRequest,
28
+ InternCrossMetaThreadMessageCreateRequest,
28
29
  InternRuntimeOutcome,
29
30
  InternSyncCommandKind,
30
31
  InternSyncCommandRequest,
@@ -140,7 +141,52 @@ def build_research_intern_tools(
140
141
 
141
142
  def intern_sync_list(args: JSONDict) -> list[JSONDict]:
142
143
  with client_from_args(args) as client:
143
- return _wire_list(client.intern.sync_.list(limit=optional_int(args, "limit") or 100))
144
+ return _wire_list(client.intern.sync_.branches())
145
+
146
+ def intern_sync_branches(args: JSONDict) -> list[JSONDict]:
147
+ with client_from_args(args) as client:
148
+ return _wire_list(client.intern.sync_.branches())
149
+
150
+ def intern_meta_threads(args: JSONDict) -> list[JSONDict]:
151
+ with client_from_args(args) as client:
152
+ return _wire_list(client.intern.meta_threads.list())
153
+
154
+ def intern_meta_segments(args: JSONDict) -> list[JSONDict]:
155
+ with client_from_args(args) as client:
156
+ return _wire_list(
157
+ client.intern.meta_threads.segments(require_string(args, "meta_thread_id"))
158
+ )
159
+
160
+ def intern_meta_messages(args: JSONDict) -> list[JSONDict]:
161
+ with client_from_args(args) as client:
162
+ return _wire_list(
163
+ client.intern.meta_threads.messages(
164
+ require_string(args, "meta_thread_id"),
165
+ limit=optional_int(args, "limit") or 200,
166
+ )
167
+ )
168
+
169
+ def intern_meta_send(args: JSONDict) -> JSONDict:
170
+ request = InternCrossMetaThreadMessageCreateRequest.model_validate(
171
+ _request_payload(
172
+ args,
173
+ (
174
+ "message_id",
175
+ "source_meta_thread_id",
176
+ "destination_meta_thread_id",
177
+ "kind",
178
+ "idempotency_key",
179
+ "payload",
180
+ "linked_message_id",
181
+ "sync_session_id",
182
+ "segment_id",
183
+ "resolution",
184
+ "summary",
185
+ ),
186
+ )
187
+ )
188
+ with client_from_args(args) as client:
189
+ return client.intern.meta_threads.send(request).to_wire()
144
190
 
145
191
  def intern_sync_get(args: JSONDict) -> JSONDict:
146
192
  with client_from_args(args) as client:
@@ -755,6 +801,76 @@ def build_research_intern_tools(
755
801
  "sync_session_id": {"type": "string", "minLength": 1},
756
802
  }
757
803
  tools = [
804
+ ToolDefinition(
805
+ name="intern_meta_threads",
806
+ description="List the Intern's one Sync and one Async meta-thread.",
807
+ input_schema=tool_schema({}, required=[]),
808
+ handler=intern_meta_threads,
809
+ required_scopes=READ_SCOPES,
810
+ ),
811
+ ToolDefinition(
812
+ name="intern_meta_segments",
813
+ description="List head, live, and sealed segments for one meta-thread.",
814
+ input_schema=tool_schema(
815
+ {"meta_thread_id": {"type": "string", "minLength": 1}},
816
+ required=["meta_thread_id"],
817
+ ),
818
+ handler=intern_meta_segments,
819
+ required_scopes=READ_SCOPES,
820
+ ),
821
+ ToolDefinition(
822
+ name="intern_meta_messages",
823
+ description="List durable cross-lane messages visible to one meta-thread.",
824
+ input_schema=tool_schema(
825
+ {
826
+ "meta_thread_id": {"type": "string", "minLength": 1},
827
+ "limit": {"type": "integer", "minimum": 1, "maximum": 500},
828
+ },
829
+ required=["meta_thread_id"],
830
+ ),
831
+ handler=intern_meta_messages,
832
+ required_scopes=READ_SCOPES,
833
+ ),
834
+ ToolDefinition(
835
+ name="intern_meta_send",
836
+ description="Send one exact durable Sync-to-Async protocol object.",
837
+ input_schema=tool_schema(
838
+ {
839
+ "message_id": {"type": "string", "minLength": 1},
840
+ "source_meta_thread_id": {"type": "string", "minLength": 1},
841
+ "destination_meta_thread_id": {"type": "string", "minLength": 1},
842
+ "kind": {
843
+ "type": "string",
844
+ "enum": [
845
+ "request_decision",
846
+ "open_branch_ack",
847
+ "decision_resolved",
848
+ "steer",
849
+ "note",
850
+ ],
851
+ },
852
+ "idempotency_key": {"type": "string", "minLength": 1},
853
+ "payload": {"type": "object"},
854
+ "linked_message_id": {"type": "string"},
855
+ "sync_session_id": {"type": "string"},
856
+ "segment_id": {"type": "string"},
857
+ "resolution": {
858
+ "type": "string",
859
+ "enum": ["completed", "denied", "superseded"],
860
+ },
861
+ "summary": {"type": "string", "maxLength": 4000},
862
+ },
863
+ required=[
864
+ "message_id",
865
+ "source_meta_thread_id",
866
+ "destination_meta_thread_id",
867
+ "kind",
868
+ "idempotency_key",
869
+ ],
870
+ ),
871
+ handler=intern_meta_send,
872
+ required_scopes=WRITE_SCOPES,
873
+ ),
758
874
  ToolDefinition(
759
875
  name="intern_sync_create",
760
876
  description="Create or replay one durable operator-present Sync session.",
@@ -774,13 +890,17 @@ def build_research_intern_tools(
774
890
  handler=intern_sync_create,
775
891
  required_scopes=WRITE_SCOPES,
776
892
  ),
893
+ ToolDefinition(
894
+ name="intern_sync_branches",
895
+ description="List the Sync head plus every live or sealed branch.",
896
+ input_schema=tool_schema({}, required=[]),
897
+ handler=intern_sync_branches,
898
+ required_scopes=READ_SCOPES,
899
+ ),
777
900
  ToolDefinition(
778
901
  name="intern_sync_list",
779
- description="List a bounded page of durable Sync Intern sessions.",
780
- input_schema=tool_schema(
781
- {"limit": {"type": "integer", "minimum": 1, "maximum": 500}},
782
- required=[],
783
- ),
902
+ description="Compatibility alias of intern_sync_branches.",
903
+ input_schema=tool_schema({}, required=[]),
784
904
  handler=intern_sync_list,
785
905
  required_scopes=READ_SCOPES,
786
906
  ),
@@ -275,6 +275,7 @@ from synth_ai.sdk.research.contracts.research_intern import (
275
275
  DataBindingResponse,
276
276
  DatasetRevisionCreateRequest,
277
277
  DatasetRevisionResponse,
278
+ InternAgentConfig,
278
279
  InternAsyncBlocker,
279
280
  InternAsyncCheckpoint,
280
281
  InternAsyncCommandKind,
@@ -291,6 +292,17 @@ from synth_ai.sdk.research.contracts.research_intern import (
291
292
  InternAsyncRuntime,
292
293
  InternAsyncRuntimeBudget,
293
294
  InternAsyncStatus,
295
+ InternCrossMetaThreadMessage,
296
+ InternCrossMetaThreadMessageCreateRequest,
297
+ InternCrossMetaThreadMessageKind,
298
+ InternCrossMetaThreadMessageResolution,
299
+ InternMetaHandoff,
300
+ InternMetaHandoffStatus,
301
+ InternMetaThread,
302
+ InternMetaThreadKind,
303
+ InternMetaThreadLifecycle,
304
+ InternMetaThreadSegment,
305
+ InternMetaThreadSegmentStatus,
294
306
  InternRuntimeBinding,
295
307
  InternRuntimeOutcome,
296
308
  InternSyncCommandKind,
@@ -834,6 +846,18 @@ __all__ = [
834
846
  "InternAsyncRuntime",
835
847
  "InternAsyncRuntimeBudget",
836
848
  "InternAsyncStatus",
849
+ "InternAgentConfig",
850
+ "InternCrossMetaThreadMessage",
851
+ "InternCrossMetaThreadMessageCreateRequest",
852
+ "InternCrossMetaThreadMessageKind",
853
+ "InternCrossMetaThreadMessageResolution",
854
+ "InternMetaHandoff",
855
+ "InternMetaHandoffStatus",
856
+ "InternMetaThread",
857
+ "InternMetaThreadKind",
858
+ "InternMetaThreadLifecycle",
859
+ "InternMetaThreadSegment",
860
+ "InternMetaThreadSegmentStatus",
837
861
  "InternRuntimeBinding",
838
862
  "InternRuntimeOutcome",
839
863
  "InternSyncCommandKind",
@@ -326,6 +326,11 @@ class SwarmEvidence:
326
326
  "project_id",
327
327
  "artifacts",
328
328
  "work_products",
329
+ # Backend may include inline selected contents / Trace V5
330
+ # publications; accept them without requiring callers to
331
+ # consume them yet.
332
+ "selected_artifact_contents",
333
+ "trace_publications",
329
334
  "freshness",
330
335
  }
331
336
  ),
@@ -359,6 +364,8 @@ class SwarmEvidence:
359
364
  "project_id": self.project_id,
360
365
  "artifacts": [artifact.to_wire() for artifact in self.artifacts],
361
366
  "work_products": [item.to_wire() for item in self.work_products],
367
+ "selected_artifact_contents": [],
368
+ "trace_publications": [],
362
369
  "freshness": self.freshness.to_wire(),
363
370
  }
364
371
 
@@ -144,6 +144,128 @@ class ResearchInternResponse(_StrictContract):
144
144
  updated_at: datetime
145
145
 
146
146
 
147
+ class InternMetaThreadKind(StrEnum):
148
+ SYNC = "sync"
149
+ ASYNC = "async"
150
+
151
+
152
+ class InternMetaThreadLifecycle(StrEnum):
153
+ ACTIVE = "active"
154
+ ARCHIVED = "archived"
155
+
156
+
157
+ class InternMetaThreadSegmentStatus(StrEnum):
158
+ LIVE = "live"
159
+ SEALED = "sealed"
160
+
161
+
162
+ class InternMetaHandoffStatus(StrEnum):
163
+ SEALED = "sealed"
164
+ MERGED = "merged"
165
+
166
+
167
+ class InternCrossMetaThreadMessageKind(StrEnum):
168
+ REQUEST_DECISION = "request_decision"
169
+ OPEN_BRANCH_ACK = "open_branch_ack"
170
+ DECISION_RESOLVED = "decision_resolved"
171
+ STEER = "steer"
172
+ NOTE = "note"
173
+
174
+
175
+ class InternCrossMetaThreadMessageResolution(StrEnum):
176
+ COMPLETED = "completed"
177
+ DENIED = "denied"
178
+ SUPERSEDED = "superseded"
179
+
180
+
181
+ class InternAgentConfig(_StrictContract):
182
+ agent_role: str
183
+ harness: str
184
+ model: str
185
+ reasoning_effort: str
186
+ segment_role: str | None = None
187
+ harness_command: str | None = None
188
+ workspace_root: str | None = None
189
+
190
+
191
+ class InternMetaThread(_StrictContract):
192
+ schema_version: Literal["smr.meta-thread.v1"]
193
+ meta_thread_id: str
194
+ organization_id: str
195
+ research_intern_id: str
196
+ kind: InternMetaThreadKind
197
+ lifecycle: InternMetaThreadLifecycle
198
+ head_segment_id: str
199
+ created_at: datetime
200
+ updated_at: datetime
201
+
202
+
203
+ class InternMetaThreadSegment(_StrictContract):
204
+ schema_version: Literal["smr.meta-thread-segment.v1"]
205
+ segment_id: str
206
+ meta_thread_id: str
207
+ parent_segment_id: str | None = None
208
+ lane_runtime_id: str | None = None
209
+ agent_config: InternAgentConfig | None = None
210
+ status: InternMetaThreadSegmentStatus
211
+ opened_at: datetime
212
+ sealed_at: datetime | None = None
213
+ linked_message_id: str | None = None
214
+ handoff_id: str | None = None
215
+ is_head: bool = False
216
+
217
+
218
+ class InternMetaHandoff(_StrictContract):
219
+ schema_version: Literal["smr.meta-handoff.v1"]
220
+ handoff_id: str
221
+ meta_thread_id: str
222
+ source_segment_id: str
223
+ summary: str
224
+ evidence_references: tuple[str, ...] = ()
225
+ agent_config: InternAgentConfig | None = None
226
+ status: InternMetaHandoffStatus
227
+ created_at: datetime
228
+ sealed_at: datetime
229
+ merged_at: datetime | None = None
230
+
231
+
232
+ class InternCrossMetaThreadMessageCreateRequest(_StrictContract):
233
+ schema_version: Literal["smr.cross-meta-thread-message-create.v1"] = (
234
+ "smr.cross-meta-thread-message-create.v1"
235
+ )
236
+ message_id: str = Field(min_length=1, max_length=512)
237
+ source_meta_thread_id: str = Field(min_length=1, max_length=512)
238
+ destination_meta_thread_id: str = Field(min_length=1, max_length=512)
239
+ kind: InternCrossMetaThreadMessageKind
240
+ idempotency_key: str = Field(min_length=1, max_length=512)
241
+ payload: dict[str, Any] = Field(default_factory=dict)
242
+ linked_message_id: str | None = None
243
+ sync_session_id: str | None = None
244
+ segment_id: str | None = None
245
+ resolution: InternCrossMetaThreadMessageResolution | None = None
246
+ summary: str | None = Field(default=None, max_length=4_000)
247
+
248
+
249
+ class InternCrossMetaThreadMessage(_StrictContract):
250
+ schema_version: Literal["smr.cross-meta-thread-message.v1"]
251
+ message_id: str
252
+ organization_id: str
253
+ research_intern_id: str
254
+ source_meta_thread_id: str
255
+ source_kind: InternMetaThreadKind
256
+ destination_meta_thread_id: str
257
+ destination_kind: InternMetaThreadKind
258
+ kind: InternCrossMetaThreadMessageKind
259
+ idempotency_key: str
260
+ payload: dict[str, Any] = Field(default_factory=dict)
261
+ linked_message_id: str | None = None
262
+ sync_session_id: str | None = None
263
+ segment_id: str | None = None
264
+ resolution: InternCrossMetaThreadMessageResolution | None = None
265
+ summary: str | None = None
266
+ created_at: datetime
267
+
268
+
147
269
  class InternRuntimeBinding(_StrictContract):
148
270
  factory_id: str | None = None
149
271
  project_id: str | None = None
@@ -97,6 +97,43 @@ RESEARCH_OPERATIONS = {
97
97
  mutation=True,
98
98
  idempotent=True,
99
99
  ),
100
+ _operation(
101
+ "list_intern_meta_threads",
102
+ HttpMethod.GET,
103
+ "/smr/research-intern/meta-threads",
104
+ idempotent=True,
105
+ ),
106
+ _operation(
107
+ "get_intern_meta_thread",
108
+ HttpMethod.GET,
109
+ "/smr/research-intern/meta-threads/{meta_thread_id}",
110
+ idempotent=True,
111
+ ),
112
+ _operation(
113
+ "list_intern_meta_thread_segments",
114
+ HttpMethod.GET,
115
+ "/smr/research-intern/meta-threads/{meta_thread_id}/segments",
116
+ idempotent=True,
117
+ ),
118
+ _operation(
119
+ "list_intern_meta_thread_handoffs",
120
+ HttpMethod.GET,
121
+ "/smr/research-intern/meta-threads/{meta_thread_id}/handoffs",
122
+ idempotent=True,
123
+ ),
124
+ _operation(
125
+ "list_intern_meta_thread_messages",
126
+ HttpMethod.GET,
127
+ "/smr/research-intern/meta-threads/{meta_thread_id}/messages",
128
+ idempotent=True,
129
+ ),
130
+ _operation(
131
+ "create_intern_meta_thread_message",
132
+ HttpMethod.POST,
133
+ "/smr/research-intern/meta-threads/messages",
134
+ mutation=True,
135
+ idempotent=True,
136
+ ),
100
137
  _operation(
101
138
  "list_intern_runtime_events",
102
139
  HttpMethod.GET,
@@ -145,6 +145,7 @@ from synth_ai.sdk.research.contracts import (
145
145
  ImageReleaseUploadResponse,
146
146
  ImageUploadId,
147
147
  InferenceProvider,
148
+ InternAgentConfig,
148
149
  InternAsyncBlocker,
149
150
  InternAsyncCheckpoint,
150
151
  InternAsyncCommandKind,
@@ -161,6 +162,17 @@ from synth_ai.sdk.research.contracts import (
161
162
  InternAsyncRuntime,
162
163
  InternAsyncRuntimeBudget,
163
164
  InternAsyncStatus,
165
+ InternCrossMetaThreadMessage,
166
+ InternCrossMetaThreadMessageCreateRequest,
167
+ InternCrossMetaThreadMessageKind,
168
+ InternCrossMetaThreadMessageResolution,
169
+ InternMetaHandoff,
170
+ InternMetaHandoffStatus,
171
+ InternMetaThread,
172
+ InternMetaThreadKind,
173
+ InternMetaThreadLifecycle,
174
+ InternMetaThreadSegment,
175
+ InternMetaThreadSegmentStatus,
164
176
  InternRuntimeBinding,
165
177
  InternRuntimeOutcome,
166
178
  InternSyncCommandKind,
@@ -416,6 +428,7 @@ from synth_ai.sdk.research.research_intern import (
416
428
  AsyncResearchInternAsyncRuntimeAPI,
417
429
  AsyncResearchInternDecisionsAPI,
418
430
  AsyncResearchInternFactoriesAPI,
431
+ AsyncResearchInternMetaThreadsAPI,
419
432
  AsyncResearchInternReactiveSession,
420
433
  AsyncResearchInternSessionsAPI,
421
434
  AsyncResearchInternSyncRuntimeAPI,
@@ -431,6 +444,7 @@ from synth_ai.sdk.research.research_intern import (
431
444
  ResearchInternEventStreamObservation,
432
445
  ResearchInternExchange,
433
446
  ResearchInternFactoriesAPI,
447
+ ResearchInternMetaThreadsAPI,
434
448
  ResearchInternOperatorTurn,
435
449
  ResearchInternPollingTimeoutError,
436
450
  ResearchInternReactiveSession,
@@ -453,6 +467,7 @@ __all__ = [
453
467
  "AsyncResearchInternSyncRuntimeAPI",
454
468
  "AsyncResearchInternDecisionsAPI",
455
469
  "AsyncResearchInternFactoriesAPI",
470
+ "AsyncResearchInternMetaThreadsAPI",
456
471
  "AsyncResearchInternReactiveSession",
457
472
  "AsyncResearchInternSessionsAPI",
458
473
  "DataBindingCreateRequest",
@@ -713,6 +728,19 @@ __all__ = [
713
728
  "ResearchInternEventStreamPayload",
714
729
  "ResearchInternExchange",
715
730
  "ResearchInternFactoriesAPI",
731
+ "ResearchInternMetaThreadsAPI",
732
+ "InternAgentConfig",
733
+ "InternCrossMetaThreadMessage",
734
+ "InternCrossMetaThreadMessageCreateRequest",
735
+ "InternCrossMetaThreadMessageKind",
736
+ "InternCrossMetaThreadMessageResolution",
737
+ "InternMetaHandoff",
738
+ "InternMetaHandoffStatus",
739
+ "InternMetaThread",
740
+ "InternMetaThreadKind",
741
+ "InternMetaThreadLifecycle",
742
+ "InternMetaThreadSegment",
743
+ "InternMetaThreadSegmentStatus",
716
744
  "ResearchInternFactoryMembershipResponse",
717
745
  "ResearchInternOperatorTurn",
718
746
  "ResearchInternPatchRequest",