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.
- {bt_cli-0.4.69 → bt_cli-0.4.70}/CLAUDE.md +1 -1
- {bt_cli-0.4.69 → bt_cli-0.4.70}/PKG-INFO +1 -1
- {bt_cli-0.4.69 → bt_cli-0.4.70}/pyproject.toml +1 -1
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/__init__.py +1 -1
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/session-analysis/SKILL.md +1 -1
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/sessions.py +21 -1
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/bt/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/entitle/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/epml/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/epmw/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/pra/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.claude/skills/pws/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.env.example +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.github/workflows/ci.yml +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.github/workflows/release.yml +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/.gitignore +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/README.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/assets/cli-help.png +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/assets/cli-output.png +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/bt-cli.spec +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/bt_entry.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/epml-clients-server-side-filters-plan.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/epml-implementation-plan.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/pf-implementation-plan.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/scripts/bt_entry.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/scripts/pf_onboard.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/scripts/sync-package-data.sh +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/cli.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/commands/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/commands/configure.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/commands/learn.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/commands/quick.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/auth.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/client.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/config.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/config_file.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/csv_utils.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/errors.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/output.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/prompts.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/core/rest_debug.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/CLAUDE.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/bt/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/entitle/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/epml/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/epmw/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/pf/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/pra/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/pws/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/data/skills/secrets/SKILL.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/client/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/client/base.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/accounts.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/applications.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/auth.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/bundles.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/integrations.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/permissions.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/policies.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/requests.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/resources.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/roles.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/users.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/commands/workflows.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/bundle.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/common.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/integration.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/permission.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/policy.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/resource.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/role.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/user.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/entitle/models/workflow.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/client/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/client/base.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/audit.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/auth.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/client_pkg.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/clients.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/external_apis.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/hosts.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/iolog.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/license.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/quick.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_cmdgrps.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_entitlement.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_hostgrps.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_policy.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_roles.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_tests.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_tmdategrps.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_tx.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/rbp_usergrps.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/settings.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/siems.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/commands/users.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epml/models/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/client/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/client/base.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/audits.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/auth.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/computers.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/events.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/groups.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/policies.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/quick.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/requests.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/roles.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/tasks.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/commands/users.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/epmw/models/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/client/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/client/base.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/auth.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/machines.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/tokens.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/user.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pf/commands/users.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/client/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/client/base.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/auth.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/group_policies.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/import_export.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/jump_clients.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/jump_groups.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/jump_items.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/jumpoints.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/policies.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/quick.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/teams.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/users.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/commands/vault.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/common.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/group_policy.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/jump_client.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/jump_group.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/jump_item.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/jumpoint.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/team.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/user.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pra/models/vault.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/client/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/client/base.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/client/beyondinsight.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/client/passwordsafe.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/accounts.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/assets.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/attributes.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/audit.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/auth.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/clouds.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/config.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/credentials.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/databases.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/directories.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/functional.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/import_export.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/platforms.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/quick.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/search.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/secrets.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/systems.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/users.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/commands/workgroups.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/config.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/account.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/asset.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/common.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/pws/models/system.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/client/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/client/base.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/_hints.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/auth.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/dynamic.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/folders.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/integrations.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/leases.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/commands/static.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/src/bt_cli/secrets/models/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/conftest.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_auth.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_config.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_config_file.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_errors.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_output.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/core/test_rest_debug.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/entitle/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/entitle/test_client.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/entitle/test_commands.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/entitle-smoke-test.sh +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epml/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epml/test_client.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epml/test_commands.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epmw/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epmw/test_client.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epmw/test_commands.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/epmw-quick-test-plan.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/fixtures/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/fixtures/responses.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/conftest.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/helpers.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_entitle_integration.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_epmw_integration.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_epmw_lifecycle.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_pra_integration.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_pra_lifecycle.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_pws_integration.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/integration/test_pws_lifecycle.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pf/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pf/test_client.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pf/test_commands.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra/test_client.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra/test_commands.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra/test_jump_item_fixes.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra-smoke-test.sh +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pra-test-plan.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws/test_client.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws/test_commands.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws/test_quick_sessions.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws-quick-test-plan.md +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/pws-smoke-test.sh +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/secrets/__init__.py +0 -0
- {bt_cli-0.4.69 → bt_cli-0.4.70}/tests/secrets/test_client.py +0 -0
- {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.
|
|
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
|
|
|
@@ -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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|