mammoth-cli 2.2.7__tar.gz → 2.2.9__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.
Files changed (253) hide show
  1. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/PKG-INFO +2 -2
  2. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/app.py +6 -0
  4. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +1 -1
  5. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +2 -2
  6. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +1 -1
  7. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +1 -1
  8. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +2 -2
  9. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +210 -0
  10. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +4 -4
  11. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +2 -2
  12. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/activity.py +8 -3
  13. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/calc.py +37 -10
  14. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/client_app.py +3 -0
  15. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/dataset.py +33 -11
  16. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/doctor.py +2 -3
  17. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/folder.py +1 -6
  18. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/project.py +6 -7
  19. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/registry.py +21 -0
  20. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/schema.py +24 -2
  21. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/support.py +248 -1
  22. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/view.py +92 -13
  23. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/view_ops.py +16 -3
  24. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/view_profile.py +7 -6
  25. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/workflow.py +16 -1
  26. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/workspace.py +7 -1
  27. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/embed.py +56 -25
  28. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/errors/envelope.py +1 -0
  29. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/output/normalize.py +51 -31
  30. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/dryrun.py +33 -0
  31. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/embedded.py +15 -1
  32. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/executor.py +26 -1
  33. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/input_loader.py +16 -0
  34. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/intent_only.py +2 -0
  35. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/parents.py +24 -3
  36. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/runlog.py +5 -1
  37. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/dashboard_review.py +4 -3
  38. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/data_profile.py +2 -1
  39. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/data_quality.py +12 -6
  40. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/input_fields.py +8 -0
  41. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/listing.py +4 -2
  42. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/mapping.py +2 -2
  43. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/positionals.py +56 -0
  44. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/sdk_service.py +56 -19
  45. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/text_dates.py +4 -4
  46. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/pyproject.toml +2 -2
  47. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/dashboard.yaml +1 -1
  48. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/dataset.yaml +1 -1
  49. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/project.yaml +1 -1
  50. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/support.yaml +909 -0
  51. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/workflow.yaml +3 -3
  52. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/workspace.yaml +3 -3
  53. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/edits-target.source.yaml +11 -0
  54. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/sdk-catalog.source.yaml +151 -2
  55. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/sdk-methods.yaml +254 -2
  56. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/.gitignore +0 -0
  57. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/LICENSE +0 -0
  58. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/README.md +0 -0
  59. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/__main__.py +0 -0
  60. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  61. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  62. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  63. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  64. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  65. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  66. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  67. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  68. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  69. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  70. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  71. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  72. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  73. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  74. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  75. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  76. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  77. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  78. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  79. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  80. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  81. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  82. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
  83. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  84. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  85. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  86. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  87. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  88. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  89. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
  90. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  91. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  92. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  93. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  94. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  95. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  96. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  97. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  98. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  99. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  100. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  101. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  102. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  103. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  104. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  105. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  106. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  107. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  108. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  109. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  110. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  111. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  112. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  113. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  114. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  115. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  116. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  117. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  118. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  119. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  120. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  121. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  122. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  123. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  124. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  125. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  126. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  127. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  128. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/__init__.py +0 -0
  129. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/addon.py +0 -0
  130. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/agent.py +0 -0
  131. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/ai.py +0 -0
  132. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/annotation.py +0 -0
  133. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/auth.py +0 -0
  134. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/automation.py +0 -0
  135. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/batch.py +0 -0
  136. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/billing.py +0 -0
  137. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/browse.py +0 -0
  138. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/capability.py +0 -0
  139. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/completion.py +0 -0
  140. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/config.py +0 -0
  141. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/connector.py +0 -0
  142. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/context.py +0 -0
  143. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/dashboard.py +0 -0
  144. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/data_app.py +0 -0
  145. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/external_key.py +0 -0
  146. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/file.py +0 -0
  147. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/job.py +0 -0
  148. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/link.py +0 -0
  149. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/notification.py +0 -0
  150. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/parameter.py +0 -0
  151. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/report.py +0 -0
  152. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/schedule.py +0 -0
  153. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/skill.py +0 -0
  154. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/snippet.py +0 -0
  155. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/template.py +0 -0
  156. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/trash.py +0 -0
  157. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/upgrade.py +0 -0
  158. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/user.py +0 -0
  159. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/commands/webhook.py +0 -0
  160. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/context/__init__.py +0 -0
  161. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/context/credentials.py +0 -0
  162. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/context/endpoint.py +0 -0
  163. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/context/profiles.py +0 -0
  164. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/context/resolver.py +0 -0
  165. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/contracts/__init__.py +0 -0
  166. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/contracts/auth.py +0 -0
  167. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/errors/__init__.py +0 -0
  168. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/manifest/__init__.py +0 -0
  169. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/manifest/loader.py +0 -0
  170. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/messages/__init__.py +0 -0
  171. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/output/__init__.py +0 -0
  172. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/output/envelope.py +0 -0
  173. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/output/policy.py +0 -0
  174. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/output/progress.py +0 -0
  175. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/output/render.py +0 -0
  176. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/py.typed +0 -0
  177. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/__init__.py +0 -0
  178. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/confirm.py +0 -0
  179. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/dataset_health.py +0 -0
  180. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  181. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/invocation.py +0 -0
  182. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/new_data.py +0 -0
  183. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/options.py +0 -0
  184. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/session.py +0 -0
  185. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/state.py +0 -0
  186. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/strict.py +0 -0
  187. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/updates.py +0 -0
  188. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/validate.py +0 -0
  189. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/runtime/verify.py +0 -0
  190. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/__init__.py +0 -0
  191. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/argspec.py +0 -0
  192. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/board_values.py +0 -0
  193. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/coerce.py +0 -0
  194. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/command_contract.py +0 -0
  195. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/conditions.py +0 -0
  196. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/dashboard_filters.py +0 -0
  197. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/dashboard_pages.py +0 -0
  198. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/dispatch.py +0 -0
  199. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/factory.py +0 -0
  200. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/openapi_types.py +0 -0
  201. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/protocol.py +0 -0
  202. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/read_queries.py +0 -0
  203. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/stored_stats.py +0 -0
  204. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/testing.py +0 -0
  205. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/type_system.py +0 -0
  206. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/services/write_impact.py +0 -0
  207. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/skills/__init__.py +0 -0
  208. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/skills/installer.py +0 -0
  209. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/skills/steering.py +0 -0
  210. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/mammoth_cli/testing.py +0 -0
  211. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/activity.yaml +0 -0
  212. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/addon.yaml +0 -0
  213. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/agent.yaml +0 -0
  214. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/ai.yaml +0 -0
  215. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/annotation.yaml +0 -0
  216. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/auth.yaml +0 -0
  217. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/automation.yaml +0 -0
  218. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/batch.yaml +0 -0
  219. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/billing.yaml +0 -0
  220. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/browse.yaml +0 -0
  221. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/calc.yaml +0 -0
  222. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/capability.yaml +0 -0
  223. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/client-app.yaml +0 -0
  224. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/completion.yaml +0 -0
  225. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/config.yaml +0 -0
  226. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/connector.yaml +0 -0
  227. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/context.yaml +0 -0
  228. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/data-app.yaml +0 -0
  229. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/doctor.yaml +0 -0
  230. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/external-key.yaml +0 -0
  231. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/file.yaml +0 -0
  232. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/folder.yaml +0 -0
  233. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/job.yaml +0 -0
  234. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/link.yaml +0 -0
  235. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/log.yaml +0 -0
  236. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/notification.yaml +0 -0
  237. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/parameter.yaml +0 -0
  238. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/report.yaml +0 -0
  239. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/schedule.yaml +0 -0
  240. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/schema.yaml +0 -0
  241. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/skill.yaml +0 -0
  242. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/snippet.yaml +0 -0
  243. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/template.yaml +0 -0
  244. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/trash.yaml +0 -0
  245. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/upgrade.yaml +0 -0
  246. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/user.yaml +0 -0
  247. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/version.yaml +0 -0
  248. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/view.yaml +0 -0
  249. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/commands/webhook.yaml +0 -0
  250. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/openapi-operations.yaml +0 -0
  251. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/manifests/schema-v1.json +0 -0
  252. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/spec/openapi/metadata.json +0 -0
  253. {mammoth_cli-2.2.7 → mammoth_cli-2.2.9}/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.7
3
+ Version: 2.2.9
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.8
20
+ Requires-Dist: mammoth-io<0.9,>=0.8.10
21
21
  Requires-Dist: platformdirs<5,>=4.10
22
22
  Requires-Dist: pydantic<3,>=2.12.5
23
23
  Requires-Dist: pyyaml<7,>=6
@@ -6,7 +6,7 @@ not implement a second HTTP client and does not call private SDK members.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "2.2.7"
9
+ __version__ = "2.2.9"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -457,6 +457,12 @@ class _EnvelopeGroup(TyperGroup):
457
457
  # classify an argv flag that is not a known global option;
458
458
  # a known option's malformed value remains usage_error.
459
459
  known, _valued = _global_option_flags()
460
+ command = getattr(getattr(error, "ctx", None), "command", None)
461
+ known = known | {
462
+ flag
463
+ for param in getattr(command, "params", [])
464
+ for flag in (*param.opts, *param.secondary_opts)
465
+ }
460
466
  option = next(
461
467
  (
462
468
  token.split("=", 1)[0]
@@ -1,7 +1,7 @@
1
1
  # What is proven on release
2
2
 
3
3
  Generated from `docs/release-capability-matrix.json`; do not edit by hand.
4
- The CLI publishes 612 commands. 455 of them bind one of the 528 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (`view transform *` commands submit through `view.task.add`, except `rename-columns` and `sort`, which set view display properties through `view.update`). 262 bound commands ran once successfully on release, 2 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer. Use an untried command normally: confirm a write with the user first, check its result with a read afterwards, and never refuse a command only because it is untried.
4
+ The CLI publishes 633 commands. 455 of them bind one of the 528 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (`view transform *` commands submit through `view.task.add`, except `rename-columns` and `sort`, which set view display properties through `view.update`). 262 bound commands ran once successfully on release, 2 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer. Use an untried command normally: confirm a write with the user first, check its result with a read afterwards, and never refuse a command only because it is untried.
5
5
 
6
6
  Status meanings:
7
7
 
@@ -1,6 +1,6 @@
1
1
  # Published CLI command catalog
2
2
 
3
- This generated catalog is a lookup table for every command in the published CLI manifest, currently 612; 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.
3
+ This generated catalog is a lookup table for every command in the published CLI manifest, currently 633; 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
 
@@ -41,7 +41,7 @@ Load only the applicable domain file:
41
41
  - [schema](commands/schema.md) — 3 published commands
42
42
  - [skill](commands/skill.md) — 7 published commands
43
43
  - [snippet](commands/snippet.md) — 8 published commands
44
- - [support](commands/support.md) — 45 published commands
44
+ - [support](commands/support.md) — 66 published commands
45
45
  - [template](commands/template.md) — 5 published commands
46
46
  - [trash](commands/trash.md) — 3 published commands
47
47
  - [upgrade](commands/upgrade.md) — 1 published commands
@@ -386,7 +386,7 @@ Status on release: untried; no live run recorded.
386
386
 
387
387
  Run: `mammoth dashboard format-preview`. Exact input fields: `mammoth schema get dashboard.format-preview`.
388
388
 
389
- Example: `mammoth dashboard format-preview 123 --input '{"style": "sample"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
389
+ Example: `mammoth dashboard format-preview 123 --input '{"style": "presentation"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
390
390
 
391
391
  Result: `DashboardFormatPreviewResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
392
392
 
@@ -26,7 +26,7 @@ Status on release: untried; no live run recorded.
26
26
 
27
27
  Run: `mammoth dataset broken-rows resolve`. Exact input fields: `mammoth schema get dataset.broken-rows.resolve`.
28
28
 
29
- Example: `mammoth dataset broken-rows resolve 123 --input '{"op": "add", "batch_id": 1, "rows": [{"sample_key": "Status"}]}'`. Illustrative only: append `--yes` after observing an owned target.
29
+ Example: `mammoth dataset broken-rows resolve 123 --input '{"op": "add", "batch_id": 1, "rows": [{"line_num": 2, "line": "corrected,line,here"}]}'`. Illustrative only: append `--yes` after observing an owned target.
30
30
 
31
31
  Result: `DatasetBrokenRowsResolveResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
32
32
 
@@ -6,9 +6,9 @@ Every command returns the standard JSON envelope. On nonzero exit, read the erro
6
6
 
7
7
  Run: `mammoth project bulk-delete`. Exact input fields: `mammoth schema get project.bulk-delete`.
8
8
 
9
- Example: `mammoth project bulk-delete --input '{"project_ids": [1]}'`. Illustrative only: append `--yes` after observing an owned target.
9
+ Example: `mammoth project bulk-delete --input '{"project_ids": [1]}'`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
10
10
 
11
- Result: `ProjectBulkDeleteResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
11
+ Result: `ProjectBulkDeleteResult`; mutation `destructive`, confirmation `confirm_target`, wait policy `not_async`.
12
12
 
13
13
  Status on release: ran once on CLI 2.0.14 — write sweep 2026-09-18: exit 0 on release with CLI 2.0.14. Created throwaway project 22 (cli-write-sweep-throwaway-20260918), then bulk-deleted it. Without --yes: confirmation_required. With --yes: data:{}. Verified via project list: only project 3 (protected…
14
14
 
@@ -262,6 +262,56 @@ Result: `SupportPlanSelfServeListResult`; mutation `read`, confirmation `none`,
262
262
 
263
263
  Status on release: ran once on CLI 2.0.15 — admin read sweep 2026-09-18: exit 0 on release with CLI 2.0.15. The CLI gates this GET behind --yes --confirm WORKSPACE_ID (confirm_target policy); with confirmation: exit 0; data.plans Single invocation only.
264
264
 
265
+ ### `support.plan.storage-option.archive`
266
+
267
+ Run: `mammoth support plan storage-option archive`. Exact input fields: `mammoth schema get support.plan.storage-option.archive`.
268
+
269
+ Example: `mammoth support plan storage-option archive 123 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
270
+
271
+ Result: `SupportPlanStorageOptionArchiveResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
272
+
273
+ Status on release: untried; no live run recorded.
274
+
275
+ ### `support.plan.storage-option.create`
276
+
277
+ Run: `mammoth support plan storage-option create`. Exact input fields: `mammoth schema get support.plan.storage-option.create`.
278
+
279
+ Example: `mammoth support plan storage-option create 123 --input '{"storage_gb": 1, "monthly_price": 1.0, "annual_price": 1.0}'`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
280
+
281
+ Result: `SupportPlanStorageOptionCreateResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
282
+
283
+ Status on release: untried; no live run recorded.
284
+
285
+ ### `support.plan.storage-option.list`
286
+
287
+ Run: `mammoth support plan storage-option list`. Exact input fields: `mammoth schema get support.plan.storage-option.list`.
288
+
289
+ Example: `mammoth support plan storage-option list 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
290
+
291
+ Result: `SupportPlanStorageOptionListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
292
+
293
+ Status on release: untried; no live run recorded.
294
+
295
+ ### `support.plan.storage-option.update`
296
+
297
+ Run: `mammoth support plan storage-option update`. Exact input fields: `mammoth schema get support.plan.storage-option.update`.
298
+
299
+ Example: `mammoth support plan storage-option update 123 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
300
+
301
+ Result: `SupportPlanStorageOptionUpdateResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
302
+
303
+ Status on release: untried; no live run recorded.
304
+
305
+ ### `support.plan.unarchive`
306
+
307
+ Run: `mammoth support plan unarchive`. Exact input fields: `mammoth schema get support.plan.unarchive`.
308
+
309
+ Example: `mammoth support plan unarchive 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
310
+
311
+ Result: `SupportPlanUnarchiveResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
312
+
313
+ Status on release: untried; no live run recorded.
314
+
265
315
  ### `support.plan.update`
266
316
 
267
317
  Run: `mammoth support plan update`. Exact input fields: `mammoth schema get support.plan.update`.
@@ -312,6 +362,166 @@ Result: `SupportSubscriptionUpdateResult`; mutation `high_impact`, confirmation
312
362
 
313
363
  Status on release: untried; no live run recorded.
314
364
 
365
+ ### `support.template.audit`
366
+
367
+ Run: `mammoth support template audit`. Exact input fields: `mammoth schema get support.template.audit`.
368
+
369
+ Example: `mammoth support template audit`. Placeholders are illustrative; resolve IDs and input from observed reads.
370
+
371
+ Result: `SupportTemplateAuditResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
372
+
373
+ Status on release: untried; no live run recorded.
374
+
375
+ ### `support.template.canvas`
376
+
377
+ Run: `mammoth support template canvas`. Exact input fields: `mammoth schema get support.template.canvas`.
378
+
379
+ Example: `mammoth support template canvas sample`. Placeholders are illustrative; resolve IDs and input from observed reads.
380
+
381
+ Result: `SupportTemplateCanvasResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
382
+
383
+ Status on release: untried; no live run recorded.
384
+
385
+ ### `support.template.data-preview`
386
+
387
+ Run: `mammoth support template data-preview`. Exact input fields: `mammoth schema get support.template.data-preview`.
388
+
389
+ Example: `mammoth support template data-preview sample`. Placeholders are illustrative; resolve IDs and input from observed reads.
390
+
391
+ Result: `SupportTemplateDataPreviewResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
392
+
393
+ Status on release: untried; no live run recorded.
394
+
395
+ ### `support.template.discard`
396
+
397
+ Run: `mammoth support template discard`. Exact input fields: `mammoth schema get support.template.discard`.
398
+
399
+ Example: `mammoth support template discard sample`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
400
+
401
+ Result: `SupportTemplateDiscardResult`; mutation `destructive`, confirmation `confirm_target`, wait policy `not_async`.
402
+
403
+ Status on release: untried; no live run recorded.
404
+
405
+ ### `support.template.edit`
406
+
407
+ Run: `mammoth support template edit`. Exact input fields: `mammoth schema get support.template.edit`.
408
+
409
+ Example: `mammoth support template edit sample --input '{"changes": {"sample_key": "Status"}}'`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
410
+
411
+ Result: `SupportTemplateEditResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
412
+
413
+ Status on release: untried; no live run recorded.
414
+
415
+ ### `support.template.export`
416
+
417
+ Run: `mammoth support template export`. Exact input fields: `mammoth schema get support.template.export`.
418
+
419
+ Example: `mammoth support template export sample`. Placeholders are illustrative; resolve IDs and input from observed reads.
420
+
421
+ Result: `SupportTemplateExportResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
422
+
423
+ Status on release: untried; no live run recorded.
424
+
425
+ ### `support.template.export-dashboard`
426
+
427
+ Run: `mammoth support template export-dashboard`. Exact input fields: `mammoth schema get support.template.export-dashboard`.
428
+
429
+ Example: `mammoth support template export-dashboard 123 --input '{"slug": "sample"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
430
+
431
+ Result: `SupportTemplateExportDashboardResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
432
+
433
+ Status on release: untried; no live run recorded.
434
+
435
+ ### `support.template.import`
436
+
437
+ Run: `mammoth support template import`. Exact input fields: `mammoth schema get support.template.import`.
438
+
439
+ Example: `mammoth support template import template.zip`. Illustrative only: append `--yes` after observing an owned target.
440
+
441
+ Result: `SupportTemplateImportResult`; mutation `high_impact`, confirmation `yes_always`, wait policy `not_async`.
442
+
443
+ Status on release: untried; no live run recorded.
444
+
445
+ ### `support.template.inspect`
446
+
447
+ Run: `mammoth support template inspect`. Exact input fields: `mammoth schema get support.template.inspect`.
448
+
449
+ Example: `mammoth support template inspect template.zip`. Placeholders are illustrative; resolve IDs and input from observed reads.
450
+
451
+ Result: `SupportTemplateInspectResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
452
+
453
+ Status on release: untried; no live run recorded.
454
+
455
+ ### `support.template.list`
456
+
457
+ Run: `mammoth support template list`. Exact input fields: `mammoth schema get support.template.list`.
458
+
459
+ Example: `mammoth support template list`. Placeholders are illustrative; resolve IDs and input from observed reads.
460
+
461
+ Result: `SupportTemplateListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
462
+
463
+ Status on release: untried; no live run recorded.
464
+
465
+ ### `support.template.publish`
466
+
467
+ Run: `mammoth support template publish`. Exact input fields: `mammoth schema get support.template.publish`.
468
+
469
+ Example: `mammoth support template publish sample`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
470
+
471
+ Result: `SupportTemplatePublishResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
472
+
473
+ Status on release: untried; no live run recorded.
474
+
475
+ ### `support.template.retire`
476
+
477
+ Run: `mammoth support template retire`. Exact input fields: `mammoth schema get support.template.retire`.
478
+
479
+ Example: `mammoth support template retire sample`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
480
+
481
+ Result: `SupportTemplateRetireResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
482
+
483
+ Status on release: untried; no live run recorded.
484
+
485
+ ### `support.template.snapshots`
486
+
487
+ Run: `mammoth support template snapshots`. Exact input fields: `mammoth schema get support.template.snapshots`.
488
+
489
+ Example: `mammoth support template snapshots`. Placeholders are illustrative; resolve IDs and input from observed reads.
490
+
491
+ Result: `SupportTemplateSnapshotsResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
492
+
493
+ Status on release: untried; no live run recorded.
494
+
495
+ ### `support.template.thumbnail.clear`
496
+
497
+ Run: `mammoth support template thumbnail clear`. Exact input fields: `mammoth schema get support.template.thumbnail.clear`.
498
+
499
+ Example: `mammoth support template thumbnail clear sample`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
500
+
501
+ Result: `SupportTemplateThumbnailClearResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
502
+
503
+ Status on release: untried; no live run recorded.
504
+
505
+ ### `support.template.thumbnail.set`
506
+
507
+ Run: `mammoth support template thumbnail set`. Exact input fields: `mammoth schema get support.template.thumbnail.set`.
508
+
509
+ Example: `mammoth support template thumbnail set sample card.png`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
510
+
511
+ Result: `SupportTemplateThumbnailSetResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
512
+
513
+ Status on release: untried; no live run recorded.
514
+
515
+ ### `support.template.unpublish`
516
+
517
+ Run: `mammoth support template unpublish`. Exact input fields: `mammoth schema get support.template.unpublish`.
518
+
519
+ Example: `mammoth support template unpublish sample`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
520
+
521
+ Result: `SupportTemplateUnpublishResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
522
+
523
+ Status on release: untried; no live run recorded.
524
+
315
525
  ### `support.user.list-all`
316
526
 
317
527
  Run: `mammoth support user list-all`. Exact input fields: `mammoth schema get support.user.list-all`.
@@ -16,9 +16,9 @@ Status on release: untried; no live run recorded.
16
16
 
17
17
  Run: `mammoth workflow block auth`. Exact input fields: `mammoth schema get workflow.block.auth`.
18
18
 
19
- Example: `mammoth workflow block auth 123 123 --input '{"auth_data": {"sample_key": "Status"}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
19
+ Example: `mammoth workflow block auth 123 123 --input '{"auth_data": {"sample_key": "Status"}}'`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
20
20
 
21
- Result: `WorkflowBlockAuthResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
21
+ Result: `WorkflowBlockAuthResult`; mutation `benign_mutation`, confirmation `confirm_target`, wait policy `not_async`.
22
22
 
23
23
  Status on release: untried; no live run recorded.
24
24
 
@@ -56,9 +56,9 @@ Status on release: untried; no live run recorded.
56
56
 
57
57
  Run: `mammoth workflow cleanup`. Exact input fields: `mammoth schema get workflow.cleanup`.
58
58
 
59
- Example: `mammoth workflow cleanup`. Placeholders are illustrative; resolve IDs and input from observed reads.
59
+ Example: `mammoth workflow cleanup`. Illustrative only: append `--yes` after observing an owned target.
60
60
 
61
- Result: `WorkflowCleanupResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
61
+ Result: `WorkflowCleanupResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
62
62
 
63
63
  Status on release: untried; no live run recorded.
64
64
 
@@ -258,8 +258,8 @@ Status on release: untried; no live run recorded.
258
258
 
259
259
  Run: `mammoth workspace user update-batch`. Exact input fields: `mammoth schema get workspace.user.update-batch`.
260
260
 
261
- Example: `mammoth workspace user update-batch --input '{"patches": [{"sample_key": "Status"}]}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
261
+ Example: `mammoth workspace user update-batch --input '{"patches": [{"sample_key": "Status"}]}'`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
262
262
 
263
- Result: `WorkspaceUserUpdateBatchResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
263
+ Result: `WorkspaceUserUpdateBatchResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
264
264
 
265
265
  Status on release: untried; no live run recorded.
@@ -12,6 +12,7 @@ public SDK method named by the command's reviewed manifest ``sdk_symbol``.
12
12
  from __future__ import annotations
13
13
 
14
14
  import json
15
+ import shlex
15
16
  from datetime import UTC, datetime
16
17
  from typing import Any
17
18
 
@@ -136,7 +137,9 @@ def _refuse_bare_resource_id(document: dict[str, Any]) -> None:
136
137
  f" keys each resource by its type — {forms}."
137
138
  ),
138
139
  exit_status=EXIT_USAGE,
139
- recovery_commands=[f"mammoth activity list --input '{retry}'" for retry in retries],
140
+ recovery_commands=[
141
+ f"mammoth activity list --input {shlex.quote(retry)}" for retry in retries
142
+ ],
140
143
  )
141
144
 
142
145
 
@@ -205,8 +208,10 @@ def _user_emails(service: Any) -> dict[Any, str]:
205
208
 
206
209
  def _change(entry: dict[str, Any], emails: dict[Any, str]) -> dict[str, Any]:
207
210
  """One log entry as a line of a change list: when, who, what, on which object."""
208
- details = entry.get("details") if isinstance(entry.get("details"), dict) else {}
209
- primary = entry.get("primary_object") if isinstance(entry.get("primary_object"), dict) else {}
211
+ raw_details = entry.get("details")
212
+ details: dict[str, Any] = raw_details if isinstance(raw_details, dict) else {}
213
+ raw_primary = entry.get("primary_object")
214
+ primary: dict[str, Any] = raw_primary if isinstance(raw_primary, dict) else {}
210
215
  user_id = entry.get("user_id")
211
216
  change = {
212
217
  "when": _local_time(entry.get("created_at")),
@@ -18,7 +18,13 @@ from __future__ import annotations
18
18
  import ast
19
19
  import re
20
20
  from collections.abc import Callable
21
- from decimal import ROUND_HALF_UP, Decimal, DivisionByZero, InvalidOperation
21
+ from decimal import (
22
+ ROUND_HALF_UP,
23
+ Decimal,
24
+ DivisionByZero,
25
+ InvalidOperation,
26
+ localcontext,
27
+ )
22
28
  from typing import Any
23
29
 
24
30
  from mammoth_cli.errors.envelope import CODE_INVALID_ARGUMENT, EXIT_USAGE, CliError
@@ -30,6 +36,9 @@ HandlerResult = tuple[Any, dict[str, Any]]
30
36
  #: valid Python expression syntax on its own.
31
37
  _PERCENT_RE = re.compile(r"(\d+(?:\.\d+)?)\s*%")
32
38
 
39
+ #: Significant digits kept in a result (Python's default is 28).
40
+ _PRECISION = 60
41
+
33
42
  _BINOPS: dict[type, Callable[[Decimal, Decimal], Decimal]] = {
34
43
  ast.Add: lambda a, b: a + b,
35
44
  ast.Sub: lambda a, b: a - b,
@@ -48,18 +57,26 @@ def _unsupported(expression: str) -> CliError:
48
57
  )
49
58
 
50
59
 
51
- def _evaluate(node: ast.AST, expression: str) -> Decimal:
60
+ def _literal(node: ast.Constant, source: str) -> Decimal:
61
+ """The number as written: going through a float would round away digits past 17."""
62
+ try:
63
+ return Decimal(ast.get_source_segment(source, node) or "")
64
+ except InvalidOperation:
65
+ return Decimal(str(node.value))
66
+
67
+
68
+ def _evaluate(node: ast.AST, expression: str, source: str) -> Decimal:
52
69
  if isinstance(node, ast.Expression):
53
- return _evaluate(node.body, expression)
70
+ return _evaluate(node.body, expression, source)
54
71
  if (
55
72
  isinstance(node, ast.Constant)
56
73
  and isinstance(node.value, (int, float))
57
74
  and not isinstance(node.value, bool)
58
75
  ):
59
- return Decimal(str(node.value))
76
+ return _literal(node, source)
60
77
  if isinstance(node, ast.BinOp) and type(node.op) in _BINOPS:
61
- left = _evaluate(node.left, expression)
62
- right = _evaluate(node.right, expression)
78
+ left = _evaluate(node.left, expression, source)
79
+ right = _evaluate(node.right, expression, source)
63
80
  try:
64
81
  return _BINOPS[type(node.op)](left, right)
65
82
  except (InvalidOperation, DivisionByZero, ZeroDivisionError) as exc:
@@ -69,7 +86,7 @@ def _evaluate(node: ast.AST, expression: str) -> Decimal:
69
86
  exit_status=EXIT_USAGE,
70
87
  ) from exc
71
88
  if isinstance(node, ast.UnaryOp) and isinstance(node.op, (ast.UAdd, ast.USub)):
72
- value = _evaluate(node.operand, expression)
89
+ value = _evaluate(node.operand, expression, source)
73
90
  return value if isinstance(node.op, ast.UAdd) else -value
74
91
  if (
75
92
  isinstance(node, ast.Call)
@@ -78,7 +95,7 @@ def _evaluate(node: ast.AST, expression: str) -> Decimal:
78
95
  and not node.keywords
79
96
  and 1 <= len(node.args) <= 2
80
97
  ):
81
- value = _evaluate(node.args[0], expression)
98
+ value = _evaluate(node.args[0], expression, source)
82
99
  ndigits = 0
83
100
  if len(node.args) == 2:
84
101
  digits_node = node.args[1]
@@ -90,7 +107,14 @@ def _evaluate(node: ast.AST, expression: str) -> Decimal:
90
107
  raise _unsupported(expression)
91
108
  ndigits = digits_node.value
92
109
  quantum = Decimal(1).scaleb(-ndigits)
93
- return value.quantize(quantum, rounding=ROUND_HALF_UP)
110
+ try:
111
+ return value.quantize(quantum, rounding=ROUND_HALF_UP)
112
+ except InvalidOperation as exc:
113
+ raise CliError(
114
+ code=CODE_INVALID_ARGUMENT,
115
+ message=f"round() digits out of range in {expression!r}.",
116
+ exit_status=EXIT_USAGE,
117
+ ) from exc
94
118
  raise _unsupported(expression)
95
119
 
96
120
 
@@ -120,5 +144,8 @@ def calc(invocation: Invocation) -> HandlerResult:
120
144
  hint="calc supports + - * / and parentheses, unary +/-, a trailing "
121
145
  "'%' (divides by 100), and round(x[, ndigits]).",
122
146
  ) from exc
123
- result = _evaluate(tree, expression)
147
+ source = normalized
148
+ with localcontext() as context:
149
+ context.prec = _PRECISION
150
+ result = _evaluate(tree, expression, source)
124
151
  return {"expression": expression, "result": str(result)}, {}
@@ -27,6 +27,7 @@ from mammoth_cli.errors.envelope import (
27
27
  CliError,
28
28
  )
29
29
  from mammoth_cli.manifest.loader import command_by_id
30
+ from mammoth_cli.output.normalize import Revealed, normalize
30
31
  from mammoth_cli.runtime.confirm import (
31
32
  POLICY_CONFIRM_TARGET,
32
33
  POLICY_PROMPT_OR_YES,
@@ -210,6 +211,8 @@ def client_app_create(invocation: Invocation) -> HandlerResult:
210
211
  _forward_optional(document, kwargs, ("description",))
211
212
  with open_service(invocation) as (service, auth):
212
213
  data = service.call(_symbol(invocation), **kwargs)
214
+ # The API shows the new app's token once; masking it would lose it for good.
215
+ data = Revealed(normalize(data, redact_secrets=False))
213
216
  return data, _meta(invocation, auth.workspace_id, resolved_project(invocation))
214
217
 
215
218
 
@@ -149,19 +149,38 @@ def _visible_projects(service: Any) -> list[dict[str, Any]]:
149
149
 
150
150
 
151
151
  def _find_in_projects(
152
- service: Any, needle: str, projects: list[dict[str, Any]]
152
+ service: Any,
153
+ needle: str,
154
+ projects: list[dict[str, Any]],
155
+ skipped: list[dict[str, Any]] | None = None,
153
156
  ) -> list[dict[str, Any]]:
154
- """Datasets whose name contains ``needle`` (case-insensitive), in each of ``projects``."""
157
+ """Datasets whose name contains ``needle`` (case-insensitive), in each of ``projects``.
158
+
159
+ A project that cannot be read does not end the search: with ``skipped`` it is
160
+ recorded there (id, name, why) and the rest are still searched.
161
+ """
155
162
  matches: list[dict[str, Any]] = []
156
163
  for project in projects:
157
164
  project_id = project.get("id")
158
165
  if project_id is None:
159
166
  continue
160
- response = service.call(
161
- "mammoth.api.datasets.DatasetsAPI.list_all",
162
- project_id=project_id,
163
- fields=DATASET_ROW_FIELDS,
164
- )
167
+ try:
168
+ response = service.call(
169
+ "mammoth.api.datasets.DatasetsAPI.list_all",
170
+ project_id=project_id,
171
+ fields=DATASET_ROW_FIELDS,
172
+ )
173
+ except CliError as error:
174
+ if skipped is None:
175
+ raise
176
+ skipped.append(
177
+ {
178
+ "project_id": project_id,
179
+ "project_name": project.get("name"),
180
+ "error": error.message,
181
+ }
182
+ )
183
+ continue
165
184
  datasets = response.get("datasets", []) if isinstance(response, dict) else []
166
185
  for dataset in datasets:
167
186
  name = dataset.get("name") if isinstance(dataset, dict) else None
@@ -210,18 +229,19 @@ def dataset_find(invocation: Invocation) -> HandlerResult:
210
229
  """
211
230
  name_substring = _require_string_positional(invocation, "name substring")
212
231
  needle = name_substring.lower()
232
+ skipped: list[dict[str, Any]] = []
213
233
  with open_service(invocation) as (service, auth):
214
234
  visible = _visible_projects(service)
215
235
  if invocation.project is not None:
216
236
  projects: list[dict[str, Any]] = [named_project(service, invocation.project, visible)]
217
- matches = _find_in_projects(service, needle, projects)
237
+ matches = _find_in_projects(service, needle, projects, skipped)
218
238
  if not matches:
219
239
  others = _other_projects(visible, invocation.project)
220
- matches = _find_in_projects(service, needle, others)
240
+ matches = _find_in_projects(service, needle, others, skipped)
221
241
  projects += others
222
242
  else:
223
243
  projects = visible
224
- matches = _find_in_projects(service, needle, projects)
244
+ matches = _find_in_projects(service, needle, projects, skipped)
225
245
  meta = {
226
246
  "profile": invocation.profile,
227
247
  "workspace_id": auth.workspace_id,
@@ -229,8 +249,10 @@ def dataset_find(invocation: Invocation) -> HandlerResult:
229
249
  }
230
250
  result: dict[str, Any] = {
231
251
  "matches": matches,
232
- "projects_searched": len(projects),
252
+ "projects_searched": len(projects) - len(skipped),
233
253
  }
254
+ if skipped:
255
+ result["projects_skipped"] = skipped
234
256
  if note := ambiguity_note(len(matches), name_substring):
235
257
  result["note"] = note
236
258
  return result, meta
@@ -133,9 +133,8 @@ _PROJECT_LIMIT = 20
133
133
 
134
134
  def _visible_projects(service: Any) -> list[dict[str, Any]]:
135
135
  """Return the projects this credential can list, or an empty list."""
136
- response = service.list_projects(limit=_PROJECT_LIMIT + 1)
137
- projects = response.get("projects", []) if isinstance(response, dict) else []
138
- return [p for p in projects if isinstance(p, dict)]
136
+ # Every page: "is the selected project visible" must not stop at the first few.
137
+ return [p for p in service.list_all_projects() if isinstance(p, dict)]
139
138
 
140
139
 
141
140
  def _nearest_existing(path: Path) -> Path:
@@ -126,12 +126,7 @@ def folder_find(invocation: Invocation) -> HandlerResult:
126
126
  if project_id is None:
127
127
  continue
128
128
  project_name = project.get("name")
129
- # FoldersAPI.list caps at 100 per page and has no list_all; request
130
- # the maximum so a project's folders are not silently truncated.
131
- response = service.call(
132
- "mammoth.api.folders.FoldersAPI.list", project_id=project_id, limit=100
133
- )
134
- for folder in _folders_of(response):
129
+ for folder in _project_folders(service, project_id):
135
130
  name = folder.get("name") if isinstance(folder, dict) else None
136
131
  if isinstance(name, str) and needle in name.lower():
137
132
  matches.append(