bt-cli 0.4.69__tar.gz → 0.4.70__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 (248) hide show
  1. {bt_cli-0.4.69 → bt_cli-0.4.70}/CLAUDE.md +1 -1
  2. {bt_cli-0.4.69 → bt_cli-0.4.70}/PKG-INFO +1 -1
  3. {bt_cli-0.4.69 → bt_cli-0.4.70}/pyproject.toml +1 -1
  4. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/__init__.py +1 -1
  5. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/session-analysis/SKILL.md +1 -1
  6. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/sessions.py +21 -1
  7. {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/bt/SKILL.md +0 -0
  8. {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/entitle/SKILL.md +0 -0
  9. {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/epml/SKILL.md +0 -0
  10. {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/epmw/SKILL.md +0 -0
  11. {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/pra/SKILL.md +0 -0
  12. {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/pws/SKILL.md +0 -0
  13. {bt_cli-0.4.69 → bt_cli-0.4.70}/.env.example +0 -0
  14. {bt_cli-0.4.69 → bt_cli-0.4.70}/.github/workflows/ci.yml +0 -0
  15. {bt_cli-0.4.69 → bt_cli-0.4.70}/.github/workflows/release.yml +0 -0
  16. {bt_cli-0.4.69 → bt_cli-0.4.70}/.gitignore +0 -0
  17. {bt_cli-0.4.69 → bt_cli-0.4.70}/README.md +0 -0
  18. {bt_cli-0.4.69 → bt_cli-0.4.70}/assets/cli-help.png +0 -0
  19. {bt_cli-0.4.69 → bt_cli-0.4.70}/assets/cli-output.png +0 -0
  20. {bt_cli-0.4.69 → bt_cli-0.4.70}/bt-cli.spec +0 -0
  21. {bt_cli-0.4.69 → bt_cli-0.4.70}/bt_entry.py +0 -0
  22. {bt_cli-0.4.69 → bt_cli-0.4.70}/epml-clients-server-side-filters-plan.md +0 -0
  23. {bt_cli-0.4.69 → bt_cli-0.4.70}/epml-implementation-plan.md +0 -0
  24. {bt_cli-0.4.69 → bt_cli-0.4.70}/pf-implementation-plan.md +0 -0
  25. {bt_cli-0.4.69 → bt_cli-0.4.70}/scripts/bt_entry.py +0 -0
  26. {bt_cli-0.4.69 → bt_cli-0.4.70}/scripts/pf_onboard.py +0 -0
  27. {bt_cli-0.4.69 → bt_cli-0.4.70}/scripts/sync-package-data.sh +0 -0
  28. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/cli.py +0 -0
  29. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/commands/__init__.py +0 -0
  30. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/commands/configure.py +0 -0
  31. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/commands/learn.py +0 -0
  32. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/commands/quick.py +0 -0
  33. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/__init__.py +0 -0
  34. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/auth.py +0 -0
  35. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/client.py +0 -0
  36. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/config.py +0 -0
  37. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/config_file.py +0 -0
  38. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/csv_utils.py +0 -0
  39. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/errors.py +0 -0
  40. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/output.py +0 -0
  41. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/prompts.py +0 -0
  42. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/rest_debug.py +0 -0
  43. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/CLAUDE.md +0 -0
  44. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/__init__.py +0 -0
  45. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/bt/SKILL.md +0 -0
  46. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/entitle/SKILL.md +0 -0
  47. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/epml/SKILL.md +0 -0
  48. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/epmw/SKILL.md +0 -0
  49. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/pf/SKILL.md +0 -0
  50. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/pra/SKILL.md +0 -0
  51. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/pws/SKILL.md +0 -0
  52. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/secrets/SKILL.md +0 -0
  53. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/__init__.py +0 -0
  54. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/client/__init__.py +0 -0
  55. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/client/base.py +0 -0
  56. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/__init__.py +0 -0
  57. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/accounts.py +0 -0
  58. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/applications.py +0 -0
  59. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/auth.py +0 -0
  60. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/bundles.py +0 -0
  61. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/integrations.py +0 -0
  62. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/permissions.py +0 -0
  63. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/policies.py +0 -0
  64. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/requests.py +0 -0
  65. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/resources.py +0 -0
  66. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/roles.py +0 -0
  67. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/users.py +0 -0
  68. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/workflows.py +0 -0
  69. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/__init__.py +0 -0
  70. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/bundle.py +0 -0
  71. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/common.py +0 -0
  72. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/integration.py +0 -0
  73. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/permission.py +0 -0
  74. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/policy.py +0 -0
  75. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/resource.py +0 -0
  76. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/role.py +0 -0
  77. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/user.py +0 -0
  78. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/workflow.py +0 -0
  79. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/__init__.py +0 -0
  80. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/client/__init__.py +0 -0
  81. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/client/base.py +0 -0
  82. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/__init__.py +0 -0
  83. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/audit.py +0 -0
  84. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/auth.py +0 -0
  85. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/client_pkg.py +0 -0
  86. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/clients.py +0 -0
  87. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/external_apis.py +0 -0
  88. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/hosts.py +0 -0
  89. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/iolog.py +0 -0
  90. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/license.py +0 -0
  91. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/quick.py +0 -0
  92. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_cmdgrps.py +0 -0
  93. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_entitlement.py +0 -0
  94. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_hostgrps.py +0 -0
  95. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_policy.py +0 -0
  96. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_roles.py +0 -0
  97. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_tests.py +0 -0
  98. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_tmdategrps.py +0 -0
  99. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_tx.py +0 -0
  100. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_usergrps.py +0 -0
  101. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/settings.py +0 -0
  102. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/siems.py +0 -0
  103. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/users.py +0 -0
  104. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/models/__init__.py +0 -0
  105. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/__init__.py +0 -0
  106. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/client/__init__.py +0 -0
  107. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/client/base.py +0 -0
  108. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/__init__.py +0 -0
  109. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/audits.py +0 -0
  110. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/auth.py +0 -0
  111. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/computers.py +0 -0
  112. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/events.py +0 -0
  113. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/groups.py +0 -0
  114. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/policies.py +0 -0
  115. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/quick.py +0 -0
  116. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/requests.py +0 -0
  117. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/roles.py +0 -0
  118. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/tasks.py +0 -0
  119. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/users.py +0 -0
  120. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/models/__init__.py +0 -0
  121. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/__init__.py +0 -0
  122. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/client/__init__.py +0 -0
  123. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/client/base.py +0 -0
  124. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/__init__.py +0 -0
  125. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/auth.py +0 -0
  126. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/machines.py +0 -0
  127. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/tokens.py +0 -0
  128. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/user.py +0 -0
  129. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/users.py +0 -0
  130. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/__init__.py +0 -0
  131. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/client/__init__.py +0 -0
  132. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/client/base.py +0 -0
  133. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/__init__.py +0 -0
  134. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/auth.py +0 -0
  135. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/group_policies.py +0 -0
  136. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/import_export.py +0 -0
  137. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/jump_clients.py +0 -0
  138. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/jump_groups.py +0 -0
  139. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/jump_items.py +0 -0
  140. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/jumpoints.py +0 -0
  141. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/policies.py +0 -0
  142. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/quick.py +0 -0
  143. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/teams.py +0 -0
  144. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/users.py +0 -0
  145. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/vault.py +0 -0
  146. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/__init__.py +0 -0
  147. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/common.py +0 -0
  148. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/group_policy.py +0 -0
  149. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/jump_client.py +0 -0
  150. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/jump_group.py +0 -0
  151. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/jump_item.py +0 -0
  152. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/jumpoint.py +0 -0
  153. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/team.py +0 -0
  154. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/user.py +0 -0
  155. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/vault.py +0 -0
  156. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/__init__.py +0 -0
  157. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/client/__init__.py +0 -0
  158. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/client/base.py +0 -0
  159. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/client/beyondinsight.py +0 -0
  160. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/client/passwordsafe.py +0 -0
  161. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/__init__.py +0 -0
  162. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/accounts.py +0 -0
  163. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/assets.py +0 -0
  164. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/attributes.py +0 -0
  165. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/audit.py +0 -0
  166. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/auth.py +0 -0
  167. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/clouds.py +0 -0
  168. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/config.py +0 -0
  169. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/credentials.py +0 -0
  170. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/databases.py +0 -0
  171. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/directories.py +0 -0
  172. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/functional.py +0 -0
  173. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/import_export.py +0 -0
  174. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/platforms.py +0 -0
  175. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/quick.py +0 -0
  176. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/search.py +0 -0
  177. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/secrets.py +0 -0
  178. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/systems.py +0 -0
  179. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/users.py +0 -0
  180. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/workgroups.py +0 -0
  181. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/config.py +0 -0
  182. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/__init__.py +0 -0
  183. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/account.py +0 -0
  184. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/asset.py +0 -0
  185. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/common.py +0 -0
  186. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/system.py +0 -0
  187. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/__init__.py +0 -0
  188. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/client/__init__.py +0 -0
  189. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/client/base.py +0 -0
  190. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/__init__.py +0 -0
  191. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/_hints.py +0 -0
  192. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/auth.py +0 -0
  193. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/dynamic.py +0 -0
  194. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/folders.py +0 -0
  195. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/integrations.py +0 -0
  196. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/leases.py +0 -0
  197. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/static.py +0 -0
  198. {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/models/__init__.py +0 -0
  199. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/__init__.py +0 -0
  200. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/conftest.py +0 -0
  201. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/__init__.py +0 -0
  202. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_auth.py +0 -0
  203. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_config.py +0 -0
  204. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_config_file.py +0 -0
  205. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_errors.py +0 -0
  206. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_output.py +0 -0
  207. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_rest_debug.py +0 -0
  208. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/entitle/__init__.py +0 -0
  209. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/entitle/test_client.py +0 -0
  210. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/entitle/test_commands.py +0 -0
  211. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/entitle-smoke-test.sh +0 -0
  212. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epml/__init__.py +0 -0
  213. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epml/test_client.py +0 -0
  214. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epml/test_commands.py +0 -0
  215. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epmw/__init__.py +0 -0
  216. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epmw/test_client.py +0 -0
  217. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epmw/test_commands.py +0 -0
  218. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epmw-quick-test-plan.md +0 -0
  219. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/fixtures/__init__.py +0 -0
  220. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/fixtures/responses.py +0 -0
  221. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/__init__.py +0 -0
  222. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/conftest.py +0 -0
  223. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/helpers.py +0 -0
  224. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_entitle_integration.py +0 -0
  225. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_epmw_integration.py +0 -0
  226. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_epmw_lifecycle.py +0 -0
  227. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_pra_integration.py +0 -0
  228. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_pra_lifecycle.py +0 -0
  229. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_pws_integration.py +0 -0
  230. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_pws_lifecycle.py +0 -0
  231. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pf/__init__.py +0 -0
  232. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pf/test_client.py +0 -0
  233. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pf/test_commands.py +0 -0
  234. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra/__init__.py +0 -0
  235. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra/test_client.py +0 -0
  236. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra/test_commands.py +0 -0
  237. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra/test_jump_item_fixes.py +0 -0
  238. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra-smoke-test.sh +0 -0
  239. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra-test-plan.md +0 -0
  240. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws/__init__.py +0 -0
  241. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws/test_client.py +0 -0
  242. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws/test_commands.py +0 -0
  243. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws/test_quick_sessions.py +0 -0
  244. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws-quick-test-plan.md +0 -0
  245. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws-smoke-test.sh +0 -0
  246. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/secrets/__init__.py +0 -0
  247. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/secrets/test_client.py +0 -0
  248. {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/secrets/test_commands.py +0 -0
@@ -1,6 +1,6 @@
1
1
  # BT-CLI
2
2
 
3
- BeyondTrust Platform CLI for Password Safe, Entitle, PRA, EPM Windows, EPM Linux, and the BeyondTrust Secrets API. **Version: 0.4.69**
3
+ BeyondTrust Platform CLI for Password Safe, Entitle, PRA, EPM Windows, EPM Linux, and the BeyondTrust Secrets API. **Version: 0.4.70**
4
4
 
5
5
  ## Setup
6
6
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bt-cli
3
- Version: 0.4.69
3
+ Version: 0.4.70
4
4
  Summary: BeyondTrust Platform CLI (unofficial) - Password Safe, Entitle, PRA, EPM
5
5
  Author-email: Dave Grendysz <dgrendysz@beyondtrust.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bt-cli"
7
- version = "0.4.69"
7
+ version = "0.4.70"
8
8
  description = "BeyondTrust Platform CLI (unofficial) - Password Safe, Entitle, PRA, EPM"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,3 +1,3 @@
1
1
  """BeyondTrust Unified Admin CLI."""
2
2
 
3
- __version__ = "0.4.69"
3
+ __version__ = "0.4.70"
@@ -24,7 +24,7 @@ bt pws sessions analyze <id> --model opus # or --model sonnet for a cheaper es
24
24
 
25
25
  `analyze` writes `analysis.json` into the folder and prints:
26
26
  - **Who / what / when:** `user` (the initiator's real name + username, resolved from `UserID` via `/Users/{id}`), `user_email`, `account`@`system`, `start_time`. **Always name the human in the summary** — "UserID 219" is not an answer; "Amy Miller (amiller)" is.
27
- - **RDP:** the **keyframes** to read. Each is tagged with a **reason** — `screen-change` (the picture moved) and/or `after-typing` (it renders the result of something the user typed). `after-typing` frames also carry the exact `typed` text.
27
+ - **RDP:** the **keyframes** to read, plus a **cull ratio** (`keyframes_kept_pct`, e.g. "37/59 · 63% kept — busy session"). High kept-% = busy session, reading all keyframes is mandatory; low kept-% = a handful covers it. Either way, read them all — the ratio sets your expectation, it does not license sampling. Each keyframe is tagged with a **reason** — `screen-change` (the picture moved) and/or `after-typing` (it renders the result of something the user typed). `after-typing` frames also carry the exact `typed` text.
28
28
  - **SSH:** a pointer to the transcript (analyze it instead of frames).
29
29
  - **`typed_bursts`** — typed input grouped into phrases with recording-relative offsets (`@14.9s "powershell"`), already anchored to the keyframes above.
30
30
  - A **cost estimate**: `focused` (keyframes only) vs `all frames`.
@@ -762,6 +762,23 @@ def _build_keyframes(
762
762
  return keyframes
763
763
 
764
764
 
765
+ def _cull_label(n_keyframes: int, n_frames: int) -> tuple:
766
+ """Classify how aggressively the keyframe selection culled the recording, so
767
+ the reader knows up front whether reading every keyframe is a cent or a busy
768
+ session. Returns (kept_pct, label). Reinforces the rule: read ALL keyframes
769
+ the CLI lists — the lever for cost is --threshold, not sub-sampling."""
770
+ if n_frames <= 0:
771
+ return 0, "no frames"
772
+ pct = round(n_keyframes / n_frames * 100)
773
+ if pct >= 50:
774
+ note = "busy session, budget to read all keyframes"
775
+ elif pct >= 20:
776
+ note = "moderate, read all keyframes"
777
+ else:
778
+ note = "a handful covers it"
779
+ return pct, note
780
+
781
+
765
782
  def _user_label(user: dict) -> str:
766
783
  """Human label for a /Users record: 'First Last (username)' or best available."""
767
784
  if not user:
@@ -883,6 +900,7 @@ def session_analyze(
883
900
  "frame_dims": [w, h],
884
901
  "frame_count": len(frames),
885
902
  "keyframe_count": len(keyframes),
903
+ "keyframes_kept_pct": _cull_label(len(keyframes), len(frames))[0] if protocol.upper() != "SSH" else None,
886
904
  "keyframes": keyframes,
887
905
  "keystroke_count": len(decoded_ks),
888
906
  "keystrokes": decoded_ks,
@@ -909,7 +927,9 @@ def session_analyze(
909
927
  else:
910
928
  anchored = sum(1 for k in keyframes if "after-typing" in k.get("reasons", []))
911
929
  hint = f" ([cyan]{anchored}[/cyan] anchored to typed input)" if anchored else ""
912
- console.print(f" [green]{len(keyframes)} keyframes[/green] (of {len(frames)}) — read these, not every frame{hint}:")
930
+ kept_pct, cull_note = _cull_label(len(keyframes), len(frames))
931
+ console.print(f" [green]{len(keyframes)} keyframes[/green] (of {len(frames)} · {kept_pct}% kept — {cull_note}){hint}")
932
+ console.print(" [dim]Read every one — the CLI already culled; don't sub-sample.[/dim]")
913
933
  for k in keyframes:
914
934
  typed_here = " [yellow]⌨ " + rich_escape(" ".join(k["typed"])) + "[/yellow]" if k.get("typed") else ""
915
935
  reasons = ",".join(k.get("reasons", [])) or "screen-change"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes