synth-ai 0.20.0.dev633__tar.gz → 0.20.0.dev635__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 (303) hide show
  1. {synth_ai-0.20.0.dev633/synth_ai.egg-info → synth_ai-0.20.0.dev635}/PKG-INFO +33 -5
  2. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/README.md +31 -3
  3. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/pyproject.toml +2 -2
  4. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/client.py +13 -6
  5. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/server.py +2 -1
  6. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/public.py +3 -7
  7. synth_ai-0.20.0.dev635/synth_ai/sdk/index/timeouts.py +6 -0
  8. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635/synth_ai.egg-info}/PKG-INFO +33 -5
  9. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai.egg-info/SOURCES.txt +1 -0
  10. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/LICENSE +0 -0
  11. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/MANIFEST.in +0 -0
  12. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/openapi/index-v1.json +0 -0
  13. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/openapi/messaging-v1.json +0 -0
  14. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/openapi/research-v1.json +0 -0
  15. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/setup.cfg +0 -0
  16. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/setup.py +0 -0
  17. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/README.md +0 -0
  18. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/__init__.py +0 -0
  19. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/__main__.py +0 -0
  20. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/AGENTS.md +0 -0
  21. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/README.md +0 -0
  22. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/__init__.py +0 -0
  23. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/__main__.py +0 -0
  24. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/index.py +0 -0
  25. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/main.py +0 -0
  26. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/research.py +0 -0
  27. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/research_environments.py +0 -0
  28. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/research_image_releases.py +0 -0
  29. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/cli/research_projects.py +0 -0
  30. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/README.md +0 -0
  31. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/__init__.py +0 -0
  32. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/auth/__init__.py +0 -0
  33. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/auth/credentials.py +0 -0
  34. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/contracts/__init__.py +0 -0
  35. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/contracts/json_value.py +0 -0
  36. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/contracts/pagination.py +0 -0
  37. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/errors.py +0 -0
  38. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/http/__init__.py +0 -0
  39. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/http/async_transport.py +0 -0
  40. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/http/request.py +0 -0
  41. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/http/retry.py +0 -0
  42. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/http/streaming.py +0 -0
  43. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/http/transport.py +0 -0
  44. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/research/__init__.py +0 -0
  45. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/utils/__init__.py +0 -0
  46. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/utils/env.py +0 -0
  47. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/utils/log_filter.py +0 -0
  48. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/utils/paths.py +0 -0
  49. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/core/utils/urls.py +0 -0
  50. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/README.md +0 -0
  51. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/__init__.py +0 -0
  52. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/__main__.py +0 -0
  53. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/objective_tools.py +0 -0
  54. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/registry.py +0 -0
  55. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/request_models.py +0 -0
  56. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/__init__.py +0 -0
  57. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/approvals.py +0 -0
  58. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/artifacts.py +0 -0
  59. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/datasets.py +0 -0
  60. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/environments.py +0 -0
  61. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/exports.py +0 -0
  62. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/factories.py +0 -0
  63. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/factory_results.py +0 -0
  64. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/files.py +0 -0
  65. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/image_releases.py +0 -0
  66. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/index.py +0 -0
  67. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/integrations.py +0 -0
  68. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/intern_program.py +0 -0
  69. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/local_files.py +0 -0
  70. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/logs.py +0 -0
  71. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/models.py +0 -0
  72. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/outputs.py +0 -0
  73. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/policy_schemas.py +0 -0
  74. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/progress.py +0 -0
  75. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/project_data.py +0 -0
  76. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/projects.py +0 -0
  77. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/prs.py +0 -0
  78. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/readiness.py +0 -0
  79. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/repos.py +0 -0
  80. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/research_intern.py +0 -0
  81. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/resources.py +0 -0
  82. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/runs.py +0 -0
  83. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/trained_models.py +0 -0
  84. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/usage.py +0 -0
  85. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/visuals.py +0 -0
  86. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/mcp/research/tools/workspace_inputs.py +0 -0
  87. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/pools.py +0 -0
  88. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/py.typed +0 -0
  89. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/README.md +0 -0
  90. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/__init__.py +0 -0
  91. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/AGENT_SETUP_PROMPT.md +0 -0
  92. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/README.md +0 -0
  93. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/__init__.py +0 -0
  94. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/agent_policy.py +0 -0
  95. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/answer.py +0 -0
  96. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/artifacts.py +0 -0
  97. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/catalog.py +0 -0
  98. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/client.py +0 -0
  99. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/contracts.py +0 -0
  100. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/contributions.py +0 -0
  101. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/errors.py +0 -0
  102. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/lifecycle.py +0 -0
  103. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/package.py +0 -0
  104. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/research_intake.py +0 -0
  105. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/search.py +0 -0
  106. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/submission.py +0 -0
  107. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/transfer.py +0 -0
  108. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/index/usage_accounting.py +0 -0
  109. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/messaging/README.md +0 -0
  110. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/messaging/__init__.py +0 -0
  111. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/messaging/client.py +0 -0
  112. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/messaging/contracts.py +0 -0
  113. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/optimizers/__init__.py +0 -0
  114. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/optimizers/client.py +0 -0
  115. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/optimizers/contracts.py +0 -0
  116. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/pagination.py +0 -0
  117. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/__init__.py +0 -0
  118. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/_internal/__init__.py +0 -0
  119. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/_internal/crypto.py +0 -0
  120. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/_internal/env.py +0 -0
  121. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/_internal/urls.py +0 -0
  122. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/account.py +0 -0
  123. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/advanced.py +0 -0
  124. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/advanced_factories.py +0 -0
  125. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/advanced_swarms.py +0 -0
  126. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/artifacts.py +0 -0
  127. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/auth.py +0 -0
  128. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/client.py +0 -0
  129. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/container_pools/__init__.py +0 -0
  130. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/container_pools/api.py +0 -0
  131. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/container_pools/contracts.py +0 -0
  132. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/container_pools/operations.py +0 -0
  133. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/container_pools/packaging.py +0 -0
  134. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/__init__.py +0 -0
  135. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/_activity_wire.py +0 -0
  136. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/_environment_wire.py +0 -0
  137. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/_transcript_wire.py +0 -0
  138. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/_wire.py +0 -0
  139. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/activity.py +0 -0
  140. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/activity_items.py +0 -0
  141. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/actor_images.py +0 -0
  142. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/billing.py +0 -0
  143. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/canonical_usage.py +0 -0
  144. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/checkpoints.py +0 -0
  145. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/cloud_deployment_claims.py +0 -0
  146. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/cloud_deployments.py +0 -0
  147. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/common.py +0 -0
  148. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/dataset_revisions.py +0 -0
  149. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/deliveries.py +0 -0
  150. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/dev_environment_evidence.py +0 -0
  151. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/economics.py +0 -0
  152. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/environment_manifest.py +0 -0
  153. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/environments.py +0 -0
  154. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/evidence.py +0 -0
  155. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/factories.py +0 -0
  156. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/factory_evidence.py +0 -0
  157. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/factory_lenses.py +0 -0
  158. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/factory_operations.py +0 -0
  159. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/factory_role_receipts.py +0 -0
  160. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/failure.py +0 -0
  161. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/image_releases.py +0 -0
  162. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/intern_blockers.py +0 -0
  163. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/intern_grants.py +0 -0
  164. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/intern_program.py +0 -0
  165. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/intern_resources.py +0 -0
  166. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/intern_usage.py +0 -0
  167. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/limit_evidence.py +0 -0
  168. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/local_execution_profile.py +0 -0
  169. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/operator_evidence.py +0 -0
  170. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/project.py +0 -0
  171. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/project_data.py +0 -0
  172. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/project_runtime.py +0 -0
  173. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/project_workspace.py +0 -0
  174. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/project_workspace_evidence.py +0 -0
  175. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/projects.py +0 -0
  176. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/promotions.py +0 -0
  177. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/research_intern.py +0 -0
  178. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/resource_settlement.py +0 -0
  179. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/run_authority.py +0 -0
  180. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/run_control.py +0 -0
  181. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/run_diagnostics.py +0 -0
  182. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/run_events.py +0 -0
  183. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/run_execution.py +0 -0
  184. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/run_launch.py +0 -0
  185. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/run_observability.py +0 -0
  186. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/run_state.py +0 -0
  187. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/run_timeline.py +0 -0
  188. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/runtime_image.py +0 -0
  189. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/runtime_intent.py +0 -0
  190. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/runtime_stream.py +0 -0
  191. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/runtime_stream_snapshot.py +0 -0
  192. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/scientific_integrity.py +0 -0
  193. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_actor_models.py +0 -0
  194. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_actor_policy_data.py +0 -0
  195. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_agent_harnesses.py +0 -0
  196. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_agent_kinds.py +0 -0
  197. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_agent_models.py +0 -0
  198. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_branching.py +0 -0
  199. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_credential_providers.py +0 -0
  200. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_environment_kinds.py +0 -0
  201. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_evidence_obligations.py +0 -0
  202. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_funding_sources.py +0 -0
  203. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_horizons.py +0 -0
  204. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_host_kinds.py +0 -0
  205. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_inference_providers.py +0 -0
  206. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_network_topology.py +0 -0
  207. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_providers.py +0 -0
  208. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_resource_kinds.py +0 -0
  209. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_roles.py +0 -0
  210. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_run_policy.py +0 -0
  211. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_runbooks.py +0 -0
  212. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_runnable_project.py +0 -0
  213. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_runtime_kinds.py +0 -0
  214. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_tool_providers.py +0 -0
  215. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/smr_work_modes.py +0 -0
  216. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/status.py +0 -0
  217. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/swarm_rollouts.py +0 -0
  218. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/swarms.py +0 -0
  219. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/tag.py +0 -0
  220. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/traces.py +0 -0
  221. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/transcript.py +0 -0
  222. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/types.py +0 -0
  223. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/usage.py +0 -0
  224. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/visuals.py +0 -0
  225. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/wire_models.py +0 -0
  226. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/wire_models_README.md +0 -0
  227. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/work_products.py +0 -0
  228. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/contracts/workspaces.py +0 -0
  229. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/economics.py +0 -0
  230. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/efforts.py +0 -0
  231. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/environments.py +0 -0
  232. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/errors.py +0 -0
  233. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/events.py +0 -0
  234. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/experiments.py +0 -0
  235. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/facade.py +0 -0
  236. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/factories.py +0 -0
  237. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/factory_storage.py +0 -0
  238. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/image_releases.py +0 -0
  239. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/intern_blockers.py +0 -0
  240. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/intern_program.py +0 -0
  241. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/knowledge.py +0 -0
  242. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/models.py +0 -0
  243. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/operations.py +0 -0
  244. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/project_data.py +0 -0
  245. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/project_deliveries.py +0 -0
  246. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/project_workspaces.py +0 -0
  247. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/projects.py +0 -0
  248. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/public.py +0 -0
  249. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/readouts.py +0 -0
  250. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/research_intern.py +0 -0
  251. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/secrets.py +0 -0
  252. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/README.md +0 -0
  253. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/__init__.py +0 -0
  254. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/_base.py +0 -0
  255. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/_client_helpers.py +0 -0
  256. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/_run_authority_mixin.py +0 -0
  257. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/approvals.py +0 -0
  258. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/billing.py +0 -0
  259. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/client.py +0 -0
  260. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/cloud_deployments.py +0 -0
  261. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/config.py +0 -0
  262. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/cost.py +0 -0
  263. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/datasets.py +0 -0
  264. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/dev_environments.py +0 -0
  265. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/environments.py +0 -0
  266. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/exports.py +0 -0
  267. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/factories.py +0 -0
  268. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/factory_evidence.py +0 -0
  269. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/files.py +0 -0
  270. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/github.py +0 -0
  271. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/image_releases.py +0 -0
  272. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/images.py +0 -0
  273. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/logs.py +0 -0
  274. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/models.py +0 -0
  275. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/outputs.py +0 -0
  276. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/progress.py +0 -0
  277. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/project.py +0 -0
  278. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/projects.py +0 -0
  279. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/prs.py +0 -0
  280. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/readiness.py +0 -0
  281. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/repositories.py +0 -0
  282. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/runs.py +0 -0
  283. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/secrets.py +0 -0
  284. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/setup.py +0 -0
  285. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/tag.py +0 -0
  286. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/trained_models.py +0 -0
  287. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/transport.py +0 -0
  288. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/usage.py +0 -0
  289. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/work_products.py +0 -0
  290. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/session/workspace_inputs.py +0 -0
  291. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/surface_parity.py +0 -0
  292. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/swarms.py +0 -0
  293. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/traces.py +0 -0
  294. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/transport/__init__.py +0 -0
  295. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/transport/http.py +0 -0
  296. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/transport/pagination.py +0 -0
  297. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/version.py +0 -0
  298. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/visuals.py +0 -0
  299. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai/sdk/research/wiki.py +0 -0
  300. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai.egg-info/dependency_links.txt +0 -0
  301. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai.egg-info/entry_points.txt +0 -0
  302. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai.egg-info/requires.txt +0 -0
  303. {synth_ai-0.20.0.dev633 → synth_ai-0.20.0.dev635}/synth_ai.egg-info/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.20.0.dev633
4
- Summary: Python SDK and CLI for Synth Managed Research and Research Factory
3
+ Version: 0.20.0.dev635
4
+ Summary: Python SDK and CLI for Synth Index, Managed Research, and Research Factory
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/synth-laboratories/synth-ai
@@ -208,11 +208,39 @@ Use `SynthClient` as the front door:
208
208
 
209
209
  | Surface | Client namespace | Use it for |
210
210
  | --- | --- | --- |
211
+ | **Index** | `client.index` | Authenticated, funded FAST/DEEP Search and Contribution lifecycle. |
211
212
  | **Research / Factory** | `client.research` | Typed hosted projects, swarms, Factory lifecycles, and Efforts. |
212
- | CLI | `synth-ai` | Terminal access to Research commands. |
213
+ | CLI / MCP | `synth-ai`, `synth-ai-index-mcp` | Terminal commands and an Index-only coding-agent server. |
213
214
 
214
- There are no infrastructure client namespaces (containers, tunnels, pools) on
215
- `SynthClient`; the package is Research-only as of 0.18.0.
215
+ Index is an API/MCP product, not a browser search page. Anonymous public
216
+ catalog and known-ID Contribution reads use `PublicIndexClient`; even a
217
+ public-scope Search requires an API key, an authorized organization, and
218
+ funding. An Index-only MCP server starts read-only, advertising public browse
219
+ without a key and Search only when a key is configured. Contribution writes
220
+ require a separate explicit opt-in and grant.
221
+
222
+ ```python
223
+ from uuid import uuid4
224
+
225
+ from synth_ai import SynthClient
226
+ from synth_ai.sdk.index import SearchBillingConstraints
227
+
228
+ request_key = str(uuid4()) # Persist this before sending; reuse it on uncertain retry.
229
+ with SynthClient() as synth: # Reads SYNTH_API_KEY.
230
+ result = synth.index.search(
231
+ query="What evidence supports the retrieval design?",
232
+ mode="fast",
233
+ billing=SearchBillingConstraints(allow_wallet=True, max_charge_cents=5),
234
+ idempotency_key=request_key,
235
+ )
236
+ print(result.response, result.usage)
237
+ ```
238
+
239
+ FAST's five-cent ceiling is explicit wallet consent, not a claim that DEEP has
240
+ the same price. See the [Index SDK guide](synth_ai/sdk/index/README.md) for
241
+ DEEP's durable Search ID, reconnect/cancel, private collections, receipts, and
242
+ coding-agent MCP setup. These calls require a deployed Index API; installing
243
+ the SDK alone does not make a Search available.
216
244
 
217
245
  Use [Managed Research](https://docs.usesynth.ai/managed-research/intro) when you
218
246
  want hosted research workers, repo runs, evidence, checkpoints, MCP, or final
@@ -179,11 +179,39 @@ Use `SynthClient` as the front door:
179
179
 
180
180
  | Surface | Client namespace | Use it for |
181
181
  | --- | --- | --- |
182
+ | **Index** | `client.index` | Authenticated, funded FAST/DEEP Search and Contribution lifecycle. |
182
183
  | **Research / Factory** | `client.research` | Typed hosted projects, swarms, Factory lifecycles, and Efforts. |
183
- | CLI | `synth-ai` | Terminal access to Research commands. |
184
+ | CLI / MCP | `synth-ai`, `synth-ai-index-mcp` | Terminal commands and an Index-only coding-agent server. |
184
185
 
185
- There are no infrastructure client namespaces (containers, tunnels, pools) on
186
- `SynthClient`; the package is Research-only as of 0.18.0.
186
+ Index is an API/MCP product, not a browser search page. Anonymous public
187
+ catalog and known-ID Contribution reads use `PublicIndexClient`; even a
188
+ public-scope Search requires an API key, an authorized organization, and
189
+ funding. An Index-only MCP server starts read-only, advertising public browse
190
+ without a key and Search only when a key is configured. Contribution writes
191
+ require a separate explicit opt-in and grant.
192
+
193
+ ```python
194
+ from uuid import uuid4
195
+
196
+ from synth_ai import SynthClient
197
+ from synth_ai.sdk.index import SearchBillingConstraints
198
+
199
+ request_key = str(uuid4()) # Persist this before sending; reuse it on uncertain retry.
200
+ with SynthClient() as synth: # Reads SYNTH_API_KEY.
201
+ result = synth.index.search(
202
+ query="What evidence supports the retrieval design?",
203
+ mode="fast",
204
+ billing=SearchBillingConstraints(allow_wallet=True, max_charge_cents=5),
205
+ idempotency_key=request_key,
206
+ )
207
+ print(result.response, result.usage)
208
+ ```
209
+
210
+ FAST's five-cent ceiling is explicit wallet consent, not a claim that DEEP has
211
+ the same price. See the [Index SDK guide](synth_ai/sdk/index/README.md) for
212
+ DEEP's durable Search ID, reconnect/cancel, private collections, receipts, and
213
+ coding-agent MCP setup. These calls require a deployed Index API; installing
214
+ the SDK alone does not make a Search available.
187
215
 
188
216
  Use [Managed Research](https://docs.usesynth.ai/managed-research/intro) when you
189
217
  want hosted research workers, repo runs, evidence, checkpoints, MCP, or final
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "synth-ai"
3
- version = "0.20.0.dev633"
4
- description = "Python SDK and CLI for Synth Managed Research and Research Factory"
3
+ version = "0.20.0.dev635"
4
+ description = "Python SDK and CLI for Synth Index, Managed Research, and Research Factory"
5
5
  authors = [{name = "Synth AI", email = "josh@usesynth.ai"}]
6
6
  license = "MIT"
7
7
  license-files = ["LICENSE"]
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING
7
7
 
8
8
  from synth_ai.core.auth.credentials import resolve_api_credential
9
9
  from synth_ai.core.utils.urls import BACKEND_URL_BASE, normalize_backend_base
10
+ from synth_ai.sdk.index.timeouts import INDEX_TRANSPORT_TIMEOUT_SECONDS
10
11
 
11
12
  if TYPE_CHECKING:
12
13
  from synth_ai.core.http.async_transport import AsyncHttpTransport
@@ -39,11 +40,14 @@ class SynthClient:
39
40
  *,
40
41
  api_key: str | None = None,
41
42
  base_url: str | None = None,
42
- timeout_seconds: float = 30.0,
43
+ timeout_seconds: float | None = None,
43
44
  ) -> None:
44
45
  self.api_key = _resolve_api_key(api_key)
45
46
  self.base_url = _resolve_base_url(base_url)
46
- self.timeout_seconds = timeout_seconds
47
+ self.timeout_seconds = 30.0 if timeout_seconds is None else timeout_seconds
48
+ self._index_timeout_seconds = (
49
+ INDEX_TRANSPORT_TIMEOUT_SECONDS if timeout_seconds is None else timeout_seconds
50
+ )
47
51
  self._research_client: ResearchClient | None = None
48
52
  self._optimizers_client: OptimizersClient | None = None
49
53
  self._index_api: IndexAPI | None = None
@@ -60,7 +64,7 @@ class SynthClient:
60
64
  self._index_transport = HttpTransport(
61
65
  base_url=self.base_url,
62
66
  headers={"Authorization": f"Bearer {self.api_key}"},
63
- timeout_seconds=self.timeout_seconds,
67
+ timeout_seconds=self._index_timeout_seconds,
64
68
  )
65
69
  self._index_api = IndexAPI(self._index_transport)
66
70
  return self._index_api
@@ -135,11 +139,14 @@ class AsyncSynthClient:
135
139
  *,
136
140
  api_key: str | None = None,
137
141
  base_url: str | None = None,
138
- timeout_seconds: float = 30.0,
142
+ timeout_seconds: float | None = None,
139
143
  ) -> None:
140
144
  self.api_key = _resolve_api_key(api_key)
141
145
  self.base_url = _resolve_base_url(base_url)
142
- self.timeout_seconds = timeout_seconds
146
+ self.timeout_seconds = 30.0 if timeout_seconds is None else timeout_seconds
147
+ self._index_timeout_seconds = (
148
+ INDEX_TRANSPORT_TIMEOUT_SECONDS if timeout_seconds is None else timeout_seconds
149
+ )
143
150
  self._async_research_client: AsyncResearchClient | None = None
144
151
  self._async_optimizers_client: AsyncOptimizersClient | None = None
145
152
  self._index_api: AsyncIndexAPI | None = None
@@ -157,7 +164,7 @@ class AsyncSynthClient:
157
164
  self._index_transport = AsyncHttpTransport(
158
165
  base_url=self.base_url,
159
166
  headers={"Authorization": f"Bearer {self.api_key}"},
160
- timeout_seconds=self.timeout_seconds,
167
+ timeout_seconds=self._index_timeout_seconds,
161
168
  )
162
169
  self._index_api = AsyncIndexAPI(self._index_transport)
163
170
  return self._index_api
@@ -70,6 +70,7 @@ from synth_ai.mcp.research.tools.trained_models import build_trained_model_tools
70
70
  from synth_ai.mcp.research.tools.usage import build_usage_tools
71
71
  from synth_ai.mcp.research.tools.visuals import build_visual_tools
72
72
  from synth_ai.mcp.research.tools.workspace_inputs import build_workspace_input_tools
73
+ from synth_ai.sdk.index.timeouts import INDEX_TRANSPORT_TIMEOUT_SECONDS
73
74
  from synth_ai.sdk.research.auth import get_api_key
74
75
  from synth_ai.sdk.research.client import Client as CoreResearchClient
75
76
  from synth_ai.sdk.research.contracts.activity import ActivityWindow
@@ -91,7 +92,7 @@ MCP_CLIENT_TIMEOUT_SECONDS = 30.0
91
92
  # stdio Index calls aligned with PublicIndexClient's 120-second transport bound;
92
93
  # an MCP timeout must not prematurely turn a valid monitored response into an
93
94
  # ambiguous retry. Research tools retain their separate 30-second default.
94
- INDEX_MCP_CLIENT_TIMEOUT_SECONDS = 120.0
95
+ INDEX_MCP_CLIENT_TIMEOUT_SECONDS = INDEX_TRANSPORT_TIMEOUT_SECONDS
95
96
 
96
97
  # The stdio entrypoint advertises the stable subset. Set this to 1/true/yes to
97
98
  # advertise the full built tree instead; without it the advanced tools are not
@@ -13,11 +13,7 @@ from synth_ai.core.http.transport import HttpTransport
13
13
  from synth_ai.core.utils.urls import BACKEND_URL_BASE, normalize_backend_base
14
14
 
15
15
  from .client import AsyncPublicIndexAPI, PublicIndexAPI
16
-
17
- # See the joined candidate's RUNTIME_DEADLINES.md: the 31.7-second public
18
- # search wrapper precedes a separately bounded monitor (up to 60 seconds).
19
- # Explicit caller timeouts still win; disconnect never cancels server state.
20
- _PUBLIC_INDEX_TIMEOUT_SECONDS = 120.0
16
+ from .timeouts import INDEX_TRANSPORT_TIMEOUT_SECONDS
21
17
 
22
18
 
23
19
  class PublicIndexClient(PublicIndexAPI):
@@ -27,7 +23,7 @@ class PublicIndexClient(PublicIndexAPI):
27
23
  self,
28
24
  *,
29
25
  base_url: str | None = None,
30
- timeout_seconds: float = _PUBLIC_INDEX_TIMEOUT_SECONDS,
26
+ timeout_seconds: float = INDEX_TRANSPORT_TIMEOUT_SECONDS,
31
27
  ) -> None:
32
28
  transport = HttpTransport(
33
29
  base_url=normalize_backend_base(base_url or BACKEND_URL_BASE),
@@ -58,7 +54,7 @@ class AsyncPublicIndexClient(AsyncPublicIndexAPI):
58
54
  self,
59
55
  *,
60
56
  base_url: str | None = None,
61
- timeout_seconds: float = _PUBLIC_INDEX_TIMEOUT_SECONDS,
57
+ timeout_seconds: float = INDEX_TRANSPORT_TIMEOUT_SECONDS,
62
58
  ) -> None:
63
59
  transport = AsyncHttpTransport(
64
60
  base_url=normalize_backend_base(base_url or BACKEND_URL_BASE),
@@ -0,0 +1,6 @@
1
+ """Transport bound shared by direct Index and Index-only MCP clients."""
2
+
3
+ # The backend's bounded retrieval can be followed by separately bounded
4
+ # monitor delivery. A 30-second Research transport default is too short for
5
+ # a valid monitored Index response. Explicit caller timeouts still win.
6
+ INDEX_TRANSPORT_TIMEOUT_SECONDS = 120.0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synth-ai
3
- Version: 0.20.0.dev633
4
- Summary: Python SDK and CLI for Synth Managed Research and Research Factory
3
+ Version: 0.20.0.dev635
4
+ Summary: Python SDK and CLI for Synth Index, Managed Research, and Research Factory
5
5
  Author-email: Synth AI <josh@usesynth.ai>
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/synth-laboratories/synth-ai
@@ -208,11 +208,39 @@ Use `SynthClient` as the front door:
208
208
 
209
209
  | Surface | Client namespace | Use it for |
210
210
  | --- | --- | --- |
211
+ | **Index** | `client.index` | Authenticated, funded FAST/DEEP Search and Contribution lifecycle. |
211
212
  | **Research / Factory** | `client.research` | Typed hosted projects, swarms, Factory lifecycles, and Efforts. |
212
- | CLI | `synth-ai` | Terminal access to Research commands. |
213
+ | CLI / MCP | `synth-ai`, `synth-ai-index-mcp` | Terminal commands and an Index-only coding-agent server. |
213
214
 
214
- There are no infrastructure client namespaces (containers, tunnels, pools) on
215
- `SynthClient`; the package is Research-only as of 0.18.0.
215
+ Index is an API/MCP product, not a browser search page. Anonymous public
216
+ catalog and known-ID Contribution reads use `PublicIndexClient`; even a
217
+ public-scope Search requires an API key, an authorized organization, and
218
+ funding. An Index-only MCP server starts read-only, advertising public browse
219
+ without a key and Search only when a key is configured. Contribution writes
220
+ require a separate explicit opt-in and grant.
221
+
222
+ ```python
223
+ from uuid import uuid4
224
+
225
+ from synth_ai import SynthClient
226
+ from synth_ai.sdk.index import SearchBillingConstraints
227
+
228
+ request_key = str(uuid4()) # Persist this before sending; reuse it on uncertain retry.
229
+ with SynthClient() as synth: # Reads SYNTH_API_KEY.
230
+ result = synth.index.search(
231
+ query="What evidence supports the retrieval design?",
232
+ mode="fast",
233
+ billing=SearchBillingConstraints(allow_wallet=True, max_charge_cents=5),
234
+ idempotency_key=request_key,
235
+ )
236
+ print(result.response, result.usage)
237
+ ```
238
+
239
+ FAST's five-cent ceiling is explicit wallet consent, not a claim that DEEP has
240
+ the same price. See the [Index SDK guide](synth_ai/sdk/index/README.md) for
241
+ DEEP's durable Search ID, reconnect/cancel, private collections, receipts, and
242
+ coding-agent MCP setup. These calls require a deployed Index API; installing
243
+ the SDK alone does not make a Search available.
216
244
 
217
245
  Use [Managed Research](https://docs.usesynth.ai/managed-research/intro) when you
218
246
  want hosted research workers, repo runs, evidence, checkpoints, MCP, or final
@@ -106,6 +106,7 @@ synth_ai/sdk/index/public.py
106
106
  synth_ai/sdk/index/research_intake.py
107
107
  synth_ai/sdk/index/search.py
108
108
  synth_ai/sdk/index/submission.py
109
+ synth_ai/sdk/index/timeouts.py
109
110
  synth_ai/sdk/index/transfer.py
110
111
  synth_ai/sdk/index/usage_accounting.py
111
112
  synth_ai/sdk/messaging/README.md