mainsequence 4.4.2__tar.gz → 4.4.4__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-4.4.2/mainsequence.egg-info → mainsequence-4.4.4}/PKG-INFO +1 -1
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/agent_runtime_models.py +16 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/persist_managers.py +2 -2
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/__init__.py +0 -2
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/sqlalchemy_contracts.py +4 -44
- {mainsequence-4.4.2 → mainsequence-4.4.4/mainsequence.egg-info}/PKG-INFO +1 -1
- {mainsequence-4.4.2 → mainsequence-4.4.4}/pyproject.toml +1 -1
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_filter_normalization.py +8 -1
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_meta_tables_sqlalchemy_contracts.py +12 -7
- {mainsequence-4.4.2 → mainsequence-4.4.4}/LICENSE +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/README.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/a2a_communication/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/__main__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/bootstrap.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/api.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/cli.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/config.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/migrations.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/project_status.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/cli/ui.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/base.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/client.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/command_center/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/command_center/app_component.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/command_center/connections.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/command_center/data_models.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/command_center/workspace.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/dtype_codec.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/fastapi/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/fastapi/auth.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/metatables/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/metatables/core.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/models_foundry.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/models_user.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/utils.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/defaults.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/logconf.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/__main__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/models.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/future_registry.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/hashing.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/alembic.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/env.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/provider.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/registry.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/schema_names.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/setup.cfg +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_auth_precedence.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_build_operations_hashing.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_cli.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_cli_migrations.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_client.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_command_center_app_component_models.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_command_center_data_models.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_command_center_models.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_data_access_mixin_dimension_audit.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_data_node_storage_dimension_queries.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_data_node_update_flow.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_dependency_extras.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_duckdb_interface_dimensions.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_instrumentation.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_logconf.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_meta_table_migrations.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_meta_tables_client_models.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_pod_project_resolution.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_project_batch_jobs_from_file.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_run_configuration.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_schema_names.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_secret_client_model.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_source_table_configuration.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_sqlite_interface_dimensions.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_update_runner_uid_runtime.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_update_statistics.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_update_uid_guards.py +0 -0
- {mainsequence-4.4.2 → mainsequence-4.4.4}/tests/test_workspace_snapshot.py +0 -0
|
@@ -126,6 +126,18 @@ class Agent(ShareableObjectMixin, BaseObjectOrm, BasePydanticModel):
|
|
|
126
126
|
None,
|
|
127
127
|
description="Timestamp of the most recent session recorded for this agent.",
|
|
128
128
|
)
|
|
129
|
+
has_agent_service: bool = Field(
|
|
130
|
+
False,
|
|
131
|
+
description="Whether the backend resolved this agent to a typed coding-agent service.",
|
|
132
|
+
)
|
|
133
|
+
agent_service_uid: str | None = Field(
|
|
134
|
+
None,
|
|
135
|
+
description="Public UID of the resolved typed coding-agent service, if one exists.",
|
|
136
|
+
)
|
|
137
|
+
agent_service_automatic_deployment: bool | None = Field(
|
|
138
|
+
None,
|
|
139
|
+
description="Service-level automatic deployment flag for the resolved typed coding-agent service.",
|
|
140
|
+
)
|
|
129
141
|
|
|
130
142
|
@classmethod
|
|
131
143
|
def get_by_agent_unique_id(cls, agent_unique_id: str, *, timeout=None) -> Agent:
|
|
@@ -416,6 +428,10 @@ class AgentSession(BaseObjectOrm, BasePydanticModel):
|
|
|
416
428
|
agent_uid: str | None = Field(None, description="Public UID of the agent definition used for this session.")
|
|
417
429
|
created_by_user_uid: str | None = Field(None, description="Public UID of the actor who created the session.")
|
|
418
430
|
parent_session_uid: str | None = Field(None, description="Public UID of the parent session, if any.")
|
|
431
|
+
name: str = Field(
|
|
432
|
+
"",
|
|
433
|
+
description="Optional human-readable session name for UI and user-facing history.",
|
|
434
|
+
)
|
|
419
435
|
created_by_user: int | None = Field(
|
|
420
436
|
None,
|
|
421
437
|
exclude=True,
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/persist_managers.py
RENAMED
|
@@ -26,7 +26,7 @@ from mainsequence.client.metatables import (
|
|
|
26
26
|
)
|
|
27
27
|
from mainsequence.instrumentation import tracer
|
|
28
28
|
from mainsequence.logconf import logger
|
|
29
|
-
from mainsequence.meta_tables import PlatformTimeIndexMetaTable
|
|
29
|
+
from mainsequence.meta_tables import PlatformTimeIndexMetaTable, compute_metatable_contract_hash
|
|
30
30
|
|
|
31
31
|
from .. import future_registry
|
|
32
32
|
|
|
@@ -240,7 +240,7 @@ def _storage_table_identity_summary(storage_table: type[PlatformTimeIndexMetaTab
|
|
|
240
240
|
if identifier not in (None, ""):
|
|
241
241
|
parts.append(f"identifier={identifier!r}")
|
|
242
242
|
try:
|
|
243
|
-
contract_hash = storage_table
|
|
243
|
+
contract_hash = compute_metatable_contract_hash(storage_table)
|
|
244
244
|
except Exception:
|
|
245
245
|
contract_hash = None
|
|
246
246
|
if contract_hash not in (None, ""):
|
|
@@ -452,7 +452,6 @@ class AlembicMetaTableMigration:
|
|
|
452
452
|
request = model.build_registration_request(
|
|
453
453
|
data_source_uid=data_source_uid,
|
|
454
454
|
provisioning={"create_table": create_table, "if_not_exists": True},
|
|
455
|
-
enforce_storage_hash_name=False,
|
|
456
455
|
)
|
|
457
456
|
request.schema_management = schema_management
|
|
458
457
|
meta_table_cls = _metatable_resource_class_for_model(model)
|
|
@@ -624,7 +623,6 @@ class AlembicMetaTableMigration:
|
|
|
624
623
|
request = model.build_registration_request(
|
|
625
624
|
data_source_uid=data_source_uid,
|
|
626
625
|
identifier=table_name,
|
|
627
|
-
enforce_storage_hash_name=False,
|
|
628
626
|
)
|
|
629
627
|
|
|
630
628
|
resource_cls = _metatable_resource_class_for_model(model)
|
|
@@ -90,15 +90,11 @@ def _configured_storage_hash_for_model(
|
|
|
90
90
|
*,
|
|
91
91
|
namespace: str | None = None,
|
|
92
92
|
schema: str | None = None,
|
|
93
|
-
hash_namespace: str | None = None,
|
|
94
|
-
extra_hash_components: Mapping[str, Any] | None = None,
|
|
95
93
|
) -> str:
|
|
96
94
|
return compute_metatable_contract_hash(
|
|
97
95
|
model_or_table,
|
|
98
96
|
namespace=namespace,
|
|
99
97
|
schema=schema,
|
|
100
|
-
hash_namespace=hash_namespace,
|
|
101
|
-
extra_components=extra_hash_components,
|
|
102
98
|
)
|
|
103
99
|
|
|
104
100
|
|
|
@@ -122,11 +118,9 @@ def compute_metatable_contract_hash(
|
|
|
122
118
|
resolved_schema = _resolve_schema(table, schema=schema)
|
|
123
119
|
resolved_namespace = _resolve_namespace(model_or_table, namespace=namespace)
|
|
124
120
|
resolved_hash_namespace = _resolve_hash_namespace(
|
|
125
|
-
model_or_table,
|
|
126
121
|
hash_namespace=hash_namespace,
|
|
127
122
|
)
|
|
128
123
|
resolved_extra_hash_components = _resolve_extra_hash_components(
|
|
129
|
-
model_or_table,
|
|
130
124
|
extra_hash_components=extra_components,
|
|
131
125
|
)
|
|
132
126
|
table_storage_identity = _configured_table_storage_identity(model_or_table, table=table)
|
|
@@ -164,9 +158,8 @@ def _time_index_mapper_args(cls: type[Any]) -> dict[str, list[Any]]:
|
|
|
164
158
|
class PlatformManagedMetaTable:
|
|
165
159
|
"""SQLAlchemy declarative base mixin for platform-managed MetaTables.
|
|
166
160
|
|
|
167
|
-
The class
|
|
168
|
-
|
|
169
|
-
request, and registers the MetaTable through TS Manager. Binding records the
|
|
161
|
+
The class builds the platform registration request from SQLAlchemy table
|
|
162
|
+
metadata and registers the MetaTable through TS Manager. Binding records the
|
|
170
163
|
returned MetaTable UID and storage metadata while preserving the authored
|
|
171
164
|
SQLAlchemy table name.
|
|
172
165
|
"""
|
|
@@ -180,8 +173,6 @@ class PlatformManagedMetaTable:
|
|
|
180
173
|
__metatable_provisioning__: ClassVar[Mapping[str, Any] | None] = None
|
|
181
174
|
__metatable_protect_from_deletion__: ClassVar[bool | None] = None
|
|
182
175
|
__metatable_introspect__: ClassVar[bool | None] = None
|
|
183
|
-
__metatable_hash_namespace__: ClassVar[str | None] = None
|
|
184
|
-
__metatable_extra_hash_components__: ClassVar[Mapping[str, Any] | None] = None
|
|
185
176
|
|
|
186
177
|
@classmethod
|
|
187
178
|
def __table_cls__(cls, *args: Any, **kwargs: Any) -> Any:
|
|
@@ -217,9 +208,6 @@ class PlatformManagedMetaTable:
|
|
|
217
208
|
protect_from_deletion: bool | None = None,
|
|
218
209
|
provisioning: Mapping[str, Any] | None = None,
|
|
219
210
|
introspect: bool | None = None,
|
|
220
|
-
hash_namespace: str | None = None,
|
|
221
|
-
extra_hash_components: Mapping[str, Any] | None = None,
|
|
222
|
-
enforce_storage_hash_name: bool = True,
|
|
223
211
|
) -> MetaTableRegistrationRequest:
|
|
224
212
|
resolved_data_source_uid = _resolve_model_data_source_uid(
|
|
225
213
|
cls,
|
|
@@ -236,9 +224,6 @@ class PlatformManagedMetaTable:
|
|
|
236
224
|
protect_from_deletion=protect_from_deletion,
|
|
237
225
|
provisioning=provisioning,
|
|
238
226
|
introspect=introspect,
|
|
239
|
-
hash_namespace=hash_namespace,
|
|
240
|
-
extra_hash_components=extra_hash_components,
|
|
241
|
-
enforce_storage_hash_name=enforce_storage_hash_name,
|
|
242
227
|
)
|
|
243
228
|
|
|
244
229
|
@classmethod
|
|
@@ -300,10 +285,6 @@ class PlatformManagedMetaTable:
|
|
|
300
285
|
)
|
|
301
286
|
return _coerce_optional_uid(data_source_uid)
|
|
302
287
|
|
|
303
|
-
@classmethod
|
|
304
|
-
def get_storage_hash(cls) -> str:
|
|
305
|
-
return compute_metatable_contract_hash(cls)
|
|
306
|
-
|
|
307
288
|
@classmethod
|
|
308
289
|
def get_physical_table_name(cls) -> str | None:
|
|
309
290
|
physical_table_name = getattr(cls, "__metatable_physical_table_name__", None)
|
|
@@ -385,9 +366,6 @@ class PlatformTimeIndexMetaTable(PlatformManagedMetaTable):
|
|
|
385
366
|
labels: Sequence[str] | None = None,
|
|
386
367
|
protect_from_deletion: bool | None = None,
|
|
387
368
|
provisioning: Mapping[str, Any] | None = None,
|
|
388
|
-
hash_namespace: str | None = None,
|
|
389
|
-
extra_hash_components: Mapping[str, Any] | None = None,
|
|
390
|
-
enforce_storage_hash_name: bool = True,
|
|
391
369
|
time_index_name: str | None = None,
|
|
392
370
|
index_names: Sequence[str] | None = None,
|
|
393
371
|
storage_layout: Mapping[str, Any] | None = None,
|
|
@@ -406,9 +384,6 @@ class PlatformTimeIndexMetaTable(PlatformManagedMetaTable):
|
|
|
406
384
|
labels=labels,
|
|
407
385
|
protect_from_deletion=protect_from_deletion,
|
|
408
386
|
provisioning=provisioning,
|
|
409
|
-
hash_namespace=hash_namespace,
|
|
410
|
-
extra_hash_components=extra_hash_components,
|
|
411
|
-
enforce_storage_hash_name=enforce_storage_hash_name,
|
|
412
387
|
time_index_name=time_index_name,
|
|
413
388
|
index_names=index_names,
|
|
414
389
|
storage_layout=storage_layout,
|
|
@@ -502,9 +477,6 @@ def time_indexed_registration_request_from_sqlalchemy_model(
|
|
|
502
477
|
protect_from_deletion: bool | None = None,
|
|
503
478
|
provisioning: Mapping[str, Any] | None = None,
|
|
504
479
|
schema: str | None = None,
|
|
505
|
-
hash_namespace: str | None = None,
|
|
506
|
-
extra_hash_components: Mapping[str, Any] | None = None,
|
|
507
|
-
enforce_storage_hash_name: bool = True,
|
|
508
480
|
time_index_name: str | None = None,
|
|
509
481
|
index_names: Sequence[str] | None = None,
|
|
510
482
|
storage_layout: Mapping[str, Any] | None = None,
|
|
@@ -612,9 +584,6 @@ def platform_managed_registration_request_from_sqlalchemy_model(
|
|
|
612
584
|
provisioning: Mapping[str, Any] | None = None,
|
|
613
585
|
introspect: bool | None = None,
|
|
614
586
|
schema: str | None = None,
|
|
615
|
-
hash_namespace: str | None = None,
|
|
616
|
-
extra_hash_components: Mapping[str, Any] | None = None,
|
|
617
|
-
enforce_storage_hash_name: bool = True,
|
|
618
587
|
) -> MetaTableRegistrationRequest:
|
|
619
588
|
table = _resolve_table(model_or_table)
|
|
620
589
|
resolved_schema = _resolve_schema(table, schema=schema)
|
|
@@ -667,8 +636,6 @@ def external_registered_registration_request_from_sqlalchemy_model(
|
|
|
667
636
|
protect_from_deletion: bool = False,
|
|
668
637
|
introspect: bool = True,
|
|
669
638
|
schema: str | None = None,
|
|
670
|
-
hash_namespace: str | None = None,
|
|
671
|
-
extra_hash_components: Mapping[str, Any] | None = None,
|
|
672
639
|
) -> MetaTableRegistrationRequest:
|
|
673
640
|
table = _resolve_table(model_or_table)
|
|
674
641
|
resolved_schema = _resolve_schema(table, schema=schema)
|
|
@@ -1059,24 +1026,17 @@ def _resolve_bool_metadata(
|
|
|
1059
1026
|
return bool(resolved_value)
|
|
1060
1027
|
|
|
1061
1028
|
|
|
1062
|
-
def _resolve_hash_namespace(
|
|
1029
|
+
def _resolve_hash_namespace(*, hash_namespace: str | None) -> str | None:
|
|
1063
1030
|
if hash_namespace is not None:
|
|
1064
1031
|
return hash_namespace
|
|
1065
|
-
|
|
1066
|
-
if resolved_hash_namespace in (None, ""):
|
|
1067
|
-
return None
|
|
1068
|
-
return str(resolved_hash_namespace)
|
|
1032
|
+
return None
|
|
1069
1033
|
|
|
1070
1034
|
|
|
1071
1035
|
def _resolve_extra_hash_components(
|
|
1072
|
-
model_or_table: Any,
|
|
1073
1036
|
*,
|
|
1074
1037
|
extra_hash_components: Mapping[str, Any] | None,
|
|
1075
1038
|
) -> dict[str, Any] | None:
|
|
1076
1039
|
resolved: dict[str, Any] = {}
|
|
1077
|
-
class_components = getattr(model_or_table, "__metatable_extra_hash_components__", None)
|
|
1078
|
-
if isinstance(class_components, Mapping):
|
|
1079
|
-
resolved.update(dict(class_components))
|
|
1080
1040
|
if isinstance(extra_hash_components, Mapping):
|
|
1081
1041
|
resolved.update(dict(extra_hash_components))
|
|
1082
1042
|
return resolved or None
|
|
@@ -1318,12 +1318,17 @@ def test_agent_runtime_models_deserialize_backend_uid_payloads():
|
|
|
1318
1318
|
"llm_thinking": "medium",
|
|
1319
1319
|
"runtime_config": {"temperature": 0},
|
|
1320
1320
|
"configuration": {"mode": "analysis"},
|
|
1321
|
-
"metadata": {"owner": "quant"},
|
|
1322
1321
|
"last_session_at": "2026-01-01T00:00:00Z",
|
|
1322
|
+
"has_agent_service": True,
|
|
1323
|
+
"agent_service_uid": service_uid,
|
|
1324
|
+
"agent_service_automatic_deployment": True,
|
|
1323
1325
|
}
|
|
1324
1326
|
)
|
|
1325
1327
|
assert agent.uid == agent_uid
|
|
1326
1328
|
assert agent.agent_unique_id == "research-copilot"
|
|
1329
|
+
assert agent.has_agent_service is True
|
|
1330
|
+
assert agent.agent_service_uid == service_uid
|
|
1331
|
+
assert agent.agent_service_automatic_deployment is True
|
|
1327
1332
|
|
|
1328
1333
|
search_result = agent_models_mod.AgentSemanticSearchResult.model_validate(
|
|
1329
1334
|
{
|
|
@@ -1347,6 +1352,7 @@ def test_agent_runtime_models_deserialize_backend_uid_payloads():
|
|
|
1347
1352
|
"agent_type": "custom",
|
|
1348
1353
|
"created_by_user_uid": user_uid,
|
|
1349
1354
|
"parent_session_uid": None,
|
|
1355
|
+
"name": "Research follow-up",
|
|
1350
1356
|
"status": "running",
|
|
1351
1357
|
"runtime_state": "running",
|
|
1352
1358
|
"working": True,
|
|
@@ -1371,6 +1377,7 @@ def test_agent_runtime_models_deserialize_backend_uid_payloads():
|
|
|
1371
1377
|
)
|
|
1372
1378
|
assert session.uid == session_uid
|
|
1373
1379
|
assert session.agent_uid == agent_uid
|
|
1380
|
+
assert session.name == "Research follow-up"
|
|
1374
1381
|
|
|
1375
1382
|
orchestrator = agent_models_mod.UserOrchestratorAgentService.model_validate(
|
|
1376
1383
|
{
|
|
@@ -1108,7 +1108,6 @@ def test_platform_managed_omits_foreign_key_contracts():
|
|
|
1108
1108
|
|
|
1109
1109
|
request = Asset.build_registration_request(
|
|
1110
1110
|
data_source_uid="dddddddd-dddd-4ddd-8ddd-dddddddddddd",
|
|
1111
|
-
enforce_storage_hash_name=False,
|
|
1112
1111
|
)
|
|
1113
1112
|
|
|
1114
1113
|
assert not hasattr(request.table_contract, "foreign_keys")
|
|
@@ -1184,7 +1183,6 @@ def test_platform_managed_metatable_register_delegates_to_meta_table_register(mo
|
|
|
1184
1183
|
assert Account.get_meta_table() is registered
|
|
1185
1184
|
assert Account.get_meta_table_uid() == "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
|
|
1186
1185
|
assert Account.get_data_source_uid() == "dddddddd-dddd-4ddd-8ddd-dddddddddddd"
|
|
1187
|
-
assert Account.get_storage_hash() == _configured_storage_hash(Account)
|
|
1188
1186
|
assert Account.get_physical_table_name() == "example_assets__account"
|
|
1189
1187
|
assert Account.__table__.name == "example_assets__account"
|
|
1190
1188
|
assert captured["timeout"] == 15
|
|
@@ -1508,7 +1506,6 @@ def test_time_index_meta_table_register_posts_to_dynamic_table_endpoint(monkeypa
|
|
|
1508
1506
|
assert AccountHoldings.get_meta_table() is registered
|
|
1509
1507
|
assert AccountHoldings.get_time_index_meta_table() is registered
|
|
1510
1508
|
assert AccountHoldings.get_meta_table_uid() == "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa"
|
|
1511
|
-
assert AccountHoldings.get_storage_hash() == _configured_storage_hash(AccountHoldings)
|
|
1512
1509
|
assert AccountHoldings.get_physical_table_name() == "example_assets__account_holdings"
|
|
1513
1510
|
assert AccountHoldings.__table__.name == "example_assets__account_holdings"
|
|
1514
1511
|
assert captured["r_type"] == "POST"
|
|
@@ -1675,7 +1672,7 @@ def test_ensure_registered_storage_table_reports_duplicate_matches(monkeypatch):
|
|
|
1675
1672
|
assert "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb" in message
|
|
1676
1673
|
|
|
1677
1674
|
|
|
1678
|
-
def
|
|
1675
|
+
def test_contract_hash_extra_components_are_explicit_utility_inputs():
|
|
1679
1676
|
columns_a = [
|
|
1680
1677
|
FakeColumn("time_index", DateTime(timezone=True), nullable=False),
|
|
1681
1678
|
FakeColumn("random_number", String(255), nullable=False),
|
|
@@ -1698,12 +1695,20 @@ def test_time_index_storage_name_hash_component_separates_identical_table_shapes
|
|
|
1698
1695
|
namespace="mainsequence.examples",
|
|
1699
1696
|
identifier="daily_random_addition_project",
|
|
1700
1697
|
)
|
|
1701
|
-
RandomNumber.__metatable_extra_hash_components__ = {"storage_name": "daily_random_number"}
|
|
1702
|
-
RandomAddition.__metatable_extra_hash_components__ = {"storage_name": "daily_random_addition"}
|
|
1703
1698
|
|
|
1704
1699
|
random_number_storage_hash = _configured_storage_hash(RandomNumber)
|
|
1705
1700
|
random_addition_storage_hash = _configured_storage_hash(RandomAddition)
|
|
1706
1701
|
assert random_number_storage_hash != random_addition_storage_hash
|
|
1702
|
+
assert (
|
|
1703
|
+
sqlalchemy_contracts.compute_metatable_contract_hash(
|
|
1704
|
+
RandomNumber,
|
|
1705
|
+
extra_components={"storage_name": "daily_random_number"},
|
|
1706
|
+
)
|
|
1707
|
+
!= sqlalchemy_contracts.compute_metatable_contract_hash(
|
|
1708
|
+
RandomNumber,
|
|
1709
|
+
extra_components={"storage_name": "daily_random_addition"},
|
|
1710
|
+
)
|
|
1711
|
+
)
|
|
1707
1712
|
|
|
1708
1713
|
request = time_indexed_registration_request_from_sqlalchemy_model(
|
|
1709
1714
|
RandomNumber,
|
|
@@ -1901,7 +1906,7 @@ def test_platform_managed_register_preserves_authored_sqlalchemy_table_name(
|
|
|
1901
1906
|
|
|
1902
1907
|
_assert_omits_storage_hash(captured["request"])
|
|
1903
1908
|
assert captured["request"].table_contract.physical.table_name == "example_assets__account"
|
|
1904
|
-
assert Account
|
|
1909
|
+
assert _configured_storage_hash(Account) == storage_hash
|
|
1905
1910
|
assert Account.get_physical_table_name() == "example_assets__account"
|
|
1906
1911
|
assert Account.__table__.name == "example_assets__account"
|
|
1907
1912
|
assert Account.__table__.schema is None
|
|
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-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/command_center/connections/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/dashboards/streamlit/SKILL.md
RENAMED
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/data_access/exploration/SKILL.md
RENAMED
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md
RENAMED
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/agent_scaffold/skills/maintenance/bug_auditor/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/command_center/app_component.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/command_center/workspace_snapshot.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/data_sources_interfaces/__init__.py
RENAMED
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/data_sources_interfaces/duckdb.py
RENAMED
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/client/data_sources_interfaces/local_paths.py
RENAMED
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/build_operations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/data_nodes/namespacing.py
RENAMED
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/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
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/templates/__init__.py
RENAMED
|
File without changes
|
{mainsequence-4.4.2 → mainsequence-4.4.4}/mainsequence/meta_tables/migrations/templates/env.py.mako
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
|
|
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
|