mammoth-cli 2.2.97__tar.gz → 2.2.99__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.97 → mammoth_cli-2.2.99}/PKG-INFO +2 -2
  2. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/app.py +22 -1
  4. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +1 -1
  5. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-embed.md +1 -1
  6. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +1 -1
  7. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +1 -1
  8. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/dashboard.py +21 -3
  9. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/file.py +15 -0
  10. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/schema.py +20 -2
  11. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/_common.py +39 -1
  12. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/data_read.py +2 -31
  13. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/export.py +2 -1
  14. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/workspace.py +9 -4
  15. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/errors/envelope.py +2 -0
  16. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/normalize.py +3 -1
  17. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/invocation.py +3 -0
  18. mammoth_cli-2.2.99/mammoth_cli/runtime/reveal.py +21 -0
  19. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/strict.py +3 -0
  20. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/verify.py +8 -2
  21. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/argspec.py +5 -1
  22. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/input_fields.py +7 -0
  23. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/mapping.py +44 -1
  24. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/pyproject.toml +2 -2
  25. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/dashboard.yaml +3 -3
  26. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/view.yaml +12 -14
  27. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/compiled/commands.json +6 -6
  28. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/compiled/sdk-methods.json +1 -1
  29. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/sdk-methods.yaml +1 -1
  30. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/.gitignore +0 -0
  31. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/LICENSE +0 -0
  32. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/README.md +0 -0
  33. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/__main__.py +0 -0
  34. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  35. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  36. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  37. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  38. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  39. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  40. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  41. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  42. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  43. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  44. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  45. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  46. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  47. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  48. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  49. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  50. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capabilities.md +0 -0
  51. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  52. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  53. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/collection.md +0 -0
  54. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  55. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  56. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  57. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  58. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-published.md +0 -0
  59. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  60. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
  61. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
  62. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  63. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  64. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  65. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  66. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  67. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/how.md +0 -0
  68. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  69. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
  70. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  71. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  72. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  73. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  74. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  75. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
  76. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/run.md +0 -0
  77. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  78. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  79. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  80. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  81. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  82. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  83. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
  84. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  85. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  86. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  87. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  88. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  89. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  90. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  91. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  92. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  93. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  94. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  95. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  96. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  97. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  98. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  99. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  100. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  101. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  102. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  103. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
  104. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  105. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  106. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  107. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/rest-api-import.md +0 -0
  108. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  109. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  110. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  111. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  112. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  113. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  114. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  115. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  116. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/__init__.py +0 -0
  117. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/_lazy.py +0 -0
  118. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/activity.py +0 -0
  119. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/addon.py +0 -0
  120. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/agent.py +0 -0
  121. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/ai.py +0 -0
  122. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/annotation.py +0 -0
  123. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/auth.py +0 -0
  124. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/automation.py +0 -0
  125. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/batch.py +0 -0
  126. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/billing.py +0 -0
  127. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/browse.py +0 -0
  128. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/calc.py +0 -0
  129. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/capabilities.py +0 -0
  130. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/capability.py +0 -0
  131. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/client_app.py +0 -0
  132. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/completion.py +0 -0
  133. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/config.py +0 -0
  134. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/connector.py +0 -0
  135. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/context.py +0 -0
  136. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/dataset.py +0 -0
  137. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/doctor.py +0 -0
  138. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/external_key.py +0 -0
  139. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/folder.py +0 -0
  140. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/help_summaries.json +0 -0
  141. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/how.py +0 -0
  142. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/job.py +0 -0
  143. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/link.py +0 -0
  144. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/notification.py +0 -0
  145. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/parameter.py +0 -0
  146. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/project.py +0 -0
  147. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/registry.py +0 -0
  148. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/report.py +0 -0
  149. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/resolve.py +0 -0
  150. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/run.py +0 -0
  151. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/schedule.py +0 -0
  152. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/skill.py +0 -0
  153. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/snippet.py +0 -0
  154. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/support.py +0 -0
  155. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/template.py +0 -0
  156. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/trash.py +0 -0
  157. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/upgrade.py +0 -0
  158. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/user.py +0 -0
  159. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/__init__.py +0 -0
  160. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/aggregate.py +0 -0
  161. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/checks.py +0 -0
  162. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/column_checks.py +0 -0
  163. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/columns.py +0 -0
  164. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/derivatives.py +0 -0
  165. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/explore.py +0 -0
  166. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/export_dataset.py +0 -0
  167. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/export_specialized.py +0 -0
  168. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/formatting.py +0 -0
  169. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/join_check.py +0 -0
  170. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/lifecycle.py +0 -0
  171. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/listing.py +0 -0
  172. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/pipeline.py +0 -0
  173. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/settle.py +0 -0
  174. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view/upload.py +0 -0
  175. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_drivers.py +0 -0
  176. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_explore.py +0 -0
  177. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_forecast.py +0 -0
  178. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_ops.py +0 -0
  179. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/view_profile.py +0 -0
  180. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/webhook.py +0 -0
  181. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/commands/workflow.py +0 -0
  182. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/__init__.py +0 -0
  183. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/credentials.py +0 -0
  184. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/endpoint.py +0 -0
  185. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/keyring_backend.py +0 -0
  186. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/oauth.py +0 -0
  187. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/oauth_loopback.py +0 -0
  188. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/profiles.py +0 -0
  189. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/context/resolver.py +0 -0
  190. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/contracts/__init__.py +0 -0
  191. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/contracts/auth.py +0 -0
  192. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/discovery/__init__.py +0 -0
  193. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/discovery/limitations.json +0 -0
  194. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/discovery/next_commands.json +0 -0
  195. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/discovery/recipes.json +0 -0
  196. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/embed.py +0 -0
  197. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/errors/__init__.py +0 -0
  198. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/manifest/__init__.py +0 -0
  199. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/manifest/loader.py +0 -0
  200. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/messages/__init__.py +0 -0
  201. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/__init__.py +0 -0
  202. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/envelope.py +0 -0
  203. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/policy.py +0 -0
  204. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/progress.py +0 -0
  205. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/output/render.py +0 -0
  206. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/py.typed +0 -0
  207. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/__init__.py +0 -0
  208. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/compact.py +0 -0
  209. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/confirm.py +0 -0
  210. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/dataset_health.py +0 -0
  211. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/dryrun.py +0 -0
  212. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  213. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/embed_pool.py +0 -0
  214. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/embedded.py +0 -0
  215. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/executor.py +0 -0
  216. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/input_loader.py +0 -0
  217. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/intent_only.py +0 -0
  218. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/labels.py +0 -0
  219. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/linecapture.py +0 -0
  220. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/local_paths.py +0 -0
  221. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/locked_files.py +0 -0
  222. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/new_data.py +0 -0
  223. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/next_commands.py +0 -0
  224. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/opens.py +0 -0
  225. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/options.py +0 -0
  226. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/parents.py +0 -0
  227. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/runlog.py +0 -0
  228. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/session.py +0 -0
  229. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/shared.py +0 -0
  230. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/state.py +0 -0
  231. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/token_scope.py +0 -0
  232. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/updates.py +0 -0
  233. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/validate.py +0 -0
  234. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/runtime/view_dataset_cache.py +0 -0
  235. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/__init__.py +0 -0
  236. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/append_blank_columns.py +0 -0
  237. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/board_values.py +0 -0
  238. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/coerce.py +0 -0
  239. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/column_type_guard.py +0 -0
  240. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/command_contract.py +0 -0
  241. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/conditional_format.py +0 -0
  242. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/conditions.py +0 -0
  243. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dashboard_figures.py +0 -0
  244. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dashboard_filters.py +0 -0
  245. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dashboard_pages.py +0 -0
  246. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dashboard_review.py +0 -0
  247. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/data_profile.py +0 -0
  248. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/data_quality.py +0 -0
  249. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/delete_check.py +0 -0
  250. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/dispatch.py +0 -0
  251. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/explore_card_edit.py +0 -0
  252. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/explore_cards.py +0 -0
  253. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/explore_to_figure.py +0 -0
  254. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/explore_to_image.py +0 -0
  255. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/factory.py +0 -0
  256. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/field_enums.py +0 -0
  257. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/folder_ids.py +0 -0
  258. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/held_change.py +0 -0
  259. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/job_outcome.py +0 -0
  260. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/listing.py +0 -0
  261. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/local_files.py +0 -0
  262. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/local_time.py +0 -0
  263. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/openapi_types.py +0 -0
  264. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/paging.py +0 -0
  265. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/period_analysis.py +0 -0
  266. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/poll.py +0 -0
  267. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/positionals.py +0 -0
  268. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/protocol.py +0 -0
  269. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/read_memo.py +0 -0
  270. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/read_queries.py +0 -0
  271. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/schema_diff.py +0 -0
  272. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/sdk_service.py +0 -0
  273. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/sql_check.py +0 -0
  274. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/stored_stats.py +0 -0
  275. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/suggest.py +0 -0
  276. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/testing.py +0 -0
  277. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/text_dates.py +0 -0
  278. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/type_system.py +0 -0
  279. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/view_analysis.py +0 -0
  280. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/view_variants.py +0 -0
  281. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/services/write_impact.py +0 -0
  282. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/skills/__init__.py +0 -0
  283. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/skills/installer.py +0 -0
  284. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/skills/steering.py +0 -0
  285. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/mammoth_cli/testing.py +0 -0
  286. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/activity.yaml +0 -0
  287. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/addon.yaml +0 -0
  288. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/agent.yaml +0 -0
  289. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/ai.yaml +0 -0
  290. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/annotation.yaml +0 -0
  291. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/auth.yaml +0 -0
  292. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/automation.yaml +0 -0
  293. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/batch.yaml +0 -0
  294. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/billing.yaml +0 -0
  295. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/browse.yaml +0 -0
  296. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/calc.yaml +0 -0
  297. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/capabilities.yaml +0 -0
  298. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/capability.yaml +0 -0
  299. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/client-app.yaml +0 -0
  300. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/collection.yaml +0 -0
  301. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/completion.yaml +0 -0
  302. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/config.yaml +0 -0
  303. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/connector.yaml +0 -0
  304. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/context.yaml +0 -0
  305. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/dataset.yaml +0 -0
  306. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/doctor.yaml +0 -0
  307. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/external-key.yaml +0 -0
  308. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/file.yaml +0 -0
  309. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/folder.yaml +0 -0
  310. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/how.yaml +0 -0
  311. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/job.yaml +0 -0
  312. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/link.yaml +0 -0
  313. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/log.yaml +0 -0
  314. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/notification.yaml +0 -0
  315. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/parameter.yaml +0 -0
  316. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/project.yaml +0 -0
  317. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/report.yaml +0 -0
  318. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/resolve.yaml +0 -0
  319. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/run.yaml +0 -0
  320. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/schedule.yaml +0 -0
  321. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/schema.yaml +0 -0
  322. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/skill.yaml +0 -0
  323. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/snippet.yaml +0 -0
  324. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/support.yaml +0 -0
  325. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/template.yaml +0 -0
  326. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/token.yaml +0 -0
  327. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/trash.yaml +0 -0
  328. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/upgrade.yaml +0 -0
  329. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/user.yaml +0 -0
  330. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/version.yaml +0 -0
  331. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/webhook.yaml +0 -0
  332. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/workflow.yaml +0 -0
  333. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/commands/workspace.yaml +0 -0
  334. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/compiled/openapi-operations.json +0 -0
  335. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/edits-target.source.yaml +0 -0
  336. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/openapi-operations.yaml +0 -0
  337. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/schema-v1.json +0 -0
  338. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/sdk-catalog.source.yaml +0 -0
  339. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/manifests/server-status.json +0 -0
  340. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/spec/openapi/metadata.json +0 -0
  341. {mammoth_cli-2.2.97 → mammoth_cli-2.2.99}/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.97
3
+ Version: 2.2.99
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.49
22
+ Requires-Dist: mammoth-io<0.9,>=0.8.50
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.97"
9
+ __version__ = "2.2.99"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -1209,6 +1209,7 @@ def _execute(invocation: Invocation) -> None:
1209
1209
  from mammoth_cli.runtime.new_data import with_new_data_path
1210
1210
  from mammoth_cli.runtime.next_commands import with_next_commands
1211
1211
  from mammoth_cli.runtime.opens import with_opens
1212
+ from mammoth_cli.runtime.reveal import REVEAL_COMMANDS, REVEAL_FLAG
1212
1213
  from mammoth_cli.runtime.strict import validate_extra_args
1213
1214
 
1214
1215
  if invocation.profile is None:
@@ -1219,6 +1220,12 @@ def _execute(invocation: Invocation) -> None:
1219
1220
  extra_args=[arg for arg in invocation.extra_args if arg != FULL_FLAG],
1220
1221
  full_output=True,
1221
1222
  )
1223
+ if invocation.command_id in REVEAL_COMMANDS and REVEAL_FLAG in invocation.extra_args:
1224
+ invocation = replace(
1225
+ invocation,
1226
+ extra_args=[arg for arg in invocation.extra_args if arg != REVEAL_FLAG],
1227
+ reveal_secrets=True,
1228
+ )
1222
1229
 
1223
1230
  def producer() -> tuple[Any, dict[str, Any]]:
1224
1231
  refuse_hand_crafted_write(invocation.command_id)
@@ -1508,6 +1515,13 @@ def _command_help(command_id: str, record: dict[str, Any] | None) -> str | None:
1508
1515
  "The result is compact: ids, checks, verify and a canvas summary. "
1509
1516
  f"Pass {FULL_FLAG} for the complete response."
1510
1517
  )
1518
+ from mammoth_cli.runtime.reveal import REVEAL_COMMANDS, REVEAL_FLAG
1519
+
1520
+ if command_id in REVEAL_COMMANDS:
1521
+ parts.append(
1522
+ "The credential in the result is masked. Pass "
1523
+ f"{REVEAL_FLAG} to print it; it is shown only once."
1524
+ )
1511
1525
  return "\n\n".join(parts) or None
1512
1526
 
1513
1527
 
@@ -1546,7 +1560,14 @@ def _short_type(type_name: str) -> str:
1546
1560
  if "condition." in text:
1547
1561
  return "condition"
1548
1562
  # Drop each dotted module path but keep the brackets around it (``list[a.b.C]``).
1549
- return re.sub(r"(?:\w+\.)+(\w+)", r"\1", " | ".join(p.strip() for p in text.split("|")))[:60]
1563
+ text = re.sub(r"(?:\w+\.)+(\w+)", r"\1", " | ".join(p.strip() for p in text.split("|")))
1564
+ if len(text) <= _SHORT_TYPE_MAX:
1565
+ return text
1566
+ # Cut at a word, never inside one: a clipped value ('par) reads as a real one.
1567
+ return text[: _SHORT_TYPE_MAX - 4].rsplit(" ", 1)[0] + " ..."
1568
+
1569
+
1570
+ _SHORT_TYPE_MAX = 60
1550
1571
 
1551
1572
 
1552
1573
  def _command_records() -> list[dict[str, Any]]:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mammoth-cli
3
- version: 2.2.97
3
+ version: 2.2.99
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
 
@@ -36,7 +36,7 @@ Status on release: untried; no live run recorded.
36
36
 
37
37
  Run: `mammoth dashboard embed lifetime set`. Exact input fields: `mammoth schema get dashboard.embed.lifetime.set`.
38
38
 
39
- Example: `mammoth dashboard embed lifetime set 123 --input '{"token_ttl": 1}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
39
+ Example: `mammoth dashboard embed lifetime set 123 --input '{"token_ttl": 900}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
40
40
 
41
41
  Result: `DashboardEmbedLifetimeSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
42
42
 
@@ -638,7 +638,7 @@ Run: `mammoth dashboard live-chart create`. Exact input fields: `mammoth schema
638
638
 
639
639
  Example: `mammoth dashboard live-chart create --input '{"body": {"params": {"view_id": 1, "figure": {}, "title": "Revenue report"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
640
640
 
641
- Result: `DashboardLiveChartCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
641
+ Result: `DashboardLiveChartCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `start_or_wait`.
642
642
 
643
643
  Status on release: untried; no live run recorded.
644
644
 
@@ -570,7 +570,7 @@ Status on release: ran once on CLI 2.0.14 — write sweep 2026-09-18: exit 0 on
570
570
 
571
571
  Run: `mammoth view export download`. Exact input fields: `mammoth schema get view.export.download`.
572
572
 
573
- Example: `mammoth view export download 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
573
+ Example: `mammoth view export download 123 --input '{"file_type": "xml"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
574
574
 
575
575
  Result: `ViewExportDownloadResult`; mutation `benign_mutation`, confirmation `none`, wait policy `always_wait`.
576
576
 
@@ -1,8 +1,9 @@
1
1
  """Handlers for the ``dashboard`` command family (workspace-scoped, no project).
2
2
 
3
3
  Dashboards are identified either by an integer ``dashboard_id`` (most commands)
4
- or by a share ``url`` slug (the ``*-by-url`` commands). None of the backing SDK
5
- signatures accept a ``project_id``, so handlers never resolve or forward one.
4
+ or by a share ``url`` slug (the ``*-by-url`` commands). The few backing SDK
5
+ methods that take a ``project_id`` (a new board's project) get an explicit
6
+ ``--project``; no other handler resolves or forwards one.
6
7
  Every handler dispatches through the generic
7
8
  :meth:`~mammoth_cli.services.protocol.MammothService.call` seam to the public
8
9
  SDK method named by the command's reviewed manifest ``sdk_symbol``.
@@ -15,6 +16,7 @@ from pathlib import Path
15
16
  from typing import Any, Literal, cast
16
17
 
17
18
  from mammoth.api import agents as agents_api
19
+ from mammoth.api import dashboards as dashboards_api
18
20
  from mammoth.exceptions import MammothValidationError
19
21
  from pydantic import ValidationError
20
22
 
@@ -31,6 +33,7 @@ from mammoth_cli.errors.envelope import (
31
33
  CliError,
32
34
  )
33
35
  from mammoth_cli.manifest.loader import command_by_id
36
+ from mammoth_cli.output.normalize import Revealed, normalize
34
37
  from mammoth_cli.runtime import embedded, parents
35
38
  from mammoth_cli.runtime.confirm import (
36
39
  POLICY_CONFIRM_TARGET,
@@ -40,6 +43,7 @@ from mammoth_cli.runtime.confirm import (
40
43
  enforce_confirmation,
41
44
  )
42
45
  from mammoth_cli.runtime.invocation import Invocation
46
+ from mammoth_cli.runtime.reveal import REVEAL_COMMANDS
43
47
  from mammoth_cli.runtime.session import open_service, require_project, resolved_project
44
48
  from mammoth_cli.services.argspec import arg_spec
45
49
  from mammoth_cli.services.board_values import board_values, dashboard_link
@@ -896,6 +900,7 @@ _SDK_RULES: dict[str, Callable[[dict[str, Any]], None]] = {
896
900
  "agent.turn.rate": lambda k: agents_api.check_rating(
897
901
  str(k.get("rating") or ""), k.get("comment")
898
902
  ),
903
+ "dashboard.embed.lifetime.set": lambda k: dashboards_api.check_token_ttl(k.get("token_ttl")),
899
904
  }
900
905
 
901
906
  #: What the confirmation (and its refusal) names, where the command id alone would hide
@@ -924,6 +929,8 @@ _HANDLE_KEPT = frozenset(
924
929
  "dashboard.figure.rows",
925
930
  "dashboard.published.drill",
926
931
  "dashboard.published.rows",
932
+ # The bake job's result does not name the chart; the handle's dashboard_id does.
933
+ "dashboard.live-chart.create",
927
934
  }
928
935
  )
929
936
 
@@ -990,6 +997,15 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
990
997
  )
991
998
 
992
999
  _check_sdk_rules(invocation.command_id, kwargs)
1000
+ if (
1001
+ invocation.project is not None
1002
+ and spec is not None
1003
+ and "project_id" not in kwargs
1004
+ and any(field.name == "project_id" for field in spec.fields)
1005
+ ):
1006
+ # ``--project`` names the project a new board belongs to (live-chart create,
1007
+ # template apply, v3 generate); without it the server picks the source's.
1008
+ kwargs["project_id"] = invocation.project
993
1009
 
994
1010
  policy = str(record.get("confirmation") or POLICY_NONE)
995
1011
  target = next((str(value) for value in positionals.values()), None)
@@ -1005,7 +1021,7 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
1005
1021
  invocation, policy=policy, action=action, target=str(auth.workspace_id)
1006
1022
  )
1007
1023
  data = service.call(_symbol(invocation), **kwargs)
1008
- handle = data
1024
+ handle = data.model_dump(mode="json") if hasattr(data, "model_dump") else data
1009
1025
  data = _resolve_job(service, invocation, data)
1010
1026
  if invocation.command_id in _HANDLE_KEPT and isinstance(handle, dict):
1011
1027
  # The job's results are keyed by descriptor id; the handle says which
@@ -1019,6 +1035,8 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
1019
1035
  if invocation.command_id in _VALUED_COMMANDS:
1020
1036
  data = _with_board_values(service, auth, positionals, data)
1021
1037
  forget(service)
1038
+ if invocation.reveal_secrets and invocation.command_id in REVEAL_COMMANDS:
1039
+ data = Revealed(normalize(data, redact_secrets=False))
1022
1040
  return data, _meta(invocation, auth.workspace_id)
1023
1041
 
1024
1042
 
@@ -464,6 +464,15 @@ def _dataset_status(service: Any, dataset_id: int) -> tuple[str, dict[str, Any]
464
464
  )
465
465
 
466
466
 
467
+ #: An upload whose job finished without making any dataset.
468
+ NO_DATASET_STATUS = "no_dataset"
469
+ _NO_DATASET_MESSAGE = (
470
+ "The file was uploaded but no dataset was made from it. A PDF waits in the file list "
471
+ "as action_needed until its tables are extracted, which the CLI cannot do yet; do that "
472
+ "in the Mammoth app. Do not upload the file again."
473
+ )
474
+
475
+
467
476
  def _upload_result(
468
477
  value: Any, read_status: Callable[[int], tuple[str, dict[str, Any] | None, str | None]]
469
478
  ) -> dict[str, Any]:
@@ -505,6 +514,12 @@ def _upload_result(
505
514
  result: dict[str, Any] = {"status": overall, "dataset_ids": ids, "datasets": datasets}
506
515
  if len(ids) == 1:
507
516
  result["dataset_id"] = ids[0]
517
+ if not ids:
518
+ # A PDF ends the upload job in ``action_needed`` with no dataset: its
519
+ # tables must be picked first (#255), so nothing here is ready.
520
+ result["status"] = NO_DATASET_STATUS
521
+ result["message"] = _NO_DATASET_MESSAGE
522
+ result["next_command"] = "mammoth file list"
508
523
  return result
509
524
 
510
525
 
@@ -723,7 +723,16 @@ _COMMAND_DISCOVERY_PURPOSES = {
723
723
  "workflow.save-cancel-step": "cancel one step of a running workflow save stop a save step",
724
724
  "view.export.runs": "export run history past runs of an export rows sent errors when it ran",
725
725
  "view.export.rest-fill": "propose REST API export settings from an API docs page url",
726
- "view.summary": "summary of a dataview rows columns overview stats at a glance",
726
+ "workspace.user.list": (
727
+ "list users members of the workspace or of one project with --project, their roles "
728
+ "and status, who has access, my role in a project"
729
+ ),
730
+ # What was done to the view and what depends on it; column statistics are
731
+ # ``view data profile``.
732
+ "view.summary": (
733
+ "summary of what a dataview has had done to it and where it goes: pipeline steps "
734
+ "actions exports dashboards dependencies downstream, row and column counts"
735
+ ),
727
736
  "workspace.export-hosts.get": "hosts exports may send data to allowed export hosts policy",
728
737
  "workspace.export-hosts.set": "restrict or allow the hosts exports may send data to",
729
738
  "dashboard.email-updates.list": "email updates on dashboards I subscribe to in the workspace",
@@ -1228,11 +1237,16 @@ def _accepted_fields(record: dict[str, Any]) -> list[dict[str, Any]] | None:
1228
1237
  tuple(str(item) for item in record.get("operation_ids", []))
1229
1238
  )
1230
1239
  path_fields = local_path_fields(record["command_id"], record.get("positionals", []))
1240
+ # A field an optional positional fills (``view summary VIEW_ID [DATASET_ID]``) is
1241
+ # resolved by the command when both are omitted, as the input schema says.
1242
+ fallbacks = {
1243
+ item.falls_back_to_field for item in contract.positionals if item.falls_back_to_field
1244
+ }
1231
1245
  return [
1232
1246
  {
1233
1247
  "name": field.name,
1234
1248
  "type": field.type_name,
1235
- "required": field.required,
1249
+ "required": field.required and field.name not in fallbacks,
1236
1250
  "enum": field.enum_values,
1237
1251
  "default": field.default_value if field.has_default else None,
1238
1252
  "schema": (
@@ -2359,6 +2373,10 @@ def _inline_call_detail(entries: list[dict[str, Any]]) -> None:
2359
2373
  record = command_by_id(entry["command_id"])
2360
2374
  if record is None:
2361
2375
  continue
2376
+ entry["positionals"] = [
2377
+ {key: item[key] for key in ("name", "metavar", "type", "required")}
2378
+ for item in _positionals(entry["command_id"])
2379
+ ]
2362
2380
  fields = _compact_accepted_fields(record)
2363
2381
  if fields is not None:
2364
2382
  entry["accepted_fields"] = fields
@@ -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
 
@@ -87,7 +87,7 @@ def view_export_csv(invocation: Invocation) -> HandlerResult:
87
87
  def view_export_download(invocation: Invocation) -> HandlerResult:
88
88
  """Download a dataview to a local file as csv, xlsx, json, ndjson, xml, yaml or parquet.
89
89
 
90
- Same as ``view export csv`` otherwise: ``--input '{"format": "xlsx", "output_path":
90
+ Same as ``view export csv`` otherwise: ``--input '{"file_type": "xlsx", "output_path":
91
91
  "out.xlsx"}'``; the default name carries the format's extension; an existing file is not
92
92
  replaced unless ``--overwrite``; embedded, the signed download URL is returned instead.
93
93
  """
@@ -251,6 +251,7 @@ def view_export_rest_fill(invocation: Invocation) -> HandlerResult:
251
251
 
252
252
  Mammoth's server fetches ``docs_url`` and reads it to propose the form values (never
253
253
  credentials). Nothing is configured or sent: the result is a suggestion to review.
254
+ It always waits for the job, for at most ``--job-timeout`` seconds.
254
255
  """
255
256
  project_id = require_project(invocation)
256
257
  dataview_id = _require_int_positional_at(invocation, 0, "dataview id")
@@ -202,9 +202,11 @@ def workspace_get(invocation: Invocation) -> HandlerResult:
202
202
  def workspace_list(invocation: Invocation) -> HandlerResult:
203
203
  """List accessible workspaces."""
204
204
  document = invocation.load_input() or {}
205
- limit = int(document.get("limit", 100))
205
+ kwargs: dict[str, Any] = {"limit": int(document.get("limit", 100))}
206
+ if document.get("fields") is not None:
207
+ kwargs["fields"] = str(document["fields"])
206
208
  with open_service(invocation) as (service, auth):
207
- data = service.call(_symbol(invocation), limit=limit)
209
+ data = service.call(_symbol(invocation), **kwargs)
208
210
  return data, _meta(invocation, auth.workspace_id)
209
211
 
210
212
 
@@ -353,11 +355,14 @@ def workspace_user_list(invocation: Invocation) -> HandlerResult:
353
355
  """List users in the client's own workspace, with their roles and status.
354
356
 
355
357
  Asks for the backend's ``__full`` field set unless ``--input`` names another,
356
- so each user carries ``user_roles`` and ``status``.
358
+ so each user carries ``user_roles`` and ``status``. An explicit ``--project``
359
+ keeps only that project's members (a saved default project does not).
357
360
  """
358
361
  document = invocation.load_input() or {}
359
362
  kwargs: dict[str, Any] = {"fields": _USER_LIST_FIELDS}
360
- _forward_optional(document, kwargs, ("fields", "project_id"))
363
+ _forward_optional(document, kwargs, ("fields",))
364
+ if invocation.project is not None:
365
+ kwargs["project_id"] = invocation.project
361
366
  with open_service(invocation) as (service, auth):
362
367
  data = service.call(_symbol(invocation), **kwargs)
363
368
  return data, _meta(invocation, auth.workspace_id)
@@ -59,6 +59,7 @@ CODE_CONFIRMATION_REQUIRED = "confirmation_required"
59
59
  CODE_CONFIRMATION_DECLINED = "confirmation_declined"
60
60
  CODE_AUTHENTICATION_FAILED = "authentication_failed"
61
61
  CODE_AUTHORIZATION_REQUIRED = "authorization_required"
62
+ CODE_PLAN_LIMIT = "plan_limit"
62
63
  CODE_CONFLICT = "conflict"
63
64
  CODE_RETRYABLE = "retryable_error"
64
65
  CODE_OUTCOME_UNKNOWN = "outcome_unknown"
@@ -111,6 +112,7 @@ ERROR_SUMMARIES: dict[str, str] = {
111
112
  "feature_unavailable": "Mammoth no longer offers this feature.",
112
113
  "export_failed": "The export ran but ended in an error.",
113
114
  "export_not_found": "No export run was found for that request.",
115
+ "plan_limit": "The workspace's plan or usage limit doesn't allow this.",
114
116
  "pin_not_recorded": "The version pin could not be saved, so nothing was changed.",
115
117
  "has_dependents": "Other items still depend on this, so it was not deleted.",
116
118
  "delete_not_applied": "The delete was accepted but the item is still there.",
@@ -223,7 +223,9 @@ def normalize(value: Any, *, redact_secrets: bool = True) -> Any:
223
223
  result: dict[str, Any] = {}
224
224
  for key in sorted(value, key=str):
225
225
  str_key = str(key)
226
- if redact_secrets and _is_secret_key(str_key):
226
+ # A boolean (``has_signing_secret``) only says whether a credential
227
+ # exists; it never is one.
228
+ if redact_secrets and _is_secret_key(str_key) and not isinstance(value[key], bool):
227
229
  result[str_key] = REDACTED
228
230
  else:
229
231
  result[str_key] = normalize(value[key], redact_secrets=redact_secrets)
@@ -91,6 +91,9 @@ class Invocation:
91
91
  #: ``--full`` on a compacted dashboard write: return the whole response
92
92
  #: (:mod:`mammoth_cli.runtime.compact`).
93
93
  full_output: bool = False
94
+ #: ``--reveal`` on a command that returns a once-shown credential: print it
95
+ #: unmasked (:mod:`mammoth_cli.runtime.reveal`).
96
+ reveal_secrets: bool = False
94
97
  #: ``last_modified_time`` of each export on the view, read before a pipeline write;
95
98
  #: verify waits for one to move (the backend re-validates exports after the run).
96
99
  exports_before: dict[int, str] | None = field(default=None, repr=False, compare=False)
@@ -0,0 +1,21 @@
1
+ """``--reveal`` on the commands whose result is a credential the API shows once.
2
+
3
+ ``dashboard embed secret rotate`` returns the new workspace signing secret and
4
+ ``dashboard embed preview-token create`` a token for the embed simulator. Key
5
+ redaction masks both (``secret``, ``token``), which leaves a rotation with no
6
+ usable secret. They stay masked by default, so a log or a shared transcript
7
+ never holds them; ``--reveal`` prints them, the way ``client-app create`` shows
8
+ its token.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ REVEAL_FLAG = "--reveal"
14
+
15
+ #: The commands that print their credential when given ``--reveal``.
16
+ REVEAL_COMMANDS = frozenset(
17
+ {
18
+ "dashboard.embed.secret.rotate",
19
+ "dashboard.embed.preview-token.create",
20
+ }
21
+ )
@@ -39,6 +39,7 @@ from typing import Any
39
39
 
40
40
  from mammoth_cli.errors.envelope import EXIT_USAGE, CliError
41
41
  from mammoth_cli.runtime.compact import COMPACT_COMMANDS, FULL_FLAG
42
+ from mammoth_cli.runtime.reveal import REVEAL_COMMANDS, REVEAL_FLAG
42
43
  from mammoth_cli.services.argspec import FieldSpec
43
44
  from mammoth_cli.services.command_contract import (
44
45
  resolve_command_contract,
@@ -61,6 +62,8 @@ COMMAND_FLAGS: dict[str, frozenset[str]] = {
61
62
  "run": frozenset({"--continue"}),
62
63
  # The compacted dashboard writes: --full returns the whole response.
63
64
  **{command_id: frozenset({FULL_FLAG}) for command_id in COMPACT_COMMANDS},
65
+ # A once-shown credential is masked unless --reveal asks for it.
66
+ **{command_id: frozenset({REVEAL_FLAG}) for command_id in REVEAL_COMMANDS},
64
67
  }
65
68
 
66
69
  CODE_UNKNOWN_OPTION = "unknown_option"
@@ -93,6 +93,8 @@ _UNSETTLED_REASON = (
93
93
 
94
94
  #: A write the CLI skipped because it would change nothing (see ``view transform``).
95
95
  _NO_CHANGE_STATUS = "no_change"
96
+ #: ``file upload``'s status when its job made no dataset (``commands.file.NO_DATASET_STATUS``).
97
+ _NO_DATASET_STATUS = "no_dataset"
96
98
 
97
99
 
98
100
  def with_verify(data: Any, invocation: Invocation | None = None) -> Any:
@@ -351,7 +353,7 @@ def _verify_and_reason(
351
353
  ``reason`` is set whenever ``verified`` is ``False`` (a failure or a
352
354
  no-op) and for a staged draft; it is ``None`` for an ordinary success.
353
355
  A failure never sets ``needs_user`` -- see :func:`_needs_user`, which
354
- covers only the two outcomes serious enough to interrupt the caller.
356
+ covers only the outcomes serious enough to interrupt the caller.
355
357
  """
356
358
  if data.get("changed") is False:
357
359
  message = data.get("message")
@@ -431,7 +433,7 @@ def _needs_user(
431
433
  rows_before: int | None,
432
434
  rows_after: int | None,
433
435
  ) -> str | None:
434
- """The only two outcomes worth interrupting the caller for.
436
+ """The few outcomes worth interrupting the caller for.
435
437
 
436
438
  ``needs_user`` means "a serious outcome the user must hear about before
437
439
  anything is built on it" -- never "something went wrong that you can
@@ -443,6 +445,10 @@ def _needs_user(
443
445
  """
444
446
  if not verified:
445
447
  return None
448
+ if data.get("status") == _NO_DATASET_STATUS:
449
+ # An upload that made no dataset (a PDF awaiting table extraction).
450
+ message = data.get("message")
451
+ return message if isinstance(message, str) else "The upload made no dataset."
446
452
  if rows_after == 0 and isinstance(rows_before, int) and rows_before > 0:
447
453
  return f"The change left the view with no rows (was {rows_before})."
448
454
  join_check = data.get("join_check")
@@ -70,10 +70,14 @@ class FieldSpec:
70
70
 
71
71
  @property
72
72
  def enum_values(self) -> list[str] | None:
73
- """The member values, if this field's type is a string enum."""
73
+ """The member values, if this field's type is a string enum or a ``Literal`` of them."""
74
74
  target = self.resolved_type
75
75
  if isinstance(target, type) and issubclass(target, enum.Enum):
76
76
  return [member.value for member in target]
77
+ if get_origin(target) is typing.Literal:
78
+ values = get_args(target)
79
+ if values and all(isinstance(value, str) for value in values):
80
+ return list(values)
77
81
  return None
78
82
 
79
83
  @property
@@ -62,6 +62,9 @@ _HANDLER_OWNED_FIELDS: dict[str, frozenset[str]] = {
62
62
  # ``job get`` is an immediate status read; only wait commands implement
63
63
  # the CLI's timeout/polling behavior.
64
64
  "job.get": frozenset({"timeout"}),
65
+ # ``view export rest-fill`` always waits for its job, bounded by ``--job-timeout``
66
+ # (``--return-running`` hands back the running job); the SDK's own switches are not inputs.
67
+ "view.export.rest-fill": frozenset({"wait", "timeout"}),
65
68
  # ``PipelineAPI.get_draft_status`` carries a legacy ``dataset_id`` alongside
66
69
  # the ``dataview_id`` the handler forwards from the view positional; the
67
70
  # handler never reads it, so it must not be advertised as an --input field.
@@ -105,6 +108,10 @@ _EXAMPLE_INPUT_HINTS: dict[str, dict[str, Any]] = {
105
108
  # bare ``<field>``: the values are the ones the API documents (OpenAPI enums, or
106
109
  # the SDK method's own docstring/validator), so each example is a call that works.
107
110
  "agent.message.set-request-kind": {"request_kind": "ask"},
111
+ # The sampled 1 is outside the server's 60..3600 seconds (#283).
112
+ "dashboard.embed.lifetime.set": {"token_ttl": 900},
113
+ # The format is the point of this command; csv has its own (#282).
114
+ "view.export.download": {"file_type": "xml"},
108
115
  "support.plan.update-entitlements": {"values": {"dashboardBranding": "no_branding"}},
109
116
  # Server-master routes: drill, rows behind a mark, describe-a-chart, chart types,
110
117
  # file routing and connector drafts.