mammoth-cli 2.0.39__tar.gz → 2.0.40__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.39 → mammoth_cli-2.0.40}/PKG-INFO +2 -2
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +8 -4
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +2 -2
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +33 -33
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +27 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +7 -3
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/dashboard.py +4 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/schema.py +1 -1
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/view_ops.py +83 -4
- mammoth_cli-2.0.40/mammoth_cli/services/dashboard_pages.py +136 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/pyproject.toml +2 -2
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/view.yaml +3 -2
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/.gitignore +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/LICENSE +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/README.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/view.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/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.40
|
|
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.18
|
|
21
21
|
Requires-Dist: platformdirs<5,>=4.10
|
|
22
22
|
Requires-Dist: pydantic<3,>=2.13
|
|
23
23
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mammoth-cli
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.40
|
|
4
4
|
description: "Use Mammoth Analytics from a terminal: install or authenticate the CLI, discover its live command contract, and safely manage projects, data, views, pipelines (join, merge, pivot, filter, clean), dashboards, exports, and handoffs."
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -104,14 +104,18 @@ dashboard from t_a and t_b"). Work it out from the data before you build:
|
|
|
104
104
|
case and padding (`text`), no blanks (`set-values`, `filter`).
|
|
105
105
|
4. Act on every `column_warnings` entry for a column the deliverable uses:
|
|
106
106
|
run its `fix` (`convert-type` to `NUMERIC` or `DATE`; the values that are
|
|
107
|
-
not numbers become empty)
|
|
108
|
-
|
|
107
|
+
not numbers become empty). A text `price` cannot be summed on a dashboard.
|
|
108
|
+
Then decide on each `blank_values` entry: fill, filter, or keep. Write one
|
|
109
|
+
line for each in your report (the column, the count, what you did and
|
|
110
|
+
why). A blank that you saw but did not mention is a miss.
|
|
109
111
|
5. `view transform join` the lookup view into the main view (`LEFT`). The
|
|
110
112
|
result's `join_check` gives `match_rate`, `unmatched_rows` and
|
|
111
113
|
`unmatched_keys`; put them in your report, and stop to compare the keys
|
|
112
114
|
if more than a few rows found no match.
|
|
113
115
|
6. Build the dashboard from the joined view
|
|
114
|
-
([dashboards](references/recipes/dashboards.md)).
|
|
116
|
+
([dashboards](references/recipes/dashboards.md)). If the data has money,
|
|
117
|
+
show it: add `revenue` (`math`, `qty * price`, `new_column`) and chart
|
|
118
|
+
its sum. Do not sum a unit price.
|
|
115
119
|
|
|
116
120
|
For the defaults that most pipelines use (new column or overwrite, `LEFT`
|
|
117
121
|
joins, date steps), see
|
|
@@ -110,7 +110,7 @@ Checkpoint Alert are the `view data-check` and `view checkpoint` families.
|
|
|
110
110
|
| Turn wide columns into label/value rows | Unpivot | `unnest` |
|
|
111
111
|
| Read fields out of a JSON column | Extract JSON | `json-extract` |
|
|
112
112
|
| Classify, tag or summarise rows with AI | Generative AI | `ai` |
|
|
113
|
-
| One SQL query over the view | AI SQL Query | `add-sql` (replaces the view's columns), `generate-sql` (from plain words) |
|
|
113
|
+
| One SQL query over the view | AI SQL Query | `add-sql` (replaces the view's columns), `generate-sql` (writes the query from plain words; apply it with `add-sql`) |
|
|
114
114
|
| Copy rows into another dataset, refreshed with the pipeline | Send to Dataset | `view export dataset` (not a `view transform`) |
|
|
115
115
|
|
|
116
116
|
`join` or `lookup`: `join` adds the chosen columns from every matching row
|
|
@@ -140,4 +140,4 @@ Ran once: `workflow.create`, `workflow.delete`, `workflow.get`, `workflow.graph`
|
|
|
140
140
|
|
|
141
141
|
Ran once: `workspace.app-usage`, `workspace.get`, `workspace.list`, `workspace.segment.list`, `workspace.segment.update`, `workspace.storage-breakdown`, `workspace.user.list`
|
|
142
142
|
|
|
143
|
-
Evidence collected on CLI releases 1.1.5 through 2.0.
|
|
143
|
+
Evidence collected on CLI releases 1.1.5 through 2.0.40; each row's release is recorded in `docs/release-capability-matrix.json` (`evidence_version`). A row that ran on an older release has not been re-run since unless its note says so. Details: `docs/capability-evidence/` in the repository.
|
|
@@ -11,7 +11,7 @@ Status meanings:
|
|
|
11
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
12
|
- Commands not listed under a family are untried.
|
|
13
13
|
|
|
14
|
-
The typed `view transform *` commands all submit through `view.task.add
|
|
14
|
+
The typed `view transform *` commands all submit through `view.task.add` (`rename-columns` and `sort` through `view.update`); its matrix row names the transformations that ran end to end and were read back against a known answer: `add-column`, `add-sql`, `ai`, `bulk-replace`, `combine-columns`, `convert-type`, `copy-columns`, `crosstab`, `date-diff`, `delete-columns`, `discard-duplicates`, `extract-date`, `fill-missing`, `filter`, `generate-sql`, `increment-date`, `join`, `json-extract`, `limit-rows`, `lookup`, `math`, `pivot`, `rename-columns`, `replace`, `set-values`, `small-large`, `sort`, `split`, `substring`, `text`, `unnest`, `window`. A transformation not named there has the same untried status as any other command.
|
|
15
15
|
|
|
16
16
|
## Coverage by family
|
|
17
17
|
|
|
@@ -118,4 +118,4 @@ Ran once: `view.active-user.list`, `view.active-user.mark`, `view.ai.generate-da
|
|
|
118
118
|
| `view.data-check.update` | observed blocker | backend_error: PATCH with the schema's documented {op: command, path: enable/disable, value: null} shape returns HTTP 500 empty body (CLI outcome_unknown, exit 7) while the mutatio |
|
|
119
119
|
| `view.export.publish-db-update` | CLI defect fixed, untried since | 2.0.16 (example value is the documented {"odbc_type": "postgres"} object (a bare string is rejected)) |
|
|
120
120
|
|
|
121
|
-
Evidence collected on CLI releases 1.1.5 through 2.0.
|
|
121
|
+
Evidence collected on CLI releases 1.1.5 through 2.0.40; each row's release is recorded in `docs/release-capability-matrix.json` (`evidence_version`). A row that ran on an older release has not been re-run since unless its note says so. Details: `docs/capability-evidence/` in the repository.
|
|
@@ -762,7 +762,7 @@ Example: `mammoth view task add 123 --input '{"task_spec": {"DATAVIEW_ID": 123,
|
|
|
762
762
|
|
|
763
763
|
Result: `ViewTaskAddResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
764
764
|
|
|
765
|
-
Status on release: ran once on CLI 2.0.
|
|
765
|
+
Status on release: ran once on CLI 2.0.40 — golden-data check golden-20260919 (CLI 2.0.18): typed transforms bulk-replace, convert-type, discard-duplicates, filter, join, pivot, set-values, text each run once on an owned fixture on release and read back with view data get against a known answer (values…
|
|
766
766
|
|
|
767
767
|
### `view.task.delete`
|
|
768
768
|
|
|
@@ -822,7 +822,7 @@ Example: `mammoth view transform add-column 123 --input '{"name": "Revenue repor
|
|
|
822
822
|
|
|
823
823
|
Result: `ViewTransformAddColumnResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
824
824
|
|
|
825
|
-
Status on release:
|
|
825
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
826
826
|
|
|
827
827
|
### `view.transform.add-sql`
|
|
828
828
|
|
|
@@ -832,7 +832,7 @@ Example: `mammoth view transform add-sql 123 --input '{"query": "SELECT region,
|
|
|
832
832
|
|
|
833
833
|
Result: `ViewTransformAddSqlResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
834
834
|
|
|
835
|
-
Status on release: ran once on CLI 2.0.
|
|
835
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
836
836
|
|
|
837
837
|
### `view.transform.ai`
|
|
838
838
|
|
|
@@ -842,7 +842,7 @@ Example: `mammoth view transform ai 123 --input '{"prompt": "Summarize revenue b
|
|
|
842
842
|
|
|
843
843
|
Result: `ViewTransformAiResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
844
844
|
|
|
845
|
-
Status on release:
|
|
845
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
846
846
|
|
|
847
847
|
### `view.transform.bulk-replace`
|
|
848
848
|
|
|
@@ -852,7 +852,7 @@ Example: `mammoth view transform bulk-replace 123 --input '{"columns": ["Status"
|
|
|
852
852
|
|
|
853
853
|
Result: `ViewTransformBulkReplaceResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
854
854
|
|
|
855
|
-
Status on release: ran once on CLI 2.0.
|
|
855
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
856
856
|
|
|
857
857
|
### `view.transform.combine-columns`
|
|
858
858
|
|
|
@@ -862,7 +862,7 @@ Example: `mammoth view transform combine-columns 123 --input '{"sources": ["Stat
|
|
|
862
862
|
|
|
863
863
|
Result: `ViewTransformCombineColumnsResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
864
864
|
|
|
865
|
-
Status on release:
|
|
865
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
866
866
|
|
|
867
867
|
### `view.transform.convert-type`
|
|
868
868
|
|
|
@@ -872,7 +872,7 @@ Example: `mammoth view transform convert-type 123 --input '{"conversions": [{"co
|
|
|
872
872
|
|
|
873
873
|
Result: `ViewTransformConvertTypeResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
874
874
|
|
|
875
|
-
Status on release: ran once on CLI 2.0.
|
|
875
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
876
876
|
|
|
877
877
|
### `view.transform.copy-columns`
|
|
878
878
|
|
|
@@ -882,7 +882,7 @@ Example: `mammoth view transform copy-columns 123 --input '{"copies": [{"source"
|
|
|
882
882
|
|
|
883
883
|
Result: `ViewTransformCopyColumnsResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
884
884
|
|
|
885
|
-
Status on release:
|
|
885
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
886
886
|
|
|
887
887
|
### `view.transform.crosstab`
|
|
888
888
|
|
|
@@ -892,7 +892,7 @@ Example: `mammoth view transform crosstab 123 --input '{"rows": ["sample"], "piv
|
|
|
892
892
|
|
|
893
893
|
Result: `ViewTransformCrosstabResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
894
894
|
|
|
895
|
-
Status on release:
|
|
895
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
896
896
|
|
|
897
897
|
### `view.transform.date-diff`
|
|
898
898
|
|
|
@@ -902,7 +902,7 @@ Example: `mammoth view transform date-diff 123 --input '{"component": "YEAR", "s
|
|
|
902
902
|
|
|
903
903
|
Result: `ViewTransformDateDiffResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
904
904
|
|
|
905
|
-
Status on release:
|
|
905
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
906
906
|
|
|
907
907
|
### `view.transform.delete-columns`
|
|
908
908
|
|
|
@@ -912,7 +912,7 @@ Example: `mammoth view transform delete-columns 123 --input '{"columns": ["Statu
|
|
|
912
912
|
|
|
913
913
|
Result: `ViewTransformDeleteColumnsResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
914
914
|
|
|
915
|
-
Status on release:
|
|
915
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
916
916
|
|
|
917
917
|
### `view.transform.discard-duplicates`
|
|
918
918
|
|
|
@@ -922,7 +922,7 @@ Example: `mammoth view transform discard-duplicates 123 --input '{"dataset_id":
|
|
|
922
922
|
|
|
923
923
|
Result: `ViewTransformDiscardDuplicatesResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
924
924
|
|
|
925
|
-
Status on release: ran once on CLI 2.0.
|
|
925
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
926
926
|
|
|
927
927
|
### `view.transform.extract-date`
|
|
928
928
|
|
|
@@ -932,7 +932,7 @@ Example: `mammoth view transform extract-date 123 --input '{"column": "Status",
|
|
|
932
932
|
|
|
933
933
|
Result: `ViewTransformExtractDateResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
934
934
|
|
|
935
|
-
Status on release: ran once on CLI 2.0.
|
|
935
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
936
936
|
|
|
937
937
|
### `view.transform.fill-missing`
|
|
938
938
|
|
|
@@ -942,7 +942,7 @@ Example: `mammoth view transform fill-missing 123 --input '{"column": "Status",
|
|
|
942
942
|
|
|
943
943
|
Result: `ViewTransformFillMissingResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
944
944
|
|
|
945
|
-
Status on release: ran once on CLI 2.0.
|
|
945
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
946
946
|
|
|
947
947
|
### `view.transform.filter`
|
|
948
948
|
|
|
@@ -952,7 +952,7 @@ Example: `mammoth view transform filter 123 --input '{"condition": {"column": "S
|
|
|
952
952
|
|
|
953
953
|
Result: `ViewTransformFilterResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
954
954
|
|
|
955
|
-
Status on release: ran once on CLI 2.0.
|
|
955
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
956
956
|
|
|
957
957
|
### `view.transform.generate-sql`
|
|
958
958
|
|
|
@@ -962,7 +962,7 @@ Example: `mammoth view transform generate-sql 123 --input '{"intent": "Summarize
|
|
|
962
962
|
|
|
963
963
|
Result: `ViewTransformGenerateSqlResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
964
964
|
|
|
965
|
-
Status on release:
|
|
965
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
966
966
|
|
|
967
967
|
### `view.transform.increment-date`
|
|
968
968
|
|
|
@@ -972,7 +972,7 @@ Example: `mammoth view transform increment-date 123 --input '{"column": "Status"
|
|
|
972
972
|
|
|
973
973
|
Result: `ViewTransformIncrementDateResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
974
974
|
|
|
975
|
-
Status on release:
|
|
975
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
976
976
|
|
|
977
977
|
### `view.transform.join`
|
|
978
978
|
|
|
@@ -982,7 +982,7 @@ Example: `mammoth view transform join 123 --input '{"foreign_view": 1, "join_typ
|
|
|
982
982
|
|
|
983
983
|
Result: `ViewTransformJoinResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
984
984
|
|
|
985
|
-
Status on release: ran once on CLI 2.0.
|
|
985
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
986
986
|
|
|
987
987
|
### `view.transform.json-extract`
|
|
988
988
|
|
|
@@ -992,7 +992,7 @@ Example: `mammoth view transform json-extract 123 --input '{"column": "Status",
|
|
|
992
992
|
|
|
993
993
|
Result: `ViewTransformJsonExtractResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
994
994
|
|
|
995
|
-
Status on release:
|
|
995
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
996
996
|
|
|
997
997
|
### `view.transform.limit-rows`
|
|
998
998
|
|
|
@@ -1002,7 +1002,7 @@ Example: `mammoth view transform limit-rows 123 --input '{"n": 1, "dataset_id":
|
|
|
1002
1002
|
|
|
1003
1003
|
Result: `ViewTransformLimitRowsResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1004
1004
|
|
|
1005
|
-
Status on release:
|
|
1005
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1006
1006
|
|
|
1007
1007
|
### `view.transform.lookup`
|
|
1008
1008
|
|
|
@@ -1012,7 +1012,7 @@ Example: `mammoth view transform lookup 123 --input '{"source": "Status", "looku
|
|
|
1012
1012
|
|
|
1013
1013
|
Result: `ViewTransformLookupResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1014
1014
|
|
|
1015
|
-
Status on release:
|
|
1015
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1016
1016
|
|
|
1017
1017
|
### `view.transform.math`
|
|
1018
1018
|
|
|
@@ -1022,7 +1022,7 @@ Example: `mammoth view transform math 123 --input '{"expression": "price * quant
|
|
|
1022
1022
|
|
|
1023
1023
|
Result: `ViewTransformMathResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1024
1024
|
|
|
1025
|
-
Status on release:
|
|
1025
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1026
1026
|
|
|
1027
1027
|
### `view.transform.pivot`
|
|
1028
1028
|
|
|
@@ -1032,7 +1032,7 @@ Example: `mammoth view transform pivot 123 --input '{"group_by": ["sample"], "ag
|
|
|
1032
1032
|
|
|
1033
1033
|
Result: `ViewTransformPivotResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1034
1034
|
|
|
1035
|
-
Status on release: ran once on CLI 2.0.
|
|
1035
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1036
1036
|
|
|
1037
1037
|
### `view.transform.rename-columns`
|
|
1038
1038
|
|
|
@@ -1042,7 +1042,7 @@ Example: `mammoth view transform rename-columns 123 --input '{"renames": {"cust_
|
|
|
1042
1042
|
|
|
1043
1043
|
Result: `ViewTransformRenameColumnsResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
1044
1044
|
|
|
1045
|
-
Status on release:
|
|
1045
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1046
1046
|
|
|
1047
1047
|
### `view.transform.replace`
|
|
1048
1048
|
|
|
@@ -1052,7 +1052,7 @@ Example: `mammoth view transform replace 123 --input '{"columns": ["Status"], "f
|
|
|
1052
1052
|
|
|
1053
1053
|
Result: `ViewTransformReplaceResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1054
1054
|
|
|
1055
|
-
Status on release:
|
|
1055
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1056
1056
|
|
|
1057
1057
|
### `view.transform.set-values`
|
|
1058
1058
|
|
|
@@ -1062,7 +1062,7 @@ Example: `mammoth view transform set-values 123 --input '{"values": [{"value": "
|
|
|
1062
1062
|
|
|
1063
1063
|
Result: `ViewTransformSetValuesResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1064
1064
|
|
|
1065
|
-
Status on release: ran once on CLI 2.0.
|
|
1065
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1066
1066
|
|
|
1067
1067
|
### `view.transform.small-large`
|
|
1068
1068
|
|
|
@@ -1072,7 +1072,7 @@ Example: `mammoth view transform small-large 123 --input '{"function": "SMALL",
|
|
|
1072
1072
|
|
|
1073
1073
|
Result: `ViewTransformSmallLargeResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1074
1074
|
|
|
1075
|
-
Status on release:
|
|
1075
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1076
1076
|
|
|
1077
1077
|
### `view.transform.sort`
|
|
1078
1078
|
|
|
@@ -1082,7 +1082,7 @@ Example: `mammoth view transform sort 123 --input '{"order_by": [["Revenue", "DE
|
|
|
1082
1082
|
|
|
1083
1083
|
Result: `ViewTransformSortResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
1084
1084
|
|
|
1085
|
-
Status on release:
|
|
1085
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1086
1086
|
|
|
1087
1087
|
### `view.transform.split`
|
|
1088
1088
|
|
|
@@ -1092,7 +1092,7 @@ Example: `mammoth view transform split 123 --input '{"column": "Status", "delimi
|
|
|
1092
1092
|
|
|
1093
1093
|
Result: `ViewTransformSplitResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1094
1094
|
|
|
1095
|
-
Status on release:
|
|
1095
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1096
1096
|
|
|
1097
1097
|
### `view.transform.substring`
|
|
1098
1098
|
|
|
@@ -1102,7 +1102,7 @@ Example: `mammoth view transform substring 123 --input '{"column": "Status", "da
|
|
|
1102
1102
|
|
|
1103
1103
|
Result: `ViewTransformSubstringResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1104
1104
|
|
|
1105
|
-
Status on release:
|
|
1105
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1106
1106
|
|
|
1107
1107
|
### `view.transform.text`
|
|
1108
1108
|
|
|
@@ -1112,7 +1112,7 @@ Example: `mammoth view transform text 123 --input '{"columns": ["Status"], "data
|
|
|
1112
1112
|
|
|
1113
1113
|
Result: `ViewTransformTextResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1114
1114
|
|
|
1115
|
-
Status on release: ran once on CLI 2.0.
|
|
1115
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1116
1116
|
|
|
1117
1117
|
### `view.transform.unnest`
|
|
1118
1118
|
|
|
@@ -1122,7 +1122,7 @@ Example: `mammoth view transform unnest 123 --input '{"columns": ["Status"], "da
|
|
|
1122
1122
|
|
|
1123
1123
|
Result: `ViewTransformUnnestResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1124
1124
|
|
|
1125
|
-
Status on release:
|
|
1125
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1126
1126
|
|
|
1127
1127
|
### `view.transform.window`
|
|
1128
1128
|
|
|
@@ -1132,7 +1132,7 @@ Example: `mammoth view transform window 123 --input '{"function": "ROW_NUMBER",
|
|
|
1132
1132
|
|
|
1133
1133
|
Result: `ViewTransformWindowResult`; mutation `reversible_pipeline`, confirmation `none`, wait policy `always_wait`.
|
|
1134
1134
|
|
|
1135
|
-
Status on release: ran once on CLI 2.0.
|
|
1135
|
+
Status on release: ran once on CLI 2.0.40 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
|
|
1136
1136
|
|
|
1137
1137
|
### `view.trash`
|
|
1138
1138
|
|
{mammoth_cli-2.0.39 → mammoth_cli-2.0.40}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md
RENAMED
|
@@ -43,7 +43,7 @@ anything else fails with `invalid_condition` before any request is sent.
|
|
|
43
43
|
| `view transform filter` | `filter_type` | `SHOW` (keep matches, default), `REMOVE` |
|
|
44
44
|
| `view transform text` | `case` | `UPPER`, `LOWER`, `TITLE`; `trim`: true/false |
|
|
45
45
|
| `view transform convert-type` | `conversions[].to` | `TEXT`, `NUMERIC`, `DATE` |
|
|
46
|
-
| `view transform fill-missing` | `direction` | `
|
|
46
|
+
| `view transform fill-missing` | `direction` | `FIRST_VALUE` (forward fill: previous row), `LAST_VALUE` (back-fill: next row) |
|
|
47
47
|
| `view transform join` | `join_type` | `INNER`, `LEFT`, `RIGHT`, `OUTER` |
|
|
48
48
|
| `view transform set-values` | `column_type` (new column) | `TEXT`, `NUMERIC`, `DATE` |
|
|
49
49
|
|
|
@@ -65,7 +65,33 @@ correct aggregation for a "distinct people" card under a date filter);
|
|
|
65
65
|
ID --input '{"body": {"params": {"pages": [{"title": ..., "focus": {...},
|
|
66
66
|
"charts": [...]}]}}}'` adds a page, but that route runs through the LLM
|
|
67
67
|
guard and may drop a unit it cannot evidence (it says so in `data.message`);
|
|
68
|
-
`canvas save` keeps what you wrote.
|
|
68
|
+
`canvas save` keeps what you wrote. When the route refuses a chart (for
|
|
69
|
+
example a `pie` that the data does not support), `data.chart_check.refused`
|
|
70
|
+
names it. A new page that got no charts is removed, and
|
|
71
|
+
`data.chart_check.removed_pages` lists it. Add a chart of a different kind
|
|
72
|
+
(`hbar`, `line`, `table`) for that page.
|
|
73
|
+
|
|
74
|
+
## Put the money on the board
|
|
75
|
+
|
|
76
|
+
If the data has money (a price, an amount, revenue or cost), the dashboard
|
|
77
|
+
must show it. A board that shows only counts or quantities has left out the
|
|
78
|
+
number the user most likely wants.
|
|
79
|
+
|
|
80
|
+
- A money column must be `NUMERIC` first. `view data get` flags a money
|
|
81
|
+
column that is stored as text in `column_warnings`.
|
|
82
|
+
- A unit price is not revenue. Do not sum a price. If the data has a
|
|
83
|
+
quantity and a unit price, add a revenue column before you build the
|
|
84
|
+
board, then chart the sum of that column:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
mammoth view transform math VIEW_ID --project PROJECT_ID \
|
|
88
|
+
--input '{"dataset_id":DATASET_ID,"expression":"qty * price","new_column":"revenue"}'
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
- Put revenue in a KPI (`focus.kpis`, `agg` `sum`, `unit.prefix` for the
|
|
92
|
+
currency) and in one or more charts (revenue by product, by segment, by
|
|
93
|
+
month). Rows with an empty price give an empty revenue. Say how many there
|
|
94
|
+
are in your report.
|
|
69
95
|
|
|
70
96
|
**Read the bindings back, then the numbers.** `dashboard canvas get` returns
|
|
71
97
|
`data.meta.figures` — `"p1:kpi:2": {"descriptors": {"value": "<id>"}}` per
|
|
@@ -21,9 +21,10 @@ Prefer typed operations such as convert-type, fill-missing, replace, join,
|
|
|
21
21
|
lookup, filter and math only when the live schema
|
|
22
22
|
lists them. Pick the operation by what it does, not by its name:
|
|
23
23
|
|
|
24
|
-
- `fill-missing` copies
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
- `fill-missing` copies an adjacent row's value into blanks, in the
|
|
25
|
+
`order_by` order. `direction` `FIRST_VALUE` takes the previous row's value
|
|
26
|
+
(forward fill, the usual choice); `LAST_VALUE` takes the next row's value
|
|
27
|
+
(back-fill). It cannot write a literal. To fill blanks with a constant (for example `0`), use `set-values`
|
|
27
28
|
on the existing column with an `IS_EMPTY` condition:
|
|
28
29
|
|
|
29
30
|
```bash
|
|
@@ -97,6 +98,9 @@ as defaults, and let the user's request override them:
|
|
|
97
98
|
first. Check the result on a few rows.
|
|
98
99
|
- Convert several columns to the same type in one `convert-type` call (one
|
|
99
100
|
`conversions` entry for each column), not one call for each column.
|
|
101
|
+
Upload already types numbers and ISO dates, so read the types (`view get`)
|
|
102
|
+
first and convert only the columns that are wrong. The CLI skips a column
|
|
103
|
+
that already has the type (`skipped` in the result).
|
|
100
104
|
- Remove duplicates near the end, after the cleanup and joins, so the check
|
|
101
105
|
uses the final columns.
|
|
102
106
|
- `filter` also takes a plain-language `prompt` instead of a `condition`.
|
|
@@ -36,6 +36,7 @@ from mammoth_cli.runtime.invocation import Invocation
|
|
|
36
36
|
from mammoth_cli.runtime.session import open_service, require_project
|
|
37
37
|
from mammoth_cli.services.argspec import arg_spec
|
|
38
38
|
from mammoth_cli.services.command_contract import bind_command_inputs
|
|
39
|
+
from mammoth_cli.services.dashboard_pages import check_added_pages
|
|
39
40
|
from mammoth_cli.services.positionals import resolve_positionals
|
|
40
41
|
|
|
41
42
|
HandlerResult = tuple[Any, dict[str, Any]]
|
|
@@ -671,6 +672,9 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
|
|
|
671
672
|
with open_service(invocation) as (service, auth):
|
|
672
673
|
data = service.call(_symbol(invocation), **kwargs)
|
|
673
674
|
data = _resolve_job(service, invocation, data)
|
|
675
|
+
if invocation.command_id == "dashboard.pages.add" and "body" in kwargs:
|
|
676
|
+
requested = kwargs["body"].get("params", {}).get("pages", [])
|
|
677
|
+
data = check_added_pages(service, positionals["dashboard_id"], requested, data)
|
|
674
678
|
return data, _meta(invocation, auth.workspace_id)
|
|
675
679
|
|
|
676
680
|
|
|
@@ -109,7 +109,7 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
109
109
|
"filter rows keep drop exclude remove delete rows where condition subset"
|
|
110
110
|
),
|
|
111
111
|
"view.transform.generate-sql": (
|
|
112
|
-
"generate sql from natural language intent question
|
|
112
|
+
"generate write sql query from natural language intent question"
|
|
113
113
|
),
|
|
114
114
|
"view.transform.increment-date": "add subtract days months years to a date column shift",
|
|
115
115
|
"view.transform.join": (
|
|
@@ -19,11 +19,13 @@ enum-typed fields are forwarded as the plain string given on ``--input``.
|
|
|
19
19
|
|
|
20
20
|
from __future__ import annotations
|
|
21
21
|
|
|
22
|
+
import json
|
|
22
23
|
from collections.abc import Callable
|
|
23
24
|
from typing import Any
|
|
24
25
|
|
|
25
26
|
from mammoth_cli.commands.view import (
|
|
26
27
|
BRIEF_VIEW_FIELDS,
|
|
28
|
+
_dataview_metadata,
|
|
27
29
|
_require_discovery_allowed,
|
|
28
30
|
apply_column_renames,
|
|
29
31
|
brief_view_record,
|
|
@@ -241,13 +243,16 @@ def _dispatch_view(
|
|
|
241
243
|
*,
|
|
242
244
|
before: Callable[[Any, int], Any] | None = None,
|
|
243
245
|
after: Callable[[Any, int, Any, Any], Any] | None = None,
|
|
246
|
+
prepare: Callable[[Any, int, dict[str, Any]], Any] | None = None,
|
|
244
247
|
**kwargs: Any,
|
|
245
248
|
) -> HandlerResult:
|
|
246
249
|
"""Open the service, dispatch a View method call, and build the envelope.
|
|
247
250
|
|
|
248
251
|
``before(service, dataset_id)`` runs ahead of the call and its value is
|
|
249
252
|
handed to ``after(service, dataset_id, state, data)``, which returns the
|
|
250
|
-
result to emit.
|
|
253
|
+
result to emit. ``prepare(service, dataset_id, kwargs)`` may edit the call
|
|
254
|
+
arguments in place; when it returns a value, that value is emitted and no
|
|
255
|
+
call is made. All three need the exact parent; without one they are skipped.
|
|
251
256
|
"""
|
|
252
257
|
# ``dataset_id`` is invocation-local resource context. It is not a View
|
|
253
258
|
# transform argument, but passing it through lets the service fetch the
|
|
@@ -268,6 +273,10 @@ def _dispatch_view(
|
|
|
268
273
|
if dataset_id is None:
|
|
269
274
|
dataset_id = parents.lookup(_profile_name(invocation), auth.workspace_id, view_id)
|
|
270
275
|
require_expected_task_count(service, view_id, dataset_id, document)
|
|
276
|
+
if prepare is not None and dataset_id is not None:
|
|
277
|
+
early = prepare(service, int(dataset_id), kwargs)
|
|
278
|
+
if early is not None:
|
|
279
|
+
return early, _meta(invocation, auth.workspace_id)
|
|
271
280
|
state = before(service, int(dataset_id)) if before and dataset_id is not None else None
|
|
272
281
|
try:
|
|
273
282
|
if dataset_id is None:
|
|
@@ -419,7 +428,13 @@ def reject_pipeline_reference_errors(
|
|
|
419
428
|
"response": data,
|
|
420
429
|
},
|
|
421
430
|
recovery_commands=[
|
|
422
|
-
f"mammoth view task delete {view_id} {task_id} --yes"
|
|
431
|
+
f"mammoth view task delete {view_id} {task_id} --yes"
|
|
432
|
+
+ (
|
|
433
|
+
f" --input '{{\"dataset_id\": {kwargs['dataset_id']}}}'"
|
|
434
|
+
if "dataset_id" in kwargs
|
|
435
|
+
else ""
|
|
436
|
+
)
|
|
437
|
+
for task_id in task_ids
|
|
423
438
|
]
|
|
424
439
|
or [f'mammoth view pipeline items {view_id} --input \'{{"fields": "__full"}}\''],
|
|
425
440
|
)
|
|
@@ -679,7 +694,56 @@ def view_transform_convert_type(invocation: Invocation) -> HandlerResult:
|
|
|
679
694
|
_require_field(document, "conversions")
|
|
680
695
|
assert document is not None
|
|
681
696
|
kwargs = _bind_transform_inputs(invocation, document)
|
|
682
|
-
|
|
697
|
+
project_id = invocation.project
|
|
698
|
+
|
|
699
|
+
def drop_same_type(service: Any, dataset_id: int, call: dict[str, Any]) -> Any:
|
|
700
|
+
# Converting a column to the type it already has puts the pipeline in
|
|
701
|
+
# ref_error ("type mismatch") and every read of the view fails until
|
|
702
|
+
# the task is removed (release, 2026-09-25). Uploads type numbers and
|
|
703
|
+
# ISO dates on their own, so this is easy to hit: skip those entries.
|
|
704
|
+
conversions = call.get("conversions")
|
|
705
|
+
if not isinstance(conversions, list):
|
|
706
|
+
return None
|
|
707
|
+
current = {
|
|
708
|
+
column.get("display_name"): str(column.get("type") or "").upper()
|
|
709
|
+
for column in _dataview_metadata(service, dataset_id, view_id, project_id)
|
|
710
|
+
if isinstance(column, dict)
|
|
711
|
+
}
|
|
712
|
+
kept, skipped = [], []
|
|
713
|
+
for entry in conversions:
|
|
714
|
+
name = entry.get("column") if isinstance(entry, dict) else None
|
|
715
|
+
target = str(entry.get("to") or "").upper() if isinstance(entry, dict) else ""
|
|
716
|
+
if name is not None and target and current.get(name) == target:
|
|
717
|
+
skipped.append({"column": name, "type": target})
|
|
718
|
+
else:
|
|
719
|
+
kept.append(entry)
|
|
720
|
+
if not skipped:
|
|
721
|
+
return None
|
|
722
|
+
if not kept:
|
|
723
|
+
return {
|
|
724
|
+
"status": "no_change",
|
|
725
|
+
"skipped": skipped,
|
|
726
|
+
"note": "Every column already has the requested type; no task was added.",
|
|
727
|
+
}
|
|
728
|
+
call["conversions"] = kept
|
|
729
|
+
skipped_record.extend(skipped)
|
|
730
|
+
return None
|
|
731
|
+
|
|
732
|
+
skipped_record: list[dict[str, Any]] = []
|
|
733
|
+
|
|
734
|
+
def note_skipped(service: Any, dataset_id: int, state: Any, data: Any) -> Any:
|
|
735
|
+
if skipped_record and isinstance(data, dict):
|
|
736
|
+
data = {**data, "skipped": skipped_record}
|
|
737
|
+
return data
|
|
738
|
+
|
|
739
|
+
return _dispatch_view(
|
|
740
|
+
invocation,
|
|
741
|
+
view_id,
|
|
742
|
+
"convert_type",
|
|
743
|
+
prepare=drop_same_type,
|
|
744
|
+
after=note_skipped,
|
|
745
|
+
**kwargs,
|
|
746
|
+
)
|
|
683
747
|
|
|
684
748
|
|
|
685
749
|
def view_transform_copy_columns(invocation: Invocation) -> HandlerResult:
|
|
@@ -775,7 +839,22 @@ def view_transform_generate_sql(invocation: Invocation) -> HandlerResult:
|
|
|
775
839
|
_require_field(document, "intent")
|
|
776
840
|
assert document is not None
|
|
777
841
|
kwargs = _bind_transform_inputs(invocation, document)
|
|
778
|
-
|
|
842
|
+
|
|
843
|
+
def describe(service: Any, dataset_id: int, state: Any, data: Any) -> Any:
|
|
844
|
+
# The route writes and validates a query but adds no task (release,
|
|
845
|
+
# 2026-09-25); a bare string read as "done" by an agent that expected
|
|
846
|
+
# the view to change. Say so, and give the command that applies it.
|
|
847
|
+
if not isinstance(data, str):
|
|
848
|
+
return data
|
|
849
|
+
spec = json.dumps({"dataset_id": dataset_id, "query": data})
|
|
850
|
+
return {
|
|
851
|
+
"sql": data,
|
|
852
|
+
"applied": False,
|
|
853
|
+
"note": "The view is unchanged. Run 'apply' to add the query as a SQL task.",
|
|
854
|
+
"apply": f"mammoth view transform add-sql {view_id} --input '{spec}'",
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
return _dispatch_view(invocation, view_id, "generate_sql", after=describe, **kwargs)
|
|
779
858
|
|
|
780
859
|
|
|
781
860
|
def view_transform_increment_date(invocation: Invocation) -> HandlerResult:
|