mammoth-cli 2.0.70__tar.gz → 2.0.72__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/PKG-INFO +1 -1
  2. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/app.py +16 -1
  4. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +6 -7
  5. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +9 -4
  6. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/schema.py +8 -0
  7. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/view_ops.py +26 -0
  8. mammoth_cli-2.0.72/mammoth_cli/runtime/verify.py +111 -0
  9. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/pyproject.toml +1 -1
  10. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/dashboard.yaml +4 -4
  11. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/.gitignore +0 -0
  12. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/LICENSE +0 -0
  13. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/README.md +0 -0
  14. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/__main__.py +0 -0
  15. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  16. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  17. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  18. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  19. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  20. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  21. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  22. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  23. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  24. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  25. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  26. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  27. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  28. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  29. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  30. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  31. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  32. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  33. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  34. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  35. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  36. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  37. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  38. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  39. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  40. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  41. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  42. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  43. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  44. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  45. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  46. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  47. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  48. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  49. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  50. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  51. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  52. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  53. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  54. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  55. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  56. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  57. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  58. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  59. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  60. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  61. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  62. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  63. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  64. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  65. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  66. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  67. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  68. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  69. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  70. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  71. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  72. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  73. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  74. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  75. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  76. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  77. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  78. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  79. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  80. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  81. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  82. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  83. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  84. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  85. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/__init__.py +0 -0
  86. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/activity.py +0 -0
  87. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/addon.py +0 -0
  88. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/agent.py +0 -0
  89. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/ai.py +0 -0
  90. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/annotation.py +0 -0
  91. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/auth.py +0 -0
  92. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/automation.py +0 -0
  93. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/batch.py +0 -0
  94. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/billing.py +0 -0
  95. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/browse.py +0 -0
  96. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/capability.py +0 -0
  97. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/client_app.py +0 -0
  98. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/completion.py +0 -0
  99. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/config.py +0 -0
  100. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/connector.py +0 -0
  101. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/context.py +0 -0
  102. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/dashboard.py +0 -0
  103. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/data_app.py +0 -0
  104. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/dataset.py +0 -0
  105. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/doctor.py +0 -0
  106. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/external_key.py +0 -0
  107. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/file.py +0 -0
  108. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/folder.py +0 -0
  109. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/job.py +0 -0
  110. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/notification.py +0 -0
  111. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/parameter.py +0 -0
  112. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/project.py +0 -0
  113. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/registry.py +0 -0
  114. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/report.py +0 -0
  115. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/schedule.py +0 -0
  116. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/skill.py +0 -0
  117. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/snippet.py +0 -0
  118. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/support.py +0 -0
  119. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/template.py +0 -0
  120. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/trash.py +0 -0
  121. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/upgrade.py +0 -0
  122. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/user.py +0 -0
  123. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/view.py +0 -0
  124. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/webhook.py +0 -0
  125. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/workflow.py +0 -0
  126. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/commands/workspace.py +0 -0
  127. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/__init__.py +0 -0
  128. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/credentials.py +0 -0
  129. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/endpoint.py +0 -0
  130. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/profiles.py +0 -0
  131. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/context/resolver.py +0 -0
  132. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/contracts/__init__.py +0 -0
  133. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/contracts/auth.py +0 -0
  134. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/embed.py +0 -0
  135. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/errors/__init__.py +0 -0
  136. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/errors/envelope.py +0 -0
  137. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/manifest/__init__.py +0 -0
  138. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/manifest/loader.py +0 -0
  139. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/messages/__init__.py +0 -0
  140. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/__init__.py +0 -0
  141. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/envelope.py +0 -0
  142. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/normalize.py +0 -0
  143. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/policy.py +0 -0
  144. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/progress.py +0 -0
  145. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/output/render.py +0 -0
  146. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/py.typed +0 -0
  147. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/__init__.py +0 -0
  148. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/confirm.py +0 -0
  149. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/dryrun.py +0 -0
  150. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/embedded.py +0 -0
  151. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/executor.py +0 -0
  152. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/input_loader.py +0 -0
  153. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/invocation.py +0 -0
  154. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/options.py +0 -0
  155. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/parents.py +0 -0
  156. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/runlog.py +0 -0
  157. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/session.py +0 -0
  158. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/strict.py +0 -0
  159. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/updates.py +0 -0
  160. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/runtime/validate.py +0 -0
  161. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/__init__.py +0 -0
  162. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/argspec.py +0 -0
  163. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/coerce.py +0 -0
  164. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/command_contract.py +0 -0
  165. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/conditions.py +0 -0
  166. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/dashboard_pages.py +0 -0
  167. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/dashboard_review.py +0 -0
  168. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/data_quality.py +0 -0
  169. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/dispatch.py +0 -0
  170. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/factory.py +0 -0
  171. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/input_fields.py +0 -0
  172. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/mapping.py +0 -0
  173. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/openapi_types.py +0 -0
  174. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/positionals.py +0 -0
  175. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/protocol.py +0 -0
  176. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/sdk_service.py +0 -0
  177. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/testing.py +0 -0
  178. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/services/type_system.py +0 -0
  179. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/skills/__init__.py +0 -0
  180. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/skills/installer.py +0 -0
  181. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/skills/steering.py +0 -0
  182. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/mammoth_cli/testing.py +0 -0
  183. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/activity.yaml +0 -0
  184. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/addon.yaml +0 -0
  185. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/agent.yaml +0 -0
  186. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/ai.yaml +0 -0
  187. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/annotation.yaml +0 -0
  188. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/auth.yaml +0 -0
  189. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/automation.yaml +0 -0
  190. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/batch.yaml +0 -0
  191. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/billing.yaml +0 -0
  192. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/browse.yaml +0 -0
  193. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/capability.yaml +0 -0
  194. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/client-app.yaml +0 -0
  195. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/completion.yaml +0 -0
  196. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/config.yaml +0 -0
  197. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/connector.yaml +0 -0
  198. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/context.yaml +0 -0
  199. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/data-app.yaml +0 -0
  200. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/dataset.yaml +0 -0
  201. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/doctor.yaml +0 -0
  202. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/external-key.yaml +0 -0
  203. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/file.yaml +0 -0
  204. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/folder.yaml +0 -0
  205. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/job.yaml +0 -0
  206. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/log.yaml +0 -0
  207. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/notification.yaml +0 -0
  208. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/parameter.yaml +0 -0
  209. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/project.yaml +0 -0
  210. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/report.yaml +0 -0
  211. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/schedule.yaml +0 -0
  212. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/schema.yaml +0 -0
  213. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/skill.yaml +0 -0
  214. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/snippet.yaml +0 -0
  215. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/support.yaml +0 -0
  216. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/template.yaml +0 -0
  217. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/trash.yaml +0 -0
  218. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/upgrade.yaml +0 -0
  219. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/user.yaml +0 -0
  220. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/version.yaml +0 -0
  221. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/view.yaml +0 -0
  222. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/webhook.yaml +0 -0
  223. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/workflow.yaml +0 -0
  224. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/commands/workspace.yaml +0 -0
  225. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/openapi-operations.yaml +0 -0
  226. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/schema-v1.json +0 -0
  227. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/sdk-catalog.source.yaml +0 -0
  228. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/manifests/sdk-methods.yaml +0 -0
  229. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/openapi/metadata.json +0 -0
  230. {mammoth_cli-2.0.70 → mammoth_cli-2.0.72}/spec/openapi/openapi.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mammoth-cli
3
- Version: 2.0.70
3
+ Version: 2.0.72
4
4
  Summary: Command-line interface for the Mammoth Analytics platform
5
5
  Project-URL: homepage, https://mammoth.io
6
6
  Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
@@ -6,7 +6,7 @@ not implement a second HTTP client and does not call private SDK members.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "2.0.70"
9
+ __version__ = "2.0.72"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -44,6 +44,7 @@ from mammoth_cli.output.policy import (
44
44
  from mammoth_cli.runtime import executor, validate
45
45
  from mammoth_cli.runtime.invocation import Invocation
46
46
  from mammoth_cli.runtime.strict import validate_extra_args
47
+ from mammoth_cli.runtime.verify import with_verify
47
48
  from mammoth_cli.services.positionals import PositionalSpec, resolve_positionals
48
49
 
49
50
  OUTPUT_MODES = VALID_OUTPUTS
@@ -823,7 +824,8 @@ def _execute(invocation: Invocation) -> None:
823
824
  raise not_implemented_error(invocation.command_id, sdk_symbol)
824
825
  if invocation.dry_run:
825
826
  return _dry_run(handler, invocation)
826
- return handler(invocation)
827
+ data, meta = handler(invocation)
828
+ return _apply_verify(invocation.command_id, data), meta
827
829
 
828
830
  executor.run(
829
831
  invocation.command_id,
@@ -835,6 +837,19 @@ def _execute(invocation: Invocation) -> None:
835
837
  )
836
838
 
837
839
 
840
+ def _apply_verify(command_id: str, data: Any) -> Any:
841
+ """Add the automatic write read-back to a real, mutating, API-backed result.
842
+
843
+ A read command and a command with no reviewed ``sdk_symbol`` (a local or
844
+ not-yet-backed command) are returned unchanged; ``--dry-run`` never
845
+ reaches this at all, since it returns before the handler's real call.
846
+ """
847
+ record = command_by_id(command_id) or {}
848
+ if record.get("mutation_class") == "read" or not record.get("sdk_symbol"):
849
+ return data
850
+ return with_verify(data)
851
+
852
+
838
853
  def _dry_run(handler: Handler, invocation: Invocation) -> tuple[Any, dict[str, Any]]:
839
854
  """Run ``handler`` until its request would leave; report that request.
840
855
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mammoth-cli
3
- version: 2.0.70
3
+ version: 2.0.72
4
4
  description: "Use Mammoth Analytics from a terminal: install or authenticate the CLI, discover its live command contract, and safely manage projects, data, views, pipelines (join, merge, pivot, filter, clean), dashboards, exports, and handoffs."
5
5
  ---
6
6
 
@@ -81,7 +81,7 @@ mammoth view transform --help # every data transformation
81
81
  | Change a column's type | `view transform convert-type` |
82
82
  | Rename a column, sort the rows (view settings, not tasks) | `view transform rename-columns`, `view transform sort` |
83
83
  | Rank, running total, previous row | `view transform window` |
84
- | A dashboard | `dashboard create-blank` ([dashboards](references/recipes/dashboards.md)) |
84
+ | A dashboard | `dashboard v3 generate`, then `chat edit` ([dashboards](references/recipes/dashboards.md)) |
85
85
  | Deliver the rows | `view export csv`, `view export postgres` (and other destinations), `view export dataset` |
86
86
  | 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 made from an uploaded file has no source to refresh from; say so. Full recipe, including a known `automation get` backend caveat: [recurring work](references/recipes/scheduling.md) |
87
87
 
@@ -122,11 +122,10 @@ dashboard from t_a and t_b"). Work it out from the data before you build:
122
122
  6. If the data has money, add it before you make the dashboard: `revenue`
123
123
  (`math`, `qty * price`, `new_column`), the `fix` in `before_dashboard`.
124
124
  A dashboard sees only the columns the view had when it was made.
125
- 7. Build the dashboard from the joined view
126
- ([dashboards](references/recipes/dashboards.md)) and chart the sum of
127
- revenue. Do not sum a unit price. `create-blank`, `canvas save` and
128
- `pages add` return `deliverable_check`: fix each warning, or say in the
129
- report why not.
125
+ 7. Build the dashboard from the joined view with one sentence
126
+ ([dashboards](references/recipes/dashboards.md)) that charts the sum of
127
+ revenue. Do not sum a unit price. Fix each `deliverable_check` warning,
128
+ or say in the report why not.
130
129
 
131
130
  For the defaults that most pipelines use (new column or overwrite, `LEFT`
132
131
  joins, date steps), see
@@ -2,18 +2,23 @@
2
2
 
3
3
  `dashboard create` (the legacy AI-generation engine) does not exist as a
4
4
  command: it has no handler in current apiv2 (always 404s; historically HTTP
5
- 409 `4DASH012 DASHBOARD_LEGACY_CREATION_RETIRED`). Create with `create-blank`
6
- (or `v3 generate` when the task allows an AI route).
5
+ 409 `4DASH012 DASHBOARD_LEGACY_CREATION_RETIRED`). Build a board from one
6
+ sentence with `v3 generate`, and change it with `chat edit`; author a canvas by
7
+ hand (`create-blank`, `canvas save`, `pages add`) only when asked to.
7
8
  `dashboard source list` is an observed blocker on release (see
8
9
  capabilities); verify the view binding with `dashboard get DASHBOARD_ID`
9
10
  (`data.dataview_id`) instead.
10
11
 
11
12
  ```bash
12
- mammoth schema get dashboard.create-blank
13
- mammoth dashboard create-blank --input INPUT_JSON --project PROJECT_ID
13
+ mammoth dashboard v3 generate --input '{"body": {"params": {"intent": "Monthly revenue by region, with top customers", "dataview_id": VIEW_ID}}}'
14
+ mammoth dashboard chat edit DASHBOARD_ID --input '{"body": {"params": {"prompt": "Add a chart of orders by status"}}}'
14
15
  mammoth dashboard get DASHBOARD_ID
15
16
  ```
16
17
 
18
+ `v3 generate` waits for the bake (about 30 s) and returns the baked canvas;
19
+ `chat edit` returns `changed` and a one-line `message`. Quote one number from
20
+ the board before you report it done.
21
+
17
22
  Discover page/widget/publish routes and verify the binding, draft/published
18
23
  data and terminal jobs. Use only returned IDs and schema confirmation policy;
19
24
  do not invent dashboard JSON or opaque task specs.
@@ -281,6 +281,14 @@ _COMMAND_DISCOVERY_PURPOSES = {
281
281
  "url app post posts events rows straight in"
282
282
  ),
283
283
  "dataset.create-from-pdf": "pdf table document extract get the table out of into a dataset",
284
+ "dashboard.v3.generate": (
285
+ "create build make new generate dashboard board report from a view description "
286
+ "intent sentence ai combined showing"
287
+ ),
288
+ "dashboard.chat.edit": (
289
+ "add change edit update chart charts kpi to an existing dashboard board "
290
+ "by description sentence ai show instead"
291
+ ),
284
292
  "dashboard.pdf.export": "pdf of a board dashboard download print meeting export",
285
293
  "view.checkpoint.create": (
286
294
  "stop halt pause pipeline alert notify flag when rows match a rule condition checkpoint"
@@ -25,6 +25,7 @@ from datetime import UTC, datetime, timedelta
25
25
  from typing import Any
26
26
 
27
27
  from mammoth_cli.commands.view import (
28
+ _DATAVIEW_GET_SYMBOL,
28
29
  _FIND_DATASET_SYMBOL,
29
30
  BRIEF_VIEW_FIELDS,
30
31
  _dataview_metadata,
@@ -245,6 +246,17 @@ def _meta(invocation: Invocation, workspace_id: int) -> dict[str, Any]:
245
246
  }
246
247
 
247
248
 
249
+ def _view_row_count(service: Any, dataset_id: int, view_id: int, project_id: int | None) -> Any:
250
+ """Return a view's current row count via the cheapest read (best effort)."""
251
+ try:
252
+ info = service.call(
253
+ _DATAVIEW_GET_SYMBOL, dataset_id=dataset_id, dataview_id=view_id, project_id=project_id
254
+ )
255
+ except Exception: # noqa: BLE001 -- the check is advice; the write already ran
256
+ return None
257
+ return info.get("row_count") if isinstance(info, dict) else None
258
+
259
+
248
260
  def _dispatch_view(
249
261
  invocation: Invocation,
250
262
  view_id: int,
@@ -262,7 +274,13 @@ def _dispatch_view(
262
274
  result to emit. ``prepare(service, dataset_id, kwargs)`` may edit the call
263
275
  arguments in place; when it returns a value, that value is emitted and no
264
276
  call is made. All three need the exact parent; without one they are skipped.
277
+
278
+ When neither ``before`` nor ``after`` is given (every plain transform),
279
+ the view's row count is read before and after the call and added to the
280
+ result as ``row_check``, so a caller always sees whether the write changed
281
+ the row count -- the join path builds its own richer ``join_check`` instead.
265
282
  """
283
+ auto_row_check = before is None and after is None
266
284
  # ``dataset_id`` is invocation-local resource context. It is not a View
267
285
  # transform argument, but passing it through lets the service fetch the
268
286
  # exact parent endpoint and prevents the SDK's legacy bare-view resolver
@@ -287,6 +305,11 @@ def _dispatch_view(
287
305
  if early is not None:
288
306
  return early, _meta(invocation, auth.workspace_id)
289
307
  state = before(service, int(dataset_id)) if before and dataset_id is not None else None
308
+ rows_before = (
309
+ _view_row_count(service, int(dataset_id), view_id, invocation.project)
310
+ if auto_row_check and dataset_id is not None
311
+ else None
312
+ )
290
313
  try:
291
314
  if dataset_id is None:
292
315
  _require_discovery_allowed(invocation, view_id)
@@ -306,6 +329,9 @@ def _dispatch_view(
306
329
  )
307
330
  if after is not None and dataset_id is not None:
308
331
  data = after(service, int(dataset_id), state, data)
332
+ elif auto_row_check and dataset_id is not None and isinstance(data, dict):
333
+ rows_after = _view_row_count(service, int(dataset_id), view_id, invocation.project)
334
+ data["row_check"] = {"rows_before": rows_before, "rows_after": rows_after}
309
335
  return data, _meta(invocation, auth.workspace_id)
310
336
 
311
337
 
@@ -0,0 +1,111 @@
1
+ """Automatic write read-back for every real, non-read API-backed command.
2
+
3
+ A backend write returns whatever shape that particular endpoint returns —
4
+ some carry ``has_error``, some a bare ``status``, some a pipeline job with its
5
+ own nested ``status``. :func:`with_verify` reads those backend-specific
6
+ signals once and adds one small, uniform ``verify`` block to the result, so
7
+ the agent that issued the write always has an explicit answer to "did this do
8
+ what it should" instead of re-deriving it per command.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from typing import Any
14
+
15
+ #: Below this share of matched rows, a join has enough misses to flag before
16
+ #: the caller builds anything further on it.
17
+ JOIN_MATCH_RATE_THRESHOLD = 0.8
18
+
19
+ _FAILURE_STATUSES = frozenset({"error", "failed", "failure"})
20
+ _FAILURE_PIPELINE_STATES = frozenset({"error", "ref_error"})
21
+
22
+
23
+ def with_verify(data: Any) -> Any:
24
+ """Return ``data`` with a ``verify`` read-back block added.
25
+
26
+ ``data`` that is not a dict (a dry-run report, a bare list, ...) is
27
+ returned unchanged.
28
+ """
29
+ if not isinstance(data, dict):
30
+ return data
31
+ verified = _verified(data)
32
+ state = _state(data)
33
+ rows_before, rows_after = _row_counts(data)
34
+ verify: dict[str, Any] = {"verified": verified, "state": state}
35
+ if rows_before is not None or rows_after is not None:
36
+ verify["rows_before"] = rows_before
37
+ verify["rows_after"] = rows_after
38
+ verify["warnings"] = _warnings(data)
39
+ verify["needs_user"] = _needs_user(
40
+ data, verified=verified, state=state, rows_before=rows_before, rows_after=rows_after
41
+ )
42
+ return {**data, "verify": verify}
43
+
44
+
45
+ def _job_status(data: dict[str, Any]) -> str | None:
46
+ job = data.get("job")
47
+ status = job.get("status") if isinstance(job, dict) else None
48
+ return status if isinstance(status, str) else None
49
+
50
+
51
+ def _verified(data: dict[str, Any]) -> bool:
52
+ if data.get("has_error"):
53
+ return False
54
+ for status in (data.get("status"), _job_status(data)):
55
+ if isinstance(status, str) and status.lower() in _FAILURE_STATUSES:
56
+ return False
57
+ pipeline_state = data.get("pipeline_state")
58
+ if isinstance(pipeline_state, str) and pipeline_state.lower() in _FAILURE_PIPELINE_STATES:
59
+ return False
60
+ return data.get("bake_ok") is not False
61
+
62
+
63
+ def _state(data: dict[str, Any]) -> str:
64
+ for key in ("pipeline_state", "status"):
65
+ value = data.get(key)
66
+ if value is not None:
67
+ return str(value)
68
+ return "done"
69
+
70
+
71
+ def _row_counts(data: dict[str, Any]) -> tuple[int | None, int | None]:
72
+ for key in ("row_check", "join_check"):
73
+ check = data.get(key)
74
+ if isinstance(check, dict):
75
+ return check.get("rows_before"), check.get("rows_after")
76
+ return None, None
77
+
78
+
79
+ def _warnings(data: dict[str, Any]) -> list[str]:
80
+ notes: list[str] = []
81
+ for key, value in data.items():
82
+ if not key.endswith("_check") or not isinstance(value, dict):
83
+ continue
84
+ for list_key in ("notes", "warnings"):
85
+ items = value.get(list_key)
86
+ if isinstance(items, list):
87
+ notes.extend(item if isinstance(item, str) else str(item) for item in items)
88
+ return notes
89
+
90
+
91
+ def _needs_user(
92
+ data: dict[str, Any],
93
+ *,
94
+ verified: bool,
95
+ state: str,
96
+ rows_before: int | None,
97
+ rows_after: int | None,
98
+ ) -> str | None:
99
+ if not verified:
100
+ return f"The change failed: {state}."
101
+ if rows_after == 0 and isinstance(rows_before, int) and rows_before > 0:
102
+ return f"The change left the view with no rows (was {rows_before})."
103
+ join_check = data.get("join_check")
104
+ match_rate = join_check.get("match_rate") if isinstance(join_check, dict) else None
105
+ if isinstance(match_rate, (int, float)) and match_rate < JOIN_MATCH_RATE_THRESHOLD:
106
+ percent = round(match_rate * 100)
107
+ return (
108
+ f"Only {percent}% of rows found a match in the join; the user should "
109
+ "confirm before building on it."
110
+ )
111
+ return None
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.0.70"
3
+ version = "2.0.72"
4
4
  description = "Command-line interface for the Mammoth Analytics platform"
5
5
  authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
6
6
  readme = "README.md"
@@ -490,7 +490,7 @@ commands:
490
490
  - CT-DASHBOARD-CHAT-EDIT-ERROR
491
491
  draft_test: null
492
492
  undo_test: null
493
- known_restrictions: null
493
+ known_restrictions: 'Changes an existing board from one sentence (add, remove or change a chart, KPI or page): {"body": {"params": {"prompt": "<the change>"}}}; returns changed, a one-line message and the rebaked canvas. Use it rather than dashboard pages add or canvas save.'
494
494
  reviewed_by: primary
495
495
  - command_id: dashboard.chat.history
496
496
  command_path: dashboard chat history
@@ -749,7 +749,7 @@ commands:
749
749
  - CT-DASHBOARD-CREATE-BLANK-ERROR
750
750
  draft_test: null
751
751
  undo_test: null
752
- known_restrictions: 'Input is {"params": {"dataview_id": VIEW_ID, "title": ...}} with --yes; returns {id, sequence}. The blank canvas has one page (p1) and no figures: author it with dashboard canvas get -> edit -> dashboard canvas save or dashboard pages add. One dataview per dashboard.'
752
+ known_restrictions: 'To build a board from a description, use dashboard v3 generate instead. Input is {"params": {"dataview_id": VIEW_ID, "title": ...}} with --yes; returns {id, sequence}. The blank canvas has one page (p1) and no figures: author it with dashboard chat edit, or by hand with dashboard canvas get -> edit -> dashboard canvas save or dashboard pages add. One dataview per dashboard.'
753
753
  reviewed_by: primary
754
754
  - command_id: dashboard.data.draft
755
755
  command_path: dashboard data draft
@@ -1673,7 +1673,7 @@ commands:
1673
1673
  - CT-DASHBOARD-PAGES-ADD-ERROR
1674
1674
  draft_test: null
1675
1675
  undo_test: null
1676
- known_restrictions: 'Requires --yes --confirm DASHBOARD_ID. body.params.pages is a list of PageAdd objects: {title, focus: {measure, dim, kpis: [...]}, charts: [{kind, title, dim, measure, agg}]}; the schema example''''s {} entry is not a usable page. The route runs through the LLM control guard: in the ILG simulation it dropped unit.prefix on a money card ("nothing in this data says which currency") that dashboard canvas save had kept, and reports that in data.message.'
1676
+ known_restrictions: 'To add or change content by description, use dashboard chat edit instead. Requires --yes --confirm DASHBOARD_ID. body.params.pages is a list of PageAdd objects: {title, focus: {measure, dim, kpis: [...]}, charts: [{kind, title, dim, measure, agg}]}; the schema example''''s {} entry is not a usable page. The route runs through the LLM control guard: in the ILG simulation it dropped unit.prefix on a money card ("nothing in this data says which currency") that dashboard canvas save had kept, and reports that in data.message.'
1677
1677
  reviewed_by: primary
1678
1678
  - command_id: dashboard.pdf-artifact
1679
1679
  command_path: dashboard pdf-artifact
@@ -4397,7 +4397,7 @@ commands:
4397
4397
  - CT-DASHBOARD-V3-GENERATE-ERROR
4398
4398
  draft_test: null
4399
4399
  undo_test: null
4400
- known_restrictions: null
4400
+ known_restrictions: 'This is how to make a dashboard: it builds and bakes a whole board from one sentence on one view. Input {"body": {"params": {"intent": "<what the board should show>", "dataview_id": VIEW_ID, "title": "<optional name>"}}}; waits (about 30 s) and returns the baked canvas. Change it afterwards with dashboard chat edit. dashboard create-blank is only for authoring a canvas by hand.'
4401
4401
  reviewed_by: primary
4402
4402
  - command_id: dashboard.video-state
4403
4403
  command_path: dashboard video-state
File without changes
File without changes
File without changes