mainsequence 6.0.52__tar.gz → 6.0.53__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.
- {mainsequence-6.0.52 → mainsequence-6.0.53}/PKG-INFO +1 -1
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +3 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/agent_runtime_models.py +7 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence.egg-info/PKG-INFO +1 -1
- {mainsequence-6.0.52 → mainsequence-6.0.53}/pyproject.toml +1 -1
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_environment_response_contracts.py +5 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_filter_normalization.py +157 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/LICENSE +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/README.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/maintenance/project-maintenance/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/sdk_project_execution/SKILL.md +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/__main__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/bootstrap.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/api.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/cli.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/config.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/migrations.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/project_status.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/cli/ui.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/base.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/client.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/dtype_codec.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/metatables/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/metatables/core.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/models_foundry.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/models_user.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/observability.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/utils.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/defaults.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/logconf.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/__main__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/models.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/future_registry.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/hashing.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/migrations/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/migrations/alembic.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/migrations/env.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/migrations/provider.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/migrations/registry.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/schema_names.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/project_context.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/project_skills.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/scaffold_skills.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/setup.cfg +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_auth_precedence.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_build_operations_hashing.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_canonical_api_route_contract.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_cli.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_cli_migrations.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_client.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_data_access_mixin_dimension_audit.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_data_node_storage_dimension_queries.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_data_node_update_flow.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_dependency_extras.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_duckdb_interface_dimensions.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_environment_resource_context.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_instrumentation.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_local_ops.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_logconf.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_meta_table_migrations.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_meta_tables_client_models.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_notification_uid_contract.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_observability_client.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_pod_project_resolution.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_project_batch_jobs_from_file.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_project_branch_contract.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_project_runtime_context.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_project_skills.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_run_configuration.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_scaffold_skills.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_scheduler_client_model.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_schema_names.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_secret_client_model.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_source_table_configuration.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_sqlite_interface_dimensions.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_ssh_utils.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_update_runner_uid_runtime.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_update_statistics.py +0 -0
- {mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_update_uid_guards.py +0 -0
{mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md
RENAMED
|
@@ -71,6 +71,9 @@ mainsequence agent session get_or_create \
|
|
|
71
71
|
```
|
|
72
72
|
|
|
73
73
|
Use the returned session `uid` as the target `AgentSession` UID.
|
|
74
|
+
The returned `runtime_capabilities` map is a read-only advertisement from the
|
|
75
|
+
session harness. Inspect it when capability-aware behavior is required; never
|
|
76
|
+
construct, send, or override it from client code.
|
|
74
77
|
|
|
75
78
|
If this A2A request originates from an existing caller session, include the
|
|
76
79
|
parent session UID:
|
|
@@ -1808,6 +1808,13 @@ class AgentSession(OwnerLogMixin, BaseObjectOrm, BasePydanticModel):
|
|
|
1808
1808
|
default=None,
|
|
1809
1809
|
description="Backend-owned application-log capability for this exact session.",
|
|
1810
1810
|
)
|
|
1811
|
+
runtime_capabilities: dict[str, str] = Field(
|
|
1812
|
+
default_factory=dict,
|
|
1813
|
+
description=(
|
|
1814
|
+
"Read-only versioned runtime capabilities advertised by the session "
|
|
1815
|
+
"harness. Capability names are backend-extensible."
|
|
1816
|
+
),
|
|
1817
|
+
)
|
|
1811
1818
|
agent_uid: str | None = Field(
|
|
1812
1819
|
None, description="Public UID of the agent definition used for this session."
|
|
1813
1820
|
)
|
|
@@ -109,3 +109,8 @@ def test_backend_environment_response_contract_is_declared_by_strict_sdk_model(
|
|
|
109
109
|
def test_owner_observability_projection_is_declared_by_strict_sdk_model(model):
|
|
110
110
|
assert model.model_config.get("extra") == "forbid"
|
|
111
111
|
assert "observability" in model.model_fields
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def test_agent_session_runtime_capabilities_projection_is_declared_and_typed():
|
|
115
|
+
assert agent_models.AgentSession.model_config.get("extra") == "forbid"
|
|
116
|
+
assert agent_models.AgentSession.model_fields["runtime_capabilities"].annotation == dict[str, str]
|
|
@@ -1832,6 +1832,18 @@ def test_agent_runtime_models_deserialize_backend_uid_payloads():
|
|
|
1832
1832
|
"owner_user_uid": user_uid,
|
|
1833
1833
|
"is_locked": False,
|
|
1834
1834
|
},
|
|
1835
|
+
"observability": {
|
|
1836
|
+
"application_logs_url": f"/api/v1/agent-sessions/{session_uid}/logs/",
|
|
1837
|
+
"resource_usage_url": None,
|
|
1838
|
+
"deployment_runs_url": None,
|
|
1839
|
+
"sessions_url": None,
|
|
1840
|
+
},
|
|
1841
|
+
"runtime_capabilities": {
|
|
1842
|
+
"tau_runtime_bootstrap": "v1",
|
|
1843
|
+
"tau_resume_snapshot": "v1",
|
|
1844
|
+
"tau_activity_sequence": "v1",
|
|
1845
|
+
"tau_turn_commit": "v1",
|
|
1846
|
+
},
|
|
1835
1847
|
}
|
|
1836
1848
|
)
|
|
1837
1849
|
assert session.uid == session_uid
|
|
@@ -1842,6 +1854,13 @@ def test_agent_runtime_models_deserialize_backend_uid_payloads():
|
|
|
1842
1854
|
assert session.harness_version == "0.3.1"
|
|
1843
1855
|
assert session.is_archived is False
|
|
1844
1856
|
assert session.active_model == "gpt-5.4"
|
|
1857
|
+
assert session.observability.application_logs_url.endswith(f"/{session_uid}/logs/")
|
|
1858
|
+
assert session.runtime_capabilities == {
|
|
1859
|
+
"tau_runtime_bootstrap": "v1",
|
|
1860
|
+
"tau_resume_snapshot": "v1",
|
|
1861
|
+
"tau_activity_sequence": "v1",
|
|
1862
|
+
"tau_turn_commit": "v1",
|
|
1863
|
+
}
|
|
1845
1864
|
|
|
1846
1865
|
service = agent_models_mod.CodingAgentService.model_validate(
|
|
1847
1866
|
{
|
|
@@ -2089,6 +2108,70 @@ def test_agent_session_filter_supports_archive_history_query(monkeypatch):
|
|
|
2089
2108
|
}
|
|
2090
2109
|
|
|
2091
2110
|
|
|
2111
|
+
def test_agent_session_list_and_detail_parse_runtime_capabilities(monkeypatch):
|
|
2112
|
+
session_uid = "3f1cc452-43ec-49cb-b2ba-87dbac164d29"
|
|
2113
|
+
agent_uid = "e0e75693-4110-464c-93e0-82c7fd9c9a23"
|
|
2114
|
+
session_payload = {
|
|
2115
|
+
"uid": session_uid,
|
|
2116
|
+
"agent_uid": agent_uid,
|
|
2117
|
+
"agent_name": "Research Copilot",
|
|
2118
|
+
"agent_type": "custom",
|
|
2119
|
+
"harness": "tau",
|
|
2120
|
+
"harness_protocol": "tau-session-v1",
|
|
2121
|
+
"harness_version": "0.3.1",
|
|
2122
|
+
"name": "Reusable session",
|
|
2123
|
+
"status": "running",
|
|
2124
|
+
"llm_provider": "openai",
|
|
2125
|
+
"llm_model": "gpt-5.4",
|
|
2126
|
+
"llm_thinking": "medium",
|
|
2127
|
+
"observability": {
|
|
2128
|
+
"application_logs_url": f"/api/v1/agent-sessions/{session_uid}/logs/",
|
|
2129
|
+
"resource_usage_url": None,
|
|
2130
|
+
"deployment_runs_url": None,
|
|
2131
|
+
"sessions_url": None,
|
|
2132
|
+
},
|
|
2133
|
+
"runtime_capabilities": {
|
|
2134
|
+
"tau_runtime_bootstrap": "v1",
|
|
2135
|
+
"tau_resume_snapshot": "v1",
|
|
2136
|
+
"tau_activity_sequence": "v1",
|
|
2137
|
+
"tau_turn_commit": "v1",
|
|
2138
|
+
},
|
|
2139
|
+
}
|
|
2140
|
+
responses = iter(
|
|
2141
|
+
[
|
|
2142
|
+
{"count": 1, "next": None, "previous": None, "results": [dict(session_payload)]},
|
|
2143
|
+
dict(session_payload),
|
|
2144
|
+
]
|
|
2145
|
+
)
|
|
2146
|
+
|
|
2147
|
+
class FakeResponse:
|
|
2148
|
+
status_code = 200
|
|
2149
|
+
content = b'{"ok": true}'
|
|
2150
|
+
|
|
2151
|
+
def __init__(self, payload):
|
|
2152
|
+
self._payload = payload
|
|
2153
|
+
|
|
2154
|
+
def json(self):
|
|
2155
|
+
return self._payload
|
|
2156
|
+
|
|
2157
|
+
def _fake_make_request(*, s, loaders, r_type, url, payload, time_out=None):
|
|
2158
|
+
return FakeResponse(next(responses))
|
|
2159
|
+
|
|
2160
|
+
monkeypatch.setattr(base_mod, "make_request", _fake_make_request)
|
|
2161
|
+
|
|
2162
|
+
listed = agent_models_mod.AgentSession.filter(agent_uid=agent_uid)
|
|
2163
|
+
detailed = agent_models_mod.AgentSession.get(pk=session_uid)
|
|
2164
|
+
|
|
2165
|
+
assert listed[0].runtime_capabilities["tau_turn_commit"] == "v1"
|
|
2166
|
+
assert detailed.runtime_capabilities == listed[0].runtime_capabilities
|
|
2167
|
+
assert detailed.observability.application_logs_url.endswith(f"/{session_uid}/logs/")
|
|
2168
|
+
|
|
2169
|
+
with pytest.raises(ValidationError, match="unexpected_projection"):
|
|
2170
|
+
agent_models_mod.AgentSession.model_validate(
|
|
2171
|
+
{**session_payload, "unexpected_projection": "still forbidden"}
|
|
2172
|
+
)
|
|
2173
|
+
|
|
2174
|
+
|
|
2092
2175
|
def test_agent_session_get_insights_parses_pi_response(monkeypatch):
|
|
2093
2176
|
session_uid = "3f1cc452-43ec-49cb-b2ba-87dbac164d29"
|
|
2094
2177
|
captured = {}
|
|
@@ -3990,6 +4073,80 @@ def test_agent_get_or_create_session_posts_new_contract(monkeypatch):
|
|
|
3990
4073
|
}
|
|
3991
4074
|
|
|
3992
4075
|
|
|
4076
|
+
def test_agent_get_or_create_session_parses_reused_handle_capabilities(monkeypatch):
|
|
4077
|
+
agent_uid = "e0e75693-4110-464c-93e0-82c7fd9c9a23"
|
|
4078
|
+
session_uid = "3f1cc452-43ec-49cb-b2ba-87dbac164d29"
|
|
4079
|
+
handle_unique_id = "tutorial-evaluation-development"
|
|
4080
|
+
agent = agent_models_mod.Agent(
|
|
4081
|
+
uid=agent_uid,
|
|
4082
|
+
name="Research Copilot",
|
|
4083
|
+
agent_type="custom",
|
|
4084
|
+
description="Research assistant.",
|
|
4085
|
+
agent_card=None,
|
|
4086
|
+
llm_provider="openai",
|
|
4087
|
+
llm_model="gpt-5.4",
|
|
4088
|
+
llm_thinking="medium",
|
|
4089
|
+
repository_branch=None,
|
|
4090
|
+
organization_environment_uid=None,
|
|
4091
|
+
organization_environment_name=None,
|
|
4092
|
+
)
|
|
4093
|
+
captured = {}
|
|
4094
|
+
|
|
4095
|
+
class FakeResponse:
|
|
4096
|
+
status_code = 200
|
|
4097
|
+
content = b'{"ok": true}'
|
|
4098
|
+
|
|
4099
|
+
@staticmethod
|
|
4100
|
+
def json():
|
|
4101
|
+
return {
|
|
4102
|
+
"uid": session_uid,
|
|
4103
|
+
"agent_uid": agent_uid,
|
|
4104
|
+
"agent_name": "Research Copilot",
|
|
4105
|
+
"agent_type": "custom",
|
|
4106
|
+
"harness": "tau",
|
|
4107
|
+
"harness_protocol": "tau-session-v1",
|
|
4108
|
+
"harness_version": "0.3.1",
|
|
4109
|
+
"name": "Tutorial evaluation",
|
|
4110
|
+
"status": "running",
|
|
4111
|
+
"llm_provider": "openai",
|
|
4112
|
+
"llm_model": "gpt-5.4",
|
|
4113
|
+
"llm_thinking": "medium",
|
|
4114
|
+
"bound_handle": {
|
|
4115
|
+
"uid": "44444444-4444-4444-8444-444444444444",
|
|
4116
|
+
"handle_unique_id": handle_unique_id,
|
|
4117
|
+
"owner_user_uid": "fdf409f7-d16f-4f71-986b-9057db6c7eca",
|
|
4118
|
+
"is_locked": False,
|
|
4119
|
+
},
|
|
4120
|
+
"observability": {
|
|
4121
|
+
"application_logs_url": f"/api/v1/agent-sessions/{session_uid}/logs/",
|
|
4122
|
+
"resource_usage_url": None,
|
|
4123
|
+
"deployment_runs_url": None,
|
|
4124
|
+
"sessions_url": None,
|
|
4125
|
+
},
|
|
4126
|
+
"runtime_capabilities": {
|
|
4127
|
+
"tau_runtime_bootstrap": "v1",
|
|
4128
|
+
"tau_resume_snapshot": "v1",
|
|
4129
|
+
"tau_activity_sequence": "v1",
|
|
4130
|
+
"tau_turn_commit": "v1",
|
|
4131
|
+
},
|
|
4132
|
+
}
|
|
4133
|
+
|
|
4134
|
+
def _fake_make_request(*, s, loaders, r_type, url, payload, time_out=None):
|
|
4135
|
+
captured.update({"r_type": r_type, "url": url, "payload": payload, "timeout": time_out})
|
|
4136
|
+
return FakeResponse()
|
|
4137
|
+
|
|
4138
|
+
monkeypatch.setattr(agent_models_mod, "make_request", _fake_make_request)
|
|
4139
|
+
|
|
4140
|
+
session = agent.get_or_create_session(handle_unique_id=handle_unique_id, timeout=13)
|
|
4141
|
+
|
|
4142
|
+
assert session.uid == session_uid
|
|
4143
|
+
assert session.bound_handle["handle_unique_id"] == handle_unique_id
|
|
4144
|
+
assert session.runtime_capabilities["tau_runtime_bootstrap"] == "v1"
|
|
4145
|
+
assert session.observability.application_logs_url.endswith(f"/{session_uid}/logs/")
|
|
4146
|
+
assert captured["payload"] == {"json": {"handle_unique_id": handle_unique_id}}
|
|
4147
|
+
assert captured["timeout"] == 13
|
|
4148
|
+
|
|
4149
|
+
|
|
3993
4150
|
def test_agent_get_or_create_session_by_uid_sends_only_session_uid(monkeypatch):
|
|
3994
4151
|
captured = {}
|
|
3995
4152
|
agent_uid = "e0e75693-4110-464c-93e0-82c7fd9c9a23"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/data_access/exploration/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/agent_scaffold/skills/sdk_project_execution/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/data_sources_interfaces/__init__.py
RENAMED
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/data_sources_interfaces/duckdb.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/client/data_sources_interfaces/sqlite.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/compiled_sql/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/build_operations.py
RENAMED
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/data_nodes.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/namespacing.py
RENAMED
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/persist_managers.py
RENAMED
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/data_nodes/run_operations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/mainsequence/meta_tables/sqlalchemy_contracts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-6.0.52 → mainsequence-6.0.53}/tests/test_data_node_storage_dimension_queries.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|