mammoth-cli 2.2.70__tar.gz → 2.2.71__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.71}/PKG-INFO +6 -5
  2. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/README.md +4 -3
  3. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/__init__.py +1 -1
  4. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/upgrade.py +25 -10
  5. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/context/oauth.py +51 -15
  6. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/updates.py +33 -12
  7. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/pyproject.toml +2 -2
  8. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/.gitignore +0 -0
  9. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/LICENSE +0 -0
  10. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/__main__.py +0 -0
  11. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/app.py +0 -0
  12. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  13. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  14. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  15. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  16. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  17. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  18. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  19. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  20. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  21. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  22. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  23. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  24. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  25. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  26. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  27. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  28. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  29. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  30. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  31. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  32. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  33. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  34. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  35. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  36. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
  37. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
  38. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  39. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  40. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  41. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  42. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  43. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  44. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  45. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  46. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
  47. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  48. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  49. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  50. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  51. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  52. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/resolve.md +0 -0
  53. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  54. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  55. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  56. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  57. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  58. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  59. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/token.md +0 -0
  60. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  61. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  62. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  63. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  64. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  65. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  66. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  67. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  68. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  69. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  70. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  71. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  72. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  73. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  74. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  75. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/build-an-agent.md +0 -0
  76. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  77. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  78. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  79. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  80. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  81. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/file-import.md +0 -0
  82. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  83. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  84. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  85. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  86. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  87. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  88. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  89. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  90. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  91. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  92. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  93. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/__init__.py +0 -0
  94. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/_lazy.py +0 -0
  95. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/activity.py +0 -0
  96. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/addon.py +0 -0
  97. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/agent.py +0 -0
  98. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/ai.py +0 -0
  99. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/annotation.py +0 -0
  100. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/auth.py +0 -0
  101. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/automation.py +0 -0
  102. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/batch.py +0 -0
  103. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/billing.py +0 -0
  104. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/browse.py +0 -0
  105. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/calc.py +0 -0
  106. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/capability.py +0 -0
  107. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/client_app.py +0 -0
  108. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/completion.py +0 -0
  109. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/config.py +0 -0
  110. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/connector.py +0 -0
  111. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/context.py +0 -0
  112. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/dashboard.py +0 -0
  113. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/data_app.py +0 -0
  114. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/dataset.py +0 -0
  115. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/doctor.py +0 -0
  116. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/external_key.py +0 -0
  117. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/file.py +0 -0
  118. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/folder.py +0 -0
  119. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/help_summaries.json +0 -0
  120. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/job.py +0 -0
  121. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/link.py +0 -0
  122. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/notification.py +0 -0
  123. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/parameter.py +0 -0
  124. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/project.py +0 -0
  125. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/registry.py +0 -0
  126. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/report.py +0 -0
  127. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/resolve.py +0 -0
  128. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/schedule.py +0 -0
  129. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/schema.py +0 -0
  130. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/skill.py +0 -0
  131. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/snippet.py +0 -0
  132. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/support.py +0 -0
  133. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/template.py +0 -0
  134. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/trash.py +0 -0
  135. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/user.py +0 -0
  136. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/view.py +0 -0
  137. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/view_ops.py +0 -0
  138. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/view_profile.py +0 -0
  139. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/webhook.py +0 -0
  140. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/workflow.py +0 -0
  141. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/commands/workspace.py +0 -0
  142. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/context/__init__.py +0 -0
  143. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/context/credentials.py +0 -0
  144. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/context/endpoint.py +0 -0
  145. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/context/keyring_backend.py +0 -0
  146. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/context/profiles.py +0 -0
  147. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/context/resolver.py +0 -0
  148. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/contracts/__init__.py +0 -0
  149. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/contracts/auth.py +0 -0
  150. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/embed.py +0 -0
  151. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/errors/__init__.py +0 -0
  152. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/errors/envelope.py +0 -0
  153. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/manifest/__init__.py +0 -0
  154. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/manifest/loader.py +0 -0
  155. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/messages/__init__.py +0 -0
  156. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/output/__init__.py +0 -0
  157. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/output/envelope.py +0 -0
  158. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/output/normalize.py +0 -0
  159. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/output/policy.py +0 -0
  160. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/output/progress.py +0 -0
  161. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/output/render.py +0 -0
  162. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/py.typed +0 -0
  163. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/__init__.py +0 -0
  164. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/confirm.py +0 -0
  165. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/dataset_health.py +0 -0
  166. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/dryrun.py +0 -0
  167. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  168. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/embedded.py +0 -0
  169. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/executor.py +0 -0
  170. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/input_loader.py +0 -0
  171. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/intent_only.py +0 -0
  172. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/invocation.py +0 -0
  173. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/locked_files.py +0 -0
  174. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/new_data.py +0 -0
  175. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/opens.py +0 -0
  176. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/options.py +0 -0
  177. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/parents.py +0 -0
  178. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/runlog.py +0 -0
  179. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/session.py +0 -0
  180. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/state.py +0 -0
  181. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/strict.py +0 -0
  182. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/validate.py +0 -0
  183. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/runtime/verify.py +0 -0
  184. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/__init__.py +0 -0
  185. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/append_blank_columns.py +0 -0
  186. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/argspec.py +0 -0
  187. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/board_values.py +0 -0
  188. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/coerce.py +0 -0
  189. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/command_contract.py +0 -0
  190. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/conditional_format.py +0 -0
  191. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/conditions.py +0 -0
  192. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/dashboard_filters.py +0 -0
  193. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/dashboard_pages.py +0 -0
  194. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/dashboard_review.py +0 -0
  195. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/data_profile.py +0 -0
  196. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/data_quality.py +0 -0
  197. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/dispatch.py +0 -0
  198. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/explore_cards.py +0 -0
  199. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/factory.py +0 -0
  200. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/folder_ids.py +0 -0
  201. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/input_fields.py +0 -0
  202. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/job_outcome.py +0 -0
  203. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/listing.py +0 -0
  204. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/local_time.py +0 -0
  205. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/mapping.py +0 -0
  206. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/openapi_types.py +0 -0
  207. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/positionals.py +0 -0
  208. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/protocol.py +0 -0
  209. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/read_queries.py +0 -0
  210. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/sdk_service.py +0 -0
  211. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/sql_check.py +0 -0
  212. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/stored_stats.py +0 -0
  213. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/testing.py +0 -0
  214. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/text_dates.py +0 -0
  215. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/type_system.py +0 -0
  216. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/view_analysis.py +0 -0
  217. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/view_variants.py +0 -0
  218. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/services/write_impact.py +0 -0
  219. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/skills/__init__.py +0 -0
  220. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/skills/installer.py +0 -0
  221. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/skills/steering.py +0 -0
  222. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/mammoth_cli/testing.py +0 -0
  223. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/activity.yaml +0 -0
  224. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/addon.yaml +0 -0
  225. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/agent.yaml +0 -0
  226. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/ai.yaml +0 -0
  227. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/annotation.yaml +0 -0
  228. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/auth.yaml +0 -0
  229. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/automation.yaml +0 -0
  230. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/batch.yaml +0 -0
  231. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/billing.yaml +0 -0
  232. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/browse.yaml +0 -0
  233. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/calc.yaml +0 -0
  234. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/capability.yaml +0 -0
  235. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/client-app.yaml +0 -0
  236. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/completion.yaml +0 -0
  237. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/config.yaml +0 -0
  238. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/connector.yaml +0 -0
  239. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/context.yaml +0 -0
  240. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/dashboard.yaml +0 -0
  241. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/data-app.yaml +0 -0
  242. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/dataset.yaml +0 -0
  243. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/doctor.yaml +0 -0
  244. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/external-key.yaml +0 -0
  245. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/file.yaml +0 -0
  246. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/folder.yaml +0 -0
  247. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/job.yaml +0 -0
  248. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/link.yaml +0 -0
  249. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/log.yaml +0 -0
  250. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/notification.yaml +0 -0
  251. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/parameter.yaml +0 -0
  252. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/project.yaml +0 -0
  253. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/report.yaml +0 -0
  254. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/resolve.yaml +0 -0
  255. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/schedule.yaml +0 -0
  256. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/schema.yaml +0 -0
  257. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/skill.yaml +0 -0
  258. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/snippet.yaml +0 -0
  259. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/support.yaml +0 -0
  260. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/template.yaml +0 -0
  261. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/token.yaml +0 -0
  262. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/trash.yaml +0 -0
  263. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/upgrade.yaml +0 -0
  264. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/user.yaml +0 -0
  265. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/version.yaml +0 -0
  266. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/view.yaml +0 -0
  267. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/webhook.yaml +0 -0
  268. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/workflow.yaml +0 -0
  269. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/commands/workspace.yaml +0 -0
  270. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/edits-target.source.yaml +0 -0
  271. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/openapi-operations.yaml +0 -0
  272. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/schema-v1.json +0 -0
  273. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/sdk-catalog.source.yaml +0 -0
  274. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/manifests/sdk-methods.yaml +0 -0
  275. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/spec/openapi/metadata.json +0 -0
  276. {mammoth_cli-2.2.70 → mammoth_cli-2.2.71}/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.71
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.71"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -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,13 +35,16 @@ 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
40
  from mammoth_cli.errors.envelope import EXIT_AUTH, EXIT_USAGE, CliError
40
41
 
41
42
  #: The first-party CLI's OAuth client id, one constant per environment (the
42
43
  #: server prefix). The server allow-lists these ids, so they are not
43
44
  #: configurable at run time. An environment absent here has no CLI client yet.
45
+ #: This table is the fallback for servers that do not publish
46
+ #: ``mammoth_cli_client_id`` in their OAuth metadata (see
47
+ #: :func:`published_client_id`); it is removed once every server publishes it.
44
48
  OAUTH_CLIENT_IDS: dict[str, str] = {
45
49
  "challenger": "oc_aea5c2ce829da3f8",
46
50
  "koyal": "oc_f2566336e235795c",
@@ -78,11 +82,43 @@ def login_expired_error() -> CliError:
78
82
  )
79
83
 
80
84
 
85
+ #: The metadata field carrying the CLI's client id on servers that publish it.
86
+ METADATA_CLIENT_ID_FIELD = "mammoth_cli_client_id"
87
+
88
+
89
+ @functools.cache
90
+ def published_client_id(prefix: str) -> str | None:
91
+ """The client id the server publishes in its OAuth metadata, or None.
92
+
93
+ One GET per environment per process. None when the field is absent, the
94
+ server cannot be reached, or it answers anything but metadata: the caller
95
+ then falls back to :data:`OAUTH_CLIENT_IDS`.
96
+ """
97
+ from mammoth import oauth as sdk_oauth
98
+
99
+ try:
100
+ status, body = sdk_oauth.metadata_request(resolve_base_url(prefix))
101
+ except CliError:
102
+ return None
103
+ except sdk_oauth.OAuthTransportError:
104
+ return None
105
+ if status != 200:
106
+ return None
107
+ value = body.get(METADATA_CLIENT_ID_FIELD) if isinstance(body, dict) else None
108
+ return value if isinstance(value, str) and value else None
109
+
110
+
111
+ def _resolve_client_id(server_prefix: str | None) -> str | None:
112
+ prefix = server_prefix if server_prefix is not None else DEFAULT_SERVER_PREFIX
113
+ return published_client_id(prefix) or OAUTH_CLIENT_IDS.get(prefix)
114
+
115
+
81
116
  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
117
+ """Whether the CLI has an OAuth client for this environment.
118
+
119
+ Makes a network call (cached per process): call it only on login paths.
120
+ """
121
+ return _resolve_client_id(server_prefix) is not None
86
122
 
87
123
 
88
124
  def client_id_for(server_prefix: str | None) -> str:
@@ -91,17 +127,17 @@ def client_id_for(server_prefix: str | None) -> str:
91
127
  Raises:
92
128
  CliError: ``oauth_unavailable`` when the environment has no CLI client.
93
129
  """
130
+ client_id = _resolve_client_id(server_prefix)
131
+ if client_id is not None:
132
+ return client_id
94
133
  prefix = server_prefix if server_prefix is not None else DEFAULT_SERVER_PREFIX
95
- 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
134
+ raise CliError(
135
+ code=CODE_OAUTH_UNAVAILABLE,
136
+ message=f"Browser sign-in is not available on '{prefix}' yet.",
137
+ exit_status=EXIT_USAGE,
138
+ hint="Pick option 3 (paste an API token) or run: mammoth auth login --method token",
139
+ recovery_commands=["mammoth auth login --method token"],
140
+ )
105
141
 
106
142
 
107
143
  # --- PKCE ---------------------------------------------------------------------
@@ -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.71"
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