mammoth-cli 2.0.63__tar.gz → 2.0.65__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/PKG-INFO +2 -2
  2. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +1 -1
  4. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +3 -3
  5. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +30 -0
  6. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +10 -0
  7. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/project.py +26 -0
  8. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/registry.py +4 -0
  9. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/schema.py +51 -6
  10. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/view.py +69 -1
  11. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/embed.py +13 -2
  12. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/command_contract.py +3 -0
  13. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/positionals.py +31 -0
  14. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/pyproject.toml +2 -2
  15. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/automation.yaml +3 -1
  16. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/billing.yaml +1 -1
  17. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/dashboard.yaml +2 -1
  18. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/file.yaml +2 -1
  19. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/project.yaml +117 -0
  20. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/view.yaml +68 -0
  21. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/sdk-catalog.source.yaml +21 -0
  22. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/sdk-methods.yaml +50 -2
  23. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/.gitignore +0 -0
  24. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/LICENSE +0 -0
  25. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/README.md +0 -0
  26. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/__main__.py +0 -0
  27. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/app.py +0 -0
  28. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  29. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  30. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  31. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  32. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  33. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  34. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  35. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  36. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  37. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  38. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  39. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  40. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  41. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  42. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  43. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  44. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  45. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  46. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  47. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  48. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  49. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  50. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  51. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  52. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  53. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  54. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  55. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  56. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  57. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  58. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  59. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  60. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  61. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  62. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  63. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  64. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  65. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  66. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  67. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  68. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  69. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  70. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  71. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  72. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  73. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  74. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  75. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  76. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  77. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  78. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  79. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  80. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  81. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  82. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  83. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  84. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  85. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  86. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  87. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  88. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  89. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  90. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  91. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  92. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  93. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  94. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  95. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  96. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/__init__.py +0 -0
  97. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/activity.py +0 -0
  98. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/addon.py +0 -0
  99. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/agent.py +0 -0
  100. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/ai.py +0 -0
  101. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/annotation.py +0 -0
  102. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/auth.py +0 -0
  103. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/automation.py +0 -0
  104. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/batch.py +0 -0
  105. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/billing.py +0 -0
  106. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/browse.py +0 -0
  107. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/capability.py +0 -0
  108. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/client_app.py +0 -0
  109. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/completion.py +0 -0
  110. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/config.py +0 -0
  111. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/connector.py +0 -0
  112. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/context.py +0 -0
  113. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/dashboard.py +0 -0
  114. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/data_app.py +0 -0
  115. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/dataset.py +0 -0
  116. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/doctor.py +0 -0
  117. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/external_key.py +0 -0
  118. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/file.py +0 -0
  119. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/folder.py +0 -0
  120. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/job.py +0 -0
  121. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/notification.py +0 -0
  122. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/parameter.py +0 -0
  123. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/report.py +0 -0
  124. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/schedule.py +0 -0
  125. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/skill.py +0 -0
  126. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/snippet.py +0 -0
  127. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/support.py +0 -0
  128. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/template.py +0 -0
  129. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/trash.py +0 -0
  130. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/upgrade.py +0 -0
  131. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/user.py +0 -0
  132. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/view_ops.py +0 -0
  133. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/webhook.py +0 -0
  134. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/workflow.py +0 -0
  135. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/commands/workspace.py +0 -0
  136. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/context/__init__.py +0 -0
  137. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/context/credentials.py +0 -0
  138. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/context/endpoint.py +0 -0
  139. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/context/profiles.py +0 -0
  140. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/context/resolver.py +0 -0
  141. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/contracts/__init__.py +0 -0
  142. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/contracts/auth.py +0 -0
  143. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/errors/__init__.py +0 -0
  144. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/errors/envelope.py +0 -0
  145. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/manifest/__init__.py +0 -0
  146. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/manifest/loader.py +0 -0
  147. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/messages/__init__.py +0 -0
  148. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/output/__init__.py +0 -0
  149. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/output/envelope.py +0 -0
  150. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/output/normalize.py +0 -0
  151. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/output/policy.py +0 -0
  152. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/output/progress.py +0 -0
  153. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/output/render.py +0 -0
  154. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/py.typed +0 -0
  155. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/__init__.py +0 -0
  156. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/confirm.py +0 -0
  157. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/dryrun.py +0 -0
  158. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/embedded.py +0 -0
  159. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/executor.py +0 -0
  160. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/input_loader.py +0 -0
  161. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/invocation.py +0 -0
  162. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/options.py +0 -0
  163. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/parents.py +0 -0
  164. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/runlog.py +0 -0
  165. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/session.py +0 -0
  166. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/strict.py +0 -0
  167. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/updates.py +0 -0
  168. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/runtime/validate.py +0 -0
  169. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/__init__.py +0 -0
  170. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/argspec.py +0 -0
  171. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/coerce.py +0 -0
  172. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/conditions.py +0 -0
  173. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/dashboard_pages.py +0 -0
  174. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/dashboard_review.py +0 -0
  175. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/data_quality.py +0 -0
  176. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/dispatch.py +0 -0
  177. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/factory.py +0 -0
  178. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/input_fields.py +0 -0
  179. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/mapping.py +0 -0
  180. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/openapi_types.py +0 -0
  181. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/protocol.py +0 -0
  182. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/sdk_service.py +0 -0
  183. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/testing.py +0 -0
  184. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/services/type_system.py +0 -0
  185. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/skills/__init__.py +0 -0
  186. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/skills/installer.py +0 -0
  187. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/skills/steering.py +0 -0
  188. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/mammoth_cli/testing.py +0 -0
  189. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/activity.yaml +0 -0
  190. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/addon.yaml +0 -0
  191. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/agent.yaml +0 -0
  192. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/ai.yaml +0 -0
  193. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/annotation.yaml +0 -0
  194. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/auth.yaml +0 -0
  195. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/batch.yaml +0 -0
  196. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/browse.yaml +0 -0
  197. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/capability.yaml +0 -0
  198. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/client-app.yaml +0 -0
  199. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/completion.yaml +0 -0
  200. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/config.yaml +0 -0
  201. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/connector.yaml +0 -0
  202. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/context.yaml +0 -0
  203. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/data-app.yaml +0 -0
  204. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/dataset.yaml +0 -0
  205. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/doctor.yaml +0 -0
  206. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/external-key.yaml +0 -0
  207. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/folder.yaml +0 -0
  208. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/job.yaml +0 -0
  209. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/log.yaml +0 -0
  210. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/notification.yaml +0 -0
  211. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/parameter.yaml +0 -0
  212. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/report.yaml +0 -0
  213. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/schedule.yaml +0 -0
  214. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/schema.yaml +0 -0
  215. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/skill.yaml +0 -0
  216. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/snippet.yaml +0 -0
  217. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/support.yaml +0 -0
  218. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/template.yaml +0 -0
  219. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/trash.yaml +0 -0
  220. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/upgrade.yaml +0 -0
  221. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/user.yaml +0 -0
  222. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/version.yaml +0 -0
  223. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/webhook.yaml +0 -0
  224. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/workflow.yaml +0 -0
  225. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/commands/workspace.yaml +0 -0
  226. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/openapi-operations.yaml +0 -0
  227. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/manifests/schema-v1.json +0 -0
  228. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/spec/openapi/metadata.json +0 -0
  229. {mammoth_cli-2.0.63 → mammoth_cli-2.0.65}/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.63
3
+ Version: 2.0.65
4
4
  Summary: Command-line interface for the Mammoth Analytics platform
5
5
  Project-URL: homepage, https://mammoth.io
6
6
  Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
@@ -17,7 +17,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
17
  Requires-Python: <3.15,>=3.12
18
18
  Requires-Dist: jsonschema>=4.20
19
19
  Requires-Dist: keyring<26,>=25.7
20
- Requires-Dist: mammoth-io<0.8,>=0.7.31
20
+ Requires-Dist: mammoth-io<0.8,>=0.7.32
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.0.63"
9
+ __version__ = "2.0.65"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mammoth-cli
3
- version: 2.0.63
3
+ version: 2.0.65
4
4
  description: "Use Mammoth Analytics from a terminal: install or authenticate the CLI, discover its live command contract, and safely manage projects, data, views, pipelines (join, merge, pivot, filter, clean), dashboards, exports, and handoffs."
5
5
  ---
6
6
 
@@ -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 567; 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 571; 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
 
@@ -32,7 +32,7 @@ Load only the applicable domain file:
32
32
  - [log](commands/log.md) — 2 published commands
33
33
  - [notification](commands/notification.md) — 5 published commands
34
34
  - [parameter](commands/parameter.md) — 14 published commands
35
- - [project](commands/project.md) — 20 published commands
35
+ - [project](commands/project.md) — 23 published commands
36
36
  - [report](commands/report.md) — 1 published commands
37
37
  - [schedule](commands/schedule.md) — 5 published commands
38
38
  - [schema](commands/schema.md) — 3 published commands
@@ -45,7 +45,7 @@ Load only the applicable domain file:
45
45
  - [user](commands/user.md) — 8 published commands
46
46
  - [version](commands/version.md) — 1 published commands
47
47
  - [view-transform](commands/view-transform.md) — 32 published commands
48
- - [view](commands/view.md) — 87 published commands
48
+ - [view](commands/view.md) — 88 published commands
49
49
  - [webhook](commands/webhook.md) — 7 published commands
50
50
  - [workflow](commands/workflow.md) — 16 published commands
51
51
  - [workspace](commands/workspace.md) — 20 published commands
@@ -102,6 +102,36 @@ Result: `ProjectListResult`; mutation `read`, confirmation `none`, wait policy `
102
102
 
103
103
  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. Final check: only project 3 (API Tests_project, pre-existing, not touched) remains; project 41 is gone. Project 40 (golden-... concurrent run) was also gone by this point but was never tou…
104
104
 
105
+ ### `project.memory.add`
106
+
107
+ Run: `mammoth project memory add`. Exact input fields: `mammoth schema get project.memory.add`.
108
+
109
+ Example: `mammoth project memory add 123 --input '{"text": "sample"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
110
+
111
+ Result: `ProjectMemoryAddResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
112
+
113
+ Status on release: untried; no live run recorded.
114
+
115
+ ### `project.memory.list`
116
+
117
+ Run: `mammoth project memory list`. Exact input fields: `mammoth schema get project.memory.list`.
118
+
119
+ Example: `mammoth project memory list 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
120
+
121
+ Result: `ProjectMemoryListResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
122
+
123
+ Status on release: untried; no live run recorded.
124
+
125
+ ### `project.memory.remove`
126
+
127
+ Run: `mammoth project memory remove`. Exact input fields: `mammoth schema get project.memory.remove`.
128
+
129
+ Example: `mammoth project memory remove 123 --input '{"index": 1}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
130
+
131
+ Result: `ProjectMemoryRemoveResult`; mutation `benign_mutation`, confirmation `none`, wait policy `not_async`.
132
+
133
+ Status on release: untried; no live run recorded.
134
+
105
135
  ### `project.pending-changes`
106
136
 
107
137
  Run: `mammoth project pending-changes`. Exact input fields: `mammoth schema get project.pending-changes`.
@@ -222,6 +222,16 @@ Result: `ViewDataAggregateResult`; mutation `read`, confirmation `none`, wait po
222
222
 
223
223
  Status on release: untried; no live run recorded.
224
224
 
225
+ ### `view.data.explore`
226
+
227
+ Run: `mammoth view data explore`. Exact input fields: `mammoth schema get view.data.explore`.
228
+
229
+ Example: `mammoth view data explore 123 Status 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
230
+
231
+ Result: `ViewDataExploreResult`; mutation `read`, confirmation `none`, wait policy `always_wait`.
232
+
233
+ Status on release: untried; no live run recorded.
234
+
225
235
  ### `view.data.get`
226
236
 
227
237
  Run: `mammoth view data get`. Exact input fields: `mammoth schema get view.data.get`.
@@ -141,6 +141,32 @@ def project_pending_changes(invocation: Invocation) -> HandlerResult:
141
141
  return data, _meta(invocation, auth.workspace_id, project_id)
142
142
 
143
143
 
144
+ def project_memory_list(invocation: Invocation) -> HandlerResult:
145
+ """List the caller's saved agent preferences for a project."""
146
+ project_id = _project_id(invocation)
147
+ with open_service(invocation) as (service, auth):
148
+ data = service.call(_symbol(invocation), project_id=project_id)
149
+ return data, _meta(invocation, auth.workspace_id, project_id)
150
+
151
+
152
+ def project_memory_add(invocation: Invocation) -> HandlerResult:
153
+ """Save one agent preference (``text`` from ``--input``) for the caller."""
154
+ project_id = _project_id(invocation)
155
+ text = _require_input_field(invocation.load_input(), "text")
156
+ with open_service(invocation) as (service, auth):
157
+ data = service.call(_symbol(invocation), project_id=project_id, text=text)
158
+ return data, _meta(invocation, auth.workspace_id, project_id)
159
+
160
+
161
+ def project_memory_remove(invocation: Invocation) -> HandlerResult:
162
+ """Remove the caller's saved preference at ``index`` (from ``--input``)."""
163
+ project_id = _project_id(invocation)
164
+ index = _require_input_field(invocation.load_input(), "index")
165
+ with open_service(invocation) as (service, auth):
166
+ data = service.call(_symbol(invocation), project_id=project_id, index=index)
167
+ return data, _meta(invocation, auth.workspace_id, project_id)
168
+
169
+
144
170
  def project_resource_status(invocation: Invocation) -> HandlerResult:
145
171
  """Report the status of a project's resources."""
146
172
  project_id = _project_id(invocation)
@@ -207,6 +207,9 @@ HANDLERS: dict[str, Handler] = {
207
207
  "project.get": project_cmd.project_get,
208
208
  "project.check": project_cmd.project_check,
209
209
  "project.pending-changes": project_cmd.project_pending_changes,
210
+ "project.memory.list": project_cmd.project_memory_list,
211
+ "project.memory.add": project_cmd.project_memory_add,
212
+ "project.memory.remove": project_cmd.project_memory_remove,
210
213
  "project.resource-status": project_cmd.project_resource_status,
211
214
  "project.resource-dependencies": project_cmd.project_resource_dependencies,
212
215
  "project.resource-dependencies.update": project_cmd.project_resource_dependencies_update,
@@ -597,6 +600,7 @@ HANDLERS: dict[str, Handler] = {
597
600
  "view.data.get": view_cmd.view_data_get,
598
601
  "view.data.query": view_cmd.view_data_query,
599
602
  "view.data.aggregate": view_cmd.view_data_aggregate,
603
+ "view.data.explore": view_cmd.view_data_explore,
600
604
  "view.exportable-config.get": view_cmd.view_exportable_config_get,
601
605
  "view.exportable-config.apply": view_cmd.view_exportable_config_apply,
602
606
  "view.conditional-format.create": view_cmd.view_conditional_format_create,
@@ -85,7 +85,7 @@ _COMMAND_DISCOVERY_PURPOSES = {
85
85
  "view.export.onedrive": "one drive onedrive microsoft cloud storage",
86
86
  "view.export.postgres": "postgres postgresql database",
87
87
  "view.export.powerbi": "power bi powerbi microsoft dashboard workspace",
88
- "view.export.publish-db": "publish database live connection odbc",
88
+ "view.export.publish-db": "publish database live connection odbc bi tool reads table",
89
89
  "view.export.publish-db-update": "publish database update refresh live connection",
90
90
  "view.export.redshift": "redshift amazon aws database warehouse",
91
91
  "view.export.rest": "webhook http endpoint api push rest",
@@ -99,7 +99,6 @@ _COMMAND_DISCOVERY_PURPOSES = {
99
99
  "from a point in the task sequence"
100
100
  ),
101
101
  "view.draft.submit": "apply submit run execute a pending draft changes",
102
- "webhook.create": "webhook http endpoint api push create",
103
102
  "webhook.update": "webhook http endpoint api update",
104
103
  "webhook.get": "webhook http endpoint api get",
105
104
  "webhook.list": "webhook http endpoint api list",
@@ -168,10 +167,6 @@ _COMMAND_DISCOVERY_PURPOSES = {
168
167
  "bring in migrate move transfer switch old existing dashboards dashboard over power "
169
168
  "bi report tableau file upload"
170
169
  ),
171
- "automation.create": (
172
- "schedule scheduled recurring repeat refresh rerun run every day daily week weekly "
173
- "hour hourly month monthly automatically trigger alert email a dataset pipeline"
174
- ),
175
170
  # One entry per ``view transform`` command, in the words a user states a
176
171
  # goal in rather than Mammoth's own task names. This is the CLI's version
177
172
  # of the web app's Transform menu; keep every transform listed.
@@ -257,6 +252,52 @@ _COMMAND_DISCOVERY_PURPOSES = {
257
252
  "window rank row number running total cumulative sum moving average lag lead "
258
253
  "previous next row partition"
259
254
  ),
255
+ # The web app's column Explore cards: what is trending, how a column is
256
+ # spread, its top values, a count over time.
257
+ "view.data.explore": (
258
+ "explore trend trends trending over time per day week month quarter year "
259
+ "distribution spread histogram top most common frequent values breakdown share "
260
+ "percentage profile"
261
+ ),
262
+ # Goals users state in their own words, one entry per command the agent's
263
+ # system prompt used to spell out by hand.
264
+ "dashboard.suggestion.list": "ideas suggest suggestions what to show put on a board chart",
265
+ "dashboard.analytics": "who viewed seen opened views visitors usage of a board",
266
+ "dashboard.share": "share make live publish board for the team link access",
267
+ "connector.connection.list": "which outside external sources connected connections list",
268
+ "project.pending-changes": (
269
+ "source changes new rows not taken in yet pending updates waiting to apply"
270
+ ),
271
+ "project.resource-status": "stuck stale failing broken error status anything wrong health",
272
+ "connector.ai.chat": (
273
+ "connect our own internal custom api build a connector for an unsupported source"
274
+ ),
275
+ "project.sample-flow": "sample example demo starter data dataset try start from",
276
+ "webhook.create": (
277
+ "webhook http endpoint api push create data pushed in sent from another system receive"
278
+ ),
279
+ "dataset.create-from-pdf": "pdf table document extract into a dataset",
280
+ "view.checkpoint.create": (
281
+ "stop halt pause pipeline alert notify flag when rows match a rule condition checkpoint"
282
+ ),
283
+ "view.data-check.create": "data quality check rule validate rows match condition flag",
284
+ "view.derivative.create": "metric kpi number single value to check track daily monitor",
285
+ "view.draft.auto-run": (
286
+ "stop prevent re-running rerun automatically when source changes auto run enable disable"
287
+ ),
288
+ "data-app.create": (
289
+ "page portal form others drop upload a file cleaned the same way self service"
290
+ ),
291
+ "automation.create": (
292
+ "schedule scheduled recurring repeat refresh rerun run every day daily week weekly "
293
+ "hour hourly month monthly automatically trigger alert email a dataset pipeline "
294
+ "retention purge old data send an emailed file attachment"
295
+ ),
296
+ "billing.subscription.update": "upgrade downgrade bigger plan change subscription tier",
297
+ "billing.invoice.list": "past bills billing history invoices payments receipts",
298
+ "project.memory.add": "remember save preference always from now on note for next time",
299
+ "project.memory.list": "remembered saved preferences what do you remember memory",
300
+ "project.memory.remove": "forget remove delete saved preference memory",
260
301
  }
261
302
 
262
303
  # A compact string scope is retained for existing discovery consumers. These
@@ -380,6 +421,10 @@ _DISCOVERY_STOPWORDS = frozenset(
380
421
  "this",
381
422
  "that",
382
423
  "how",
424
+ "what",
425
+ "is",
426
+ # The tail of "what's"/"it's" once the apostrophe splits the word.
427
+ "s",
383
428
  "do",
384
429
  "want",
385
430
  "need",
@@ -984,7 +984,7 @@ def view_data_aggregate(invocation: Invocation) -> HandlerResult:
984
984
  Read-only: computes and returns the aggregated result without adding a
985
985
  task to the view's pipeline or otherwise changing it. Pass exactly one of
986
986
  ``aggregations`` (a PIVOT; ``group_by`` is optional) or ``metric`` (a
987
- METRIC). ``function`` is one of SUM, COUNT, AVG, MIN, MAX. An optional
987
+ METRIC). ``function`` is one of SUM, COUNT, AVG, MIN, MAX, STDDEV, DISTINCT_COUNT. An optional
988
988
  ``condition`` filters rows before aggregating, and ``sequence`` pins the
989
989
  read to a pipeline step (default: latest). Never use ``view transform
990
990
  pivot`` just to read a number — it mutates the view's pipeline.
@@ -1030,6 +1030,74 @@ def view_data_aggregate(invocation: Invocation) -> HandlerResult:
1030
1030
  return data, _meta(invocation, auth.workspace_id, project_id)
1031
1031
 
1032
1032
 
1033
+ def _require_string_positional_at(invocation: Invocation, index: int, name: str) -> str:
1034
+ """Return the positional argument at ``index`` as a nonblank string, or raise."""
1035
+ if len(invocation.extra_args) <= index or not str(invocation.extra_args[index]).strip():
1036
+ raise CliError(
1037
+ code=CODE_MISSING_ARGUMENT,
1038
+ message=f"This command requires a {name} argument.",
1039
+ exit_status=EXIT_USAGE,
1040
+ hint=f"Pass the {name} as a positional argument.",
1041
+ )
1042
+ return str(invocation.extra_args[index])
1043
+
1044
+
1045
+ def view_data_explore(invocation: Invocation) -> HandlerResult:
1046
+ """Explore one column: trend, distribution, or top values, like the web app's
1047
+ column Explore card.
1048
+
1049
+ Read-only: computes and returns the result without adding a task to the
1050
+ view's pipeline or otherwise changing it. Buckets by the column's type --
1051
+ a DATE column by ``level`` (default "AUTO"; or DAY/WEEK/MONTH/QUARTER/
1052
+ YEAR/...) for a trend "over time"/"by month"/"by year"; a NUMERIC column
1053
+ by ``level`` resolution (default "AUTO") for a distribution/histogram; any
1054
+ other column (TEXT) as its top values by count, ``limit`` (default 20).
1055
+ Every bucket carries ``count`` and ``percentage`` of the column's total.
1056
+ An optional ``metric`` ``{"column": ..., "function": ...}`` (SUM, COUNT,
1057
+ AVG, MIN, MAX, STDDEV or DISTINCT_COUNT) adds a second aggregate per bucket over another column,
1058
+ and an optional ``condition`` filters rows first -- same as ``view data
1059
+ aggregate``, which this command wraps for the raw PIVOT shape. Never use
1060
+ ``view transform pivot`` just to explore a column; it mutates the
1061
+ pipeline.
1062
+ """
1063
+ project_id = require_project(invocation)
1064
+ view_id = _require_int_positional_at(invocation, 0, "view id")
1065
+ column_arg = _require_string_positional_at(invocation, 1, "column")
1066
+ document = invocation.load_input() or {}
1067
+ with open_service(invocation) as (service, auth):
1068
+ dataset_id = _resolve_dataset_id(service, invocation, view_id, document, 2)
1069
+ internal_to_display, column_types = _column_profile(
1070
+ service, dataset_id, view_id, project_id
1071
+ )
1072
+ display_to_internal = {
1073
+ display: internal for internal, display in internal_to_display.items()
1074
+ }
1075
+ internal_column = display_to_internal.get(column_arg, column_arg)
1076
+ column_type = column_types.get(column_arg, "")
1077
+ kwargs: dict[str, Any] = {
1078
+ "dataset_id": dataset_id,
1079
+ "dataview_id": view_id,
1080
+ "project_id": project_id,
1081
+ "column": internal_column,
1082
+ "column_type": column_type,
1083
+ }
1084
+ as_map: dict[str, str] = {"group_0": "bucket", "agg_0": "count"}
1085
+ metric = document.get("metric")
1086
+ if isinstance(metric, dict):
1087
+ resolved_metric = _resolved_aggregate_item(metric, display_to_internal)
1088
+ kwargs["metric"] = resolved_metric
1089
+ as_map["agg_1"] = resolved_metric["as_name"]
1090
+ if document.get(CONDITION_KWARG) is not None:
1091
+ compiled = compile_condition(document[CONDITION_KWARG])
1092
+ kwargs[CONDITION_KWARG] = compiled.build(
1093
+ display_to_internal or None, column_types or None
1094
+ )
1095
+ _forward_optional(document, kwargs, ("level", "sequence", "limit", "offset", "sort"))
1096
+ data = service.call(_symbol(invocation), **kwargs)
1097
+ data = _relabel_columns(service, dataset_id, view_id, project_id, data, as_map)
1098
+ return data, _meta(invocation, auth.workspace_id, project_id)
1099
+
1100
+
1033
1101
  def view_exportable_config_get(invocation: Invocation) -> HandlerResult:
1034
1102
  """Get a dataview's exportable pipeline configuration."""
1035
1103
  project_id = require_project(invocation)
@@ -40,6 +40,7 @@ def invoke(
40
40
  login: ExplicitLogin,
41
41
  project_id: int | None = None,
42
42
  timeout: float | None = None,
43
+ pipeline_timeout: float | None = None,
43
44
  ) -> dict[str, Any]:
44
45
  """Run ``mammoth <args>`` as ``login`` and return its envelope.
45
46
 
@@ -51,12 +52,14 @@ def invoke(
51
52
  already names one.
52
53
  timeout: Per-request timeout in seconds, sent as ``--timeout`` unless
53
54
  ``args`` already sets one.
55
+ pipeline_timeout: Pipeline wait timeout in seconds, sent as
56
+ ``--pipeline-timeout`` unless ``args`` already sets one.
54
57
 
55
58
  Returns:
56
59
  The success envelope (``data`` + ``meta``) or the error envelope
57
60
  (``error``). A CLI error is returned, never raised.
58
61
  """
59
- argv = _argv(args, project_id=project_id, timeout=timeout)
62
+ argv = _argv(args, project_id=project_id, timeout=timeout, pipeline_timeout=pipeline_timeout)
60
63
  call = embedded.EmbeddedCall(login=login)
61
64
  token = embedded.enter(call)
62
65
  try:
@@ -68,13 +71,21 @@ def invoke(
68
71
  return _error("no_output", "This command printed text only (help or version).", EXIT_USAGE)
69
72
 
70
73
 
71
- def _argv(args: Sequence[str], *, project_id: int | None, timeout: float | None) -> list[str]:
74
+ def _argv(
75
+ args: Sequence[str],
76
+ *,
77
+ project_id: int | None,
78
+ timeout: float | None,
79
+ pipeline_timeout: float | None,
80
+ ) -> list[str]:
72
81
  """``args`` plus the options an embedded call always runs with."""
73
82
  argv = list(args)
74
83
  if project_id is not None and not _has_option(argv, "--project"):
75
84
  argv += ["--project", str(project_id)]
76
85
  if timeout is not None and not _has_option(argv, "--timeout"):
77
86
  argv += ["--timeout", str(timeout)]
87
+ if pipeline_timeout is not None and not _has_option(argv, "--pipeline-timeout"):
88
+ argv += ["--pipeline-timeout", str(pipeline_timeout)]
78
89
  # Last, so they win over any output or input option in ``args``.
79
90
  return [*argv, "--output", "json", "--no-input"]
80
91
 
@@ -435,6 +435,9 @@ S2_COMMANDS = frozenset(
435
435
  "project.delete",
436
436
  "project.get",
437
437
  "project.list",
438
+ "project.memory.add",
439
+ "project.memory.list",
440
+ "project.memory.remove",
438
441
  "project.pending-changes",
439
442
  "project.publish-credentials",
440
443
  "project.resource-dependencies",
@@ -261,6 +261,9 @@ POSITIONAL_OVERRIDES: dict[str, tuple[PositionalSpec, ...]] = {
261
261
  "project.get": _optional_project_id(),
262
262
  "project.check": _optional_project_id(),
263
263
  "project.pending-changes": _optional_project_id(),
264
+ "project.memory.list": _optional_project_id(),
265
+ "project.memory.add": _optional_project_id(),
266
+ "project.memory.remove": _optional_project_id(),
264
267
  "project.resource-status": _optional_project_id(),
265
268
  "project.resource-dependencies": _optional_project_id(),
266
269
  "project.resource-dependencies.update": _optional_project_id(),
@@ -617,6 +620,34 @@ POSITIONAL_OVERRIDES: dict[str, tuple[PositionalSpec, ...]] = {
617
620
  ("view.version.update", "version_id", "ID of the pipeline version."),
618
621
  )
619
622
  },
623
+ # ``view data explore`` takes VIEW_ID first, then the required COLUMN (a
624
+ # display name, not an id -- the only ``str``-typed sub-positional in this
625
+ # family), then the OPTIONAL trailing DATASET_ID resolved from the view,
626
+ # mirroring the sub-resource commands above. ``column`` is a real,
627
+ # positional-sourced parameter of ``DataviewsAPI.explore``, so it stays out
628
+ # of the advertised --input fields without needing ``fills_sdk_param``.
629
+ "view.data.explore": (
630
+ PositionalSpec(
631
+ name="view_id",
632
+ type=int,
633
+ required=True,
634
+ help="ID of the view to act on.",
635
+ fills_sdk_param="dataview_id",
636
+ ),
637
+ PositionalSpec(
638
+ name="column",
639
+ type=str,
640
+ required=True,
641
+ help="Display name of the column to explore.",
642
+ ),
643
+ PositionalSpec(
644
+ name="dataset_id",
645
+ type=int,
646
+ required=False,
647
+ help="ID of the dataset the view belongs to; resolved from the view when omitted.",
648
+ falls_back_to_field="dataset_id",
649
+ ),
650
+ ),
620
651
  # ``billing hosted-page`` takes the page's object type as a positional OR an
621
652
  # ``object_type`` --input field (handler dual-sources
622
653
  # ``_string_positional(invocation) or document.get("object_type")``). The SDK
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.0.63"
3
+ version = "2.0.65"
4
4
  description = "Command-line interface for the Mammoth Analytics platform"
5
5
  authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
6
6
  readme = "README.md"
7
7
  license = "LicenseRef-Proprietary"
8
8
  requires-python = ">=3.12,<3.15"
9
9
  dependencies = [
10
- "mammoth-io (>=0.7.31,<0.8)",
10
+ "mammoth-io (>=0.7.32,<0.8)",
11
11
  "typer (>=0.27,<0.28)",
12
12
  "rich (>=15,<16)",
13
13
  "platformdirs (>=4.10,<5)",
@@ -40,7 +40,9 @@ commands:
40
40
  draft_test: null
41
41
  undo_test: null
42
42
  known_restrictions: 'B15 AUTOMATION_EXTERNAL_EFFECTS: task models can pull cloud files and send email;
43
- requires connector/email allowlists and dedicated fixtures.'
43
+ requires connector/email allowlists and dedicated fixtures. Delete old rows on a schedule with
44
+ task apply_retention_policy (datasource_id, rule_type time_based, count_based or
45
+ condition_based). An emailed file is task send_an_alert with attachments.dataview_ids.'
44
46
  reviewed_by: primary
45
47
  - command_id: automation.delete
46
48
  command_path: automation delete
@@ -814,5 +814,5 @@ commands:
814
814
  - CT-BILLING-SUBSCRIPTION-UPDATE-ERROR
815
815
  draft_test: null
816
816
  undo_test: null
817
- known_restrictions: null
817
+ known_restrictions: 'Plans: storage 1 GB Free, 10 GB Starter, 50 GB Pro; users 1, 5, 10.'
818
818
  reviewed_by: primary
@@ -283,7 +283,8 @@ commands:
283
283
  bi-preflight. Terminal mode writes `output_path` to local disk. Inside the Mammoth app the
284
284
  download cannot reach the user: run `dashboard bi-preflight` to tell them what will convert,
285
285
  then send them to the dashboard's Publish menu (the arrow next to Publish) -> Export to Power
286
- BI / Export to Tableau, where they download the file themselves."
286
+ BI / Export to Tableau, where they download the file themselves. No command makes a PDF of a
287
+ board: that is the board's Download PDF in the app."
287
288
  reviewed_by: primary
288
289
  - command_id: dashboard.cancel-generation
289
290
  command_path: dashboard cancel-generation
@@ -317,7 +317,8 @@ commands:
317
317
  upload well under 16 MB: split larger files or upload a zip/gz. Parsing is asynchronous; use --timeout 300 for files past a few MB and poll the returned
318
318
  job on timeout. Upload authorization is tenant- and scope-specific; a permission failure does not
319
319
  make this route universally unavailable. On success retain returned IDs, read them back, and
320
- verify owned cleanup; do not assume other upload variants are qualified.'
320
+ verify owned cleanup; do not assume other upload variants are qualified. Each sheet of an Excel
321
+ file becomes its own dataset.'
321
322
  reviewed_by: primary
322
323
  - command_id: file.upload-folder
323
324
  command_path: file upload-folder
@@ -384,6 +384,123 @@ commands:
384
384
  undo_test: null
385
385
  known_restrictions: 'B01 FIRST_PAGE_ONLY: no offset/cursor continuation proven yet.'
386
386
  reviewed_by: primary
387
+ - command_id: project.memory.list
388
+ command_path: project memory list
389
+ disposition: command
390
+ alias_of: null
391
+ operation_ids: []
392
+ positionals:
393
+ - name: project_id
394
+ type: int
395
+ required: false
396
+ metavar: PROJECT_ID
397
+ falls_back_to_field: null
398
+ help: ID of the project to act on; defaults to the active project.
399
+ options: []
400
+ sdk_symbol: mammoth.api.projects.ProjectsAPI.list_agent_memory
401
+ sdk_conversion: Call mammoth.api.projects.ProjectsAPI.list_agent_memory with validated request fields.
402
+ request_model: ProjectMemoryListRequest
403
+ result_model: ProjectMemoryListResult
404
+ mutation_class: read
405
+ confirmation: none
406
+ wait_policy: not_async
407
+ pagination_policy: none
408
+ acceptance_evidence: contract_only_no_disposable_fixture
409
+ live_test: null
410
+ live_exemption_reason: No automated disposable-project fixture wired into tests/live yet for this command.
411
+ contract_fixture: null
412
+ required_fixture_guard: null
413
+ secret_fields: []
414
+ human_example: mammoth project memory list --help
415
+ agent_example: 'mammoth project memory list 123'
416
+ unit_tests:
417
+ - UT-PROJECT-MEMORY-LIST
418
+ contract_tests:
419
+ - CT-PROJECT-MEMORY-LIST-HUMAN
420
+ - CT-PROJECT-MEMORY-LIST-JSON
421
+ - CT-PROJECT-MEMORY-LIST-ERROR
422
+ draft_test: null
423
+ undo_test: null
424
+ known_restrictions: 'The saved preferences are the caller''s own, per project, oldest first; the in-app agent reads them at the start of every turn. Remove one by its zero-based position in this list.'
425
+ reviewed_by: primary
426
+ - command_id: project.memory.add
427
+ command_path: project memory add
428
+ disposition: command
429
+ alias_of: null
430
+ operation_ids: []
431
+ positionals:
432
+ - name: project_id
433
+ type: int
434
+ required: false
435
+ metavar: PROJECT_ID
436
+ falls_back_to_field: null
437
+ help: ID of the project to act on; defaults to the active project.
438
+ options: []
439
+ sdk_symbol: mammoth.api.projects.ProjectsAPI.add_agent_memory
440
+ sdk_conversion: Call mammoth.api.projects.ProjectsAPI.add_agent_memory with validated request fields.
441
+ request_model: ProjectMemoryAddRequest
442
+ result_model: ProjectMemoryAddResult
443
+ mutation_class: benign_mutation
444
+ confirmation: none
445
+ wait_policy: not_async
446
+ pagination_policy: none
447
+ acceptance_evidence: contract_only_no_disposable_fixture
448
+ live_test: null
449
+ live_exemption_reason: No automated disposable-project fixture wired into tests/live yet for this command.
450
+ contract_fixture: null
451
+ required_fixture_guard: null
452
+ secret_fields: []
453
+ human_example: mammoth project memory add --help
454
+ agent_example: 'mammoth project memory add 123 --input ''{"text": "sample"}'''
455
+ unit_tests:
456
+ - UT-PROJECT-MEMORY-ADD
457
+ contract_tests:
458
+ - CT-PROJECT-MEMORY-ADD-HUMAN
459
+ - CT-PROJECT-MEMORY-ADD-JSON
460
+ - CT-PROJECT-MEMORY-ADD-ERROR
461
+ draft_test: null
462
+ undo_test: null
463
+ known_restrictions: 'Save only a preference the user stated for how the agent works or shows things (at most 20, each at most 200 characters); never data, results or secrets. The in-app agent applies them in every later turn in this project.'
464
+ reviewed_by: primary
465
+ - command_id: project.memory.remove
466
+ command_path: project memory remove
467
+ disposition: command
468
+ alias_of: null
469
+ operation_ids: []
470
+ positionals:
471
+ - name: project_id
472
+ type: int
473
+ required: false
474
+ metavar: PROJECT_ID
475
+ falls_back_to_field: null
476
+ help: ID of the project to act on; defaults to the active project.
477
+ options: []
478
+ sdk_symbol: mammoth.api.projects.ProjectsAPI.remove_agent_memory
479
+ sdk_conversion: Call mammoth.api.projects.ProjectsAPI.remove_agent_memory with validated request fields.
480
+ request_model: ProjectMemoryRemoveRequest
481
+ result_model: ProjectMemoryRemoveResult
482
+ mutation_class: benign_mutation
483
+ confirmation: none
484
+ wait_policy: not_async
485
+ pagination_policy: none
486
+ acceptance_evidence: contract_only_no_disposable_fixture
487
+ live_test: null
488
+ live_exemption_reason: No automated disposable-project fixture wired into tests/live yet for this command.
489
+ contract_fixture: null
490
+ required_fixture_guard: null
491
+ secret_fields: []
492
+ human_example: mammoth project memory remove --help
493
+ agent_example: 'mammoth project memory remove 123 --input ''{"index": 1}'''
494
+ unit_tests:
495
+ - UT-PROJECT-MEMORY-REMOVE
496
+ contract_tests:
497
+ - CT-PROJECT-MEMORY-REMOVE-HUMAN
498
+ - CT-PROJECT-MEMORY-REMOVE-JSON
499
+ - CT-PROJECT-MEMORY-REMOVE-ERROR
500
+ draft_test: null
501
+ undo_test: null
502
+ known_restrictions: 'index is the zero-based position from project memory list; use it when the user asks to forget a preference.'
503
+ reviewed_by: primary
387
504
  - command_id: project.pending-changes
388
505
  command_path: project pending-changes
389
506
  disposition: command