mammoth-cli 2.2.70__tar.gz → 2.2.72__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/PKG-INFO +6 -5
  2. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/README.md +4 -3
  3. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/__init__.py +1 -1
  4. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/auth.py +3 -7
  5. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/upgrade.py +25 -10
  6. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/context/oauth.py +32 -30
  7. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/errors/envelope.py +0 -1
  8. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/updates.py +33 -12
  9. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/pyproject.toml +2 -2
  10. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/.gitignore +0 -0
  11. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/LICENSE +0 -0
  12. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/__main__.py +0 -0
  13. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/app.py +0 -0
  14. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  15. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  16. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  17. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  18. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  19. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  20. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  21. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  22. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  23. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  24. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  25. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  26. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  27. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  28. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  29. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  30. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  31. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  32. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  33. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  34. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  35. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  36. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  37. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  38. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
  39. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
  40. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  41. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  42. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  43. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  44. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  45. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  46. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  47. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  48. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
  49. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  50. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  51. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  52. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  53. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  54. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
  55. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  56. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  57. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  58. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  59. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  60. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  61. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
  62. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  63. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  64. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  65. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  66. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  67. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  68. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  69. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  70. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  71. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  72. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  73. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  74. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  75. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  76. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  77. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/build-an-agent.md +0 -0
  78. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  79. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  80. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  81. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  82. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  83. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
  84. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  85. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  86. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  87. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  88. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  89. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  90. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  91. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  92. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  93. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  94. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  95. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/__init__.py +0 -0
  96. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/_lazy.py +0 -0
  97. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/activity.py +0 -0
  98. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/addon.py +0 -0
  99. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/agent.py +0 -0
  100. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/ai.py +0 -0
  101. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/annotation.py +0 -0
  102. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/automation.py +0 -0
  103. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/batch.py +0 -0
  104. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/billing.py +0 -0
  105. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/browse.py +0 -0
  106. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/calc.py +0 -0
  107. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/capability.py +0 -0
  108. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/client_app.py +0 -0
  109. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/completion.py +0 -0
  110. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/config.py +0 -0
  111. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/connector.py +0 -0
  112. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/context.py +0 -0
  113. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/dashboard.py +0 -0
  114. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/data_app.py +0 -0
  115. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/dataset.py +0 -0
  116. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/doctor.py +0 -0
  117. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/external_key.py +0 -0
  118. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/file.py +0 -0
  119. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/folder.py +0 -0
  120. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/help_summaries.json +0 -0
  121. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/job.py +0 -0
  122. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/link.py +0 -0
  123. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/notification.py +0 -0
  124. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/parameter.py +0 -0
  125. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/project.py +0 -0
  126. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/registry.py +0 -0
  127. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/report.py +0 -0
  128. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/resolve.py +0 -0
  129. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/schedule.py +0 -0
  130. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/schema.py +0 -0
  131. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/skill.py +0 -0
  132. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/snippet.py +0 -0
  133. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/support.py +0 -0
  134. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/template.py +0 -0
  135. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/trash.py +0 -0
  136. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/user.py +0 -0
  137. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/view.py +0 -0
  138. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/view_ops.py +0 -0
  139. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/view_profile.py +0 -0
  140. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/webhook.py +0 -0
  141. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/workflow.py +0 -0
  142. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/commands/workspace.py +0 -0
  143. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/context/__init__.py +0 -0
  144. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/context/credentials.py +0 -0
  145. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/context/endpoint.py +0 -0
  146. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/context/keyring_backend.py +0 -0
  147. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/context/profiles.py +0 -0
  148. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/context/resolver.py +0 -0
  149. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/contracts/__init__.py +0 -0
  150. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/contracts/auth.py +0 -0
  151. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/embed.py +0 -0
  152. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/errors/__init__.py +0 -0
  153. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/manifest/__init__.py +0 -0
  154. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/manifest/loader.py +0 -0
  155. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/messages/__init__.py +0 -0
  156. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/output/__init__.py +0 -0
  157. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/output/envelope.py +0 -0
  158. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/output/normalize.py +0 -0
  159. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/output/policy.py +0 -0
  160. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/output/progress.py +0 -0
  161. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/output/render.py +0 -0
  162. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/py.typed +0 -0
  163. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/__init__.py +0 -0
  164. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/confirm.py +0 -0
  165. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/dataset_health.py +0 -0
  166. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/dryrun.py +0 -0
  167. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  168. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/embedded.py +0 -0
  169. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/executor.py +0 -0
  170. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/input_loader.py +0 -0
  171. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/intent_only.py +0 -0
  172. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/invocation.py +0 -0
  173. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/locked_files.py +0 -0
  174. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/new_data.py +0 -0
  175. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/opens.py +0 -0
  176. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/options.py +0 -0
  177. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/parents.py +0 -0
  178. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/runlog.py +0 -0
  179. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/session.py +0 -0
  180. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/state.py +0 -0
  181. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/strict.py +0 -0
  182. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/validate.py +0 -0
  183. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/runtime/verify.py +0 -0
  184. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/__init__.py +0 -0
  185. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/append_blank_columns.py +0 -0
  186. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/argspec.py +0 -0
  187. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/board_values.py +0 -0
  188. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/coerce.py +0 -0
  189. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/command_contract.py +0 -0
  190. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/conditional_format.py +0 -0
  191. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/conditions.py +0 -0
  192. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/dashboard_filters.py +0 -0
  193. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/dashboard_pages.py +0 -0
  194. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/dashboard_review.py +0 -0
  195. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/data_profile.py +0 -0
  196. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/data_quality.py +0 -0
  197. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/dispatch.py +0 -0
  198. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/explore_cards.py +0 -0
  199. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/factory.py +0 -0
  200. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/folder_ids.py +0 -0
  201. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/input_fields.py +0 -0
  202. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/job_outcome.py +0 -0
  203. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/listing.py +0 -0
  204. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/local_time.py +0 -0
  205. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/mapping.py +0 -0
  206. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/openapi_types.py +0 -0
  207. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/positionals.py +0 -0
  208. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/protocol.py +0 -0
  209. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/read_queries.py +0 -0
  210. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/sdk_service.py +0 -0
  211. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/sql_check.py +0 -0
  212. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/stored_stats.py +0 -0
  213. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/testing.py +0 -0
  214. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/text_dates.py +0 -0
  215. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/type_system.py +0 -0
  216. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/view_analysis.py +0 -0
  217. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/view_variants.py +0 -0
  218. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/services/write_impact.py +0 -0
  219. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/skills/__init__.py +0 -0
  220. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/skills/installer.py +0 -0
  221. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/skills/steering.py +0 -0
  222. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/mammoth_cli/testing.py +0 -0
  223. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/activity.yaml +0 -0
  224. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/addon.yaml +0 -0
  225. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/agent.yaml +0 -0
  226. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/ai.yaml +0 -0
  227. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/annotation.yaml +0 -0
  228. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/auth.yaml +0 -0
  229. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/automation.yaml +0 -0
  230. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/batch.yaml +0 -0
  231. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/billing.yaml +0 -0
  232. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/browse.yaml +0 -0
  233. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/calc.yaml +0 -0
  234. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/capability.yaml +0 -0
  235. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/client-app.yaml +0 -0
  236. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/completion.yaml +0 -0
  237. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/config.yaml +0 -0
  238. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/connector.yaml +0 -0
  239. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/context.yaml +0 -0
  240. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/dashboard.yaml +0 -0
  241. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/data-app.yaml +0 -0
  242. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/dataset.yaml +0 -0
  243. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/doctor.yaml +0 -0
  244. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/external-key.yaml +0 -0
  245. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/file.yaml +0 -0
  246. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/folder.yaml +0 -0
  247. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/job.yaml +0 -0
  248. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/link.yaml +0 -0
  249. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/log.yaml +0 -0
  250. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/notification.yaml +0 -0
  251. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/parameter.yaml +0 -0
  252. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/project.yaml +0 -0
  253. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/report.yaml +0 -0
  254. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/resolve.yaml +0 -0
  255. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/schedule.yaml +0 -0
  256. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/schema.yaml +0 -0
  257. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/skill.yaml +0 -0
  258. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/snippet.yaml +0 -0
  259. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/support.yaml +0 -0
  260. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/template.yaml +0 -0
  261. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/token.yaml +0 -0
  262. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/trash.yaml +0 -0
  263. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/upgrade.yaml +0 -0
  264. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/user.yaml +0 -0
  265. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/version.yaml +0 -0
  266. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/view.yaml +0 -0
  267. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/webhook.yaml +0 -0
  268. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/workflow.yaml +0 -0
  269. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/commands/workspace.yaml +0 -0
  270. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/edits-target.source.yaml +0 -0
  271. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/openapi-operations.yaml +0 -0
  272. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/schema-v1.json +0 -0
  273. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/sdk-catalog.source.yaml +0 -0
  274. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/manifests/sdk-methods.yaml +0 -0
  275. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/openapi/metadata.json +0 -0
  276. {mammoth_cli-2.2.70 → mammoth_cli-2.2.72}/spec/openapi/openapi.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mammoth-cli
3
- Version: 2.2.70
3
+ Version: 2.2.72
4
4
  Summary: Command-line interface for the Mammoth Analytics platform
5
5
  Project-URL: homepage, https://mammoth.io
6
6
  Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
@@ -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.32
20
+ Requires-Dist: mammoth-io<0.9,>=0.8.33
21
21
  Requires-Dist: platformdirs<5,>=4.10
22
22
  Requires-Dist: pydantic<3,>=2.12.5
23
23
  Requires-Dist: pyyaml<7,>=6
@@ -242,10 +242,11 @@ mammoth skill install --input '{"agents": ["codex"], "scope": "project"}'
242
242
  Use `mammoth skill update` after a CLI upgrade. It refreshes copies owned by the
243
243
  installer and reports modified copies instead of silently replacing them.
244
244
 
245
- The CLI checks PyPI for a newer release at most once a day, after a command
245
+ The CLI checks PyPI for a newer release at most once an hour, after a command
246
246
  has finished: every JSON envelope carries `meta.update_available` and human
247
- output adds one stderr line. Set `MAMMOTH_NO_UPDATE_CHECK=1` to turn it off,
248
- or `MAMMOTH_AUTO_UPGRADE=1` to have it upgrade itself (opt-in; see
247
+ output adds one stderr line. In a terminal it also upgrades itself before the
248
+ next command; set `MAMMOTH_AUTO_UPGRADE=0` to stop that, or
249
+ `MAMMOTH_NO_UPDATE_CHECK=1` to turn the check off (see
249
250
  [Upgrade](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/upgrade.md)).
250
251
 
251
252
  ## What you can do
@@ -214,10 +214,11 @@ mammoth skill install --input '{"agents": ["codex"], "scope": "project"}'
214
214
  Use `mammoth skill update` after a CLI upgrade. It refreshes copies owned by the
215
215
  installer and reports modified copies instead of silently replacing them.
216
216
 
217
- The CLI checks PyPI for a newer release at most once a day, after a command
217
+ The CLI checks PyPI for a newer release at most once an hour, after a command
218
218
  has finished: every JSON envelope carries `meta.update_available` and human
219
- output adds one stderr line. Set `MAMMOTH_NO_UPDATE_CHECK=1` to turn it off,
220
- or `MAMMOTH_AUTO_UPGRADE=1` to have it upgrade itself (opt-in; see
219
+ output adds one stderr line. In a terminal it also upgrades itself before the
220
+ next command; set `MAMMOTH_AUTO_UPGRADE=0` to stop that, or
221
+ `MAMMOTH_NO_UPDATE_CHECK=1` to turn the check off (see
221
222
  [Upgrade](https://github.com/EdgeMetric/mammothsdk/blob/main/mammoth-cli/docs/upgrade.md)).
222
223
 
223
224
  ## What you can do
@@ -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.70"
9
+ __version__ = "2.2.72"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -23,7 +23,7 @@ import typer
23
23
  from pydantic import ValidationError
24
24
 
25
25
  from mammoth_cli.context import credentials, oauth, profiles, resolver
26
- from mammoth_cli.context.endpoint import DEFAULT_SERVER_PREFIX, resolve_base_url
26
+ from mammoth_cli.context.endpoint import resolve_base_url
27
27
  from mammoth_cli.context.resolver import ResolvedAuth, resolve_auth
28
28
  from mammoth_cli.contracts.auth import LoginRequest
29
29
  from mammoth_cli.errors.envelope import (
@@ -306,13 +306,9 @@ def _choose_method(
306
306
  return method
307
307
  if invocation.input_file is not None or blockers:
308
308
  return "token"
309
- available = oauth.has_client_id(server_prefix)
310
- prefix = server_prefix if server_prefix is not None else DEFAULT_SERVER_PREFIX
311
- browser_note = "recommended" if available else f"(not yet available on {prefix})"
312
- device_note = "no browser on this machine" if available else browser_note
313
309
  typer.echo("How do you want to sign in?", err=True)
314
- typer.echo(f" 1) Browser (OAuth) {browser_note}", err=True)
315
- typer.echo(f" 2) Device code {device_note}", err=True)
310
+ typer.echo(" 1) Browser (OAuth) recommended", err=True)
311
+ typer.echo(" 2) Device code no browser on this machine", err=True)
316
312
  typer.echo(" 3) Paste an API token for CI and scripts", err=True)
317
313
  if sys.stdin.isatty():
318
314
  return _choose_by_keypress()
@@ -278,6 +278,22 @@ def run_upgrade(command: list[str]) -> subprocess.CompletedProcess[str]:
278
278
  ) from exc
279
279
 
280
280
 
281
+ def installed_version() -> str | None:
282
+ """The version a fresh interpreter reports, i.e. what the upgrade really installed."""
283
+ try:
284
+ result = subprocess.run( # noqa: S603 - fixed argv, no shell
285
+ [sys.executable, "-m", "mammoth_cli", "--version"],
286
+ capture_output=True,
287
+ text=True,
288
+ timeout=30,
289
+ check=False,
290
+ )
291
+ except (OSError, subprocess.SubprocessError):
292
+ return None
293
+ output = result.stdout.strip().splitlines()
294
+ return output[-1].strip() if result.returncode == 0 and output else None
295
+
296
+
281
297
  def _envelope(
282
298
  *,
283
299
  manager: str,
@@ -379,17 +395,16 @@ def perform(invocation: Invocation, *, check: bool, target_version: str | None)
379
395
  },
380
396
  hint=f"Run it manually to see full output: {' '.join(command)}",
381
397
  )
382
- return (
383
- _envelope(
384
- manager=manager,
385
- current=current,
386
- latest=latest,
387
- target=target_version,
388
- action=ACTION_UPGRADED,
389
- command=command,
390
- ),
391
- {},
398
+ envelope = _envelope(
399
+ manager=manager,
400
+ current=current,
401
+ latest=latest,
402
+ target=target_version,
403
+ action=ACTION_UPGRADED,
404
+ command=command,
392
405
  )
406
+ envelope["installed_version"] = installed_version()
407
+ return envelope, {}
393
408
 
394
409
 
395
410
  def upgrade_command(
@@ -20,6 +20,7 @@ from __future__ import annotations
20
20
 
21
21
  import base64
22
22
  import contextlib
23
+ import functools
23
24
  import hashlib
24
25
  import html
25
26
  import http.server
@@ -34,18 +35,14 @@ from dataclasses import dataclass
34
35
 
35
36
  from mammoth_cli.context import credentials
36
37
  from mammoth_cli.context.credentials import OAuthSession
37
- from mammoth_cli.context.endpoint import DEFAULT_SERVER_PREFIX
38
+ from mammoth_cli.context.endpoint import DEFAULT_SERVER_PREFIX, resolve_base_url
38
39
  from mammoth_cli.context.profiles import config_dir
39
- from mammoth_cli.errors.envelope import EXIT_AUTH, EXIT_USAGE, CliError
40
+ from mammoth_cli.errors.envelope import EXIT_AUTH, CliError
40
41
 
41
- #: The first-party CLI's OAuth client id, one constant per environment (the
42
- #: server prefix). The server allow-lists these ids, so they are not
43
- #: configurable at run time. An environment absent here has no CLI client yet.
44
- OAUTH_CLIENT_IDS: dict[str, str] = {
45
- "challenger": "oc_aea5c2ce829da3f8",
46
- "koyal": "oc_f2566336e235795c",
47
- "app": "oc_b559f85cfb4de34c",
48
- }
42
+ #: The first-party CLI's OAuth client id: the same in every environment. The
43
+ #: server publishes it in its OAuth metadata (see :func:`published_client_id`);
44
+ #: this is the id used when it publishes nothing.
45
+ BUILTIN_CLIENT_ID = "mammoth-cli"
49
46
 
50
47
  #: Refresh when the access token has less than this long to live.
51
48
  REFRESH_MARGIN_SECONDS = 120
@@ -55,7 +52,6 @@ _LOCK_POLL_SECONDS = 0.1
55
52
  _LOCK_WAIT_SECONDS = 60.0
56
53
 
57
54
  CODE_LOGIN_EXPIRED = "login_expired"
58
- CODE_OAUTH_UNAVAILABLE = "oauth_unavailable"
59
55
  CODE_OAUTH_LOGIN_FAILED = "oauth_login_failed"
60
56
  CODE_DEVICE_LOGIN_EXPIRED = "device_login_expired"
61
57
 
@@ -78,30 +74,36 @@ def login_expired_error() -> CliError:
78
74
  )
79
75
 
80
76
 
81
- def has_client_id(server_prefix: str | None) -> bool:
82
- """Whether the CLI has an OAuth client registered for this environment."""
83
- return (
84
- server_prefix if server_prefix is not None else DEFAULT_SERVER_PREFIX
85
- ) in OAUTH_CLIENT_IDS
77
+ #: The metadata field carrying the CLI's client id on servers that publish it.
78
+ METADATA_CLIENT_ID_FIELD = "mammoth_cli_client_id"
86
79
 
87
80
 
88
- def client_id_for(server_prefix: str | None) -> str:
89
- """Return the CLI's OAuth client id for one environment.
81
+ @functools.cache
82
+ def published_client_id(prefix: str) -> str | None:
83
+ """The client id the server publishes in its OAuth metadata, or None.
90
84
 
91
- Raises:
92
- CliError: ``oauth_unavailable`` when the environment has no CLI client.
85
+ One GET per environment per process. None when the field is absent, the
86
+ server cannot be reached, or it answers anything but metadata: the caller
87
+ then uses :data:`BUILTIN_CLIENT_ID`.
93
88
  """
94
- prefix = server_prefix if server_prefix is not None else DEFAULT_SERVER_PREFIX
89
+ from mammoth import oauth as sdk_oauth
90
+
95
91
  try:
96
- return OAUTH_CLIENT_IDS[prefix]
97
- except KeyError:
98
- raise CliError(
99
- code=CODE_OAUTH_UNAVAILABLE,
100
- message=f"Browser sign-in is not available on '{prefix}' yet.",
101
- exit_status=EXIT_USAGE,
102
- hint="Pick option 3 (paste an API token) or run: mammoth auth login --method token",
103
- recovery_commands=["mammoth auth login --method token"],
104
- ) from None
92
+ status, body = sdk_oauth.metadata_request(resolve_base_url(prefix))
93
+ except CliError:
94
+ return None
95
+ except sdk_oauth.OAuthTransportError:
96
+ return None
97
+ if status != 200:
98
+ return None
99
+ value = body.get(METADATA_CLIENT_ID_FIELD) if isinstance(body, dict) else None
100
+ return value if isinstance(value, str) and value else None
101
+
102
+
103
+ def client_id_for(server_prefix: str | None) -> str:
104
+ """Return the CLI's OAuth client id: the published one, else the built-in one."""
105
+ prefix = server_prefix if server_prefix is not None else DEFAULT_SERVER_PREFIX
106
+ return published_client_id(prefix) or BUILTIN_CLIENT_ID
105
107
 
106
108
 
107
109
  # --- PKCE ---------------------------------------------------------------------
@@ -161,7 +161,6 @@ ERROR_SUMMARIES: dict[str, str] = {
161
161
  "not_authenticated": _S_SIGN_IN,
162
162
  "not_implemented": _S_UNAVAILABLE,
163
163
  "oauth_login_failed": "The browser sign-in didn't complete.",
164
- "oauth_unavailable": "Browser sign-in isn't available on this server.",
165
164
  "oauth_grant_revoke_failed": "The server did not revoke this sign-in grant.",
166
165
  "outcome_unknown": "It isn't clear whether this step went through. Check before trying again.",
167
166
  "pipeline_changed": "The pipeline was changed by someone else while this step ran.",
@@ -1,8 +1,8 @@
1
- """Once-a-day update check, and the opt-in automatic upgrade.
1
+ """Hourly update check, and the automatic upgrade (on by default).
2
2
 
3
3
  The CLI never blocks a command on the network for this. A command reads the
4
4
  cached answer (``update-check.json`` in the platform state directory, next to
5
- the run log's ``logs/``) and, when that answer is older than a day, refreshes
5
+ the run log's ``logs/``) and, when that answer is older than an hour, refreshes
6
6
  it *after* its own output has been written, with a short timeout and every
7
7
  failure swallowed. The hint therefore appears from the next command on.
8
8
 
@@ -12,11 +12,13 @@ What a caller sees:
12
12
  ``{"current", "latest", "command"}`` when a newer release is on PyPI.
13
13
  * one line on stderr in human output modes (never in ``json``/``ndjson``).
14
14
  * ``MAMMOTH_NO_UPDATE_CHECK=1`` disables the check and the hint entirely.
15
- * ``MAMMOTH_AUTO_UPGRADE=1`` performs the upgrade before the command runs,
16
- once per detected release, through the same manager detection as
17
- ``mammoth upgrade``; the running command still completes on the version
18
- that started it. It is opt-in because pinned environments (locks, CI,
19
- shared venvs) must never change underneath a task.
15
+ * The upgrade runs before the command, once per detected release, through the
16
+ same manager detection as ``mammoth upgrade``; the running command still
17
+ completes on the version that started it. ``MAMMOTH_AUTO_UPGRADE=0`` (or
18
+ ``false``/``no``/``off``) turns it off. Unless ``MAMMOTH_AUTO_UPGRADE`` is
19
+ set to an on value (``1``), it also stays off when stdout is not a terminal
20
+ or ``CI`` is set, because pinned environments (locks, CI, scripts) must
21
+ never change underneath a task.
20
22
 
21
23
  ``MAMMOTH_UPDATE_CACHE`` overrides the cache file path (tests and sandboxes).
22
24
  """
@@ -41,7 +43,7 @@ AUTO_UPGRADE_ENV = "MAMMOTH_AUTO_UPGRADE"
41
43
  CACHE_ENV = "MAMMOTH_UPDATE_CACHE"
42
44
 
43
45
  #: How long a cached PyPI answer is trusted.
44
- CACHE_TTL = _dt.timedelta(hours=24)
46
+ CACHE_TTL = _dt.timedelta(hours=1)
45
47
  #: The background refresh must not hold a finished command hostage.
46
48
  REFRESH_TIMEOUT_SECONDS = 3.0
47
49
  #: Commands that manage the install themselves; no hint, no auto-upgrade.
@@ -55,6 +57,7 @@ _NO_NOTICE = frozenset({"upgrade"})
55
57
  UPGRADE_COMMAND = "mammoth upgrade --yes"
56
58
 
57
59
  _TRUTHY = frozenset({"1", "true", "yes", "on"})
60
+ _FALSY = frozenset({"0", "false", "no", "off"})
58
61
 
59
62
 
60
63
  def _flag(name: str) -> bool:
@@ -66,8 +69,23 @@ def enabled() -> bool:
66
69
  return not _flag(DISABLE_ENV) and not embedded.active()
67
70
 
68
71
 
72
+ def _interactive_session() -> bool:
73
+ """A terminal on stdout and no ``CI`` variable: a person is running this."""
74
+ return sys.stdout.isatty() and not (os.environ.get("CI") or "").strip()
75
+
76
+
69
77
  def auto_upgrade_enabled() -> bool:
70
- return enabled() and _flag(AUTO_UPGRADE_ENV)
78
+ """On by default for interactive sessions; ``MAMMOTH_AUTO_UPGRADE`` overrides.
79
+
80
+ ``0``/``false``/``no``/``off`` turns it off; ``1``/``true``/``yes``/``on``
81
+ forces it on even without a terminal or inside CI.
82
+ """
83
+ if not enabled():
84
+ return False
85
+ setting = (os.environ.get(AUTO_UPGRADE_ENV) or "").strip().lower()
86
+ if setting in _FALSY:
87
+ return False
88
+ return setting in _TRUTHY or _interactive_session()
71
89
 
72
90
 
73
91
  def cache_path() -> Path:
@@ -153,10 +171,13 @@ def available_update(command_id: str | None = None) -> dict[str, Any] | None:
153
171
 
154
172
 
155
173
  def hint_line(update: dict[str, Any]) -> str:
156
- return (
174
+ line = (
157
175
  f"mammoth-cli {update['latest']} is available (you have {update['current']}); "
158
176
  f"run: {update['command']}"
159
177
  )
178
+ if auto_upgrade_enabled():
179
+ line += f" (auto-upgrade is on; turn it off with {AUTO_UPGRADE_ENV}=0)"
180
+ return line
160
181
 
161
182
 
162
183
  def _fetch_latest() -> str | None:
@@ -206,7 +227,7 @@ def refresh_in_background(command_id: str | None = None) -> None:
206
227
  """Refresh a stale cache in a detached process, so the command exits at once.
207
228
 
208
229
  :func:`refresh_if_stale` asks PyPI with a 3 s timeout; run inline it keeps
209
- the finished command alive for up to that long once a day. The cache is
230
+ the finished command alive for up to that long once an hour. The cache is
210
231
  stamped first so concurrent commands do not each spawn a check; the child
211
232
  (``python -m mammoth_cli.runtime.updates``) writes the answer.
212
233
  """
@@ -241,7 +262,7 @@ def emit_hint(update: dict[str, Any] | None, *, output: str) -> None:
241
262
 
242
263
 
243
264
  def auto_upgrade(command_id: str, run_log: Any = None) -> dict[str, Any] | None:
244
- """Upgrade in place when ``MAMMOTH_AUTO_UPGRADE`` is set and a release is cached.
265
+ """Upgrade in place when auto-upgrade is enabled and a release is cached.
245
266
 
246
267
  Returns a record of what happened (also written to ``run_log`` when
247
268
  given), or ``None`` when nothing was attempted. The current process keeps
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.2.70"
3
+ version = "2.2.72"
4
4
  description = "Command-line interface for the Mammoth Analytics platform"
5
5
  authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
6
6
  readme = "README.md"
7
7
  license = "LicenseRef-Proprietary"
8
8
  requires-python = ">=3.12,<3.15"
9
9
  dependencies = [
10
- "mammoth-io (>=0.8.32,<0.9)",
10
+ "mammoth-io (>=0.8.33,<0.9)",
11
11
  "typer (>=0.27,<0.28)",
12
12
  "rich (>=15,<16)",
13
13
  "platformdirs (>=4.10,<5)",
File without changes
File without changes