@salesforce/afv-skills 1.41.0 → 1.43.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.
- package/package.json +2 -6
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
- package/skills/design-systems-slds-validate/SKILL.md +2 -2
- package/skills/dx-app-analytics-query/SKILL.md +1 -3
- package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
- package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
- package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
- package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
- package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
- package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
- package/skills/dx-devops-request-status/SKILL.md +160 -0
- package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
- package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
- package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
- package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
- package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
- package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
- package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
- package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
- package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
- package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
- package/skills/dx-org-shape-manage/SKILL.md +152 -0
- package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
- package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
- package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
- package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
- package/skills/dx-org-switch/SKILL.md +2 -2
- package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
- package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
- package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
- package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
- package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
- package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
- package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
- package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
- package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
- package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
- package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
- package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
- package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
- package/skills/experience-cms-brand-apply/SKILL.md +4 -1
- package/skills/experience-cms-brand-create/SKILL.md +197 -0
- package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
- package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
- package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
- package/skills/experience-cms-content-generate/SKILL.md +190 -0
- package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
- package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
- package/skills/experience-cms-content-generate/assets/questions.md +241 -0
- package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
- package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
- package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
- package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
- package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
- package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
- package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
- package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
- package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
- package/skills/experience-cms-content-generate/references/principles.md +19 -0
- package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
- package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
- package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
- package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
- package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
- package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
- package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
- package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
- package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
- package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
- package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
- package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
- package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
- package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
- package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
- package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
- package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
- package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
- package/skills/experience-lwc-design-generate/SKILL.md +5 -4
- package/skills/experience-lwc-generate/SKILL.md +10 -9
- package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
- package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
- package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
- package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
- package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
- package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
- package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
- package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
- package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
- package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
- package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
- package/skills/integration-connectivity-generate/SKILL.md +11 -10
- package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
- package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
- package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
- package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
- package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
- package/skills/platform-custom-application-generate/SKILL.md +2 -0
- package/skills/platform-custom-field-generate/SKILL.md +8 -6
- package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
- package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
- package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
- package/skills/platform-custom-setting-generate/SKILL.md +419 -0
- package/skills/platform-dataspace-access-configure/SKILL.md +3 -3
- package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
- package/skills/platform-value-set-generate/SKILL.md +2 -0
- package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
- package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
- package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
- package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
- package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
- package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
- package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
- package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
- package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
- package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
- package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
- package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
- package/skills/service-de-channel-activate/SKILL.md +271 -0
- package/skills/service-de-channel-activate/references/gotchas.md +31 -0
- package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
- package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
- package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
- package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
- package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
- package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
- package/skills/service-de-channel-create/SKILL.md +369 -0
- package/skills/service-de-channel-create/references/apple.md +59 -0
- package/skills/service-de-channel-create/references/connect-insert.md +84 -0
- package/skills/service-de-channel-create/references/facebook.md +154 -0
- package/skills/service-de-channel-create/references/line.md +66 -0
- package/skills/service-de-channel-create/references/sms.md +98 -0
- package/skills/service-de-channel-create/references/whatsapp.md +98 -0
- package/skills/service-de-channel-create/references/worked-examples.md +70 -0
- package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
- package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
- package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
- package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
- package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
- package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
- package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
- package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
- package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
- package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
- package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
- package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
- package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
- package/skills/service-de-waba-integrate/SKILL.md +227 -0
- package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
- package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
- package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
- package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
- package/skills/service-email-to-case-configure/SKILL.md +190 -0
- package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
- package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
- package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
- package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
- package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
- package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
- package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
- package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
- package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
- package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
- package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
- package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
- package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
- package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
- package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
- package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
- package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
- package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
- package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
- package/skills/data360-activate/README.md +0 -38
- package/skills/data360-activate/SKILL.md +0 -127
- package/skills/data360-connect/README.md +0 -57
- package/skills/data360-connect/SKILL.md +0 -163
- package/skills/data360-connect/examples/connections/heroku-postgres.json +0 -15
- package/skills/data360-connect/examples/connections/ingest-api-connection.json +0 -5
- package/skills/data360-connect/examples/connections/ingest-api-schema.json +0 -31
- package/skills/data360-connect/examples/connections/redshift.json +0 -16
- package/skills/data360-connect/examples/connections/sharepoint-unstructured.json +0 -20
- package/skills/data360-connect/examples/connections/snowflake-connection.json +0 -42
- package/skills/data360-harmonize/README.md +0 -31
- package/skills/data360-harmonize/SKILL.md +0 -126
- package/skills/data360-orchestrate/README.md +0 -120
- package/skills/data360-orchestrate/SKILL.md +0 -263
- package/skills/data360-orchestrate/assets/definitions/activation-target.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/activation.template.json +0 -7
- package/skills/data360-orchestrate/assets/definitions/calculated-insight.template.json +0 -7
- package/skills/data360-orchestrate/assets/definitions/data-action-target.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/data-action.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/data-graph.template.json +0 -21
- package/skills/data360-orchestrate/assets/definitions/data-stream.template.json +0 -55
- package/skills/data360-orchestrate/assets/definitions/dmo.template.json +0 -17
- package/skills/data360-orchestrate/assets/definitions/identity-resolution.template.json +0 -30
- package/skills/data360-orchestrate/assets/definitions/mapping.template.json +0 -14
- package/skills/data360-orchestrate/assets/definitions/relationship.template.json +0 -12
- package/skills/data360-orchestrate/assets/definitions/search-index.template.json +0 -9
- package/skills/data360-orchestrate/assets/definitions/segment.template.json +0 -16
- package/skills/data360-orchestrate/references/feature-readiness.md +0 -157
- package/skills/data360-orchestrate/references/plugin-setup.md +0 -138
- package/skills/data360-orchestrate/scripts/bootstrap-plugin.sh +0 -53
- package/skills/data360-orchestrate/scripts/diagnose-org.mjs +0 -511
- package/skills/data360-orchestrate/scripts/generate-manifest.mjs +0 -68
- package/skills/data360-orchestrate/scripts/verify-plugin.sh +0 -58
- package/skills/data360-prepare/README.md +0 -50
- package/skills/data360-prepare/SKILL.md +0 -203
- package/skills/data360-prepare/examples/ingestion-api/.env.example +0 -8
- package/skills/data360-prepare/examples/ingestion-api/README.md +0 -48
- package/skills/data360-prepare/examples/ingestion-api/send-data.py +0 -144
- package/skills/data360-query/README.md +0 -43
- package/skills/data360-query/SKILL.md +0 -128
- package/skills/data360-query/examples/search-indexes/hybrid-structured.json +0 -44
- package/skills/data360-query/examples/search-indexes/vector-knowledge.json +0 -43
- package/skills/data360-segment/README.md +0 -35
- package/skills/data360-segment/SKILL.md +0 -123
- package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/scripts/contrast-ratio.py +0 -0
|
@@ -4,13 +4,13 @@ All four scripts are deterministic, side-effect-free JSON classifiers (A9). They
|
|
|
4
4
|
|
|
5
5
|
## `scripts/classify-permset-availability.mjs`
|
|
6
6
|
|
|
7
|
-
Decides Branch A vs Branch B (assign vs hand-off) AND emits per-persona `needsPsl` flags. Fulfiller-only — the
|
|
7
|
+
Decides Branch A vs Branch B (assign vs hand-off) AND emits per-persona `needsPsl` flags. Fulfiller-only — the three persona names are hard-coded.
|
|
8
8
|
|
|
9
9
|
### Input
|
|
10
10
|
|
|
11
11
|
One file path (positional):
|
|
12
12
|
|
|
13
|
-
1. `permsets.json` — `sf data query --json` capture of `PermissionSet` filtered to the
|
|
13
|
+
1. `permsets.json` — `sf data query --json` capture of `PermissionSet` filtered to the three Fulfiller persona `Name` values (see `permset-topology.md`). Unrelated rows are filtered out by the classifier.
|
|
14
14
|
|
|
15
15
|
Must be the raw stdout capture (the `{status, result: {records: [...]}}` envelope). An unparseable / non-envelope body produces `verdict:"CANNOT-CONFIRM"` with the raw error in `reasons[]`.
|
|
16
16
|
|
|
@@ -19,7 +19,7 @@ Must be the raw stdout capture (the `{status, result: {records: [...]}}` envelop
|
|
|
19
19
|
```json
|
|
20
20
|
{
|
|
21
21
|
"personasFound": ["IncidentFulfiller"],
|
|
22
|
-
"personasMissing": ["ProblemFulfillerPermSet","ChangeRequestFulfillerPermSet"
|
|
22
|
+
"personasMissing": ["ProblemFulfillerPermSet","ChangeRequestFulfillerPermSet"],
|
|
23
23
|
"candidates": [
|
|
24
24
|
{ "Id": "0PS...", "Name": "IncidentFulfiller", "Label": "Incident Fulfiller", "LicenseId": "0PL...", "needsPsl": true }
|
|
25
25
|
],
|
|
@@ -28,16 +28,16 @@ Must be the raw stdout capture (the `{status, result: {records: [...]}}` envelop
|
|
|
28
28
|
}
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
- `candidates[]` lists ONLY rows whose `Name` matches one of the
|
|
31
|
+
- `candidates[]` lists ONLY rows whose `Name` matches one of the three known Fulfiller personas. Unrelated rows in the query result are dropped.
|
|
32
32
|
- `needsPsl` is derived per-row from `LicenseId !== null` — read it from the SELECTED persona in the workflow.
|
|
33
|
-
- `personasFound` preserves the canonical order (Incident, Problem, Change
|
|
33
|
+
- `personasFound` preserves the canonical order (Incident, Problem, Change) so the AskUserQuestion menu is stable across runs.
|
|
34
34
|
|
|
35
35
|
Verdict values:
|
|
36
36
|
|
|
37
37
|
| verdict | Meaning | Caller action |
|
|
38
38
|
|---|---|---|
|
|
39
39
|
| `ASSIGN` | ≥1 Fulfiller persona present on the org | Continue to Phase 2. AskUserQuestion which persona to assign; read `needsPsl` off that persona to gate PSL SOQL + POST |
|
|
40
|
-
| `HAND-OFF` | None of the
|
|
40
|
+
| `HAND-OFF` | None of the three personas present | Skip Phase 2 entirely; go to Phase 3 (delegate to `service-itsm-agentic-setup-agentforce-studio-validate`) |
|
|
41
41
|
| `CANNOT-CONFIRM` | The query envelope was unparseable | Surface `reasons[]` verbatim and stop |
|
|
42
42
|
|
|
43
43
|
**Never auto-select** from `candidates[]` — a Fulfiller commonly needs only one persona (e.g. Incident) even when several are provisioned. Present the list and let the user pick.
|
|
@@ -9,7 +9,7 @@ Core (namespace `force`).
|
|
|
9
9
|
|
|
10
10
|
**Employee agent is out of scope for this skill.** The Employee agent's access
|
|
11
11
|
model is separate (org-preferences + a different persona layer) and does not
|
|
12
|
-
map onto these
|
|
12
|
+
map onto these three permsets.
|
|
13
13
|
|
|
14
14
|
## Fulfiller persona ↔ AddOn ↔ PSL ↔ PermSet
|
|
15
15
|
|
|
@@ -18,7 +18,6 @@ map onto these four permsets.
|
|
|
18
18
|
| Incident Fulfiller | `IncidentManagementAddOn-1` | `IncidentFulfillerPsl-1` | **`IncidentFulfiller`** | `IncidentFulfillerUser` |
|
|
19
19
|
| Problem Fulfiller | `ProblemManagementAddOn-1` | `ProblemFulfillerPsl-1` | **`ProblemFulfillerPermSet`** | `ProblemFulfillerUser` |
|
|
20
20
|
| Change Fulfiller | `ChangeManagementAddOn-1` | `ChangeRequestFulfillerPsl-1` | **`ChangeRequestFulfillerPermSet`** | `ChangeFulfillerPerm` |
|
|
21
|
-
| Release Manager | `ReleaseManagementAddOn-1` | `ReleaseManagerPsl-1` | **`ReleaseManagerPermSet`** | (org-perm-gated only) |
|
|
22
21
|
|
|
23
22
|
### Key facts
|
|
24
23
|
|
|
@@ -26,14 +25,9 @@ map onto these four permsets.
|
|
|
26
25
|
in the previous version of this skill (`svc_itsm_intelligence`) never
|
|
27
26
|
returns any of these rows.
|
|
28
27
|
- **Naming inconsistency**: `IncidentFulfiller` has NO `PermSet` suffix; the
|
|
29
|
-
other
|
|
28
|
+
other two DO. The classifier's fixed-name list reflects this exactly —
|
|
30
29
|
do not "normalize" the Incident name to `IncidentFulfillerPermSet`, it does
|
|
31
30
|
not exist on the org.
|
|
32
|
-
- **`ReleaseManagerPermSet`** ships as a permset but its Fulfiller user permission
|
|
33
|
-
lives on the OrgPreference layer (org-perm-gated). Assigning the permset
|
|
34
|
-
still works and is the correct write; the runtime effect activates once the
|
|
35
|
-
org toggle is on. Downstream, `service-itsm-agentic-setup-agentforce-studio-validate`
|
|
36
|
-
is the skill that toggles the org preference.
|
|
37
31
|
- **CMDB access is a separate concern** — the CMDB read/write permsets are
|
|
38
32
|
handled by `service-itsm-agentic-setup-cmdb-access-assign` and are not
|
|
39
33
|
gated by any `svc_itsm_intelligence__*` prompt-template invocable, so they
|
|
@@ -47,8 +41,7 @@ FROM PermissionSet
|
|
|
47
41
|
WHERE Name IN (
|
|
48
42
|
'IncidentFulfiller',
|
|
49
43
|
'ProblemFulfillerPermSet',
|
|
50
|
-
'ChangeRequestFulfillerPermSet'
|
|
51
|
-
'ReleaseManagerPermSet'
|
|
44
|
+
'ChangeRequestFulfillerPermSet'
|
|
52
45
|
)
|
|
53
46
|
```
|
|
54
47
|
|
|
@@ -2,19 +2,18 @@
|
|
|
2
2
|
// Deterministic branch classifier for the Fulfiller persona permset-assign flow.
|
|
3
3
|
//
|
|
4
4
|
// Reads ONE input:
|
|
5
|
-
// - PermissionSet query capture (from `sf data query --json`) for the
|
|
5
|
+
// - PermissionSet query capture (from `sf data query --json`) for the three
|
|
6
6
|
// Core-shipped Fulfiller persona permsets:
|
|
7
7
|
// * IncidentFulfiller
|
|
8
8
|
// * ProblemFulfillerPermSet
|
|
9
9
|
// * ChangeRequestFulfillerPermSet
|
|
10
|
-
// * ReleaseManagerPermSet
|
|
11
10
|
// (namespace `force`, not a managed-package namespace)
|
|
12
11
|
//
|
|
13
12
|
// Rules (A9):
|
|
14
|
-
// - `verdict:"ASSIGN"` — ≥1 of the
|
|
13
|
+
// - `verdict:"ASSIGN"` — ≥1 of the three personas is present. Caller
|
|
15
14
|
// asks the user which persona to assign; do NOT
|
|
16
15
|
// auto-select.
|
|
17
|
-
// - `verdict:"HAND-OFF"` — none of the
|
|
16
|
+
// - `verdict:"HAND-OFF"` — none of the three present. The ITSM AddOn(s)
|
|
18
17
|
// are not provisioned; permset-assign is a
|
|
19
18
|
// no-op. Hand off to the studio validate skill
|
|
20
19
|
// so the AddOn(s) can be enabled first.
|
|
@@ -29,7 +28,7 @@
|
|
|
29
28
|
// candidates: [{ Id, Name, Label, LicenseId, needsPsl }, ...],
|
|
30
29
|
// verdict: "ASSIGN" | "HAND-OFF" | "CANNOT-CONFIRM",
|
|
31
30
|
// reasons: [...] }
|
|
32
|
-
// `candidates` includes only rows for the
|
|
31
|
+
// `candidates` includes only rows for the three known persona Names; unrelated
|
|
33
32
|
// rows in the query result are filtered out. `needsPsl` is derived per-row
|
|
34
33
|
// from `LicenseId !== null`. Exit is always 0 on parseable bodies; verdict
|
|
35
34
|
// carries the branch decision. Exit 2 on missing argv.
|
|
@@ -40,7 +39,6 @@ const KNOWN_PERSONAS = [
|
|
|
40
39
|
'IncidentFulfiller',
|
|
41
40
|
'ProblemFulfillerPermSet',
|
|
42
41
|
'ChangeRequestFulfillerPermSet',
|
|
43
|
-
'ReleaseManagerPermSet',
|
|
44
42
|
];
|
|
45
43
|
|
|
46
44
|
function readEnvelope(path) {
|
|
@@ -78,7 +76,7 @@ if (!ps.ok) {
|
|
|
78
76
|
process.exit(0);
|
|
79
77
|
}
|
|
80
78
|
|
|
81
|
-
// Filter to only the
|
|
79
|
+
// Filter to only the three known persona Names — drop any unrelated rows.
|
|
82
80
|
const knownRows = ps.records.filter((r) => KNOWN_PERSONAS.includes(r?.Name));
|
|
83
81
|
const foundNames = knownRows.map((r) => r.Name);
|
|
84
82
|
const personasFound = KNOWN_PERSONAS.filter((n) => foundNames.includes(n));
|
|
@@ -96,11 +94,11 @@ const reasons = [];
|
|
|
96
94
|
let verdict;
|
|
97
95
|
if (personasFound.length === 0) {
|
|
98
96
|
verdict = 'HAND-OFF';
|
|
99
|
-
reasons.push('None of the
|
|
97
|
+
reasons.push('None of the three Core-shipped Fulfiller persona permsets (IncidentFulfiller, ProblemFulfillerPermSet, ChangeRequestFulfillerPermSet) is present on this org — the ITSM AddOn(s) are not provisioned.');
|
|
100
98
|
reasons.push('Permset-assign cannot fix this; hand off to service-itsm-agentic-setup-agentforce-studio-validate.');
|
|
101
99
|
} else {
|
|
102
100
|
verdict = 'ASSIGN';
|
|
103
|
-
reasons.push(`Found ${personasFound.length} of
|
|
101
|
+
reasons.push(`Found ${personasFound.length} of 3 Fulfiller persona permset(s) on this org: ${personasFound.join(', ')}.`);
|
|
104
102
|
if (personasMissing.length > 0) {
|
|
105
103
|
reasons.push(`Not provisioned (AddOn(s) missing for these personas): ${personasMissing.join(', ')}.`);
|
|
106
104
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: service-itsm-incident-mgmt-configure
|
|
3
3
|
description: "Reads and toggles the master Incident Management setting on a Salesforce ITSM org — the org-level switch that turns Incident Management on or off. Reads current state before writing, is idempotent, and requires explicit user confirmation before any change. Use when the user wants to enable, disable, toggle, view, or turn on/off Incident Management (Service ITSM) at the org level. DO NOT TRIGGER for Default Field Validations for Incidents, Auto Closure of Child Incidents, Email-to-Incident sub-toggles, Problem Management, Change Management, Case Management, ITSM External Client App setup, or Incident Priority Matrix configuration (use the service-itsm-incident-priority-configure skill)."
|
|
4
4
|
metadata:
|
|
5
|
+
relatedSkills:
|
|
6
|
+
- "service-itsm-incident-priority-configure"
|
|
5
7
|
version: "1.1"
|
|
6
8
|
domains: ["Service"]
|
|
7
9
|
minApiVersion: "67.0"
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
name: service-itsm-incident-priority-configure
|
|
3
3
|
description: "Configures the Incident Priority Matrix for Salesforce ITSM through the sf CLI — enabling or disabling the matrix, shaping the Impact x Urgency grid that derives Priority on Incident records, toggling the manual-override preference, and reading or setting the default fallback priority. Reads every value before writing, is idempotent, and requires explicit user confirmation before any mutation. Use when the user wants to view, enable, disable, set up, seed, add to, change, or remove priority matrix configuration for Incident records, change the default incident priority, or asks about incident priority setup, impact/urgency mapping, override, or the ITSM incident priority matrix. DO NOT TRIGGER for Problem or ChangeRequest priority matrices, Case priority fields, standard Priority picklists outside ITSM, SLA or milestone configuration, or enabling Incident Management itself (use the service-itsm-incident-mgmt-configure skill)."
|
|
4
4
|
metadata:
|
|
5
|
-
version: "1.
|
|
5
|
+
version: "1.4"
|
|
6
|
+
relatedSkills:
|
|
7
|
+
- "service-itsm-incident-mgmt-configure"
|
|
6
8
|
domains: ["Service"]
|
|
7
9
|
minApiVersion: "67.0"
|
|
8
10
|
cliTools:
|
|
@@ -19,7 +21,7 @@ allowed-tools: |
|
|
|
19
21
|
|
|
20
22
|
Configures the **Incident Priority Matrix** for Salesforce ITSM — the grid that derives an Incident's **Priority** from its **Impact** and **Urgency**. Covers viewing the matrix, enabling / disabling it, adding / changing / removing / seeding cells, toggling the manual-override preference, and reading / setting the default (fallback) priority.
|
|
21
23
|
|
|
22
|
-
Every read and write dispatches through the **`sf` CLI
|
|
24
|
+
Every read and write dispatches through the **`sf` CLI**, so this skill works on any org with the Incident Management license enabled.
|
|
23
25
|
|
|
24
26
|
Writes are **idempotent** (skipped when the current state already matches the target), the skill always **reads before it writes**, and an explicit **confirm-to-write** checkpoint is required before any mutation.
|
|
25
27
|
|
|
@@ -54,7 +56,7 @@ surface the raw error and stop.**
|
|
|
54
56
|
|
|
55
57
|
## Routes at a glance
|
|
56
58
|
|
|
57
|
-
Every route is called through `sf`
|
|
59
|
+
Every route is called through the `sf` CLI. Full method / path / body / response
|
|
58
60
|
details, the picklist extraction recipe, and gotchas live in `references/sf-cli-invocation.md`.
|
|
59
61
|
|
|
60
62
|
| Concern | Transport | HTTP status |
|
|
@@ -69,6 +71,7 @@ details, the picklist extraction recipe, and gotchas live in `references/sf-cli-
|
|
|
69
71
|
| Default fallback priority (read) | `sf api request rest` GET on `/services/data/v67.0/tooling/query/?q=...StandardValueSet...` | 200 |
|
|
70
72
|
| Default fallback priority (write) | `sf project retrieve start` + edit + `sf project deploy start` on `StandardValueSet:IncidentPriority` | deploy Succeeded |
|
|
71
73
|
| Picklist values (Incident) | `sf api request rest` GET on `/services/data/v67.0/sobjects/Incident/describe` | 200 |
|
|
74
|
+
| Salesforce Go step "Done" (write, after a mutation) | `sf api request rest` PUT on `/services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/configuration/step/definePriorityMatrix/progress` | 200 |
|
|
72
75
|
|
|
73
76
|
**Path prefixes are load-bearing — do NOT strip them.** Setup Connect API paths MUST start with
|
|
74
77
|
`/services/data/v67.0/`. Tooling REST paths MUST start with `/services/data/v67.0/tooling/`.
|
|
@@ -116,13 +119,10 @@ a user statement (or you cannot identify a specific prior `sf` response), re-rea
|
|
|
116
119
|
read this session AND no `StandardValueSet:IncidentPriority` deploy has run since,
|
|
117
120
|
skip step 6.
|
|
118
121
|
|
|
119
|
-
**When in doubt, re-check.** Skip only when the
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
`StandardValueSet:IncidentPriority` deploy all bust the cache for the matching read).
|
|
124
|
-
If the user hints at a different org (or a different alias), re-run the read. A wrong
|
|
125
|
-
skip on a live org write is worse than a duplicated read.
|
|
122
|
+
**When in doubt, re-check.** Skip only when the fact is unambiguously in context, the
|
|
123
|
+
`--target-org` alias is unchanged, and no Phase-4 write since (a pref PATCH, a
|
|
124
|
+
`ServiceOpPriorityConfig` POST/PATCH/delete, or a `StandardValueSet:IncidentPriority`
|
|
125
|
+
deploy) could have invalidated it. A wrong skip on a live org is worse than a re-read.
|
|
126
126
|
|
|
127
127
|
### Phase 1 — Preflight
|
|
128
128
|
|
|
@@ -164,7 +164,8 @@ Read the current value of the same concern first (Phase 2 covers this), confirm
|
|
|
164
164
|
### Phase 5 — Verify and present
|
|
165
165
|
|
|
166
166
|
7. Re-read the concern that was mutated (matrix rows via Tooling SOQL; default priority via `StandardValueSet` query; prefs are echoed on PATCH response). If the observed state does not match the requested state, treat it as a failed write and report the raw server response verbatim.
|
|
167
|
-
8.
|
|
167
|
+
8. **Mark the Salesforce Go step Done — only if a Phase-4 functional write actually landed.** The "Define Priority Matrix" step is user-override: its checkmark is **not** derived from org state, so configuring the matrix alone never flips it — completion must be written. After step 7 verifies the write, PUT the completion once (`references/sf-cli-invocation.md` route 10; body `{"isComplete": true}`, flag REQUIRED). It rides on the Phase-3 confirmation — no separate `AskUserQuestion`. **Skip entirely on view-only reads and idempotent no-ops.**
|
|
168
|
+
9. Present before/after (Impact × Urgency grid via `examples/render-matrix.md`) plus a one-line summary (e.g. `Incident matrix: High/High → Critical added`). Matrix changes affect only Incidents created **after** the write; disabling the matrix does not clear stored rows or the default priority.
|
|
168
169
|
|
|
169
170
|
---
|
|
170
171
|
|
|
@@ -172,7 +173,7 @@ Read the current value of the same concern first (Phase 2 covers this), confirm
|
|
|
172
173
|
|
|
173
174
|
| Constraint | Rationale |
|
|
174
175
|
|-----------|-----------|
|
|
175
|
-
| All operations run through `sf` CLI |
|
|
176
|
+
| All operations run through `sf` CLI | Works on any org with Incident Management enabled; requires no additional setup |
|
|
176
177
|
| Always API v67.0 minimum | The Setup Connect API pref routes require v67+ |
|
|
177
178
|
| Read live state before writing | The Phase-2 snapshot is the source of truth for the confirmation prompt, the idempotency check, and the Phase-5 verify |
|
|
178
179
|
| **REQUIRED confirm-to-write checkpoint** before any mutation | Toggling prefs or changing matrix rows mutates org state; user must approve the exact plan |
|
|
@@ -182,6 +183,7 @@ Read the current value of the same concern first (Phase 2 covers this), confirm
|
|
|
182
183
|
| Refuse any `ReferenceObject` other than `Incident` (`Problem`, `ChangeRequest`, anything else) | `ServiceOpPriorityConfig` is shared with the Problem / ChangeRequest matrices at the wire level — the server accepts any `ReferenceObject` string. Scope to `Incident` is skill-enforced only. |
|
|
183
184
|
| On Change / Remove, if the target coordinate resolves to more than one row, do NOT dispatch — require an explicit `Id` or a confirmed consolidation plan | The server allows duplicate `(ReferenceObject, Urgency, Impact)` rows. Picking "the row Id" arbitrarily would mutate one duplicate and leave the other in place, keeping the matrix non-deterministic. |
|
|
184
185
|
| Report exact error text from the CLI response | The CLI surfaces the underlying error message verbatim |
|
|
186
|
+
| After a functional write, PUT the Salesforce Go step-progress completion (route 10); skip on view / no-op | The "Define Priority Matrix" step is user-override — its checkmark isn't derived from org state, so config writes alone leave the Go checklist stuck |
|
|
185
187
|
|
|
186
188
|
---
|
|
187
189
|
|
|
@@ -196,6 +198,7 @@ Before reporting completion of any mutation, confirm each of the following. If a
|
|
|
196
198
|
- [ ] Every `Impact`, `Urgency`, `Priority` in any add / change payload was validated against the Phase-1 picklist values before dispatch. Duplicates on `(ReferenceObject, Urgency, Impact)` were caught client-side against the Phase-2 snapshot — the server does NOT reject duplicates. Every add payload had `ReferenceObject == "Incident"`.
|
|
197
199
|
- [ ] Phase 4 writes used the exact CLI invocations from `references/sf-cli-invocation.md`; on any `4xx` / `5xx` (or non-`Succeeded` deploy), the raw response was surfaced and the run halted.
|
|
198
200
|
- [ ] Phase 5 verify re-read the affected concerns; any diff was reported as `write FAILED — server state differs from request` with the raw response.
|
|
201
|
+
- [ ] If a Phase-4 functional write landed, the Go step-progress completion PUT (route 10) was sent after verify. On view-only reads and idempotent no-ops, no completion PUT was dispatched.
|
|
199
202
|
- [ ] The final report gave a before/after with the Impact × Urgency grid and a one-line summary.
|
|
200
203
|
|
|
201
204
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Matrix Operations — CLI Invocation Templates
|
|
2
2
|
|
|
3
|
-
Every mutation is a single `sf` CLI command.
|
|
3
|
+
Every mutation is a single `sf` CLI command. The Tooling REST endpoints operate on **one row at a time** — the read-modify-write step is client-side only. Add, change, and remove are three distinct wire calls, not one replace.
|
|
4
4
|
|
|
5
5
|
Templates below start from this hypothetical current matrix (Tooling SOQL result):
|
|
6
6
|
|
|
@@ -198,3 +198,29 @@ The XML shape after editing (default `High`):
|
|
|
198
198
|
```
|
|
199
199
|
|
|
200
200
|
Validate the target value against the Phase-1 active picklist first.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Mark the Salesforce Go setup step complete (Phase 5, after a mutation)
|
|
205
|
+
|
|
206
|
+
Once a functional write above has been dispatched **and** the Phase-5 verify confirms it landed,
|
|
207
|
+
flip the "Define Priority Matrix" tile in the Salesforce Go setup checklist to Done. This step is a
|
|
208
|
+
user-override step: configuring the matrix functionally does **not** move its checkmark — the
|
|
209
|
+
completion has to be written explicitly (route 10 in `references/sf-cli-invocation.md`).
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
sf api request rest \
|
|
213
|
+
"/services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/configuration/step/definePriorityMatrix/progress" \
|
|
214
|
+
--method PUT \
|
|
215
|
+
--header "Content-Type:application/json" \
|
|
216
|
+
--body '{"isComplete": true}' \
|
|
217
|
+
--target-org <alias>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Response: `200` with the updated step progress. Notes:
|
|
221
|
+
|
|
222
|
+
- **`isComplete` is required** — omitting it returns HTTP 500, not 400.
|
|
223
|
+
- Send it **only when Phase 4 actually wrote something**. On a view-only read or an idempotent
|
|
224
|
+
no-op (e.g. disabling an already-disabled matrix), dispatch nothing — the PUT is itself a mutation.
|
|
225
|
+
- It rides on the confirmation the user already gave for the functional change; it is not a
|
|
226
|
+
separately-confirmed write.
|
|
@@ -6,7 +6,7 @@ This skill invokes every read and write through the **`sf` CLI**. Two transports
|
|
|
6
6
|
- `sf data query --use-tooling-api` / `sf data delete record --use-tooling-api` — Tooling API convenience wrappers with better parsing than raw REST.
|
|
7
7
|
- `sf project retrieve start` + `sf project deploy start` — for the `StandardValueSet` metadata that carries the default fallback priority.
|
|
8
8
|
|
|
9
|
-
Every invocation below
|
|
9
|
+
Every invocation below reflects the exact request and response shapes returned by the platform. Path prefixes are load-bearing; do not strip `/services/data/v67.0/` or `/services/data/v67.0/tooling/`.
|
|
10
10
|
|
|
11
11
|
## Authentication
|
|
12
12
|
|
|
@@ -88,7 +88,7 @@ sf data query \
|
|
|
88
88
|
--query "SELECT Id, DeveloperName, ReferenceObject, Urgency, Impact, Priority FROM ServiceOpPriorityConfig WHERE ReferenceObject = 'Incident'"
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
Zero to `|Impact| × |Urgency|` rows returned. Row keys are PascalCase (`Id`, `DeveloperName`, `ReferenceObject`, `Urgency`, `Impact`, `Priority`) — these are Tooling SObject field names
|
|
91
|
+
Zero to `|Impact| × |Urgency|` rows returned. Row keys are PascalCase (`Id`, `DeveloperName`, `ReferenceObject`, `Urgency`, `Impact`, `Priority`) — these are Tooling SObject field names. `DeveloperName` is included so the add step can derive a fresh unique suffix from existing rows.
|
|
92
92
|
|
|
93
93
|
For programmatic scripts, add `--json` and parse `result.records[]`.
|
|
94
94
|
|
|
@@ -111,9 +111,9 @@ Suffix pattern: pattern-match the existing rows' `DeveloperName` values from the
|
|
|
111
111
|
|
|
112
112
|
**Important:** The Tooling REST endpoint does NOT enforce picklist validation on `Urgency`, `Impact`, `Priority`. Garbage values are accepted at the wire level but the runtime matrix evaluator refuses to use them. Validate every value against the Phase-1 picklist values before dispatch.
|
|
113
113
|
|
|
114
|
-
**Duplicates:** the server does NOT enforce `(ReferenceObject, Urgency, Impact)` uniqueness — a second POST on the same coordinate is accepted as a separate row (
|
|
114
|
+
**Duplicates:** the server does NOT enforce `(ReferenceObject, Urgency, Impact)` uniqueness — a second POST on the same coordinate is accepted as a separate row (for example, two rows with identical `(Incident, Medium, High)` coordinates will both persist with distinct `Id`s). Client-side dedup against the Phase-2 snapshot is the ONLY guard against duplicate matrix cells; if you skip it, the runtime picks one of the duplicates non-deterministically.
|
|
115
115
|
|
|
116
|
-
**ReferenceObject:** the server accepts any string for `ReferenceObject` (
|
|
116
|
+
**ReferenceObject:** the server accepts any string for `ReferenceObject` (for example, a `Problem` row can be inserted successfully). `ServiceOpPriorityConfig` is the shared SObject for Incident / Problem / ChangeRequest matrices. Scope to `Incident` is skill-enforced only — refuse any other value client-side.
|
|
117
117
|
|
|
118
118
|
### 6. Matrix rows — change
|
|
119
119
|
|
|
@@ -218,6 +218,36 @@ The XML shape is:
|
|
|
218
218
|
|
|
219
219
|
Exactly one `<default>true</default>` should be present at deploy time.
|
|
220
220
|
|
|
221
|
+
### 10. Salesforce Go setup-step completion — write (after a mutation only)
|
|
222
|
+
|
|
223
|
+
The "Define Priority Matrix" tile in the Salesforce Go setup checklist (feature
|
|
224
|
+
`service-cloud-itsm-incident`, step `definePriorityMatrix`) is a **user-override** step: its
|
|
225
|
+
"Done" checkmark is a user-supplied `StepProgress` record, **not** derived from org state.
|
|
226
|
+
Writing the matrix config (prefs, rows, default) functionally is invisible to the checklist —
|
|
227
|
+
the completion must be written explicitly, exactly as the guided modal does on save.
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
sf api request rest \
|
|
231
|
+
"/services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/configuration/step/definePriorityMatrix/progress" \
|
|
232
|
+
--method PUT \
|
|
233
|
+
--header "Content-Type:application/json" \
|
|
234
|
+
--body '{"isComplete": true}' \
|
|
235
|
+
--target-org <alias>
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Expected:** HTTP 200 with the updated progress. The endpoint is idempotent — re-asserting
|
|
239
|
+
`isComplete: true` when already complete is a harmless 200, so no read-before-write is needed.
|
|
240
|
+
|
|
241
|
+
- **`isComplete` is REQUIRED.** Omitting it returns **HTTP 500** (server-side NPE), not a 400.
|
|
242
|
+
- **Fire only after a functional Phase-4 write has landed** (a pref PATCH, a row POST/PATCH/delete,
|
|
243
|
+
or a `StandardValueSet` deploy). On a view-only read or an idempotent no-op, dispatch **nothing** —
|
|
244
|
+
there is no configuration action to mark done, and the completion PUT is itself a mutation.
|
|
245
|
+
- This is the same feature the master-pref preflight reads via `/connect/setup/discovery/features`
|
|
246
|
+
(filter `apiName == "service-cloud-itsm-incident"`); here the singular `.../feature/service-cloud-itsm-incident/...`
|
|
247
|
+
subresource carries the per-step progress.
|
|
248
|
+
- Rely on the 200 success signal. Any non-200 surfaces verbatim through the skill's standard error
|
|
249
|
+
handling — the completion PUT is not special-cased.
|
|
250
|
+
|
|
221
251
|
---
|
|
222
252
|
|
|
223
253
|
## Idempotency contract
|
|
@@ -230,8 +260,9 @@ Exactly one `<default>true</default>` should be present at deploy time.
|
|
|
230
260
|
| Change a cell | The Phase-2 row's `Priority` already equals the requested value |
|
|
231
261
|
| Remove a cell | No Phase-2 row matches `(ReferenceObject, Urgency, Impact)` |
|
|
232
262
|
| Default fallback priority | The Phase-2 `default: true` entry's `valueName` already equals the requested value |
|
|
263
|
+
| Salesforce Go step completion (route 10) | No functional Phase-4 write was dispatched this run — i.e. the request was view-only, or every targeted concern was itself an idempotent no-op. The PUT is also idempotent server-side, so re-asserting `isComplete: true` after a real write is harmless |
|
|
233
264
|
|
|
234
|
-
When idempotent, report `ALREADY-<state>` and skip Phase 4 entirely.
|
|
265
|
+
When a functional concern (the first six rows) is idempotent, report `ALREADY-<state>` and skip Phase 4 entirely. Route 10 is a Phase-5 action, not a Phase-4 concern — it has no `ALREADY-<state>` report.
|
|
235
266
|
|
|
236
267
|
---
|
|
237
268
|
|
|
@@ -259,6 +290,6 @@ For an uncustomized org the defaults are `High/Medium/Low` on `Impact` and `Urge
|
|
|
259
290
|
| Duplicate `(ReferenceObject, Urgency, Impact)` rows | Accepted silently at the wire level — the server does NOT enforce uniqueness. Both rows persist and the runtime picks one non-deterministically. Deduplicate against the Phase-2 snapshot before POST; this check is the only guard. |
|
|
260
291
|
| `ReferenceObject` accepts any string | The `ServiceOpPriorityConfig` SObject is shared with `Problem` and `ChangeRequest` matrices; the server accepts any value in `ReferenceObject`. Scope to `Incident` is skill-enforced only — refuse other values client-side. |
|
|
261
292
|
| `sf api request rest ... --method DELETE` on Tooling | Fails with `SfError: No 'mode' found in 'body' entry` (sf CLI 2.143). Use `sf data delete record --use-tooling-api` instead. |
|
|
262
|
-
| `/headless/invoke/service/service-itsm/...` returns 404 through `sf api request rest` | Those routes are Aura-dispatcher only; not addressable via the REST API host. Use the Tooling SObject and Setup Connect API prefs instead — that's what this skill does. |
|
|
263
293
|
| Direct PATCH on `StandardValueSet/<Id>` via Tooling REST | Returns `FIELD_INTEGRITY_EXCEPTION: Unable to load specified entity`. Metadata deploy is the canonical path for picklist defaults. |
|
|
264
294
|
| Existing Incidents' Priority | Not re-derived on matrix change. New writes use the new matrix; the stamped Priority on existing Incident records stays put. |
|
|
295
|
+
| Salesforce Go "Define Priority Matrix" step stays "not done" after configuring the matrix | The step is user-override — its checkmark is a `StepProgress` record, not derived from org state, so functional writes alone never flip it. Send route 10's completion PUT after the write (see step 8 in the SKILL Workflow). Omitting `isComplete` in the body → HTTP 500, not 400. |
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: service-native-voice-recording-transcription-configure
|
|
3
|
+
description: "Enable call recording and call transcription for Native Voice (Thunderbird Voice) programmatically via the Metadata API, for headless / API-driven support where no human uses the Service Console UI. Use this skill when a user asks to turn on, enable, or configure Native Voice recording and/or transcription for headless or automated voice calls. TRIGGER when: users mention Thunderbird Voice, Native Voice, ThunderbirdVoiceSettings, enableCallRecording, enableCallTranscription, 'enable recording and transcription', 'turn on call recording via API', headless voice recording, or configuring voice-call capture without clicking through Setup. DO NOT TRIGGER when: the user wants to redact or scrub PII from existing recordings, transcribe a supplied audio file, or author a Flow/Apex — those are out of scope for this skill."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.1"
|
|
6
|
+
domains: ["Service"]
|
|
7
|
+
minApiVersion: "68.0"
|
|
8
|
+
cliTools:
|
|
9
|
+
- tool: ["jq"]
|
|
10
|
+
semver: ">=1.6"
|
|
11
|
+
- tool: ["sf"]
|
|
12
|
+
semver: ">=2.0.0"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Enable Native Voice Recording & Transcription (headless)
|
|
16
|
+
|
|
17
|
+
Turn on call **recording** and call **transcription** for Native Voice (Thunderbird
|
|
18
|
+
Voice) on an org, programmatically, so they take effect for headless / API-driven
|
|
19
|
+
support sessions that never touch the Service Console UI. Recording and transcription
|
|
20
|
+
are **two separate preferences** — this skill enables both and returns a structured
|
|
21
|
+
JSON confirmation.
|
|
22
|
+
|
|
23
|
+
## Scope
|
|
24
|
+
|
|
25
|
+
- **In scope**: enabling `enableCallRecording` and `enableCallTranscription` on the
|
|
26
|
+
`ThunderbirdVoiceSettings` metadata via an sf CLI Metadata API deploy (the generic
|
|
27
|
+
`Settings` container, member `ThunderbirdVoice`); returning a JSON confirmation of
|
|
28
|
+
the resulting configuration.
|
|
29
|
+
- **Out of scope**: changing any other `ThunderbirdVoiceSettings` boolean (e.g.
|
|
30
|
+
call-recording redaction, SIP recording) — siblings are read only to be preserved,
|
|
31
|
+
never set or reported; redacting/scrubbing PII from existing recordings or
|
|
32
|
+
transcripts; transcribing a supplied audio file; provisioning the Native Voice /
|
|
33
|
+
Thunderbird channel itself; authoring Flow, Apex, or permission sets. These are
|
|
34
|
+
outside this skill's scope — handle them separately.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Required Inputs
|
|
39
|
+
|
|
40
|
+
Gather or infer before proceeding:
|
|
41
|
+
|
|
42
|
+
- **Target org** — an org alias or username the sf CLI is authenticated to. The deploy
|
|
43
|
+
uses this existing `sf` login; no session id or access token is requested. Default:
|
|
44
|
+
the org's default target. Confirm connectivity with `sf org display -o <alias>`.
|
|
45
|
+
- **Which preferences** — recording, transcription, or both. Default: **both**, since
|
|
46
|
+
headless capture typically needs recording *and* transcription. Confirm only if the
|
|
47
|
+
user named just one.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Workflow
|
|
52
|
+
|
|
53
|
+
All steps are sequential. Do not skip or reorder. If blocked, stop and ask for the
|
|
54
|
+
missing org context.
|
|
55
|
+
|
|
56
|
+
1. **Confirm the two preferences are modeled separately.** Recording
|
|
57
|
+
(`enableCallRecording`) and transcription (`enableCallTranscription`) are distinct
|
|
58
|
+
booleans on the same metadata type — never collapse them into one combined flag.
|
|
59
|
+
The final confirmation must report each independently.
|
|
60
|
+
|
|
61
|
+
2. **Run the enable script.** Run
|
|
62
|
+
`scripts/enable-recording-transcription.sh --target-org <alias>`. It retrieves
|
|
63
|
+
`ThunderbirdVoiceSettings` (via the `Settings` container), checks the org-perm gate,
|
|
64
|
+
flips the two target flags to `true` while preserving every sibling, validates with
|
|
65
|
+
a dry-run deploy, deploys, and verifies by round-trip. Use `--dry-run` to retrieve +
|
|
66
|
+
validate without persisting. Run
|
|
67
|
+
`scripts/enable-recording-transcription.sh --help` for all options.
|
|
68
|
+
|
|
69
|
+
3. **For the Metadata API contract**, read `references/thunderbird-voice-settings.md` —
|
|
70
|
+
it documents the type, the two booleans, the `Settings`-container manifest, the
|
|
71
|
+
**v68.0+** version floor, and the retrieve-first gate check. The manifest template
|
|
72
|
+
the script generates is `assets/package.xml`.
|
|
73
|
+
|
|
74
|
+
> This uses the sf CLI Metadata API deploy, not a raw SOAP call. The member is the
|
|
75
|
+
> mdApiType **without** the `Settings` suffix (`ThunderbirdVoice`), and the manifest
|
|
76
|
+
> version MUST be **>= 68.0** — the fields are not exposed at any lower version.
|
|
77
|
+
|
|
78
|
+
4. **Change only the two target fields.** The deployed settings file sets exactly
|
|
79
|
+
`enableCallRecording` and `enableCallTranscription` to `true`; every other
|
|
80
|
+
`ThunderbirdVoiceSettings` boolean keeps its retrieved value. Do not add or flip
|
|
81
|
+
other booleans — they are out of this skill's scope.
|
|
82
|
+
|
|
83
|
+
5. **Return the confirmation JSON.** Emit a single JSON object matching
|
|
84
|
+
`assets/confirmation-output.json`: the metadata `type` and `fullName`, that it was
|
|
85
|
+
applied via a headless/API deploy, and — for **each** of the two preferences
|
|
86
|
+
separately — its field name and enabled state, plus an overall `status`. It also
|
|
87
|
+
includes a **`preserved`** array echoing every sibling boolean (e.g.
|
|
88
|
+
`enableCallRecRedaction`, `enableSipRecording`) with the value it was retrieved
|
|
89
|
+
with — this attests the siblings were carried through **unchanged**, which
|
|
90
|
+
compliance callers need as explicit "nothing else moved" assurance. Reporting a
|
|
91
|
+
sibling's value is NOT changing it. On a successful run the script prints this
|
|
92
|
+
object on stdout; surface it verbatim as the deliverable — do not strip the
|
|
93
|
+
`preserved` block.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Rules / Constraints
|
|
98
|
+
|
|
99
|
+
| Constraint | Rationale |
|
|
100
|
+
|-----------|-----------|
|
|
101
|
+
| Model recording and transcription as two separate preferences | They are distinct booleans (`enableCallRecording`, `enableCallTranscription`); collapsing them loses the ability to enable one without the other and fails the output contract. |
|
|
102
|
+
| Deploy through the generic `Settings` container with member `ThunderbirdVoice` | `ThunderbirdVoiceSettings` is not a retrievable top-level type name; the `Settings` container (member = mdApiType minus the `Settings` suffix) is the sf CLI path and uses the org's `sf` login — no session id. |
|
|
103
|
+
| Manifest version must be >= 68.0 | `ThunderbirdVoiceSettings` fields are only exposed at API v68.0+; below that the retrieve returns the type empty/absent. |
|
|
104
|
+
| Retrieve before deploy; preserve all sibling fields | The deploy is a full-file replace — starting from the retrieved file keeps other prefs intact and lets the gate be checked. |
|
|
105
|
+
| Report the preserved siblings in a `preserved` block, but never change them | Compliance callers need explicit "nothing else moved" assurance; the confirmation echoes each sibling's retrieved value unchanged. Echoing a value is not setting it — the deployed file still flips only the two target fields. |
|
|
106
|
+
| Verify by round-trip before reporting `ENABLED` | A "Succeeded" deploy is not proof; only claim enabled after a re-retrieve returns both `true`. |
|
|
107
|
+
| Output must be a single valid JSON object | The confirmation is consumed programmatically by headless callers; prose-only answers are not usable. |
|
|
108
|
+
| Do not include a session id, access token, phone number, recording URL, or transcript content in the output | These are secrets / PII; the confirmation reports configuration state only. |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Gotchas
|
|
113
|
+
|
|
114
|
+
| Issue | Resolution |
|
|
115
|
+
|-------|------------|
|
|
116
|
+
| `Property 'enableCallRecording' not valid in version <N>` / `Settings type 'ThunderbirdVoice' is unknown` | **API version too low.** The fields are only exposed at v68.0+. Raise `--api-version` to 68.0 or higher — this is NOT a feature gate. |
|
|
117
|
+
| Retrieve returns an empty `<ThunderbirdVoiceSettings/>` (no fields) | Org-perm gate `orgHasNativeVoiceAllowed` is off — Native Voice is not provisioned. Enable via provisioning/Blacktab; metadata cannot flip an unprovisioned feature. |
|
|
118
|
+
| Trying to retrieve `ThunderbirdVoiceSettings` as the type name | Use the `Settings` container with member `ThunderbirdVoice` (mdApiType minus the `Settings` suffix); the full type name is not a retrievable member. |
|
|
119
|
+
| Collapsing both prefs into one toggle (e.g. `recordingAndTranscription: true`) | Keep two distinct entries in both the deployed file and the confirmation JSON. |
|
|
120
|
+
| Deploying a partial settings file | Start from the retrieved file so sibling prefs keep their values; a partial file can reset them. |
|
|
121
|
+
| Missing `jq` / `sf` | The script depends on them; install or run in an environment that has them (declared in `metadata.cliTools`). |
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Output Expectations
|
|
126
|
+
|
|
127
|
+
Deliverables:
|
|
128
|
+
- A single JSON confirmation object on stdout, shaped per `assets/confirmation-output.json`
|
|
129
|
+
— the metadata target, the headless/API deploy path, each of the two preferences
|
|
130
|
+
reported separately with its enabled state, a `preserved` array echoing every
|
|
131
|
+
sibling boolean (unchanged) so callers can confirm nothing else moved, and an
|
|
132
|
+
overall `status`.
|
|
133
|
+
|
|
134
|
+
No files are written to the org's source tree — the script works in a temporary SFDX
|
|
135
|
+
project and reports the result.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Reference File Index
|
|
140
|
+
|
|
141
|
+
| File | When to read |
|
|
142
|
+
|------|-------------|
|
|
143
|
+
| `scripts/enable-recording-transcription.sh` | Step 2 — run to retrieve → flip → validate → deploy → verify (supports `--dry-run`, `--api-version`, `--help`). |
|
|
144
|
+
| `references/thunderbird-voice-settings.md` | Step 3 — for the metadata type, the two booleans, the `Settings` manifest, the v68.0+ floor, and the gate check. |
|
|
145
|
+
| `assets/package.xml` | Step 3 — the Metadata API manifest template the script generates; read to understand or hand-build the retrieve/deploy. |
|
|
146
|
+
| `assets/confirmation-output.json` | Step 5 — the exact shape of the JSON confirmation to return. |
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "ThunderbirdVoiceSettings",
|
|
3
|
+
"fullName": "ThunderbirdVoice",
|
|
4
|
+
"apiVersion": "68.0",
|
|
5
|
+
"method": "sf project deploy (Settings/ThunderbirdVoice)",
|
|
6
|
+
"headless": true,
|
|
7
|
+
"preferences": [
|
|
8
|
+
{ "name": "enableCallRecording", "enabled": true },
|
|
9
|
+
{ "name": "enableCallTranscription", "enabled": true }
|
|
10
|
+
],
|
|
11
|
+
"preserved": [
|
|
12
|
+
{ "name": "enableCallRecRedaction", "enabled": true },
|
|
13
|
+
{ "name": "enableSipRecording", "enabled": false }
|
|
14
|
+
],
|
|
15
|
+
"status": "ENABLED"
|
|
16
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
Metadata API manifest for retrieving/deploying ThunderbirdVoiceSettings via the
|
|
4
|
+
sf CLI Settings container. scripts/enable-recording-transcription.sh generates
|
|
5
|
+
this manifest into a temporary SFDX project (substituting the API version).
|
|
6
|
+
|
|
7
|
+
Key points:
|
|
8
|
+
- The type is the generic `Settings` container (which IS in the sf CLI
|
|
9
|
+
metadata registry) — NOT `ThunderbirdVoiceSettings` (which is not a
|
|
10
|
+
retrievable top-level type name).
|
|
11
|
+
- The member is the mdApiType WITHOUT the trailing `Settings`, i.e.
|
|
12
|
+
`ThunderbirdVoice`.
|
|
13
|
+
- version MUST be >= 68.0. ThunderbirdVoiceSettings fields are not exposed at
|
|
14
|
+
any lower version, so a retrieve at v64-67 returns the type empty/absent.
|
|
15
|
+
-->
|
|
16
|
+
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
17
|
+
<types>
|
|
18
|
+
<members>ThunderbirdVoice</members>
|
|
19
|
+
<name>Settings</name>
|
|
20
|
+
</types>
|
|
21
|
+
<version>68.0</version>
|
|
22
|
+
</Package>
|