mammoth-cli 2.2.86__tar.gz → 2.2.88__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 (312) hide show
  1. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/PKG-INFO +2 -2
  2. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +2 -2
  4. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +1 -1
  5. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +2 -2
  6. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +10 -0
  7. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +12 -0
  8. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +6 -3
  9. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/rest-api-import.md +4 -2
  10. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +7 -3
  11. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/dashboard.py +11 -0
  12. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/dataset.py +40 -4
  13. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/help_summaries.json +1 -0
  14. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/registry.py +1 -0
  15. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/schema.py +1 -0
  16. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/state.py +20 -2
  17. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/command_contract.py +1 -0
  18. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/listing.py +19 -1
  19. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/pyproject.toml +2 -2
  20. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/dashboard.yaml +3 -2
  21. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/dataset.yaml +47 -1
  22. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/view.yaml +3 -1
  23. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/edits-target.source.yaml +1 -0
  24. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/sdk-catalog.source.yaml +7 -0
  25. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/sdk-methods.yaml +17 -4
  26. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/.gitignore +0 -0
  27. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/LICENSE +0 -0
  28. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/README.md +0 -0
  29. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/__main__.py +0 -0
  30. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/app.py +0 -0
  31. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  32. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  33. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  34. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  35. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  36. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  37. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  38. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  39. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  40. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  41. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  42. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  43. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  44. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  45. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capabilities.md +0 -0
  46. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  47. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  48. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/collection.md +0 -0
  49. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  50. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  51. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  52. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  53. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-embed.md +0 -0
  54. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-published.md +0 -0
  55. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  56. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
  57. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
  58. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  59. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  60. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  61. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  62. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  63. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  64. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/how.md +0 -0
  65. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  66. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
  67. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  68. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  69. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  70. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  71. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  72. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
  73. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  74. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  75. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  76. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  77. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  78. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  79. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
  80. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  81. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  82. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  83. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  84. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  85. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  86. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  87. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  88. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  89. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  90. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  91. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  92. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  93. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  94. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  95. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/build-an-agent.md +0 -0
  96. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  97. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  98. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  99. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  100. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
  101. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  102. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  103. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  104. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  105. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  106. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  107. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  108. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  109. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  110. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/__init__.py +0 -0
  111. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/_lazy.py +0 -0
  112. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/activity.py +0 -0
  113. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/addon.py +0 -0
  114. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/agent.py +0 -0
  115. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/ai.py +0 -0
  116. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/annotation.py +0 -0
  117. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/auth.py +0 -0
  118. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/automation.py +0 -0
  119. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/batch.py +0 -0
  120. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/billing.py +0 -0
  121. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/browse.py +0 -0
  122. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/calc.py +0 -0
  123. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/capabilities.py +0 -0
  124. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/capability.py +0 -0
  125. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/client_app.py +0 -0
  126. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/completion.py +0 -0
  127. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/config.py +0 -0
  128. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/connector.py +0 -0
  129. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/context.py +0 -0
  130. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/data_app.py +0 -0
  131. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/doctor.py +0 -0
  132. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/external_key.py +0 -0
  133. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/file.py +0 -0
  134. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/folder.py +0 -0
  135. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/how.py +0 -0
  136. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/job.py +0 -0
  137. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/link.py +0 -0
  138. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/notification.py +0 -0
  139. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/parameter.py +0 -0
  140. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/project.py +0 -0
  141. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/report.py +0 -0
  142. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/resolve.py +0 -0
  143. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/schedule.py +0 -0
  144. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/skill.py +0 -0
  145. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/snippet.py +0 -0
  146. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/support.py +0 -0
  147. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/template.py +0 -0
  148. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/trash.py +0 -0
  149. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/upgrade.py +0 -0
  150. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/user.py +0 -0
  151. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/view.py +0 -0
  152. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/view_drivers.py +0 -0
  153. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/view_explore.py +0 -0
  154. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/view_forecast.py +0 -0
  155. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/view_ops.py +0 -0
  156. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/view_profile.py +0 -0
  157. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/webhook.py +0 -0
  158. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/workflow.py +0 -0
  159. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/commands/workspace.py +0 -0
  160. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/context/__init__.py +0 -0
  161. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/context/credentials.py +0 -0
  162. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/context/endpoint.py +0 -0
  163. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/context/keyring_backend.py +0 -0
  164. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/context/oauth.py +0 -0
  165. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/context/profiles.py +0 -0
  166. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/context/resolver.py +0 -0
  167. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/contracts/__init__.py +0 -0
  168. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/contracts/auth.py +0 -0
  169. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/discovery/__init__.py +0 -0
  170. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/discovery/limitations.json +0 -0
  171. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/discovery/next_commands.json +0 -0
  172. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/discovery/recipes.json +0 -0
  173. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/embed.py +0 -0
  174. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/errors/__init__.py +0 -0
  175. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/errors/envelope.py +0 -0
  176. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/manifest/__init__.py +0 -0
  177. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/manifest/loader.py +0 -0
  178. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/messages/__init__.py +0 -0
  179. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/output/__init__.py +0 -0
  180. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/output/envelope.py +0 -0
  181. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/output/normalize.py +0 -0
  182. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/output/policy.py +0 -0
  183. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/output/progress.py +0 -0
  184. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/output/render.py +0 -0
  185. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/py.typed +0 -0
  186. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/__init__.py +0 -0
  187. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/compact.py +0 -0
  188. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/confirm.py +0 -0
  189. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/dataset_health.py +0 -0
  190. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/dryrun.py +0 -0
  191. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  192. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/embedded.py +0 -0
  193. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/executor.py +0 -0
  194. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/input_loader.py +0 -0
  195. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/intent_only.py +0 -0
  196. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/invocation.py +0 -0
  197. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/labels.py +0 -0
  198. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/locked_files.py +0 -0
  199. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/new_data.py +0 -0
  200. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/next_commands.py +0 -0
  201. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/opens.py +0 -0
  202. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/options.py +0 -0
  203. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/parents.py +0 -0
  204. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/runlog.py +0 -0
  205. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/session.py +0 -0
  206. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/shared.py +0 -0
  207. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/strict.py +0 -0
  208. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/token_scope.py +0 -0
  209. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/updates.py +0 -0
  210. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/validate.py +0 -0
  211. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/runtime/verify.py +0 -0
  212. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/__init__.py +0 -0
  213. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/append_blank_columns.py +0 -0
  214. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/argspec.py +0 -0
  215. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/board_values.py +0 -0
  216. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/coerce.py +0 -0
  217. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/column_type_guard.py +0 -0
  218. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/conditional_format.py +0 -0
  219. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/conditions.py +0 -0
  220. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/dashboard_figures.py +0 -0
  221. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/dashboard_filters.py +0 -0
  222. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/dashboard_pages.py +0 -0
  223. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/dashboard_review.py +0 -0
  224. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/data_profile.py +0 -0
  225. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/data_quality.py +0 -0
  226. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/delete_check.py +0 -0
  227. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/dispatch.py +0 -0
  228. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/explore_card_edit.py +0 -0
  229. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/explore_cards.py +0 -0
  230. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/explore_to_figure.py +0 -0
  231. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/explore_to_image.py +0 -0
  232. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/factory.py +0 -0
  233. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/field_enums.py +0 -0
  234. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/folder_ids.py +0 -0
  235. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/input_fields.py +0 -0
  236. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/job_outcome.py +0 -0
  237. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/local_files.py +0 -0
  238. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/local_time.py +0 -0
  239. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/mapping.py +0 -0
  240. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/openapi_types.py +0 -0
  241. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/paging.py +0 -0
  242. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/period_analysis.py +0 -0
  243. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/positionals.py +0 -0
  244. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/protocol.py +0 -0
  245. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/read_memo.py +0 -0
  246. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/read_queries.py +0 -0
  247. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/schema_diff.py +0 -0
  248. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/sdk_service.py +0 -0
  249. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/sql_check.py +0 -0
  250. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/stored_stats.py +0 -0
  251. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/suggest.py +0 -0
  252. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/testing.py +0 -0
  253. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/text_dates.py +0 -0
  254. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/type_system.py +0 -0
  255. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/view_analysis.py +0 -0
  256. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/view_variants.py +0 -0
  257. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/services/write_impact.py +0 -0
  258. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/skills/__init__.py +0 -0
  259. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/skills/installer.py +0 -0
  260. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/skills/steering.py +0 -0
  261. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/mammoth_cli/testing.py +0 -0
  262. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/activity.yaml +0 -0
  263. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/addon.yaml +0 -0
  264. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/agent.yaml +0 -0
  265. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/ai.yaml +0 -0
  266. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/annotation.yaml +0 -0
  267. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/auth.yaml +0 -0
  268. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/automation.yaml +0 -0
  269. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/batch.yaml +0 -0
  270. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/billing.yaml +0 -0
  271. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/browse.yaml +0 -0
  272. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/calc.yaml +0 -0
  273. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/capabilities.yaml +0 -0
  274. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/capability.yaml +0 -0
  275. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/client-app.yaml +0 -0
  276. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/collection.yaml +0 -0
  277. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/completion.yaml +0 -0
  278. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/config.yaml +0 -0
  279. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/connector.yaml +0 -0
  280. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/context.yaml +0 -0
  281. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/data-app.yaml +0 -0
  282. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/doctor.yaml +0 -0
  283. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/external-key.yaml +0 -0
  284. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/file.yaml +0 -0
  285. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/folder.yaml +0 -0
  286. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/how.yaml +0 -0
  287. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/job.yaml +0 -0
  288. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/link.yaml +0 -0
  289. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/log.yaml +0 -0
  290. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/notification.yaml +0 -0
  291. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/parameter.yaml +0 -0
  292. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/project.yaml +0 -0
  293. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/report.yaml +0 -0
  294. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/resolve.yaml +0 -0
  295. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/schedule.yaml +0 -0
  296. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/schema.yaml +0 -0
  297. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/skill.yaml +0 -0
  298. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/snippet.yaml +0 -0
  299. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/support.yaml +0 -0
  300. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/template.yaml +0 -0
  301. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/token.yaml +0 -0
  302. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/trash.yaml +0 -0
  303. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/upgrade.yaml +0 -0
  304. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/user.yaml +0 -0
  305. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/version.yaml +0 -0
  306. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/webhook.yaml +0 -0
  307. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/workflow.yaml +0 -0
  308. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/commands/workspace.yaml +0 -0
  309. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/openapi-operations.yaml +0 -0
  310. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/manifests/schema-v1.json +0 -0
  311. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/spec/openapi/metadata.json +0 -0
  312. {mammoth_cli-2.2.86 → mammoth_cli-2.2.88}/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.86
3
+ Version: 2.2.88
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
@@ -18,7 +18,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
18
  Requires-Python: <3.15,>=3.12
19
19
  Requires-Dist: jsonschema>=4.20
20
20
  Requires-Dist: keyring<26,>=25.7
21
- Requires-Dist: mammoth-io<0.9,>=0.8.44
21
+ Requires-Dist: mammoth-io<0.9,>=0.8.45
22
22
  Requires-Dist: platformdirs<5,>=4.10
23
23
  Requires-Dist: pydantic<3,>=2.12.5
24
24
  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.86"
9
+ __version__ = "2.2.88"
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.2.86
3
+ version: 2.2.88
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
 
@@ -90,7 +90,7 @@ mammoth schema find "join two datasets; remove duplicates; build a dashboard"
90
90
  | Rank, running total, previous row | `view transform window` |
91
91
  | A dashboard, or its PDF or slides | `dashboard v3 generate`, then `chat edit` ([dashboards](references/recipes/dashboards.md)) |
92
92
  | Deliver the rows | `view export csv`, `view export postgres`, `view export dataset` |
93
- | Run something on a schedule or on new data (refresh, append, alert) | `automation create`: a condition (`at_specific_time`, new file in a folder, ...) and tasks (`run_data_retrieval`, `append_data`, `send_an_alert`, `pull_cloud_files`). `schedule create` only pulls a connector's data. A dataset from an uploaded file or URL is a one-time copy with no source to refresh; say so. Recipe and caveats: [recurring work](references/recipes/scheduling.md) |
93
+ | Run something on a schedule or on new data (refresh, append, alert) | `automation create`: a condition (`at_specific_time`, new file in a folder, ...) and tasks (`run_data_retrieval`, `append_data`, `send_an_alert`, `pull_cloud_files`). `schedule create` only pulls a connector's data. An upload can't refresh; a URL dataset: `dataset refresh` on demand, never on a schedule; say so. Recipe: [recurring work](references/recipes/scheduling.md) |
94
94
 
95
95
  Call a find result (or `suggestions` entry) from its `accepted_fields` and
96
96
  `agent_example`. Before concluding the CLI cannot do something the web app
@@ -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 781 commands. 516 of them bind one of the 545 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, 1 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer. Use an untried command normally: confirm a write with the user first, check its result with a read afterwards, and never refuse a command only because it is untried.
4
+ The CLI publishes 782 commands. 516 of them bind one of the 545 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, 1 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer. Use an untried command normally: confirm a write with the user first, check its result with a read afterwards, and never refuse a command only because it is untried.
5
5
 
6
6
  Status meanings:
7
7
 
@@ -1,6 +1,6 @@
1
1
  # Published CLI command catalog
2
2
 
3
- This generated catalog is a lookup table for every command in the published CLI manifest, currently 781; 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 782; 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
 
@@ -30,7 +30,7 @@ Load only the applicable domain file:
30
30
  - [dashboard-published](commands/dashboard-published.md) — 8 published commands
31
31
  - [dashboard](commands/dashboard.md) — 104 published commands
32
32
  - [data-app](commands/data-app.md) — 12 published commands
33
- - [dataset](commands/dataset.md) — 27 published commands
33
+ - [dataset](commands/dataset.md) — 28 published commands
34
34
  - [doctor](commands/doctor.md) — 1 published commands
35
35
  - [external-key](commands/external-key.md) — 4 published commands
36
36
  - [file](commands/file.md) — 11 published commands
@@ -212,6 +212,16 @@ Result: `DatasetListResult`; mutation `read`, confirmation `none`, wait policy `
212
212
 
213
213
  Status on release: ran once on CLI 2.0.28 — ILG simulation 2026-09-19: exit 0 on release with CLI 2.0.28. Listed the datasets the sends created in the target project. Single invocation only.
214
214
 
215
+ ### `dataset.refresh`
216
+
217
+ Run: `mammoth dataset refresh`. Exact input fields: `mammoth schema get dataset.refresh`.
218
+
219
+ Example: `mammoth dataset refresh 123 --yes`. Illustrative only: append `--yes` after observing an owned target.
220
+
221
+ Result: `DatasetRefreshResult`; mutation `benign_mutation`, confirmation `prompt_or_yes`, wait policy `always_wait`.
222
+
223
+ Status on release: untried; no live run recorded.
224
+
215
225
  ### `dataset.rename`
216
226
 
217
227
  Run: `mammoth dataset rename`. Exact input fields: `mammoth schema get dataset.rename`.
@@ -59,6 +59,13 @@ tile they do not want), say so in the next `chat edit` prompt in the user's
59
59
  words ("show revenue in pounds", "remove the Key insights tile"); the builder
60
60
  decides how.
61
61
 
62
+ ## A month axis
63
+
64
+ To chart by month from a date, extract `year_month_number` ("2026-10") with
65
+ `view transform extract-date`: it sorts in time order. `year_month`
66
+ ("2026, October") is text and a chart axis sorts it alphabetically, April
67
+ before August; use it only when the user asks for that wording.
68
+
62
69
  ## "Per region", "per month", "for each X": one board and a filter control
63
70
 
64
71
  A request for a board "per <dimension>" (per region, per month, per rep, by
@@ -185,6 +192,11 @@ not publish: `was_published` stays false until you also run
185
192
  `dashboard action` with `publish-data` on a board that was never published
186
193
  publishes the presentation instead and says so. `share` and `action` print the
187
194
  deliverable check in their confirmation text.
195
+ Auto-publish (`auto_publish: true`) republishes **data refreshes only**. A chat
196
+ edit or any other layout change stays in the draft, and `dashboard get` shows
197
+ `is_publish_presentation_pending: true`, until you run `publish-presentation`.
198
+ After editing a live board with auto-publish on, tell the user the layout
199
+ change is not live yet, and publish only if they asked for it.
188
200
  Only then do `dashboard published canvas URL`, `published data URL`,
189
201
  `job-by-url URL JOB_ID` and the other `/dashboards/url/...` routes answer;
190
202
  before that they return 404 `DASHBOARD_NOT_FOUND`. Legacy widget routes
@@ -127,6 +127,9 @@ not sufficient. `dataset.create` waits for its asynchronous work; only the
127
127
  If the schema does not accept a URL,
128
128
  report URL import unsupported; do not silently substitute local processing. A
129
129
  4/5/7 envelope is a failed or uncertain operation, not a usable dataset. A
130
- `weburl` dataset is a one-time copy: it keeps no source details, so it cannot be
131
- scheduled to refresh (see [recurring work](scheduling.md)); say so rather than
132
- promising a refreshable source.
130
+ `weburl` dataset keeps its link and can be refreshed on demand (`dataset refresh
131
+ DATASET_ID --yes`, or "Refresh from URL" in the web app; a single CSV only), but
132
+ never on a schedule: `run_data_retrieval` cannot refresh it (see
133
+ [recurring work](scheduling.md)). `dataset list` shows such a dataset as
134
+ `url: <host>`. For a scheduled pull from a URL, use the REST
135
+ API connector. Say so rather than promising a scheduled refresh.
@@ -31,8 +31,10 @@ does not include this connector (or its paid addon is not active).
31
31
 
32
32
  ## 2. Try the data-source config (creates no dataset)
33
33
 
34
- `mammoth connector connection query generic_rest_api CONNECTION_KEY --input
35
- sample.json` runs the same sample read-only (no `--yes`, nothing saved).
34
+ Sample a REST source with `connector ds-config create` and `"data_sample":
35
+ true`, as below. It creates no dataset. Do not use `connector connection query`
36
+ for a REST source: it runs only one read-only SQL `SELECT` and refuses the
37
+ endpoint config.
36
38
 
37
39
  `query` is a **JSON string** (not an object) of the data-source config:
38
40
  `endpoint_path`, `http_method` (`GET|POST`), `request_body`, `query_params`,
@@ -48,9 +48,13 @@ mammoth automation create 'Nightly refresh' --yes --input '{
48
48
  }'
49
49
  ```
50
50
 
51
- `run_data_retrieval` only refreshes a cloud-connected dataset; a dataset made
52
- from an uploaded file or a URL (`weburl`) is a one-time copy with no source
53
- details to refresh from — say so rather than scheduling one.
51
+ `run_data_retrieval` only refreshes a cloud-connected dataset. A dataset made
52
+ from an uploaded file has no source to refresh from. A URL (`weburl`) dataset
53
+ keeps its link and can be refreshed on demand (`dataset refresh DATASET_ID
54
+ --yes`, or "Refresh from URL" in the web app; a single CSV only), but
55
+ not on a schedule. For a
56
+ scheduled pull from a URL, use the REST API connector. Say so rather than
57
+ scheduling a refresh.
54
58
 
55
59
  That is not the same as "this dataset can never be recurring." A
56
60
  file-backed dataset's pipeline re-runs on new data exactly like any other
@@ -631,9 +631,20 @@ def dashboard_share(invocation: Invocation) -> HandlerResult:
631
631
  + _board_findings(invocation, service, auth, dashboard_id),
632
632
  )
633
633
  data = service.call(_symbol(invocation), **kwargs)
634
+ if data is None:
635
+ # The route answers 200 with no body, so the result was ``data: null`` and
636
+ # the caller could not see whether the share took. Read it back.
637
+ data = _share_readback(service, dashboard_id)
634
638
  return data, _meta(invocation, auth.workspace_id)
635
639
 
636
640
 
641
+ def _share_readback(service: Any, dashboard_id: int) -> dict[str, Any]:
642
+ """The board's share state as ``dashboard get`` reports it after a share."""
643
+ board = _dump_model(service.call(_DASHBOARD_GET, dashboard_id=dashboard_id))
644
+ board = board if isinstance(board, dict) else {}
645
+ return {"dashboard_id": dashboard_id, "share": board.get("share")}
646
+
647
+
637
648
  def _was_published(service: Any, dashboard_id: int) -> bool:
638
649
  """Whether the board was ever published; ``dashboard get`` carries ``was_published``."""
639
650
  board = _dump_model(service.call(_DASHBOARD_GET, dashboard_id=dashboard_id))
@@ -755,6 +755,8 @@ def dataset_list(invocation: Invocation) -> HandlerResult:
755
755
  only the cheap fields, so it holds no row counts or column names: ``view list
756
756
  DATASET_ID`` shows a dataset's columns, and ``dataset find --input '{"columns":
757
757
  [...]}'`` finds the dataset that has given columns.
758
+ The result carries ``total``, the project's whole dataset count, so "how many
759
+ datasets" never needs paging: read ``total`` with the first page's newest names.
758
760
  ``full: true`` returns the raw ``{id, name}`` list instead. ``name`` keeps only datasets
759
761
  whose name contains it (case-insensitive) across every page, as short rows without
760
762
  column lists; ``limit``/``offset`` then page over the matches.
@@ -772,13 +774,26 @@ def dataset_list(invocation: Invocation) -> HandlerResult:
772
774
  kwargs["fields"] = DATASET_ROW_FIELDS
773
775
  with open_service(invocation) as (service, auth):
774
776
  data = service.call(_symbol(invocation), **kwargs)
775
- if compact:
776
- data = _compact_dataset_list(
777
- data, kwargs.get("offset", 0), kwargs.get("sort"), kwargs.get("limit", 100)
778
- )
777
+ if compact:
778
+ data = _compact_dataset_list(
779
+ data, kwargs.get("offset", 0), kwargs.get("sort"), kwargs.get("limit", 100)
780
+ )
781
+ if isinstance(data, dict) and "shown" in data:
782
+ data["total"] = _dataset_total(service, project_id, data, kwargs.get("offset", 0))
779
783
  return data, _meta(invocation, auth.workspace_id, project_id)
780
784
 
781
785
 
786
+ def _dataset_total(service: Any, project_id: int, page: dict[str, Any], offset: int) -> int:
787
+ """The project's whole dataset count. The list route sends none, so a page that
788
+ is the last one counts itself; otherwise the ids are read once, here, in one call."""
789
+ if not page.get("more"):
790
+ return int(offset) + page["shown"]
791
+ everything = service.call(
792
+ "mammoth.api.datasets.DatasetsAPI.list_all", project_id=project_id, fields="id"
793
+ )
794
+ return len(everything.get("datasets", []))
795
+
796
+
782
797
  def _dataset_name_search(
783
798
  invocation: Invocation, project_id: int, name: str, document: dict[str, Any]
784
799
  ) -> HandlerResult:
@@ -1481,6 +1496,27 @@ def dataset_rename(invocation: Invocation) -> HandlerResult:
1481
1496
  return data, _meta(invocation, auth.workspace_id, project_id)
1482
1497
 
1483
1498
 
1499
+ def dataset_refresh(invocation: Invocation) -> HandlerResult:
1500
+ """Fetch a URL dataset's link again into the same dataset. Prompt or ``--yes`` required.
1501
+
1502
+ The server refuses a dataset not made from a URL and a URL that serves JSON; its
1503
+ reason reaches the caller. Waits for the job (honoring ``--job-timeout``).
1504
+ """
1505
+ project_id = require_project(invocation)
1506
+ dataset_id = _require_int_positional(invocation, "dataset id")
1507
+ enforce_confirmation(
1508
+ invocation,
1509
+ policy=POLICY_PROMPT_OR_YES,
1510
+ action=f"fetch the link of dataset {dataset_id} again and update its data",
1511
+ )
1512
+ with open_service(invocation) as (service, auth):
1513
+ handle = service.call(_symbol(invocation), dataset_id=dataset_id, project_id=project_id)
1514
+ service.wait_if_job(handle)
1515
+ return {"dataset_id": dataset_id, "refreshed": True}, _meta(
1516
+ invocation, auth.workspace_id, project_id
1517
+ )
1518
+
1519
+
1484
1520
  def dataset_trash(invocation: Invocation) -> HandlerResult:
1485
1521
  """Move one dataset to the project trash (reversible)."""
1486
1522
  project_id = require_project(invocation)
@@ -377,6 +377,7 @@
377
377
  "dataset.interpretation.confirm": "Preview or confirm how a file that can be read several ways is interpreted.",
378
378
  "dataset.interpretation.preview": "Preview or confirm how a file that can be read several ways is interpreted.",
379
379
  "dataset.list": "List datasets in the active project, newest first, each with what tells them apart.",
380
+ "dataset.refresh": "Fetch a URL dataset's link again into the same dataset. Prompt or '--yes' required.",
380
381
  "dataset.rename": "Rename a dataset. Dataset id is positional; new name comes from '--input'.",
381
382
  "dataset.restore": "Restore a trashed dataset.",
382
383
  "dataset.schema-diff": "Compare two datasets' columns and propose the 'batch create' mapping.",
@@ -382,6 +382,7 @@ _TARGETS: dict[str, str] = {
382
382
  "dataset.interpretation.confirm": "mammoth_cli.commands.dataset:dataset_interpretation",
383
383
  "dataset.create": "mammoth_cli.commands.dataset:dataset_create",
384
384
  "dataset.create-from-pdf": "mammoth_cli.commands.dataset:dataset_create_from_pdf",
385
+ "dataset.refresh": "mammoth_cli.commands.dataset:dataset_refresh",
385
386
  "dataset.rename": "mammoth_cli.commands.dataset:dataset_rename",
386
387
  "dataset.trash": "mammoth_cli.commands.dataset:dataset_trash",
387
388
  "dataset.restore": "mammoth_cli.commands.dataset:dataset_restore",
@@ -106,6 +106,7 @@ _FIXED_EXAMPLES: dict[str, tuple[tuple[str, ...], dict[str, Any]]] = {
106
106
  {"term": "late", "definition": "delivered more than 5 days after shipped_date"},
107
107
  ),
108
108
  "dataset.definition.remove": (("123", "a1b2c3d4"), {}),
109
+ "dataset.refresh": (("123",), {}),
109
110
  "view.data.drivers": (
110
111
  ("123",),
111
112
  {
@@ -115,6 +115,25 @@ def _unfinished_state(data: dict[str, Any]) -> dict[str, Any] | None:
115
115
  }
116
116
 
117
117
 
118
+ #: Backend codes a get answers for an id a delete just removed, besides a 404. The
119
+ #: dashboard get route checks permission before existence, and a missing dashboard
120
+ #: has no one who may view it: ``dashboard get`` on a deleted id answers ``4PERM002``.
121
+ #: Read straight after OUR successful delete of that id, it means gone; anywhere else
122
+ #: it keeps meaning "no permission".
123
+ _GONE_AFTER_DELETE: dict[str, frozenset[str]] = {
124
+ "dashboard.delete": frozenset({"4PERM002", "4DASH001"}),
125
+ }
126
+
127
+
128
+ def _proves_gone(invocation: Invocation, exc: Exception) -> bool:
129
+ if not isinstance(exc, CliError):
130
+ return False
131
+ if exc.code == CODE_RESOURCE_NOT_FOUND:
132
+ return True
133
+ backend_code = (exc.details or {}).get("backend_code")
134
+ return backend_code in _GONE_AFTER_DELETE.get(invocation.command_id, frozenset())
135
+
136
+
118
137
  def _build_state(
119
138
  invocation: Invocation, data: dict[str, Any], readback: dict[str, Any]
120
139
  ) -> dict[str, Any]:
@@ -150,8 +169,7 @@ def _build_state(
150
169
  read_by = _read_by_label(read_command_id, resolved_ids)
151
170
  if (
152
171
  invocation.command_id.endswith(".delete")
153
- and isinstance(exc, CliError)
154
- and exc.code == CODE_RESOURCE_NOT_FOUND
172
+ and _proves_gone(invocation, exc)
155
173
  and kind == "object"
156
174
  and resolved_ids
157
175
  ):
@@ -533,6 +533,7 @@ S2_COMMANDS = frozenset(
533
533
  "dataset.file-settings.update",
534
534
  "dataset.get",
535
535
  "dataset.list",
536
+ "dataset.refresh",
536
537
  "dataset.rename",
537
538
  "dataset.restore",
538
539
  "dataset.trash",
@@ -15,6 +15,7 @@ from __future__ import annotations
15
15
  import json
16
16
  from collections.abc import Callable
17
17
  from typing import Any
18
+ from urllib.parse import urlsplit
18
19
 
19
20
  from mammoth_cli.services.stored_stats import stored_facts
20
21
 
@@ -75,11 +76,28 @@ def compact_columns(columns: list[tuple[str, Any]], limit: int | None = _MAX_COL
75
76
  return ", ".join(shown) + (f" (+{extra} more)" if extra > 0 else "")
76
77
 
77
78
 
79
+ def _url_host(info: Any) -> str | None:
80
+ """The host of the link a fetch-from-URL dataset was made from, or None.
81
+
82
+ The backend stores such a dataset as source type ``file`` and keeps the link in
83
+ ``additional_info.ORIGINAL_FILE_PROPS.URL``. Only the host is returned: the path
84
+ and query can carry secrets.
85
+ """
86
+ original = info.get("ORIGINAL_FILE_PROPS") if isinstance(info, dict) else None
87
+ url = original.get("URL") if isinstance(original, dict) else None
88
+ return urlsplit(url).hostname if isinstance(url, str) and url else None
89
+
90
+
78
91
  def source_of(dataset: dict[str, Any]) -> str:
79
- """How the dataset's data arrived: the stored source type and, for a file, its name."""
92
+ """How the dataset's data arrived: the stored source type and, for a file, its name.
93
+
94
+ A dataset fetched from a link reads ``url: <host>``.
95
+ """
80
96
  info = dataset.get("additional_info")
81
97
  if isinstance(info, dict) and info.get("DATAVIEW_ID") is not None:
82
98
  return f"export of view {info['DATAVIEW_ID']}"
99
+ if host := _url_host(info):
100
+ return f"url: {host}"
83
101
  sources = dataset.get("sources")
84
102
  first = sources[0] if isinstance(sources, list) and sources else None
85
103
  if not isinstance(first, dict):
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.2.86"
3
+ version = "2.2.88"
4
4
  description = "Command-line interface for the Mammoth Analytics platform"
5
5
  authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
6
6
  readme = "README.md"
7
7
  license = "LicenseRef-Proprietary"
8
8
  requires-python = ">=3.12,<3.15"
9
9
  dependencies = [
10
- "mammoth-io (>=0.8.44,<0.9)",
10
+ "mammoth-io (>=0.8.45,<0.9)",
11
11
  "typer (>=0.27,<0.28)",
12
12
  "rich (>=15,<16)",
13
13
  "platformdirs (>=4.10,<5)",
@@ -942,8 +942,9 @@ commands:
942
942
  pagination_policy: none
943
943
  acceptance_evidence: contract_only_no_disposable_fixture
944
944
  readback:
945
- command: dashboard.list
946
- ids: {}
945
+ command: dashboard.get
946
+ ids:
947
+ dashboard_id: positional.0
947
948
  kind: object
948
949
  live_test: null
949
950
  live_exemption_reason: Dashboard mutation has contract coverage but no automated disposable-dashboard
@@ -247,7 +247,7 @@ commands:
247
247
  - CT-DATASET-CREATE-ERROR
248
248
  draft_test: null
249
249
  undo_test: null
250
- known_restrictions: 'ds_creation_type=weburl (dataset_spec.url), clone, or cloud (a file, REST API or database query from a connection); the command waits for the job and returns the new dataset_id. A weburl dataset is a one-time copy that keeps no source details to refresh from, so automation''s run_data_retrieval task cannot refresh it (only a cloud-connected dataset can be refreshed); say so rather than scheduling a refresh for it. The result''s name is the dataset''s real name; when the requested name was taken the server adds a suffix, and requested_name and note say so. Use name, not the name you asked for. To copy a dataset as a new independent one: {"ds_creation_type": "clone", "dataset_spec": {"ds_name": NEW_NAME, "source_ds_id": ID, "clone_dataview_ids": [DEFAULT_VIEW_ID], "exclude_data": false}}, DEFAULT_VIEW_ID being the id in dataset''s `default_view` from view list (other views only when asked); an empty clone_dataview_ids is refused here because it makes a blank view. A clone waits and returns the new dataset_id; never use view export dataset for a plain copy, which leaves a live export on the source. A weburl import names the dataset after the downloaded file: follow it with dataset rename to the name the user picked. To import a file from an SFTP server (or another file connector) as a new dataset: connector connection create sftp, then {"ds_creation_type": "cloud", "dataset_spec": {"connector_key": "sftp", "connection_key": KEY, "query_properties": {"ds_name": NAME, "file_path": PATH_ON_SERVER, "data_pull_file": "Pull same file"}}}. data_pull_file is a string and may be left out, which means "Pull same file" (what the web app does); its only other value is "Pull next file based on name pattern", which also needs folder_path and name_pattern. A pull that finds no file at the path fails the create with the server''s reason; the recipe is recipes/file-import.md. To import from a REST API or Elasticsearch: the connection must exist first (connector connection create generic_rest_api, in the same project); try the query with connector ds-config create (data_sample, creates no dataset) or connector connection query; then {"ds_creation_type": "cloud", "dataset_spec": {"connector_key": "generic_rest_api", "connection_key": KEY, "query_properties": {"ds_name": NAME, "table_name": TABLE, "query": "<JSON string of the endpoint config>"}, "schedule_properties": {"schedule_type": "moment", "first_pull_at": "now", "on_refresh_action": "replace"}, "recurrence_info": {"interval": 1, "start_at": "<future ISO time>"}}}. schedule_properties and recurrence_info are required (without them the job fails with Invalid parameters); on_refresh_action combine appends every refresh, so rows duplicate. The recipe is recipes/rest-api-import.md. To make a dataset from a database query (SQL Server, MySQL, Postgres, ...): connector connection create for the database, try the SELECT with connector connection query (read-only, saves nothing), then connector ds-config create CONNECTOR_KEY CONNECTION_KEY with {"query": SELECT, "table": NAME}; the recipe is recipes/database-import.md. Other ds_creation_type values and dataset_spec shapes: variants beyond the documented path are not qualified.'
250
+ known_restrictions: 'ds_creation_type=weburl (dataset_spec.url), clone, or cloud (a file, REST API or database query from a connection); the command waits for the job and returns the new dataset_id. A weburl dataset keeps its link and can be refreshed on demand (dataset refresh DATASET_ID --yes, or Refresh from URL in the web app; a single CSV only), but never on a schedule: automation''s run_data_retrieval task cannot refresh it (only a cloud-connected dataset can be refreshed); for a scheduled pull from a URL use the REST API connector. Say so rather than scheduling a refresh for it. The result''s name is the dataset''s real name; when the requested name was taken the server adds a suffix, and requested_name and note say so. Use name, not the name you asked for. To copy a dataset as a new independent one: {"ds_creation_type": "clone", "dataset_spec": {"ds_name": NEW_NAME, "source_ds_id": ID, "clone_dataview_ids": [DEFAULT_VIEW_ID], "exclude_data": false}}, DEFAULT_VIEW_ID being the id in dataset''s `default_view` from view list (other views only when asked); an empty clone_dataview_ids is refused here because it makes a blank view. A clone waits and returns the new dataset_id; never use view export dataset for a plain copy, which leaves a live export on the source. A weburl import names the dataset after the downloaded file: follow it with dataset rename to the name the user picked. To import a file from an SFTP server (or another file connector) as a new dataset: connector connection create sftp, then {"ds_creation_type": "cloud", "dataset_spec": {"connector_key": "sftp", "connection_key": KEY, "query_properties": {"ds_name": NAME, "file_path": PATH_ON_SERVER, "data_pull_file": "Pull same file"}}}. data_pull_file is a string and may be left out, which means "Pull same file" (what the web app does); its only other value is "Pull next file based on name pattern", which also needs folder_path and name_pattern. A pull that finds no file at the path fails the create with the server''s reason; the recipe is recipes/file-import.md. To import from a REST API or Elasticsearch: the connection must exist first (connector connection create generic_rest_api, in the same project); try the query with connector ds-config create (data_sample, creates no dataset; connector connection query takes SQL only and refuses a REST config); then {"ds_creation_type": "cloud", "dataset_spec": {"connector_key": "generic_rest_api", "connection_key": KEY, "query_properties": {"ds_name": NAME, "table_name": TABLE, "query": "<JSON string of the endpoint config>"}, "schedule_properties": {"schedule_type": "moment", "first_pull_at": "now", "on_refresh_action": "replace"}, "recurrence_info": {"interval": 1, "start_at": "<future ISO time>"}}}. schedule_properties and recurrence_info are required (without them the job fails with Invalid parameters); on_refresh_action combine appends every refresh, so rows duplicate. The recipe is recipes/rest-api-import.md. To make a dataset from a database query (SQL Server, MySQL, Postgres, ...): connector connection create for the database, try the SELECT with connector connection query (read-only, saves nothing), then connector ds-config create CONNECTOR_KEY CONNECTION_KEY with {"query": SELECT, "table": NAME}; the recipe is recipes/database-import.md. Other ds_creation_type values and dataset_spec shapes: variants beyond the documented path are not qualified.'
251
251
  reviewed_by: primary
252
252
  - command_id: dataset.create-from-pdf
253
253
  command_path: dataset create-from-pdf
@@ -766,6 +766,52 @@ commands:
766
766
  cols; no column lists) with matched, and more with next_offset when cut; limit and offset then
767
767
  page over the matches. limit must be at most 100. Without a project use dataset find NAME_SUBSTRING.'
768
768
  reviewed_by: primary
769
+ - command_id: dataset.refresh
770
+ command_path: dataset refresh
771
+ disposition: command
772
+ alias_of: null
773
+ operation_ids:
774
+ - UpdateDataset
775
+ positionals:
776
+ - name: dataset_id
777
+ type: int
778
+ required: true
779
+ metavar: DATASET_ID
780
+ falls_back_to_field: null
781
+ help: ID of the dataset.
782
+ options: []
783
+ sdk_symbol: mammoth.api.datasets.DatasetsAPI.refresh_from_url
784
+ sdk_conversion: Call mammoth.api.datasets.DatasetsAPI.refresh_from_url with validated request fields.
785
+ request_model: DatasetRefreshRequest
786
+ result_model: DatasetRefreshResult
787
+ mutation_class: benign_mutation
788
+ edits_target: true
789
+ confirmation: prompt_or_yes
790
+ wait_policy: always_wait
791
+ pagination_policy: none
792
+ acceptance_evidence: contract_only_no_disposable_fixture
793
+ readback:
794
+ command: dataset.get
795
+ ids:
796
+ dataset_id: positional.0
797
+ kind: object
798
+ live_test: null
799
+ live_exemption_reason: No automated disposable-project fixture wired into tests/live yet for this command.
800
+ contract_fixture: null
801
+ required_fixture_guard: null
802
+ secret_fields: []
803
+ human_example: mammoth dataset refresh DATASET_ID --help
804
+ agent_example: mammoth dataset refresh 123 --yes
805
+ unit_tests:
806
+ - UT-DATASET-REFRESH
807
+ contract_tests:
808
+ - CT-DATASET-REFRESH-HUMAN
809
+ - CT-DATASET-REFRESH-JSON
810
+ - CT-DATASET-REFRESH-ERROR
811
+ draft_test: null
812
+ undo_test: null
813
+ known_restrictions: Fetches the link of a dataset made from a URL (dataset create with ds_creation_type weburl; dataset list shows it as source url with the link host) again into the same dataset, and waits for the job. Whether the new data replaces or adds to the old follows the dataset's own data addition setting. A dataset not made from a URL is refused, and so is a URL that serves JSON; the server's reason is shown. A single CSV only. It never refreshes on a schedule, and automation run_data_retrieval cannot refresh it; for a scheduled pull from a URL use the REST API connector.
814
+ reviewed_by: primary
769
815
  - command_id: dataset.rename
770
816
  command_path: dataset rename
771
817
  disposition: command
@@ -5176,7 +5176,9 @@ commands:
5176
5176
  draft_test: LT-VIEW-TRANSFORM-EXTRACT-DATE-DRAFT
5177
5177
  undo_test: LT-VIEW-TRANSFORM-EXTRACT-DATE-UNDO
5178
5178
  known_restrictions: 'Observe first: `view get VIEW_ID` to confirm the column type is DATE (run convert-type
5179
- first if TEXT) and `view data get` to check a few values.'
5179
+ first if TEXT) and `view data get` to check a few values. For a month bucket use `year_month_number`
5180
+ ("2026-10"), which sorts in time order; `year_month` ("2026, October") sorts alphabetically on a chart
5181
+ axis.'
5180
5182
  reviewed_by: primary
5181
5183
  - command_id: view.transform.fill-missing
5182
5184
  command_path: view transform fill-missing
@@ -131,6 +131,7 @@ edits_target_commands:
131
131
  - dataset.file-settings.undo
132
132
  - dataset.file-settings.update
133
133
  - dataset.interpretation.confirm
134
+ - dataset.refresh
134
135
  - dataset.rename
135
136
  - dataset.restore
136
137
  - dataset.trash
@@ -3010,6 +3010,13 @@ sdk_methods:
3010
3010
  wait_policy: null
3011
3011
  pagination_policy: null
3012
3012
  openapi_operation_ids: []
3013
+ - sdk_symbol: mammoth.api.datasets.DatasetsAPI.refresh_from_url
3014
+ canonical_command: dataset.refresh
3015
+ alias_of: null
3016
+ mutation_class: benign_mutation
3017
+ wait_policy: always_wait
3018
+ pagination_policy: none
3019
+ openapi_operation_ids: []
3013
3020
  - sdk_symbol: mammoth.api.datasets.DatasetsAPI.rename
3014
3021
  canonical_command: dataset.rename
3015
3022
  alias_of: null
@@ -1,5 +1,5 @@
1
1
  manifest_schema_version: 1
2
- method_count: 800
2
+ method_count: 801
3
3
  generator_version: '1'
4
4
  methods:
5
5
  - sdk_symbol: mammoth._mixins._advanced_ops.AdvancedOpsMixin.add_sql
@@ -3256,9 +3256,9 @@ methods:
3256
3256
  reviewed_by: primary
3257
3257
  - sdk_symbol: mammoth.api.dashboards.DashboardsAPI.embed_config_set
3258
3258
  implementation_origin: mammoth.api.dashboards.DashboardsAPI.embed_config_set
3259
- signature: 'embed_config_set(self, dashboard_id: ''int'', mode: "Literal[''key'', ''signed'']" = ''key'',
3260
- allow_any_origin: ''bool'' = True, allowed_origins: ''_list[str] | None'' = None, appearance: ''dict[str,
3261
- Any] | None'' = None, snippet: ''dict[str, Any] | None'' = None) -> ''EmbedConfigResponse'''
3259
+ signature: 'embed_config_set(self, dashboard_id: ''int'', mode: "Literal[''key'', ''signed''] | None"
3260
+ = None, allow_any_origin: ''bool | None'' = None, allowed_origins: ''_list[str] | None'' = None, appearance:
3261
+ ''dict[str, Any] | None'' = None, snippet: ''dict[str, Any] | None'' = None) -> ''EmbedConfigResponse'''
3262
3262
  openapi_operation_ids:
3263
3263
  - PutEmbedConfig
3264
3264
  canonical_command: dashboard.embed.config.set
@@ -5501,6 +5501,19 @@ methods:
5501
5501
  pagination_policy: null
5502
5502
  secret_fields: []
5503
5503
  reviewed_by: primary
5504
+ - sdk_symbol: mammoth.api.datasets.DatasetsAPI.refresh_from_url
5505
+ implementation_origin: mammoth.api.datasets.DatasetsAPI.refresh_from_url
5506
+ signature: 'refresh_from_url(self, dataset_id: ''int'', workspace_id: ''int | None'' = None, project_id:
5507
+ ''int | None'' = None) -> ''dict[str, Any]'''
5508
+ openapi_operation_ids: []
5509
+ canonical_command: dataset.refresh
5510
+ alias_of: null
5511
+ no_command_reason: null
5512
+ mutation_class: benign_mutation
5513
+ wait_policy: always_wait
5514
+ pagination_policy: none
5515
+ secret_fields: []
5516
+ reviewed_by: primary
5504
5517
  - sdk_symbol: mammoth.api.datasets.DatasetsAPI.remove_definition
5505
5518
  implementation_origin: mammoth.api.datasets.DatasetsAPI.remove_definition
5506
5519
  signature: 'remove_definition(self, dataset_id: ''int'', definition_id: ''str'', workspace_id: ''int
File without changes
File without changes
File without changes