mammoth-cli 2.4.0__tar.gz → 2.4.2__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.4.0 → mammoth_cli-2.4.2}/PKG-INFO +2 -2
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/__main__.py +20 -5
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/app/help_text.py +3 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +1 -1
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +1 -1
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +3 -3
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +10 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +20 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/help_summaries.json +3 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/registry.py +4 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/aggregate.py +15 -5
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/settle.py +10 -3
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/discovery/purposes.py +14 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/trace.py +1 -1
- mammoth_cli-2.4.2/mammoth_cli/services/medians.py +145 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/positional_overrides.py +10 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/sdk_service.py +0 -4
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/pyproject.toml +2 -2
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/agent.yaml +14 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/connector.yaml +22 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/view.yaml +2 -1
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands.generated.yaml +120 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/compiled/commands.json +4 -1
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/compiled/sdk-methods.json +3 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/sdk-catalog.source.yaml +24 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/sdk-methods.yaml +37 -1
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/.gitignore +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/LICENSE +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/README.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/app/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/app/options.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/app/tree.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/app/usage.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capabilities.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/collection.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-embed.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-published.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/history.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/how.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/recipe.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/run.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/rest-api-import.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/_lazy.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/automation_datasets.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/capabilities.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/dashboard/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/dashboard/_common.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/dashboard/generated.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/dashboard/workbook.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/dataset/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/dataset/_common.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/dataset/create.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/dataset/download.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/dataset/find.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/history.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/how.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/link.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/recipe.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/resolve.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/run.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/schema/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/schema/examples.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/schema/find.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/support_template.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/_common.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/checks.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/column_checks.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/columns.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/data_read.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/derivatives.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/explore.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/export.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/export_dataset.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/export_specialized.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/export_update.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/formatting.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/join_check.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/lifecycle.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/listing.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/pipeline.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view/upload.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view_drivers.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view_explore.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view_forecast.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view_ops/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view_ops/batch.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view_ops/crud.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view_ops/draft.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view_ops/transforms.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/view_profile.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/context/keyring_backend.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/context/oauth.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/context/oauth_loopback.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/discovery/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/discovery/limitations.json +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/discovery/next_commands.json +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/discovery/recipes.json +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/output/emit.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/bindings.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/compact.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/dispatch.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/dryrun_targets.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/embed_pool.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/embed_scope.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/etag_store.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/idempotency_servers.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/intent_only.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/journal.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/labels.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/leaf.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/linecapture.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/local_paths.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/locked_files.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/next_commands.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/opens.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/resource_ids.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/reveal.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/shared.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/state.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/switches.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/token_scope.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/verify.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/runtime/view_dataset_cache.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/append_blank_columns.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/column_type_guard.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/conditional_format.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/dashboard_figures.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/dashboard_filters.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/data_profile.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/delete_check.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/draft_report.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/explore_card_edit.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/explore_cards.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/explore_to_figure.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/explore_to_image.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/field_enums.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/folder_ids.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/held_change.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/job_outcome.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/listing.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/local_files.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/local_time.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/paging.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/period_analysis.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/poll.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/positional_spec.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/read_memo.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/schedule_dates.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/schema_diff.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/secret_files.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/sql_check.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/suggest.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/update_method.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/view_analysis.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/view_variants.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/services/write_impact.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/capabilities.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/collection.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/history.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/how.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/link.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/recipe.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/resolve.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/run.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/token.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/compiled/openapi-operations.json +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/compiled/output-schemas.json +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/edits-target.source.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/output-schemas.yaml +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/manifests/server-status.json +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.4.0 → mammoth_cli-2.4.2}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.2
|
|
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
|
|
@@ -20,7 +20,7 @@ Requires-Dist: certifi>=2026.10.19
|
|
|
20
20
|
Requires-Dist: click<9,>=8.1
|
|
21
21
|
Requires-Dist: jsonschema>=4.20
|
|
22
22
|
Requires-Dist: keyring<26,>=25.7
|
|
23
|
-
Requires-Dist: mammoth-io<0.9,>=0.8.
|
|
23
|
+
Requires-Dist: mammoth-io<0.9,>=0.8.54
|
|
24
24
|
Requires-Dist: platformdirs<5,>=4.10
|
|
25
25
|
Requires-Dist: pydantic<3,>=2.12.5
|
|
26
26
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -12,6 +12,14 @@ import os
|
|
|
12
12
|
import sys
|
|
13
13
|
from typing import Any
|
|
14
14
|
|
|
15
|
+
_SDK_MISSING = (
|
|
16
|
+
"mammoth: the mammoth-io SDK cannot be imported ({error}).\n"
|
|
17
|
+
"This install is broken: mammoth-io is missing, or it was installed from a checkout "
|
|
18
|
+
"that no longer exists.\n"
|
|
19
|
+
"Reinstall the CLI, which brings its own mammoth-io: "
|
|
20
|
+
"pipx install --force mammoth-cli (or pip install --force-reinstall mammoth-cli).\n"
|
|
21
|
+
)
|
|
22
|
+
|
|
15
23
|
|
|
16
24
|
def main() -> Any:
|
|
17
25
|
"""Run the Mammoth CLI application.
|
|
@@ -30,11 +38,18 @@ def main() -> Any:
|
|
|
30
38
|
|
|
31
39
|
sys.stdout.write(f"{__version__}\n")
|
|
32
40
|
return 0
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
try:
|
|
42
|
+
from mammoth_cli.app import app
|
|
43
|
+
from mammoth_cli.context import keyring_backend
|
|
44
|
+
|
|
45
|
+
keyring_backend.enable()
|
|
46
|
+
return app()
|
|
47
|
+
except ModuleNotFoundError as exc:
|
|
48
|
+
# Commands import the SDK as they run, so the failure can surface inside app().
|
|
49
|
+
if exc.name is None or exc.name.split(".")[0] != "mammoth":
|
|
50
|
+
raise
|
|
51
|
+
sys.stderr.write(_SDK_MISSING.format(error=exc))
|
|
52
|
+
return 1
|
|
38
53
|
|
|
39
54
|
|
|
40
55
|
if __name__ == "__main__": # pragma: no cover
|
|
@@ -127,8 +127,11 @@ _SUBGROUP_DESCRIPTIONS = {
|
|
|
127
127
|
"connector connection": "Create, read, update and delete connector connections.",
|
|
128
128
|
"connector draft": "Build a connector step by step: sources, gaps, sample, then save.",
|
|
129
129
|
"connector draft source": "List a draft's sources, preview them and find join keys.",
|
|
130
|
+
"connector draft spec": "Read the spec an AI-built connector draft is building.",
|
|
130
131
|
"connector ds-config": "Create, read, update and delete data-source configs.",
|
|
131
132
|
"connector query": "Generate connector queries and check their status.",
|
|
133
|
+
"connector version": "Read stored versions of an AI-built connector.",
|
|
134
|
+
"connector version spec": "Read the spec of a stored AI connector version.",
|
|
132
135
|
"context project": "Show, select or clear the active project.",
|
|
133
136
|
"dashboard audience": "Read who views a dashboard and its digest.",
|
|
134
137
|
"dashboard audience digest": "Read and set the audience digest of a dashboard.",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mammoth-cli
|
|
3
|
-
version: 2.4.
|
|
3
|
+
version: 2.4.2
|
|
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
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# What is proven on release
|
|
2
2
|
|
|
3
3
|
Generated from `docs/release-capability-matrix.json`; do not edit by hand.
|
|
4
|
-
The CLI publishes
|
|
4
|
+
The CLI publishes 875 commands. 705 of them bind one of the 769 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (`view transform *` commands submit through `view.task.add`, except `rename-columns` and `sort`, which set view display properties through `view.update`). 261 bound commands ran once successfully on release, 1 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer. Use an untried command normally: confirm a write with the user first, check its result with a read afterwards, and never refuse a command only because it is untried.
|
|
5
5
|
|
|
6
6
|
Status meanings:
|
|
7
7
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Published CLI command catalog
|
|
2
2
|
|
|
3
|
-
This generated catalog is a lookup table for every command in the published CLI manifest, currently
|
|
3
|
+
This generated catalog is a lookup table for every command in the published CLI manifest, currently 875; each entry carries its release status line. It is a command-contract index, not an assertion that every backend/OpenAPI operation has a CLI binding. For an exact local CLI contract, run `mammoth schema get COMMAND_ID`; `mammoth capability list` is an API-binding inventory and can omit typed/local CLI routes. For focused workflows, read the [recipes index](recipes/index.md). Sensitive structured input must come from a private file or pipe; never put secrets in literal argv.
|
|
4
4
|
|
|
5
5
|
Load only the applicable domain file:
|
|
6
6
|
|
|
7
7
|
- [activity](commands/activity.md) — 2 published commands
|
|
8
8
|
- [addon](commands/addon.md) — 6 published commands
|
|
9
|
-
- [agent](commands/agent.md) —
|
|
9
|
+
- [agent](commands/agent.md) — 45 published commands
|
|
10
10
|
- [ai](commands/ai.md) — 5 published commands
|
|
11
11
|
- [annotation](commands/annotation.md) — 5 published commands
|
|
12
12
|
- [auth](commands/auth.md) — 5 published commands
|
|
@@ -21,7 +21,7 @@ Load only the applicable domain file:
|
|
|
21
21
|
- [collection](commands/collection.md) — 21 published commands
|
|
22
22
|
- [completion](commands/completion.md) — 2 published commands
|
|
23
23
|
- [config](commands/config.md) — 4 published commands
|
|
24
|
-
- [connector](commands/connector.md) —
|
|
24
|
+
- [connector](commands/connector.md) — 42 published commands
|
|
25
25
|
- [context](commands/context.md) — 4 published commands
|
|
26
26
|
- [dashboard-qa](commands/dashboard-qa.md) — 14 published commands
|
|
27
27
|
- [dashboard-template](commands/dashboard-template.md) — 12 published commands
|
|
@@ -162,6 +162,16 @@ Result: `AgentAccessSettingsUpdateResult`; mutation `high_impact`, confirmation
|
|
|
162
162
|
|
|
163
163
|
Status on release: untried; no live run recorded.
|
|
164
164
|
|
|
165
|
+
### `agent.access.today`
|
|
166
|
+
|
|
167
|
+
Run: `mammoth agent access today`. Exact input fields: `mammoth schema get agent.access.today`.
|
|
168
|
+
|
|
169
|
+
Example: `mammoth agent access today`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
170
|
+
|
|
171
|
+
Result: `AgentAccessTodayResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
172
|
+
|
|
173
|
+
Status on release: untried; no live run recorded.
|
|
174
|
+
|
|
165
175
|
### `agent.access.tree`
|
|
166
176
|
|
|
167
177
|
Run: `mammoth agent access tree`. Exact input fields: `mammoth schema get agent.access.tree`.
|
|
@@ -296,6 +296,16 @@ Result: `ConnectorDraftSourcePreviewResult`; mutation `benign_mutation`, confirm
|
|
|
296
296
|
|
|
297
297
|
Status on release: untried; no live run recorded.
|
|
298
298
|
|
|
299
|
+
### `connector.draft.spec.get`
|
|
300
|
+
|
|
301
|
+
Run: `mammoth connector draft spec get`. Exact input fields: `mammoth schema get connector.draft.spec.get`.
|
|
302
|
+
|
|
303
|
+
Example: `mammoth connector draft spec get 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
304
|
+
|
|
305
|
+
Result: `ConnectorDraftSpecGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
306
|
+
|
|
307
|
+
Status on release: untried; no live run recorded.
|
|
308
|
+
|
|
299
309
|
### `connector.draft.update`
|
|
300
310
|
|
|
301
311
|
Run: `mammoth connector draft update`. Exact input fields: `mammoth schema get connector.draft.update`.
|
|
@@ -405,3 +415,13 @@ Example: `mammoth connector query status postgres prod-warehouse`. Placeholders
|
|
|
405
415
|
Result: `ConnectorQueryStatusResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
406
416
|
|
|
407
417
|
Status on release: observed blocker — blocked_missing_fixture: No real connector connection exists in workspace 4 (connector list shows all is_added:false; connector active returns []) and creating one requires externa. Re-check before relying on it.
|
|
418
|
+
|
|
419
|
+
### `connector.version.spec.get`
|
|
420
|
+
|
|
421
|
+
Run: `mammoth connector version spec get`. Exact input fields: `mammoth schema get connector.version.spec.get`.
|
|
422
|
+
|
|
423
|
+
Example: `mammoth connector version spec get isams_ab12cd34 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
424
|
+
|
|
425
|
+
Result: `ConnectorVersionSpecGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
426
|
+
|
|
427
|
+
Status on release: untried; no live run recorded.
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"agent.access.request.resolve": "Close a request. Owners, admins and the file's keeper.",
|
|
24
24
|
"agent.access.settings.get": "Get the workspace's AI Agent controls. Managers only.",
|
|
25
25
|
"agent.access.settings.update": "Change the workspace's AI Agent controls. Managers only.",
|
|
26
|
+
"agent.access.today": "Read the caller's Today page on the Ask home.",
|
|
26
27
|
"agent.access.tree": "List the projects and files the Give access tree offers. Managers only.",
|
|
27
28
|
"agent.action.delete": "Delete one object the chat created, by action id. Prompt or '--yes' required.",
|
|
28
29
|
"agent.action.list": "List the changes one agent chat session made.",
|
|
@@ -185,6 +186,7 @@
|
|
|
185
186
|
"connector.draft.source.join-candidates": "List the column pairs that could join a source onto the main one.",
|
|
186
187
|
"connector.draft.source.list": "List a draft's sources.",
|
|
187
188
|
"connector.draft.source.preview": "Read up to 'limit' rows of one source through its connection.",
|
|
189
|
+
"connector.draft.spec.get": "Read the spec an AI-built connector's draft is building, with secrets left out.",
|
|
188
190
|
"connector.draft.update": "Change a draft.",
|
|
189
191
|
"connector.ds-config.create": "Sample a data source config; REST 'query' is a JSON string. '--yes' always needed.",
|
|
190
192
|
"connector.ds-config.delete": "Delete a data source configuration. Prompt or '--yes' required.",
|
|
@@ -196,6 +198,7 @@
|
|
|
196
198
|
"connector.list": "List all available connectors (workspace-scoped, no project).",
|
|
197
199
|
"connector.query.generate": "Generate a query for a connector using AI. 'query' (the intent) is required input.",
|
|
198
200
|
"connector.query.status": "Get the status of an AI chat session for a connector connection.",
|
|
201
|
+
"connector.version.spec.get": "Read one stored version of the workspace's AI-built connector, secrets left out.",
|
|
199
202
|
"context.project.clear": "Clear the active project id for one profile. Idempotent.",
|
|
200
203
|
"context.project.status": "Report the resolved active project id for one profile.",
|
|
201
204
|
"context.project.use": "Save a positive project id as the active project for one profile.",
|
|
@@ -1166,6 +1166,7 @@ _TARGETS: dict[str, str] = {
|
|
|
1166
1166
|
"view.transform.window": "mammoth_cli.commands.view_ops.transforms:view_transform_window",
|
|
1167
1167
|
# Operation-bound commands served by the manifest-driven generic handler.
|
|
1168
1168
|
"agent.access.me": "mammoth_cli.commands.dashboard.generated:generated_dashboard",
|
|
1169
|
+
"agent.access.today": "mammoth_cli.commands.dashboard.generated:generated_dashboard",
|
|
1169
1170
|
"agent.access.settings.get": "mammoth_cli.commands.dashboard.generated:generated_dashboard",
|
|
1170
1171
|
"agent.access.settings.update": "mammoth_cli.commands.dashboard.generated:generated_dashboard",
|
|
1171
1172
|
"agent.access.grant.list": "mammoth_cli.commands.dashboard.generated:generated_dashboard",
|
|
@@ -1229,6 +1230,9 @@ _TARGETS: dict[str, str] = {
|
|
|
1229
1230
|
"connector.draft.source.preview": (
|
|
1230
1231
|
"mammoth_cli.commands.dashboard.generated:generated_dashboard"
|
|
1231
1232
|
),
|
|
1233
|
+
# An AI-built connector's spec, secrets left out (mvc-service #7302).
|
|
1234
|
+
"connector.draft.spec.get": "mammoth_cli.commands.dashboard.generated:generated_dashboard",
|
|
1235
|
+
"connector.version.spec.get": "mammoth_cli.commands.dashboard.generated:generated_dashboard",
|
|
1232
1236
|
# From URL: preview a link, follow or copy a link dataset, list the linked datasets.
|
|
1233
1237
|
"dataset.from-url.preview": "mammoth_cli.commands.dashboard.generated:generated_dashboard",
|
|
1234
1238
|
"dataset.from-url.follow": "mammoth_cli.commands.dashboard.generated:generated_dashboard",
|
|
@@ -35,7 +35,7 @@ from mammoth_cli.runtime.session import (
|
|
|
35
35
|
open_service,
|
|
36
36
|
require_project,
|
|
37
37
|
)
|
|
38
|
-
from mammoth_cli.services import read_queries
|
|
38
|
+
from mammoth_cli.services import medians, read_queries
|
|
39
39
|
from mammoth_cli.services.conditions import CONDITION_KWARG, compile_condition
|
|
40
40
|
from mammoth_cli.services.read_queries import ReadContext
|
|
41
41
|
|
|
@@ -198,6 +198,10 @@ def _run_aggregate(
|
|
|
198
198
|
)
|
|
199
199
|
kwargs[CONDITION_KWARG] = condition
|
|
200
200
|
_forward_optional(document, kwargs, ("sequence",))
|
|
201
|
+
if medians.requested(document):
|
|
202
|
+
result = medians.aggregate(reads, fields, condition)
|
|
203
|
+
rows = read_queries.sort_locally(result["data"], sort)
|
|
204
|
+
return {**result, "data": rows[:limit] if limit else rows}
|
|
201
205
|
if levels:
|
|
202
206
|
response = read_queries.pivot_with_text_dates(
|
|
203
207
|
reads,
|
|
@@ -222,7 +226,9 @@ def view_data_aggregate(invocation: Invocation) -> HandlerResult:
|
|
|
222
226
|
Read-only: computes and returns the aggregated result without adding a
|
|
223
227
|
task to the view's pipeline or otherwise changing it. Pass exactly one of
|
|
224
228
|
``aggregations`` (a PIVOT; ``group_by`` is optional) or ``metric`` (a
|
|
225
|
-
METRIC). ``function`` is one of SUM, COUNT, AVG, MIN, MAX, STDDEV, DISTINCT_COUNT.
|
|
229
|
+
METRIC). ``function`` is one of SUM, COUNT, AVG, MIN, MAX, STDDEV, DISTINCT_COUNT, MEDIAN.
|
|
230
|
+
MEDIAN is exact, over a NUMERIC column's non-blank values (``median_note`` says how many
|
|
231
|
+
blank rows it left out), and goes in a read of its own. An optional
|
|
226
232
|
``condition`` filters rows before aggregating, and ``sequence`` pins the
|
|
227
233
|
read to a pipeline step (default: latest). ``order_by`` (result labels,
|
|
228
234
|
``"Total desc"``) with ``top`` ranks the groups on the backend (and adds
|
|
@@ -308,9 +314,13 @@ def aggregate_on(
|
|
|
308
314
|
reads = source.reads
|
|
309
315
|
column_types = reads.column_types
|
|
310
316
|
display_to_internal = reads.display_to_internal
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
317
|
+
pivot = "aggregations" in document or "group_by" in document
|
|
318
|
+
levels: dict[int, str] = (
|
|
319
|
+
read_queries.text_date_group_levels(document.get("group_by"), column_types) if pivot else {}
|
|
320
|
+
)
|
|
321
|
+
if medians.requested(document):
|
|
322
|
+
medians.check(document, column_types, bool(levels))
|
|
323
|
+
if pivot:
|
|
314
324
|
fields, as_map = _build_pivot_fields(
|
|
315
325
|
_plain_text_date_groups(document, levels, column_types), display_to_internal
|
|
316
326
|
)
|
|
@@ -125,9 +125,10 @@ def wait_for_followon_job(service: Any, write_result: Any) -> dict[str, Any] | N
|
|
|
125
125
|
try:
|
|
126
126
|
service.wait_if_job(write_result)
|
|
127
127
|
except CliError as exc:
|
|
128
|
-
if exc.code
|
|
129
|
-
# Out of time is not a failed job: it
|
|
130
|
-
# accepted, and replaying it would
|
|
128
|
+
if exc.code in ("timeout", "retryable_error", "outcome_unknown"):
|
|
129
|
+
# Out of time, or a job the CLI could not read, is not a failed job: it may
|
|
130
|
+
# still be running or done, the change was accepted, and replaying it would
|
|
131
|
+
# apply the step twice.
|
|
131
132
|
pending: dict[str, Any] = {
|
|
132
133
|
"execution_state": UNFINISHED_STATE,
|
|
133
134
|
"wait_error": exc.message,
|
|
@@ -135,6 +136,12 @@ def wait_for_followon_job(service: Any, write_result: Any) -> dict[str, Any] | N
|
|
|
135
136
|
for key in ("job_id", "resume"):
|
|
136
137
|
if exc.details.get(key) is not None:
|
|
137
138
|
pending[key] = exc.details[key]
|
|
139
|
+
if "job_id" not in pending:
|
|
140
|
+
job_id = next(
|
|
141
|
+
(write_result[k] for k in ("future_id", "job_id") if k in write_result), None
|
|
142
|
+
)
|
|
143
|
+
pending["job_id"] = job_id
|
|
144
|
+
pending.setdefault("resume", f"mammoth job wait {job_id}")
|
|
138
145
|
return pending
|
|
139
146
|
return {"execution_state": JOB_FAILED_STATE, "wait_error": exc.message}
|
|
140
147
|
return None
|
|
@@ -717,6 +717,20 @@ COMMAND_DISCOVERY_PURPOSES = {
|
|
|
717
717
|
"build an AI connector custom connector for our own internal api or an unsupported "
|
|
718
718
|
"source; sends the request to the builder agent"
|
|
719
719
|
),
|
|
720
|
+
"agent.access.today": (
|
|
721
|
+
"read the today page, the ask home page, its suggestions, today's blocks headline "
|
|
722
|
+
"numbers, is a new page being written, updating, writing, empty, check a deploy of "
|
|
723
|
+
"the today page"
|
|
724
|
+
),
|
|
725
|
+
"connector.draft.spec.get": (
|
|
726
|
+
"read the spec of an AI connector draft, how a custom connector table is read, paging "
|
|
727
|
+
"type page size, records path, request path, data root path, why a save repeats the "
|
|
728
|
+
"same page"
|
|
729
|
+
),
|
|
730
|
+
"connector.version.spec.get": (
|
|
731
|
+
"read a stored version of an AI custom connector, its spec paging type page size "
|
|
732
|
+
"records path request path, which version a dataset runs, compare connector versions"
|
|
733
|
+
),
|
|
720
734
|
"file.set-password": "locked password protected file pdf excel unlock",
|
|
721
735
|
"file.update": (
|
|
722
736
|
"pdf extraction method choose select pending tables only all content custom "
|
|
@@ -5,7 +5,7 @@ The server already logs every request it serves, with its path, status, latency,
|
|
|
5
5
|
``mammoth-cli/<version>``; this module adds a comment naming the command, so the log can
|
|
6
6
|
answer which commands run, from which surface, by which agent, and how they end:
|
|
7
7
|
|
|
8
|
-
mammoth-cli/2.4.
|
|
8
|
+
mammoth-cli/2.4.2 (cmd=view.data.get; inv=3f9c2a1b7d4e; surface=run; agent=claude-code)
|
|
9
9
|
|
|
10
10
|
``inv`` is the invocation id: every request one command makes carries the same one, and the
|
|
11
11
|
local run log (:mod:`mammoth_cli.runtime.runlog`) records it as its ``run_id``, so a local
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"""MEDIAN for ``view data aggregate``, computed exactly in the CLI.
|
|
2
|
+
|
|
3
|
+
The backend's volatile aggregate has no MEDIAN. Paging sorted rows to find the
|
|
4
|
+
middle one is slow and goes wrong on blanks, which sort last but still count. So
|
|
5
|
+
the CLI asks for one COUNT per stored value of the column (per group), drops the
|
|
6
|
+
blank values, and takes the middle of what is left. The result says how many
|
|
7
|
+
blank rows were skipped.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from collections import defaultdict
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
from mammoth_cli.errors.envelope import CODE_INVALID_ARGUMENTS, EXIT_USAGE, CliError
|
|
16
|
+
from mammoth_cli.services.conditions import CONDITION_KWARG
|
|
17
|
+
from mammoth_cli.services.read_queries import ReadContext
|
|
18
|
+
|
|
19
|
+
MEDIAN = "MEDIAN"
|
|
20
|
+
#: The backend returns at most this many grouped rows.
|
|
21
|
+
BACKEND_ROW_CAP = 40000
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _fail(message: str, hint: str = "") -> CliError:
|
|
25
|
+
return CliError(code=CODE_INVALID_ARGUMENTS, message=message, exit_status=EXIT_USAGE, hint=hint)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _items(document: dict[str, Any]) -> list[dict[str, Any]]:
|
|
29
|
+
if isinstance(document.get("metric"), dict):
|
|
30
|
+
return [document["metric"]]
|
|
31
|
+
aggregations = document.get("aggregations")
|
|
32
|
+
return (
|
|
33
|
+
[a for a in aggregations if isinstance(a, dict)] if isinstance(aggregations, list) else []
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def requested(document: dict[str, Any]) -> bool:
|
|
38
|
+
"""Whether the read asks for a MEDIAN."""
|
|
39
|
+
return any(str(item.get("function") or "").upper() == MEDIAN for item in _items(document))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def check(document: dict[str, Any], column_types: dict[str, str], text_date_groups: bool) -> None:
|
|
43
|
+
"""Refuse a MEDIAN read this path cannot answer exactly, before any query."""
|
|
44
|
+
items = _items(document)
|
|
45
|
+
if any(str(item.get("function") or "").upper() != MEDIAN for item in items):
|
|
46
|
+
raise _fail(
|
|
47
|
+
"MEDIAN cannot be mixed with other functions in one read.",
|
|
48
|
+
"Run the MEDIAN aggregations in their own 'view data aggregate' call.",
|
|
49
|
+
)
|
|
50
|
+
if text_date_groups:
|
|
51
|
+
raise _fail(
|
|
52
|
+
"MEDIAN cannot be grouped by a date 'part', or by a 'truncate' of a TEXT date.",
|
|
53
|
+
"Group by a DATE column with 'truncate', or convert the TEXT date with "
|
|
54
|
+
"'view transform convert-type'.",
|
|
55
|
+
)
|
|
56
|
+
for item in items:
|
|
57
|
+
column = item.get("column")
|
|
58
|
+
if not column:
|
|
59
|
+
raise _fail("MEDIAN needs a 'column'.")
|
|
60
|
+
kind = column_types.get(str(column), "")
|
|
61
|
+
if kind not in ("", "NUMERIC"):
|
|
62
|
+
raise _fail(f"MEDIAN needs a NUMERIC column; '{column}' is {kind}.")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _number(value: Any) -> float | None:
|
|
66
|
+
try:
|
|
67
|
+
return None if value is None or isinstance(value, bool) else float(value)
|
|
68
|
+
except (TypeError, ValueError):
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def weighted_median(counts: list[tuple[float, int]]) -> float | None:
|
|
73
|
+
"""The median of values given as (value, how many rows hold it); None when empty."""
|
|
74
|
+
ordered = sorted(counts)
|
|
75
|
+
total = sum(n for _, n in ordered)
|
|
76
|
+
if total == 0:
|
|
77
|
+
return None
|
|
78
|
+
wanted = [(total - 1) // 2, total // 2]
|
|
79
|
+
found: list[float] = []
|
|
80
|
+
seen = 0
|
|
81
|
+
for value, n in ordered:
|
|
82
|
+
found.extend(value for position in wanted if seen <= position < seen + n)
|
|
83
|
+
seen += n
|
|
84
|
+
return (found[0] + found[1]) / 2
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _counts_by_group(
|
|
88
|
+
reads: ReadContext, column: str, group_by: list[Any], condition: Any
|
|
89
|
+
) -> tuple[dict[tuple[Any, ...], list[tuple[float, int]]], int]:
|
|
90
|
+
"""(value, rows) per group for one column, and how many blank rows were left out."""
|
|
91
|
+
fields: dict[str, Any] = {
|
|
92
|
+
"aggregations": [{"function": "COUNT", "as_name": "n"}],
|
|
93
|
+
"group_by": [*group_by, column],
|
|
94
|
+
"limit": BACKEND_ROW_CAP,
|
|
95
|
+
}
|
|
96
|
+
if condition is not None:
|
|
97
|
+
fields[CONDITION_KWARG] = condition
|
|
98
|
+
rows = reads.query(**fields).get("data") or []
|
|
99
|
+
if len(rows) >= BACKEND_ROW_CAP:
|
|
100
|
+
raise _fail(
|
|
101
|
+
"Too many distinct values to take an exact median "
|
|
102
|
+
f"(the backend returns at most {BACKEND_ROW_CAP} groups).",
|
|
103
|
+
"Narrow the read with a condition.",
|
|
104
|
+
)
|
|
105
|
+
width = len(group_by)
|
|
106
|
+
counts: dict[tuple[Any, ...], list[tuple[float, int]]] = defaultdict(list)
|
|
107
|
+
blank = 0
|
|
108
|
+
for row in rows:
|
|
109
|
+
key = tuple(row.get(f"group_{i}") for i in range(width))
|
|
110
|
+
value, n = _number(row.get(f"group_{width}")), int(row.get("agg_0") or 0)
|
|
111
|
+
bucket = counts[key] # a group whose values are all blank still gets a row
|
|
112
|
+
if value is None:
|
|
113
|
+
blank += n
|
|
114
|
+
else:
|
|
115
|
+
bucket.append((value, n))
|
|
116
|
+
return counts, blank
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def aggregate(reads: ReadContext, fields: dict[str, Any], condition: Any) -> dict[str, Any]:
|
|
120
|
+
"""Answer a MEDIAN read with rows shaped like the backend's (``group_N``, ``agg_N``/``metric``).
|
|
121
|
+
|
|
122
|
+
``fields`` holds the resolved SDK kwargs (internal column names).
|
|
123
|
+
"""
|
|
124
|
+
group_by = list(fields.get("group_by") or [])
|
|
125
|
+
items = [fields["metric"]] if "metric" in fields else list(fields["aggregations"])
|
|
126
|
+
keys = ["metric"] if "metric" in fields else [f"agg_{i}" for i in range(len(items))]
|
|
127
|
+
merged: dict[tuple[Any, ...], dict[str, Any]] = {}
|
|
128
|
+
skipped: dict[str, int] = {}
|
|
129
|
+
for key, item in zip(keys, items, strict=True):
|
|
130
|
+
counts, blank = _counts_by_group(reads, item["column"], group_by, condition)
|
|
131
|
+
if not group_by:
|
|
132
|
+
counts.setdefault((), [])
|
|
133
|
+
for group, values in counts.items():
|
|
134
|
+
row = merged.setdefault(group, {f"group_{i}": v for i, v in enumerate(group)})
|
|
135
|
+
row[key] = weighted_median(values)
|
|
136
|
+
if blank:
|
|
137
|
+
skipped[item["as_name"]] = blank
|
|
138
|
+
rows = list(merged.values())
|
|
139
|
+
result: dict[str, Any] = {"data": rows, "row_count": len(rows)}
|
|
140
|
+
if skipped:
|
|
141
|
+
named = ", ".join(f"{label}: {n}" for label, n in skipped.items())
|
|
142
|
+
result["median_note"] = (
|
|
143
|
+
f"MEDIAN is over non-blank values only; blank rows left out ({named})."
|
|
144
|
+
)
|
|
145
|
+
return result
|
|
@@ -297,6 +297,16 @@ POSITIONAL_OVERRIDES: dict[str, tuple[PositionalSpec, ...]] = {
|
|
|
297
297
|
example_value="deals_2026-10.csv",
|
|
298
298
|
),
|
|
299
299
|
),
|
|
300
|
+
"connector.version.spec.get": (
|
|
301
|
+
PositionalSpec(
|
|
302
|
+
name="connector_slug",
|
|
303
|
+
type=str,
|
|
304
|
+
required=True,
|
|
305
|
+
help="The connector's slug, as 'connector draft spec get' shows it.",
|
|
306
|
+
example_value="isams_ab12cd34",
|
|
307
|
+
),
|
|
308
|
+
PositionalSpec(name="version", type=int, required=True, help="The version number, from 1."),
|
|
309
|
+
),
|
|
300
310
|
"dashboard.chat.attachment.upload": (
|
|
301
311
|
PositionalSpec(name="dashboard_id", type=int, required=True, help="ID of the dashboard."),
|
|
302
312
|
PositionalSpec(
|
|
@@ -214,10 +214,6 @@ class SdkMammothService:
|
|
|
214
214
|
kwargs["job_timeout"] = job_timeout
|
|
215
215
|
if pipeline_timeout is not None:
|
|
216
216
|
kwargs["pipeline_timeout"] = pipeline_timeout
|
|
217
|
-
if embedded.active():
|
|
218
|
-
# The server answering is this process's own worker: a retry of a 5xx read
|
|
219
|
-
# adds load to the worker that is already overloaded.
|
|
220
|
-
kwargs["retry_gateway_errors"] = False
|
|
221
217
|
credential: dict[str, Any] = (
|
|
222
218
|
{"token_provider": auth.token_provider, "workspace_id": auth.workspace_id}
|
|
223
219
|
if auth.token_provider is not None
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mammoth-cli"
|
|
3
|
-
version = "2.4.
|
|
3
|
+
version = "2.4.2"
|
|
4
4
|
description = "Command-line interface for the Mammoth Analytics platform"
|
|
5
5
|
authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "LicenseRef-Proprietary"
|
|
8
8
|
requires-python = ">=3.12,<3.15"
|
|
9
9
|
dependencies = [
|
|
10
|
-
"mammoth-io (>=0.8.
|
|
10
|
+
"mammoth-io (>=0.8.54,<0.9)",
|
|
11
11
|
"typer (>=0.27,<0.28)",
|
|
12
12
|
"click (>=8.1,<9)",
|
|
13
13
|
"rich (>=15,<16)",
|
|
@@ -380,6 +380,20 @@ commands:
|
|
|
380
380
|
kind: object
|
|
381
381
|
- command_id: agent.access.me
|
|
382
382
|
output_schema: openapi
|
|
383
|
+
- command_id: agent.access.today
|
|
384
|
+
output_schema:
|
|
385
|
+
type: object
|
|
386
|
+
required: [state, updating, blocks]
|
|
387
|
+
properties:
|
|
388
|
+
state:
|
|
389
|
+
type: string
|
|
390
|
+
enum: [page, writing, empty]
|
|
391
|
+
updating:
|
|
392
|
+
type: boolean
|
|
393
|
+
blocks:
|
|
394
|
+
type: array
|
|
395
|
+
items:
|
|
396
|
+
type: object
|
|
383
397
|
- command_id: agent.access.people
|
|
384
398
|
output_schema: openapi
|
|
385
399
|
known_restrictions: Only a manager of the workspace's AI Agent settings can list the people.
|
|
@@ -242,6 +242,28 @@ commands:
|
|
|
242
242
|
`limit_requested`, `limit_applied` and `source_row_count`. A preview is a sample; save the draft
|
|
243
243
|
to read every row.
|
|
244
244
|
no_readback: returns the source's first rows itself; nothing is saved for a read to show
|
|
245
|
+
- command_id: connector.draft.spec.get
|
|
246
|
+
output_schema:
|
|
247
|
+
type: object
|
|
248
|
+
required: [spec, tables]
|
|
249
|
+
properties:
|
|
250
|
+
spec:
|
|
251
|
+
type: object
|
|
252
|
+
tables:
|
|
253
|
+
type: array
|
|
254
|
+
items:
|
|
255
|
+
type: object
|
|
256
|
+
- command_id: connector.version.spec.get
|
|
257
|
+
output_schema:
|
|
258
|
+
type: object
|
|
259
|
+
required: [spec, tables]
|
|
260
|
+
properties:
|
|
261
|
+
spec:
|
|
262
|
+
type: object
|
|
263
|
+
tables:
|
|
264
|
+
type: array
|
|
265
|
+
items:
|
|
266
|
+
type: object
|
|
245
267
|
- command_id: connector.draft.update
|
|
246
268
|
output_schema:
|
|
247
269
|
ref: WriteResult
|
|
@@ -291,7 +291,8 @@ commands:
|
|
|
291
291
|
known_restrictions: 'Read-only: computes and returns an aggregated result without adding a task to the
|
|
292
292
|
view''s pipeline or otherwise changing it. Pass exactly one of ''aggregations'' (a PIVOT group-by;
|
|
293
293
|
''group_by'' is optional) or ''metric'' (a single METRIC value). ''function'' is one of SUM, COUNT,
|
|
294
|
-
AVG, MIN, MAX, STDDEV, DISTINCT_COUNT.
|
|
294
|
+
AVG, MIN, MAX, STDDEV, DISTINCT_COUNT, MEDIAN. MEDIAN is exact over a NUMERIC column''s non-blank
|
|
295
|
+
values (median_note counts the blank rows left out) and goes in a read of its own. A group_by item is a column name, or {"column": C, "truncate":
|
|
295
296
|
DAY|WEEK|MONTH|QUARTER|YEAR} to bucket a DATE (a trend over time), or {"column": C, "resolution":
|
|
296
297
|
N} to bucket a NUMERIC; grouping by a raw date gives one row per day. A metric is a number: only COUNT
|
|
297
298
|
and DISTINCT_COUNT work on a DATE or TEXT column. For one column''s trend, top values or spread, view
|