mainsequence 4.4.19__tar.gz → 4.4.20__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 (161) hide show
  1. {mainsequence-4.4.19/mainsequence.egg-info → mainsequence-4.4.20}/PKG-INFO +1 -1
  2. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/agent_runtime_models.py +181 -36
  3. {mainsequence-4.4.19 → mainsequence-4.4.20/mainsequence.egg-info}/PKG-INFO +1 -1
  4. {mainsequence-4.4.19 → mainsequence-4.4.20}/pyproject.toml +1 -1
  5. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_filter_normalization.py +11 -21
  6. {mainsequence-4.4.19 → mainsequence-4.4.20}/LICENSE +0 -0
  7. {mainsequence-4.4.19 → mainsequence-4.4.20}/README.md +0 -0
  8. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/AGENTS.md +0 -0
  9. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/a2a_communication/SKILL.md +0 -0
  10. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  11. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
  12. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
  13. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
  14. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/command_center/widgets/app_components/SKILL.md +0 -0
  15. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/command_center/widgets/tables/SKILL.md +0 -0
  16. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/command_center/widgets/tabular_transform/SKILL.md +0 -0
  17. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
  18. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
  19. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
  20. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
  21. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  22. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
  23. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  24. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  25. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  26. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
  27. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  28. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
  29. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
  30. {mainsequence-4.4.19 → mainsequence-4.4.20}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
  31. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/__init__.py +0 -0
  32. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/__main__.py +0 -0
  33. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/bootstrap.py +0 -0
  34. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/__init__.py +0 -0
  35. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/api.py +0 -0
  36. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/browser_auth.py +0 -0
  37. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/cli.py +0 -0
  38. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/config.py +0 -0
  39. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/docker_utils.py +0 -0
  40. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/doctor.py +0 -0
  41. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/local_ops.py +0 -0
  42. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/migrations.py +0 -0
  43. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/model_filters.py +0 -0
  44. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/project_status.py +0 -0
  45. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/pydantic_cli.py +0 -0
  46. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/sdk_utils.py +0 -0
  47. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/ssh_utils.py +0 -0
  48. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/cli/ui.py +0 -0
  49. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/__init__.py +0 -0
  50. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/base.py +0 -0
  51. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/client.py +0 -0
  52. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/__init__.py +0 -0
  53. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/app_component.py +0 -0
  54. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/connections.py +0 -0
  55. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/contracts/__init__.py +0 -0
  56. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/contracts/adapter_from_api.py +0 -0
  57. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/contracts/response_mapping.py +0 -0
  58. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/contracts/table_visuals.py +0 -0
  59. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/contracts/tabular.py +0 -0
  60. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/contracts/ui.py +0 -0
  61. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/data_models.py +0 -0
  62. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/providers/__init__.py +0 -0
  63. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/providers/adapter_from_api.py +0 -0
  64. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/widgets/__init__.py +0 -0
  65. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/widgets/bindings.py +0 -0
  66. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/widgets/connection_query.py +0 -0
  67. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/widgets/registry.py +0 -0
  68. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/widgets/table.py +0 -0
  69. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/widgets/tabular_transform.py +0 -0
  70. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/workspace.py +0 -0
  71. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
  72. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/workspaces/__init__.py +0 -0
  73. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/workspaces/documents.py +0 -0
  74. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/command_center/workspaces/mounted_widgets.py +0 -0
  75. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/compute_validation.py +0 -0
  76. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  77. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  78. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  79. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  80. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/dtype_codec.py +0 -0
  81. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/exceptions.py +0 -0
  82. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/fastapi/__init__.py +0 -0
  83. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/fastapi/auth.py +0 -0
  84. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/metatables/__init__.py +0 -0
  85. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/metatables/core.py +0 -0
  86. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/models_foundry.py +0 -0
  87. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/models_helpers.py +0 -0
  88. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/models_user.py +0 -0
  89. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/client/utils.py +0 -0
  90. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/defaults.py +0 -0
  91. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/instrumentation/__init__.py +0 -0
  92. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/instrumentation/utils.py +0 -0
  93. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/logconf.py +0 -0
  94. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/__init__.py +0 -0
  95. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/__main__.py +0 -0
  96. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  97. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  98. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
  99. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
  100. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
  101. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/data_nodes/models.py +0 -0
  102. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
  103. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
  104. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
  105. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
  106. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/future_registry.py +0 -0
  107. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/hashing.py +0 -0
  108. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/migrations/__init__.py +0 -0
  109. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  110. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/migrations/env.py +0 -0
  111. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/migrations/provider.py +0 -0
  112. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/migrations/registry.py +0 -0
  113. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  114. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  115. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  116. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  117. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  118. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/schema_names.py +0 -0
  119. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  120. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/runtime_flags.py +0 -0
  121. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence/scaffold_skills.py +0 -0
  122. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence.egg-info/SOURCES.txt +0 -0
  123. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence.egg-info/dependency_links.txt +0 -0
  124. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence.egg-info/entry_points.txt +0 -0
  125. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence.egg-info/requires.txt +0 -0
  126. {mainsequence-4.4.19 → mainsequence-4.4.20}/mainsequence.egg-info/top_level.txt +0 -0
  127. {mainsequence-4.4.19 → mainsequence-4.4.20}/setup.cfg +0 -0
  128. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_auth_precedence.py +0 -0
  129. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_build_operations_hashing.py +0 -0
  130. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_cli.py +0 -0
  131. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_cli_browser_auth.py +0 -0
  132. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_cli_migrations.py +0 -0
  133. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_client.py +0 -0
  134. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_command_center_app_component_models.py +0 -0
  135. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_command_center_data_models.py +0 -0
  136. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_command_center_models.py +0 -0
  137. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_command_center_table_contracts.py +0 -0
  138. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_command_center_tabular_transform.py +0 -0
  139. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_data_access_mixin_dimension_audit.py +0 -0
  140. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_data_node_storage_dimension_queries.py +0 -0
  141. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_data_node_update_flow.py +0 -0
  142. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_dependency_extras.py +0 -0
  143. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_duckdb_interface_dimensions.py +0 -0
  144. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_instrumentation.py +0 -0
  145. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_logconf.py +0 -0
  146. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_meta_table_migrations.py +0 -0
  147. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_meta_tables_client_models.py +0 -0
  148. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
  149. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_models_user_request_bound_auth.py +0 -0
  150. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_pod_project_resolution.py +0 -0
  151. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_project_batch_jobs_from_file.py +0 -0
  152. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_run_configuration.py +0 -0
  153. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_scaffold_skills.py +0 -0
  154. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_schema_names.py +0 -0
  155. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_secret_client_model.py +0 -0
  156. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_source_table_configuration.py +0 -0
  157. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_sqlite_interface_dimensions.py +0 -0
  158. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_update_runner_uid_runtime.py +0 -0
  159. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_update_statistics.py +0 -0
  160. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_update_uid_guards.py +0 -0
  161. {mainsequence-4.4.19 → mainsequence-4.4.20}/tests/test_workspace_snapshot.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 4.4.19
3
+ Version: 4.4.20
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License: MainSequence GmbH SDK License Agreement
@@ -710,52 +710,198 @@ class Agent(ShareableObjectMixin, BaseObjectOrm, BasePydanticModel):
710
710
  return AgentSession(**response.json())
711
711
 
712
712
 
713
- class UserOrchestratorAgentService(BaseObjectOrm, BasePydanticModel):
714
- ENDPOINT: ClassVar[str] = "agents/v1/user-orchestrator-agent-services"
713
+ class CodingAgentService(BaseObjectOrm, BasePydanticModel):
714
+ ENDPOINT: ClassVar[str] = "agents/v1/coding-agent-services"
715
+ FILTERSET_FIELDS: ClassVar[dict[str, list[str]] | None] = {
716
+ "uid": ["exact", "in"],
717
+ "agent_uid": ["exact"],
718
+ "agent_type": ["exact"],
719
+ "scope_kind": ["exact"],
720
+ "user_uid": ["exact"],
721
+ "project_uid": ["exact"],
722
+ "automatic_deployment": ["exact"],
723
+ }
724
+ FILTER_VALUE_NORMALIZERS: ClassVar[dict[str, str]] = {
725
+ "uid": "uid",
726
+ "uid__in": "uid",
727
+ "agent_uid": "uid",
728
+ "agent_type": "str",
729
+ "scope_kind": "str",
730
+ "user_uid": "uid",
731
+ "project_uid": "uid",
732
+ "automatic_deployment": "bool",
733
+ }
715
734
 
716
- uid: str | None = Field(None, description="Public UID of the orchestrator agent service.")
717
- agent_uid: str | None = Field(None, description="Public UID of the resolved astro Agent.")
718
- user_uid: str | None = Field(None, description="Public UID of the owning user.")
735
+ uid: str | None = Field(None, description="Public UID of the coding-agent service.")
736
+ agent_uid: str | None = Field(None, description="Public UID of the owning Agent.")
737
+ agent_type: str | None = Field(
738
+ None,
739
+ description="Agent runtime type, such as astro-orchestrator or project-executor.",
740
+ )
741
+ scope: dict[str, Any] = Field(
742
+ default_factory=dict,
743
+ description="Typed scope projection, for example {kind: user, user_uid} or {kind: project, project_uid}.",
744
+ )
719
745
  is_ready: bool = Field(False, description="Whether the service runtime is routable.")
720
746
  automatic_deployment: bool = Field(
721
747
  False,
722
748
  description="Whether this coding-agent service is eligible for automatic deployment flows.",
723
749
  )
724
- orchestrator_image_has_drift: bool = Field(
725
- False, description="Whether the orchestrator image is stale."
750
+ image_drift: dict[str, Any] | None = Field(
751
+ None, description="Runtime image drift status payload."
726
752
  )
727
- related_job: Any | None = Field(
728
- None, description="Backing job payload or UID when returned by the backend."
753
+ related_job_uid: str | None = Field(
754
+ None, description="Public UID of the backing job, if attached."
729
755
  )
730
- knative_service_runtime: Any | None = Field(
731
- None, description="Backing Knative service runtime payload."
756
+ knative_service_runtime_uid: str | None = Field(
757
+ None, description="Public UID of the backing Knative service runtime, if attached."
732
758
  )
733
- subdomain: str = Field("", description="Public subdomain for the service.")
759
+ subdomain: str | None = Field(None, description="Public subdomain for the service.")
734
760
 
761
+ @classmethod
762
+ def _post_collection_action(
763
+ cls,
764
+ action_name: str,
765
+ body: dict[str, Any],
766
+ *,
767
+ timeout=None,
768
+ expected_statuses: tuple[int, ...] = (200,),
769
+ ) -> Any:
770
+ payload = {"json": serialize_to_json(body)}
771
+ url = f"{cls.get_object_url().rstrip('/')}/{action_name.strip('/')}/"
772
+ response = make_request(
773
+ s=cls.build_session(),
774
+ loaders=cls.LOADERS,
775
+ r_type="POST",
776
+ url=url,
777
+ payload=payload,
778
+ time_out=timeout,
779
+ )
780
+ if response.status_code not in expected_statuses:
781
+ raise_for_response(response, payload=payload)
782
+ return response.json()
735
783
 
736
- class UserProjectExecutorAgentService(BaseObjectOrm, BasePydanticModel):
737
- ENDPOINT: ClassVar[str] = "agents/v1/project-executor-agent-services"
784
+ @classmethod
785
+ def resolve(
786
+ cls,
787
+ *,
788
+ agent_type: str,
789
+ user_uid: str | None = None,
790
+ project_uid: str | None = None,
791
+ timeout=None,
792
+ ) -> CodingAgentService:
793
+ body: dict[str, Any] = {"agent_type": str(agent_type)}
794
+ if user_uid is not None:
795
+ body["user_uid"] = cls._coerce_filter_uid(user_uid, field_name="user_uid")
796
+ if project_uid is not None:
797
+ body["project_uid"] = cls._coerce_filter_uid(project_uid, field_name="project_uid")
798
+ return cls(**cls._post_collection_action("resolve", body, timeout=timeout))
738
799
 
739
- uid: str | None = Field(None, description="Public UID of the project executor service.")
740
- agent_uid: str | None = Field(None, description="Public UID of the resolved executor Agent.")
741
- is_ready: bool = Field(False, description="Whether the executor runtime is currently ready.")
742
- automatic_deployment: bool = Field(
743
- False,
744
- description="Whether this coding-agent service is eligible for automatic deployment flows.",
745
- )
746
- image_drift: dict[str, Any] | None = Field(
747
- None, description="Executor image drift status payload."
748
- )
749
- project: Any | None = Field(
750
- None, description="Owning project payload or UID when returned by the backend."
751
- )
752
- related_job: Any | None = Field(
753
- None, description="Backing job payload or UID when returned by the backend."
754
- )
755
- knative_service_runtime: Any | None = Field(
756
- None, description="Backing Knative service runtime payload."
757
- )
758
- subdomain: str = Field("", description="Public subdomain for the service.")
800
+ @classmethod
801
+ def resolve_user_orchestrator(
802
+ cls,
803
+ *,
804
+ user_uid: str,
805
+ timeout=None,
806
+ ) -> CodingAgentService:
807
+ return cls.resolve(
808
+ agent_type="astro-orchestrator",
809
+ user_uid=user_uid,
810
+ timeout=timeout,
811
+ )
812
+
813
+ @classmethod
814
+ def resolve_project_executor(
815
+ cls,
816
+ *,
817
+ project_uid: str,
818
+ timeout=None,
819
+ ) -> CodingAgentService:
820
+ return cls.resolve(
821
+ agent_type="project-executor",
822
+ project_uid=project_uid,
823
+ timeout=timeout,
824
+ )
825
+
826
+ @classmethod
827
+ def deploy_current_project_version(
828
+ cls,
829
+ *,
830
+ project_uid: str,
831
+ timeout=None,
832
+ ) -> dict[str, Any]:
833
+ resolved_project_uid = cls._coerce_filter_uid(project_uid, field_name="project_uid")
834
+ return cls._post_collection_action(
835
+ f"project/{resolved_project_uid}/deploy-current-version",
836
+ {},
837
+ timeout=timeout,
838
+ expected_statuses=(200, 201, 202),
839
+ )
840
+
841
+ @classmethod
842
+ def deploy_project(
843
+ cls,
844
+ *,
845
+ project_uid: str,
846
+ llm_provider: str | None = None,
847
+ llm_model: str | None = None,
848
+ llm_thinking: str | None = None,
849
+ automatic_deployment: bool | None = None,
850
+ cpu_request: str | None = None,
851
+ cpu_limit: str | None = None,
852
+ memory_request: str | None = None,
853
+ memory_limit: str | None = None,
854
+ gpu_request: str | None = None,
855
+ gpu_type: str | None = None,
856
+ spot: bool | None = None,
857
+ timeout=None,
858
+ **extra: Any,
859
+ ) -> dict[str, Any]:
860
+ resolved_project_uid = cls._coerce_filter_uid(project_uid, field_name="project_uid")
861
+ body: dict[str, Any] = {
862
+ key: value
863
+ for key, value in {
864
+ "llm_provider": llm_provider,
865
+ "llm_model": llm_model,
866
+ "llm_thinking": llm_thinking,
867
+ "automatic_deployment": automatic_deployment,
868
+ "cpu_request": cpu_request,
869
+ "cpu_limit": cpu_limit,
870
+ "memory_request": memory_request,
871
+ "memory_limit": memory_limit,
872
+ "gpu_request": gpu_request,
873
+ "gpu_type": gpu_type,
874
+ "spot": spot,
875
+ **extra,
876
+ }.items()
877
+ if value is not None
878
+ }
879
+ return cls._post_collection_action(
880
+ f"project/{resolved_project_uid}/deploy",
881
+ body,
882
+ timeout=timeout,
883
+ expected_statuses=(200, 201, 202),
884
+ )
885
+
886
+ def reconcile_runtime(
887
+ self,
888
+ *,
889
+ reason: str | None = None,
890
+ timeout=None,
891
+ ) -> dict[str, Any]:
892
+ body = {} if reason is None else {"reason": str(reason)}
893
+ payload = {"json": serialize_to_json(body)}
894
+ response = make_request(
895
+ s=type(self).build_session(),
896
+ loaders=type(self).LOADERS,
897
+ r_type="POST",
898
+ url=self.get_action_url("reconcile-runtime"),
899
+ payload=payload,
900
+ time_out=timeout,
901
+ )
902
+ if response.status_code not in (200, 202):
903
+ raise_for_response(response, payload=payload)
904
+ return response.json()
759
905
 
760
906
 
761
907
  class AgentSession(BaseObjectOrm, BasePydanticModel):
@@ -1712,8 +1858,7 @@ __all__ = [
1712
1858
  "AgentSessionA2ANormalizedResponse",
1713
1859
  "AgentSessionRuntimeReady",
1714
1860
  "AgentSessionRuntimeAccess",
1715
- "UserOrchestratorAgentService",
1716
- "UserProjectExecutorAgentService",
1861
+ "CodingAgentService",
1717
1862
  "AgentSession",
1718
1863
  "AgentSessionStatus",
1719
1864
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 4.4.19
3
+ Version: 4.4.20
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License: MainSequence GmbH SDK License Agreement
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence"
7
- version = "4.4.19"
7
+ version = "4.4.20"
8
8
  description = "Main Sequence SDK "
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1436,35 +1436,25 @@ def test_agent_runtime_models_deserialize_backend_uid_payloads():
1436
1436
  assert session.agent_uid == agent_uid
1437
1437
  assert session.name == "Research follow-up"
1438
1438
 
1439
- orchestrator = agent_models_mod.UserOrchestratorAgentService.model_validate(
1440
- {
1441
- "uid": service_uid,
1442
- "agent_uid": agent_uid,
1443
- "is_ready": True,
1444
- "orchestrator_image_has_drift": False,
1445
- "user_uid": user_uid,
1446
- "related_job": {"uid": "job-uid"},
1447
- "knative_service_runtime": {"uid": "runtime-uid"},
1448
- "subdomain": "astro-jose",
1449
- }
1450
- )
1451
- assert orchestrator.uid == service_uid
1452
- assert orchestrator.agent_uid == agent_uid
1453
-
1454
- executor = agent_models_mod.UserProjectExecutorAgentService.model_validate(
1439
+ service = agent_models_mod.CodingAgentService.model_validate(
1455
1440
  {
1456
1441
  "uid": service_uid,
1457
1442
  "agent_uid": agent_uid,
1443
+ "agent_type": "project-executor",
1444
+ "scope": {"kind": "project", "project_uid": "project-uid"},
1458
1445
  "is_ready": True,
1459
1446
  "image_drift": {"has_drift": False, "checks": []},
1460
- "project": {"uid": "project-uid"},
1461
- "related_job": {"uid": "job-uid"},
1462
- "knative_service_runtime": {"uid": "runtime-uid"},
1447
+ "related_job_uid": "job-uid",
1448
+ "knative_service_runtime_uid": "runtime-uid",
1449
+ "automatic_deployment": True,
1463
1450
  "subdomain": "executor-project",
1464
1451
  }
1465
1452
  )
1466
- assert executor.uid == service_uid
1467
- assert executor.agent_uid == agent_uid
1453
+ assert service.uid == service_uid
1454
+ assert service.agent_uid == agent_uid
1455
+ assert service.agent_type == "project-executor"
1456
+ assert service.scope["project_uid"] == "project-uid"
1457
+
1468
1458
 
1469
1459
 
1470
1460
  def test_agent_session_runtime_access_uses_session_uid_route(monkeypatch):
File without changes
File without changes
File without changes