bt-cli 0.4.67__tar.gz → 0.4.68__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.67 → bt_cli-0.4.68}/CLAUDE.md +1 -1
- {bt_cli-0.4.67 → bt_cli-0.4.68}/PKG-INFO +1 -1
- {bt_cli-0.4.67 → bt_cli-0.4.68}/pyproject.toml +1 -1
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/__init__.py +1 -1
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/skills/pws/SKILL.md +26 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/sessions.py +48 -1
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.claude/skills/bt/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.claude/skills/entitle/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.claude/skills/epml/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.claude/skills/epmw/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.claude/skills/pra/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.claude/skills/pws/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.env.example +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.github/workflows/ci.yml +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.github/workflows/release.yml +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/.gitignore +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/README.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/assets/cli-help.png +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/assets/cli-output.png +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/bt-cli.spec +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/bt_entry.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/epml-clients-server-side-filters-plan.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/epml-implementation-plan.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/pf-implementation-plan.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/scripts/bt_entry.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/scripts/pf_onboard.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/scripts/sync-package-data.sh +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/cli.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/commands/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/commands/configure.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/commands/learn.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/commands/quick.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/auth.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/client.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/config.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/config_file.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/csv_utils.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/errors.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/output.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/prompts.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/core/rest_debug.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/CLAUDE.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/skills/bt/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/skills/entitle/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/skills/epml/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/skills/epmw/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/skills/pf/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/skills/pra/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/skills/secrets/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/data/skills/session-analysis/SKILL.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/client/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/client/base.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/accounts.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/applications.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/auth.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/bundles.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/integrations.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/permissions.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/policies.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/requests.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/resources.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/roles.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/users.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/commands/workflows.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/bundle.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/common.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/integration.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/permission.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/policy.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/resource.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/role.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/user.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/entitle/models/workflow.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/client/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/client/base.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/audit.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/auth.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/client_pkg.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/clients.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/external_apis.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/hosts.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/iolog.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/license.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/quick.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/rbp_cmdgrps.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/rbp_entitlement.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/rbp_hostgrps.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/rbp_policy.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/rbp_roles.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/rbp_tests.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/rbp_tmdategrps.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/rbp_tx.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/rbp_usergrps.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/settings.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/siems.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/commands/users.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epml/models/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/client/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/client/base.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/audits.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/auth.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/computers.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/events.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/groups.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/policies.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/quick.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/requests.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/roles.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/tasks.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/commands/users.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/epmw/models/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pf/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pf/client/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pf/client/base.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pf/commands/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pf/commands/auth.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pf/commands/machines.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pf/commands/tokens.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pf/commands/user.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pf/commands/users.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/client/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/client/base.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/auth.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/group_policies.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/import_export.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/jump_clients.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/jump_groups.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/jump_items.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/jumpoints.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/policies.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/quick.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/teams.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/users.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/commands/vault.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/common.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/group_policy.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/jump_client.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/jump_group.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/jump_item.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/jumpoint.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/team.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/user.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pra/models/vault.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/client/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/client/base.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/client/beyondinsight.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/client/passwordsafe.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/accounts.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/assets.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/attributes.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/audit.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/auth.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/clouds.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/config.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/credentials.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/databases.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/directories.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/functional.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/import_export.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/platforms.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/quick.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/search.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/secrets.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/systems.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/users.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/commands/workgroups.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/config.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/models/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/models/account.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/models/asset.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/models/common.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/pws/models/system.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/client/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/client/base.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/commands/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/commands/_hints.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/commands/auth.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/commands/dynamic.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/commands/folders.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/commands/integrations.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/commands/leases.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/commands/static.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/src/bt_cli/secrets/models/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/conftest.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/core/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/core/test_auth.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/core/test_config.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/core/test_config_file.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/core/test_errors.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/core/test_output.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/core/test_rest_debug.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/entitle/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/entitle/test_client.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/entitle/test_commands.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/entitle-smoke-test.sh +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/epml/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/epml/test_client.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/epml/test_commands.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/epmw/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/epmw/test_client.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/epmw/test_commands.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/epmw-quick-test-plan.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/fixtures/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/fixtures/responses.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/conftest.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/helpers.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/test_entitle_integration.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/test_epmw_integration.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/test_epmw_lifecycle.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/test_pra_integration.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/test_pra_lifecycle.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/test_pws_integration.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/integration/test_pws_lifecycle.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pf/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pf/test_client.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pf/test_commands.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pra/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pra/test_client.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pra/test_commands.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pra/test_jump_item_fixes.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pra-smoke-test.sh +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pra-test-plan.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pws/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pws/test_client.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pws/test_commands.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pws/test_quick_sessions.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pws-quick-test-plan.md +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/pws-smoke-test.sh +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/secrets/__init__.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/tests/secrets/test_client.py +0 -0
- {bt_cli-0.4.67 → bt_cli-0.4.68}/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.68**
|
|
4
4
|
|
|
5
5
|
## Setup
|
|
6
6
|
|
|
@@ -189,6 +189,11 @@ bt pws sessions list --active # only live sessions (started, not ended)
|
|
|
189
189
|
bt pws sessions list --all -o json # full history
|
|
190
190
|
bt pws sessions get <session_id>
|
|
191
191
|
|
|
192
|
+
# "The session from today" — date filters match on StartTime (client-side)
|
|
193
|
+
bt pws sessions list --today
|
|
194
|
+
bt pws sessions list --on 2026-07-02
|
|
195
|
+
bt pws sessions list --since 2026-06-01 --until 2026-06-30 # a range (e.g. "this week")
|
|
196
|
+
|
|
192
197
|
# Suspend = lock (user disconnected, session can be resumed)
|
|
193
198
|
bt pws sessions suspend <session_id>
|
|
194
199
|
|
|
@@ -241,6 +246,27 @@ prints the exact command + install instructions and leaves the frames. Works for
|
|
|
241
246
|
RDP (screen) and SSH (rendered terminal). Gotcha: the renderer needs ~0.5s
|
|
242
247
|
warm-up (first seek 404s), handled automatically.
|
|
243
248
|
|
|
249
|
+
### "What happened in this session?" — summarize efficiently
|
|
250
|
+
|
|
251
|
+
`replay` only *downloads* frames. To turn a session into a **timeline summary of
|
|
252
|
+
what the user did**, don't read every frame — use the analysis pipeline:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
bt pws sessions replay <session_id> # 1. download the frames
|
|
256
|
+
bt pws sessions analyze <session_id> # 2. pick keyframes + anchor keystrokes + estimate cost
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
`analyze` is deterministic prep (no LLM): it selects the handful of frames worth
|
|
260
|
+
reading — screen-change frames **plus** the frames that render what the user
|
|
261
|
+
typed (keystroke-anchored, tagged `after-typing` with the `typed` text) — pulls
|
|
262
|
+
the transcript, and prints a token/USD cost estimate. Then **invoke the
|
|
263
|
+
`/session-analysis` skill**, which tells you (the agent) to read only those
|
|
264
|
+
keyframes (after-typing first) and produce a timeline + auditor highlights (EPM
|
|
265
|
+
elevation prompts, privileged tools, service/account changes) + a secrets-exposure
|
|
266
|
+
note. For **SSH**, skip frames entirely — `analyze` points you at the transcript,
|
|
267
|
+
which is the full input+output and far cheaper. This is the intended path for
|
|
268
|
+
"show me / summarize the session from today".
|
|
269
|
+
|
|
244
270
|
**Gotchas:**
|
|
245
271
|
- `/Sessions` returns session **history**, not just active sessions, and **ignores `limit`/`offset`** (returns the full set every call - the client does a single GET, the CLI caps display client-side). Use `--active` for the live ones.
|
|
246
272
|
- `Status` codes confirmed live: **0 = Not started, 1 = Active, 2 = Completed, 5 = Locked, 7 = Terminated** (3/9 are other terminal states). `--active` filters on Status == 1.
|
|
@@ -5,7 +5,7 @@ import json
|
|
|
5
5
|
import shutil
|
|
6
6
|
import subprocess
|
|
7
7
|
import time
|
|
8
|
-
from datetime import datetime, timezone
|
|
8
|
+
from datetime import date, datetime, timezone
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
|
|
11
11
|
import httpx
|
|
@@ -35,6 +35,41 @@ SESSION_STATUS = {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
|
|
38
|
+
def _norm_date(value: str) -> str:
|
|
39
|
+
"""Validate a YYYY-MM-DD (or ISO) date arg and return its date portion."""
|
|
40
|
+
try:
|
|
41
|
+
datetime.strptime(value.strip()[:10], "%Y-%m-%d")
|
|
42
|
+
except (ValueError, AttributeError):
|
|
43
|
+
print_error(f"Invalid date '{value}'. Use YYYY-MM-DD.")
|
|
44
|
+
raise typer.Exit(2)
|
|
45
|
+
return value.strip()[:10]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _resolve_date_window(today: bool, on: str, since: str, until: str) -> tuple:
|
|
49
|
+
"""Collapse the date flags into an inclusive (lo, hi) date window (YYYY-MM-DD
|
|
50
|
+
strings, either may be None). --today/--on pin both ends to one day."""
|
|
51
|
+
if today:
|
|
52
|
+
d = date.today().isoformat()
|
|
53
|
+
return d, d
|
|
54
|
+
if on:
|
|
55
|
+
d = _norm_date(on)
|
|
56
|
+
return d, d
|
|
57
|
+
return (_norm_date(since) if since else None, _norm_date(until) if until else None)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _started_in_window(s: dict, lo: str, hi: str) -> bool:
|
|
61
|
+
"""True if the session's StartTime date falls within [lo, hi] (ISO date
|
|
62
|
+
strings sort lexicographically, so string compare on the date is correct)."""
|
|
63
|
+
d = (s.get("StartTime") or "")[:10]
|
|
64
|
+
if not d:
|
|
65
|
+
return False
|
|
66
|
+
if lo and d < lo:
|
|
67
|
+
return False
|
|
68
|
+
if hi and d > hi:
|
|
69
|
+
return False
|
|
70
|
+
return True
|
|
71
|
+
|
|
72
|
+
|
|
38
73
|
def is_active(s: dict) -> bool:
|
|
39
74
|
"""A session is live (suspend/terminate-able) when Status == 1.
|
|
40
75
|
|
|
@@ -99,6 +134,10 @@ def list_sessions(
|
|
|
99
134
|
system: int = typer.Option(None, "--system", help="Filter by managed system ID"),
|
|
100
135
|
active: bool = typer.Option(False, "--active", help="Show only active (started, not ended) sessions"),
|
|
101
136
|
status: str = typer.Option(None, "--status", "-s", help="Filter by raw numeric status code"),
|
|
137
|
+
today: bool = typer.Option(False, "--today", help="Only sessions that started today"),
|
|
138
|
+
on: str = typer.Option(None, "--on", help="Only sessions that started on this date (YYYY-MM-DD)"),
|
|
139
|
+
since: str = typer.Option(None, "--since", help="Only sessions on/after this date (YYYY-MM-DD)"),
|
|
140
|
+
until: str = typer.Option(None, "--until", help="Only sessions on/before this date (YYYY-MM-DD)"),
|
|
102
141
|
limit: int = typer.Option(25, "--limit", "-l", help="Max rows to show (most recent first)"),
|
|
103
142
|
fetch_all: bool = typer.Option(False, "--all", help="Show all sessions (the endpoint returns full history)"),
|
|
104
143
|
output: str = typer.Option("table", "--output", "-o", help="Output format: table or json"),
|
|
@@ -110,11 +149,17 @@ def list_sessions(
|
|
|
110
149
|
suspend/terminate), or --all to see everything. Output is newest-first and
|
|
111
150
|
capped at --limit by default.
|
|
112
151
|
|
|
152
|
+
Date filters (--today/--on/--since/--until) match on StartTime's date and are
|
|
153
|
+
applied client-side (the endpoint returns the full history every call).
|
|
154
|
+
|
|
113
155
|
Examples:
|
|
114
156
|
bt pws sessions list --active
|
|
157
|
+
bt pws sessions list --today
|
|
158
|
+
bt pws sessions list --since 2026-06-01 --until 2026-06-30
|
|
115
159
|
bt pws sessions list --system 13
|
|
116
160
|
bt pws sessions list --all -o json
|
|
117
161
|
"""
|
|
162
|
+
lo, hi = _resolve_date_window(today, on, since, until)
|
|
118
163
|
try:
|
|
119
164
|
with get_client() as client:
|
|
120
165
|
client.authenticate()
|
|
@@ -122,6 +167,8 @@ def list_sessions(
|
|
|
122
167
|
|
|
123
168
|
if active:
|
|
124
169
|
sessions = [s for s in sessions if is_active(s)]
|
|
170
|
+
if lo or hi:
|
|
171
|
+
sessions = [s for s in sessions if _started_in_window(s, lo, hi)]
|
|
125
172
|
|
|
126
173
|
total = len(sessions)
|
|
127
174
|
shown = sessions if fetch_all else sessions[:limit]
|
|
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
|