mammoth-cli 2.0.70__tar.gz → 2.0.72__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.70 → mammoth_cli-2.0.72}/PKG-INFO +1 -1
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/app.py +16 -1
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +6 -7
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +9 -4
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/schema.py +8 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/view_ops.py +26 -0
- mammoth_cli-2.0.72/mammoth_cli/runtime/verify.py +111 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/pyproject.toml +1 -1
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/dashboard.yaml +4 -4
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/.gitignore +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/LICENSE +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/README.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/view.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/view.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/openapi/openapi.json +0 -0
|
@@ -44,6 +44,7 @@ from mammoth_cli.output.policy import (
|
|
|
44
44
|
from mammoth_cli.runtime import executor, validate
|
|
45
45
|
from mammoth_cli.runtime.invocation import Invocation
|
|
46
46
|
from mammoth_cli.runtime.strict import validate_extra_args
|
|
47
|
+
from mammoth_cli.runtime.verify import with_verify
|
|
47
48
|
from mammoth_cli.services.positionals import PositionalSpec, resolve_positionals
|
|
48
49
|
|
|
49
50
|
OUTPUT_MODES = VALID_OUTPUTS
|
|
@@ -823,7 +824,8 @@ def _execute(invocation: Invocation) -> None:
|
|
|
823
824
|
raise not_implemented_error(invocation.command_id, sdk_symbol)
|
|
824
825
|
if invocation.dry_run:
|
|
825
826
|
return _dry_run(handler, invocation)
|
|
826
|
-
|
|
827
|
+
data, meta = handler(invocation)
|
|
828
|
+
return _apply_verify(invocation.command_id, data), meta
|
|
827
829
|
|
|
828
830
|
executor.run(
|
|
829
831
|
invocation.command_id,
|
|
@@ -835,6 +837,19 @@ def _execute(invocation: Invocation) -> None:
|
|
|
835
837
|
)
|
|
836
838
|
|
|
837
839
|
|
|
840
|
+
def _apply_verify(command_id: str, data: Any) -> Any:
|
|
841
|
+
"""Add the automatic write read-back to a real, mutating, API-backed result.
|
|
842
|
+
|
|
843
|
+
A read command and a command with no reviewed ``sdk_symbol`` (a local or
|
|
844
|
+
not-yet-backed command) are returned unchanged; ``--dry-run`` never
|
|
845
|
+
reaches this at all, since it returns before the handler's real call.
|
|
846
|
+
"""
|
|
847
|
+
record = command_by_id(command_id) or {}
|
|
848
|
+
if record.get("mutation_class") == "read" or not record.get("sdk_symbol"):
|
|
849
|
+
return data
|
|
850
|
+
return with_verify(data)
|
|
851
|
+
|
|
852
|
+
|
|
838
853
|
def _dry_run(handler: Handler, invocation: Invocation) -> tuple[Any, dict[str, Any]]:
|
|
839
854
|
"""Run ``handler`` until its request would leave; report that request.
|
|
840
855
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mammoth-cli
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.72
|
|
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
|
|
|
@@ -81,7 +81,7 @@ mammoth view transform --help # every data transformation
|
|
|
81
81
|
| Change a column's type | `view transform convert-type` |
|
|
82
82
|
| Rename a column, sort the rows (view settings, not tasks) | `view transform rename-columns`, `view transform sort` |
|
|
83
83
|
| Rank, running total, previous row | `view transform window` |
|
|
84
|
-
| A dashboard | `dashboard
|
|
84
|
+
| A dashboard | `dashboard v3 generate`, then `chat edit` ([dashboards](references/recipes/dashboards.md)) |
|
|
85
85
|
| Deliver the rows | `view export csv`, `view export postgres` (and other destinations), `view export dataset` |
|
|
86
86
|
| Run something on a schedule or on new data (refresh, append, alert) | `automation create`: a condition (`at_specific_time`, new file in a folder, ...) and tasks (`run_data_retrieval`, `append_data`, `send_an_alert`, `pull_cloud_files`). `schedule create` only pulls a connector's data. A dataset made from an uploaded file has no source to refresh from; say so. Full recipe, including a known `automation get` backend caveat: [recurring work](references/recipes/scheduling.md) |
|
|
87
87
|
|
|
@@ -122,11 +122,10 @@ dashboard from t_a and t_b"). Work it out from the data before you build:
|
|
|
122
122
|
6. If the data has money, add it before you make the dashboard: `revenue`
|
|
123
123
|
(`math`, `qty * price`, `new_column`), the `fix` in `before_dashboard`.
|
|
124
124
|
A dashboard sees only the columns the view had when it was made.
|
|
125
|
-
7. Build the dashboard from the joined view
|
|
126
|
-
([dashboards](references/recipes/dashboards.md))
|
|
127
|
-
revenue. Do not sum a unit price.
|
|
128
|
-
|
|
129
|
-
report why not.
|
|
125
|
+
7. Build the dashboard from the joined view with one sentence
|
|
126
|
+
([dashboards](references/recipes/dashboards.md)) that charts the sum of
|
|
127
|
+
revenue. Do not sum a unit price. Fix each `deliverable_check` warning,
|
|
128
|
+
or say in the report why not.
|
|
130
129
|
|
|
131
130
|
For the defaults that most pipelines use (new column or overwrite, `LEFT`
|
|
132
131
|
joins, date steps), see
|
|
@@ -2,18 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
`dashboard create` (the legacy AI-generation engine) does not exist as a
|
|
4
4
|
command: it has no handler in current apiv2 (always 404s; historically HTTP
|
|
5
|
-
409 `4DASH012 DASHBOARD_LEGACY_CREATION_RETIRED`).
|
|
6
|
-
|
|
5
|
+
409 `4DASH012 DASHBOARD_LEGACY_CREATION_RETIRED`). Build a board from one
|
|
6
|
+
sentence with `v3 generate`, and change it with `chat edit`; author a canvas by
|
|
7
|
+
hand (`create-blank`, `canvas save`, `pages add`) only when asked to.
|
|
7
8
|
`dashboard source list` is an observed blocker on release (see
|
|
8
9
|
capabilities); verify the view binding with `dashboard get DASHBOARD_ID`
|
|
9
10
|
(`data.dataview_id`) instead.
|
|
10
11
|
|
|
11
12
|
```bash
|
|
12
|
-
mammoth
|
|
13
|
-
mammoth dashboard
|
|
13
|
+
mammoth dashboard v3 generate --input '{"body": {"params": {"intent": "Monthly revenue by region, with top customers", "dataview_id": VIEW_ID}}}'
|
|
14
|
+
mammoth dashboard chat edit DASHBOARD_ID --input '{"body": {"params": {"prompt": "Add a chart of orders by status"}}}'
|
|
14
15
|
mammoth dashboard get DASHBOARD_ID
|
|
15
16
|
```
|
|
16
17
|
|
|
18
|
+
`v3 generate` waits for the bake (about 30 s) and returns the baked canvas;
|
|
19
|
+
`chat edit` returns `changed` and a one-line `message`. Quote one number from
|
|
20
|
+
the board before you report it done.
|
|
21
|
+
|
|
17
22
|
Discover page/widget/publish routes and verify the binding, draft/published
|
|
18
23
|
data and terminal jobs. Use only returned IDs and schema confirmation policy;
|
|
19
24
|
do not invent dashboard JSON or opaque task specs.
|
|
@@ -281,6 +281,14 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
281
281
|
"url app post posts events rows straight in"
|
|
282
282
|
),
|
|
283
283
|
"dataset.create-from-pdf": "pdf table document extract get the table out of into a dataset",
|
|
284
|
+
"dashboard.v3.generate": (
|
|
285
|
+
"create build make new generate dashboard board report from a view description "
|
|
286
|
+
"intent sentence ai combined showing"
|
|
287
|
+
),
|
|
288
|
+
"dashboard.chat.edit": (
|
|
289
|
+
"add change edit update chart charts kpi to an existing dashboard board "
|
|
290
|
+
"by description sentence ai show instead"
|
|
291
|
+
),
|
|
284
292
|
"dashboard.pdf.export": "pdf of a board dashboard download print meeting export",
|
|
285
293
|
"view.checkpoint.create": (
|
|
286
294
|
"stop halt pause pipeline alert notify flag when rows match a rule condition checkpoint"
|
|
@@ -25,6 +25,7 @@ from datetime import UTC, datetime, timedelta
|
|
|
25
25
|
from typing import Any
|
|
26
26
|
|
|
27
27
|
from mammoth_cli.commands.view import (
|
|
28
|
+
_DATAVIEW_GET_SYMBOL,
|
|
28
29
|
_FIND_DATASET_SYMBOL,
|
|
29
30
|
BRIEF_VIEW_FIELDS,
|
|
30
31
|
_dataview_metadata,
|
|
@@ -245,6 +246,17 @@ def _meta(invocation: Invocation, workspace_id: int) -> dict[str, Any]:
|
|
|
245
246
|
}
|
|
246
247
|
|
|
247
248
|
|
|
249
|
+
def _view_row_count(service: Any, dataset_id: int, view_id: int, project_id: int | None) -> Any:
|
|
250
|
+
"""Return a view's current row count via the cheapest read (best effort)."""
|
|
251
|
+
try:
|
|
252
|
+
info = service.call(
|
|
253
|
+
_DATAVIEW_GET_SYMBOL, dataset_id=dataset_id, dataview_id=view_id, project_id=project_id
|
|
254
|
+
)
|
|
255
|
+
except Exception: # noqa: BLE001 -- the check is advice; the write already ran
|
|
256
|
+
return None
|
|
257
|
+
return info.get("row_count") if isinstance(info, dict) else None
|
|
258
|
+
|
|
259
|
+
|
|
248
260
|
def _dispatch_view(
|
|
249
261
|
invocation: Invocation,
|
|
250
262
|
view_id: int,
|
|
@@ -262,7 +274,13 @@ def _dispatch_view(
|
|
|
262
274
|
result to emit. ``prepare(service, dataset_id, kwargs)`` may edit the call
|
|
263
275
|
arguments in place; when it returns a value, that value is emitted and no
|
|
264
276
|
call is made. All three need the exact parent; without one they are skipped.
|
|
277
|
+
|
|
278
|
+
When neither ``before`` nor ``after`` is given (every plain transform),
|
|
279
|
+
the view's row count is read before and after the call and added to the
|
|
280
|
+
result as ``row_check``, so a caller always sees whether the write changed
|
|
281
|
+
the row count -- the join path builds its own richer ``join_check`` instead.
|
|
265
282
|
"""
|
|
283
|
+
auto_row_check = before is None and after is None
|
|
266
284
|
# ``dataset_id`` is invocation-local resource context. It is not a View
|
|
267
285
|
# transform argument, but passing it through lets the service fetch the
|
|
268
286
|
# exact parent endpoint and prevents the SDK's legacy bare-view resolver
|
|
@@ -287,6 +305,11 @@ def _dispatch_view(
|
|
|
287
305
|
if early is not None:
|
|
288
306
|
return early, _meta(invocation, auth.workspace_id)
|
|
289
307
|
state = before(service, int(dataset_id)) if before and dataset_id is not None else None
|
|
308
|
+
rows_before = (
|
|
309
|
+
_view_row_count(service, int(dataset_id), view_id, invocation.project)
|
|
310
|
+
if auto_row_check and dataset_id is not None
|
|
311
|
+
else None
|
|
312
|
+
)
|
|
290
313
|
try:
|
|
291
314
|
if dataset_id is None:
|
|
292
315
|
_require_discovery_allowed(invocation, view_id)
|
|
@@ -306,6 +329,9 @@ def _dispatch_view(
|
|
|
306
329
|
)
|
|
307
330
|
if after is not None and dataset_id is not None:
|
|
308
331
|
data = after(service, int(dataset_id), state, data)
|
|
332
|
+
elif auto_row_check and dataset_id is not None and isinstance(data, dict):
|
|
333
|
+
rows_after = _view_row_count(service, int(dataset_id), view_id, invocation.project)
|
|
334
|
+
data["row_check"] = {"rows_before": rows_before, "rows_after": rows_after}
|
|
309
335
|
return data, _meta(invocation, auth.workspace_id)
|
|
310
336
|
|
|
311
337
|
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Automatic write read-back for every real, non-read API-backed command.
|
|
2
|
+
|
|
3
|
+
A backend write returns whatever shape that particular endpoint returns —
|
|
4
|
+
some carry ``has_error``, some a bare ``status``, some a pipeline job with its
|
|
5
|
+
own nested ``status``. :func:`with_verify` reads those backend-specific
|
|
6
|
+
signals once and adds one small, uniform ``verify`` block to the result, so
|
|
7
|
+
the agent that issued the write always has an explicit answer to "did this do
|
|
8
|
+
what it should" instead of re-deriving it per command.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
#: Below this share of matched rows, a join has enough misses to flag before
|
|
16
|
+
#: the caller builds anything further on it.
|
|
17
|
+
JOIN_MATCH_RATE_THRESHOLD = 0.8
|
|
18
|
+
|
|
19
|
+
_FAILURE_STATUSES = frozenset({"error", "failed", "failure"})
|
|
20
|
+
_FAILURE_PIPELINE_STATES = frozenset({"error", "ref_error"})
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def with_verify(data: Any) -> Any:
|
|
24
|
+
"""Return ``data`` with a ``verify`` read-back block added.
|
|
25
|
+
|
|
26
|
+
``data`` that is not a dict (a dry-run report, a bare list, ...) is
|
|
27
|
+
returned unchanged.
|
|
28
|
+
"""
|
|
29
|
+
if not isinstance(data, dict):
|
|
30
|
+
return data
|
|
31
|
+
verified = _verified(data)
|
|
32
|
+
state = _state(data)
|
|
33
|
+
rows_before, rows_after = _row_counts(data)
|
|
34
|
+
verify: dict[str, Any] = {"verified": verified, "state": state}
|
|
35
|
+
if rows_before is not None or rows_after is not None:
|
|
36
|
+
verify["rows_before"] = rows_before
|
|
37
|
+
verify["rows_after"] = rows_after
|
|
38
|
+
verify["warnings"] = _warnings(data)
|
|
39
|
+
verify["needs_user"] = _needs_user(
|
|
40
|
+
data, verified=verified, state=state, rows_before=rows_before, rows_after=rows_after
|
|
41
|
+
)
|
|
42
|
+
return {**data, "verify": verify}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _job_status(data: dict[str, Any]) -> str | None:
|
|
46
|
+
job = data.get("job")
|
|
47
|
+
status = job.get("status") if isinstance(job, dict) else None
|
|
48
|
+
return status if isinstance(status, str) else None
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _verified(data: dict[str, Any]) -> bool:
|
|
52
|
+
if data.get("has_error"):
|
|
53
|
+
return False
|
|
54
|
+
for status in (data.get("status"), _job_status(data)):
|
|
55
|
+
if isinstance(status, str) and status.lower() in _FAILURE_STATUSES:
|
|
56
|
+
return False
|
|
57
|
+
pipeline_state = data.get("pipeline_state")
|
|
58
|
+
if isinstance(pipeline_state, str) and pipeline_state.lower() in _FAILURE_PIPELINE_STATES:
|
|
59
|
+
return False
|
|
60
|
+
return data.get("bake_ok") is not False
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _state(data: dict[str, Any]) -> str:
|
|
64
|
+
for key in ("pipeline_state", "status"):
|
|
65
|
+
value = data.get(key)
|
|
66
|
+
if value is not None:
|
|
67
|
+
return str(value)
|
|
68
|
+
return "done"
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _row_counts(data: dict[str, Any]) -> tuple[int | None, int | None]:
|
|
72
|
+
for key in ("row_check", "join_check"):
|
|
73
|
+
check = data.get(key)
|
|
74
|
+
if isinstance(check, dict):
|
|
75
|
+
return check.get("rows_before"), check.get("rows_after")
|
|
76
|
+
return None, None
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def _warnings(data: dict[str, Any]) -> list[str]:
|
|
80
|
+
notes: list[str] = []
|
|
81
|
+
for key, value in data.items():
|
|
82
|
+
if not key.endswith("_check") or not isinstance(value, dict):
|
|
83
|
+
continue
|
|
84
|
+
for list_key in ("notes", "warnings"):
|
|
85
|
+
items = value.get(list_key)
|
|
86
|
+
if isinstance(items, list):
|
|
87
|
+
notes.extend(item if isinstance(item, str) else str(item) for item in items)
|
|
88
|
+
return notes
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def _needs_user(
|
|
92
|
+
data: dict[str, Any],
|
|
93
|
+
*,
|
|
94
|
+
verified: bool,
|
|
95
|
+
state: str,
|
|
96
|
+
rows_before: int | None,
|
|
97
|
+
rows_after: int | None,
|
|
98
|
+
) -> str | None:
|
|
99
|
+
if not verified:
|
|
100
|
+
return f"The change failed: {state}."
|
|
101
|
+
if rows_after == 0 and isinstance(rows_before, int) and rows_before > 0:
|
|
102
|
+
return f"The change left the view with no rows (was {rows_before})."
|
|
103
|
+
join_check = data.get("join_check")
|
|
104
|
+
match_rate = join_check.get("match_rate") if isinstance(join_check, dict) else None
|
|
105
|
+
if isinstance(match_rate, (int, float)) and match_rate < JOIN_MATCH_RATE_THRESHOLD:
|
|
106
|
+
percent = round(match_rate * 100)
|
|
107
|
+
return (
|
|
108
|
+
f"Only {percent}% of rows found a match in the join; the user should "
|
|
109
|
+
"confirm before building on it."
|
|
110
|
+
)
|
|
111
|
+
return None
|
|
@@ -490,7 +490,7 @@ commands:
|
|
|
490
490
|
- CT-DASHBOARD-CHAT-EDIT-ERROR
|
|
491
491
|
draft_test: null
|
|
492
492
|
undo_test: null
|
|
493
|
-
known_restrictions:
|
|
493
|
+
known_restrictions: 'Changes an existing board from one sentence (add, remove or change a chart, KPI or page): {"body": {"params": {"prompt": "<the change>"}}}; returns changed, a one-line message and the rebaked canvas. Use it rather than dashboard pages add or canvas save.'
|
|
494
494
|
reviewed_by: primary
|
|
495
495
|
- command_id: dashboard.chat.history
|
|
496
496
|
command_path: dashboard chat history
|
|
@@ -749,7 +749,7 @@ commands:
|
|
|
749
749
|
- CT-DASHBOARD-CREATE-BLANK-ERROR
|
|
750
750
|
draft_test: null
|
|
751
751
|
undo_test: null
|
|
752
|
-
known_restrictions: 'Input is {"params": {"dataview_id": VIEW_ID, "title": ...}} with --yes; returns {id, sequence}. The blank canvas has one page (p1) and no figures: author it with dashboard canvas get -> edit -> dashboard canvas save or dashboard pages add. One dataview per dashboard.'
|
|
752
|
+
known_restrictions: 'To build a board from a description, use dashboard v3 generate instead. Input is {"params": {"dataview_id": VIEW_ID, "title": ...}} with --yes; returns {id, sequence}. The blank canvas has one page (p1) and no figures: author it with dashboard chat edit, or by hand with dashboard canvas get -> edit -> dashboard canvas save or dashboard pages add. One dataview per dashboard.'
|
|
753
753
|
reviewed_by: primary
|
|
754
754
|
- command_id: dashboard.data.draft
|
|
755
755
|
command_path: dashboard data draft
|
|
@@ -1673,7 +1673,7 @@ commands:
|
|
|
1673
1673
|
- CT-DASHBOARD-PAGES-ADD-ERROR
|
|
1674
1674
|
draft_test: null
|
|
1675
1675
|
undo_test: null
|
|
1676
|
-
known_restrictions: 'Requires --yes --confirm DASHBOARD_ID. body.params.pages is a list of PageAdd objects: {title, focus: {measure, dim, kpis: [...]}, charts: [{kind, title, dim, measure, agg}]}; the schema example''''s {} entry is not a usable page. The route runs through the LLM control guard: in the ILG simulation it dropped unit.prefix on a money card ("nothing in this data says which currency") that dashboard canvas save had kept, and reports that in data.message.'
|
|
1676
|
+
known_restrictions: 'To add or change content by description, use dashboard chat edit instead. Requires --yes --confirm DASHBOARD_ID. body.params.pages is a list of PageAdd objects: {title, focus: {measure, dim, kpis: [...]}, charts: [{kind, title, dim, measure, agg}]}; the schema example''''s {} entry is not a usable page. The route runs through the LLM control guard: in the ILG simulation it dropped unit.prefix on a money card ("nothing in this data says which currency") that dashboard canvas save had kept, and reports that in data.message.'
|
|
1677
1677
|
reviewed_by: primary
|
|
1678
1678
|
- command_id: dashboard.pdf-artifact
|
|
1679
1679
|
command_path: dashboard pdf-artifact
|
|
@@ -4397,7 +4397,7 @@ commands:
|
|
|
4397
4397
|
- CT-DASHBOARD-V3-GENERATE-ERROR
|
|
4398
4398
|
draft_test: null
|
|
4399
4399
|
undo_test: null
|
|
4400
|
-
known_restrictions:
|
|
4400
|
+
known_restrictions: 'This is how to make a dashboard: it builds and bakes a whole board from one sentence on one view. Input {"body": {"params": {"intent": "<what the board should show>", "dataview_id": VIEW_ID, "title": "<optional name>"}}}; waits (about 30 s) and returns the baked canvas. Change it afterwards with dashboard chat edit. dashboard create-blank is only for authoring a canvas by hand.'
|
|
4401
4401
|
reviewed_by: primary
|
|
4402
4402
|
- command_id: dashboard.video-state
|
|
4403
4403
|
command_path: dashboard video-state
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|