mammoth-cli 2.0.37__tar.gz → 2.0.38__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 (221) hide show
  1. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/PKG-INFO +2 -2
  2. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +26 -2
  4. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +22 -11
  5. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +1 -1
  6. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +2 -2
  7. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +20 -0
  8. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/registry.py +2 -0
  9. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/schema.py +16 -4
  10. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/view.py +25 -1
  11. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/view_ops.py +34 -3
  12. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/input_fields.py +3 -0
  13. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/pyproject.toml +2 -2
  14. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/view.yaml +82 -0
  15. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/sdk-catalog.source.yaml +14 -0
  16. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/sdk-methods.yaml +24 -0
  17. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/.gitignore +0 -0
  18. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/LICENSE +0 -0
  19. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/README.md +0 -0
  20. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/__main__.py +0 -0
  21. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/app.py +0 -0
  22. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  23. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  24. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  25. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  26. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  27. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  28. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  29. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  30. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  31. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  32. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  33. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  34. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  35. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  36. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  37. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  38. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  39. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  40. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  41. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  42. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  43. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  44. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  45. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  46. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  47. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  48. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  49. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  50. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  51. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  52. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  53. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  54. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  55. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  56. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  57. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  58. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  59. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  60. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  61. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  62. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  63. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  64. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  65. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  66. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  67. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  68. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  69. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  70. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  71. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  72. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  73. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  74. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  75. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  76. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  77. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  78. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  79. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  80. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  81. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  82. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  83. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  84. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  85. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  86. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/__init__.py +0 -0
  87. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/activity.py +0 -0
  88. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/addon.py +0 -0
  89. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/agent.py +0 -0
  90. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/ai.py +0 -0
  91. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/annotation.py +0 -0
  92. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/auth.py +0 -0
  93. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/automation.py +0 -0
  94. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/batch.py +0 -0
  95. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/billing.py +0 -0
  96. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/browse.py +0 -0
  97. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/capability.py +0 -0
  98. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/client_app.py +0 -0
  99. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/completion.py +0 -0
  100. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/config.py +0 -0
  101. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/connector.py +0 -0
  102. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/context.py +0 -0
  103. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/dashboard.py +0 -0
  104. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/data_app.py +0 -0
  105. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/dataset.py +0 -0
  106. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/doctor.py +0 -0
  107. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/external_key.py +0 -0
  108. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/file.py +0 -0
  109. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/folder.py +0 -0
  110. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/job.py +0 -0
  111. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/notification.py +0 -0
  112. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/parameter.py +0 -0
  113. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/project.py +0 -0
  114. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/report.py +0 -0
  115. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/schedule.py +0 -0
  116. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/skill.py +0 -0
  117. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/snippet.py +0 -0
  118. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/support.py +0 -0
  119. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/template.py +0 -0
  120. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/trash.py +0 -0
  121. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/upgrade.py +0 -0
  122. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/user.py +0 -0
  123. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/webhook.py +0 -0
  124. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/workflow.py +0 -0
  125. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/commands/workspace.py +0 -0
  126. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/context/__init__.py +0 -0
  127. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/context/credentials.py +0 -0
  128. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/context/endpoint.py +0 -0
  129. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/context/profiles.py +0 -0
  130. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/context/resolver.py +0 -0
  131. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/contracts/__init__.py +0 -0
  132. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/contracts/auth.py +0 -0
  133. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/errors/__init__.py +0 -0
  134. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/errors/envelope.py +0 -0
  135. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/manifest/__init__.py +0 -0
  136. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/manifest/loader.py +0 -0
  137. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/messages/__init__.py +0 -0
  138. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/output/__init__.py +0 -0
  139. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/output/envelope.py +0 -0
  140. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/output/normalize.py +0 -0
  141. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/output/policy.py +0 -0
  142. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/output/progress.py +0 -0
  143. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/output/render.py +0 -0
  144. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/py.typed +0 -0
  145. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/__init__.py +0 -0
  146. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/confirm.py +0 -0
  147. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/dryrun.py +0 -0
  148. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/executor.py +0 -0
  149. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/input_loader.py +0 -0
  150. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/invocation.py +0 -0
  151. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/options.py +0 -0
  152. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/parents.py +0 -0
  153. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/runlog.py +0 -0
  154. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/session.py +0 -0
  155. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/strict.py +0 -0
  156. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/updates.py +0 -0
  157. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/runtime/validate.py +0 -0
  158. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/__init__.py +0 -0
  159. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/argspec.py +0 -0
  160. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/coerce.py +0 -0
  161. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/command_contract.py +0 -0
  162. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/conditions.py +0 -0
  163. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/dispatch.py +0 -0
  164. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/factory.py +0 -0
  165. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/mapping.py +0 -0
  166. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/openapi_types.py +0 -0
  167. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/positionals.py +0 -0
  168. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/protocol.py +0 -0
  169. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/sdk_service.py +0 -0
  170. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/testing.py +0 -0
  171. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/services/type_system.py +0 -0
  172. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/skills/__init__.py +0 -0
  173. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/skills/installer.py +0 -0
  174. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/skills/steering.py +0 -0
  175. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/mammoth_cli/testing.py +0 -0
  176. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/activity.yaml +0 -0
  177. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/addon.yaml +0 -0
  178. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/agent.yaml +0 -0
  179. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/ai.yaml +0 -0
  180. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/annotation.yaml +0 -0
  181. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/auth.yaml +0 -0
  182. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/automation.yaml +0 -0
  183. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/batch.yaml +0 -0
  184. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/billing.yaml +0 -0
  185. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/browse.yaml +0 -0
  186. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/capability.yaml +0 -0
  187. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/client-app.yaml +0 -0
  188. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/completion.yaml +0 -0
  189. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/config.yaml +0 -0
  190. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/connector.yaml +0 -0
  191. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/context.yaml +0 -0
  192. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/dashboard.yaml +0 -0
  193. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/data-app.yaml +0 -0
  194. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/dataset.yaml +0 -0
  195. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/doctor.yaml +0 -0
  196. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/external-key.yaml +0 -0
  197. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/file.yaml +0 -0
  198. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/folder.yaml +0 -0
  199. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/job.yaml +0 -0
  200. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/log.yaml +0 -0
  201. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/notification.yaml +0 -0
  202. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/parameter.yaml +0 -0
  203. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/project.yaml +0 -0
  204. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/report.yaml +0 -0
  205. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/schedule.yaml +0 -0
  206. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/schema.yaml +0 -0
  207. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/skill.yaml +0 -0
  208. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/snippet.yaml +0 -0
  209. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/support.yaml +0 -0
  210. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/template.yaml +0 -0
  211. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/trash.yaml +0 -0
  212. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/upgrade.yaml +0 -0
  213. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/user.yaml +0 -0
  214. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/version.yaml +0 -0
  215. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/webhook.yaml +0 -0
  216. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/workflow.yaml +0 -0
  217. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/commands/workspace.yaml +0 -0
  218. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/openapi-operations.yaml +0 -0
  219. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/manifests/schema-v1.json +0 -0
  220. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/spec/openapi/metadata.json +0 -0
  221. {mammoth_cli-2.0.37 → mammoth_cli-2.0.38}/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.37
3
+ Version: 2.0.38
4
4
  Summary: Command-line interface for the Mammoth Analytics platform
5
5
  Project-URL: homepage, https://mammoth.io
6
6
  Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
@@ -17,7 +17,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
17
  Requires-Python: <3.15,>=3.12
18
18
  Requires-Dist: jsonschema>=4.20
19
19
  Requires-Dist: keyring<26,>=25.7
20
- Requires-Dist: mammoth-io<0.8,>=0.7.16
20
+ Requires-Dist: mammoth-io<0.8,>=0.7.17
21
21
  Requires-Dist: platformdirs<5,>=4.10
22
22
  Requires-Dist: pydantic<3,>=2.13
23
23
  Requires-Dist: pyyaml<7,>=6
@@ -6,7 +6,7 @@ not implement a second HTTP client and does not call private SDK members.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "2.0.37"
9
+ __version__ = "2.0.38"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mammoth-cli
3
- version: 2.0.37
3
+ version: 2.0.38
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
 
@@ -76,17 +76,41 @@ mammoth view transform --help # every data transformation
76
76
  | Blanks to a constant, or to the previous row's value | `view transform set-values` (`IS_EMPTY`), `view transform fill-missing` |
77
77
  | Clean text | `view transform text`, `replace`, `bulk-replace` |
78
78
  | Change a column's type | `view transform convert-type` |
79
+ | Rename a column, sort the rows (view settings, not tasks) | `view transform rename-columns`, `view transform sort` |
79
80
  | Rank, running total, previous row | `view transform window` |
80
81
  | A dashboard | `dashboard create-blank` ([dashboards](references/recipes/dashboards.md)) |
81
82
  | Deliver the rows | `view export csv`, `view export postgres` (and other destinations), `view export dataset` |
82
83
 
83
84
  A search with no full match returns `suggestions` and a `hint`. Before you
84
85
  conclude the CLI cannot do something the web app does, check
85
- `view transform --help` and "Not a pipeline step" in
86
+ `view transform --help` and "View settings, and what has no command" in
86
87
  [about Mammoth](references/about-mammoth.md). Do not switch to the web app
87
88
  in a browser, or compute the result locally, for work the CLI covers;
88
89
  report a real gap with the command you tried.
89
90
 
91
+ ## Several files, one deliverable
92
+
93
+ Users often upload related files without saying how they relate ("make a
94
+ dashboard from t_a and t_b"). Work it out from the data before you build:
95
+
96
+ 1. Read every view first: `view get VIEW_ID` (columns, types, row count) and
97
+ `view data get VIEW_ID --input '{"limit": 20}'`.
98
+ 2. Find the keys. A column in one view whose values appear in a column of
99
+ the other (`customer_id` and `id`, `order_ref` and `order_no`) is a
100
+ foreign key; the view with many rows per key is the main one.
101
+ 3. Make the keys match before the join: same type (`convert-type`), same
102
+ case and padding (`text`), no blanks (`set-values`, `filter`).
103
+ 4. Fix what the deliverable needs: numbers stored as text (`convert-type`
104
+ to `NUMERIC`), dates stored as text (`convert-type` to `DATE`), blanks.
105
+ 5. `view transform join` the lookup view into the main view (`LEFT`), then
106
+ read back and check the match rate
107
+ ([worked example](references/recipes/end-to-end.md), step 5).
108
+ 6. Build the dashboard from the joined view
109
+ ([dashboards](references/recipes/dashboards.md)).
110
+
111
+ Say what you inferred (which columns you joined on, what you converted) in
112
+ your report. If no column links the files, ask before you combine them.
113
+
90
114
  ## Calling a command
91
115
 
92
116
  - Ids are positionals; request fields are one `--input '{...}'` document;
@@ -100,6 +100,8 @@ Checkpoint Alert are the `view data-check` and `view checkpoint` families.
100
100
  | Shift a date by an interval | Add / Subtract Date Values | `increment-date` |
101
101
  | Add an empty column | Add Column | `add-column` |
102
102
  | Copy a column under a new name | Copy Columns | `copy-columns` |
103
+ | Rename a column | Rename (column header) | `rename-columns` (a view setting, not a task) |
104
+ | Sort the rows | Sort (grid) | `sort` (a view setting, not a task) |
103
105
  | Remove columns | Remove Column | `delete-columns` |
104
106
  | Add columns from another view by matching keys | Join | `join` (`INNER`, `LEFT`, `RIGHT`, `OUTER`) |
105
107
  | Bring one value per key from another view | Lookup | `lookup` |
@@ -117,15 +119,24 @@ value per key into one new column. Before either, confirm the key columns
117
119
  in both views have the same type and values; recipes/transforms.md has the
118
120
  read-back.
119
121
 
120
- ## Not a pipeline step, and the nearest route
122
+ ## View settings, and what has no command
123
+
124
+ Two commands change how the view shows its rows, not the rows. They add no
125
+ pipeline task, like their web counterparts (a column-header rename, a grid
126
+ sort):
127
+
128
+ - **Rename a column:** `view transform rename-columns` with `{"renames":
129
+ {"cust_id": "Customer ID"}}`. The column keeps its internal name, so
130
+ earlier tasks keep working; later commands, data reads, exports and
131
+ dashboards use the new name. To name a column you create, use its
132
+ `new_column` or `as_name` field instead.
133
+ - **Sort the rows:** `view transform sort` with `{"order_by": [["Revenue",
134
+ "DESC"]]}` (up to three columns; `[]` clears it). Data reads and exports
135
+ return rows in this order. To keep only the top N rows, use `limit-rows`
136
+ with `order_by`; for a rank column, `window` (`RANK`, `ROW_NUMBER`).
137
+
138
+ No command:
121
139
 
122
- - **Rename a column.** The web app's rename is a display change, not a
123
- task; the CLI has no rename command. Name new columns when you create them
124
- (`new_column`, `as_name`); for an existing column, `copy-columns` under
125
- the new name.
126
- - **Sort.** There is no sort task, and the CLI has no sort command. For
127
- "top N by X" use `limit-rows` with `order_by`; for a rank column use
128
- `window` (`RANK`, `ROW_NUMBER`).
129
140
  - **Union or append two views.** There is no union task. Upload a file into
130
141
  an existing dataset with `append_to_ds_id`, or send a view's rows into an
131
142
  existing dataset with `view export dataset` (`target_ds_id` and
@@ -139,6 +150,6 @@ Both call the same API. Do not switch to the web app in a browser for a
139
150
  task the CLI covers. Before you conclude that the CLI cannot do something,
140
151
  run `mammoth view transform --help`, search in plain words (`mammoth schema
141
152
  find "merge two datasets"` finds `join`; a search with no full match lists
142
- `suggestions`), and read the section above. If it is still missing, report
143
- the gap with the command you tried; do not work around it in the browser or
144
- by computing the result locally.
153
+ `suggestions`), and read "View settings, and what has no command" above.
154
+ If it is still missing, report the gap with the command you tried; do not
155
+ work around it in the browser or by computing the result locally.
@@ -1,7 +1,7 @@
1
1
  # What is proven on release
2
2
 
3
3
  Generated from `docs/release-capability-matrix.json`; do not edit by hand.
4
- The CLI publishes 554 commands. 455 of them bind one of the 528 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (every `view transform *` command submits through `view.task.add`). 262 bound commands ran once successfully on release, 2 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer.
4
+ The CLI publishes 556 commands. 455 of them bind one of the 528 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (`view transform *` commands submit through `view.task.add`, except `rename-columns` and `sort`, which set view display properties through `view.update`). 262 bound commands ran once successfully on release, 2 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer.
5
5
 
6
6
  Status meanings:
7
7
 
@@ -1,6 +1,6 @@
1
1
  # Published CLI command catalog
2
2
 
3
- This generated catalog is a lookup table for every command in the published CLI manifest, currently 554; each entry carries its release status line. It is a command-contract index, not an assertion that every backend/OpenAPI operation has a CLI binding. For an exact local CLI contract, run `mammoth schema get COMMAND_ID`; `mammoth capability list` is an API-binding inventory and can omit typed/local CLI routes. For focused workflows, read the [recipes index](recipes/index.md). Sensitive structured input must come from a private file or pipe; never put secrets in literal argv.
3
+ This generated catalog is a lookup table for every command in the published CLI manifest, currently 556; each entry carries its release status line. It is a command-contract index, not an assertion that every backend/OpenAPI operation has a CLI binding. For an exact local CLI contract, run `mammoth schema get COMMAND_ID`; `mammoth capability list` is an API-binding inventory and can omit typed/local CLI routes. For focused workflows, read the [recipes index](recipes/index.md). Sensitive structured input must come from a private file or pipe; never put secrets in literal argv.
4
4
 
5
5
  Load only the applicable domain file:
6
6
 
@@ -43,7 +43,7 @@ Load only the applicable domain file:
43
43
  - [upgrade](commands/upgrade.md) — 1 published commands
44
44
  - [user](commands/user.md) — 8 published commands
45
45
  - [version](commands/version.md) — 1 published commands
46
- - [view](commands/view.md) — 116 published commands
46
+ - [view](commands/view.md) — 118 published commands
47
47
  - [webhook](commands/webhook.md) — 7 published commands
48
48
  - [workflow](commands/workflow.md) — 16 published commands
49
49
  - [workspace](commands/workspace.md) — 20 published commands
@@ -1034,6 +1034,16 @@ Result: `ViewTransformPivotResult`; mutation `reversible_pipeline`, confirmation
1034
1034
 
1035
1035
  Status on release: ran once on CLI 2.0.18 through `view.task.add` and was read back with `view data get`; other inputs for this transform are untried.
1036
1036
 
1037
+ ### `view.transform.rename-columns`
1038
+
1039
+ Run: `mammoth view transform rename-columns`. Exact input fields: `mammoth schema get view.transform.rename-columns`.
1040
+
1041
+ Example: `mammoth view transform rename-columns 123 --input '{"renames": {"cust_id": "Customer ID"}, "dataset_id": 456}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
1042
+
1043
+ Result: `ViewTransformRenameColumnsResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
1044
+
1045
+ Status on release: untried; it submits through `view.task.add`, but this transform was not among those run.
1046
+
1037
1047
  ### `view.transform.replace`
1038
1048
 
1039
1049
  Run: `mammoth view transform replace`. Exact input fields: `mammoth schema get view.transform.replace`.
@@ -1064,6 +1074,16 @@ Result: `ViewTransformSmallLargeResult`; mutation `reversible_pipeline`, confirm
1064
1074
 
1065
1075
  Status on release: untried; it submits through `view.task.add`, but this transform was not among those run.
1066
1076
 
1077
+ ### `view.transform.sort`
1078
+
1079
+ Run: `mammoth view transform sort`. Exact input fields: `mammoth schema get view.transform.sort`.
1080
+
1081
+ Example: `mammoth view transform sort 123 --input '{"order_by": [["Revenue", "DESC"]], "dataset_id": 456}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
1082
+
1083
+ Result: `ViewTransformSortResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
1084
+
1085
+ Status on release: untried; it submits through `view.task.add`, but this transform was not among those run.
1086
+
1067
1087
  ### `view.transform.split`
1068
1088
 
1069
1089
  Run: `mammoth view transform split`. Exact input fields: `mammoth schema get view.transform.split`.
@@ -684,9 +684,11 @@ HANDLERS: dict[str, Handler] = {
684
684
  "view.transform.lookup": view_ops_cmd.view_transform_lookup,
685
685
  "view.transform.math": view_ops_cmd.view_transform_math,
686
686
  "view.transform.pivot": view_ops_cmd.view_transform_pivot,
687
+ "view.transform.rename-columns": view_ops_cmd.view_transform_rename_columns,
687
688
  "view.transform.replace": view_ops_cmd.view_transform_replace,
688
689
  "view.transform.set-values": view_ops_cmd.view_transform_set_values,
689
690
  "view.transform.small-large": view_ops_cmd.view_transform_small_large,
691
+ "view.transform.sort": view_ops_cmd.view_transform_sort,
690
692
  "view.transform.split": view_ops_cmd.view_transform_split,
691
693
  "view.transform.substring": view_ops_cmd.view_transform_substring,
692
694
  "view.transform.text": view_ops_cmd.view_transform_text,
@@ -89,11 +89,11 @@ _COMMAND_DISCOVERY_PURPOSES = {
89
89
  "view.transform.convert-type": (
90
90
  "convert type cast numeric number text date column parse to number to date"
91
91
  ),
92
- "view.transform.copy-columns": "copy duplicate rename column into a new column name",
92
+ "view.transform.copy-columns": "copy duplicate column into a new column",
93
93
  "view.transform.crosstab": (
94
94
  "crosstab cross tab pivot table matrix rows by columns summary into a new dataset"
95
95
  ),
96
- "view.transform.date-diff": "date difference days between two date columns age duration",
96
+ "view.transform.date-diff": "date dates difference days between two date columns age duration",
97
97
  "view.transform.delete-columns": "delete drop remove columns",
98
98
  "view.transform.discard-duplicates": (
99
99
  "duplicate duplicates dedup dedupe deduplicate remove repeated rows unique distinct"
@@ -117,7 +117,7 @@ _COMMAND_DISCOVERY_PURPOSES = {
117
117
  "second view views dataset datasets table tables vlookup"
118
118
  ),
119
119
  "view.transform.json-extract": "json extract parse nested fields keys into columns",
120
- "view.transform.limit-rows": "limit top bottom first last n rows order by sorted head",
120
+ "view.transform.limit-rows": "limit top bottom first last n rows head",
121
121
  "view.transform.lookup": (
122
122
  "lookup look up vlookup reference table map code to name enrich one value "
123
123
  "from another view dataset"
@@ -130,12 +130,19 @@ _COMMAND_DISCOVERY_PURPOSES = {
130
130
  "pivot group by aggregate aggregation sum count average summary summarize "
131
131
  "summarise per region total"
132
132
  ),
133
+ "view.transform.rename-columns": (
134
+ "rename column columns header headers relabel change column name names title"
135
+ ),
133
136
  "view.transform.replace": "find replace substitute text value in columns",
134
137
  "view.transform.set-values": (
135
138
  "set values assign overwrite blank empty default where condition label "
136
139
  "category bucket flag if then conditional value"
137
140
  ),
138
141
  "view.transform.small-large": "nth smallest largest value across columns",
142
+ "view.transform.sort": (
143
+ "sort sorting order rows by column ascending descending asc desc arrange "
144
+ "highest lowest newest oldest latest earliest date dates alphabetical"
145
+ ),
139
146
  "view.transform.split": "split column by delimiter separator into columns",
140
147
  "view.transform.substring": "substring left right characters regex pattern extract part text",
141
148
  "view.transform.text": (
@@ -404,7 +411,12 @@ def _tokens(value: str) -> frozenset[str]:
404
411
 
405
412
 
406
413
  def _query_tokens(query: str) -> tuple[str, ...]:
407
- return tuple(token for token in _tokens(query) if token not in _DISCOVERY_STOPWORDS)
414
+ # Bare numbers ("top 10") are values, not intent words.
415
+ return tuple(
416
+ token
417
+ for token in _tokens(query)
418
+ if token not in _DISCOVERY_STOPWORDS and not token.isdigit()
419
+ )
408
420
 
409
421
 
410
422
  def _token_aliases(token: str) -> frozenset[str]:
@@ -252,10 +252,33 @@ BRIEF_VIEW_FIELDS: tuple[str, ...] = (
252
252
  )
253
253
 
254
254
 
255
+ def apply_column_renames(record: Any) -> Any:
256
+ """Show renamed columns under their new names in a dataview record.
257
+
258
+ A rename (``view transform rename-columns`` or the web grid) is stored in
259
+ ``display_properties.COLUMN_NAMES`` as ``{internal_name: name}``; the
260
+ server's ``metadata`` keeps the name the pipeline produced. Every CLI
261
+ output uses the name the user sees, so the rename wins.
262
+ """
263
+ if not isinstance(record, dict):
264
+ return record
265
+ display = record.get("display_properties")
266
+ renames = display.get("COLUMN_NAMES") if isinstance(display, dict) else None
267
+ metadata = record.get(_METADATA_KEY)
268
+ if not isinstance(renames, dict) or not renames or not isinstance(metadata, list):
269
+ return record
270
+ columns = []
271
+ for column in metadata:
272
+ new_name = renames.get(column.get(_INTERNAL_NAME_KEY)) if isinstance(column, dict) else None
273
+ columns.append({**column, _DISPLAY_NAME_KEY: new_name} if new_name else column)
274
+ return {**record, _METADATA_KEY: columns}
275
+
276
+
255
277
  def brief_view_record(record: Any) -> Any:
256
- """Keep only :data:`BRIEF_VIEW_FIELDS` of a dataview record."""
278
+ """Keep only :data:`BRIEF_VIEW_FIELDS` of a dataview record, renames applied."""
257
279
  if not isinstance(record, dict):
258
280
  return record
281
+ record = apply_column_renames(record)
259
282
  return {key: record[key] for key in BRIEF_VIEW_FIELDS if key in record}
260
283
 
261
284
 
@@ -369,6 +392,7 @@ def _dataview_metadata(
369
392
  )
370
393
  except Exception: # noqa: BLE001 -- labels are a presentation nicety, never fatal
371
394
  return []
395
+ info = apply_column_renames(info)
372
396
  metadata = info.get(_METADATA_KEY) if isinstance(info, dict) else None
373
397
  if not isinstance(metadata, list):
374
398
  return []
@@ -24,6 +24,7 @@ from typing import Any
24
24
  from mammoth_cli.commands.view import (
25
25
  BRIEF_VIEW_FIELDS,
26
26
  _require_discovery_allowed,
27
+ apply_column_renames,
27
28
  brief_view_record,
28
29
  )
29
30
  from mammoth_cli.context import profiles
@@ -478,20 +479,28 @@ def view_get(invocation: Invocation) -> HandlerResult:
478
479
  kwargs: dict[str, Any] = {
479
480
  "dataset_id": dataset_id,
480
481
  "dataview_id": view_id,
481
- # Server-side projection; the brief set unless the caller asks.
482
+ # Server-side projection; the brief set (plus the display
483
+ # properties that carry column renames) unless the caller asks.
482
484
  "fields": document.get("fields")
483
- or ",".join(key for key in BRIEF_VIEW_FIELDS if key != "dataset_id"),
485
+ or ",".join(
486
+ [key for key in BRIEF_VIEW_FIELDS if key != "dataset_id"] + ["display_properties"]
487
+ ),
484
488
  }
485
489
  with open_service(invocation) as (service, auth):
486
490
  data = service.call("mammoth.api.dataviews.DataviewsAPI.get", **kwargs)
487
491
  parents.remember(_profile_name(invocation), auth.workspace_id, {view_id: dataset_id})
492
+ data = apply_column_renames(data) if document.get("fields") else brief_view_record(data)
488
493
  return data, _meta(invocation, auth.workspace_id)
489
494
  context: dict[str, Any] = {"view_id": view_id}
490
495
  if dataset_id is not None:
491
496
  context["dataset_id"] = dataset_id
492
497
  # The generated contract predates the optional parent context; preserve
493
498
  # its declared fields, then add the validated SDK parent explicitly.
494
- binding_document = {key: value for key, value in document.items() if key != "dataset_id"}
499
+ # ``fields`` projects the exact-parent route only; the discovery route
500
+ # returns the full record, trimmed below unless ``fields`` was asked for.
501
+ binding_document = {
502
+ key: value for key, value in document.items() if key not in ("dataset_id", "fields")
503
+ }
495
504
  kwargs = bind_command_inputs(invocation.command_id, binding_document, view_id=view_id)
496
505
  if dataset_id is not None:
497
506
  kwargs["dataset_id"] = dataset_id
@@ -503,6 +512,8 @@ def view_get(invocation: Invocation) -> HandlerResult:
503
512
  # The discovery path returns the standard record; trim it to the same
504
513
  # brief shape the exact path asks the server for.
505
514
  payload = brief_view_record(payload)
515
+ else:
516
+ payload = apply_column_renames(payload)
506
517
  return payload, _meta(invocation, auth.workspace_id)
507
518
 
508
519
 
@@ -794,6 +805,26 @@ def view_transform_limit_rows(invocation: Invocation) -> HandlerResult:
794
805
  return _dispatch_view(invocation, view_id, "limit_rows", **kwargs)
795
806
 
796
807
 
808
+ def view_transform_rename_columns(invocation: Invocation) -> HandlerResult:
809
+ """Rename columns (a view display setting, not a task). ``renames`` is required."""
810
+ view_id = _view_id(invocation)
811
+ document = invocation.load_input()
812
+ _require_field(document, "renames")
813
+ assert document is not None
814
+ kwargs = _bind_transform_inputs(invocation, document)
815
+ return _dispatch_view(invocation, view_id, "rename_columns", **kwargs)
816
+
817
+
818
+ def view_transform_sort(invocation: Invocation) -> HandlerResult:
819
+ """Set the view's row order (a display setting, not a task). ``order_by`` is required."""
820
+ view_id = _view_id(invocation)
821
+ document = invocation.load_input()
822
+ _require_field(document, "order_by")
823
+ assert document is not None
824
+ kwargs = _bind_transform_inputs(invocation, document)
825
+ return _dispatch_view(invocation, view_id, "sort_rows", **kwargs)
826
+
827
+
797
828
  def view_transform_lookup(invocation: Invocation) -> HandlerResult:
798
829
  """Look up values from another view. ``source``/``lookup_view_id``/``key``/
799
830
  ``value`` required."""
@@ -48,6 +48,9 @@ _EXAMPLE_INPUT_HINTS: dict[str, dict[str, Any]] = {
48
48
  "existing_column": "Status",
49
49
  "condition": {"column": "Status", "operator": "IS_EMPTY"},
50
50
  },
51
+ # View display settings: real column names read better than sample keys.
52
+ "view.transform.rename-columns": {"renames": {"cust_id": "Customer ID"}},
53
+ "view.transform.sort": {"order_by": [["Revenue", "DESC"]]},
51
54
  # The backend requires integer resource ids ("resource_ids must be
52
55
  # comma-separated integers"); the SDK annotation is a plain list[str].
53
56
  "project.resource-dependencies": {"resource_ids": [456]},
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.0.37"
3
+ version = "2.0.38"
4
4
  description = "Command-line interface for the Mammoth Analytics platform"
5
5
  authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
6
6
  readme = "README.md"
7
7
  license = "LicenseRef-Proprietary"
8
8
  requires-python = ">=3.12,<3.15"
9
9
  dependencies = [
10
- "mammoth-io (>=0.7.16,<0.8)",
10
+ "mammoth-io (>=0.7.17,<0.8)",
11
11
  "typer (>=0.27,<0.28)",
12
12
  "rich (>=15,<16)",
13
13
  "platformdirs (>=4.10,<5)",
@@ -4543,6 +4543,47 @@ commands:
4543
4543
  must be a display name that does not already exist on the view (4DTVW018 SAME_DISPLAY_NAME_CANNOT_BE_REUSED):
4544
4544
  aggregate a joined column under a new name.'
4545
4545
  reviewed_by: primary
4546
+ - command_id: view.transform.rename-columns
4547
+ command_path: view transform rename-columns
4548
+ disposition: command
4549
+ alias_of: null
4550
+ operation_ids:
4551
+ - Patch
4552
+ positionals:
4553
+ - name: view_id
4554
+ type: int
4555
+ required: true
4556
+ metavar: VIEW_ID
4557
+ falls_back_to_field: null
4558
+ help: ID of the view to act on.
4559
+ options: []
4560
+ sdk_symbol: mammoth._mixins._column_ops.ColumnOpsMixin.rename_columns
4561
+ sdk_conversion: Call mammoth._mixins._column_ops.ColumnOpsMixin.rename_columns with validated request
4562
+ fields.
4563
+ request_model: ViewTransformRenameColumnsRequest
4564
+ result_model: ViewTransformRenameColumnsResult
4565
+ mutation_class: benign_mutation
4566
+ confirmation: none
4567
+ wait_policy: not_async
4568
+ pagination_policy: none
4569
+ acceptance_evidence: live_disposable_project
4570
+ live_test: LT-VIEW-TRANSFORM-RENAME-COLUMNS
4571
+ live_exemption_reason: null
4572
+ contract_fixture: null
4573
+ required_fixture_guard: null
4574
+ secret_fields: []
4575
+ human_example: mammoth view transform rename-columns VIEW_ID --help
4576
+ agent_example: 'mammoth view transform rename-columns 123 --input ''{"renames": {"cust_id": "Customer ID"}, "dataset_id": 456}'''
4577
+ unit_tests:
4578
+ - UT-VIEW-TRANSFORM-RENAME-COLUMNS
4579
+ contract_tests:
4580
+ - CT-VIEW-TRANSFORM-RENAME-COLUMNS-HUMAN
4581
+ - CT-VIEW-TRANSFORM-RENAME-COLUMNS-JSON
4582
+ - CT-VIEW-TRANSFORM-RENAME-COLUMNS-ERROR
4583
+ draft_test: null
4584
+ undo_test: null
4585
+ known_restrictions: 'A view display setting (the web grid''s column rename), not a pipeline task: it changes no data and adds no task.'
4586
+ reviewed_by: primary
4546
4587
  - command_id: view.transform.replace
4547
4588
  command_path: view transform replace
4548
4589
  disposition: command
@@ -4666,6 +4707,47 @@ commands:
4666
4707
  undo_test: LT-VIEW-TRANSFORM-SMALL-LARGE-UNDO
4667
4708
  known_restrictions: null
4668
4709
  reviewed_by: primary
4710
+ - command_id: view.transform.sort
4711
+ command_path: view transform sort
4712
+ disposition: command
4713
+ alias_of: null
4714
+ operation_ids:
4715
+ - Patch
4716
+ positionals:
4717
+ - name: view_id
4718
+ type: int
4719
+ required: true
4720
+ metavar: VIEW_ID
4721
+ falls_back_to_field: null
4722
+ help: ID of the view to act on.
4723
+ options: []
4724
+ sdk_symbol: mammoth._mixins._row_ops.RowOpsMixin.sort_rows
4725
+ sdk_conversion: Call mammoth._mixins._row_ops.RowOpsMixin.sort_rows with validated request
4726
+ fields.
4727
+ request_model: ViewTransformSortRequest
4728
+ result_model: ViewTransformSortResult
4729
+ mutation_class: benign_mutation
4730
+ confirmation: none
4731
+ wait_policy: not_async
4732
+ pagination_policy: none
4733
+ acceptance_evidence: live_disposable_project
4734
+ live_test: LT-VIEW-TRANSFORM-SORT
4735
+ live_exemption_reason: null
4736
+ contract_fixture: null
4737
+ required_fixture_guard: null
4738
+ secret_fields: []
4739
+ human_example: mammoth view transform sort VIEW_ID --help
4740
+ agent_example: 'mammoth view transform sort 123 --input ''{"order_by": [["Revenue", "DESC"]], "dataset_id": 456}'''
4741
+ unit_tests:
4742
+ - UT-VIEW-TRANSFORM-SORT
4743
+ contract_tests:
4744
+ - CT-VIEW-TRANSFORM-SORT-HUMAN
4745
+ - CT-VIEW-TRANSFORM-SORT-JSON
4746
+ - CT-VIEW-TRANSFORM-SORT-ERROR
4747
+ draft_test: null
4748
+ undo_test: null
4749
+ known_restrictions: 'A view display setting (the web grid''s sort), not a pipeline task: data reads and exports return rows in this order. At most three columns.'
4750
+ reviewed_by: primary
4669
4751
  - command_id: view.transform.split
4670
4752
  command_path: view transform split
4671
4753
  disposition: command
@@ -106,6 +106,13 @@ sdk_methods:
106
106
  pagination_policy: null
107
107
  openapi_operation_ids: []
108
108
  notes: Standard transformation policy; task deletion restores columns only when the task ID is stable.
109
+ - sdk_symbol: mammoth._mixins._column_ops.ColumnOpsMixin.rename_columns
110
+ canonical_command: view.transform.rename-columns
111
+ alias_of: null
112
+ mutation_class: benign_mutation
113
+ wait_policy: not_async
114
+ pagination_policy: null
115
+ openapi_operation_ids: []
109
116
  - sdk_symbol: mammoth._mixins._date_ops.DateOpsMixin.date_diff
110
117
  canonical_command: view.transform.date-diff
111
118
  alias_of: null
@@ -193,6 +200,13 @@ sdk_methods:
193
200
  wait_policy: always_wait
194
201
  pagination_policy: null
195
202
  openapi_operation_ids: []
203
+ - sdk_symbol: mammoth._mixins._row_ops.RowOpsMixin.sort_rows
204
+ canonical_command: view.transform.sort
205
+ alias_of: null
206
+ mutation_class: benign_mutation
207
+ wait_policy: not_async
208
+ pagination_policy: null
209
+ openapi_operation_ids: []
196
210
  - sdk_symbol: mammoth._mixins._row_ops.RowOpsMixin.unnest
197
211
  canonical_command: view.transform.unnest
198
212
  alias_of: null
@@ -170,6 +170,18 @@ methods:
170
170
  pagination_policy: null
171
171
  secret_fields: []
172
172
  reviewed_by: primary
173
+ - sdk_symbol: mammoth._mixins._column_ops.ColumnOpsMixin.rename_columns
174
+ implementation_origin: mammoth._mixins._column_ops.ColumnOpsMixin.rename_columns
175
+ signature: 'rename_columns(self, renames: ''dict[str, str]'') -> ''dict[str, Any]'''
176
+ openapi_operation_ids: []
177
+ canonical_command: view.transform.rename-columns
178
+ alias_of: null
179
+ no_command_reason: null
180
+ mutation_class: benign_mutation
181
+ wait_policy: not_async
182
+ pagination_policy: null
183
+ secret_fields: []
184
+ reviewed_by: primary
173
185
  - sdk_symbol: mammoth._mixins._date_ops.DateOpsMixin.date_diff
174
186
  implementation_origin: mammoth._mixins._date_ops.DateOpsMixin.date_diff
175
187
  signature: 'date_diff(self, component: ''DateDiffUnit'', start: ''str'', end: ''str'', new_column: ''str | None'' = None, existing_column: ''str | None'' = None) -> ''dict[str, Any]'''
@@ -314,6 +326,18 @@ methods:
314
326
  pagination_policy: null
315
327
  secret_fields: []
316
328
  reviewed_by: primary
329
+ - sdk_symbol: mammoth._mixins._row_ops.RowOpsMixin.sort_rows
330
+ implementation_origin: mammoth._mixins._row_ops.RowOpsMixin.sort_rows
331
+ signature: 'sort_rows(self, order_by: ''list[list[str | SortDirection]]'') -> ''dict[str, Any]'''
332
+ openapi_operation_ids: []
333
+ canonical_command: view.transform.sort
334
+ alias_of: null
335
+ no_command_reason: null
336
+ mutation_class: benign_mutation
337
+ wait_policy: not_async
338
+ pagination_policy: null
339
+ secret_fields: []
340
+ reviewed_by: primary
317
341
  - sdk_symbol: mammoth._mixins._row_ops.RowOpsMixin.unnest
318
342
  implementation_origin: mammoth._mixins._row_ops.RowOpsMixin.unnest
319
343
  signature: 'unnest(self, columns: ''list[str]'', label_column: ''str'' = ''Label'', value_column: ''str'' = ''Value'', value_type: ''str | None'' = None) -> ''dict[str, Any]'''
File without changes
File without changes
File without changes