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,223 @@
1
+ # Call Flow Trace Domain
2
+
3
+ **Covers:** "What happens when someone calls +1-512-555-1000?", call path tracing, schedule evaluation, routing chain visualization.
4
+
5
+ This is the most complex domain module. It traces the path a call takes through the routing chain, evaluating time-of-day schedules to show the specific path at a given moment.
6
+
7
+ ## Question Patterns
8
+
9
+ | Pattern | Example |
10
+ |---------|---------|
11
+ | Simple trace | "What happens when someone calls +1-512-555-1000?" |
12
+ | Time-specific | "What happens if someone calls the main number at 7pm Saturday?" |
13
+ | Schedule check | "Is the Main auto attendant on business hours or after hours right now?" |
14
+ | Path comparison | "What's the difference between calling during business hours vs after hours?" |
15
+ | Resource trace | "Trace the call flow for the Sales hunt group" |
16
+
17
+ ## Input Parsing
18
+
19
+ The user provides:
20
+ 1. **A phone number** (e.g., "+1-512-555-1000") OR **a resource name** (e.g., "the Main auto attendant", "the Sales hunt group")
21
+ 2. **An optional datetime** — if omitted, use current time in the resource's location timezone
22
+
23
+ **Natural language time expressions to support:**
24
+ - "right now" → current time
25
+ - "at 3am" → today at 3:00 AM in location timezone
26
+ - "at 7pm on Saturday" → next Saturday at 7:00 PM
27
+ - "on Christmas Day" → December 25 (use current year if ambiguous)
28
+ - "next Tuesday at noon" → next Tuesday at 12:00 PM
29
+
30
+ ## Algorithm
31
+
32
+ ### Step 1 — Resolve the entry point
33
+
34
+ **If user gave a phone number:**
35
+ ```bash
36
+ wxcli numbers list --phone-number "+15125551000" -o json
37
+ ```
38
+ Extract the `owner` object → get `type` and `id`. The `owner.type` tells you what the number is assigned to: PEOPLE, AUTO_ATTENDANT, CALL_QUEUE, HUNT_GROUP, VIRTUAL_LINE, PLACE (workspace), or BROADWORKS_ANYWHERE.
39
+
40
+ Also get the `location` from the number response — you'll need the location ID and timezone.
41
+
42
+ **If user gave a resource name:**
43
+ Search for the resource by name in the appropriate list command:
44
+ - "Main auto attendant" → `wxcli auto-attendant list --name "Main" -o json`
45
+ - "Sales hunt group" → `wxcli hunt-group list --name "Sales" -o json`
46
+ - "Support queue" → `wxcli call-queue list --name "Support" -o json`
47
+ - Person name → `wxcli people list --display-name "Jane Smith" -o json`
48
+
49
+ Extract the resource's `id` and `locationId` from the list response.
50
+
51
+ ### Step 2 — Get the location timezone
52
+
53
+ ```bash
54
+ wxcli locations show LOCATION_ID -o json
55
+ ```
56
+ Extract `timeZone` (e.g., "America/Chicago"). Use this to evaluate schedules against the queried datetime.
57
+
58
+ ### Step 3 — Walk the chain
59
+
60
+ Based on the entry point type, follow the appropriate path. **Maximum depth: 5 hops.** Track visited resources to detect loops.
61
+
62
+ #### Auto Attendant path
63
+
64
+ 1. **Get AA detail:**
65
+ ```bash
66
+ wxcli auto-attendant show LOCATION_ID AA_ID -o json
67
+ ```
68
+
69
+ 2. **Get the AA's schedule(s):**
70
+ The AA response includes `businessSchedule` and/or `holidaySchedule` references (with schedule `name` and `id`).
71
+
72
+ For each schedule reference:
73
+ ```bash
74
+ wxcli location-schedules show LOCATION_ID TYPE SCHEDULE_ID -o json
75
+ ```
76
+ Where TYPE is `businessHours` or `holidays`.
77
+
78
+ 3. **Evaluate which schedule is active at the queried time:**
79
+
80
+ **Precedence:**
81
+ 1. Check holiday schedule first — if the queried date matches a holiday entry, use the `holidaySchedule` action
82
+ 2. Check business hours schedule — if the queried time falls within the defined business hours for that day of week, use the `businessHours` menu
83
+ 3. Otherwise — use the `afterHours` menu
84
+
85
+ **Business hours evaluation:**
86
+ The schedule response includes per-day entries. Each day has `startTime` and `endTime` (24-hour format). Check if the queried time (converted to location timezone) falls within the range for the queried day of week.
87
+
88
+ Example schedule data:
89
+ ```json
90
+ {
91
+ "type": "businessHours",
92
+ "events": [
93
+ {"name": "Monday", "startTime": "08:00", "endTime": "17:00"},
94
+ {"name": "Tuesday", "startTime": "08:00", "endTime": "17:00"},
95
+ ...
96
+ ]
97
+ }
98
+ ```
99
+
100
+ If the day is Saturday/Sunday and no entry exists → after hours.
101
+
102
+ **Holiday evaluation:**
103
+ Check the holiday schedule's `events` for a date match. Holiday events may have `startDate`/`endDate` or specific dates with optional yearly recurrence.
104
+
105
+ 4. **Report the active menu:**
106
+ Show the greeting message (if available) and the menu options. Each option maps a key press to a destination (transfer to another AA, HG, CQ, person, voicemail, etc.).
107
+
108
+ 5. **Recurse:** For each destination that is another AA, CQ, or HG → follow that chain (increment hop count).
109
+
110
+ #### Hunt Group path
111
+
112
+ 1. **Get HG detail:**
113
+ ```bash
114
+ wxcli hunt-group show LOCATION_ID HG_ID -o json
115
+ ```
116
+
117
+ 2. **Report:**
118
+ ```
119
+ → Sales Hunt Group
120
+ Ring pattern: [SIMULTANEOUS|CIRCULAR|TOP_DOWN|WEIGHTED]
121
+ Members ([N]):
122
+ - Jane Smith (ext 2001)
123
+ - Bob Lee (ext 2002)
124
+ No-answer: After [timeout]s → [action/destination]
125
+ ```
126
+
127
+ 3. **If no-answer destination is another feature** (AA, CQ, voicemail group) → recurse.
128
+
129
+ #### Call Queue path
130
+
131
+ 1. **Get CQ detail:**
132
+ ```bash
133
+ wxcli call-queue show LOCATION_ID CQ_ID -o json
134
+ ```
135
+
136
+ 2. **Report:**
137
+ ```
138
+ → Support Call Queue
139
+ Routing: [Longest Idle|Circular|Top Down|Weighted|Simultaneous]
140
+ Agents ([N]):
141
+ - Agent 1 (ext XXXX)
142
+ - Agent 2 (ext XXXX)
143
+ Overflow: After [threshold]s/[max callers] → [destination]
144
+ ```
145
+
146
+ 3. **If overflow destination is another feature** → recurse.
147
+
148
+ #### Person path
149
+
150
+ 1. **End of chain.** Report:
151
+ ```
152
+ → Jane Smith (ext 2001, Austin)
153
+ ```
154
+
155
+ 2. **Optionally check call forwarding:**
156
+ ```bash
157
+ wxcli user-settings show-call-forwarding PERSON_ID -o json
158
+ ```
159
+ If `noAnswer.enabled` is true, note:
160
+ ```
161
+ If no answer after [rings] rings → forwards to [destination]
162
+ ```
163
+
164
+ #### Workspace path
165
+
166
+ End of chain:
167
+ ```
168
+ → Conference Room A (workspace, Austin)
169
+ ```
170
+
171
+ ### Step 4 — Format the output
172
+
173
+ Use the numbered-hop format:
174
+
175
+ ```
176
+ Call to +1-512-555-1000 at 7:00 PM Saturday (CST):
177
+
178
+ 1. → Main Auto Attendant (after-hours schedule active)
179
+ Greeting: "Thank you for calling Acme Corp. Our offices are closed."
180
+ Menu: Press 1 for Sales, Press 2 for Support, Press 0 for Operator
181
+
182
+ 2. [Press 1] → Sales Call Queue
183
+ Routing: Longest idle agent
184
+ Agents: Jane Smith (ext 2001), Bob Lee (ext 2002), Maria Garcia (ext 2003)
185
+ Overflow: After 120 seconds → Sales Voicemail Group
186
+
187
+ 3. [Overflow] → Sales Voicemail Group
188
+ Members: Jane Smith, Bob Lee
189
+ ```
190
+
191
+ **For time-comparison queries** ("business hours vs after hours"), trace both paths and present side by side:
192
+
193
+ ```
194
+ Call to +1-512-555-1000:
195
+
196
+ BUSINESS HOURS (Mon-Fri 8am-5pm CST):
197
+ 1. → Main Auto Attendant (business hours)
198
+ Menu: Press 1 for Sales, Press 2 for Support, Press 0 for Operator
199
+ 2. [Press 1] → Sales Hunt Group (4 members, simultaneous ring)
200
+
201
+ AFTER HOURS (evenings, weekends):
202
+ 1. → Main Auto Attendant (after hours)
203
+ Greeting: "Our offices are closed."
204
+ Menu: Press 1 for urgent Sales, Press 0 for general voicemail
205
+ 2. [Press 1] → Sales On-Call (1 member)
206
+ ```
207
+
208
+ ## Constraints
209
+
210
+ 1. **Depth limit: 5 hops.** If the chain goes deeper, report what's been traced and note: "Call flow continues beyond 5 hops — check Control Hub for the full chain."
211
+ 2. **No live agent state.** The tracer shows the *configured* path, not real-time availability. Note: "This shows the configured routing — actual behavior depends on agent availability at the time of the call."
212
+ 3. **Missing schedule.** If an AA has no schedule assigned, report: "No schedule configured — default behavior applies (business hours menu active at all times)."
213
+ 4. **Missing menu data.** AA menus may not be fully available via API. Report what's available; note gaps.
214
+ 5. **Inbound only (v1).** This traces inbound call paths. For outbound routing through dial plans/trunks, suggest: "For outbound routing, try: 'What dial plan handles calls to +44...?' (uses the routing domain)."
215
+ 6. **Loop detection.** Track visited resource IDs. If a chain references a resource already visited, report: "Loop detected — [resource] routes back to [earlier resource]." Stop recursion.
216
+
217
+ ## Gotchas
218
+
219
+ 1. **Schedule show needs THREE positional args.** `wxcli location-schedules show LOCATION_ID TYPE SCHEDULE_ID` — not just the schedule ID. The TYPE must be `businessHours` or `holidays`.
220
+ 2. **Schedule list is location-scoped.** `wxcli location-schedules list LOCATION_ID -o json` — locationId is a required positional arg.
221
+ 3. **AA menu key mappings.** The AA show response includes `businessHours` and `afterHours` objects with `actions` arrays. Each action has a `key` (0-9, #, *) and a `value` (transfer destination).
222
+ 4. **Timezone handling.** Always convert the queried time to the location's timezone before evaluating schedules. A query at "7pm" from a user in EST targeting an AA in CST should evaluate at 6pm CST.
223
+ 5. **Holiday recurrence.** Some holidays recur annually (Christmas, New Year's). Check the `recurrence` field in holiday events. If `recurAnnually: true`, match the month/day regardless of year.
@@ -0,0 +1,44 @@
1
+ # Call History Domain
2
+
3
+ **Covers:** Recent call history, call volume, missed calls, busiest hours, voicemail-bound calls.
4
+
5
+ **This is a delegation module.** For call history and CDR questions, load the `reporting` skill and use its CDR recipe composition guide. The reporting skill has 75 pre-built recipes covering volume analysis, location breakdowns, hourly trends, agent performance, and threshold detection.
6
+
7
+ ## When to Delegate
8
+
9
+ Any question about **past calls** or **call patterns** should use the reporting skill:
10
+ - "How many calls did we get yesterday?"
11
+ - "Show me missed calls from this morning"
12
+ - "What's our busiest hour for incoming calls?"
13
+ - "How many calls went to voicemail last week?"
14
+ - "What's our average call duration?"
15
+ - "Which agent handled the most calls?"
16
+
17
+ ## How to Delegate
18
+
19
+ Load the reporting skill:
20
+
21
+ ```
22
+ Skill: reporting
23
+ ```
24
+
25
+ The reporting skill will:
26
+ 1. Verify the token has `spark-admin:calling_cdr_read` scope
27
+ 2. Check for cached CDR data at `/tmp/cdr-session.json`
28
+ 3. Pull CDR data for the requested time range
29
+ 4. Run the appropriate recipe or compose a custom query
30
+ 5. Format the results
31
+
32
+ ## Constraints to Communicate
33
+
34
+ When answering CDR-related questions, note these limits if relevant:
35
+ - **30-day retention window** — CDR data is only available for the last 30 days
36
+ - **12-hour max query window** — each API request covers at most 12 hours; the skill handles splitting automatically
37
+ - **~15 minute delay** — very recent calls (last 15 minutes) may not appear yet
38
+
39
+ ## Not CDR — Handle Inline
40
+
41
+ These look like call history but are actually config queries handled by other domains:
42
+ - "Is call recording enabled for John?" → people-and-settings domain (wxcli user-settings show-call-recording)
43
+ - "What's the call queue overflow setting?" → features domain (wxcli call-queue show)
44
+ - "Show me the after-hours routing" → call-flow-trace domain
@@ -0,0 +1,169 @@
1
+ # Features Domain
2
+
3
+ **Covers:** Hunt groups, call queues, auto attendants, paging groups, call park, call pickup, voicemail groups.
4
+
5
+ ## Question Patterns
6
+
7
+ | Pattern | Example |
8
+ |---------|---------|
9
+ | Membership | "Who's in the Sales hunt group?", "List agents in the Support queue" |
10
+ | Inventory | "How many call queues are at Denver?", "What auto attendants do we have?" |
11
+ | Configuration | "What's the ring pattern for Support HG?", "Show overflow for Main CQ" |
12
+ | Schedule | "Which auto attendants use the Holiday schedule?" |
13
+ | Cross-feature | "Which features are at the Austin location?" |
14
+
15
+ ## Command Recipes
16
+
17
+ ### Hunt Groups
18
+
19
+ **List all (org-wide or per-location):**
20
+ ```bash
21
+ wxcli hunt-group list -o json
22
+ wxcli hunt-group list --location-id LOCATION_ID -o json
23
+ wxcli hunt-group list --name "Sales" -o json
24
+ ```
25
+
26
+ **Show detail (requires BOTH locationId AND huntGroupId):**
27
+ ```bash
28
+ wxcli hunt-group show LOCATION_ID HUNT_GROUP_ID -o json
29
+ ```
30
+ Response includes: `agents` (members list), `callPolicies` (ring pattern: SIMULTANEOUS, CIRCULAR, TOP_DOWN, WEIGHTED), `noAnswer` action and settings.
31
+
32
+ ### Call Queues
33
+
34
+ **List:**
35
+ ```bash
36
+ wxcli call-queue list -o json
37
+ wxcli call-queue list --location-id LOCATION_ID -o json
38
+ wxcli call-queue list --has-cx-essentials true -o json
39
+ ```
40
+
41
+ **Show detail (requires BOTH locationId AND queueId):**
42
+ ```bash
43
+ wxcli call-queue show LOCATION_ID QUEUE_ID -o json
44
+ ```
45
+ Response includes: `agents`, `callPolicies` (routing type), `queueSettings` (overflow threshold, wait treatment), `overflowSettings`.
46
+
47
+ ### Auto Attendants
48
+
49
+ **List:**
50
+ ```bash
51
+ wxcli auto-attendant list -o json
52
+ wxcli auto-attendant list --location-id LOCATION_ID -o json
53
+ wxcli auto-attendant list --name "Main" -o json
54
+ ```
55
+
56
+ **Show detail (requires BOTH locationId AND autoAttendantId):**
57
+ ```bash
58
+ wxcli auto-attendant show LOCATION_ID AA_ID -o json
59
+ ```
60
+ Response includes: `businessHoursSchedule`, `holidaySchedule`, `businessHours` (menu config), `afterHours` (menu config), `extension`, `phoneNumber`.
61
+
62
+ ### Paging Groups
63
+
64
+ **List:**
65
+ ```bash
66
+ wxcli paging-group list -o json
67
+ wxcli paging-group list --location-id LOCATION_ID -o json
68
+ ```
69
+
70
+ **Show detail (requires BOTH locationId AND pagingGroupId):**
71
+ ```bash
72
+ wxcli paging-group show LOCATION_ID PAGING_GROUP_ID -o json
73
+ ```
74
+
75
+ ### Call Park (location-scoped list)
76
+
77
+ **List (locationId is REQUIRED positional arg):**
78
+ ```bash
79
+ wxcli call-park list LOCATION_ID -o json
80
+ ```
81
+
82
+ **Show detail:**
83
+ ```bash
84
+ wxcli call-park show LOCATION_ID CALL_PARK_ID -o json
85
+ ```
86
+
87
+ ### Call Pickup (location-scoped list)
88
+
89
+ **List (locationId is REQUIRED positional arg):**
90
+ ```bash
91
+ wxcli call-pickup list LOCATION_ID -o json
92
+ ```
93
+
94
+ **Show detail:**
95
+ ```bash
96
+ wxcli call-pickup show LOCATION_ID CALL_PICKUP_ID -o json
97
+ ```
98
+
99
+ ## Resolution Rules
100
+
101
+ **Finding a feature by name:**
102
+ 1. List the feature type: e.g., `wxcli hunt-group list --name "Sales" -o json`
103
+ 2. If the `--name` filter doesn't match, list all and search the JSON response
104
+ 3. When showing detail, you MUST have both the `locationId` AND the feature's `id`
105
+ 4. The list response includes both — extract them from the matching item
106
+
107
+ **Finding all features at a location:**
108
+ 1. Resolve location name → ID
109
+ 2. Run each feature list with `--location-id`:
110
+ ```bash
111
+ wxcli hunt-group list --location-id LOC_ID -o json
112
+ wxcli call-queue list --location-id LOC_ID -o json
113
+ wxcli auto-attendant list --location-id LOC_ID -o json
114
+ wxcli paging-group list --location-id LOC_ID -o json
115
+ wxcli call-park list LOC_ID -o json
116
+ wxcli call-pickup list LOC_ID -o json
117
+ ```
118
+ 3. Note: call-park and call-pickup take locationId as positional arg, others as --location-id flag
119
+
120
+ ## Response Guidance
121
+
122
+ **Membership query** ("Who's in the Sales hunt group?"):
123
+ ```
124
+ Sales Hunt Group has 4 members:
125
+ - Jane Smith (ext 2001, Austin)
126
+ - Bob Lee (ext 2002, Austin)
127
+ - Maria Garcia (ext 2003, Denver)
128
+ - Tom Chen (ext 2004, Denver)
129
+
130
+ Ring pattern: Simultaneous
131
+ No-answer action: Forward to Sales voicemail after 20 seconds
132
+ ```
133
+
134
+ **Inventory query** ("How many call queues at Denver?"):
135
+ ```
136
+ Denver has 3 call queues:
137
+ - Support Queue (ext 5001, 8 agents)
138
+ - Sales Queue (ext 5002, 4 agents)
139
+ - Billing Queue (ext 5003, 3 agents)
140
+ ```
141
+
142
+ **Configuration query** ("Show overflow for Main CQ"):
143
+ ```
144
+ Main Call Queue overflow settings:
145
+ - Overflow after: 120 seconds in queue
146
+ - Overflow action: Transfer to Main Voicemail Group
147
+ - Max callers in queue: 25
148
+ - When queue is full: Play busy treatment
149
+ ```
150
+
151
+ **Cross-feature inventory** ("What features are at Austin?"):
152
+ ```
153
+ Austin has 12 call features:
154
+ - 3 auto attendants: Main Menu, Sales AA, Support AA
155
+ - 4 call queues: Sales, Support, Billing, General
156
+ - 2 hunt groups: Front Desk, Dispatch
157
+ - 1 paging group: Warehouse PA
158
+ - 1 call park: Lobby Park
159
+ - 1 call pickup: Front Desk Pickup
160
+ ```
161
+
162
+ ## Gotchas
163
+
164
+ 1. **CX Essentials queues are hidden by default.** `wxcli call-queue list` does NOT show CX queues unless you pass `--has-cx-essentials true`. If a user asks about a queue you can't find, try: `wxcli call-queue list --has-cx-essentials true -o json`.
165
+ 2. **Call park and call pickup have no org-wide list.** You must enumerate per-location. If the user asks "show all call parks" without specifying a location, list locations first, then query each.
166
+ 3. **Feature show commands need TWO positional args.** `wxcli hunt-group show LOCATION_ID HG_ID` — not just the feature ID. Both IDs are in the list response.
167
+ 4. **Voicemail groups are not yet in wxcli.** If asked about voicemail groups, note they can be managed in Control Hub under Calling → Features → Voicemail Groups.
168
+ 5. **Hunt groups ignore member personal call forwarding.** HG calls route directly to the agent's device and bypass any personal call forwarding the member has configured. Only the hunt group's own no-answer/forwarding settings (feature-level) govern what happens when a member doesn't answer.
169
+ 6. **DND on a hunt group member skips them, not their voicemail.** If a member has DND enabled, the hunt group skips that member and moves to the next — it does NOT send the call to the member's personal voicemail. The HG's no-answer action only triggers after all members are exhausted.
@@ -0,0 +1,93 @@
1
+ # Numbers Domain
2
+
3
+ **Covers:** Phone number inventory, assignment status, available numbers, number lookups by person or location.
4
+
5
+ ## Question Patterns
6
+
7
+ | Pattern | Example |
8
+ |---------|---------|
9
+ | Number inventory | "How many numbers do we have?", "Show me all numbers at Austin" |
10
+ | Assignment lookup | "What number is John Smith on?", "Who has +1-512-555-1000?" |
11
+ | Available numbers | "Which phone numbers aren't assigned?", "How many numbers are available at Denver?" |
12
+ | Number type query | "Show me all toll-free numbers", "Which numbers are DID vs extension?" |
13
+
14
+ ## Command Recipes
15
+
16
+ ### List all numbers (org-wide)
17
+ ```bash
18
+ wxcli numbers list -o json
19
+ ```
20
+
21
+ ### List numbers at a location
22
+ ```bash
23
+ wxcli numbers list --location-id LOCATION_ID -o json
24
+ ```
25
+
26
+ ### List available (unassigned) numbers
27
+ ```bash
28
+ wxcli numbers list --available true -o json
29
+ ```
30
+
31
+ ### List numbers filtered by state
32
+ ```bash
33
+ wxcli numbers list --state ACTIVE -o json
34
+ # States: ACTIVE, INACTIVE
35
+ ```
36
+
37
+ ### Find a number by phone number
38
+ ```bash
39
+ wxcli numbers list --phone-number "+15125551000" -o json
40
+ ```
41
+
42
+ ### Find numbers by owner
43
+ ```bash
44
+ wxcli numbers list --owner-id PERSON_ID -o json
45
+ ```
46
+
47
+ ## Resolution Rules
48
+
49
+ **Finding a person's number:**
50
+ 1. `wxcli people list --display-name "John Smith" -o json` → get person ID
51
+ 2. `wxcli numbers list --owner-id <personId> -o json` → get their number(s)
52
+
53
+ **Finding who has a number:**
54
+ 1. `wxcli numbers list --phone-number "+15125551000" -o json` → check `owner` field
55
+ 2. The `owner` object contains `type` (PEOPLE, AUTO_ATTENDANT, CALL_QUEUE, HUNT_GROUP, etc.) and `id`
56
+ 3. If type is PEOPLE: `wxcli people show <ownerId> -o json` → get the person's name
57
+
58
+ **Finding a location's numbers:**
59
+ 1. If user says a location name (not ID): `wxcli locations list -o json` → search by name → get location ID
60
+ 2. `wxcli numbers list --location-id <locationId> -o json`
61
+
62
+ ## Response Guidance
63
+
64
+ **Inventory query** ("Show me all numbers at Austin"):
65
+ Group by assignment status. Show counts.
66
+ ```
67
+ Austin has 50 phone numbers:
68
+ - 38 assigned (32 to users, 3 to auto attendants, 2 to call queues, 1 to hunt group)
69
+ - 12 available
70
+
71
+ Number range: +1-512-555-1000 through +1-512-555-1049
72
+ ```
73
+
74
+ **Lookup query** ("What number is John on?"):
75
+ ```
76
+ John Smith has 1 number:
77
+ - +1-512-555-1023 (extension 1023, Austin location)
78
+ ```
79
+
80
+ **Available query** ("Which numbers aren't assigned?"):
81
+ ```
82
+ 12 numbers are available at Austin:
83
+ - +1-512-555-1038
84
+ - +1-512-555-1039
85
+ ... and 10 more
86
+ ```
87
+
88
+ ## Gotchas
89
+
90
+ 1. **Number list can be large.** For orgs with 1000+ numbers, encourage location-scoped queries: "That's a lot of numbers. Want me to check a specific location?"
91
+ 2. **Owner field structure.** The `owner` object in the number response has `type`, `id`, `firstName`, `lastName`. Use firstName/lastName directly when available — avoids an extra API call.
92
+ 3. **Main number flag.** Numbers with `mainNumber: true` are the location's main line. Note this in responses: "+1-512-555-1000 (main number for Austin)".
93
+ 4. **Extension vs DID.** Numbers may be extension-only (no external DID). Check `phoneNumberType` field.
@@ -0,0 +1,146 @@
1
+ # People & Settings Domain
2
+
3
+ **Covers:** User lookups, call settings audits (voicemail, forwarding, DND, recording, caller ID, permissions, executive-assistant pairing).
4
+
5
+ ## Question Patterns
6
+
7
+ | Pattern | Example |
8
+ |---------|---------|
9
+ | User lookup | "Show me users at Austin", "Find John Smith" |
10
+ | Setting check (single user) | "Does John have voicemail enabled?", "Show me Jane's call forwarding" |
11
+ | Setting audit (bulk) | "Which users at Austin don't have voicemail?", "Who has DND turned on?" |
12
+ | Recording audit | "Show me everyone whose calls are being recorded" |
13
+ | Executive-assistant | "Which users have executive-assistant pairing?" |
14
+ | Comparison | "What's different about John's settings vs Jane's?" |
15
+
16
+ ## Command Recipes
17
+
18
+ ### List users (org-wide or filtered)
19
+ ```bash
20
+ wxcli people list -o json
21
+ wxcli people list --location-id LOCATION_ID -o json
22
+ wxcli people list --display-name "John Smith" -o json
23
+ wxcli people list --email "john@example.com" -o json
24
+ ```
25
+
26
+ ### Show a specific user
27
+ ```bash
28
+ wxcli people show PERSON_ID -o json
29
+ ```
30
+
31
+ ### Voicemail settings
32
+ ```bash
33
+ wxcli user-settings show-voicemail PERSON_ID -o json
34
+ ```
35
+ Response includes: `enabled`, `sendBusyCalls`, `sendUnansweredCalls`, `emailCopyOfMessage`, `messageStorage`, `notifications`.
36
+
37
+ ### Call forwarding settings
38
+ ```bash
39
+ wxcli user-settings show-call-forwarding PERSON_ID -o json
40
+ ```
41
+ Response includes 4 blocks: `always`, `busy`, `noAnswer`, `businessContinuity`. Each has `enabled` and `destination`.
42
+
43
+ ### Call recording settings
44
+ ```bash
45
+ wxcli user-settings show-call-recording PERSON_ID -o json
46
+ ```
47
+ Response includes: `enabled`, `record` (Always/Never/Always with Pause/On Demand), `startStopAnnouncement`.
48
+
49
+ ### Do Not Disturb
50
+ ```bash
51
+ wxcli user-settings show-do-not-disturb PERSON_ID -o json
52
+ ```
53
+ Response includes: `enabled`, `ringSplashEnabled`.
54
+
55
+ ### Caller ID
56
+ ```bash
57
+ wxcli user-settings show-caller-id PERSON_ID -o json
58
+ ```
59
+
60
+ ### Executive-assistant pairing
61
+ ```bash
62
+ wxcli user-settings show-executive-assistant PERSON_ID -o json
63
+ ```
64
+ Response includes: `type` (UNASSIGNED, EXECUTIVE, or EXECUTIVE_ASSISTANT).
65
+
66
+ ### Call intercept
67
+ ```bash
68
+ wxcli user-settings show-intercept PERSON_ID -o json
69
+ ```
70
+
71
+ ### Barge-in
72
+ ```bash
73
+ wxcli user-settings show-barge-in PERSON_ID -o json
74
+ ```
75
+
76
+ ### Call waiting
77
+ ```bash
78
+ wxcli user-settings show-call-waiting PERSON_ID -o json
79
+ ```
80
+
81
+ ### Hoteling
82
+ ```bash
83
+ wxcli user-settings show-hoteling PERSON_ID -o json
84
+ ```
85
+
86
+ ## Resolution Rules
87
+
88
+ **Finding a person by name:**
89
+ 1. `wxcli people list --display-name "John Smith" -o json`
90
+ 2. If exact match → use it. If multiple → disambiguate by location/email.
91
+ 3. If no results → try partial: `wxcli people list --display-name "John" -o json`
92
+
93
+ **Finding users at a location by name:**
94
+ 1. `wxcli locations list -o json` → search for location name → get ID
95
+ 2. `wxcli people list --location-id <locationId> -o json`
96
+
97
+ ## Join Patterns
98
+
99
+ **Audit query** ("Which users at Austin don't have voicemail?"):
100
+ 1. Resolve location name → ID: `wxcli locations list -o json`
101
+ 2. List users at location: `wxcli people list --location-id <locationId> -o json`
102
+ 3. For each user, fetch setting: `wxcli user-settings show-voicemail <personId> -o json`
103
+ 4. Filter to matches (enabled=false or missing)
104
+ 5. Format as audit table
105
+
106
+ **Comparison query** ("Compare John's settings vs Jane's"):
107
+ 1. Resolve both names to person IDs
108
+ 2. Fetch the same setting(s) for both
109
+ 3. Present side-by-side with differences highlighted
110
+
111
+ ## Response Guidance
112
+
113
+ **Single-user setting check:**
114
+ ```
115
+ John Smith has voicemail enabled.
116
+ - Send busy calls to voicemail: Yes
117
+ - Send unanswered calls after 3 rings: Yes
118
+ - Email copy to: john.smith@acme.com
119
+ - Greeting: Custom
120
+ ```
121
+
122
+ **Bulk audit:**
123
+ ```
124
+ 12 of 45 users at Austin don't have voicemail enabled:
125
+ - Alice Johnson (ext 3001)
126
+ - Brian Kim (ext 3002)
127
+ - Carol Davis (ext 3003)
128
+ ... and 9 more
129
+
130
+ Note: I checked all 45 Webex Calling-licensed users at the Austin location.
131
+ ```
132
+
133
+ **Executive-assistant pairing:**
134
+ ```
135
+ 3 executive-assistant pairings found:
136
+ - Jane Smith (Executive) ↔ Alice Johnson (Assistant)
137
+ - Bob Lee (Executive) ↔ Carol Davis (Assistant)
138
+ - Tom Chen (Executive) ↔ Maria Garcia (Assistant)
139
+ ```
140
+
141
+ ## Gotchas
142
+
143
+ 1. **6 person settings are user-only (no admin path).** If a setting returns 404 with error 4008, it requires user-level OAuth. Report: "This setting can only be viewed by the user themselves, not by an admin."
144
+ 2. **Two path families for person settings.** The CLI abstracts this — use `wxcli user-settings` commands and they route to the correct path. No need to worry about `/people/{id}/features/` vs `/telephony/config/people/{id}/`.
145
+ 3. **Workspace settings differ from person settings.** Basic workspaces return 405 for most `/telephony/config/` settings. If a workspace query fails with 405, report: "This workspace has a Basic license — only DND and Music on Hold settings are available."
146
+ 4. **Large org batching.** For orgs with 100+ users, batch settings checks and provide progress updates. Don't try to fetch all settings in a single burst.