mammoth-cli 2.2.4__tar.gz → 2.2.6__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 (253) hide show
  1. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/PKG-INFO +3 -4
  2. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/README.md +1 -2
  3. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/__init__.py +1 -1
  4. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +5 -6
  5. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +1 -1
  6. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +6 -5
  7. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +20 -0
  8. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +20 -0
  9. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +10 -0
  10. mammoth_cli-2.2.6/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +13 -0
  11. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +10 -0
  12. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +36 -0
  13. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/auth.py +65 -60
  14. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/browse.py +46 -0
  15. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/dataset.py +36 -11
  16. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/folder.py +1 -11
  17. mammoth_cli-2.2.6/mammoth_cli/commands/link.py +89 -0
  18. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/registry.py +8 -0
  19. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/schema.py +30 -1
  20. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/workspace.py +7 -0
  21. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/context/endpoint.py +2 -2
  22. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/context/profiles.py +1 -1
  23. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/context/resolver.py +39 -3
  24. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/contracts/auth.py +1 -11
  25. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/embed.py +1 -1
  26. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/command_contract.py +4 -1
  27. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/mapping.py +17 -2
  28. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/positionals.py +23 -0
  29. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/sdk_service.py +25 -3
  30. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/pyproject.toml +2 -2
  31. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/browse.yaml +86 -0
  32. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/dashboard.yaml +80 -0
  33. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/dataset.yaml +45 -0
  34. mammoth_cli-2.2.6/spec/manifests/commands/link.yaml +40 -0
  35. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/project.yaml +1 -1
  36. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/workspace.yaml +37 -0
  37. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/edits-target.source.yaml +1 -0
  38. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/sdk-catalog.source.yaml +50 -0
  39. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/sdk-methods.yaml +77 -5
  40. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/.gitignore +0 -0
  41. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/LICENSE +0 -0
  42. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/__main__.py +0 -0
  43. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/app.py +0 -0
  44. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  45. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  46. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  47. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  48. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  49. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  50. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  51. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  52. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  53. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  54. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  55. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  56. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  57. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  58. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  59. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  60. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  61. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  62. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  63. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  64. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
  65. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  66. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  67. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  68. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  69. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  70. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  71. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  72. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  73. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  74. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  75. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  76. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  77. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  78. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  79. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  80. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  81. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  82. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  83. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  84. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  85. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  86. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  87. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  88. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  89. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  90. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  91. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  92. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  93. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  94. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  95. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  96. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  97. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  98. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  99. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  100. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  101. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  102. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  103. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  104. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  105. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  106. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  107. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  108. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  109. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  110. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  111. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/__init__.py +0 -0
  112. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/activity.py +0 -0
  113. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/addon.py +0 -0
  114. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/agent.py +0 -0
  115. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/ai.py +0 -0
  116. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/annotation.py +0 -0
  117. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/automation.py +0 -0
  118. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/batch.py +0 -0
  119. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/billing.py +0 -0
  120. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/calc.py +0 -0
  121. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/capability.py +0 -0
  122. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/client_app.py +0 -0
  123. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/completion.py +0 -0
  124. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/config.py +0 -0
  125. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/connector.py +0 -0
  126. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/context.py +0 -0
  127. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/dashboard.py +0 -0
  128. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/data_app.py +0 -0
  129. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/doctor.py +0 -0
  130. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/external_key.py +0 -0
  131. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/file.py +0 -0
  132. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/job.py +0 -0
  133. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/notification.py +0 -0
  134. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/parameter.py +0 -0
  135. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/project.py +0 -0
  136. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/report.py +0 -0
  137. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/schedule.py +0 -0
  138. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/skill.py +0 -0
  139. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/snippet.py +0 -0
  140. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/support.py +0 -0
  141. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/template.py +0 -0
  142. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/trash.py +0 -0
  143. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/upgrade.py +0 -0
  144. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/user.py +0 -0
  145. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/view.py +0 -0
  146. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/view_ops.py +0 -0
  147. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/view_profile.py +0 -0
  148. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/webhook.py +0 -0
  149. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/commands/workflow.py +0 -0
  150. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/context/__init__.py +0 -0
  151. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/context/credentials.py +0 -0
  152. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/contracts/__init__.py +0 -0
  153. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/errors/__init__.py +0 -0
  154. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/errors/envelope.py +0 -0
  155. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/manifest/__init__.py +0 -0
  156. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/manifest/loader.py +0 -0
  157. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/messages/__init__.py +0 -0
  158. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/output/__init__.py +0 -0
  159. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/output/envelope.py +0 -0
  160. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/output/normalize.py +0 -0
  161. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/output/policy.py +0 -0
  162. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/output/progress.py +0 -0
  163. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/output/render.py +0 -0
  164. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/py.typed +0 -0
  165. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/__init__.py +0 -0
  166. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/confirm.py +0 -0
  167. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/dataset_health.py +0 -0
  168. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/dryrun.py +0 -0
  169. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  170. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/embedded.py +0 -0
  171. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/executor.py +0 -0
  172. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/input_loader.py +0 -0
  173. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/intent_only.py +0 -0
  174. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/invocation.py +0 -0
  175. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/new_data.py +0 -0
  176. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/options.py +0 -0
  177. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/parents.py +0 -0
  178. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/runlog.py +0 -0
  179. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/session.py +0 -0
  180. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/state.py +0 -0
  181. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/strict.py +0 -0
  182. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/updates.py +0 -0
  183. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/validate.py +0 -0
  184. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/runtime/verify.py +0 -0
  185. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/__init__.py +0 -0
  186. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/argspec.py +0 -0
  187. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/board_values.py +0 -0
  188. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/coerce.py +0 -0
  189. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/conditions.py +0 -0
  190. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/dashboard_filters.py +0 -0
  191. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/dashboard_pages.py +0 -0
  192. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/dashboard_review.py +0 -0
  193. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/data_profile.py +0 -0
  194. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/data_quality.py +0 -0
  195. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/dispatch.py +0 -0
  196. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/factory.py +0 -0
  197. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/input_fields.py +0 -0
  198. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/listing.py +0 -0
  199. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/openapi_types.py +0 -0
  200. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/protocol.py +0 -0
  201. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/read_queries.py +0 -0
  202. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/stored_stats.py +0 -0
  203. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/testing.py +0 -0
  204. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/text_dates.py +0 -0
  205. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/type_system.py +0 -0
  206. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/services/write_impact.py +0 -0
  207. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/skills/__init__.py +0 -0
  208. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/skills/installer.py +0 -0
  209. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/skills/steering.py +0 -0
  210. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/mammoth_cli/testing.py +0 -0
  211. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/activity.yaml +0 -0
  212. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/addon.yaml +0 -0
  213. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/agent.yaml +0 -0
  214. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/ai.yaml +0 -0
  215. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/annotation.yaml +0 -0
  216. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/auth.yaml +0 -0
  217. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/automation.yaml +0 -0
  218. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/batch.yaml +0 -0
  219. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/billing.yaml +0 -0
  220. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/calc.yaml +0 -0
  221. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/capability.yaml +0 -0
  222. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/client-app.yaml +0 -0
  223. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/completion.yaml +0 -0
  224. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/config.yaml +0 -0
  225. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/connector.yaml +0 -0
  226. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/context.yaml +0 -0
  227. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/data-app.yaml +0 -0
  228. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/doctor.yaml +0 -0
  229. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/external-key.yaml +0 -0
  230. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/file.yaml +0 -0
  231. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/folder.yaml +0 -0
  232. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/job.yaml +0 -0
  233. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/log.yaml +0 -0
  234. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/notification.yaml +0 -0
  235. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/parameter.yaml +0 -0
  236. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/report.yaml +0 -0
  237. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/schedule.yaml +0 -0
  238. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/schema.yaml +0 -0
  239. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/skill.yaml +0 -0
  240. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/snippet.yaml +0 -0
  241. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/support.yaml +0 -0
  242. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/template.yaml +0 -0
  243. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/trash.yaml +0 -0
  244. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/upgrade.yaml +0 -0
  245. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/user.yaml +0 -0
  246. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/version.yaml +0 -0
  247. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/view.yaml +0 -0
  248. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/webhook.yaml +0 -0
  249. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/commands/workflow.yaml +0 -0
  250. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/openapi-operations.yaml +0 -0
  251. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/manifests/schema-v1.json +0 -0
  252. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/spec/openapi/metadata.json +0 -0
  253. {mammoth_cli-2.2.4 → mammoth_cli-2.2.6}/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.4
3
+ Version: 2.2.6
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.5
20
+ Requires-Dist: mammoth-io<0.9,>=0.8.7
21
21
  Requires-Dist: platformdirs<5,>=4.10
22
22
  Requires-Dist: pydantic<3,>=2.12.5
23
23
  Requires-Dist: pyyaml<7,>=6
@@ -212,8 +212,7 @@ Onboard me first:
212
212
  `recommendation`, print exactly this and wait until I say done: "In the
213
213
  Mammoth web app open Workspace settings → API Tokens → Create token (no
214
214
  project, so I can create projects), copy the token (it starts with mm_ and
215
- is shown once), and note the workspace id (the number after /workspaces/
216
- in the address bar), then run in your own terminal: mammoth auth login" —
215
+ is shown once), then run in your own terminal: mammoth auth login" —
217
216
  never ask for, read, or pass the token yourself, and never run auth login.
218
217
  3. Require `mammoth doctor` to pass, then run `mammoth skill show` and
219
218
  follow the guide it prints.
@@ -184,8 +184,7 @@ Onboard me first:
184
184
  `recommendation`, print exactly this and wait until I say done: "In the
185
185
  Mammoth web app open Workspace settings → API Tokens → Create token (no
186
186
  project, so I can create projects), copy the token (it starts with mm_ and
187
- is shown once), and note the workspace id (the number after /workspaces/
188
- in the address bar), then run in your own terminal: mammoth auth login" —
187
+ is shown once), then run in your own terminal: mammoth auth login" —
189
188
  never ask for, read, or pass the token yourself, and never run auth login.
190
189
  3. Require `mammoth doctor` to pass, then run `mammoth skill show` and
191
190
  follow the guide it prints.
@@ -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.4"
9
+ __version__ = "2.2.6"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -1,6 +1,6 @@
1
1
  # Authentication and profiles
2
2
 
3
- Required: an API token (`mm_...`) and a workspace id. Optional: a one-label
3
+ Required: an API token (`mm_...`); it names its own workspace. Optional: a one-label
4
4
  server prefix (default `app`, resolving to `https://app.mammoth.io/api/v2`).
5
5
  Login accepts nothing else. If `auth status` reports `credential: key_secret`
6
6
  (a profile saved by an older CLI), it still works, but ask the operator to run
@@ -29,8 +29,7 @@ human operator:
29
29
  1. Tell the operator where the credentials come from: in the Mammoth web app,
30
30
  **Workspace settings → API Tokens → Create token** gives a token that
31
31
  starts with `mm_`; the web app shows it only once (if it is lost, create a
32
- new one). The workspace id is the number after `/workspaces/`
33
- in the web app's address bar. Then give the exact command to run in
32
+ new one). Then give the exact command to run in
34
33
  **their own** terminal. For production it is:
35
34
 
36
35
  ```bash
@@ -40,7 +39,7 @@ human operator:
40
39
  Add `--server-prefix release` only when the task names the release
41
40
  environment, and `--profile NAME` only when the operator wants a profile
42
41
  other than `default`. The command prompts for the token with hidden
43
- input, then the workspace id, so no secret enters chat, argv, or history.
42
+ input, so no secret enters chat, argv, or history.
44
43
  Tokens are per environment and per workspace: a release token never
45
44
  authenticates on `app`.
46
45
  On macOS the Keychain may show a dialog about `mammoth-cli`; tell the
@@ -54,7 +53,7 @@ human operator:
54
53
  `auth login` yourself, with or without `--input`, unless the operator has
55
54
  explicitly given you a protected `0600` credential file path to use.
56
55
 
57
- The only supported configuration is the API token, the workspace id, and an optional one-label server prefix (default `app`). There is no base-url
56
+ The only supported configuration is the API token and an optional one-label server prefix (default `app`). There is no base-url
58
57
  override.
59
58
 
60
59
  ## Cold-start sequence
@@ -123,7 +122,7 @@ file backend as a secret store; use the OS keyring or stop and obtain a
123
122
  supported secure store. Remove any input file after the
124
123
  profile is stored.
125
124
 
126
- `creds.json` is a `0600` JSON file: `{"api_token": "mm_...", "workspace_id": 4,
125
+ `creds.json` is a `0600` JSON file: `{"api_token": "mm_...",
127
126
  "server_prefix": "app"}` (`server_prefix` optional). You can
128
127
  also pipe it with `--input - --input-format json`.
129
128
 
@@ -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 595 commands. 455 of them bind one of the 528 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, 2 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 602 commands. 455 of them bind one of the 528 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, 2 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 595; 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 602; 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
 
@@ -13,7 +13,7 @@ Load only the applicable domain file:
13
13
  - [automation](commands/automation.md) — 8 published commands
14
14
  - [batch](commands/batch.md) — 7 published commands
15
15
  - [billing](commands/billing.md) — 22 published commands
16
- - [browse](commands/browse.md) — 4 published commands
16
+ - [browse](commands/browse.md) — 6 published commands
17
17
  - [calc](commands/calc.md) — 1 published commands
18
18
  - [capability](commands/capability.md) — 3 published commands
19
19
  - [client-app](commands/client-app.md) — 5 published commands
@@ -23,14 +23,15 @@ Load only the applicable domain file:
23
23
  - [context](commands/context.md) — 3 published commands
24
24
  - [dashboard-qa](commands/dashboard-qa.md) — 13 published commands
25
25
  - [dashboard-style](commands/dashboard-style.md) — 10 published commands
26
- - [dashboard](commands/dashboard.md) — 93 published commands
26
+ - [dashboard](commands/dashboard.md) — 95 published commands
27
27
  - [data-app](commands/data-app.md) — 12 published commands
28
- - [dataset](commands/dataset.md) — 20 published commands
28
+ - [dataset](commands/dataset.md) — 21 published commands
29
29
  - [doctor](commands/doctor.md) — 1 published commands
30
30
  - [external-key](commands/external-key.md) — 4 published commands
31
31
  - [file](commands/file.md) — 9 published commands
32
32
  - [folder](commands/folder.md) — 10 published commands
33
33
  - [job](commands/job.md) — 4 published commands
34
+ - [link](commands/link.md) — 1 published commands
34
35
  - [log](commands/log.md) — 2 published commands
35
36
  - [notification](commands/notification.md) — 5 published commands
36
37
  - [parameter](commands/parameter.md) — 14 published commands
@@ -50,4 +51,4 @@ Load only the applicable domain file:
50
51
  - [view](commands/view.md) — 90 published commands
51
52
  - [webhook](commands/webhook.md) — 7 published commands
52
53
  - [workflow](commands/workflow.md) — 16 published commands
53
- - [workspace](commands/workspace.md) — 25 published commands
54
+ - [workspace](commands/workspace.md) — 26 published commands
@@ -22,6 +22,26 @@ Result: `BrowseProjectResult`; mutation `read`, confirmation `none`, wait policy
22
22
 
23
23
  Status on release: observed blocker — backend_error: GET /workspaces/4/projects/47/browse HTTP 500 empty body. Re-check before relying on it.
24
24
 
25
+ ### `browse.resource`
26
+
27
+ Run: `mammoth browse resource`. Exact input fields: `mammoth schema get browse.resource`.
28
+
29
+ Example: `mammoth browse resource dataset 123`. Placeholders are illustrative; resolve IDs and input from observed reads.
30
+
31
+ Result: `BrowseResourceResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
32
+
33
+ Status on release: untried; no live run recorded.
34
+
35
+ ### `browse.resources`
36
+
37
+ Run: `mammoth browse resources`. Exact input fields: `mammoth schema get browse.resources`.
38
+
39
+ Example: `mammoth browse resources`. Placeholders are illustrative; resolve IDs and input from observed reads.
40
+
41
+ Result: `BrowseResourcesResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
42
+
43
+ Status on release: untried; no live run recorded.
44
+
25
45
  ### `browse.root`
26
46
 
27
47
  Run: `mammoth browse root`. Exact input fields: `mammoth schema get browse.root`.
@@ -322,6 +322,16 @@ Result: `DashboardEmbedUsageGetResult`; mutation `read`, confirmation `none`, wa
322
322
 
323
323
  Status on release: untried; no live run recorded.
324
324
 
325
+ ### `dashboard.embed.usage.summary`
326
+
327
+ Run: `mammoth dashboard embed usage summary`. Exact input fields: `mammoth schema get dashboard.embed.usage.summary`.
328
+
329
+ Example: `mammoth dashboard embed usage summary --input '{"dashboard_ids": [1]}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
330
+
331
+ Result: `DashboardEmbedUsageSummaryResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
332
+
333
+ Status on release: untried; no live run recorded.
334
+
325
335
  ### `dashboard.exemplar.extract`
326
336
 
327
337
  Run: `mammoth dashboard exemplar extract`. Exact input fields: `mammoth schema get dashboard.exemplar.extract`.
@@ -372,6 +382,16 @@ Result: `DashboardFilterResult`; mutation `benign_mutation`, confirmation `none`
372
382
 
373
383
  Status on release: untried; no live run recorded.
374
384
 
385
+ ### `dashboard.format-preview`
386
+
387
+ Run: `mammoth dashboard format-preview`. Exact input fields: `mammoth schema get dashboard.format-preview`.
388
+
389
+ Example: `mammoth dashboard format-preview 123 --input '{"style": "sample"}'`. Placeholders are illustrative; resolve IDs and input from observed reads.
390
+
391
+ Result: `DashboardFormatPreviewResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
392
+
393
+ Status on release: untried; no live run recorded.
394
+
375
395
  ### `dashboard.get`
376
396
 
377
397
  Run: `mammoth dashboard get`. Exact input fields: `mammoth schema get dashboard.get`.
@@ -22,6 +22,16 @@ Result: `DatasetBrokenRowsListResult`; mutation `read`, confirmation `none`, wai
22
22
 
23
23
  Status on release: untried; no live run recorded.
24
24
 
25
+ ### `dataset.broken-rows.resolve`
26
+
27
+ Run: `mammoth dataset broken-rows resolve`. Exact input fields: `mammoth schema get dataset.broken-rows.resolve`.
28
+
29
+ Example: `mammoth dataset broken-rows resolve 123 --input '{"op": "add", "batch_id": 1, "rows": [{"sample_key": "Status"}]}'`. Illustrative only: append `--yes` after observing an owned target.
30
+
31
+ Result: `DatasetBrokenRowsResolveResult`; mutation `destructive`, confirmation `prompt_or_yes`, wait policy `not_async`.
32
+
33
+ Status on release: untried; no live run recorded.
34
+
25
35
  ### `dataset.bulk-delete`
26
36
 
27
37
  Run: `mammoth dataset bulk-delete`. Exact input fields: `mammoth schema get dataset.bulk-delete`.
@@ -0,0 +1,13 @@
1
+ # `link` commands
2
+
3
+ Every command returns the standard JSON envelope. On nonzero exit, read the error envelope and its `recovery_commands`; do not guess request fields. "Status on release" is joined from `docs/release-capability-matrix.json`: *ran once* means one bounded live run succeeded on the named CLI release, *untried* means nobody has run it (use it normally: confirm writes with the user, check the result afterwards), *not supported* means the backend refuses it. When this file disagrees with [capabilities](../capabilities.md) or a recipe, they win. Envelope shapes: [machine output](../machine-output.md).
4
+
5
+ ### `link`
6
+
7
+ Run: `mammoth link`. Exact input fields: `mammoth schema get link`.
8
+
9
+ Example: `mammoth link https://app.mammoth.io/workspaces/1/projects/2/data/datasets`. Placeholders are illustrative; resolve IDs and input from observed reads.
10
+
11
+ Result: `LinkResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
12
+
13
+ Status on release: untried; no live run recorded.
@@ -64,6 +64,16 @@ Result: `WorkspaceGetResult`; mutation `read`, confirmation `none`, wait policy
64
64
 
65
65
  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. Returned workspace 4 (API Tests) profile. Single invocation only.
66
66
 
67
+ ### `workspace.home`
68
+
69
+ Run: `mammoth workspace home`. Exact input fields: `mammoth schema get workspace.home`.
70
+
71
+ Example: `mammoth workspace home`. Placeholders are illustrative; resolve IDs and input from observed reads.
72
+
73
+ Result: `WorkspaceHomeResult`; mutation `read`, confirmation `none`, wait policy `not_async`.
74
+
75
+ Status on release: untried; no live run recorded.
76
+
67
77
  ### `workspace.invite.delete`
68
78
 
69
79
  Run: `mammoth workspace invite delete`. Exact input fields: `mammoth schema get workspace.invite.delete`.
@@ -58,3 +58,39 @@ mammoth view list DATASET_ID --project PROJECT_ID # the new view, row_count s
58
58
  The new view is ready at once and takes transforms like any other (verified
59
59
  on release, 2026-09-24). Run `view create` only when `view list DATASET_ID`
60
60
  is empty, so that a retry does not add a second view.
61
+
62
+ ## A pasted link to a file with "Unstructured rows"
63
+
64
+ `mammoth project needs-attention --project PROJECT_ID` lists it as a
65
+ `needs_input` row with `action: "unstructured_rows"` and the `dataset_id`.
66
+ The Monitor panel lists this as **Unstructured rows** ("header and data rows
67
+ need mapping"): some lines of an uploaded file did not fit the dataset's
68
+ columns and were set aside, so the dataset waits for a person. Turn the pasted
69
+ address into ids first; it makes no request:
70
+
71
+ ```bash
72
+ mammoth link 'https://app.mammoth.io/workspaces/1/projects/2/data/folders/3?selectedResourceId=4'
73
+ ```
74
+
75
+ The folder and `selected_resource_id` in a link are resource ids, not dataset
76
+ ids: find the dataset with `mammoth dataset find NAME`. Then read the set-aside
77
+ lines and why each one does not fit (the first 100, with `row_count` the total):
78
+
79
+ ```bash
80
+ mammoth dataset broken-rows list DATASET_ID --project PROJECT_ID
81
+ ```
82
+
83
+ Then fix them, with the user's confirmation. Take a line in after correcting
84
+ it so its column count matches, or discard it (discarded lines do not come
85
+ back; say so first). `batch_id` and `line_num` come from the list:
86
+
87
+ ```bash
88
+ mammoth dataset broken-rows resolve DATASET_ID --project PROJECT_ID \
89
+ --input '{"op": "remove", "batch_id": 7, "rows": [{"line_num": 4, "line": ""}]}'
90
+ mammoth job wait JOB_ID
91
+ mammoth dataset broken-rows list DATASET_ID --project PROJECT_ID # row_count 0 = done
92
+ ```
93
+
94
+ `op: "add"` takes the corrected `line` of each row in instead. The same step is
95
+ **Review & Fix** in the app. Do not tell the user to open the Monitor item's
96
+ link.
@@ -1,8 +1,9 @@
1
1
  """Bespoke `auth` command family: login, status, logout.
2
2
 
3
- Authentication needs an API token (``mm_...``, sent as ``Authorization:
4
- Bearer``) and a workspace id, plus an optional server prefix (default
5
- ``app``). There is no environment credential path. These commands never accept a secret as an
3
+ Authentication needs only an API token (``mm_...``, sent as ``Authorization:
4
+ Bearer``), plus an optional server prefix (default ``app``). The token names its
5
+ own workspace, which login learns from the server. There is no environment
6
+ credential path. These commands never accept a secret as an
6
7
  ordinary command-line value: it comes from a hidden TTY prompt or a
7
8
  permission-checked JSON/YAML login document read through ``--input``.
8
9
  """
@@ -18,18 +19,14 @@ from typing import Any, cast
18
19
  import typer
19
20
  from pydantic import ValidationError
20
21
 
21
- from mammoth_cli.context import credentials, profiles
22
+ from mammoth_cli.context import credentials, profiles, resolver
22
23
  from mammoth_cli.context.endpoint import resolve_base_url
23
- from mammoth_cli.context.resolver import (
24
- ResolvedAuth,
25
- resolve_auth,
26
- )
24
+ from mammoth_cli.context.resolver import ResolvedAuth, resolve_auth
27
25
  from mammoth_cli.contracts.auth import LoginRequest
28
26
  from mammoth_cli.errors.envelope import (
29
27
  CODE_AUTHENTICATION_FAILED,
30
28
  CODE_CONFIRMATION_DECLINED,
31
29
  CODE_CONFIRMATION_REQUIRED,
32
- CODE_INVALID_WORKSPACE_ID,
33
30
  EXIT_USAGE,
34
31
  CliError,
35
32
  )
@@ -128,7 +125,7 @@ def _validate_login_document(document: dict[str, Any]) -> LoginRequest:
128
125
  message="The login request document failed validation.",
129
126
  exit_status=EXIT_USAGE,
130
127
  hint=(
131
- 'Expected {"api_token": "mm_...", "workspace_id": N} with an optional '
128
+ 'Expected {"api_token": "mm_..."} with an optional '
132
129
  '"server_prefix". API key + secret pairs are no longer accepted; create '
133
130
  "a token in Workspace settings -> API Tokens."
134
131
  ),
@@ -217,6 +214,59 @@ def _prompt_blockers(invocation: Invocation) -> list[str]:
217
214
  return reasons
218
215
 
219
216
 
217
+ def _verify_login(invocation: Invocation, *, base_url: str, api_token: str) -> int:
218
+ """Learn the token's workspace from the server and run the connection check.
219
+
220
+ Nothing is saved here; a failure leaves existing profile state unchanged.
221
+
222
+ Returns:
223
+ The workspace id the server reports for the token.
224
+
225
+ Raises:
226
+ CliError: ``authentication_failed`` (with the endpoint and a masked
227
+ receipt of the token) when the server rejects it; any other mapped
228
+ transport error as is.
229
+ """
230
+ try:
231
+ workspace_id = resolver.resolve_token_workspace(base_url, api_token, invocation.timeout)
232
+ service = service_factory.build_service(
233
+ ResolvedAuth(
234
+ api_key=None,
235
+ api_secret=None,
236
+ workspace_id=workspace_id,
237
+ base_url=base_url,
238
+ api_token=api_token,
239
+ ),
240
+ timeout=invocation.timeout,
241
+ )
242
+ try:
243
+ service.check_connection()
244
+ finally:
245
+ service.close()
246
+ except CliError as exc:
247
+ if exc.code == CODE_AUTHENTICATION_FAILED:
248
+ # Say exactly what was tried, without the secret: the endpoint and
249
+ # a masked receipt of the token. Credentials are per environment,
250
+ # and a release token typed at a production login is the common
251
+ # cause of an otherwise opaque 401.
252
+ exc.details = {
253
+ **exc.details,
254
+ "endpoint_base_url": base_url,
255
+ # A receipt only (length and last four characters). The output
256
+ # layer redacts any key that looks like a credential, so this
257
+ # is named for what it is: a description, not the value.
258
+ "credential_receipt": {"type": "api token", "shape": _masked_receipt(api_token)},
259
+ }
260
+ exc.hint = (
261
+ f"{base_url} rejected this token. Credentials are per environment: "
262
+ "a token issued on one Mammoth server does not authenticate on "
263
+ "another. Check the token and that --server-prefix matches where "
264
+ "it was issued."
265
+ )
266
+ raise
267
+ return workspace_id
268
+
269
+
220
270
  def _run_login(
221
271
  invocation: Invocation,
222
272
  *,
@@ -234,7 +284,6 @@ def _run_login(
234
284
 
235
285
  blockers = _prompt_blockers(invocation)
236
286
 
237
- effective_workspace: int | None
238
287
  if invocation.input_file is not None:
239
288
  # The permission check is deliberately separate from parsing so a
240
289
  # secret-bearing file is rejected before any bytes are read. The
@@ -246,15 +295,12 @@ def _run_login(
246
295
  request = _validate_login_document(document)
247
296
  api_token = request.api_token.strip()
248
297
  _check_token_shape(api_token)
249
- effective_workspace = request.workspace_id
250
298
  effective_prefix = server_prefix if server_prefix is not None else request.server_prefix
251
299
  elif not blockers:
252
- # Two flows, nothing else: a terminal prompts for everything (token,
253
- # then workspace id), and non-interactive uses --input. The workspace
254
- # is asked last, after the credential.
300
+ # Two flows, nothing else: a terminal prompts for the token, and
301
+ # non-interactive uses --input.
255
302
  api_token = _prompt_secret("API token")
256
303
  _check_token_shape(api_token)
257
- effective_workspace = typer.prompt("Workspace id", type=int)
258
304
  effective_prefix = server_prefix
259
305
  else:
260
306
  raise CliError(
@@ -269,49 +315,8 @@ def _run_login(
269
315
  ),
270
316
  )
271
317
 
272
- if effective_workspace is None or effective_workspace <= 0:
273
- raise CliError(
274
- code=CODE_INVALID_WORKSPACE_ID,
275
- message="A positive --workspace id is required.",
276
- exit_status=EXIT_USAGE,
277
- )
278
318
  resolved_base_url = resolve_base_url(effective_prefix)
279
-
280
- resolved_auth = ResolvedAuth(
281
- api_key=None,
282
- api_secret=None,
283
- workspace_id=effective_workspace,
284
- base_url=resolved_base_url,
285
- api_token=api_token,
286
- )
287
- service = service_factory.build_service(resolved_auth, timeout=invocation.timeout)
288
- try:
289
- service.check_connection()
290
- except CliError as exc:
291
- if exc.code == CODE_AUTHENTICATION_FAILED:
292
- # Say exactly what was tried, without the secret: the endpoint,
293
- # the workspace, and a masked receipt of the key. Credentials are
294
- # per environment, and a release key typed at a production login
295
- # is the common cause of an otherwise opaque 401.
296
- exc.details = {
297
- **exc.details,
298
- "endpoint_base_url": resolved_base_url,
299
- "workspace_id": effective_workspace,
300
- # A receipt only (length and last four characters). The output
301
- # layer redacts any key that looks like a credential, so this
302
- # is named for what it is: a description, not the value.
303
- "credential_receipt": {"type": "api token", "shape": _masked_receipt(api_token)},
304
- }
305
- exc.hint = (
306
- f"{resolved_base_url} rejected this token for workspace "
307
- f"{effective_workspace}. Credentials are per environment and per workspace: "
308
- "a token issued on one Mammoth server or workspace does not authenticate on "
309
- "another. Check the token, the workspace id, and that --server-prefix "
310
- "matches where it was issued."
311
- )
312
- raise
313
- finally:
314
- service.close()
319
+ effective_workspace = _verify_login(invocation, base_url=resolved_base_url, api_token=api_token)
315
320
 
316
321
  profile_name = invocation.profile or profiles.DEFAULT_PROFILE_NAME
317
322
  profiles.validate_profile_name(profile_name)
@@ -366,8 +371,8 @@ def auth_login(
366
371
  """Log in and store one profile's credentials.
367
372
 
368
373
  Prompts for the API token (mm_..., from Workspace settings -> API Tokens)
369
- and the workspace id in a terminal. For non-interactive use (agents, CI), pass
370
- ``--input FILE`` with {"api_token": ..., "workspace_id": ...} instead.
374
+ in a terminal; the token names its workspace. For non-interactive use
375
+ (agents, CI), pass ``--input FILE`` with {"api_token": ...} instead.
371
376
  Performs a lightweight connection check before saving anything; a failed
372
377
  check leaves existing profile state unchanged.
373
378
  """
@@ -149,3 +149,49 @@ def browse_workspace(invocation: Invocation) -> HandlerResult:
149
149
  with open_service(invocation) as (service, auth):
150
150
  data = service.call(_symbol(invocation), **kwargs)
151
151
  return data, _meta(invocation, auth.workspace_id, resolved_project(invocation))
152
+
153
+
154
+ def browse_resources(invocation: Invocation) -> HandlerResult:
155
+ """List one project's resources a cursor page at a time (resources v2)."""
156
+ project_id = require_project(invocation)
157
+ document = invocation.load_input() or {}
158
+ kwargs: dict[str, Any] = {"project_id": project_id}
159
+ _forward_optional(
160
+ document,
161
+ kwargs,
162
+ (
163
+ "parent_type",
164
+ "parent_id",
165
+ "resource_type",
166
+ "search",
167
+ "cursor",
168
+ "limit",
169
+ "sort",
170
+ "fields",
171
+ ),
172
+ )
173
+ with open_service(invocation) as (service, auth):
174
+ data = service.call(_symbol(invocation), **kwargs)
175
+ return data, _meta(invocation, auth.workspace_id, project_id)
176
+
177
+
178
+ def browse_resource(invocation: Invocation) -> HandlerResult:
179
+ """Get one resource of the active project: type, then id, as positionals."""
180
+ project_id = require_project(invocation)
181
+ resource_type = invocation.positional("resource_type")
182
+ object_id = invocation.positional("object_id")
183
+ if not resource_type or object_id is None:
184
+ raise CliError(
185
+ code=CODE_MISSING_ARGUMENT,
186
+ message="This command requires a resource type and a resource id.",
187
+ exit_status=EXIT_USAGE,
188
+ hint="Pass the type, then the id: mammoth browse resource dataset 123.",
189
+ )
190
+ with open_service(invocation) as (service, auth):
191
+ data = service.call(
192
+ _symbol(invocation),
193
+ resource_type=str(resource_type),
194
+ object_id=int(object_id),
195
+ project_id=project_id,
196
+ )
197
+ return data, _meta(invocation, auth.workspace_id, project_id)
@@ -37,6 +37,7 @@ from mammoth_cli.services.listing import (
37
37
  fit_budget,
38
38
  name_hit,
39
39
  search_page,
40
+ source_of,
40
41
  )
41
42
 
42
43
  HandlerResult = tuple[Any, dict[str, Any]]
@@ -142,16 +143,9 @@ def _require_string_positional(invocation: Invocation, name: str) -> str:
142
143
  return str(invocation.extra_args[0])
143
144
 
144
145
 
145
- # The projects endpoint accepts at most limit=100 and exposes no offset, so a
146
- # cross-project search can see at most 100 projects; the result says when the
147
- # list was cut there.
148
- _MAX_PROJECTS_SEARCHED = 100
149
-
150
-
151
146
  def _visible_projects(service: Any) -> list[dict[str, Any]]:
152
- """The projects the credential can see (at most ``_MAX_PROJECTS_SEARCHED``)."""
153
- listing = service.list_projects(limit=_MAX_PROJECTS_SEARCHED)
154
- return list(listing.get("projects", [])) if isinstance(listing, dict) else []
147
+ """Every project the credential is a member of, across all pages."""
148
+ return list(service.list_all_projects())
155
149
 
156
150
 
157
151
  def _find_in_projects(
@@ -163,7 +157,11 @@ def _find_in_projects(
163
157
  project_id = project.get("id")
164
158
  if project_id is None:
165
159
  continue
166
- response = service.call("mammoth.api.datasets.DatasetsAPI.list_all", project_id=project_id)
160
+ response = service.call(
161
+ "mammoth.api.datasets.DatasetsAPI.list_all",
162
+ project_id=project_id,
163
+ fields=DATASET_ROW_FIELDS,
164
+ )
167
165
  datasets = response.get("datasets", []) if isinstance(response, dict) else []
168
166
  for dataset in datasets:
169
167
  name = dataset.get("name") if isinstance(dataset, dict) else None
@@ -173,6 +171,7 @@ def _find_in_projects(
173
171
  "project_id": project_id,
174
172
  "project_name": project.get("name"),
175
173
  **name_hit(dataset),
174
+ "source": source_of(dataset),
176
175
  }
177
176
  )
178
177
  return matches
@@ -231,7 +230,6 @@ def dataset_find(invocation: Invocation) -> HandlerResult:
231
230
  result: dict[str, Any] = {
232
231
  "matches": matches,
233
232
  "projects_searched": len(projects),
234
- "projects_truncated": len(projects) >= _MAX_PROJECTS_SEARCHED,
235
233
  }
236
234
  if note := ambiguity_note(len(matches), name_substring):
237
235
  result["note"] = note
@@ -454,6 +452,33 @@ def dataset_broken_rows(invocation: Invocation) -> HandlerResult:
454
452
  return _read_dataset(invocation)
455
453
 
456
454
 
455
+ def dataset_broken_rows_resolve(invocation: Invocation) -> HandlerResult:
456
+ """Add corrected set-aside lines to a dataset, or discard them. Prompt or ``--yes``.
457
+
458
+ ``--input`` carries ``op`` (``add`` or ``remove``), ``batch_id`` and ``rows``
459
+ (``{"line_num", "line"}`` each, from ``dataset broken-rows list``). Returns a
460
+ job to wait on.
461
+ """
462
+ project_id = require_project(invocation)
463
+ dataset_id = _require_int_positional(invocation, "dataset id")
464
+ document = invocation.load_input()
465
+ kwargs: dict[str, Any] = {
466
+ "dataset_id": dataset_id,
467
+ "op": _require_field(document, "op"),
468
+ "batch_id": _require_field(document, "batch_id"),
469
+ "rows": _require_field(document, "rows"),
470
+ "project_id": project_id,
471
+ }
472
+ enforce_confirmation(
473
+ invocation,
474
+ policy=POLICY_PROMPT_OR_YES,
475
+ action=f"{kwargs['op']} set-aside lines of dataset {dataset_id}",
476
+ )
477
+ with open_service(invocation) as (service, auth):
478
+ data = service.call(_symbol(invocation), **kwargs)
479
+ return data, _meta(invocation, auth.workspace_id, project_id)
480
+
481
+
457
482
  def _read_dataset(invocation: Invocation) -> HandlerResult:
458
483
  """Call this command's SDK read with the DATASET_ID positional."""
459
484
  project_id = require_project(invocation)