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.
Files changed (814) hide show
  1. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/agents/wxc-calling-builder.md +0 -6
  2. {wxcli-1.4.1 → wxcli-1.4.2}/PKG-INFO +1 -1
  3. {wxcli-1.4.1/src/wxcli/_playbook → wxcli-1.4.2}/docs/reference/contact-center-routing.md +5 -2
  4. {wxcli-1.4.1/src/wxcli/_playbook → wxcli-1.4.2}/docs/reference/meetings-core.md +1 -0
  5. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/agents/wxc-calling-builder.md +0 -6
  6. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/agents/wxc-calling-builder.toml +0 -6
  7. {wxcli-1.4.1 → wxcli-1.4.2/src/wxcli/_playbook}/docs/reference/contact-center-routing.md +5 -2
  8. {wxcli-1.4.1 → wxcli-1.4.2/src/wxcli/_playbook}/docs/reference/meetings-core.md +1 -0
  9. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_version.py +3 -3
  10. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/auth.py +8 -2
  11. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/admin_recordings.py +12 -1
  12. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_queue.py +26 -2
  13. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_flow.py +2 -2
  14. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/converged_recordings.py +12 -1
  15. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/dect_devices.py +13 -1
  16. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/device_settings.py +10 -1
  17. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_transcripts.py +12 -1
  18. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/numbers.py +10 -1
  19. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/preflight/runner.py +1 -1
  20. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/PKG-INFO +1 -1
  21. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/scm_version.json +2 -2
  22. {wxcli-1.4.1 → wxcli-1.4.2}/tools/CLAUDE.md +36 -10
  23. {wxcli-1.4.1 → wxcli-1.4.2}/tools/command_renderer.py +54 -1
  24. {wxcli-1.4.1 → wxcli-1.4.2}/tools/field_overrides.yaml +17 -0
  25. {wxcli-1.4.1 → wxcli-1.4.2}/tools/generate_commands.py +46 -3
  26. {wxcli-1.4.1 → wxcli-1.4.2}/tools/openapi_parser.py +27 -3
  27. {wxcli-1.4.1 → wxcli-1.4.2}/tools/spec_sync.py +3 -1
  28. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/agents/migration-advisor.md +0 -0
  29. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/projects/-Users-ahobgood-Documents-webexCalling/memory/feedback_help_gate_for_skills.md +0 -0
  30. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/rules/cleanup.md +0 -0
  31. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/rules/cucm-migration.md +0 -0
  32. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/rules/org-health.md +0 -0
  33. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/settings.json +0 -0
  34. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/audit-compliance/SKILL.md +0 -0
  35. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/call-control/SKILL.md +0 -0
  36. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/configure-features/SKILL.md +0 -0
  37. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/configure-routing/SKILL.md +0 -0
  38. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/contact-center/SKILL.md +0 -0
  39. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/cucm-migrate/SKILL.md +0 -0
  40. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/customer-assist/SKILL.md +0 -0
  41. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/device-platform/SKILL.md +0 -0
  42. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-call-settings/SKILL.md +0 -0
  43. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-devices/SKILL.md +0 -0
  44. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-identity/SKILL.md +0 -0
  45. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-licensing/SKILL.md +0 -0
  46. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/manage-meetings/SKILL.md +0 -0
  47. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/messaging-bots/SKILL.md +0 -0
  48. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/messaging-spaces/SKILL.md +0 -0
  49. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/org-health/SKILL.md +0 -0
  50. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/provision-calling/SKILL.md +0 -0
  51. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/SKILL.md +0 -0
  52. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/call-flow-trace.md +0 -0
  53. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/call-history.md +0 -0
  54. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/features.md +0 -0
  55. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/numbers.md +0 -0
  56. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/people-and-settings.md +0 -0
  57. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/query-live/domains/routing.md +0 -0
  58. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/reporting/SKILL.md +0 -0
  59. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/reporting/references/cdr-recipes.md +0 -0
  60. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/reporting-cc/SKILL.md +0 -0
  61. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/reporting-meetings/SKILL.md +0 -0
  62. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/teardown/SKILL.md +0 -0
  63. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/video-mesh/SKILL.md +0 -0
  64. {wxcli-1.4.1 → wxcli-1.4.2}/.claude/skills/wxc-calling-debug/SKILL.md +0 -0
  65. {wxcli-1.4.1 → wxcli-1.4.2}/.github/workflows/ci.yml +0 -0
  66. {wxcli-1.4.1 → wxcli-1.4.2}/.github/workflows/release.yml +0 -0
  67. {wxcli-1.4.1 → wxcli-1.4.2}/.gitignore +0 -0
  68. {wxcli-1.4.1 → wxcli-1.4.2}/CLAUDE.md +0 -0
  69. {wxcli-1.4.1 → wxcli-1.4.2}/LICENSE +0 -0
  70. {wxcli-1.4.1 → wxcli-1.4.2}/README.md +0 -0
  71. {wxcli-1.4.1 → wxcli-1.4.2}/TODO.md +0 -0
  72. {wxcli-1.4.1 → wxcli-1.4.2}/docs/CLAUDE.md +0 -0
  73. {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/00-index.md +0 -0
  74. {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/01-structural-map.md +0 -0
  75. {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/02-decisions.md +0 -0
  76. {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/03-behavior.md +0 -0
  77. {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/04-operations-and-evolution.md +0 -0
  78. {wxcli-1.4.1 → wxcli-1.4.2}/docs/architecture/05-purpose.md +0 -0
  79. {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-css-routing.md +0 -0
  80. {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-device-migration.md +0 -0
  81. {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-feature-mapping.md +0 -0
  82. {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-identity-numbering.md +0 -0
  83. {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-location-design.md +0 -0
  84. {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-trunk-pstn.md +0 -0
  85. {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-user-settings.md +0 -0
  86. {wxcli-1.4.1 → wxcli-1.4.2}/docs/knowledge-base/migration/kb-webex-limits.md +0 -0
  87. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/CLAUDE.md +0 -0
  88. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/TODO.md +0 -0
  89. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-apps-data.md +0 -0
  90. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-audit-security.md +0 -0
  91. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-hybrid.md +0 -0
  92. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-identity-scim.md +0 -0
  93. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-licensing.md +0 -0
  94. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-org-management.md +0 -0
  95. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/admin-partner.md +0 -0
  96. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxc-sdk-patterns.md +0 -0
  97. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-advanced.md +0 -0
  98. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-core.md +0 -0
  99. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-devices-workspaces.md +0 -0
  100. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-features.md +0 -0
  101. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-locations.md +0 -0
  102. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-person.md +0 -0
  103. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/archive/wxcadm-routing.md +0 -0
  104. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/authentication.md +0 -0
  105. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/call-control.md +0 -0
  106. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/call-features-additional.md +0 -0
  107. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/call-features-major.md +0 -0
  108. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/call-routing.md +0 -0
  109. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/contact-center-analytics.md +0 -0
  110. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/contact-center-core.md +0 -0
  111. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/contact-center-journey.md +0 -0
  112. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/devices-core.md +0 -0
  113. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/devices-dect.md +0 -0
  114. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/devices-platform.md +0 -0
  115. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/devices-workspaces.md +0 -0
  116. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/emergency-services.md +0 -0
  117. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/location-calling-core.md +0 -0
  118. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/location-calling-media.md +0 -0
  119. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/location-recording-advanced.md +0 -0
  120. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/meetings-content.md +0 -0
  121. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/meetings-infrastructure.md +0 -0
  122. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/meetings-settings.md +0 -0
  123. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/messaging-bots.md +0 -0
  124. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/messaging-spaces.md +0 -0
  125. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/migration-spec-template.md +0 -0
  126. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/person-call-settings-behavior.md +0 -0
  127. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/person-call-settings-handling.md +0 -0
  128. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/person-call-settings-media.md +0 -0
  129. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/person-call-settings-permissions.md +0 -0
  130. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/provisioning.md +0 -0
  131. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/reporting-analytics.md +0 -0
  132. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/self-service-call-settings.md +0 -0
  133. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/virtual-lines.md +0 -0
  134. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/webhooks-events.md +0 -0
  135. {wxcli-1.4.1 → wxcli-1.4.2}/docs/reference/wxcadm-xsi-realtime.md +0 -0
  136. {wxcli-1.4.1 → wxcli-1.4.2}/docs/runbooks/cucm-migration/decision-guide.md +0 -0
  137. {wxcli-1.4.1 → wxcli-1.4.2}/docs/runbooks/cucm-migration/operator-runbook.md +0 -0
  138. {wxcli-1.4.1 → wxcli-1.4.2}/docs/runbooks/cucm-migration/self-review-findings.md +0 -0
  139. {wxcli-1.4.1 → wxcli-1.4.2}/docs/runbooks/cucm-migration/tuning-reference.md +0 -0
  140. {wxcli-1.4.1 → wxcli-1.4.2}/docs/templates/deployment-plan.md +0 -0
  141. {wxcli-1.4.1 → wxcli-1.4.2}/docs/templates/execution-report.md +0 -0
  142. {wxcli-1.4.1 → wxcli-1.4.2}/pyproject.toml +0 -0
  143. {wxcli-1.4.1 → wxcli-1.4.2}/setup.cfg +0 -0
  144. {wxcli-1.4.1 → wxcli-1.4.2}/specs/overlays/webex-cloud-calling.overlay.json +0 -0
  145. {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-admin.json +0 -0
  146. {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-broadworks.json +0 -0
  147. {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-cloud-calling.json +0 -0
  148. {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-contact-center.json +0 -0
  149. {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-device.json +0 -0
  150. {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-meetings.json +0 -0
  151. {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-messaging.json +0 -0
  152. {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-ucm.json +0 -0
  153. {wxcli-1.4.1 → wxcli-1.4.2}/specs/webex-wholesale.json +0 -0
  154. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/__init__.py +0 -0
  155. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/agents/migration-advisor.md +0 -0
  156. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/rules/cleanup.md +0 -0
  157. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/rules/cucm-migration.md +0 -0
  158. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/rules/org-health.md +0 -0
  159. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/settings.json +0 -0
  160. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/audit-compliance/SKILL.md +0 -0
  161. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/call-control/SKILL.md +0 -0
  162. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/configure-features/SKILL.md +0 -0
  163. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/configure-routing/SKILL.md +0 -0
  164. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/contact-center/SKILL.md +0 -0
  165. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/cucm-migrate/SKILL.md +0 -0
  166. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/customer-assist/SKILL.md +0 -0
  167. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/device-platform/SKILL.md +0 -0
  168. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-call-settings/SKILL.md +0 -0
  169. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-devices/SKILL.md +0 -0
  170. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-identity/SKILL.md +0 -0
  171. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-licensing/SKILL.md +0 -0
  172. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/manage-meetings/SKILL.md +0 -0
  173. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/messaging-bots/SKILL.md +0 -0
  174. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/messaging-spaces/SKILL.md +0 -0
  175. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/org-health/SKILL.md +0 -0
  176. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/provision-calling/SKILL.md +0 -0
  177. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/SKILL.md +0 -0
  178. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/call-flow-trace.md +0 -0
  179. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/call-history.md +0 -0
  180. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/features.md +0 -0
  181. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/numbers.md +0 -0
  182. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/people-and-settings.md +0 -0
  183. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/query-live/domains/routing.md +0 -0
  184. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/reporting/SKILL.md +0 -0
  185. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/reporting/references/cdr-recipes.md +0 -0
  186. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/reporting-cc/SKILL.md +0 -0
  187. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/reporting-meetings/SKILL.md +0 -0
  188. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/teardown/SKILL.md +0 -0
  189. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/video-mesh/SKILL.md +0 -0
  190. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.claude/skills/wxc-calling-debug/SKILL.md +0 -0
  191. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/agents/migration-advisor.toml +0 -0
  192. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/config.toml +0 -0
  193. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/rules/cleanup.md +0 -0
  194. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/rules/cucm-migration.md +0 -0
  195. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/rules/org-health.md +0 -0
  196. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/audit-compliance/SKILL.md +0 -0
  197. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/call-control/SKILL.md +0 -0
  198. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/configure-features/SKILL.md +0 -0
  199. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/configure-routing/SKILL.md +0 -0
  200. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/contact-center/SKILL.md +0 -0
  201. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/cucm-migrate/SKILL.md +0 -0
  202. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/customer-assist/SKILL.md +0 -0
  203. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/device-platform/SKILL.md +0 -0
  204. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-call-settings/SKILL.md +0 -0
  205. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-devices/SKILL.md +0 -0
  206. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-identity/SKILL.md +0 -0
  207. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-licensing/SKILL.md +0 -0
  208. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/manage-meetings/SKILL.md +0 -0
  209. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/messaging-bots/SKILL.md +0 -0
  210. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/messaging-spaces/SKILL.md +0 -0
  211. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/org-health/SKILL.md +0 -0
  212. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/provision-calling/SKILL.md +0 -0
  213. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/SKILL.md +0 -0
  214. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/call-flow-trace.md +0 -0
  215. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/call-history.md +0 -0
  216. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/features.md +0 -0
  217. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/numbers.md +0 -0
  218. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/people-and-settings.md +0 -0
  219. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/query-live/domains/routing.md +0 -0
  220. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/reporting/SKILL.md +0 -0
  221. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/reporting/references/cdr-recipes.md +0 -0
  222. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/reporting-cc/SKILL.md +0 -0
  223. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/reporting-meetings/SKILL.md +0 -0
  224. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/teardown/SKILL.md +0 -0
  225. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/video-mesh/SKILL.md +0 -0
  226. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/.codex/skills/wxc-calling-debug/SKILL.md +0 -0
  227. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/AGENTS.md +0 -0
  228. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/CLAUDE.md +0 -0
  229. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-css-routing.md +0 -0
  230. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-device-migration.md +0 -0
  231. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-feature-mapping.md +0 -0
  232. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-identity-numbering.md +0 -0
  233. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-location-design.md +0 -0
  234. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-trunk-pstn.md +0 -0
  235. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-user-settings.md +0 -0
  236. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/knowledge-base/migration/kb-webex-limits.md +0 -0
  237. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/CLAUDE.md +0 -0
  238. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-apps-data.md +0 -0
  239. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-audit-security.md +0 -0
  240. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-hybrid.md +0 -0
  241. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-identity-scim.md +0 -0
  242. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-licensing.md +0 -0
  243. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-org-management.md +0 -0
  244. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/admin-partner.md +0 -0
  245. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxc-sdk-patterns.md +0 -0
  246. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-advanced.md +0 -0
  247. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-core.md +0 -0
  248. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-devices-workspaces.md +0 -0
  249. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-features.md +0 -0
  250. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-locations.md +0 -0
  251. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-person.md +0 -0
  252. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/archive/wxcadm-routing.md +0 -0
  253. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/authentication.md +0 -0
  254. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/call-control.md +0 -0
  255. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/call-features-additional.md +0 -0
  256. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/call-features-major.md +0 -0
  257. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/call-routing.md +0 -0
  258. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/contact-center-analytics.md +0 -0
  259. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/contact-center-core.md +0 -0
  260. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/contact-center-journey.md +0 -0
  261. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/devices-core.md +0 -0
  262. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/devices-dect.md +0 -0
  263. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/devices-platform.md +0 -0
  264. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/devices-workspaces.md +0 -0
  265. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/emergency-services.md +0 -0
  266. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/location-calling-core.md +0 -0
  267. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/location-calling-media.md +0 -0
  268. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/location-recording-advanced.md +0 -0
  269. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/meetings-content.md +0 -0
  270. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/meetings-infrastructure.md +0 -0
  271. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/meetings-settings.md +0 -0
  272. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/messaging-bots.md +0 -0
  273. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/messaging-spaces.md +0 -0
  274. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/person-call-settings-behavior.md +0 -0
  275. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/person-call-settings-handling.md +0 -0
  276. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/person-call-settings-media.md +0 -0
  277. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/person-call-settings-permissions.md +0 -0
  278. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/provisioning.md +0 -0
  279. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/reporting-analytics.md +0 -0
  280. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/self-service-call-settings.md +0 -0
  281. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/virtual-lines.md +0 -0
  282. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/webhooks-events.md +0 -0
  283. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/reference/wxcadm-xsi-realtime.md +0 -0
  284. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/runbooks/cucm-migration/decision-guide.md +0 -0
  285. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/runbooks/cucm-migration/operator-runbook.md +0 -0
  286. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/_playbook/docs/runbooks/cucm-migration/tuning-reference.md +0 -0
  287. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/__init__.py +0 -0
  288. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/_registry.py +0 -0
  289. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/activation_email.py +0 -0
  290. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/analytics.py +0 -0
  291. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/announcement_playlists.py +0 -0
  292. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/announcements.py +0 -0
  293. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/archive_users.py +0 -0
  294. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/attachment_actions.py +0 -0
  295. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/audit_events.py +0 -0
  296. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/authorizations.py +0 -0
  297. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/auto_attendant.py +0 -0
  298. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/broadworks_billing_reports.py +0 -0
  299. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/broadworks_enterprises.py +0 -0
  300. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/broadworks_subscribers.py +0 -0
  301. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/broadworks_workspaces.py +0 -0
  302. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_controls.py +0 -0
  303. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_park.py +0 -0
  304. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_pickup.py +0 -0
  305. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_recording.py +0 -0
  306. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_routing.py +0 -0
  307. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/call_settings_for_me_phase_5.py +0 -0
  308. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/caller_reputation.py +0 -0
  309. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/calling_service.py +0 -0
  310. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_address_book.py +0 -0
  311. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_agent_greetings.py +0 -0
  312. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_agent_summaries.py +0 -0
  313. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_agent_wellbeing.py +0 -0
  314. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_agents.py +0 -0
  315. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_ai_assistant.py +0 -0
  316. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_ai_feature.py +0 -0
  317. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_audio_files.py +0 -0
  318. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_auto_csat.py +0 -0
  319. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_aux_code.py +0 -0
  320. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_business_hour.py +0 -0
  321. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_call_monitoring.py +0 -0
  322. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_callbacks.py +0 -0
  323. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_campaign.py +0 -0
  324. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_captures.py +0 -0
  325. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_contact_list.py +0 -0
  326. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_contact_number.py +0 -0
  327. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_data_sources.py +0 -0
  328. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_desktop_layout.py +0 -0
  329. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_desktop_profile.py +0 -0
  330. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_dial_number.py +0 -0
  331. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_dial_plan.py +0 -0
  332. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_dnc.py +0 -0
  333. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_entry_point.py +0 -0
  334. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_ewt.py +0 -0
  335. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_global_vars.py +0 -0
  336. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_holiday_list.py +0 -0
  337. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_journey.py +0 -0
  338. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_legacy_flows.py +0 -0
  339. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_multimedia_profile.py +0 -0
  340. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_notification.py +0 -0
  341. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_outdial_ani.py +0 -0
  342. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_overrides.py +0 -0
  343. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_queue.py +0 -0
  344. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_queue_stats.py +0 -0
  345. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_realtime.py +0 -0
  346. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_resource_collection.py +0 -0
  347. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_search.py +0 -0
  348. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_site.py +0 -0
  349. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_skill.py +0 -0
  350. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_skill_profile.py +0 -0
  351. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_subscriptions.py +0 -0
  352. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_summaries.py +0 -0
  353. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_tasks.py +0 -0
  354. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_team.py +0 -0
  355. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_user_profiles.py +0 -0
  356. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_users.py +0 -0
  357. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cc_work_types.py +0 -0
  358. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cdr.py +0 -0
  359. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/classifications.py +0 -0
  360. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cleanup.py +0 -0
  361. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/client_settings.py +0 -0
  362. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/conference.py +0 -0
  363. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/configure.py +0 -0
  364. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/converged_recordings_export.py +0 -0
  365. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cq_playlists.py +0 -0
  366. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cucm.py +0 -0
  367. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/cucm_config.py +0 -0
  368. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/customer_assist.py +0 -0
  369. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/data_sources.py +0 -0
  370. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/device_configurations.py +0 -0
  371. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/device_dynamic_settings.py +0 -0
  372. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/devices.py +0 -0
  373. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/domains.py +0 -0
  374. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/ecm.py +0 -0
  375. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/emergency_services.py +0 -0
  376. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/events.py +0 -0
  377. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/external_voicemail.py +0 -0
  378. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/groups.py +0 -0
  379. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/guest_management.py +0 -0
  380. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hds.py +0 -0
  381. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hot_desk.py +0 -0
  382. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hot_desking_members.py +0 -0
  383. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hot_desking_portal.py +0 -0
  384. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hunt_group.py +0 -0
  385. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hybrid_clusters.py +0 -0
  386. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/hybrid_connectors.py +0 -0
  387. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/identity_org.py +0 -0
  388. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/init_playbook.py +0 -0
  389. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/licenses.py +0 -0
  390. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/live_monitoring.py +0 -0
  391. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/location_call_handling.py +0 -0
  392. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/location_schedules.py +0 -0
  393. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/location_settings.py +0 -0
  394. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/location_voicemail.py +0 -0
  395. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/locations.py +0 -0
  396. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_captions.py +0 -0
  397. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_chats.py +0 -0
  398. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_invitees.py +0 -0
  399. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_messages.py +0 -0
  400. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_participants.py +0 -0
  401. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_polls.py +0 -0
  402. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_preferences.py +0 -0
  403. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_qa.py +0 -0
  404. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_qualities.py +0 -0
  405. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_reports.py +0 -0
  406. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_session_types.py +0 -0
  407. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_site.py +0 -0
  408. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_slido.py +0 -0
  409. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_summaries.py +0 -0
  410. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meeting_tracking_codes.py +0 -0
  411. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/meetings.py +0 -0
  412. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/memberships.py +0 -0
  413. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/messages.py +0 -0
  414. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/mode_management.py +0 -0
  415. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/my_call_settings.py +0 -0
  416. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/operating_modes.py +0 -0
  417. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/org_contacts.py +0 -0
  418. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/org_health_cli.py +0 -0
  419. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/org_settings.py +0 -0
  420. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/organizations.py +0 -0
  421. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/paging_group.py +0 -0
  422. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/partner_admins.py +0 -0
  423. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/partner_reports.py +0 -0
  424. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/partner_tags.py +0 -0
  425. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/people.py +0 -0
  426. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/person_call_settings.py +0 -0
  427. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/pstn.py +0 -0
  428. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/recording_report.py +0 -0
  429. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/report_templates.py +0 -0
  430. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/reports.py +0 -0
  431. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/resource_group_memberships.py +0 -0
  432. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/resource_groups.py +0 -0
  433. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/roles.py +0 -0
  434. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/room_tabs.py +0 -0
  435. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/rooms.py +0 -0
  436. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/scim_bulk.py +0 -0
  437. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/scim_groups.py +0 -0
  438. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/scim_schemas.py +0 -0
  439. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/scim_users.py +0 -0
  440. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/security_audit.py +0 -0
  441. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/service_apps.py +0 -0
  442. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/single_number_reach.py +0 -0
  443. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/team_memberships.py +0 -0
  444. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/teams.py +0 -0
  445. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/ucm_profile.py +0 -0
  446. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/update.py +0 -0
  447. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/user_settings.py +0 -0
  448. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/video_mesh.py +0 -0
  449. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/virtual_extensions.py +0 -0
  450. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/virtual_line_settings.py +0 -0
  451. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/webhooks.py +0 -0
  452. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/wholesale_billing_reports.py +0 -0
  453. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/wholesale_provisioning.py +0 -0
  454. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspace_locations.py +0 -0
  455. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspace_metrics.py +0 -0
  456. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspace_personalization.py +0 -0
  457. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspace_settings.py +0 -0
  458. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/workspaces.py +0 -0
  459. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/commands/xapi.py +0 -0
  460. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/config.py +0 -0
  461. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/errors.py +0 -0
  462. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/main.py +0 -0
  463. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/CLAUDE.md +0 -0
  464. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/__init__.py +0 -0
  465. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/CLAUDE.md +0 -0
  466. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/__init__.py +0 -0
  467. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/advisor.py +0 -0
  468. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/advisory_patterns.py +0 -0
  469. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/advisory/recommendation_rules.py +0 -0
  470. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/CLAUDE.md +0 -0
  471. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/__init__.py +0 -0
  472. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/connection.py +0 -0
  473. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/discovery.py +0 -0
  474. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/__init__.py +0 -0
  475. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/announcements.py +0 -0
  476. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/base.py +0 -0
  477. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/device_profiles.py +0 -0
  478. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/devices.py +0 -0
  479. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/e911.py +0 -0
  480. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/features.py +0 -0
  481. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/helpers.py +0 -0
  482. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/informational.py +0 -0
  483. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/locations.py +0 -0
  484. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/moh.py +0 -0
  485. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/remote_destinations.py +0 -0
  486. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/routing.py +0 -0
  487. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/shared_lines.py +0 -0
  488. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/templates.py +0 -0
  489. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/tier4.py +0 -0
  490. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/users.py +0 -0
  491. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/voicemail.py +0 -0
  492. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/extractors/workspaces.py +0 -0
  493. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/cucm/unity_connection.py +0 -0
  494. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/CLAUDE.md +0 -0
  495. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/__init__.py +0 -0
  496. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/batch.py +0 -0
  497. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/dependency.py +0 -0
  498. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/engine.py +0 -0
  499. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/handlers.py +0 -0
  500. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/planner.py +0 -0
  501. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/execute/runtime.py +0 -0
  502. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/CLAUDE.md +0 -0
  503. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/__init__.py +0 -0
  504. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/csv_export.py +0 -0
  505. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/deployment_plan.py +0 -0
  506. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/export/json_export.py +0 -0
  507. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/models.py +0 -0
  508. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/phone_models.py +0 -0
  509. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/preflight/CLAUDE.md +0 -0
  510. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/preflight/__init__.py +0 -0
  511. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/preflight/checks.py +0 -0
  512. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/rate_limiter.py +0 -0
  513. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/CLAUDE.md +0 -0
  514. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/__init__.py +0 -0
  515. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/appendix.py +0 -0
  516. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/assembler.py +0 -0
  517. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/charts.py +0 -0
  518. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/executive.py +0 -0
  519. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/explainer.py +0 -0
  520. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/helpers.py +0 -0
  521. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/ingest.py +0 -0
  522. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/notice_templates.py +0 -0
  523. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/score.py +0 -0
  524. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/styles.py +0 -0
  525. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/user_diff.py +0 -0
  526. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/report/user_notice.py +0 -0
  527. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/state.py +0 -0
  528. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/store.py +0 -0
  529. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/CLAUDE.md +0 -0
  530. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/__init__.py +0 -0
  531. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analysis_pipeline.py +0 -0
  532. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/__init__.py +0 -0
  533. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/css_permission.py +0 -0
  534. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/css_routing.py +0 -0
  535. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/device_compatibility.py +0 -0
  536. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/dn_ambiguity.py +0 -0
  537. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/duplicate_user.py +0 -0
  538. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/extension_conflict.py +0 -0
  539. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/feature_approximation.py +0 -0
  540. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/layout_overflow.py +0 -0
  541. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/location_ambiguity.py +0 -0
  542. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/missing_data.py +0 -0
  543. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/selective_call_handling.py +0 -0
  544. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/shared_line.py +0 -0
  545. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/voicemail_compatibility.py +0 -0
  546. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/analyzers/workspace_license.py +0 -0
  547. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/cross_reference.py +0 -0
  548. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/cucm_pattern.py +0 -0
  549. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/decisions.py +0 -0
  550. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/e164.py +0 -0
  551. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/engine.py +0 -0
  552. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/CLAUDE.md +0 -0
  553. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/__init__.py +0 -0
  554. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/announcement_mapper.py +0 -0
  555. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/base.py +0 -0
  556. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/button_template_mapper.py +0 -0
  557. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/call_forwarding_mapper.py +0 -0
  558. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/call_settings_mapper.py +0 -0
  559. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/css_mapper.py +0 -0
  560. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/dect_mapper.py +0 -0
  561. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/device_layout_mapper.py +0 -0
  562. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/device_mapper.py +0 -0
  563. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/device_profile_mapper.py +0 -0
  564. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/device_settings_mapper.py +0 -0
  565. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/e911_mapper.py +0 -0
  566. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/ecbn_mapper.py +0 -0
  567. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/executive_assistant_mapper.py +0 -0
  568. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/feature_mapper.py +0 -0
  569. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/line_mapper.py +0 -0
  570. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/location_mapper.py +0 -0
  571. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/moh_mapper.py +0 -0
  572. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/monitoring_mapper.py +0 -0
  573. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/receptionist_mapper.py +0 -0
  574. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/routing_mapper.py +0 -0
  575. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/snr_mapper.py +0 -0
  576. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/softkey_mapper.py +0 -0
  577. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/user_mapper.py +0 -0
  578. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/voicemail_group_mapper.py +0 -0
  579. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/voicemail_mapper.py +0 -0
  580. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/mappers/workspace_mapper.py +0 -0
  581. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/normalizers.py +0 -0
  582. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/pattern_converter.py +0 -0
  583. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/pipeline.py +0 -0
  584. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/migration/transform/rules.py +0 -0
  585. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/CLAUDE.md +0 -0
  586. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/__init__.py +0 -0
  587. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/analyze.py +0 -0
  588. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/checks.py +0 -0
  589. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/collector.py +0 -0
  590. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/models.py +0 -0
  591. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/org_health/report.py +0 -0
  592. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/output.py +0 -0
  593. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli/update_check.py +0 -0
  594. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/SOURCES.txt +0 -0
  595. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/dependency_links.txt +0 -0
  596. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/entry_points.txt +0 -0
  597. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/requires.txt +0 -0
  598. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/scm_file_list.json +0 -0
  599. {wxcli-1.4.1 → wxcli-1.4.2}/src/wxcli.egg-info/top_level.txt +0 -0
  600. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/__init__.py +0 -0
  601. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/__init__.py +0 -0
  602. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisor.py +0 -0
  603. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisory_executive_assistant.py +0 -0
  604. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisory_intercept.py +0 -0
  605. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisory_patterns.py +0 -0
  606. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_advisory_selective.py +0 -0
  607. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_foundation.py +0 -0
  608. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_integration.py +0 -0
  609. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_new_patterns.py +0 -0
  610. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_receptionist_advisory.py +0 -0
  611. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_recommendation_rules.py +0 -0
  612. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_recommendation_rules_tier2p2.py +0 -0
  613. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_recommendation_selective.py +0 -0
  614. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/advisory/test_tier4_patterns.py +0 -0
  615. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/__init__.py +0 -0
  616. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/fixtures/__init__.py +0 -0
  617. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_connection.py +0 -0
  618. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_cpc_detail_fetch.py +0 -0
  619. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_device_settings_tags.py +0 -0
  620. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_discovery.py +0 -0
  621. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_executive_assistant_extractor.py +0 -0
  622. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_extractors.py +0 -0
  623. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_informational_extractor.py +0 -0
  624. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_intercept_extractor.py +0 -0
  625. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_template_extractor.py +0 -0
  626. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_tier4_extractor.py +0 -0
  627. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/cucm/test_unity_shared_mailboxes.py +0 -0
  628. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/__init__.py +0 -0
  629. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/conftest.py +0 -0
  630. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_advisory_to_execution_bridge.py +0 -0
  631. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_batch.py +0 -0
  632. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bridge_integration.py +0 -0
  633. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_batch.py +0 -0
  634. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_config.py +0 -0
  635. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_constants.py +0 -0
  636. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_e2e.py +0 -0
  637. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_fallback.py +0 -0
  638. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_handlers.py +0 -0
  639. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_integration.py +0 -0
  640. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_planner.py +0 -0
  641. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_polling.py +0 -0
  642. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_bulk_serialization.py +0 -0
  643. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_cascade_and_retry.py +0 -0
  644. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_dect_handlers.py +0 -0
  645. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_dect_planner.py +0 -0
  646. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_dependency.py +0 -0
  647. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_device_settings_handlers.py +0 -0
  648. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_device_settings_planner.py +0 -0
  649. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_engine.py +0 -0
  650. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_engine_409_recovery.py +0 -0
  651. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_executive_assistant_handlers.py +0 -0
  652. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_handlers.py +0 -0
  653. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_handlers_forwarding.py +0 -0
  654. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_handlers_workspace_settings.py +0 -0
  655. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_hoteling_handlers.py +0 -0
  656. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_phase12a_planner_fixes.py +0 -0
  657. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_planner.py +0 -0
  658. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_planner_forwarding.py +0 -0
  659. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_planner_settings_ops.py +0 -0
  660. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_planner_silent_skip_visibility.py +0 -0
  661. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_receptionist_handler.py +0 -0
  662. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_runtime.py +0 -0
  663. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave1.py +0 -0
  664. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave2a.py +0 -0
  665. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave2b.py +0 -0
  666. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave2c.py +0 -0
  667. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave3a.py +0 -0
  668. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_silent_failure_wave3b.py +0 -0
  669. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_voicemail_group_handler.py +0 -0
  670. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/execute/test_voicemail_group_planner.py +0 -0
  671. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/export/__init__.py +0 -0
  672. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/export/test_csv_activation_codes.py +0 -0
  673. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/export/test_deployment_plan.py +0 -0
  674. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/preflight/__init__.py +0 -0
  675. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/preflight/test_checks.py +0 -0
  676. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/preflight/test_runner.py +0 -0
  677. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/__init__.py +0 -0
  678. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/conftest.py +0 -0
  679. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_appendix.py +0 -0
  680. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_appendix_selective.py +0 -0
  681. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_appendix_tier2p2.py +0 -0
  682. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_appendix_tier3.py +0 -0
  683. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_assembler.py +0 -0
  684. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_cli_integration.py +0 -0
  685. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_dect_appendix.py +0 -0
  686. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_device_settings_score.py +0 -0
  687. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_e2e.py +0 -0
  688. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_executive.py +0 -0
  689. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_executive_selective.py +0 -0
  690. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_explainer.py +0 -0
  691. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_from_file.py +0 -0
  692. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_helpers.py +0 -0
  693. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_score.py +0 -0
  694. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_tier4_appendix.py +0 -0
  695. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_user_diff.py +0 -0
  696. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/report/test_user_notice.py +0 -0
  697. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_cucm_cli.py +0 -0
  698. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_decision_cli.py +0 -0
  699. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_dect_integration.py +0 -0
  700. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_device_settings_lossy_type.py +0 -0
  701. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_models.py +0 -0
  702. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_models_tier2p2.py +0 -0
  703. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_models_voicemail_group.py +0 -0
  704. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_pipeline_e2e.py +0 -0
  705. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_rate_limiter.py +0 -0
  706. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_state.py +0 -0
  707. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/test_store.py +0 -0
  708. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/__init__.py +0 -0
  709. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/conftest.py +0 -0
  710. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_advisor_routing_coverage.py +0 -0
  711. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_advisory_pattern_coverage.py +0 -0
  712. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_config_key_coverage.py +0 -0
  713. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_decision_type_coverage.py +0 -0
  714. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_default_auto_rules_coverage.py +0 -0
  715. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_recommendation_output_coverage.py +0 -0
  716. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_runbook_cites.py +0 -0
  717. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_runbook_cli_commands.py +0 -0
  718. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_runbook_links.py +0 -0
  719. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_runbook_parsability.py +0 -0
  720. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transferability/test_score_factor_display_names.py +0 -0
  721. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/__init__.py +0 -0
  722. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/analyzers/__init__.py +0 -0
  723. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/analyzers/test_each_analyzer.py +0 -0
  724. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/analyzers/test_layout_overflow.py +0 -0
  725. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/conftest.py +0 -0
  726. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/__init__.py +0 -0
  727. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_announcement_mapper.py +0 -0
  728. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_button_template_mapper.py +0 -0
  729. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_call_forwarding_mapper.py +0 -0
  730. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_call_settings_mapper.py +0 -0
  731. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_call_settings_mapper_intercept.py +0 -0
  732. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_css_mapper.py +0 -0
  733. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_dect_mapper.py +0 -0
  734. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_layout_mapper.py +0 -0
  735. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_layout_mapper_convertible.py +0 -0
  736. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_mapper.py +0 -0
  737. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_profile_mapper.py +0 -0
  738. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_device_settings_mapper.py +0 -0
  739. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_e911_mapper.py +0 -0
  740. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_executive_assistant_mapper.py +0 -0
  741. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_feature_mapper.py +0 -0
  742. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_feature_mapper_forwarding.py +0 -0
  743. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_feature_mapper_voicemail_gap.py +0 -0
  744. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_line_mapper.py +0 -0
  745. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_location_mapper.py +0 -0
  746. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_moh_mapper.py +0 -0
  747. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_monitoring_mapper.py +0 -0
  748. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_phase12a_feature_fixes.py +0 -0
  749. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_receptionist_mapper.py +0 -0
  750. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_routing_mapper.py +0 -0
  751. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_snr_mapper.py +0 -0
  752. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_softkey_mapper.py +0 -0
  753. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_user_mapper.py +0 -0
  754. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_voicemail_enrichment.py +0 -0
  755. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_voicemail_group_mapper.py +0 -0
  756. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_voicemail_mapper.py +0 -0
  757. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_workspace_mapper.py +0 -0
  758. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/mappers/test_workspace_mapper_call_settings.py +0 -0
  759. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_analysis_pipeline.py +0 -0
  760. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_classify_decisions.py +0 -0
  761. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cpc_cross_ref.py +0 -0
  762. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cross_decision_enrichment.py +0 -0
  763. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cross_ref_phone_mirror.py +0 -0
  764. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cross_ref_tier2p2.py +0 -0
  765. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cross_reference.py +0 -0
  766. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_cucm_pattern.py +0 -0
  767. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_decision_merge.py +0 -0
  768. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_dect_classification.py +0 -0
  769. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_default_auto_rules_field_alignment.py +0 -0
  770. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_e164.py +0 -0
  771. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_engine.py +0 -0
  772. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_executive_assistant_integration.py +0 -0
  773. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_integration.py +0 -0
  774. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_intercept_integration.py +0 -0
  775. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalize_phone_device_settings.py +0 -0
  776. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers.py +0 -0
  777. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers_executive.py +0 -0
  778. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers_intercept.py +0 -0
  779. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers_tier2p2.py +0 -0
  780. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_normalizers_voicemail_group.py +0 -0
  781. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_pattern_converter.py +0 -0
  782. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_phase12a_analyzer_routing_fixes.py +0 -0
  783. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_pipeline.py +0 -0
  784. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_pipeline_common_area.py +0 -0
  785. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_rules.py +0 -0
  786. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_selective_call_handling_analyzer.py +0 -0
  787. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_selective_integration.py +0 -0
  788. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_shared_line_status.py +0 -0
  789. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_voicemail_group_integration.py +0 -0
  790. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_voicemail_group_pipeline.py +0 -0
  791. {wxcli-1.4.1 → wxcli-1.4.2}/tests/migration/transform/test_workspace_call_settings_integration.py +0 -0
  792. {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/__init__.py +0 -0
  793. {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/conftest.py +0 -0
  794. {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_analyze.py +0 -0
  795. {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_checks.py +0 -0
  796. {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_cli.py +0 -0
  797. {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_collector.py +0 -0
  798. {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_models.py +0 -0
  799. {wxcli-1.4.1 → wxcli-1.4.2}/tests/org_health/test_report.py +0 -0
  800. {wxcli-1.4.1 → wxcli-1.4.2}/tools/__init__.py +0 -0
  801. {wxcli-1.4.1 → wxcli-1.4.2}/tools/create_stress_test_db.py +0 -0
  802. {wxcli-1.4.1 → wxcli-1.4.2}/tools/drift_check.py +0 -0
  803. {wxcli-1.4.1 → wxcli-1.4.2}/tools/drift_check_allowlist.txt +0 -0
  804. {wxcli-1.4.1 → wxcli-1.4.2}/tools/expand_cucm_data.py +0 -0
  805. {wxcli-1.4.1 → wxcli-1.4.2}/tools/postman_parser.py +0 -0
  806. {wxcli-1.4.1 → wxcli-1.4.2}/tools/postman_spec_diff.py +0 -0
  807. {wxcli-1.4.1 → wxcli-1.4.2}/tools/spec_overlay.py +0 -0
  808. {wxcli-1.4.1 → wxcli-1.4.2}/tools/update-specs.py +0 -0
  809. {wxcli-1.4.1 → wxcli-1.4.2}/tools/webhook_receiver.py +0 -0
  810. {wxcli-1.4.1 → wxcli-1.4.2}/tools/wheel_playbook_smoke.py +0 -0
  811. {wxcli-1.4.1 → wxcli-1.4.2}/wxcli-dist/assemble.py +0 -0
  812. {wxcli-1.4.1 → wxcli-1.4.2}/wxcli-dist/codex/agents-md-sections.md +0 -0
  813. {wxcli-1.4.1 → wxcli-1.4.2}/wxcli-dist/codex/config.toml +0 -0
  814. {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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wxcli
3
- Version: 1.4.1
3
+ Version: 1.4.2
4
4
  Summary: Webex Calling CLI — terminal-based provisioning for Webex APIs
5
5
  Author: Adam Hobgood
6
6
  License: Apache-2.0
@@ -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 variation before EWT is withheld
379
- - `--min-valid-samples` -- Minimum samples required for a valid EWT
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 variation before EWT is withheld
379
- - `--min-valid-samples` -- Minimum samples required for a valid EWT
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.1'
22
- __version_tuple__ = version_tuple = (1, 4, 1)
21
+ __version__ = version = '1.4.2'
22
+ __version_tuple__ = version_tuple = (1, 4, 2)
23
23
 
24
- __commit_id__ = commit_id = 'g4f3bfa7f3'
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
- return self._json_or_raise(self._request("DELETE", url, params=params))
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 to true then a different paginated response object"),
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("errors", result.get("data", result if isinstance(result, list) else [])) if isinstance(result, dict) else (result if isinstance(result, list) else [])
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-api", "list", "--output", "json"]) if _needs("licenses", "workspace-licenses") else []
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 []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wxcli
3
- Version: 1.4.1
3
+ Version: 1.4.2
4
4
  Summary: Webex Calling CLI — terminal-based provisioning for Webex APIs
5
5
  Author: Adam Hobgood
6
6
  License: Apache-2.0
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "1.4.1",
2
+ "tag": "1.4.2",
3
3
  "distance": 0,
4
- "node": "g4f3bfa7f3b3ade161957468885f47d563509b8e0",
4
+ "node": "g9318ddb895bd9aa5d50d4ec9d694adcadfe5789e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-07-14"
@@ -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 drops `requestBody` on DELETE, so scoped deletes silently become delete-everything.** UNFIXED — logged 2026-07-14, found while fixing doc flag drift. 10 tracked spec operations declare a DELETE request body; **none** of the generated commands can send one (no `--json-body`, no fields). The body is what *narrows* these deletes, so losing it does not fail — it widens the blast radius:
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
- | Command | Body the spec defines | Effect without it |
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
- This is the same family as #20 (a name/behaviour mismatch the generator can see but does not act on) and compounds it: the widened delete is reached through a command whose `--help` gives no hint the scoping input exists.
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
- Detection: `op.get("requestBody")` on a `delete` operation, cross-referenced against the rendered command's flags — the check that surfaced this is ~10 lines.
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
- Fix when triaged: render `--json-body` for DELETE bodies exactly as for PUT/POST (the renderer already knows how; the DELETE branch just never asks). Until then the CLI cannot scope these deletes at all, and the docs say so explicitly rather than showing a `--json-body` that does not exist — `manage-devices/SKILL.md` and `customer-assist/SKILL.md` carry the warning and the raw-HTTP fallback.
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
- delete_call = "api.session.rest_delete(url)" if not has_params else "api.session.rest_delete(url, params=params)"
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: