mammoth-cli 2.0.86__tar.gz → 2.0.87__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.86 → mammoth_cli-2.0.87}/PKG-INFO +2 -2
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +3 -3
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +20 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +3 -1
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +1 -1
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +10 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +1 -1
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/dashboard.py +30 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/dataset.py +63 -1
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/job.py +21 -1
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/project.py +36 -10
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/registry.py +4 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/schema.py +34 -4
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/view.py +476 -64
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/view_ops.py +8 -1
- mammoth_cli-2.0.87/mammoth_cli/commands/view_profile.py +533 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/output/envelope.py +6 -0
- mammoth_cli-2.0.87/mammoth_cli/runtime/dataset_health.py +112 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/dryrun.py +4 -2
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/executor.py +7 -1
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/invocation.py +7 -3
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/state.py +69 -3
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/verify.py +31 -4
- mammoth_cli-2.0.87/mammoth_cli/services/board_values.py +244 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/command_contract.py +28 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/dashboard_review.py +22 -7
- mammoth_cli-2.0.87/mammoth_cli/services/data_profile.py +254 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/input_fields.py +6 -0
- mammoth_cli-2.0.87/mammoth_cli/services/listing.py +271 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/positionals.py +17 -2
- mammoth_cli-2.0.87/mammoth_cli/services/read_queries.py +465 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/sdk_service.py +4 -4
- mammoth_cli-2.0.87/mammoth_cli/services/stored_stats.py +103 -0
- mammoth_cli-2.0.87/mammoth_cli/services/text_dates.py +303 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/pyproject.toml +2 -2
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/addon.yaml +6 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/agent.yaml +3 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/ai.yaml +3 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/annotation.yaml +4 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/auth.yaml +2 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/automation.yaml +5 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/batch.yaml +5 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/billing.yaml +12 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/client-app.yaml +3 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/completion.yaml +1 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/config.yaml +1 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/connector.yaml +10 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/context.yaml +2 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/dashboard.yaml +78 -3
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/data-app.yaml +6 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/dataset.yaml +104 -1
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/external-key.yaml +3 -2
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/file.yaml +7 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/folder.yaml +6 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/notification.yaml +4 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/parameter.yaml +10 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/project.yaml +21 -2
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/schedule.yaml +3 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/skill.yaml +4 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/snippet.yaml +5 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/support.yaml +32 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/template.yaml +3 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/trash.yaml +2 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/upgrade.yaml +1 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/user.yaml +6 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/view.yaml +170 -3
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/webhook.yaml +5 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/workflow.yaml +10 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/workspace.yaml +14 -1
- mammoth_cli-2.0.87/spec/manifests/edits-target.source.yaml +234 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/openapi-operations.yaml +39 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/schema-v1.json +5 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/sdk-catalog.source.yaml +14 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/sdk-methods.yaml +41 -5
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/openapi/metadata.json +4 -4
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/openapi/openapi.json +1 -1
- mammoth_cli-2.0.86/mammoth_cli/runtime/dataset_health.py +0 -62
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/.gitignore +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/LICENSE +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/README.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/dryrun_targets.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.0.86 → mammoth_cli-2.0.87}/spec/manifests/commands/version.yaml +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.87
|
|
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.41
|
|
21
21
|
Requires-Dist: platformdirs<5,>=4.10
|
|
22
22
|
Requires-Dist: pydantic<3,>=2.12.5
|
|
23
23
|
Requires-Dist: pyyaml<7,>=6
|
|
@@ -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 576; 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
|
|
|
@@ -24,7 +24,7 @@ Load only the applicable domain file:
|
|
|
24
24
|
- [dashboard-qa](commands/dashboard-qa.md) — 13 published commands
|
|
25
25
|
- [dashboard](commands/dashboard.md) — 100 published commands
|
|
26
26
|
- [data-app](commands/data-app.md) — 12 published commands
|
|
27
|
-
- [dataset](commands/dataset.md) —
|
|
27
|
+
- [dataset](commands/dataset.md) — 20 published commands
|
|
28
28
|
- [doctor](commands/doctor.md) — 1 published commands
|
|
29
29
|
- [external-key](commands/external-key.md) — 4 published commands
|
|
30
30
|
- [file](commands/file.md) — 9 published commands
|
|
@@ -46,7 +46,7 @@ Load only the applicable domain file:
|
|
|
46
46
|
- [user](commands/user.md) — 8 published commands
|
|
47
47
|
- [version](commands/version.md) — 1 published commands
|
|
48
48
|
- [view-transform](commands/view-transform.md) — 32 published commands
|
|
49
|
-
- [view](commands/view.md) —
|
|
49
|
+
- [view](commands/view.md) — 90 published commands
|
|
50
50
|
- [webhook](commands/webhook.md) — 7 published commands
|
|
51
51
|
- [workflow](commands/workflow.md) — 16 published commands
|
|
52
52
|
- [workspace](commands/workspace.md) — 20 published commands
|
|
@@ -132,6 +132,26 @@ Result: `DatasetGetResult`; mutation `read`, confirmation `none`, wait policy `n
|
|
|
132
132
|
|
|
133
133
|
Status on release: ran once on CLI 2.0.18 — golden-data check 2026-09-19: exit 0 on release with CLI 2.0.18. Single invocation only.
|
|
134
134
|
|
|
135
|
+
### `dataset.interpretation.confirm`
|
|
136
|
+
|
|
137
|
+
Run: `mammoth dataset interpretation confirm`. Exact input fields: `mammoth schema get dataset.interpretation.confirm`.
|
|
138
|
+
|
|
139
|
+
Example: `mammoth dataset interpretation confirm 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
140
|
+
|
|
141
|
+
Result: `DatasetInterpretationConfirmResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
142
|
+
|
|
143
|
+
Status on release: untried; no live run recorded.
|
|
144
|
+
|
|
145
|
+
### `dataset.interpretation.preview`
|
|
146
|
+
|
|
147
|
+
Run: `mammoth dataset interpretation preview`. Exact input fields: `mammoth schema get dataset.interpretation.preview`.
|
|
148
|
+
|
|
149
|
+
Example: `mammoth dataset interpretation preview 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
150
|
+
|
|
151
|
+
Result: `DatasetInterpretationPreviewResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
152
|
+
|
|
153
|
+
Status on release: untried; no live run recorded.
|
|
154
|
+
|
|
135
155
|
### `dataset.list`
|
|
136
156
|
|
|
137
157
|
Run: `mammoth dataset list`. Exact input fields: `mammoth schema get dataset.list`.
|
|
@@ -6,7 +6,9 @@ Every command returns the standard JSON envelope. On nonzero exit, read the erro
|
|
|
6
6
|
|
|
7
7
|
Run: `mammoth external-key create`. Exact input fields: `mammoth schema get external-key.create`.
|
|
8
8
|
|
|
9
|
-
Example: `mammoth external-key create --input
|
|
9
|
+
Example: `mammoth external-key create --input /private/path/request.json`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
|
|
10
|
+
|
|
11
|
+
Secret fields: pass the body as `--input FILE` (mode 0600); never inline.
|
|
10
12
|
|
|
11
13
|
Result: `ExternalKeyCreateResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
|
|
12
14
|
|
|
@@ -26,7 +26,7 @@ Status on release: ran once on CLI 2.0.15 — re-verification 2026-09-18: exit 0
|
|
|
26
26
|
|
|
27
27
|
Run: `mammoth project check`. Exact input fields: `mammoth schema get project.check`.
|
|
28
28
|
|
|
29
|
-
Example: `mammoth project check 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
29
|
+
Example: `mammoth project check 123 456`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
30
30
|
|
|
31
31
|
Result: `ProjectCheckResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
32
32
|
|
|
@@ -252,6 +252,16 @@ Result: `ViewDataGetResult`; mutation `read`, confirmation `none`, wait policy `
|
|
|
252
252
|
|
|
253
253
|
Status on release: ran once on CLI 2.0.28 — ILG simulation 2026-09-19: exit 0 on release with CLI 2.0.28. Paged reads (limit up to 500) used for every value check; envelope data.data rows keyed by display name. Single invocation only.
|
|
254
254
|
|
|
255
|
+
### `view.data.profile`
|
|
256
|
+
|
|
257
|
+
Run: `mammoth view data profile`. Exact input fields: `mammoth schema get view.data.profile`.
|
|
258
|
+
|
|
259
|
+
Example: `mammoth view data profile 123 --input '{"target": "Churn"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
260
|
+
|
|
261
|
+
Result: `ViewDataProfileResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
262
|
+
|
|
263
|
+
Status on release: untried; no live run recorded.
|
|
264
|
+
|
|
255
265
|
### `view.data.query`
|
|
256
266
|
|
|
257
267
|
Run: `mammoth view data query`. Exact input fields: `mammoth schema get view.data.query`.
|
|
@@ -138,7 +138,7 @@ Status on release: untried; no live run recorded.
|
|
|
138
138
|
|
|
139
139
|
Run: `mammoth workspace user add`. Exact input fields: `mammoth schema get workspace.user.add`.
|
|
140
140
|
|
|
141
|
-
Example: `mammoth workspace user add --
|
|
141
|
+
Example: `mammoth workspace user add --input '{"email_ids": ["analyst@example.com"]}' --yes`. Illustrative only: append `--yes` after observing an owned target.
|
|
142
142
|
|
|
143
143
|
Result: `WorkspaceUserAddResult`; mutation `benign_mutation`, confirmation `yes_always`, wait policy `not_async`.
|
|
144
144
|
|
|
@@ -39,6 +39,7 @@ from mammoth_cli.runtime.confirm import (
|
|
|
39
39
|
from mammoth_cli.runtime.invocation import Invocation
|
|
40
40
|
from mammoth_cli.runtime.session import open_service, require_project, resolved_project
|
|
41
41
|
from mammoth_cli.services.argspec import arg_spec
|
|
42
|
+
from mammoth_cli.services.board_values import board_values, dashboard_link
|
|
42
43
|
from mammoth_cli.services.command_contract import bind_command_inputs
|
|
43
44
|
from mammoth_cli.services.dashboard_pages import check_added_pages
|
|
44
45
|
from mammoth_cli.services.dashboard_review import (
|
|
@@ -670,9 +671,38 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
|
|
|
670
671
|
data = check_added_pages(service, positionals["dashboard_id"], requested, data)
|
|
671
672
|
if invocation.command_id in _REVIEWED_COMMANDS:
|
|
672
673
|
data = _with_deliverable_check(invocation, service, auth, positionals, data)
|
|
674
|
+
if invocation.command_id in _VALUED_COMMANDS:
|
|
675
|
+
data = _with_board_values(service, auth, positionals, data)
|
|
673
676
|
return data, _meta(invocation, auth.workspace_id)
|
|
674
677
|
|
|
675
678
|
|
|
679
|
+
#: Board-building steps whose result carries the evaluated card/tile numbers.
|
|
680
|
+
_VALUED_COMMANDS = frozenset({"dashboard.v3.generate", "dashboard.chat.edit"})
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
def _with_board_values(service: Any, auth: Any, positionals: dict[str, Any], data: Any) -> Any:
|
|
684
|
+
"""Add ``dashboard_link`` and each KPI card's and tile's evaluated number.
|
|
685
|
+
|
|
686
|
+
The result of a build/edit is definitions; the agent must see the numbers
|
|
687
|
+
it is about to report (a rate that reads 21.9% where the data says 14.9%).
|
|
688
|
+
"""
|
|
689
|
+
data = _dump_model(data)
|
|
690
|
+
if not isinstance(data, dict):
|
|
691
|
+
return data
|
|
692
|
+
dashboard_id = positionals.get("dashboard_id") or data.get("id") or data.get("dashboard_id")
|
|
693
|
+
if not isinstance(dashboard_id, int):
|
|
694
|
+
return {**data, "values": {"unavailable": "the result names no dashboard id"}}
|
|
695
|
+
return {
|
|
696
|
+
**data,
|
|
697
|
+
"dashboard_link": dashboard_link(auth.base_url, auth.workspace_id, dashboard_id),
|
|
698
|
+
"values": board_values(service, dashboard_id),
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
def _dump_model(value: Any) -> Any:
|
|
703
|
+
return value.model_dump(mode="json") if hasattr(value, "model_dump") else value
|
|
704
|
+
|
|
705
|
+
|
|
676
706
|
#: Authoring steps whose result carries ``deliverable_check``.
|
|
677
707
|
_REVIEWED_COMMANDS = frozenset(
|
|
678
708
|
{"dashboard.create-blank", "dashboard.canvas.save", "dashboard.pages.add"}
|
|
@@ -30,6 +30,7 @@ from mammoth_cli.runtime.confirm import (
|
|
|
30
30
|
from mammoth_cli.runtime.invocation import Invocation
|
|
31
31
|
from mammoth_cli.runtime.new_data import with_file_upload_path
|
|
32
32
|
from mammoth_cli.runtime.session import open_service, require_project
|
|
33
|
+
from mammoth_cli.services.listing import DATASET_LIST_FIELDS, dataset_summary, fit_budget
|
|
33
34
|
|
|
34
35
|
HandlerResult = tuple[Any, dict[str, Any]]
|
|
35
36
|
|
|
@@ -192,16 +193,49 @@ def dataset_find(invocation: Invocation) -> HandlerResult:
|
|
|
192
193
|
|
|
193
194
|
|
|
194
195
|
def dataset_list(invocation: Invocation) -> HandlerResult:
|
|
195
|
-
"""List datasets in the active project.
|
|
196
|
+
"""List datasets in the active project, newest first, each with what tells them apart.
|
|
197
|
+
|
|
198
|
+
Every item carries its size, created/updated time, how its data arrived, and
|
|
199
|
+
its column names and types (from the list route's stored ``stats``,
|
|
200
|
+
``sources`` and ``data_schema``), cut to fit the agent tool output cap.
|
|
201
|
+
``full: true`` returns the raw ``{id, name}`` list instead.
|
|
202
|
+
"""
|
|
196
203
|
project_id = require_project(invocation)
|
|
197
204
|
document = invocation.load_input() or {}
|
|
198
205
|
kwargs: dict[str, Any] = {"project_id": project_id}
|
|
199
206
|
_forward_optional(document, kwargs, ("limit", "offset", "sort"))
|
|
207
|
+
compact = not document.get("full")
|
|
208
|
+
if compact:
|
|
209
|
+
kwargs["fields"] = DATASET_LIST_FIELDS
|
|
200
210
|
with open_service(invocation) as (service, auth):
|
|
201
211
|
data = service.call(_symbol(invocation), **kwargs)
|
|
212
|
+
if compact:
|
|
213
|
+
data = _compact_dataset_list(data, kwargs.get("offset", 0), kwargs.get("sort"))
|
|
202
214
|
return data, _meta(invocation, auth.workspace_id, project_id)
|
|
203
215
|
|
|
204
216
|
|
|
217
|
+
def _compact_dataset_list(data: Any, offset: int, sort: str | None) -> Any:
|
|
218
|
+
"""Summarise a dataset-list page and fit it to the tool output cap."""
|
|
219
|
+
datasets = data.get("datasets") if isinstance(data, dict) else None
|
|
220
|
+
if not isinstance(datasets, list):
|
|
221
|
+
return data
|
|
222
|
+
summaries = [dataset_summary(item) for item in datasets if isinstance(item, dict)]
|
|
223
|
+
kept, omitted = fit_budget(summaries)
|
|
224
|
+
result: dict[str, Any] = {
|
|
225
|
+
"datasets": kept,
|
|
226
|
+
"shown": len(kept),
|
|
227
|
+
"order": sort or "newest first (created_at desc)",
|
|
228
|
+
"note": (
|
|
229
|
+
"A dataset record holds no sample values; 'view list DATASET_ID' shows "
|
|
230
|
+
"stored sample_values per view."
|
|
231
|
+
),
|
|
232
|
+
}
|
|
233
|
+
if omitted or data.get("next"):
|
|
234
|
+
result["more"] = True
|
|
235
|
+
result["next_offset"] = int(offset) + len(kept)
|
|
236
|
+
return result
|
|
237
|
+
|
|
238
|
+
|
|
205
239
|
def _export_write_hint(data: dict[str, Any]) -> str | None:
|
|
206
240
|
"""Name the recurring export that writes into this dataset, if any.
|
|
207
241
|
|
|
@@ -395,6 +429,34 @@ def dataset_file_settings_undo(invocation: Invocation) -> HandlerResult:
|
|
|
395
429
|
return data, _meta(invocation, auth.workspace_id, project_id)
|
|
396
430
|
|
|
397
431
|
|
|
432
|
+
_INTERPRETATION_FIELDS = ("user_instruction", "structure_map", "destination_dataset_id")
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
def dataset_interpretation(invocation: Invocation) -> HandlerResult:
|
|
436
|
+
"""Preview or confirm how a file that can be read several ways is interpreted.
|
|
437
|
+
|
|
438
|
+
``--input`` carries ``user_instruction`` (plain English, e.g. one of the
|
|
439
|
+
suggestions ``dataset get`` shows), a ``structure_map`` from an earlier
|
|
440
|
+
preview, or a ``destination_dataset_id``; at least one is required.
|
|
441
|
+
"""
|
|
442
|
+
project_id = require_project(invocation)
|
|
443
|
+
dataset_id = _require_int_positional(invocation, "dataset id")
|
|
444
|
+
document = invocation.load_input() or {}
|
|
445
|
+
kwargs: dict[str, Any] = {"dataset_id": dataset_id, "project_id": project_id}
|
|
446
|
+
_forward_optional(document, kwargs, _INTERPRETATION_FIELDS)
|
|
447
|
+
if not any(field in kwargs for field in _INTERPRETATION_FIELDS):
|
|
448
|
+
raise CliError(
|
|
449
|
+
code=CODE_MISSING_ARGUMENT,
|
|
450
|
+
message="Say how to read the file: pass one of " + ", ".join(_INTERPRETATION_FIELDS),
|
|
451
|
+
exit_status=EXIT_USAGE,
|
|
452
|
+
hint="Use a suggestion from 'mammoth dataset get DATASET_ID' "
|
|
453
|
+
"(additional_info.interpretation.instruction_suggestions) as user_instruction.",
|
|
454
|
+
)
|
|
455
|
+
with open_service(invocation) as (service, auth):
|
|
456
|
+
data = service.call(_symbol(invocation), **kwargs)
|
|
457
|
+
return data, _meta(invocation, auth.workspace_id, project_id)
|
|
458
|
+
|
|
459
|
+
|
|
398
460
|
def dataset_create(invocation: Invocation) -> HandlerResult:
|
|
399
461
|
"""Create a dataset from a spec and creation type (required ``--input`` fields)."""
|
|
400
462
|
project_id = require_project(invocation)
|
|
@@ -26,6 +26,7 @@ from mammoth_cli.errors.envelope import (
|
|
|
26
26
|
from mammoth_cli.manifest.loader import command_by_id
|
|
27
27
|
from mammoth_cli.runtime.invocation import Invocation
|
|
28
28
|
from mammoth_cli.runtime.session import open_service
|
|
29
|
+
from mammoth_cli.services.board_values import board_values, dashboard_link
|
|
29
30
|
|
|
30
31
|
HandlerResult = tuple[Any, dict[str, Any]]
|
|
31
32
|
|
|
@@ -169,7 +170,7 @@ def job_wait(invocation: Invocation) -> HandlerResult:
|
|
|
169
170
|
symbol, kwargs = _wait_call(invocation, document, kwargs)
|
|
170
171
|
try:
|
|
171
172
|
with open_service(invocation) as (service, auth):
|
|
172
|
-
data = _wait_result(job_id, service.call(symbol, **kwargs))
|
|
173
|
+
data = _with_board(service, auth, _wait_result(job_id, service.call(symbol, **kwargs)))
|
|
173
174
|
except KeyboardInterrupt as exc:
|
|
174
175
|
# Keep the explicit handle even when the polling implementation raises
|
|
175
176
|
# a bare SIGINT. A caller can inspect/resume it without replaying the
|
|
@@ -186,6 +187,25 @@ def job_wait(invocation: Invocation) -> HandlerResult:
|
|
|
186
187
|
return data, _meta(invocation, auth.workspace_id)
|
|
187
188
|
|
|
188
189
|
|
|
190
|
+
#: Jobs that build a board. A build that outlived its own wait hands back a running
|
|
191
|
+
#: job; waiting on it here must report what the build would have: the board's link
|
|
192
|
+
#: and its evaluated numbers (UQA-RT2-05).
|
|
193
|
+
_BOARD_BUILD_OPERATIONS = frozenset({"generate_dashboard_v3"})
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def _with_board(service: Any, auth: Any, data: dict[str, Any]) -> dict[str, Any]:
|
|
197
|
+
"""Add ``dashboard_link`` and the board's evaluated numbers to a finished board build."""
|
|
198
|
+
result = data.get("result")
|
|
199
|
+
board = result.get("id") if isinstance(result, dict) else None
|
|
200
|
+
if data.get("operation") not in _BOARD_BUILD_OPERATIONS or not isinstance(board, int):
|
|
201
|
+
return data
|
|
202
|
+
return {
|
|
203
|
+
**data,
|
|
204
|
+
"dashboard_link": dashboard_link(auth.base_url, auth.workspace_id, board),
|
|
205
|
+
"values": board_values(service, board),
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
|
|
189
209
|
def job_wait_many(invocation: Invocation) -> HandlerResult:
|
|
190
210
|
"""Block until several jobs complete, or raise on failure/timeout.
|
|
191
211
|
|
|
@@ -563,13 +563,37 @@ def _report_line(where: str, warning: dict[str, Any]) -> str:
|
|
|
563
563
|
return f"{subject}: {warning.get('issue')}. {warning.get('detail', '')}".strip()
|
|
564
564
|
|
|
565
565
|
|
|
566
|
+
def _scoped_dataset_id(invocation: Invocation) -> int | None:
|
|
567
|
+
"""The DATASET_ID that narrows ``project check`` to one dataset, or None."""
|
|
568
|
+
raw = invocation.positional("dataset_id")
|
|
569
|
+
if raw is None:
|
|
570
|
+
return None
|
|
571
|
+
try:
|
|
572
|
+
return int(raw)
|
|
573
|
+
except ValueError as exc:
|
|
574
|
+
raise CliError(
|
|
575
|
+
code=CODE_INVALID_ARGUMENT,
|
|
576
|
+
message=f"The dataset id argument '{raw}' is not an integer.",
|
|
577
|
+
exit_status=EXIT_USAGE,
|
|
578
|
+
) from exc
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
def _datasets_to_check(service: Any, project_id: int, scoped: int | None) -> list[Any]:
|
|
582
|
+
"""Every dataset of the project, or only the named one -- never a walk when scoped."""
|
|
583
|
+
if scoped is not None:
|
|
584
|
+
return [{"id": scoped, "name": f"dataset {scoped}"}]
|
|
585
|
+
listing = service.call(_DATASETS_LIST_SYMBOL, project_id=project_id)
|
|
586
|
+
return listing.get("datasets", []) if isinstance(listing, dict) else []
|
|
587
|
+
|
|
588
|
+
|
|
566
589
|
def project_check(invocation: Invocation) -> HandlerResult:
|
|
567
590
|
"""List what a report on this project must still account for.
|
|
568
591
|
|
|
569
592
|
Read-only local composite, run before reporting: for each dataset, the
|
|
570
593
|
first view's ``column_warnings`` and ``before_dashboard``; for each
|
|
571
594
|
dashboard, its ``deliverable_check``. ``to_report`` flattens them into
|
|
572
|
-
one line per finding.
|
|
595
|
+
one line per finding. Given a DATASET_ID it reads only that dataset's first
|
|
596
|
+
view (no dataset list, no dashboards). Cold-agent evals (2.0.41) left one column's blanks
|
|
573
597
|
undecided in every run, because the warning sat in an earlier result.
|
|
574
598
|
"""
|
|
575
599
|
from mammoth_cli.commands.dashboard import _with_deliverable_check
|
|
@@ -579,9 +603,9 @@ def project_check(invocation: Invocation) -> HandlerResult:
|
|
|
579
603
|
views: list[dict[str, Any]] = []
|
|
580
604
|
dashboards: list[dict[str, Any]] = []
|
|
581
605
|
to_report: list[str] = []
|
|
606
|
+
scoped_dataset = _scoped_dataset_id(invocation)
|
|
582
607
|
with open_service(invocation) as (service, auth):
|
|
583
|
-
|
|
584
|
-
datasets = listing.get("datasets", []) if isinstance(listing, dict) else []
|
|
608
|
+
datasets = _datasets_to_check(service, project_id, scoped_dataset)
|
|
585
609
|
for dataset in datasets:
|
|
586
610
|
dataset_id = dataset.get("id") if isinstance(dataset, dict) else None
|
|
587
611
|
if not isinstance(dataset_id, int):
|
|
@@ -615,7 +639,9 @@ def project_check(invocation: Invocation) -> HandlerResult:
|
|
|
615
639
|
views.append(entry)
|
|
616
640
|
where = f"view {preview['view_id']} ({dataset.get('name')})"
|
|
617
641
|
to_report += [_report_line(where, w) for w in entry["column_warnings"]]
|
|
618
|
-
boards =
|
|
642
|
+
boards = (
|
|
643
|
+
[] if scoped_dataset else service.call(_DASHBOARDS_LIST_SYMBOL, project_id=project_id)
|
|
644
|
+
)
|
|
619
645
|
for board in boards if isinstance(boards, list) else []:
|
|
620
646
|
dashboard_id = board.get("id") if isinstance(board, dict) else None
|
|
621
647
|
if not isinstance(dashboard_id, int):
|
|
@@ -634,11 +660,11 @@ def project_check(invocation: Invocation) -> HandlerResult:
|
|
|
634
660
|
"project_id": project_id,
|
|
635
661
|
"views": views,
|
|
636
662
|
"dashboards": dashboards,
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
if to_report
|
|
642
|
-
else "Nothing open in the views or dashboards."
|
|
663
|
+
**(
|
|
664
|
+
{"scope": {"dataset_id": scoped_dataset, "dashboards": "not checked"}}
|
|
665
|
+
if scoped_dataset
|
|
666
|
+
else {}
|
|
643
667
|
),
|
|
668
|
+
"to_report": to_report,
|
|
669
|
+
**({} if to_report else {"note": "Nothing open in the views or dashboards."}),
|
|
644
670
|
}, meta
|
|
@@ -53,6 +53,7 @@ from mammoth_cli.commands import trash as trash_cmd
|
|
|
53
53
|
from mammoth_cli.commands import user as user_cmd
|
|
54
54
|
from mammoth_cli.commands import view as view_cmd
|
|
55
55
|
from mammoth_cli.commands import view_ops as view_ops_cmd
|
|
56
|
+
from mammoth_cli.commands import view_profile as view_profile_cmd
|
|
56
57
|
from mammoth_cli.commands import webhook as webhook_cmd
|
|
57
58
|
from mammoth_cli.commands import workflow as workflow_cmd
|
|
58
59
|
from mammoth_cli.commands import workspace as workspace_cmd
|
|
@@ -315,6 +316,8 @@ HANDLERS: dict[str, Handler] = {
|
|
|
315
316
|
"dataset.file-settings.update": dataset_cmd.dataset_file_settings_update,
|
|
316
317
|
"dataset.file-settings.undo": dataset_cmd.dataset_file_settings_undo,
|
|
317
318
|
"dataset.broken-rows.list": dataset_cmd.dataset_broken_rows,
|
|
319
|
+
"dataset.interpretation.preview": dataset_cmd.dataset_interpretation,
|
|
320
|
+
"dataset.interpretation.confirm": dataset_cmd.dataset_interpretation,
|
|
318
321
|
"dataset.create": dataset_cmd.dataset_create,
|
|
319
322
|
"dataset.create-from-pdf": dataset_cmd.dataset_create_from_pdf,
|
|
320
323
|
"dataset.rename": dataset_cmd.dataset_rename,
|
|
@@ -648,6 +651,7 @@ HANDLERS: dict[str, Handler] = {
|
|
|
648
651
|
"view.data.aggregate": view_cmd.view_data_aggregate,
|
|
649
652
|
"view.data.compare": view_cmd.view_data_compare,
|
|
650
653
|
"view.data.explore": view_cmd.view_data_explore,
|
|
654
|
+
"view.data.profile": view_profile_cmd.view_data_profile,
|
|
651
655
|
"view.exportable-config.get": view_cmd.view_exportable_config_get,
|
|
652
656
|
"view.exportable-config.apply": view_cmd.view_exportable_config_apply,
|
|
653
657
|
"view.conditional-format.create": view_cmd.view_conditional_format_create,
|
|
@@ -42,6 +42,19 @@ _OUTPUT_JSON_NO_INPUT: tuple[str, ...] = ()
|
|
|
42
42
|
# the published example points at a protected owner-only file instead, so no
|
|
43
43
|
# generated or copied command line ever puts a credential in argv.
|
|
44
44
|
_PROTECTED_INPUT_PATH = "/private/path/request.json"
|
|
45
|
+
# Commands whose useful example the SDK signature cannot express: a distinct
|
|
46
|
+
# second id, an optional-but-central input field, or two views to compare.
|
|
47
|
+
_FIXED_EXAMPLES: dict[str, tuple[tuple[str, ...], dict[str, Any]]] = {
|
|
48
|
+
"project.check": (("123", "456"), {}),
|
|
49
|
+
"view.data.profile": (("123",), {"target": "Churn"}),
|
|
50
|
+
"view.data.compare": (
|
|
51
|
+
("111", "222"),
|
|
52
|
+
{
|
|
53
|
+
"group_by": ["Campaign"],
|
|
54
|
+
"aggregations": [{"column": "Spend", "function": "SUM", "as_name": "Spend"}],
|
|
55
|
+
},
|
|
56
|
+
),
|
|
57
|
+
}
|
|
45
58
|
_OPAQUE_EXPERT_COMMANDS = frozenset({"view.task.add", "view.task.preview", "view.task.update"})
|
|
46
59
|
_TYPED_TRANSFORM_ALTERNATIVES = [
|
|
47
60
|
"view.transform.filter",
|
|
@@ -311,6 +324,14 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
311
324
|
# view.data.explore's own purpose text already uses both for its trend
|
|
312
325
|
# feature.
|
|
313
326
|
"view.data.aggregate": "group and sum totals by month week without changing the pipeline",
|
|
327
|
+
# Goals stated as "what is in this data" / "why do customers churn": one
|
|
328
|
+
# whole-view profile answers both, so the phrasing must reach it.
|
|
329
|
+
"view.data.profile": (
|
|
330
|
+
"profile explore what is in this data understand a dataset every column blanks missing "
|
|
331
|
+
"empty nulls distinct unique duplicates dirty inconsistent categories spelling variants "
|
|
332
|
+
"check look at overview summary statistics churn drivers drive driving feature "
|
|
333
|
+
"importance correlation which columns predict affect influence the target outcome"
|
|
334
|
+
),
|
|
314
335
|
# Goals users state in their own words, one entry per command the agent's
|
|
315
336
|
# system prompt used to spell out by hand.
|
|
316
337
|
"dashboard.suggestion.list": "ideas suggest suggestions what to show put on a board chart",
|
|
@@ -1055,6 +1076,17 @@ def runnable_example(
|
|
|
1055
1076
|
*_OUTPUT_JSON_NO_INPUT,
|
|
1056
1077
|
]
|
|
1057
1078
|
)
|
|
1079
|
+
if record["command_id"] in _FIXED_EXAMPLES:
|
|
1080
|
+
positional_samples, sample_input = _FIXED_EXAMPLES[record["command_id"]]
|
|
1081
|
+
return shlex.join(
|
|
1082
|
+
[
|
|
1083
|
+
"mammoth",
|
|
1084
|
+
*record["command_path"].split(),
|
|
1085
|
+
*positional_samples,
|
|
1086
|
+
*(["--input", json.dumps(sample_input)] if sample_input else []),
|
|
1087
|
+
*_OUTPUT_JSON_NO_INPUT,
|
|
1088
|
+
]
|
|
1089
|
+
)
|
|
1058
1090
|
if record["command_id"] == "batch.create-spec":
|
|
1059
1091
|
return shlex.join(
|
|
1060
1092
|
[
|
|
@@ -1215,7 +1247,7 @@ def runnable_example(
|
|
|
1215
1247
|
else:
|
|
1216
1248
|
tokens.extend(["--input", json.dumps(document)])
|
|
1217
1249
|
tokens.extend(_OUTPUT_JSON_NO_INPUT)
|
|
1218
|
-
if record["command_id"] in {"project.user.update", "data-app.share"}:
|
|
1250
|
+
if record["command_id"] in {"project.user.update", "data-app.share", "workspace.user.add"}:
|
|
1219
1251
|
# These published high-impact examples must satisfy the same policy
|
|
1220
1252
|
# their manifests advertise; otherwise discovery emits a command that
|
|
1221
1253
|
# deterministically fails before dispatch.
|
|
@@ -1402,9 +1434,7 @@ def _schema_common(record: dict[str, Any]) -> dict[str, Any]:
|
|
|
1402
1434
|
contract_level = (
|
|
1403
1435
|
"opaque_expert"
|
|
1404
1436
|
if record["command_id"] in _OPAQUE_EXPERT_COMMANDS
|
|
1405
|
-
else "partially_typed"
|
|
1406
|
-
if opaque_fields
|
|
1407
|
-
else "typed"
|
|
1437
|
+
else "partially_typed" if opaque_fields else "typed"
|
|
1408
1438
|
)
|
|
1409
1439
|
return {
|
|
1410
1440
|
"positionals": _positionals(record["command_id"]),
|