mammoth-cli 2.0.53__tar.gz → 2.0.55__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 (229) hide show
  1. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/.gitignore +1 -0
  2. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/PKG-INFO +2 -2
  3. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/__init__.py +1 -1
  4. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +5 -5
  5. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +2 -2
  6. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +80 -0
  7. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +33 -0
  8. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/project.py +14 -0
  9. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/registry.py +8 -0
  10. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/schema.py +40 -2
  11. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/view.py +54 -5
  12. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/pyproject.toml +2 -2
  13. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/dashboard.yaml +327 -0
  14. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/sdk-catalog.source.yaml +72 -0
  15. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/sdk-methods.yaml +109 -0
  16. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/LICENSE +0 -0
  17. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/README.md +0 -0
  18. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/__main__.py +0 -0
  19. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/app.py +0 -0
  20. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  21. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  22. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  23. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  24. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  25. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  26. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  27. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  28. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  29. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  30. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  31. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  32. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  33. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  34. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  35. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  36. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  37. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  38. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  39. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  40. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  41. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  42. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  43. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  44. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  45. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  46. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  47. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  48. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  49. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  50. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  51. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  52. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  53. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  54. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  55. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  56. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  57. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  58. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  59. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  60. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  61. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  62. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  63. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  64. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  65. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  66. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  67. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  68. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  69. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  70. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  71. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  72. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  73. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  74. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  75. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  76. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  77. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  78. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  79. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  80. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  81. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  82. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  83. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  84. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  85. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  86. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  87. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  88. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/__init__.py +0 -0
  89. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/activity.py +0 -0
  90. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/addon.py +0 -0
  91. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/agent.py +0 -0
  92. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/ai.py +0 -0
  93. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/annotation.py +0 -0
  94. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/auth.py +0 -0
  95. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/automation.py +0 -0
  96. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/batch.py +0 -0
  97. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/billing.py +0 -0
  98. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/browse.py +0 -0
  99. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/capability.py +0 -0
  100. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/client_app.py +0 -0
  101. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/completion.py +0 -0
  102. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/config.py +0 -0
  103. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/connector.py +0 -0
  104. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/context.py +0 -0
  105. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/dashboard.py +0 -0
  106. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/data_app.py +0 -0
  107. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/dataset.py +0 -0
  108. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/doctor.py +0 -0
  109. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/external_key.py +0 -0
  110. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/file.py +0 -0
  111. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/folder.py +0 -0
  112. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/job.py +0 -0
  113. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/notification.py +0 -0
  114. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/parameter.py +0 -0
  115. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/report.py +0 -0
  116. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/schedule.py +0 -0
  117. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/skill.py +0 -0
  118. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/snippet.py +0 -0
  119. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/support.py +0 -0
  120. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/template.py +0 -0
  121. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/trash.py +0 -0
  122. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/upgrade.py +0 -0
  123. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/user.py +0 -0
  124. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/view_ops.py +0 -0
  125. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/webhook.py +0 -0
  126. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/workflow.py +0 -0
  127. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/commands/workspace.py +0 -0
  128. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/__init__.py +0 -0
  129. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/credentials.py +0 -0
  130. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/endpoint.py +0 -0
  131. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/profiles.py +0 -0
  132. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/context/resolver.py +0 -0
  133. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/contracts/__init__.py +0 -0
  134. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/contracts/auth.py +0 -0
  135. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/embed.py +0 -0
  136. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/errors/__init__.py +0 -0
  137. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/errors/envelope.py +0 -0
  138. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/manifest/__init__.py +0 -0
  139. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/manifest/loader.py +0 -0
  140. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/messages/__init__.py +0 -0
  141. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/__init__.py +0 -0
  142. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/envelope.py +0 -0
  143. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/normalize.py +0 -0
  144. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/policy.py +0 -0
  145. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/progress.py +0 -0
  146. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/output/render.py +0 -0
  147. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/py.typed +0 -0
  148. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/__init__.py +0 -0
  149. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/confirm.py +0 -0
  150. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/dryrun.py +0 -0
  151. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/embedded.py +0 -0
  152. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/executor.py +0 -0
  153. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/input_loader.py +0 -0
  154. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/invocation.py +0 -0
  155. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/options.py +0 -0
  156. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/parents.py +0 -0
  157. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/runlog.py +0 -0
  158. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/session.py +0 -0
  159. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/strict.py +0 -0
  160. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/updates.py +0 -0
  161. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/runtime/validate.py +0 -0
  162. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/__init__.py +0 -0
  163. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/argspec.py +0 -0
  164. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/coerce.py +0 -0
  165. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/command_contract.py +0 -0
  166. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/conditions.py +0 -0
  167. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/dashboard_pages.py +0 -0
  168. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/dashboard_review.py +0 -0
  169. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/data_quality.py +0 -0
  170. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/dispatch.py +0 -0
  171. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/factory.py +0 -0
  172. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/input_fields.py +0 -0
  173. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/mapping.py +0 -0
  174. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/openapi_types.py +0 -0
  175. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/positionals.py +0 -0
  176. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/protocol.py +0 -0
  177. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/sdk_service.py +0 -0
  178. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/testing.py +0 -0
  179. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/services/type_system.py +0 -0
  180. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/skills/__init__.py +0 -0
  181. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/skills/installer.py +0 -0
  182. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/skills/steering.py +0 -0
  183. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/mammoth_cli/testing.py +0 -0
  184. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/activity.yaml +0 -0
  185. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/addon.yaml +0 -0
  186. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/agent.yaml +0 -0
  187. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/ai.yaml +0 -0
  188. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/annotation.yaml +0 -0
  189. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/auth.yaml +0 -0
  190. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/automation.yaml +0 -0
  191. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/batch.yaml +0 -0
  192. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/billing.yaml +0 -0
  193. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/browse.yaml +0 -0
  194. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/capability.yaml +0 -0
  195. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/client-app.yaml +0 -0
  196. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/completion.yaml +0 -0
  197. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/config.yaml +0 -0
  198. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/connector.yaml +0 -0
  199. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/context.yaml +0 -0
  200. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/data-app.yaml +0 -0
  201. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/dataset.yaml +0 -0
  202. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/doctor.yaml +0 -0
  203. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/external-key.yaml +0 -0
  204. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/file.yaml +0 -0
  205. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/folder.yaml +0 -0
  206. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/job.yaml +0 -0
  207. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/log.yaml +0 -0
  208. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/notification.yaml +0 -0
  209. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/parameter.yaml +0 -0
  210. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/project.yaml +0 -0
  211. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/report.yaml +0 -0
  212. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/schedule.yaml +0 -0
  213. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/schema.yaml +0 -0
  214. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/skill.yaml +0 -0
  215. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/snippet.yaml +0 -0
  216. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/support.yaml +0 -0
  217. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/template.yaml +0 -0
  218. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/trash.yaml +0 -0
  219. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/upgrade.yaml +0 -0
  220. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/user.yaml +0 -0
  221. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/version.yaml +0 -0
  222. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/view.yaml +0 -0
  223. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/webhook.yaml +0 -0
  224. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/workflow.yaml +0 -0
  225. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/commands/workspace.yaml +0 -0
  226. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/openapi-operations.yaml +0 -0
  227. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/manifests/schema-v1.json +0 -0
  228. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/openapi/metadata.json +0 -0
  229. {mammoth_cli-2.0.53 → mammoth_cli-2.0.55}/spec/openapi/openapi.json +0 -0
@@ -11,3 +11,4 @@ build/
11
11
  .ruff_cache/
12
12
  __pycache__/
13
13
  .coverage
14
+ release-assets/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mammoth-cli
3
- Version: 2.0.53
3
+ Version: 2.0.55
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.24
20
+ Requires-Dist: mammoth-io<0.8,>=0.7.26
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.53"
9
+ __version__ = "2.0.55"
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.53
3
+ version: 2.0.55
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
 
@@ -140,10 +140,10 @@ your report. If no column links the files, ask before you combine them.
140
140
  - `mammoth skill show --input '{"file": "references/recipes/transforms.md"}'`
141
141
  prints any file of this skill; `mammoth skill agents-md install` writes a
142
142
  steering block into a repository's AGENTS.md so later sessions start here.
143
- - `COMMAND --help` lists the input fields with types; `mammoth schema get
144
- COMMAND_ID` is the full contract (add `--input '{"full": true}'` for the
145
- JSON Schema); `schema list` is the family index, `schema list view` one
146
- family, `schema find WORDS` a search.
143
+ - `COMMAND --help` lists input fields; `schema find WORDS` inlines
144
+ `accepted_fields`/`agent_example` for top matches, else `mammoth schema
145
+ get COMMAND_ID` (`--input '{"full": true}'` for the schema); `schema
146
+ list`/`schema list view` list families.
147
147
  - Uploads return a **dataset** id; transforms, joins, exports and previews
148
148
  take the **view** id from `view list DATASET_ID`.
149
149
  - `view list` and `view get` return the brief record (id, ds_id, name,
@@ -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 557; 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 565; 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
 
@@ -21,7 +21,7 @@ Load only the applicable domain file:
21
21
  - [connector](commands/connector.md) — 22 published commands
22
22
  - [context](commands/context.md) — 3 published commands
23
23
  - [dashboard-qa](commands/dashboard-qa.md) — 13 published commands
24
- - [dashboard](commands/dashboard.md) — 90 published commands
24
+ - [dashboard](commands/dashboard.md) — 98 published commands
25
25
  - [data-app](commands/data-app.md) — 12 published commands
26
26
  - [dataset](commands/dataset.md) — 17 published commands
27
27
  - [doctor](commands/doctor.md) — 1 published commands
@@ -222,6 +222,86 @@ Result: `DashboardDuplicateResult`; mutation `benign_mutation`, confirmation `no
222
222
 
223
223
  Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: id. duplicated D=52 -> D2=54 Single invocation only; no error-path or variant coverage.
224
224
 
225
+ ### `dashboard.embed.config.get`
226
+
227
+ Run: `mammoth dashboard embed config get`. Exact input fields: `mammoth schema get dashboard.embed.config.get`.
228
+
229
+ Example: `mammoth dashboard embed config get 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
230
+
231
+ Result: `DashboardEmbedConfigGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
232
+
233
+ Status on release: untried; no live run recorded.
234
+
235
+ ### `dashboard.embed.config.set`
236
+
237
+ Run: `mammoth dashboard embed config set`. Exact input fields: `mammoth schema get dashboard.embed.config.set`.
238
+
239
+ Example: `mammoth dashboard embed config set 123 --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
240
+
241
+ Result: `DashboardEmbedConfigSetResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
242
+
243
+ Status on release: untried; no live run recorded.
244
+
245
+ ### `dashboard.embed.key.rotate`
246
+
247
+ Run: `mammoth dashboard embed key rotate`. Exact input fields: `mammoth schema get dashboard.embed.key.rotate`.
248
+
249
+ Example: `mammoth dashboard embed key rotate 123 --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
250
+
251
+ Result: `DashboardEmbedKeyRotateResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
252
+
253
+ Status on release: untried; no live run recorded.
254
+
255
+ ### `dashboard.embed.lifetime.set`
256
+
257
+ Run: `mammoth dashboard embed lifetime set`. Exact input fields: `mammoth schema get dashboard.embed.lifetime.set`.
258
+
259
+ Example: `mammoth dashboard embed lifetime set 123 --input '{"token_ttl": 1}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
260
+
261
+ Result: `DashboardEmbedLifetimeSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
262
+
263
+ Status on release: untried; no live run recorded.
264
+
265
+ ### `dashboard.embed.origin.revoke`
266
+
267
+ Run: `mammoth dashboard embed origin revoke`. Exact input fields: `mammoth schema get dashboard.embed.origin.revoke`.
268
+
269
+ Example: `mammoth dashboard embed origin revoke 123 --input '{"origin": "sample"}' --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
270
+
271
+ Result: `DashboardEmbedOriginRevokeResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
272
+
273
+ Status on release: untried; no live run recorded.
274
+
275
+ ### `dashboard.embed.preview-token.create`
276
+
277
+ Run: `mammoth dashboard embed preview-token create`. Exact input fields: `mammoth schema get dashboard.embed.preview-token.create`.
278
+
279
+ Example: `mammoth dashboard embed preview-token create 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
280
+
281
+ Result: `DashboardEmbedPreviewTokenCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
282
+
283
+ Status on release: untried; no live run recorded.
284
+
285
+ ### `dashboard.embed.secret.rotate`
286
+
287
+ Run: `mammoth dashboard embed secret rotate`. Exact input fields: `mammoth schema get dashboard.embed.secret.rotate`.
288
+
289
+ Example: `mammoth dashboard embed secret rotate 123 --yes --confirm 123`. Illustrative only: append `--yes --confirm <EXACT_TARGET>` after observing the target.
290
+
291
+ Result: `DashboardEmbedSecretRotateResult`; mutation `high_impact`, confirmation `confirm_target`, wait policy `not_async`.
292
+
293
+ Status on release: untried; no live run recorded.
294
+
295
+ ### `dashboard.embed.usage.get`
296
+
297
+ Run: `mammoth dashboard embed usage get`. Exact input fields: `mammoth schema get dashboard.embed.usage.get`.
298
+
299
+ Example: `mammoth dashboard embed usage get 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
300
+
301
+ Result: `DashboardEmbedUsageGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
302
+
303
+ Status on release: untried; no live run recorded.
304
+
225
305
  ### `dashboard.exemplar.extract`
226
306
 
227
307
  Run: `mammoth dashboard exemplar extract`. Exact input fields: `mammoth schema get dashboard.exemplar.extract`.
@@ -155,3 +155,36 @@ before that they return 404 `DASHBOARD_NOT_FOUND`. Legacy widget routes
155
155
  `video export` needs a motion-story dashboard. Revert the share
156
156
  (`type_of_auth: "mammoth"`) before trashing a temporary dashboard.
157
157
 
158
+ ## Embedding a board on a third-party page
159
+
160
+ `dashboard embed config get DASHBOARD_ID` reads the board's embed settings
161
+ (mode, origin allowlist, the `embed_url`/`sdk_url` a snippet needs); the first
162
+ read on a non-public board without a key auto-mints one, so there is always a
163
+ key to copy. `dashboard embed config set DASHBOARD_ID --yes --confirm
164
+ DASHBOARD_ID --input '{"allow_any_origin": false, "allowed_origins":
165
+ ["https://intranet.example.com"]}'` restricts which sites may frame it —
166
+ `allow_any_origin` defaults to true (any site). `mode: "signed"` requires a
167
+ host-signed token instead of the board's key, and only applies while the
168
+ board has no public link. `config set` is a `confirm_target` command, like
169
+ `dashboard archive`: it can expose the board outside Mammoth (enabling
170
+ embedding or widening the allowlist) or break every live embed on that board
171
+ (disabling it or narrowing the allowlist).
172
+
173
+ `dashboard embed key rotate DASHBOARD_ID --yes --confirm DASHBOARD_ID`
174
+ replaces the board's embed key (the old key keeps working for 24h unless
175
+ `keep_previous: false` is passed) — also `confirm_target`. `dashboard embed
176
+ origin revoke DASHBOARD_ID --yes --confirm DASHBOARD_ID --input
177
+ '{"origin": "https://old.example.com"}'` removes one origin from the
178
+ allowlist without touching the rest — also `confirm_target`: it immediately
179
+ breaks the embed on that origin's site. `dashboard embed usage get
180
+ DASHBOARD_ID` reports per-origin render counts and health from the embed
181
+ registry. `dashboard embed preview-token create DASHBOARD_ID` mints a
182
+ short-lived signed token for testing a row-level-security-scoped embed
183
+ before publishing.
184
+
185
+ Two settings are workspace-scoped, not board-scoped: `dashboard embed secret
186
+ rotate WORKSPACE_ID --yes --confirm WORKSPACE_ID` (also `confirm_target`;
187
+ returns the plaintext signing secret once, never on a read) and `dashboard
188
+ embed lifetime set WORKSPACE_ID --input '{"token_ttl": 900}'` (60-3600
189
+ seconds, how long a minted embed viewer session lives).
190
+
@@ -572,6 +572,20 @@ def project_check(invocation: Invocation) -> HandlerResult:
572
572
  }
573
573
  if "before_dashboard" in preview:
574
574
  entry["before_dashboard"] = preview["before_dashboard"]
575
+ other_views = preview.get("other_views")
576
+ if other_views:
577
+ # Only the first (most recent) view is previewed and checked.
578
+ # Say so explicitly instead of letting silence read as "this
579
+ # is the only view" -- which view to change is the user's
580
+ # call unless they already named one.
581
+ entry["other_views"] = other_views
582
+ other_desc = ", ".join(f"{v['id']} ({v.get('name')})" for v in other_views)
583
+ to_report.append(
584
+ f"dataset {dataset.get('name')} (id {dataset_id}) has "
585
+ f"{len(other_views) + 1} views; only view {preview['view_id']} was "
586
+ f"checked (others: {other_desc}). Which view to change is the "
587
+ "user's pick unless they named one."
588
+ )
575
589
  views.append(entry)
576
590
  where = f"view {preview['view_id']} ({dataset.get('name')})"
577
591
  to_report += [_report_line(where, w) for w in entry["column_warnings"]]
@@ -376,6 +376,14 @@ HANDLERS: dict[str, Handler] = {
376
376
  "dashboard.assess-twb": dashboard_cmd.dashboard_assess_twb,
377
377
  "dashboard.assess-pbix": dashboard_cmd.dashboard_assess_pbix,
378
378
  "dashboard.import-workbook": dashboard_cmd.dashboard_import_workbook,
379
+ "dashboard.embed.config.get": dashboard_cmd.generated_dashboard,
380
+ "dashboard.embed.config.set": dashboard_cmd.generated_dashboard,
381
+ "dashboard.embed.key.rotate": dashboard_cmd.generated_dashboard,
382
+ "dashboard.embed.usage.get": dashboard_cmd.generated_dashboard,
383
+ "dashboard.embed.origin.revoke": dashboard_cmd.generated_dashboard,
384
+ "dashboard.embed.preview-token.create": dashboard_cmd.generated_dashboard,
385
+ "dashboard.embed.secret.rotate": dashboard_cmd.generated_dashboard,
386
+ "dashboard.embed.lifetime.set": dashboard_cmd.generated_dashboard,
379
387
  # workflow family
380
388
  "workflow.block.add": workflow_cmd.workflow_block_add,
381
389
  "workflow.block.auth": workflow_cmd.workflow_block_auth,
@@ -227,6 +227,14 @@ _SCOPE_REQUIREMENTS: dict[str, dict[str, Any]] = {
227
227
 
228
228
  _MAX_FIND_RESULTS = 20
229
229
  _MAX_FIND_LIMIT = 100
230
+ # How many of a find's top matches carry inline accepted_fields/agent_example.
231
+ # 35% of all eval tool calls were command discovery (schema find -> schema
232
+ # get) because find's compact entry gave a command_id but not what to pass
233
+ # it; inlining the top few lets an agent act without a second round trip in
234
+ # the common case where one of them is right. Bounded to a few commands so a
235
+ # broad query never balloons the result (the tool result goes into the
236
+ # model's context).
237
+ _INLINE_DETAIL_COUNT = 3
230
238
 
231
239
  # Search is intentionally a small, deterministic intent matcher rather than a
232
240
  # fuzzy/remote search service. The aliases describe language users commonly
@@ -369,6 +377,19 @@ def _accepted_fields(record: dict[str, Any]) -> list[dict[str, Any]] | None:
369
377
  ]
370
378
 
371
379
 
380
+ def _compact_accepted_fields(record: dict[str, Any]) -> list[dict[str, Any]] | None:
381
+ """``_accepted_fields`` without the per-field JSON Schema.
382
+
383
+ A find result inlines this for its top matches: enough to compose a call
384
+ (name, type, required, enum) without the nested-schema detail ``schema
385
+ get`` returns.
386
+ """
387
+ fields = _accepted_fields(record)
388
+ if fields is None:
389
+ return None
390
+ return [{key: field[key] for key in ("name", "type", "required", "enum")} for field in fields]
391
+
392
+
372
393
  def _externally_supplied_fields(command_id: str) -> frozenset[str]:
373
394
  """Fields supplied by positionals or authenticated CLI context."""
374
395
  if command_id in LOCAL_COMMANDS:
@@ -872,8 +893,14 @@ def runnable_example(
872
893
  # their manifests advertise; otherwise discovery emits a command that
873
894
  # deterministically fails before dispatch.
874
895
  tokens.append("--yes")
875
- if record["command_id"] == "project.resource-dependencies.update":
876
- # This command has a confirm_target policy. Keep its generated
896
+ if record["command_id"] in {
897
+ "project.resource-dependencies.update",
898
+ "dashboard.embed.key.rotate",
899
+ "dashboard.embed.secret.rotate",
900
+ "dashboard.embed.config.set",
901
+ "dashboard.embed.origin.revoke",
902
+ }:
903
+ # These commands have a confirm_target policy. Keep their generated
877
904
  # example executable in non-interactive mode instead of advertising a
878
905
  # request that the safety guard will reject.
879
906
  tokens.extend(["--yes", "--confirm", str(_sample_positional_value(positionals[0]))])
@@ -1301,6 +1328,17 @@ def find_schemas(
1301
1328
  )
1302
1329
  total_matches = len(ranked_matches)
1303
1330
  page = [match for _, match in ranked_matches[offset : offset + bounded_limit]]
1331
+ for rank, match in enumerate(page, start=offset):
1332
+ if rank >= _INLINE_DETAIL_COUNT:
1333
+ break
1334
+ match_record = command_by_id(match["command_id"])
1335
+ if match_record is None:
1336
+ continue
1337
+ fields = _compact_accepted_fields(match_record)
1338
+ if fields is not None:
1339
+ match["accepted_fields"] = fields
1340
+ if match_record.get("agent_example"):
1341
+ match["agent_example"] = match_record["agent_example"]
1304
1342
  has_more = offset + len(page) < total_matches
1305
1343
  continuation = (
1306
1344
  {
@@ -2307,16 +2307,25 @@ def view_export_specialized(invocation: Invocation) -> HandlerResult:
2307
2307
  if is_dataset_route and isinstance(data, int):
2308
2308
  # The SDK returns the bare id of the dataset written to; name it, and
2309
2309
  # say which project it landed in, so the agent's next read is obvious.
2310
+ # The written dataset's view id/name is resolved here too: an append
2311
+ # (save_as_mode=APPEND_TO_DS) never changes it, so telling the agent
2312
+ # to go re-list every time -- as a text-only 'next' hint used to --
2313
+ # cost one avoidable round trip per append to the same dataset. Best
2314
+ # effort: a failed lookup falls back to the old hint instead.
2310
2315
  data = {
2311
2316
  "dataset_id": data,
2312
2317
  "project_id": result_project_id,
2313
2318
  "source_view_id": dataview_id,
2314
- "next": (
2315
- f"mammoth view list {data}"
2316
- + (f" --project {result_project_id}" if target_project is not None else "")
2317
- ),
2318
2319
  }
2319
- rows_after = _dataset_row_count(service, data["dataset_id"], result_project_id)
2320
+ view_info = _dataset_view_info(service, data["dataset_id"], result_project_id)
2321
+ if view_info is not None:
2322
+ data["view_id"] = view_info["id"]
2323
+ data["view_name"] = view_info["name"]
2324
+ else:
2325
+ data["next"] = f"mammoth view list {data['dataset_id']}" + (
2326
+ f" --project {result_project_id}" if target_project is not None else ""
2327
+ )
2328
+ rows_after = view_info["row_count"] if view_info is not None else None
2320
2329
  if rows_after is not None:
2321
2330
  data["rows_after"] = rows_after
2322
2331
  if rows_before is not None:
@@ -2342,6 +2351,35 @@ def _dataset_row_count(service: Any, dataset_id: int, project_id: int | None) ->
2342
2351
  return None
2343
2352
 
2344
2353
 
2354
+ def _dataset_view_info(
2355
+ service: Any, dataset_id: int, project_id: int | None
2356
+ ) -> dict[str, Any] | None:
2357
+ """Id, name, and row count of a dataset's current (most recent) view, best effort.
2358
+
2359
+ Used right after ``view.export.dataset`` writes to ``dataset_id``: the
2360
+ id/name let the response carry the view an agent needs next instead of a
2361
+ 'go list it' hint (an append never changes it), and the row count feeds
2362
+ ``rows_after`` -- one listing call instead of two. Any failure returns
2363
+ None; the caller falls back to the 'next' hint and skips ``rows_after``.
2364
+ """
2365
+ try:
2366
+ listing = service.call(_DATAVIEW_LIST_SYMBOL, dataset_id=dataset_id, project_id=project_id)
2367
+ views = listing.get("dataviews") if isinstance(listing, dict) else None
2368
+ if not isinstance(views, list) or not views or not isinstance(views[0], dict):
2369
+ return None
2370
+ view_id = views[0].get("id")
2371
+ if not isinstance(view_id, int):
2372
+ return None
2373
+ except Exception: # noqa: BLE001 -- best effort; the caller's fallbacks still work
2374
+ return None
2375
+ row_count = views[0].get("row_count")
2376
+ return {
2377
+ "id": view_id,
2378
+ "name": views[0].get("name"),
2379
+ "row_count": int(row_count) if row_count is not None else None,
2380
+ }
2381
+
2382
+
2345
2383
  _DATAVIEW_LIST_SYMBOL = "mammoth.api.dataviews.DataviewsAPI.list"
2346
2384
  #: Rows an upload shows of each new view (enough to see keys and formats).
2347
2385
  _UPLOAD_SAMPLE_ROWS = 3
@@ -2365,6 +2403,15 @@ def upload_preview(service: Any, dataset_id: int, project_id: int | None) -> dic
2365
2403
  views = listing.get("dataviews") if isinstance(listing, dict) else None
2366
2404
  if not isinstance(views, list) or not views or not isinstance(views[0], dict):
2367
2405
  return None
2406
+ # A dataset with more than one live view has one previewed here; the
2407
+ # rest are named (id + name) so a caller (``project.check``) can say
2408
+ # a view besides the one checked exists, rather than silently acting
2409
+ # on the single view this function happens to preview.
2410
+ other_views = [
2411
+ {"id": other.get("id"), "name": other.get("name")}
2412
+ for other in views[1:]
2413
+ if isinstance(other, dict) and isinstance(other.get("id"), int)
2414
+ ]
2368
2415
  record = apply_column_renames(views[0])
2369
2416
  view_id = record.get("id")
2370
2417
  if not isinstance(view_id, int):
@@ -2412,6 +2459,8 @@ def upload_preview(service: Any, dataset_id: int, project_id: int | None) -> dic
2412
2459
  hints = []
2413
2460
  if hints:
2414
2461
  preview["before_dashboard"] = {"warnings": hints, "note": UPLOAD_NOTE}
2462
+ if other_views:
2463
+ preview["other_views"] = other_views
2415
2464
  return preview
2416
2465
 
2417
2466
 
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.0.53"
3
+ version = "2.0.55"
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.24,<0.8)",
10
+ "mammoth-io (>=0.7.26,<0.8)",
11
11
  "typer (>=0.27,<0.28)",
12
12
  "rich (>=15,<16)",
13
13
  "platformdirs (>=4.10,<5)",