mammoth-cli 2.2.1__tar.gz → 2.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/PKG-INFO +2 -2
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/__init__.py +1 -1
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +4 -4
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +10 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +10 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +50 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +6 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/agent.py +8 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/dataset.py +3 -3
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/project.py +14 -2
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/registry.py +7 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/schema.py +3 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/workspace.py +53 -1
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/dryrun_targets.py +26 -3
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/runlog.py +25 -5
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/command_contract.py +1 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/input_fields.py +1 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/listing.py +4 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/positionals.py +11 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/protocol.py +4 -2
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/sdk_service.py +23 -7
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/testing.py +4 -2
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/pyproject.toml +2 -2
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/agent.yaml +46 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/project.yaml +43 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/workspace.yaml +192 -2
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/edits-target.source.yaml +3 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/sdk-catalog.source.yaml +49 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/sdk-methods.yaml +87 -3
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/.gitignore +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/LICENSE +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/README.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/__main__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/app.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/activity.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/addon.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/ai.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/annotation.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/auth.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/automation.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/batch.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/billing.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/browse.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/calc.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/capability.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/client_app.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/completion.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/config.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/connector.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/context.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/dashboard.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/data_app.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/doctor.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/external_key.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/file.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/folder.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/job.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/notification.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/parameter.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/report.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/schedule.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/skill.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/snippet.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/support.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/template.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/trash.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/upgrade.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/user.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/view.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/view_ops.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/view_profile.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/webhook.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/commands/workflow.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/context/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/context/credentials.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/context/endpoint.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/context/profiles.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/context/resolver.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/contracts/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/contracts/auth.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/embed.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/errors/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/errors/envelope.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/manifest/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/manifest/loader.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/messages/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/output/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/output/envelope.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/output/normalize.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/output/policy.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/output/progress.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/output/render.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/py.typed +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/confirm.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/dataset_health.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/dryrun.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/embedded.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/executor.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/input_loader.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/intent_only.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/invocation.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/new_data.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/options.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/parents.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/session.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/state.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/strict.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/updates.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/validate.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/runtime/verify.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/argspec.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/board_values.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/coerce.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/conditions.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/dashboard_filters.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/dashboard_pages.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/dashboard_review.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/data_profile.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/data_quality.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/dispatch.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/factory.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/mapping.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/openapi_types.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/read_queries.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/stored_stats.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/text_dates.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/type_system.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/services/write_impact.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/skills/__init__.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/skills/installer.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/skills/steering.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/mammoth_cli/testing.py +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/activity.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/addon.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/ai.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/annotation.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/auth.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/automation.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/batch.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/billing.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/browse.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/calc.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/capability.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/client-app.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/completion.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/config.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/connector.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/context.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/dashboard.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/data-app.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/dataset.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/doctor.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/external-key.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/file.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/folder.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/job.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/log.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/notification.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/parameter.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/report.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/schedule.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/schema.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/skill.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/snippet.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/support.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/template.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/trash.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/upgrade.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/user.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/version.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/view.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/webhook.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/commands/workflow.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/openapi-operations.yaml +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/manifests/schema-v1.json +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/openapi/metadata.json +0 -0
- {mammoth_cli-2.2.1 → mammoth_cli-2.2.3}/spec/openapi/openapi.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mammoth-cli
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.3
|
|
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.9,>=0.8.
|
|
20
|
+
Requires-Dist: mammoth-io<0.9,>=0.8.5
|
|
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,12 +1,12 @@
|
|
|
1
1
|
# Published CLI command catalog
|
|
2
2
|
|
|
3
|
-
This generated catalog is a lookup table for every command in the published CLI manifest, currently
|
|
3
|
+
This generated catalog is a lookup table for every command in the published CLI manifest, currently 595; each entry carries its release status line. It is a command-contract index, not an assertion that every backend/OpenAPI operation has a CLI binding. For an exact local CLI contract, run `mammoth schema get COMMAND_ID`; `mammoth capability list` is an API-binding inventory and can omit typed/local CLI routes. For focused workflows, read the [recipes index](recipes/index.md). Sensitive structured input must come from a private file or pipe; never put secrets in literal argv.
|
|
4
4
|
|
|
5
5
|
Load only the applicable domain file:
|
|
6
6
|
|
|
7
7
|
- [activity](commands/activity.md) — 2 published commands
|
|
8
8
|
- [addon](commands/addon.md) — 7 published commands
|
|
9
|
-
- [agent](commands/agent.md) —
|
|
9
|
+
- [agent](commands/agent.md) — 14 published commands
|
|
10
10
|
- [ai](commands/ai.md) — 5 published commands
|
|
11
11
|
- [annotation](commands/annotation.md) — 5 published commands
|
|
12
12
|
- [auth](commands/auth.md) — 3 published commands
|
|
@@ -34,7 +34,7 @@ Load only the applicable domain file:
|
|
|
34
34
|
- [log](commands/log.md) — 2 published commands
|
|
35
35
|
- [notification](commands/notification.md) — 5 published commands
|
|
36
36
|
- [parameter](commands/parameter.md) — 14 published commands
|
|
37
|
-
- [project](commands/project.md) —
|
|
37
|
+
- [project](commands/project.md) — 24 published commands
|
|
38
38
|
- [report](commands/report.md) — 1 published commands
|
|
39
39
|
- [schedule](commands/schedule.md) — 5 published commands
|
|
40
40
|
- [schema](commands/schema.md) — 3 published commands
|
|
@@ -50,4 +50,4 @@ Load only the applicable domain file:
|
|
|
50
50
|
- [view](commands/view.md) — 90 published commands
|
|
51
51
|
- [webhook](commands/webhook.md) — 7 published commands
|
|
52
52
|
- [workflow](commands/workflow.md) — 16 published commands
|
|
53
|
-
- [workspace](commands/workspace.md) —
|
|
53
|
+
- [workspace](commands/workspace.md) — 25 published commands
|
|
@@ -92,6 +92,16 @@ Result: `AgentRunStopResult`; mutation `benign_mutation`, confirmation `none`, w
|
|
|
92
92
|
|
|
93
93
|
Status on release: untried; no live run recorded.
|
|
94
94
|
|
|
95
|
+
### `agent.run.units.set`
|
|
96
|
+
|
|
97
|
+
Run: `mammoth agent run units set`. Exact input fields: `mammoth schema get agent.run.units.set`.
|
|
98
|
+
|
|
99
|
+
Example: `mammoth agent run units set resource-123 --input '{"step": 1, "kind": "sample", "units": [{"sample_key": "Status"}]}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
100
|
+
|
|
101
|
+
Result: `AgentRunUnitsSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
102
|
+
|
|
103
|
+
Status on release: untried; no live run recorded.
|
|
104
|
+
|
|
95
105
|
### `agent.session.delete`
|
|
96
106
|
|
|
97
107
|
Run: `mammoth agent session delete`. Exact input fields: `mammoth schema get agent.session.delete`.
|
|
@@ -132,6 +132,16 @@ Result: `ProjectMemoryRemoveResult`; mutation `benign_mutation`, confirmation `n
|
|
|
132
132
|
|
|
133
133
|
Status on release: untried; no live run recorded.
|
|
134
134
|
|
|
135
|
+
### `project.needs-attention`
|
|
136
|
+
|
|
137
|
+
Run: `mammoth project needs-attention`. Exact input fields: `mammoth schema get project.needs-attention`.
|
|
138
|
+
|
|
139
|
+
Example: `mammoth project needs-attention 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
140
|
+
|
|
141
|
+
Result: `ProjectNeedsAttentionResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
142
|
+
|
|
143
|
+
Status on release: untried; no live run recorded.
|
|
144
|
+
|
|
135
145
|
### `project.pending-changes`
|
|
136
146
|
|
|
137
147
|
Run: `mammoth project pending-changes`. Exact input fields: `mammoth schema get project.pending-changes`.
|
|
@@ -64,6 +64,56 @@ Result: `WorkspaceGetResult`; mutation `read`, confirmation `none`, wait policy
|
|
|
64
64
|
|
|
65
65
|
Status on release: ran once on CLI 2.0.18 — fixture-lifecycle sweep 2026-09-19: exit 0 on release with CLI 2.0.18. Returned workspace 4 (API Tests) profile. Single invocation only.
|
|
66
66
|
|
|
67
|
+
### `workspace.invite.delete`
|
|
68
|
+
|
|
69
|
+
Run: `mammoth workspace invite delete`. Exact input fields: `mammoth schema get workspace.invite.delete`.
|
|
70
|
+
|
|
71
|
+
Example: `mammoth workspace invite delete --input '{"invite_ids": [1]}'`. Illustrative only: append `--yes` after observing an owned target.
|
|
72
|
+
|
|
73
|
+
Result: `WorkspaceInviteDeleteResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
|
|
74
|
+
|
|
75
|
+
Status on release: untried; no live run recorded.
|
|
76
|
+
|
|
77
|
+
### `workspace.invite.list`
|
|
78
|
+
|
|
79
|
+
Run: `mammoth workspace invite list`. Exact input fields: `mammoth schema get workspace.invite.list`.
|
|
80
|
+
|
|
81
|
+
Example: `mammoth workspace invite list`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
82
|
+
|
|
83
|
+
Result: `WorkspaceInviteListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
|
|
84
|
+
|
|
85
|
+
Status on release: untried; no live run recorded.
|
|
86
|
+
|
|
87
|
+
### `workspace.invite.resend`
|
|
88
|
+
|
|
89
|
+
Run: `mammoth workspace invite resend`. Exact input fields: `mammoth schema get workspace.invite.resend`.
|
|
90
|
+
|
|
91
|
+
Example: `mammoth workspace invite resend --input '{"invite_ids": [1]}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
|
|
92
|
+
|
|
93
|
+
Result: `WorkspaceInviteResendResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
|
|
94
|
+
|
|
95
|
+
Status on release: untried; no live run recorded.
|
|
96
|
+
|
|
97
|
+
### `workspace.invite.revoke`
|
|
98
|
+
|
|
99
|
+
Run: `mammoth workspace invite revoke`. Exact input fields: `mammoth schema get workspace.invite.revoke`.
|
|
100
|
+
|
|
101
|
+
Example: `mammoth workspace invite revoke --input '{"invite_ids": [1]}'`. Illustrative only: append `--yes` after observing an owned target.
|
|
102
|
+
|
|
103
|
+
Result: `WorkspaceInviteRevokeResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
|
|
104
|
+
|
|
105
|
+
Status on release: untried; no live run recorded.
|
|
106
|
+
|
|
107
|
+
### `workspace.invite.update-role`
|
|
108
|
+
|
|
109
|
+
Run: `mammoth workspace invite update-role`. Exact input fields: `mammoth schema get workspace.invite.update-role`.
|
|
110
|
+
|
|
111
|
+
Example: `mammoth workspace invite update-role --input '{"invite_id": 1, "role": "sample"}'`. Illustrative only: append `--yes` after observing an owned target.
|
|
112
|
+
|
|
113
|
+
Result: `WorkspaceInviteUpdateRoleResult`; mutation `high_impact`, confirmation `yes_always`, wait policy `not_async`.
|
|
114
|
+
|
|
115
|
+
Status on release: untried; no live run recorded.
|
|
116
|
+
|
|
67
117
|
### `workspace.list`
|
|
68
118
|
|
|
69
119
|
Run: `mammoth workspace list`. Exact input fields: `mammoth schema get workspace.list`.
|
|
@@ -129,6 +129,12 @@ Response shapes are not uniform; never reuse one `jq` path across commands.
|
|
|
129
129
|
command returns its object directly under `data`. Inspect the first response
|
|
130
130
|
before extracting a field.
|
|
131
131
|
|
|
132
|
+
`project list` shows only the projects the user is a member of, the same as the
|
|
133
|
+
Mammoth UI. A workspace owner or admin can read other projects but not open
|
|
134
|
+
them, so never report them as access denied. Pass `include_non_members: true`
|
|
135
|
+
only when the user asks about projects they are not in; each row then carries
|
|
136
|
+
`member`.
|
|
137
|
+
|
|
132
138
|
## Exports
|
|
133
139
|
|
|
134
140
|
First inspect `view.export.list/get` for existing configuration and the exact
|
|
@@ -263,3 +263,11 @@ def _run_control(invocation: Invocation) -> HandlerResult:
|
|
|
263
263
|
|
|
264
264
|
|
|
265
265
|
agent_run_pause = agent_run_resume = agent_run_stop = agent_run_extend = _run_control
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
def agent_run_units_set(invocation: Invocation) -> HandlerResult:
|
|
269
|
+
"""Report the objects one plan step of a run will work on, as queued units."""
|
|
270
|
+
run_id = _require_string_positional(invocation, "run id")
|
|
271
|
+
document = _bound_document(invocation)
|
|
272
|
+
kwargs = {field: _require_field(document, field) for field in ("step", "kind", "units")}
|
|
273
|
+
return _session_call(invocation, run_id=run_id, **kwargs)
|
|
@@ -31,7 +31,7 @@ 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
33
|
from mammoth_cli.services.listing import (
|
|
34
|
-
|
|
34
|
+
DATASET_ROW_FIELDS,
|
|
35
35
|
ambiguity_note,
|
|
36
36
|
dataset_summary,
|
|
37
37
|
fit_budget,
|
|
@@ -258,7 +258,7 @@ def dataset_list(invocation: Invocation) -> HandlerResult:
|
|
|
258
258
|
return _dataset_name_search(invocation, project_id, name.strip(), document)
|
|
259
259
|
compact = not document.get("full")
|
|
260
260
|
if compact:
|
|
261
|
-
kwargs["fields"] =
|
|
261
|
+
kwargs["fields"] = DATASET_ROW_FIELDS
|
|
262
262
|
with open_service(invocation) as (service, auth):
|
|
263
263
|
data = service.call(_symbol(invocation), **kwargs)
|
|
264
264
|
if compact:
|
|
@@ -279,7 +279,7 @@ def _dataset_name_search(
|
|
|
279
279
|
"mammoth.api.datasets.DatasetsAPI.list_all",
|
|
280
280
|
project_id=project_id,
|
|
281
281
|
sort=document.get("sort", "(created_at:desc)"),
|
|
282
|
-
fields=
|
|
282
|
+
fields=DATASET_ROW_FIELDS,
|
|
283
283
|
)
|
|
284
284
|
records = data.get("datasets", []) if isinstance(data, dict) else []
|
|
285
285
|
page = search_page(records, name, int(document.get("offset", 0)), document.get("limit"))
|
|
@@ -115,7 +115,11 @@ def _forward_optional(
|
|
|
115
115
|
|
|
116
116
|
|
|
117
117
|
def project_list(invocation: Invocation) -> HandlerResult:
|
|
118
|
-
"""List projects in the active workspace, one page at a time.
|
|
118
|
+
"""List the caller's member projects in the active workspace, one page at a time.
|
|
119
|
+
|
|
120
|
+
These are the projects the Mammoth UI shows. ``include_non_members: true``
|
|
121
|
+
adds the other workspace projects (workspace owners and admins can read
|
|
122
|
+
them but not open them); every row then carries ``member``.
|
|
119
123
|
|
|
120
124
|
``offset`` forwards for pagination past the server's 100-row page, the
|
|
121
125
|
same as ``dataset list``; a short page's ``next`` in the response is
|
|
@@ -124,7 +128,7 @@ def project_list(invocation: Invocation) -> HandlerResult:
|
|
|
124
128
|
"""
|
|
125
129
|
document = invocation.load_input() or {}
|
|
126
130
|
kwargs: dict[str, Any] = {"limit": int(document.get("limit", 100))}
|
|
127
|
-
_forward_optional(document, kwargs, ("offset",))
|
|
131
|
+
_forward_optional(document, kwargs, ("offset", "include_non_members"))
|
|
128
132
|
with open_service(invocation) as (service, auth):
|
|
129
133
|
data = service.call(_symbol(invocation), **kwargs)
|
|
130
134
|
return data, _meta(invocation, auth.workspace_id, resolved_project(invocation))
|
|
@@ -146,6 +150,14 @@ def project_pending_changes(invocation: Invocation) -> HandlerResult:
|
|
|
146
150
|
return data, _meta(invocation, auth.workspace_id, project_id)
|
|
147
151
|
|
|
148
152
|
|
|
153
|
+
def project_needs_attention(invocation: Invocation) -> HandlerResult:
|
|
154
|
+
"""List the Monitor "Needs Attention" rows with the dataset behind each view."""
|
|
155
|
+
project_id = _project_id(invocation)
|
|
156
|
+
with open_service(invocation) as (service, auth):
|
|
157
|
+
data = service.call(_symbol(invocation), project_id=project_id)
|
|
158
|
+
return data, _meta(invocation, auth.workspace_id, project_id)
|
|
159
|
+
|
|
160
|
+
|
|
149
161
|
def project_memory_list(invocation: Invocation) -> HandlerResult:
|
|
150
162
|
"""List the caller's saved agent preferences for a project."""
|
|
151
163
|
project_id = _project_id(invocation)
|
|
@@ -253,6 +253,7 @@ HANDLERS: dict[str, Handler] = {
|
|
|
253
253
|
"project.list": project_cmd.project_list,
|
|
254
254
|
"project.get": project_cmd.project_get,
|
|
255
255
|
"project.check": project_cmd.project_check,
|
|
256
|
+
"project.needs-attention": project_cmd.project_needs_attention,
|
|
256
257
|
"project.pending-changes": project_cmd.project_pending_changes,
|
|
257
258
|
"project.memory.list": project_cmd.project_memory_list,
|
|
258
259
|
"project.memory.add": project_cmd.project_memory_add,
|
|
@@ -293,6 +294,11 @@ HANDLERS: dict[str, Handler] = {
|
|
|
293
294
|
"workspace.delete": workspace_cmd.workspace_delete,
|
|
294
295
|
"workspace.get": workspace_cmd.workspace_get,
|
|
295
296
|
"workspace.list": workspace_cmd.workspace_list,
|
|
297
|
+
"workspace.invite.delete": workspace_cmd.workspace_invite_delete,
|
|
298
|
+
"workspace.invite.list": workspace_cmd.workspace_invite_list,
|
|
299
|
+
"workspace.invite.resend": workspace_cmd.workspace_invite_resend,
|
|
300
|
+
"workspace.invite.revoke": workspace_cmd.workspace_invite_revoke,
|
|
301
|
+
"workspace.invite.update-role": workspace_cmd.workspace_invite_update_role,
|
|
296
302
|
"workspace.llm-task": workspace_cmd.workspace_llm_task,
|
|
297
303
|
"workspace.reactivate": workspace_cmd.workspace_reactivate,
|
|
298
304
|
"workspace.segment.list": workspace_cmd.workspace_segment_list,
|
|
@@ -544,6 +550,7 @@ HANDLERS: dict[str, Handler] = {
|
|
|
544
550
|
"agent.run.resume": agent_cmd.agent_run_resume,
|
|
545
551
|
"agent.run.status": agent_cmd.agent_run_status,
|
|
546
552
|
"agent.run.stop": agent_cmd.agent_run_stop,
|
|
553
|
+
"agent.run.units.set": agent_cmd.agent_run_units_set,
|
|
547
554
|
"agent.session.delete": agent_cmd.agent_session_delete,
|
|
548
555
|
"agent.session.list": agent_cmd.agent_session_list,
|
|
549
556
|
"agent.session.messages": agent_cmd.agent_session_messages,
|
|
@@ -341,6 +341,9 @@ _COMMAND_DISCOVERY_PURPOSES = {
|
|
|
341
341
|
"project.pending-changes": (
|
|
342
342
|
"source changes new rows not taken in yet pending updates waiting to apply"
|
|
343
343
|
),
|
|
344
|
+
"project.needs-attention": (
|
|
345
|
+
"monitor needs attention error failing pipeline views delete datasets behind list"
|
|
346
|
+
),
|
|
344
347
|
"project.resource-status": "stuck stale failing broken error status anything wrong health",
|
|
345
348
|
"connector.ai.chat": (
|
|
346
349
|
"connect our own internal custom api build a connector for an unsupported source"
|
|
@@ -308,7 +308,7 @@ def workspace_user_list(invocation: Invocation) -> HandlerResult:
|
|
|
308
308
|
"""
|
|
309
309
|
document = invocation.load_input() or {}
|
|
310
310
|
kwargs: dict[str, Any] = {"fields": _USER_LIST_FIELDS}
|
|
311
|
-
_forward_optional(document, kwargs, ("fields",))
|
|
311
|
+
_forward_optional(document, kwargs, ("fields", "project_id"))
|
|
312
312
|
with open_service(invocation) as (service, auth):
|
|
313
313
|
data = service.call(_symbol(invocation), **kwargs)
|
|
314
314
|
return data, _meta(invocation, auth.workspace_id)
|
|
@@ -372,3 +372,55 @@ def workspace_user_update_batch(invocation: Invocation) -> HandlerResult:
|
|
|
372
372
|
with open_service(invocation) as (service, auth):
|
|
373
373
|
data = service.call(_symbol(invocation), patches=patches)
|
|
374
374
|
return data, _meta(invocation, auth.workspace_id)
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def workspace_invite_list(invocation: Invocation) -> HandlerResult:
|
|
378
|
+
"""List pending invites with their invite ids; ``project_id`` narrows to one project."""
|
|
379
|
+
document = invocation.load_input() or {}
|
|
380
|
+
kwargs: dict[str, Any] = {}
|
|
381
|
+
_forward_optional(document, kwargs, ("project_id",))
|
|
382
|
+
with open_service(invocation) as (service, auth):
|
|
383
|
+
data = service.call(_symbol(invocation), **kwargs)
|
|
384
|
+
return data, _meta(invocation, auth.workspace_id)
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
def _invite_ids_call(invocation: Invocation) -> HandlerResult:
|
|
388
|
+
document = invocation.load_input()
|
|
389
|
+
invite_ids = _require_field(document, "invite_ids")
|
|
390
|
+
with open_service(invocation) as (service, auth):
|
|
391
|
+
data = service.call(_symbol(invocation), invite_ids=invite_ids)
|
|
392
|
+
return data, _meta(invocation, auth.workspace_id)
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
def workspace_invite_resend(invocation: Invocation) -> HandlerResult:
|
|
396
|
+
"""Send the invitation email again. ``invite_ids`` from ``--input``."""
|
|
397
|
+
return _invite_ids_call(invocation)
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
def workspace_invite_revoke(invocation: Invocation) -> HandlerResult:
|
|
401
|
+
"""Revoke pending invites. Prompt or ``--yes`` required."""
|
|
402
|
+
enforce_confirmation(
|
|
403
|
+
invocation, policy=POLICY_PROMPT_OR_YES, action="revoke pending workspace invites"
|
|
404
|
+
)
|
|
405
|
+
return _invite_ids_call(invocation)
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
def workspace_invite_delete(invocation: Invocation) -> HandlerResult:
|
|
409
|
+
"""Delete pending invites and free their seats. Prompt or ``--yes`` required."""
|
|
410
|
+
enforce_confirmation(
|
|
411
|
+
invocation, policy=POLICY_PROMPT_OR_YES, action="delete pending workspace invites"
|
|
412
|
+
)
|
|
413
|
+
return _invite_ids_call(invocation)
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
def workspace_invite_update_role(invocation: Invocation) -> HandlerResult:
|
|
417
|
+
"""Change the role a pending invite grants. ``--yes`` required."""
|
|
418
|
+
document = invocation.load_input()
|
|
419
|
+
invite_id = _require_field(document, "invite_id")
|
|
420
|
+
role = _require_field(document, "role")
|
|
421
|
+
enforce_confirmation(
|
|
422
|
+
invocation, policy=POLICY_YES_ALWAYS, action=f"change the role of invite {invite_id}"
|
|
423
|
+
)
|
|
424
|
+
with open_service(invocation) as (service, auth):
|
|
425
|
+
data = service.call(_symbol(invocation), invite_id=invite_id, role=role)
|
|
426
|
+
return data, _meta(invocation, auth.workspace_id)
|
|
@@ -132,6 +132,16 @@ class Sub:
|
|
|
132
132
|
|
|
133
133
|
_VIEW_FWD = ("dataset_id", "dataview_id", "project_id")
|
|
134
134
|
|
|
135
|
+
#: A pending workspace invite, named by its email from ``workspace invite list``.
|
|
136
|
+
_INVITE_SUB = Sub(
|
|
137
|
+
"invite",
|
|
138
|
+
"invite_ids",
|
|
139
|
+
source="workspace.invite.list",
|
|
140
|
+
container="invites",
|
|
141
|
+
label_paths=("email",),
|
|
142
|
+
name_fmt="invite for {label}",
|
|
143
|
+
)
|
|
144
|
+
|
|
135
145
|
#: Command -> the sub-resources it changes. Shapes verified live on koyal:
|
|
136
146
|
#: task ``params.SEQUENCE_NUMBER``/``params.TASK_KEY``; version ``name``;
|
|
137
147
|
#: agent session ``title``; parameter group ``name``; tag ``name``; context
|
|
@@ -303,6 +313,8 @@ SUBS: dict[str, tuple[Sub, ...]] = {
|
|
|
303
313
|
name_fmt="{label} › access to {parent}",
|
|
304
314
|
),
|
|
305
315
|
),
|
|
316
|
+
"workspace.invite.delete": (_INVITE_SUB,),
|
|
317
|
+
"workspace.invite.revoke": (_INVITE_SUB,),
|
|
306
318
|
"notification.delete": (Sub("notification", "notification_id"),),
|
|
307
319
|
"notification.delete-batch": (Sub("notification", "ids"),),
|
|
308
320
|
}
|
|
@@ -526,6 +538,16 @@ def _target_spec(command_id: str, would_call: Mapping[str, Any]) -> tuple[str, s
|
|
|
526
538
|
return None
|
|
527
539
|
|
|
528
540
|
|
|
541
|
+
def _remove_batch_invites(
|
|
542
|
+
service: MammothService, command_id: str, arguments: Mapping[str, Any]
|
|
543
|
+
) -> list[dict[str, Any]]:
|
|
544
|
+
"""The pending invites a ``user remove-batch`` call deletes, named by email."""
|
|
545
|
+
invite_ids = _ids(arguments.get("invite_ids"))
|
|
546
|
+
if not invite_ids:
|
|
547
|
+
return []
|
|
548
|
+
return _sub_targets(service, command_id, _INVITE_SUB, {"invite_ids": invite_ids})
|
|
549
|
+
|
|
550
|
+
|
|
529
551
|
def resolve_targets(
|
|
530
552
|
service: MammothService, command_id: str, would_call: Mapping[str, Any]
|
|
531
553
|
) -> list[dict[str, Any]]:
|
|
@@ -559,8 +581,9 @@ def resolve_targets(
|
|
|
559
581
|
return []
|
|
560
582
|
kind, id_arg = spec
|
|
561
583
|
ids = _ids(arguments.get(id_arg, would_call.get(id_arg)))
|
|
562
|
-
|
|
563
|
-
|
|
584
|
+
invites = _remove_batch_invites(service, command_id, arguments)
|
|
585
|
+
if not ids and invites:
|
|
586
|
+
return invites
|
|
564
587
|
if not ids:
|
|
565
588
|
raise unresolvable_error(
|
|
566
589
|
command_id, f"the call carries no explicit '{id_arg}' ids (it may target every {kind})"
|
|
@@ -572,7 +595,7 @@ def resolve_targets(
|
|
|
572
595
|
parent = {**arguments}
|
|
573
596
|
if "dataset_id" not in parent and would_call.get("dataset_id") is not None:
|
|
574
597
|
parent["dataset_id"] = would_call["dataset_id"]
|
|
575
|
-
return [_read_name(service, kind, item, parent) for item in ids]
|
|
598
|
+
return [_read_name(service, kind, item, parent) for item in ids] + invites
|
|
576
599
|
|
|
577
600
|
|
|
578
601
|
#: Deletes whose dry run also lists what depends on the resource: command ->
|
|
@@ -30,6 +30,7 @@ import json
|
|
|
30
30
|
import logging
|
|
31
31
|
import os
|
|
32
32
|
import sys
|
|
33
|
+
import threading
|
|
33
34
|
import time
|
|
34
35
|
import uuid
|
|
35
36
|
from dataclasses import dataclass, field
|
|
@@ -45,6 +46,12 @@ LOG_DIR_ENV = "MAMMOTH_LOG_DIR"
|
|
|
45
46
|
RETENTION_DAYS = 7
|
|
46
47
|
MAX_FILE_BYTES = 20 * 1024 * 1024
|
|
47
48
|
_LOGGER_NAMES = ("mammoth", "mammoth_cli")
|
|
49
|
+
#: Invocations overlap in an embedded host (one thread each). Logger levels are
|
|
50
|
+
#: process-wide, so they are saved by the first attach and restored by the last
|
|
51
|
+
#: detach; a per-invocation restore silenced the others' ``mammoth.http`` lines.
|
|
52
|
+
_LEVEL_LOCK = threading.Lock()
|
|
53
|
+
_ATTACHED = 0
|
|
54
|
+
_SAVED_LEVELS: dict[str, int] = {}
|
|
48
55
|
_INPUT_OPTION = "--input"
|
|
49
56
|
_REDACTED_INPUT = "<redacted --input>"
|
|
50
57
|
|
|
@@ -234,12 +241,19 @@ class RunLog:
|
|
|
234
241
|
def attach(self, *, debug: bool) -> None:
|
|
235
242
|
if self._disabled:
|
|
236
243
|
return
|
|
244
|
+
global _ATTACHED
|
|
237
245
|
level = logging.DEBUG if debug else logging.INFO
|
|
246
|
+
with _LEVEL_LOCK:
|
|
247
|
+
if _ATTACHED == 0:
|
|
248
|
+
_SAVED_LEVELS.update({n: logging.getLogger(n).level for n in _LOGGER_NAMES})
|
|
249
|
+
_ATTACHED += 1
|
|
250
|
+
self._previous_levels.update(_SAVED_LEVELS)
|
|
251
|
+
for name in _LOGGER_NAMES:
|
|
252
|
+
logger = logging.getLogger(name)
|
|
253
|
+
if logger.level == logging.NOTSET or logger.level > level:
|
|
254
|
+
logger.setLevel(level)
|
|
238
255
|
for name in _LOGGER_NAMES:
|
|
239
256
|
logger = logging.getLogger(name)
|
|
240
|
-
self._previous_levels[name] = logger.level
|
|
241
|
-
if logger.level == logging.NOTSET or logger.level > level:
|
|
242
|
-
logger.setLevel(level)
|
|
243
257
|
handlers: list[logging.Handler] = [_JsonlHandler(self)]
|
|
244
258
|
if debug:
|
|
245
259
|
handlers.append(_StderrHandler(level=level))
|
|
@@ -250,8 +264,14 @@ class RunLog:
|
|
|
250
264
|
def detach(self) -> None:
|
|
251
265
|
for logger, handler in self._handlers:
|
|
252
266
|
logger.removeHandler(handler)
|
|
253
|
-
|
|
254
|
-
|
|
267
|
+
global _ATTACHED
|
|
268
|
+
if self._previous_levels:
|
|
269
|
+
with _LEVEL_LOCK:
|
|
270
|
+
_ATTACHED -= 1
|
|
271
|
+
if _ATTACHED == 0:
|
|
272
|
+
for name, level in _SAVED_LEVELS.items():
|
|
273
|
+
logging.getLogger(name).setLevel(level)
|
|
274
|
+
self._previous_levels.clear()
|
|
255
275
|
self._handlers.clear()
|
|
256
276
|
|
|
257
277
|
|
|
@@ -26,6 +26,10 @@ DATASET_LIST_FIELDS = (
|
|
|
26
26
|
"id,name,created_at,updated_at,status,stats,sources,data_schema,additional_info"
|
|
27
27
|
)
|
|
28
28
|
|
|
29
|
+
#: ``fields`` for ``dataset list`` rows: only what the server computes cheaply. ``stats``
|
|
30
|
+
#: (row count: DuckDB) and ``data_schema`` stay on ``dataset get``.
|
|
31
|
+
DATASET_ROW_FIELDS = "id,name,created_at,updated_at,status,sources,additional_info"
|
|
32
|
+
|
|
29
33
|
_MAX_COLUMNS = 4
|
|
30
34
|
#: Columns whose stored sample values a view summary shows, and values per column.
|
|
31
35
|
_SAMPLE_COLUMNS = 6
|
|
@@ -130,6 +130,8 @@ POSITIONAL_OVERRIDES: dict[str, tuple[PositionalSpec, ...]] = {
|
|
|
130
130
|
# The chat session is the global ``--session`` option, never a positional or
|
|
131
131
|
# an --input field; only the action or run being addressed is positional.
|
|
132
132
|
"agent.action.list": (),
|
|
133
|
+
# The invite is named in ``--input`` (``invite_id``), never positionally.
|
|
134
|
+
"workspace.invite.update-role": (),
|
|
133
135
|
"agent.run.status": (),
|
|
134
136
|
"agent.run.list": (),
|
|
135
137
|
"agent.action.delete": (
|
|
@@ -140,6 +142,14 @@ POSITIONAL_OVERRIDES: dict[str, tuple[PositionalSpec, ...]] = {
|
|
|
140
142
|
help="ID of the recorded action (from agent action list).",
|
|
141
143
|
),
|
|
142
144
|
),
|
|
145
|
+
"agent.run.units.set": (
|
|
146
|
+
PositionalSpec(
|
|
147
|
+
name="run_id",
|
|
148
|
+
type=str,
|
|
149
|
+
required=True,
|
|
150
|
+
help="ID of the run (from agent run status or agent run list).",
|
|
151
|
+
),
|
|
152
|
+
),
|
|
143
153
|
**{
|
|
144
154
|
f"agent.run.{verb}": (
|
|
145
155
|
PositionalSpec(
|
|
@@ -293,6 +303,7 @@ POSITIONAL_OVERRIDES: dict[str, tuple[PositionalSpec, ...]] = {
|
|
|
293
303
|
help="Check only this dataset's first view; no other dataset or dashboard is read.",
|
|
294
304
|
),
|
|
295
305
|
),
|
|
306
|
+
"project.needs-attention": _optional_project_id(),
|
|
296
307
|
"project.pending-changes": _optional_project_id(),
|
|
297
308
|
"project.memory.list": _optional_project_id(),
|
|
298
309
|
"project.memory.add": _optional_project_id(),
|
|
@@ -64,7 +64,9 @@ class MammothService(Protocol):
|
|
|
64
64
|
"""
|
|
65
65
|
...
|
|
66
66
|
|
|
67
|
-
def list_projects(
|
|
67
|
+
def list_projects(
|
|
68
|
+
self, limit: int = 100, offset: int = 0, include_non_members: bool = False
|
|
69
|
+
) -> dict[str, Any]:
|
|
68
70
|
"""List projects in the current workspace.
|
|
69
71
|
|
|
70
72
|
Args:
|
|
@@ -76,7 +78,7 @@ class MammothService(Protocol):
|
|
|
76
78
|
"""
|
|
77
79
|
...
|
|
78
80
|
|
|
79
|
-
def list_all_projects(self) -> list[dict[str, Any]]:
|
|
81
|
+
def list_all_projects(self, include_non_members: bool = False) -> list[dict[str, Any]]:
|
|
80
82
|
"""Every project in the workspace, across the route's pages.
|
|
81
83
|
|
|
82
84
|
Returns:
|
|
@@ -792,8 +792,10 @@ class SdkMammothService:
|
|
|
792
792
|
except Exception as exc:
|
|
793
793
|
raise map_sdk_exception(exc) from exc
|
|
794
794
|
|
|
795
|
-
def list_projects(
|
|
796
|
-
|
|
795
|
+
def list_projects(
|
|
796
|
+
self, limit: int = 100, offset: int = 0, include_non_members: bool = False
|
|
797
|
+
) -> dict[str, Any]:
|
|
798
|
+
"""List projects in the current workspace (member projects unless widened).
|
|
797
799
|
|
|
798
800
|
The projects route caps ``limit`` at 100 and pages with a server-side
|
|
799
801
|
``offset``; a larger ``limit`` is served by walking the pages.
|
|
@@ -801,6 +803,8 @@ class SdkMammothService:
|
|
|
801
803
|
Args:
|
|
802
804
|
limit: Maximum number of results.
|
|
803
805
|
offset: Number of leading results to skip.
|
|
806
|
+
include_non_members: Also list projects the caller is not a member
|
|
807
|
+
of; each row then carries ``member``.
|
|
804
808
|
|
|
805
809
|
Returns:
|
|
806
810
|
The raw project-list response, with ``projects`` holding at most
|
|
@@ -811,9 +815,15 @@ class SdkMammothService:
|
|
|
811
815
|
"""
|
|
812
816
|
try:
|
|
813
817
|
if limit <= _PROJECT_PAGE_SIZE:
|
|
814
|
-
response = self._run(
|
|
818
|
+
response = self._run(
|
|
819
|
+
self._client.projects.list(
|
|
820
|
+
limit=limit, offset=offset, include_non_members=include_non_members
|
|
821
|
+
)
|
|
822
|
+
)
|
|
815
823
|
return {**response, "projects": list(response.get("projects", []))}
|
|
816
|
-
everything = self._run(
|
|
824
|
+
everything = self._run(
|
|
825
|
+
self._client.projects.list_all(include_non_members=include_non_members)
|
|
826
|
+
)
|
|
817
827
|
except Exception as exc:
|
|
818
828
|
raise map_sdk_exception(exc) from exc
|
|
819
829
|
return {
|
|
@@ -823,14 +833,20 @@ class SdkMammothService:
|
|
|
823
833
|
"next": "",
|
|
824
834
|
}
|
|
825
835
|
|
|
826
|
-
def list_all_projects(self) -> list[dict[str, Any]]:
|
|
827
|
-
"""Every project in the workspace, across the route's 100-row pages.
|
|
836
|
+
def list_all_projects(self, include_non_members: bool = False) -> list[dict[str, Any]]:
|
|
837
|
+
"""Every member project in the workspace, across the route's 100-row pages.
|
|
838
|
+
|
|
839
|
+
Args:
|
|
840
|
+
include_non_members: Also list projects the caller is not a member
|
|
841
|
+
of; each row then carries ``member``.
|
|
828
842
|
|
|
829
843
|
Raises:
|
|
830
844
|
CliError: Mapped from any SDK exception.
|
|
831
845
|
"""
|
|
832
846
|
try:
|
|
833
|
-
return list(
|
|
847
|
+
return list(
|
|
848
|
+
self._run(self._client.projects.list_all(include_non_members=include_non_members))
|
|
849
|
+
)
|
|
834
850
|
except Exception as exc:
|
|
835
851
|
raise map_sdk_exception(exc) from exc
|
|
836
852
|
|
|
@@ -120,12 +120,14 @@ class FakeMammothService:
|
|
|
120
120
|
)
|
|
121
121
|
return {"projects": self.projects[:1]}
|
|
122
122
|
|
|
123
|
-
def list_projects(
|
|
123
|
+
def list_projects(
|
|
124
|
+
self, limit: int = 100, offset: int = 0, include_non_members: bool = False
|
|
125
|
+
) -> dict[str, Any]:
|
|
124
126
|
"""Return the in-memory project list, sliced by offset/limit."""
|
|
125
127
|
self.calls.append("list_projects")
|
|
126
128
|
return {"projects": self.projects[offset : offset + limit]}
|
|
127
129
|
|
|
128
|
-
def list_all_projects(self) -> list[dict[str, Any]]:
|
|
130
|
+
def list_all_projects(self, include_non_members: bool = False) -> list[dict[str, Any]]:
|
|
129
131
|
"""Return the whole in-memory project list."""
|
|
130
132
|
self.calls.append("list_all_projects")
|
|
131
133
|
return list(self.projects)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mammoth-cli"
|
|
3
|
-
version = "2.2.
|
|
3
|
+
version = "2.2.3"
|
|
4
4
|
description = "Command-line interface for the Mammoth Analytics platform"
|
|
5
5
|
authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = "LicenseRef-Proprietary"
|
|
8
8
|
requires-python = ">=3.12,<3.15"
|
|
9
9
|
dependencies = [
|
|
10
|
-
"mammoth-io (>=0.8.
|
|
10
|
+
"mammoth-io (>=0.8.5,<0.9)",
|
|
11
11
|
"typer (>=0.27,<0.28)",
|
|
12
12
|
"rich (>=15,<16)",
|
|
13
13
|
"platformdirs (>=4.10,<5)",
|