@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
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Validate a CaseSettings source file for headless Email-to-Case configuration.
|
|
3
|
+
|
|
4
|
+
This file is the input to apply-casesettings.py, which supplies the routing
|
|
5
|
+
emails (via --routing-email) and resolves the default case owner at apply time.
|
|
6
|
+
So the source file must NOT carry emailAddress, and the owner fields are optional.
|
|
7
|
+
|
|
8
|
+
Checks structural rules that must hold before applying:
|
|
9
|
+
- Well-formed XML with the CaseSettings root and correct namespace.
|
|
10
|
+
- defaultCaseOwnerType, if present, is User or Queue.
|
|
11
|
+
- useSystemUserAsDefaultCaseUser, if present, is boolean, and is not combined
|
|
12
|
+
with a named defaultCaseUser (mutually exclusive at the platform layer).
|
|
13
|
+
- emailToCase enables both enableEmailToCase and enableOnDemandEmailToCase.
|
|
14
|
+
- Each routingAddresses has addressType, routingName, caseOrigin, casePriority.
|
|
15
|
+
- If a routingAddresses sets caseOwner, it also sets caseOwnerType (User or
|
|
16
|
+
Queue) — the platform rejects caseOwner without it — and neither is left as
|
|
17
|
+
an unfilled {PLACEHOLDER}.
|
|
18
|
+
- emailAddress is NOT set in the file (it is supplied via --routing-email).
|
|
19
|
+
- addressType is not E2cEasy (must use the Service Easy Setup wizard).
|
|
20
|
+
- Read-only fields (emailServicesAddress, isVerified) are not set.
|
|
21
|
+
- Enum values for overEmailLimitAction / unauthorizedSenderAction are valid.
|
|
22
|
+
|
|
23
|
+
Usage: python3 validate-casesettings.py <path-to-file> (--help for this text)
|
|
24
|
+
Exits non-zero and prints ERROR lines to stderr if any check fails.
|
|
25
|
+
"""
|
|
26
|
+
import sys
|
|
27
|
+
import xml.etree.ElementTree as ET
|
|
28
|
+
|
|
29
|
+
NS = "http://soap.sforce.com/2006/04/metadata"
|
|
30
|
+
Q = f"{{{NS}}}"
|
|
31
|
+
|
|
32
|
+
VALID_ADDRESS_TYPES = {"EmailToCase", "Outlook", "GmailOAuth"}
|
|
33
|
+
VALID_OWNER_TYPES = {"User", "Queue"}
|
|
34
|
+
OVER_LIMIT_ACTIONS = {"Bounce", "Discard", "Requeue"}
|
|
35
|
+
UNAUTHORIZED_ACTIONS = {"Bounce", "Discard"}
|
|
36
|
+
READONLY_FIELDS = {"emailServicesAddress", "isVerified"}
|
|
37
|
+
|
|
38
|
+
# Boolean toggles that must be "true"/"false" when present. Split by container
|
|
39
|
+
# so a field placed in the wrong section is flagged.
|
|
40
|
+
TOP_LEVEL_BOOL_TOGGLES = {"enableDraftEmails"}
|
|
41
|
+
EMAIL_TO_CASE_BOOL_TOGGLES = {
|
|
42
|
+
"enableEmailToCase", "enableOnDemandEmailToCase", "enableHtmlEmail",
|
|
43
|
+
"notifyOwnerOnNewCaseEmail", "enableE2CDeduplicateAttachments",
|
|
44
|
+
"showWordCountInComposer",
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def local(tag):
|
|
49
|
+
return tag.split("}", 1)[-1]
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def child_text(parent, name):
|
|
53
|
+
el = parent.find(f"{Q}{name}")
|
|
54
|
+
return el.text.strip() if el is not None and el.text else None
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def is_placeholder(value):
|
|
58
|
+
"""A value left as an unfilled template token, e.g. {CASE_OWNER_...}."""
|
|
59
|
+
return bool(value) and value.startswith("{") and value.endswith("}")
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def validate(path):
|
|
63
|
+
errors = []
|
|
64
|
+
try:
|
|
65
|
+
tree = ET.parse(path)
|
|
66
|
+
except ET.ParseError as exc:
|
|
67
|
+
return [f"XML is not well-formed: {exc}"]
|
|
68
|
+
except OSError as exc:
|
|
69
|
+
return [f"Cannot read file: {exc}"]
|
|
70
|
+
|
|
71
|
+
root = tree.getroot()
|
|
72
|
+
if local(root.tag) != "CaseSettings":
|
|
73
|
+
errors.append(f"Root element must be CaseSettings, found '{local(root.tag)}'.")
|
|
74
|
+
if not root.tag.startswith(Q):
|
|
75
|
+
errors.append(f"Root must use namespace '{NS}'.")
|
|
76
|
+
|
|
77
|
+
# CaseSettings-level Support-Settings owner / automated-user fields are
|
|
78
|
+
# OPTIONAL in the source file — apply-casesettings.py preserves existing org
|
|
79
|
+
# settings, or takes explicit values (validated against the org) when they
|
|
80
|
+
# are not configured. Here we only enforce the structural rules that hold
|
|
81
|
+
# regardless of the org.
|
|
82
|
+
owner_type = child_text(root, "defaultCaseOwnerType")
|
|
83
|
+
if owner_type and owner_type not in {"User", "Queue"}:
|
|
84
|
+
errors.append(f"defaultCaseOwnerType must be 'User' or 'Queue', found '{owner_type}'.")
|
|
85
|
+
|
|
86
|
+
# Default Case Owner is a paired field: the platform rejects defaultCaseOwner
|
|
87
|
+
# without defaultCaseOwnerType, and defaultCaseOwnerType without a value is a
|
|
88
|
+
# half-filled owner. Enforce both directions (mirrors the per-address rule).
|
|
89
|
+
owner_value = child_text(root, "defaultCaseOwner")
|
|
90
|
+
if owner_value is not None and owner_type is None:
|
|
91
|
+
errors.append(
|
|
92
|
+
"defaultCaseOwner is set without defaultCaseOwnerType — the platform "
|
|
93
|
+
"requires defaultCaseOwnerType ('User' or 'Queue') whenever "
|
|
94
|
+
"defaultCaseOwner is set. Add defaultCaseOwnerType, or remove "
|
|
95
|
+
"defaultCaseOwner to use the org Default Case Owner.")
|
|
96
|
+
if owner_type is not None and owner_value is None:
|
|
97
|
+
errors.append(
|
|
98
|
+
"defaultCaseOwnerType is set without defaultCaseOwner — either add a "
|
|
99
|
+
"defaultCaseOwner value (active Username or Queue DeveloperName) or "
|
|
100
|
+
"remove defaultCaseOwnerType.")
|
|
101
|
+
|
|
102
|
+
# Automated Case User: 'System' (useSystemUserAsDefaultCaseUser=true) and a
|
|
103
|
+
# named defaultCaseUser are mutually exclusive at the platform layer.
|
|
104
|
+
use_system = child_text(root, "useSystemUserAsDefaultCaseUser")
|
|
105
|
+
if use_system is not None and use_system not in {"true", "false"}:
|
|
106
|
+
errors.append(
|
|
107
|
+
f"useSystemUserAsDefaultCaseUser must be 'true' or 'false', "
|
|
108
|
+
f"found '{use_system}'.")
|
|
109
|
+
if use_system == "true" and child_text(root, "defaultCaseUser") is not None:
|
|
110
|
+
errors.append(
|
|
111
|
+
"useSystemUserAsDefaultCaseUser is 'true' but defaultCaseUser is "
|
|
112
|
+
"also set — they are mutually exclusive. For a System automated "
|
|
113
|
+
"case user, omit defaultCaseUser (optionally set systemUserEmail).")
|
|
114
|
+
|
|
115
|
+
# Top-level Support-Settings boolean toggles (e.g. enableDraftEmails).
|
|
116
|
+
for field in TOP_LEVEL_BOOL_TOGGLES:
|
|
117
|
+
val = child_text(root, field)
|
|
118
|
+
if val is not None and val not in {"true", "false"}:
|
|
119
|
+
errors.append(f"{field} must be 'true' or 'false', found '{val}'.")
|
|
120
|
+
|
|
121
|
+
e2c = root.find(f"{Q}emailToCase")
|
|
122
|
+
if e2c is None:
|
|
123
|
+
errors.append("Missing <emailToCase> block.")
|
|
124
|
+
return errors
|
|
125
|
+
|
|
126
|
+
if child_text(e2c, "enableEmailToCase") != "true":
|
|
127
|
+
errors.append("emailToCase.enableEmailToCase must be 'true'.")
|
|
128
|
+
if child_text(e2c, "enableOnDemandEmailToCase") != "true":
|
|
129
|
+
errors.append(
|
|
130
|
+
"emailToCase.enableOnDemandEmailToCase must be 'true' "
|
|
131
|
+
"before routing addresses can be created."
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
# emailToCase section boolean toggles (enableHtmlEmail, etc.).
|
|
135
|
+
for field in EMAIL_TO_CASE_BOOL_TOGGLES:
|
|
136
|
+
val = child_text(e2c, field)
|
|
137
|
+
if val is not None and val not in {"true", "false"}:
|
|
138
|
+
errors.append(f"emailToCase.{field} must be 'true' or 'false', found '{val}'.")
|
|
139
|
+
|
|
140
|
+
over = child_text(e2c, "overEmailLimitAction")
|
|
141
|
+
if over and over not in OVER_LIMIT_ACTIONS:
|
|
142
|
+
errors.append(f"overEmailLimitAction must be one of {sorted(OVER_LIMIT_ACTIONS)}, found '{over}'.")
|
|
143
|
+
unauth = child_text(e2c, "unauthorizedSenderAction")
|
|
144
|
+
if unauth and unauth not in UNAUTHORIZED_ACTIONS:
|
|
145
|
+
errors.append(f"unauthorizedSenderAction must be one of {sorted(UNAUTHORIZED_ACTIONS)}, found '{unauth}'.")
|
|
146
|
+
|
|
147
|
+
addresses = e2c.findall(f"{Q}routingAddresses")
|
|
148
|
+
if not addresses:
|
|
149
|
+
errors.append("No <routingAddresses> found — at least one is expected.")
|
|
150
|
+
seen_names = set()
|
|
151
|
+
for i, addr in enumerate(addresses, 1):
|
|
152
|
+
label = f"routingAddresses[{i}]"
|
|
153
|
+
for field in ("addressType", "routingName", "caseOrigin", "casePriority"):
|
|
154
|
+
if not child_text(addr, field):
|
|
155
|
+
errors.append(f"{label} missing required field '{field}'.")
|
|
156
|
+
atype = child_text(addr, "addressType")
|
|
157
|
+
if atype == "E2cEasy":
|
|
158
|
+
errors.append(
|
|
159
|
+
f"{label} uses addressType 'E2cEasy', which is not supported via Metadata API — "
|
|
160
|
+
"use the Service Easy Setup wizard."
|
|
161
|
+
)
|
|
162
|
+
elif atype and atype not in VALID_ADDRESS_TYPES:
|
|
163
|
+
errors.append(f"{label} addressType '{atype}' invalid; expected one of {sorted(VALID_ADDRESS_TYPES)}.")
|
|
164
|
+
name = child_text(addr, "routingName")
|
|
165
|
+
if name:
|
|
166
|
+
if name in seen_names:
|
|
167
|
+
errors.append(f"{label} duplicate routingName '{name}'.")
|
|
168
|
+
seen_names.add(name)
|
|
169
|
+
if child_text(addr, "emailAddress") is not None:
|
|
170
|
+
errors.append(
|
|
171
|
+
f"{label} sets 'emailAddress' — remove it; the customer-facing "
|
|
172
|
+
"email is supplied at apply time via --routing-email, never in "
|
|
173
|
+
"the source file.")
|
|
174
|
+
for field in READONLY_FIELDS:
|
|
175
|
+
if child_text(addr, field) is not None:
|
|
176
|
+
errors.append(f"{label} sets read-only field '{field}' — remove it; the platform manages it.")
|
|
177
|
+
|
|
178
|
+
# Optional per-address Default Case Owner. If caseOwner is set, it must
|
|
179
|
+
# be a real value (not an unfilled placeholder) AND be paired with a
|
|
180
|
+
# valid caseOwnerType — the platform rejects caseOwner without a type.
|
|
181
|
+
case_owner = child_text(addr, "caseOwner")
|
|
182
|
+
case_owner_type = child_text(addr, "caseOwnerType")
|
|
183
|
+
if case_owner is not None:
|
|
184
|
+
if is_placeholder(case_owner):
|
|
185
|
+
errors.append(
|
|
186
|
+
f"{label} caseOwner is still the placeholder '{case_owner}' "
|
|
187
|
+
"— set a real active Username or Queue DeveloperName, or "
|
|
188
|
+
"remove caseOwner (and caseOwnerType) to use the org "
|
|
189
|
+
"Default Case Owner.")
|
|
190
|
+
if case_owner_type is None:
|
|
191
|
+
errors.append(
|
|
192
|
+
f"{label} sets caseOwner without caseOwnerType — the "
|
|
193
|
+
"platform requires caseOwnerType ('User' or 'Queue') "
|
|
194
|
+
"whenever caseOwner is set. Add caseOwnerType, or remove "
|
|
195
|
+
"caseOwner to use the org Default Case Owner.")
|
|
196
|
+
if case_owner_type is not None:
|
|
197
|
+
if is_placeholder(case_owner_type):
|
|
198
|
+
errors.append(
|
|
199
|
+
f"{label} caseOwnerType is still the placeholder "
|
|
200
|
+
f"'{case_owner_type}' — set 'User' or 'Queue'.")
|
|
201
|
+
elif case_owner_type not in VALID_OWNER_TYPES:
|
|
202
|
+
errors.append(
|
|
203
|
+
f"{label} caseOwnerType must be 'User' or 'Queue', found "
|
|
204
|
+
f"'{case_owner_type}'.")
|
|
205
|
+
if case_owner is None:
|
|
206
|
+
errors.append(
|
|
207
|
+
f"{label} sets caseOwnerType without caseOwner — either add "
|
|
208
|
+
"a caseOwner value or remove caseOwnerType.")
|
|
209
|
+
|
|
210
|
+
return errors
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def main():
|
|
214
|
+
args = [a for a in sys.argv[1:] if a not in ("--help", "-h")]
|
|
215
|
+
if len(sys.argv) == 1 or "--help" in sys.argv or "-h" in sys.argv:
|
|
216
|
+
print(__doc__)
|
|
217
|
+
return 0 if "--help" in sys.argv or "-h" in sys.argv else 2
|
|
218
|
+
path = args[0]
|
|
219
|
+
errors = validate(path)
|
|
220
|
+
if errors:
|
|
221
|
+
for e in errors:
|
|
222
|
+
print(f"ERROR: {e}", file=sys.stderr)
|
|
223
|
+
return 1
|
|
224
|
+
print(f"OK: {path} passed CaseSettings Email-to-Case validation.")
|
|
225
|
+
return 0
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
if __name__ == "__main__":
|
|
229
|
+
sys.exit(main())
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-itsm-agentic-setup-agentforce-coordinate
|
|
3
|
-
description: "Orchestrator for setting up Agentforce in Salesforce Service Cloud ITSM — Agentforce Studio enablement, the IT Service Fulfiller agent
|
|
3
|
+
description: "Orchestrator for setting up Agentforce in Salesforce Service Cloud ITSM — Agentforce Studio enablement, the IT Service Fulfiller agent, and the IT Service Employee agent. Use when the user asks to set up Agentforce for ITSM, enable Studio and the Fulfiller/Employee agents together, wants a guided Agentforce ITSM walkthrough, or asks what Agentforce features are available for IT Service. Presents available Agentforce capabilities and delegates each selection to a specialized child skill while tracking progress. Triggers on: set up agentforce for itsm, configure agentforce studio and fulfiller, agentforce itsm walkthrough, what agentforce features for it service. DO NOT TRIGGER when: the user asks to enable Agentforce Studio alone, asks to create or activate the Fulfiller or Employee agent alone, or asks about CMDB, Incident Management, Teams, or general ITSM setup without Agentforce intent."
|
|
4
4
|
metadata:
|
|
5
|
-
version: "1.
|
|
5
|
+
version: "1.6"
|
|
6
6
|
domains: ["Service", "Agentforce"]
|
|
7
7
|
relatedSkills:
|
|
8
8
|
- "service-itsm-agentic-setup-agentforce-studio-configure"
|
|
@@ -46,21 +46,27 @@ explicit confirmation of the org.
|
|
|
46
46
|
|
|
47
47
|
### 3. Present the Agentforce feature menu as a multi-select
|
|
48
48
|
|
|
49
|
-
Show the user what's available and what's done
|
|
49
|
+
Show the user what's available and what's done, organized into the **two sequential setup stages** —
|
|
50
|
+
**Stage 1: enable platform features** (Agentforce Studio enablement) and **Stage 2: install &
|
|
51
|
+
activate agent templates** (the Fulfiller and Employee agents). This separation is load-bearing:
|
|
52
|
+
Stage 1 *enables* org-level platform toggles/preferences, while Stage 2 *installs and activates*
|
|
53
|
+
agents from a template — they are distinct kinds of action and must read as distinct stages, not one
|
|
54
|
+
undifferentiated list. Only features with a working child skill appear in the menu — use the
|
|
55
|
+
**Feature menu** template in `examples/output-templates.md`. Collect the user's selections through a single multi-select prompt (use `AskUserQuestion` with `multiSelect: true` when tooling permits, otherwise ask the user to reply with a list of numbers such as `1, 2`). Use the **exact Item names from the Feature menu table** as the multi-select option labels — verbatim, including each item's parenthetical note and the word "Agent" and its capitalization (`Agentforce Studio enablement (Foundation for both agents)`, `IT Service Fulfiller Agent`, `IT Service Employee Agent`) — so the picker options and the table never diverge. Each item's **Description column matches the wording on the Salesforce Setup → Agentforce for IT Service page** (the Fulfiller and Employee agent-template descriptions are used verbatim) so a user evaluating which template to install reads the same purpose/scope here as they would in Setup — do not paraphrase or shorten that product copy. For the two Stage 2 agent templates, follow the verbatim product copy with one short trailing `Setup:` line stating what installing does (`Setup: creates the agent from this template and activates a version.`) so a single row carries purpose, scope, and the install action together. When raising `AskUserQuestion`, put that same Description text (product copy + the `Setup:` line) in each option's `description` field so the picker carries the detail too. Do NOT show placeholder features that cannot be executed.
|
|
50
56
|
|
|
51
57
|
**Report file (harness / non-interactive runs).** If a `${outputDir}` is provided (via the harness's generated-file location directive), write the menu emission (attribution header + feature table with status + delegation targets + dependency signal + the multi-select prompt itself) to `${outputDir}/report.md` **before** raising `AskUserQuestion` — so the report file always exists even when the harness parks at the confirmation gate. Overwrite the same file after each feature completes with the updated status table. Skip these writes when running interactively for a user in a chat surface — write only when `${outputDir}` was passed as an explicit destination.
|
|
52
58
|
|
|
53
59
|
### 4. Delegate to child skills in dependency order
|
|
54
60
|
|
|
55
|
-
**Studio-first rule (unconditional).** If Agentforce Studio enablement (#1) is in the user's selection and not already done, run it **first**, always — regardless of the order the user listed their numbers in. Both the Fulfiller Agent (#2) and Employee Agent (#3)
|
|
61
|
+
**Studio-first rule (unconditional).** If Agentforce Studio enablement (#1) is in the user's selection and not already done, run it **first**, always — regardless of the order the user listed their numbers in. Both the Fulfiller Agent (#2) and Employee Agent (#3) depend on Studio being enabled and will fail if attempted first. Reorder the queue silently so Studio runs before either agent. This rule is non-negotiable and applies whether the user selected two features (Studio + one agent) or all three.
|
|
56
62
|
|
|
57
63
|
**User-order rule (between #2 and #3 only).** Fulfiller Agent (#2) and Employee Agent (#3) are independent of each other — neither depends on the other. If **both** are selected, run them in the order the user listed them (default 2 → 3 when unspecified). This rule applies **only** to the ordering between #2 and #3; it never overrides the Studio-first rule above.
|
|
58
64
|
|
|
59
65
|
| # | Feature | Child Skill |
|
|
60
66
|
|---|---------|-------------|
|
|
61
|
-
| 1 | Agentforce Studio enablement | `service-itsm-agentic-setup-agentforce-studio-configure` |
|
|
62
|
-
| 2 | Fulfiller Agent
|
|
63
|
-
| 3 | Employee Agent
|
|
67
|
+
| 1 | Agentforce Studio enablement (Foundation for both agents) | `service-itsm-agentic-setup-agentforce-studio-configure` |
|
|
68
|
+
| 2 | IT Service Fulfiller Agent | `service-itsm-agentic-setup-fulfiller-agent-configure` |
|
|
69
|
+
| 3 | IT Service Employee Agent | `service-itsm-agentic-setup-employee-agent-configure` |
|
|
64
70
|
|
|
65
71
|
`service-itsm-agentic-setup-agentforce-studio-configure` performs its own read-and-classify
|
|
66
72
|
preflight (reading live toggle state before writing) rather than delegating to
|
|
@@ -91,15 +97,26 @@ When the user says they're done (or all available features are configured), pres
|
|
|
91
97
|
|
|
92
98
|
---
|
|
93
99
|
|
|
94
|
-
##
|
|
100
|
+
## Setup Stages & Recommended Order
|
|
101
|
+
|
|
102
|
+
Setup runs in **two sequential stages**. Stage 1 (enable platform features) must complete before
|
|
103
|
+
Stage 2 (install & activate agent templates).
|
|
95
104
|
|
|
96
105
|
```text
|
|
97
|
-
1
|
|
98
|
-
|
|
99
|
-
|
|
106
|
+
Stage 1 — Foundation: enable platform features
|
|
107
|
+
1. Agentforce Studio enablement (Foundation for both agents) (turn ON org-level Agentforce + Einstein GenAI feature toggles)
|
|
108
|
+
|
|
109
|
+
Stage 2 — Agent templates: install & activate (only after Stage 1)
|
|
110
|
+
2. IT Service Fulfiller Agent (install from template, commit, and activate the agent)
|
|
111
|
+
3. IT Service Employee Agent (install from template, commit, and activate the agent)
|
|
100
112
|
```
|
|
101
113
|
|
|
102
|
-
Agentforce Studio enablement is the foundation
|
|
114
|
+
Stage 1 (Agentforce Studio enablement) is the **foundation**: it turns on the org-level Agentforce
|
|
115
|
+
and Einstein GenAI feature toggles that both the Fulfiller and Employee agents are **built on top
|
|
116
|
+
of**. Enable it first — attempting to install or activate either agent before this foundation is
|
|
117
|
+
enabled will fail. The two Stage 2 items (Fulfiller and Employee) are independent siblings (neither
|
|
118
|
+
depends on the other) — both can be selected together and installed in either order once Stage 1 is
|
|
119
|
+
done.
|
|
103
120
|
|
|
104
121
|
---
|
|
105
122
|
|
|
@@ -115,8 +132,8 @@ Agentforce Studio enablement is the foundation: it turns on the org-level Agentf
|
|
|
115
132
|
- NEVER advance to the next feature in the queue if the current one failed or only partially
|
|
116
133
|
succeeded — stop and surface the failure in plain language instead
|
|
117
134
|
- If Agentforce Studio enablement reports the org lacks the Agentforce license (`accessCheck`), STOP
|
|
118
|
-
the whole flow — this is a license/edition
|
|
119
|
-
Fulfiller nor the Employee Agent
|
|
135
|
+
the whole flow — this is a license/edition requirement no API can grant, and neither the
|
|
136
|
+
Fulfiller nor the Employee Agent can succeed without it
|
|
120
137
|
- ALWAYS confirm the target org before delegating to any child skill, and state that the org will be modified
|
|
121
138
|
- Do NOT expose internal technical jargon in user-facing output. This includes Salesforce record
|
|
122
139
|
IDs and org IDs, raw HTTP status codes (403, 500, …), API error codes (`FUNCTIONALITY_NOT_ENABLED`,
|
|
@@ -137,6 +154,7 @@ Before emitting any menu or summary in this skill, mentally confirm each of the
|
|
|
137
154
|
- [ ] Only features with a working child skill are shown; placeholder features are hidden
|
|
138
155
|
- [ ] The feature menu is presented as a multi-select (single-select only if the user has already named a specific feature)
|
|
139
156
|
- [ ] Each feature row's `Status` column reflects the actual tracked state from the conversation (`Not done`, `In progress`, or `Done`) — not a hard-coded default
|
|
157
|
+
- [ ] Each feature row's `Description` matches the Salesforce Setup → Agentforce for IT Service page wording (Fulfiller and Employee agent-template descriptions verbatim, not paraphrased), the two Stage 2 rows end with the short `Setup:` install line, and the `AskUserQuestion` option descriptions carry the same text
|
|
140
158
|
- [ ] For a completion summary, the header line and closing line are chosen by the rubric in `examples/output-templates.md` (all `Done` → *Complete*; any `Not done`/`In progress` → *Finished*)
|
|
141
159
|
- [ ] A feature is being configured only because the user explicitly selected it (or is being walked through sequentially with confirmation under an "all" / "everything" request)
|
|
142
160
|
- [ ] Studio enablement is verified done before delegating to the Fulfiller Agent or Employee Agent child skill
|
|
@@ -149,5 +167,5 @@ Before emitting any menu or summary in this skill, mentally confirm each of the
|
|
|
149
167
|
|
|
150
168
|
| File | When to read |
|
|
151
169
|
|------|--------------|
|
|
152
|
-
| `examples/output-templates.md` | Behavior steps
|
|
170
|
+
| `examples/output-templates.md` | Behavior steps 3, 5, and 6 — feature menu (two-stage, multi-select), post-feature progress, and completion summary text blocks |
|
|
153
171
|
| `scripts/verify-child-verdict.mjs` | Behavior step 5 — run via `Bash` (`node`) to check a child skill's verdict deterministically before advancing the queue |
|
package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md
CHANGED
|
@@ -1,79 +1,95 @@
|
|
|
1
1
|
# Output Templates — service-itsm-agentic-setup-agentforce-coordinate
|
|
2
2
|
|
|
3
|
-
Emit one of these text blocks at the corresponding step in the workflow.
|
|
4
|
-
|
|
3
|
+
Emit one of these text blocks at the corresponding step in the workflow. Setup is presented as
|
|
4
|
+
**two sequential stages** — Stage 1 (enable platform features) must finish before Stage 2 (install
|
|
5
|
+
& activate agent templates). Only items with a working child skill appear — hide placeholder rows.
|
|
5
6
|
|
|
6
|
-
## Feature menu (Behavior step
|
|
7
|
+
## Feature menu (Behavior step 3)
|
|
7
8
|
|
|
8
9
|
```text
|
|
9
10
|
Agentforce for ITSM Setup (via service-itsm-agentic-setup-agentforce-coordinate)
|
|
10
11
|
|
|
11
|
-
Here are the features available for Agentforce ITSM.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
│
|
|
18
|
-
│
|
|
19
|
-
│
|
|
20
|
-
│
|
|
21
|
-
│ │
|
|
22
|
-
|
|
12
|
+
Here are the features available for Agentforce ITSM. Set them up in two stages —
|
|
13
|
+
Stage 1 (enable) must finish before Stage 2 (install & activate):
|
|
14
|
+
|
|
15
|
+
┌───┬─────────┬──────────────────────────────┬────────────────────────────────────────────────────────┬──────────┐
|
|
16
|
+
│ # │ Stage │ Item │ Description │ Status │
|
|
17
|
+
├───┼─────────┼──────────────────────────────┼────────────────────────────────────────────────────────┼──────────┤
|
|
18
|
+
│ 1 │ Stage 1 │ Agentforce Studio enablement │ Turn on org-level Agentforce, Einstein GenAI, and IT │ Not done │
|
|
19
|
+
│ │ │ (Foundation for both agents) │ Service agent features │ │
|
|
20
|
+
│ 2 │ Stage 2 │ IT Service Fulfiller Agent │ Automate actions and simplify critical asks for IT │ Not done │
|
|
21
|
+
│ │ │ │ service fulfillers who work with incidents, problems, │ │
|
|
22
|
+
│ │ │ │ change requests and more to resolve issues and │ │
|
|
23
|
+
│ │ │ │ requests. │ │
|
|
24
|
+
│ │ │ │ Setup: creates the agent from this template and │ │
|
|
25
|
+
│ │ │ │ activates a version. │ │
|
|
26
|
+
│ 3 │ Stage 2 │ IT Service Employee Agent │ Help employees quickly troubleshoot IT issues, raise │ Not done │
|
|
27
|
+
│ │ │ │ service requests, and track their incidents with ease. │ │
|
|
28
|
+
│ │ │ │ Setup: creates the agent from this template and │ │
|
|
29
|
+
│ │ │ │ activates a version. │ │
|
|
30
|
+
└───┴─────────┴──────────────────────────────┴────────────────────────────────────────────────────────┴──────────┘
|
|
23
31
|
|
|
24
32
|
Reply with the numbers of the features you want to set up (one or more, e.g. `1` or `1, 2`).
|
|
33
|
+
If you pick a Stage 2 template without Stage 1, I'll enable the Stage 1 foundation first.
|
|
25
34
|
```
|
|
26
35
|
|
|
27
|
-
|
|
36
|
+
Stage 1 (Agentforce Studio enablement) is the **foundation** — it enables the org-level platform
|
|
37
|
+
features both agents are built on. Stage 2 items (the Fulfiller and Employee agents) are **installed
|
|
38
|
+
from a template and activated**; they can be set up in either order once Stage 1 is done.
|
|
39
|
+
|
|
40
|
+
## Post-feature progress (Behavior step 5)
|
|
28
41
|
|
|
29
|
-
Example after Agentforce Studio enablement completes:
|
|
42
|
+
Example after Stage 1 (Agentforce Studio enablement) completes:
|
|
30
43
|
|
|
31
44
|
```text
|
|
32
45
|
Agentforce Studio — enabled successfully
|
|
33
46
|
(via service-itsm-agentic-setup-agentforce-studio-configure)
|
|
34
47
|
|
|
35
|
-
|
|
36
|
-
│ # │
|
|
37
|
-
|
|
38
|
-
│ 1 │ Agentforce Studio enablement
|
|
39
|
-
│
|
|
40
|
-
│
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
┌───┬─────────┬──────────────────────────────┬─────────────┐
|
|
49
|
+
│ # │ Stage │ Item │ Status │
|
|
50
|
+
├───┼─────────┼──────────────────────────────┼─────────────┤
|
|
51
|
+
│ 1 │ Stage 1 │ Agentforce Studio enablement │ Done │
|
|
52
|
+
│ │ │ (Foundation for both agents) │ │
|
|
53
|
+
│ 2 │ Stage 2 │ IT Service Fulfiller Agent │ Not done │
|
|
54
|
+
│ 3 │ Stage 2 │ IT Service Employee Agent │ Not done │
|
|
55
|
+
└───┴─────────┴──────────────────────────────┴─────────────┘
|
|
56
|
+
|
|
57
|
+
Stage 1 (foundation) is enabled. On to Stage 2 — install and activate the IT
|
|
58
|
+
Service Fulfiller and/or Employee agents from their templates. The Fulfiller
|
|
59
|
+
agent gives IT technicians an assistant for triage, case summaries, and record
|
|
60
|
+
automations; the Employee agent gives requesters self-service help with their
|
|
61
|
+
own requests.
|
|
47
62
|
```
|
|
48
63
|
|
|
49
|
-
## Completion summary (Behavior step
|
|
64
|
+
## Completion summary (Behavior step 6)
|
|
50
65
|
|
|
51
|
-
The completion summary fires either (a) after every
|
|
52
|
-
|
|
66
|
+
The completion summary fires either (a) after every item completes, or (b) when the user says they
|
|
67
|
+
are finished — even if some items are still `Not done`. When rendering:
|
|
53
68
|
|
|
54
|
-
- Substitute each
|
|
55
|
-
|
|
56
|
-
- Choose the header line based on whether every
|
|
57
|
-
- All
|
|
58
|
-
- Any
|
|
69
|
+
- Substitute each row's actual tracked status: `Done`, `In progress`, or `Not done`. Do NOT
|
|
70
|
+
hard-code `Done`.
|
|
71
|
+
- Choose the header line based on whether every item is `Done`:
|
|
72
|
+
- All items `Done` → `Agentforce for ITSM Setup — Complete`
|
|
73
|
+
- Any item still `Not done` or `In progress` → `Agentforce for ITSM Setup — Finished`
|
|
59
74
|
- Choose the closing line based on state:
|
|
60
75
|
- All `Done` → `Your Agentforce for ITSM setup is complete.`
|
|
61
|
-
- Otherwise → `You have finished the
|
|
76
|
+
- Otherwise → `You have finished the items you selected. The remaining items can be resumed later by re-invoking this orchestrator.`
|
|
62
77
|
|
|
63
|
-
Example — user finished after only enabling Agentforce Studio (
|
|
78
|
+
Example — user finished after only enabling Agentforce Studio (the Stage 2 agents stayed `Not done`):
|
|
64
79
|
|
|
65
80
|
```text
|
|
66
81
|
Agentforce for ITSM Setup — Finished
|
|
67
82
|
(via service-itsm-agentic-setup-agentforce-coordinate)
|
|
68
83
|
|
|
69
|
-
|
|
70
|
-
│
|
|
71
|
-
|
|
72
|
-
│ Agentforce Studio enablement
|
|
73
|
-
│
|
|
74
|
-
│
|
|
75
|
-
|
|
84
|
+
┌───┬─────────┬──────────────────────────────┬─────────────┐
|
|
85
|
+
│ # │ Stage │ Item │ Status │
|
|
86
|
+
├───┼─────────┼──────────────────────────────┼─────────────┤
|
|
87
|
+
│ 1 │ Stage 1 │ Agentforce Studio enablement │ Done │
|
|
88
|
+
│ │ │ (Foundation for both agents) │ │
|
|
89
|
+
│ 2 │ Stage 2 │ IT Service Fulfiller Agent │ Not done │
|
|
90
|
+
│ 3 │ Stage 2 │ IT Service Employee Agent │ Not done │
|
|
91
|
+
└───┴─────────┴──────────────────────────────┴─────────────┘
|
|
76
92
|
|
|
77
|
-
You have finished the
|
|
93
|
+
You have finished the items you selected. The remaining items can be
|
|
78
94
|
resumed later by re-invoking this orchestrator.
|
|
79
95
|
```
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: service-itsm-agentic-setup-agentforce-studio-configure
|
|
3
3
|
description: "Enable the Agentforce for IT Service Salesforce Go feature toggles (Agentforce Studio, Einstein Generative AI, the parent umbrella, and the Fulfiller/Employee agent templates) using the Salesforce CLI (sf). Turns ON org prefs via the Setup Discovery feature/{apiName}/enable Connect API route. Write-capable, idempotent, dependency-ordered, confirm-to-write required. Use when asked to enable Agentforce Studio, turn on Agentforce for IT Service, enable Einstein generative AI, or configure the org-level Agentforce for IT Service prerequisites. Triggers: enable agentforce studio, turn on agentforce for it service, enable einstein generative ai, configure agentforce org prefs. DO NOT TRIGGER: read-only prerequisite check (service-itsm-agentic-setup-agentforce-studio-validate), create/activate an agent (service-itsm-agentic-setup-fulfiller-agent-configure), or assigning permission sets."
|
|
4
4
|
metadata:
|
|
5
|
-
version: "1.
|
|
5
|
+
version: "1.3"
|
|
6
6
|
domains: ["Service", "Agentforce"]
|
|
7
7
|
minApiVersion: "67.0"
|
|
8
8
|
relatedSkills:
|
|
@@ -25,7 +25,7 @@ allowed-tools: |
|
|
|
25
25
|
|
|
26
26
|
# Enable Agentforce for IT Service Prerequisites
|
|
27
27
|
|
|
28
|
-
Enable the **Agentforce for IT Service** Salesforce Go feature toggles — **Einstein Generative AI**, **Agentforce Studio**, the **parent umbrella**, and the path-specific agent template (**Fulfiller** or **Employee**) — entirely through the **Salesforce CLI (`sf`)**.
|
|
28
|
+
Enable the **Agentforce for IT Service** Salesforce Go feature toggles — **Einstein Generative AI**, **Agentforce Studio**, the **parent umbrella**, and the path-specific agent template (**Fulfiller** or **Employee**) — entirely through the **Salesforce CLI (`sf`)**. These toggles are the **prerequisites for creating the Fulfiller/Employee agent**; this **write-capable** step turns them on via the Setup Discovery `POST /connect/setup/discovery/feature/{apiName}/enable` Connect API route. Each toggle is enabled **idempotently** (skipped if already `ENABLED`), dependencies are enabled first, and explicit confirmation is required before any write.
|
|
29
29
|
|
|
30
30
|
| Step | Skill | What it does |
|
|
31
31
|
|------|-------|--------------|
|
|
@@ -218,7 +218,6 @@ Substitute `<alias>` with the target org alias. `<agentType>` is `fulfiller` or
|
|
|
218
218
|
| `updateOrgPref` → 500 `Invalid prefName` for an agent pref | Wrong write path — use the Setup Discovery `feature/{apiName}/enable` endpoint instead |
|
|
219
219
|
| Auth error from `sf api request rest` | The target org's session needs re-authentication (`sf org login web`) |
|
|
220
220
|
| Treating an auth/permission/empty-body read failure as "not wired" | Pass the captured `$?` as the classifier's 3rd arg — only a confirmed 404 is CANNOT-CONFIRM; anything else is ERROR (surface `rawError`, stop) |
|
|
221
|
-
| Trusting the Phase-2 `blocked` list for the entire Phase-4 loop | It is a snapshot before any write — re-read + reclassify before each toggle attempt instead, or a dependency-blocked child gets reported FAILED even after its blocker was just cleared |
|
|
222
221
|
| Reporting `ALL-ENABLED` because `pending` is empty | Also check `unconfirmed` — a required toggle missing from the response or with an unrecognized status is neither confirmed ENABLED nor NOT_ENABLED |
|
|
223
222
|
| Re-deriving the per-feature / overall verdict in prose from the before/after JSON | Run `scripts/classify-final-report.mjs` — the aggregation is fixed comparison logic (authoring standard A9), not a judgment call |
|
|
224
223
|
| Setting the feature-status request body in a shell variable in Phase 1 and expecting it in Phase 4/5 | Each `Bash` invocation may run in a fresh shell where the variable is unset, silently sending an empty body — persist it to `/tmp/feature-status-body.json` once and read it back with `--body "$(cat /tmp/feature-status-body.json)"` in every phase |
|
|
@@ -240,27 +239,33 @@ Substitute `<alias>` with the target org alias. `<agentType>` is `fulfiller` or
|
|
|
240
239
|
|
|
241
240
|
## Output Format
|
|
242
241
|
|
|
243
|
-
Present the enablement report as
|
|
242
|
+
Present the enablement report as a **table** — this is **Stage 1 (Foundation)**, the platform
|
|
243
|
+
enablement that Stage 2 (install & activate the agent) is built on. Each Status is one of
|
|
244
|
+
ENABLED / ALREADY-ENABLED / FAILED / CANNOT-CONFIRM:
|
|
244
245
|
|
|
245
246
|
```text
|
|
246
|
-
Agentforce for IT Service — Enable
|
|
247
|
+
Agentforce for IT Service — Stage 1: Enable Platform Features (via service-itsm-agentic-setup-agentforce-studio-configure)
|
|
247
248
|
|
|
248
249
|
Org: <org-alias> (API v67.0)
|
|
249
250
|
Agent path: fulfiller | employee
|
|
250
251
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
252
|
+
| # | Platform feature | Status |
|
|
253
|
+
| --- | --- | --- |
|
|
254
|
+
| 1 | Einstein Generative AI | <status> |
|
|
255
|
+
| 2 | Agentforce Studio | <status> |
|
|
256
|
+
| 3 | Agentforce for IT Service | <status> |
|
|
257
|
+
| 4 | <path-specific toggle(s)> | <status> |
|
|
255
258
|
|
|
256
|
-
Verdict: SUCCESS
|
|
259
|
+
Verdict: SUCCESS | PARTIAL | FAILED | CANNOT-CONFIRM | ERROR
|
|
257
260
|
|
|
258
261
|
Next steps:
|
|
259
|
-
- <If SUCCESS: "
|
|
262
|
+
- <If SUCCESS: "Stage 1 (foundation) complete — proceed to Stage 2: install + activate the <path> agent via service-itsm-agentic-setup-fulfiller-agent-configure (fulfiller) / the employee-agent skill.">
|
|
260
263
|
- <If PARTIAL/FAILED/CANNOT-CONFIRM/ERROR: list the affected toggle(s) + reason (enableBlockedReasons, unconfirmed status, or read error) + remediation steps>
|
|
261
264
|
```
|
|
262
265
|
|
|
263
|
-
Render `overall` and each feature's `finalStatus` from `scripts/classify-final-report.mjs` verbatim — do not recompute them. No files are produced beyond the temporary response captures used by the classifiers.
|
|
266
|
+
Render `overall` and each feature's `finalStatus` from `scripts/classify-final-report.mjs` verbatim (substitute into each `<status>` cell) — do not recompute them. No files are produced beyond the temporary response captures used by the classifiers.
|
|
267
|
+
|
|
268
|
+
Label rows exactly as the classifier emits them — never add `Requestor`, `Specialized`, or `parent`.
|
|
264
269
|
|
|
265
270
|
---
|
|
266
271
|
|
package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md
CHANGED
|
@@ -31,11 +31,13 @@ Every call this skill makes — read and write — is a plain
|
|
|
31
31
|
|-----------|----------------|------------|
|
|
32
32
|
| Einstein Generative AI | `sales-cloud-einstein-generative-ai` | none |
|
|
33
33
|
| Turn on Agentforce Studio | `sales-cloud-agent-studio` | Einstein GenAI |
|
|
34
|
-
| Agentforce for IT Service
|
|
35
|
-
| IT Service Fulfiller
|
|
36
|
-
| IT Service Employee
|
|
34
|
+
| Agentforce for IT Service | `service-cloud-agentforce-for-itsm` | Studio, Einstein GenAI |
|
|
35
|
+
| IT Service Fulfiller Template | `service-cloud-it-fulfiller-agent` | parent umbrella |
|
|
36
|
+
| IT Service Employee Template | `service-cloud-requestor-agent` | parent umbrella |
|
|
37
37
|
| Specialized Agent Templates for Employee | `service-cloud-it-service-employee-agent` | parent umbrella |
|
|
38
38
|
|
|
39
|
+
**Label rule (report output).** Render every toggle by its report label — `Einstein Generative AI`, `Agentforce Studio`, `Agentforce for IT Service`, `IT Service Fulfiller Template`, `IT Service Employee Template`, `Specialized Agent Templates for Employee` — verbatim, and identical across every report and both toggling skills (`-configure` and `-validate`). These match the first-column labels above, except the Studio row: its Go-page toggle reads "Turn on Agentforce Studio", but the rendered report label is simply `Agentforce Studio`. The `Template` suffix on the two agent-template toggles is the authoritative, deliberate report label — it intentionally differs from the shorter setup-page toggle caption (`IT Service Fulfiller` / `IT Service Employee`), the same way the Studio row's caption `Turn on Agentforce Studio` renders simply as `Agentforce Studio`. It marks these as the agent templates enabled at this stage, distinct from the installed agent that the agent-configure skills name `IT Service Fulfiller Agent` / `IT Service Employee Agent` (no `Template`) — do not simplify the report label to the bare caption. Never add an invented role qualifier such as "Requestor", "Specialized", or "parent" to a label. The fulfiller path shows one path-specific row (`IT Service Fulfiller Template`); the employee path shows two (`IT Service Employee Template` **and** `Specialized Agent Templates for Employee`) — never collapse them to a single row or disambiguate them with any other suffix.
|
|
40
|
+
|
|
39
41
|
Enable order: Einstein GenAI → Studio → parent umbrella → path-specific
|
|
40
42
|
template(s). The read response echoes unmet dependencies in
|
|
41
43
|
`dependencyStatuses[]`; the classifier encodes this same order in `ORDER` so
|
|
@@ -64,12 +64,20 @@ const ORDER = {
|
|
|
64
64
|
employee: [EINSTEIN, STUDIO, PARENT, REQUESTOR, SPECIALIZED],
|
|
65
65
|
};
|
|
66
66
|
|
|
67
|
+
// Report labels — the authoritative strings these reports render. The two
|
|
68
|
+
// agent-template rows intentionally differ from their shorter Salesforce Go
|
|
69
|
+
// setup-page toggle caption, the same way the Studio caption "Turn on
|
|
70
|
+
// Agentforce Studio" renders as "Agentforce Studio": these toggles enable agent
|
|
71
|
+
// *templates*, so their report label carries a deliberate "Template" suffix. By
|
|
72
|
+
// design — do not simplify it to the bare caption. It is also distinct from the
|
|
73
|
+
// installed agent the agent-configure skills create ("IT Service Fulfiller
|
|
74
|
+
// Agent" / "IT Service Employee Agent", no "Template").
|
|
67
75
|
const LABEL = {
|
|
68
76
|
[EINSTEIN]: 'Einstein Generative AI',
|
|
69
77
|
[STUDIO]: 'Agentforce Studio',
|
|
70
|
-
[PARENT]: 'Agentforce for IT Service
|
|
71
|
-
[FULFILLER]: 'IT Service Fulfiller
|
|
72
|
-
[REQUESTOR]: 'IT Service Employee
|
|
78
|
+
[PARENT]: 'Agentforce for IT Service',
|
|
79
|
+
[FULFILLER]: 'IT Service Fulfiller Template',
|
|
80
|
+
[REQUESTOR]: 'IT Service Employee Template',
|
|
73
81
|
[SPECIALIZED]: 'Specialized Agent Templates for Employee',
|
|
74
82
|
};
|
|
75
83
|
|