mainsequence 4.4.20__tar.gz → 4.4.21__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.20/mainsequence.egg-info → mainsequence-4.4.21}/PKG-INFO +1 -1
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/a2a_communication/SKILL.md +38 -10
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/api.py +18 -37
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/cli.py +125 -132
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/agent_runtime_models.py +39 -888
- {mainsequence-4.4.20 → mainsequence-4.4.21/mainsequence.egg-info}/PKG-INFO +1 -1
- {mainsequence-4.4.20 → mainsequence-4.4.21}/pyproject.toml +1 -1
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_cli.py +145 -177
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_filter_normalization.py +68 -798
- {mainsequence-4.4.20 → mainsequence-4.4.21}/LICENSE +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/README.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/command_center/widgets/app_components/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/command_center/widgets/tables/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/command_center/widgets/tabular_transform/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/data_publishing/meta_table_migrations/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/__main__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/bootstrap.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/config.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/migrations.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/project_status.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/cli/ui.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/base.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/client.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/app_component.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/connections.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/contracts/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/contracts/adapter_from_api.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/contracts/response_mapping.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/contracts/table_visuals.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/contracts/tabular.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/contracts/ui.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/data_models.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/providers/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/providers/adapter_from_api.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/widgets/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/widgets/bindings.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/widgets/connection_query.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/widgets/registry.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/widgets/table.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/widgets/tabular_transform.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/workspace.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/workspaces/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/workspaces/documents.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/command_center/workspaces/mounted_widgets.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/compute_validation.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/data_sources_interfaces/local_paths.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/dtype_codec.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/fastapi/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/fastapi/auth.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/metatables/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/metatables/core.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/models_foundry.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/models_user.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/client/utils.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/defaults.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/logconf.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/__main__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/compiled_sql/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/compiled_sql/v1.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/data_nodes/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/data_nodes/build_operations.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/data_nodes/data_nodes.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/data_nodes/models.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/data_nodes/namespacing.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/data_nodes/persist_managers.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/data_nodes/run_operations.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/data_nodes/utils.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/future_registry.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/hashing.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/migrations/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/migrations/alembic.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/migrations/env.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/migrations/provider.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/migrations/registry.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/migrations/scaffold.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/migrations/templates/__init__.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/migrations/templates/env.py.mako +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/migrations/templates/script.py.mako +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/pydantic_metadata.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/schema_names.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/meta_tables/sqlalchemy_contracts.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence/scaffold_skills.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/setup.cfg +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_auth_precedence.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_build_operations_hashing.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_cli_migrations.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_client.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_command_center_app_component_models.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_command_center_data_models.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_command_center_models.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_command_center_table_contracts.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_command_center_tabular_transform.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_data_access_mixin_dimension_audit.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_data_node_storage_dimension_queries.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_data_node_update_flow.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_dependency_extras.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_duckdb_interface_dimensions.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_instrumentation.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_logconf.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_meta_table_migrations.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_meta_tables_client_models.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_pod_project_resolution.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_project_batch_jobs_from_file.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_run_configuration.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_scaffold_skills.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_schema_names.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_secret_client_model.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_source_table_configuration.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_sqlite_interface_dimensions.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_update_runner_uid_runtime.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_update_statistics.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_update_uid_guards.py +0 -0
- {mainsequence-4.4.20 → mainsequence-4.4.21}/tests/test_workspace_snapshot.py +0 -0
{mainsequence-4.4.20 → mainsequence-4.4.21}/agent_scaffold/skills/a2a_communication/SKILL.md
RENAMED
|
@@ -5,8 +5,8 @@ description: Canonical guidance for discovering agents and sending session-scope
|
|
|
5
5
|
|
|
6
6
|
# A2A Communication
|
|
7
7
|
|
|
8
|
-
Use this skill when you need to discover another agent or
|
|
9
|
-
|
|
8
|
+
Use this skill when you need to discover another agent, create or resolve a
|
|
9
|
+
target `AgentSession`, and send a bounded A2A request.
|
|
10
10
|
|
|
11
11
|
## Canonical CLI Path
|
|
12
12
|
|
|
@@ -17,7 +17,7 @@ internally and sends a standard A2A message.
|
|
|
17
17
|
|
|
18
18
|
- When the user asks which agents can help.
|
|
19
19
|
- When another agent may be better suited to answer or assist.
|
|
20
|
-
- Before sending a request to
|
|
20
|
+
- Before sending a request to a target agent session.
|
|
21
21
|
- When a request explicitly arrives through the A2A channel.
|
|
22
22
|
|
|
23
23
|
## Core Rules
|
|
@@ -42,13 +42,40 @@ mainsequence agent search "<discoveryPrompt>" --limit 10 --json
|
|
|
42
42
|
4. Treat the CLI output as authoritative.
|
|
43
43
|
5. Prefer the highest `combined_score` when present.
|
|
44
44
|
6. If the user asked only which agents are available, summarize the candidates and stop.
|
|
45
|
-
Include agent name,
|
|
45
|
+
Include agent name, agent UID, and a short capability summary.
|
|
46
46
|
|
|
47
47
|
## Target Session
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
After selecting the target agent, create or resolve a target session:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
mainsequence agent session get_or_create \
|
|
53
|
+
<target_agent_uid> \
|
|
54
|
+
--handle-unique-id <stable_handle_unique_id> \
|
|
55
|
+
--name "<human_readable_session_name>" \
|
|
56
|
+
--json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Use the returned session `uid` as the target `AgentSession` UID.
|
|
60
|
+
|
|
61
|
+
If this A2A request originates from an existing caller session, include the
|
|
62
|
+
parent session UID:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
mainsequence agent session get_or_create \
|
|
66
|
+
<target_agent_uid> \
|
|
67
|
+
--handle-unique-id <stable_handle_unique_id> \
|
|
68
|
+
--parent-session-uid <caller_agent_session_uid> \
|
|
69
|
+
--name "<human_readable_session_name>" \
|
|
70
|
+
--json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Handle rules:
|
|
74
|
+
|
|
75
|
+
- Repetitive workflow: use a stable semantic handle, for example `portfolio-review-q2-2026`.
|
|
76
|
+
- One-off delegation: use a fresh task-specific handle, for example `a2a-risk-summary-<uuid>`.
|
|
77
|
+
- Retry of the same session creation step: reuse the same handle.
|
|
78
|
+
- New user turn in the same target session: reuse the returned session UID, not a new handle.
|
|
52
79
|
|
|
53
80
|
## Send A2A Chat
|
|
54
81
|
|
|
@@ -93,9 +120,10 @@ mainsequence agent session a2a send \
|
|
|
93
120
|
1. Build the discovery prompt.
|
|
94
121
|
2. Run `mainsequence agent search "<discoveryPrompt>" --limit <n> --json`.
|
|
95
122
|
3. Select the target agent.
|
|
96
|
-
4.
|
|
97
|
-
5.
|
|
98
|
-
6.
|
|
123
|
+
4. Create or resolve the target session with `mainsequence agent session get_or_create`.
|
|
124
|
+
5. Use the returned session `uid`.
|
|
125
|
+
6. Run `mainsequence agent session a2a send <target_agent_session_uid> ...`.
|
|
126
|
+
7. Parse `message.parts` from the CLI output.
|
|
99
127
|
|
|
100
128
|
## Role-Specific Behavior
|
|
101
129
|
|
|
@@ -1141,59 +1141,40 @@ def delete_agent(
|
|
|
1141
1141
|
raise ApiError(f"Agent deletion failed: {e}") from e
|
|
1142
1142
|
|
|
1143
1143
|
|
|
1144
|
-
def
|
|
1144
|
+
def get_or_create_agent_session(
|
|
1145
1145
|
agent_uid: str,
|
|
1146
1146
|
*,
|
|
1147
|
-
|
|
1147
|
+
session_uid: str | None = None,
|
|
1148
1148
|
handle_unique_id: str | None = None,
|
|
1149
|
+
name: str | None = None,
|
|
1150
|
+
parent_session_uid: str | None = None,
|
|
1151
|
+
llm_provider: str | None = None,
|
|
1152
|
+
llm_model: str | None = None,
|
|
1153
|
+
llm_thinking: str | None = None,
|
|
1149
1154
|
timeout: int | None = None,
|
|
1150
1155
|
) -> dict[str, Any]:
|
|
1151
1156
|
"""
|
|
1152
|
-
|
|
1157
|
+
Get an existing session by UID, or get/create one by handle via SDK client model.
|
|
1153
1158
|
"""
|
|
1154
1159
|
try:
|
|
1155
1160
|
|
|
1156
|
-
def
|
|
1161
|
+
def _get_or_create(ClientAgent):
|
|
1157
1162
|
agent = ClientAgent.get_by_uid(str(agent_uid), timeout=timeout)
|
|
1158
|
-
return agent.
|
|
1159
|
-
|
|
1163
|
+
return agent.get_or_create_session(
|
|
1164
|
+
session_uid=session_uid,
|
|
1160
1165
|
handle_unique_id=handle_unique_id,
|
|
1166
|
+
name=name,
|
|
1167
|
+
parent_session_uid=parent_session_uid,
|
|
1168
|
+
llm_provider=llm_provider,
|
|
1169
|
+
llm_model=llm_model,
|
|
1170
|
+
llm_thinking=llm_thinking,
|
|
1161
1171
|
timeout=timeout,
|
|
1162
1172
|
)
|
|
1163
1173
|
|
|
1164
|
-
payload = _run_sdk_model_operation(
|
|
1165
|
-
module_name="mainsequence.client.agent_runtime_models",
|
|
1166
|
-
class_name="Agent",
|
|
1167
|
-
operation=_allocate,
|
|
1168
|
-
)
|
|
1169
|
-
return _sdk_object_to_dict(payload)
|
|
1170
|
-
except Exception as e:
|
|
1171
|
-
err_name = type(e).__name__
|
|
1172
|
-
if err_name == "NotFoundError":
|
|
1173
|
-
raise ApiError(f"Agent not found: {agent_uid}") from e
|
|
1174
|
-
if isinstance(e, (ApiError, NotLoggedIn)):
|
|
1175
|
-
raise
|
|
1176
|
-
raise ApiError(f"Agent A2A target session allocation failed: {e}") from e
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
def get_agent_latest_session(
|
|
1180
|
-
agent_uid: str,
|
|
1181
|
-
*,
|
|
1182
|
-
timeout: int | None = None,
|
|
1183
|
-
) -> dict[str, Any]:
|
|
1184
|
-
"""
|
|
1185
|
-
Retrieve the latest session for one agent via SDK client model.
|
|
1186
|
-
"""
|
|
1187
|
-
try:
|
|
1188
|
-
|
|
1189
|
-
def _get_latest(ClientAgent):
|
|
1190
|
-
agent = ClientAgent.get_by_uid(str(agent_uid), timeout=timeout)
|
|
1191
|
-
return agent.get_latest_session(timeout=timeout)
|
|
1192
|
-
|
|
1193
1174
|
session = _run_sdk_model_operation(
|
|
1194
1175
|
module_name="mainsequence.client.agent_runtime_models",
|
|
1195
1176
|
class_name="Agent",
|
|
1196
|
-
operation=
|
|
1177
|
+
operation=_get_or_create,
|
|
1197
1178
|
)
|
|
1198
1179
|
return _sdk_object_to_dict(session)
|
|
1199
1180
|
except Exception as e:
|
|
@@ -1202,7 +1183,7 @@ def get_agent_latest_session(
|
|
|
1202
1183
|
raise ApiError(f"Agent not found: {agent_uid}") from e
|
|
1203
1184
|
if isinstance(e, (ApiError, NotLoggedIn)):
|
|
1204
1185
|
raise
|
|
1205
|
-
raise ApiError(f"Agent
|
|
1186
|
+
raise ApiError(f"Agent session get-or-create failed: {e}") from e
|
|
1206
1187
|
|
|
1207
1188
|
|
|
1208
1189
|
def list_agent_sessions(
|
|
@@ -83,7 +83,6 @@ from .api import (
|
|
|
83
83
|
add_team_user_to_edit,
|
|
84
84
|
add_team_user_to_view,
|
|
85
85
|
add_workspace_labels,
|
|
86
|
-
allocate_agent_a2a_target_session,
|
|
87
86
|
create_adapter_from_api_connection,
|
|
88
87
|
create_agent,
|
|
89
88
|
create_constant,
|
|
@@ -108,7 +107,6 @@ from .api import (
|
|
|
108
107
|
delete_secret,
|
|
109
108
|
delete_workspace,
|
|
110
109
|
get_agent,
|
|
111
|
-
get_agent_latest_session,
|
|
112
110
|
get_agent_run,
|
|
113
111
|
get_agent_session,
|
|
114
112
|
get_connection_instance,
|
|
@@ -118,6 +116,7 @@ from .api import (
|
|
|
118
116
|
get_data_node_storage,
|
|
119
117
|
get_logged_user_details,
|
|
120
118
|
get_meta_table,
|
|
119
|
+
get_or_create_agent_session,
|
|
121
120
|
get_organization_team,
|
|
122
121
|
get_project,
|
|
123
122
|
get_project_data_node_updates,
|
|
@@ -3543,12 +3542,6 @@ def _format_agent_run_details(agent_run_payload: dict[str, object]) -> list[tupl
|
|
|
3543
3542
|
]
|
|
3544
3543
|
|
|
3545
3544
|
|
|
3546
|
-
def _format_agent_session_ref_label(session_ref: object) -> str:
|
|
3547
|
-
if isinstance(session_ref, dict):
|
|
3548
|
-
return str(session_ref.get("uid") or "-")
|
|
3549
|
-
return str(session_ref or "-")
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
3545
|
def _format_agent_session_preview(
|
|
3553
3546
|
agent_session_payload: dict[str, object],
|
|
3554
3547
|
) -> list[tuple[str, str]]:
|
|
@@ -3583,18 +3576,7 @@ def _format_agent_session_details(
|
|
|
3583
3576
|
),
|
|
3584
3577
|
("Usage Summary", _format_json_value(agent_session_payload.get("usage_summary"))),
|
|
3585
3578
|
("Session Metadata", _format_json_value(agent_session_payload.get("session_metadata"))),
|
|
3586
|
-
|
|
3587
|
-
|
|
3588
|
-
|
|
3589
|
-
def _format_agent_a2a_allocation_preview(
|
|
3590
|
-
allocation_payload: dict[str, object],
|
|
3591
|
-
) -> list[tuple[str, str]]:
|
|
3592
|
-
session_payload = allocation_payload.get("session")
|
|
3593
|
-
return [
|
|
3594
|
-
("Handle Unique ID", str(allocation_payload.get("handle_unique_id") or "-")),
|
|
3595
|
-
("Agent Session UID", str(allocation_payload.get("agent_session_uid") or "-")),
|
|
3596
|
-
("Allocation State", str(allocation_payload.get("allocation_state") or "-")),
|
|
3597
|
-
("Session", _format_agent_session_ref_label(session_payload)),
|
|
3579
|
+
("Bound Handle", _format_json_value(agent_session_payload.get("bound_handle"))),
|
|
3598
3580
|
]
|
|
3599
3581
|
|
|
3600
3582
|
|
|
@@ -3833,59 +3815,6 @@ def _agent_delete_impl(
|
|
|
3833
3815
|
print_kv("Deleted Agent", _format_agent_preview(deleted))
|
|
3834
3816
|
|
|
3835
3817
|
|
|
3836
|
-
def _agent_allocate_a2a_target_session_impl(
|
|
3837
|
-
*,
|
|
3838
|
-
agent_uid: str,
|
|
3839
|
-
caller_agent_session_uid: str,
|
|
3840
|
-
handle_unique_id: str | None,
|
|
3841
|
-
timeout: int | None,
|
|
3842
|
-
) -> None:
|
|
3843
|
-
_require_login()
|
|
3844
|
-
|
|
3845
|
-
try:
|
|
3846
|
-
allocation_payload = allocate_agent_a2a_target_session(
|
|
3847
|
-
agent_uid,
|
|
3848
|
-
caller_agent_session_uid=caller_agent_session_uid,
|
|
3849
|
-
handle_unique_id=handle_unique_id,
|
|
3850
|
-
timeout=timeout,
|
|
3851
|
-
)
|
|
3852
|
-
except ApiError as e:
|
|
3853
|
-
error(f"Agent A2A target session allocation failed: {e}")
|
|
3854
|
-
raise typer.Exit(1) from e
|
|
3855
|
-
|
|
3856
|
-
if _emit_json(allocation_payload):
|
|
3857
|
-
return
|
|
3858
|
-
|
|
3859
|
-
success(f"Agent A2A target session allocated: agent_uid={agent_uid}")
|
|
3860
|
-
print_kv(
|
|
3861
|
-
"A2A Target Session Allocation", _format_agent_a2a_allocation_preview(allocation_payload)
|
|
3862
|
-
)
|
|
3863
|
-
session_payload = allocation_payload.get("session")
|
|
3864
|
-
if isinstance(session_payload, dict):
|
|
3865
|
-
print_kv("Agent Session", _format_agent_session_preview(session_payload))
|
|
3866
|
-
print_kv("Agent Session Details", _format_agent_session_details(session_payload))
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
def _agent_get_latest_session_impl(
|
|
3870
|
-
*,
|
|
3871
|
-
agent_uid: str,
|
|
3872
|
-
timeout: int | None,
|
|
3873
|
-
) -> None:
|
|
3874
|
-
_require_login()
|
|
3875
|
-
|
|
3876
|
-
try:
|
|
3877
|
-
agent_session_payload = get_agent_latest_session(agent_uid, timeout=timeout)
|
|
3878
|
-
except ApiError as e:
|
|
3879
|
-
error(f"Agent latest session fetch failed: {e}")
|
|
3880
|
-
raise typer.Exit(1) from e
|
|
3881
|
-
|
|
3882
|
-
if _emit_json(agent_session_payload):
|
|
3883
|
-
return
|
|
3884
|
-
|
|
3885
|
-
print_kv("Agent Session", _format_agent_session_preview(agent_session_payload))
|
|
3886
|
-
print_kv("Agent Session Details", _format_agent_session_details(agent_session_payload))
|
|
3887
|
-
|
|
3888
|
-
|
|
3889
3818
|
def _extract_standard_a2a_message_text(payload: dict[str, object]) -> str:
|
|
3890
3819
|
response_message = payload.get("message")
|
|
3891
3820
|
if not isinstance(response_message, dict):
|
|
@@ -3950,6 +3879,64 @@ def _agent_session_a2a_send_impl(
|
|
|
3950
3879
|
typer.echo(json.dumps(response_payload, indent=2))
|
|
3951
3880
|
|
|
3952
3881
|
|
|
3882
|
+
def _agent_session_get_or_create_impl(
|
|
3883
|
+
*,
|
|
3884
|
+
agent_uid: str,
|
|
3885
|
+
session_uid: str | None,
|
|
3886
|
+
handle_unique_id: str | None,
|
|
3887
|
+
name: str | None,
|
|
3888
|
+
parent_session_uid: str | None,
|
|
3889
|
+
llm_provider: str | None,
|
|
3890
|
+
llm_model: str | None,
|
|
3891
|
+
llm_thinking: str | None,
|
|
3892
|
+
timeout: int | None,
|
|
3893
|
+
) -> None:
|
|
3894
|
+
resolved_session_uid = str(session_uid or "").strip() if session_uid is not None else ""
|
|
3895
|
+
resolved_handle_unique_id = (
|
|
3896
|
+
str(handle_unique_id or "").strip() if handle_unique_id is not None else ""
|
|
3897
|
+
)
|
|
3898
|
+
if bool(resolved_session_uid) == bool(resolved_handle_unique_id):
|
|
3899
|
+
error("Provide exactly one of --session-uid or --handle-unique-id.")
|
|
3900
|
+
raise typer.Exit(1)
|
|
3901
|
+
|
|
3902
|
+
creation_options = {
|
|
3903
|
+
"--name": name,
|
|
3904
|
+
"--parent-session-uid": parent_session_uid,
|
|
3905
|
+
"--llm-provider": llm_provider,
|
|
3906
|
+
"--llm-model": llm_model,
|
|
3907
|
+
"--llm-thinking": llm_thinking,
|
|
3908
|
+
}
|
|
3909
|
+
if resolved_session_uid and any(value is not None for value in creation_options.values()):
|
|
3910
|
+
provided = ", ".join(key for key, value in creation_options.items() if value is not None)
|
|
3911
|
+
error(f"Creation options require --handle-unique-id, not --session-uid: {provided}.")
|
|
3912
|
+
raise typer.Exit(1)
|
|
3913
|
+
|
|
3914
|
+
_require_login()
|
|
3915
|
+
|
|
3916
|
+
try:
|
|
3917
|
+
agent_session_payload = get_or_create_agent_session(
|
|
3918
|
+
agent_uid,
|
|
3919
|
+
session_uid=resolved_session_uid or None,
|
|
3920
|
+
handle_unique_id=resolved_handle_unique_id or None,
|
|
3921
|
+
name=name,
|
|
3922
|
+
parent_session_uid=parent_session_uid,
|
|
3923
|
+
llm_provider=llm_provider,
|
|
3924
|
+
llm_model=llm_model,
|
|
3925
|
+
llm_thinking=llm_thinking,
|
|
3926
|
+
timeout=timeout,
|
|
3927
|
+
)
|
|
3928
|
+
except ApiError as e:
|
|
3929
|
+
error(f"Agent session get-or-create failed: {e}")
|
|
3930
|
+
raise typer.Exit(1) from e
|
|
3931
|
+
|
|
3932
|
+
if _emit_json(agent_session_payload):
|
|
3933
|
+
return
|
|
3934
|
+
|
|
3935
|
+
success(f"Agent session resolved: uid={agent_session_payload.get('uid') or '-'}")
|
|
3936
|
+
print_kv("Agent Session", _format_agent_session_preview(agent_session_payload))
|
|
3937
|
+
print_kv("Agent Session Details", _format_agent_session_details(agent_session_payload))
|
|
3938
|
+
|
|
3939
|
+
|
|
3953
3940
|
def _agent_session_list_impl(
|
|
3954
3941
|
*,
|
|
3955
3942
|
agent_uid: str | None,
|
|
@@ -6580,105 +6567,111 @@ def agent_delete_cmd(
|
|
|
6580
6567
|
_agent_delete_impl(agent_uid=agent_uid, timeout=timeout)
|
|
6581
6568
|
|
|
6582
6569
|
|
|
6583
|
-
@
|
|
6584
|
-
def
|
|
6585
|
-
agent_uid: str =
|
|
6586
|
-
AGENT_MODEL_REF,
|
|
6587
|
-
"uid",
|
|
6588
|
-
...,
|
|
6589
|
-
help="Agent UID.",
|
|
6590
|
-
),
|
|
6591
|
-
caller_agent_session_uid: str = pydantic_argument(
|
|
6570
|
+
@agent_session_group.command("list")
|
|
6571
|
+
def agent_session_list_cmd(
|
|
6572
|
+
agent_uid: str | None = pydantic_option(
|
|
6592
6573
|
AGENT_SESSION_MODEL_REF,
|
|
6593
|
-
"
|
|
6594
|
-
...,
|
|
6595
|
-
help="Caller agent session UID.",
|
|
6596
|
-
),
|
|
6597
|
-
handle_unique_id: str | None = typer.Option(
|
|
6574
|
+
"agent_uid",
|
|
6598
6575
|
None,
|
|
6599
|
-
"--
|
|
6600
|
-
help="
|
|
6576
|
+
"--agent-uid",
|
|
6577
|
+
help="Agent UID to scope the session list.",
|
|
6578
|
+
),
|
|
6579
|
+
filter_entries: list[str] | None = typer.Option(None, "--filter", help=LIST_FILTER_OPTION_HELP),
|
|
6580
|
+
show_filters: bool = typer.Option(
|
|
6581
|
+
False, "--show-filters", help="Show the filters supported by this list command and exit."
|
|
6601
6582
|
),
|
|
6602
6583
|
timeout: int | None = typer.Option(None, "--timeout", help="Request timeout in seconds"),
|
|
6603
6584
|
):
|
|
6604
6585
|
"""
|
|
6605
|
-
|
|
6586
|
+
List agent sessions, optionally scoped to one agent.
|
|
6606
6587
|
|
|
6607
|
-
Uses SDK client `
|
|
6588
|
+
Uses SDK client `AgentSession.filter()` as the single source of truth.
|
|
6608
6589
|
|
|
6609
6590
|
Examples
|
|
6610
6591
|
--------
|
|
6611
6592
|
```bash
|
|
6612
|
-
mainsequence agent
|
|
6613
|
-
mainsequence agent
|
|
6593
|
+
mainsequence agent session list
|
|
6594
|
+
mainsequence agent session list --agent-uid e0e75693-4110-464c-93e0-82c7fd9c9a23
|
|
6595
|
+
mainsequence agent session list --agent-uid e0e75693-4110-464c-93e0-82c7fd9c9a23 --filter status=running
|
|
6614
6596
|
```
|
|
6615
6597
|
"""
|
|
6616
|
-
|
|
6598
|
+
_agent_session_list_impl(
|
|
6617
6599
|
agent_uid=agent_uid,
|
|
6618
|
-
caller_agent_session_uid=caller_agent_session_uid,
|
|
6619
|
-
handle_unique_id=handle_unique_id,
|
|
6620
6600
|
timeout=timeout,
|
|
6601
|
+
filter_entries=filter_entries,
|
|
6602
|
+
show_filters=show_filters,
|
|
6621
6603
|
)
|
|
6622
6604
|
|
|
6623
6605
|
|
|
6624
|
-
@
|
|
6625
|
-
def
|
|
6606
|
+
@agent_session_group.command("get_or_create")
|
|
6607
|
+
def agent_session_get_or_create_cmd(
|
|
6626
6608
|
agent_uid: str = pydantic_argument(
|
|
6627
6609
|
AGENT_MODEL_REF,
|
|
6628
6610
|
"uid",
|
|
6629
6611
|
...,
|
|
6630
6612
|
help="Agent UID.",
|
|
6631
6613
|
),
|
|
6632
|
-
|
|
6633
|
-
):
|
|
6634
|
-
"""
|
|
6635
|
-
Retrieve the latest session recorded for one agent.
|
|
6636
|
-
|
|
6637
|
-
Uses SDK client `Agent.get_latest_session()` as the single source of truth.
|
|
6638
|
-
|
|
6639
|
-
Examples
|
|
6640
|
-
--------
|
|
6641
|
-
```bash
|
|
6642
|
-
mainsequence agent get_latest_session e0e75693-4110-464c-93e0-82c7fd9c9a23
|
|
6643
|
-
mainsequence agent get_latest_session e0e75693-4110-464c-93e0-82c7fd9c9a23 --timeout 60
|
|
6644
|
-
```
|
|
6645
|
-
"""
|
|
6646
|
-
_agent_get_latest_session_impl(agent_uid=agent_uid, timeout=timeout)
|
|
6647
|
-
|
|
6648
|
-
|
|
6649
|
-
@agent_session_group.command("list")
|
|
6650
|
-
def agent_session_list_cmd(
|
|
6651
|
-
agent_uid: str | None = pydantic_option(
|
|
6614
|
+
session_uid: str | None = pydantic_option(
|
|
6652
6615
|
AGENT_SESSION_MODEL_REF,
|
|
6653
|
-
"
|
|
6616
|
+
"uid",
|
|
6654
6617
|
None,
|
|
6655
|
-
"--
|
|
6656
|
-
help="
|
|
6618
|
+
"--session-uid",
|
|
6619
|
+
help="Existing agent session UID to resolve for this agent.",
|
|
6657
6620
|
),
|
|
6658
|
-
|
|
6659
|
-
|
|
6660
|
-
|
|
6621
|
+
handle_unique_id: str | None = typer.Option(
|
|
6622
|
+
None,
|
|
6623
|
+
"--handle-unique-id",
|
|
6624
|
+
help="Reusable session handle key to get or create a session.",
|
|
6625
|
+
),
|
|
6626
|
+
name: str | None = typer.Option(
|
|
6627
|
+
None,
|
|
6628
|
+
"--name",
|
|
6629
|
+
help="Human-readable session display name used when creating a handle-backed session.",
|
|
6630
|
+
),
|
|
6631
|
+
parent_session_uid: str | None = typer.Option(
|
|
6632
|
+
None,
|
|
6633
|
+
"--parent-session-uid",
|
|
6634
|
+
help="Parent or origin agent session UID used when creating a handle-backed session.",
|
|
6635
|
+
),
|
|
6636
|
+
llm_provider: str | None = typer.Option(
|
|
6637
|
+
None,
|
|
6638
|
+
"--llm-provider",
|
|
6639
|
+
help="Session LLM provider override used when creating a handle-backed session.",
|
|
6640
|
+
),
|
|
6641
|
+
llm_model: str | None = typer.Option(
|
|
6642
|
+
None,
|
|
6643
|
+
"--llm-model",
|
|
6644
|
+
help="Session LLM model override used when creating a handle-backed session.",
|
|
6645
|
+
),
|
|
6646
|
+
llm_thinking: str | None = typer.Option(
|
|
6647
|
+
None,
|
|
6648
|
+
"--llm-thinking",
|
|
6649
|
+
help="Session thinking/reasoning override used when creating a handle-backed session.",
|
|
6661
6650
|
),
|
|
6662
6651
|
timeout: int | None = typer.Option(None, "--timeout", help="Request timeout in seconds"),
|
|
6663
6652
|
):
|
|
6664
6653
|
"""
|
|
6665
|
-
|
|
6654
|
+
Get an existing agent session by UID, or get/create one by handle.
|
|
6666
6655
|
|
|
6667
|
-
|
|
6656
|
+
Sends exactly one lookup key to the backend: `session_uid` or `handle_unique_id`.
|
|
6668
6657
|
|
|
6669
6658
|
Examples
|
|
6670
6659
|
--------
|
|
6671
6660
|
```bash
|
|
6672
|
-
mainsequence agent session
|
|
6673
|
-
mainsequence agent session
|
|
6674
|
-
mainsequence agent session list --agent-uid e0e75693-4110-464c-93e0-82c7fd9c9a23 --filter status=running
|
|
6661
|
+
mainsequence agent session get_or_create e0e75693-4110-464c-93e0-82c7fd9c9a23 --session-uid 3f1cc452-43ec-49cb-b2ba-87dbac164d29
|
|
6662
|
+
mainsequence agent session get_or_create e0e75693-4110-464c-93e0-82c7fd9c9a23 --handle-unique-id portfolio-review-q2-2026 --name "Quarterly portfolio review"
|
|
6675
6663
|
```
|
|
6676
6664
|
"""
|
|
6677
|
-
|
|
6665
|
+
_agent_session_get_or_create_impl(
|
|
6678
6666
|
agent_uid=agent_uid,
|
|
6667
|
+
session_uid=session_uid,
|
|
6668
|
+
handle_unique_id=handle_unique_id,
|
|
6669
|
+
name=name,
|
|
6670
|
+
parent_session_uid=parent_session_uid,
|
|
6671
|
+
llm_provider=llm_provider,
|
|
6672
|
+
llm_model=llm_model,
|
|
6673
|
+
llm_thinking=llm_thinking,
|
|
6679
6674
|
timeout=timeout,
|
|
6680
|
-
filter_entries=filter_entries,
|
|
6681
|
-
show_filters=show_filters,
|
|
6682
6675
|
)
|
|
6683
6676
|
|
|
6684
6677
|
|