wxcli 1.4.1__tar.gz → 1.4.2__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.
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/agents/wxc-calling-builder.md +0 -6
- {wxcli-1.4.1 → wxcli-1.4.2}/PKG-INFO +1 -1
- {wxcli-1.4.1/src/wxcli/_playbook → wxcli-1.4.2}/docs/reference/contact-center-routing.md +5 -2
- {wxcli-1.4.1/src/wxcli/_playbook → wxcli-1.4.2}/docs/reference/meetings-core.md +1 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/agents/wxc-calling-builder.md +0 -6
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/agents/wxc-calling-builder.toml +0 -6
- {wxcli-1.4.1 → wxcli-1.4.2/src/wxcli/_playbook}/docs/reference/contact-center-routing.md +5 -2
- {wxcli-1.4.1 → wxcli-1.4.2/src/wxcli/_playbook}/docs/reference/meetings-core.md +1 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_version.py +3 -3
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/auth.py +8 -2
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/admin_recordings.py +12 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_queue.py +26 -2
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_flow.py +2 -2
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/converged_recordings.py +12 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/dect_devices.py +13 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/device_settings.py +10 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_transcripts.py +12 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/numbers.py +10 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/preflight/runner.py +1 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/PKG-INFO +1 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/scm_version.json +2 -2
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/CLAUDE.md +36 -10
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/command_renderer.py +54 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/field_overrides.yaml +17 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/generate_commands.py +46 -3
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/openapi_parser.py +27 -3
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/spec_sync.py +3 -1
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/agents/migration-advisor.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/projects/-Users-ahobgood-Documents-webexCalling/memory/feedback_help_gate_for_skills.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/rules/cleanup.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/rules/cucm-migration.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/rules/org-health.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/settings.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/audit-compliance/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/call-control/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/configure-features/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/configure-routing/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/contact-center/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/cucm-migrate/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/customer-assist/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/device-platform/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-call-settings/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-devices/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-identity/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-licensing/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-meetings/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/messaging-bots/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/messaging-spaces/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/org-health/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/provision-calling/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/call-flow-trace.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/call-history.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/features.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/numbers.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/people-and-settings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/routing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/reporting/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/reporting/references/cdr-recipes.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/reporting-cc/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/reporting-meetings/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/teardown/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/video-mesh/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/wxc-calling-debug/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.github/workflows/ci.yml +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.github/workflows/release.yml +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/.gitignore +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/LICENSE +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/README.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/TODO.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/00-index.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/01-structural-map.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/02-decisions.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/03-behavior.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/04-operations-and-evolution.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/05-purpose.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-css-routing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-device-migration.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-feature-mapping.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-identity-numbering.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-location-design.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-trunk-pstn.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-user-settings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-webex-limits.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/TODO.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-apps-data.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-audit-security.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-hybrid.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-identity-scim.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-licensing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-org-management.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-partner.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxc-sdk-patterns.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-advanced.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-core.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-devices-workspaces.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-features.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-locations.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-person.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-routing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/authentication.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/call-control.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/call-features-additional.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/call-features-major.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/call-routing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/contact-center-analytics.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/contact-center-core.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/contact-center-journey.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/devices-core.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/devices-dect.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/devices-platform.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/devices-workspaces.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/emergency-services.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/location-calling-core.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/location-calling-media.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/location-recording-advanced.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/meetings-content.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/meetings-infrastructure.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/meetings-settings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/messaging-bots.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/messaging-spaces.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/migration-spec-template.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/person-call-settings-behavior.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/person-call-settings-handling.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/person-call-settings-media.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/person-call-settings-permissions.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/provisioning.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/reporting-analytics.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/self-service-call-settings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/virtual-lines.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/webhooks-events.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/wxcadm-xsi-realtime.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/runbooks/cucm-migration/decision-guide.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/runbooks/cucm-migration/operator-runbook.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/runbooks/cucm-migration/self-review-findings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/runbooks/cucm-migration/tuning-reference.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/templates/deployment-plan.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/docs/templates/execution-report.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/pyproject.toml +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/setup.cfg +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/overlays/webex-cloud-calling.overlay.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-admin.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-broadworks.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-cloud-calling.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-contact-center.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-device.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-meetings.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-messaging.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-ucm.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-wholesale.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/agents/migration-advisor.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/rules/cleanup.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/rules/cucm-migration.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/rules/org-health.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/settings.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/audit-compliance/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/call-control/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/configure-features/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/configure-routing/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/contact-center/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/cucm-migrate/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/customer-assist/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/device-platform/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-call-settings/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-devices/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-identity/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-licensing/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-meetings/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/messaging-bots/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/messaging-spaces/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/org-health/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/provision-calling/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/call-flow-trace.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/call-history.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/features.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/numbers.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/people-and-settings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/routing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/reporting/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/reporting/references/cdr-recipes.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/reporting-cc/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/reporting-meetings/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/teardown/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/video-mesh/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/wxc-calling-debug/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/agents/migration-advisor.toml +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/config.toml +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/rules/cleanup.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/rules/cucm-migration.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/rules/org-health.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/audit-compliance/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/call-control/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/configure-features/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/configure-routing/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/contact-center/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/cucm-migrate/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/customer-assist/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/device-platform/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-call-settings/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-devices/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-identity/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-licensing/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-meetings/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/messaging-bots/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/messaging-spaces/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/org-health/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/provision-calling/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/call-flow-trace.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/call-history.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/features.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/numbers.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/people-and-settings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/routing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/reporting/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/reporting/references/cdr-recipes.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/reporting-cc/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/reporting-meetings/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/teardown/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/video-mesh/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/wxc-calling-debug/SKILL.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/AGENTS.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-css-routing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-device-migration.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-feature-mapping.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-identity-numbering.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-location-design.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-trunk-pstn.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-user-settings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-webex-limits.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-apps-data.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-audit-security.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-hybrid.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-identity-scim.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-licensing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-org-management.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-partner.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxc-sdk-patterns.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-advanced.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-core.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-devices-workspaces.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-features.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-locations.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-person.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-routing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/authentication.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/call-control.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/call-features-additional.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/call-features-major.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/call-routing.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/contact-center-analytics.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/contact-center-core.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/contact-center-journey.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/devices-core.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/devices-dect.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/devices-platform.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/devices-workspaces.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/emergency-services.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/location-calling-core.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/location-calling-media.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/location-recording-advanced.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/meetings-content.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/meetings-infrastructure.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/meetings-settings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/messaging-bots.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/messaging-spaces.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/person-call-settings-behavior.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/person-call-settings-handling.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/person-call-settings-media.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/person-call-settings-permissions.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/provisioning.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/reporting-analytics.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/self-service-call-settings.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/virtual-lines.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/webhooks-events.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/wxcadm-xsi-realtime.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/runbooks/cucm-migration/decision-guide.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/runbooks/cucm-migration/operator-runbook.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/runbooks/cucm-migration/tuning-reference.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/_registry.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/activation_email.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/analytics.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/announcement_playlists.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/announcements.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/archive_users.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/attachment_actions.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/audit_events.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/authorizations.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/auto_attendant.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/broadworks_billing_reports.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/broadworks_enterprises.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/broadworks_subscribers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/broadworks_workspaces.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_controls.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_park.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_pickup.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_recording.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_routing.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_settings_for_me_phase_5.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/caller_reputation.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/calling_service.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_address_book.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_agent_greetings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_agent_summaries.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_agent_wellbeing.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_agents.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_ai_assistant.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_ai_feature.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_audio_files.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_auto_csat.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_aux_code.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_business_hour.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_call_monitoring.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_callbacks.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_campaign.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_captures.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_contact_list.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_contact_number.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_data_sources.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_desktop_layout.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_desktop_profile.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_dial_number.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_dial_plan.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_dnc.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_entry_point.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_ewt.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_global_vars.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_holiday_list.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_journey.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_legacy_flows.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_multimedia_profile.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_notification.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_outdial_ani.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_overrides.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_queue.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_queue_stats.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_realtime.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_resource_collection.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_search.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_site.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_skill.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_skill_profile.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_subscriptions.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_summaries.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_tasks.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_team.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_user_profiles.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_users.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_work_types.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cdr.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/classifications.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cleanup.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/client_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/conference.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/configure.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/converged_recordings_export.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cq_playlists.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cucm.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cucm_config.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/customer_assist.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/data_sources.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/device_configurations.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/device_dynamic_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/devices.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/domains.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/ecm.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/emergency_services.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/events.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/external_voicemail.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/groups.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/guest_management.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hds.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hot_desk.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hot_desking_members.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hot_desking_portal.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hunt_group.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hybrid_clusters.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hybrid_connectors.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/identity_org.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/init_playbook.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/licenses.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/live_monitoring.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/location_call_handling.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/location_schedules.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/location_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/location_voicemail.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/locations.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_captions.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_chats.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_invitees.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_messages.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_participants.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_polls.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_preferences.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_qa.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_qualities.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_reports.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_session_types.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_site.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_slido.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_summaries.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_tracking_codes.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meetings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/memberships.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/messages.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/mode_management.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/my_call_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/operating_modes.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/org_contacts.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/org_health_cli.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/org_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/organizations.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/paging_group.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/partner_admins.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/partner_reports.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/partner_tags.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/people.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/person_call_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/pstn.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/recording_report.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/report_templates.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/reports.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/resource_group_memberships.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/resource_groups.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/roles.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/room_tabs.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/rooms.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/scim_bulk.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/scim_groups.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/scim_schemas.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/scim_users.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/security_audit.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/service_apps.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/single_number_reach.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/team_memberships.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/teams.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/ucm_profile.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/update.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/user_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/video_mesh.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/virtual_extensions.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/virtual_line_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/webhooks.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/wholesale_billing_reports.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/wholesale_provisioning.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspace_locations.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspace_metrics.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspace_personalization.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspace_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspaces.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/xapi.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/config.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/errors.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/main.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/advisor.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/advisory_patterns.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/recommendation_rules.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/connection.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/discovery.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/announcements.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/base.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/device_profiles.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/devices.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/e911.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/features.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/helpers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/informational.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/locations.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/moh.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/remote_destinations.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/routing.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/shared_lines.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/templates.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/tier4.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/users.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/voicemail.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/workspaces.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/unity_connection.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/batch.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/dependency.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/engine.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/handlers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/planner.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/runtime.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/csv_export.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/deployment_plan.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/json_export.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/models.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/phone_models.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/preflight/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/preflight/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/preflight/checks.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/rate_limiter.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/appendix.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/assembler.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/charts.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/executive.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/explainer.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/helpers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/ingest.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/notice_templates.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/score.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/styles.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/user_diff.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/user_notice.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/state.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/store.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analysis_pipeline.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/css_permission.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/css_routing.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/device_compatibility.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/dn_ambiguity.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/duplicate_user.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/extension_conflict.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/feature_approximation.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/layout_overflow.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/location_ambiguity.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/missing_data.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/selective_call_handling.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/shared_line.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/voicemail_compatibility.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/workspace_license.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/cross_reference.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/cucm_pattern.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/decisions.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/e164.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/engine.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/announcement_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/base.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/button_template_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/call_forwarding_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/call_settings_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/css_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/dect_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/device_layout_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/device_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/device_profile_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/device_settings_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/e911_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/ecbn_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/executive_assistant_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/feature_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/line_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/location_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/moh_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/monitoring_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/receptionist_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/routing_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/snr_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/softkey_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/user_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/voicemail_group_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/voicemail_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/workspace_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/normalizers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/pattern_converter.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/pipeline.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/rules.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/CLAUDE.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/analyze.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/checks.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/collector.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/models.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/report.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/output.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/update_check.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/SOURCES.txt +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/dependency_links.txt +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/entry_points.txt +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/requires.txt +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/scm_file_list.json +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/top_level.txt +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisor.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisory_executive_assistant.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisory_intercept.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisory_patterns.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisory_selective.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_foundation.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_new_patterns.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_receptionist_advisory.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_recommendation_rules.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_recommendation_rules_tier2p2.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_recommendation_selective.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_tier4_patterns.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/fixtures/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_connection.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_cpc_detail_fetch.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_device_settings_tags.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_discovery.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_executive_assistant_extractor.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_extractors.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_informational_extractor.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_intercept_extractor.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_template_extractor.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_tier4_extractor.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_unity_shared_mailboxes.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/conftest.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_advisory_to_execution_bridge.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_batch.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bridge_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_batch.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_config.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_constants.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_e2e.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_fallback.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_handlers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_planner.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_polling.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_serialization.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_cascade_and_retry.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_dect_handlers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_dect_planner.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_dependency.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_device_settings_handlers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_device_settings_planner.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_engine.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_engine_409_recovery.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_executive_assistant_handlers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_handlers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_handlers_forwarding.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_handlers_workspace_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_hoteling_handlers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_phase12a_planner_fixes.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_planner.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_planner_forwarding.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_planner_settings_ops.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_planner_silent_skip_visibility.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_receptionist_handler.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_runtime.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave1.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave2a.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave2b.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave2c.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave3a.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave3b.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_voicemail_group_handler.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_voicemail_group_planner.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/export/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/export/test_csv_activation_codes.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/export/test_deployment_plan.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/preflight/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/preflight/test_checks.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/preflight/test_runner.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/conftest.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_appendix.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_appendix_selective.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_appendix_tier2p2.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_appendix_tier3.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_assembler.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_cli_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_dect_appendix.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_device_settings_score.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_e2e.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_executive.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_executive_selective.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_explainer.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_from_file.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_helpers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_score.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_tier4_appendix.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_user_diff.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_user_notice.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_cucm_cli.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_decision_cli.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_dect_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_device_settings_lossy_type.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_models.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_models_tier2p2.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_models_voicemail_group.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_pipeline_e2e.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_rate_limiter.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_state.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_store.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/conftest.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_advisor_routing_coverage.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_advisory_pattern_coverage.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_config_key_coverage.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_decision_type_coverage.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_default_auto_rules_coverage.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_recommendation_output_coverage.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_runbook_cites.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_runbook_cli_commands.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_runbook_links.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_runbook_parsability.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_score_factor_display_names.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/analyzers/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/analyzers/test_each_analyzer.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/analyzers/test_layout_overflow.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/conftest.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_announcement_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_button_template_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_call_forwarding_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_call_settings_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_call_settings_mapper_intercept.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_css_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_dect_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_layout_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_layout_mapper_convertible.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_profile_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_settings_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_e911_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_executive_assistant_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_feature_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_feature_mapper_forwarding.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_feature_mapper_voicemail_gap.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_line_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_location_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_moh_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_monitoring_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_phase12a_feature_fixes.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_receptionist_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_routing_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_snr_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_softkey_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_user_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_voicemail_enrichment.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_voicemail_group_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_voicemail_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_workspace_mapper.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_workspace_mapper_call_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_analysis_pipeline.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_classify_decisions.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cpc_cross_ref.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cross_decision_enrichment.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cross_ref_phone_mirror.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cross_ref_tier2p2.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cross_reference.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cucm_pattern.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_decision_merge.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_dect_classification.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_default_auto_rules_field_alignment.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_e164.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_engine.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_executive_assistant_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_intercept_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalize_phone_device_settings.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers_executive.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers_intercept.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers_tier2p2.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers_voicemail_group.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_pattern_converter.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_phase12a_analyzer_routing_fixes.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_pipeline.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_pipeline_common_area.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_rules.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_selective_call_handling_analyzer.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_selective_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_shared_line_status.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_voicemail_group_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_voicemail_group_pipeline.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_workspace_call_settings_integration.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/conftest.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_analyze.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_checks.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_cli.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_collector.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_models.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_report.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/__init__.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/create_stress_test_db.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/drift_check.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/drift_check_allowlist.txt +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/expand_cucm_data.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/postman_parser.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/postman_spec_diff.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/spec_overlay.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/update-specs.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/webhook_receiver.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/tools/wheel_playbook_smoke.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/wxcli-dist/assemble.py +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/wxcli-dist/codex/agents-md-sections.md +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/wxcli-dist/codex/config.toml +0 -0
- {wxcli-1.4.1 → wxcli-1.4.2}/wxcli-dist/settings.bundled.json +0 -0
|
@@ -692,12 +692,6 @@ These are non-negotiable. Violating any of these causes failures, data loss, or
|
|
|
692
692
|
### Verify Auth Before Executing
|
|
693
693
|
ALWAYS validate the access token before running any commands. A stale token causes cryptic 401 errors mid-execution. Run `wxcli whoami` as a smoke test before starting.
|
|
694
694
|
|
|
695
|
-
### Present Plan Before Executing
|
|
696
|
-
ALWAYS show the complete deployment plan and get explicit user approval before making any API calls. Never execute without sign-off. The user must see every API call that will be made, with actual parameter values.
|
|
697
|
-
|
|
698
|
-
### Never Execute Without Approval
|
|
699
|
-
If the user says "just do it" without seeing the plan, show the plan first anyway. This is not optional. The one exception is single read-only operations (GET requests) used for discovery during the interview phase.
|
|
700
|
-
|
|
701
695
|
### Handle Rate Limiting
|
|
702
696
|
Webex APIs enforce rate limits. wxcli does NOT auto-retry 429s in normal CLI mode — it raises an error. For shell loops, add `sleep 1` between commands to avoid hitting limits. For bulk async operations, use the semaphore + 429 retry pattern (see Bulk Operations section).
|
|
703
697
|
|
|
@@ -375,8 +375,11 @@ channel. Useful for IVR flows that announce hold times to callers. 1 command.
|
|
|
375
375
|
|
|
376
376
|
- `--queue-id` -- Queue ID to check (required)
|
|
377
377
|
- `--lookback-minutes` -- Sampling window, 5-240 (required)
|
|
378
|
-
- `--max-cv` -- Maximum coefficient of
|
|
379
|
-
|
|
378
|
+
- `--max-cv` -- Maximum coefficient of variance within a subset of samples (wait times for tasks
|
|
379
|
+
connected to an agent in a one-minute interval), used to determine whether the average of those
|
|
380
|
+
values is treated as a valid sample for EWT computation. 1-100, defaults to 40%
|
|
381
|
+
- `--min-valid-samples` -- Minimum percentage of valid samples, with respect to the total number of
|
|
382
|
+
samples, within the specified lookback window. 1-100, defaults to 40%
|
|
380
383
|
|
|
381
384
|
### CLI Examples
|
|
382
385
|
|
|
@@ -459,6 +459,7 @@ Registration forms and registrant management for webinar-type meetings. These en
|
|
|
459
459
|
| `--require-company-name` | Require company name |
|
|
460
460
|
| `--require-job-title` | Require job title |
|
|
461
461
|
| `--require-work-phone` | Require work phone number |
|
|
462
|
+
| `--require-fax` | Require fax number |
|
|
462
463
|
| `--require-address1` | Require address line 1 |
|
|
463
464
|
| `--require-address2` | Require address line 2 |
|
|
464
465
|
| `--require-city` | Require city |
|
|
@@ -692,12 +692,6 @@ These are non-negotiable. Violating any of these causes failures, data loss, or
|
|
|
692
692
|
### Verify Auth Before Executing
|
|
693
693
|
ALWAYS validate the access token before running any commands. A stale token causes cryptic 401 errors mid-execution. Run `wxcli whoami` as a smoke test before starting.
|
|
694
694
|
|
|
695
|
-
### Present Plan Before Executing
|
|
696
|
-
ALWAYS show the complete deployment plan and get explicit user approval before making any API calls. Never execute without sign-off. The user must see every API call that will be made, with actual parameter values.
|
|
697
|
-
|
|
698
|
-
### Never Execute Without Approval
|
|
699
|
-
If the user says "just do it" without seeing the plan, show the plan first anyway. This is not optional. The one exception is single read-only operations (GET requests) used for discovery during the interview phase.
|
|
700
|
-
|
|
701
695
|
### Handle Rate Limiting
|
|
702
696
|
Webex APIs enforce rate limits. wxcli does NOT auto-retry 429s in normal CLI mode — it raises an error. For shell loops, add `sleep 1` between commands to avoid hitting limits. For bulk async operations, use the semaphore + 429 retry pattern (see Bulk Operations section).
|
|
703
697
|
|
|
@@ -687,12 +687,6 @@ These are non-negotiable. Violating any of these causes failures, data loss, or
|
|
|
687
687
|
### Verify Auth Before Executing
|
|
688
688
|
ALWAYS validate the access token before running any commands. A stale token causes cryptic 401 errors mid-execution. Run `wxcli whoami` as a smoke test before starting.
|
|
689
689
|
|
|
690
|
-
### Present Plan Before Executing
|
|
691
|
-
ALWAYS show the complete deployment plan and get explicit user approval before making any API calls. Never execute without sign-off. The user must see every API call that will be made, with actual parameter values.
|
|
692
|
-
|
|
693
|
-
### Never Execute Without Approval
|
|
694
|
-
If the user says "just do it" without seeing the plan, show the plan first anyway. This is not optional. The one exception is single read-only operations (GET requests) used for discovery during the interview phase.
|
|
695
|
-
|
|
696
690
|
### Handle Rate Limiting
|
|
697
691
|
Webex APIs enforce rate limits. wxcli does NOT auto-retry 429s in normal CLI mode — it raises an error. For shell loops, add `sleep 1` between commands to avoid hitting limits. For bulk async operations, use the semaphore + 429 retry pattern (see Bulk Operations section).
|
|
698
692
|
|
|
@@ -375,8 +375,11 @@ channel. Useful for IVR flows that announce hold times to callers. 1 command.
|
|
|
375
375
|
|
|
376
376
|
- `--queue-id` -- Queue ID to check (required)
|
|
377
377
|
- `--lookback-minutes` -- Sampling window, 5-240 (required)
|
|
378
|
-
- `--max-cv` -- Maximum coefficient of
|
|
379
|
-
|
|
378
|
+
- `--max-cv` -- Maximum coefficient of variance within a subset of samples (wait times for tasks
|
|
379
|
+
connected to an agent in a one-minute interval), used to determine whether the average of those
|
|
380
|
+
values is treated as a valid sample for EWT computation. 1-100, defaults to 40%
|
|
381
|
+
- `--min-valid-samples` -- Minimum percentage of valid samples, with respect to the total number of
|
|
382
|
+
samples, within the specified lookback window. 1-100, defaults to 40%
|
|
380
383
|
|
|
381
384
|
### CLI Examples
|
|
382
385
|
|
|
@@ -459,6 +459,7 @@ Registration forms and registrant management for webinar-type meetings. These en
|
|
|
459
459
|
| `--require-company-name` | Require company name |
|
|
460
460
|
| `--require-job-title` | Require job title |
|
|
461
461
|
| `--require-work-phone` | Require work phone number |
|
|
462
|
+
| `--require-fax` | Require fax number |
|
|
462
463
|
| `--require-address1` | Require address line 1 |
|
|
463
464
|
| `--require-address2` | Require address line 2 |
|
|
464
465
|
| `--require-city` | Require city |
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.4.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 4,
|
|
21
|
+
__version__ = version = '1.4.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 4, 2)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g9318ddb89'
|
|
@@ -79,8 +79,14 @@ class WebexSession:
|
|
|
79
79
|
return self._json_or_raise(self._request("PATCH", url, json=json, params=params,
|
|
80
80
|
content_type=content_type))
|
|
81
81
|
|
|
82
|
-
def rest_delete(self, url: str, params=None) -> dict:
|
|
83
|
-
|
|
82
|
+
def rest_delete(self, url: str, json=None, params=None) -> dict:
|
|
83
|
+
# DELETE carries a body on 10 Webex operations: the body is what SCOPES
|
|
84
|
+
# the delete (`supervisorIds`, `phoneNumbers`, `backgroundImages`...).
|
|
85
|
+
# Without it the API rejects the call outright — verified live against
|
|
86
|
+
# /telephony/config/supervisors: 400, errorCode 25024, "Required request
|
|
87
|
+
# body is missing". It does NOT delete everything; those endpoints gate
|
|
88
|
+
# delete-all behind an explicit `deleteAll: true`.
|
|
89
|
+
return self._json_or_raise(self._request("DELETE", url, json=json, params=params))
|
|
84
90
|
|
|
85
91
|
def follow_pagination(self, url: str, params=None, item_key: str = "items"):
|
|
86
92
|
while url:
|
|
@@ -301,6 +301,9 @@ def show(
|
|
|
301
301
|
def delete_recordings(
|
|
302
302
|
recording_id: str = typer.Argument(help="recordingId"),
|
|
303
303
|
host_email: str = typer.Option(None, "--host-email", help="Email address for the meeting host. Only used if the user or"),
|
|
304
|
+
reason: str = typer.Option(None, "--reason", help="Reason for deleting a recording. Only required when a Compli"),
|
|
305
|
+
comment: str = typer.Option(None, "--comment", help="Compliance Officer's explanation for deleting a recording. T"),
|
|
306
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
304
307
|
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
305
308
|
debug: bool = typer.Option(False, "--debug"),
|
|
306
309
|
):
|
|
@@ -312,8 +315,16 @@ def delete_recordings(
|
|
|
312
315
|
params = {}
|
|
313
316
|
if host_email is not None:
|
|
314
317
|
params["hostEmail"] = host_email
|
|
318
|
+
if json_body:
|
|
319
|
+
body = json.loads(json_body)
|
|
320
|
+
else:
|
|
321
|
+
body = {}
|
|
322
|
+
if reason is not None:
|
|
323
|
+
body["reason"] = reason
|
|
324
|
+
if comment is not None:
|
|
325
|
+
body["comment"] = comment
|
|
315
326
|
try:
|
|
316
|
-
api.session.rest_delete(url, params=params)
|
|
327
|
+
api.session.rest_delete(url, json=body or None, params=params)
|
|
317
328
|
except WebexError as e:
|
|
318
329
|
handle_rest_error(e)
|
|
319
330
|
typer.echo(f"Deleted: {recording_id}")
|
|
@@ -1159,6 +1159,9 @@ def create_supervisors(
|
|
|
1159
1159
|
|
|
1160
1160
|
@app.command("delete-supervisors-config")
|
|
1161
1161
|
def delete_supervisors_config(
|
|
1162
|
+
has_cx_essentials: bool = typer.Option(None, "--has-cx-essentials/--no-has-cx-essentials", help="Delete the Customer Assist supervisors, when `true`. Otherwi"),
|
|
1163
|
+
delete_all: bool = typer.Option(None, "--delete-all/--no-delete-all", help="If present the `supervisorIds` array is ignored, and all sup"),
|
|
1164
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
1162
1165
|
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
1163
1166
|
debug: bool = typer.Option(False, "--debug"),
|
|
1164
1167
|
):
|
|
@@ -1171,8 +1174,20 @@ def delete_supervisors_config(
|
|
|
1171
1174
|
org_id = get_org_id()
|
|
1172
1175
|
if org_id is not None:
|
|
1173
1176
|
params["orgId"] = org_id
|
|
1177
|
+
if json_body:
|
|
1178
|
+
body = json.loads(json_body)
|
|
1179
|
+
else:
|
|
1180
|
+
body = {}
|
|
1181
|
+
if has_cx_essentials is not None:
|
|
1182
|
+
body["hasCxEssentials"] = has_cx_essentials
|
|
1183
|
+
if delete_all is not None:
|
|
1184
|
+
body["deleteAll"] = delete_all
|
|
1185
|
+
missing = [f for f in ['supervisorIds'] if f not in body]
|
|
1186
|
+
if missing:
|
|
1187
|
+
typer.echo(f"Error: required body field(s) missing: {', '.join(missing)}. Pass them via --json-body — this delete needs to know what to delete.", err=True)
|
|
1188
|
+
raise typer.Exit(1)
|
|
1174
1189
|
try:
|
|
1175
|
-
api.session.rest_delete(url, params=params)
|
|
1190
|
+
api.session.rest_delete(url, json=body or None, params=params)
|
|
1176
1191
|
except WebexError as e:
|
|
1177
1192
|
handle_rest_error(e)
|
|
1178
1193
|
typer.echo("Deleted.")
|
|
@@ -1600,6 +1615,7 @@ def create_dnis(
|
|
|
1600
1615
|
def delete_dnis_queues(
|
|
1601
1616
|
location_id: str = typer.Argument(help="locationId"),
|
|
1602
1617
|
queue_id: str = typer.Argument(help="queueId"),
|
|
1618
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
1603
1619
|
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
1604
1620
|
debug: bool = typer.Option(False, "--debug"),
|
|
1605
1621
|
):
|
|
@@ -1612,8 +1628,16 @@ def delete_dnis_queues(
|
|
|
1612
1628
|
org_id = get_org_id()
|
|
1613
1629
|
if org_id is not None:
|
|
1614
1630
|
params["orgId"] = org_id
|
|
1631
|
+
if json_body:
|
|
1632
|
+
body = json.loads(json_body)
|
|
1633
|
+
else:
|
|
1634
|
+
body = {}
|
|
1635
|
+
missing = [f for f in ['items'] if f not in body]
|
|
1636
|
+
if missing:
|
|
1637
|
+
typer.echo(f"Error: required body field(s) missing: {', '.join(missing)}. Pass them via --json-body — this delete needs to know what to delete.", err=True)
|
|
1638
|
+
raise typer.Exit(1)
|
|
1615
1639
|
try:
|
|
1616
|
-
api.session.rest_delete(url, params=params)
|
|
1640
|
+
api.session.rest_delete(url, json=body or None, params=params)
|
|
1617
1641
|
except WebexError as e:
|
|
1618
1642
|
handle_rest_error(e)
|
|
1619
1643
|
typer.echo(f"Deleted: {queue_id}")
|
|
@@ -18,7 +18,7 @@ def cmd_list(
|
|
|
18
18
|
partial_name_search: str = typer.Option(None, "--partial-name-search", help="Performs a partial string match on the name of the flow. If"),
|
|
19
19
|
search_by: str = typer.Option(None, "--search-by", help="Filter expression in the format `<field>|<value>`. Supports"),
|
|
20
20
|
size: str = typer.Option(None, "--size", help="Defines the number of items to be displayed on a page. If th"),
|
|
21
|
-
include_pagination: str = typer.Option(None, "--include-pagination", help="If set to
|
|
21
|
+
include_pagination: str = typer.Option(None, "--include-pagination", help="If set to true then a different paginated response object co"),
|
|
22
22
|
is_validation: str = typer.Option(None, "--is-validation", help="If true, validates the existence of flows by ID regardless o"),
|
|
23
23
|
output: str = typer.Option("table", "--output", "-o", help="Output format: table|json"),
|
|
24
24
|
limit: int = typer.Option(0, "--limit", help="Max results (0=all for paginated endpoints, API default for non-paginated)"),
|
|
@@ -429,7 +429,7 @@ def list_validate(
|
|
|
429
429
|
except WebexError as e:
|
|
430
430
|
handle_rest_error(e)
|
|
431
431
|
result = result or []
|
|
432
|
-
items = result.get("
|
|
432
|
+
items = result.get("results", result.get("data", result if isinstance(result, list) else [])) if isinstance(result, dict) else (result if isinstance(result, list) else [])
|
|
433
433
|
if output == "json":
|
|
434
434
|
print_json(items)
|
|
435
435
|
else:
|
|
@@ -158,6 +158,9 @@ def show(
|
|
|
158
158
|
@app.command("delete")
|
|
159
159
|
def delete(
|
|
160
160
|
recording_id: str = typer.Argument(help="recordingId"),
|
|
161
|
+
reason: str = typer.Option(None, "--reason", help="Reason for deleting a recording. Only required when a Compli"),
|
|
162
|
+
comment: str = typer.Option(None, "--comment", help="Compliance Officer's explanation for deleting a recording. T"),
|
|
163
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
161
164
|
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
162
165
|
debug: bool = typer.Option(False, "--debug"),
|
|
163
166
|
):
|
|
@@ -166,8 +169,16 @@ def delete(
|
|
|
166
169
|
typer.confirm(f"Delete {recording_id}?", abort=True)
|
|
167
170
|
api = get_api(debug=debug)
|
|
168
171
|
url = f"https://webexapis.com/v1/convergedRecordings/{recording_id}"
|
|
172
|
+
if json_body:
|
|
173
|
+
body = json.loads(json_body)
|
|
174
|
+
else:
|
|
175
|
+
body = {}
|
|
176
|
+
if reason is not None:
|
|
177
|
+
body["reason"] = reason
|
|
178
|
+
if comment is not None:
|
|
179
|
+
body["comment"] = comment
|
|
169
180
|
try:
|
|
170
|
-
api.session.rest_delete(url)
|
|
181
|
+
api.session.rest_delete(url, json=body or None)
|
|
171
182
|
except WebexError as e:
|
|
172
183
|
handle_rest_error(e)
|
|
173
184
|
typer.echo(f"Deleted: {recording_id}")
|
|
@@ -526,6 +526,8 @@ def delete_handsets_dect_networks(
|
|
|
526
526
|
def delete_handsets_dect_networks_1(
|
|
527
527
|
location_id: str = typer.Argument(help="locationId"),
|
|
528
528
|
dect_network_id: str = typer.Argument(help="dectNetworkId"),
|
|
529
|
+
delete_all: bool = typer.Option(None, "--delete-all/--no-delete-all", help="If present the items array is ignored and all items in the c"),
|
|
530
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
529
531
|
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
530
532
|
debug: bool = typer.Option(False, "--debug"),
|
|
531
533
|
):
|
|
@@ -538,8 +540,18 @@ def delete_handsets_dect_networks_1(
|
|
|
538
540
|
org_id = get_org_id()
|
|
539
541
|
if org_id is not None:
|
|
540
542
|
params["orgId"] = org_id
|
|
543
|
+
if json_body:
|
|
544
|
+
body = json.loads(json_body)
|
|
545
|
+
else:
|
|
546
|
+
body = {}
|
|
547
|
+
if delete_all is not None:
|
|
548
|
+
body["deleteAll"] = delete_all
|
|
549
|
+
missing = [f for f in ['handsetIds'] if f not in body]
|
|
550
|
+
if missing:
|
|
551
|
+
typer.echo(f"Error: required body field(s) missing: {', '.join(missing)}. Pass them via --json-body — this delete needs to know what to delete.", err=True)
|
|
552
|
+
raise typer.Exit(1)
|
|
541
553
|
try:
|
|
542
|
-
api.session.rest_delete(url, params=params)
|
|
554
|
+
api.session.rest_delete(url, json=body or None, params=params)
|
|
543
555
|
except WebexError as e:
|
|
544
556
|
handle_rest_error(e)
|
|
545
557
|
typer.echo(f"Deleted: {dect_network_id}")
|
|
@@ -1439,6 +1439,7 @@ def list_background_images(
|
|
|
1439
1439
|
|
|
1440
1440
|
@app.command("delete-background-images")
|
|
1441
1441
|
def delete_background_images(
|
|
1442
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
1442
1443
|
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
1443
1444
|
debug: bool = typer.Option(False, "--debug"),
|
|
1444
1445
|
):
|
|
@@ -1451,8 +1452,16 @@ def delete_background_images(
|
|
|
1451
1452
|
org_id = get_org_id()
|
|
1452
1453
|
if org_id is not None:
|
|
1453
1454
|
params["orgId"] = org_id
|
|
1455
|
+
if json_body:
|
|
1456
|
+
body = json.loads(json_body)
|
|
1457
|
+
else:
|
|
1458
|
+
body = {}
|
|
1459
|
+
missing = [f for f in ['backgroundImages'] if f not in body]
|
|
1460
|
+
if missing:
|
|
1461
|
+
typer.echo(f"Error: required body field(s) missing: {', '.join(missing)}. Pass them via --json-body — this delete needs to know what to delete.", err=True)
|
|
1462
|
+
raise typer.Exit(1)
|
|
1454
1463
|
try:
|
|
1455
|
-
api.session.rest_delete(url, params=params)
|
|
1464
|
+
api.session.rest_delete(url, json=body or None, params=params)
|
|
1456
1465
|
except WebexError as e:
|
|
1457
1466
|
handle_rest_error(e)
|
|
1458
1467
|
typer.echo("Deleted.")
|
|
@@ -213,6 +213,9 @@ def update(
|
|
|
213
213
|
@app.command("delete")
|
|
214
214
|
def delete(
|
|
215
215
|
transcript_id: str = typer.Argument(help="transcriptId"),
|
|
216
|
+
reason: str = typer.Option(None, "--reason", help="Reason for deleting a transcript. Only required when a Compl"),
|
|
217
|
+
comment: str = typer.Option(None, "--comment", help="Explanation for deleting a transcript. The comment can be a"),
|
|
218
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
216
219
|
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
217
220
|
debug: bool = typer.Option(False, "--debug"),
|
|
218
221
|
):
|
|
@@ -221,8 +224,16 @@ def delete(
|
|
|
221
224
|
typer.confirm(f"Delete {transcript_id}?", abort=True)
|
|
222
225
|
api = get_api(debug=debug)
|
|
223
226
|
url = f"https://webexapis.com/v1/meetingTranscripts/{transcript_id}"
|
|
227
|
+
if json_body:
|
|
228
|
+
body = json.loads(json_body)
|
|
229
|
+
else:
|
|
230
|
+
body = {}
|
|
231
|
+
if reason is not None:
|
|
232
|
+
body["reason"] = reason
|
|
233
|
+
if comment is not None:
|
|
234
|
+
body["comment"] = comment
|
|
224
235
|
try:
|
|
225
|
-
api.session.rest_delete(url)
|
|
236
|
+
api.session.rest_delete(url, json=body or None)
|
|
226
237
|
except WebexError as e:
|
|
227
238
|
handle_rest_error(e)
|
|
228
239
|
typer.echo(f"Deleted: {transcript_id}")
|
|
@@ -88,6 +88,7 @@ def update(
|
|
|
88
88
|
@app.command("delete")
|
|
89
89
|
def delete(
|
|
90
90
|
location_id: str = typer.Argument(help="locationId"),
|
|
91
|
+
json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),
|
|
91
92
|
force: bool = typer.Option(False, "--force", help="Skip confirmation"),
|
|
92
93
|
debug: bool = typer.Option(False, "--debug"),
|
|
93
94
|
):
|
|
@@ -100,8 +101,16 @@ def delete(
|
|
|
100
101
|
org_id = get_org_id()
|
|
101
102
|
if org_id is not None:
|
|
102
103
|
params["orgId"] = org_id
|
|
104
|
+
if json_body:
|
|
105
|
+
body = json.loads(json_body)
|
|
106
|
+
else:
|
|
107
|
+
body = {}
|
|
108
|
+
missing = [f for f in ['phoneNumbers'] if f not in body]
|
|
109
|
+
if missing:
|
|
110
|
+
typer.echo(f"Error: required body field(s) missing: {', '.join(missing)}. Pass them via --json-body — this delete needs to know what to delete.", err=True)
|
|
111
|
+
raise typer.Exit(1)
|
|
103
112
|
try:
|
|
104
|
-
api.session.rest_delete(url, params=params)
|
|
113
|
+
api.session.rest_delete(url, json=body or None, params=params)
|
|
105
114
|
except WebexError as e:
|
|
106
115
|
handle_rest_error(e)
|
|
107
116
|
typer.echo(f"Deleted: {location_id}")
|
|
@@ -84,7 +84,7 @@ class PreflightRunner:
|
|
|
84
84
|
def _needs(*checks: str) -> bool:
|
|
85
85
|
return check_filter is None or check_filter in checks
|
|
86
86
|
|
|
87
|
-
licenses = self._fetch("licenses", ["licenses
|
|
87
|
+
licenses = self._fetch("licenses", ["licenses", "list", "--output", "json"]) if _needs("licenses", "workspace-licenses") else []
|
|
88
88
|
locations = self._fetch("locations", ["locations", "list"]) if _needs("locations") else []
|
|
89
89
|
numbers = self._fetch("numbers", ["numbers", "list", "--limit", "0"]) if _needs("numbers") else []
|
|
90
90
|
people = self._fetch("people", ["users", "list", "--calling-data", "true", "--limit", "0"]) if _needs("users") else []
|
|
@@ -52,6 +52,10 @@ Mock server URLs (public, no auth required — return saved response examples):
|
|
|
52
52
|
- **Spec files:** 9 tracked OpenAPI 3.0 specs in `specs/` — all regenerated by `spec_sync.py`: `webex-cloud-calling.json`, `webex-admin.json`, `webex-device.json`, `webex-messaging.json`, `webex-meetings.json`, `webex-contact-center.json`, `webex-ucm.json`, `webex-broadworks.json`, `webex-wholesale.json` (+ untracked dev-only `webex-flow-store.json`). `update-specs.py` pulls upstream refreshes for the first 7 only.
|
|
53
53
|
- **Pull updated specs:** `python3.14 tools/update-specs.py` — downloads latest from GitHub, reports diffs. BroadWorks and Wholesale are excluded.
|
|
54
54
|
- **Tag collision (retired 2026-07-01):** CC Site/Data Sources collisions are resolved by per-spec `cli_name_overrides`; regen order no longer matters for them (see known issue #17).
|
|
55
|
+
- **Multi-tagged ops render into every tag they carry.** Dedup is per-tag, so an op legitimately tagged twice (the 3 `hotDesking/members` ops are both `Features: Hot Desking Members` and `User Call Settings`) appears in both groups. Two guards make that safe — do not remove either without reading known issue #22:
|
|
56
|
+
- **`tag_op_excludes`** (per-spec, `tag -> [path globs]`) drops spurious tag/operation pairings the upstream spec invents. Reach for it when a group fills with operations that plainly belong elsewhere; it is the right fix for a mis-tagged spec, not a dedup change.
|
|
57
|
+
- **Secondary-tag ops cannot claim a bare command name.** `parse_tag` derives names primary-tag-first (`tags[0]`), so an op for which the tag is secondary can never take `create`/`show`/`update` from an op the tag actually owns. This protects the multi-tag case only — two ops in the *same* tag racing for a name still needs pinning per issue #18.
|
|
58
|
+
- Only 27 ops across all 9 specs are multi-tagged. Any regen that moves a command-name count beyond those is a red flag; diff names, not just counts.
|
|
55
59
|
- Regenerate one tag: `PYTHONPATH=. python3.14 tools/generate_commands.py --spec specs/webex-cloud-calling.json --tag "Tag Name"` (the `_registry.py` manifest upserts automatically)
|
|
56
60
|
- Regenerate one spec (all tags): `PYTHONPATH=. python3.14 tools/generate_commands.py --spec specs/webex-cloud-calling.json --all`
|
|
57
61
|
- Regenerate everything (all tracked specs, atomic — pulls specs, regens, updates the manifest, runs the drift gate): `python3.14 tools/spec_sync.py` (`--skip-update` to regen from specs on disk). Land the result as ONE commit. Historical tag-collision order sensitivity is gone (per-spec `cli_name_overrides` for CC Site/Data Sources), but `spec_sync.py` keeps CC-before-admin/meetings order anyway.
|
|
@@ -75,20 +79,42 @@ These were removed from root CLAUDE.md (not needed by the builder agent at runti
|
|
|
75
79
|
|
|
76
80
|
Fix when triaged: pin a truthful name via `tag_overrides` -> `command_name_overrides` (per issue #18) and make the success message follow the operation's real semantics rather than the verb. Interim protection is documentation only — `configure-features/SKILL.md` Critical Rules #21-22 carry a trap table. That protects an agent that read the skill first; it does not protect anyone reading `--help` alone, and the "Updated." message actively misleads.
|
|
77
81
|
|
|
78
|
-
21. **The renderer
|
|
82
|
+
21. **The renderer dropped `requestBody` on DELETE, so the 5 scoped deletes were inert.** **FIXED 2026-07-14** (renderer + `rest_delete`), and the original severity claim here was **WRONG** — corrected below so nobody re-inherits it.
|
|
79
83
|
|
|
80
|
-
|
|
81
|
-
|---------|----------------------|-------------------|
|
|
82
|
-
| `call-queue delete-supervisors-config` | `supervisors[]` | deletes **all supervisors in the org** |
|
|
83
|
-
| `device-settings delete-background-images` | `backgroundImages[]` | deletes **all background images** |
|
|
84
|
-
| `numbers delete` | phone numbers to remove | cannot name which numbers |
|
|
85
|
-
| `call-queue delete-dnis-queues` | `dnis[]` (**required**) | request is unsatisfiable |
|
|
84
|
+
**What this issue used to say:** that a body-less DELETE "silently becomes delete-everything", e.g. `call-queue delete-supervisors-config` "deletes all supervisors in the org". **That was never tested. It is false.** Live-tested against `/telephony/config/supervisors` with two real supervisors present:
|
|
86
85
|
|
|
87
|
-
|
|
86
|
+
```
|
|
87
|
+
DELETE /v1/telephony/config/supervisors (no body)
|
|
88
|
+
-> HTTP 400, Cisco-Spark-Error-Codes: 25024
|
|
89
|
+
{"errorCode":25024,"message":"Invalid JSON format in request body:
|
|
90
|
+
Required request body is missing: ..."}
|
|
91
|
+
-> supervisors after: 2 of 2 SURVIVED
|
|
92
|
+
```
|
|
88
93
|
|
|
89
|
-
|
|
94
|
+
The API **rejects** a body-less scoped delete. It was **inert, not dangerous** — it could never have worked, and could never have deleted anything. Delete-everything is gated behind an explicit `deleteAll: true` (also live-confirmed: with `deleteAll` passed, all supervisors were removed; without it, only the named `supervisorIds` were). An endpoint that wiped everything on an empty body would not need a `deleteAll` flag — that was the tell, and reading the spec's own field description would have settled it without a live call.
|
|
90
95
|
|
|
91
|
-
|
|
96
|
+
**The real bug** (verified, now fixed): `_render_delete_command` never rendered body fields, and `rest_delete()` had no `json` parameter. 10 tracked spec ops declare a DELETE body; on 5 the body is what *scopes* the delete, so those 5 commands 400'd on every invocation:
|
|
97
|
+
`call-queue delete-supervisors-config` (`supervisorIds`), `call-queue delete-dnis-queues` (`items`), `numbers delete` (`phoneNumbers`), `device-settings delete-background-images` (`backgroundImages`), `dect-devices delete-handsets-dect-networks-1` (`handsetIds`). The other 5 take optional metadata only (`reason`/`comment` on recordings/transcripts) and were unaffected.
|
|
98
|
+
|
|
99
|
+
**The fix:** the DELETE branch now renders body fields + `--json-body` exactly as PUT/POST do, and required body fields are enforced **client-side** — a delete with no targets exits 1 locally and never reaches the wire, so the API's behaviour on an empty body stops mattering. `body or None` preserves the no-body wire format when nothing is supplied, so the 5 metadata-body deletes are unchanged.
|
|
100
|
+
|
|
101
|
+
Live-proven end-to-end on supervisors: scoped delete removed exactly the named target and left the other in place. **Still unproven: the other 4 scoping deletes were fixed by the same code path but not live-tested** — `numbers delete` most deserves it.
|
|
102
|
+
|
|
103
|
+
Lesson (this one cost a session): the claim above was inference stated as fact, in a file whose entire purpose is to be trusted. #20 is still UNFIXED and its claim is *observed* (its own `--help` says "Delete", it prints "Updated.") — do not let this correction cast doubt on that one.
|
|
104
|
+
|
|
105
|
+
22. **A spurious upstream tag can flood a group and steal its bare command name.** **FIXED 2026-07-14** (`tag_op_excludes` + primary-tag-first name derivation). Read this before touching dedup in `generate_commands.py`.
|
|
106
|
+
|
|
107
|
+
**The spec artifact:** upstream tags all 24 `/telephony/calls/*` call-control ops with a second `External Voicemail` tag. They are call control (`dial`, `answer`, `hangup`) and already render into `call-controls`. The only real External Voicemail endpoint is `/telephony/externalVoicemail/mwi`. `dial` is not voicemail — the tag is wrong on those 24 ops.
|
|
108
|
+
|
|
109
|
+
**Why it stayed hidden:** dedup was global, so the first tag to claim an op won it. `Call Controls` sorts before `External Voicemail`, so the artifact was masked by iteration order — not by any rule. That accident was the only thing keeping `external-voicemail` at 1 command.
|
|
110
|
+
|
|
111
|
+
**What broke, once, in a shipped commit:** dedup was made per-tag to fix a real bug — 3 legitimately dual-tagged `hotDesking/members` ops were being dropped from `user-settings`, which is the name six skills document. Correct intent; the artifact then stopped being masked. All 24 call-control ops rendered into `external-voicemail` (1 -> 25) and `dial` won the bare `create` name.
|
|
112
|
+
|
|
113
|
+
**Name the damage precisely — it was a rename, not a deletion.** `_dedup_command_names` disambiguates, so the MWI op survived under an auto-suffixed name (`create-mwi`) rather than disappearing. That is *worse* than deletion and the reason this issue exists: a deleted command errors loudly, whereas `external-voicemail create` silently changed from "set the message-waiting indicator" to "dial a call" while every doc kept citing `create`. When triaging this class, check what a bare name now *points at* — do not stop at "the command still exists".
|
|
114
|
+
|
|
115
|
+
**The fix:** `tag_op_excludes` drops the bogus pairing at its source, so `external-voicemail` cannot be flooded regardless of dedup; per-tag dedup then restores the 3 hot-desking commands; and `parse_tag` derives names primary-tag-first so a secondary-tag op can never take a bare name from an op the tag owns. Verified by a name-level per-group diff (all 184 groups, committed vs regenerated): zero groups changed, so the generator now reproduces the tree exactly instead of dropping 3 commands.
|
|
116
|
+
|
|
117
|
+
Lesson: the fix for a mis-tagged spec is to fix the tagging, not to loosen dedup. The break shipped because its commit message claimed "drift_check.py runs with no new issues" while the gate was in fact failing — that single unverified claim is the whole reason a command got repurposed. Run the gate, paste the output, and diff command *names* (issue #18), not just counts. Note the trap in how it surfaces: the gate reports "docs cite flags that don't exist", which reads like a docs bug. The docs were right and the CLI was wrong; "fixing" the docs to match would have cemented the break.
|
|
92
118
|
|
|
93
119
|
## Templates, Examples & Plans
|
|
94
120
|
|
|
@@ -661,6 +661,27 @@ def _render_delete_command(ep: Endpoint, folder_overrides: dict | None = None) -
|
|
|
661
661
|
params.append(f' {param}: str = typer.Argument(help="{var}"),')
|
|
662
662
|
qp_defs, qp_build = _render_query_params(ep)
|
|
663
663
|
params.extend(qp_defs)
|
|
664
|
+
|
|
665
|
+
# 10 Webex DELETE operations carry a request body, and on 5 of them the body
|
|
666
|
+
# is what SCOPES the delete (`supervisorIds`, `phoneNumbers`, `items`,
|
|
667
|
+
# `backgroundImages`, `handsetIds`). This branch used to skip bodies
|
|
668
|
+
# entirely, which made those 5 commands inert: verified live against
|
|
669
|
+
# /telephony/config/supervisors — 400, errorCode 25024, "Required request
|
|
670
|
+
# body is missing". They could never have worked.
|
|
671
|
+
used_names = _used_param_names(ep)
|
|
672
|
+
has_body = bool(ep.body_fields)
|
|
673
|
+
if has_body:
|
|
674
|
+
for bf in ep.body_fields:
|
|
675
|
+
param = _safe_param_name(bf.python_name)
|
|
676
|
+
if bf.field_type in ("object", "array") or param in used_names:
|
|
677
|
+
continue # arrays/objects can only be expressed via --json-body
|
|
678
|
+
help_text = _enum_help(bf)
|
|
679
|
+
if bf.field_type == "bool":
|
|
680
|
+
params.append(f' {param}: bool = typer.Option(None, "--{bf.python_name}/--no-{bf.python_name}", help="{help_text}"),')
|
|
681
|
+
else:
|
|
682
|
+
params.append(f' {param}: str = typer.Option(None, "--{bf.python_name}", help="{help_text}"),')
|
|
683
|
+
params.append(' json_body: str = typer.Option(None, "--json-body", help="Full JSON body (overrides other options)"),')
|
|
684
|
+
|
|
664
685
|
has_spec_force = any(qp.name == "force" for qp in ep.query_params)
|
|
665
686
|
if not has_spec_force:
|
|
666
687
|
params.append(' force: bool = typer.Option(False, "--force", help="Skip confirmation"),')
|
|
@@ -680,7 +701,38 @@ def _render_delete_command(ep: Endpoint, folder_overrides: dict | None = None) -
|
|
|
680
701
|
auto_inject = _render_auto_inject_params(ep)
|
|
681
702
|
if not qp_build and has_params:
|
|
682
703
|
qp_build = [" params = {}"]
|
|
683
|
-
|
|
704
|
+
|
|
705
|
+
body_build: list[str] = []
|
|
706
|
+
if has_body:
|
|
707
|
+
body_build = [" if json_body:", " body = json.loads(json_body)",
|
|
708
|
+
" else:", " body = {}"]
|
|
709
|
+
for bf in ep.body_fields:
|
|
710
|
+
param = _safe_param_name(bf.python_name)
|
|
711
|
+
if bf.field_type in ("object", "array") or param in used_names:
|
|
712
|
+
continue
|
|
713
|
+
body_build.append(f' if {param} is not None:\n body["{bf.name}"] = {param}')
|
|
714
|
+
required = [bf.name for bf in ep.body_fields if bf.required]
|
|
715
|
+
if required:
|
|
716
|
+
# Fail HERE, not at the API. A scoped delete whose scope is missing
|
|
717
|
+
# is the one shape that must never reach the wire: these endpoints
|
|
718
|
+
# gate delete-everything behind an explicit `deleteAll`, so a body
|
|
719
|
+
# that merely omits the targets is a mistake, not a request.
|
|
720
|
+
body_build.extend([
|
|
721
|
+
f" missing = [f for f in {required!r} if f not in body]",
|
|
722
|
+
" if missing:",
|
|
723
|
+
' typer.echo(f"Error: required body field(s) missing: {\', \'.join(missing)}. '
|
|
724
|
+
'Pass them via --json-body — this delete needs to know what to delete.", err=True)',
|
|
725
|
+
" raise typer.Exit(1)",
|
|
726
|
+
])
|
|
727
|
+
|
|
728
|
+
# `body or None` preserves the no-body wire format when nothing was supplied,
|
|
729
|
+
# so the 5 metadata-body deletes (reason/comment on recordings) behave exactly
|
|
730
|
+
# as they do today rather than newly sending `{}`.
|
|
731
|
+
if has_body:
|
|
732
|
+
delete_call = ("api.session.rest_delete(url, json=body or None)" if not has_params
|
|
733
|
+
else "api.session.rest_delete(url, json=body or None, params=params)")
|
|
734
|
+
else:
|
|
735
|
+
delete_call = "api.session.rest_delete(url)" if not has_params else "api.session.rest_delete(url, params=params)"
|
|
684
736
|
|
|
685
737
|
lines = [
|
|
686
738
|
f'@app.command("{ep.command_name}")',
|
|
@@ -695,6 +747,7 @@ def _render_delete_command(ep: Endpoint, folder_overrides: dict | None = None) -
|
|
|
695
747
|
f' url = f"{url_expr}"',
|
|
696
748
|
*qp_build,
|
|
697
749
|
*auto_inject,
|
|
750
|
+
*body_build,
|
|
698
751
|
" try:",
|
|
699
752
|
f" {delete_call}",
|
|
700
753
|
_render_error_handler(" "),
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
# table_columns — display columns for CLI table output (per-group or per-command)
|
|
8
8
|
# skip_tags — glob patterns for OpenAPI tags to skip entirely
|
|
9
9
|
# tag_merge — merge split tags into one CLI group
|
|
10
|
+
# tag_op_excludes — drop spurious tag/operation pairings (tag → path globs)
|
|
10
11
|
# cli_name_overrides — human-friendly CLI group names (tag → CLI name)
|
|
11
12
|
# omit_query_params — query params stripped from all commands
|
|
12
13
|
#
|
|
@@ -596,6 +597,22 @@ skip_tags:
|
|
|
596
597
|
- health-controller # health check
|
|
597
598
|
- prometheus-controller # metrics endpoint
|
|
598
599
|
|
|
600
|
+
# Drop spurious tag/operation pairings present in the upstream spec.
|
|
601
|
+
# tag -> list of path globs that carry the tag but do not belong to it.
|
|
602
|
+
tag_op_excludes:
|
|
603
|
+
webex-cloud-calling.json:
|
|
604
|
+
# Upstream tags all 24 /telephony/calls/* call-control ops with a second
|
|
605
|
+
# "External Voicemail" tag. They are call control (dial, answer, hangup)
|
|
606
|
+
# and already render into the call-controls group; the only real External
|
|
607
|
+
# Voicemail endpoint is /telephony/externalVoicemail/mwi. Without this
|
|
608
|
+
# filter, per-tag dedup renders all 24 into external-voicemail and the
|
|
609
|
+
# "dial" op wins the bare `create` name, so `external-voicemail create`
|
|
610
|
+
# silently dials a call instead of setting the message-waiting indicator.
|
|
611
|
+
# That exact break shipped once — see known issue #22 in tools/CLAUDE.md.
|
|
612
|
+
"External Voicemail":
|
|
613
|
+
- "/telephony/calls"
|
|
614
|
+
- "/telephony/calls/*"
|
|
615
|
+
|
|
599
616
|
# Merge split tags into a single CLI group
|
|
600
617
|
tag_merge:
|
|
601
618
|
_global:
|