@salesforce/afv-skills 1.42.0 → 1.44.0

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 (243) hide show
  1. package/package.json +2 -6
  2. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
  3. package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
  4. package/skills/design-systems-slds-validate/SKILL.md +2 -2
  5. package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
  6. package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
  7. package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
  8. package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
  9. package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
  10. package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
  11. package/skills/dx-devops-request-status/SKILL.md +160 -0
  12. package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
  13. package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
  14. package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
  15. package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
  16. package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
  17. package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
  18. package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
  19. package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
  20. package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
  21. package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
  22. package/skills/dx-org-shape-manage/SKILL.md +152 -0
  23. package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
  24. package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
  25. package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
  26. package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
  27. package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
  28. package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
  29. package/skills/dx-org-switch/SKILL.md +2 -2
  30. package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
  31. package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
  32. package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
  33. package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
  34. package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
  35. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
  36. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
  37. package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
  38. package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
  39. package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
  40. package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
  41. package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
  42. package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
  43. package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
  44. package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
  45. package/skills/experience-cms-brand-apply/SKILL.md +4 -1
  46. package/skills/experience-cms-brand-create/SKILL.md +197 -0
  47. package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
  48. package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
  49. package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
  50. package/skills/experience-cms-content-generate/SKILL.md +192 -0
  51. package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
  52. package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
  53. package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
  54. package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
  55. package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
  56. package/skills/experience-cms-content-generate/assets/questions.md +241 -0
  57. package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
  58. package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
  59. package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
  60. package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
  61. package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
  62. package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
  63. package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
  64. package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
  65. package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
  66. package/skills/experience-cms-content-generate/references/principles.md +19 -0
  67. package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
  68. package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
  69. package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
  70. package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
  71. package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
  72. package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
  73. package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
  74. package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
  75. package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
  76. package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
  77. package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
  78. package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
  79. package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
  80. package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
  81. package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
  82. package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
  83. package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
  84. package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
  85. package/skills/experience-lwc-design-generate/SKILL.md +5 -4
  86. package/skills/experience-lwc-generate/SKILL.md +10 -9
  87. package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
  88. package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
  89. package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
  90. package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
  91. package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
  92. package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
  93. package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
  94. package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
  95. package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
  96. package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
  97. package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
  98. package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
  99. package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
  100. package/skills/integration-connectivity-generate/SKILL.md +11 -10
  101. package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
  102. package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
  103. package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
  104. package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
  105. package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
  106. package/skills/platform-custom-application-generate/SKILL.md +2 -0
  107. package/skills/platform-custom-field-generate/SKILL.md +8 -6
  108. package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
  109. package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
  110. package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
  111. package/skills/platform-custom-setting-generate/SKILL.md +419 -0
  112. package/skills/platform-dataspace-access-configure/SKILL.md +2 -0
  113. package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
  114. package/skills/platform-value-set-generate/SKILL.md +2 -0
  115. package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
  116. package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
  117. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
  118. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
  119. package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
  120. package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
  121. package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
  122. package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
  123. package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
  124. package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
  125. package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
  126. package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
  127. package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
  128. package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
  129. package/skills/service-de-channel-activate/SKILL.md +271 -0
  130. package/skills/service-de-channel-activate/references/gotchas.md +31 -0
  131. package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
  132. package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
  133. package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
  134. package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
  135. package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
  136. package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
  137. package/skills/service-de-channel-create/SKILL.md +369 -0
  138. package/skills/service-de-channel-create/references/apple.md +59 -0
  139. package/skills/service-de-channel-create/references/connect-insert.md +84 -0
  140. package/skills/service-de-channel-create/references/facebook.md +154 -0
  141. package/skills/service-de-channel-create/references/line.md +66 -0
  142. package/skills/service-de-channel-create/references/sms.md +98 -0
  143. package/skills/service-de-channel-create/references/whatsapp.md +98 -0
  144. package/skills/service-de-channel-create/references/worked-examples.md +70 -0
  145. package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
  146. package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
  147. package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
  148. package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
  149. package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
  150. package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
  151. package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
  152. package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
  153. package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
  154. package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
  155. package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
  156. package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
  157. package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
  158. package/skills/service-de-waba-integrate/SKILL.md +227 -0
  159. package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
  160. package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
  161. package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
  162. package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
  163. package/skills/service-email-to-case-configure/SKILL.md +190 -0
  164. package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
  165. package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
  166. package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
  167. package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
  168. package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
  169. package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
  170. package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
  171. package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
  172. package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
  173. package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
  174. package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
  175. package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
  176. package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
  177. package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
  178. package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
  179. package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
  180. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
  181. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
  182. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
  183. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
  184. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
  185. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
  186. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
  187. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
  188. package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
  189. package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
  190. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
  191. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
  192. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
  193. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
  194. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
  195. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
  196. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
  197. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
  198. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
  199. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
  200. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
  201. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
  202. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
  203. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
  204. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
  205. package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
  206. package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
  207. package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
  208. package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
  209. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
  210. package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
  211. package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
  212. package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
  213. package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
  214. package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
  215. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
  216. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
  217. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
  218. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
  219. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
  220. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
  221. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
  222. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
  223. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
  224. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
  225. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
  226. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
  227. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
  228. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
  229. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
  230. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
  231. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
  232. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
  233. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
  234. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
  235. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
  236. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
  237. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
  238. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
  239. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
  240. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
  241. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
  242. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
  243. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/scripts/contrast-ratio.py +0 -0
@@ -0,0 +1,101 @@
1
+ # ThunderbirdVoiceSettings — Metadata API contract
2
+
3
+ Reference for enabling Native Voice (Thunderbird Voice) recording and transcription
4
+ via the Metadata API, using the sf CLI `Settings`-container retrieve/deploy path.
5
+ Read this when constructing or debugging `scripts/enable-recording-transcription.sh`.
6
+
7
+ ## The metadata type
8
+
9
+ `ThunderbirdVoiceSettings` is a singleton settings type (extends `Metadata`),
10
+ addressed by a fixed `fullName`:
11
+
12
+ - **type (mdApiType)**: `ThunderbirdVoiceSettings`
13
+ - **fullName**: `ThunderbirdVoice`
14
+
15
+ This skill manages exactly two boolean preferences:
16
+
17
+ | Field | Meaning | This skill |
18
+ |-------|---------|------------|
19
+ | `enableCallRecording` | Capture audio of Native Voice calls | **set `true`** (target) |
20
+ | `enableCallTranscription` | Produce transcripts of Native Voice calls | **set `true`** (target) |
21
+
22
+ Recording and transcription are independent — a call can be recorded without being
23
+ transcribed and vice versa — so they are always modeled and reported as two separate
24
+ preferences.
25
+
26
+ The type may expose other booleans (e.g. `enableCallRecRedaction`,
27
+ `enableRealTimeStreamingRecording`, `enableSipRecording`). They are **out of scope** to
28
+ *change*: the skill reads them only to preserve their existing values on the deployed
29
+ file. It does, however, **echo them back unchanged** in a `preserved` block of the
30
+ confirmation JSON — reporting a sibling's retrieved value is not the same as setting it,
31
+ and compliance callers rely on that block for explicit "nothing else moved" assurance.
32
+ No sibling is ever reported as changed.
33
+
34
+ ## Why the sf CLI, not raw SOAP
35
+
36
+ `ThunderbirdVoiceSettings` is not a retrievable top-level type name, so it is easy to
37
+ conclude "raw SOAP `updateMetadata()` is the only path." That is wrong. The generic
38
+ **`Settings`** container type *is* in the sf CLI metadata registry, and its member is
39
+ the mdApiType **without** the trailing `Settings` — i.e. `ThunderbirdVoice`. Retrieving
40
+ and deploying through that container:
41
+
42
+ - authenticates with the org's existing **`sf` login** — no browser session id /
43
+ access token is ever handled (raw SOAP on internal pc-rnd orgs rejects CLI OAuth
44
+ sessions on the SOAP endpoint, which is why a SOAP path there needs a browser sid);
45
+ - lets us **retrieve first** to check the gate and snapshot sibling prefs, then deploy
46
+ a full file that preserves them;
47
+ - gives a built-in **verify** step (round-trip retrieve).
48
+
49
+ ## The manifest
50
+
51
+ `assets/package.xml` is the manifest template (the script generates it into a temp
52
+ SFDX project). Two things matter:
53
+
54
+ ```xml
55
+ <types><members>ThunderbirdVoice</members><name>Settings</name></types>
56
+ <version>68.0</version>
57
+ ```
58
+
59
+ - **member** = `ThunderbirdVoice` (mdApiType minus `Settings`), **name** = `Settings`.
60
+ - **Pin the version to 68.0.** `ThunderbirdVoiceSettings` fields are only exposed at
61
+ API **v68.0 and above**, so anything below 68.0 returns the type empty/absent — the
62
+ fields simply are not in the schema at those versions. But do NOT reach for the CLI's
63
+ newest default either: a retrieve/deploy at a version **above the org's max supported
64
+ API** SILENTLY returns an empty result (no error), indistinguishable from "feature not
65
+ provisioned". 68.0 is the field-exposure floor and works on every org that has the
66
+ feature. (Verified sweep on thb-einstein, org max v68.0: v64/62/60 → "Settings type
67
+ 'ThunderbirdVoice' is unknown"; v65/66/67 → type absent; v68 → fields present, deploy
68
+ round-trips; **v69 → success:true but files:[] — silent empty**.)
69
+
70
+ ## Sequence
71
+
72
+ 1. **Retrieve** `-x package.xml` → `force-app/main/default/settings/ThunderbirdVoice.settings-meta.xml`.
73
+ 2. **Gate check.** If the file is an empty self-closing `<ThunderbirdVoiceSettings/>`
74
+ (no fields), the org-perm gate `ThunderbirdVoice.orgHasNativeVoiceAllowed` is **off**
75
+ — Native Voice is not provisioned. Stop; this is enabled via provisioning/Blacktab,
76
+ not this skill. If the fields are listed, the gate is on — proceed.
77
+ 3. **Flip** `enableCallRecording` and `enableCallTranscription` to `true`; leave every
78
+ sibling field at its retrieved value.
79
+ 4. **Validate** with `deploy --dry-run` (never skip).
80
+ 5. **Deploy**.
81
+ 6. **Verify** by re-retrieving and confirming the org *returns* both `true`.
82
+
83
+ ## Distinguishing the two failure modes
84
+
85
+ | Symptom | Cause | What to do |
86
+ |---------|-------|------------|
87
+ | Retrieve returns fields, deploy round-trips | Working as intended | done |
88
+ | Retrieve returns an **empty** `<ThunderbirdVoiceSettings/>` | Org-perm gate off (feature not provisioned) | provision / Blacktab — not fixable via metadata |
89
+ | Retrieve returns **no** settings file, or `Settings` type "unknown" | **API version too low** (< 68.0) | raise `--api-version` to 68.0+ |
90
+
91
+ > The historical `FIELD_INTEGRITY_EXCEPTION: Property 'enableCallRecording' not valid
92
+ > in version <N>` error was **a version problem, not a feature gate** — it appeared when
93
+ > the request used an API version below 68.0. Bumping to v68.0+ resolves it. Do not
94
+ > mistake it for an unprovisioned feature; distinguish the two with the retrieve gate
95
+ > check above.
96
+
97
+ ## Auth
98
+
99
+ `scripts/enable-recording-transcription.sh --target-org <alias>` uses the sf CLI's
100
+ existing authentication for that alias (confirm with `sf org display -o <alias>`). No
101
+ session id or access token is requested, handled, or printed.
@@ -0,0 +1,181 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Enable Native Voice (Thunderbird Voice) call recording + transcription via the
4
+ # Metadata API, using the sf CLI Settings-container retrieve/deploy path.
5
+ #
6
+ # Scope: this skill enables exactly two preferences — enableCallRecording and
7
+ # enableCallTranscription. Every other ThunderbirdVoiceSettings boolean is read
8
+ # only to be preserved verbatim — none is changed. The siblings ARE reported
9
+ # back (unchanged) in a `preserved` block so compliance callers can confirm
10
+ # nothing else moved; reporting a value is not the same as setting it.
11
+ #
12
+ # Why sf CLI (not raw SOAP): the generic `Settings` metadata type IS in the sf
13
+ # CLI registry (member = the type name without the `Settings` suffix, i.e.
14
+ # `ThunderbirdVoice`). Deploying through it authenticates with the org's existing
15
+ # `sf` login — no browser session id / access token is ever handled. Retrieving
16
+ # first lets us (a) check the org-perm gate and (b) preserve sibling prefs.
17
+ #
18
+ # Sequence: retrieve -> gate check -> flip the two target fields -> validate
19
+ # (dry-run) -> deploy -> verify by round-trip -> print a JSON confirmation.
20
+ #
21
+ # Deps: sf, jq. (No curl, no session id.)
22
+ #
23
+ set -euo pipefail
24
+
25
+ # ThunderbirdVoiceSettings fields are only exposed at API v68.0+; below that the
26
+ # Settings type does not appear in a retrieve at all. Default to exactly 68.0 — the
27
+ # field-exposure floor. A retrieve/deploy at a version ABOVE the org's max supported
28
+ # API SILENTLY returns an empty result (no error), which is indistinguishable from
29
+ # "feature not provisioned". 68.0 works on every org that has the feature; do NOT
30
+ # bump this default to a newer version unless you also cap it to the org's max.
31
+ API_VERSION="68.0"
32
+ TARGET_ORG=""
33
+ DRY_RUN="false"
34
+
35
+ # mdApiType ThunderbirdVoiceSettings -> package.xml member without the "Settings" suffix.
36
+ MEMBER="ThunderbirdVoice"
37
+ SETTINGS_FILE_REL="force-app/main/default/settings/${MEMBER}.settings-meta.xml"
38
+
39
+ usage() {
40
+ cat <<'EOF'
41
+ Enable Native Voice call recording + transcription (sf CLI Settings deploy).
42
+
43
+ Usage:
44
+ enable-recording-transcription.sh --target-org <alias> [--dry-run] [--api-version X.Y]
45
+
46
+ Options:
47
+ --target-org <alias> Org alias/username the sf CLI is authenticated to. Required.
48
+ --api-version <X.Y> Metadata API version (default: 68.0; must be >= 68.0, the
49
+ version at which ThunderbirdVoiceSettings is exposed). Do NOT
50
+ exceed the target org's max supported version — a retrieve
51
+ above it silently returns empty.
52
+ --dry-run Retrieve + validate the change (deploy --dry-run) but do NOT
53
+ persist it. Prints the JSON confirmation with status VALIDATED.
54
+ -h, --help Show this help.
55
+
56
+ On success prints a JSON confirmation object: the two enabled preferences reported
57
+ separately, plus a `preserved` block echoing every sibling boolean (unchanged) so
58
+ callers can confirm nothing else moved.
59
+ Uses the org's sf login; no session id / access token is handled or printed.
60
+ EOF
61
+ }
62
+
63
+ while [ $# -gt 0 ]; do
64
+ case "$1" in
65
+ --target-org) TARGET_ORG="$2"; shift 2 ;;
66
+ --api-version) API_VERSION="$2"; shift 2 ;;
67
+ --dry-run) DRY_RUN="true"; shift ;;
68
+ -h|--help) usage; exit 0 ;;
69
+ *) echo "ERROR: unknown argument: $1" >&2; usage >&2; exit 2 ;;
70
+ esac
71
+ done
72
+
73
+ fail() { echo "ERROR: $*" >&2; exit 1; }
74
+
75
+ command -v sf >/dev/null 2>&1 || fail "sf CLI not found (required)."
76
+ command -v jq >/dev/null 2>&1 || fail "jq not found (required)."
77
+ [ -n "$TARGET_ORG" ] || fail "--target-org is required."
78
+
79
+ # Guard the version floor deterministically. Require a full X.Y form so a bare
80
+ # major like "68" can't end up as <version>68</version> in the manifest.
81
+ printf '%s' "$API_VERSION" | grep -qE '^[0-9]+\.[0-9]+$' \
82
+ || fail "invalid --api-version '$API_VERSION' (expected X.Y, e.g. 68.0)."
83
+ API_MAJOR="${API_VERSION%%.*}"
84
+ [ "$API_MAJOR" -ge 68 ] || fail "--api-version must be >= 68.0 (ThunderbirdVoiceSettings is not exposed below v68.0). Got $API_VERSION."
85
+
86
+ # --- scaffold an isolated SFDX project so the retrieve/deploy is self-contained
87
+ WORKDIR="$(mktemp -d)"
88
+ trap 'rm -rf "$WORKDIR"' EXIT
89
+ sf project generate --name p --output-dir "$WORKDIR" >/dev/null 2>&1 \
90
+ || fail "could not scaffold a temporary SFDX project."
91
+ PROJ="$WORKDIR/p"
92
+
93
+ cat > "$PROJ/package.xml" <<EOF
94
+ <?xml version="1.0" encoding="UTF-8"?>
95
+ <Package xmlns="http://soap.sforce.com/2006/04/metadata">
96
+ <types><members>${MEMBER}</members><name>Settings</name></types>
97
+ <version>${API_VERSION}</version>
98
+ </Package>
99
+ EOF
100
+
101
+ SETTINGS_FILE="$PROJ/$SETTINGS_FILE_REL"
102
+
103
+ # --- step 1: retrieve current settings (gate check + sibling snapshot) --------
104
+ ( cd "$PROJ" && sf project retrieve start -x package.xml -o "$TARGET_ORG" >/dev/null 2>&1 ) \
105
+ || fail "retrieve failed for org '$TARGET_ORG'. Check the alias is connected (sf org display -o $TARGET_ORG)."
106
+
107
+ [ -f "$SETTINGS_FILE" ] || fail "retrieve returned no ${MEMBER}.settings-meta.xml — the Settings type was not returned at v${API_VERSION}. Two causes: (a) v${API_VERSION} is BELOW 68.0 (fields not yet exposed), or (b) v${API_VERSION} is ABOVE the org's max supported API version, which SILENTLY returns empty. Pin --api-version to the org's max (68.0 works on every org that has the feature)."
108
+
109
+ # Gate check: an empty self-closing element means the org-perm gate
110
+ # (orgHasNativeVoiceAllowed) is OFF — the feature is not provisioned. The fields
111
+ # are only present when the gate is on.
112
+ if ! grep -q '<enableCallRecording>' "$SETTINGS_FILE"; then
113
+ fail "Native Voice is not provisioned on '$TARGET_ORG' (ThunderbirdVoiceSettings returned no fields). This is an org-perm gate enabled through provisioning/Blacktab, not something this skill can flip."
114
+ fi
115
+
116
+ # --- step 2: flip only the two target fields, preserve every sibling ----------
117
+ # Version-suffixed sed -i for BSD (macOS) + GNU portability.
118
+ sed -E -i.bak \
119
+ -e 's|<enableCallRecording>[^<]*</enableCallRecording>|<enableCallRecording>true</enableCallRecording>|' \
120
+ -e 's|<enableCallTranscription>[^<]*</enableCallTranscription>|<enableCallTranscription>true</enableCallTranscription>|' \
121
+ "$SETTINGS_FILE"
122
+ rm -f "${SETTINGS_FILE}.bak"
123
+
124
+ grep -q '<enableCallRecording>true</enableCallRecording>' "$SETTINGS_FILE" || fail "could not set enableCallRecording in the retrieved file."
125
+ grep -q '<enableCallTranscription>true</enableCallTranscription>' "$SETTINGS_FILE" || fail "could not set enableCallTranscription in the retrieved file."
126
+
127
+ # --- step 3: validate (dry-run). Never skip. ---------------------------------
128
+ ( cd "$PROJ" && sf project deploy start -x package.xml -o "$TARGET_ORG" --dry-run --ignore-conflicts >/dev/null 2>&1 ) \
129
+ || fail "validation (deploy --dry-run) failed — the org rejected the change. Re-check the gate (step 1)."
130
+
131
+ # Collect every boolean sibling (<tag>true|false</tag>) EXCEPT the two target
132
+ # prefs from the retrieved settings file, as a JSON array [{name, enabled}], so
133
+ # the confirmation can attest each sibling was retrieved and carried through
134
+ # unchanged. `grep -o` isolates each pair; `#`-delimited sed avoids colliding
135
+ # with the `|` alternation; the `|| true` guards keep an empty result (no
136
+ # siblings) from tripping `set -o pipefail`.
137
+ extract_preserved() { # $1 = settings xml file -> JSON array on stdout
138
+ { grep -oE '<[A-Za-z][A-Za-z0-9]*>(true|false)</[A-Za-z][A-Za-z0-9]*>' "$1" || true; } \
139
+ | sed -E 's#<([A-Za-z0-9]+)>([a-z]+)</[A-Za-z0-9]+>#\1 \2#' \
140
+ | { grep -vE '^(enableCallRecording|enableCallTranscription) ' || true; } \
141
+ | jq -R -s 'split("\n") | map(select(length > 0) | split(" ") | { name: .[0], enabled: (.[1] == "true") })'
142
+ }
143
+
144
+ emit_json() { # $1 = status, $2 = preserved siblings JSON array
145
+ jq -n --arg apiVersion "$API_VERSION" --arg status "$1" --argjson preserved "$2" \
146
+ '{
147
+ type: "ThunderbirdVoiceSettings",
148
+ fullName: "ThunderbirdVoice",
149
+ apiVersion: $apiVersion,
150
+ method: "sf project deploy (Settings/ThunderbirdVoice)",
151
+ headless: true,
152
+ preferences: [
153
+ { name: "enableCallRecording", enabled: true },
154
+ { name: "enableCallTranscription", enabled: true }
155
+ ],
156
+ preserved: $preserved,
157
+ status: $status
158
+ }'
159
+ }
160
+
161
+ if [ "$DRY_RUN" = "true" ]; then
162
+ # Siblings are still at their retrieved values in the local file (only the two
163
+ # targets were flipped in step 2); report them as preserved.
164
+ emit_json "VALIDATED" "$(extract_preserved "$SETTINGS_FILE")"
165
+ exit 0
166
+ fi
167
+
168
+ # --- step 4: deploy ----------------------------------------------------------
169
+ ( cd "$PROJ" && sf project deploy start -x package.xml -o "$TARGET_ORG" --ignore-conflicts >/dev/null 2>&1 ) \
170
+ || fail "deploy failed after a successful dry-run."
171
+
172
+ # --- step 5: verify by round-trip (do not trust "Succeeded") -----------------
173
+ rm -f "$SETTINGS_FILE"
174
+ ( cd "$PROJ" && sf project retrieve start -x package.xml -o "$TARGET_ORG" >/dev/null 2>&1 ) \
175
+ || fail "post-deploy retrieve failed; cannot verify."
176
+ grep -q '<enableCallRecording>true</enableCallRecording>' "$SETTINGS_FILE" || fail "verification failed: org did not return enableCallRecording=true."
177
+ grep -q '<enableCallTranscription>true</enableCallTranscription>' "$SETTINGS_FILE" || fail "verification failed: org did not return enableCallTranscription=true."
178
+
179
+ # Report siblings from the post-deploy round-tripped file — their real, current
180
+ # (unchanged) values, proving nothing else moved.
181
+ emit_json "ENABLED" "$(extract_preserved "$SETTINGS_FILE")"
@@ -1,22 +0,0 @@
1
- # Channel branch — Help Portal *(Coming soon)*
2
-
3
- > **When to read this file.** Load it only if the user selected **Help Portal** at Checkpoint 3.
4
-
5
- ## This is a hard stop, not an aspirational selection
6
-
7
- Help Portal is **not yet supported.** DO NOT attempt to build anything for this channel. Do not create supporting objects, records, or metadata "toward" the feature — standing up a portal site or wiring routing for it is out of scope and requires a dedicated skill that does not exist yet. Trying to fulfill it by creating adjacent objects produces broken half-configurations that look done but never work.
8
-
9
- Respond to the user verbatim:
10
-
11
- > *"This feature is coming soon, please select Web Chat."*
12
-
13
- Then re-present the channel selection (Web Chat / Help Portal / Voice) and wait for a supported choice. Do not proceed until the user picks Web Chat.
14
-
15
- ## Intended future shape (for reference only — do not build)
16
-
17
- When the channel ships, it will ask the user for:
18
- - **Site Name / Domain Name**
19
- - **Logo image** (png, svg, or jpg — a file name or path)
20
- - **Brand colors (RGB)**: Action color, Link color, Border color, Background color, Text color
21
-
22
- …then use `experience-lwr-site-generate` to build the Experience Cloud site with the supplied branding and embed the agent on it. This is documented so the eventual implementation has a target; it is **not** a licence to build it now.