mammoth-cli 2.2.79__tar.gz → 2.2.80__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.2.79 → mammoth_cli-2.2.80}/PKG-INFO +5 -3
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/README.md +4 -2
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/app.py +7 -1
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +3 -5
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +10 -5
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/auth.py +14 -4
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/doctor.py +37 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/project.py +3 -0
- mammoth_cli-2.2.80/mammoth_cli/runtime/token_scope.py +52 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/dashboard_review.py +10 -4
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/skills/steering.py +4 -3
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/pyproject.toml +1 -1
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/.gitignore +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/LICENSE +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/collection.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/build-an-agent.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/rest-api-import.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/_lazy.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/help_summaries.json +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/link.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/resolve.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/schema.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/view.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/view_drivers.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/view_explore.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/view_forecast.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/view_profile.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/context/keyring_backend.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/context/oauth.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/dryrun_targets.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/intent_only.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/locked_files.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/opens.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/state.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/runtime/verify.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/append_blank_columns.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/conditional_format.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/dashboard_filters.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/data_profile.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/explore_card_edit.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/explore_cards.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/explore_to_figure.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/explore_to_image.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/folder_ids.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/job_outcome.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/listing.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/local_time.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/period_analysis.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/schema_diff.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/sql_check.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/view_analysis.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/view_variants.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/services/write_impact.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/collection.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/link.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/resolve.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/token.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/view.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/edits-target.source.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.80
|
|
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
|
|
@@ -213,8 +213,10 @@ Onboard me first:
|
|
|
213
213
|
`recommendation`, print exactly this and wait until I say done: "In the
|
|
214
214
|
Mammoth web app open Workspace settings → API Tokens → Create token (no
|
|
215
215
|
project, so I can create projects), copy the token (it starts with mm_ and
|
|
216
|
-
is shown once), then run in your own terminal: mammoth auth login"
|
|
217
|
-
|
|
216
|
+
is shown once), then run in your own terminal: mammoth auth login". Or run
|
|
217
|
+
`mammoth auth login --device` yourself, show me the link and code it prints and wait
|
|
218
|
+
for it to finish — never ask for, read, or pass the token yourself, and never run any
|
|
219
|
+
other auth login method.
|
|
218
220
|
3. Require `mammoth doctor` to pass, then run `mammoth skill show` and
|
|
219
221
|
follow the guide it prints.
|
|
220
222
|
Work inside `mammoth project ensure 'PROJECT NAME'` unless I name a project;
|
|
@@ -184,8 +184,10 @@ Onboard me first:
|
|
|
184
184
|
`recommendation`, print exactly this and wait until I say done: "In the
|
|
185
185
|
Mammoth web app open Workspace settings → API Tokens → Create token (no
|
|
186
186
|
project, so I can create projects), copy the token (it starts with mm_ and
|
|
187
|
-
is shown once), then run in your own terminal: mammoth auth login"
|
|
188
|
-
|
|
187
|
+
is shown once), then run in your own terminal: mammoth auth login". Or run
|
|
188
|
+
`mammoth auth login --device` yourself, show me the link and code it prints and wait
|
|
189
|
+
for it to finish — never ask for, read, or pass the token yourself, and never run any
|
|
190
|
+
other auth login method.
|
|
189
191
|
3. Require `mammoth doctor` to pass, then run `mammoth skill show` and
|
|
190
192
|
follow the guide it prints.
|
|
191
193
|
Work inside `mammoth project ensure 'PROJECT NAME'` unless I name a project;
|
|
@@ -1307,6 +1307,11 @@ _HELP_NOTES = {
|
|
|
1307
1307
|
),
|
|
1308
1308
|
}
|
|
1309
1309
|
|
|
1310
|
+
#: Commands whose ``--input`` fields apply to one path only; the label says which.
|
|
1311
|
+
_INPUT_FIELDS_LABEL = {
|
|
1312
|
+
"auth.login": "Input fields (--method token only; --device and --method oauth take none)",
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1310
1315
|
|
|
1311
1316
|
def _command_help(command_id: str, record: dict[str, Any] | None) -> str | None:
|
|
1312
1317
|
"""Build a command's user-facing ``--help`` summary.
|
|
@@ -1335,7 +1340,8 @@ def _command_help(command_id: str, record: dict[str, Any] | None) -> str | None:
|
|
|
1335
1340
|
parts.append(f"Example: {example}")
|
|
1336
1341
|
fields = _help_input_fields(command_id)
|
|
1337
1342
|
if fields:
|
|
1338
|
-
|
|
1343
|
+
label = _INPUT_FIELDS_LABEL.get(command_id, "Input fields")
|
|
1344
|
+
parts.append(f"{label}: {fields}")
|
|
1339
1345
|
return "\n\n".join(parts) or None
|
|
1340
1346
|
|
|
1341
1347
|
|
|
@@ -32,11 +32,9 @@ mammoth project ensure 'PROJECT NAME' # active project
|
|
|
32
32
|
Never proceed if `doctor` fails.
|
|
33
33
|
On a 502, 504 or timeout, `mammoth doctor --input '{"wait": 300}'`
|
|
34
34
|
re-probes that long; continue once it passes. Production is the `app` endpoint; use `release` only
|
|
35
|
-
when named, and check `meta.profile`/`auth status` `endpoint` match. If no profile has credentials,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
wait; never ask for the token in chat, read one from a file/env var, or run
|
|
39
|
-
`auth login` yourself. If an envelope carries `meta.update_available`, run its `command` first.
|
|
35
|
+
when named, and check `meta.profile`/`auth status` `endpoint` match. If no profile has credentials, run `mammoth auth login --device` (`--profile NAME`), show the user its
|
|
36
|
+
link and code and wait for it to exit ([auth](references/auth.md)). Run no other login
|
|
37
|
+
method, and never ask for the token in chat or read one from a file/env var. If an envelope carries `meta.update_available`, run its `command` first.
|
|
40
38
|
|
|
41
39
|
Piped stdout is compact JSON with prompts off; if not piped, `export
|
|
42
40
|
MAMMOTH_OUTPUT=json MAMMOTH_NO_INPUT=1` once.
|
{mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md
RENAMED
|
@@ -19,8 +19,10 @@ created without a project.
|
|
|
19
19
|
reports `credential: oauth` and `expires_at`. A refresh that fails exits 4 with `login_expired`:
|
|
20
20
|
tell the operator to run `mammoth auth login` again. `--no-browser` prints the URL. `--device` is the sign-in for a
|
|
21
21
|
machine with no browser: it prints a short code and a URL for the operator to approve on another
|
|
22
|
-
device, then polls.
|
|
23
|
-
|
|
22
|
+
device, then polls. An agent may run `mammoth auth login --device` (and only that): it prints the
|
|
23
|
+
link and code on stderr, the agent shows both to the user, and the command exits once the user has
|
|
24
|
+
approved on their device. Browser sign-in (`--method oauth`) and token login are for the operator's
|
|
25
|
+
own terminal; an agent never runs them. A key made with `token create` expires after 30 days: `cli_key_expired` means run
|
|
24
26
|
`mammoth auth login` again. `auth logout` also revokes the
|
|
25
27
|
connection on the server, and warns (still clearing local state) if it cannot.
|
|
26
28
|
|
|
@@ -66,9 +68,12 @@ human operator:
|
|
|
66
68
|
2. Wait for the operator to confirm, then re-run
|
|
67
69
|
`mammoth auth status --profile PROFILE` and
|
|
68
70
|
`mammoth doctor --profile PROFILE`.
|
|
69
|
-
3. Do not ask the operator to paste the token into chat.
|
|
70
|
-
`auth login
|
|
71
|
-
|
|
71
|
+
3. Do not ask the operator to paste the token into chat. The one login an agent
|
|
72
|
+
may run itself is `mammoth auth login --device`: it prints a link and a short
|
|
73
|
+
code on stderr; show both to the operator, wait for the command to exit, then
|
|
74
|
+
re-run `auth status`. Do not run any other `auth login` (browser, `--method token`,
|
|
75
|
+
`--input`), unless the operator has explicitly given you a protected `0600`
|
|
76
|
+
credential file path to use.
|
|
72
77
|
|
|
73
78
|
The only supported configuration is the API token and an optional one-label server prefix (default `app`). There is no base-url
|
|
74
79
|
override.
|
|
@@ -38,6 +38,7 @@ from mammoth_cli.runtime import executor
|
|
|
38
38
|
from mammoth_cli.runtime import options as go
|
|
39
39
|
from mammoth_cli.runtime.input_loader import load_input_document
|
|
40
40
|
from mammoth_cli.runtime.invocation import Invocation
|
|
41
|
+
from mammoth_cli.runtime.token_scope import pinned_project
|
|
41
42
|
from mammoth_cli.services import factory as service_factory
|
|
42
43
|
|
|
43
44
|
_STORAGE_MODES = ("auto", "keyring", "file")
|
|
@@ -360,7 +361,11 @@ def _no_choice(label: str = "choice") -> CliError:
|
|
|
360
361
|
code="login_input_required",
|
|
361
362
|
message=f"No {label} was entered.",
|
|
362
363
|
exit_status=EXIT_USAGE,
|
|
363
|
-
hint=
|
|
364
|
+
hint=(
|
|
365
|
+
"Pass --device (a code approved on another device), --method oauth --no-browser "
|
|
366
|
+
"(a sign-in URL), or --input FILE for a non-interactive login."
|
|
367
|
+
),
|
|
368
|
+
recovery_commands=["mammoth auth login --device"],
|
|
364
369
|
)
|
|
365
370
|
|
|
366
371
|
|
|
@@ -501,14 +506,17 @@ def _run_login(
|
|
|
501
506
|
else:
|
|
502
507
|
raise CliError(
|
|
503
508
|
code="login_input_required",
|
|
504
|
-
message="Non-interactive login
|
|
509
|
+
message="Non-interactive login needs --device, --method oauth --no-browser or --input.",
|
|
505
510
|
exit_status=EXIT_USAGE,
|
|
506
511
|
hint=(
|
|
507
512
|
"Interactive prompting is off because "
|
|
508
513
|
+ "; ".join(blockers)
|
|
509
|
-
+ ". Pass --
|
|
514
|
+
+ ". Pass --device to get a link and code the user approves on any other device, "
|
|
515
|
+
"or --method oauth --no-browser to get a sign-in URL, "
|
|
516
|
+
"or --input FILE|- (with --input-format for stdin) with an API token, "
|
|
510
517
|
"or run in an interactive terminal."
|
|
511
518
|
),
|
|
519
|
+
recovery_commands=["mammoth auth login --device"],
|
|
512
520
|
)
|
|
513
521
|
|
|
514
522
|
resolved_base_url = resolve_base_url(effective_prefix)
|
|
@@ -671,6 +679,7 @@ def _run_status(invocation: Invocation, *, check: bool) -> tuple[dict[str, Any],
|
|
|
671
679
|
try:
|
|
672
680
|
service.check_connection()
|
|
673
681
|
data["connected"] = True
|
|
682
|
+
data["token_project"] = pinned_project(service)
|
|
674
683
|
finally:
|
|
675
684
|
service.close()
|
|
676
685
|
data["checked"] = True
|
|
@@ -695,7 +704,8 @@ def auth_status(
|
|
|
695
704
|
) -> None:
|
|
696
705
|
"""Report local authentication state for one profile.
|
|
697
706
|
|
|
698
|
-
Makes no network call unless `--check` is given.
|
|
707
|
+
Makes no network call unless `--check` is given. With `--check` it also reports
|
|
708
|
+
`token_project`: the project id the token is limited to, or null when it is not limited.
|
|
699
709
|
"""
|
|
700
710
|
invocation = go.make_invocation(
|
|
701
711
|
"auth.status",
|
|
@@ -25,6 +25,8 @@ from mammoth_cli.errors.envelope import CliError
|
|
|
25
25
|
from mammoth_cli.runtime import embedded, runlog, updates
|
|
26
26
|
from mammoth_cli.runtime.invocation import Invocation
|
|
27
27
|
from mammoth_cli.runtime.session import open_service, resolved_project
|
|
28
|
+
from mammoth_cli.runtime.token_scope import pinned_project
|
|
29
|
+
from mammoth_cli.services.protocol import MammothService
|
|
28
30
|
|
|
29
31
|
HandlerResult = tuple[Any, dict[str, Any]]
|
|
30
32
|
|
|
@@ -137,6 +139,38 @@ def _visible_projects(service: Any) -> list[dict[str, Any]]:
|
|
|
137
139
|
return [p for p in service.list_all_projects() if isinstance(p, dict)]
|
|
138
140
|
|
|
139
141
|
|
|
142
|
+
def _token_scope(service: MammothService) -> CliError | int | None:
|
|
143
|
+
"""The project the token is limited to, or the error that kept doctor from learning it."""
|
|
144
|
+
try:
|
|
145
|
+
return pinned_project(service)
|
|
146
|
+
except CliError as error:
|
|
147
|
+
return error
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def _scope_check(scope: CliError | int | None, selected_project: int | None) -> dict[str, Any]:
|
|
151
|
+
"""Report the project the token is limited to; a limited token must work in that project."""
|
|
152
|
+
if isinstance(scope, CliError):
|
|
153
|
+
return {
|
|
154
|
+
**_check(
|
|
155
|
+
"token_scope", False, f"could not read the token's project scope: {scope.message}"
|
|
156
|
+
),
|
|
157
|
+
"pinned_project_id": None,
|
|
158
|
+
}
|
|
159
|
+
if scope is None:
|
|
160
|
+
return {
|
|
161
|
+
**_check("token_scope", True, "token is not limited to a project"),
|
|
162
|
+
"pinned_project_id": None,
|
|
163
|
+
}
|
|
164
|
+
if selected_project not in (None, scope):
|
|
165
|
+
detail = (
|
|
166
|
+
f"token is limited to project {scope} but project {selected_project} is selected; "
|
|
167
|
+
f"use --project {scope}"
|
|
168
|
+
)
|
|
169
|
+
return {**_check("token_scope", False, detail), "pinned_project_id": scope}
|
|
170
|
+
detail = f"token is limited to project {scope}; it cannot create or open other projects"
|
|
171
|
+
return {**_check("token_scope", True, detail), "pinned_project_id": scope}
|
|
172
|
+
|
|
173
|
+
|
|
140
174
|
def _nearest_existing(path: Path) -> Path:
|
|
141
175
|
"""Return ``path`` or its closest existing ancestor.
|
|
142
176
|
|
|
@@ -283,6 +317,7 @@ def doctor(invocation: Invocation) -> HandlerResult:
|
|
|
283
317
|
connection_ok = False
|
|
284
318
|
connection_detail = "not attempted"
|
|
285
319
|
projects: list[dict[str, Any]] | None = None
|
|
320
|
+
scope: CliError | int | None = None
|
|
286
321
|
wait_seconds = _wait_seconds(invocation)
|
|
287
322
|
if auth_ok:
|
|
288
323
|
started = time.monotonic()
|
|
@@ -293,6 +328,7 @@ def doctor(invocation: Invocation) -> HandlerResult:
|
|
|
293
328
|
with open_service(invocation) as (service, _auth):
|
|
294
329
|
service.check_connection()
|
|
295
330
|
projects = _visible_projects(service)
|
|
331
|
+
scope = _token_scope(service)
|
|
296
332
|
break
|
|
297
333
|
except CliError as error:
|
|
298
334
|
# A 502/504 or timeout during an outage: with ``wait``,
|
|
@@ -324,6 +360,7 @@ def doctor(invocation: Invocation) -> HandlerResult:
|
|
|
324
360
|
# access is claimed by nobody here: the first write reports it.
|
|
325
361
|
selected_project = resolved_project(invocation)
|
|
326
362
|
if projects is not None:
|
|
363
|
+
checks.append(_scope_check(scope, selected_project))
|
|
327
364
|
visible_ids = [p.get("id") for p in projects]
|
|
328
365
|
checks.append(
|
|
329
366
|
{
|
|
@@ -37,6 +37,7 @@ from mammoth_cli.runtime.confirm import (
|
|
|
37
37
|
)
|
|
38
38
|
from mammoth_cli.runtime.invocation import Invocation
|
|
39
39
|
from mammoth_cli.runtime.session import open_service, resolved_project
|
|
40
|
+
from mammoth_cli.runtime.token_scope import require_unpinned_token
|
|
40
41
|
from mammoth_cli.services import job_outcome
|
|
41
42
|
|
|
42
43
|
HandlerResult = tuple[Any, dict[str, Any]]
|
|
@@ -292,6 +293,7 @@ def project_create(invocation: Invocation) -> HandlerResult:
|
|
|
292
293
|
if field in document:
|
|
293
294
|
kwargs[field] = document[field]
|
|
294
295
|
with open_service(invocation) as (service, auth):
|
|
296
|
+
require_unpinned_token(service, "create a project")
|
|
295
297
|
data = service.call(_symbol(invocation), **kwargs)
|
|
296
298
|
_require_project_access(service, data)
|
|
297
299
|
return data, _meta(invocation, auth.workspace_id, resolved_project(invocation))
|
|
@@ -404,6 +406,7 @@ def project_ensure(invocation: Invocation) -> HandlerResult:
|
|
|
404
406
|
}
|
|
405
407
|
data["active"] = _make_active_project(invocation, data["project_id"])
|
|
406
408
|
return data, _meta(invocation, auth.workspace_id, chosen.get("id"))
|
|
409
|
+
require_unpinned_token(service, f"create the project {name!r}")
|
|
407
410
|
created = service.call(_ENSURE_CREATE_SYMBOL, name=name)
|
|
408
411
|
record = created.get("project", created) if isinstance(created, dict) else {}
|
|
409
412
|
project_id = record.get("id") if isinstance(record, dict) else None
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""The project, if any, a credential is pinned to.
|
|
2
|
+
|
|
3
|
+
A token created for one project is refused (HTTP 403 ``authorization_required``)
|
|
4
|
+
in every other project. The server says which project that is in
|
|
5
|
+
``GET /workspaces/current`` (field ``project``); this module reads it so a
|
|
6
|
+
command can refuse before it creates something the token cannot open.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from mammoth_cli.errors.envelope import CODE_AUTHORIZATION_REQUIRED, EXIT_AUTH, CliError
|
|
12
|
+
from mammoth_cli.services.protocol import MammothService
|
|
13
|
+
|
|
14
|
+
_CURRENT_SYMBOL = "mammoth.api.workspace.WorkspaceAPI.current"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def pinned_project(service: MammothService) -> int | None:
|
|
18
|
+
"""The project id this credential is limited to, or None when it is not limited."""
|
|
19
|
+
current = service.call(_CURRENT_SYMBOL)
|
|
20
|
+
project = current.get("project") if isinstance(current, dict) else current.project
|
|
21
|
+
return project if isinstance(project, int) and project > 0 else None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def require_unpinned_token(service: MammothService, action: str) -> None:
|
|
25
|
+
"""Refuse ``action`` when the server says the token is limited to one project."""
|
|
26
|
+
refuse_pinned_project(pinned_project(service), action)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def refuse_pinned_project(project_id: int | None, action: str) -> None:
|
|
30
|
+
"""Refuse ``action`` for a token limited to ``project_id``; None means not limited.
|
|
31
|
+
|
|
32
|
+
Raises:
|
|
33
|
+
CliError: ``authorization_required`` naming the project the token is
|
|
34
|
+
limited to, before anything is created.
|
|
35
|
+
"""
|
|
36
|
+
if project_id is None:
|
|
37
|
+
return
|
|
38
|
+
raise CliError(
|
|
39
|
+
code=CODE_AUTHORIZATION_REQUIRED,
|
|
40
|
+
message=(
|
|
41
|
+
f"This token is limited to project {project_id}, so it cannot {action}: "
|
|
42
|
+
"a project it creates would be closed to it."
|
|
43
|
+
),
|
|
44
|
+
exit_status=EXIT_AUTH,
|
|
45
|
+
hint=(
|
|
46
|
+
f"Work in project {project_id} (pass --project {project_id}), or ask the operator "
|
|
47
|
+
"for a token created without a project."
|
|
48
|
+
),
|
|
49
|
+
details={"pinned_project_id": project_id},
|
|
50
|
+
authorization_required=True,
|
|
51
|
+
recovery_commands=[f"mammoth project get {project_id}"],
|
|
52
|
+
)
|
|
@@ -37,6 +37,7 @@ _MONEY = re.compile(
|
|
|
37
37
|
r"price|amount|revenue|sales|cost|spend|fee|income|profit|margin|total|value|gmv|arr|mrr",
|
|
38
38
|
re.IGNORECASE,
|
|
39
39
|
)
|
|
40
|
+
_REVENUE = re.compile(r"revenue|sales|amount|gmv|income|total", re.IGNORECASE)
|
|
40
41
|
_UNIT = re.compile(r"price|rate|unit|per[_ ]", re.IGNORECASE)
|
|
41
42
|
_QUANTITY = re.compile(r"^(qty|quantity|units?|count|volume|pieces|items?)\b", re.IGNORECASE)
|
|
42
43
|
_RATE_TITLE = re.compile(r"\brate\b|%|on[- ]time|share of", re.IGNORECASE)
|
|
@@ -237,18 +238,23 @@ def review(
|
|
|
237
238
|
warnings.append(record)
|
|
238
239
|
summed = sorted({name for name, agg in aggs if name in unit_prices and agg == "sum"})
|
|
239
240
|
if summed:
|
|
241
|
+
revenue = next((name for name in money if _REVENUE.search(name)), None)
|
|
240
242
|
record = {
|
|
241
243
|
"issue": "unit_price_summed",
|
|
242
244
|
"detail": (
|
|
243
245
|
f"A chart sums the unit price {summed[0]}; that total means nothing. "
|
|
244
246
|
+ (
|
|
245
|
-
f"
|
|
246
|
-
if
|
|
247
|
-
else
|
|
247
|
+
f"The view already has {revenue}: chart the sum of {revenue} instead."
|
|
248
|
+
if revenue
|
|
249
|
+
else (
|
|
250
|
+
f"Chart the sum of revenue = {quantities[0]} * {summed[0]} instead."
|
|
251
|
+
if quantities
|
|
252
|
+
else "Use avg, or chart revenue instead."
|
|
253
|
+
)
|
|
248
254
|
)
|
|
249
255
|
),
|
|
250
256
|
}
|
|
251
|
-
if quantities:
|
|
257
|
+
if quantities and not revenue:
|
|
252
258
|
record["fix"] = _math_fix(view_ref, dataset_id, quantities[0], summed[0])
|
|
253
259
|
warnings.append(record)
|
|
254
260
|
shown = measures | dims
|
|
@@ -31,9 +31,10 @@ transform --help`). Before the first Mammoth command in a session run
|
|
|
31
31
|
`mammoth doctor` (it must pass), then `mammoth skill show` and follow that
|
|
32
32
|
guide. If `mammoth` is missing, install it with `pip install mammoth-cli`
|
|
33
33
|
(or `uv tool install mammoth-cli`, then `uv tool update-shell` so it is on
|
|
34
|
-
PATH). If `mammoth auth status` shows no credentials,
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
PATH). If `mammoth auth status` shows no credentials, run
|
|
35
|
+
`mammoth auth login --device`, show the user the link and code it prints, and wait
|
|
36
|
+
for it to finish; never run any other login method, and never ask for, read, or
|
|
37
|
+
pass a key or secret.
|
|
37
38
|
Piped output is compact JSON. Take ids only from reads; run `mammoth schema get
|
|
38
39
|
COMMAND_ID` before a command you have not used (`schema get A,B,C` reads
|
|
39
40
|
several in one call); destructive commands need
|
|
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
|
|
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.2.79 → mammoth_cli-2.2.80}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.2.79 → mammoth_cli-2.2.80}/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
|