@salesforce/afv-skills 1.55.0 → 1.57.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 (274) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-generate/SKILL.md +8 -0
  3. package/skills/agentforce-generate/references/actions-reference.md +2 -2
  4. package/skills/agentforce-generate/references/voice-modality-reference.md +51 -15
  5. package/skills/agentforce-generate/references/voice-telephony-cli.md +193 -0
  6. package/skills/agentforce-observe/SKILL.md +13 -9
  7. package/skills/agentforce-observe/references/ahm-alerts.md +193 -14
  8. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +24 -15
  9. package/skills/automation-sandbox-post-copy-config-generate/assets/config_template.json +11 -0
  10. package/skills/automation-sandbox-post-copy-config-generate/assets/json_schema.json +33 -1
  11. package/skills/automation-sandbox-post-copy-config-generate/references/configuration_catalog.md +32 -1
  12. package/skills/automation-sandbox-post-copy-configure/SKILL.md +75 -71
  13. package/skills/automation-sandbox-post-copy-configure/assets/scheduled_apex_template.apex +13 -0
  14. package/skills/automation-sandbox-post-copy-configure/examples/sample_scheduled_apex_config.json +13 -0
  15. package/skills/automation-sandbox-post-copy-configure/references/scheduled_apex_path.md +155 -0
  16. package/skills/automation-sandbox-post-copy-configure/scripts/build-scheduled-apex.mjs +62 -0
  17. package/skills/automation-sandbox-post-copy-configure/scripts/soql-escape-job-name.mjs +28 -0
  18. package/skills/commerce-b2b-open-code-components-integrate/SKILL.md +1 -1
  19. package/skills/commerce-b2b-open-code-components-replace/SKILL.md +16 -16
  20. package/skills/consumer-goods-accruals-datakit-deploy/SKILL.md +383 -0
  21. package/skills/consumer-goods-accruals-datakit-deploy/scripts/setup.js +324 -0
  22. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/00-check-prerequisites.js +63 -0
  23. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/01-download-static-resource.js +100 -0
  24. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/02-replace-org-id.js +46 -0
  25. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/03-deploy-metadata.js +46 -0
  26. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/04-deploy-engine.js +198 -0
  27. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/05-deploy-tpm-accruals.js +231 -0
  28. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/06-create-dataspace.js +82 -0
  29. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/07-deploy-accruals-reports.js +517 -0
  30. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/08-deploy-ui.js +416 -0
  31. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/09-completion.js +44 -0
  32. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/utils.js +514 -0
  33. package/skills/consumer-goods-sync-management-configure/SKILL.md +137 -0
  34. package/skills/consumer-goods-sync-management-configure/examples/scenarios.md +294 -0
  35. package/skills/consumer-goods-sync-management-configure/references/act1-setup-sync.md +333 -0
  36. package/skills/consumer-goods-sync-management-configure/references/act2-assign-users.md +324 -0
  37. package/skills/consumer-goods-sync-management-configure/references/act3-plan-verify.md +113 -0
  38. package/skills/consumer-goods-sync-management-configure/references/readiness-and-enablement.md +164 -0
  39. package/skills/consumer-goods-sync-management-configure/references/sync-management-app-install-backbone.md +159 -0
  40. package/skills/consumer-goods-sync-management-configure/references/transports-and-namespace.md +220 -0
  41. package/skills/consumer-goods-sync-management-configure/references/verify-and-smoke.md +175 -0
  42. package/skills/dx-devops-project-manage/SKILL.md +1 -1
  43. package/skills/dx-org-analyze/SKILL.md +0 -1
  44. package/skills/dx-org-analyze/scripts/collect_org_data.py +2 -2
  45. package/skills/dx-org-analyze/scripts/compute_diff.py +2 -4
  46. package/skills/dx-org-analyze/scripts/introspect_org.py +4 -40
  47. package/skills/dx-org-manage/SKILL.md +6 -50
  48. package/skills/dx-org-manage/examples/README.md +10 -16
  49. package/skills/dx-org-manage/references/scratch-org-create.md +1 -1
  50. package/skills/dx-org-manage/references/scratch-org-operations.md +1 -1
  51. package/skills/dx-org-shape-manage/SKILL.md +4 -3
  52. package/skills/education-cloud-domain-configure/references/gotchas-extended.md +1 -0
  53. package/skills/experience-accessibility-validate/SKILL.md +8 -5
  54. package/skills/experience-accessibility-validate/references/reviewers/sc-1-1-1-non-text-content.md +1 -4
  55. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-i-lists.md +0 -4
  56. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-ii-tables.md +20 -85
  57. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iii-form-labels.md +4 -4
  58. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iv-regions.md +0 -4
  59. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-v-groups.md +2 -4
  60. package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-5-identify-input.md +0 -4
  61. package/skills/experience-accessibility-validate/references/reviewers/sc-1-4-3-contrast.md +4 -14
  62. package/skills/experience-accessibility-validate/references/reviewers/sc-2-1-1-keyboard.md +9 -5
  63. package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-4-link-purpose.md +1 -4
  64. package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-6-headings-labels.md +0 -4
  65. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -4
  66. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -4
  67. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-3-label-in-name.md +0 -4
  68. package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-7-dragging-movement.md +0 -4
  69. package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-1-on-focus.md +0 -4
  70. package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-2-on-input.md +1 -4
  71. package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-1-error-identification.md +1 -4
  72. package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-2-labels-instructions.md +1 -4
  73. package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-3-error-suggestion.md +1 -4
  74. package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-i-name.md +4 -5
  75. package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-ii-role.md +1 -4
  76. package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-iii-value.md +0 -4
  77. package/skills/experience-cms-content-generate/SKILL.md +1 -1
  78. package/skills/experience-cms-content-render/SKILL.md +3 -3
  79. package/skills/experience-cms-content-render/assets/angular/MediaRenderer.component.ts +35 -7
  80. package/skills/experience-cms-content-render/assets/angular/cms-item.service.ts +13 -4
  81. package/skills/experience-cms-content-render/assets/react/MediaRenderer.tsx +30 -8
  82. package/skills/experience-cms-content-render/assets/react/useCmsItem.ts +14 -4
  83. package/skills/experience-cms-content-render/assets/shared/cmsCore.types.ts +11 -1
  84. package/skills/experience-cms-content-render/assets/shared/externalRefs.ts +1 -1
  85. package/skills/experience-cms-content-render/assets/shared/mediaLabels.ts +62 -0
  86. package/skills/experience-cms-content-render/references/init-scaffold.md +13 -6
  87. package/skills/experience-content-media-stock-image-search/SKILL.md +0 -1
  88. package/skills/experience-lwc-accessibility-jest-run/SKILL.md +104 -25
  89. package/skills/experience-lwc-accessibility-jest-run/assets/jest.config.js +4 -0
  90. package/skills/experience-lwc-accessibility-jest-run/assets/sa11y-jest-setup.js +5 -0
  91. package/skills/experience-lwc-design-generate/SKILL.md +1 -1
  92. package/skills/experience-lwc-legacy-migrate/SKILL.md +212 -0
  93. package/skills/experience-lwc-legacy-migrate/assets/lo20-host-page-template.html +192 -0
  94. package/skills/experience-lwc-legacy-migrate/references/aura-to-lwc-completeness-checklist.md +188 -0
  95. package/skills/experience-lwc-legacy-migrate/references/lightning-out-2-system-reference.md +495 -0
  96. package/skills/experience-lwc-legacy-migrate/references/lightning-out-beta-to-2-migration.md +824 -0
  97. package/skills/experience-lwc-legacy-migrate/scripts/convert-lo-names.py +94 -0
  98. package/skills/experience-lwc-legacy-migrate/scripts/validate-lo20-page.py +133 -0
  99. package/skills/experience-ui-bundle-app-coordinate/SKILL.md +5 -5
  100. package/skills/experience-ui-bundle-features-generate/SKILL.md +65 -36
  101. package/skills/experience-ui-bundle-features-generate/references/angular/features.md +74 -0
  102. package/skills/experience-ui-bundle-features-generate/references/react/features.md +59 -0
  103. package/skills/experience-ui-bundle-features-generate/scripts/detect-framework.sh +73 -0
  104. package/skills/experience-ui-bundle-frontend-generate/SKILL.md +2 -2
  105. package/skills/experience-ui-bundle-metadata-generate/SKILL.md +26 -14
  106. package/skills/experience-ui-bundle-metadata-generate/references/angular-metadata-generate.md +37 -0
  107. package/skills/experience-ui-bundle-metadata-generate/references/react-metadata-generate.md +32 -0
  108. package/skills/experience-ui-bundle-metadata-generate/scripts/detect-framework.sh +73 -0
  109. package/skills/experience-ui-bundle-metadata-generate/scripts/verify-bundle-location.sh +30 -8
  110. package/skills/experience-ui-bundle-project-generate/SKILL.md +1 -1
  111. package/skills/field-service-data-capture-migrate/SKILL.md +391 -0
  112. package/skills/field-service-data-capture-migrate/assets/sample-legacy-flow.flow-meta.xml +163 -0
  113. package/skills/field-service-data-capture-migrate/references/architecture-notes.md +40 -0
  114. package/skills/field-service-data-capture-migrate/references/component-mapping.md +278 -0
  115. package/skills/field-service-data-capture-migrate/references/converter-builder-contract.md +183 -0
  116. package/skills/field-service-data-capture-migrate/references/dc-platform-rules.md +130 -0
  117. package/skills/field-service-data-capture-migrate/references/fsm-dc-capability-catalog.md +215 -0
  118. package/skills/field-service-data-capture-migrate/references/known-deploy-errors.md +36 -0
  119. package/skills/field-service-data-capture-migrate/references/migration-checklist.md +121 -0
  120. package/skills/field-service-data-capture-migrate/references/transformer-rules.md +132 -0
  121. package/skills/field-service-data-capture-migrate/scripts/analyze_flow.py +277 -0
  122. package/skills/field-service-data-capture-migrate/scripts/convert_to_dc_spec.py +1311 -0
  123. package/skills/field-service-data-capture-migrate/scripts/cud_analysis.py +402 -0
  124. package/skills/field-service-data-capture-migrate/scripts/deploy_flow.sh +230 -0
  125. package/skills/field-service-data-capture-migrate/scripts/discover_subflow_tree.py +230 -0
  126. package/skills/field-service-data-capture-migrate/scripts/flow_input.py +186 -0
  127. package/skills/field-service-data-capture-migrate/scripts/flow_xml_utils.py +39 -0
  128. package/skills/field-service-data-capture-migrate/scripts/fsm_dc_catalog.py +413 -0
  129. package/skills/field-service-data-capture-migrate/scripts/generate_summary.py +199 -0
  130. package/skills/field-service-data-capture-migrate/scripts/json_to_flow_xml.py +146 -0
  131. package/skills/field-service-data-capture-migrate/scripts/manual_review_flags.py +42 -0
  132. package/skills/field-service-data-capture-migrate/scripts/retrieve_flow_rest.sh +155 -0
  133. package/skills/field-service-data-capture-migrate/scripts/subflow_names.py +49 -0
  134. package/skills/field-service-data-capture-migrate/scripts/transform_flow.py +1661 -0
  135. package/skills/field-service-data-capture-migrate/scripts/validate_flow.sh +147 -0
  136. package/skills/field-service-data-capture-migrate/scripts/vendor/build_flow.py +1258 -0
  137. package/skills/integration-connectivity-connected-app-configure/SKILL.md +5 -5
  138. package/skills/integration-connectivity-generate/SKILL.md +10 -10
  139. package/skills/integration-connectivity-generate/scripts/configure-named-credential.sh +2 -2
  140. package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +1 -1
  141. package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +1 -1
  142. package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +14 -1
  143. package/skills/mobile-apps-create/SKILL.md +1 -1
  144. package/skills/{platform-agentsetup-categories-fetch → platform-agenticsetup-categories-get}/SKILL.md +7 -7
  145. package/skills/platform-apex-test-generate/SKILL.md +1 -1
  146. package/skills/platform-apex-test-run/SKILL.md +1 -1
  147. package/skills/platform-custom-field-generate/SKILL.md +1 -1
  148. package/skills/platform-custom-lightning-type-generate/SKILL.md +1 -1
  149. package/skills/platform-custom-metadata-type-generate/SKILL.md +1 -1
  150. package/skills/platform-custom-object-generate/SKILL.md +1 -1
  151. package/skills/platform-custom-report-type-generate/SKILL.md +1 -1
  152. package/skills/platform-custom-setting-generate/SKILL.md +1 -1
  153. package/skills/platform-data-and-tooling-api-context-get/SKILL.md +1 -1
  154. package/skills/platform-data-manage/SKILL.md +10 -10
  155. package/skills/platform-flexipage-generate/SKILL.md +1 -1
  156. package/skills/platform-lightning-app-coordinate/SKILL.md +1 -1
  157. package/skills/platform-metadata-api-context-get/SKILL.md +1 -1
  158. package/skills/platform-metadata-retrieve/SKILL.md +1 -1
  159. package/skills/platform-permission-set-generate/SKILL.md +1 -1
  160. package/skills/platform-report-generate/SKILL.md +1 -1
  161. package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +4 -4
  162. package/skills/platform-sandbox-configure/SKILL.md +108 -133
  163. package/skills/platform-sandbox-configure/references/api-response-shapes.md +39 -0
  164. package/skills/platform-sandbox-configure/references/definition-file-approach.md +73 -0
  165. package/skills/platform-sharing-owd-configure/SKILL.md +1 -1
  166. package/skills/platform-sharing-rules-generate/SKILL.md +1 -1
  167. package/skills/platform-soql-query/SKILL.md +1 -1
  168. package/skills/platform-value-set-generate/SKILL.md +1 -1
  169. package/skills/platform-widget-generate/SKILL.md +26 -18
  170. package/skills/platform-widget-generate/examples/formulas.json +191 -0
  171. package/skills/platform-widget-generate/references/widget-formulas.md +123 -0
  172. package/skills/platform-widget-generate/references/widget-meta-directives.md +4 -4
  173. package/skills/sales-call-scoring-configure/SKILL.md +318 -0
  174. package/skills/sales-call-scoring-configure/assets/best-practice-competencies.json +67 -0
  175. package/skills/sales-call-scoring-configure/assets/ootb-competencies.json +58 -0
  176. package/skills/sales-call-scoring-configure/references/admin-communication.md +79 -0
  177. package/skills/sales-call-scoring-configure/references/competency-crud.md +130 -0
  178. package/skills/sales-call-scoring-configure/scripts/create-competency.sh +166 -0
  179. package/skills/sales-call-scoring-configure/scripts/create-custom-competency.sh +166 -0
  180. package/skills/sales-call-scoring-configure/scripts/edit-competency.sh +185 -0
  181. package/skills/sales-call-scoring-configure/scripts/edit-custom-competency.sh +190 -0
  182. package/skills/sales-call-scoring-configure/scripts/enable-call-scoring.sh +436 -0
  183. package/skills/sales-call-scoring-configure/scripts/get-competency.sh +72 -0
  184. package/skills/sales-call-scoring-configure/scripts/get-custom-competency.sh +78 -0
  185. package/skills/sales-call-scoring-configure/scripts/install-best-practice-competencies.sh +223 -0
  186. package/skills/sales-call-scoring-configure/scripts/install-ootb-competencies.sh +237 -0
  187. package/skills/sales-call-scoring-configure/scripts/list-competencies.sh +99 -0
  188. package/skills/sales-call-scoring-configure/scripts/shared/auth.sh +116 -0
  189. package/skills/sales-call-scoring-configure/scripts/shared/cap.sh +86 -0
  190. package/skills/sales-call-scoring-configure/scripts/shared/soap.sh +267 -0
  191. package/skills/sales-call-scoring-configure/scripts/shared/soql.sh +25 -0
  192. package/skills/sales-call-scoring-configure/scripts/toggle-competency.sh +112 -0
  193. package/skills/sales-call-scoring-configure/scripts/toggle-custom-competency.sh +125 -0
  194. package/skills/sales-call-scoring-configure/scripts/verify-ootb-competencies.sh +116 -0
  195. package/skills/service-agentforce-human-escalation-configure/SKILL.md +4 -0
  196. package/skills/service-agentforce-human-escalation-configure/scripts/tests/_bootstrap.py +26 -6
  197. package/skills/service-agentforce-human-escalation-configure/scripts/tests/test_escalation_contracts.py +5 -4
  198. package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +1 -0
  199. package/skills/service-de-channel-activate/SKILL.md +6 -5
  200. package/skills/service-de-channel-create/SKILL.md +3 -3
  201. package/skills/service-de-channel-routing-configure/SKILL.md +3 -3
  202. package/skills/service-de-channel-settings-configure/SKILL.md +195 -0
  203. package/skills/service-de-channel-settings-configure/references/channel-settings-facets.md +152 -0
  204. package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/gotchas.md +3 -3
  205. package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/language-keywords.md +4 -4
  206. package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/worked-examples.md +14 -14
  207. package/skills/service-de-headless-channel-configure/SKILL.md +6 -6
  208. package/skills/service-de-headless-channel-configure/references/worked-examples.md +1 -1
  209. package/skills/service-de-waba-integrate/SKILL.md +2 -1
  210. package/skills/service-digital-engagement-deployment-configure/SKILL.md +2 -0
  211. package/skills/service-digital-engagement-deployment-configure/scripts/check-api-version.sh +29 -0
  212. package/skills/service-email-to-case-configure/SKILL.md +1 -1
  213. package/skills/service-helpagent-coordinate/SKILL.md +3 -2
  214. package/skills/service-helpagent-coordinate/references/channel-voice.md +15 -4
  215. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +49 -31
  216. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +71 -6
  217. package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +26 -4
  218. package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +35 -10
  219. package/skills/service-itsm-agentic-setup-cmdb-access-assign/references/mcp-invocation.md +25 -5
  220. package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -1
  221. package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +5 -5
  222. package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +1 -1
  223. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +2 -2
  224. package/skills/service-itsm-agentic-setup-cmdb-coordinate/examples/output-templates.md +1 -1
  225. package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +25 -15
  226. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +8 -5
  227. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +4 -2
  228. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +1 -1
  229. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +29 -16
  230. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +8 -5
  231. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +4 -2
  232. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +1 -1
  233. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +29 -16
  234. package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +138 -68
  235. package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +31 -15
  236. package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md +156 -0
  237. package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md +148 -0
  238. package/skills/service-itsm-agentic-setup-incident-management/references/major-incident-management.md +162 -0
  239. package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md +149 -0
  240. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +103 -89
  241. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +2 -2
  242. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/predefined-incident-policy.json +21 -39
  243. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +3 -3
  244. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +18 -1
  245. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +63 -37
  246. package/skills/service-omni-attribute-routing-configure/SKILL.md +53 -0
  247. package/skills/service-omni-attribute-routing-configure/references/api-notes.md +7 -0
  248. package/skills/service-omni-attribute-routing-configure/scripts/configure-and-report.sh +224 -0
  249. package/skills/service-omni-attribute-routing-configure/scripts/tests/test_attribute_routing_contracts.py +137 -0
  250. package/skills/service-omni-channel-inventory-analyze/SKILL.md +96 -0
  251. package/skills/service-omni-channel-inventory-analyze/references/api-notes.md +52 -0
  252. package/skills/service-omni-channel-inventory-analyze/scripts/analyze.sh +185 -0
  253. package/skills/service-omni-channel-inventory-analyze/scripts/tests/_bootstrap.py +84 -0
  254. package/skills/service-omni-channel-inventory-analyze/scripts/tests/test_inventory_analyze_contracts.py +141 -0
  255. package/skills/service-omni-channel-limits-analyze/SKILL.md +70 -0
  256. package/skills/service-omni-channel-limits-analyze/references/api-notes.md +22 -0
  257. package/skills/service-omni-channel-limits-analyze/scripts/analyze.sh +159 -0
  258. package/skills/service-omni-channel-limits-analyze/scripts/tests/_bootstrap.py +87 -0
  259. package/skills/service-omni-channel-limits-analyze/scripts/tests/test_limits_analyze_contracts.py +99 -0
  260. package/skills/service-omni-channel-setup-coordinate/SKILL.md +12 -20
  261. package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +55 -5
  262. package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +38 -0
  263. package/skills/service-omni-command-center-analyze/SKILL.md +2 -2
  264. package/skills/service-omni-command-center-analyze/scripts/analyze.sh +3 -3
  265. package/skills/dx-org-manage/examples/snapshots/error_output.json +0 -9
  266. package/skills/dx-org-manage/examples/snapshots/success_output.json +0 -15
  267. package/skills/dx-org-manage/references/cli_flags.md +0 -67
  268. package/skills/dx-org-manage/references/creating-snapshot.md +0 -103
  269. package/skills/dx-org-manage/references/snapshot_usage.md +0 -74
  270. package/skills/experience-accessibility-validate/scripts/contrast-ratio.py +0 -153
  271. package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +0 -205
  272. package/skills/experience-ui-bundle-features-generate/scripts/verify-react-bundle.sh +0 -14
  273. /package/skills/experience-ui-bundle-features-generate/references/{conflict-resolution-schema.json → common/conflict-resolution-schema.json} +0 -0
  274. /package/skills/{platform-agentsetup-categories-fetch → platform-agenticsetup-categories-get}/references/api-response-schema.md +0 -0
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Convert Tooling API Flow Metadata JSON to Flow XML.
4
+
5
+ Following the mechanical JSON ↔ XML mapping rule from project-codey PR #975:
6
+ - JSON key → XML element
7
+ - JSON array → repeated XML elements
8
+ - Typed value wrappers preserved: {"stringValue": "X"} → <stringValue>X</stringValue>
9
+
10
+ Usage:
11
+ json_to_flow_xml.py <input.json> <output.flow-meta.xml>
12
+ cat metadata.json | json_to_flow_xml.py - <output.flow-meta.xml>
13
+ """
14
+
15
+ import json
16
+ import sys
17
+ import xml.etree.ElementTree as ET
18
+ from pathlib import Path
19
+ from typing import Any, Dict, List, Union
20
+
21
+
22
+ def json_value_to_xml(parent: ET.Element, key: str, value: Any) -> None:
23
+ """
24
+ Convert a JSON value to XML element(s) under parent.
25
+
26
+ Mapping rule from PR #975:
27
+ - Scalar → text content
28
+ - Object → nested elements
29
+ - Array → repeated elements with same tag name
30
+ """
31
+ if value is None:
32
+ # Omit null values (not represented in Flow XML)
33
+ return
34
+
35
+ if isinstance(value, bool):
36
+ # Boolean → lowercase string
37
+ elem = ET.SubElement(parent, key)
38
+ elem.text = str(value).lower()
39
+
40
+ elif isinstance(value, (int, float)):
41
+ # Number → string
42
+ elem = ET.SubElement(parent, key)
43
+ elem.text = str(value)
44
+
45
+ elif isinstance(value, str):
46
+ # String → text content
47
+ elem = ET.SubElement(parent, key)
48
+ elem.text = value
49
+
50
+ elif isinstance(value, list):
51
+ # Array → repeated elements
52
+ for item in value:
53
+ json_value_to_xml(parent, key, item)
54
+
55
+ elif isinstance(value, dict):
56
+ # Object → nested element with children
57
+ elem = ET.SubElement(parent, key)
58
+ for child_key, child_value in value.items():
59
+ json_value_to_xml(elem, child_key, child_value)
60
+
61
+ else:
62
+ raise ValueError(f"Unsupported value type: {type(value)} for key '{key}'")
63
+
64
+
65
+ def json_to_flow_xml(metadata_json: Dict[str, Any]) -> str:
66
+ """
67
+ Convert Tooling API Flow Metadata JSON to Flow XML string.
68
+
69
+ Args:
70
+ metadata_json: The "Metadata" object from Tooling API Flow sObject
71
+
72
+ Returns:
73
+ XML string with <?xml?> declaration and <Flow> root
74
+ """
75
+ # Create root <Flow> element
76
+ root = ET.Element("Flow")
77
+
78
+ # Convert all top-level keys to XML elements
79
+ for key, value in metadata_json.items():
80
+ json_value_to_xml(root, key, value)
81
+
82
+ # Pretty-print with indentation
83
+ indent_tree(root)
84
+
85
+ # Generate XML string WITHOUT namespace (simpler for testing)
86
+ # Salesforce accepts Flow XML without explicit xmlns on root
87
+ xml_str = ET.tostring(root, encoding='unicode', method='xml')
88
+
89
+ # Add XML declaration
90
+ return f'<?xml version="1.0" encoding="UTF-8"?>\n{xml_str}'
91
+
92
+
93
+ def indent_tree(elem: ET.Element, level: int = 0) -> None:
94
+ """Add pretty-print indentation to XML tree (4 spaces per level)."""
95
+ indent = " "
96
+ i = "\n" + level * indent
97
+
98
+ if len(elem):
99
+ if not elem.text or not elem.text.strip():
100
+ elem.text = i + indent
101
+ if not elem.tail or not elem.tail.strip():
102
+ elem.tail = i
103
+ for child in elem:
104
+ indent_tree(child, level + 1)
105
+ if not child.tail or not child.tail.strip():
106
+ child.tail = i
107
+ else:
108
+ if level and (not elem.tail or not elem.tail.strip()):
109
+ elem.tail = i
110
+
111
+
112
+ def main() -> int:
113
+ """CLI entry point."""
114
+ if len(sys.argv) != 3:
115
+ print("Usage: json_to_flow_xml.py <input.json> <output.flow-meta.xml>", file=sys.stderr)
116
+ print(" cat metadata.json | json_to_flow_xml.py - <output.flow-meta.xml>", file=sys.stderr)
117
+ return 2
118
+
119
+ input_path = sys.argv[1]
120
+ output_path = sys.argv[2]
121
+
122
+ # Read input JSON
123
+ if input_path == "-":
124
+ metadata_json = json.load(sys.stdin)
125
+ else:
126
+ with open(input_path, 'r') as f:
127
+ metadata_json = json.load(f)
128
+
129
+ # Convert to XML
130
+ try:
131
+ xml_str = json_to_flow_xml(metadata_json)
132
+ except Exception as e:
133
+ print(f"ERROR: Failed to convert JSON to XML: {e}", file=sys.stderr)
134
+ return 1
135
+
136
+ # Write output
137
+ Path(output_path).parent.mkdir(parents=True, exist_ok=True)
138
+ with open(output_path, 'w') as f:
139
+ f.write(xml_str)
140
+
141
+ print(f"Converted JSON to Flow XML: {output_path}", file=sys.stderr)
142
+ return 0
143
+
144
+
145
+ if __name__ == "__main__":
146
+ sys.exit(main())
@@ -0,0 +1,42 @@
1
+ """
2
+ Manual review flag detection for field-service-data-capture-migrate.
3
+
4
+ STUB: This module is not yet implemented. It returns an empty list.
5
+ See docs/superpowers/specs/2026-08-02-manual-review-flags-design.md for the design.
6
+ """
7
+
8
+ import xml.etree.ElementTree as ET
9
+ from typing import List, Dict, Any
10
+
11
+
12
+ def detect_manual_review_flags(root: ET.Element) -> List[Dict[str, Any]]:
13
+ """Detect patterns that require manual review in Flow Builder before activation.
14
+
15
+ Returns a list of Flag dicts, each with:
16
+ - code: str # e.g. "SCREEN_IN_LOOP"
17
+ - element: str # element name or screen field name
18
+ - what: str # one-line "what was found"
19
+ - why: str # why it needs manual review
20
+ - recommendation: str # how to fix it in Flow Builder
21
+
22
+ STUB: Not yet implemented. Returns empty list.
23
+ """
24
+ return []
25
+
26
+
27
+ def build_excision_flag(element_name: str, code: str, why: str) -> Dict[str, Any]:
28
+ """Build a Flag dict for a node excised at transform-time (not scan-time).
29
+
30
+ Reuses the existing Flag contract: {code, element, what, why, recommendation}.
31
+ Called by transform_flow.py's excise_and_placeholder — one call per excised node.
32
+ """
33
+ return {
34
+ "code": code,
35
+ "element": element_name,
36
+ "what": f"{element_name} was dropped — not compliant with data capture",
37
+ "why": why,
38
+ "recommendation": (
39
+ "Review the placeholder screen inserted at this point in the flow "
40
+ "and redesign in Flow Builder if the dropped logic is needed."
41
+ ),
42
+ }
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env bash
2
+ # REST API version of retrieve_flow.sh - no SF CLI execution dependencies
3
+ #
4
+ # Retrieve a Flow from a Salesforce org via Tooling API using the 2-step pattern
5
+ # from project-codey PR #975:
6
+ # 1. GET /tooling/query to resolve Flow version ID from API name
7
+ # 2. GET /tooling/sobjects/Flow/{id} to read Metadata JSON
8
+ # 3. Convert JSON → XML via json_to_flow_xml.py
9
+ #
10
+ # Usage: retrieve_flow_rest.sh <FlowApiName> <org-alias> [output-dir]
11
+ # output-dir defaults to /tmp
12
+
13
+ set -euo pipefail
14
+
15
+ FLOW_NAME="${1:-}"
16
+ ALIAS="${2:-}"
17
+ OUT_DIR="${3:-/tmp}"
18
+
19
+ if [[ -z "$FLOW_NAME" || -z "$ALIAS" ]]; then
20
+ echo "Usage: retrieve_flow_rest.sh <FlowApiName> <org-alias> [output-dir]" >&2
21
+ exit 2
22
+ fi
23
+
24
+ # Validate Flow API name (alphanumeric + underscore, starting with letter)
25
+ if ! [[ "$FLOW_NAME" =~ ^[A-Za-z][A-Za-z0-9_]*$ ]]; then
26
+ echo "ERROR: Invalid Flow API name: '$FLOW_NAME'" >&2
27
+ echo "Must be alphanumeric + underscore, starting with a letter." >&2
28
+ exit 2
29
+ fi
30
+
31
+ mkdir -p "$OUT_DIR"
32
+
33
+ echo "Retrieving Flow '$FLOW_NAME' from org '$ALIAS' via Tooling API..." >&2
34
+
35
+ # Get access token and instance URL
36
+ AUTH_JSON=$(sf org display --target-org "$ALIAS" --json 2>&1)
37
+ if [[ $? -ne 0 ]]; then
38
+ echo "ERROR: Failed to authenticate to org '$ALIAS'" >&2
39
+ echo "$AUTH_JSON" >&2
40
+ exit 1
41
+ fi
42
+
43
+ ACCESS_TOKEN=$(echo "$AUTH_JSON" | jq -r '.result.accessToken // empty')
44
+ INSTANCE_URL=$(echo "$AUTH_JSON" | jq -r '.result.instanceUrl // empty')
45
+
46
+ if [[ -z "$ACCESS_TOKEN" || "$ACCESS_TOKEN" == "null" ]]; then
47
+ echo "ERROR: Could not get access token for org '$ALIAS'" >&2
48
+ echo "Run: sf org login web --alias $ALIAS" >&2
49
+ exit 1
50
+ fi
51
+
52
+ if [[ -z "$INSTANCE_URL" || "$INSTANCE_URL" == "null" ]]; then
53
+ echo "ERROR: Could not get instance URL for org '$ALIAS'" >&2
54
+ exit 1
55
+ fi
56
+
57
+ # Put the auth header in a curl config file rather than -H argv: command-line
58
+ # arguments are visible to any local user via `ps`/`/proc` and would leak the
59
+ # access token, and argv would also show up in a `set -x` trace.
60
+ umask 077
61
+ TEMP_JSON=""
62
+ CURL_CFG=$(mktemp -t flow-curl-cfg.XXXXXX)
63
+ cleanup() { rm -f "${CURL_CFG:-}" "${TEMP_JSON:-}" 2>/dev/null || true; }
64
+ trap cleanup EXIT
65
+ XTRACE_WAS_ON=0
66
+ case "$-" in *x*) XTRACE_WAS_ON=1; set +x ;; esac
67
+ {
68
+ printf 'header = "Authorization: Bearer %s"\n' "$ACCESS_TOKEN"
69
+ echo 'header = "Content-Type: application/json"'
70
+ } > "$CURL_CFG"
71
+ [[ "$XTRACE_WAS_ON" -eq 1 ]] && set -x
72
+ unset ACCESS_TOKEN
73
+
74
+ # Step 1: Resolve Flow version ID from API name
75
+ echo " [1/3] Resolving Flow version ID..." >&2
76
+
77
+ SOQL="SELECT Id, LatestVersionId, ActiveVersionId FROM FlowDefinition WHERE DeveloperName='${FLOW_NAME}'"
78
+ ENCODED_SOQL=$(python3 -c "import urllib.parse; print(urllib.parse.quote('''${SOQL}'''))")
79
+
80
+ QUERY_RESPONSE=$(curl -s -w "\n%{http_code}" -X GET \
81
+ "${INSTANCE_URL}/services/data/v67.0/tooling/query?q=${ENCODED_SOQL}" \
82
+ --config "$CURL_CFG")
83
+
84
+ HTTP_CODE=$(echo "$QUERY_RESPONSE" | tail -n1)
85
+ BODY=$(echo "$QUERY_RESPONSE" | sed '$d')
86
+
87
+ if [[ "$HTTP_CODE" -ge 400 ]]; then
88
+ echo "ERROR: Tooling API query failed (HTTP $HTTP_CODE)" >&2
89
+ echo "$BODY" | jq -r '.[0].message // .message // "Unknown error"' >&2
90
+ exit 1
91
+ fi
92
+
93
+ RECORD_COUNT=$(echo "$BODY" | jq -r '.totalSize // 0')
94
+ if [[ "$RECORD_COUNT" -eq 0 ]]; then
95
+ echo "ERROR: Flow '$FLOW_NAME' not found in org '$ALIAS'" >&2
96
+ echo "Check the Flow API name and ensure it exists in the org." >&2
97
+ exit 1
98
+ fi
99
+
100
+ VERSION_ID=$(echo "$BODY" | jq -r '.records[0].LatestVersionId // empty')
101
+ if [[ -z "$VERSION_ID" || "$VERSION_ID" == "null" ]]; then
102
+ echo "ERROR: FlowDefinition found but LatestVersionId is null" >&2
103
+ echo "$BODY" | jq '.' >&2
104
+ exit 1
105
+ fi
106
+
107
+ echo " [1/3] Resolved Flow version ID: $VERSION_ID" >&2
108
+
109
+ # Step 2: Read Metadata JSON
110
+ echo " [2/3] Reading Flow Metadata JSON..." >&2
111
+
112
+ METADATA_RESPONSE=$(curl -s -w "\n%{http_code}" -X GET \
113
+ "${INSTANCE_URL}/services/data/v67.0/tooling/sobjects/Flow/${VERSION_ID}" \
114
+ --config "$CURL_CFG")
115
+
116
+ HTTP_CODE=$(echo "$METADATA_RESPONSE" | tail -n1)
117
+ BODY=$(echo "$METADATA_RESPONSE" | sed '$d')
118
+
119
+ if [[ "$HTTP_CODE" -ge 400 ]]; then
120
+ echo "ERROR: Failed to read Flow Metadata (HTTP $HTTP_CODE)" >&2
121
+ echo "$BODY" | jq -r '.[0].message // .message // "Unknown error"' >&2
122
+ exit 1
123
+ fi
124
+
125
+ METADATA_JSON=$(echo "$BODY" | jq '.Metadata')
126
+ if [[ "$METADATA_JSON" == "null" || -z "$METADATA_JSON" ]]; then
127
+ echo "ERROR: Flow response missing 'Metadata' field" >&2
128
+ echo "$BODY" | jq '.' >&2
129
+ exit 1
130
+ fi
131
+
132
+ echo " [2/3] Retrieved Metadata JSON ($(echo "$METADATA_JSON" | jq -r 'keys | length') top-level keys)" >&2
133
+
134
+ # Step 3: Convert JSON → XML
135
+ echo " [3/3] Converting JSON to Flow XML..." >&2
136
+
137
+ TEMP_JSON=$(mktemp -t flow-metadata.XXXXXX.json)
138
+
139
+ echo "$METADATA_JSON" > "$TEMP_JSON"
140
+
141
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
142
+ OUTPUT_XML="${OUT_DIR}/${FLOW_NAME}.flow-meta.xml"
143
+
144
+ python3 "${SCRIPT_DIR}/json_to_flow_xml.py" "$TEMP_JSON" "$OUTPUT_XML" 2>&1
145
+ if [[ $? -ne 0 ]]; then
146
+ echo "ERROR: JSON to XML conversion failed" >&2
147
+ exit 1
148
+ fi
149
+
150
+ echo " [3/3] Conversion complete" >&2
151
+ echo "" >&2
152
+ echo "[OK] Flow retrieved successfully: $OUTPUT_XML" >&2
153
+
154
+ # Print output path (for script chaining)
155
+ echo "$OUTPUT_XML"
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env python3
2
+ """Single source of truth for the migrated-subflow naming rule.
3
+
4
+ Both transform_flow.py (which rewrites <subflows><flowName> to the DC name) and
5
+ discover_subflow_tree.py (which predicts that name to resolve the tree) import
6
+ this so a caller's rewritten reference always matches the migrated leaf's
7
+ deployed name. Standard library only; no skill dependencies (safe to import
8
+ anywhere — no circular import).
9
+
10
+ Naming note: this is the migrated *flow API name*, unrelated to the DC component
11
+ `dcName` (the Name-input extensionName) used elsewhere in the skill.
12
+ """
13
+
14
+ # Explicit source-name -> migrated-name overrides for known mismatches where the
15
+ # plain suffix rule is wrong. Add an entry here rather than introducing a fuzzy
16
+ # name normalizer.
17
+ OVERRIDES = {
18
+ 'SDO_FSL_Image_Capture_Flow_SDO': 'SDO_FSL_Image_Capture_DC',
19
+ }
20
+
21
+
22
+ def migrated_dc_flow_name(source_name: str, dc_suffix: str = '_DC') -> str:
23
+ """The API name a migrated subflow will deploy as.
24
+
25
+ Must match exactly what transform_flow.py rewrites <subflows><flowName> to,
26
+ so intra-tree references resolve in the bundled dry-run.
27
+ """
28
+ if source_name in OVERRIDES:
29
+ return OVERRIDES[source_name]
30
+ if source_name.endswith(dc_suffix):
31
+ return source_name
32
+ return source_name + dc_suffix
33
+
34
+
35
+ if __name__ == '__main__':
36
+ import sys
37
+ if len(sys.argv) < 2 or sys.argv[1] in ('-h', '--help'):
38
+ print("Usage: subflow_names.py <source_name> [--dc-suffix SUFFIX]", file=sys.stderr)
39
+ sys.exit(2)
40
+
41
+ source_name = sys.argv[1]
42
+ dc_suffix = '_DC'
43
+
44
+ if '--dc-suffix' in sys.argv:
45
+ idx = sys.argv.index('--dc-suffix')
46
+ if idx + 1 < len(sys.argv):
47
+ dc_suffix = sys.argv[idx + 1]
48
+
49
+ print(migrated_dc_flow_name(source_name, dc_suffix))