mammoth-cli 2.0.13__tar.gz → 2.0.14__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.13 → mammoth_cli-2.0.14}/PKG-INFO +2 -2
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +3 -0
- mammoth_cli-2.0.14/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +220 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +4 -4
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +25 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +4 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +15 -1
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +3 -1
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/dashboard.py +40 -8
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/output/normalize.py +25 -4
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/input_fields.py +14 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/mapping.py +31 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/positionals.py +8 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/pyproject.toml +2 -2
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/dashboard.yaml +11 -9
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/sdk-methods.yaml +2 -2
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/.gitignore +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/LICENSE +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/README.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/schema.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/view.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/view.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.0.13 → mammoth_cli-2.0.14}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.14
|
|
4
4
|
Summary: Command-line interface for the Mammoth Analytics platform
|
|
5
5
|
Project-URL: homepage, https://mammoth.io
|
|
6
6
|
Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
|
|
@@ -17,7 +17,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
17
17
|
Requires-Python: <3.15,>=3.12
|
|
18
18
|
Requires-Dist: jsonschema>=4.20
|
|
19
19
|
Requires-Dist: keyring<26,>=25.7
|
|
20
|
-
Requires-Dist: mammoth-io<0.8,>=0.7.
|
|
20
|
+
Requires-Dist: mammoth-io<0.8,>=0.7.6
|
|
21
21
|
Requires-Dist: platformdirs<5,>=4.10
|
|
22
22
|
Requires-Dist: pydantic<3,>=2.13
|
|
23
23
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -65,6 +65,9 @@ the result.
|
|
|
65
65
|
- **Import, resources, transforms, pipelines, dashboards, exports, or cleanup:**
|
|
66
66
|
[recipes](references/recipes/index.md) and [operations](references/operations.md)
|
|
67
67
|
- **A known command family or exact command:** [command catalog](references/command-index.md)
|
|
68
|
+
- **Whether a route is proven, known-blocked, or untried on release:**
|
|
69
|
+
[capabilities](references/capabilities.md) — read it before promising a
|
|
70
|
+
deliverable or reporting a failure as a backend fault
|
|
68
71
|
- **Pause or transfer to another agent:** [handoff](references/handoff.md)
|
|
69
72
|
|
|
70
73
|
## Handoff checklist
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# What is proven on release
|
|
2
|
+
|
|
3
|
+
Generated from `docs/release-capability-matrix.json`; do not edit by hand.
|
|
4
|
+
455 API operations have a CLI command. 142 were exercised successfully on release, 2 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID --output json --no-input`, run it, and treat the structured error envelope as the answer.
|
|
5
|
+
|
|
6
|
+
Status meanings:
|
|
7
|
+
|
|
8
|
+
- **verified**: one bounded live run on release returned a success envelope (single path; variants and error paths are usually untested).
|
|
9
|
+
- **not supported**: the backend refuses the route on release; the note says why and what to use instead.
|
|
10
|
+
- **observed blocker**: the last run hit an error; the note quotes it. Re-check before relying on the route, and do not retry the same input.
|
|
11
|
+
- **CLI defect fixed, untried since**: the failure was on the CLI side and this release repairs it; nobody has re-run the route yet.
|
|
12
|
+
- Commands not listed under a family are untried.
|
|
13
|
+
|
|
14
|
+
The typed `view transform *` commands all submit through `view.task.add`; its row below carries the transformations proven end to end (filter, fill-missing, join, pivot with an exported summary). A transformation not named there has the same untried status as any other command.
|
|
15
|
+
|
|
16
|
+
## Coverage by family
|
|
17
|
+
|
|
18
|
+
| Family | Commands | Verified | Not supported | Untried |
|
|
19
|
+
|---|---|---|---|---|
|
|
20
|
+
| `dashboard` | 104 | 66 | 2 | 36 |
|
|
21
|
+
| `view` | 62 | 22 | 0 | 40 |
|
|
22
|
+
| `support` | 45 | 0 | 0 | 45 |
|
|
23
|
+
| `billing` | 23 | 0 | 0 | 23 |
|
|
24
|
+
| `connector` | 22 | 2 | 0 | 20 |
|
|
25
|
+
| `workspace` | 19 | 6 | 0 | 13 |
|
|
26
|
+
| `project` | 17 | 5 | 0 | 12 |
|
|
27
|
+
| `workflow` | 16 | 5 | 0 | 11 |
|
|
28
|
+
| `dataset` | 15 | 9 | 0 | 6 |
|
|
29
|
+
| `parameter` | 14 | 2 | 0 | 12 |
|
|
30
|
+
| `data-app` | 12 | 1 | 0 | 11 |
|
|
31
|
+
| `folder` | 8 | 5 | 0 | 3 |
|
|
32
|
+
| `snippet` | 8 | 1 | 0 | 7 |
|
|
33
|
+
| `automation` | 7 | 1 | 0 | 6 |
|
|
34
|
+
| `user` | 7 | 2 | 0 | 5 |
|
|
35
|
+
| `webhook` | 7 | 0 | 0 | 7 |
|
|
36
|
+
| `addon` | 6 | 0 | 0 | 6 |
|
|
37
|
+
| `batch` | 6 | 2 | 0 | 4 |
|
|
38
|
+
| `file` | 6 | 3 | 0 | 3 |
|
|
39
|
+
| `agent` | 5 | 1 | 0 | 4 |
|
|
40
|
+
| `ai` | 5 | 0 | 0 | 5 |
|
|
41
|
+
| `annotation` | 5 | 1 | 0 | 4 |
|
|
42
|
+
| `client-app` | 5 | 0 | 0 | 5 |
|
|
43
|
+
| `notification` | 5 | 1 | 0 | 4 |
|
|
44
|
+
| `schedule` | 5 | 0 | 0 | 5 |
|
|
45
|
+
| `template` | 5 | 0 | 0 | 5 |
|
|
46
|
+
| `browse` | 4 | 2 | 0 | 2 |
|
|
47
|
+
| `external-key` | 4 | 0 | 0 | 4 |
|
|
48
|
+
| `trash` | 3 | 1 | 0 | 2 |
|
|
49
|
+
| `activity` | 2 | 1 | 0 | 1 |
|
|
50
|
+
| `job` | 2 | 2 | 0 | 0 |
|
|
51
|
+
| `report` | 1 | 1 | 0 | 0 |
|
|
52
|
+
|
|
53
|
+
## `activity`
|
|
54
|
+
|
|
55
|
+
Verified: `activity.list`
|
|
56
|
+
|
|
57
|
+
| Command | State | Note |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| `activity.export` | observed blocker | server_error: see sweep report |
|
|
60
|
+
|
|
61
|
+
## `agent`
|
|
62
|
+
|
|
63
|
+
Verified: `agent.session.list`
|
|
64
|
+
|
|
65
|
+
## `ai`
|
|
66
|
+
|
|
67
|
+
| Command | State | Note |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| `ai.sql.generate` | observed blocker | validation_error: HTTP 400 Validation error |
|
|
70
|
+
| `ai.suggestion.list` | observed blocker | validation_error: HTTP 400 Validation error |
|
|
71
|
+
|
|
72
|
+
## `annotation`
|
|
73
|
+
|
|
74
|
+
Verified: `annotation.list`
|
|
75
|
+
|
|
76
|
+
## `automation`
|
|
77
|
+
|
|
78
|
+
Verified: `automation.list`
|
|
79
|
+
|
|
80
|
+
## `batch`
|
|
81
|
+
|
|
82
|
+
Verified: `batch.get`, `batch.list`
|
|
83
|
+
|
|
84
|
+
## `browse`
|
|
85
|
+
|
|
86
|
+
Verified: `browse.project`, `browse.workspace`
|
|
87
|
+
|
|
88
|
+
| Command | State | Note |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| `browse.folder` | observed blocker | cli_error: rejects folder id 0 although folder.root reports id 0 as the root |
|
|
91
|
+
| `browse.root` | observed blocker | server_error: see sweep report |
|
|
92
|
+
|
|
93
|
+
## `connector`
|
|
94
|
+
|
|
95
|
+
Verified: `connector.active`, `connector.list`
|
|
96
|
+
|
|
97
|
+
| Command | State | Note |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `connector.ai.session.list` | observed blocker | cli_error: backend returned HTTP 200 but the CLI raised api_error (envelope mismatch) |
|
|
100
|
+
| `connector.connection.list` | observed blocker | server_error: see sweep report |
|
|
101
|
+
| `connector.get` | observed blocker | validation_error: HTTP 400 'Invalid connector key' for a key returned by connector.list |
|
|
102
|
+
|
|
103
|
+
## `dashboard`
|
|
104
|
+
|
|
105
|
+
Verified: `dashboard.analytics`, `dashboard.cancel-generation`, `dashboard.canvas.get`, `dashboard.canvas.restore`, `dashboard.chat.edit`, `dashboard.chat.history`, `dashboard.context.create`, `dashboard.context.delete`, `dashboard.context.extract`, `dashboard.context.list`, `dashboard.context.update`, `dashboard.create-blank`, `dashboard.delete`, `dashboard.descriptor-data`, `dashboard.duplicate`, `dashboard.exemplar.extract`, `dashboard.get`, `dashboard.get-by-url`, `dashboard.list`, `dashboard.page.plan`, `dashboard.pages.add`, `dashboard.qa.ask`, `dashboard.qa.comment.create`, `dashboard.qa.comment.delete`, `dashboard.qa.feedback`, `dashboard.qa.session.create`, `dashboard.qa.session.delete`, `dashboard.qa.session.fork`, `dashboard.qa.session.get`, `dashboard.qa.session.list`, `dashboard.qa.session.rename`, `dashboard.qa.session.set-visibility`, `dashboard.qa.settings.get`, `dashboard.qa.settings.set`, `dashboard.restore`, `dashboard.rls.assignment.list`, `dashboard.rls.assignment.set`, `dashboard.rls.column.list`, `dashboard.rls.value.list`, `dashboard.signature.create`, `dashboard.signature.delete`, `dashboard.signature.list`, `dashboard.signature.update`, `dashboard.style.custom.create`, `dashboard.style.custom.delete`, `dashboard.style.custom.list`, `dashboard.style.custom.update`, `dashboard.style.extract-brand`, `dashboard.style.preset.list`, `dashboard.style.token.list`, `dashboard.suggestion.list`, `dashboard.swap-data`, `dashboard.tags.delete`, `dashboard.tags.list`, `dashboard.tags.merge`, `dashboard.tags.rename`, `dashboard.tags.set`, `dashboard.template.fit`, `dashboard.template.list`, `dashboard.template.preview`, `dashboard.template.resolve-mapping`, `dashboard.templates.pending`, `dashboard.trash`, `dashboard.update`, `dashboard.v3.generate`, `dashboard.video-state`
|
|
106
|
+
|
|
107
|
+
| Command | State | Note |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| `dashboard.create` | not supported | Not supported on release: backend returns HTTP 409 4DASH012 DASHBOARD_LEGACY_CREATION_RETIRED (legacy dashboard creation retired). Use dashboard.create-blank or dashboard.v3.generate. Dashboard sweep 2026-09-18, CLI 2.0.12. |
|
|
110
|
+
| `dashboard.pdf.export` | not supported | Not supported from the CLI on release: backend HTTP 400 4GENR001 requires params.data to be the browser-hydrated DashboardData map and states it cannot rebuild it from stored descriptors (dashboard sweep and Haiku e2e, 2026-09-18). The route works only with a client render pass. |
|
|
111
|
+
| `dashboard.pdf-artifact` | observed blocker | blocked_missing_fixture: No real pdf export job_id obtainable (dashboard.pdf.export is itself blocked_missing_fixture) |
|
|
112
|
+
| `dashboard.published.canvas` | observed blocker | blocked_missing_fixture: HTTP 404 4DASH001 DASHBOARD_NOT_FOUND via url endpoint: D=52 was never actually published (was_published=false); the only publish mechanism is 'dashboard s |
|
|
113
|
+
| `dashboard.source.list` | observed blocker | server_error: HTTP 500 on GET /dashboards/sources; matches documented B04 SERVER_VARIANCE precondition |
|
|
114
|
+
| `dashboard.video.export` | observed blocker | validation_error: HTTP 400 4GENR001: 'publish the dashboard before exporting a video' -- clear, actionable message |
|
|
115
|
+
| `dashboard.widget-data` | observed blocker | blocked_missing_fixture: HTTP 409 4DASH004 DASHBOARD_WRONG_ENGINE: widget-data is a legacy-engine-only endpoint |
|
|
116
|
+
| `dashboard.archive` | CLI defect fixed, untried since | 2.0.14 accepts the non-object 200 body and reports the committed state |
|
|
117
|
+
| `dashboard.canvas.save` | CLI defect fixed, untried since | 2.0.14 no longer redacts style_tokens, so the canvas get -> save round-trip is intact |
|
|
118
|
+
| `dashboard.data.draft` | CLI defect fixed, untried since | 2.0.14 / SDK 0.7.6 send the WidgetDataSpec params envelope (widget_id) |
|
|
119
|
+
| `dashboard.data.published` | CLI defect fixed, untried since | 2.0.14 / SDK 0.7.6 send the WidgetDataSpec params envelope (widget_id) |
|
|
120
|
+
| `dashboard.figure-intent` | CLI defect fixed, untried since | SDK 0.7.6 returns an unmatched 2xx body instead of raising ValidationError |
|
|
121
|
+
| `dashboard.og-card` | CLI defect fixed, untried since | SDK 0.7.5 returns a described binary body |
|
|
122
|
+
| `dashboard.query` | CLI defect fixed, untried since | 2.0.14 example carries a descriptor with kind=scalar |
|
|
123
|
+
| `dashboard.style.default.get` | CLI defect fixed, untried since | SDK 0.7.6 returns an unmatched 2xx body instead of raising ValidationError |
|
|
124
|
+
| `dashboard.style.derive` | CLI defect fixed, untried since | 2.0.14 no longer redacts styleTokens |
|
|
125
|
+
| `dashboard.template.get` | CLI defect fixed, untried since | SDK 0.7.6 returns an unmatched 2xx body instead of raising ValidationError |
|
|
126
|
+
|
|
127
|
+
## `data-app`
|
|
128
|
+
|
|
129
|
+
Verified: `data-app.list`
|
|
130
|
+
|
|
131
|
+
## `dataset`
|
|
132
|
+
|
|
133
|
+
Verified: `dataset.batch-data`, `dataset.create`, `dataset.data`, `dataset.delete`, `dataset.file-settings.get`, `dataset.file-settings.update`, `dataset.get`, `dataset.list`, `dataset.trash`
|
|
134
|
+
|
|
135
|
+
## `external-key`
|
|
136
|
+
|
|
137
|
+
| Command | State | Note |
|
|
138
|
+
|---|---|---|
|
|
139
|
+
| `external-key.list` | observed blocker | cli_error: not_authenticated although the same session authenticated elsewhere |
|
|
140
|
+
|
|
141
|
+
## `file`
|
|
142
|
+
|
|
143
|
+
Verified: `file.get`, `file.list`, `file.upload`
|
|
144
|
+
|
|
145
|
+
## `folder`
|
|
146
|
+
|
|
147
|
+
Verified: `folder.create`, `folder.delete`, `folder.get`, `folder.list`, `folder.update`
|
|
148
|
+
|
|
149
|
+
## `job`
|
|
150
|
+
|
|
151
|
+
Verified: `job.get`, `job.get-many`
|
|
152
|
+
|
|
153
|
+
## `notification`
|
|
154
|
+
|
|
155
|
+
Verified: `notification.list`
|
|
156
|
+
|
|
157
|
+
## `parameter`
|
|
158
|
+
|
|
159
|
+
Verified: `parameter.group.list`, `parameter.list`
|
|
160
|
+
|
|
161
|
+
## `project`
|
|
162
|
+
|
|
163
|
+
Verified: `project.checkpoint.list`, `project.data-check.list`, `project.list`, `project.pending-changes`, `project.resource-status`
|
|
164
|
+
|
|
165
|
+
| Command | State | Note |
|
|
166
|
+
|---|---|---|
|
|
167
|
+
| `project.publish-credentials` | observed blocker | cli_error: requires odbc_type, not discoverable read-only |
|
|
168
|
+
| `project.resource-dependencies` | observed blocker | cli_error: required resource_ids has no CLI flag |
|
|
169
|
+
|
|
170
|
+
## `report`
|
|
171
|
+
|
|
172
|
+
Verified: `report.list`
|
|
173
|
+
|
|
174
|
+
## `schedule`
|
|
175
|
+
|
|
176
|
+
| Command | State | Note |
|
|
177
|
+
|---|---|---|
|
|
178
|
+
| `schedule.list` | observed blocker | validation_error: HTTP 400 with message 'Not implemented' |
|
|
179
|
+
|
|
180
|
+
## `snippet`
|
|
181
|
+
|
|
182
|
+
Verified: `snippet.list`
|
|
183
|
+
|
|
184
|
+
## `template`
|
|
185
|
+
|
|
186
|
+
| Command | State | Note |
|
|
187
|
+
|---|---|---|
|
|
188
|
+
| `template.list` | observed blocker | cli_error: backend returned HTTP 200 but the CLI raised api_error (envelope mismatch) |
|
|
189
|
+
|
|
190
|
+
## `trash`
|
|
191
|
+
|
|
192
|
+
Verified: `trash.list`
|
|
193
|
+
|
|
194
|
+
## `user`
|
|
195
|
+
|
|
196
|
+
Verified: `user.get`, `user.preference.get`
|
|
197
|
+
|
|
198
|
+
## `view`
|
|
199
|
+
|
|
200
|
+
Verified: `view.active-user.list`, `view.checkpoint.list`, `view.conditional-format.list`, `view.create`, `view.data-check.list`, `view.data.get`, `view.data.query`, `view.derivative.list`, `view.export.list`, `view.exportable-config.get`, `view.get`, `view.list`, `view.parameter-context`, `view.pipeline.get`, `view.pipeline.items`, `view.preview`, `view.task.add`, `view.task.get`, `view.task.list`, `view.version.get`, `view.version.list`
|
|
201
|
+
|
|
202
|
+
| Command | State | Note |
|
|
203
|
+
|---|---|---|
|
|
204
|
+
| `view.ai.generation-info` | observed blocker | validation_error: HTTP 400 with message 'Not implemented' |
|
|
205
|
+
|
|
206
|
+
## `webhook`
|
|
207
|
+
|
|
208
|
+
| Command | State | Note |
|
|
209
|
+
|---|---|---|
|
|
210
|
+
| `webhook.list` | observed blocker | cli_error: api_error with no HTTP status recorded |
|
|
211
|
+
|
|
212
|
+
## `workflow`
|
|
213
|
+
|
|
214
|
+
Verified: `workflow.graph`, `workflow.list`, `workflow.workspace-datasets`, `workflow.workspace-exports`, `workflow.workspace-sources`
|
|
215
|
+
|
|
216
|
+
## `workspace`
|
|
217
|
+
|
|
218
|
+
Verified: `workspace.app-usage`, `workspace.get`, `workspace.list`, `workspace.segment.list`, `workspace.storage-breakdown`, `workspace.user.list`
|
|
219
|
+
|
|
220
|
+
Evidence version: CLI mammoth-cli 1.1.11; mammoth-io 0.7.1. Details: `docs/capability-evidence/` in the repository.
|
|
@@ -148,7 +148,7 @@ Expected success: `DashboardCreateBlankResult` in the standard JSON envelope; mu
|
|
|
148
148
|
|
|
149
149
|
Run: `mammoth dashboard data draft`. Exact input fields: `mammoth schema get dashboard.data.draft --output json --no-input`.
|
|
150
150
|
|
|
151
|
-
Example: `mammoth dashboard data draft 123 --input '{"
|
|
151
|
+
Example: `mammoth dashboard data draft 123 --input '{"widget_id": "550e8400-e29b-41d4-a716-446655440000"}' --output json --no-input`. Runnable only after resolving schema-required IDs and input from observed reads.
|
|
152
152
|
|
|
153
153
|
Expected success: `DashboardDataDraftResult` in the standard JSON envelope; mutation `read`, confirmation `none`, wait policy `always_wait`. On nonzero exit, inspect the JSON error envelope and its `recovery_commands`; do not guess request fields. See [representative envelopes](../machine-output.md) for concrete success/error shapes.
|
|
154
154
|
|
|
@@ -156,7 +156,7 @@ Expected success: `DashboardDataDraftResult` in the standard JSON envelope; muta
|
|
|
156
156
|
|
|
157
157
|
Run: `mammoth dashboard data published`. Exact input fields: `mammoth schema get dashboard.data.published --output json --no-input`.
|
|
158
158
|
|
|
159
|
-
Example: `mammoth dashboard data published 123 --input '{"
|
|
159
|
+
Example: `mammoth dashboard data published 123 --input '{"widget_id": "550e8400-e29b-41d4-a716-446655440000"}' --output json --no-input`. Runnable only after resolving schema-required IDs and input from observed reads.
|
|
160
160
|
|
|
161
161
|
Expected success: `DashboardDataPublishedResult` in the standard JSON envelope; mutation `read`, confirmation `none`, wait policy `always_wait`. On nonzero exit, inspect the JSON error envelope and its `recovery_commands`; do not guess request fields. See [representative envelopes](../machine-output.md) for concrete success/error shapes.
|
|
162
162
|
|
|
@@ -460,7 +460,7 @@ Expected success: `DashboardQaSettingsSetResult` in the standard JSON envelope;
|
|
|
460
460
|
|
|
461
461
|
Run: `mammoth dashboard query`. Exact input fields: `mammoth schema get dashboard.query --output json --no-input`.
|
|
462
462
|
|
|
463
|
-
Example: `mammoth dashboard query 123 --input '{"body": {"params": {"descriptor": {}}}}' --output json --no-input`. Runnable only after resolving schema-required IDs and input from observed reads.
|
|
463
|
+
Example: `mammoth dashboard query 123 --input '{"body": {"params": {"descriptor": {"kind": "scalar", "agg": "count"}}}}' --output json --no-input`. Runnable only after resolving schema-required IDs and input from observed reads.
|
|
464
464
|
|
|
465
465
|
Expected success: `DashboardQueryResult` in the standard JSON envelope; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`. On nonzero exit, inspect the JSON error envelope and its `recovery_commands`; do not guess request fields. See [representative envelopes](../machine-output.md) for concrete success/error shapes.
|
|
466
466
|
|
|
@@ -788,7 +788,7 @@ Expected success: `DashboardTrashResult` in the standard JSON envelope; mutation
|
|
|
788
788
|
|
|
789
789
|
Run: `mammoth dashboard update`. Exact input fields: `mammoth schema get dashboard.update --output json --no-input`.
|
|
790
790
|
|
|
791
|
-
Example: `mammoth dashboard update 123 --input '{"patch": [{"op": "
|
|
791
|
+
Example: `mammoth dashboard update 123 --input '{"patch": [{"op": "replace", "path": "title", "value": "Renamed dashboard"}]}' --output json --no-input`. Runnable only after resolving schema-required IDs and input from observed reads.
|
|
792
792
|
|
|
793
793
|
Expected success: `DashboardUpdateResult` in the standard JSON envelope; mutation `benign_mutation`, confirmation `none`, wait policy `returns_job`. On nonzero exit, inspect the JSON error envelope and its `recovery_commands`; do not guess request fields. See [representative envelopes](../machine-output.md) for concrete success/error shapes.
|
|
794
794
|
|
|
@@ -32,3 +32,28 @@ mammoth schema find "dashboard" --output json --no-input
|
|
|
32
32
|
Page/widget schemas vary by release. Read each schema, use returned IDs, and
|
|
33
33
|
verify dashboard source plus draft/published data after every mutation. A
|
|
34
34
|
creation response alone is not proof of a usable published view.
|
|
35
|
+
|
|
36
|
+
## Canvas, widget data and PDF
|
|
37
|
+
|
|
38
|
+
Never save an invented canvas. Read it, change it, write it back:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
mammoth dashboard canvas get DASHBOARD_ID --output json --no-input # data.canvas incl. style_tokens
|
|
42
|
+
mammoth dashboard canvas save DASHBOARD_ID --input '{"body":{"params":{"canvas":CANVAS_FROM_GET}}}' --output json --no-input
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`canvas save` with `{"canvas": {}}` fails (`dataset` and other fields are
|
|
46
|
+
required); the object returned by `canvas get` is the only known-good shape.
|
|
47
|
+
Widget ids for `dashboard data draft` / `dashboard data published` come from
|
|
48
|
+
that canvas: `--input '{"widget_id": "WIDGET_UUID"}'` (optional
|
|
49
|
+
`global_filters` / `drilldown_filters` objects). `dashboard query` needs a
|
|
50
|
+
descriptor with a `kind` (`scalar`, `group`, `rate`, `detail`, `options`,
|
|
51
|
+
`range`); `{"kind":"scalar","agg":"count"}` is the smallest that runs.
|
|
52
|
+
|
|
53
|
+
`dashboard pdf export` and `dashboard video export` cannot be completed from
|
|
54
|
+
the CLI: the backend requires the browser-hydrated `DashboardData` map
|
|
55
|
+
(pre-rendered widget results) in `params.data` and refuses to rebuild it. Report
|
|
56
|
+
this as a known limitation instead of retrying with `{}`. `dashboard create`
|
|
57
|
+
(legacy engine) is retired on release (HTTP 409 `4DASH012`); use
|
|
58
|
+
`create-blank` or `v3 generate`.
|
|
59
|
+
|
|
@@ -16,6 +16,10 @@ mammoth view list DATASET_ID --project PROJECT_ID --output json --no-input
|
|
|
16
16
|
mammoth view get VIEW_ID --project PROJECT_ID --output json --no-input
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
`file upload` takes the local path as its positional argument; there is no
|
|
20
|
+
`--source`/`--file` option. `dataset delete` is asynchronous: re-read
|
|
21
|
+
`dataset list` (the id disappears once the job completes) before reporting.
|
|
22
|
+
|
|
19
23
|
Use display names from the exact view schema. For settings, folders and other
|
|
20
24
|
families, use `schema find`/`schema get` first, then read back the exact parent
|
|
21
25
|
and resource IDs. For example:
|
|
@@ -19,7 +19,21 @@ parent from `view list DATASET_ID` (you already know it after upload) or
|
|
|
19
19
|
|
|
20
20
|
Prefer typed operations such as convert-type, fill-missing, replace, join,
|
|
21
21
|
lookup, filter and math only when the live schema
|
|
22
|
-
lists them.
|
|
22
|
+
lists them. Pick the operation by what it does, not by its name:
|
|
23
|
+
|
|
24
|
+
- `fill-missing` copies the previous/next row's value into blanks
|
|
25
|
+
(`direction` = `LAST_VALUE` forward-fill or `FIRST_VALUE`). It cannot write a
|
|
26
|
+
literal. To fill blanks with a constant (for example `0`), use `set-values`
|
|
27
|
+
on the existing column with an `IS_EMPTY` condition:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
mammoth view transform set-values VIEW_ID --project PROJECT_ID \
|
|
31
|
+
--input '{"dataset_id":DATASET_ID,"existing_column":"revenue","values":[{"value":0}],"condition":{"column":"revenue","operator":"IS_EMPTY"}}' \
|
|
32
|
+
--output json --no-input
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- `filter` keeps matching rows by default (`filter_type: "SHOW"`); to drop
|
|
36
|
+
rows, say so: `{"condition":{"column":"units","operator":"LT","value":0},"filter_type":"REMOVE"}`. For each operation, a successful result should contain a returned
|
|
23
37
|
task/job reference or updated view envelope; then verify with `view task list`,
|
|
24
38
|
`view task get`, `view pipeline items`, or preview according to its schema.
|
|
25
39
|
|
|
@@ -50,7 +50,9 @@ or secrets in an argument, prompt, transcript, or checkpoint.
|
|
|
50
50
|
4. Discover instead of guessing. Run `mammoth schema list/find/get --output
|
|
51
51
|
json --no-input` for local CLI routes; `mammoth capability list --output
|
|
52
52
|
json --no-input` is an API-binding inventory and can omit typed/local
|
|
53
|
-
routes.
|
|
53
|
+
routes. Check [capabilities](capabilities.md) for whether a route is
|
|
54
|
+
proven, not supported, or untried on release before building a plan on
|
|
55
|
+
it. Then resolve workspace/project/dataset/view
|
|
54
56
|
parents with reads. Use display names returned by the exact view schema.
|
|
55
57
|
5. Translate the business intent into a plan the agent chooses. Submit only
|
|
56
58
|
supported operations with explicit `--project` (and other returned parents),
|
|
@@ -365,24 +365,52 @@ def dashboard_analytics(invocation: Invocation) -> HandlerResult:
|
|
|
365
365
|
return data, _meta(invocation, auth.workspace_id)
|
|
366
366
|
|
|
367
367
|
|
|
368
|
+
def _widget_data_kwargs(invocation: Invocation) -> dict[str, Any]:
|
|
369
|
+
"""Bind the ``WidgetDataSpec`` fields the draft/published data routes take.
|
|
370
|
+
|
|
371
|
+
``widget_id`` (the widget UUID) is required; ``global_filters`` and
|
|
372
|
+
``drilldown_filters`` are optional ``{column: value}`` objects.
|
|
373
|
+
"""
|
|
374
|
+
document = _bound_document(invocation)
|
|
375
|
+
widget_id = _require_field(document, "widget_id")
|
|
376
|
+
if not isinstance(widget_id, str) or not widget_id.strip():
|
|
377
|
+
raise CliError(
|
|
378
|
+
code=CODE_INVALID_ARGUMENT,
|
|
379
|
+
message="The 'widget_id' input field must be a non-empty widget UUID string.",
|
|
380
|
+
exit_status=EXIT_USAGE,
|
|
381
|
+
hint="Read widget ids from 'mammoth dashboard canvas get DASHBOARD_ID'.",
|
|
382
|
+
)
|
|
383
|
+
kwargs: dict[str, Any] = {"widget_id": widget_id}
|
|
384
|
+
for name in ("global_filters", "drilldown_filters"):
|
|
385
|
+
if name not in document:
|
|
386
|
+
continue
|
|
387
|
+
value = document[name]
|
|
388
|
+
if not isinstance(value, dict):
|
|
389
|
+
raise CliError(
|
|
390
|
+
code=CODE_INVALID_ARGUMENT,
|
|
391
|
+
message=f"The '{name}' input field must be an object of column -> value.",
|
|
392
|
+
exit_status=EXIT_USAGE,
|
|
393
|
+
)
|
|
394
|
+
kwargs[name] = value
|
|
395
|
+
return kwargs
|
|
396
|
+
|
|
397
|
+
|
|
368
398
|
def dashboard_data_draft(invocation: Invocation) -> HandlerResult:
|
|
369
|
-
"""
|
|
399
|
+
"""Read one widget's rows from a dashboard's draft state. Fields come from ``--input``."""
|
|
370
400
|
dashboard_id = _require_int_positional(invocation, "dashboard id")
|
|
371
|
-
|
|
372
|
-
sql = _require_field(document, "sql")
|
|
401
|
+
kwargs = _widget_data_kwargs(invocation)
|
|
373
402
|
with open_service(invocation) as (service, auth):
|
|
374
|
-
data = service.call(_symbol(invocation), dashboard_id=dashboard_id,
|
|
403
|
+
data = service.call(_symbol(invocation), dashboard_id=dashboard_id, **kwargs)
|
|
375
404
|
data = _resolve_job(service, invocation, data)
|
|
376
405
|
return data, _meta(invocation, auth.workspace_id)
|
|
377
406
|
|
|
378
407
|
|
|
379
408
|
def dashboard_data_published(invocation: Invocation) -> HandlerResult:
|
|
380
|
-
"""
|
|
409
|
+
"""Read one widget's rows from a dashboard's published state. Fields from ``--input``."""
|
|
381
410
|
dashboard_id = _require_int_positional(invocation, "dashboard id")
|
|
382
|
-
|
|
383
|
-
sql = _require_field(document, "sql")
|
|
411
|
+
kwargs = _widget_data_kwargs(invocation)
|
|
384
412
|
with open_service(invocation) as (service, auth):
|
|
385
|
-
data = service.call(_symbol(invocation), dashboard_id=dashboard_id,
|
|
413
|
+
data = service.call(_symbol(invocation), dashboard_id=dashboard_id, **kwargs)
|
|
386
414
|
data = _resolve_job(service, invocation, data)
|
|
387
415
|
return data, _meta(invocation, auth.workspace_id)
|
|
388
416
|
|
|
@@ -561,6 +589,10 @@ def dashboard_archive(invocation: Invocation) -> HandlerResult:
|
|
|
561
589
|
data = service.call(
|
|
562
590
|
_symbol(invocation), dashboard_id=dashboard_id, archived=document["archived"]
|
|
563
591
|
)
|
|
592
|
+
if not isinstance(data, dict):
|
|
593
|
+
# The route declares no response body; give the committed state a
|
|
594
|
+
# stable object shape instead of a bare scalar.
|
|
595
|
+
data = {"dashboard_id": dashboard_id, "archived": document["archived"], "response": data}
|
|
564
596
|
return data, _meta(invocation, auth.workspace_id)
|
|
565
597
|
|
|
566
598
|
|
|
@@ -14,6 +14,7 @@ import decimal
|
|
|
14
14
|
import enum
|
|
15
15
|
import ipaddress
|
|
16
16
|
import math
|
|
17
|
+
import re
|
|
17
18
|
import uuid
|
|
18
19
|
from collections.abc import Mapping
|
|
19
20
|
from pathlib import Path
|
|
@@ -50,12 +51,33 @@ class _NormalizedJsonSchema(dict[str, Any]):
|
|
|
50
51
|
"""
|
|
51
52
|
|
|
52
53
|
|
|
54
|
+
_CAMEL_BOUNDARY = re.compile(r"(?<=[a-z0-9])(?=[A-Z])")
|
|
55
|
+
# Plural ``*_tokens`` keys that still name credentials rather than design data.
|
|
56
|
+
_CREDENTIAL_TOKEN_PREFIXES = ("access", "refresh", "auth", "api", "bearer", "session", "oauth")
|
|
57
|
+
|
|
58
|
+
|
|
53
59
|
def _is_secret_key(key: str) -> bool:
|
|
54
|
-
|
|
60
|
+
# ``styleTokens`` and ``style_tokens`` must be judged the same way.
|
|
61
|
+
lowered = _CAMEL_BOUNDARY.sub("_", key).lower()
|
|
55
62
|
# ``token_count`` is ordinary result metadata (for example an LLM usage
|
|
56
63
|
# counter), not a credential. Do not let the broad token guard erase it.
|
|
57
|
-
if lowered in {
|
|
64
|
+
if lowered in {
|
|
65
|
+
"token_count",
|
|
66
|
+
"next_token",
|
|
67
|
+
"continuation_token",
|
|
68
|
+
"page_token",
|
|
69
|
+
"design_tokens",
|
|
70
|
+
}:
|
|
58
71
|
return False
|
|
72
|
+
if "token" in lowered and not any(
|
|
73
|
+
hint in lowered for hint in _SECRET_KEY_HINTS if hint != "token"
|
|
74
|
+
):
|
|
75
|
+
# Credential tokens are singular (``token``, ``access_token``). Plural
|
|
76
|
+
# ``tokens`` / ``style_tokens`` are dashboard design-system data, and
|
|
77
|
+
# erasing them breaks the canvas get -> save round-trip.
|
|
78
|
+
if lowered == "tokens" or lowered.endswith("_tokens"):
|
|
79
|
+
return lowered.startswith(_CREDENTIAL_TOKEN_PREFIXES)
|
|
80
|
+
return True
|
|
59
81
|
return any(hint in lowered for hint in _SECRET_KEY_HINTS)
|
|
60
82
|
|
|
61
83
|
|
|
@@ -69,8 +91,7 @@ def _is_secret_value(value: Any) -> bool:
|
|
|
69
91
|
"""
|
|
70
92
|
value_type = type(value)
|
|
71
93
|
return value_type.__name__ in {"SecretStr", "SecretBytes"} or (
|
|
72
|
-
"secret" in value_type.__name__.lower()
|
|
73
|
-
and hasattr(value, "get_secret_value")
|
|
94
|
+
"secret" in value_type.__name__.lower() and hasattr(value, "get_secret_value")
|
|
74
95
|
)
|
|
75
96
|
|
|
76
97
|
|
|
@@ -145,6 +145,20 @@ _EXAMPLE_INPUT_HINTS: dict[str, dict[str, Any]] = {
|
|
|
145
145
|
# Blank dashboard creation requires a typed params envelope. Keep the
|
|
146
146
|
# generated destructive example runnable with the explicit approval flag.
|
|
147
147
|
"dashboard.create-blank": {"params": {"dataview_id": 1}},
|
|
148
|
+
# The draft/published data routes take a WidgetDataSpec keyed by the
|
|
149
|
+
# widget UUID (read it from ``dashboard canvas get``), not a SQL string.
|
|
150
|
+
"dashboard.data.draft": {"widget_id": "550e8400-e29b-41d4-a716-446655440000"},
|
|
151
|
+
"dashboard.data.published": {"widget_id": "550e8400-e29b-41d4-a716-446655440000"},
|
|
152
|
+
# ``descriptor`` is a baked/1 QueryDescriptor discriminated by ``kind``
|
|
153
|
+
# (group | scalar | rate | detail | options | range); an empty object is
|
|
154
|
+
# rejected. A scalar row count runs against any dashboard.
|
|
155
|
+
"dashboard.query": {"body": {"params": {"descriptor": {"kind": "scalar", "agg": "count"}}}},
|
|
156
|
+
# ``path`` is a bare field name (title | intent | theme | pages | filters),
|
|
157
|
+
# not a JSON pointer, and an ``intent`` value must be at least 10 chars; a
|
|
158
|
+
# title rename is the smallest patch that runs.
|
|
159
|
+
"dashboard.update": {
|
|
160
|
+
"patch": [{"op": "replace", "path": "title", "value": "Renamed dashboard"}]
|
|
161
|
+
},
|
|
148
162
|
}
|
|
149
163
|
|
|
150
164
|
|
|
@@ -321,6 +321,37 @@ def map_sdk_exception(
|
|
|
321
321
|
details=dict(getattr(exc, "details", {}) or {}),
|
|
322
322
|
)
|
|
323
323
|
|
|
324
|
+
errors = getattr(exc, "errors", None)
|
|
325
|
+
if type(exc).__name__ == "ValidationError" and callable(errors):
|
|
326
|
+
# A pydantic validation failure: say which fields, not just the class
|
|
327
|
+
# name, or the operator cannot tell what was wrong with the call.
|
|
328
|
+
try:
|
|
329
|
+
raw_errors = errors(include_url=False, include_input=False)
|
|
330
|
+
except TypeError:
|
|
331
|
+
raw_errors = errors()
|
|
332
|
+
summary = [
|
|
333
|
+
{
|
|
334
|
+
"loc": ".".join(str(part) for part in item.get("loc", ())),
|
|
335
|
+
"type": item.get("type"),
|
|
336
|
+
"msg": item.get("msg"),
|
|
337
|
+
}
|
|
338
|
+
for item in list(raw_errors)[:10]
|
|
339
|
+
]
|
|
340
|
+
return CliError(
|
|
341
|
+
code=CODE_API_ERROR,
|
|
342
|
+
message=(
|
|
343
|
+
f"The SDK could not validate {getattr(exc, 'title', 'the payload')} "
|
|
344
|
+
"against its model."
|
|
345
|
+
),
|
|
346
|
+
exit_status=EXIT_API,
|
|
347
|
+
hint="Compare the listed fields with 'mammoth schema get COMMAND_ID'.",
|
|
348
|
+
details={
|
|
349
|
+
"exception_type": "ValidationError",
|
|
350
|
+
"model": getattr(exc, "title", None),
|
|
351
|
+
"validation_errors": summary,
|
|
352
|
+
},
|
|
353
|
+
)
|
|
354
|
+
|
|
324
355
|
return CliError(
|
|
325
356
|
code=CODE_API_ERROR,
|
|
326
357
|
message="The Mammoth operation failed unexpectedly.",
|
|
@@ -157,6 +157,14 @@ POSITIONAL_OVERRIDES: dict[str, tuple[PositionalSpec, ...]] = {
|
|
|
157
157
|
"dashboard.templates.use": (
|
|
158
158
|
PositionalSpec(name="slug", type=str, required=True, help="Template slug."),
|
|
159
159
|
),
|
|
160
|
+
# The widget UUID is a WidgetDataSpec field, read from ``--input`` with the
|
|
161
|
+
# optional filters; only the dashboard is addressed positionally.
|
|
162
|
+
"dashboard.data.draft": (
|
|
163
|
+
PositionalSpec(name="dashboard_id", type=int, required=True, help="ID of the dashboard."),
|
|
164
|
+
),
|
|
165
|
+
"dashboard.data.published": (
|
|
166
|
+
PositionalSpec(name="dashboard_id", type=int, required=True, help="ID of the dashboard."),
|
|
167
|
+
),
|
|
160
168
|
"dashboard.tags.merge": (
|
|
161
169
|
PositionalSpec(name="tag_id", type=int, required=True, help="ID of the source tag."),
|
|
162
170
|
),
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mammoth-cli"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.14"
|
|
4
4
|
description = "Command-line interface for the Mammoth Analytics platform"
|
|
5
5
|
authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "LicenseRef-Proprietary"
|
|
8
8
|
requires-python = ">=3.12,<3.15"
|
|
9
9
|
dependencies = [
|
|
10
|
-
"mammoth-io (>=0.7.
|
|
10
|
+
"mammoth-io (>=0.7.6,<0.8)",
|
|
11
11
|
"typer (>=0.27,<0.28)",
|
|
12
12
|
"rich (>=15,<16)",
|
|
13
13
|
"platformdirs (>=4.10,<5)",
|
|
@@ -738,8 +738,8 @@ commands:
|
|
|
738
738
|
required_fixture_guard: null
|
|
739
739
|
secret_fields: []
|
|
740
740
|
human_example: mammoth dashboard data draft DASHBOARD_ID --help
|
|
741
|
-
agent_example: 'mammoth dashboard data draft 123 --input ''{"
|
|
742
|
-
|
|
741
|
+
agent_example: 'mammoth dashboard data draft 123 --input ''{"widget_id": "550e8400-e29b-41d4-a716-446655440000"}''
|
|
742
|
+
--output json --no-input'
|
|
743
743
|
unit_tests:
|
|
744
744
|
- UT-DASHBOARD-DATA-DRAFT
|
|
745
745
|
contract_tests:
|
|
@@ -779,8 +779,8 @@ commands:
|
|
|
779
779
|
required_fixture_guard: null
|
|
780
780
|
secret_fields: []
|
|
781
781
|
human_example: mammoth dashboard data published DASHBOARD_ID --help
|
|
782
|
-
agent_example: 'mammoth dashboard data published 123 --input ''{"
|
|
783
|
-
|
|
782
|
+
agent_example: 'mammoth dashboard data published 123 --input ''{"widget_id": "550e8400-e29b-41d4-a716-446655440000"}''
|
|
783
|
+
--output json --no-input'
|
|
784
784
|
unit_tests:
|
|
785
785
|
- UT-DASHBOARD-DATA-PUBLISHED
|
|
786
786
|
contract_tests:
|
|
@@ -1398,7 +1398,9 @@ commands:
|
|
|
1398
1398
|
- CT-DASHBOARD-PDF-EXPORT-ERROR
|
|
1399
1399
|
draft_test: null
|
|
1400
1400
|
undo_test: null
|
|
1401
|
-
known_restrictions:
|
|
1401
|
+
known_restrictions: Backend requires params.data to be the browser-hydrated DashboardData map
|
|
1402
|
+
(pre-rendered widget results); the server stores only query descriptors and cannot rebuild
|
|
1403
|
+
it, so a PDF cannot be produced from the CLI alone.
|
|
1402
1404
|
reviewed_by: primary
|
|
1403
1405
|
- command_id: dashboard.published-data-by-url
|
|
1404
1406
|
command_path: dashboard published-data-by-url
|
|
@@ -2415,8 +2417,8 @@ commands:
|
|
|
2415
2417
|
required_fixture_guard: null
|
|
2416
2418
|
secret_fields: []
|
|
2417
2419
|
human_example: mammoth dashboard query DASHBOARD_ID --help
|
|
2418
|
-
agent_example: 'mammoth dashboard query 123 --input ''{"body": {"params": {"descriptor": {
|
|
2419
|
-
json --no-input'
|
|
2420
|
+
agent_example: 'mammoth dashboard query 123 --input ''{"body": {"params": {"descriptor": {"kind": "scalar",
|
|
2421
|
+
"agg": "count"}}}}'' --output json --no-input'
|
|
2420
2422
|
unit_tests:
|
|
2421
2423
|
- UT-DASHBOARD-QUERY
|
|
2422
2424
|
contract_tests:
|
|
@@ -3999,8 +4001,8 @@ commands:
|
|
|
3999
4001
|
required_fixture_guard: null
|
|
4000
4002
|
secret_fields: []
|
|
4001
4003
|
human_example: mammoth dashboard update DASHBOARD_ID --help
|
|
4002
|
-
agent_example: 'mammoth dashboard update 123 --input ''{"patch": [{"op": "
|
|
4003
|
-
"
|
|
4004
|
+
agent_example: 'mammoth dashboard update 123 --input ''{"patch": [{"op": "replace", "path": "title", "value":
|
|
4005
|
+
"Renamed dashboard"}]}'' --output json --no-input'
|
|
4004
4006
|
unit_tests:
|
|
4005
4007
|
- UT-DASHBOARD-UPDATE
|
|
4006
4008
|
contract_tests:
|