@salesforce/afv-skills 1.46.0 → 1.48.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 (317) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-observe/SKILL.md +32 -4
  3. package/skills/agentforce-observe/references/ahm-alerts.md +719 -0
  4. package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +275 -0
  5. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/README.md +32 -0
  6. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls +75 -0
  7. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls-meta.xml +5 -0
  8. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/interview-answers.json +13 -0
  9. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +10 -0
  10. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/create.json +20 -0
  11. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/update.json +16 -0
  12. package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +273 -0
  13. package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +236 -0
  14. package/skills/consumer-goods-promotion-bo-api-deploy/references/reference-example-set-comment-value.md +132 -0
  15. package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +211 -0
  16. package/skills/dx-devops-project-manage/SKILL.md +197 -0
  17. package/skills/dx-devops-project-manage/examples/common-workflows.md +197 -0
  18. package/skills/dx-devops-project-manage/references/cli-commands.md +295 -0
  19. package/skills/dx-devops-project-manage/scripts/create-project.sh +48 -0
  20. package/skills/dx-devops-project-manage/scripts/list-projects.sh +51 -0
  21. package/skills/dx-devops-project-manage/scripts/update-project.sh +96 -0
  22. package/skills/education-cloud-academic-calendar-generate/SKILL.md +225 -0
  23. package/skills/education-cloud-academic-calendar-generate/examples/quarter-calendar.json +47 -0
  24. package/skills/education-cloud-academic-calendar-generate/examples/sample-output.md +57 -0
  25. package/skills/education-cloud-academic-calendar-generate/examples/semester-calendar.json +54 -0
  26. package/skills/education-cloud-academic-calendar-generate/references/calendar-systems.md +127 -0
  27. package/skills/education-cloud-academic-calendar-generate/references/date-validation.md +222 -0
  28. package/skills/education-cloud-academic-calendar-generate/references/foundation_prerequisites.md +40 -0
  29. package/skills/education-cloud-academic-calendar-generate/scripts/validate_calendar_dates.py +143 -0
  30. package/skills/education-cloud-course-catalog-migrate/SKILL.md +321 -0
  31. package/skills/education-cloud-course-catalog-migrate/references/gotchas-detail.md +16 -0
  32. package/skills/education-cloud-course-catalog-migrate/references/gotchas.md +16 -0
  33. package/skills/education-cloud-course-catalog-migrate/references/large-catalog-handling.md +42 -0
  34. package/skills/education-cloud-course-catalog-migrate/scripts/batch_courses.py +36 -0
  35. package/skills/education-cloud-course-catalog-migrate/scripts/detect_linked_courses.py +51 -0
  36. package/skills/education-cloud-course-catalog-migrate/scripts/detect_modality_variants.py +48 -0
  37. package/skills/education-cloud-course-catalog-migrate/scripts/resolve_api_version.py +43 -0
  38. package/skills/education-cloud-course-catalog-migrate/scripts/split_course_code.py +39 -0
  39. package/skills/education-cloud-course-catalog-migrate/scripts/validate_completeness.py +54 -0
  40. package/skills/education-cloud-domain-configure/SKILL.md +234 -0
  41. package/skills/education-cloud-domain-configure/references/dependent-features.md +198 -0
  42. package/skills/education-cloud-domain-configure/references/domain-features/academic-operations.md +386 -0
  43. package/skills/education-cloud-domain-configure/references/domain-features/alumni-relations.md +155 -0
  44. package/skills/education-cloud-domain-configure/references/domain-features/cross-domain-dependencies.md +18 -0
  45. package/skills/education-cloud-domain-configure/references/domain-features/industriessettings-toggle-reference.md +43 -0
  46. package/skills/education-cloud-domain-configure/references/domain-features/mentoring.md +198 -0
  47. package/skills/education-cloud-domain-configure/references/domain-features/recruitment-admissions.md +315 -0
  48. package/skills/education-cloud-domain-configure/references/domain-features/student-management.md +155 -0
  49. package/skills/education-cloud-domain-configure/references/domain-features/student-success.md +249 -0
  50. package/skills/education-cloud-domain-configure/references/domain-features.md +27 -0
  51. package/skills/education-cloud-domain-configure/references/gotchas-extended.md +23 -0
  52. package/skills/education-cloud-domain-configure/references/toggle-write-path.md +67 -0
  53. package/skills/education-cloud-domain-configure/scripts/check_license_provisioned.py +62 -0
  54. package/skills/education-cloud-domain-configure/scripts/check_org_edition.py +44 -0
  55. package/skills/education-cloud-domain-configure/scripts/check_permission_assigned.py +39 -0
  56. package/skills/education-cloud-multi-campus-configure/SKILL.md +7 -0
  57. package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +1 -2
  58. package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +177 -0
  59. package/skills/education-cloud-student-recruitment-agent-configure/references/agent-and-subagents.md +151 -0
  60. package/skills/education-cloud-student-recruitment-agent-configure/references/customer-narration.md +34 -0
  61. package/skills/education-cloud-student-recruitment-agent-configure/references/execution-model.md +54 -0
  62. package/skills/education-cloud-student-recruitment-agent-configure/references/flows.md +82 -0
  63. package/skills/education-cloud-student-recruitment-agent-configure/references/grounding.md +199 -0
  64. package/skills/education-cloud-student-recruitment-agent-configure/references/permissions.md +183 -0
  65. package/skills/education-cloud-student-recruitment-agent-configure/references/platform-enablement.md +82 -0
  66. package/skills/education-cloud-student-recruitment-agent-configure/references/prerequisites.md +158 -0
  67. package/skills/education-cloud-student-recruitment-agent-configure/references/routing.md +141 -0
  68. package/skills/experience-cms-brand-apply/SKILL.md +5 -5
  69. package/skills/experience-cms-brand-create/SKILL.md +2 -2
  70. package/skills/experience-cms-content-generate/SKILL.md +1 -0
  71. package/skills/experience-cms-content-render/SKILL.md +173 -0
  72. package/skills/experience-cms-content-render/assets/angular/DetailPage.component.ts +25 -0
  73. package/skills/experience-cms-content-render/assets/angular/MediaRenderer.component.ts +133 -0
  74. package/skills/experience-cms-content-render/assets/angular/TypeList.component.ts +38 -0
  75. package/skills/experience-cms-content-render/assets/angular/TypeRenderer.component.ts +90 -0
  76. package/skills/experience-cms-content-render/assets/angular/cms-content.component.ts +248 -0
  77. package/skills/experience-cms-content-render/assets/angular/cms-item.service.ts +100 -0
  78. package/skills/experience-cms-content-render/assets/react/DetailPage.tsx +20 -0
  79. package/skills/experience-cms-content-render/assets/react/MediaRenderer.tsx +129 -0
  80. package/skills/experience-cms-content-render/assets/react/TypeList.tsx +40 -0
  81. package/skills/experience-cms-content-render/assets/react/TypeRenderer.tsx +64 -0
  82. package/skills/experience-cms-content-render/assets/react/heuristicRenderer.tsx +310 -0
  83. package/skills/experience-cms-content-render/assets/react/useCmsItem.ts +129 -0
  84. package/skills/experience-cms-content-render/assets/shared/cmsContentType.ts +49 -0
  85. package/skills/experience-cms-content-render/assets/shared/cmsCore.types.ts +96 -0
  86. package/skills/experience-cms-content-render/assets/shared/externalRefs.ts +55 -0
  87. package/skills/experience-cms-content-render/references/bulk-loading.md +60 -0
  88. package/skills/experience-cms-content-render/references/codegen-guardrails.md +111 -0
  89. package/skills/experience-cms-content-render/references/detail-pages.md +87 -0
  90. package/skills/experience-cms-content-render/references/embed-recipes.md +127 -0
  91. package/skills/experience-cms-content-render/references/failure-modes.md +96 -0
  92. package/skills/experience-cms-content-render/references/heuristic-render-rules.md +131 -0
  93. package/skills/experience-cms-content-render/references/init-scaffold.md +122 -0
  94. package/skills/experience-cms-content-render/references/interaction-model.md +173 -0
  95. package/skills/experience-cms-content-render/references/package-api.md +106 -0
  96. package/skills/experience-cms-content-render/references/schema-sync.md +114 -0
  97. package/skills/experience-cms-content-render/references/styling-scopes.md +65 -0
  98. package/skills/experience-cms-content-render/references/verify.md +49 -0
  99. package/skills/experience-cms-content-type-generate/SKILL.md +2 -2
  100. package/skills/experience-content-media-stock-image-search/SKILL.md +5 -4
  101. package/skills/experience-search-coordinate/SKILL.md +198 -0
  102. package/skills/experience-search-coordinate/assets/search-payload-template.json +25 -0
  103. package/skills/experience-search-coordinate/references/content-route.md +313 -0
  104. package/skills/experience-search-coordinate/references/content-type-discovery.md +57 -0
  105. package/skills/experience-search-coordinate/references/media-route.md +172 -0
  106. package/skills/experience-search-coordinate/references/scope-resolution.md +14 -0
  107. package/skills/experience-ui-bundle-localize/SKILL.md +1 -1
  108. package/skills/experience-ui-bundle-localize/references/i18n-setup.md +5 -3
  109. package/skills/experience-ui-bundle-project-generate/SKILL.md +18 -14
  110. package/skills/experience-ui-bundle-project-generate/references/angular-project-generate.md +22 -0
  111. package/skills/experience-ui-bundle-project-generate/references/react-project-generate.md +20 -0
  112. package/skills/experience-ui-bundle-salesforce-data-access/SKILL.md +58 -54
  113. package/skills/experience-ui-bundle-salesforce-data-access/references/caching.md +6 -0
  114. package/skills/experience-ui-bundle-salesforce-data-access/references/graphiti-cli.md +2 -2
  115. package/skills/experience-ui-bundle-salesforce-data-access/references/migration.md +6 -0
  116. package/skills/experience-ui-bundle-salesforce-data-access/references/rest-and-integration.md +2 -1
  117. package/skills/experience-ui-bundle-salesforce-data-access/references/sdk-api.md +6 -0
  118. package/skills/experience-ui-bundle-site-generate/SKILL.md +59 -8
  119. package/skills/experience-ui-bundle-site-generate/references/configure-metadata-digital-experience.md +8 -3
  120. package/skills/experience-ui-bundle-site-generate/references/configure-metadata-language-settings.md +120 -0
  121. package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +336 -0
  122. package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +143 -0
  123. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +127 -0
  124. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-deploy-commands.md +116 -0
  125. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +111 -0
  126. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-overview.md +312 -0
  127. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +171 -0
  128. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-state-tracking.md +64 -0
  129. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-trigger-handlers.md +122 -0
  130. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-overview.md +335 -0
  131. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-user-provisioning-details.md +140 -0
  132. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-execution-state-and-recovery.md +196 -0
  133. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-metadata-cache-generation.md +155 -0
  134. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-overview.md +307 -0
  135. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-visit-creation-data.md +211 -0
  136. package/skills/life-sciences-fieldsalesrep-coordinate/references/state-machine-and-changes.md +108 -0
  137. package/skills/life-sciences-kam-coordinate/SKILL.md +241 -0
  138. package/skills/life-sciences-kam-coordinate/references/orchestration-flow.md +152 -0
  139. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +79 -0
  140. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-deploy-commands.md +131 -0
  141. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-kam-config-records.md +85 -0
  142. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +112 -0
  143. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-overview.md +202 -0
  144. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +67 -0
  145. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-state-tracking.md +65 -0
  146. package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-trigger-handlers.md +123 -0
  147. package/skills/life-sciences-kam-coordinate/references/stage-4-participant-role-and-sprint.md +89 -0
  148. package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +337 -0
  149. package/skills/life-sciences-kam-coordinate/references/stage-5-data-creation-data.md +248 -0
  150. package/skills/life-sciences-kam-coordinate/references/stage-6-ipad-validation-script.md +35 -0
  151. package/skills/life-sciences-kam-coordinate/references/stage-6-metadata-cache-generation.md +155 -0
  152. package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-details.md +146 -0
  153. package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-overview.md +89 -0
  154. package/skills/life-sciences-kam-coordinate/references/state-machine-and-changes.md +114 -0
  155. package/skills/life-sciences-prerequisites-validate/SKILL.md +138 -0
  156. package/skills/life-sciences-prerequisites-validate/references/checks-org-settings.md +190 -0
  157. package/skills/life-sciences-prerequisites-validate/references/checks-user-and-package.md +211 -0
  158. package/skills/life-sciences-territory-configure/SKILL.md +217 -0
  159. package/skills/life-sciences-territory-configure/references/territory-metadata.md +262 -0
  160. package/skills/platform-dsar-policy-manage/SKILL.md +272 -0
  161. package/skills/platform-dsar-policy-manage/references/configure.md +106 -0
  162. package/skills/platform-dsar-policy-manage/references/export-and-history.md +123 -0
  163. package/skills/platform-dsar-policy-manage/references/gap-analysis-guide.md +150 -0
  164. package/skills/platform-dsar-policy-manage/references/gap-scan.md +129 -0
  165. package/skills/platform-dsar-policy-manage/references/headless-sor.md +59 -0
  166. package/skills/platform-dsar-policy-manage/references/report-format.md +59 -0
  167. package/skills/platform-dsar-policy-manage/scripts/tests/__init__.py +0 -0
  168. package/skills/platform-dsar-policy-manage/scripts/tests/test_validate_policy_tree.py +76 -0
  169. package/skills/platform-dsar-policy-manage/scripts/validate-policy-tree.py +130 -0
  170. package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +359 -0
  171. package/skills/platform-salesforce-connect-adapter-generate/references/official-examples.md +69 -0
  172. package/skills/platform-salesforce-connect-adapter-generate/references/scenarios.md +187 -0
  173. package/skills/service-agentforce-channel-configure/SKILL.md +33 -28
  174. package/skills/service-agentforce-human-escalation-configure/SKILL.md +205 -0
  175. package/skills/service-agentforce-human-escalation-configure/assets/escalation-thresholds.instructions.md +37 -0
  176. package/skills/service-agentforce-human-escalation-configure/assets/force-app/main/default/flows/Human_Escalation_Outbound_Flow.flow-meta.xml +173 -0
  177. package/skills/service-agentforce-human-escalation-configure/assets/package.xml +8 -0
  178. package/skills/service-agentforce-human-escalation-configure/assets/sfdx-project.json +5 -0
  179. package/skills/service-agentforce-human-escalation-configure/references/classifier-contracts.md +103 -0
  180. package/skills/service-agentforce-human-escalation-configure/references/escalation-mechanism.md +63 -0
  181. package/skills/service-agentforce-human-escalation-configure/references/failure-policy.md +44 -0
  182. package/skills/service-agentforce-human-escalation-configure/references/nga-escalation.md +57 -0
  183. package/skills/service-agentforce-human-escalation-configure/references/runtime-verification.md +72 -0
  184. package/skills/service-agentforce-human-escalation-configure/scripts/classify-agent-active.mjs +49 -0
  185. package/skills/service-agentforce-human-escalation-configure/scripts/classify-nga-escalation.mjs +166 -0
  186. package/skills/service-agentforce-human-escalation-configure/scripts/extract-outbound-route.mjs +67 -0
  187. package/skills/service-agentforce-human-escalation-configure/scripts/patch-escalation-surfaces.mjs +131 -0
  188. package/skills/service-agentforce-human-escalation-configure/scripts/tests/__init__.py +0 -0
  189. package/skills/service-agentforce-human-escalation-configure/scripts/tests/_bootstrap.py +249 -0
  190. package/skills/service-agentforce-human-escalation-configure/scripts/tests/test_escalation_contracts.py +899 -0
  191. package/skills/service-agentforce-human-escalation-configure/scripts/verify-and-configure.sh +705 -0
  192. package/skills/service-agentforce-human-escalation-configure/scripts/verify-escalation-config.mjs +89 -0
  193. package/skills/service-de-channel-routing-configure/SKILL.md +13 -5
  194. package/skills/service-de-channel-routing-configure/scripts/tests/test_skill_contract.py +25 -0
  195. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +23 -10
  196. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -48
  197. package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +6 -2
  198. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +20 -27
  199. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +47 -27
  200. package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +13 -9
  201. package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +104 -45
  202. package/skills/service-omni-agent-users-create/SKILL.md +96 -0
  203. package/skills/service-omni-agent-users-create/assets/create-users.apex.template +80 -0
  204. package/skills/service-omni-agent-users-create/references/apex-patterns.md +135 -0
  205. package/skills/service-omni-agent-users-create/references/apex-template-notes.md +40 -0
  206. package/skills/service-omni-agent-users-create/scripts/detect-and-create.sh +206 -0
  207. package/skills/service-omni-agent-users-create/scripts/detect-existing.sh +122 -0
  208. package/skills/service-omni-agent-users-create/scripts/run-create.sh +298 -0
  209. package/skills/service-omni-agent-users-create/scripts/tests/test_user_create_security.py +171 -0
  210. package/skills/service-omni-agent-work-sharing-configure/SKILL.md +78 -0
  211. package/skills/service-omni-agent-work-sharing-configure/references/api-notes.md +31 -0
  212. package/skills/service-omni-agent-work-sharing-configure/scripts/configure-and-report.sh +186 -0
  213. package/skills/service-omni-agent-work-sharing-configure/scripts/tests/_bootstrap.py +120 -0
  214. package/skills/service-omni-agent-work-sharing-configure/scripts/tests/test_agent_work_sharing_contracts.py +93 -0
  215. package/skills/service-omni-base-settings-configure/SKILL.md +77 -0
  216. package/skills/service-omni-base-settings-configure/assets/force-app/main/default/settings/OmniChannel.settings-meta.xml +8 -0
  217. package/skills/service-omni-base-settings-configure/assets/package.xml +8 -0
  218. package/skills/service-omni-base-settings-configure/assets/sfdx-project.json +12 -0
  219. package/skills/service-omni-base-settings-configure/references/api-notes.md +121 -0
  220. package/skills/service-omni-base-settings-configure/scripts/configure-and-report.sh +164 -0
  221. package/skills/service-omni-base-settings-configure/scripts/detect-existing.sh +69 -0
  222. package/skills/service-omni-channel-setup-coordinate/SKILL.md +168 -0
  223. package/skills/service-omni-channel-setup-coordinate/examples/output-templates.md +161 -0
  224. package/skills/service-omni-channel-setup-coordinate/references/gap-catalog.md +99 -0
  225. package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +1542 -0
  226. package/skills/service-omni-channel-setup-coordinate/scripts/tests/__init__.py +0 -0
  227. package/skills/service-omni-channel-setup-coordinate/scripts/tests/_bootstrap.py +223 -0
  228. package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +804 -0
  229. package/skills/service-omni-command-center-analyze/SKILL.md +84 -0
  230. package/skills/service-omni-command-center-analyze/references/api-notes.md +54 -0
  231. package/skills/service-omni-command-center-analyze/scripts/analyze.sh +198 -0
  232. package/skills/service-omni-command-center-analyze/scripts/tests/_bootstrap.py +115 -0
  233. package/skills/service-omni-command-center-analyze/scripts/tests/test_command_center_analyze_contracts.py +165 -0
  234. package/skills/service-omni-permission-set-assign/SKILL.md +88 -0
  235. package/skills/service-omni-permission-set-assign/assets/package.xml +8 -0
  236. package/skills/service-omni-permission-set-assign/references/api-notes.md +143 -0
  237. package/skills/service-omni-permission-set-assign/scripts/verify-and-assign.sh +397 -0
  238. package/skills/service-omni-presence-status-deploy/SKILL.md +87 -0
  239. package/skills/service-omni-presence-status-deploy/assets/package.xml +12 -0
  240. package/skills/service-omni-presence-status-deploy/references/api-notes.md +115 -0
  241. package/skills/service-omni-presence-status-deploy/scripts/deploy-and-report.sh +422 -0
  242. package/skills/service-omni-presence-user-config-deploy/SKILL.md +80 -0
  243. package/skills/service-omni-presence-user-config-deploy/references/api-notes.md +60 -0
  244. package/skills/service-omni-presence-user-config-deploy/scripts/deploy-and-report.sh +261 -0
  245. package/skills/service-omni-presence-user-config-deploy/scripts/tests/_bootstrap.py +106 -0
  246. package/skills/service-omni-presence-user-config-deploy/scripts/tests/test_presence_user_config_contracts.py +142 -0
  247. package/skills/service-omni-queue-deploy/SKILL.md +91 -0
  248. package/skills/service-omni-queue-deploy/references/api-notes.md +140 -0
  249. package/skills/service-omni-queue-deploy/scripts/verify-and-align.sh +470 -0
  250. package/skills/service-omni-queue-members-assign/SKILL.md +93 -0
  251. package/skills/service-omni-queue-members-assign/references/api-notes.md +144 -0
  252. package/skills/service-omni-queue-members-assign/scripts/tests/_bootstrap.py +67 -0
  253. package/skills/service-omni-queue-members-assign/scripts/tests/test_queue_members_contracts.py +73 -0
  254. package/skills/service-omni-queue-members-assign/scripts/verify-and-bind.sh +362 -0
  255. package/skills/service-omni-queue-routing-config-deploy/SKILL.md +101 -0
  256. package/skills/service-omni-queue-routing-config-deploy/references/api-notes.md +127 -0
  257. package/skills/service-omni-queue-routing-config-deploy/scripts/tests/_bootstrap.py +90 -0
  258. package/skills/service-omni-queue-routing-config-deploy/scripts/tests/test_queue_routing_config_contracts.py +70 -0
  259. package/skills/service-omni-queue-routing-config-deploy/scripts/upsert-and-report.sh +538 -0
  260. package/skills/service-omni-routing-flow-deploy/SKILL.md +111 -0
  261. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_Case_Trigger.SkillsBased.flow-meta.xml +94 -0
  262. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_Case_Trigger.flow-meta.xml +88 -0
  263. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_Cases.flow-meta.xml +144 -0
  264. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_VoiceCall_Trigger.SkillsBased.flow-meta.xml +94 -0
  265. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_VoiceCall_Trigger.flow-meta.xml +88 -0
  266. package/skills/service-omni-routing-flow-deploy/assets/force-app/main/default/flows/Omni_Route_VoiceCalls.flow-meta.xml +144 -0
  267. package/skills/service-omni-routing-flow-deploy/assets/package.xml +11 -0
  268. package/skills/service-omni-routing-flow-deploy/assets/sfdx-project.json +11 -0
  269. package/skills/service-omni-routing-flow-deploy/references/api-notes.md +265 -0
  270. package/skills/service-omni-routing-flow-deploy/scripts/deploy-and-report.sh +684 -0
  271. package/skills/service-omni-service-channel-configure/SKILL.md +83 -0
  272. package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/Cases.serviceChannel-meta.xml +9 -0
  273. package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/Incidents.serviceChannel-meta.xml +9 -0
  274. package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/MessagingSessions.serviceChannel-meta.xml +9 -0
  275. package/skills/service-omni-service-channel-configure/assets/force-app/main/default/serviceChannels/VoiceCalls.serviceChannel-meta.xml +9 -0
  276. package/skills/service-omni-service-channel-configure/assets/package.xml +11 -0
  277. package/skills/service-omni-service-channel-configure/assets/sfdx-project.json +12 -0
  278. package/skills/service-omni-service-channel-configure/references/api-notes.md +84 -0
  279. package/skills/service-omni-service-channel-configure/scripts/deploy-and-report.sh +383 -0
  280. package/skills/service-omni-sidebar-configure/SKILL.md +77 -0
  281. package/skills/service-omni-sidebar-configure/references/api-notes.md +51 -0
  282. package/skills/service-omni-sidebar-configure/scripts/enable-and-report.sh +315 -0
  283. package/skills/service-omni-sidebar-configure/scripts/tests/_bootstrap.py +142 -0
  284. package/skills/service-omni-sidebar-configure/scripts/tests/test_sidebar_contracts.py +139 -0
  285. package/skills/service-omni-skills-based-routing-configure/SKILL.md +81 -0
  286. package/skills/service-omni-skills-based-routing-configure/references/api-notes.md +50 -0
  287. package/skills/service-omni-skills-based-routing-configure/scripts/configure-and-report.sh +270 -0
  288. package/skills/service-omni-skills-based-routing-configure/scripts/tests/_bootstrap.py +120 -0
  289. package/skills/service-omni-skills-based-routing-configure/scripts/tests/test_sbr_contracts.py +129 -0
  290. package/skills/service-omni-supervisor-config-deploy/SKILL.md +97 -0
  291. package/skills/service-omni-supervisor-config-deploy/assets/force-app/main/default/omniSupervisorConfigs/Omni_Supervisor.omniSupervisorConfig-meta.xml +9 -0
  292. package/skills/service-omni-supervisor-config-deploy/assets/package.xml +8 -0
  293. package/skills/service-omni-supervisor-config-deploy/assets/sfdx-project.json +12 -0
  294. package/skills/service-omni-supervisor-config-deploy/references/api-notes.md +205 -0
  295. package/skills/service-omni-supervisor-config-deploy/scripts/deploy-and-report.sh +586 -0
  296. package/skills/service-omni-supervisor-config-deploy/scripts/tests/_bootstrap.py +153 -0
  297. package/skills/service-omni-supervisor-config-deploy/scripts/tests/test_supervisor_config_contracts.py +116 -0
  298. package/skills/service-omni-supervisor-permset-assign/SKILL.md +88 -0
  299. package/skills/service-omni-supervisor-permset-assign/references/api-notes.md +48 -0
  300. package/skills/service-omni-supervisor-permset-assign/scripts/verify-and-assign.sh +316 -0
  301. package/skills/service-omni-supervisor-surface-deploy/SKILL.md +85 -0
  302. package/skills/service-omni-supervisor-surface-deploy/references/api-notes.md +47 -0
  303. package/skills/service-omni-supervisor-surface-deploy/scripts/deploy-and-report.sh +216 -0
  304. package/skills/service-omni-supervisor-surface-deploy/scripts/tests/_bootstrap.py +95 -0
  305. package/skills/service-omni-supervisor-surface-deploy/scripts/tests/test_supervisor_surface_contracts.py +154 -0
  306. package/skills/service-omni-supervisor-users-create/SKILL.md +92 -0
  307. package/skills/service-omni-supervisor-users-create/assets/create-supervisors.apex.template +72 -0
  308. package/skills/service-omni-supervisor-users-create/references/apex-patterns.md +73 -0
  309. package/skills/service-omni-supervisor-users-create/references/apex-template-notes.md +41 -0
  310. package/skills/service-omni-supervisor-users-create/scripts/detect-and-create.sh +197 -0
  311. package/skills/service-omni-supervisor-users-create/scripts/detect-existing.sh +112 -0
  312. package/skills/service-omni-supervisor-users-create/scripts/run-create.sh +296 -0
  313. package/skills/service-omni-work-skill-routing-configure/SKILL.md +80 -0
  314. package/skills/service-omni-work-skill-routing-configure/references/api-notes.md +67 -0
  315. package/skills/service-omni-work-skill-routing-configure/scripts/configure-and-report.sh +262 -0
  316. package/skills/service-omni-work-skill-routing-configure/scripts/tests/_bootstrap.py +121 -0
  317. package/skills/service-omni-work-skill-routing-configure/scripts/tests/test_work_skill_routing_contracts.py +161 -0
@@ -0,0 +1,223 @@
1
+ """Shared paths + fake-`sf` harness for the Omni contract suite (org-free, network-free): drives the bash skills via subprocess asserting exit codes + emitted JSON, with scrubbed-PATH (no sf) and production-org fake-sf fixtures for input-contract and safe_to_write checks."""
2
+ from __future__ import annotations
3
+
4
+ import os
5
+ import subprocess
6
+ import tempfile
7
+ from pathlib import Path
8
+
9
+ # skills/ root is three levels up from this file (.../<skill>/scripts/tests/_bootstrap.py).
10
+ SKILLS_ROOT = Path(__file__).resolve().parents[3]
11
+
12
+ # The 18 scripts under test, relative to skills/.
13
+ SCRIPTS = [
14
+ "service-omni-base-settings-configure/scripts/configure-and-report.sh",
15
+ "service-omni-base-settings-configure/scripts/detect-existing.sh",
16
+ "service-omni-channel-setup-coordinate/scripts/integration-driver.sh",
17
+ "service-omni-agent-users-create/scripts/detect-and-create.sh",
18
+ "service-omni-agent-users-create/scripts/detect-existing.sh",
19
+ "service-omni-agent-users-create/scripts/run-create.sh",
20
+ "service-omni-permission-set-assign/scripts/verify-and-assign.sh",
21
+ "service-omni-presence-status-deploy/scripts/deploy-and-report.sh",
22
+ "service-omni-queue-deploy/scripts/verify-and-align.sh",
23
+ "service-omni-queue-members-assign/scripts/verify-and-bind.sh",
24
+ "service-omni-queue-routing-config-deploy/scripts/upsert-and-report.sh",
25
+ "service-omni-routing-flow-deploy/scripts/deploy-and-report.sh",
26
+ "service-omni-service-channel-configure/scripts/deploy-and-report.sh",
27
+ "service-omni-supervisor-config-deploy/scripts/deploy-and-report.sh",
28
+ "service-omni-supervisor-permset-assign/scripts/verify-and-assign.sh",
29
+ "service-omni-supervisor-users-create/scripts/detect-and-create.sh",
30
+ "service-omni-supervisor-users-create/scripts/detect-existing.sh",
31
+ "service-omni-supervisor-users-create/scripts/run-create.sh",
32
+ ]
33
+
34
+ # A fake `sf` that reports a PRODUCTION customer org, so safe_to_write guards must refuse.
35
+ # Also fabricates the OmniChannel settings XML on `project retrieve start` (all toggles
36
+ # false) so base-settings' detector returns all_enabled=false and reaches its run guard.
37
+ _FAKE_SF = r"""#!/usr/bin/env bash
38
+ sub="${1:-} ${2:-}"
39
+ args="$*"
40
+ case "$sub" in
41
+ "org display")
42
+ echo '{"status":0,"result":{"username":"fake@prod.org","id":"00Dxx0000000000EAA"}}'; exit 0 ;;
43
+ "data query")
44
+ if printf '%s' "$args" | grep -q "FROM Organization"; then
45
+ echo '{"status":0,"result":{"records":[{"Id":"00Dxx0000000000EAA","IsSandbox":false,"TrialExpirationDate":null,"OrganizationType":"Enterprise Edition"}]}}'
46
+ elif printf '%s' "$args" | grep -q "FROM Profile"; then
47
+ echo '{"status":0,"result":{"records":[{"Id":"00exx0000000000AAA","Name":"Standard User"}]}}'
48
+ else
49
+ echo '{"status":0,"result":{"records":[],"totalSize":0}}'
50
+ fi
51
+ exit 0 ;;
52
+ "project retrieve")
53
+ mkdir -p force-app/main/default/settings
54
+ cat > force-app/main/default/settings/OmniChannel.settings-meta.xml <<'XML'
55
+ <?xml version="1.0" encoding="UTF-8"?>
56
+ <OmniChannelSettings xmlns="http://soap.sforce.com/2006/04/metadata">
57
+ <enableOmniChannel>false</enableOmniChannel>
58
+ <enableOmniSkillsRouting>false</enableOmniSkillsRouting>
59
+ <enableOmniSecondaryRoutingPriority>false</enableOmniSecondaryRoutingPriority>
60
+ <enableOmniStatusCapModel>false</enableOmniStatusCapModel>
61
+ <enableOmniAutoLoginPrompt>false</enableOmniAutoLoginPrompt>
62
+ </OmniChannelSettings>
63
+ XML
64
+ echo '{"status":0,"result":{"success":true}}'; exit 0 ;;
65
+ "project deploy")
66
+ echo '{"status":1,"result":{"success":false,"status":"Failed"},"message":"FAKE_SF_DEPLOY_SHOULD_NOT_BE_REACHED"}'; exit 1 ;;
67
+ *)
68
+ echo '{"status":0,"result":{}}'; exit 0 ;;
69
+ esac
70
+ """
71
+
72
+ # A fake `sf` that reports a SANDBOX org - used only by the negative-control test to prove
73
+ # the safe_to_write assertions are discriminating (a safe org must NOT trip the refusal).
74
+ _FAKE_SF_SANDBOX = r"""#!/usr/bin/env bash
75
+ sub="${1:-} ${2:-}"; args="$*"
76
+ case "$sub" in
77
+ "org display") echo '{"status":0,"result":{"id":"00Dxx0000000000EAA"}}'; exit 0;;
78
+ "data query")
79
+ if printf '%s' "$args" | grep -q "FROM Organization"; then
80
+ echo '{"status":0,"result":{"records":[{"Id":"00Dxx0000000000EAA","IsSandbox":true,"TrialExpirationDate":null,"OrganizationType":"Developer Edition"}]}}'
81
+ else echo '{"status":0,"result":{"records":[],"totalSize":0}}'; fi; exit 0;;
82
+ *) echo '{"status":0,"result":{}}'; exit 0;;
83
+ esac
84
+ """
85
+
86
+ # A parameterized fake `sf` for the Voice routing-flow steel-thread tests. It emulates a SANDBOX
87
+ # org where the VoiceCall queue + QueueRoutingConfig already resolve, and is tunable via env:
88
+ # FAKE_SC_PRESENT=1 → the ServiceChannel query returns a row (id 0N9...); 0 → empty (fail-closed path)
89
+ # FAKE_FLOW_ACTIVE=1 → an ACTIVE Flow version already exists (drives the reuse/stale-binding path)
90
+ # FAKE_ACTIVE_IDS="..." → the IDs embedded in the retrieved active flow XML (space-separated). When it
91
+ # contains the current queue+QRC+SC ids the binding "matches" (→ reused);
92
+ # otherwise it has drifted (→ redeploy).
93
+ # Canonical current ids: queue=00G000000000001AAA, qrc=0RC00000000001AAA, sc=0N9000000000001AAA.
94
+ _FAKE_SF_VOICE = r"""#!/usr/bin/env bash
95
+ sub="${1:-} ${2:-}"; args="$*"
96
+ SC_PRESENT="${FAKE_SC_PRESENT:-1}"
97
+ FLOW_ACTIVE="${FAKE_FLOW_ACTIVE:-0}"
98
+ ACTIVE_IDS="${FAKE_ACTIVE_IDS:-00G000000000001AAA 0RC00000000001AAA 0N9000000000001AAA}"
99
+ case "$sub" in
100
+ "org display") echo '{"status":0,"result":{"id":"00Dxx0000000000EAA","apiVersion":"66.0"}}'; exit 0;;
101
+ "data query")
102
+ if printf '%s' "$args" | grep -q "FROM Organization"; then
103
+ echo '{"status":0,"result":{"records":[{"Id":"00Dxx0000000000EAA","IsSandbox":true,"TrialExpirationDate":null,"OrganizationType":"Developer Edition"}]}}'
104
+ elif printf '%s' "$args" | grep -q "FROM ServiceChannel"; then
105
+ if [ "$SC_PRESENT" = "1" ]; then
106
+ echo '{"status":0,"result":{"records":[{"Id":"0N9000000000001AAA","MasterLabel":"Phone"}],"totalSize":1}}'
107
+ else
108
+ echo '{"status":0,"result":{"records":[],"totalSize":0}}'
109
+ fi
110
+ elif printf '%s' "$args" | grep -q "FROM QueueSobject"; then
111
+ echo '{"status":0,"result":{"records":[{"QueueId":"00G000000000001AAA","Queue":{"DeveloperName":"VoiceQueue"}}],"totalSize":1}}'
112
+ elif printf '%s' "$args" | grep -q "FROM Group"; then
113
+ echo '{"status":0,"result":{"records":[{"Id":"00G000000000001AAA","QueueRoutingConfigId":"0RC00000000001AAA"}],"totalSize":1}}'
114
+ elif printf '%s' "$args" | grep -q "FROM QueueRoutingConfig"; then
115
+ echo '{"status":0,"result":{"records":[{"Id":"0RC00000000001AAA","DeveloperName":"Voice_Routing_Config"}],"totalSize":1}}'
116
+ elif printf '%s' "$args" | grep -q "FROM PendingServiceRouting"; then
117
+ if [ "${FAKE_PROOF:-0}" = "1" ]; then
118
+ echo '{"status":0,"result":{"records":[{"Id":"0RQ00000000001AAA","IsReadyForRouting":true,"RoutingModel":"QueueBased"}],"totalSize":1}}'
119
+ else
120
+ echo '{"status":0,"result":{"records":[],"totalSize":0}}'
121
+ fi
122
+ elif printf '%s' "$args" | grep -q "FROM AgentWork"; then
123
+ echo '{"status":0,"result":{"records":[],"totalSize":0}}'
124
+ elif printf '%s' "$args" | grep -q "FROM SkillRequirement"; then
125
+ # SkillsBased acceptance signal: the rows the platform attached to the PSR (RelatedRecordId=PSR).
126
+ # FAKE_SKILLREQ=1 emulates a WorkSkillRouting rule that matched (RunSBRRules attached a SkillRequirement).
127
+ if [ "${FAKE_SKILLREQ:-0}" = "1" ]; then
128
+ echo '{"status":0,"result":{"records":[{"Id":"0RS00000000001AAA","SkillId":"0PS00000000001AAA","SkillLevel":5}],"totalSize":1}}'
129
+ else
130
+ echo '{"status":0,"result":{"records":[],"totalSize":0}}'
131
+ fi
132
+ elif printf '%s' "$args" | grep -q "FROM User"; then
133
+ echo '{"status":0,"result":{"records":[{"Id":"005000000000001AAA","Username":"agent1@example.com"},{"Id":"005000000000002AAA","Username":"agent2@example.com"}],"totalSize":2}}'
134
+ elif printf '%s' "$args" | grep -q "FROM FlowDefinitionView"; then
135
+ # Post-deploy round-trip active-version proof. Distinct tunable from FLOW_ACTIVE (which drives
136
+ # the PRE-deploy reuse detection): after a deploy the flow becomes active, so default active.
137
+ if [ "${FAKE_FLOW_VIEW_ERROR:-0}" = "1" ]; then
138
+ echo '{"status":1,"name":"EXTERNAL_OBJECT_EXCEPTION","message":"unrelated managed-package flow prevents FlowDefinitionView reads"}'
139
+ elif [ "${FAKE_FLOW_ACTIVE_RT:-1}" = "1" ]; then
140
+ echo '{"status":0,"result":{"records":[{"ApiName":"F","ActiveVersionId":"301000000000009AAA"}],"totalSize":1}}'
141
+ else
142
+ echo '{"status":0,"result":{"records":[{"ApiName":"F","ActiveVersionId":null}],"totalSize":1}}'
143
+ fi
144
+ elif printf '%s' "$args" | grep -q "FROM Flow"; then
145
+ if [ "$FLOW_ACTIVE" = "1" ]; then
146
+ echo '{"status":0,"result":{"records":[{"Id":"301000000000001AAA"}],"totalSize":1}}'
147
+ else
148
+ echo '{"status":0,"result":{"records":[],"totalSize":0}}'
149
+ fi
150
+ else
151
+ echo '{"status":0,"result":{"records":[],"totalSize":0}}'
152
+ fi
153
+ exit 0;;
154
+ "project retrieve")
155
+ # Called inside a temp DX project (cwd). Write the "active" flow with the tunable embedded ids
156
+ # so the stale-binding comparator can grep for them.
157
+ flow=$(printf '%s' "$args" | sed -n 's/.*Flow:\([A-Za-z0-9_]*\).*/\1/p'); flow="${flow:-Omni_Route_VoiceCall_Trigger}"
158
+ mkdir -p force-app/main/default/flows
159
+ { echo '<?xml version="1.0" encoding="UTF-8"?>'; echo '<Flow xmlns="http://soap.sforce.com/2006/04/metadata">'
160
+ for id in $ACTIVE_IDS; do echo " <elementReference>$id</elementReference>"; done
161
+ echo " <stringValue>${ACTIVE_ROUTING_TYPE:-QueueBased}</stringValue>"
162
+ [ "${ACTIVE_ROUTING_TYPE:-QueueBased}" != "SkillsBased" ] || echo " <stringValue>${ACTIVE_SKILL_OPTION:-RunSBRRules}</stringValue>"
163
+ echo '</Flow>'; } > "force-app/main/default/flows/${flow}.flow-meta.xml"
164
+ echo '{"status":0,"result":{"success":true}}'; exit 0;;
165
+ "project deploy")
166
+ fn=$(printf '%s' "$args" | sed -n 's/.*Flow:\([A-Za-z0-9_]*\).*/\1/p'); fn="${fn:-Omni_Route_VoiceCall_Trigger}"
167
+ echo "{\"status\":0,\"result\":{\"success\":true,\"files\":[{\"fullName\":\"$fn\",\"type\":\"Flow\",\"state\":\"Created\"}]}}"; exit 0;;
168
+ "data create")
169
+ echo '{"status":0,"result":{"id":"500000000000001AAA","success":true}}'; exit 0;;
170
+ "data delete")
171
+ # Log the deleted record-id so tests can prove runtime-proof cleanup happened.
172
+ [ -n "${FAKE_DELETE_LOG:-}" ] && printf '%s\n' "$args" >> "$FAKE_DELETE_LOG"
173
+ echo '{"status":0,"result":{"id":"500000000000001AAA","success":true}}'; exit 0;;
174
+ *) echo '{"status":0,"result":{}}'; exit 0;;
175
+ esac
176
+ """
177
+
178
+
179
+ def _run(script_rel, args, path_prefix=None, extra_path_scrub=False, extra_env=None):
180
+ """Run a skill script, return (returncode, merged stdout+stderr).
181
+
182
+ path_prefix: a dir to prepend to PATH (where a fake `sf` lives).
183
+ extra_path_scrub: when True, build a PATH that excludes any real `sf` so the
184
+ input-contract category can prove rejection happens before the first sf call.
185
+ extra_env: optional dict of env vars overlaid onto the child environment (fake-`sf`
186
+ tunables like FAKE_SC_PRESENT, and cross-skill handoff vars like
187
+ SERVICE_CHANNEL_DEVELOPER_NAME / QUEUE_DEVELOPER_NAME / ROUTING_CONFIG_DEVELOPER_NAME).
188
+ """
189
+ env = dict(os.environ)
190
+ if extra_path_scrub:
191
+ # Keep only dirs that do NOT contain an `sf` executable, so `sf` is absent.
192
+ kept = [d for d in env.get("PATH", "").split(os.pathsep)
193
+ if d and not os.path.exists(os.path.join(d, "sf"))]
194
+ env["PATH"] = os.pathsep.join(kept)
195
+ if path_prefix:
196
+ env["PATH"] = path_prefix + os.pathsep + env.get("PATH", "")
197
+ if extra_env:
198
+ env.update({k: str(v) for k, v in extra_env.items()})
199
+ proc = subprocess.run(
200
+ ["bash", str(SKILLS_ROOT / script_rel), *args],
201
+ capture_output=True, text=True, env=env, cwd=str(SKILLS_ROOT),
202
+ )
203
+ return proc.returncode, (proc.stdout or "") + (proc.stderr or "")
204
+
205
+
206
+ class _FakeSfDir:
207
+ """Context manager: a temp dir holding an executable fake `sf` on PATH."""
208
+
209
+ def __init__(self, body=_FAKE_SF):
210
+ self._body = body
211
+ self._tmp = None
212
+
213
+ def __enter__(self):
214
+ self._tmp = tempfile.mkdtemp(prefix="omni-fake-sf-")
215
+ sf = Path(self._tmp) / "sf"
216
+ sf.write_text(self._body)
217
+ sf.chmod(0o755)
218
+ return self._tmp
219
+
220
+ def __exit__(self, *exc):
221
+ import shutil
222
+ if self._tmp:
223
+ shutil.rmtree(self._tmp, ignore_errors=True)