mainsequence 3.17.44__tar.gz → 3.17.45__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-3.17.44 → mainsequence-3.17.45}/PKG-INFO +1 -1
- mainsequence-3.17.45/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +325 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence.egg-info/PKG-INFO +1 -1
- {mainsequence-3.17.44 → mainsequence-3.17.45}/pyproject.toml +1 -1
- mainsequence-3.17.44/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -211
- {mainsequence-3.17.44 → mainsequence-3.17.45}/LICENSE +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/README.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/data_publishing/simple_tables/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/maintenance/local_journal/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/markets_platform/assets_and_translation/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/markets_platform/instruments_and_pricing/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/markets_platform/virtualfundbuilder/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/__main__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/bootstrap.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/api.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/cli.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/config.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/project_status.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/cli/ui.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/agent.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/agent_runtime_models.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/base.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/client.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/command_center/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/command_center/app_component.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/command_center/data_models.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/command_center/workspace.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/data_sources_interfaces/timescale.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/fastapi/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/fastapi/auth.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/models_simple_tables.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/models_tdag.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/models_user.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/models_vam.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/compute_validation.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/assets/config.toml +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/assets/favicon.png +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/assets/image_1_base64.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/assets/image_2_base64.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/assets/image_3_base64.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/assets/image_4_base64.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/assets/image_5_base64.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/assets/logo.png +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/components/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/components/asset_select.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/components/date_settings.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/components/logged_user.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/core/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/core/theme.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/instruments/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/instruments/streamlit_form_factory.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/pages/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/dashboards/streamlit/scaffold.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/data_interface/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/data_interface/data_interface.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/instruments/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/instruments/base_instrument.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/instruments/bond.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/instruments/callability.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/instruments/interest_rate_swap.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/instruments/json_codec.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/instruments/position.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/instruments/ql_fields.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/interest_rates/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/interest_rates/etl/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/interest_rates/etl/curve_codec.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/interest_rates/etl/nodes.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/interest_rates/etl/registry.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/pricing_models/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/pricing_models/bond_pricer.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/pricing_models/indices.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/pricing_models/indices_builders.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/pricing_models/swap_pricer.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/settings.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/instruments/utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/logconf.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/__main__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/base_persist_managers.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/config.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/configuration_models.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/data_nodes/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/data_nodes/build_operations.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/data_nodes/data_nodes.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/data_nodes/filters.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/data_nodes/models.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/data_nodes/namespacing.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/data_nodes/persist_managers.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/data_nodes/run_operations.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/data_nodes/utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/filters.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/future_registry.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/pydantic_metadata.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/simple_tables/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/simple_tables/filters.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/simple_tables/models.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/simple_tables/persist_managers.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/simple_tables/schema.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/simple_tables/table_nodes.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/tdag/utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/data_nodes/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/data_nodes/external_weights.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/data_nodes/intraday_trend.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/data_nodes/market_cap.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/data_nodes/mock_signal.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/data_nodes/portfolio_replicator.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/prices/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/prices/data_nodes.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/prices/utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/rebalance_strategies/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/contrib/rebalance_strategies/rebalance_strategies.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/enums.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/models.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/portfolio_nodes.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/resource_factory/__init__.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/resource_factory/rebalance_factory.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/resource_factory/signal_factory.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/virtualfundbuilder/utils.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/setup.cfg +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_auth_precedence.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_build_operations_hashing.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_cli.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_client.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_command_center_app_component_models.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_command_center_models.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_dependency_extras.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_filter_normalization.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_instruments.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_logconf.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_logged_user_components.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_project_batch_jobs_from_file.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_run_configuration.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_simple_tables_configuration_hashing.py +0 -0
- {mainsequence-3.17.44 → mainsequence-3.17.45}/tests/test_simple_tables_persistence.py +0 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: command-center-workspace-builder
|
|
3
|
+
description: Use this skill when the task is about creating, updating, validating, or reviewing Main Sequence Command Center workspaces. This skill owns workspace documents, widget instance payload resolution, layout decisions, shared versus user state, widget-scoped mutation, and grounding those decisions against the richer widget-type registry contract plus the SDK command_center client models. The primary workflow is CLI registry verification first, then SDK client models, then Main Sequence-accessible repository docs/models only when registry detail and client models still leave instance payload questions unresolved. It does not own AppComponent form contracts, API implementation, or Streamlit dashboards.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Command Center Workspace Builder
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Use this skill when the task is about a Command Center workspace document or a mounted widget inside that workspace.
|
|
11
|
+
|
|
12
|
+
This skill is for workspace structure, widget payload resolution, safe workspace mutation, and grounding those decisions against the actual `mainsequence.client.command_center` client models.
|
|
13
|
+
|
|
14
|
+
## This Skill Can Do
|
|
15
|
+
|
|
16
|
+
- create a new Command Center workspace
|
|
17
|
+
- update an existing workspace document
|
|
18
|
+
- add widgets to a workspace
|
|
19
|
+
- verify widget types in the CLI registry before mounting or mutating them
|
|
20
|
+
- inspect the richer widget detail contract before opening repository source
|
|
21
|
+
- inspect SDK client models in `mainsequence/client/command_center/` before opening frontend implementation files
|
|
22
|
+
- decide whether widget detail plus SDK models are already enough to build the widget safely
|
|
23
|
+
- resolve widget instance payloads from Main Sequence docs/models in this repository only after registry verification and widget-detail review
|
|
24
|
+
- decide between full workspace update and widget-scoped mutation
|
|
25
|
+
- patch one widget safely
|
|
26
|
+
- move or delete a widget safely
|
|
27
|
+
- verify shared workspace data versus current-user state
|
|
28
|
+
- verify runtime ownership semantics such as `execution-owner` versus `consumer`
|
|
29
|
+
- review a workspace payload for guessed or invalid widget configuration
|
|
30
|
+
|
|
31
|
+
## This Skill Must Not Claim
|
|
32
|
+
|
|
33
|
+
This skill must not claim ownership of:
|
|
34
|
+
|
|
35
|
+
- AppComponent custom input forms
|
|
36
|
+
- widget-facing API response contracts
|
|
37
|
+
- generic FastAPI or backend API implementation
|
|
38
|
+
- Streamlit dashboard implementation
|
|
39
|
+
- DataNode producer design
|
|
40
|
+
- SimpleTable schema design
|
|
41
|
+
|
|
42
|
+
## Route Adjacent Work
|
|
43
|
+
|
|
44
|
+
- AppComponents and custom forms:
|
|
45
|
+
`.agents/skills/command_center/app_components/SKILL.md`
|
|
46
|
+
- APIs and FastAPI:
|
|
47
|
+
`.agents/skills/application_surfaces/api_surfaces/SKILL.md`
|
|
48
|
+
- Streamlit dashboards:
|
|
49
|
+
`.agents/skills/dashboards/streamlit/SKILL.md`
|
|
50
|
+
- DataNodes:
|
|
51
|
+
`.agents/skills/data_publishing/data_nodes/SKILL.md`
|
|
52
|
+
- SimpleTables:
|
|
53
|
+
`.agents/skills/data_publishing/simple_tables/SKILL.md`
|
|
54
|
+
|
|
55
|
+
## Read First
|
|
56
|
+
|
|
57
|
+
1. Verify the widget catalog through the CLI:
|
|
58
|
+
- `mainsequence --json cc registered_widget_type list`
|
|
59
|
+
- identify the target `widget_id`
|
|
60
|
+
- `mainsequence --json cc registered_widget_type detail <WIDGET_ID>`
|
|
61
|
+
2. The SDK client models in `mainsequence/client/command_center/`:
|
|
62
|
+
- `workspace.py`
|
|
63
|
+
- `data_models.py`
|
|
64
|
+
- `app_component.py` when the workspace contains AppComponent widgets or editable form payloads
|
|
65
|
+
3. `docs/knowledge/command_center/workspaces.md`
|
|
66
|
+
4. the local Main Sequence docs/models/examples in this repository that define the widget payloads being mounted
|
|
67
|
+
5. the current CLI docs if the task uses CLI workflow
|
|
68
|
+
|
|
69
|
+
If the workspace contains AppComponent widgets, also read:
|
|
70
|
+
|
|
71
|
+
6. `docs/knowledge/command_center/forms.md`
|
|
72
|
+
7. `docs/knowledge/command_center/widget_data_contracts.md`
|
|
73
|
+
|
|
74
|
+
## Command Center Mental Model
|
|
75
|
+
|
|
76
|
+
Think in terms of these objects:
|
|
77
|
+
|
|
78
|
+
- workspace:
|
|
79
|
+
shared document that stores mounted widgets, layout, shared controls, and workspace metadata
|
|
80
|
+
- widget type:
|
|
81
|
+
registered capability identified by `widget_id` and described by widget registry detail
|
|
82
|
+
- widget instance:
|
|
83
|
+
one mounted configured object inside a workspace document, identified by its own instance id
|
|
84
|
+
- workspace user state:
|
|
85
|
+
current-user runtime/view state stored separately from shared workspace content
|
|
86
|
+
- saved widget or saved group:
|
|
87
|
+
import-layer snapshot/template, not a live linked widget instance inside the workspace
|
|
88
|
+
|
|
89
|
+
## Inputs This Skill Needs
|
|
90
|
+
|
|
91
|
+
Before writing or mutating a workspace, collect or infer:
|
|
92
|
+
|
|
93
|
+
- workspace metadata:
|
|
94
|
+
title, description, labels, category, source
|
|
95
|
+
- layout mode:
|
|
96
|
+
custom grid or auto-grid
|
|
97
|
+
- desired widgets:
|
|
98
|
+
one item per widget with concrete intent
|
|
99
|
+
- verified `widget_id` values from the CLI registry
|
|
100
|
+
- widget detail payloads for those widget ids
|
|
101
|
+
- relevant SDK model sources in `mainsequence/client/command_center/`
|
|
102
|
+
- widget instance ids
|
|
103
|
+
- external resource ids required by those widgets
|
|
104
|
+
- whether the task is:
|
|
105
|
+
- full workspace create/update
|
|
106
|
+
- one-widget mutation
|
|
107
|
+
|
|
108
|
+
Only inspect Main Sequence docs/models/examples in this repository after registry verification and SDK model review, and only to resolve mounted widget shape that remains unclear.
|
|
109
|
+
|
|
110
|
+
If a widget lacks registry verification, usable widget detail, or a concrete payload source, stop before building the workspace.
|
|
111
|
+
|
|
112
|
+
## Required Decisions
|
|
113
|
+
|
|
114
|
+
For every non-trivial workspace task, decide:
|
|
115
|
+
|
|
116
|
+
1. Is this a full workspace change or a one-widget mutation?
|
|
117
|
+
2. Has the widget type been verified through `registered_widget_type list/detail`?
|
|
118
|
+
3. Is widget detail plus the relevant SDK model already enough to author the widget safely?
|
|
119
|
+
4. If not, what Main Sequence repository source defines the remaining instance-level payload shape?
|
|
120
|
+
5. Which fields are shared workspace state versus current-user state?
|
|
121
|
+
6. Is the widget a runtime `execution-owner`, `consumer`, or `local-ui` widget?
|
|
122
|
+
7. Are bindings and external resource ids fully resolved?
|
|
123
|
+
|
|
124
|
+
## Build Rules
|
|
125
|
+
|
|
126
|
+
### 1. Verify the widget type in the CLI registry first
|
|
127
|
+
|
|
128
|
+
Before mutating or mounting a workspace widget:
|
|
129
|
+
|
|
130
|
+
1. run `mainsequence --json cc registered_widget_type list`
|
|
131
|
+
2. identify the target `widget_id`
|
|
132
|
+
3. run `mainsequence --json cc registered_widget_type detail <WIDGET_ID>`
|
|
133
|
+
|
|
134
|
+
Do not start with secondary repository source inspection. The registry is the first source of truth for widget existence and catalog metadata. Widget detail is now expected to show enough contract detail to guide exploration before falling back to repository source.
|
|
135
|
+
|
|
136
|
+
### 1.1 Use widget detail as a build contract, not only an existence check
|
|
137
|
+
|
|
138
|
+
During widget exploration, do not treat `registered_widget_type detail` as a shallow existence check.
|
|
139
|
+
|
|
140
|
+
Use widget detail first to answer:
|
|
141
|
+
|
|
142
|
+
- what the widget is for
|
|
143
|
+
- the widget `widgetVersion`
|
|
144
|
+
- whether it is a workspace `execution-owner`, `consumer`, or `local-ui` widget
|
|
145
|
+
- which configuration modes and major fields exist
|
|
146
|
+
- whether inputs/outputs are static, dynamic, or consumer-only
|
|
147
|
+
- what capability modes the widget supports
|
|
148
|
+
- what authoring steps an agent must follow before the widget is usable
|
|
149
|
+
- which examples already match the requested workspace change
|
|
150
|
+
|
|
151
|
+
If widget detail already answers the authoring question safely, do not open implementation files just to “look around”.
|
|
152
|
+
|
|
153
|
+
### 2. Read the SDK client models before frontend implementation files
|
|
154
|
+
|
|
155
|
+
After registry verification, inspect the relevant `mainsequence.client.command_center` model before opening frontend implementation files.
|
|
156
|
+
|
|
157
|
+
Use:
|
|
158
|
+
|
|
159
|
+
- `workspace.py` for shared workspace shape and widget-scoped mutation methods
|
|
160
|
+
- `data_models.py` for Data Node-family tabular contracts, field provenance, and date/range payload rules
|
|
161
|
+
- `app_component.py` for editable form structures relevant to workspace-mounted AppComponent workflows
|
|
162
|
+
|
|
163
|
+
Treat these SDK models as the first concrete client interaction surface.
|
|
164
|
+
|
|
165
|
+
### 2.1 Use local source only to refine unresolved instance payload shape
|
|
166
|
+
|
|
167
|
+
A registered widget type proves the widget exists and gives catalog metadata.
|
|
168
|
+
|
|
169
|
+
Widget detail should now also expose the machine-readable widget contract, including at least:
|
|
170
|
+
|
|
171
|
+
- `widgetVersion`
|
|
172
|
+
- configuration summary and fields
|
|
173
|
+
- runtime ownership and execution semantics
|
|
174
|
+
- IO mode, static inputs/outputs, or dynamic IO summary
|
|
175
|
+
- capability summaries and supported modes
|
|
176
|
+
- agent authoring hints and examples
|
|
177
|
+
|
|
178
|
+
The SDK client models should then tell you what the client can actually read, write, or mutate safely.
|
|
179
|
+
|
|
180
|
+
It still does not always fully define the mounted widget instance payload.
|
|
181
|
+
|
|
182
|
+
So the concrete sequence is:
|
|
183
|
+
|
|
184
|
+
1. verify widget type in the CLI registry
|
|
185
|
+
2. inspect widget detail and extract the richer contract
|
|
186
|
+
3. inspect the relevant SDK model
|
|
187
|
+
4. decide whether that contract is enough to author the widget safely
|
|
188
|
+
5. inspect local payload source only for unresolved instance-level questions
|
|
189
|
+
6. only then mount or update the workspace widget
|
|
190
|
+
|
|
191
|
+
Use Main Sequence docs/models/examples in this repository to refine:
|
|
192
|
+
|
|
193
|
+
- `props`
|
|
194
|
+
- layout
|
|
195
|
+
- bindings
|
|
196
|
+
- runtime state shape when relevant
|
|
197
|
+
|
|
198
|
+
If widget detail and repository source disagree, or if SDK model and repository source disagree, stop and surface that mismatch instead of guessing.
|
|
199
|
+
|
|
200
|
+
### 3. Do not invent widget payloads
|
|
201
|
+
|
|
202
|
+
Resolve widget instance payloads from:
|
|
203
|
+
|
|
204
|
+
- widget registry detail
|
|
205
|
+
- SDK client models
|
|
206
|
+
- local typed models
|
|
207
|
+
- local payload builders
|
|
208
|
+
- local examples
|
|
209
|
+
- local schemas
|
|
210
|
+
|
|
211
|
+
If the payload shape is not defined by those sources and cannot be verified, stop.
|
|
212
|
+
|
|
213
|
+
### 4. Shared workspace state and current-user state are different
|
|
214
|
+
|
|
215
|
+
Treat current-user view state separately from shared workspace structure.
|
|
216
|
+
|
|
217
|
+
Do not assume that runtime or view-state fields belong in the shared workspace document just because they can appear in a write surface.
|
|
218
|
+
|
|
219
|
+
As a default rule:
|
|
220
|
+
|
|
221
|
+
- workspace JSON owns shared structure, widget props, bindings, layout, and shared controls
|
|
222
|
+
- workspace user state owns current-user runtime/view state such as selected control values and widget runtime state when the platform separates them
|
|
223
|
+
|
|
224
|
+
### 5. Respect runtime ownership
|
|
225
|
+
|
|
226
|
+
When reasoning about mounted widgets, classify them correctly:
|
|
227
|
+
|
|
228
|
+
- `execution-owner`:
|
|
229
|
+
owns canonical runtime execution or data fetching for that widget surface
|
|
230
|
+
- `consumer`:
|
|
231
|
+
reads published upstream data and must not invent its own canonical runtime fetch path
|
|
232
|
+
- `local-ui`:
|
|
233
|
+
local rendering utility with no shared runtime execution ownership
|
|
234
|
+
|
|
235
|
+
Do not design workspace changes that violate the registered runtime ownership model.
|
|
236
|
+
|
|
237
|
+
### 6. Saved widgets and groups are import-layer snapshots
|
|
238
|
+
|
|
239
|
+
Treat saved widgets and saved groups as import templates, not as live-linked mounted widgets.
|
|
240
|
+
|
|
241
|
+
When importing from the saved-widget layer:
|
|
242
|
+
|
|
243
|
+
- widget type identity is preserved
|
|
244
|
+
- mounted widget instance ids are new
|
|
245
|
+
- imports are not assumed to live-resync from the saved library unless the system explicitly supports that
|
|
246
|
+
|
|
247
|
+
Do not assume a saved-widget record id is the same thing as a mounted workspace widget instance id.
|
|
248
|
+
|
|
249
|
+
### 7. Prefer widget-scoped mutation for one-widget changes
|
|
250
|
+
|
|
251
|
+
If the user wants to change one mounted widget:
|
|
252
|
+
|
|
253
|
+
- do not default to rewriting the full workspace
|
|
254
|
+
- prefer:
|
|
255
|
+
- `patch_workspace_widget(...)`
|
|
256
|
+
- `delete_workspace_widget(...)`
|
|
257
|
+
- `move_workspace_widget(...)`
|
|
258
|
+
|
|
259
|
+
Only use a full workspace update when the change is truly workspace-wide or coordinated across multiple widgets.
|
|
260
|
+
|
|
261
|
+
### 8. File-based workspace workflow is the safe default
|
|
262
|
+
|
|
263
|
+
Prefer:
|
|
264
|
+
|
|
265
|
+
1. write the intended workspace document to a local JSON or YAML file
|
|
266
|
+
2. create or update through the CLI using that file
|
|
267
|
+
3. verify through CLI after creation or mutation
|
|
268
|
+
|
|
269
|
+
## Review Rules
|
|
270
|
+
|
|
271
|
+
When reviewing a workspace task, look for:
|
|
272
|
+
|
|
273
|
+
- guessed widget payloads
|
|
274
|
+
- widget work that skipped CLI registry verification
|
|
275
|
+
- widget work that skipped SDK client model review when one exists
|
|
276
|
+
- unknown or unverified `widgetId` values
|
|
277
|
+
- missing widget instance ids
|
|
278
|
+
- workspace-wide rewrites for one-widget changes
|
|
279
|
+
- shared state mixed incorrectly with current-user runtime state
|
|
280
|
+
- runtime ownership violations such as consumer widgets inventing canonical fetch paths
|
|
281
|
+
- unresolved external resource ids
|
|
282
|
+
- widget trees using structures not supported by the Main Sequence repository source models
|
|
283
|
+
|
|
284
|
+
## Validation Checklist
|
|
285
|
+
|
|
286
|
+
Do not claim success until you have checked:
|
|
287
|
+
|
|
288
|
+
- the workspace id is correct
|
|
289
|
+
- `widgetId` was verified via:
|
|
290
|
+
- `mainsequence --json cc registered_widget_type list`
|
|
291
|
+
- `mainsequence --json cc registered_widget_type detail <WIDGET_ID>`
|
|
292
|
+
- widget detail was reviewed for `widgetVersion`, configuration, runtime, IO, capabilities, agent hints, and examples
|
|
293
|
+
- the relevant SDK client model was reviewed when one exists
|
|
294
|
+
- widget ids and widget instance ids are correct
|
|
295
|
+
- local payload shape was reconciled against the verified widget id, widget-detail contract, and SDK model
|
|
296
|
+
- the chosen mutation mode is correct:
|
|
297
|
+
- full workspace update
|
|
298
|
+
- widget-scoped mutation
|
|
299
|
+
- shared workspace state and current-user state were not mixed incorrectly
|
|
300
|
+
- runtime ownership semantics were respected
|
|
301
|
+
- external resource ids are resolved
|
|
302
|
+
- the resulting workspace exists and matches the intended structure
|
|
303
|
+
|
|
304
|
+
If the task is one-widget mutation, also check:
|
|
305
|
+
|
|
306
|
+
- the correct widget instance id was targeted
|
|
307
|
+
- unrelated widgets were not rewritten
|
|
308
|
+
|
|
309
|
+
If the task involves saved-widget import, also check:
|
|
310
|
+
|
|
311
|
+
- mounted widget instance ids are newly assigned
|
|
312
|
+
- widget type identity was preserved correctly
|
|
313
|
+
- no live-link behavior was assumed unless explicitly supported
|
|
314
|
+
|
|
315
|
+
## This Skill Must Stop And Escalate When
|
|
316
|
+
|
|
317
|
+
- a widget type does not exist in the registry
|
|
318
|
+
- the widget id is being inferred without registry verification
|
|
319
|
+
- widget detail, SDK model, and repository source disagree materially
|
|
320
|
+
- a widget exists but no SDK or Main Sequence repository source defines the payload shape safely enough to proceed
|
|
321
|
+
- the task needs AppComponent input or output contracts that are not yet defined
|
|
322
|
+
- the target widget instance id is ambiguous
|
|
323
|
+
- the workspace mutation is actually an API or dashboard task rather than a Command Center workspace task
|
|
324
|
+
|
|
325
|
+
Do not guess through widget payloads.
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: command-center-workspace-builder
|
|
3
|
-
description: Use this skill when the task is about creating, updating, validating, or reviewing Main Sequence Command Center workspaces. This skill owns workspace documents, widget instance payload resolution, layout decisions, shared versus user state, and widget-scoped mutation. The primary workflow is CLI registry verification first, then Main Sequence-accessible repository docs/models only when registry metadata is not enough. It does not own AppComponent form contracts, API implementation, or Streamlit dashboards.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Command Center Workspace Builder
|
|
7
|
-
|
|
8
|
-
## Overview
|
|
9
|
-
|
|
10
|
-
Use this skill when the task is about a Command Center workspace document or a mounted widget inside that workspace.
|
|
11
|
-
|
|
12
|
-
This skill is for workspace structure, widget payload resolution, and safe workspace mutation.
|
|
13
|
-
|
|
14
|
-
## This Skill Can Do
|
|
15
|
-
|
|
16
|
-
- create a new Command Center workspace
|
|
17
|
-
- update an existing workspace document
|
|
18
|
-
- add widgets to a workspace
|
|
19
|
-
- verify widget types in the CLI registry before mounting or mutating them
|
|
20
|
-
- resolve widget instance payloads from Main Sequence docs/models in this repository after registry verification
|
|
21
|
-
- decide between full workspace update and widget-scoped mutation
|
|
22
|
-
- patch one widget safely
|
|
23
|
-
- move or delete a widget safely
|
|
24
|
-
- verify shared workspace data versus current-user state
|
|
25
|
-
- review a workspace payload for guessed or invalid widget configuration
|
|
26
|
-
|
|
27
|
-
## This Skill Must Not Claim
|
|
28
|
-
|
|
29
|
-
This skill must not claim ownership of:
|
|
30
|
-
|
|
31
|
-
- AppComponent custom input forms
|
|
32
|
-
- widget-facing API response contracts
|
|
33
|
-
- generic FastAPI or backend API implementation
|
|
34
|
-
- Streamlit dashboard implementation
|
|
35
|
-
- DataNode producer design
|
|
36
|
-
- SimpleTable schema design
|
|
37
|
-
|
|
38
|
-
## Route Adjacent Work
|
|
39
|
-
|
|
40
|
-
- AppComponents and custom forms:
|
|
41
|
-
`.agents/skills/command_center/app_components/SKILL.md`
|
|
42
|
-
- APIs and FastAPI:
|
|
43
|
-
`.agents/skills/application_surfaces/api_surfaces/SKILL.md`
|
|
44
|
-
- Streamlit dashboards:
|
|
45
|
-
`.agents/skills/dashboards/streamlit/SKILL.md`
|
|
46
|
-
- DataNodes:
|
|
47
|
-
`.agents/skills/data_publishing/data_nodes/SKILL.md`
|
|
48
|
-
- SimpleTables:
|
|
49
|
-
`.agents/skills/data_publishing/simple_tables/SKILL.md`
|
|
50
|
-
|
|
51
|
-
## Read First
|
|
52
|
-
|
|
53
|
-
1. Verify the widget catalog through the CLI:
|
|
54
|
-
- `mainsequence --json cc registered_widget_type list`
|
|
55
|
-
- identify the target `widget_id`
|
|
56
|
-
- `mainsequence --json cc registered_widget_type detail <WIDGET_ID>`
|
|
57
|
-
2. `docs/knowledge/command_center/workspaces.md`
|
|
58
|
-
3. the local Main Sequence docs/models/examples in this repository that define the widget payloads being mounted
|
|
59
|
-
4. the current CLI docs if the task uses CLI workflow
|
|
60
|
-
|
|
61
|
-
If the workspace contains AppComponent widgets, also read:
|
|
62
|
-
|
|
63
|
-
5. `docs/knowledge/command_center/forms.md`
|
|
64
|
-
6. `docs/knowledge/command_center/widget_data_contracts.md`
|
|
65
|
-
|
|
66
|
-
## Inputs This Skill Needs
|
|
67
|
-
|
|
68
|
-
Before writing or mutating a workspace, collect or infer:
|
|
69
|
-
|
|
70
|
-
- workspace metadata:
|
|
71
|
-
title, description, labels, category, source
|
|
72
|
-
- layout mode:
|
|
73
|
-
custom grid or auto-grid
|
|
74
|
-
- desired widgets:
|
|
75
|
-
one item per widget with concrete intent
|
|
76
|
-
- verified `widget_id` values from the CLI registry
|
|
77
|
-
- registry detail payloads for those widget ids
|
|
78
|
-
- widget instance ids
|
|
79
|
-
- external resource ids required by those widgets
|
|
80
|
-
- whether the task is:
|
|
81
|
-
- full workspace create/update
|
|
82
|
-
- one-widget mutation
|
|
83
|
-
|
|
84
|
-
Only inspect Main Sequence docs/models/examples in this repository after registry verification and only to resolve mounted widget shape.
|
|
85
|
-
|
|
86
|
-
If a widget lacks both registry verification and a concrete payload source, stop before building the workspace.
|
|
87
|
-
|
|
88
|
-
## Required Decisions
|
|
89
|
-
|
|
90
|
-
For every non-trivial workspace task, decide:
|
|
91
|
-
|
|
92
|
-
1. Is this a full workspace change or a one-widget mutation?
|
|
93
|
-
2. Has the widget type been verified through `registered_widget_type list/detail`?
|
|
94
|
-
3. What Main Sequence repository source defines the widget instance shape after registry verification?
|
|
95
|
-
4. Which fields are shared workspace state versus current-user state?
|
|
96
|
-
5. Are bindings and external resource ids fully resolved?
|
|
97
|
-
|
|
98
|
-
## Build Rules
|
|
99
|
-
|
|
100
|
-
### 1. Verify the widget type in the CLI registry first
|
|
101
|
-
|
|
102
|
-
Before mutating or mounting a workspace widget:
|
|
103
|
-
|
|
104
|
-
1. run `mainsequence --json cc registered_widget_type list`
|
|
105
|
-
2. identify the target `widget_id`
|
|
106
|
-
3. run `mainsequence --json cc registered_widget_type detail <WIDGET_ID>`
|
|
107
|
-
|
|
108
|
-
Do not start with secondary repository source inspection. The registry is the first source of truth for widget existence and catalog metadata.
|
|
109
|
-
|
|
110
|
-
### 2. Do not invent widget payloads
|
|
111
|
-
|
|
112
|
-
Resolve widget instance payloads from:
|
|
113
|
-
|
|
114
|
-
- local typed models
|
|
115
|
-
- local payload builders
|
|
116
|
-
- local examples
|
|
117
|
-
- local schemas
|
|
118
|
-
|
|
119
|
-
If the payload shape is not defined locally and cannot be verified, stop.
|
|
120
|
-
|
|
121
|
-
### 2.1 Use local source only to refine payload shape
|
|
122
|
-
|
|
123
|
-
A registered widget type proves the widget exists and gives catalog metadata.
|
|
124
|
-
|
|
125
|
-
It does not always fully define the mounted widget instance payload.
|
|
126
|
-
|
|
127
|
-
So the concrete sequence is:
|
|
128
|
-
|
|
129
|
-
1. verify widget type in the CLI registry
|
|
130
|
-
2. inspect registry detail payload
|
|
131
|
-
3. inspect local payload source
|
|
132
|
-
4. only then mount or update the workspace widget
|
|
133
|
-
|
|
134
|
-
Use Main Sequence docs/models/examples in this repository to refine:
|
|
135
|
-
|
|
136
|
-
- `props`
|
|
137
|
-
- layout
|
|
138
|
-
- bindings
|
|
139
|
-
- runtime state shape when relevant
|
|
140
|
-
|
|
141
|
-
### 3. Shared workspace state and current-user state are different
|
|
142
|
-
|
|
143
|
-
Treat current-user view state separately from shared workspace structure.
|
|
144
|
-
|
|
145
|
-
Do not assume that runtime or view-state fields belong in the shared workspace document just because they can appear in a write surface.
|
|
146
|
-
|
|
147
|
-
### 4. Prefer widget-scoped mutation for one-widget changes
|
|
148
|
-
|
|
149
|
-
If the user wants to change one mounted widget:
|
|
150
|
-
|
|
151
|
-
- do not default to rewriting the full workspace
|
|
152
|
-
- prefer:
|
|
153
|
-
- `patch_workspace_widget(...)`
|
|
154
|
-
- `delete_workspace_widget(...)`
|
|
155
|
-
- `move_workspace_widget(...)`
|
|
156
|
-
|
|
157
|
-
Only use a full workspace update when the change is truly workspace-wide or coordinated across multiple widgets.
|
|
158
|
-
|
|
159
|
-
### 5. File-based workspace workflow is the safe default
|
|
160
|
-
|
|
161
|
-
Prefer:
|
|
162
|
-
|
|
163
|
-
1. write the intended workspace document to a local JSON or YAML file
|
|
164
|
-
2. create or update through the CLI using that file
|
|
165
|
-
3. verify through CLI after creation or mutation
|
|
166
|
-
|
|
167
|
-
## Review Rules
|
|
168
|
-
|
|
169
|
-
When reviewing a workspace task, look for:
|
|
170
|
-
|
|
171
|
-
- guessed widget payloads
|
|
172
|
-
- widget work that skipped CLI registry verification
|
|
173
|
-
- unknown or unverified `widgetId` values
|
|
174
|
-
- missing widget instance ids
|
|
175
|
-
- workspace-wide rewrites for one-widget changes
|
|
176
|
-
- shared state mixed incorrectly with current-user runtime state
|
|
177
|
-
- unresolved external resource ids
|
|
178
|
-
- widget trees using structures not supported by the Main Sequence repository source models
|
|
179
|
-
|
|
180
|
-
## Validation Checklist
|
|
181
|
-
|
|
182
|
-
Do not claim success until you have checked:
|
|
183
|
-
|
|
184
|
-
- the workspace id is correct
|
|
185
|
-
- `widgetId` was verified via:
|
|
186
|
-
- `mainsequence --json cc registered_widget_type list`
|
|
187
|
-
- `mainsequence --json cc registered_widget_type detail <WIDGET_ID>`
|
|
188
|
-
- widget ids and widget instance ids are correct
|
|
189
|
-
- local payload shape was reconciled against the verified widget id
|
|
190
|
-
- each widget payload comes from a verified Main Sequence repository source
|
|
191
|
-
- the chosen mutation mode is correct:
|
|
192
|
-
- full workspace update
|
|
193
|
-
- widget-scoped mutation
|
|
194
|
-
- external resource ids are resolved
|
|
195
|
-
- the resulting workspace exists and matches the intended structure
|
|
196
|
-
|
|
197
|
-
If the task is one-widget mutation, also check:
|
|
198
|
-
|
|
199
|
-
- the correct widget instance id was targeted
|
|
200
|
-
- unrelated widgets were not rewritten
|
|
201
|
-
|
|
202
|
-
## This Skill Must Stop And Escalate When
|
|
203
|
-
|
|
204
|
-
- a widget type does not exist in the registry
|
|
205
|
-
- the widget id is being inferred without registry verification
|
|
206
|
-
- a widget exists but no Main Sequence repository source defines the payload shape
|
|
207
|
-
- the task needs AppComponent input or output contracts that are not yet defined
|
|
208
|
-
- the target widget instance id is ambiguous
|
|
209
|
-
- the workspace mutation is actually an API or dashboard task rather than a Command Center workspace task
|
|
210
|
-
|
|
211
|
-
Do not guess through widget payloads.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/dashboards/streamlit/SKILL.md
RENAMED
|
File without changes
|
{mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/data_access/exploration/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-3.17.44 → mainsequence-3.17.45}/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
|
{mainsequence-3.17.44 → mainsequence-3.17.45}/agent_scaffold/skills/project_builder/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
|
{mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/command_center/__init__.py
RENAMED
|
File without changes
|
{mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/command_center/app_component.py
RENAMED
|
File without changes
|
{mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/command_center/data_models.py
RENAMED
|
File without changes
|
{mainsequence-3.17.44 → mainsequence-3.17.45}/mainsequence/client/command_center/workspace.py
RENAMED
|
File without changes
|