mammoth-cli 2.0.3__tar.gz → 2.0.4__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 (208) hide show
  1. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/PKG-INFO +1 -1
  2. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/context/credentials.py +106 -4
  4. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/pyproject.toml +1 -1
  5. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/.gitignore +0 -0
  6. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/LICENSE +0 -0
  7. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/README.md +0 -0
  8. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/__main__.py +0 -0
  9. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/app.py +0 -0
  10. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  11. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  12. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  13. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  14. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  15. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  16. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  17. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  18. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  19. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  20. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  21. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  22. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  23. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  24. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  25. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  26. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  27. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  28. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  29. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  30. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  31. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  32. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  33. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  34. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  35. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  36. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  37. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  38. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  39. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  40. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  41. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  42. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  43. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  44. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  45. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  46. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  47. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  48. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  49. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  50. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  51. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  52. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  53. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  54. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  55. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  56. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  57. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  58. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  59. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  60. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  61. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  62. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  63. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  64. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  65. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  66. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  67. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  68. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  69. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  70. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  71. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  72. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/__init__.py +0 -0
  73. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/activity.py +0 -0
  74. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/addon.py +0 -0
  75. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/agent.py +0 -0
  76. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/ai.py +0 -0
  77. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/annotation.py +0 -0
  78. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/auth.py +0 -0
  79. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/automation.py +0 -0
  80. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/batch.py +0 -0
  81. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/billing.py +0 -0
  82. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/browse.py +0 -0
  83. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/capability.py +0 -0
  84. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/client_app.py +0 -0
  85. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/completion.py +0 -0
  86. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/config.py +0 -0
  87. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/connector.py +0 -0
  88. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/context.py +0 -0
  89. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/dashboard.py +0 -0
  90. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/data_app.py +0 -0
  91. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/dataset.py +0 -0
  92. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/doctor.py +0 -0
  93. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/external_key.py +0 -0
  94. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/file.py +0 -0
  95. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/folder.py +0 -0
  96. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/job.py +0 -0
  97. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/notification.py +0 -0
  98. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/parameter.py +0 -0
  99. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/project.py +0 -0
  100. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/registry.py +0 -0
  101. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/report.py +0 -0
  102. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/schedule.py +0 -0
  103. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/schema.py +0 -0
  104. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/skill.py +0 -0
  105. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/snippet.py +0 -0
  106. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/support.py +0 -0
  107. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/template.py +0 -0
  108. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/trash.py +0 -0
  109. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/upgrade.py +0 -0
  110. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/user.py +0 -0
  111. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/view.py +0 -0
  112. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/view_ops.py +0 -0
  113. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/webhook.py +0 -0
  114. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/workflow.py +0 -0
  115. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/commands/workspace.py +0 -0
  116. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/context/__init__.py +0 -0
  117. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/context/endpoint.py +0 -0
  118. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/context/profiles.py +0 -0
  119. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/context/resolver.py +0 -0
  120. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/contracts/__init__.py +0 -0
  121. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/contracts/auth.py +0 -0
  122. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/errors/__init__.py +0 -0
  123. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/errors/envelope.py +0 -0
  124. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/manifest/__init__.py +0 -0
  125. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/manifest/loader.py +0 -0
  126. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/messages/__init__.py +0 -0
  127. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/output/__init__.py +0 -0
  128. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/output/envelope.py +0 -0
  129. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/output/normalize.py +0 -0
  130. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/output/policy.py +0 -0
  131. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/output/progress.py +0 -0
  132. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/output/render.py +0 -0
  133. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/py.typed +0 -0
  134. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/runtime/__init__.py +0 -0
  135. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/runtime/confirm.py +0 -0
  136. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/runtime/executor.py +0 -0
  137. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/runtime/input_loader.py +0 -0
  138. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/runtime/invocation.py +0 -0
  139. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/runtime/options.py +0 -0
  140. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/runtime/session.py +0 -0
  141. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/runtime/strict.py +0 -0
  142. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/runtime/validate.py +0 -0
  143. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/__init__.py +0 -0
  144. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/argspec.py +0 -0
  145. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/coerce.py +0 -0
  146. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/command_contract.py +0 -0
  147. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/conditions.py +0 -0
  148. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/dispatch.py +0 -0
  149. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/factory.py +0 -0
  150. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/input_fields.py +0 -0
  151. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/mapping.py +0 -0
  152. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/openapi_types.py +0 -0
  153. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/positionals.py +0 -0
  154. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/protocol.py +0 -0
  155. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/sdk_service.py +0 -0
  156. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/testing.py +0 -0
  157. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/services/type_system.py +0 -0
  158. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/skills/__init__.py +0 -0
  159. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/skills/installer.py +0 -0
  160. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/mammoth_cli/testing.py +0 -0
  161. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/activity.yaml +0 -0
  162. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/addon.yaml +0 -0
  163. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/agent.yaml +0 -0
  164. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/ai.yaml +0 -0
  165. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/annotation.yaml +0 -0
  166. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/auth.yaml +0 -0
  167. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/automation.yaml +0 -0
  168. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/batch.yaml +0 -0
  169. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/billing.yaml +0 -0
  170. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/browse.yaml +0 -0
  171. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/capability.yaml +0 -0
  172. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/client-app.yaml +0 -0
  173. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/completion.yaml +0 -0
  174. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/config.yaml +0 -0
  175. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/connector.yaml +0 -0
  176. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/context.yaml +0 -0
  177. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/dashboard.yaml +0 -0
  178. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/data-app.yaml +0 -0
  179. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/dataset.yaml +0 -0
  180. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/doctor.yaml +0 -0
  181. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/external-key.yaml +0 -0
  182. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/file.yaml +0 -0
  183. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/folder.yaml +0 -0
  184. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/job.yaml +0 -0
  185. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/notification.yaml +0 -0
  186. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/parameter.yaml +0 -0
  187. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/project.yaml +0 -0
  188. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/report.yaml +0 -0
  189. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/schedule.yaml +0 -0
  190. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/schema.yaml +0 -0
  191. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/skill.yaml +0 -0
  192. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/snippet.yaml +0 -0
  193. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/support.yaml +0 -0
  194. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/template.yaml +0 -0
  195. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/trash.yaml +0 -0
  196. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/upgrade.yaml +0 -0
  197. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/user.yaml +0 -0
  198. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/version.yaml +0 -0
  199. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/view.yaml +0 -0
  200. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/webhook.yaml +0 -0
  201. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/workflow.yaml +0 -0
  202. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/commands/workspace.yaml +0 -0
  203. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/openapi-operations.yaml +0 -0
  204. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/schema-v1.json +0 -0
  205. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/sdk-catalog.source.yaml +0 -0
  206. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/manifests/sdk-methods.yaml +0 -0
  207. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/openapi/metadata.json +0 -0
  208. {mammoth_cli-2.0.3 → mammoth_cli-2.0.4}/spec/openapi/openapi.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mammoth-cli
3
- Version: 2.0.3
3
+ Version: 2.0.4
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
@@ -6,7 +6,7 @@ not implement a second HTTP client and does not call private SDK members.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "2.0.3"
9
+ __version__ = "2.0.4"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -81,17 +81,119 @@ def _delete_keyring(profile: str) -> bool:
81
81
  return False
82
82
 
83
83
 
84
+ def _insecure_file_error(reason: str) -> CliError:
85
+ """Return a secret-safe error for an unsafe POSIX credential store."""
86
+ return CliError(
87
+ code="insecure_credential_file",
88
+ message="The file-backed credential store is not safe to use.",
89
+ exit_status=EXIT_USAGE,
90
+ hint=(
91
+ f"Secure {credentials_path().parent} and its credential file: "
92
+ "the directory and file must be owned by this user and private "
93
+ "(mode 0700/0600)."
94
+ ),
95
+ details={"reason": reason},
96
+ )
97
+
98
+
99
+ def _check_private_directory(directory: Path) -> None:
100
+ """Reject an unsafe config directory without changing its permissions."""
101
+ try:
102
+ directory_stat = os.lstat(directory)
103
+ except FileNotFoundError:
104
+ return
105
+ except OSError:
106
+ raise _insecure_file_error("directory_unreadable") from None
107
+ if not stat.S_ISDIR(directory_stat.st_mode):
108
+ raise _insecure_file_error("directory_not_directory")
109
+ if directory_stat.st_uid != os.geteuid():
110
+ raise _insecure_file_error("directory_wrong_owner")
111
+ if directory_stat.st_mode & 0o077:
112
+ raise _insecure_file_error("directory_permissions")
113
+
114
+
115
+ def _read_file_bytes(path: Path) -> bytes | None:
116
+ """Read the credential file with POSIX ownership and race checks."""
117
+ directory_fd = -1
118
+ fd = -1
119
+ try:
120
+ directory_flags = (
121
+ os.O_RDONLY
122
+ | getattr(os, "O_CLOEXEC", 0)
123
+ | getattr(os, "O_NOFOLLOW", 0)
124
+ | getattr(os, "O_DIRECTORY", 0)
125
+ )
126
+ directory_fd = os.open(path.parent, directory_flags)
127
+ except FileNotFoundError:
128
+ return None
129
+ except OSError:
130
+ raise _insecure_file_error("file_unreadable") from None
131
+ try:
132
+ directory_stat = os.fstat(directory_fd)
133
+ if not stat.S_ISDIR(directory_stat.st_mode):
134
+ raise _insecure_file_error("directory_not_directory")
135
+ if directory_stat.st_uid != os.geteuid():
136
+ raise _insecure_file_error("directory_wrong_owner")
137
+ if directory_stat.st_mode & 0o077:
138
+ raise _insecure_file_error("directory_permissions")
139
+ flags = os.O_RDONLY | getattr(os, "O_CLOEXEC", 0)
140
+ flags |= getattr(os, "O_NOFOLLOW", 0)
141
+ try:
142
+ fd = os.open(path.name, flags, dir_fd=directory_fd)
143
+ except FileNotFoundError:
144
+ return None
145
+ except OSError:
146
+ raise _insecure_file_error("file_unreadable") from None
147
+ file_stat = os.fstat(fd)
148
+ if not stat.S_ISREG(file_stat.st_mode):
149
+ raise _insecure_file_error("file_not_regular")
150
+ if file_stat.st_uid != os.geteuid():
151
+ raise _insecure_file_error("file_wrong_owner")
152
+ if file_stat.st_mode & 0o077:
153
+ raise _insecure_file_error("file_permissions")
154
+ with os.fdopen(fd, "rb") as handle:
155
+ fd = -1
156
+ raw = handle.read()
157
+ # The file descriptor cannot be redirected, but make the corresponding
158
+ # path-entry identity explicit before the caller parses its contents.
159
+ # This also detects a replacement between open and validation.
160
+ try:
161
+ path_stat = os.stat(path.name, dir_fd=directory_fd, follow_symlinks=False)
162
+ except OSError:
163
+ raise _insecure_file_error("file_identity_changed") from None
164
+ if (path_stat.st_dev, path_stat.st_ino) != (file_stat.st_dev, file_stat.st_ino):
165
+ raise _insecure_file_error("file_identity_changed")
166
+ if not stat.S_ISREG(path_stat.st_mode):
167
+ raise _insecure_file_error("file_not_regular")
168
+ if path_stat.st_uid != os.geteuid():
169
+ raise _insecure_file_error("file_wrong_owner")
170
+ if path_stat.st_mode & 0o077:
171
+ raise _insecure_file_error("file_permissions")
172
+ return raw
173
+ finally:
174
+ if fd != -1:
175
+ os.close(fd)
176
+ if directory_fd != -1:
177
+ os.close(directory_fd)
178
+
179
+
84
180
  def _load_file_document() -> TOMLDocument:
85
181
  path = credentials_path()
86
- if not path.exists():
182
+ if os.name != "posix":
183
+ if not path.exists():
184
+ return tomlkit.document()
185
+ return tomlkit.parse(path.read_text(encoding="utf-8"))
186
+ raw = _read_file_bytes(path)
187
+ if raw is None:
87
188
  return tomlkit.document()
88
- return tomlkit.parse(path.read_text(encoding="utf-8"))
189
+ return tomlkit.parse(raw.decode("utf-8"))
89
190
 
90
191
 
91
192
  def _write_file_document(document: TOMLDocument) -> None:
92
193
  directory = config_dir()
93
- directory.mkdir(parents=True, exist_ok=True)
194
+ directory.mkdir(mode=stat.S_IRWXU, parents=True, exist_ok=True)
94
195
  if os.name == "posix":
196
+ _check_private_directory(directory)
95
197
  os.chmod(directory, stat.S_IRWXU)
96
198
  fd, tmp_name = tempfile.mkstemp(dir=str(directory), prefix=".credentials-", suffix=".tmp")
97
199
  try:
@@ -218,6 +320,6 @@ def delete_credentials(profile: str) -> bool:
218
320
  Returns:
219
321
  True if a credential was removed from either backend.
220
322
  """
221
- removed_keyring = _delete_keyring(profile) if _keyring_available() else False
222
323
  removed_file = _delete_file(profile)
324
+ removed_keyring = _delete_keyring(profile) if _keyring_available() else False
223
325
  return removed_keyring or removed_file
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.0.3"
3
+ version = "2.0.4"
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"
File without changes
File without changes
File without changes