wxcli 1.2.0__py3-none-any.whl

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 (413) hide show
  1. wxcli/__init__.py +4 -0
  2. wxcli/_playbook/.claude/agents/migration-advisor.md +239 -0
  3. wxcli/_playbook/.claude/agents/wxc-calling-builder.md +946 -0
  4. wxcli/_playbook/.claude/rules/cleanup.md +29 -0
  5. wxcli/_playbook/.claude/rules/cucm-migration.md +58 -0
  6. wxcli/_playbook/.claude/rules/org-health.md +14 -0
  7. wxcli/_playbook/.claude/settings.json +8 -0
  8. wxcli/_playbook/.claude/skills/audit-compliance/SKILL.md +515 -0
  9. wxcli/_playbook/.claude/skills/call-control/SKILL.md +747 -0
  10. wxcli/_playbook/.claude/skills/configure-features/SKILL.md +623 -0
  11. wxcli/_playbook/.claude/skills/configure-routing/SKILL.md +627 -0
  12. wxcli/_playbook/.claude/skills/contact-center/SKILL.md +1181 -0
  13. wxcli/_playbook/.claude/skills/cucm-migrate/SKILL.md +820 -0
  14. wxcli/_playbook/.claude/skills/customer-assist/SKILL.md +443 -0
  15. wxcli/_playbook/.claude/skills/device-platform/SKILL.md +407 -0
  16. wxcli/_playbook/.claude/skills/manage-call-settings/SKILL.md +757 -0
  17. wxcli/_playbook/.claude/skills/manage-devices/SKILL.md +790 -0
  18. wxcli/_playbook/.claude/skills/manage-identity/SKILL.md +638 -0
  19. wxcli/_playbook/.claude/skills/manage-licensing/SKILL.md +528 -0
  20. wxcli/_playbook/.claude/skills/manage-meetings/SKILL.md +708 -0
  21. wxcli/_playbook/.claude/skills/messaging-bots/SKILL.md +365 -0
  22. wxcli/_playbook/.claude/skills/messaging-spaces/SKILL.md +520 -0
  23. wxcli/_playbook/.claude/skills/org-health/SKILL.md +159 -0
  24. wxcli/_playbook/.claude/skills/provision-calling/SKILL.md +421 -0
  25. wxcli/_playbook/.claude/skills/query-live/SKILL.md +183 -0
  26. wxcli/_playbook/.claude/skills/query-live/domains/call-flow-trace.md +223 -0
  27. wxcli/_playbook/.claude/skills/query-live/domains/call-history.md +44 -0
  28. wxcli/_playbook/.claude/skills/query-live/domains/features.md +169 -0
  29. wxcli/_playbook/.claude/skills/query-live/domains/numbers.md +93 -0
  30. wxcli/_playbook/.claude/skills/query-live/domains/people-and-settings.md +146 -0
  31. wxcli/_playbook/.claude/skills/query-live/domains/routing.md +124 -0
  32. wxcli/_playbook/.claude/skills/reporting/SKILL.md +501 -0
  33. wxcli/_playbook/.claude/skills/reporting/references/cdr-recipes.md +1628 -0
  34. wxcli/_playbook/.claude/skills/reporting-cc/SKILL.md +251 -0
  35. wxcli/_playbook/.claude/skills/reporting-meetings/SKILL.md +290 -0
  36. wxcli/_playbook/.claude/skills/teardown/SKILL.md +214 -0
  37. wxcli/_playbook/.claude/skills/video-mesh/SKILL.md +379 -0
  38. wxcli/_playbook/.claude/skills/wxc-calling-debug/SKILL.md +475 -0
  39. wxcli/_playbook/CLAUDE.md +373 -0
  40. wxcli/_playbook/docs/reference/CLAUDE.md +25 -0
  41. wxcli/_playbook/docs/reference/admin-apps-data.md +643 -0
  42. wxcli/_playbook/docs/reference/admin-audit-security.md +322 -0
  43. wxcli/_playbook/docs/reference/admin-hybrid.md +383 -0
  44. wxcli/_playbook/docs/reference/admin-identity-scim.md +1007 -0
  45. wxcli/_playbook/docs/reference/admin-licensing.md +414 -0
  46. wxcli/_playbook/docs/reference/admin-org-management.md +586 -0
  47. wxcli/_playbook/docs/reference/admin-partner.md +357 -0
  48. wxcli/_playbook/docs/reference/archive/wxc-sdk-patterns.md +1229 -0
  49. wxcli/_playbook/docs/reference/archive/wxcadm-advanced.md +835 -0
  50. wxcli/_playbook/docs/reference/archive/wxcadm-core.md +743 -0
  51. wxcli/_playbook/docs/reference/archive/wxcadm-devices-workspaces.md +1305 -0
  52. wxcli/_playbook/docs/reference/archive/wxcadm-features.md +849 -0
  53. wxcli/_playbook/docs/reference/archive/wxcadm-locations.md +938 -0
  54. wxcli/_playbook/docs/reference/archive/wxcadm-person.md +1255 -0
  55. wxcli/_playbook/docs/reference/archive/wxcadm-routing.md +1262 -0
  56. wxcli/_playbook/docs/reference/authentication.md +965 -0
  57. wxcli/_playbook/docs/reference/call-control.md +1205 -0
  58. wxcli/_playbook/docs/reference/call-features-additional.md +2541 -0
  59. wxcli/_playbook/docs/reference/call-features-major.md +1320 -0
  60. wxcli/_playbook/docs/reference/call-routing.md +2304 -0
  61. wxcli/_playbook/docs/reference/contact-center-analytics.md +1049 -0
  62. wxcli/_playbook/docs/reference/contact-center-core.md +1614 -0
  63. wxcli/_playbook/docs/reference/contact-center-journey.md +457 -0
  64. wxcli/_playbook/docs/reference/contact-center-routing.md +1138 -0
  65. wxcli/_playbook/docs/reference/devices-core.md +1869 -0
  66. wxcli/_playbook/docs/reference/devices-dect.md +1150 -0
  67. wxcli/_playbook/docs/reference/devices-platform.md +467 -0
  68. wxcli/_playbook/docs/reference/devices-workspaces.md +1426 -0
  69. wxcli/_playbook/docs/reference/emergency-services.md +1122 -0
  70. wxcli/_playbook/docs/reference/location-calling-core.md +2037 -0
  71. wxcli/_playbook/docs/reference/location-calling-media.md +1334 -0
  72. wxcli/_playbook/docs/reference/location-recording-advanced.md +1482 -0
  73. wxcli/_playbook/docs/reference/meetings-content.md +473 -0
  74. wxcli/_playbook/docs/reference/meetings-core.md +903 -0
  75. wxcli/_playbook/docs/reference/meetings-infrastructure.md +899 -0
  76. wxcli/_playbook/docs/reference/meetings-settings.md +850 -0
  77. wxcli/_playbook/docs/reference/messaging-bots.md +1091 -0
  78. wxcli/_playbook/docs/reference/messaging-spaces.md +695 -0
  79. wxcli/_playbook/docs/reference/person-call-settings-behavior.md +1639 -0
  80. wxcli/_playbook/docs/reference/person-call-settings-handling.md +1394 -0
  81. wxcli/_playbook/docs/reference/person-call-settings-media.md +1898 -0
  82. wxcli/_playbook/docs/reference/person-call-settings-permissions.md +1329 -0
  83. wxcli/_playbook/docs/reference/provisioning.md +1366 -0
  84. wxcli/_playbook/docs/reference/reporting-analytics.md +1318 -0
  85. wxcli/_playbook/docs/reference/self-service-call-settings.md +1020 -0
  86. wxcli/_playbook/docs/reference/virtual-lines.md +1132 -0
  87. wxcli/_playbook/docs/reference/webhooks-events.md +1444 -0
  88. wxcli/_playbook/docs/reference/wxcadm-xsi-realtime.md +953 -0
  89. wxcli/_version.py +24 -0
  90. wxcli/auth.py +137 -0
  91. wxcli/commands/__init__.py +0 -0
  92. wxcli/commands/_registry.py +181 -0
  93. wxcli/commands/activation_email.py +103 -0
  94. wxcli/commands/admin_recordings.py +585 -0
  95. wxcli/commands/analytics.py +105 -0
  96. wxcli/commands/announcement_playlists.py +219 -0
  97. wxcli/commands/announcements.py +519 -0
  98. wxcli/commands/archive_users.py +36 -0
  99. wxcli/commands/attachment_actions.py +60 -0
  100. wxcli/commands/audit_events.py +83 -0
  101. wxcli/commands/authorizations.py +113 -0
  102. wxcli/commands/auto_attendant.py +642 -0
  103. wxcli/commands/broadworks_billing_reports.py +126 -0
  104. wxcli/commands/broadworks_enterprises.py +160 -0
  105. wxcli/commands/broadworks_subscribers.py +319 -0
  106. wxcli/commands/broadworks_workspaces.py +108 -0
  107. wxcli/commands/call_controls.py +1304 -0
  108. wxcli/commands/call_park.py +494 -0
  109. wxcli/commands/call_pickup.py +229 -0
  110. wxcli/commands/call_queue.py +1878 -0
  111. wxcli/commands/call_recording.py +707 -0
  112. wxcli/commands/call_routing.py +1610 -0
  113. wxcli/commands/call_settings_for_me_phase_5.py +212 -0
  114. wxcli/commands/caller_reputation.py +169 -0
  115. wxcli/commands/calling_service.py +305 -0
  116. wxcli/commands/cc_address_book.py +770 -0
  117. wxcli/commands/cc_agent_greetings.py +242 -0
  118. wxcli/commands/cc_agent_summaries.py +39 -0
  119. wxcli/commands/cc_agent_wellbeing.py +216 -0
  120. wxcli/commands/cc_agents.py +425 -0
  121. wxcli/commands/cc_ai_assistant.py +55 -0
  122. wxcli/commands/cc_ai_feature.py +294 -0
  123. wxcli/commands/cc_audio_files.py +149 -0
  124. wxcli/commands/cc_auto_csat.py +311 -0
  125. wxcli/commands/cc_aux_code.py +458 -0
  126. wxcli/commands/cc_business_hour.py +353 -0
  127. wxcli/commands/cc_call_monitoring.py +228 -0
  128. wxcli/commands/cc_callbacks.py +194 -0
  129. wxcli/commands/cc_campaign.py +212 -0
  130. wxcli/commands/cc_captures.py +39 -0
  131. wxcli/commands/cc_contact_list.py +169 -0
  132. wxcli/commands/cc_contact_number.py +295 -0
  133. wxcli/commands/cc_data_sources.py +235 -0
  134. wxcli/commands/cc_desktop_layout.py +380 -0
  135. wxcli/commands/cc_desktop_profile.py +322 -0
  136. wxcli/commands/cc_dial_number.py +511 -0
  137. wxcli/commands/cc_dial_plan.py +347 -0
  138. wxcli/commands/cc_dnc.py +101 -0
  139. wxcli/commands/cc_entry_point.py +545 -0
  140. wxcli/commands/cc_ewt.py +51 -0
  141. wxcli/commands/cc_flow.py +477 -0
  142. wxcli/commands/cc_global_vars.py +430 -0
  143. wxcli/commands/cc_holiday_list.py +335 -0
  144. wxcli/commands/cc_journey.py +1261 -0
  145. wxcli/commands/cc_legacy_flows.py +49 -0
  146. wxcli/commands/cc_multimedia_profile.py +436 -0
  147. wxcli/commands/cc_notification.py +51 -0
  148. wxcli/commands/cc_outdial_ani.py +604 -0
  149. wxcli/commands/cc_overrides.py +341 -0
  150. wxcli/commands/cc_queue.py +1083 -0
  151. wxcli/commands/cc_queue_stats.py +55 -0
  152. wxcli/commands/cc_realtime.py +51 -0
  153. wxcli/commands/cc_resource_collection.py +312 -0
  154. wxcli/commands/cc_search.py +46 -0
  155. wxcli/commands/cc_site.py +400 -0
  156. wxcli/commands/cc_skill.py +350 -0
  157. wxcli/commands/cc_skill_profile.py +289 -0
  158. wxcli/commands/cc_subscriptions.py +426 -0
  159. wxcli/commands/cc_summaries.py +130 -0
  160. wxcli/commands/cc_tasks.py +844 -0
  161. wxcli/commands/cc_team.py +325 -0
  162. wxcli/commands/cc_user_profiles.py +349 -0
  163. wxcli/commands/cc_users.py +701 -0
  164. wxcli/commands/cc_work_types.py +363 -0
  165. wxcli/commands/cdr.py +89 -0
  166. wxcli/commands/classifications.py +38 -0
  167. wxcli/commands/cleanup.py +1427 -0
  168. wxcli/commands/client_settings.py +72 -0
  169. wxcli/commands/conference.py +328 -0
  170. wxcli/commands/configure.py +72 -0
  171. wxcli/commands/converged_recordings.py +347 -0
  172. wxcli/commands/converged_recordings_export.py +310 -0
  173. wxcli/commands/cq_playlists.py +42 -0
  174. wxcli/commands/cucm.py +2794 -0
  175. wxcli/commands/cucm_config.py +129 -0
  176. wxcli/commands/customer_assist.py +373 -0
  177. wxcli/commands/data_sources.py +227 -0
  178. wxcli/commands/dect_devices.py +787 -0
  179. wxcli/commands/device_configurations.py +77 -0
  180. wxcli/commands/device_dynamic_settings.py +320 -0
  181. wxcli/commands/device_settings.py +1489 -0
  182. wxcli/commands/devices.py +280 -0
  183. wxcli/commands/domains.py +142 -0
  184. wxcli/commands/ecm.py +178 -0
  185. wxcli/commands/emergency_services.py +827 -0
  186. wxcli/commands/events.py +83 -0
  187. wxcli/commands/external_voicemail.py +52 -0
  188. wxcli/commands/groups.py +206 -0
  189. wxcli/commands/guest_management.py +76 -0
  190. wxcli/commands/hds.py +340 -0
  191. wxcli/commands/hot_desk.py +67 -0
  192. wxcli/commands/hot_desking_members.py +118 -0
  193. wxcli/commands/hot_desking_portal.py +124 -0
  194. wxcli/commands/hunt_group.py +577 -0
  195. wxcli/commands/hybrid_clusters.py +71 -0
  196. wxcli/commands/hybrid_connectors.py +67 -0
  197. wxcli/commands/identity_org.py +159 -0
  198. wxcli/commands/init_playbook.py +155 -0
  199. wxcli/commands/licenses.py +106 -0
  200. wxcli/commands/live_monitoring.py +40 -0
  201. wxcli/commands/location_call_handling.py +577 -0
  202. wxcli/commands/location_schedules.py +341 -0
  203. wxcli/commands/location_settings.py +1297 -0
  204. wxcli/commands/location_voicemail.py +494 -0
  205. wxcli/commands/locations.py +336 -0
  206. wxcli/commands/meeting_captions.py +110 -0
  207. wxcli/commands/meeting_chats.py +63 -0
  208. wxcli/commands/meeting_invitees.py +234 -0
  209. wxcli/commands/meeting_messages.py +28 -0
  210. wxcli/commands/meeting_participants.py +278 -0
  211. wxcli/commands/meeting_polls.py +111 -0
  212. wxcli/commands/meeting_preferences.py +515 -0
  213. wxcli/commands/meeting_qa.py +78 -0
  214. wxcli/commands/meeting_qualities.py +43 -0
  215. wxcli/commands/meeting_reports.py +101 -0
  216. wxcli/commands/meeting_session_types.py +105 -0
  217. wxcli/commands/meeting_site.py +57 -0
  218. wxcli/commands/meeting_slido.py +44 -0
  219. wxcli/commands/meeting_summaries.py +92 -0
  220. wxcli/commands/meeting_tracking_codes.py +233 -0
  221. wxcli/commands/meeting_transcripts.py +230 -0
  222. wxcli/commands/meetings.py +1997 -0
  223. wxcli/commands/memberships.py +164 -0
  224. wxcli/commands/messages.py +213 -0
  225. wxcli/commands/mode_management.py +244 -0
  226. wxcli/commands/my_call_settings.py +3577 -0
  227. wxcli/commands/numbers.py +405 -0
  228. wxcli/commands/operating_modes.py +410 -0
  229. wxcli/commands/org_contacts.py +284 -0
  230. wxcli/commands/org_health_cli.py +55 -0
  231. wxcli/commands/org_settings.py +71 -0
  232. wxcli/commands/organizations.py +83 -0
  233. wxcli/commands/paging_group.py +257 -0
  234. wxcli/commands/partner_admins.py +141 -0
  235. wxcli/commands/partner_reports.py +188 -0
  236. wxcli/commands/partner_tags.py +216 -0
  237. wxcli/commands/people.py +279 -0
  238. wxcli/commands/person_call_settings.py +71 -0
  239. wxcli/commands/pstn.py +280 -0
  240. wxcli/commands/recording_report.py +154 -0
  241. wxcli/commands/report_templates.py +38 -0
  242. wxcli/commands/reports.py +144 -0
  243. wxcli/commands/resource_group_memberships.py +160 -0
  244. wxcli/commands/resource_groups.py +67 -0
  245. wxcli/commands/roles.py +63 -0
  246. wxcli/commands/room_tabs.py +160 -0
  247. wxcli/commands/rooms.py +225 -0
  248. wxcli/commands/scim_bulk.py +46 -0
  249. wxcli/commands/scim_groups.py +246 -0
  250. wxcli/commands/scim_schemas.py +82 -0
  251. wxcli/commands/scim_users.py +283 -0
  252. wxcli/commands/security_audit.py +54 -0
  253. wxcli/commands/service_apps.py +51 -0
  254. wxcli/commands/single_number_reach.py +209 -0
  255. wxcli/commands/team_memberships.py +155 -0
  256. wxcli/commands/teams.py +153 -0
  257. wxcli/commands/ucm_profile.py +42 -0
  258. wxcli/commands/update.py +219 -0
  259. wxcli/commands/user_settings.py +5116 -0
  260. wxcli/commands/video_mesh.py +1090 -0
  261. wxcli/commands/virtual_extensions.py +502 -0
  262. wxcli/commands/virtual_line_settings.py +2072 -0
  263. wxcli/commands/webhooks.py +176 -0
  264. wxcli/commands/wholesale_billing_reports.py +147 -0
  265. wxcli/commands/wholesale_provisioning.py +523 -0
  266. wxcli/commands/workspace_locations.py +339 -0
  267. wxcli/commands/workspace_metrics.py +103 -0
  268. wxcli/commands/workspace_personalization.py +70 -0
  269. wxcli/commands/workspace_settings.py +3347 -0
  270. wxcli/commands/workspaces.py +279 -0
  271. wxcli/commands/xapi.py +114 -0
  272. wxcli/config.py +139 -0
  273. wxcli/errors.py +77 -0
  274. wxcli/main.py +210 -0
  275. wxcli/migration/CLAUDE.md +106 -0
  276. wxcli/migration/__init__.py +1 -0
  277. wxcli/migration/advisory/CLAUDE.md +196 -0
  278. wxcli/migration/advisory/__init__.py +46 -0
  279. wxcli/migration/advisory/advisor.py +107 -0
  280. wxcli/migration/advisory/advisory_patterns.py +2552 -0
  281. wxcli/migration/advisory/recommendation_rules.py +835 -0
  282. wxcli/migration/cucm/CLAUDE.md +74 -0
  283. wxcli/migration/cucm/__init__.py +5 -0
  284. wxcli/migration/cucm/connection.py +265 -0
  285. wxcli/migration/cucm/discovery.py +225 -0
  286. wxcli/migration/cucm/extractors/__init__.py +1 -0
  287. wxcli/migration/cucm/extractors/announcements.py +92 -0
  288. wxcli/migration/cucm/extractors/base.py +90 -0
  289. wxcli/migration/cucm/extractors/device_profiles.py +98 -0
  290. wxcli/migration/cucm/extractors/devices.py +193 -0
  291. wxcli/migration/cucm/extractors/e911.py +103 -0
  292. wxcli/migration/cucm/extractors/features.py +309 -0
  293. wxcli/migration/cucm/extractors/helpers.py +73 -0
  294. wxcli/migration/cucm/extractors/informational.py +295 -0
  295. wxcli/migration/cucm/extractors/locations.py +221 -0
  296. wxcli/migration/cucm/extractors/moh.py +100 -0
  297. wxcli/migration/cucm/extractors/remote_destinations.py +96 -0
  298. wxcli/migration/cucm/extractors/routing.py +493 -0
  299. wxcli/migration/cucm/extractors/shared_lines.py +146 -0
  300. wxcli/migration/cucm/extractors/templates.py +229 -0
  301. wxcli/migration/cucm/extractors/tier4.py +173 -0
  302. wxcli/migration/cucm/extractors/users.py +240 -0
  303. wxcli/migration/cucm/extractors/voicemail.py +243 -0
  304. wxcli/migration/cucm/extractors/workspaces.py +88 -0
  305. wxcli/migration/cucm/unity_connection.py +304 -0
  306. wxcli/migration/execute/CLAUDE.md +372 -0
  307. wxcli/migration/execute/__init__.py +303 -0
  308. wxcli/migration/execute/batch.py +277 -0
  309. wxcli/migration/execute/dependency.py +483 -0
  310. wxcli/migration/execute/engine.py +964 -0
  311. wxcli/migration/execute/handlers.py +2232 -0
  312. wxcli/migration/execute/planner.py +1939 -0
  313. wxcli/migration/execute/runtime.py +571 -0
  314. wxcli/migration/export/CLAUDE.md +49 -0
  315. wxcli/migration/export/__init__.py +8 -0
  316. wxcli/migration/export/csv_export.py +126 -0
  317. wxcli/migration/export/deployment_plan.py +479 -0
  318. wxcli/migration/export/json_export.py +60 -0
  319. wxcli/migration/models.py +941 -0
  320. wxcli/migration/phone_models.py +50 -0
  321. wxcli/migration/preflight/CLAUDE.md +52 -0
  322. wxcli/migration/preflight/__init__.py +89 -0
  323. wxcli/migration/preflight/checks.py +911 -0
  324. wxcli/migration/preflight/runner.py +293 -0
  325. wxcli/migration/rate_limiter.py +144 -0
  326. wxcli/migration/report/CLAUDE.md +245 -0
  327. wxcli/migration/report/__init__.py +7 -0
  328. wxcli/migration/report/appendix.py +2437 -0
  329. wxcli/migration/report/assembler.py +183 -0
  330. wxcli/migration/report/charts.py +263 -0
  331. wxcli/migration/report/executive.py +776 -0
  332. wxcli/migration/report/explainer.py +704 -0
  333. wxcli/migration/report/helpers.py +74 -0
  334. wxcli/migration/report/ingest.py +152 -0
  335. wxcli/migration/report/notice_templates.py +192 -0
  336. wxcli/migration/report/score.py +375 -0
  337. wxcli/migration/report/styles.py +1052 -0
  338. wxcli/migration/report/user_diff.py +1052 -0
  339. wxcli/migration/report/user_notice.py +425 -0
  340. wxcli/migration/state.py +139 -0
  341. wxcli/migration/store.py +860 -0
  342. wxcli/migration/transform/CLAUDE.md +107 -0
  343. wxcli/migration/transform/__init__.py +12 -0
  344. wxcli/migration/transform/analysis_pipeline.py +453 -0
  345. wxcli/migration/transform/analyzers/__init__.py +142 -0
  346. wxcli/migration/transform/analyzers/css_permission.py +189 -0
  347. wxcli/migration/transform/analyzers/css_routing.py +335 -0
  348. wxcli/migration/transform/analyzers/device_compatibility.py +122 -0
  349. wxcli/migration/transform/analyzers/dn_ambiguity.py +131 -0
  350. wxcli/migration/transform/analyzers/duplicate_user.py +221 -0
  351. wxcli/migration/transform/analyzers/extension_conflict.py +173 -0
  352. wxcli/migration/transform/analyzers/feature_approximation.py +227 -0
  353. wxcli/migration/transform/analyzers/layout_overflow.py +174 -0
  354. wxcli/migration/transform/analyzers/location_ambiguity.py +184 -0
  355. wxcli/migration/transform/analyzers/missing_data.py +300 -0
  356. wxcli/migration/transform/analyzers/selective_call_handling.py +394 -0
  357. wxcli/migration/transform/analyzers/shared_line.py +170 -0
  358. wxcli/migration/transform/analyzers/voicemail_compatibility.py +267 -0
  359. wxcli/migration/transform/analyzers/workspace_license.py +212 -0
  360. wxcli/migration/transform/cross_reference.py +1136 -0
  361. wxcli/migration/transform/cucm_pattern.py +246 -0
  362. wxcli/migration/transform/decisions.py +301 -0
  363. wxcli/migration/transform/e164.py +145 -0
  364. wxcli/migration/transform/engine.py +256 -0
  365. wxcli/migration/transform/mappers/CLAUDE.md +123 -0
  366. wxcli/migration/transform/mappers/__init__.py +76 -0
  367. wxcli/migration/transform/mappers/announcement_mapper.py +122 -0
  368. wxcli/migration/transform/mappers/base.py +190 -0
  369. wxcli/migration/transform/mappers/button_template_mapper.py +186 -0
  370. wxcli/migration/transform/mappers/call_forwarding_mapper.py +228 -0
  371. wxcli/migration/transform/mappers/call_settings_mapper.py +144 -0
  372. wxcli/migration/transform/mappers/css_mapper.py +868 -0
  373. wxcli/migration/transform/mappers/dect_mapper.py +367 -0
  374. wxcli/migration/transform/mappers/device_layout_mapper.py +289 -0
  375. wxcli/migration/transform/mappers/device_mapper.py +227 -0
  376. wxcli/migration/transform/mappers/device_profile_mapper.py +190 -0
  377. wxcli/migration/transform/mappers/device_settings_mapper.py +464 -0
  378. wxcli/migration/transform/mappers/e911_mapper.py +129 -0
  379. wxcli/migration/transform/mappers/ecbn_mapper.py +263 -0
  380. wxcli/migration/transform/mappers/executive_assistant_mapper.py +156 -0
  381. wxcli/migration/transform/mappers/feature_mapper.py +1179 -0
  382. wxcli/migration/transform/mappers/line_mapper.py +310 -0
  383. wxcli/migration/transform/mappers/location_mapper.py +235 -0
  384. wxcli/migration/transform/mappers/moh_mapper.py +114 -0
  385. wxcli/migration/transform/mappers/monitoring_mapper.py +221 -0
  386. wxcli/migration/transform/mappers/receptionist_mapper.py +245 -0
  387. wxcli/migration/transform/mappers/routing_mapper.py +821 -0
  388. wxcli/migration/transform/mappers/snr_mapper.py +201 -0
  389. wxcli/migration/transform/mappers/softkey_mapper.py +205 -0
  390. wxcli/migration/transform/mappers/user_mapper.py +264 -0
  391. wxcli/migration/transform/mappers/voicemail_group_mapper.py +286 -0
  392. wxcli/migration/transform/mappers/voicemail_mapper.py +514 -0
  393. wxcli/migration/transform/mappers/workspace_mapper.py +464 -0
  394. wxcli/migration/transform/normalizers.py +2008 -0
  395. wxcli/migration/transform/pattern_converter.py +106 -0
  396. wxcli/migration/transform/pipeline.py +271 -0
  397. wxcli/migration/transform/rules.py +255 -0
  398. wxcli/org_health/CLAUDE.md +63 -0
  399. wxcli/org_health/__init__.py +7 -0
  400. wxcli/org_health/analyze.py +93 -0
  401. wxcli/org_health/checks.py +458 -0
  402. wxcli/org_health/collector.py +62 -0
  403. wxcli/org_health/models.py +78 -0
  404. wxcli/org_health/report.py +300 -0
  405. wxcli/output.py +101 -0
  406. wxcli-1.2.0.dist-info/METADATA +505 -0
  407. wxcli-1.2.0.dist-info/RECORD +413 -0
  408. wxcli-1.2.0.dist-info/WHEEL +5 -0
  409. wxcli-1.2.0.dist-info/entry_points.txt +2 -0
  410. wxcli-1.2.0.dist-info/licenses/LICENSE +191 -0
  411. wxcli-1.2.0.dist-info/scm_file_list.json +751 -0
  412. wxcli-1.2.0.dist-info/scm_version.json +8 -0
  413. wxcli-1.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,214 @@
1
+ ---
2
+ name: teardown
3
+ description: |
4
+ Tear down Webex Calling resources in dependency-safe order. Covers single-location
5
+ teardown, multi-location bulk cleanup, migration test cleanup, and org reset.
6
+ Use for: delete, remove, clean up, tear down, reset, decommission.
7
+ NOT for: creating/provisioning resources (use provision-calling skill) or
8
+ license reclamation without resource deletion (use manage-licensing skill).
9
+ argument-hint: [scope — e.g. "DP-HQ-Phones", "all GlobalTech locations", "entire org"]
10
+ ---
11
+
12
+ # Teardown Skill
13
+
14
+ Delete Webex Calling resources in the correct dependency order. Use `wxcli cleanup` for automated batch teardown, or follow the manual procedure below.
15
+
16
+ ## Step 1: Load references
17
+
18
+ 1. Read `.claude/rules/cleanup.md` for all cleanup flags, 13-layer deletion order, and known behaviors
19
+ 2. For manual teardown (not using `wxcli cleanup`): Read `docs/reference/call-routing.md` (routing delete semantics) and `docs/reference/devices-core.md` (device delete flow)
20
+
21
+ **Mandatory --help verification:** Before constructing any manual delete command, run `wxcli <group> --help` to verify the delete subcommand name exists, then `wxcli <group> <subcommand> --help` to verify the exact flags. Do NOT guess delete command names — routing deletes use PLURAL names (`delete-route-groups`, not `delete-route-group`). Feature deletes use `--force LOCATION_ID FEATURE_ID` argument order.
22
+
23
+ ---
24
+
25
+ **Checkpoint — do NOT proceed until you can answer these:**
26
+ 1. What resource type must be deleted BEFORE disable-calling can succeed on a location? (Answer: workspaces)
27
+ 2. What is the correct argument order for location-scoped feature deletes? (Answer: `--force LOCATION_ID FEATURE_ID` — location comes FIRST)
28
+ 3. Do routing delete commands use singular or plural names? (Answer: plural — `delete-route-groups` not `delete-route-group`)
29
+
30
+ If you cannot answer all three, you skipped reading this skill. Go back and read it.
31
+
32
+ ## Preferred: `wxcli cleanup` (automated)
33
+
34
+ ```bash
35
+ # Dry-run first — shows what would be deleted
36
+ wxcli cleanup run --scope "Location Name" --dry-run
37
+
38
+ # Delete all resources at specific locations (--include-users deletes users at scoped locations)
39
+ wxcli cleanup run --scope "DP-HQ-Phones,DP-Branch-Phones" --include-users --exclude-user-domains "wbx.ai" --force
40
+
41
+ # Delete everything in the org
42
+ wxcli cleanup run --all --include-users --include-locations --force
43
+
44
+ # Delete users but keep admin accounts by domain
45
+ wxcli cleanup run --all --include-users --exclude-user-domains "wbx.ai,corp.com" --force
46
+
47
+ # Control parallelism
48
+ wxcli cleanup run --scope "GlobalTech*" --max-concurrent 10 --force
49
+ ```
50
+
51
+ `wxcli cleanup` handles the full dependency DAG automatically: inventories all resources, deletes in the correct 13-layer order (including phone number removal before location deletion), and parallelizes within each layer.
52
+
53
+ **Key behaviors:**
54
+ - **Phone numbers** are removed automatically before location deletion (batched in groups of 5, main numbers skipped). Numbers assigned to a location block location deletion with 409.
55
+ - **Location deletion cannot be completed via API.** The public API cannot disable Webex Calling on a location — the telephony detach endpoint returns 404 in most orgs. `wxcli cleanup --include-locations` will remove all resources AT the location (features, routing, devices, users, numbers) but the location itself will remain calling-enabled and 409 on delete. **The operator must finish location deletion in Control Hub** (Locations → select location → disable Webex Calling → delete). Always tell the user this upfront when `--include-locations` is requested.
56
+ - **`--include-users` is location-scoped when `--scope` is set.** With `--scope`, only users at the specified locations are deleted. With `--all`, all org users are in scope. In both cases, **always use `--exclude-user-domains`** to protect admin and service accounts (e.g., `--exclude-user-domains "wbx.ai,company.com"`).
57
+
58
+ **Always dry-run first** for any scope larger than a single location.
59
+
60
+ ### What `wxcli cleanup` deletes by default (no flags)
61
+
62
+ With just `--scope` and `--force`, cleanup deletes: dial plans, route lists, route groups, translation patterns, trunks, call features (HG/CQ/AA/paging/park/pickup), operating modes, schedules, virtual lines, **devices**, **workspaces**, and phone numbers. It does NOT delete users or locations unless `--include-users` / `--include-locations` is passed.
63
+
64
+ **Selective teardown (features/routing only, keep devices + users + location):**
65
+ Do NOT use `wxcli cleanup` — it has no `--exclude-devices` flag and will delete devices and workspaces. Use the manual procedure (Step 2 below), deleting only Layers 1-2 (features + routing).
66
+
67
+ ---
68
+
69
+ ## Manual Teardown Procedure
70
+
71
+ Use when `wxcli cleanup` is unavailable or you need fine-grained control.
72
+
73
+ ### Step 1: Enumerate ALL resources upfront
74
+
75
+ Run ALL of these checks before deleting anything. Collect the full inventory.
76
+
77
+ ```bash
78
+ LOC=<LOCATION_ID>
79
+
80
+ # Layer 1: Features
81
+ wxcli hunt-group list --location-id $LOC -o json 2>&1
82
+ wxcli call-queue list --location-id $LOC -o json 2>&1
83
+ wxcli call-queue list --location-id $LOC --has-cx-essentials true -o json 2>&1
84
+ wxcli auto-attendant list --location-id $LOC -o json 2>&1
85
+ wxcli paging-group list --location-id $LOC -o json 2>&1
86
+ # Call parks and pickups REQUIRE location as positional arg — org-wide list returns EMPTY
87
+ wxcli call-park list $LOC -o json 2>&1
88
+ wxcli call-pickup list $LOC -o json 2>&1
89
+ wxcli location-voicemail list $LOC -o json 2>&1
90
+
91
+ # Layer 2: Routing (org-wide — filter by location in output)
92
+ wxcli call-routing list -o json 2>&1 # dial plans
93
+ wxcli call-routing list-route-lists -o json 2>&1 # route lists
94
+ wxcli call-routing list-route-groups -o json 2>&1 # check which reference trunks in this location
95
+ wxcli call-routing list-trunks -o json 2>&1 # filter by location in output
96
+
97
+ # Layer 3: Supporting resources
98
+ wxcli virtual-extensions list --location-id $LOC -o json 2>&1
99
+ wxcli location-schedules list $LOC -o json 2>&1
100
+ wxcli operating-modes list --location-id $LOC -o json 2>&1
101
+
102
+ # Layer 4: Users
103
+ wxcli users list --location-id $LOC -o json 2>&1
104
+
105
+ # Layer 5: Workspaces (no --location-id flag — filter client-side by locationId)
106
+ wxcli workspaces list -o json 2>&1
107
+ ```
108
+
109
+ Present the full inventory to the user before proceeding.
110
+
111
+ ### Step 2: Delete in dependency order
112
+
113
+ Delete **layer by layer, top to bottom**. Resources within the same layer have no interdependencies and can be deleted in parallel.
114
+
115
+ #### Layer 1: Features
116
+ ```bash
117
+ wxcli hunt-group delete --force $LOC <HG_ID>
118
+ wxcli call-queue delete --force $LOC <CQ_ID>
119
+ wxcli auto-attendant delete --force $LOC <AA_ID>
120
+ wxcli call-park delete --force $LOC <PARK_ID>
121
+ wxcli call-pickup delete --force $LOC <PICKUP_ID>
122
+ wxcli paging-group delete --force $LOC <PG_ID>
123
+ ```
124
+
125
+ #### Layer 2: Routing (reverse creation order)
126
+ ```bash
127
+ # Dial plans first, then route lists, then route groups, then trunks
128
+ wxcli call-routing delete --force <DP_ID>
129
+ wxcli call-routing delete-route-lists --force <RL_ID>
130
+ wxcli call-routing delete-route-groups --force <RG_ID>
131
+ wxcli call-routing delete-translation-patterns-call-routing --force <TP_ID>
132
+ wxcli call-routing delete-trunks --force <TRUNK_ID>
133
+ ```
134
+
135
+ #### Layer 3: Supporting resources
136
+ ```bash
137
+ wxcli virtual-extensions delete --force <VE_ID>
138
+ wxcli location-schedules delete --force $LOC <TYPE> <SCHEDULE_ID>
139
+ wxcli operating-modes delete --force <OM_ID>
140
+ ```
141
+
142
+ #### Layer 4: Users
143
+ ```bash
144
+ wxcli users delete --force <USER_ID>
145
+ ```
146
+
147
+ #### Layer 5: Workspaces
148
+ ```bash
149
+ # Must delete workspaces BEFORE disabling calling on the location
150
+ wxcli workspaces delete --force <WORKSPACE_ID>
151
+ ```
152
+
153
+ #### Layer 6: Phone Numbers
154
+ ```bash
155
+ # Remove phone numbers BEFORE location deletion — numbers block location delete with 409
156
+ # List numbers for the location
157
+ wxcli numbers list --location-id $LOC -o json
158
+ # Delete numbers (API accepts max 5 per request, main number cannot be removed)
159
+ # Use wxcli numbers delete $LOC or raw API:
160
+ # DELETE /telephony/config/locations/{LOC}/numbers body: {"phoneNumbers": ["+1..."]}
161
+ ```
162
+
163
+ #### Layer 7: Locations
164
+ ```bash
165
+ # The API CANNOT disable Webex Calling on a location. After clearing all
166
+ # dependencies above, the location will still 409 on delete because it
167
+ # remains calling-enabled. Attempt the delete — it may work in rare cases:
168
+ wxcli location-settings safe-delete-check $LOC
169
+ wxcli locations delete --force $LOC
170
+ # If 409: tell the user to finish in Control Hub (disable calling → delete).
171
+ ```
172
+
173
+ ### Step 3: Handle 409 on location delete
174
+
175
+ If `locations delete` returns 409 "being referenced", check these in order:
176
+
177
+ 1. **Phone numbers still assigned** — `wxcli numbers list --location-id $LOC -o json`. Remove non-main numbers before location delete. `wxcli cleanup` handles this automatically (Layer 12).
178
+ 2. **CX Essentials queues** hidden from default `call-queue list` — need `--has-cx-essentials true`
179
+ 3. **Call parks / pickups** not found — `call-park list` and `call-pickup list` without `$LOC` as first positional arg return empty
180
+ 4. **Virtual lines** — discoverable via `wxcli numbers list -o json` (owner.type == VIRTUAL_LINE), not always via `virtual-extensions list`
181
+ 5. **Workspaces** still assigned — workspaces API has no location filter, must filter client-side by `locationId` field
182
+ 6. **Operating modes** referencing deleted schedules
183
+ 7. **Calling-enabled location (most common cause)** — the public API cannot disable Webex Calling on a location. Even with all visible dependencies gone, the location remains calling-enabled and 409s on delete. The telephony detach endpoint (`DELETE /telephony/config/locations/{id}`) returns 404 in most orgs. **This is not fixable via CLI/API — the operator must disable Webex Calling in Control Hub** (Locations → select → disable calling → delete).
184
+ 8. **Ghost/stale locations** — locations returning 404 on sub-resource queries may still be deletable. Attempt deletion regardless.
185
+
186
+ ### Rule: never hand-roll polling loops
187
+
188
+ When a 409 persists after the built-in 90s wait (or any other "wait and retry" situation in teardown), follow these rules strictly. Violating them causes silent Bash-tool timeouts mid-loop and unrecoverable partial state.
189
+
190
+ 1. **Do NOT** write external Python or bash polling loops with `time.sleep` / `sleep` inside a single Bash tool call. The Bash tool has a ~10-minute hard timeout; long loops die silently with no useful output.
191
+ 2. **Do** re-invoke `wxcli cleanup run` (with the same `--scope` / flags). It is **idempotent** — safe to repeat — and resumes cleanup from wherever it left off. This is the preferred recovery path for 409s.
192
+ 3. If bespoke per-location retry is truly required, split it into **discrete Bash tool calls** — one call per location per attempt (or per round) — with a short `sleep` **between** tool calls, not inside them. Each call returns control to the parent before the next wait begins.
193
+ 4. Cap any necessary hand-written retry script at **≤3 minutes wall time**. Beyond that, exit the script and let the parent re-dispatch — do not stretch a single Bash call toward the 10-minute ceiling.
194
+ 5. If `cleanup run` exits with remaining 409s, **report them in the task summary and stop**. Do not loop silently. The operator (or parent agent) decides whether to re-invoke.
195
+
196
+ ### Gotcha: CCP-integrated PSTN backend gate (dCloud / Cisco Calling Plan orgs)
197
+
198
+ When the target org uses **Cisco Calling Plan** (CCP-integrated PSTN), number deletion fails with `ERR.V.TRM.TMN60004` ("DELETE number is supported only for non-integrated CCP") — these numbers are managed via the PSTN portal, not the API. After trunk/route-group/feature/user teardown, **location delete then 409s with "being referenced"** for hours even though there are no locally visible dependencies. Webex's internal PSTN backend is async-releasing trunk references and typically clears in **1-4 hours** in dCloud/CCP orgs. No API action can speed this up.
199
+
200
+ `wxcli cleanup run` now detects the explicit number-delete signature and short-circuits those number removals:
201
+ - **Number delete:** skipped with a `[number=<ext/e164>] skipped — CCP-integrated, managed via PSTN portal` log line, not counted as a failure.
202
+ - **Location delete:** do **not** infer CCP solely from a generic `409 "being referenced"` response. Generic 409s can also mean preserved users, voice portal state, or the fact that the location is still calling-enabled and must be finished in Control Hub.
203
+
204
+ ---
205
+
206
+ ## Critical Rules
207
+
208
+ 1. **Always use `--force`** — skip interactive confirmation for programmatic deletes
209
+ 2. **Location-scoped feature deletes take LOCATION_ID FIRST** — `wxcli hunt-group delete --force LOCATION_ID HG_ID`, not `HG_ID LOCATION_ID`
210
+ 3. **Routing delete commands use PLURAL names** — `delete-route-groups` not `delete-route-group`, `delete-trunks` not `delete-trunk`
211
+ 4. **Workspaces block location deletion** — delete all workspaces at a location BEFORE running disable-calling
212
+ 5. **Do not promise API disable-calling** — use CLI/API to remove visible blockers, but warn that final delete of a calling-enabled location may still require Control Hub
213
+ 6. **Enumerate before deleting** — never start deleting without a full inventory; hidden resources (CX queues, call parks, workspaces) will block location delete
214
+ 7. **Multi-location teardown** — repeat the procedure per location, or use `wxcli cleanup run --scope "Loc1,Loc2"` for automation
@@ -0,0 +1,379 @@
1
+ ---
2
+ name: video-mesh
3
+ description: |
4
+ Monitor and configure Webex Video Mesh clusters, nodes, availability,
5
+ utilization, reachability, and event thresholds using wxcli CLI commands.
6
+ Guides the user from prerequisites through execution and verification.
7
+ allowed-tools: Read, Grep, Glob, Bash
8
+ argument-hint: [mesh-operation]
9
+ ---
10
+
11
+ <!-- Created by playbook session 2026-03-28 -->
12
+
13
+ # Video Mesh Workflow
14
+
15
+ **Checkpoint — do NOT proceed until you can answer these:**
16
+ 1. What is the command to list all Video Mesh clusters? (Answer: `wxcli video-mesh list-clusters-video-mesh` — not `wxcli video-mesh list`, which shows client type distribution.)
17
+ 2. How do you trigger an on-demand test for a single node? (Answer: `wxcli video-mesh create NODE_ID` — not `create-clusters`, which targets a cluster.)
18
+
19
+ If you cannot answer both, you skipped reading this skill. Go back and read it.
20
+
21
+ ## Step 1: Load references
22
+
23
+ 1. Read `docs/reference/meetings-infrastructure.md` for Video Mesh clusters, nodes, availability, utilization, reachability, health monitoring, and event thresholds
24
+
25
+ **Mandatory --help verification:** Before constructing any wxcli command, run `wxcli <group> --help` to verify the subcommand exists, then `wxcli <group> <subcommand> --help` to verify the exact flags (e.g. `wxcli video-mesh --help` to list subcommands, then drill into the specific one). Do NOT rely on examples in this skill or reference docs — the CLI is auto-generated and flag names may differ from what documentation suggests.
26
+
27
+ ---
28
+
29
+ ## Step 2: Verify auth token
30
+
31
+ Before any API calls, confirm the user has a working auth token:
32
+
33
+ ```bash
34
+ wxcli whoami
35
+ ```
36
+
37
+ If this fails, stop and resolve authentication first (`wxcli configure`).
38
+
39
+ **Required scopes:**
40
+ - **Read**: `spark-admin:video_mesh_read`
41
+ - **Write**: `spark-admin:video_mesh_write` (for threshold configuration and on-demand tests)
42
+
43
+ **Token type:** Admin token required. User tokens will return 403.
44
+
45
+ ---
46
+
47
+ ## Step 3: Identify the operation type
48
+
49
+ Ask the user what they want to accomplish. Present this decision matrix if they are unsure:
50
+
51
+ | User Wants To | Operation | CLI Commands |
52
+ |--------------|-----------|-------------|
53
+ | List all clusters | Cluster inventory | `video-mesh list-clusters-video-mesh` |
54
+ | Get cluster details | Cluster inspection | `video-mesh show CLUSTER_ID` |
55
+ | Check cluster health/availability | Availability monitoring | `video-mesh list-availability-clusters`, `video-mesh show-availability-clusters CLUSTER_ID` |
56
+ | Check node health/availability | Node monitoring | `video-mesh list-availability-nodes`, `video-mesh show-availability-nodes NODE_ID` |
57
+ | View cluster utilization stats | Utilization analysis | `video-mesh list-utilization-video-mesh`, `video-mesh list-utilization-clusters CLUSTER_ID` |
58
+ | Run reachability tests | Connectivity verification | `video-mesh list-reachability-test`, `video-mesh list-clusters-reachability-test CLUSTER_ID`, `video-mesh list-nodes-reachability-test NODE_ID` |
59
+ | View media health results | Media quality monitoring | `video-mesh list-media-health-monitor-test`, `video-mesh list-clusters-media-health-monitor-test CLUSTER_ID`, `video-mesh list-nodes-media-health-monitor-test NODE_ID` |
60
+ | Run network tests | Network diagnostics | `video-mesh list-network-test`, `video-mesh list-clusters-network-test CLUSTER_ID`, `video-mesh list-nodes-network-test NODE_ID` |
61
+ | Trigger on-demand test (node) | Manual testing | `video-mesh create NODE_ID` |
62
+ | Trigger on-demand test (cluster) | Manual testing | `video-mesh create-clusters CLUSTER_ID` |
63
+ | Check triggered test status/results | Test follow-up | `video-mesh list-test-status`, `video-mesh list-test-results` |
64
+ | View cloud overflow stats | Overflow analysis | `video-mesh list-cloud-overflow` |
65
+ | View call redirect details | Redirect analysis | `video-mesh list-call-redirects-video-mesh`, `video-mesh list-call-redirects-clusters CLUSTER_ID` |
66
+ | View client type distribution | Client analytics | `video-mesh list`, `video-mesh list-clusters-client-type-distribution CLUSTER_ID` |
67
+ | View/update event thresholds | Threshold configuration | `video-mesh list-event-thresholds`, `video-mesh show-event-thresholds THRESHOLD_ID`, `video-mesh update THRESHOLD_ID` |
68
+ | Reset event thresholds to defaults | Threshold reset | `video-mesh create-reset` |
69
+ | Not Video Mesh? | For meetings → `manage-meetings` skill. For call features → `configure-features` skill. | — |
70
+
71
+ ---
72
+
73
+ ## Step 4: Check prerequisites
74
+
75
+ ### 4a. Admin token with Video Mesh scopes
76
+
77
+ ```bash
78
+ wxcli whoami
79
+ ```
80
+
81
+ Verify the output shows admin-level access. If Video Mesh commands return 403, the token is missing `spark-admin:video_mesh_read` or `spark-admin:video_mesh_write` scopes.
82
+
83
+ ### 4b. Video Mesh deployed
84
+
85
+ Verify the org has Video Mesh clusters registered:
86
+
87
+ ```bash
88
+ wxcli video-mesh list-clusters-video-mesh --output json
89
+ ```
90
+
91
+ If this returns empty, Video Mesh is not deployed in this org. Video Mesh requires on-premises nodes registered to the Webex cloud. This skill cannot deploy Video Mesh — that is a network infrastructure task done via the Video Mesh Node OVA.
92
+
93
+ ### 4c. Cluster and node IDs
94
+
95
+ For most operations, you need a cluster ID or node ID. Get them from the cluster list:
96
+
97
+ ```bash
98
+ # List clusters (get cluster IDs)
99
+ wxcli video-mesh list-clusters-video-mesh --output json
100
+
101
+ # Get cluster details (includes node IDs)
102
+ wxcli video-mesh show CLUSTER_ID --output json
103
+ ```
104
+
105
+ ---
106
+
107
+ ## Step 5: Gather configuration and present deployment plan — [SHOW BEFORE EXECUTING]
108
+
109
+ Most Video Mesh operations are read-only queries. For write operations (threshold configuration, on-demand tests), present the plan before executing.
110
+
111
+ ---
112
+
113
+ ### Monitoring Queries (Read-Only)
114
+
115
+ For read-only operations, present a brief query plan:
116
+
117
+ ```
118
+ QUERY PLAN
119
+ ==========
120
+ Operation: [type — e.g., "Check availability for all clusters over last 7 days"]
121
+ Scope: [all clusters / specific cluster / specific node]
122
+ Time Range: [if applicable]
123
+
124
+ Commands to execute:
125
+ 1. wxcli video-mesh list-availability --from ... --to ... --output json
126
+
127
+ Proceed? (yes/no)
128
+ ```
129
+
130
+ ---
131
+
132
+ ### Cluster Health Check (Comprehensive)
133
+
134
+ For a comprehensive health check of a cluster:
135
+
136
+ ```bash
137
+ # 1. Cluster details
138
+ wxcli video-mesh show CLUSTER_ID --output json
139
+
140
+ # 2. Availability
141
+ wxcli video-mesh show CLUSTER_ID --output json
142
+
143
+ # 3. Utilization
144
+ wxcli video-mesh list-utilization-clusters CLUSTER_ID --output json
145
+
146
+ # 4. Reachability
147
+ wxcli video-mesh list-clusters-reachability-test CLUSTER_ID --output json
148
+
149
+ # 5. Media health
150
+ wxcli video-mesh list-clusters-media-health-monitor-test CLUSTER_ID --output json
151
+
152
+ # 6. Network test results
153
+ wxcli video-mesh list-clusters-network-test CLUSTER_ID --output json
154
+
155
+ # 7. Call redirects (overflow)
156
+ wxcli video-mesh list-call-redirects-clusters CLUSTER_ID --output json
157
+
158
+ # 8. Client type distribution
159
+ wxcli video-mesh list-clusters-client-type-distribution CLUSTER_ID --output json
160
+ ```
161
+
162
+ ---
163
+
164
+ ### Node Health Check
165
+
166
+ For a single node:
167
+
168
+ ```bash
169
+ # Node availability
170
+ wxcli video-mesh show-availability NODE_ID --output json
171
+
172
+ # Node reachability
173
+ wxcli video-mesh list-nodes-reachability-test NODE_ID --output json
174
+
175
+ # Node media health
176
+ wxcli video-mesh list-nodes-media-health-monitor-test NODE_ID --output json
177
+
178
+ # Node network test
179
+ wxcli video-mesh list-nodes-network-test NODE_ID --output json
180
+ ```
181
+
182
+ ---
183
+
184
+ ### On-Demand Tests
185
+
186
+ ```bash
187
+ # Trigger test for a specific node
188
+ wxcli video-mesh create NODE_ID
189
+
190
+ # Trigger test for all nodes in a cluster
191
+ wxcli video-mesh create CLUSTER_ID
192
+
193
+ # Check test status
194
+ wxcli video-mesh list-test-status --output json
195
+
196
+ # Get test results
197
+ wxcli video-mesh list-test-results --output json
198
+ ```
199
+
200
+ ---
201
+
202
+ ### Event Threshold Configuration
203
+
204
+ Collect from user:
205
+
206
+ | Parameter | Required | Notes |
207
+ |-----------|:--------:|-------|
208
+ | Threshold ID | Yes | Get from `list-event-thresholds` |
209
+ | New threshold value | Yes | Depends on threshold type |
210
+
211
+ ```bash
212
+ # List current thresholds
213
+ wxcli video-mesh list-event-thresholds --output json
214
+
215
+ # Get a specific threshold
216
+ wxcli video-mesh show-event-thresholds THRESHOLD_ID --output json
217
+
218
+ # Update a threshold
219
+ wxcli video-mesh update THRESHOLD_ID --json-body '{"value": 80}'
220
+
221
+ # Reset all thresholds to defaults
222
+ wxcli video-mesh create-reset
223
+ ```
224
+
225
+ ---
226
+
227
+ ### Overflow and Redirect Analysis
228
+
229
+ ```bash
230
+ # List cloud overflow details
231
+ wxcli video-mesh list-cloud-overflow --output json
232
+
233
+ # List call redirect details (org-wide)
234
+ wxcli video-mesh list-call-redirects-video-mesh --output json
235
+
236
+ # Get redirect details for a specific cluster
237
+ wxcli video-mesh list-call-redirects-clusters CLUSTER_ID --output json
238
+ ```
239
+
240
+ ---
241
+
242
+ ### Deployment Plan Template (Write Operations)
243
+
244
+ For write operations (threshold updates, on-demand tests):
245
+
246
+ ```
247
+ DEPLOYMENT PLAN
248
+ ===============
249
+ Operation: [type — e.g., "Update CPU utilization threshold to 80%"]
250
+ Target: [threshold ID / node ID / cluster ID]
251
+
252
+ Current State:
253
+ [Current threshold value / current test status]
254
+
255
+ Changes:
256
+ [What will be changed]
257
+
258
+ Commands to execute:
259
+ 1. wxcli video-mesh update THRESHOLD_ID --json-body '{"value": 80}'
260
+
261
+ Proceed? (yes/no)
262
+ ```
263
+
264
+ **Wait for user confirmation before executing write operations.**
265
+
266
+ ---
267
+
268
+ ## Step 6: Execute via wxcli
269
+
270
+ Run the commands in plan order.
271
+
272
+ Handle errors explicitly:
273
+
274
+ - **401/403**: Token expired or insufficient scopes — run `wxcli configure` to re-authenticate. Required scope: `spark-admin:video_mesh_read` (read) or `spark-admin:video_mesh_write` (write).
275
+ - **404**: Cluster or node not found — verify the ID with `wxcli video-mesh list-clusters-video-mesh`.
276
+ - **400**: Validation error — read the error message and fix the parameter (e.g., invalid threshold value).
277
+ - **Empty results on availability/utilization queries:** The time range may be too narrow or the cluster may be newly deployed. Try expanding the time range.
278
+
279
+ ---
280
+
281
+ ## Step 7: Verify
282
+
283
+ After write operations, verify the change took effect:
284
+
285
+ ```bash
286
+ # Verify threshold update
287
+ wxcli video-mesh show-event-thresholds THRESHOLD_ID --output json
288
+
289
+ # Verify on-demand test was triggered
290
+ wxcli video-mesh list-test-status --output json
291
+
292
+ # Verify test completed and get results
293
+ wxcli video-mesh list-test-results --output json
294
+ ```
295
+
296
+ For read-only operations, verification is inherent — the query results are the verification.
297
+
298
+ ---
299
+
300
+ ## Step 8: Report results
301
+
302
+ Present the operation results:
303
+
304
+ ### For monitoring queries:
305
+
306
+ ```
307
+ VIDEO MESH STATUS
308
+ =================
309
+ Clusters: [N]
310
+ Total Nodes: [N]
311
+
312
+ Cluster: [cluster_name]
313
+ ID: [cluster_id]
314
+ Nodes: [N]
315
+ Availability: [percentage]
316
+ Utilization: [percentage]
317
+ Reachability: [pass/fail]
318
+ Media Health: [pass/fail]
319
+ Cloud Overflow: [count] calls redirected
320
+
321
+ [Repeat for each cluster]
322
+
323
+ Issues Found:
324
+ - [e.g., "Node X reachability test failed"]
325
+ - [e.g., "Cluster Y utilization at 92% (above threshold)"]
326
+
327
+ Recommendations:
328
+ - [e.g., "Investigate node X network connectivity"]
329
+ - [e.g., "Consider adding nodes to cluster Y"]
330
+ ```
331
+
332
+ ### For write operations:
333
+
334
+ ```
335
+ OPERATION COMPLETE
336
+ ==================
337
+ Operation: [type]
338
+ Status: Success
339
+
340
+ Changes Applied:
341
+ - [e.g., "CPU threshold updated from 70% to 80%"]
342
+ - [e.g., "On-demand test triggered for node X"]
343
+
344
+ Next steps:
345
+ - [e.g., "Monitor test results: wxcli video-mesh list-test-results"]
346
+ - [e.g., "Check cluster health in 5 minutes after test completes"]
347
+ ```
348
+
349
+ ---
350
+
351
+ ## Critical Rules
352
+
353
+ 1. **Always verify admin token and Video Mesh scopes** before any operation. User tokens return 403 for all Video Mesh endpoints.
354
+ 2. **Always show the deployment plan** (Step 5) and wait for user confirmation before executing write operations (threshold changes, on-demand tests).
355
+ 3. **`video-mesh list` is NOT the cluster list command.** `list` shows client type distribution. Use `list-clusters-video-mesh` to list clusters.
356
+ 4. **On-demand tests are `create` (node) and `create-clusters` (cluster).** The command names follow the generator pattern where POST endpoints become `create`.
357
+ 5. **Threshold reset (`create-reset`) resets ALL thresholds** to factory defaults. This is a destructive operation — confirm with the user before executing.
358
+ 6. **Video Mesh is read-heavy.** Most operations are monitoring queries. Only threshold configuration and on-demand test triggers are write operations.
359
+ 7. **Time-range queries default to recent data.** If availability/utilization commands return empty, the time range may need to be specified with `--from` and `--to` flags (where supported).
360
+ 8. **Node IDs come from cluster details.** You cannot list all nodes directly — get them from `wxcli video-mesh show CLUSTER_ID --output json` which includes the node list.
361
+ 9. **Cross-skill handoffs:**
362
+ - Meeting scheduling/management → `manage-meetings` skill
363
+ - CDR and call quality reports → `reporting` skill
364
+ - Network infrastructure/PSTN → `configure-routing` skill
365
+
366
+ ---
367
+
368
+ ## Context Compaction Recovery
369
+
370
+ If context compacts mid-execution, recover by:
371
+ 1. List clusters to recover the environment state:
372
+ ```bash
373
+ wxcli video-mesh list-clusters-video-mesh --output json
374
+ ```
375
+ 2. Check if any on-demand tests are pending:
376
+ ```bash
377
+ wxcli video-mesh list-test-status --output json
378
+ ```
379
+ 3. Resume from the first incomplete step in the plan