mammoth-cli 2.2.98__tar.gz → 2.2.100__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 (341) hide show
  1. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/PKG-INFO +2 -2
  2. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/app.py +9 -7
  4. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +3 -4
  5. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/doctor.py +40 -1
  6. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/registry.py +11 -2
  7. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/schema.py +56 -3
  8. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/_common.py +39 -1
  9. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/data_read.py +2 -31
  10. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/compact.py +29 -0
  11. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/strict.py +4 -4
  12. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/pyproject.toml +2 -2
  13. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/view.yaml +10 -12
  14. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/compiled/commands.json +3 -3
  15. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/.gitignore +0 -0
  16. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/LICENSE +0 -0
  17. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/README.md +0 -0
  18. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/__main__.py +0 -0
  19. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  20. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  21. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  22. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  23. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  24. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  25. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  26. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  27. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  28. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  29. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  30. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  31. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  32. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  33. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  34. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  35. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capabilities.md +0 -0
  36. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  37. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  38. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/collection.md +0 -0
  39. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  40. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  41. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  42. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  43. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-embed.md +0 -0
  44. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-published.md +0 -0
  45. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  46. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
  47. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
  48. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  49. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  50. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  51. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  52. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  53. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  54. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/how.md +0 -0
  55. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  56. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
  57. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  58. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  59. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  60. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  61. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  62. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
  63. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/run.md +0 -0
  64. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  65. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  66. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  67. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  68. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  69. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  70. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
  71. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  72. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  73. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  74. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  75. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  76. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  77. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  78. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  79. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  80. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  81. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  82. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  83. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  84. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  85. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  86. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  87. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  88. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  89. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  90. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  91. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
  92. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  93. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  94. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  95. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/rest-api-import.md +0 -0
  96. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  97. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  98. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  99. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  100. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  101. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  102. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  103. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  104. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/__init__.py +0 -0
  105. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/_lazy.py +0 -0
  106. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/activity.py +0 -0
  107. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/addon.py +0 -0
  108. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/agent.py +0 -0
  109. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/ai.py +0 -0
  110. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/annotation.py +0 -0
  111. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/auth.py +0 -0
  112. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/automation.py +0 -0
  113. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/batch.py +0 -0
  114. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/billing.py +0 -0
  115. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/browse.py +0 -0
  116. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/calc.py +0 -0
  117. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/capabilities.py +0 -0
  118. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/capability.py +0 -0
  119. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/client_app.py +0 -0
  120. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/completion.py +0 -0
  121. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/config.py +0 -0
  122. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/connector.py +0 -0
  123. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/context.py +0 -0
  124. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/dashboard.py +0 -0
  125. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/dataset.py +0 -0
  126. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/external_key.py +0 -0
  127. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/file.py +0 -0
  128. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/folder.py +0 -0
  129. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/help_summaries.json +0 -0
  130. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/how.py +0 -0
  131. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/job.py +0 -0
  132. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/link.py +0 -0
  133. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/notification.py +0 -0
  134. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/parameter.py +0 -0
  135. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/project.py +0 -0
  136. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/report.py +0 -0
  137. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/resolve.py +0 -0
  138. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/run.py +0 -0
  139. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/schedule.py +0 -0
  140. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/skill.py +0 -0
  141. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/snippet.py +0 -0
  142. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/support.py +0 -0
  143. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/template.py +0 -0
  144. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/trash.py +0 -0
  145. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/upgrade.py +0 -0
  146. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/user.py +0 -0
  147. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/__init__.py +0 -0
  148. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/aggregate.py +0 -0
  149. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/checks.py +0 -0
  150. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/column_checks.py +0 -0
  151. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/columns.py +0 -0
  152. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/derivatives.py +0 -0
  153. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/explore.py +0 -0
  154. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/export.py +0 -0
  155. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/export_dataset.py +0 -0
  156. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/export_specialized.py +0 -0
  157. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/formatting.py +0 -0
  158. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/join_check.py +0 -0
  159. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/lifecycle.py +0 -0
  160. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/listing.py +0 -0
  161. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/pipeline.py +0 -0
  162. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/settle.py +0 -0
  163. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view/upload.py +0 -0
  164. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_drivers.py +0 -0
  165. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_explore.py +0 -0
  166. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_forecast.py +0 -0
  167. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_ops.py +0 -0
  168. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/view_profile.py +0 -0
  169. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/webhook.py +0 -0
  170. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/workflow.py +0 -0
  171. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/commands/workspace.py +0 -0
  172. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/__init__.py +0 -0
  173. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/credentials.py +0 -0
  174. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/endpoint.py +0 -0
  175. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/keyring_backend.py +0 -0
  176. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/oauth.py +0 -0
  177. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/oauth_loopback.py +0 -0
  178. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/profiles.py +0 -0
  179. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/context/resolver.py +0 -0
  180. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/contracts/__init__.py +0 -0
  181. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/contracts/auth.py +0 -0
  182. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/discovery/__init__.py +0 -0
  183. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/discovery/limitations.json +0 -0
  184. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/discovery/next_commands.json +0 -0
  185. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/discovery/recipes.json +0 -0
  186. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/embed.py +0 -0
  187. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/errors/__init__.py +0 -0
  188. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/errors/envelope.py +0 -0
  189. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/manifest/__init__.py +0 -0
  190. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/manifest/loader.py +0 -0
  191. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/messages/__init__.py +0 -0
  192. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/__init__.py +0 -0
  193. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/envelope.py +0 -0
  194. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/normalize.py +0 -0
  195. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/policy.py +0 -0
  196. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/progress.py +0 -0
  197. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/output/render.py +0 -0
  198. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/py.typed +0 -0
  199. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/__init__.py +0 -0
  200. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/confirm.py +0 -0
  201. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/dataset_health.py +0 -0
  202. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/dryrun.py +0 -0
  203. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  204. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/embed_pool.py +0 -0
  205. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/embedded.py +0 -0
  206. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/executor.py +0 -0
  207. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/input_loader.py +0 -0
  208. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/intent_only.py +0 -0
  209. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/invocation.py +0 -0
  210. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/labels.py +0 -0
  211. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/linecapture.py +0 -0
  212. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/local_paths.py +0 -0
  213. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/locked_files.py +0 -0
  214. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/new_data.py +0 -0
  215. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/next_commands.py +0 -0
  216. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/opens.py +0 -0
  217. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/options.py +0 -0
  218. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/parents.py +0 -0
  219. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/reveal.py +0 -0
  220. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/runlog.py +0 -0
  221. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/session.py +0 -0
  222. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/shared.py +0 -0
  223. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/state.py +0 -0
  224. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/token_scope.py +0 -0
  225. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/updates.py +0 -0
  226. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/validate.py +0 -0
  227. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/verify.py +0 -0
  228. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/runtime/view_dataset_cache.py +0 -0
  229. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/__init__.py +0 -0
  230. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/append_blank_columns.py +0 -0
  231. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/argspec.py +0 -0
  232. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/board_values.py +0 -0
  233. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/coerce.py +0 -0
  234. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/column_type_guard.py +0 -0
  235. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/command_contract.py +0 -0
  236. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/conditional_format.py +0 -0
  237. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/conditions.py +0 -0
  238. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dashboard_figures.py +0 -0
  239. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dashboard_filters.py +0 -0
  240. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dashboard_pages.py +0 -0
  241. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dashboard_review.py +0 -0
  242. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/data_profile.py +0 -0
  243. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/data_quality.py +0 -0
  244. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/delete_check.py +0 -0
  245. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/dispatch.py +0 -0
  246. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/explore_card_edit.py +0 -0
  247. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/explore_cards.py +0 -0
  248. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/explore_to_figure.py +0 -0
  249. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/explore_to_image.py +0 -0
  250. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/factory.py +0 -0
  251. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/field_enums.py +0 -0
  252. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/folder_ids.py +0 -0
  253. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/held_change.py +0 -0
  254. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/input_fields.py +0 -0
  255. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/job_outcome.py +0 -0
  256. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/listing.py +0 -0
  257. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/local_files.py +0 -0
  258. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/local_time.py +0 -0
  259. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/mapping.py +0 -0
  260. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/openapi_types.py +0 -0
  261. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/paging.py +0 -0
  262. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/period_analysis.py +0 -0
  263. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/poll.py +0 -0
  264. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/positionals.py +0 -0
  265. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/protocol.py +0 -0
  266. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/read_memo.py +0 -0
  267. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/read_queries.py +0 -0
  268. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/schema_diff.py +0 -0
  269. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/sdk_service.py +0 -0
  270. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/sql_check.py +0 -0
  271. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/stored_stats.py +0 -0
  272. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/suggest.py +0 -0
  273. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/testing.py +0 -0
  274. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/text_dates.py +0 -0
  275. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/type_system.py +0 -0
  276. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/view_analysis.py +0 -0
  277. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/view_variants.py +0 -0
  278. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/services/write_impact.py +0 -0
  279. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/skills/__init__.py +0 -0
  280. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/skills/installer.py +0 -0
  281. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/skills/steering.py +0 -0
  282. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/mammoth_cli/testing.py +0 -0
  283. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/activity.yaml +0 -0
  284. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/addon.yaml +0 -0
  285. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/agent.yaml +0 -0
  286. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/ai.yaml +0 -0
  287. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/annotation.yaml +0 -0
  288. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/auth.yaml +0 -0
  289. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/automation.yaml +0 -0
  290. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/batch.yaml +0 -0
  291. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/billing.yaml +0 -0
  292. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/browse.yaml +0 -0
  293. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/calc.yaml +0 -0
  294. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/capabilities.yaml +0 -0
  295. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/capability.yaml +0 -0
  296. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/client-app.yaml +0 -0
  297. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/collection.yaml +0 -0
  298. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/completion.yaml +0 -0
  299. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/config.yaml +0 -0
  300. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/connector.yaml +0 -0
  301. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/context.yaml +0 -0
  302. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/dashboard.yaml +0 -0
  303. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/dataset.yaml +0 -0
  304. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/doctor.yaml +0 -0
  305. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/external-key.yaml +0 -0
  306. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/file.yaml +0 -0
  307. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/folder.yaml +0 -0
  308. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/how.yaml +0 -0
  309. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/job.yaml +0 -0
  310. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/link.yaml +0 -0
  311. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/log.yaml +0 -0
  312. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/notification.yaml +0 -0
  313. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/parameter.yaml +0 -0
  314. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/project.yaml +0 -0
  315. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/report.yaml +0 -0
  316. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/resolve.yaml +0 -0
  317. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/run.yaml +0 -0
  318. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/schedule.yaml +0 -0
  319. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/schema.yaml +0 -0
  320. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/skill.yaml +0 -0
  321. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/snippet.yaml +0 -0
  322. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/support.yaml +0 -0
  323. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/template.yaml +0 -0
  324. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/token.yaml +0 -0
  325. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/trash.yaml +0 -0
  326. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/upgrade.yaml +0 -0
  327. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/user.yaml +0 -0
  328. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/version.yaml +0 -0
  329. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/webhook.yaml +0 -0
  330. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/workflow.yaml +0 -0
  331. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/commands/workspace.yaml +0 -0
  332. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/compiled/openapi-operations.json +0 -0
  333. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/compiled/sdk-methods.json +0 -0
  334. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/edits-target.source.yaml +0 -0
  335. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/openapi-operations.yaml +0 -0
  336. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/schema-v1.json +0 -0
  337. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/sdk-catalog.source.yaml +0 -0
  338. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/sdk-methods.yaml +0 -0
  339. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/manifests/server-status.json +0 -0
  340. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/spec/openapi/metadata.json +0 -0
  341. {mammoth_cli-2.2.98 → mammoth_cli-2.2.100}/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.98
3
+ Version: 2.2.100
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
@@ -19,7 +19,7 @@ Requires-Python: <3.15,>=3.12
19
19
  Requires-Dist: certifi>=2026.10.19
20
20
  Requires-Dist: jsonschema>=4.20
21
21
  Requires-Dist: keyring<26,>=25.7
22
- Requires-Dist: mammoth-io<0.9,>=0.8.50
22
+ Requires-Dist: mammoth-io<0.9,>=0.8.51
23
23
  Requires-Dist: platformdirs<5,>=4.10
24
24
  Requires-Dist: pydantic<3,>=2.12.5
25
25
  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.98"
9
+ __version__ = "2.2.100"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -1201,7 +1201,7 @@ def _execute(invocation: Invocation) -> None:
1201
1201
  # resolving the mutable selected-profile pointer after an interrupt.
1202
1202
  from mammoth_cli.context import profiles
1203
1203
  from mammoth_cli.runtime import executor, validate
1204
- from mammoth_cli.runtime.compact import COMPACT_COMMANDS, FULL_FLAG, with_compact
1204
+ from mammoth_cli.runtime.compact import FULL_FLAG, FULL_FLAG_COMMANDS, with_compact
1205
1205
  from mammoth_cli.runtime.confirm import refuse_mismatched_confirm
1206
1206
  from mammoth_cli.runtime.dataset_health import with_dataset_health
1207
1207
  from mammoth_cli.runtime.intent_only import refuse_hand_crafted_write
@@ -1214,7 +1214,7 @@ def _execute(invocation: Invocation) -> None:
1214
1214
 
1215
1215
  if invocation.profile is None:
1216
1216
  invocation = replace(invocation, profile=profiles.get_selected(), profile_is_default=True)
1217
- if invocation.command_id in COMPACT_COMMANDS and FULL_FLAG in invocation.extra_args:
1217
+ if invocation.command_id in FULL_FLAG_COMMANDS and FULL_FLAG in invocation.extra_args:
1218
1218
  invocation = replace(
1219
1219
  invocation,
1220
1220
  extra_args=[arg for arg in invocation.extra_args if arg != FULL_FLAG],
@@ -1508,8 +1508,12 @@ def _command_help(command_id: str, record: dict[str, Any] | None) -> str | None:
1508
1508
  nested = nested_choices_help(command_id)
1509
1509
  if nested:
1510
1510
  parts.append(nested)
1511
- from mammoth_cli.runtime.compact import COMPACT_COMMANDS, FULL_FLAG
1511
+ from mammoth_cli.runtime.compact import COMPACT_COMMANDS, FULL_FLAG, TRIMMED_READ_COMMANDS
1512
1512
 
1513
+ if command_id in TRIMMED_READ_COMMANDS:
1514
+ parts.append(
1515
+ f"The result leaves out detail you rarely need. Pass {FULL_FLAG} for all of it."
1516
+ )
1513
1517
  if command_id in COMPACT_COMMANDS:
1514
1518
  parts.append(
1515
1519
  "The result is compact: ids, checks, verify and a canvas summary. "
@@ -1794,12 +1798,10 @@ def _load_top_level_group(name: str) -> Any:
1794
1798
  # table to :func:`_command_help` so it cannot drift.
1795
1799
  _ROOT_LEAF_HELP: dict[str, str] = {
1796
1800
  "capabilities": (
1797
- "List what the CLI cannot do yet, and what to do instead."
1798
- "\n\nExample: mammoth capabilities"
1801
+ "List what the CLI cannot do yet, and what to do instead.\n\nExample: mammoth capabilities"
1799
1802
  ),
1800
1803
  "calc": (
1801
- "Evaluate one arithmetic expression exactly."
1802
- "\n\nExample: mammoth calc '2063664 - 1917815'"
1804
+ "Evaluate one arithmetic expression exactly.\n\nExample: mammoth calc '2063664 - 1917815'"
1803
1805
  ),
1804
1806
  "doctor": (
1805
1807
  "Run environment and connectivity diagnostics."
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mammoth-cli
3
- version: 2.2.98
3
+ version: 2.2.100
4
4
  description: "Use Mammoth Analytics from a terminal: install or authenticate the CLI, discover its live command contract, and safely manage projects, data, views, pipelines (join, merge, pivot, filter, clean), dashboards, exports, and handoffs."
5
5
  ---
6
6
 
@@ -92,8 +92,7 @@ mammoth schema find "join two datasets; remove duplicates; build a dashboard"
92
92
  | Deliver the rows | `view export csv`, `view export postgres`, `view export dataset` |
93
93
  | Run something on a schedule or on new data (refresh, append, alert) | `automation create`: a condition (`at_specific_time`, new file in a folder, ...) and tasks (`run_data_retrieval`, `append_data`, `send_an_alert`, `pull_cloud_files`). `schedule create` only pulls a connector's data. An upload can't refresh; a URL dataset: `dataset refresh` on demand, never on a schedule; say so. Recipe: [recurring work](references/recipes/scheduling.md) |
94
94
 
95
- Call a find result (or `suggestions` entry) from its `accepted_fields` and
96
- `agent_example`. Before concluding the CLI cannot do something the web app
95
+ Call a find result from its `agent_example` and `accepted_fields`. Before concluding the CLI cannot do something the web app
97
96
  does, run `mammoth capabilities` (known gaps) and check
98
97
  `view transform --help` and "View settings, and what has no
99
98
  command" in [about Mammoth](references/about-mammoth.md). Do not switch to
@@ -142,7 +141,7 @@ your report. If no column links the files, ask before you combine them.
142
141
  - Ids are positionals; request fields are one `--input '{...}'` document;
143
142
  no per-field flags (`project create NAME`, not `--name`).
144
143
  - `COMMAND --help` lists input fields and allowed values; `schema find WORDS` inlines
145
- `accepted_fields`/`agent_example` for top matches, else `schema get
144
+ `accepted_fields`/`agent_example` for top matches (`--full`: all), else `schema get
146
145
  ID,ID` (one call; `--input '{"full": true}'` for all
147
146
  fields); `schema list`/`schema list view` list families.
148
147
  - Uploads return a **dataset** id; transforms, joins, exports and previews
@@ -18,9 +18,13 @@ from pathlib import Path
18
18
  from typing import Any, cast
19
19
  from urllib.parse import urlsplit
20
20
 
21
+ from mammoth.client import server_health
22
+ from mammoth.exceptions import MammothAPIError
23
+
21
24
  from mammoth_cli import __version__
22
25
  from mammoth_cli.context import credentials, profiles
23
- from mammoth_cli.context.resolver import ResolvedAuth, resolve_auth
26
+ from mammoth_cli.context.endpoint import resolve_base_url
27
+ from mammoth_cli.context.resolver import SERVER_PREFIX_ENV, ResolvedAuth, resolve_auth
24
28
  from mammoth_cli.errors.envelope import CliError
25
29
  from mammoth_cli.runtime import embedded, runlog, updates
26
30
  from mammoth_cli.runtime.invocation import Invocation
@@ -41,6 +45,34 @@ def _check(name: str, ok: bool, detail: str) -> dict[str, Any]:
41
45
  return {"name": name, "ok": ok, "detail": detail}
42
46
 
43
47
 
48
+ _SERVER_TIMEOUT_SECONDS = 10.0
49
+
50
+
51
+ def _server_base_url(profile_name: str, resolved: str | None) -> str:
52
+ """The API base url to probe: the resolved one, else from env or profile, no login needed."""
53
+ if resolved is not None:
54
+ return resolved
55
+ prefix = os.environ.get(SERVER_PREFIX_ENV, "").strip() or None
56
+ if prefix is None:
57
+ record = profiles.get_profile(profile_name)
58
+ prefix = record.server_prefix if record is not None else None
59
+ return resolve_base_url(prefix)
60
+
61
+
62
+ def _check_server(base_url: str, timeout: float = _SERVER_TIMEOUT_SECONDS) -> dict[str, Any]:
63
+ """Probe the public ``/health`` route (no credentials) and report status and latency."""
64
+ try:
65
+ health = server_health(base_url, timeout)
66
+ except MammothAPIError as error:
67
+ return _check("server", False, str(error))
68
+ status = health["status_code"]
69
+ ok = 200 <= status < 300
70
+ detail = (
71
+ f"healthy in {health['latency_ms']} ms" if ok else f"HTTP {status} from {base_url}/health"
72
+ )
73
+ return {**_check("server", ok, detail), **health}
74
+
75
+
44
76
  def _check_not_applicable(name: str) -> dict[str, Any]:
45
77
  """A check that has no meaning in an embedded call; it never fails doctor."""
46
78
  return {
@@ -326,6 +358,13 @@ def doctor(invocation: Invocation) -> HandlerResult:
326
358
  endpoint_detail = error.code
327
359
  auth_error_code = error.code
328
360
  checks.append(_check("endpoint", auth_ok, endpoint_detail))
361
+ try:
362
+ server_check = _check_server(
363
+ _server_base_url(profile_name, endpoint_detail if auth_ok else None)
364
+ )
365
+ except CliError as error:
366
+ server_check = _check("server", False, f"no server to probe: {error.code}")
367
+ checks.append(server_check)
329
368
 
330
369
  connection_ok = False
331
370
  connection_detail = "not attempted"
@@ -205,11 +205,19 @@ def _cap_inline_detail(result: dict[str, Any], keep: int) -> None:
205
205
  entry.pop("agent_example", None)
206
206
 
207
207
 
208
+ def _find_output(result: dict[str, Any], invocation: Invocation) -> dict[str, Any]:
209
+ """*result* cut to what picks and calls a command, unless ``--full``."""
210
+ from mammoth_cli.commands import schema as schema_cmd
211
+
212
+ return result if invocation.full_output else schema_cmd.trim_find_result(result)
213
+
214
+
208
215
  def _schema_find(invocation: Invocation) -> HandlerResult:
209
216
  from mammoth_cli.commands import schema as schema_cmd
217
+ from mammoth_cli.runtime.compact import FULL_FLAG
210
218
  from mammoth_cli.runtime.strict import COMMAND_FLAGS
211
219
 
212
- flags = COMMAND_FLAGS["schema.find"]
220
+ flags = COMMAND_FLAGS["schema.find"] - {FULL_FLAG}
213
221
  words = [str(invocation.bound_input().get("query") or ""), *map(str, invocation.extra_args)]
214
222
  if any(word in flags for word in words):
215
223
  # 'schema find --unsupported [WORDS]': what the CLI cannot do yet.
@@ -221,7 +229,7 @@ def _schema_find(invocation: Invocation) -> HandlerResult:
221
229
  if not query.strip():
222
230
  raise _EMPTY_QUERY_ERROR
223
231
  if ";" not in query:
224
- return schema_cmd.find_schemas(query), {}
232
+ return _find_output(schema_cmd.find_schemas(query), invocation), {}
225
233
  # Several goals in one call ("join customers onto orders; remove
226
234
  # duplicate rows; build a dashboard"): run the existing single-goal
227
235
  # search per goal instead of round-tripping once per goal.
@@ -245,6 +253,7 @@ def _schema_find(invocation: Invocation) -> HandlerResult:
245
253
  # several candidates.
246
254
  for result in results:
247
255
  _cap_inline_detail(result, 1)
256
+ results = [_find_output(result, invocation) for result in results]
248
257
  return {
249
258
  "goals": [{"goal": goal, **result} for goal, result in zip(goals, results, strict=True)]
250
259
  }, {}
@@ -530,8 +530,7 @@ _COMMAND_DISCOVERY_PURPOSES = {
530
530
  # complete periods and gives a range. Generic words (will, estimate, next,
531
531
  # month) are left out: each would make other goals need this text to match.
532
532
  "view.data.forecast": (
533
- "forecast forecasts forecasting projection projections projected predict prediction "
534
- "future"
533
+ "forecast forecasts forecasting projection projections projected predict prediction future"
535
534
  ),
536
535
  # What a term means for one dataset (gap proposal P13): said once, used by
537
536
  # every chat on it. "remember that churned means" is a definition, not a
@@ -1193,6 +1192,10 @@ _NO_MATCH_HINT_WITH_SUGGESTIONS = (
1193
1192
  "No single command matched every word, but 'suggestions' lists the closest candidates "
1194
1193
  "-- each with its own matched_terms. Try one of those before rephrasing."
1195
1194
  )
1195
+ _NO_MATCH_HINT_PARTIAL = (
1196
+ "No single command matched every word; 'matches' lists the closest candidates "
1197
+ "(partial: true) -- each with its own matched_terms. Try one of those before rephrasing."
1198
+ )
1196
1199
  _NO_MATCH_HINT_NO_SUGGESTIONS = (
1197
1200
  "No command matched any word; try fewer or other words. 'mammoth view transform --help' "
1198
1201
  "lists every data transformation (join, pivot, filter, dedupe, math, ...), and 'mammoth "
@@ -2215,7 +2218,9 @@ def _schema_common(record: dict[str, Any]) -> dict[str, Any]:
2215
2218
  contract_level = (
2216
2219
  "opaque_expert"
2217
2220
  if record["command_id"] in _OPAQUE_EXPERT_COMMANDS
2218
- else "partially_typed" if opaque_fields else "typed"
2221
+ else "partially_typed"
2222
+ if opaque_fields
2223
+ else "typed"
2219
2224
  )
2220
2225
  return {
2221
2226
  "server_status": record.get("server_status", "served"),
@@ -2373,6 +2378,10 @@ def _inline_call_detail(entries: list[dict[str, Any]]) -> None:
2373
2378
  record = command_by_id(entry["command_id"])
2374
2379
  if record is None:
2375
2380
  continue
2381
+ entry["positionals"] = [
2382
+ {key: item[key] for key in ("name", "metavar", "type", "required")}
2383
+ for item in _positionals(entry["command_id"])
2384
+ ]
2376
2385
  fields = _compact_accepted_fields(record)
2377
2386
  if fields is not None:
2378
2387
  entry["accepted_fields"] = fields
@@ -2608,6 +2617,50 @@ def find_schemas(
2608
2617
  return result
2609
2618
 
2610
2619
 
2620
+ #: Keys of an inlined accepted field that a caller needs to fill it in; its
2621
+ #: nested JSON Schema is what ``schema get`` is for.
2622
+ _FIND_FIELD_KEYS = ("name", "type", "required", "enum")
2623
+ #: Entry keys a find leaves out unless ``--full``: ``schema get`` has them.
2624
+ _FIND_DROPPED_KEYS = ("full_schema_command", "known_restrictions", "matched_on")
2625
+
2626
+
2627
+ def _trim_find_entry(entry: dict[str, Any]) -> dict[str, Any]:
2628
+ """One match cut to what picks and calls it: id, summary, safety class, example.
2629
+
2630
+ The command id is the key ``schema get`` takes for the rest.
2631
+ """
2632
+ from mammoth_cli.app import _indexed_summary
2633
+
2634
+ trimmed = {key: value for key, value in entry.items() if key not in _FIND_DROPPED_KEYS}
2635
+ summary = _indexed_summary(entry["command_id"])
2636
+ if summary:
2637
+ trimmed["summary"] = summary
2638
+ if trimmed.get("server_status") == "served":
2639
+ del trimmed["server_status"]
2640
+ if "accepted_fields" in trimmed:
2641
+ trimmed["accepted_fields"] = [
2642
+ {key: field[key] for key in _FIND_FIELD_KEYS if field.get(key) is not None}
2643
+ for field in trimmed["accepted_fields"]
2644
+ ]
2645
+ return trimmed
2646
+
2647
+
2648
+ def trim_find_result(result: dict[str, Any]) -> dict[str, Any]:
2649
+ """The default ``schema find`` shape: trimmed entries, near misses listed once.
2650
+
2651
+ ``suggestions`` repeated the partial ``matches`` entry for entry, so only
2652
+ ``matches`` stays. ``--full`` returns the whole shape.
2653
+ """
2654
+ trimmed = dict(result)
2655
+ trimmed["matches"] = [_trim_find_entry(entry) for entry in result["matches"]]
2656
+ if "suggestions" in trimmed:
2657
+ del trimmed["suggestions"]
2658
+ trimmed["hint"] = (
2659
+ _NO_MATCH_HINT_PARTIAL if trimmed["matches"] else _NO_MATCH_HINT_NO_SUGGESTIONS
2660
+ )
2661
+ return trimmed
2662
+
2663
+
2611
2664
  def _browse(entries: list[dict[str, Any]]) -> dict[str, Any]:
2612
2665
  """The families behind *entries* and how to list each one in full: a keyword
2613
2666
  find surfaces one way to do a thing, its family holds the siblings."""
@@ -9,6 +9,7 @@ from mammoth_cli.errors.envelope import (
9
9
  CODE_INVALID_ARGUMENT,
10
10
  CODE_MISSING_ARGUMENT,
11
11
  CODE_MISSING_FIELD,
12
+ CODE_RESOURCE_NOT_FOUND,
12
13
  CODE_SDK_SYMBOL_UNRESOLVED,
13
14
  EXIT_USAGE,
14
15
  CliError,
@@ -188,6 +189,38 @@ def _view_parent_dataset_id(service: Any, invocation: Invocation, view_id: int)
188
189
  return dataset_id
189
190
 
190
191
 
192
+ def _explain_swapped_ids(
193
+ service: Any, error: CliError, invocation: Invocation, view_id: int, dataset_id: int
194
+ ) -> None:
195
+ """Raise a clear refusal when a not-found call was given DATASET_ID then VIEW_ID.
196
+
197
+ The arguments are ``VIEW_ID [DATASET_ID]``; passing them the other way round
198
+ only produces a bare 404. If the first number is really a view of the second,
199
+ say so. Any other outcome leaves the original error to be re-raised.
200
+ """
201
+ if error.code != CODE_RESOURCE_NOT_FOUND:
202
+ return
203
+ try:
204
+ parent = int(service.call(_FIND_DATASET_SYMBOL, dataview_id=dataset_id))
205
+ except CliError:
206
+ return
207
+ if parent != view_id:
208
+ return
209
+ raise CliError(
210
+ code=CODE_INVALID_ARGUMENT,
211
+ message=(
212
+ f"{view_id} is a dataset id and {dataset_id} is its view; "
213
+ "the order is VIEW_ID DATASET_ID"
214
+ ),
215
+ exit_status=EXIT_USAGE,
216
+ hint=(
217
+ f"Run it again as: mammoth {invocation.command_path} {dataset_id} {view_id}"
218
+ " (same options)"
219
+ ),
220
+ details={"view_id": dataset_id, "dataset_id": view_id},
221
+ ) from error
222
+
223
+
191
224
  def _verified_dataset_id(
192
225
  service: Any, invocation: Invocation, view_id: int, document: dict[str, Any]
193
226
  ) -> int:
@@ -199,7 +232,12 @@ def _verified_dataset_id(
199
232
  explicit = _int_positional_at(invocation, 1, "dataset id")
200
233
  if explicit is None and document.get(_DATASET_ID_FIELD) is not None:
201
234
  explicit = _int_field(document[_DATASET_ID_FIELD], _DATASET_ID_FIELD)
202
- real = _view_parent_dataset_id(service, invocation, view_id)
235
+ try:
236
+ real = _view_parent_dataset_id(service, invocation, view_id)
237
+ except CliError as exc:
238
+ if explicit is not None:
239
+ _explain_swapped_ids(service, exc, invocation, view_id, explicit)
240
+ raise
203
241
  if explicit is not None:
204
242
  _check_parent_matches(view_id, explicit, real)
205
243
  return real
@@ -6,10 +6,10 @@ from typing import Any
6
6
 
7
7
  from mammoth_cli.commands.view._common import (
8
8
  _COLUMNS_KEY,
9
- _FIND_DATASET_SYMBOL,
10
9
  _QUERY_DATA_SYMBOL,
11
10
  _ROWS_KEY,
12
11
  HandlerResult,
12
+ _explain_swapped_ids,
13
13
  _forward_optional,
14
14
  _int_field,
15
15
  _page_offset,
@@ -27,8 +27,6 @@ from mammoth_cli.commands.view.columns import (
27
27
  _compile_query_filters,
28
28
  )
29
29
  from mammoth_cli.errors.envelope import (
30
- CODE_INVALID_ARGUMENT,
31
- CODE_RESOURCE_NOT_FOUND,
32
30
  EXIT_USAGE,
33
31
  CliError,
34
32
  )
@@ -66,7 +64,7 @@ def view_data_get(invocation: Invocation) -> HandlerResult:
66
64
  service, invocation, auth.workspace_id, dataset_id, view_id, project_id
67
65
  )
68
66
  except CliError as exc:
69
- _explain_swapped_ids(service, exc, view_id, dataset_id)
67
+ _explain_swapped_ids(service, exc, invocation, view_id, dataset_id)
70
68
  raise
71
69
  mapping, types, _currencies = _profile_of_info(info)
72
70
  kwargs: dict[str, Any] = {
@@ -199,33 +197,6 @@ def _close_last_page(data: Any, offset: Any) -> Any:
199
197
  return closed
200
198
 
201
199
 
202
- def _explain_swapped_ids(service: Any, error: CliError, view_id: int, dataset_id: int) -> None:
203
- """Raise a clear refusal when a not-found read was given DATASET_ID then VIEW_ID.
204
-
205
- The arguments are ``VIEW_ID [DATASET_ID]``; passing them the other way round
206
- only produces a bare 404. If the first number is really a view of the second,
207
- say so. Any other outcome leaves the original error to be re-raised.
208
- """
209
- if error.code != CODE_RESOURCE_NOT_FOUND:
210
- return
211
- try:
212
- parent = int(service.call(_FIND_DATASET_SYMBOL, dataview_id=dataset_id))
213
- except CliError:
214
- return
215
- if parent != view_id:
216
- return
217
- raise CliError(
218
- code=CODE_INVALID_ARGUMENT,
219
- message=(
220
- f"{view_id} is a dataset id and {dataset_id} is its view; "
221
- "the order is VIEW_ID DATASET_ID"
222
- ),
223
- exit_status=EXIT_USAGE,
224
- hint=f"Run it again as: mammoth view data get {dataset_id} {view_id}",
225
- details={"view_id": dataset_id, "dataset_id": view_id},
226
- ) from error
227
-
228
-
229
200
  #: Rows a plain ``view data get`` returns unless ``limit`` says otherwise.
230
201
  _DATA_GET_DEFAULT_LIMIT = 50
231
202
 
@@ -32,6 +32,12 @@ COMPACT_COMMANDS = frozenset(
32
32
  }
33
33
  )
34
34
 
35
+ #: Reads trimmed by default; ``--full`` returns the old shape. ``schema find`` cuts
36
+ #: each match to what picks and calls it; ``canvas get`` leaves out null and empty fields.
37
+ TRIMMED_READ_COMMANDS = frozenset({"schema.find", "dashboard.canvas.get"})
38
+ #: Every command that takes ``--full``.
39
+ FULL_FLAG_COMMANDS = COMPACT_COMMANDS | TRIMMED_READ_COMMANDS
40
+
35
41
  #: Keys left out in compact mode: the planner's working state, not a result.
36
42
  _OMITTED_KEYS = ("plan", "specs")
37
43
  #: Keys kept exactly as they are, nulls included.
@@ -87,6 +93,27 @@ def _null_only(original: Any, compacted: Any) -> bool:
87
93
  return isinstance(original, dict) and bool(original) and compacted == {}
88
94
 
89
95
 
96
+ def _drop_nulls(value: Any) -> Any:
97
+ """*value* without null fields at any depth, and without dicts that held only nulls.
98
+
99
+ An explicit ``[]``, ``{}`` or ``""`` stays: ``canvas save`` treats an absent or
100
+ null overlay as "keep the head's" and an explicit empty one as "clear it".
101
+ List items keep their place.
102
+ """
103
+ if isinstance(value, list):
104
+ return [_drop_nulls(item) for item in value]
105
+ if not isinstance(value, dict):
106
+ return value
107
+ result: dict[str, Any] = {}
108
+ for key, item in value.items():
109
+ if item is None:
110
+ continue
111
+ pruned = _drop_nulls(item)
112
+ if not _null_only(item, pruned):
113
+ result[key] = pruned
114
+ return result
115
+
116
+
90
117
  def _dashboard_id(invocation: Invocation, data: dict[str, Any]) -> Any:
91
118
  for value in (invocation.positionals.get("dashboard_id"), data.get("dashboard_id")):
92
119
  if isinstance(value, (int, str)) and str(value):
@@ -96,6 +123,8 @@ def _dashboard_id(invocation: Invocation, data: dict[str, Any]) -> Any:
96
123
 
97
124
  def with_compact(invocation: Invocation, data: Any) -> Any:
98
125
  """``data`` compacted for a command in :data:`COMPACT_COMMANDS`, unless ``--full``."""
126
+ if invocation.command_id == "dashboard.canvas.get":
127
+ return data if invocation.full_output else _drop_nulls(data)
99
128
  if (
100
129
  invocation.command_id not in COMPACT_COMMANDS
101
130
  or invocation.full_output
@@ -38,7 +38,7 @@ from collections.abc import Iterable, Mapping
38
38
  from typing import Any
39
39
 
40
40
  from mammoth_cli.errors.envelope import EXIT_USAGE, CliError
41
- from mammoth_cli.runtime.compact import COMPACT_COMMANDS, FULL_FLAG
41
+ from mammoth_cli.runtime.compact import FULL_FLAG, FULL_FLAG_COMMANDS
42
42
  from mammoth_cli.runtime.reveal import REVEAL_COMMANDS, REVEAL_FLAG
43
43
  from mammoth_cli.services.argspec import FieldSpec
44
44
  from mammoth_cli.services.command_contract import (
@@ -57,11 +57,11 @@ NEGATIVE_NUMBER = re.compile(r"^-(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$")
57
57
  #: Flags a few commands take in place of the ``--input`` field of the same name.
58
58
  COMMAND_FLAGS: dict[str, frozenset[str]] = {
59
59
  "schema.get": frozenset({"--full"}),
60
- "schema.find": frozenset({"--unsupported"}),
61
60
  # Keep going after a failed line instead of stopping at the first.
62
61
  "run": frozenset({"--continue"}),
63
62
  # The compacted dashboard writes: --full returns the whole response.
64
- **{command_id: frozenset({FULL_FLAG}) for command_id in COMPACT_COMMANDS},
63
+ **{command_id: frozenset({FULL_FLAG}) for command_id in FULL_FLAG_COMMANDS},
64
+ "schema.find": frozenset({"--unsupported", FULL_FLAG}),
65
65
  # A once-shown credential is masked unless --reveal asks for it.
66
66
  **{command_id: frozenset({REVEAL_FLAG}) for command_id in REVEAL_COMMANDS},
67
67
  }
@@ -393,7 +393,7 @@ def _unknown_field_hint(command_id: str, document: dict[str, Any], accepted: lis
393
393
  f"mammoth {command_id.replace('.', ' ')} ... --project {document['project_id']} "
394
394
  "(or omit it to use the active project)."
395
395
  )
396
- return f"Accepted fields: {', '.join(accepted) or '(none)' }."
396
+ return f"Accepted fields: {', '.join(accepted) or '(none)'}."
397
397
 
398
398
 
399
399
  def _sort_entry(entry: Any) -> Any:
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.2.98"
3
+ version = "2.2.100"
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.50,<0.9)",
10
+ "mammoth-io (>=0.8.51,<0.9)",
11
11
  "typer (>=0.27,<0.28)",
12
12
  "rich (>=15,<16)",
13
13
  "platformdirs (>=4.10,<5)",
@@ -5449,8 +5449,7 @@ commands:
5449
5449
  help: ID of the view to act on.
5450
5450
  options: []
5451
5451
  sdk_symbol: mammoth._mixins._text_ops.TextOpsMixin.substring
5452
- sdk_conversion: 'CLI one-call op: View.substring with a first-word regex, then View.submit_draft when
5453
- the step was staged; from mammoth_cli.commands.view_ops. The accepted document fields are in command_contract.py.'
5452
+ sdk_conversion: 'CLI one-call op: View.substring with a first-word regex; from mammoth_cli.commands.view_ops. The accepted document fields are in command_contract.py.'
5454
5453
  request_model: ViewTransformFirstNameRequest
5455
5454
  result_model: ViewTransformFirstNameResult
5456
5455
  mutation_class: reversible_pipeline
@@ -5483,10 +5482,10 @@ commands:
5483
5482
  undo_test: null
5484
5483
  known_restrictions: 'Use for "extract the first name" or the first word of a text column. --input: "column"
5485
5484
  (a TEXT column, required) and exactly one of "new_column" or "existing_column". Takes the text up
5486
- to the first space. One call: if the view is in draft mode the step is staged, the draft is submitted
5487
- and the result waits on this step''s own run (run.transform_status DONE), not on the pipeline reading
5488
- ready. A draft that already held other staged steps is left staged (status staged) because submitting
5489
- would run them too; run view draft submit when that is intended.'
5485
+ to the first space. One call: if the view is in draft mode the step is staged (status staged) and the
5486
+ draft stays unsubmitted, whether or not it already held staged steps; run view draft submit when
5487
+ that is intended. Outside draft mode the result waits on this step''s own run (run.transform_status
5488
+ DONE), not on the pipeline reading ready.'
5490
5489
  reviewed_by: primary
5491
5490
  - command_id: view.transform.generate-sql
5492
5491
  command_path: view transform generate-sql
@@ -6330,8 +6329,7 @@ commands:
6330
6329
  help: ID of the view to act on.
6331
6330
  options: []
6332
6331
  sdk_symbol: mammoth._mixins._math_ops.MathOpsMixin.math
6333
- sdk_conversion: 'CLI one-call op: View.math with existing_column, then View.submit_draft when the step
6334
- was staged; from mammoth_cli.commands.view_ops. The accepted document fields are in command_contract.py.'
6332
+ sdk_conversion: 'CLI one-call op: View.math with existing_column; from mammoth_cli.commands.view_ops. The accepted document fields are in command_contract.py.'
6335
6333
  request_model: ViewTransformUpdateColumnRequest
6336
6334
  result_model: ViewTransformUpdateColumnResult
6337
6335
  mutation_class: reversible_pipeline
@@ -6365,9 +6363,9 @@ commands:
6365
6363
  known_restrictions: 'Use to overwrite a numeric column with an expression over its own values ("add
6366
6364
  5 to Cost"). --input: "column" (an existing column, required) and "expression" (required, as in view
6367
6365
  transform math). Same as view transform math with existing_column set. One call: if the view is in
6368
- draft mode the step is staged, the draft is submitted and the result waits on this step''s own run
6369
- (run.transform_status DONE), not on the pipeline reading ready. A draft that already held other staged
6370
- steps is left staged (status staged); run view draft submit when that is intended.'
6366
+ draft mode the step is staged (status staged) and the draft stays unsubmitted, whether or not it already
6367
+ held staged steps; run view draft submit when that is intended. Outside draft mode the result waits
6368
+ on this step''s own run (run.transform_status DONE), not on the pipeline reading ready.'
6371
6369
  reviewed_by: primary
6372
6370
  - command_id: view.transform.window
6373
6371
  command_path: view transform window
@@ -7065,7 +7063,7 @@ commands:
7065
7063
  - CT-VIEW-EXPLORE-PANEL-SET-ERROR
7066
7064
  draft_test: null
7067
7065
  undo_test: null
7068
- known_restrictions: 'This is the command that opens Explore cards in the UI. Open a card per column
7066
+ known_restrictions: 'Saves the Explore cards of the calling user for a view; it shows nothing by itself. Open a card per column
7069
7067
  with {"panel": {"columns": "all"}} or {"panel": {"columns": ["Region", "Amount"]}}: each named column
7070
7068
  that has no card gets one and the saved cards stay. To replace the whole panel, run view explore-panel
7071
7069
  get first and write back {"panel": {"cards": [...]}}. A panel with no cards list is refused, because