@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.
Files changed (288) hide show
  1. package/package.json +2 -6
  2. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
  3. package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
  4. package/skills/design-systems-slds-validate/SKILL.md +2 -2
  5. package/skills/dx-app-analytics-query/SKILL.md +1 -3
  6. package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
  7. package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
  8. package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
  9. package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
  10. package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
  11. package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
  12. package/skills/dx-devops-request-status/SKILL.md +160 -0
  13. package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
  14. package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
  15. package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
  16. package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
  17. package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
  18. package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
  19. package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
  20. package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
  21. package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
  22. package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
  23. package/skills/dx-org-shape-manage/SKILL.md +152 -0
  24. package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
  25. package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
  26. package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
  27. package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
  28. package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
  29. package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
  30. package/skills/dx-org-switch/SKILL.md +2 -2
  31. package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
  32. package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
  33. package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
  34. package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
  35. package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
  36. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
  37. package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
  38. package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
  39. package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
  40. package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
  41. package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
  42. package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
  43. package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
  44. package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
  45. package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
  46. package/skills/experience-cms-brand-apply/SKILL.md +4 -1
  47. package/skills/experience-cms-brand-create/SKILL.md +197 -0
  48. package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
  49. package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
  50. package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
  51. package/skills/experience-cms-content-generate/SKILL.md +190 -0
  52. package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
  53. package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
  54. package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
  55. package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
  56. package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
  57. package/skills/experience-cms-content-generate/assets/questions.md +241 -0
  58. package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
  59. package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
  60. package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
  61. package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
  62. package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
  63. package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
  64. package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
  65. package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
  66. package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
  67. package/skills/experience-cms-content-generate/references/principles.md +19 -0
  68. package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
  69. package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
  70. package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
  71. package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
  72. package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
  73. package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
  74. package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
  75. package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
  76. package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
  77. package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
  78. package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
  79. package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
  80. package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
  81. package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
  82. package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
  83. package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
  84. package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
  85. package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
  86. package/skills/experience-lwc-design-generate/SKILL.md +5 -4
  87. package/skills/experience-lwc-generate/SKILL.md +10 -9
  88. package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
  89. package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
  90. package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
  91. package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
  92. package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
  93. package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
  94. package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
  95. package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
  96. package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
  97. package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
  98. package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
  99. package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
  100. package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
  101. package/skills/integration-connectivity-generate/SKILL.md +11 -10
  102. package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
  103. package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
  104. package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
  105. package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
  106. package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
  107. package/skills/platform-custom-application-generate/SKILL.md +2 -0
  108. package/skills/platform-custom-field-generate/SKILL.md +8 -6
  109. package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
  110. package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
  111. package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
  112. package/skills/platform-custom-setting-generate/SKILL.md +419 -0
  113. package/skills/platform-dataspace-access-configure/SKILL.md +3 -3
  114. package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
  115. package/skills/platform-value-set-generate/SKILL.md +2 -0
  116. package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
  117. package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
  118. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
  119. package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
  120. package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
  121. package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
  122. package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
  123. package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
  124. package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
  125. package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
  126. package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
  127. package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
  128. package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
  129. package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
  130. package/skills/service-de-channel-activate/SKILL.md +271 -0
  131. package/skills/service-de-channel-activate/references/gotchas.md +31 -0
  132. package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
  133. package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
  134. package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
  135. package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
  136. package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
  137. package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
  138. package/skills/service-de-channel-create/SKILL.md +369 -0
  139. package/skills/service-de-channel-create/references/apple.md +59 -0
  140. package/skills/service-de-channel-create/references/connect-insert.md +84 -0
  141. package/skills/service-de-channel-create/references/facebook.md +154 -0
  142. package/skills/service-de-channel-create/references/line.md +66 -0
  143. package/skills/service-de-channel-create/references/sms.md +98 -0
  144. package/skills/service-de-channel-create/references/whatsapp.md +98 -0
  145. package/skills/service-de-channel-create/references/worked-examples.md +70 -0
  146. package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
  147. package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
  148. package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
  149. package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
  150. package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
  151. package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
  152. package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
  153. package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
  154. package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
  155. package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
  156. package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
  157. package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
  158. package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
  159. package/skills/service-de-waba-integrate/SKILL.md +227 -0
  160. package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
  161. package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
  162. package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
  163. package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
  164. package/skills/service-email-to-case-configure/SKILL.md +190 -0
  165. package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
  166. package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
  167. package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
  168. package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
  169. package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
  170. package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
  171. package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
  172. package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
  173. package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
  174. package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
  175. package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
  176. package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
  177. package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
  178. package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
  179. package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
  180. package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
  181. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
  182. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
  183. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
  184. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
  185. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
  186. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
  187. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
  188. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
  189. package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
  190. package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
  191. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
  192. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
  193. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
  194. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
  195. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
  196. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
  197. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
  198. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
  199. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
  200. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
  201. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
  202. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
  203. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
  204. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
  205. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
  206. package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
  207. package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
  208. package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
  209. package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
  210. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
  211. package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
  212. package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
  213. package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
  214. package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
  215. package/skills/data360-activate/README.md +0 -38
  216. package/skills/data360-activate/SKILL.md +0 -127
  217. package/skills/data360-connect/README.md +0 -57
  218. package/skills/data360-connect/SKILL.md +0 -163
  219. package/skills/data360-connect/examples/connections/heroku-postgres.json +0 -15
  220. package/skills/data360-connect/examples/connections/ingest-api-connection.json +0 -5
  221. package/skills/data360-connect/examples/connections/ingest-api-schema.json +0 -31
  222. package/skills/data360-connect/examples/connections/redshift.json +0 -16
  223. package/skills/data360-connect/examples/connections/sharepoint-unstructured.json +0 -20
  224. package/skills/data360-connect/examples/connections/snowflake-connection.json +0 -42
  225. package/skills/data360-harmonize/README.md +0 -31
  226. package/skills/data360-harmonize/SKILL.md +0 -126
  227. package/skills/data360-orchestrate/README.md +0 -120
  228. package/skills/data360-orchestrate/SKILL.md +0 -263
  229. package/skills/data360-orchestrate/assets/definitions/activation-target.template.json +0 -5
  230. package/skills/data360-orchestrate/assets/definitions/activation.template.json +0 -7
  231. package/skills/data360-orchestrate/assets/definitions/calculated-insight.template.json +0 -7
  232. package/skills/data360-orchestrate/assets/definitions/data-action-target.template.json +0 -5
  233. package/skills/data360-orchestrate/assets/definitions/data-action.template.json +0 -5
  234. package/skills/data360-orchestrate/assets/definitions/data-graph.template.json +0 -21
  235. package/skills/data360-orchestrate/assets/definitions/data-stream.template.json +0 -55
  236. package/skills/data360-orchestrate/assets/definitions/dmo.template.json +0 -17
  237. package/skills/data360-orchestrate/assets/definitions/identity-resolution.template.json +0 -30
  238. package/skills/data360-orchestrate/assets/definitions/mapping.template.json +0 -14
  239. package/skills/data360-orchestrate/assets/definitions/relationship.template.json +0 -12
  240. package/skills/data360-orchestrate/assets/definitions/search-index.template.json +0 -9
  241. package/skills/data360-orchestrate/assets/definitions/segment.template.json +0 -16
  242. package/skills/data360-orchestrate/references/feature-readiness.md +0 -157
  243. package/skills/data360-orchestrate/references/plugin-setup.md +0 -138
  244. package/skills/data360-orchestrate/scripts/bootstrap-plugin.sh +0 -53
  245. package/skills/data360-orchestrate/scripts/diagnose-org.mjs +0 -511
  246. package/skills/data360-orchestrate/scripts/generate-manifest.mjs +0 -68
  247. package/skills/data360-orchestrate/scripts/verify-plugin.sh +0 -58
  248. package/skills/data360-prepare/README.md +0 -50
  249. package/skills/data360-prepare/SKILL.md +0 -203
  250. package/skills/data360-prepare/examples/ingestion-api/.env.example +0 -8
  251. package/skills/data360-prepare/examples/ingestion-api/README.md +0 -48
  252. package/skills/data360-prepare/examples/ingestion-api/send-data.py +0 -144
  253. package/skills/data360-query/README.md +0 -43
  254. package/skills/data360-query/SKILL.md +0 -128
  255. package/skills/data360-query/examples/search-indexes/hybrid-structured.json +0 -44
  256. package/skills/data360-query/examples/search-indexes/vector-knowledge.json +0 -43
  257. package/skills/data360-segment/README.md +0 -35
  258. package/skills/data360-segment/SKILL.md +0 -123
  259. package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
  260. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
  261. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
  262. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
  263. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
  264. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
  265. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
  266. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
  267. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
  268. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
  269. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
  270. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
  271. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
  272. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
  273. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
  274. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
  275. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
  276. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
  277. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
  278. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
  279. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
  280. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
  281. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
  282. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
  283. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
  284. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
  285. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
  286. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
  287. /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
  288. /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 lifecycle, and the IT Service Employee agent lifecycle. 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."
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.2"
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. Only features with a working child skill appear in the menu — use the **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`). Do NOT show placeholder features that cannot be executed.
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) lifecycles depend on Studio being enabled and will fail if attempted first. Reorder the queue silently so Studio runs before either agent lifecycle. This rule is non-negotiable and applies whether the user selected two features (Studio + one agent) or all three.
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 lifecycle | `service-itsm-agentic-setup-fulfiller-agent-configure` |
63
- | 3 | Employee Agent lifecycle (broad or specialized template) | `service-itsm-agentic-setup-employee-agent-configure` |
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
- ## Feature Dependencies & Recommended Order
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. Agentforce Studio enablement (foundation — org-level Agentforce and Einstein GenAI toggles)
98
- 2. Fulfiller Agent lifecycle (create, commit, activate the IT Service Fulfiller agent)
99
- 3. Employee Agent lifecycle (create, commit, activate the IT Service Employee agent)
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: it turns on the org-level Agentforce and Einstein GenAI features that both the Fulfiller and Employee agents depend on. Configure Studio first — attempting to create or activate either agent before Studio is enabled will fail. Fulfiller and Employee are independent siblings (neither depends on the other) — both can be selected together and run in either order after Studio.
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 prerequisite no API can grant, and neither the
119
- Fulfiller nor the Employee Agent lifecycle can succeed without it
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 2, 4, and 5 — feature menu (multi-select), post-feature progress, and completion summary text blocks |
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 |
@@ -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. Only features with a
4
- working child skill appear — hide placeholder rows.
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 2)
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. Select one or more to configure:
12
-
13
- ┌───┬───────────────────────────────┬──────────────────────────────────────────────────┬──────────┐
14
- │ # │ Feature │ Description │ Status │
15
- ├───┼───────────────────────────────┼──────────────────────────────────────────────────┼──────────┤
16
- │ 1 │ Agentforce Studio enablement │ Turn on org-level Agentforce, Einstein GenAI, │ Not done │
17
- │ │ │ and IT Service agent features │ │
18
- │ 2 │ Fulfiller Agent lifecycle │ Create the IT Service Fulfiller agent from │ Not done │
19
- │ │ │ template, commit, and activate a version │ │
20
- │ 3 │ Employee Agent lifecycle │ Create the IT Service Employee agent from │ Not done │
21
- │ │ │ template, commit, and activate a version │ │
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
- ## Post-feature progress (Behavior step 4)
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
- │ # │ Feature │ Status │
37
- ├───┼───────────────────────────────┼──────────┤
38
- │ 1 │ Agentforce Studio enablement │ Done │
39
- │ 2 │ Fulfiller Agent lifecycle │ Not done │
40
- │ 3 │ Employee Agent lifecycle │ Not done │
41
- └───┴───────────────────────────────┴──────────┘
42
-
43
- Agentforce Studio is enabled. Next up: create and activate the IT Service
44
- Fulfiller and Employee agents — the Fulfiller agent gives IT technicians an
45
- assistant for triage, case summaries, and record automations, while the
46
- Employee agent gives requesters self-service help with their own requests.
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 5)
64
+ ## Completion summary (Behavior step 6)
50
65
 
51
- The completion summary fires either (a) after every feature completes, or (b) when the user says
52
- they are finished — even if some features are still `Not done`. When rendering:
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 feature's row with its actual tracked status: `Done`, `In progress`, or `Not done`.
55
- Do NOT hard-code `Done`.
56
- - Choose the header line based on whether every feature is `Done`:
57
- - All features `Done` → `Agentforce for ITSM Setup — Complete`
58
- - Any feature still `Not done` or `In progress` → `Agentforce for ITSM Setup — Finished`
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 features you selected. The remaining features can be resumed later by re-invoking this orchestrator.`
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 (Fulfiller and Employee Agent lifecycles stayed `Not done`):
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
- │ Feature │ Status │
71
- ├───────────────────────────────┼──────────┤
72
- │ Agentforce Studio enablement │ Done │
73
- │ Fulfiller Agent lifecycle │ Not done │
74
- │ Employee Agent lifecycle │ Not done │
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 features you selected. The remaining features can be
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.0"
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`)**. This is the **write-capable** step in a three-skill flow; every write goes through the Setup Discovery `POST /connect/setup/discovery/feature/{apiName}/enable` Connect API route — the only correct write path for these toggles. Each toggle is enabled **idempotently** (skipped if already `ENABLED`), dependencies are enabled first, and explicit confirmation is required before any write.
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 Prerequisites (via service-itsm-agentic-setup-agentforce-studio-configure)
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
- [1] Einstein Generative AI ................. ENABLED | ALREADY-ENABLED | FAILED | CANNOT-CONFIRM
252
- [2] Agentforce Studio ...................... ENABLED | ALREADY-ENABLED | FAILED | CANNOT-CONFIRM
253
- [3] Agentforce for IT Service (parent) ..... ENABLED | ALREADY-ENABLED | FAILED | CANNOT-CONFIRM
254
- [4] <path-specific template(s)> ............ ENABLED | ALREADY-ENABLED | FAILED | CANNOT-CONFIRM
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 | PARTIAL | FAILED | CANNOT-CONFIRM | ERROR
259
+ Verdict: SUCCESS | PARTIAL | FAILED | CANNOT-CONFIRM | ERROR
257
260
 
258
261
  Next steps:
259
- - <If SUCCESS: "Org satisfies the prerequisites for the <path> agent. Create it via service-itsm-agentic-setup-fulfiller-agent-configure (fulfiller) / the employee-agent skill.">
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
 
@@ -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 (parent umbrella) | `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 |
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 (parent)',
71
- [FULFILLER]: 'IT Service Fulfiller template',
72
- [REQUESTOR]: 'IT Service Employee template',
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