mainsequence 6.0.46__tar.gz → 6.0.48__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 (133) hide show
  1. {mainsequence-6.0.46 → mainsequence-6.0.48}/PKG-INFO +1 -1
  2. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +24 -2
  3. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/api.py +208 -10
  4. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/cli.py +323 -21
  5. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/__init__.py +1 -0
  6. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/agent_runtime_models.py +318 -16
  7. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/base.py +5 -13
  8. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/metatables/core.py +15 -19
  9. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/models_foundry.py +10 -10
  10. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/models_helpers.py +43 -33
  11. mainsequence-6.0.48/mainsequence/client/observability.py +283 -0
  12. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/project_context.py +7 -7
  13. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence.egg-info/PKG-INFO +1 -1
  14. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence.egg-info/SOURCES.txt +2 -0
  15. {mainsequence-6.0.46 → mainsequence-6.0.48}/pyproject.toml +1 -1
  16. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_cli.py +100 -31
  17. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_cli_migrations.py +1 -1
  18. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_environment_resource_context.py +21 -21
  19. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_environment_response_contracts.py +17 -2
  20. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_filter_normalization.py +178 -53
  21. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_meta_tables_client_models.py +16 -16
  22. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_meta_tables_sqlalchemy_contracts.py +1 -1
  23. mainsequence-6.0.48/tests/test_observability_client.py +221 -0
  24. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_project_branch_contract.py +2 -2
  25. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_project_runtime_context.py +7 -7
  26. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_scheduler_client_model.py +7 -7
  27. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_secret_client_model.py +4 -4
  28. {mainsequence-6.0.46 → mainsequence-6.0.48}/LICENSE +0 -0
  29. {mainsequence-6.0.46 → mainsequence-6.0.48}/README.md +0 -0
  30. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/AGENTS.md +0 -0
  31. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  32. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  33. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
  34. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
  35. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
  36. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
  37. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
  38. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/maintenance/project-maintenance/SKILL.md +0 -0
  39. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
  40. {mainsequence-6.0.46 → mainsequence-6.0.48}/agent_scaffold/skills/sdk_project_execution/SKILL.md +0 -0
  41. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/__init__.py +0 -0
  42. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/__main__.py +0 -0
  43. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/bootstrap.py +0 -0
  44. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/__init__.py +0 -0
  45. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/browser_auth.py +0 -0
  46. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/config.py +0 -0
  47. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/docker_utils.py +0 -0
  48. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/doctor.py +0 -0
  49. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/local_ops.py +0 -0
  50. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/migrations.py +0 -0
  51. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/model_filters.py +0 -0
  52. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/project_status.py +0 -0
  53. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/pydantic_cli.py +0 -0
  54. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/sdk_utils.py +0 -0
  55. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/ssh_utils.py +0 -0
  56. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/cli/ui.py +0 -0
  57. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/client.py +0 -0
  58. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/compute_validation.py +0 -0
  59. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
  60. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
  61. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
  62. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
  63. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/dtype_codec.py +0 -0
  64. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/exceptions.py +0 -0
  65. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/metatables/__init__.py +0 -0
  66. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/models_user.py +0 -0
  67. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/client/utils.py +0 -0
  68. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/defaults.py +0 -0
  69. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/instrumentation/__init__.py +0 -0
  70. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/instrumentation/utils.py +0 -0
  71. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/logconf.py +0 -0
  72. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/__init__.py +0 -0
  73. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/__main__.py +0 -0
  74. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
  75. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
  76. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
  77. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
  78. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
  79. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/data_nodes/models.py +0 -0
  80. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
  81. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
  82. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
  83. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
  84. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/future_registry.py +0 -0
  85. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/hashing.py +0 -0
  86. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/migrations/__init__.py +0 -0
  87. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/migrations/alembic.py +0 -0
  88. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/migrations/env.py +0 -0
  89. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/migrations/provider.py +0 -0
  90. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/migrations/registry.py +0 -0
  91. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
  92. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
  93. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
  94. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
  95. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
  96. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/schema_names.py +0 -0
  97. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
  98. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/project_skills.py +0 -0
  99. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/runtime_flags.py +0 -0
  100. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence/scaffold_skills.py +0 -0
  101. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence.egg-info/dependency_links.txt +0 -0
  102. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence.egg-info/entry_points.txt +0 -0
  103. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence.egg-info/requires.txt +0 -0
  104. {mainsequence-6.0.46 → mainsequence-6.0.48}/mainsequence.egg-info/top_level.txt +0 -0
  105. {mainsequence-6.0.46 → mainsequence-6.0.48}/setup.cfg +0 -0
  106. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_auth_precedence.py +0 -0
  107. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_build_operations_hashing.py +0 -0
  108. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_canonical_api_route_contract.py +0 -0
  109. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_cli_browser_auth.py +0 -0
  110. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_client.py +0 -0
  111. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_data_access_mixin_dimension_audit.py +0 -0
  112. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_data_node_storage_dimension_queries.py +0 -0
  113. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_data_node_update_flow.py +0 -0
  114. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_dependency_extras.py +0 -0
  115. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_duckdb_interface_dimensions.py +0 -0
  116. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_instrumentation.py +0 -0
  117. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_local_ops.py +0 -0
  118. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_logconf.py +0 -0
  119. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_meta_table_migrations.py +0 -0
  120. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_models_user_request_bound_auth.py +0 -0
  121. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_notification_uid_contract.py +0 -0
  122. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_pod_project_resolution.py +0 -0
  123. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_project_batch_jobs_from_file.py +0 -0
  124. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_project_skills.py +0 -0
  125. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_run_configuration.py +0 -0
  126. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_scaffold_skills.py +0 -0
  127. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_schema_names.py +0 -0
  128. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_source_table_configuration.py +0 -0
  129. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_sqlite_interface_dimensions.py +0 -0
  130. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_ssh_utils.py +0 -0
  131. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_update_runner_uid_runtime.py +0 -0
  132. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_update_statistics.py +0 -0
  133. {mainsequence-6.0.46 → mainsequence-6.0.48}/tests/test_update_uid_guards.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 6.0.46
3
+ Version: 6.0.48
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: LicenseRef-MainSequence-Proprietary
@@ -63,8 +63,9 @@ This skill must not claim ownership of:
63
63
  1. `docs/tutorial/scheduling_jobs.md`
64
64
  2. `docs/knowledge/infrastructure/scheduling_jobs.md`
65
65
  3. `docs/knowledge/infrastructure/artifacts.md`
66
- 4. `docs/tutorial/dashboards/streamlit/streamlit_integration_2.md` when deploying or verifying a Streamlit dashboard
67
- 5. `docs/knowledge/dashboards/streamlit/index.md` when deployment metadata or SDK/dashboard boundary questions matter
66
+ 4. `docs/knowledge/infrastructure/owner_observability.md` when inspecting logs or resource usage
67
+ 5. `docs/tutorial/dashboards/streamlit/streamlit_integration_2.md` when deploying or verifying a Streamlit dashboard
68
+ 6. `docs/knowledge/dashboards/streamlit/index.md` when deployment metadata or SDK/dashboard boundary questions matter
68
69
 
69
70
  If the task touches deployed FastAPI APIs, also read the relevant API skill/docs before changing the operational workflow.
70
71
 
@@ -184,6 +185,27 @@ Verify:
184
185
  - the run was triggered manually when immediate validation matters, or has already been triggered by the scheduler
185
186
  - the logs and run status match expectations
186
187
 
188
+ Use owner-scoped observability rather than infrastructure discovery:
189
+
190
+ - `JobRun.get_logs()` and `JobRun.get_resource_usage()`
191
+ - `ResourceRelease.get_logs()` and `ResourceRelease.get_resource_usage()`
192
+ - `Agent.get_logs()` and `Agent.get_resource_usage()`
193
+ - `AgentSession.get_logs()` for one fixed session
194
+ - `mainsequence project jobs runs logs <JOB_RUN_UID>`
195
+ - `mainsequence project jobs runs resource-usage <JOB_RUN_UID>`
196
+ - `mainsequence project project_resource logs <RESOURCE_RELEASE_UID>`
197
+ - `mainsequence project project_resource resource-usage <RESOURCE_RELEASE_UID>`
198
+ - `mainsequence agent logs <AGENT_UID>`
199
+ - `mainsequence agent resource-usage <AGENT_UID>`
200
+ - `mainsequence agent session logs <AGENT_SESSION_UID>`
201
+
202
+ Do not ask the user for an Environment UID for these owner operations. The SDK
203
+ preserves the backend-owned capability scope. Do not discover Knative services,
204
+ revisions, pods, namespaces, or provider resources to retrieve telemetry.
205
+
206
+ DeploymentRun build and orchestration logs remain a separate product surface;
207
+ do not parse them as application-runtime `OwnerLogPage` rows.
208
+
187
209
  ### 4. Workflow application is backend-owned
188
210
 
189
211
  Repository events apply valid workflow files independently. An invalid file is
@@ -1159,7 +1159,7 @@ def delete_organization_team(
1159
1159
 
1160
1160
  def list_agents(
1161
1161
  *,
1162
- organization_project_environment_uid: str,
1162
+ organization_environment_uid: str,
1163
1163
  timeout: int | None = None,
1164
1164
  filters: dict[str, Any] | None = None,
1165
1165
  ) -> list[dict[str, Any]]:
@@ -1168,7 +1168,7 @@ def list_agents(
1168
1168
  """
1169
1169
  try:
1170
1170
  read_params = dict(filters or {})
1171
- read_params["organization_project_environment_uid"] = organization_project_environment_uid
1171
+ read_params["organization_environment_uid"] = organization_environment_uid
1172
1172
  payload = _run_sdk_model_operation(
1173
1173
  module_name="mainsequence.client.agent_runtime_models",
1174
1174
  class_name="Agent",
@@ -1205,10 +1205,93 @@ def get_agent(
1205
1205
  raise ApiError(f"Agent fetch failed: {e}") from e
1206
1206
 
1207
1207
 
1208
+ def _get_owner_observability(
1209
+ *,
1210
+ module_name: str,
1211
+ class_name: str,
1212
+ owner_uid: str,
1213
+ action_name: str,
1214
+ action_kwargs: dict[str, Any],
1215
+ timeout: int | None,
1216
+ ) -> dict[str, Any]:
1217
+ """Run one SDK owner-observability action through the authenticated CLI client."""
1218
+
1219
+ try:
1220
+
1221
+ def _run(ClientModel):
1222
+ owner = ClientModel.get(pk=str(owner_uid), timeout=timeout)
1223
+ result = getattr(owner, action_name)(timeout=timeout, **action_kwargs)
1224
+ return _sdk_object_to_dict(result)
1225
+
1226
+ return _run_sdk_model_operation(
1227
+ module_name=module_name,
1228
+ class_name=class_name,
1229
+ operation=_run,
1230
+ )
1231
+ except Exception as e:
1232
+ err_name = type(e).__name__
1233
+ if err_name == "NotFoundError":
1234
+ raise ApiError(f"{class_name} not found: {owner_uid}") from e
1235
+ if isinstance(e, (ApiError, NotLoggedIn)):
1236
+ raise
1237
+ raise ApiError(f"{class_name} {action_name} failed: {e}") from e
1238
+
1239
+
1240
+ def get_agent_logs(
1241
+ agent_uid: str,
1242
+ *,
1243
+ start: int | float | None = None,
1244
+ end: int | float | None = None,
1245
+ cursor: str | None = None,
1246
+ limit: int | None = None,
1247
+ severity: str | None = None,
1248
+ request_id: str | None = None,
1249
+ event: str | None = None,
1250
+ outcome: str | None = None,
1251
+ agent_session_uid: str | None = None,
1252
+ timeout: int | None = None,
1253
+ ) -> dict[str, Any]:
1254
+ return _get_owner_observability(
1255
+ module_name="mainsequence.client.agent_runtime_models",
1256
+ class_name="Agent",
1257
+ owner_uid=agent_uid,
1258
+ action_name="get_logs",
1259
+ action_kwargs={
1260
+ "start": start,
1261
+ "end": end,
1262
+ "cursor": cursor,
1263
+ "limit": limit,
1264
+ "severity": severity,
1265
+ "request_id": request_id,
1266
+ "event": event,
1267
+ "outcome": outcome,
1268
+ "agent_session_uid": agent_session_uid,
1269
+ },
1270
+ timeout=timeout,
1271
+ )
1272
+
1273
+
1274
+ def get_agent_resource_usage(
1275
+ agent_uid: str,
1276
+ *,
1277
+ start: int | float | None = None,
1278
+ end: int | float | None = None,
1279
+ timeout: int | None = None,
1280
+ ) -> dict[str, Any]:
1281
+ return _get_owner_observability(
1282
+ module_name="mainsequence.client.agent_runtime_models",
1283
+ class_name="Agent",
1284
+ owner_uid=agent_uid,
1285
+ action_name="get_resource_usage",
1286
+ action_kwargs={"start": start, "end": end},
1287
+ timeout=timeout,
1288
+ )
1289
+
1290
+
1208
1291
  def semantic_search_agents(
1209
1292
  q: str,
1210
1293
  *,
1211
- organization_project_environment_uid: str,
1294
+ organization_environment_uid: str,
1212
1295
  limit: int = 20,
1213
1296
  timeout: int | None = None,
1214
1297
  ) -> list[dict[str, Any]]:
@@ -1221,7 +1304,7 @@ def semantic_search_agents(
1221
1304
  class_name="Agent",
1222
1305
  operation=lambda ClientAgent: ClientAgent.semantic_search(
1223
1306
  q,
1224
- organization_project_environment_uid=organization_project_environment_uid,
1307
+ organization_environment_uid=organization_environment_uid,
1225
1308
  limit=limit,
1226
1309
  timeout=timeout,
1227
1310
  ),
@@ -1409,6 +1492,38 @@ def get_agent_session(
1409
1492
  raise ApiError(f"Agent session fetch failed: {e}") from e
1410
1493
 
1411
1494
 
1495
+ def get_agent_session_logs(
1496
+ agent_session_uid: str,
1497
+ *,
1498
+ start: int | float | None = None,
1499
+ end: int | float | None = None,
1500
+ cursor: str | None = None,
1501
+ limit: int | None = None,
1502
+ severity: str | None = None,
1503
+ request_id: str | None = None,
1504
+ event: str | None = None,
1505
+ outcome: str | None = None,
1506
+ timeout: int | None = None,
1507
+ ) -> dict[str, Any]:
1508
+ return _get_owner_observability(
1509
+ module_name="mainsequence.client.agent_runtime_models",
1510
+ class_name="AgentSession",
1511
+ owner_uid=agent_session_uid,
1512
+ action_name="get_logs",
1513
+ action_kwargs={
1514
+ "start": start,
1515
+ "end": end,
1516
+ "cursor": cursor,
1517
+ "limit": limit,
1518
+ "severity": severity,
1519
+ "request_id": request_id,
1520
+ "event": event,
1521
+ "outcome": outcome,
1522
+ },
1523
+ timeout=timeout,
1524
+ )
1525
+
1526
+
1412
1527
  def send_agent_session_a2a_message(
1413
1528
  agent_session_uid: str,
1414
1529
  *,
@@ -2406,6 +2521,55 @@ def get_resource_release(
2406
2521
  raise ApiError(f"Resource release fetch failed: {e}") from e
2407
2522
 
2408
2523
 
2524
+ def get_resource_release_logs(
2525
+ release_uid: str,
2526
+ *,
2527
+ start: int | float | None = None,
2528
+ end: int | float | None = None,
2529
+ cursor: str | None = None,
2530
+ limit: int | None = None,
2531
+ severity: str | None = None,
2532
+ request_id: str | None = None,
2533
+ event: str | None = None,
2534
+ outcome: str | None = None,
2535
+ timeout: int | None = None,
2536
+ ) -> dict[str, Any]:
2537
+ return _get_owner_observability(
2538
+ module_name="mainsequence.client.models_helpers",
2539
+ class_name="ResourceRelease",
2540
+ owner_uid=release_uid,
2541
+ action_name="get_logs",
2542
+ action_kwargs={
2543
+ "start": start,
2544
+ "end": end,
2545
+ "cursor": cursor,
2546
+ "limit": limit,
2547
+ "severity": severity,
2548
+ "request_id": request_id,
2549
+ "event": event,
2550
+ "outcome": outcome,
2551
+ },
2552
+ timeout=timeout,
2553
+ )
2554
+
2555
+
2556
+ def get_resource_release_resource_usage(
2557
+ release_uid: str,
2558
+ *,
2559
+ start: int | float | None = None,
2560
+ end: int | float | None = None,
2561
+ timeout: int | None = None,
2562
+ ) -> dict[str, Any]:
2563
+ return _get_owner_observability(
2564
+ module_name="mainsequence.client.models_helpers",
2565
+ class_name="ResourceRelease",
2566
+ owner_uid=release_uid,
2567
+ action_name="get_resource_usage",
2568
+ action_kwargs={"start": start, "end": end},
2569
+ timeout=timeout,
2570
+ )
2571
+
2572
+
2409
2573
  def delete_resource_release(
2410
2574
  *,
2411
2575
  release_uid: str,
@@ -4733,6 +4897,14 @@ def list_project_job_runs(
4733
4897
  def get_project_job_run_logs(
4734
4898
  job_run_uid: str,
4735
4899
  *,
4900
+ start: int | float | None = None,
4901
+ end: int | float | None = None,
4902
+ cursor: str | None = None,
4903
+ limit: int | None = None,
4904
+ severity: str | None = None,
4905
+ request_id: str | None = None,
4906
+ event: str | None = None,
4907
+ outcome: str | None = None,
4736
4908
  timeout: int | None = None,
4737
4909
  ) -> dict[str, Any]:
4738
4910
  """
@@ -4787,12 +4959,21 @@ def get_project_job_run_logs(
4787
4959
  ClientJobRun.ROOT_URL = root_url
4788
4960
 
4789
4961
  job_run = ClientJobRun.get(pk=job_run_uid, timeout=timeout)
4790
- payload = job_run.get_logs(timeout=timeout)
4791
- if isinstance(payload, dict):
4792
- return payload
4793
- if hasattr(payload, "model_dump"):
4794
- return payload.model_dump()
4795
- return {"job_run_uid": job_run_uid, "rows": []}
4962
+ result = job_run.get_logs(
4963
+ start=start,
4964
+ end=end,
4965
+ cursor=cursor,
4966
+ limit=limit,
4967
+ severity=severity,
4968
+ request_id=request_id,
4969
+ event=event,
4970
+ outcome=outcome,
4971
+ timeout=timeout,
4972
+ )
4973
+ payload = _sdk_object_to_dict(result)
4974
+ payload["job_run_uid"] = str(job_run.uid or job_run_uid)
4975
+ payload["status"] = job_run.status
4976
+ return payload
4796
4977
 
4797
4978
  except Exception as e:
4798
4979
  err_name = type(e).__name__
@@ -4829,6 +5010,23 @@ def get_project_job_run_logs(
4829
5010
  os.environ[k] = v
4830
5011
 
4831
5012
 
5013
+ def get_project_job_run_resource_usage(
5014
+ job_run_uid: str,
5015
+ *,
5016
+ start: int | float | None = None,
5017
+ end: int | float | None = None,
5018
+ timeout: int | None = None,
5019
+ ) -> dict[str, Any]:
5020
+ return _get_owner_observability(
5021
+ module_name="mainsequence.client.models_helpers",
5022
+ class_name="JobRun",
5023
+ owner_uid=job_run_uid,
5024
+ action_name="get_resource_usage",
5025
+ action_kwargs={"start": start, "end": end},
5026
+ timeout=timeout,
5027
+ )
5028
+
5029
+
4832
5030
  def _json_results(r: requests.Response) -> list[dict]:
4833
5031
  """
4834
5032
  Return list-like API payloads for DRF list endpoints.