mammoth-cli 2.0.36__tar.gz → 2.0.37__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.36 → mammoth_cli-2.0.37}/PKG-INFO +7 -5
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/README.md +6 -4
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +49 -2
- mammoth_cli-2.0.37/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +144 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +10 -7
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/schema.py +169 -45
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/skills/steering.py +3 -1
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/pyproject.toml +1 -1
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/.gitignore +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/LICENSE +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/agent.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/dataset.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/project.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/registry.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/view.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/commands/workspace.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/runlog.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/command_contract.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/input_fields.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/positionals.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/protocol.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/sdk_service.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/testing.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/agent.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/project.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/view.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/commands/workspace.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/sdk-catalog.source.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/manifests/sdk-methods.yaml +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/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.37
|
|
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
|
|
@@ -203,8 +203,9 @@ one-time login, and works from the shipped skill. The long form is
|
|
|
203
203
|
[docs/agent-prompt.md](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/agent-prompt.md).
|
|
204
204
|
|
|
205
205
|
```text
|
|
206
|
-
Use Mammoth Analytics only through the `mammoth` CLI in bash
|
|
207
|
-
`export MAMMOTH_OUTPUT=json MAMMOTH_NO_INPUT=1` once.
|
|
206
|
+
Use Mammoth Analytics only through the `mammoth` CLI in bash, never the web
|
|
207
|
+
app in a browser; run `export MAMMOTH_OUTPUT=json MAMMOTH_NO_INPUT=1` once.
|
|
208
|
+
Onboard me first:
|
|
208
209
|
1. If `mammoth --version` fails, install, then re-check (new shell if needed):
|
|
209
210
|
curl -fsSL https://raw.githubusercontent.com/EdgeMetric/mammothsdk/main/mammoth-cli/installers/mammoth-install.sh | bash
|
|
210
211
|
2. Run `mammoth auth status`. If it shows no credentials or a
|
|
@@ -217,8 +218,9 @@ Use Mammoth Analytics only through the `mammoth` CLI in bash; run
|
|
|
217
218
|
3. Require `mammoth doctor` to pass, then run `mammoth skill show` and
|
|
218
219
|
follow the guide it prints.
|
|
219
220
|
Work inside `mammoth project ensure 'PROJECT NAME'` unless I name a project;
|
|
220
|
-
take ids only from reads;
|
|
221
|
-
|
|
221
|
+
take ids only from reads; find a command with `schema find "GOAL IN PLAIN
|
|
222
|
+
WORDS"` or `view transform --help`, and `schema get COMMAND_ID` before a new
|
|
223
|
+
command; read results back before reporting.
|
|
222
224
|
TASK: <what to achieve, and how you will know it is done>
|
|
223
225
|
```
|
|
224
226
|
|
|
@@ -175,8 +175,9 @@ one-time login, and works from the shipped skill. The long form is
|
|
|
175
175
|
[docs/agent-prompt.md](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/agent-prompt.md).
|
|
176
176
|
|
|
177
177
|
```text
|
|
178
|
-
Use Mammoth Analytics only through the `mammoth` CLI in bash
|
|
179
|
-
`export MAMMOTH_OUTPUT=json MAMMOTH_NO_INPUT=1` once.
|
|
178
|
+
Use Mammoth Analytics only through the `mammoth` CLI in bash, never the web
|
|
179
|
+
app in a browser; run `export MAMMOTH_OUTPUT=json MAMMOTH_NO_INPUT=1` once.
|
|
180
|
+
Onboard me first:
|
|
180
181
|
1. If `mammoth --version` fails, install, then re-check (new shell if needed):
|
|
181
182
|
curl -fsSL https://raw.githubusercontent.com/EdgeMetric/mammothsdk/main/mammoth-cli/installers/mammoth-install.sh | bash
|
|
182
183
|
2. Run `mammoth auth status`. If it shows no credentials or a
|
|
@@ -189,8 +190,9 @@ Use Mammoth Analytics only through the `mammoth` CLI in bash; run
|
|
|
189
190
|
3. Require `mammoth doctor` to pass, then run `mammoth skill show` and
|
|
190
191
|
follow the guide it prints.
|
|
191
192
|
Work inside `mammoth project ensure 'PROJECT NAME'` unless I name a project;
|
|
192
|
-
take ids only from reads;
|
|
193
|
-
|
|
193
|
+
take ids only from reads; find a command with `schema find "GOAL IN PLAIN
|
|
194
|
+
WORDS"` or `view transform --help`, and `schema get COMMAND_ID` before a new
|
|
195
|
+
command; read results back before reporting.
|
|
194
196
|
TASK: <what to achieve, and how you will know it is done>
|
|
195
197
|
```
|
|
196
198
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mammoth-cli
|
|
3
|
-
version: 2.0.
|
|
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, dashboards, exports, and handoffs."
|
|
3
|
+
version: 2.0.37
|
|
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
|
|
|
7
7
|
# Mammoth CLI
|
|
@@ -10,6 +10,19 @@ Use this skill for Mammoth shell work, not for Python SDK integration. The
|
|
|
10
10
|
CLI is the contract: it validates every request locally, returns one JSON
|
|
11
11
|
envelope, and needs no flag for that when you pipe its output.
|
|
12
12
|
|
|
13
|
+
## What Mammoth is
|
|
14
|
+
|
|
15
|
+
Mammoth Analytics is a no-code data platform. Data comes in from files, URLs
|
|
16
|
+
or connectors and lands in a **dataset**. It is cleaned, joined, reshaped and
|
|
17
|
+
calculated in a **pipeline** of tasks on a **view**, and the result is
|
|
18
|
+
published as a dashboard or delivered as a CSV, a database table, a BI feed
|
|
19
|
+
or another dataset. The pipeline re-runs when new data arrives, so build the
|
|
20
|
+
steps in Mammoth rather than computing a result locally. The web app and
|
|
21
|
+
this CLI call the same API: every task in the web app's Transform menu is a
|
|
22
|
+
`mammoth view transform` command. The data model, the high-level
|
|
23
|
+
capabilities and the full web-to-CLI map are in
|
|
24
|
+
[about Mammoth](references/about-mammoth.md).
|
|
25
|
+
|
|
13
26
|
## Start
|
|
14
27
|
|
|
15
28
|
```bash
|
|
@@ -42,6 +55,38 @@ before the next step.
|
|
|
42
55
|
- Commands that start platform work wait up to 300 s for the job; on
|
|
43
56
|
`timeout` use the `job get` recovery command printed, do not resubmit.
|
|
44
57
|
|
|
58
|
+
## Find the command for a goal
|
|
59
|
+
|
|
60
|
+
State the goal in plain words; the search knows common phrasing, and
|
|
61
|
+
`view transform --help` is the Transform menu with one line per task:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
mammoth schema find "merge two datasets" # -> view.transform.join
|
|
65
|
+
mammoth view transform --help # every data transformation
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
| Goal | Command |
|
|
69
|
+
|---|---|
|
|
70
|
+
| Combine two datasets on a key (merge, VLOOKUP) | `view transform join`; one value per key: `view transform lookup` |
|
|
71
|
+
| Add rows to an existing dataset | `file upload FILE --input '{"append_to_ds_id": DATASET_ID}'` |
|
|
72
|
+
| Keep or remove rows | `view transform filter` |
|
|
73
|
+
| Remove duplicate rows | `view transform discard-duplicates` |
|
|
74
|
+
| Totals, counts, averages per group | `view transform pivot` |
|
|
75
|
+
| A calculated column | `view transform math` |
|
|
76
|
+
| Blanks to a constant, or to the previous row's value | `view transform set-values` (`IS_EMPTY`), `view transform fill-missing` |
|
|
77
|
+
| Clean text | `view transform text`, `replace`, `bulk-replace` |
|
|
78
|
+
| Change a column's type | `view transform convert-type` |
|
|
79
|
+
| Rank, running total, previous row | `view transform window` |
|
|
80
|
+
| A dashboard | `dashboard create-blank` ([dashboards](references/recipes/dashboards.md)) |
|
|
81
|
+
| Deliver the rows | `view export csv`, `view export postgres` (and other destinations), `view export dataset` |
|
|
82
|
+
|
|
83
|
+
A search with no full match returns `suggestions` and a `hint`. Before you
|
|
84
|
+
conclude the CLI cannot do something the web app does, check
|
|
85
|
+
`view transform --help` and "Not a pipeline step" in
|
|
86
|
+
[about Mammoth](references/about-mammoth.md). Do not switch to the web app
|
|
87
|
+
in a browser, or compute the result locally, for work the CLI covers;
|
|
88
|
+
report a real gap with the command you tried.
|
|
89
|
+
|
|
45
90
|
## Calling a command
|
|
46
91
|
|
|
47
92
|
- Ids are positionals; request fields are one `--input '{...}'` document;
|
|
@@ -89,6 +134,8 @@ before the next step.
|
|
|
89
134
|
|
|
90
135
|
## Route only what the task needs
|
|
91
136
|
|
|
137
|
+
- **What Mammoth is, its data model, which feature fits a business goal, or
|
|
138
|
+
a web-app task you cannot find in the CLI:** [about Mammoth](references/about-mammoth.md)
|
|
92
139
|
- **Cold start, task plan, or unsupported route:** [task start](references/task-start.md)
|
|
93
140
|
- **Login, profiles, and authorized scope:** [auth](references/auth.md)
|
|
94
141
|
- **Nested input, output envelopes, confirmations, jobs, or recovery:**
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# What Mammoth is, and what it can do
|
|
2
|
+
|
|
3
|
+
Read this when the task is stated as a business goal ("combine these files",
|
|
4
|
+
"a monthly summary per region", "feed this to Power BI") and you need to know
|
|
5
|
+
which Mammoth feature does it, or when you think the CLI cannot do something
|
|
6
|
+
the web app can.
|
|
7
|
+
|
|
8
|
+
## Why Mammoth exists
|
|
9
|
+
|
|
10
|
+
Mammoth Analytics is a cloud platform that turns raw business data into
|
|
11
|
+
output people can trust and that stays current, without code. It has two
|
|
12
|
+
layers:
|
|
13
|
+
|
|
14
|
+
- **Preparation (the engine).** Data comes in from files, URLs or
|
|
15
|
+
connectors. It is cleaned, reshaped, joined and calculated in a
|
|
16
|
+
**pipeline**: an ordered list of tasks on a **view**. The pipeline re-runs
|
|
17
|
+
when new data arrives, so a monthly report is built once and refreshed,
|
|
18
|
+
not rebuilt.
|
|
19
|
+
- **Output.** Dashboards (and presentations, documents and Q&A pages) are
|
|
20
|
+
built from a prepared view. Data is also delivered: CSV downloads,
|
|
21
|
+
databases, cloud storage, BI tools, or another Mammoth dataset. Every
|
|
22
|
+
number is computed from the prepared data, never written by a model.
|
|
23
|
+
|
|
24
|
+
People use it to replace manual spreadsheet work: an analyst automating a
|
|
25
|
+
recurring report, a small practice producing client deliverables, a team
|
|
26
|
+
feeding clean data to Tableau or Power BI. Every step is visible and
|
|
27
|
+
repeatable, which is the point: someone else can inspect, re-run or take
|
|
28
|
+
over the work. So, as an agent, build the steps **in Mammoth** (as pipeline
|
|
29
|
+
tasks, dashboards and exports) rather than computing a result locally and
|
|
30
|
+
uploading it; a local result does not refresh and cannot be inspected.
|
|
31
|
+
|
|
32
|
+
## How Mammoth organises data
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
workspace account and billing; an API token belongs to one workspace
|
|
36
|
+
└─ project a container with its own members; work stays inside one
|
|
37
|
+
└─ dataset data from an upload, URL or connector; each import is a batch
|
|
38
|
+
└─ view a working copy of the dataset's rows; a dataset can have several
|
|
39
|
+
├─ pipeline tasks run top to bottom; each `view transform` adds one at the end
|
|
40
|
+
├─ exports CSV, databases, cloud storage, BI tools, another dataset
|
|
41
|
+
└─ dashboards built from the view's prepared rows
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- An upload returns a **dataset** id. Transforms, joins, exports and
|
|
45
|
+
dashboards take a **view** id (`view list DATASET_ID`).
|
|
46
|
+
- Columns have a **display name** (what people see, and what every CLI
|
|
47
|
+
input uses) and an internal name (`column_7`), which you never type.
|
|
48
|
+
- A task that ran is part of the view: later data refreshes run it again.
|
|
49
|
+
Draft mode (`view draft enter` / `submit`) holds several tasks and runs
|
|
50
|
+
them together.
|
|
51
|
+
|
|
52
|
+
## What it can do, and where that is in the CLI
|
|
53
|
+
|
|
54
|
+
| Goal | Web app | CLI |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| Bring data in | Data → new dataset | `file upload`, `dataset create` (URL), `connector ...` |
|
|
57
|
+
| Add rows to existing data | a new batch on the dataset | `file upload FILE --input '{"append_to_ds_id": DATASET_ID}'` |
|
|
58
|
+
| Clean and reshape | View → Transform menu | `view transform OPERATION` (table below) |
|
|
59
|
+
| Combine two sources | Transform → Join, Lookup | `view transform join`, `view transform lookup` |
|
|
60
|
+
| Summarise | Transform → Group & Pivot | `view transform pivot`, `view transform crosstab` |
|
|
61
|
+
| Check data quality in the pipeline | Data Check, Checkpoint Alert | `view data-check create`, `view checkpoint create` |
|
|
62
|
+
| Reuse a value or a SQL block | Parameters, Snippets | `parameter ...`, `snippet ...` |
|
|
63
|
+
| Inspect or restore pipeline history | Version history | `view version list`, `view version apply` |
|
|
64
|
+
| Build a dashboard | Publish | `dashboard create-blank`, `dashboard v3 generate`, `dashboard canvas ...` |
|
|
65
|
+
| Deliver data | Export, Send to dataset | `view export csv`, `view export postgres` (and other destinations), `view export dataset` |
|
|
66
|
+
| Automate | Automations | `automation ...`, `workflow ...` |
|
|
67
|
+
| Undo a delete | Trash | `trash list`, `trash restore` |
|
|
68
|
+
|
|
69
|
+
Whether a route ran on release is in [capabilities](capabilities.md); read
|
|
70
|
+
it before you promise a deliverable. `schedule` is not implemented on
|
|
71
|
+
release.
|
|
72
|
+
|
|
73
|
+
## The Transform menu, command by command
|
|
74
|
+
|
|
75
|
+
The web app groups its pipeline tasks in a Transform menu. Each data task is
|
|
76
|
+
a `mammoth view transform` command; `mammoth view transform --help` lists
|
|
77
|
+
them with one line each, and `mammoth schema get view.transform.join` (or
|
|
78
|
+
any other operation) gives the input. Send to Dataset is `view export dataset`; Data Check and
|
|
79
|
+
Checkpoint Alert are the `view data-check` and `view checkpoint` families.
|
|
80
|
+
|
|
81
|
+
| You want to | Web app task | Command |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| Keep or remove rows that match a condition | Conditional Filter | `filter` (`filter_type` `SHOW` or `REMOVE`) |
|
|
84
|
+
| Remove duplicate rows | Remove Duplicate Rows | `discard-duplicates` |
|
|
85
|
+
| Keep the first or last N rows by an order | Show Top/Bottom Rows | `limit-rows` (`n`, `order_by`, `bottom`) |
|
|
86
|
+
| Write a value where a condition holds, or a label or bucket column | Label & Insert Values | `set-values` |
|
|
87
|
+
| Fill blanks with the previous or next row's value | Fill Missing Values | `fill-missing` |
|
|
88
|
+
| Find and replace one value | Find & Replace | `replace` |
|
|
89
|
+
| Map many spellings to one value | Bulk Replace | `bulk-replace` |
|
|
90
|
+
| Change case or trim spaces | Text Formatting | `text` |
|
|
91
|
+
| Take part of a text value (characters or regex) | Extract Text | `substring` |
|
|
92
|
+
| Split one column into several | Split Into Multiple Columns | `split` |
|
|
93
|
+
| Join several columns into one text column | Combine Columns & Text | `combine-columns` |
|
|
94
|
+
| Change a column's type | Convert Column Type | `convert-type` |
|
|
95
|
+
| Calculate a column from others | Math Function | `math` |
|
|
96
|
+
| Rank, running total, previous or next row | Window function | `window` |
|
|
97
|
+
| Nth smallest or largest across columns | Obtain Large or Small Values | `small-large` |
|
|
98
|
+
| Take a year, month, weekday from a date | Extract Date Part | `extract-date` |
|
|
99
|
+
| Days (or months, ...) between two dates | Calculate Date Difference | `date-diff` |
|
|
100
|
+
| Shift a date by an interval | Add / Subtract Date Values | `increment-date` |
|
|
101
|
+
| Add an empty column | Add Column | `add-column` |
|
|
102
|
+
| Copy a column under a new name | Copy Columns | `copy-columns` |
|
|
103
|
+
| Remove columns | Remove Column | `delete-columns` |
|
|
104
|
+
| Add columns from another view by matching keys | Join | `join` (`INNER`, `LEFT`, `RIGHT`, `OUTER`) |
|
|
105
|
+
| Bring one value per key from another view | Lookup | `lookup` |
|
|
106
|
+
| Totals, counts, averages per group | Group & Pivot | `pivot` (replaces the view's columns) |
|
|
107
|
+
| A rows-by-columns summary table | Group & Pivot (crosstab) | `crosstab` (writes a new dataset) |
|
|
108
|
+
| Turn wide columns into label/value rows | Unpivot | `unnest` |
|
|
109
|
+
| Read fields out of a JSON column | Extract JSON | `json-extract` |
|
|
110
|
+
| Classify, tag or summarise rows with AI | Generative AI | `ai` |
|
|
111
|
+
| One SQL query over the view | AI SQL Query | `add-sql` (replaces the view's columns), `generate-sql` (from plain words) |
|
|
112
|
+
| Copy rows into another dataset, refreshed with the pipeline | Send to Dataset | `view export dataset` (not a `view transform`) |
|
|
113
|
+
|
|
114
|
+
`join` or `lookup`: `join` adds the chosen columns from every matching row
|
|
115
|
+
(a key that repeats on the other side repeats rows); `lookup` brings one
|
|
116
|
+
value per key into one new column. Before either, confirm the key columns
|
|
117
|
+
in both views have the same type and values; recipes/transforms.md has the
|
|
118
|
+
read-back.
|
|
119
|
+
|
|
120
|
+
## Not a pipeline step, and the nearest route
|
|
121
|
+
|
|
122
|
+
- **Rename a column.** The web app's rename is a display change, not a
|
|
123
|
+
task; the CLI has no rename command. Name new columns when you create them
|
|
124
|
+
(`new_column`, `as_name`); for an existing column, `copy-columns` under
|
|
125
|
+
the new name.
|
|
126
|
+
- **Sort.** There is no sort task, and the CLI has no sort command. For
|
|
127
|
+
"top N by X" use `limit-rows` with `order_by`; for a rank column use
|
|
128
|
+
`window` (`RANK`, `ROW_NUMBER`).
|
|
129
|
+
- **Union or append two views.** There is no union task. Upload a file into
|
|
130
|
+
an existing dataset with `append_to_ds_id`, or send a view's rows into an
|
|
131
|
+
existing dataset with `view export dataset` (`target_ds_id` and
|
|
132
|
+
`save_as_mode` `APPEND_TO_DS`; that mode is untried on release).
|
|
133
|
+
- **Hide or reorder columns.** Display changes in the web app; they do not
|
|
134
|
+
change the data.
|
|
135
|
+
|
|
136
|
+
## The web app and the CLI
|
|
137
|
+
|
|
138
|
+
Both call the same API. Do not switch to the web app in a browser for a
|
|
139
|
+
task the CLI covers. Before you conclude that the CLI cannot do something,
|
|
140
|
+
run `mammoth view transform --help`, search in plain words (`mammoth schema
|
|
141
|
+
find "merge two datasets"` finds `join`; a search with no full match lists
|
|
142
|
+
`suggestions`), and read the section above. If it is still missing, report
|
|
143
|
+
the gap with the command you tried; do not work around it in the browser or
|
|
144
|
+
by computing the result locally.
|
|
@@ -46,14 +46,17 @@ or secrets in an argument, prompt, transcript, or checkpoint.
|
|
|
46
46
|
|
|
47
47
|
Do not print, echo, or copy secret-bearing inputs. A failed status, login,
|
|
48
48
|
or doctor check stops the task before discovery and business commands.
|
|
49
|
-
4. Discover instead of guessing.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
4. Discover instead of guessing. Search with the goal in plain words
|
|
50
|
+
(`mammoth schema find "merge two datasets"` finds the join), then run
|
|
51
|
+
`mammoth schema get COMMAND_ID` for local CLI routes; `mammoth view transform
|
|
52
|
+
--help` lists every data transformation; `mammoth schema list` is the
|
|
53
|
+
complete inventory. `mammoth capability list` is an API-binding inventory
|
|
54
|
+
and can omit typed/local routes. Check [capabilities](capabilities.md)
|
|
55
|
+
for whether a route is proven, not supported, or untried on release
|
|
56
|
+
before building a plan on it. Then resolve workspace/project/dataset/view
|
|
55
57
|
parents with reads. Use display names returned by the exact view schema.
|
|
56
|
-
5. Translate the business intent into a plan the agent chooses
|
|
58
|
+
5. Translate the business intent into a plan the agent chooses;
|
|
59
|
+
[about Mammoth](about-mammoth.md) maps goals to features. Submit only
|
|
57
60
|
supported operations against the active project (`project ensure` sets it;
|
|
58
61
|
`--project` overrides) with structured `--input`. Do not use private
|
|
59
62
|
HTTP/SDK escape hatches or local data processing as a substitute.
|
|
@@ -56,31 +56,98 @@ _GROUP_DISCOVERY_PURPOSES = {
|
|
|
56
56
|
"dataset": "data import tables CSV spreadsheet",
|
|
57
57
|
"file": "source file storage",
|
|
58
58
|
"view": "transform query clean analyze data pipeline",
|
|
59
|
-
"dashboard": "build visualize share charts analytics",
|
|
59
|
+
"dashboard": "build visualize share chart charts report analytics",
|
|
60
60
|
"workflow": "automate pipeline orchestration",
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
_COMMAND_DISCOVERY_PURPOSES = {
|
|
64
|
-
"file.upload":
|
|
64
|
+
"file.upload": (
|
|
65
|
+
"upload import CSV spreadsheet XLSX source data append add rows union stack "
|
|
66
|
+
"a file into an existing dataset"
|
|
67
|
+
),
|
|
65
68
|
"file.upload-folder": "upload source-data directory folder",
|
|
66
69
|
"view.export.csv": "export download local CSV file artifact",
|
|
70
|
+
"view.export.dataset": (
|
|
71
|
+
"send copy branch out rows into a dataset in another project append union stack rows"
|
|
72
|
+
),
|
|
73
|
+
# One entry per ``view transform`` command, in the words a user states a
|
|
74
|
+
# goal in rather than Mammoth's own task names. This is the CLI's version
|
|
75
|
+
# of the web app's Transform menu; keep every transform listed.
|
|
76
|
+
"view.transform.add-column": "add column new empty blank column",
|
|
77
|
+
"view.transform.add-sql": "sql query select statement replaces every column",
|
|
78
|
+
"view.transform.ai": (
|
|
79
|
+
"ai llm prompt generative classify categorize categorise sentiment enrich "
|
|
80
|
+
"summarize summarise rows into a new column"
|
|
81
|
+
),
|
|
82
|
+
"view.transform.bulk-replace": (
|
|
83
|
+
"find replace strip characters text values mapping standardize standardise "
|
|
84
|
+
"normalize normalise variants many to one"
|
|
85
|
+
),
|
|
86
|
+
"view.transform.combine-columns": (
|
|
87
|
+
"combine concatenate concat columns values into one column separator"
|
|
88
|
+
),
|
|
89
|
+
"view.transform.convert-type": (
|
|
90
|
+
"convert type cast numeric number text date column parse to number to date"
|
|
91
|
+
),
|
|
92
|
+
"view.transform.copy-columns": "copy duplicate rename column into a new column name",
|
|
93
|
+
"view.transform.crosstab": (
|
|
94
|
+
"crosstab cross tab pivot table matrix rows by columns summary into a new dataset"
|
|
95
|
+
),
|
|
96
|
+
"view.transform.date-diff": "date difference days between two date columns age duration",
|
|
97
|
+
"view.transform.delete-columns": "delete drop remove columns",
|
|
67
98
|
"view.transform.discard-duplicates": (
|
|
68
|
-
"duplicate duplicates dedup deduplicate remove repeated rows"
|
|
99
|
+
"duplicate duplicates dedup dedupe deduplicate remove repeated rows unique distinct"
|
|
69
100
|
),
|
|
70
|
-
"view.transform.convert-type": "convert type cast numeric text date column",
|
|
71
|
-
"view.transform.fill-missing": "fill missing null empty impute carry forward values",
|
|
72
|
-
"view.transform.join": "join blend lookup merge matching keys rows",
|
|
73
101
|
"view.transform.extract-date": (
|
|
74
102
|
"extract date part year month day hour minute second week quarter weekday "
|
|
75
103
|
"month_text into a new column"
|
|
76
104
|
),
|
|
77
|
-
"view.transform.
|
|
105
|
+
"view.transform.fill-missing": (
|
|
106
|
+
"fill missing null empty blank blanks impute carry forward fill down values"
|
|
107
|
+
),
|
|
108
|
+
"view.transform.filter": (
|
|
109
|
+
"filter rows keep drop exclude remove delete rows where condition subset"
|
|
110
|
+
),
|
|
111
|
+
"view.transform.generate-sql": (
|
|
112
|
+
"generate sql from natural language intent question and run it as a task"
|
|
113
|
+
),
|
|
78
114
|
"view.transform.increment-date": "add subtract days months years to a date column shift",
|
|
79
|
-
"view.transform.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
"view.transform.
|
|
115
|
+
"view.transform.join": (
|
|
116
|
+
"join blend merge combine enrich match matching keys rows add columns from another "
|
|
117
|
+
"second view views dataset datasets table tables vlookup"
|
|
118
|
+
),
|
|
119
|
+
"view.transform.json-extract": "json extract parse nested fields keys into columns",
|
|
120
|
+
"view.transform.limit-rows": "limit top bottom first last n rows order by sorted head",
|
|
121
|
+
"view.transform.lookup": (
|
|
122
|
+
"lookup look up vlookup reference table map code to name enrich one value "
|
|
123
|
+
"from another view dataset"
|
|
124
|
+
),
|
|
125
|
+
"view.transform.math": (
|
|
126
|
+
"math arithmetic multiply divide add subtract formula expression amount "
|
|
127
|
+
"calculate compute ratio percentage round"
|
|
128
|
+
),
|
|
129
|
+
"view.transform.pivot": (
|
|
130
|
+
"pivot group by aggregate aggregation sum count average summary summarize "
|
|
131
|
+
"summarise per region total"
|
|
132
|
+
),
|
|
133
|
+
"view.transform.replace": "find replace substitute text value in columns",
|
|
134
|
+
"view.transform.set-values": (
|
|
135
|
+
"set values assign overwrite blank empty default where condition label "
|
|
136
|
+
"category bucket flag if then conditional value"
|
|
137
|
+
),
|
|
138
|
+
"view.transform.small-large": "nth smallest largest value across columns",
|
|
139
|
+
"view.transform.split": "split column by delimiter separator into columns",
|
|
140
|
+
"view.transform.substring": "substring left right characters regex pattern extract part text",
|
|
141
|
+
"view.transform.text": (
|
|
142
|
+
"text case upper uppercase lower lowercase title trim whitespace normalise normalize"
|
|
143
|
+
),
|
|
144
|
+
"view.transform.unnest": (
|
|
145
|
+
"unnest unpivot melt wide to long columns into label value rows reshape"
|
|
146
|
+
),
|
|
147
|
+
"view.transform.window": (
|
|
148
|
+
"window rank row number running total cumulative sum moving average lag lead "
|
|
149
|
+
"previous next row partition"
|
|
150
|
+
),
|
|
84
151
|
}
|
|
85
152
|
|
|
86
153
|
# A compact string scope is retained for existing discovery consumers. These
|
|
@@ -138,9 +205,52 @@ _DISCOVERY_SYNONYMS: dict[str, tuple[str, ...]] = {
|
|
|
138
205
|
"asynchronous": ("async", "job", "wait"),
|
|
139
206
|
"async": ("job", "wait", "poll"),
|
|
140
207
|
"poll": ("job", "wait", "status"),
|
|
208
|
+
# British spellings search the same as the American ones.
|
|
209
|
+
"summarise": ("summarize",),
|
|
210
|
+
"standardise": ("standardize",),
|
|
211
|
+
"normalise": ("normalize",),
|
|
212
|
+
"categorise": ("categorize",),
|
|
141
213
|
}
|
|
142
214
|
_DISCOVERY_STOPWORDS = frozenset(
|
|
143
|
-
{
|
|
215
|
+
{
|
|
216
|
+
"a",
|
|
217
|
+
"an",
|
|
218
|
+
"the",
|
|
219
|
+
"me",
|
|
220
|
+
"please",
|
|
221
|
+
"for",
|
|
222
|
+
"to",
|
|
223
|
+
"of",
|
|
224
|
+
"by",
|
|
225
|
+
"with",
|
|
226
|
+
"can",
|
|
227
|
+
"i",
|
|
228
|
+
# Filler in goal phrasing ("merge my two datasets"); a command never
|
|
229
|
+
# turns on these words, so they must not sink an otherwise good match.
|
|
230
|
+
"my",
|
|
231
|
+
"our",
|
|
232
|
+
"two",
|
|
233
|
+
"another",
|
|
234
|
+
"other",
|
|
235
|
+
"into",
|
|
236
|
+
"from",
|
|
237
|
+
"and",
|
|
238
|
+
"all",
|
|
239
|
+
"each",
|
|
240
|
+
"this",
|
|
241
|
+
"that",
|
|
242
|
+
"how",
|
|
243
|
+
"do",
|
|
244
|
+
"want",
|
|
245
|
+
"need",
|
|
246
|
+
}
|
|
247
|
+
)
|
|
248
|
+
# How many near misses a search with no full match returns.
|
|
249
|
+
_MAX_SUGGESTIONS = 5
|
|
250
|
+
_NO_MATCH_HINT = (
|
|
251
|
+
"No command matched every word. 'suggestions' match some of them; try fewer or other "
|
|
252
|
+
"words. 'mammoth view transform --help' lists every data transformation (join, pivot, "
|
|
253
|
+
"filter, dedupe, math, ...), and 'mammoth schema list' is the complete inventory."
|
|
144
254
|
)
|
|
145
255
|
_TOKEN_RE = re.compile(r"[a-z0-9]+(?:-[a-z0-9]+)*")
|
|
146
256
|
|
|
@@ -967,15 +1077,21 @@ def find_schemas(
|
|
|
967
1077
|
the included ``full_schema_command`` to fetch the authoritative detail.
|
|
968
1078
|
Every whitespace-separated term must occur in a command name, its examples,
|
|
969
1079
|
or its stable operation-purpose text, making the result deterministic and
|
|
970
|
-
easy to compose in scripts.
|
|
1080
|
+
easy to compose in scripts. When no command carries every term, the result
|
|
1081
|
+
adds ``suggestions`` (the commands that carry the most terms) and a ``hint``,
|
|
1082
|
+
so a cold caller who phrased the goal in other words is not left with an
|
|
1083
|
+
empty list.
|
|
971
1084
|
"""
|
|
972
|
-
|
|
1085
|
+
# A query made only of filler words keeps them, rather than matching
|
|
1086
|
+
# every command.
|
|
1087
|
+
terms = _query_tokens(query) or tuple(_tokens(query))
|
|
973
1088
|
# Clamp caller-provided bounds instead of allowing an accidental unbounded
|
|
974
1089
|
# discovery response. A negative cursor is a usage mistake, not a request
|
|
975
1090
|
# to wrap around the catalog.
|
|
976
1091
|
bounded_limit = max(1, min(int(limit), _MAX_FIND_LIMIT))
|
|
977
1092
|
offset = max(0, int(cursor))
|
|
978
1093
|
ranked_matches: list[tuple[int, dict[str, Any]]] = []
|
|
1094
|
+
near_misses: list[tuple[int, int, dict[str, Any], list[str]]] = []
|
|
979
1095
|
for record in load_commands():
|
|
980
1096
|
if record.get("disposition") == "alias":
|
|
981
1097
|
continue
|
|
@@ -994,13 +1110,11 @@ def find_schemas(
|
|
|
994
1110
|
)
|
|
995
1111
|
searchable = " ".join(source for _, source in sources).casefold()
|
|
996
1112
|
searchable_tokens = _tokens(f"{primary_text} {searchable}")
|
|
1113
|
+
matched_terms = [term for term in terms if _token_aliases(term) & searchable_tokens]
|
|
1114
|
+
if not matched_terms:
|
|
1115
|
+
continue
|
|
997
1116
|
score = 0
|
|
998
|
-
|
|
999
|
-
for term in terms:
|
|
1000
|
-
aliases = _token_aliases(term)
|
|
1001
|
-
if not (aliases & searchable_tokens):
|
|
1002
|
-
matched = False
|
|
1003
|
-
break
|
|
1117
|
+
for term in matched_terms:
|
|
1004
1118
|
if term in _tokens(primary_text):
|
|
1005
1119
|
score += 100
|
|
1006
1120
|
elif term in _tokens(searchable):
|
|
@@ -1011,29 +1125,29 @@ def find_schemas(
|
|
|
1011
1125
|
# command-id ordering breaks all remaining ties.
|
|
1012
1126
|
if term in searchable_tokens:
|
|
1013
1127
|
score += 10
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
)
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
)
|
|
1128
|
+
# Purpose and command-specific hints are stronger than generic
|
|
1129
|
+
# family words such as ``data`` or ``show``.
|
|
1130
|
+
score += 5 * sum(
|
|
1131
|
+
1
|
|
1132
|
+
for term in matched_terms
|
|
1133
|
+
if any(term in source.casefold() for _, source in sources[:2])
|
|
1134
|
+
)
|
|
1135
|
+
command_purpose = _COMMAND_DISCOVERY_PURPOSES.get(command_id, "").casefold()
|
|
1136
|
+
score += 100 * sum(1 for term in matched_terms if term in _tokens(command_purpose))
|
|
1137
|
+
action = command_path.split()[1] if len(command_path.split()) > 1 else ""
|
|
1138
|
+
if "show" in matched_terms and action in {"list", "get", "browse"}:
|
|
1139
|
+
score += 80
|
|
1140
|
+
entry = {
|
|
1141
|
+
"command_id": command_id,
|
|
1142
|
+
"command_path": command_path,
|
|
1143
|
+
"mutation_class": record["mutation_class"],
|
|
1144
|
+
"confirmation": record["confirmation"],
|
|
1145
|
+
"full_schema_command": (f"mammoth schema get {command_id}"),
|
|
1146
|
+
}
|
|
1147
|
+
if len(matched_terms) == len(terms):
|
|
1148
|
+
ranked_matches.append((score, entry))
|
|
1149
|
+
else:
|
|
1150
|
+
near_misses.append((len(matched_terms), score, entry, matched_terms))
|
|
1037
1151
|
ranked_matches.sort(key=lambda item: (-item[0], item[1]["command_id"]))
|
|
1038
1152
|
total_matches = len(ranked_matches)
|
|
1039
1153
|
page = [match for _, match in ranked_matches[offset : offset + bounded_limit]]
|
|
@@ -1048,13 +1162,23 @@ def find_schemas(
|
|
|
1048
1162
|
if has_more
|
|
1049
1163
|
else None
|
|
1050
1164
|
)
|
|
1051
|
-
|
|
1165
|
+
result: dict[str, Any] = {
|
|
1052
1166
|
"query": query,
|
|
1053
1167
|
"matches": page,
|
|
1054
1168
|
"total_matches": total_matches,
|
|
1055
1169
|
"truncated": has_more,
|
|
1056
1170
|
"continuation": continuation,
|
|
1057
1171
|
}
|
|
1172
|
+
if total_matches == 0:
|
|
1173
|
+
# Most terms first, then the ordinary score: a command that carries
|
|
1174
|
+
# two of three words beats one that carries a single common word.
|
|
1175
|
+
near_misses.sort(key=lambda item: (-item[0], -item[1], item[2]["command_id"]))
|
|
1176
|
+
result["suggestions"] = [
|
|
1177
|
+
{**entry, "matched_terms": matched}
|
|
1178
|
+
for _, _, entry, matched in near_misses[:_MAX_SUGGESTIONS]
|
|
1179
|
+
]
|
|
1180
|
+
result["hint"] = _NO_MATCH_HINT
|
|
1181
|
+
return result
|
|
1058
1182
|
|
|
1059
1183
|
|
|
1060
1184
|
def get_schema(command_id: str) -> dict[str, Any] | None:
|
|
@@ -25,7 +25,9 @@ DEFAULT_STEERING_PATH = "AGENTS.md"
|
|
|
25
25
|
STEERING_BODY = """## Mammoth Analytics
|
|
26
26
|
|
|
27
27
|
Use the `mammoth` CLI for all Mammoth work; do not call the REST API or the
|
|
28
|
-
Python SDK directly
|
|
28
|
+
Python SDK directly, and do not drive the web app in a browser: every web
|
|
29
|
+
Transform-menu task is a `mammoth view transform` command (`mammoth view
|
|
30
|
+
transform --help`). Before the first Mammoth command in a session run
|
|
29
31
|
`mammoth doctor` (it must pass), then `mammoth skill show` and follow that
|
|
30
32
|
guide. If `mammoth` is missing, install it with `pip install mammoth-cli`
|
|
31
33
|
(or `uv tool install mammoth-cli`). If `mammoth auth status` shows no
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mammoth_cli-2.0.36 → mammoth_cli-2.0.37}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|