mammoth-cli 2.2.34__tar.gz → 2.2.36__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 (258) hide show
  1. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/PKG-INFO +2 -2
  2. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +1 -1
  4. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +4 -4
  5. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +21 -1
  6. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +10 -0
  7. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +30 -0
  8. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/dashboard.py +30 -0
  9. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/dataset.py +31 -7
  10. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/project.py +28 -0
  11. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/registry.py +7 -0
  12. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/schema.py +6 -0
  13. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/view.py +51 -0
  14. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/input_fields.py +1 -0
  15. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/positionals.py +9 -0
  16. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/pyproject.toml +2 -2
  17. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/dashboard.yaml +90 -2
  18. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/project.yaml +56 -0
  19. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/view.yaml +146 -0
  20. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/edits-target.source.yaml +1 -0
  21. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/sdk-catalog.source.yaml +42 -0
  22. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/sdk-methods.yaml +75 -3
  23. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/.gitignore +0 -0
  24. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/LICENSE +0 -0
  25. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/README.md +0 -0
  26. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/__main__.py +0 -0
  27. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/app.py +0 -0
  28. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  29. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  30. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  31. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  32. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  33. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  34. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  35. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  36. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  37. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  38. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  39. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  40. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  41. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  42. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  43. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  44. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  45. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  46. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  47. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  48. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  49. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  50. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
  51. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
  52. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  53. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  54. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  55. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  56. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  57. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  58. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  59. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
  60. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  61. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  62. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  63. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  64. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  65. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  66. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  67. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  68. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  69. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  70. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  71. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  72. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  73. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  74. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  75. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  76. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  77. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  78. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  79. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  80. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  81. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  82. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  83. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  84. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  85. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  86. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  87. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  88. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  89. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  90. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  91. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  92. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  93. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  94. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  95. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  96. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  97. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  98. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  99. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  100. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/__init__.py +0 -0
  101. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/activity.py +0 -0
  102. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/addon.py +0 -0
  103. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/agent.py +0 -0
  104. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/ai.py +0 -0
  105. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/annotation.py +0 -0
  106. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/auth.py +0 -0
  107. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/automation.py +0 -0
  108. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/batch.py +0 -0
  109. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/billing.py +0 -0
  110. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/browse.py +0 -0
  111. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/calc.py +0 -0
  112. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/capability.py +0 -0
  113. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/client_app.py +0 -0
  114. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/completion.py +0 -0
  115. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/config.py +0 -0
  116. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/connector.py +0 -0
  117. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/context.py +0 -0
  118. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/data_app.py +0 -0
  119. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/doctor.py +0 -0
  120. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/external_key.py +0 -0
  121. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/file.py +0 -0
  122. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/folder.py +0 -0
  123. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/job.py +0 -0
  124. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/link.py +0 -0
  125. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/notification.py +0 -0
  126. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/parameter.py +0 -0
  127. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/report.py +0 -0
  128. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/schedule.py +0 -0
  129. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/skill.py +0 -0
  130. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/snippet.py +0 -0
  131. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/support.py +0 -0
  132. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/template.py +0 -0
  133. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/trash.py +0 -0
  134. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/upgrade.py +0 -0
  135. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/user.py +0 -0
  136. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/view_ops.py +0 -0
  137. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/view_profile.py +0 -0
  138. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/webhook.py +0 -0
  139. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/workflow.py +0 -0
  140. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/commands/workspace.py +0 -0
  141. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/context/__init__.py +0 -0
  142. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/context/credentials.py +0 -0
  143. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/context/endpoint.py +0 -0
  144. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/context/profiles.py +0 -0
  145. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/context/resolver.py +0 -0
  146. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/contracts/__init__.py +0 -0
  147. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/contracts/auth.py +0 -0
  148. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/embed.py +0 -0
  149. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/errors/__init__.py +0 -0
  150. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/errors/envelope.py +0 -0
  151. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/manifest/__init__.py +0 -0
  152. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/manifest/loader.py +0 -0
  153. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/messages/__init__.py +0 -0
  154. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/output/__init__.py +0 -0
  155. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/output/envelope.py +0 -0
  156. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/output/normalize.py +0 -0
  157. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/output/policy.py +0 -0
  158. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/output/progress.py +0 -0
  159. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/output/render.py +0 -0
  160. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/py.typed +0 -0
  161. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/__init__.py +0 -0
  162. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/confirm.py +0 -0
  163. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/dataset_health.py +0 -0
  164. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/dryrun.py +0 -0
  165. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  166. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/embedded.py +0 -0
  167. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/executor.py +0 -0
  168. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/input_loader.py +0 -0
  169. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/intent_only.py +0 -0
  170. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/invocation.py +0 -0
  171. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/new_data.py +0 -0
  172. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/options.py +0 -0
  173. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/parents.py +0 -0
  174. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/runlog.py +0 -0
  175. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/session.py +0 -0
  176. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/state.py +0 -0
  177. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/strict.py +0 -0
  178. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/updates.py +0 -0
  179. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/validate.py +0 -0
  180. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/runtime/verify.py +0 -0
  181. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/__init__.py +0 -0
  182. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/append_blank_columns.py +0 -0
  183. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/argspec.py +0 -0
  184. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/board_values.py +0 -0
  185. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/coerce.py +0 -0
  186. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/command_contract.py +0 -0
  187. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/conditional_format.py +0 -0
  188. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/conditions.py +0 -0
  189. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/dashboard_filters.py +0 -0
  190. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/dashboard_pages.py +0 -0
  191. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/dashboard_review.py +0 -0
  192. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/data_profile.py +0 -0
  193. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/data_quality.py +0 -0
  194. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/dispatch.py +0 -0
  195. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/factory.py +0 -0
  196. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/listing.py +0 -0
  197. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/local_time.py +0 -0
  198. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/mapping.py +0 -0
  199. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/openapi_types.py +0 -0
  200. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/protocol.py +0 -0
  201. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/read_queries.py +0 -0
  202. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/sdk_service.py +0 -0
  203. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/sql_check.py +0 -0
  204. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/stored_stats.py +0 -0
  205. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/testing.py +0 -0
  206. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/text_dates.py +0 -0
  207. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/type_system.py +0 -0
  208. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/services/write_impact.py +0 -0
  209. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/skills/__init__.py +0 -0
  210. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/skills/installer.py +0 -0
  211. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/skills/steering.py +0 -0
  212. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/mammoth_cli/testing.py +0 -0
  213. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/activity.yaml +0 -0
  214. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/addon.yaml +0 -0
  215. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/agent.yaml +0 -0
  216. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/ai.yaml +0 -0
  217. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/annotation.yaml +0 -0
  218. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/auth.yaml +0 -0
  219. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/automation.yaml +0 -0
  220. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/batch.yaml +0 -0
  221. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/billing.yaml +0 -0
  222. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/browse.yaml +0 -0
  223. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/calc.yaml +0 -0
  224. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/capability.yaml +0 -0
  225. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/client-app.yaml +0 -0
  226. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/completion.yaml +0 -0
  227. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/config.yaml +0 -0
  228. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/connector.yaml +0 -0
  229. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/context.yaml +0 -0
  230. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/data-app.yaml +0 -0
  231. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/dataset.yaml +0 -0
  232. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/doctor.yaml +0 -0
  233. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/external-key.yaml +0 -0
  234. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/file.yaml +0 -0
  235. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/folder.yaml +0 -0
  236. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/job.yaml +0 -0
  237. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/link.yaml +0 -0
  238. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/log.yaml +0 -0
  239. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/notification.yaml +0 -0
  240. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/parameter.yaml +0 -0
  241. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/report.yaml +0 -0
  242. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/schedule.yaml +0 -0
  243. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/schema.yaml +0 -0
  244. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/skill.yaml +0 -0
  245. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/snippet.yaml +0 -0
  246. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/support.yaml +0 -0
  247. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/template.yaml +0 -0
  248. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/trash.yaml +0 -0
  249. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/upgrade.yaml +0 -0
  250. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/user.yaml +0 -0
  251. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/version.yaml +0 -0
  252. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/webhook.yaml +0 -0
  253. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/workflow.yaml +0 -0
  254. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/commands/workspace.yaml +0 -0
  255. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/openapi-operations.yaml +0 -0
  256. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/manifests/schema-v1.json +0 -0
  257. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/openapi/metadata.json +0 -0
  258. {mammoth_cli-2.2.34 → mammoth_cli-2.2.36}/spec/openapi/openapi.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mammoth-cli
3
- Version: 2.2.34
3
+ Version: 2.2.36
4
4
  Summary: Command-line interface for the Mammoth Analytics platform
5
5
  Project-URL: homepage, https://mammoth.io
6
6
  Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
@@ -17,7 +17,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
17
  Requires-Python: <3.15,>=3.12
18
18
  Requires-Dist: jsonschema>=4.20
19
19
  Requires-Dist: keyring<26,>=25.7
20
- Requires-Dist: mammoth-io<0.9,>=0.8.17
20
+ Requires-Dist: mammoth-io<0.9,>=0.8.19
21
21
  Requires-Dist: platformdirs<5,>=4.10
22
22
  Requires-Dist: pydantic<3,>=2.12.5
23
23
  Requires-Dist: pyyaml<7,>=6
@@ -6,7 +6,7 @@ not implement a second HTTP client and does not call private SDK members.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "2.2.34"
9
+ __version__ = "2.2.36"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -1,7 +1,7 @@
1
1
  # What is proven on release
2
2
 
3
3
  Generated from `docs/release-capability-matrix.json`; do not edit by hand.
4
- The CLI publishes 646 commands. 516 of them bind one of the 545 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (`view transform *` commands submit through `view.task.add`, except `rename-columns` and `sort`, which set view display properties through `view.update`). 262 bound commands ran once successfully on release, 1 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer. Use an untried command normally: confirm a write with the user first, check its result with a read afterwards, and never refuse a command only because it is untried.
4
+ The CLI publishes 652 commands. 516 of them bind one of the 545 API operations in the matrix; the remainder are local commands (`schema`, `auth`, `doctor`, `log`, ...) or typed variants that share an operation (`view transform *` commands submit through `view.task.add`, except `rename-columns` and `sort`, which set view display properties through `view.update`). 262 bound commands ran once successfully on release, 1 are not supported there, and the rest are untried. Untried is not broken: discover the contract with `mammoth schema get COMMAND_ID`, run it, and treat the structured error envelope as the answer. Use an untried command normally: confirm a write with the user first, check its result with a read afterwards, and never refuse a command only because it is untried.
5
5
 
6
6
  Status meanings:
7
7
 
@@ -1,6 +1,6 @@
1
1
  # Published CLI command catalog
2
2
 
3
- This generated catalog is a lookup table for every command in the published CLI manifest, currently 646; 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 652; 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
 
@@ -24,7 +24,7 @@ Load only the applicable domain file:
24
24
  - [dashboard-qa](commands/dashboard-qa.md) — 14 published commands
25
25
  - [dashboard-template](commands/dashboard-template.md) — 12 published commands
26
26
  - [dashboard-style](commands/dashboard-style.md) — 10 published commands
27
- - [dashboard](commands/dashboard.md) — 96 published commands
27
+ - [dashboard](commands/dashboard.md) — 98 published commands
28
28
  - [data-app](commands/data-app.md) — 12 published commands
29
29
  - [dataset](commands/dataset.md) — 22 published commands
30
30
  - [doctor](commands/doctor.md) — 1 published commands
@@ -36,7 +36,7 @@ Load only the applicable domain file:
36
36
  - [log](commands/log.md) — 2 published commands
37
37
  - [notification](commands/notification.md) — 5 published commands
38
38
  - [parameter](commands/parameter.md) — 14 published commands
39
- - [project](commands/project.md) — 24 published commands
39
+ - [project](commands/project.md) — 25 published commands
40
40
  - [report](commands/report.md) — 1 published commands
41
41
  - [schedule](commands/schedule.md) — 5 published commands
42
42
  - [schema](commands/schema.md) — 3 published commands
@@ -49,7 +49,7 @@ Load only the applicable domain file:
49
49
  - [user](commands/user.md) — 8 published commands
50
50
  - [version](commands/version.md) — 1 published commands
51
51
  - [view-transform](commands/view-transform.md) — 32 published commands
52
- - [view](commands/view.md) — 91 published commands
52
+ - [view](commands/view.md) — 94 published commands
53
53
  - [webhook](commands/webhook.md) — 7 published commands
54
54
  - [workflow](commands/workflow.md) — 16 published commands
55
55
  - [workspace](commands/workspace.md) — 26 published commands
@@ -308,7 +308,7 @@ Run: `mammoth dashboard duplicate`. Exact input fields: `mammoth schema get dash
308
308
 
309
309
  Example: `mammoth dashboard duplicate 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
310
310
 
311
- Result: `DashboardDuplicateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
311
+ Result: `DashboardDuplicateResult`; mutation `benign_mutation`, confirmation `none`, wait policy `start_or_wait`.
312
312
 
313
313
  Status on release: ran once on CLI 2.0.12 — Dashboard sweep 2026-09-18: exit 0 on release with CLI 2.0.12; result keys: id. duplicated D=52 -> D2=54 Single invocation only; no error-path or variant coverage.
314
314
 
@@ -562,6 +562,26 @@ Result: `DashboardPagesAddResult`; mutation `high_impact`, confirmation `confirm
562
562
 
563
563
  Status on release: ran once on CLI 2.0.28 — ILG simulation 2026-09-19: exit 0 on release with CLI 2.0.28. Needs --yes --confirm DASHBOARD_ID. body.params.pages[] takes PageAdd objects (title, focus{kpis}, charts[]); the route runs through the LLM guard and dropped unit.prefix on a money card ('nothing…
564
564
 
565
+ ### `dashboard.pbix-assess`
566
+
567
+ Run: `mammoth dashboard pbix-assess`. Exact input fields: `mammoth schema get dashboard.pbix-assess`.
568
+
569
+ Example: `mammoth dashboard pbix-assess 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
570
+
571
+ Result: `DashboardPbixAssessResult`; mutation `read`, confirmation `none`, wait policy `always_wait`.
572
+
573
+ Status on release: untried; no live run recorded.
574
+
575
+ ### `dashboard.pbix-intent`
576
+
577
+ Run: `mammoth dashboard pbix-intent`. Exact input fields: `mammoth schema get dashboard.pbix-intent`.
578
+
579
+ Example: `mammoth dashboard pbix-intent 123 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
580
+
581
+ Result: `DashboardPbixIntentResult`; mutation `read`, confirmation `none`, wait policy `always_wait`.
582
+
583
+ Status on release: untried; no live run recorded.
584
+
565
585
  ### `dashboard.pdf-artifact`
566
586
 
567
587
  Run: `mammoth dashboard pdf-artifact`. Exact input fields: `mammoth schema get dashboard.pdf-artifact`.
@@ -42,6 +42,16 @@ Result: `ProjectCheckpointListResult`; mutation `read`, confirmation `none`, wai
42
42
 
43
43
  Status on release: ran once on CLI an earlier release — Bounded release read in project 3 succeeded; empty checkpoint list observed. No Full claim: no non-empty fixture.
44
44
 
45
+ ### `project.copy`
46
+
47
+ Run: `mammoth project copy`. Exact input fields: `mammoth schema get project.copy`.
48
+
49
+ Example: `mammoth project copy 123 'Revenue report'`. Placeholders are illustrative; resolve IDs and input from observed reads.
50
+
51
+ Result: `ProjectCopyResult`; mutation `benign_mutation`, confirmation `none`, wait policy `always_wait`.
52
+
53
+ Status on release: untried; no live run recorded.
54
+
45
55
  ### `project.create`
46
56
 
47
57
  Run: `mammoth project create`. Exact input fields: `mammoth schema get project.create`.
@@ -52,6 +52,16 @@ Result: `ViewAiProfileResult`; mutation `benign_mutation`, confirmation `none`,
52
52
 
53
53
  Status on release: ran once on CLI 2.0.15 — re-verification 2026-09-18: exit 0 on release with CLI 2.0.15. Fix held: release ProfileGenerationSpec {params:{action}} body accepted; returned real generated insights: {"data":{"insights":{"performance_analysis":{"domain_specific_insights":[...]}}}}. Single…
54
54
 
55
+ ### `view.analyze`
56
+
57
+ Run: `mammoth view analyze`. Exact input fields: `mammoth schema get view.analyze`.
58
+
59
+ Example: `mammoth view analyze 123 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
60
+
61
+ Result: `ViewAnalyzeResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
62
+
63
+ Status on release: untried; no live run recorded.
64
+
55
65
  ### `view.bulk-delete`
56
66
 
57
67
  Run: `mammoth view bulk-delete`. Exact input fields: `mammoth schema get view.bulk-delete`.
@@ -112,6 +122,16 @@ Result: `ViewCheckpointUpdateResult`; mutation `benign_mutation`, confirmation `
112
122
 
113
123
  Status on release: ran once on CLI 2.0.18 — fixture-lifecycle sweep 2026-09-19: exit 0 on release with CLI 2.0.18. First attempt sending a full AddCheckpointSpec body (matching create's shape) failed with invalid_input_field_type; update actually needs body.patches[] (CheckpointPatches/CheckPointPatch…
114
124
 
125
+ ### `view.compare`
126
+
127
+ Run: `mammoth view compare`. Exact input fields: `mammoth schema get view.compare`.
128
+
129
+ Example: `mammoth view compare --input '{"pairs": [[1, 2]]}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
130
+
131
+ Result: `ViewCompareResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
132
+
133
+ Status on release: untried; no live run recorded.
134
+
115
135
  ### `view.conditional-format.create`
116
136
 
117
137
  Run: `mammoth view conditional-format create`. Exact input fields: `mammoth schema get view.conditional-format.create`.
@@ -714,6 +734,16 @@ Result: `ViewListResult`; mutation `read`, confirmation `none`, wait policy `not
714
734
 
715
735
  Status on release: ran once on CLI 2.0.21 — ergonomics sweep 2026-09-19: exit 0 on release with CLI 2.0.21. Listed dataview 116 (ds_id 94, row_count 3); the parent cache picked up 116 -> 94 so later view commands took the view id alone. Single invocation only.
716
736
 
737
+ ### `view.optimize`
738
+
739
+ Run: `mammoth view optimize`. Exact input fields: `mammoth schema get view.optimize`.
740
+
741
+ Example: `mammoth view optimize 123 123`. Illustrative only: append `--yes` after observing an owned target.
742
+
743
+ Result: `ViewOptimizeResult`; mutation `reversible_pipeline`, confirmation `prompt_or_yes`, wait policy `start_or_wait`.
744
+
745
+ Status on release: untried; no live run recorded.
746
+
717
747
  ### `view.parameter-context`
718
748
 
719
749
  Run: `mammoth view parameter-context`. Exact input fields: `mammoth schema get view.parameter-context`.
@@ -746,6 +746,36 @@ def generated_dashboard(invocation: Invocation) -> HandlerResult:
746
746
  return data, _meta(invocation, auth.workspace_id)
747
747
 
748
748
 
749
+ def dashboard_duplicate(invocation: Invocation) -> HandlerResult:
750
+ """Copy a v3 dashboard; with ``target_dataview_id`` also wait for its data swap.
751
+
752
+ The result keeps ``id`` and ``swap_job_id`` and adds ``swap_state`` and
753
+ ``swap_result`` when a swap job was queued.
754
+ """
755
+ document = _bound_document(invocation)
756
+ positionals = _generated_positionals(invocation)
757
+ kwargs = bind_command_inputs(invocation.command_id, document, **positionals)
758
+ with open_service(invocation) as (service, auth):
759
+ data = service.call(_symbol(invocation), **kwargs)
760
+ if hasattr(data, "model_dump"):
761
+ data = data.model_dump(mode="json")
762
+ if isinstance(data, dict) and data.get("swap_job_id") is not None:
763
+ settled = service.wait_if_job({"job_id": data["swap_job_id"]})
764
+ data = {**data, "swap_state": "success", "swap_result": settled}
765
+ return data, _meta(invocation, auth.workspace_id)
766
+
767
+
768
+ def dashboard_attachment_read(invocation: Invocation) -> HandlerResult:
769
+ """Run a workbook read on an attachment (intent or assess) and return the job's result."""
770
+ positionals = _generated_positionals(invocation)
771
+ with open_service(invocation) as (service, auth):
772
+ queued = service.call(_symbol(invocation), **positionals)
773
+ if hasattr(queued, "model_dump"):
774
+ queued = queued.model_dump(mode="json")
775
+ data = service.wait_if_job(queued)
776
+ return data, _meta(invocation, auth.workspace_id)
777
+
778
+
749
779
  #: Board-building steps whose result carries the evaluated card/tile numbers.
750
780
  _VALUED_COMMANDS = frozenset({"dashboard.v3.generate", "dashboard.chat.edit"})
751
781
 
@@ -804,6 +804,9 @@ def dataset_create(invocation: Invocation) -> HandlerResult:
804
804
  dataset_spec = _require_field(document, "dataset_spec")
805
805
  ds_creation_type = _require_field(document, "ds_creation_type")
806
806
  _require_clone_views(ds_creation_type, dataset_spec)
807
+ # A clone can land in another project (``dataset_spec.target_project_id``): the
808
+ # name check and the result's scope are that project's, not the active one's.
809
+ landing_project_id = _clone_target_project(ds_creation_type, dataset_spec) or project_id
807
810
  kwargs: dict[str, Any] = {
808
811
  "dataset_spec": dataset_spec,
809
812
  "ds_creation_type": ds_creation_type,
@@ -813,15 +816,31 @@ def dataset_create(invocation: Invocation) -> HandlerResult:
813
816
  _forward_optional(document, kwargs, ("folder_resource_id",))
814
817
  with open_service(invocation) as (service, auth):
815
818
  if invocation.dry_run:
816
- _predict_final_name(invocation, service, dataset_spec, project_id)
819
+ _predict_final_name(invocation, service, dataset_spec, landing_project_id)
817
820
  data = service.call(_symbol(invocation), **kwargs)
818
821
  # ``datasets.create`` returns a bare job handle and never waits. Block on
819
822
  # it here (honoring ``--job-timeout``) so the command reports a finished
820
823
  # dataset id instead of a job id the caller must poll separately.
821
824
  settled = service.wait_if_job(data)
822
825
  result = _created_dataset(data, settled)
823
- _add_final_name(service, result, dataset_spec, project_id)
824
- return result, _meta(invocation, auth.workspace_id, project_id)
826
+ _add_final_name(service, result, dataset_spec, landing_project_id)
827
+ return result, _meta(invocation, auth.workspace_id, landing_project_id)
828
+
829
+
830
+ def _clone_target_project(ds_creation_type: object, dataset_spec: object) -> int | None:
831
+ """The clone's ``target_project_id`` (a positive integer), or None when it is not set."""
832
+ if ds_creation_type != "clone" or not isinstance(dataset_spec, dict):
833
+ return None
834
+ target = dataset_spec.get("target_project_id")
835
+ if target is None:
836
+ return None
837
+ if isinstance(target, bool) or not isinstance(target, int) or target <= 0:
838
+ raise CliError(
839
+ code=CODE_INVALID_ARGUMENT,
840
+ message=f"dataset_spec.target_project_id must be a positive integer, got {target!r}.",
841
+ exit_status=EXIT_USAGE,
842
+ )
843
+ return target
825
844
 
826
845
 
827
846
  def _require_clone_views(ds_creation_type: object, dataset_spec: object) -> None:
@@ -998,15 +1017,20 @@ def dataset_create_from_pdf(invocation: Invocation) -> HandlerResult:
998
1017
 
999
1018
 
1000
1019
  def dataset_rename(invocation: Invocation) -> HandlerResult:
1001
- """Rename a dataset. Dataset id is positional; new name comes from ``--input``."""
1020
+ """Rename a dataset. Dataset id is positional; new name comes from ``--input``.
1021
+
1022
+ ``{"unique": true}`` makes the server pick a free name when the requested one is
1023
+ taken; the result's ``name`` is the name applied.
1024
+ """
1002
1025
  project_id = require_project(invocation)
1003
1026
  dataset_id = _require_int_positional(invocation, "dataset id")
1004
1027
  document = invocation.load_input()
1005
1028
  name = _require_field(document, "name")
1029
+ kwargs: dict[str, Any] = {"dataset_id": dataset_id, "name": name, "project_id": project_id}
1030
+ if document.get("unique") is True:
1031
+ kwargs["unique"] = True
1006
1032
  with open_service(invocation) as (service, auth):
1007
- data = service.call(
1008
- _symbol(invocation), dataset_id=dataset_id, name=name, project_id=project_id
1009
- )
1033
+ data = service.call(_symbol(invocation), **kwargs)
1010
1034
  return data, _meta(invocation, auth.workspace_id, project_id)
1011
1035
 
1012
1036
 
@@ -275,6 +275,34 @@ def project_create(invocation: Invocation) -> HandlerResult:
275
275
  return data, _meta(invocation, auth.workspace_id, resolved_project(invocation))
276
276
 
277
277
 
278
+ def project_copy(invocation: Invocation) -> HandlerResult:
279
+ """Copy a project into a new one and wait for the copy job.
280
+
281
+ ``PROJECT_ID NAME`` are positional; ``dataset_ids``, ``include_dashboards`` and
282
+ ``exclude_data`` come from ``--input``. The result is the job's:
283
+ ``project_id``, ``dataset_map``, ``view_map``, ``skipped`` and ``dashboards``.
284
+ """
285
+ source_id = _int_positional(invocation, "project id")
286
+ name = invocation.extra_args[1] if len(invocation.extra_args) > 1 else None
287
+ if source_id is None or not name:
288
+ raise CliError(
289
+ code=CODE_MISSING_ARGUMENT,
290
+ message="A source project id and a name for the copy are required.",
291
+ exit_status=EXIT_USAGE,
292
+ hint="mammoth project copy PROJECT_ID NAME",
293
+ )
294
+ document = invocation.load_input() or {}
295
+ kwargs: dict[str, Any] = {"project_id": source_id, "name": name}
296
+ _forward_optional(document, kwargs, _COPY_OPTIONAL)
297
+ with open_service(invocation) as (service, auth):
298
+ queued = service.call(_symbol(invocation), **kwargs)
299
+ data = service.wait_if_job(queued)
300
+ return data, _meta(invocation, auth.workspace_id, source_id)
301
+
302
+
303
+ _COPY_OPTIONAL = ("dataset_ids", "include_dashboards", "exclude_data")
304
+
305
+
278
306
  _ENSURE_CREATE_SYMBOL = "mammoth.api.projects.ProjectsAPI.create"
279
307
 
280
308
 
@@ -266,6 +266,7 @@ HANDLERS: dict[str, Handler] = {
266
266
  "project.publish-credentials": project_cmd.project_publish_credentials,
267
267
  # project family (mutations)
268
268
  "project.create": project_cmd.project_create,
269
+ "project.copy": project_cmd.project_copy,
269
270
  "project.ensure": project_cmd.project_ensure,
270
271
  "project.update": project_cmd.project_update,
271
272
  "project.delete": project_cmd.project_delete,
@@ -454,6 +455,9 @@ HANDLERS: dict[str, Handler] = {
454
455
  "dashboard.qa.insights": dashboard_cmd.generated_dashboard,
455
456
  "dashboard.templates.pending": dashboard_cmd.generated_dashboard,
456
457
  "dashboard.templates.use": dashboard_cmd.generated_dashboard,
458
+ "dashboard.duplicate": dashboard_cmd.dashboard_duplicate,
459
+ "dashboard.pbix-intent": dashboard_cmd.dashboard_attachment_read,
460
+ "dashboard.pbix-assess": dashboard_cmd.dashboard_attachment_read,
457
461
  "dashboard.assess-twb": dashboard_cmd.dashboard_assess_twb,
458
462
  "dashboard.assess-pbix": dashboard_cmd.dashboard_assess_pbix,
459
463
  "dashboard.import-workbook": dashboard_cmd.dashboard_import_workbook,
@@ -716,6 +720,9 @@ HANDLERS: dict[str, Handler] = {
716
720
  "view.restore": view_cmd.view_restore,
717
721
  "view.trash": view_cmd.view_trash,
718
722
  "view.impact": view_cmd.view_impact,
723
+ "view.analyze": view_cmd.view_analyze,
724
+ "view.optimize": view_cmd.view_optimize,
725
+ "view.compare": view_cmd.view_compare,
719
726
  "view.update": view_cmd.view_update,
720
727
  "view.data.get": view_cmd.view_data_get,
721
728
  "view.data.query": view_cmd.view_data_query,
@@ -449,6 +449,12 @@ _COMMAND_DISCOVERY_PURPOSES = {
449
449
  "dashboard.context.apply": "apply the reviewed context change to the dashboard",
450
450
  "dashboard.qa.insights": "what questions viewers asked on the dashboard grouped unanswered",
451
451
  "view.impact": "what breaks if I delete this dataview or a task dependents impact",
452
+ "view.analyze": "which pipeline steps are wasted duplicate suspended no-op filter move earlier",
453
+ "view.optimize": "drop wasted pipeline steps hoist filters",
454
+ "view.compare": "are these two views the same data row counts column differences checksums",
455
+ "dashboard.pbix-intent": "read an attached Power BI workbook against my view what would map",
456
+ "dashboard.pbix-assess": "what does an attached Power BI workbook hold",
457
+ "project.copy": "copy a whole project into a new one datasets views pipelines dashboards",
452
458
  "browse.ancestors": "folder path breadcrumb where does this folder live parent folders chain",
453
459
  "browse.search": (
454
460
  "find search a dataset view folder by name across all projects whole workspace global"
@@ -906,6 +906,57 @@ def view_impact(invocation: Invocation) -> HandlerResult:
906
906
  return data, _meta(invocation, auth.workspace_id, project_id)
907
907
 
908
908
 
909
+ def view_analyze(invocation: Invocation) -> HandlerResult:
910
+ """List pipeline steps that can be dropped or moved without changing the result (read-only)."""
911
+ project_id = require_project(invocation)
912
+ dataview_id = _require_int_positional_at(invocation, 0, "view id")
913
+ document = invocation.load_input() or {}
914
+ with open_service(invocation) as (service, auth):
915
+ dataset_id = _resolve_dataset_id(service, invocation, dataview_id, document)
916
+ data = service.call(
917
+ _symbol(invocation),
918
+ dataset_id=dataset_id,
919
+ dataview_id=dataview_id,
920
+ project_id=project_id,
921
+ )
922
+ return data, _meta(invocation, auth.workspace_id, project_id)
923
+
924
+
925
+ def view_optimize(invocation: Invocation) -> HandlerResult:
926
+ """Apply the safe pipeline findings, then wait for the rerun it queued.
927
+
928
+ ``apply_rules`` limits the rules applied; omitted, every safe finding is applied.
929
+ The result keeps the server's ``applied`` / ``skipped`` / step counts and adds
930
+ ``job_state`` and ``job_result`` when a rerun job was queued.
931
+ """
932
+ project_id = require_project(invocation)
933
+ dataview_id = _require_int_positional_at(invocation, 0, "view id")
934
+ document = invocation.load_input() or {}
935
+ enforce_confirmation(
936
+ invocation,
937
+ policy=POLICY_PROMPT_OR_YES,
938
+ action=f"optimize the pipeline of view {dataview_id}",
939
+ )
940
+ kwargs: dict[str, Any] = {"dataview_id": dataview_id, "project_id": project_id}
941
+ _forward_optional(document, kwargs, ("apply_rules",))
942
+ with open_service(invocation) as (service, auth):
943
+ kwargs["dataset_id"] = _resolve_dataset_id(service, invocation, dataview_id, document)
944
+ data = service.call(_symbol(invocation), **kwargs)
945
+ if isinstance(data, dict) and data.get("job_id") is not None:
946
+ settled = service.wait_if_job({"job_id": data["job_id"]})
947
+ data = {**data, "job_state": "success", "job_result": settled}
948
+ return data, _meta(invocation, auth.workspace_id, project_id)
949
+
950
+
951
+ def view_compare(invocation: Invocation) -> HandlerResult:
952
+ """Compare dataviews pairwise: rows, column differences and checksums (read-only)."""
953
+ document = invocation.load_input()
954
+ pairs = _require_field(document, "pairs")
955
+ with open_service(invocation) as (service, auth):
956
+ data = service.call(_symbol(invocation), pairs=pairs)
957
+ return data, _meta(invocation, auth.workspace_id, None)
958
+
959
+
909
960
  def view_update(invocation: Invocation) -> HandlerResult:
910
961
  """Rename a view from the name input field; any other patch is refused.
911
962
 
@@ -93,6 +93,7 @@ _EXAMPLE_INPUT_HINTS: dict[str, dict[str, Any]] = {
93
93
  "dashboard.format-preview": {"style": "presentation"},
94
94
  # ``task`` needs a task_id too; the whole-view scope is the one that stands alone.
95
95
  "view.impact": {"scope": "view"},
96
+ "view.compare": {"pairs": [[1, 2]]},
96
97
  # One [type, id] pair per resource, as ``browse resources`` lists them.
97
98
  "browse.resources.bulk": {"items": [["dataview", 42]]},
98
99
  "view.export.azure-blob": {
@@ -440,6 +440,13 @@ POSITIONAL_OVERRIDES: dict[str, tuple[PositionalSpec, ...]] = {
440
440
  falls_back_to_field="name",
441
441
  ),
442
442
  ),
443
+ # project copy: the source project is the resource, the new project's name follows.
444
+ "project.copy": (
445
+ PositionalSpec(
446
+ name="project_id", type=int, required=True, help="ID of the project to copy."
447
+ ),
448
+ PositionalSpec(name="name", type=str, required=True, help="Name of the new project."),
449
+ ),
443
450
  # project ensure: exact name to find or create, positional or ``name`` field.
444
451
  "project.ensure": (
445
452
  PositionalSpec(
@@ -779,6 +786,8 @@ POSITIONAL_OVERRIDES: dict[str, tuple[PositionalSpec, ...]] = {
779
786
  "view.restore",
780
787
  "view.trash",
781
788
  "view.impact",
789
+ "view.analyze",
790
+ "view.optimize",
782
791
  "view.update",
783
792
  "view.conditional-format.create",
784
793
  "view.conditional-format.delete-all",
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.2.34"
3
+ version = "2.2.36"
4
4
  description = "Command-line interface for the Mammoth Analytics platform"
5
5
  authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
6
6
  readme = "README.md"
7
7
  license = "LicenseRef-Proprietary"
8
8
  requires-python = ">=3.12,<3.15"
9
9
  dependencies = [
10
- "mammoth-io (>=0.8.17,<0.9)",
10
+ "mammoth-io (>=0.8.19,<0.9)",
11
11
  "typer (>=0.27,<0.28)",
12
12
  "rich (>=15,<16)",
13
13
  "platformdirs (>=4.10,<5)",
@@ -1034,7 +1034,7 @@ commands:
1034
1034
  mutation_class: benign_mutation
1035
1035
  edits_target: false
1036
1036
  confirmation: none
1037
- wait_policy: not_async
1037
+ wait_policy: start_or_wait
1038
1038
  pagination_policy: none
1039
1039
  acceptance_evidence: contract_only_no_disposable_fixture
1040
1040
  readback:
@@ -1058,7 +1058,7 @@ commands:
1058
1058
  - CT-DASHBOARD-DUPLICATE-ERROR
1059
1059
  draft_test: null
1060
1060
  undo_test: null
1061
- known_restrictions: null
1061
+ known_restrictions: 'Copies the dashboard over the same dataset. Example: mammoth dashboard duplicate 123 --input ''{"target_dataview_id": 456}''. With the target_dataview_id input field the copy is made in that view''s project and its data swap is queued: the command waits for that job and adds swap_state and swap_result next to id and swap_job_id. project_id (optional) names the project for the copy.'
1062
1062
  reviewed_by: primary
1063
1063
  - command_id: dashboard.embed.config.get
1064
1064
  command_path: dashboard embed config get
@@ -5804,3 +5804,91 @@ commands:
5804
5804
  command: dashboard.qa.insights
5805
5805
  ids: {}
5806
5806
  kind: object
5807
+ - command_id: dashboard.pbix-intent
5808
+ command_path: dashboard pbix-intent
5809
+ disposition: command
5810
+ alias_of: null
5811
+ operation_ids: []
5812
+ positionals:
5813
+ - name: attachment_id
5814
+ type: int
5815
+ required: true
5816
+ metavar: ATTACHMENT_ID
5817
+ falls_back_to_field: null
5818
+ help: ID of the attachment.
5819
+ - name: target_dataview_id
5820
+ type: int
5821
+ required: true
5822
+ metavar: TARGET_DATAVIEW_ID
5823
+ falls_back_to_field: null
5824
+ help: ID of the target dataview.
5825
+ options: []
5826
+ sdk_symbol: mammoth.api.dashboards.DashboardsAPI.attachment_intent
5827
+ sdk_conversion: Call mammoth.api.dashboards.DashboardsAPI.attachment_intent with validated request fields.
5828
+ request_model: DashboardPbixIntentRequest
5829
+ result_model: DashboardPbixIntentResult
5830
+ mutation_class: read
5831
+ confirmation: none
5832
+ wait_policy: always_wait
5833
+ pagination_policy: none
5834
+ acceptance_evidence: contract_only_no_disposable_fixture
5835
+ live_test: null
5836
+ live_exemption_reason: Backend route ships with this release; no disposable fixture runs it yet.
5837
+ contract_fixture: null
5838
+ required_fixture_guard: null
5839
+ secret_fields: []
5840
+ human_example: mammoth dashboard pbix-intent ATTACHMENT_ID TARGET_DATAVIEW_ID --help
5841
+ agent_example: mammoth dashboard pbix-intent 123 123
5842
+ unit_tests:
5843
+ - UT-DASHBOARD-PBIX-INTENT
5844
+ contract_tests:
5845
+ - CT-DASHBOARD-PBIX-INTENT-HUMAN
5846
+ - CT-DASHBOARD-PBIX-INTENT-JSON
5847
+ - CT-DASHBOARD-PBIX-INTENT-ERROR
5848
+ draft_test: null
5849
+ undo_test: null
5850
+ known_restrictions: 'Read-only. Reads a Power BI workbook the web app already attached (ATTACHMENT_ID)
5851
+ against one of your views (TARGET_DATAVIEW_ID), waits for the job and returns its result: intent,
5852
+ coverage {mapped, total}, unmapped_visuals, field_map and target_dataview_id, or {rejected, source}.
5853
+ No dashboard or sample data is made. Uploading the attachment is done in the web app.'
5854
+ reviewed_by: primary
5855
+ - command_id: dashboard.pbix-assess
5856
+ command_path: dashboard pbix-assess
5857
+ disposition: command
5858
+ alias_of: null
5859
+ operation_ids: []
5860
+ positionals:
5861
+ - name: attachment_id
5862
+ type: int
5863
+ required: true
5864
+ metavar: ATTACHMENT_ID
5865
+ falls_back_to_field: null
5866
+ help: ID of the attachment.
5867
+ options: []
5868
+ sdk_symbol: mammoth.api.dashboards.DashboardsAPI.attachment_assess
5869
+ sdk_conversion: Call mammoth.api.dashboards.DashboardsAPI.attachment_assess with validated request fields.
5870
+ request_model: DashboardPbixAssessRequest
5871
+ result_model: DashboardPbixAssessResult
5872
+ mutation_class: read
5873
+ confirmation: none
5874
+ wait_policy: always_wait
5875
+ pagination_policy: none
5876
+ acceptance_evidence: contract_only_no_disposable_fixture
5877
+ live_test: null
5878
+ live_exemption_reason: Backend route ships with this release; no disposable fixture runs it yet.
5879
+ contract_fixture: null
5880
+ required_fixture_guard: null
5881
+ secret_fields: []
5882
+ human_example: mammoth dashboard pbix-assess ATTACHMENT_ID --help
5883
+ agent_example: mammoth dashboard pbix-assess 123
5884
+ unit_tests:
5885
+ - UT-DASHBOARD-PBIX-ASSESS
5886
+ contract_tests:
5887
+ - CT-DASHBOARD-PBIX-ASSESS-HUMAN
5888
+ - CT-DASHBOARD-PBIX-ASSESS-JSON
5889
+ - CT-DASHBOARD-PBIX-ASSESS-ERROR
5890
+ draft_test: null
5891
+ undo_test: null
5892
+ known_restrictions: 'Read-only. Assesses a workbook the web app already attached (ATTACHMENT_ID): waits
5893
+ for the job and returns its result. Use dashboard assess-pbix for a local file.'
5894
+ reviewed_by: primary
@@ -1024,3 +1024,59 @@ commands:
1024
1024
  known_restrictions: null
1025
1025
  reviewed_by: primary
1026
1026
  no_readback: "no CLI read command exposes per-project user role assignments"
1027
+ - command_id: project.copy
1028
+ command_path: project copy
1029
+ disposition: command
1030
+ alias_of: null
1031
+ operation_ids: []
1032
+ positionals:
1033
+ - name: project_id
1034
+ type: int
1035
+ required: true
1036
+ metavar: PROJECT_ID
1037
+ falls_back_to_field: null
1038
+ help: ID of the project to copy.
1039
+ - name: name
1040
+ type: str
1041
+ required: true
1042
+ metavar: NAME
1043
+ falls_back_to_field: null
1044
+ help: Name of the new project.
1045
+ options: []
1046
+ sdk_symbol: mammoth.api.projects.ProjectsAPI.copy
1047
+ sdk_conversion: Call mammoth.api.projects.ProjectsAPI.copy with validated request fields.
1048
+ request_model: ProjectCopyRequest
1049
+ result_model: ProjectCopyResult
1050
+ mutation_class: benign_mutation
1051
+ edits_target: false
1052
+ confirmation: none
1053
+ wait_policy: always_wait
1054
+ pagination_policy: none
1055
+ acceptance_evidence: contract_only_no_disposable_fixture
1056
+ live_test: null
1057
+ live_exemption_reason: Backend route ships with this release; no disposable fixture runs it yet.
1058
+ contract_fixture: null
1059
+ required_fixture_guard: null
1060
+ secret_fields: []
1061
+ human_example: mammoth project copy PROJECT_ID NAME --help
1062
+ agent_example: mammoth project copy 123 'Revenue report'
1063
+ unit_tests:
1064
+ - UT-PROJECT-COPY
1065
+ contract_tests:
1066
+ - CT-PROJECT-COPY-HUMAN
1067
+ - CT-PROJECT-COPY-JSON
1068
+ - CT-PROJECT-COPY-ERROR
1069
+ draft_test: null
1070
+ undo_test: null
1071
+ known_restrictions: 'Creates a project: copies the datasets, views and pipelines of PROJECT_ID into
1072
+ a new project NAME, in one job the command waits for. Input fields: dataset_ids (copy only these;
1073
+ default all), include_dashboards (default false), exclude_data (default false, copies pipelines without
1074
+ rows). The result is project_id, dataset_map, view_map, skipped (what was left behind or still points
1075
+ outside the copy) and dashboards (dashboard_id, new_dashboard_id). Needs permission to create projects.
1076
+ Sweep with ''project delete ID --yes --confirm ID''.'
1077
+ reviewed_by: primary
1078
+ readback:
1079
+ command: project.get
1080
+ ids:
1081
+ project_id: result.project_id
1082
+ kind: object