mammoth-cli 2.0.87__tar.gz → 2.0.88__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.
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/PKG-INFO +1 -1
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +3 -2
- mammoth_cli-2.0.88/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +103 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +30 -100
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +66 -2
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/dashboard.py +70 -1
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/registry.py +3 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/view_profile.py +32 -17
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/invocation.py +3 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/state.py +1 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/command_contract.py +22 -0
- mammoth_cli-2.0.88/mammoth_cli/services/dashboard_filters.py +81 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/data_profile.py +38 -3
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/pyproject.toml +1 -1
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/dashboard.yaml +128 -1
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/edits-target.source.yaml +2 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/.gitignore +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/LICENSE +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/README.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/schema.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/view.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/dryrun_targets.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/runtime/verify.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/listing.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/view.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.0.87 → mammoth_cli-2.0.88}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Published CLI command catalog
|
|
2
2
|
|
|
3
|
-
This generated catalog is a lookup table for every command in the published CLI manifest, currently
|
|
3
|
+
This generated catalog is a lookup table for every command in the published CLI manifest, currently 579; each entry carries its release status line. It is a command-contract index, not an assertion that every backend/OpenAPI operation has a CLI binding. For an exact local CLI contract, run `mammoth schema get COMMAND_ID`; `mammoth capability list` is an API-binding inventory and can omit typed/local CLI routes. For focused workflows, read the [recipes index](recipes/index.md). Sensitive structured input must come from a private file or pipe; never put secrets in literal argv.
|
|
4
4
|
|
|
5
5
|
Load only the applicable domain file:
|
|
6
6
|
|
|
@@ -22,7 +22,8 @@ Load only the applicable domain file:
|
|
|
22
22
|
- [connector](commands/connector.md) — 22 published commands
|
|
23
23
|
- [context](commands/context.md) — 3 published commands
|
|
24
24
|
- [dashboard-qa](commands/dashboard-qa.md) — 13 published commands
|
|
25
|
-
- [dashboard](commands/dashboard.md) —
|
|
25
|
+
- [dashboard-style](commands/dashboard-style.md) — 10 published commands
|
|
26
|
+
- [dashboard](commands/dashboard.md) — 93 published commands
|
|
26
27
|
- [data-app](commands/data-app.md) — 12 published commands
|
|
27
28
|
- [dataset](commands/dataset.md) — 20 published commands
|
|
28
29
|
- [doctor](commands/doctor.md) — 1 published commands
|
mammoth_cli-2.0.88/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# `dashboard-style` commands
|
|
2
|
+
|
|
3
|
+
Every command returns the standard JSON envelope. On nonzero exit, read the error envelope and its `recovery_commands`; do not guess request fields. "Status on release" is joined from `docs/release-capability-matrix.json`: *ran once* means one bounded live run succeeded on the named CLI release, *untried* means nobody has run it, *not supported* means the backend refuses it. When this file disagrees with [capabilities](../capabilities.md) or a recipe, they win. Envelope shapes: [machine output](../machine-output.md).
|
|
4
|
+
|
|
5
|
+
### `dashboard.style.custom.create`
|
|
6
|
+
|
|
7
|
+
Run: `mammoth dashboard style custom create`. Exact input fields: `mammoth schema get dashboard.style.custom.create`.
|
|
8
|
+
|
|
9
|
+
Example: `mammoth dashboard style custom create --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
10
|
+
|
|
11
|
+
Result: `DashboardStyleCustomCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
12
|
+
|
|
13
|
+
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: style. created custom style id=1 with full unredacted colors/font/viz (no tokens field passed) Single invocation only; no error-path or variant coverage.
|
|
14
|
+
|
|
15
|
+
### `dashboard.style.custom.delete`
|
|
16
|
+
|
|
17
|
+
Run: `mammoth dashboard style custom delete`. Exact input fields: `mammoth schema get dashboard.style.custom.delete`.
|
|
18
|
+
|
|
19
|
+
Example: `mammoth dashboard style custom delete resource-123`. Illustrative only: append `--yes` after observing an owned target.
|
|
20
|
+
|
|
21
|
+
Result: `DashboardStyleCustomDeleteResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
|
|
22
|
+
|
|
23
|
+
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: ok. deleted custom style 1 Single invocation only; no error-path or variant coverage.
|
|
24
|
+
|
|
25
|
+
### `dashboard.style.custom.list`
|
|
26
|
+
|
|
27
|
+
Run: `mammoth dashboard style custom list`. Exact input fields: `mammoth schema get dashboard.style.custom.list`.
|
|
28
|
+
|
|
29
|
+
Example: `mammoth dashboard style custom list`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
30
|
+
|
|
31
|
+
Result: `DashboardStyleCustomListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
32
|
+
|
|
33
|
+
Status on release: ran once on CLI 2.0.12 — Bounded release read succeeded with pinned CLI 1.1.9 in workspace 4; empty custom-style list observed. No Full claim: no non-empty fixture. Also: Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: styles. empty custom styles list Sing…
|
|
34
|
+
|
|
35
|
+
### `dashboard.style.custom.update`
|
|
36
|
+
|
|
37
|
+
Run: `mammoth dashboard style custom update`. Exact input fields: `mammoth schema get dashboard.style.custom.update`.
|
|
38
|
+
|
|
39
|
+
Example: `mammoth dashboard style custom update resource-123 --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
40
|
+
|
|
41
|
+
Result: `DashboardStyleCustomUpdateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
42
|
+
|
|
43
|
+
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: style. renamed custom style 1 Single invocation only; no error-path or variant coverage.
|
|
44
|
+
|
|
45
|
+
### `dashboard.style.default.get`
|
|
46
|
+
|
|
47
|
+
Run: `mammoth dashboard style default get`. Exact input fields: `mammoth schema get dashboard.style.default.get`.
|
|
48
|
+
|
|
49
|
+
Example: `mammoth dashboard style default get`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
50
|
+
|
|
51
|
+
Result: `DashboardStyleDefaultGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
52
|
+
|
|
53
|
+
Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a real matched body {"styleId":"stone"} instead of raising ValidationError on an unmatched 2xx. Single invocation only.
|
|
54
|
+
|
|
55
|
+
### `dashboard.style.default.set`
|
|
56
|
+
|
|
57
|
+
Run: `mammoth dashboard style default set`. Exact input fields: `mammoth schema get dashboard.style.default.set`.
|
|
58
|
+
|
|
59
|
+
Example: `mammoth dashboard style default set --input '{"body": {"params": {"styleId": "sample"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
60
|
+
|
|
61
|
+
Result: `DashboardStyleDefaultSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
62
|
+
|
|
63
|
+
Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. Set styleId to the exact value read from style default get ("stone"), i.e. a verified no-op restore. Result {"styleId":"stone"}; re-ran style default get afterward and confirmed it still…
|
|
64
|
+
|
|
65
|
+
### `dashboard.style.derive`
|
|
66
|
+
|
|
67
|
+
Run: `mammoth dashboard style derive`. Exact input fields: `mammoth schema get dashboard.style.derive`.
|
|
68
|
+
|
|
69
|
+
Example: `mammoth dashboard style derive --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
70
|
+
|
|
71
|
+
Result: `DashboardStyleDeriveResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
72
|
+
|
|
73
|
+
Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a full real styleTokens object (colors, font, viz palette, radius, shadow, etc.) with no '***REDACTED***' placeholders anywhere in the body. Single…
|
|
74
|
+
|
|
75
|
+
### `dashboard.style.extract-brand`
|
|
76
|
+
|
|
77
|
+
Run: `mammoth dashboard style extract-brand`. Exact input fields: `mammoth schema get dashboard.style.extract-brand`.
|
|
78
|
+
|
|
79
|
+
Example: `mammoth dashboard style extract-brand --input '{"body": {"params": {"url": "https://example.com/data.csv"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
80
|
+
|
|
81
|
+
Result: `DashboardStyleExtractBrandResult`; mutation `benign_mutation`, confirmation `none`, wait policy `always_wait`.
|
|
82
|
+
|
|
83
|
+
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: screenshot, signals. captured screenshot + extracted brand signals (accents/font/ground/primary), no redaction here Single invocation only; no error-path or variant coverage.
|
|
84
|
+
|
|
85
|
+
### `dashboard.style.preset.list`
|
|
86
|
+
|
|
87
|
+
Run: `mammoth dashboard style preset list`. Exact input fields: `mammoth schema get dashboard.style.preset.list`.
|
|
88
|
+
|
|
89
|
+
Example: `mammoth dashboard style preset list`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
90
|
+
|
|
91
|
+
Result: `DashboardStylePresetListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
92
|
+
|
|
93
|
+
Status on release: ran once on CLI 2.0.12 — Bounded release read succeeded with pinned CLI 1.1.9 in workspace 4; 10 stock presets returned. No Full claim: custom preset fixture not observed. Also: Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: presets. returns built-in styl…
|
|
94
|
+
|
|
95
|
+
### `dashboard.style.token.list`
|
|
96
|
+
|
|
97
|
+
Run: `mammoth dashboard style token list`. Exact input fields: `mammoth schema get dashboard.style.token.list`.
|
|
98
|
+
|
|
99
|
+
Example: `mammoth dashboard style token list resource-123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
100
|
+
|
|
101
|
+
Result: `DashboardStyleTokenListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
102
|
+
|
|
103
|
+
Status on release: ran once on CLI 1.1.11 — Published PyPI CLI 1.1.11 / SDK 0.7.1 read of observed preset stone returned a redacted token payload. Bounded to one preset and redacted semantics; not Full. Dashboard sweep 2026-09-18 on release observed cli_error: HTTP 200 but result is tokens='***REDACTED…
|
|
@@ -342,6 +342,36 @@ Result: `DashboardFigureIntentResult`; mutation `benign_mutation`, confirmation
|
|
|
342
342
|
|
|
343
343
|
Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a full matched structured body ({"added":{...},"kind":"bar","spec":{...},"intentApplied":true,...}) instead of raising ValidationError on an unmatch…
|
|
344
344
|
|
|
345
|
+
### `dashboard.filter.add`
|
|
346
|
+
|
|
347
|
+
Run: `mammoth dashboard filter add`. Exact input fields: `mammoth schema get dashboard.filter.add`.
|
|
348
|
+
|
|
349
|
+
Example: `mammoth dashboard filter add 123 --input '{"field": "sample"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
350
|
+
|
|
351
|
+
Result: `DashboardFilterResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
352
|
+
|
|
353
|
+
Status on release: untried; no live run recorded.
|
|
354
|
+
|
|
355
|
+
### `dashboard.filter.list`
|
|
356
|
+
|
|
357
|
+
Run: `mammoth dashboard filter list`. Exact input fields: `mammoth schema get dashboard.filter.list`.
|
|
358
|
+
|
|
359
|
+
Example: `mammoth dashboard filter list 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
360
|
+
|
|
361
|
+
Result: `DashboardFilterResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
362
|
+
|
|
363
|
+
Status on release: untried; no live run recorded.
|
|
364
|
+
|
|
365
|
+
### `dashboard.filter.remove`
|
|
366
|
+
|
|
367
|
+
Run: `mammoth dashboard filter remove`. Exact input fields: `mammoth schema get dashboard.filter.remove`.
|
|
368
|
+
|
|
369
|
+
Example: `mammoth dashboard filter remove 123 --input '{"field": "sample"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
370
|
+
|
|
371
|
+
Result: `DashboardFilterResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
372
|
+
|
|
373
|
+
Status on release: untried; no live run recorded.
|
|
374
|
+
|
|
345
375
|
### `dashboard.get`
|
|
346
376
|
|
|
347
377
|
Run: `mammoth dashboard get`. Exact input fields: `mammoth schema get dashboard.get`.
|
|
@@ -650,106 +680,6 @@ Result: `DashboardSourceListResult`; mutation `read`, confirmation `none`, wait
|
|
|
650
680
|
|
|
651
681
|
Status on release: observed blocker — blocker; still broken, not one of the 11 CLI-fixed commands. Re-check before relying on it.
|
|
652
682
|
|
|
653
|
-
### `dashboard.style.custom.create`
|
|
654
|
-
|
|
655
|
-
Run: `mammoth dashboard style custom create`. Exact input fields: `mammoth schema get dashboard.style.custom.create`.
|
|
656
|
-
|
|
657
|
-
Example: `mammoth dashboard style custom create --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
658
|
-
|
|
659
|
-
Result: `DashboardStyleCustomCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
660
|
-
|
|
661
|
-
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: style. created custom style id=1 with full unredacted colors/font/viz (no tokens field passed) Single invocation only; no error-path or variant coverage.
|
|
662
|
-
|
|
663
|
-
### `dashboard.style.custom.delete`
|
|
664
|
-
|
|
665
|
-
Run: `mammoth dashboard style custom delete`. Exact input fields: `mammoth schema get dashboard.style.custom.delete`.
|
|
666
|
-
|
|
667
|
-
Example: `mammoth dashboard style custom delete resource-123`. Illustrative only: append `--yes` after observing an owned target.
|
|
668
|
-
|
|
669
|
-
Result: `DashboardStyleCustomDeleteResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
|
|
670
|
-
|
|
671
|
-
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: ok. deleted custom style 1 Single invocation only; no error-path or variant coverage.
|
|
672
|
-
|
|
673
|
-
### `dashboard.style.custom.list`
|
|
674
|
-
|
|
675
|
-
Run: `mammoth dashboard style custom list`. Exact input fields: `mammoth schema get dashboard.style.custom.list`.
|
|
676
|
-
|
|
677
|
-
Example: `mammoth dashboard style custom list`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
678
|
-
|
|
679
|
-
Result: `DashboardStyleCustomListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
680
|
-
|
|
681
|
-
Status on release: ran once on CLI 2.0.12 — Bounded release read succeeded with pinned CLI 1.1.9 in workspace 4; empty custom-style list observed. No Full claim: no non-empty fixture. Also: Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: styles. empty custom styles list Sing…
|
|
682
|
-
|
|
683
|
-
### `dashboard.style.custom.update`
|
|
684
|
-
|
|
685
|
-
Run: `mammoth dashboard style custom update`. Exact input fields: `mammoth schema get dashboard.style.custom.update`.
|
|
686
|
-
|
|
687
|
-
Example: `mammoth dashboard style custom update resource-123 --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
688
|
-
|
|
689
|
-
Result: `DashboardStyleCustomUpdateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
690
|
-
|
|
691
|
-
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: style. renamed custom style 1 Single invocation only; no error-path or variant coverage.
|
|
692
|
-
|
|
693
|
-
### `dashboard.style.default.get`
|
|
694
|
-
|
|
695
|
-
Run: `mammoth dashboard style default get`. Exact input fields: `mammoth schema get dashboard.style.default.get`.
|
|
696
|
-
|
|
697
|
-
Example: `mammoth dashboard style default get`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
698
|
-
|
|
699
|
-
Result: `DashboardStyleDefaultGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
700
|
-
|
|
701
|
-
Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a real matched body {"styleId":"stone"} instead of raising ValidationError on an unmatched 2xx. Single invocation only.
|
|
702
|
-
|
|
703
|
-
### `dashboard.style.default.set`
|
|
704
|
-
|
|
705
|
-
Run: `mammoth dashboard style default set`. Exact input fields: `mammoth schema get dashboard.style.default.set`.
|
|
706
|
-
|
|
707
|
-
Example: `mammoth dashboard style default set --input '{"body": {"params": {"styleId": "sample"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
708
|
-
|
|
709
|
-
Result: `DashboardStyleDefaultSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
710
|
-
|
|
711
|
-
Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. Set styleId to the exact value read from style default get ("stone"), i.e. a verified no-op restore. Result {"styleId":"stone"}; re-ran style default get afterward and confirmed it still…
|
|
712
|
-
|
|
713
|
-
### `dashboard.style.derive`
|
|
714
|
-
|
|
715
|
-
Run: `mammoth dashboard style derive`. Exact input fields: `mammoth schema get dashboard.style.derive`.
|
|
716
|
-
|
|
717
|
-
Example: `mammoth dashboard style derive --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
718
|
-
|
|
719
|
-
Result: `DashboardStyleDeriveResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
720
|
-
|
|
721
|
-
Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a full real styleTokens object (colors, font, viz palette, radius, shadow, etc.) with no '***REDACTED***' placeholders anywhere in the body. Single…
|
|
722
|
-
|
|
723
|
-
### `dashboard.style.extract-brand`
|
|
724
|
-
|
|
725
|
-
Run: `mammoth dashboard style extract-brand`. Exact input fields: `mammoth schema get dashboard.style.extract-brand`.
|
|
726
|
-
|
|
727
|
-
Example: `mammoth dashboard style extract-brand --input '{"body": {"params": {"url": "https://example.com/data.csv"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
728
|
-
|
|
729
|
-
Result: `DashboardStyleExtractBrandResult`; mutation `benign_mutation`, confirmation `none`, wait policy `always_wait`.
|
|
730
|
-
|
|
731
|
-
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: screenshot, signals. captured screenshot + extracted brand signals (accents/font/ground/primary), no redaction here Single invocation only; no error-path or variant coverage.
|
|
732
|
-
|
|
733
|
-
### `dashboard.style.preset.list`
|
|
734
|
-
|
|
735
|
-
Run: `mammoth dashboard style preset list`. Exact input fields: `mammoth schema get dashboard.style.preset.list`.
|
|
736
|
-
|
|
737
|
-
Example: `mammoth dashboard style preset list`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
738
|
-
|
|
739
|
-
Result: `DashboardStylePresetListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
740
|
-
|
|
741
|
-
Status on release: ran once on CLI 2.0.12 — Bounded release read succeeded with pinned CLI 1.1.9 in workspace 4; 10 stock presets returned. No Full claim: custom preset fixture not observed. Also: Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: presets. returns built-in styl…
|
|
742
|
-
|
|
743
|
-
### `dashboard.style.token.list`
|
|
744
|
-
|
|
745
|
-
Run: `mammoth dashboard style token list`. Exact input fields: `mammoth schema get dashboard.style.token.list`.
|
|
746
|
-
|
|
747
|
-
Example: `mammoth dashboard style token list resource-123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
748
|
-
|
|
749
|
-
Result: `DashboardStyleTokenListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
750
|
-
|
|
751
|
-
Status on release: ran once on CLI 1.1.11 — Published PyPI CLI 1.1.11 / SDK 0.7.1 read of observed preset stone returned a redacted token payload. Bounded to one preset and redacted semantics; not Full. Dashboard sweep 2026-09-18 on release observed cli_error: HTTP 200 but result is tokens='***REDACTED…
|
|
752
|
-
|
|
753
683
|
### `dashboard.suggestion.list`
|
|
754
684
|
|
|
755
685
|
Run: `mammoth dashboard suggestion list`. Exact input fields: `mammoth schema get dashboard.suggestion.list`.
|
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
`dashboard create` (the legacy AI-generation engine) does not exist as a
|
|
4
4
|
command: it has no handler in current apiv2 (always 404s; historically HTTP
|
|
5
5
|
409 `4DASH012 DASHBOARD_LEGACY_CREATION_RETIRED`). Build a board from one
|
|
6
|
-
sentence with `v3 generate`, and change it with `chat edit
|
|
7
|
-
|
|
6
|
+
sentence with `v3 generate`, and change it with `chat edit`. Author or edit the
|
|
7
|
+
canvas yourself (`create-blank`, `canvas get` then `canvas save`, `pages add`)
|
|
8
|
+
for what a sentence cannot say exactly: units, hiding a built-in tile or
|
|
9
|
+
insight, an exact layout. `dashboard filter add` puts a filter control on a
|
|
10
|
+
board (below).
|
|
8
11
|
`dashboard source list` is an observed blocker on release (see
|
|
9
12
|
capabilities); verify the view binding with `dashboard get DASHBOARD_ID`
|
|
10
13
|
(`data.sources`) instead.
|
|
@@ -19,6 +22,11 @@ mammoth dashboard get DASHBOARD_ID
|
|
|
19
22
|
`chat edit` returns `changed` and a one-line `message`. Quote one number from
|
|
20
23
|
the board before you report it done.
|
|
21
24
|
|
|
25
|
+
Before you say anything about a board that already exists (what a chart shows,
|
|
26
|
+
its numbers, the period it covers), run `dashboard get DASHBOARD_ID`: its
|
|
27
|
+
`values` carry every KPI card's and tile's number and the `period` it counts.
|
|
28
|
+
Answer from those, never from an earlier turn.
|
|
29
|
+
|
|
22
30
|
Discover page/widget/publish routes and verify the binding, draft/published
|
|
23
31
|
data and terminal jobs. Use only returned IDs and schema confirmation policy;
|
|
24
32
|
do not invent dashboard JSON or opaque task specs.
|
|
@@ -77,6 +85,62 @@ names it. A new page that got no charts is removed, and
|
|
|
77
85
|
`data.chart_check.removed_pages` lists it. Add a chart of a different kind
|
|
78
86
|
(`hbar`, `line`, `table`) for that page.
|
|
79
87
|
|
|
88
|
+
## "Per region", "per month", "for each X": one board and a filter control
|
|
89
|
+
|
|
90
|
+
A request for a board "per <dimension>" (per region, per month, per rep, by
|
|
91
|
+
status) is ONE board with a **filter control** on that column: the viewer picks
|
|
92
|
+
the value. Do not build a copy of the board for each value. Build the board
|
|
93
|
+
once, then add the control:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
mammoth dashboard filter add DASHBOARD_ID --input '{"field": "Region"}'
|
|
97
|
+
mammoth dashboard filter list DASHBOARD_ID
|
|
98
|
+
mammoth dashboard filter remove DASHBOARD_ID --input '{"field": "Region"}'
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
`field` is a column of the board's data. `control` is optional: leave it out
|
|
102
|
+
and the column's type picks one (a category gets a selection list, a number or
|
|
103
|
+
a date gets a range). Set it to choose: `dropdown`, `chips`, `multi` or
|
|
104
|
+
`search` for a category, `range` for a number or a date, `motion` for a date
|
|
105
|
+
that plays over time. `label` is the text the viewer sees, and `default` (a
|
|
106
|
+
list of values) is what is selected when the board opens:
|
|
107
|
+
`--input '{"field": "Region", "control": "dropdown", "label": "Region", "default": ["North"]}'`.
|
|
108
|
+
A second `add` on the same column replaces the first. The command refuses a
|
|
109
|
+
column the board does not have (and names the columns it has) and a control
|
|
110
|
+
the column's type cannot take. Its result carries the declared `filters` and a
|
|
111
|
+
`bake_job_id`; `dashboard filter list` reads them back. Say "per month" the same
|
|
112
|
+
way: a filter on the date column with `range`, or `dashboard chat edit` for a
|
|
113
|
+
chart that groups by month (`date_bucket`).
|
|
114
|
+
|
|
115
|
+
Build only the board you were asked for. If the user wants the board for one
|
|
116
|
+
region only, that is the control's `default`, not a second board.
|
|
117
|
+
|
|
118
|
+
## Hide a built-in tile or insight
|
|
119
|
+
|
|
120
|
+
A board's built-in parts (Key insights, the KPI strip, the breakdown, trend and
|
|
121
|
+
table tiles) re-derive from the data, so they cannot be deleted; the product's
|
|
122
|
+
"Remove" hides them: it adds the tile's key to `hidden` on the page. Do the
|
|
123
|
+
same with `canvas save`: read the canvas, add the key to the page's `hidden`,
|
|
124
|
+
write it back.
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
mammoth dashboard canvas get DASHBOARD_ID > canvas.json # data.canvas is the object to edit
|
|
128
|
+
# pages[0].hidden = ["summary"] Key insights tile
|
|
129
|
+
# ["kpis"] the whole KPI strip
|
|
130
|
+
# ["breakdown", "mix", "secondary", "trend", "table"] the other built-in tiles
|
|
131
|
+
# canvas.hidden (no pages) is the same list on a canvas without pages
|
|
132
|
+
mammoth dashboard canvas save DASHBOARD_ID --input '{"body": {"params": {"canvas": <edited data.canvas>}}}'
|
|
133
|
+
mammoth job wait BAKE_JOB_ID # data.bake_job_id from the save
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
`hidden` sits on the page you mean (`pages[i]`, the page the tile is on), not
|
|
137
|
+
on the canvas root, when the canvas has `pages`. Keep the keys already in the
|
|
138
|
+
list. A single KPI card is removed by taking its entry out of
|
|
139
|
+
`pages[i].focus.kpis`. To hide one insight rather than the whole tile, put its
|
|
140
|
+
tag in `insights.hide` (tags: `leader`, `momentum`, `gap`, `laggard`,
|
|
141
|
+
`concentration`, `secondary`, `peak`, `quality`, `spread`). Read the board back
|
|
142
|
+
with `dashboard canvas get` and check the key is in `hidden`.
|
|
143
|
+
|
|
80
144
|
## Put the money on the board
|
|
81
145
|
|
|
82
146
|
If the data has money (a price, an amount, revenue or cost), the dashboard
|
|
@@ -10,6 +10,7 @@ SDK method named by the command's reviewed manifest ``sdk_symbol``.
|
|
|
10
10
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
|
+
from collections.abc import Callable
|
|
13
14
|
from pathlib import Path
|
|
14
15
|
from typing import Any, Literal, cast
|
|
15
16
|
|
|
@@ -41,6 +42,12 @@ from mammoth_cli.runtime.session import open_service, require_project, resolved_
|
|
|
41
42
|
from mammoth_cli.services.argspec import arg_spec
|
|
42
43
|
from mammoth_cli.services.board_values import board_values, dashboard_link
|
|
43
44
|
from mammoth_cli.services.command_contract import bind_command_inputs
|
|
45
|
+
from mammoth_cli.services.dashboard_filters import (
|
|
46
|
+
check_filter,
|
|
47
|
+
declared,
|
|
48
|
+
with_filter,
|
|
49
|
+
without_filter,
|
|
50
|
+
)
|
|
44
51
|
from mammoth_cli.services.dashboard_pages import check_added_pages
|
|
45
52
|
from mammoth_cli.services.dashboard_review import (
|
|
46
53
|
CANVAS_GET,
|
|
@@ -369,10 +376,16 @@ def dashboard_tags_merge(invocation: Invocation) -> HandlerResult:
|
|
|
369
376
|
|
|
370
377
|
|
|
371
378
|
def dashboard_get(invocation: Invocation) -> HandlerResult:
|
|
372
|
-
"""Get one dashboard by id.
|
|
379
|
+
"""Get one dashboard by id, with each KPI card's and tile's number and period.
|
|
380
|
+
|
|
381
|
+
A question about an existing board is answered from what it shows, so the
|
|
382
|
+
read carries the numbers, not only the definitions (UQA-RT10-02).
|
|
383
|
+
"""
|
|
373
384
|
dashboard_id = _require_int_positional(invocation, "dashboard id")
|
|
374
385
|
with open_service(invocation) as (service, auth):
|
|
375
386
|
data = service.call(_symbol(invocation), dashboard_id=dashboard_id)
|
|
387
|
+
if not invocation.readback:
|
|
388
|
+
data = _with_board_values(service, auth, {"dashboard_id": dashboard_id}, data)
|
|
376
389
|
return data, _meta(invocation, auth.workspace_id)
|
|
377
390
|
|
|
378
391
|
|
|
@@ -771,6 +784,62 @@ def _with_deliverable_check(
|
|
|
771
784
|
return data
|
|
772
785
|
|
|
773
786
|
|
|
787
|
+
_CANVAS_SAVE = "mammoth.api.dashboards.DashboardsAPI.canvas_save"
|
|
788
|
+
_FILTER_KEYS = ("field", "control", "label", "default")
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
def _edit_filters(
|
|
792
|
+
invocation: Invocation, edit: Callable[[dict[str, Any]], dict[str, Any]]
|
|
793
|
+
) -> HandlerResult:
|
|
794
|
+
"""Read the draft canvas, apply ``edit`` to the read, save it, and return the filters."""
|
|
795
|
+
dashboard_id = _require_int_positional(invocation, "dashboard id")
|
|
796
|
+
with open_service(invocation) as (service, auth):
|
|
797
|
+
current = _dump_model(service.call(CANVAS_GET, dashboard_id=dashboard_id))
|
|
798
|
+
canvas = edit(current)
|
|
799
|
+
saved = _dump_model(
|
|
800
|
+
service.call(
|
|
801
|
+
_CANVAS_SAVE,
|
|
802
|
+
dashboard_id=dashboard_id,
|
|
803
|
+
body={"params": {"canvas": canvas, "base_sequence": current["meta"]["sequence"]}},
|
|
804
|
+
)
|
|
805
|
+
)
|
|
806
|
+
result = {
|
|
807
|
+
"dashboard_id": dashboard_id,
|
|
808
|
+
"filters": declared(canvas),
|
|
809
|
+
"sequence": saved.get("sequence"),
|
|
810
|
+
"bake_job_id": saved.get("bake_job_id"),
|
|
811
|
+
}
|
|
812
|
+
return result, _meta(invocation, auth.workspace_id)
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
def dashboard_filter_add(invocation: Invocation) -> HandlerResult:
|
|
816
|
+
"""Add (or replace) the filter control on one column of a board."""
|
|
817
|
+
document = _bound_document(invocation)
|
|
818
|
+
_require_field(document, "field")
|
|
819
|
+
entry = {key: document[key] for key in _FILTER_KEYS if document.get(key) is not None}
|
|
820
|
+
|
|
821
|
+
def edit(current: dict[str, Any]) -> dict[str, Any]:
|
|
822
|
+
check_filter(current, entry)
|
|
823
|
+
return with_filter(current["canvas"], entry)
|
|
824
|
+
|
|
825
|
+
return _edit_filters(invocation, edit)
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
def dashboard_filter_remove(invocation: Invocation) -> HandlerResult:
|
|
829
|
+
"""Remove the filter control on one column of a board."""
|
|
830
|
+
field = str(_require_field(_bound_document(invocation), "field"))
|
|
831
|
+
return _edit_filters(invocation, lambda current: without_filter(current["canvas"], field))
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
def dashboard_filter_list(invocation: Invocation) -> HandlerResult:
|
|
835
|
+
"""List the filter controls a board declares."""
|
|
836
|
+
dashboard_id = _require_int_positional(invocation, "dashboard id")
|
|
837
|
+
with open_service(invocation) as (service, auth):
|
|
838
|
+
current = _dump_model(service.call(CANVAS_GET, dashboard_id=dashboard_id))
|
|
839
|
+
result = {"dashboard_id": dashboard_id, "filters": declared(current["canvas"])}
|
|
840
|
+
return result, _meta(invocation, auth.workspace_id)
|
|
841
|
+
|
|
842
|
+
|
|
774
843
|
def dashboard_assess_twb(invocation: Invocation) -> HandlerResult:
|
|
775
844
|
"""Assess a local Tableau workbook through the SDK multipart seam."""
|
|
776
845
|
file_path = _require_str_positional(invocation, "file")
|
|
@@ -404,6 +404,9 @@ HANDLERS: dict[str, Handler] = {
|
|
|
404
404
|
"dashboard.data.published": dashboard_cmd.dashboard_data_published,
|
|
405
405
|
"dashboard.delete": dashboard_cmd.dashboard_delete,
|
|
406
406
|
"dashboard.get": dashboard_cmd.dashboard_get,
|
|
407
|
+
"dashboard.filter.add": dashboard_cmd.dashboard_filter_add,
|
|
408
|
+
"dashboard.filter.list": dashboard_cmd.dashboard_filter_list,
|
|
409
|
+
"dashboard.filter.remove": dashboard_cmd.dashboard_filter_remove,
|
|
407
410
|
"dashboard.get-by-url": dashboard_cmd.dashboard_get_by_url,
|
|
408
411
|
"dashboard.job-by-url": dashboard_cmd.dashboard_job_by_url,
|
|
409
412
|
"dashboard.list": dashboard_cmd.dashboard_list,
|
|
@@ -361,32 +361,47 @@ def _paged_columns(details: dict[str, dict[str, Any]], limit: int) -> dict[str,
|
|
|
361
361
|
def _variant_report(
|
|
362
362
|
scope: _Scope, names: list[str], tables: dict[str, dict[Any, int] | None]
|
|
363
363
|
) -> list[dict[str, Any]]:
|
|
364
|
-
"""Per TEXT column, spellings of one value (Ltd/Limited, case, punctuation) and the fix.
|
|
364
|
+
"""Per TEXT column, spellings of one value (Ltd/Limited, case, punctuation) and the fix.
|
|
365
|
+
|
|
366
|
+
``likely_groups`` are names that differ only by a legal form or a connector
|
|
367
|
+
(``TECNOLAB`` / ``TECNOLAB S.A.``): proposed, never merged without a yes.
|
|
368
|
+
"""
|
|
365
369
|
report: list[dict[str, Any]] = []
|
|
366
370
|
for name in names:
|
|
367
371
|
table = tables.get(name)
|
|
368
372
|
if table is None or scope.types.get(name) != "TEXT":
|
|
369
373
|
continue
|
|
370
|
-
|
|
371
|
-
|
|
374
|
+
texts = {k: v for k, v in table.items() if isinstance(k, str)}
|
|
375
|
+
groups, likely = dp.variant_groups(texts), dp.likely_groups(texts)
|
|
376
|
+
if not groups and not likely:
|
|
372
377
|
continue
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
"column": name,
|
|
378
|
-
"groups_total": len(groups),
|
|
379
|
-
"groups": shown,
|
|
380
|
-
"bulk_replace": body,
|
|
381
|
-
"command": (
|
|
382
|
-
f"mammoth view transform bulk-replace {scope.view_id} "
|
|
383
|
-
f"--input {shlex.quote(json.dumps(body))}"
|
|
384
|
-
),
|
|
385
|
-
}
|
|
386
|
-
)
|
|
378
|
+
entry: dict[str, Any] = {"column": name, **_merge_fix(scope, name, groups)}
|
|
379
|
+
if likely:
|
|
380
|
+
entry["likely_groups"] = {"note": _LIKELY_NOTE, **_merge_fix(scope, name, likely)}
|
|
381
|
+
report.append(entry)
|
|
387
382
|
return report
|
|
388
383
|
|
|
389
384
|
|
|
385
|
+
_LIKELY_NOTE = (
|
|
386
|
+
"Same name apart from a legal form or a connector word; confirm with the user "
|
|
387
|
+
"before merging (SRL and SA can be two companies)."
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
def _merge_fix(scope: _Scope, column: str, groups: list[dict[str, Any]]) -> dict[str, Any]:
|
|
392
|
+
"""The groups shown and the bulk-replace that merges them."""
|
|
393
|
+
shown = groups[:_MAX_VARIANT_GROUPS]
|
|
394
|
+
fix: dict[str, Any] = {"groups_total": len(groups), "groups": shown}
|
|
395
|
+
if not shown:
|
|
396
|
+
return fix
|
|
397
|
+
body = {**dp.bulk_replace_input(column, shown), "dataset_id": scope.dataset_id}
|
|
398
|
+
command = (
|
|
399
|
+
f"mammoth view transform bulk-replace {scope.view_id} "
|
|
400
|
+
f"--input {shlex.quote(json.dumps(body))}"
|
|
401
|
+
)
|
|
402
|
+
return {**fix, "bulk_replace": body, "command": command}
|
|
403
|
+
|
|
404
|
+
|
|
390
405
|
# -- target vs column ----------------------------------------------------------------------
|
|
391
406
|
|
|
392
407
|
|
|
@@ -76,6 +76,9 @@ class Invocation:
|
|
|
76
76
|
# handler so its verify and readback reads address the view directly
|
|
77
77
|
# instead of walking every dataset to find it.
|
|
78
78
|
known_dataset_id: int | None = field(default=None, repr=False, compare=False)
|
|
79
|
+
# Set on the read a write's ``state`` block issues: that read confirms the
|
|
80
|
+
# write, so a command's extra evaluation (a board's numbers) is skipped.
|
|
81
|
+
readback: bool = field(default=False, repr=False, compare=False)
|
|
79
82
|
_prepared_input: object = field(
|
|
80
83
|
default=_UNINITIALIZED_INPUT, init=False, repr=False, compare=False
|
|
81
84
|
)
|
|
@@ -196,6 +196,7 @@ def _read_invocation(command_id: str, resolved_ids: dict[str, Any], base: Invoca
|
|
|
196
196
|
no_input=True,
|
|
197
197
|
positionals=positionals,
|
|
198
198
|
extra_args=extra_args,
|
|
199
|
+
readback=True,
|
|
199
200
|
)
|
|
200
201
|
object.__setattr__(invocation, "_prepared_input", document or None)
|
|
201
202
|
return invocation
|
|
@@ -351,6 +351,22 @@ _VIEW_DATA_PROFILE_FIELDS = (
|
|
|
351
351
|
FieldSpec("limit", required=False, annotation=int, default=50),
|
|
352
352
|
)
|
|
353
353
|
|
|
354
|
+
# dashboard.filter.add/remove are CLI composites over canvas get + canvas save
|
|
355
|
+
# (DashboardsAPI.canvas_save is named in the manifest as the SDK anchor); the
|
|
356
|
+
# canvas body is built by the handler, so the document carries only the filter.
|
|
357
|
+
_DASHBOARD_FILTER_ADD_FIELDS = (
|
|
358
|
+
FieldSpec("field", required=True, annotation=str),
|
|
359
|
+
FieldSpec(
|
|
360
|
+
"control",
|
|
361
|
+
required=False,
|
|
362
|
+
annotation=Literal["multi", "dropdown", "chips", "search", "range", "motion"] | None,
|
|
363
|
+
default=None,
|
|
364
|
+
),
|
|
365
|
+
FieldSpec("label", required=False, annotation=str | None, default=None),
|
|
366
|
+
FieldSpec("default", required=False, annotation=list[str] | None, default=None),
|
|
367
|
+
)
|
|
368
|
+
_DASHBOARD_FILTER_REMOVE_FIELDS = (FieldSpec("field", required=True, annotation=str),)
|
|
369
|
+
|
|
354
370
|
# The remaining S1 commands are intentionally closed zero-input commands. A
|
|
355
371
|
# command may still receive ordinary positional/context values; those are
|
|
356
372
|
# represented by ``positionals`` and never become structured-input keys.
|
|
@@ -725,6 +741,12 @@ def resolve_command_contract(command_id: str) -> ResolvedCommandContract | None:
|
|
|
725
741
|
special_fields = _VIEW_DATA_COMPARE_FIELDS
|
|
726
742
|
elif command_id == "view.data.profile":
|
|
727
743
|
special_fields = _VIEW_DATA_PROFILE_FIELDS
|
|
744
|
+
elif command_id == "dashboard.filter.add":
|
|
745
|
+
special_fields = _DASHBOARD_FILTER_ADD_FIELDS
|
|
746
|
+
elif command_id == "dashboard.filter.remove":
|
|
747
|
+
special_fields = _DASHBOARD_FILTER_REMOVE_FIELDS
|
|
748
|
+
elif command_id == "dashboard.filter.list":
|
|
749
|
+
special_fields = ()
|
|
728
750
|
local_fields = _LOCAL_CONTRACT_FIELDS.get(command_id, ()) if is_local else None
|
|
729
751
|
fields = tuple(
|
|
730
752
|
field
|