mammoth-cli 2.0.87__tar.gz → 2.0.89__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 (247) hide show
  1. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/PKG-INFO +1 -1
  2. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +3 -2
  4. mammoth_cli-2.0.89/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +103 -0
  5. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +30 -100
  6. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +6 -1
  7. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +66 -2
  8. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/dashboard.py +70 -1
  9. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/dataset.py +45 -8
  10. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/registry.py +3 -0
  11. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/view_profile.py +32 -17
  12. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/errors/envelope.py +1 -0
  13. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/invocation.py +3 -0
  14. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/state.py +1 -0
  15. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/command_contract.py +28 -2
  16. mammoth_cli-2.0.89/mammoth_cli/services/dashboard_filters.py +81 -0
  17. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/data_profile.py +38 -3
  18. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/listing.py +33 -0
  19. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/pyproject.toml +1 -1
  20. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/dashboard.yaml +128 -1
  21. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/dataset.yaml +4 -1
  22. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/edits-target.source.yaml +2 -0
  23. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/.gitignore +0 -0
  24. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/LICENSE +0 -0
  25. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/README.md +0 -0
  26. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/__main__.py +0 -0
  27. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/app.py +0 -0
  28. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  29. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  30. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  31. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  32. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  33. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  34. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  35. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  36. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  37. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  38. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  39. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  40. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  41. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  42. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  43. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  44. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  45. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  46. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  47. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  48. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  49. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  50. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  51. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  52. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  53. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  54. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  55. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  56. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  57. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  58. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  59. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  60. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  61. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  62. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  63. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  64. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  65. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  66. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  67. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  68. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  69. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  70. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  71. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  72. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  73. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  74. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  75. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  76. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  77. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  78. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  79. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  80. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  81. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  82. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  83. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  84. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  85. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  86. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  87. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  88. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  89. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  90. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  91. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  92. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  93. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  94. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  95. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  96. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  97. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/__init__.py +0 -0
  98. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/activity.py +0 -0
  99. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/addon.py +0 -0
  100. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/agent.py +0 -0
  101. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/ai.py +0 -0
  102. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/annotation.py +0 -0
  103. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/auth.py +0 -0
  104. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/automation.py +0 -0
  105. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/batch.py +0 -0
  106. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/billing.py +0 -0
  107. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/browse.py +0 -0
  108. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/calc.py +0 -0
  109. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/capability.py +0 -0
  110. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/client_app.py +0 -0
  111. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/completion.py +0 -0
  112. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/config.py +0 -0
  113. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/connector.py +0 -0
  114. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/context.py +0 -0
  115. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/data_app.py +0 -0
  116. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/doctor.py +0 -0
  117. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/external_key.py +0 -0
  118. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/file.py +0 -0
  119. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/folder.py +0 -0
  120. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/job.py +0 -0
  121. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/notification.py +0 -0
  122. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/parameter.py +0 -0
  123. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/project.py +0 -0
  124. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/report.py +0 -0
  125. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/schedule.py +0 -0
  126. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/schema.py +0 -0
  127. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/skill.py +0 -0
  128. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/snippet.py +0 -0
  129. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/support.py +0 -0
  130. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/template.py +0 -0
  131. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/trash.py +0 -0
  132. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/upgrade.py +0 -0
  133. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/user.py +0 -0
  134. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/view.py +0 -0
  135. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/view_ops.py +0 -0
  136. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/webhook.py +0 -0
  137. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/workflow.py +0 -0
  138. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/commands/workspace.py +0 -0
  139. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/context/__init__.py +0 -0
  140. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/context/credentials.py +0 -0
  141. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/context/endpoint.py +0 -0
  142. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/context/profiles.py +0 -0
  143. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/context/resolver.py +0 -0
  144. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/contracts/__init__.py +0 -0
  145. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/contracts/auth.py +0 -0
  146. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/embed.py +0 -0
  147. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/errors/__init__.py +0 -0
  148. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/manifest/__init__.py +0 -0
  149. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/manifest/loader.py +0 -0
  150. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/messages/__init__.py +0 -0
  151. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/output/__init__.py +0 -0
  152. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/output/envelope.py +0 -0
  153. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/output/normalize.py +0 -0
  154. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/output/policy.py +0 -0
  155. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/output/progress.py +0 -0
  156. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/output/render.py +0 -0
  157. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/py.typed +0 -0
  158. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/__init__.py +0 -0
  159. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/confirm.py +0 -0
  160. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/dataset_health.py +0 -0
  161. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/dryrun.py +0 -0
  162. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  163. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/embedded.py +0 -0
  164. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/executor.py +0 -0
  165. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/input_loader.py +0 -0
  166. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/new_data.py +0 -0
  167. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/options.py +0 -0
  168. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/parents.py +0 -0
  169. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/runlog.py +0 -0
  170. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/session.py +0 -0
  171. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/strict.py +0 -0
  172. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/updates.py +0 -0
  173. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/validate.py +0 -0
  174. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/runtime/verify.py +0 -0
  175. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/__init__.py +0 -0
  176. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/argspec.py +0 -0
  177. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/board_values.py +0 -0
  178. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/coerce.py +0 -0
  179. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/conditions.py +0 -0
  180. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/dashboard_pages.py +0 -0
  181. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/dashboard_review.py +0 -0
  182. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/data_quality.py +0 -0
  183. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/dispatch.py +0 -0
  184. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/factory.py +0 -0
  185. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/input_fields.py +0 -0
  186. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/mapping.py +0 -0
  187. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/openapi_types.py +0 -0
  188. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/positionals.py +0 -0
  189. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/protocol.py +0 -0
  190. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/read_queries.py +0 -0
  191. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/sdk_service.py +0 -0
  192. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/stored_stats.py +0 -0
  193. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/testing.py +0 -0
  194. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/text_dates.py +0 -0
  195. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/services/type_system.py +0 -0
  196. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/skills/__init__.py +0 -0
  197. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/skills/installer.py +0 -0
  198. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/skills/steering.py +0 -0
  199. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/mammoth_cli/testing.py +0 -0
  200. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/activity.yaml +0 -0
  201. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/addon.yaml +0 -0
  202. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/agent.yaml +0 -0
  203. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/ai.yaml +0 -0
  204. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/annotation.yaml +0 -0
  205. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/auth.yaml +0 -0
  206. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/automation.yaml +0 -0
  207. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/batch.yaml +0 -0
  208. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/billing.yaml +0 -0
  209. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/browse.yaml +0 -0
  210. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/calc.yaml +0 -0
  211. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/capability.yaml +0 -0
  212. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/client-app.yaml +0 -0
  213. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/completion.yaml +0 -0
  214. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/config.yaml +0 -0
  215. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/connector.yaml +0 -0
  216. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/context.yaml +0 -0
  217. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/data-app.yaml +0 -0
  218. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/doctor.yaml +0 -0
  219. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/external-key.yaml +0 -0
  220. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/file.yaml +0 -0
  221. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/folder.yaml +0 -0
  222. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/job.yaml +0 -0
  223. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/log.yaml +0 -0
  224. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/notification.yaml +0 -0
  225. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/parameter.yaml +0 -0
  226. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/project.yaml +0 -0
  227. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/report.yaml +0 -0
  228. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/schedule.yaml +0 -0
  229. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/schema.yaml +0 -0
  230. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/skill.yaml +0 -0
  231. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/snippet.yaml +0 -0
  232. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/support.yaml +0 -0
  233. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/template.yaml +0 -0
  234. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/trash.yaml +0 -0
  235. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/upgrade.yaml +0 -0
  236. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/user.yaml +0 -0
  237. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/version.yaml +0 -0
  238. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/view.yaml +0 -0
  239. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/webhook.yaml +0 -0
  240. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/workflow.yaml +0 -0
  241. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/commands/workspace.yaml +0 -0
  242. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/openapi-operations.yaml +0 -0
  243. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/schema-v1.json +0 -0
  244. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/sdk-catalog.source.yaml +0 -0
  245. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/manifests/sdk-methods.yaml +0 -0
  246. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/spec/openapi/metadata.json +0 -0
  247. {mammoth_cli-2.0.87 → mammoth_cli-2.0.89}/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.87
3
+ Version: 2.0.89
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.87"
9
+ __version__ = "2.0.89"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -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 576; 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 579; 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
 
@@ -22,7 +22,8 @@ Load only the applicable domain file:
22
22
  - [connector](commands/connector.md) — 22 published commands
23
23
  - [context](commands/context.md) — 3 published commands
24
24
  - [dashboard-qa](commands/dashboard-qa.md) — 13 published commands
25
- - [dashboard](commands/dashboard.md) — 100 published commands
25
+ - [dashboard-style](commands/dashboard-style.md) — 10 published commands
26
+ - [dashboard](commands/dashboard.md) — 93 published commands
26
27
  - [data-app](commands/data-app.md) — 12 published commands
27
28
  - [dataset](commands/dataset.md) — 20 published commands
28
29
  - [doctor](commands/doctor.md) — 1 published commands
@@ -0,0 +1,103 @@
1
+ # `dashboard-style` commands
2
+
3
+ Every command returns the standard JSON envelope. On nonzero exit, read the error envelope and its `recovery_commands`; do not guess request fields. "Status on release" is joined from `docs/release-capability-matrix.json`: *ran once* means one bounded live run succeeded on the named CLI release, *untried* means nobody has run it, *not supported* means the backend refuses it. When this file disagrees with [capabilities](../capabilities.md) or a recipe, they win. Envelope shapes: [machine output](../machine-output.md).
4
+
5
+ ### `dashboard.style.custom.create`
6
+
7
+ Run: `mammoth dashboard style custom create`. Exact input fields: `mammoth schema get dashboard.style.custom.create`.
8
+
9
+ Example: `mammoth dashboard style custom create --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
10
+
11
+ Result: `DashboardStyleCustomCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
12
+
13
+ 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: style. created custom style id=1 with full unredacted colors/font/viz (no tokens field passed) Single invocation only; no error-path or variant coverage.
14
+
15
+ ### `dashboard.style.custom.delete`
16
+
17
+ Run: `mammoth dashboard style custom delete`. Exact input fields: `mammoth schema get dashboard.style.custom.delete`.
18
+
19
+ Example: `mammoth dashboard style custom delete resource-123`. Illustrative only: append `--yes` after observing an owned target.
20
+
21
+ Result: `DashboardStyleCustomDeleteResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
22
+
23
+ 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: ok. deleted custom style 1 Single invocation only; no error-path or variant coverage.
24
+
25
+ ### `dashboard.style.custom.list`
26
+
27
+ Run: `mammoth dashboard style custom list`. Exact input fields: `mammoth schema get dashboard.style.custom.list`.
28
+
29
+ Example: `mammoth dashboard style custom list`. Placeholders are illustrative; resolve IDs and input from observed reads.
30
+
31
+ Result: `DashboardStyleCustomListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
32
+
33
+ Status on release: ran once on CLI 2.0.12 — Bounded release read succeeded with pinned CLI 1.1.9 in workspace 4; empty custom-style list observed. No Full claim: no non-empty fixture. Also: Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: styles. empty custom styles list Sing…
34
+
35
+ ### `dashboard.style.custom.update`
36
+
37
+ Run: `mammoth dashboard style custom update`. Exact input fields: `mammoth schema get dashboard.style.custom.update`.
38
+
39
+ Example: `mammoth dashboard style custom update resource-123 --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
40
+
41
+ Result: `DashboardStyleCustomUpdateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
42
+
43
+ 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: style. renamed custom style 1 Single invocation only; no error-path or variant coverage.
44
+
45
+ ### `dashboard.style.default.get`
46
+
47
+ Run: `mammoth dashboard style default get`. Exact input fields: `mammoth schema get dashboard.style.default.get`.
48
+
49
+ Example: `mammoth dashboard style default get`. Placeholders are illustrative; resolve IDs and input from observed reads.
50
+
51
+ Result: `DashboardStyleDefaultGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
52
+
53
+ Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a real matched body {"styleId":"stone"} instead of raising ValidationError on an unmatched 2xx. Single invocation only.
54
+
55
+ ### `dashboard.style.default.set`
56
+
57
+ Run: `mammoth dashboard style default set`. Exact input fields: `mammoth schema get dashboard.style.default.set`.
58
+
59
+ Example: `mammoth dashboard style default set --input '{"body": {"params": {"styleId": "sample"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
60
+
61
+ Result: `DashboardStyleDefaultSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
62
+
63
+ Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. Set styleId to the exact value read from style default get ("stone"), i.e. a verified no-op restore. Result {"styleId":"stone"}; re-ran style default get afterward and confirmed it still…
64
+
65
+ ### `dashboard.style.derive`
66
+
67
+ Run: `mammoth dashboard style derive`. Exact input fields: `mammoth schema get dashboard.style.derive`.
68
+
69
+ Example: `mammoth dashboard style derive --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
70
+
71
+ Result: `DashboardStyleDeriveResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
72
+
73
+ Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a full real styleTokens object (colors, font, viz palette, radius, shadow, etc.) with no '***REDACTED***' placeholders anywhere in the body. Single…
74
+
75
+ ### `dashboard.style.extract-brand`
76
+
77
+ Run: `mammoth dashboard style extract-brand`. Exact input fields: `mammoth schema get dashboard.style.extract-brand`.
78
+
79
+ Example: `mammoth dashboard style extract-brand --input '{"body": {"params": {"url": "https://example.com/data.csv"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
80
+
81
+ Result: `DashboardStyleExtractBrandResult`; mutation `benign_mutation`, confirmation `none`, wait policy `always_wait`.
82
+
83
+ 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: screenshot, signals. captured screenshot + extracted brand signals (accents/font/ground/primary), no redaction here Single invocation only; no error-path or variant coverage.
84
+
85
+ ### `dashboard.style.preset.list`
86
+
87
+ Run: `mammoth dashboard style preset list`. Exact input fields: `mammoth schema get dashboard.style.preset.list`.
88
+
89
+ Example: `mammoth dashboard style preset list`. Placeholders are illustrative; resolve IDs and input from observed reads.
90
+
91
+ Result: `DashboardStylePresetListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
92
+
93
+ Status on release: ran once on CLI 2.0.12 — Bounded release read succeeded with pinned CLI 1.1.9 in workspace 4; 10 stock presets returned. No Full claim: custom preset fixture not observed. Also: Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: presets. returns built-in styl…
94
+
95
+ ### `dashboard.style.token.list`
96
+
97
+ Run: `mammoth dashboard style token list`. Exact input fields: `mammoth schema get dashboard.style.token.list`.
98
+
99
+ Example: `mammoth dashboard style token list resource-123`. Placeholders are illustrative; resolve IDs and input from observed reads.
100
+
101
+ Result: `DashboardStyleTokenListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
102
+
103
+ Status on release: ran once on CLI 1.1.11 — Published PyPI CLI 1.1.11 / SDK 0.7.1 read of observed preset stone returned a redacted token payload. Bounded to one preset and redacted semantics; not Full. Dashboard sweep 2026-09-18 on release observed cli_error: HTTP 200 but result is tokens='***REDACTED…
@@ -342,6 +342,36 @@ Result: `DashboardFigureIntentResult`; mutation `benign_mutation`, confirmation
342
342
 
343
343
  Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a full matched structured body ({"added":{...},"kind":"bar","spec":{...},"intentApplied":true,...}) instead of raising ValidationError on an unmatch…
344
344
 
345
+ ### `dashboard.filter.add`
346
+
347
+ Run: `mammoth dashboard filter add`. Exact input fields: `mammoth schema get dashboard.filter.add`.
348
+
349
+ Example: `mammoth dashboard filter add 123 --input '{"field": "sample"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
350
+
351
+ Result: `DashboardFilterResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
352
+
353
+ Status on release: untried; no live run recorded.
354
+
355
+ ### `dashboard.filter.list`
356
+
357
+ Run: `mammoth dashboard filter list`. Exact input fields: `mammoth schema get dashboard.filter.list`.
358
+
359
+ Example: `mammoth dashboard filter list 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
360
+
361
+ Result: `DashboardFilterResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
362
+
363
+ Status on release: untried; no live run recorded.
364
+
365
+ ### `dashboard.filter.remove`
366
+
367
+ Run: `mammoth dashboard filter remove`. Exact input fields: `mammoth schema get dashboard.filter.remove`.
368
+
369
+ Example: `mammoth dashboard filter remove 123 --input '{"field": "sample"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
370
+
371
+ Result: `DashboardFilterResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
372
+
373
+ Status on release: untried; no live run recorded.
374
+
345
375
  ### `dashboard.get`
346
376
 
347
377
  Run: `mammoth dashboard get`. Exact input fields: `mammoth schema get dashboard.get`.
@@ -650,106 +680,6 @@ Result: `DashboardSourceListResult`; mutation `read`, confirmation `none`, wait
650
680
 
651
681
  Status on release: observed blocker — blocker; still broken, not one of the 11 CLI-fixed commands. Re-check before relying on it.
652
682
 
653
- ### `dashboard.style.custom.create`
654
-
655
- Run: `mammoth dashboard style custom create`. Exact input fields: `mammoth schema get dashboard.style.custom.create`.
656
-
657
- Example: `mammoth dashboard style custom create --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
658
-
659
- Result: `DashboardStyleCustomCreateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
660
-
661
- 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: style. created custom style id=1 with full unredacted colors/font/viz (no tokens field passed) Single invocation only; no error-path or variant coverage.
662
-
663
- ### `dashboard.style.custom.delete`
664
-
665
- Run: `mammoth dashboard style custom delete`. Exact input fields: `mammoth schema get dashboard.style.custom.delete`.
666
-
667
- Example: `mammoth dashboard style custom delete resource-123`. Illustrative only: append `--yes` after observing an owned target.
668
-
669
- Result: `DashboardStyleCustomDeleteResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
670
-
671
- 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: ok. deleted custom style 1 Single invocation only; no error-path or variant coverage.
672
-
673
- ### `dashboard.style.custom.list`
674
-
675
- Run: `mammoth dashboard style custom list`. Exact input fields: `mammoth schema get dashboard.style.custom.list`.
676
-
677
- Example: `mammoth dashboard style custom list`. Placeholders are illustrative; resolve IDs and input from observed reads.
678
-
679
- Result: `DashboardStyleCustomListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
680
-
681
- Status on release: ran once on CLI 2.0.12 — Bounded release read succeeded with pinned CLI 1.1.9 in workspace 4; empty custom-style list observed. No Full claim: no non-empty fixture. Also: Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: styles. empty custom styles list Sing…
682
-
683
- ### `dashboard.style.custom.update`
684
-
685
- Run: `mammoth dashboard style custom update`. Exact input fields: `mammoth schema get dashboard.style.custom.update`.
686
-
687
- Example: `mammoth dashboard style custom update resource-123 --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
688
-
689
- Result: `DashboardStyleCustomUpdateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
690
-
691
- 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: style. renamed custom style 1 Single invocation only; no error-path or variant coverage.
692
-
693
- ### `dashboard.style.default.get`
694
-
695
- Run: `mammoth dashboard style default get`. Exact input fields: `mammoth schema get dashboard.style.default.get`.
696
-
697
- Example: `mammoth dashboard style default get`. Placeholders are illustrative; resolve IDs and input from observed reads.
698
-
699
- Result: `DashboardStyleDefaultGetResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
700
-
701
- Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a real matched body {"styleId":"stone"} instead of raising ValidationError on an unmatched 2xx. Single invocation only.
702
-
703
- ### `dashboard.style.default.set`
704
-
705
- Run: `mammoth dashboard style default set`. Exact input fields: `mammoth schema get dashboard.style.default.set`.
706
-
707
- Example: `mammoth dashboard style default set --input '{"body": {"params": {"styleId": "sample"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
708
-
709
- Result: `DashboardStyleDefaultSetResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
710
-
711
- Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. Set styleId to the exact value read from style default get ("stone"), i.e. a verified no-op restore. Result {"styleId":"stone"}; re-ran style default get afterward and confirmed it still…
712
-
713
- ### `dashboard.style.derive`
714
-
715
- Run: `mammoth dashboard style derive`. Exact input fields: `mammoth schema get dashboard.style.derive`.
716
-
717
- Example: `mammoth dashboard style derive --input '{"body": {"params": {"signals": {}}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
718
-
719
- Result: `DashboardStyleDeriveResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
720
-
721
- Status on release: ran once on CLI 2.0.14 — dashboard re-verification 2026-09-18: exit 0 on release with CLI 2.0.14. CLI defect fixed, confirmed: returned a full real styleTokens object (colors, font, viz palette, radius, shadow, etc.) with no '***REDACTED***' placeholders anywhere in the body. Single…
722
-
723
- ### `dashboard.style.extract-brand`
724
-
725
- Run: `mammoth dashboard style extract-brand`. Exact input fields: `mammoth schema get dashboard.style.extract-brand`.
726
-
727
- Example: `mammoth dashboard style extract-brand --input '{"body": {"params": {"url": "https://example.com/data.csv"}}}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
728
-
729
- Result: `DashboardStyleExtractBrandResult`; mutation `benign_mutation`, confirmation `none`, wait policy `always_wait`.
730
-
731
- 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: screenshot, signals. captured screenshot + extracted brand signals (accents/font/ground/primary), no redaction here Single invocation only; no error-path or variant coverage.
732
-
733
- ### `dashboard.style.preset.list`
734
-
735
- Run: `mammoth dashboard style preset list`. Exact input fields: `mammoth schema get dashboard.style.preset.list`.
736
-
737
- Example: `mammoth dashboard style preset list`. Placeholders are illustrative; resolve IDs and input from observed reads.
738
-
739
- Result: `DashboardStylePresetListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
740
-
741
- Status on release: ran once on CLI 2.0.12 — Bounded release read succeeded with pinned CLI 1.1.9 in workspace 4; 10 stock presets returned. No Full claim: custom preset fixture not observed. Also: Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: presets. returns built-in styl…
742
-
743
- ### `dashboard.style.token.list`
744
-
745
- Run: `mammoth dashboard style token list`. Exact input fields: `mammoth schema get dashboard.style.token.list`.
746
-
747
- Example: `mammoth dashboard style token list resource-123`. Placeholders are illustrative; resolve IDs and input from observed reads.
748
-
749
- Result: `DashboardStyleTokenListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
750
-
751
- Status on release: ran once on CLI 1.1.11 — Published PyPI CLI 1.1.11 / SDK 0.7.1 read of observed preset stone returned a redacted token payload. Bounded to one preset and redacted semantics; not Full. Dashboard sweep 2026-09-18 on release observed cli_error: HTTP 200 but result is tokens='***REDACTED…
752
-
753
683
  ### `dashboard.suggestion.list`
754
684
 
755
685
  Run: `mammoth dashboard suggestion list`. Exact input fields: `mammoth schema get dashboard.suggestion.list`.
@@ -31,7 +31,12 @@ need no project and no stored credentials. `dataset list`, `folder list`, and
31
31
  `view list` call the live API, and `--project` scopes them to one
32
32
  project. `dataset find NAME` and `folder find NAME` search every project
33
33
  the credential can see (or one, with `--project`); they still need
34
- credentials because they call the live API.
34
+ credentials because they call the live API. To find a dataset by name, run
35
+ `dataset find NAME` (no project needed), or
36
+ `dataset list --input '{"name": "NAME"}'` inside one project: a
37
+ case-insensitive substring match over every page, returned as short rows
38
+ (id, name, rows, cols) with `matched`. Do not page `dataset list` by hand;
39
+ `limit` is at most 100.
35
40
 
36
41
  ```bash
37
42
  mammoth capability find "transform"
@@ -3,8 +3,11 @@
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
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.
6
+ sentence with `v3 generate`, and change it with `chat edit`. Author or edit the
7
+ canvas yourself (`create-blank`, `canvas get` then `canvas save`, `pages add`)
8
+ for what a sentence cannot say exactly: units, hiding a built-in tile or
9
+ insight, an exact layout. `dashboard filter add` puts a filter control on a
10
+ board (below).
8
11
  `dashboard source list` is an observed blocker on release (see
9
12
  capabilities); verify the view binding with `dashboard get DASHBOARD_ID`
10
13
  (`data.sources`) instead.
@@ -19,6 +22,11 @@ mammoth dashboard get DASHBOARD_ID
19
22
  `chat edit` returns `changed` and a one-line `message`. Quote one number from
20
23
  the board before you report it done.
21
24
 
25
+ Before you say anything about a board that already exists (what a chart shows,
26
+ its numbers, the period it covers), run `dashboard get DASHBOARD_ID`: its
27
+ `values` carry every KPI card's and tile's number and the `period` it counts.
28
+ Answer from those, never from an earlier turn.
29
+
22
30
  Discover page/widget/publish routes and verify the binding, draft/published
23
31
  data and terminal jobs. Use only returned IDs and schema confirmation policy;
24
32
  do not invent dashboard JSON or opaque task specs.
@@ -77,6 +85,62 @@ names it. A new page that got no charts is removed, and
77
85
  `data.chart_check.removed_pages` lists it. Add a chart of a different kind
78
86
  (`hbar`, `line`, `table`) for that page.
79
87
 
88
+ ## "Per region", "per month", "for each X": one board and a filter control
89
+
90
+ A request for a board "per <dimension>" (per region, per month, per rep, by
91
+ status) is ONE board with a **filter control** on that column: the viewer picks
92
+ the value. Do not build a copy of the board for each value. Build the board
93
+ once, then add the control:
94
+
95
+ ```bash
96
+ mammoth dashboard filter add DASHBOARD_ID --input '{"field": "Region"}'
97
+ mammoth dashboard filter list DASHBOARD_ID
98
+ mammoth dashboard filter remove DASHBOARD_ID --input '{"field": "Region"}'
99
+ ```
100
+
101
+ `field` is a column of the board's data. `control` is optional: leave it out
102
+ and the column's type picks one (a category gets a selection list, a number or
103
+ a date gets a range). Set it to choose: `dropdown`, `chips`, `multi` or
104
+ `search` for a category, `range` for a number or a date, `motion` for a date
105
+ that plays over time. `label` is the text the viewer sees, and `default` (a
106
+ list of values) is what is selected when the board opens:
107
+ `--input '{"field": "Region", "control": "dropdown", "label": "Region", "default": ["North"]}'`.
108
+ A second `add` on the same column replaces the first. The command refuses a
109
+ column the board does not have (and names the columns it has) and a control
110
+ the column's type cannot take. Its result carries the declared `filters` and a
111
+ `bake_job_id`; `dashboard filter list` reads them back. Say "per month" the same
112
+ way: a filter on the date column with `range`, or `dashboard chat edit` for a
113
+ chart that groups by month (`date_bucket`).
114
+
115
+ Build only the board you were asked for. If the user wants the board for one
116
+ region only, that is the control's `default`, not a second board.
117
+
118
+ ## Hide a built-in tile or insight
119
+
120
+ A board's built-in parts (Key insights, the KPI strip, the breakdown, trend and
121
+ table tiles) re-derive from the data, so they cannot be deleted; the product's
122
+ "Remove" hides them: it adds the tile's key to `hidden` on the page. Do the
123
+ same with `canvas save`: read the canvas, add the key to the page's `hidden`,
124
+ write it back.
125
+
126
+ ```bash
127
+ mammoth dashboard canvas get DASHBOARD_ID > canvas.json # data.canvas is the object to edit
128
+ # pages[0].hidden = ["summary"] Key insights tile
129
+ # ["kpis"] the whole KPI strip
130
+ # ["breakdown", "mix", "secondary", "trend", "table"] the other built-in tiles
131
+ # canvas.hidden (no pages) is the same list on a canvas without pages
132
+ mammoth dashboard canvas save DASHBOARD_ID --input '{"body": {"params": {"canvas": <edited data.canvas>}}}'
133
+ mammoth job wait BAKE_JOB_ID # data.bake_job_id from the save
134
+ ```
135
+
136
+ `hidden` sits on the page you mean (`pages[i]`, the page the tile is on), not
137
+ on the canvas root, when the canvas has `pages`. Keep the keys already in the
138
+ list. A single KPI card is removed by taking its entry out of
139
+ `pages[i].focus.kpis`. To hide one insight rather than the whole tile, put its
140
+ tag in `insights.hide` (tags: `leader`, `momentum`, `gap`, `laggard`,
141
+ `concentration`, `secondary`, `peak`, `quality`, `spread`). Read the board back
142
+ with `dashboard canvas get` and check the key is in `hidden`.
143
+
80
144
  ## Put the money on the board
81
145
 
82
146
  If the data has money (a price, an amount, revenue or cost), the dashboard
@@ -10,6 +10,7 @@ SDK method named by the command's reviewed manifest ``sdk_symbol``.
10
10
 
11
11
  from __future__ import annotations
12
12
 
13
+ from collections.abc import Callable
13
14
  from pathlib import Path
14
15
  from typing import Any, Literal, cast
15
16
 
@@ -41,6 +42,12 @@ from mammoth_cli.runtime.session import open_service, require_project, resolved_
41
42
  from mammoth_cli.services.argspec import arg_spec
42
43
  from mammoth_cli.services.board_values import board_values, dashboard_link
43
44
  from mammoth_cli.services.command_contract import bind_command_inputs
45
+ from mammoth_cli.services.dashboard_filters import (
46
+ check_filter,
47
+ declared,
48
+ with_filter,
49
+ without_filter,
50
+ )
44
51
  from mammoth_cli.services.dashboard_pages import check_added_pages
45
52
  from mammoth_cli.services.dashboard_review import (
46
53
  CANVAS_GET,
@@ -369,10 +376,16 @@ def dashboard_tags_merge(invocation: Invocation) -> HandlerResult:
369
376
 
370
377
 
371
378
  def dashboard_get(invocation: Invocation) -> HandlerResult:
372
- """Get one dashboard by id."""
379
+ """Get one dashboard by id, with each KPI card's and tile's number and period.
380
+
381
+ A question about an existing board is answered from what it shows, so the
382
+ read carries the numbers, not only the definitions (UQA-RT10-02).
383
+ """
373
384
  dashboard_id = _require_int_positional(invocation, "dashboard id")
374
385
  with open_service(invocation) as (service, auth):
375
386
  data = service.call(_symbol(invocation), dashboard_id=dashboard_id)
387
+ if not invocation.readback:
388
+ data = _with_board_values(service, auth, {"dashboard_id": dashboard_id}, data)
376
389
  return data, _meta(invocation, auth.workspace_id)
377
390
 
378
391
 
@@ -771,6 +784,62 @@ def _with_deliverable_check(
771
784
  return data
772
785
 
773
786
 
787
+ _CANVAS_SAVE = "mammoth.api.dashboards.DashboardsAPI.canvas_save"
788
+ _FILTER_KEYS = ("field", "control", "label", "default")
789
+
790
+
791
+ def _edit_filters(
792
+ invocation: Invocation, edit: Callable[[dict[str, Any]], dict[str, Any]]
793
+ ) -> HandlerResult:
794
+ """Read the draft canvas, apply ``edit`` to the read, save it, and return the filters."""
795
+ dashboard_id = _require_int_positional(invocation, "dashboard id")
796
+ with open_service(invocation) as (service, auth):
797
+ current = _dump_model(service.call(CANVAS_GET, dashboard_id=dashboard_id))
798
+ canvas = edit(current)
799
+ saved = _dump_model(
800
+ service.call(
801
+ _CANVAS_SAVE,
802
+ dashboard_id=dashboard_id,
803
+ body={"params": {"canvas": canvas, "base_sequence": current["meta"]["sequence"]}},
804
+ )
805
+ )
806
+ result = {
807
+ "dashboard_id": dashboard_id,
808
+ "filters": declared(canvas),
809
+ "sequence": saved.get("sequence"),
810
+ "bake_job_id": saved.get("bake_job_id"),
811
+ }
812
+ return result, _meta(invocation, auth.workspace_id)
813
+
814
+
815
+ def dashboard_filter_add(invocation: Invocation) -> HandlerResult:
816
+ """Add (or replace) the filter control on one column of a board."""
817
+ document = _bound_document(invocation)
818
+ _require_field(document, "field")
819
+ entry = {key: document[key] for key in _FILTER_KEYS if document.get(key) is not None}
820
+
821
+ def edit(current: dict[str, Any]) -> dict[str, Any]:
822
+ check_filter(current, entry)
823
+ return with_filter(current["canvas"], entry)
824
+
825
+ return _edit_filters(invocation, edit)
826
+
827
+
828
+ def dashboard_filter_remove(invocation: Invocation) -> HandlerResult:
829
+ """Remove the filter control on one column of a board."""
830
+ field = str(_require_field(_bound_document(invocation), "field"))
831
+ return _edit_filters(invocation, lambda current: without_filter(current["canvas"], field))
832
+
833
+
834
+ def dashboard_filter_list(invocation: Invocation) -> HandlerResult:
835
+ """List the filter controls a board declares."""
836
+ dashboard_id = _require_int_positional(invocation, "dashboard id")
837
+ with open_service(invocation) as (service, auth):
838
+ current = _dump_model(service.call(CANVAS_GET, dashboard_id=dashboard_id))
839
+ result = {"dashboard_id": dashboard_id, "filters": declared(current["canvas"])}
840
+ return result, _meta(invocation, auth.workspace_id)
841
+
842
+
774
843
  def dashboard_assess_twb(invocation: Invocation) -> HandlerResult:
775
844
  """Assess a local Tableau workbook through the SDK multipart seam."""
776
845
  file_path = _require_str_positional(invocation, "file")
@@ -30,7 +30,12 @@ from mammoth_cli.runtime.confirm import (
30
30
  from mammoth_cli.runtime.invocation import Invocation
31
31
  from mammoth_cli.runtime.new_data import with_file_upload_path
32
32
  from mammoth_cli.runtime.session import open_service, require_project
33
- from mammoth_cli.services.listing import DATASET_LIST_FIELDS, dataset_summary, fit_budget
33
+ from mammoth_cli.services.listing import (
34
+ DATASET_LIST_FIELDS,
35
+ dataset_summary,
36
+ fit_budget,
37
+ search_page,
38
+ )
34
39
 
35
40
  HandlerResult = tuple[Any, dict[str, Any]]
36
41
 
@@ -198,12 +203,18 @@ def dataset_list(invocation: Invocation) -> HandlerResult:
198
203
  Every item carries its size, created/updated time, how its data arrived, and
199
204
  its column names and types (from the list route's stored ``stats``,
200
205
  ``sources`` and ``data_schema``), cut to fit the agent tool output cap.
201
- ``full: true`` returns the raw ``{id, name}`` list instead.
206
+ ``full: true`` returns the raw ``{id, name}`` list instead. ``name`` keeps only datasets
207
+ whose name contains it (case-insensitive) across every page, as short rows without
208
+ column lists; ``limit``/``offset`` then page over the matches.
202
209
  """
203
210
  project_id = require_project(invocation)
204
211
  document = invocation.load_input() or {}
212
+ _validate_paging(document)
205
213
  kwargs: dict[str, Any] = {"project_id": project_id}
206
214
  _forward_optional(document, kwargs, ("limit", "offset", "sort"))
215
+ name = document.get("name")
216
+ if isinstance(name, str) and name.strip():
217
+ return _dataset_name_search(invocation, project_id, name.strip(), document)
207
218
  compact = not document.get("full")
208
219
  if compact:
209
220
  kwargs["fields"] = DATASET_LIST_FIELDS
@@ -214,6 +225,27 @@ def dataset_list(invocation: Invocation) -> HandlerResult:
214
225
  return data, _meta(invocation, auth.workspace_id, project_id)
215
226
 
216
227
 
228
+ def _dataset_name_search(
229
+ invocation: Invocation, project_id: int, name: str, document: dict[str, Any]
230
+ ) -> HandlerResult:
231
+ """``dataset list`` with ``name``: every page is read here, then filtered by substring.
232
+
233
+ The list route only filters by exact name, so the substring match is local; the
234
+ reads are bounded by the SDK's ``max_pages``.
235
+ """
236
+ with open_service(invocation) as (service, auth):
237
+ data = service.call(
238
+ "mammoth.api.datasets.DatasetsAPI.list_all",
239
+ project_id=project_id,
240
+ sort=document.get("sort", "(created_at:desc)"),
241
+ fields=DATASET_LIST_FIELDS,
242
+ )
243
+ records = data.get("datasets", []) if isinstance(data, dict) else []
244
+ page = search_page(records, name, int(document.get("offset", 0)), document.get("limit"))
245
+ page["name"] = name
246
+ return page, _meta(invocation, auth.workspace_id, project_id)
247
+
248
+
217
249
  def _compact_dataset_list(data: Any, offset: int, sort: str | None) -> Any:
218
250
  """Summarise a dataset-list page and fit it to the tool output cap."""
219
251
  datasets = data.get("datasets") if isinstance(data, dict) else None
@@ -324,12 +356,8 @@ def dataset_data(invocation: Invocation) -> HandlerResult:
324
356
  return data, _meta(invocation, auth.workspace_id, project_id)
325
357
 
326
358
 
327
- def dataset_batch_data(invocation: Invocation) -> HandlerResult:
328
- """Fetch data for a specific dataset batch."""
329
- project_id = require_project(invocation)
330
- dataset_id = _require_int_positional(invocation, "dataset id")
331
- batch_id = _require_int_positional_at(invocation, 1, "batch id")
332
- document = invocation.load_input() or {}
359
+ def _validate_paging(document: dict[str, Any]) -> None:
360
+ """Refuse a ``limit`` outside 0..100 or a negative ``offset`` before any call is made."""
333
361
  for field, minimum, maximum in (("limit", 0, 100), ("offset", 0, None)):
334
362
  value = document.get(field)
335
363
  if value is not None and (
@@ -344,6 +372,15 @@ def dataset_batch_data(invocation: Invocation) -> HandlerResult:
344
372
  message=f"'{field}' must be {bound}.",
345
373
  exit_status=EXIT_USAGE,
346
374
  )
375
+
376
+
377
+ def dataset_batch_data(invocation: Invocation) -> HandlerResult:
378
+ """Fetch data for a specific dataset batch."""
379
+ project_id = require_project(invocation)
380
+ dataset_id = _require_int_positional(invocation, "dataset id")
381
+ batch_id = _require_int_positional_at(invocation, 1, "batch id")
382
+ document = invocation.load_input() or {}
383
+ _validate_paging(document)
347
384
  kwargs: dict[str, Any] = {
348
385
  "dataset_id": dataset_id,
349
386
  "batch_id": batch_id,
@@ -404,6 +404,9 @@ HANDLERS: dict[str, Handler] = {
404
404
  "dashboard.data.published": dashboard_cmd.dashboard_data_published,
405
405
  "dashboard.delete": dashboard_cmd.dashboard_delete,
406
406
  "dashboard.get": dashboard_cmd.dashboard_get,
407
+ "dashboard.filter.add": dashboard_cmd.dashboard_filter_add,
408
+ "dashboard.filter.list": dashboard_cmd.dashboard_filter_list,
409
+ "dashboard.filter.remove": dashboard_cmd.dashboard_filter_remove,
407
410
  "dashboard.get-by-url": dashboard_cmd.dashboard_get_by_url,
408
411
  "dashboard.job-by-url": dashboard_cmd.dashboard_job_by_url,
409
412
  "dashboard.list": dashboard_cmd.dashboard_list,