mammoth-cli 2.0.71__tar.gz → 2.0.72__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 (230) hide show
  1. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/PKG-INFO +1 -1
  2. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/app.py +16 -1
  4. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +1 -1
  5. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/view_ops.py +26 -0
  6. mammoth_cli-2.0.72/mammoth_cli/runtime/verify.py +111 -0
  7. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/pyproject.toml +1 -1
  8. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/.gitignore +0 -0
  9. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/LICENSE +0 -0
  10. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/README.md +0 -0
  11. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/__main__.py +0 -0
  12. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  13. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  14. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  15. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  16. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  17. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  18. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  19. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  20. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  21. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  22. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  23. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  24. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  25. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  26. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  27. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  28. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  29. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  30. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  31. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  32. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  33. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  34. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  35. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  36. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  37. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  38. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  39. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  40. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  41. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  42. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  43. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  44. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  45. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  46. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  47. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  48. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  49. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  50. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  51. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  52. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  53. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  54. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  55. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  56. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  57. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  58. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  59. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  60. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  61. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  62. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  63. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  64. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  65. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  66. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  67. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  68. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  69. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  70. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  71. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  72. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  73. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  74. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  75. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  76. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  77. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  78. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  79. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  80. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  81. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  82. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  83. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/__init__.py +0 -0
  84. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/activity.py +0 -0
  85. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/addon.py +0 -0
  86. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/agent.py +0 -0
  87. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/ai.py +0 -0
  88. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/annotation.py +0 -0
  89. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/auth.py +0 -0
  90. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/automation.py +0 -0
  91. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/batch.py +0 -0
  92. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/billing.py +0 -0
  93. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/browse.py +0 -0
  94. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/capability.py +0 -0
  95. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/client_app.py +0 -0
  96. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/completion.py +0 -0
  97. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/config.py +0 -0
  98. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/connector.py +0 -0
  99. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/context.py +0 -0
  100. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/dashboard.py +0 -0
  101. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/data_app.py +0 -0
  102. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/dataset.py +0 -0
  103. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/doctor.py +0 -0
  104. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/external_key.py +0 -0
  105. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/file.py +0 -0
  106. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/folder.py +0 -0
  107. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/job.py +0 -0
  108. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/notification.py +0 -0
  109. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/parameter.py +0 -0
  110. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/project.py +0 -0
  111. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/registry.py +0 -0
  112. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/report.py +0 -0
  113. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/schedule.py +0 -0
  114. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/schema.py +0 -0
  115. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/skill.py +0 -0
  116. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/snippet.py +0 -0
  117. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/support.py +0 -0
  118. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/template.py +0 -0
  119. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/trash.py +0 -0
  120. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/upgrade.py +0 -0
  121. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/user.py +0 -0
  122. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/view.py +0 -0
  123. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/webhook.py +0 -0
  124. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/workflow.py +0 -0
  125. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/commands/workspace.py +0 -0
  126. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/context/__init__.py +0 -0
  127. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/context/credentials.py +0 -0
  128. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/context/endpoint.py +0 -0
  129. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/context/profiles.py +0 -0
  130. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/context/resolver.py +0 -0
  131. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/contracts/__init__.py +0 -0
  132. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/contracts/auth.py +0 -0
  133. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/embed.py +0 -0
  134. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/errors/__init__.py +0 -0
  135. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/errors/envelope.py +0 -0
  136. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/manifest/__init__.py +0 -0
  137. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/manifest/loader.py +0 -0
  138. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/messages/__init__.py +0 -0
  139. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/output/__init__.py +0 -0
  140. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/output/envelope.py +0 -0
  141. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/output/normalize.py +0 -0
  142. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/output/policy.py +0 -0
  143. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/output/progress.py +0 -0
  144. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/output/render.py +0 -0
  145. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/py.typed +0 -0
  146. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/__init__.py +0 -0
  147. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/confirm.py +0 -0
  148. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/dryrun.py +0 -0
  149. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/embedded.py +0 -0
  150. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/executor.py +0 -0
  151. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/input_loader.py +0 -0
  152. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/invocation.py +0 -0
  153. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/options.py +0 -0
  154. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/parents.py +0 -0
  155. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/runlog.py +0 -0
  156. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/session.py +0 -0
  157. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/strict.py +0 -0
  158. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/updates.py +0 -0
  159. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/runtime/validate.py +0 -0
  160. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/__init__.py +0 -0
  161. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/argspec.py +0 -0
  162. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/coerce.py +0 -0
  163. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/command_contract.py +0 -0
  164. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/conditions.py +0 -0
  165. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/dashboard_pages.py +0 -0
  166. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/dashboard_review.py +0 -0
  167. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/data_quality.py +0 -0
  168. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/dispatch.py +0 -0
  169. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/factory.py +0 -0
  170. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/input_fields.py +0 -0
  171. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/mapping.py +0 -0
  172. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/openapi_types.py +0 -0
  173. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/positionals.py +0 -0
  174. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/protocol.py +0 -0
  175. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/sdk_service.py +0 -0
  176. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/testing.py +0 -0
  177. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/services/type_system.py +0 -0
  178. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/skills/__init__.py +0 -0
  179. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/skills/installer.py +0 -0
  180. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/skills/steering.py +0 -0
  181. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/mammoth_cli/testing.py +0 -0
  182. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/activity.yaml +0 -0
  183. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/addon.yaml +0 -0
  184. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/agent.yaml +0 -0
  185. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/ai.yaml +0 -0
  186. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/annotation.yaml +0 -0
  187. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/auth.yaml +0 -0
  188. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/automation.yaml +0 -0
  189. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/batch.yaml +0 -0
  190. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/billing.yaml +0 -0
  191. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/browse.yaml +0 -0
  192. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/capability.yaml +0 -0
  193. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/client-app.yaml +0 -0
  194. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/completion.yaml +0 -0
  195. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/config.yaml +0 -0
  196. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/connector.yaml +0 -0
  197. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/context.yaml +0 -0
  198. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/dashboard.yaml +0 -0
  199. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/data-app.yaml +0 -0
  200. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/dataset.yaml +0 -0
  201. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/doctor.yaml +0 -0
  202. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/external-key.yaml +0 -0
  203. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/file.yaml +0 -0
  204. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/folder.yaml +0 -0
  205. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/job.yaml +0 -0
  206. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/log.yaml +0 -0
  207. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/notification.yaml +0 -0
  208. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/parameter.yaml +0 -0
  209. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/project.yaml +0 -0
  210. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/report.yaml +0 -0
  211. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/schedule.yaml +0 -0
  212. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/schema.yaml +0 -0
  213. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/skill.yaml +0 -0
  214. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/snippet.yaml +0 -0
  215. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/support.yaml +0 -0
  216. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/template.yaml +0 -0
  217. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/trash.yaml +0 -0
  218. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/upgrade.yaml +0 -0
  219. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/user.yaml +0 -0
  220. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/version.yaml +0 -0
  221. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/view.yaml +0 -0
  222. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/webhook.yaml +0 -0
  223. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/workflow.yaml +0 -0
  224. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/commands/workspace.yaml +0 -0
  225. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/openapi-operations.yaml +0 -0
  226. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/schema-v1.json +0 -0
  227. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/sdk-catalog.source.yaml +0 -0
  228. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/manifests/sdk-methods.yaml +0 -0
  229. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/openapi/metadata.json +0 -0
  230. {mammoth_cli-2.0.71 → mammoth_cli-2.0.72}/spec/openapi/openapi.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mammoth-cli
3
- Version: 2.0.71
3
+ Version: 2.0.72
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
@@ -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.0.71"
9
+ __version__ = "2.0.72"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -44,6 +44,7 @@ from mammoth_cli.output.policy import (
44
44
  from mammoth_cli.runtime import executor, validate
45
45
  from mammoth_cli.runtime.invocation import Invocation
46
46
  from mammoth_cli.runtime.strict import validate_extra_args
47
+ from mammoth_cli.runtime.verify import with_verify
47
48
  from mammoth_cli.services.positionals import PositionalSpec, resolve_positionals
48
49
 
49
50
  OUTPUT_MODES = VALID_OUTPUTS
@@ -823,7 +824,8 @@ def _execute(invocation: Invocation) -> None:
823
824
  raise not_implemented_error(invocation.command_id, sdk_symbol)
824
825
  if invocation.dry_run:
825
826
  return _dry_run(handler, invocation)
826
- return handler(invocation)
827
+ data, meta = handler(invocation)
828
+ return _apply_verify(invocation.command_id, data), meta
827
829
 
828
830
  executor.run(
829
831
  invocation.command_id,
@@ -835,6 +837,19 @@ def _execute(invocation: Invocation) -> None:
835
837
  )
836
838
 
837
839
 
840
+ def _apply_verify(command_id: str, data: Any) -> Any:
841
+ """Add the automatic write read-back to a real, mutating, API-backed result.
842
+
843
+ A read command and a command with no reviewed ``sdk_symbol`` (a local or
844
+ not-yet-backed command) are returned unchanged; ``--dry-run`` never
845
+ reaches this at all, since it returns before the handler's real call.
846
+ """
847
+ record = command_by_id(command_id) or {}
848
+ if record.get("mutation_class") == "read" or not record.get("sdk_symbol"):
849
+ return data
850
+ return with_verify(data)
851
+
852
+
838
853
  def _dry_run(handler: Handler, invocation: Invocation) -> tuple[Any, dict[str, Any]]:
839
854
  """Run ``handler`` until its request would leave; report that request.
840
855
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mammoth-cli
3
- version: 2.0.71
3
+ version: 2.0.72
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
 
@@ -25,6 +25,7 @@ from datetime import UTC, datetime, timedelta
25
25
  from typing import Any
26
26
 
27
27
  from mammoth_cli.commands.view import (
28
+ _DATAVIEW_GET_SYMBOL,
28
29
  _FIND_DATASET_SYMBOL,
29
30
  BRIEF_VIEW_FIELDS,
30
31
  _dataview_metadata,
@@ -245,6 +246,17 @@ def _meta(invocation: Invocation, workspace_id: int) -> dict[str, Any]:
245
246
  }
246
247
 
247
248
 
249
+ def _view_row_count(service: Any, dataset_id: int, view_id: int, project_id: int | None) -> Any:
250
+ """Return a view's current row count via the cheapest read (best effort)."""
251
+ try:
252
+ info = service.call(
253
+ _DATAVIEW_GET_SYMBOL, dataset_id=dataset_id, dataview_id=view_id, project_id=project_id
254
+ )
255
+ except Exception: # noqa: BLE001 -- the check is advice; the write already ran
256
+ return None
257
+ return info.get("row_count") if isinstance(info, dict) else None
258
+
259
+
248
260
  def _dispatch_view(
249
261
  invocation: Invocation,
250
262
  view_id: int,
@@ -262,7 +274,13 @@ def _dispatch_view(
262
274
  result to emit. ``prepare(service, dataset_id, kwargs)`` may edit the call
263
275
  arguments in place; when it returns a value, that value is emitted and no
264
276
  call is made. All three need the exact parent; without one they are skipped.
277
+
278
+ When neither ``before`` nor ``after`` is given (every plain transform),
279
+ the view's row count is read before and after the call and added to the
280
+ result as ``row_check``, so a caller always sees whether the write changed
281
+ the row count -- the join path builds its own richer ``join_check`` instead.
265
282
  """
283
+ auto_row_check = before is None and after is None
266
284
  # ``dataset_id`` is invocation-local resource context. It is not a View
267
285
  # transform argument, but passing it through lets the service fetch the
268
286
  # exact parent endpoint and prevents the SDK's legacy bare-view resolver
@@ -287,6 +305,11 @@ def _dispatch_view(
287
305
  if early is not None:
288
306
  return early, _meta(invocation, auth.workspace_id)
289
307
  state = before(service, int(dataset_id)) if before and dataset_id is not None else None
308
+ rows_before = (
309
+ _view_row_count(service, int(dataset_id), view_id, invocation.project)
310
+ if auto_row_check and dataset_id is not None
311
+ else None
312
+ )
290
313
  try:
291
314
  if dataset_id is None:
292
315
  _require_discovery_allowed(invocation, view_id)
@@ -306,6 +329,9 @@ def _dispatch_view(
306
329
  )
307
330
  if after is not None and dataset_id is not None:
308
331
  data = after(service, int(dataset_id), state, data)
332
+ elif auto_row_check and dataset_id is not None and isinstance(data, dict):
333
+ rows_after = _view_row_count(service, int(dataset_id), view_id, invocation.project)
334
+ data["row_check"] = {"rows_before": rows_before, "rows_after": rows_after}
309
335
  return data, _meta(invocation, auth.workspace_id)
310
336
 
311
337
 
@@ -0,0 +1,111 @@
1
+ """Automatic write read-back for every real, non-read API-backed command.
2
+
3
+ A backend write returns whatever shape that particular endpoint returns —
4
+ some carry ``has_error``, some a bare ``status``, some a pipeline job with its
5
+ own nested ``status``. :func:`with_verify` reads those backend-specific
6
+ signals once and adds one small, uniform ``verify`` block to the result, so
7
+ the agent that issued the write always has an explicit answer to "did this do
8
+ what it should" instead of re-deriving it per command.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from typing import Any
14
+
15
+ #: Below this share of matched rows, a join has enough misses to flag before
16
+ #: the caller builds anything further on it.
17
+ JOIN_MATCH_RATE_THRESHOLD = 0.8
18
+
19
+ _FAILURE_STATUSES = frozenset({"error", "failed", "failure"})
20
+ _FAILURE_PIPELINE_STATES = frozenset({"error", "ref_error"})
21
+
22
+
23
+ def with_verify(data: Any) -> Any:
24
+ """Return ``data`` with a ``verify`` read-back block added.
25
+
26
+ ``data`` that is not a dict (a dry-run report, a bare list, ...) is
27
+ returned unchanged.
28
+ """
29
+ if not isinstance(data, dict):
30
+ return data
31
+ verified = _verified(data)
32
+ state = _state(data)
33
+ rows_before, rows_after = _row_counts(data)
34
+ verify: dict[str, Any] = {"verified": verified, "state": state}
35
+ if rows_before is not None or rows_after is not None:
36
+ verify["rows_before"] = rows_before
37
+ verify["rows_after"] = rows_after
38
+ verify["warnings"] = _warnings(data)
39
+ verify["needs_user"] = _needs_user(
40
+ data, verified=verified, state=state, rows_before=rows_before, rows_after=rows_after
41
+ )
42
+ return {**data, "verify": verify}
43
+
44
+
45
+ def _job_status(data: dict[str, Any]) -> str | None:
46
+ job = data.get("job")
47
+ status = job.get("status") if isinstance(job, dict) else None
48
+ return status if isinstance(status, str) else None
49
+
50
+
51
+ def _verified(data: dict[str, Any]) -> bool:
52
+ if data.get("has_error"):
53
+ return False
54
+ for status in (data.get("status"), _job_status(data)):
55
+ if isinstance(status, str) and status.lower() in _FAILURE_STATUSES:
56
+ return False
57
+ pipeline_state = data.get("pipeline_state")
58
+ if isinstance(pipeline_state, str) and pipeline_state.lower() in _FAILURE_PIPELINE_STATES:
59
+ return False
60
+ return data.get("bake_ok") is not False
61
+
62
+
63
+ def _state(data: dict[str, Any]) -> str:
64
+ for key in ("pipeline_state", "status"):
65
+ value = data.get(key)
66
+ if value is not None:
67
+ return str(value)
68
+ return "done"
69
+
70
+
71
+ def _row_counts(data: dict[str, Any]) -> tuple[int | None, int | None]:
72
+ for key in ("row_check", "join_check"):
73
+ check = data.get(key)
74
+ if isinstance(check, dict):
75
+ return check.get("rows_before"), check.get("rows_after")
76
+ return None, None
77
+
78
+
79
+ def _warnings(data: dict[str, Any]) -> list[str]:
80
+ notes: list[str] = []
81
+ for key, value in data.items():
82
+ if not key.endswith("_check") or not isinstance(value, dict):
83
+ continue
84
+ for list_key in ("notes", "warnings"):
85
+ items = value.get(list_key)
86
+ if isinstance(items, list):
87
+ notes.extend(item if isinstance(item, str) else str(item) for item in items)
88
+ return notes
89
+
90
+
91
+ def _needs_user(
92
+ data: dict[str, Any],
93
+ *,
94
+ verified: bool,
95
+ state: str,
96
+ rows_before: int | None,
97
+ rows_after: int | None,
98
+ ) -> str | None:
99
+ if not verified:
100
+ return f"The change failed: {state}."
101
+ if rows_after == 0 and isinstance(rows_before, int) and rows_before > 0:
102
+ return f"The change left the view with no rows (was {rows_before})."
103
+ join_check = data.get("join_check")
104
+ match_rate = join_check.get("match_rate") if isinstance(join_check, dict) else None
105
+ if isinstance(match_rate, (int, float)) and match_rate < JOIN_MATCH_RATE_THRESHOLD:
106
+ percent = round(match_rate * 100)
107
+ return (
108
+ f"Only {percent}% of rows found a match in the join; the user should "
109
+ "confirm before building on it."
110
+ )
111
+ return None
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.0.71"
3
+ version = "2.0.72"
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"
File without changes
File without changes
File without changes