mammoth-cli 2.0.53__tar.gz → 2.0.55__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/.gitignore +1 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/PKG-INFO +2 -2
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +5 -5
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +2 -2
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +80 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +33 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/project.py +14 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/registry.py +8 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/schema.py +40 -2
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/view.py +54 -5
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/pyproject.toml +2 -2
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/dashboard.yaml +327 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/sdk-catalog.source.yaml +72 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/sdk-methods.yaml +109 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/LICENSE +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/README.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/view.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.55
|
|
4
4
|
Summary: Command-line interface for the Mammoth Analytics platform
|
|
5
5
|
Project-URL: homepage, https://mammoth.io
|
|
6
6
|
Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
|
|
@@ -17,7 +17,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
17
17
|
Requires-Python: <3.15,>=3.12
|
|
18
18
|
Requires-Dist: jsonschema>=4.20
|
|
19
19
|
Requires-Dist: keyring<26,>=25.7
|
|
20
|
-
Requires-Dist: mammoth-io<0.8,>=0.7.
|
|
20
|
+
Requires-Dist: mammoth-io<0.8,>=0.7.26
|
|
21
21
|
Requires-Dist: platformdirs<5,>=4.10
|
|
22
22
|
Requires-Dist: pydantic<3,>=2.13
|
|
23
23
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mammoth-cli
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.55
|
|
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
|
|
|
@@ -140,10 +140,10 @@ your report. If no column links the files, ask before you combine them.
|
|
|
140
140
|
- `mammoth skill show --input '{"file": "references/recipes/transforms.md"}'`
|
|
141
141
|
prints any file of this skill; `mammoth skill agents-md install` writes a
|
|
142
142
|
steering block into a repository's AGENTS.md so later sessions start here.
|
|
143
|
-
- `COMMAND --help` lists
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
143
|
+
- `COMMAND --help` lists input fields; `schema find WORDS` inlines
|
|
144
|
+
`accepted_fields`/`agent_example` for top matches, else `mammoth schema
|
|
145
|
+
get COMMAND_ID` (`--input '{"full": true}'` for the schema); `schema
|
|
146
|
+
list`/`schema list view` list families.
|
|
147
147
|
- Uploads return a **dataset** id; transforms, joins, exports and previews
|
|
148
148
|
take the **view** id from `view list DATASET_ID`.
|
|
149
149
|
- `view list` and `view get` return the brief record (id, ds_id, name,
|
|
@@ -1,6 +1,6 @@
|
|
|
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 565; 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
|
|
|
@@ -21,7 +21,7 @@ Load only the applicable domain file:
|
|
|
21
21
|
- [connector](commands/connector.md) — 22 published commands
|
|
22
22
|
- [context](commands/context.md) — 3 published commands
|
|
23
23
|
- [dashboard-qa](commands/dashboard-qa.md) — 13 published commands
|
|
24
|
-
- [dashboard](commands/dashboard.md) —
|
|
24
|
+
- [dashboard](commands/dashboard.md) — 98 published commands
|
|
25
25
|
- [data-app](commands/data-app.md) — 12 published commands
|
|
26
26
|
- [dataset](commands/dataset.md) — 17 published commands
|
|
27
27
|
- [doctor](commands/doctor.md) — 1 published commands
|
|
@@ -222,6 +222,86 @@ Result: `DashboardDuplicateResult`; mutation `benign_mutation`, confirmation `no
|
|
|
222
222
|
|
|
223
223
|
Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: id. duplicated D=52 -> D2=54 Single invocation only; no error-path or variant coverage.
|
|
224
224
|
|
|
225
|
+
### `dashboard.embed.config.get`
|
|
226
|
+
|
|
227
|
+
Run: `mammoth dashboard embed config get`. Exact input fields: `mammoth schema get dashboard.embed.config.get`.
|
|
228
|
+
|
|
229
|
+
Example: `mammoth dashboard embed config get 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
230
|
+
|
|
231
|
+
Result: `DashboardEmbedConfigGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
232
|
+
|
|
233
|
+
Status on release: untried; no live run recorded.
|
|
234
|
+
|
|
235
|
+
### `dashboard.embed.config.set`
|
|
236
|
+
|
|
237
|
+
Run: `mammoth dashboard embed config set`. Exact input fields: `mammoth schema get dashboard.embed.config.set`.
|
|
238
|
+
|
|
239
|
+
Example: `mammoth dashboard embed config set 123 --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
|
|
240
|
+
|
|
241
|
+
Result: `DashboardEmbedConfigSetResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
|
|
242
|
+
|
|
243
|
+
Status on release: untried; no live run recorded.
|
|
244
|
+
|
|
245
|
+
### `dashboard.embed.key.rotate`
|
|
246
|
+
|
|
247
|
+
Run: `mammoth dashboard embed key rotate`. Exact input fields: `mammoth schema get dashboard.embed.key.rotate`.
|
|
248
|
+
|
|
249
|
+
Example: `mammoth dashboard embed key rotate 123 --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
|
|
250
|
+
|
|
251
|
+
Result: `DashboardEmbedKeyRotateResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
|
|
252
|
+
|
|
253
|
+
Status on release: untried; no live run recorded.
|
|
254
|
+
|
|
255
|
+
### `dashboard.embed.lifetime.set`
|
|
256
|
+
|
|
257
|
+
Run: `mammoth dashboard embed lifetime set`. Exact input fields: `mammoth schema get dashboard.embed.lifetime.set`.
|
|
258
|
+
|
|
259
|
+
Example: `mammoth dashboard embed lifetime set 123 --input '{"token_ttl": 1}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
260
|
+
|
|
261
|
+
Result: `DashboardEmbedLifetimeSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
262
|
+
|
|
263
|
+
Status on release: untried; no live run recorded.
|
|
264
|
+
|
|
265
|
+
### `dashboard.embed.origin.revoke`
|
|
266
|
+
|
|
267
|
+
Run: `mammoth dashboard embed origin revoke`. Exact input fields: `mammoth schema get dashboard.embed.origin.revoke`.
|
|
268
|
+
|
|
269
|
+
Example: `mammoth dashboard embed origin revoke 123 --input '{"origin": "sample"}' --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
|
|
270
|
+
|
|
271
|
+
Result: `DashboardEmbedOriginRevokeResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
|
|
272
|
+
|
|
273
|
+
Status on release: untried; no live run recorded.
|
|
274
|
+
|
|
275
|
+
### `dashboard.embed.preview-token.create`
|
|
276
|
+
|
|
277
|
+
Run: `mammoth dashboard embed preview-token create`. Exact input fields: `mammoth schema get dashboard.embed.preview-token.create`.
|
|
278
|
+
|
|
279
|
+
Example: `mammoth dashboard embed preview-token create 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
280
|
+
|
|
281
|
+
Result: `DashboardEmbedPreviewTokenCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
282
|
+
|
|
283
|
+
Status on release: untried; no live run recorded.
|
|
284
|
+
|
|
285
|
+
### `dashboard.embed.secret.rotate`
|
|
286
|
+
|
|
287
|
+
Run: `mammoth dashboard embed secret rotate`. Exact input fields: `mammoth schema get dashboard.embed.secret.rotate`.
|
|
288
|
+
|
|
289
|
+
Example: `mammoth dashboard embed secret rotate 123 --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
|
|
290
|
+
|
|
291
|
+
Result: `DashboardEmbedSecretRotateResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
|
|
292
|
+
|
|
293
|
+
Status on release: untried; no live run recorded.
|
|
294
|
+
|
|
295
|
+
### `dashboard.embed.usage.get`
|
|
296
|
+
|
|
297
|
+
Run: `mammoth dashboard embed usage get`. Exact input fields: `mammoth schema get dashboard.embed.usage.get`.
|
|
298
|
+
|
|
299
|
+
Example: `mammoth dashboard embed usage get 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
300
|
+
|
|
301
|
+
Result: `DashboardEmbedUsageGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
302
|
+
|
|
303
|
+
Status on release: untried; no live run recorded.
|
|
304
|
+
|
|
225
305
|
### `dashboard.exemplar.extract`
|
|
226
306
|
|
|
227
307
|
Run: `mammoth dashboard exemplar extract`. Exact input fields: `mammoth schema get dashboard.exemplar.extract`.
|
|
@@ -155,3 +155,36 @@ before that they return 404 `DASHBOARD_NOT_FOUND`. Legacy widget routes
|
|
|
155
155
|
`video export` needs a motion-story dashboard. Revert the share
|
|
156
156
|
(`type_of_auth: "mammoth"`) before trashing a temporary dashboard.
|
|
157
157
|
|
|
158
|
+
## Embedding a board on a third-party page
|
|
159
|
+
|
|
160
|
+
`dashboard embed config get DASHBOARD_ID` reads the board's embed settings
|
|
161
|
+
(mode, origin allowlist, the `embed_url`/`sdk_url` a snippet needs); the first
|
|
162
|
+
read on a non-public board without a key auto-mints one, so there is always a
|
|
163
|
+
key to copy. `dashboard embed config set DASHBOARD_ID --yes --confirm
|
|
164
|
+
DASHBOARD_ID --input '{"allow_any_origin": false, "allowed_origins":
|
|
165
|
+
["https://intranet.example.com"]}'` restricts which sites may frame it —
|
|
166
|
+
`allow_any_origin` defaults to true (any site). `mode: "signed"` requires a
|
|
167
|
+
host-signed token instead of the board's key, and only applies while the
|
|
168
|
+
board has no public link. `config set` is a `confirm_target` command, like
|
|
169
|
+
`dashboard archive`: it can expose the board outside Mammoth (enabling
|
|
170
|
+
embedding or widening the allowlist) or break every live embed on that board
|
|
171
|
+
(disabling it or narrowing the allowlist).
|
|
172
|
+
|
|
173
|
+
`dashboard embed key rotate DASHBOARD_ID --yes --confirm DASHBOARD_ID`
|
|
174
|
+
replaces the board's embed key (the old key keeps working for 24h unless
|
|
175
|
+
`keep_previous: false` is passed) — also `confirm_target`. `dashboard embed
|
|
176
|
+
origin revoke DASHBOARD_ID --yes --confirm DASHBOARD_ID --input
|
|
177
|
+
'{"origin": "https://old.example.com"}'` removes one origin from the
|
|
178
|
+
allowlist without touching the rest — also `confirm_target`: it immediately
|
|
179
|
+
breaks the embed on that origin's site. `dashboard embed usage get
|
|
180
|
+
DASHBOARD_ID` reports per-origin render counts and health from the embed
|
|
181
|
+
registry. `dashboard embed preview-token create DASHBOARD_ID` mints a
|
|
182
|
+
short-lived signed token for testing a row-level-security-scoped embed
|
|
183
|
+
before publishing.
|
|
184
|
+
|
|
185
|
+
Two settings are workspace-scoped, not board-scoped: `dashboard embed secret
|
|
186
|
+
rotate WORKSPACE_ID --yes --confirm WORKSPACE_ID` (also `confirm_target`;
|
|
187
|
+
returns the plaintext signing secret once, never on a read) and `dashboard
|
|
188
|
+
embed lifetime set WORKSPACE_ID --input '{"token_ttl": 900}'` (60-3600
|
|
189
|
+
seconds, how long a minted embed viewer session lives).
|
|
190
|
+
|
|
@@ -572,6 +572,20 @@ def project_check(invocation: Invocation) -> HandlerResult:
|
|
|
572
572
|
}
|
|
573
573
|
if "before_dashboard" in preview:
|
|
574
574
|
entry["before_dashboard"] = preview["before_dashboard"]
|
|
575
|
+
other_views = preview.get("other_views")
|
|
576
|
+
if other_views:
|
|
577
|
+
# Only the first (most recent) view is previewed and checked.
|
|
578
|
+
# Say so explicitly instead of letting silence read as "this
|
|
579
|
+
# is the only view" -- which view to change is the user's
|
|
580
|
+
# call unless they already named one.
|
|
581
|
+
entry["other_views"] = other_views
|
|
582
|
+
other_desc = ", ".join(f"{v['id']} ({v.get('name')})" for v in other_views)
|
|
583
|
+
to_report.append(
|
|
584
|
+
f"dataset {dataset.get('name')} (id {dataset_id}) has "
|
|
585
|
+
f"{len(other_views) + 1} views; only view {preview['view_id']} was "
|
|
586
|
+
f"checked (others: {other_desc}). Which view to change is the "
|
|
587
|
+
"user's pick unless they named one."
|
|
588
|
+
)
|
|
575
589
|
views.append(entry)
|
|
576
590
|
where = f"view {preview['view_id']} ({dataset.get('name')})"
|
|
577
591
|
to_report += [_report_line(where, w) for w in entry["column_warnings"]]
|
|
@@ -376,6 +376,14 @@ HANDLERS: dict[str, Handler] = {
|
|
|
376
376
|
"dashboard.assess-twb": dashboard_cmd.dashboard_assess_twb,
|
|
377
377
|
"dashboard.assess-pbix": dashboard_cmd.dashboard_assess_pbix,
|
|
378
378
|
"dashboard.import-workbook": dashboard_cmd.dashboard_import_workbook,
|
|
379
|
+
"dashboard.embed.config.get": dashboard_cmd.generated_dashboard,
|
|
380
|
+
"dashboard.embed.config.set": dashboard_cmd.generated_dashboard,
|
|
381
|
+
"dashboard.embed.key.rotate": dashboard_cmd.generated_dashboard,
|
|
382
|
+
"dashboard.embed.usage.get": dashboard_cmd.generated_dashboard,
|
|
383
|
+
"dashboard.embed.origin.revoke": dashboard_cmd.generated_dashboard,
|
|
384
|
+
"dashboard.embed.preview-token.create": dashboard_cmd.generated_dashboard,
|
|
385
|
+
"dashboard.embed.secret.rotate": dashboard_cmd.generated_dashboard,
|
|
386
|
+
"dashboard.embed.lifetime.set": dashboard_cmd.generated_dashboard,
|
|
379
387
|
# workflow family
|
|
380
388
|
"workflow.block.add": workflow_cmd.workflow_block_add,
|
|
381
389
|
"workflow.block.auth": workflow_cmd.workflow_block_auth,
|
|
@@ -227,6 +227,14 @@ _SCOPE_REQUIREMENTS: dict[str, dict[str, Any]] = {
|
|
|
227
227
|
|
|
228
228
|
_MAX_FIND_RESULTS = 20
|
|
229
229
|
_MAX_FIND_LIMIT = 100
|
|
230
|
+
# How many of a find's top matches carry inline accepted_fields/agent_example.
|
|
231
|
+
# 35% of all eval tool calls were command discovery (schema find -> schema
|
|
232
|
+
# get) because find's compact entry gave a command_id but not what to pass
|
|
233
|
+
# it; inlining the top few lets an agent act without a second round trip in
|
|
234
|
+
# the common case where one of them is right. Bounded to a few commands so a
|
|
235
|
+
# broad query never balloons the result (the tool result goes into the
|
|
236
|
+
# model's context).
|
|
237
|
+
_INLINE_DETAIL_COUNT = 3
|
|
230
238
|
|
|
231
239
|
# Search is intentionally a small, deterministic intent matcher rather than a
|
|
232
240
|
# fuzzy/remote search service. The aliases describe language users commonly
|
|
@@ -369,6 +377,19 @@ def _accepted_fields(record: dict[str, Any]) -> list[dict[str, Any]] | None:
|
|
|
369
377
|
]
|
|
370
378
|
|
|
371
379
|
|
|
380
|
+
def _compact_accepted_fields(record: dict[str, Any]) -> list[dict[str, Any]] | None:
|
|
381
|
+
"""``_accepted_fields`` without the per-field JSON Schema.
|
|
382
|
+
|
|
383
|
+
A find result inlines this for its top matches: enough to compose a call
|
|
384
|
+
(name, type, required, enum) without the nested-schema detail ``schema
|
|
385
|
+
get`` returns.
|
|
386
|
+
"""
|
|
387
|
+
fields = _accepted_fields(record)
|
|
388
|
+
if fields is None:
|
|
389
|
+
return None
|
|
390
|
+
return [{key: field[key] for key in ("name", "type", "required", "enum")} for field in fields]
|
|
391
|
+
|
|
392
|
+
|
|
372
393
|
def _externally_supplied_fields(command_id: str) -> frozenset[str]:
|
|
373
394
|
"""Fields supplied by positionals or authenticated CLI context."""
|
|
374
395
|
if command_id in LOCAL_COMMANDS:
|
|
@@ -872,8 +893,14 @@ def runnable_example(
|
|
|
872
893
|
# their manifests advertise; otherwise discovery emits a command that
|
|
873
894
|
# deterministically fails before dispatch.
|
|
874
895
|
tokens.append("--yes")
|
|
875
|
-
if record["command_id"]
|
|
876
|
-
|
|
896
|
+
if record["command_id"] in {
|
|
897
|
+
"project.resource-dependencies.update",
|
|
898
|
+
"dashboard.embed.key.rotate",
|
|
899
|
+
"dashboard.embed.secret.rotate",
|
|
900
|
+
"dashboard.embed.config.set",
|
|
901
|
+
"dashboard.embed.origin.revoke",
|
|
902
|
+
}:
|
|
903
|
+
# These commands have a confirm_target policy. Keep their generated
|
|
877
904
|
# example executable in non-interactive mode instead of advertising a
|
|
878
905
|
# request that the safety guard will reject.
|
|
879
906
|
tokens.extend(["--yes", "--confirm", str(_sample_positional_value(positionals[0]))])
|
|
@@ -1301,6 +1328,17 @@ def find_schemas(
|
|
|
1301
1328
|
)
|
|
1302
1329
|
total_matches = len(ranked_matches)
|
|
1303
1330
|
page = [match for _, match in ranked_matches[offset : offset + bounded_limit]]
|
|
1331
|
+
for rank, match in enumerate(page, start=offset):
|
|
1332
|
+
if rank >= _INLINE_DETAIL_COUNT:
|
|
1333
|
+
break
|
|
1334
|
+
match_record = command_by_id(match["command_id"])
|
|
1335
|
+
if match_record is None:
|
|
1336
|
+
continue
|
|
1337
|
+
fields = _compact_accepted_fields(match_record)
|
|
1338
|
+
if fields is not None:
|
|
1339
|
+
match["accepted_fields"] = fields
|
|
1340
|
+
if match_record.get("agent_example"):
|
|
1341
|
+
match["agent_example"] = match_record["agent_example"]
|
|
1304
1342
|
has_more = offset + len(page) < total_matches
|
|
1305
1343
|
continuation = (
|
|
1306
1344
|
{
|
|
@@ -2307,16 +2307,25 @@ def view_export_specialized(invocation: Invocation) -> HandlerResult:
|
|
|
2307
2307
|
if is_dataset_route and isinstance(data, int):
|
|
2308
2308
|
# The SDK returns the bare id of the dataset written to; name it, and
|
|
2309
2309
|
# say which project it landed in, so the agent's next read is obvious.
|
|
2310
|
+
# The written dataset's view id/name is resolved here too: an append
|
|
2311
|
+
# (save_as_mode=APPEND_TO_DS) never changes it, so telling the agent
|
|
2312
|
+
# to go re-list every time -- as a text-only 'next' hint used to --
|
|
2313
|
+
# cost one avoidable round trip per append to the same dataset. Best
|
|
2314
|
+
# effort: a failed lookup falls back to the old hint instead.
|
|
2310
2315
|
data = {
|
|
2311
2316
|
"dataset_id": data,
|
|
2312
2317
|
"project_id": result_project_id,
|
|
2313
2318
|
"source_view_id": dataview_id,
|
|
2314
|
-
"next": (
|
|
2315
|
-
f"mammoth view list {data}"
|
|
2316
|
-
+ (f" --project {result_project_id}" if target_project is not None else "")
|
|
2317
|
-
),
|
|
2318
2319
|
}
|
|
2319
|
-
|
|
2320
|
+
view_info = _dataset_view_info(service, data["dataset_id"], result_project_id)
|
|
2321
|
+
if view_info is not None:
|
|
2322
|
+
data["view_id"] = view_info["id"]
|
|
2323
|
+
data["view_name"] = view_info["name"]
|
|
2324
|
+
else:
|
|
2325
|
+
data["next"] = f"mammoth view list {data['dataset_id']}" + (
|
|
2326
|
+
f" --project {result_project_id}" if target_project is not None else ""
|
|
2327
|
+
)
|
|
2328
|
+
rows_after = view_info["row_count"] if view_info is not None else None
|
|
2320
2329
|
if rows_after is not None:
|
|
2321
2330
|
data["rows_after"] = rows_after
|
|
2322
2331
|
if rows_before is not None:
|
|
@@ -2342,6 +2351,35 @@ def _dataset_row_count(service: Any, dataset_id: int, project_id: int | None) ->
|
|
|
2342
2351
|
return None
|
|
2343
2352
|
|
|
2344
2353
|
|
|
2354
|
+
def _dataset_view_info(
|
|
2355
|
+
service: Any, dataset_id: int, project_id: int | None
|
|
2356
|
+
) -> dict[str, Any] | None:
|
|
2357
|
+
"""Id, name, and row count of a dataset's current (most recent) view, best effort.
|
|
2358
|
+
|
|
2359
|
+
Used right after ``view.export.dataset`` writes to ``dataset_id``: the
|
|
2360
|
+
id/name let the response carry the view an agent needs next instead of a
|
|
2361
|
+
'go list it' hint (an append never changes it), and the row count feeds
|
|
2362
|
+
``rows_after`` -- one listing call instead of two. Any failure returns
|
|
2363
|
+
None; the caller falls back to the 'next' hint and skips ``rows_after``.
|
|
2364
|
+
"""
|
|
2365
|
+
try:
|
|
2366
|
+
listing = service.call(_DATAVIEW_LIST_SYMBOL, dataset_id=dataset_id, project_id=project_id)
|
|
2367
|
+
views = listing.get("dataviews") if isinstance(listing, dict) else None
|
|
2368
|
+
if not isinstance(views, list) or not views or not isinstance(views[0], dict):
|
|
2369
|
+
return None
|
|
2370
|
+
view_id = views[0].get("id")
|
|
2371
|
+
if not isinstance(view_id, int):
|
|
2372
|
+
return None
|
|
2373
|
+
except Exception: # noqa: BLE001 -- best effort; the caller's fallbacks still work
|
|
2374
|
+
return None
|
|
2375
|
+
row_count = views[0].get("row_count")
|
|
2376
|
+
return {
|
|
2377
|
+
"id": view_id,
|
|
2378
|
+
"name": views[0].get("name"),
|
|
2379
|
+
"row_count": int(row_count) if row_count is not None else None,
|
|
2380
|
+
}
|
|
2381
|
+
|
|
2382
|
+
|
|
2345
2383
|
_DATAVIEW_LIST_SYMBOL = "mammoth.api.dataviews.DataviewsAPI.list"
|
|
2346
2384
|
#: Rows an upload shows of each new view (enough to see keys and formats).
|
|
2347
2385
|
_UPLOAD_SAMPLE_ROWS = 3
|
|
@@ -2365,6 +2403,15 @@ def upload_preview(service: Any, dataset_id: int, project_id: int | None) -> dic
|
|
|
2365
2403
|
views = listing.get("dataviews") if isinstance(listing, dict) else None
|
|
2366
2404
|
if not isinstance(views, list) or not views or not isinstance(views[0], dict):
|
|
2367
2405
|
return None
|
|
2406
|
+
# A dataset with more than one live view has one previewed here; the
|
|
2407
|
+
# rest are named (id + name) so a caller (``project.check``) can say
|
|
2408
|
+
# a view besides the one checked exists, rather than silently acting
|
|
2409
|
+
# on the single view this function happens to preview.
|
|
2410
|
+
other_views = [
|
|
2411
|
+
{"id": other.get("id"), "name": other.get("name")}
|
|
2412
|
+
for other in views[1:]
|
|
2413
|
+
if isinstance(other, dict) and isinstance(other.get("id"), int)
|
|
2414
|
+
]
|
|
2368
2415
|
record = apply_column_renames(views[0])
|
|
2369
2416
|
view_id = record.get("id")
|
|
2370
2417
|
if not isinstance(view_id, int):
|
|
@@ -2412,6 +2459,8 @@ def upload_preview(service: Any, dataset_id: int, project_id: int | None) -> dic
|
|
|
2412
2459
|
hints = []
|
|
2413
2460
|
if hints:
|
|
2414
2461
|
preview["before_dashboard"] = {"warnings": hints, "note": UPLOAD_NOTE}
|
|
2462
|
+
if other_views:
|
|
2463
|
+
preview["other_views"] = other_views
|
|
2415
2464
|
return preview
|
|
2416
2465
|
|
|
2417
2466
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mammoth-cli"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.55"
|
|
4
4
|
description = "Command-line interface for the Mammoth Analytics platform"
|
|
5
5
|
authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "LicenseRef-Proprietary"
|
|
8
8
|
requires-python = ">=3.12,<3.15"
|
|
9
9
|
dependencies = [
|
|
10
|
-
"mammoth-io (>=0.7.
|
|
10
|
+
"mammoth-io (>=0.7.26,<0.8)",
|
|
11
11
|
"typer (>=0.27,<0.28)",
|
|
12
12
|
"rich (>=15,<16)",
|
|
13
13
|
"platformdirs (>=4.10,<5)",
|