@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.
- package/package.json +1 -1
- package/skills/agentforce-generate/SKILL.md +8 -0
- package/skills/agentforce-generate/references/actions-reference.md +2 -2
- package/skills/agentforce-generate/references/voice-modality-reference.md +51 -15
- package/skills/agentforce-generate/references/voice-telephony-cli.md +193 -0
- package/skills/agentforce-observe/SKILL.md +13 -9
- package/skills/agentforce-observe/references/ahm-alerts.md +193 -14
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +24 -15
- package/skills/automation-sandbox-post-copy-config-generate/assets/config_template.json +11 -0
- package/skills/automation-sandbox-post-copy-config-generate/assets/json_schema.json +33 -1
- package/skills/automation-sandbox-post-copy-config-generate/references/configuration_catalog.md +32 -1
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +75 -71
- package/skills/automation-sandbox-post-copy-configure/assets/scheduled_apex_template.apex +13 -0
- package/skills/automation-sandbox-post-copy-configure/examples/sample_scheduled_apex_config.json +13 -0
- package/skills/automation-sandbox-post-copy-configure/references/scheduled_apex_path.md +155 -0
- package/skills/automation-sandbox-post-copy-configure/scripts/build-scheduled-apex.mjs +62 -0
- package/skills/automation-sandbox-post-copy-configure/scripts/soql-escape-job-name.mjs +28 -0
- package/skills/commerce-b2b-open-code-components-integrate/SKILL.md +1 -1
- package/skills/commerce-b2b-open-code-components-replace/SKILL.md +16 -16
- package/skills/consumer-goods-accruals-datakit-deploy/SKILL.md +383 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/setup.js +324 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/00-check-prerequisites.js +63 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/01-download-static-resource.js +100 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/02-replace-org-id.js +46 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/03-deploy-metadata.js +46 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/04-deploy-engine.js +198 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/05-deploy-tpm-accruals.js +231 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/06-create-dataspace.js +82 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/07-deploy-accruals-reports.js +517 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/08-deploy-ui.js +416 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/09-completion.js +44 -0
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/utils.js +514 -0
- package/skills/consumer-goods-sync-management-configure/SKILL.md +137 -0
- package/skills/consumer-goods-sync-management-configure/examples/scenarios.md +294 -0
- package/skills/consumer-goods-sync-management-configure/references/act1-setup-sync.md +333 -0
- package/skills/consumer-goods-sync-management-configure/references/act2-assign-users.md +324 -0
- package/skills/consumer-goods-sync-management-configure/references/act3-plan-verify.md +113 -0
- package/skills/consumer-goods-sync-management-configure/references/readiness-and-enablement.md +164 -0
- package/skills/consumer-goods-sync-management-configure/references/sync-management-app-install-backbone.md +159 -0
- package/skills/consumer-goods-sync-management-configure/references/transports-and-namespace.md +220 -0
- package/skills/consumer-goods-sync-management-configure/references/verify-and-smoke.md +175 -0
- package/skills/dx-devops-project-manage/SKILL.md +1 -1
- package/skills/dx-org-analyze/SKILL.md +0 -1
- package/skills/dx-org-analyze/scripts/collect_org_data.py +2 -2
- package/skills/dx-org-analyze/scripts/compute_diff.py +2 -4
- package/skills/dx-org-analyze/scripts/introspect_org.py +4 -40
- package/skills/dx-org-manage/SKILL.md +6 -50
- package/skills/dx-org-manage/examples/README.md +10 -16
- package/skills/dx-org-manage/references/scratch-org-create.md +1 -1
- package/skills/dx-org-manage/references/scratch-org-operations.md +1 -1
- package/skills/dx-org-shape-manage/SKILL.md +4 -3
- package/skills/education-cloud-domain-configure/references/gotchas-extended.md +1 -0
- package/skills/experience-accessibility-validate/SKILL.md +8 -5
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-1-1-non-text-content.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-i-lists.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-ii-tables.md +20 -85
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iii-form-labels.md +4 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-iv-regions.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-1-v-groups.md +2 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-3-5-identify-input.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-1-4-3-contrast.md +4 -14
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-1-1-keyboard.md +9 -5
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-4-link-purpose.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-4-6-headings-labels.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-3-label-in-name.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-2-5-7-dragging-movement.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-1-on-focus.md +0 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-2-2-on-input.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-1-error-identification.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-2-labels-instructions.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-3-3-3-error-suggestion.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-i-name.md +4 -5
- package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-ii-role.md +1 -4
- package/skills/experience-accessibility-validate/references/reviewers/sc-4-1-2-iii-value.md +0 -4
- package/skills/experience-cms-content-generate/SKILL.md +1 -1
- package/skills/experience-cms-content-render/SKILL.md +3 -3
- package/skills/experience-cms-content-render/assets/angular/MediaRenderer.component.ts +35 -7
- package/skills/experience-cms-content-render/assets/angular/cms-item.service.ts +13 -4
- package/skills/experience-cms-content-render/assets/react/MediaRenderer.tsx +30 -8
- package/skills/experience-cms-content-render/assets/react/useCmsItem.ts +14 -4
- package/skills/experience-cms-content-render/assets/shared/cmsCore.types.ts +11 -1
- package/skills/experience-cms-content-render/assets/shared/externalRefs.ts +1 -1
- package/skills/experience-cms-content-render/assets/shared/mediaLabels.ts +62 -0
- package/skills/experience-cms-content-render/references/init-scaffold.md +13 -6
- package/skills/experience-content-media-stock-image-search/SKILL.md +0 -1
- package/skills/experience-lwc-accessibility-jest-run/SKILL.md +104 -25
- package/skills/experience-lwc-accessibility-jest-run/assets/jest.config.js +4 -0
- package/skills/experience-lwc-accessibility-jest-run/assets/sa11y-jest-setup.js +5 -0
- package/skills/experience-lwc-design-generate/SKILL.md +1 -1
- package/skills/experience-lwc-legacy-migrate/SKILL.md +212 -0
- package/skills/experience-lwc-legacy-migrate/assets/lo20-host-page-template.html +192 -0
- package/skills/experience-lwc-legacy-migrate/references/aura-to-lwc-completeness-checklist.md +188 -0
- package/skills/experience-lwc-legacy-migrate/references/lightning-out-2-system-reference.md +495 -0
- package/skills/experience-lwc-legacy-migrate/references/lightning-out-beta-to-2-migration.md +824 -0
- package/skills/experience-lwc-legacy-migrate/scripts/convert-lo-names.py +94 -0
- package/skills/experience-lwc-legacy-migrate/scripts/validate-lo20-page.py +133 -0
- package/skills/experience-ui-bundle-app-coordinate/SKILL.md +5 -5
- package/skills/experience-ui-bundle-features-generate/SKILL.md +65 -36
- package/skills/experience-ui-bundle-features-generate/references/angular/features.md +74 -0
- package/skills/experience-ui-bundle-features-generate/references/react/features.md +59 -0
- package/skills/experience-ui-bundle-features-generate/scripts/detect-framework.sh +73 -0
- package/skills/experience-ui-bundle-frontend-generate/SKILL.md +2 -2
- package/skills/experience-ui-bundle-metadata-generate/SKILL.md +26 -14
- package/skills/experience-ui-bundle-metadata-generate/references/angular-metadata-generate.md +37 -0
- package/skills/experience-ui-bundle-metadata-generate/references/react-metadata-generate.md +32 -0
- package/skills/experience-ui-bundle-metadata-generate/scripts/detect-framework.sh +73 -0
- package/skills/experience-ui-bundle-metadata-generate/scripts/verify-bundle-location.sh +30 -8
- package/skills/experience-ui-bundle-project-generate/SKILL.md +1 -1
- package/skills/field-service-data-capture-migrate/SKILL.md +391 -0
- package/skills/field-service-data-capture-migrate/assets/sample-legacy-flow.flow-meta.xml +163 -0
- package/skills/field-service-data-capture-migrate/references/architecture-notes.md +40 -0
- package/skills/field-service-data-capture-migrate/references/component-mapping.md +278 -0
- package/skills/field-service-data-capture-migrate/references/converter-builder-contract.md +183 -0
- package/skills/field-service-data-capture-migrate/references/dc-platform-rules.md +130 -0
- package/skills/field-service-data-capture-migrate/references/fsm-dc-capability-catalog.md +215 -0
- package/skills/field-service-data-capture-migrate/references/known-deploy-errors.md +36 -0
- package/skills/field-service-data-capture-migrate/references/migration-checklist.md +121 -0
- package/skills/field-service-data-capture-migrate/references/transformer-rules.md +132 -0
- package/skills/field-service-data-capture-migrate/scripts/analyze_flow.py +277 -0
- package/skills/field-service-data-capture-migrate/scripts/convert_to_dc_spec.py +1311 -0
- package/skills/field-service-data-capture-migrate/scripts/cud_analysis.py +402 -0
- package/skills/field-service-data-capture-migrate/scripts/deploy_flow.sh +230 -0
- package/skills/field-service-data-capture-migrate/scripts/discover_subflow_tree.py +230 -0
- package/skills/field-service-data-capture-migrate/scripts/flow_input.py +186 -0
- package/skills/field-service-data-capture-migrate/scripts/flow_xml_utils.py +39 -0
- package/skills/field-service-data-capture-migrate/scripts/fsm_dc_catalog.py +413 -0
- package/skills/field-service-data-capture-migrate/scripts/generate_summary.py +199 -0
- package/skills/field-service-data-capture-migrate/scripts/json_to_flow_xml.py +146 -0
- package/skills/field-service-data-capture-migrate/scripts/manual_review_flags.py +42 -0
- package/skills/field-service-data-capture-migrate/scripts/retrieve_flow_rest.sh +155 -0
- package/skills/field-service-data-capture-migrate/scripts/subflow_names.py +49 -0
- package/skills/field-service-data-capture-migrate/scripts/transform_flow.py +1661 -0
- package/skills/field-service-data-capture-migrate/scripts/validate_flow.sh +147 -0
- package/skills/field-service-data-capture-migrate/scripts/vendor/build_flow.py +1258 -0
- package/skills/integration-connectivity-connected-app-configure/SKILL.md +5 -5
- package/skills/integration-connectivity-generate/SKILL.md +10 -10
- package/skills/integration-connectivity-generate/scripts/configure-named-credential.sh +2 -2
- package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +1 -1
- package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +1 -1
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +14 -1
- package/skills/mobile-apps-create/SKILL.md +1 -1
- package/skills/{platform-agentsetup-categories-fetch → platform-agenticsetup-categories-get}/SKILL.md +7 -7
- package/skills/platform-apex-test-generate/SKILL.md +1 -1
- package/skills/platform-apex-test-run/SKILL.md +1 -1
- package/skills/platform-custom-field-generate/SKILL.md +1 -1
- package/skills/platform-custom-lightning-type-generate/SKILL.md +1 -1
- package/skills/platform-custom-metadata-type-generate/SKILL.md +1 -1
- package/skills/platform-custom-object-generate/SKILL.md +1 -1
- package/skills/platform-custom-report-type-generate/SKILL.md +1 -1
- package/skills/platform-custom-setting-generate/SKILL.md +1 -1
- package/skills/platform-data-and-tooling-api-context-get/SKILL.md +1 -1
- package/skills/platform-data-manage/SKILL.md +10 -10
- package/skills/platform-flexipage-generate/SKILL.md +1 -1
- package/skills/platform-lightning-app-coordinate/SKILL.md +1 -1
- package/skills/platform-metadata-api-context-get/SKILL.md +1 -1
- package/skills/platform-metadata-retrieve/SKILL.md +1 -1
- package/skills/platform-permission-set-generate/SKILL.md +1 -1
- package/skills/platform-report-generate/SKILL.md +1 -1
- package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +4 -4
- package/skills/platform-sandbox-configure/SKILL.md +108 -133
- package/skills/platform-sandbox-configure/references/api-response-shapes.md +39 -0
- package/skills/platform-sandbox-configure/references/definition-file-approach.md +73 -0
- package/skills/platform-sharing-owd-configure/SKILL.md +1 -1
- package/skills/platform-sharing-rules-generate/SKILL.md +1 -1
- package/skills/platform-soql-query/SKILL.md +1 -1
- package/skills/platform-value-set-generate/SKILL.md +1 -1
- package/skills/platform-widget-generate/SKILL.md +26 -18
- package/skills/platform-widget-generate/examples/formulas.json +191 -0
- package/skills/platform-widget-generate/references/widget-formulas.md +123 -0
- package/skills/platform-widget-generate/references/widget-meta-directives.md +4 -4
- package/skills/sales-call-scoring-configure/SKILL.md +318 -0
- package/skills/sales-call-scoring-configure/assets/best-practice-competencies.json +67 -0
- package/skills/sales-call-scoring-configure/assets/ootb-competencies.json +58 -0
- package/skills/sales-call-scoring-configure/references/admin-communication.md +79 -0
- package/skills/sales-call-scoring-configure/references/competency-crud.md +130 -0
- package/skills/sales-call-scoring-configure/scripts/create-competency.sh +166 -0
- package/skills/sales-call-scoring-configure/scripts/create-custom-competency.sh +166 -0
- package/skills/sales-call-scoring-configure/scripts/edit-competency.sh +185 -0
- package/skills/sales-call-scoring-configure/scripts/edit-custom-competency.sh +190 -0
- package/skills/sales-call-scoring-configure/scripts/enable-call-scoring.sh +436 -0
- package/skills/sales-call-scoring-configure/scripts/get-competency.sh +72 -0
- package/skills/sales-call-scoring-configure/scripts/get-custom-competency.sh +78 -0
- package/skills/sales-call-scoring-configure/scripts/install-best-practice-competencies.sh +223 -0
- package/skills/sales-call-scoring-configure/scripts/install-ootb-competencies.sh +237 -0
- package/skills/sales-call-scoring-configure/scripts/list-competencies.sh +99 -0
- package/skills/sales-call-scoring-configure/scripts/shared/auth.sh +116 -0
- package/skills/sales-call-scoring-configure/scripts/shared/cap.sh +86 -0
- package/skills/sales-call-scoring-configure/scripts/shared/soap.sh +267 -0
- package/skills/sales-call-scoring-configure/scripts/shared/soql.sh +25 -0
- package/skills/sales-call-scoring-configure/scripts/toggle-competency.sh +112 -0
- package/skills/sales-call-scoring-configure/scripts/toggle-custom-competency.sh +125 -0
- package/skills/sales-call-scoring-configure/scripts/verify-ootb-competencies.sh +116 -0
- package/skills/service-agentforce-human-escalation-configure/SKILL.md +4 -0
- package/skills/service-agentforce-human-escalation-configure/scripts/tests/_bootstrap.py +26 -6
- package/skills/service-agentforce-human-escalation-configure/scripts/tests/test_escalation_contracts.py +5 -4
- package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +1 -0
- package/skills/service-de-channel-activate/SKILL.md +6 -5
- package/skills/service-de-channel-create/SKILL.md +3 -3
- package/skills/service-de-channel-routing-configure/SKILL.md +3 -3
- package/skills/service-de-channel-settings-configure/SKILL.md +195 -0
- package/skills/service-de-channel-settings-configure/references/channel-settings-facets.md +152 -0
- package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/gotchas.md +3 -3
- package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/language-keywords.md +4 -4
- package/skills/{service-de-channel-consent-configure → service-de-channel-settings-configure}/references/worked-examples.md +14 -14
- package/skills/service-de-headless-channel-configure/SKILL.md +6 -6
- package/skills/service-de-headless-channel-configure/references/worked-examples.md +1 -1
- package/skills/service-de-waba-integrate/SKILL.md +2 -1
- package/skills/service-digital-engagement-deployment-configure/SKILL.md +2 -0
- package/skills/service-digital-engagement-deployment-configure/scripts/check-api-version.sh +29 -0
- package/skills/service-email-to-case-configure/SKILL.md +1 -1
- package/skills/service-helpagent-coordinate/SKILL.md +3 -2
- package/skills/service-helpagent-coordinate/references/channel-voice.md +15 -4
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +49 -31
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +71 -6
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +26 -4
- package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +35 -10
- package/skills/service-itsm-agentic-setup-cmdb-access-assign/references/mcp-invocation.md +25 -5
- package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -1
- package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +5 -5
- package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +1 -1
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +2 -2
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/examples/output-templates.md +1 -1
- package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +25 -15
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +8 -5
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +4 -2
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +1 -1
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +29 -16
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +8 -5
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +4 -2
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +1 -1
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +29 -16
- package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +138 -68
- package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +31 -15
- package/skills/service-itsm-agentic-setup-incident-management/references/incident-persona-psg.md +156 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/incident-preferences.md +148 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/major-incident-management.md +162 -0
- package/skills/service-itsm-agentic-setup-incident-management/references/service-mgmt-privilege.md +149 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +103 -89
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +2 -2
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/predefined-incident-policy.json +21 -39
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +3 -3
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +18 -1
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +63 -37
- package/skills/service-omni-attribute-routing-configure/SKILL.md +53 -0
- package/skills/service-omni-attribute-routing-configure/references/api-notes.md +7 -0
- package/skills/service-omni-attribute-routing-configure/scripts/configure-and-report.sh +224 -0
- package/skills/service-omni-attribute-routing-configure/scripts/tests/test_attribute_routing_contracts.py +137 -0
- package/skills/service-omni-channel-inventory-analyze/SKILL.md +96 -0
- package/skills/service-omni-channel-inventory-analyze/references/api-notes.md +52 -0
- package/skills/service-omni-channel-inventory-analyze/scripts/analyze.sh +185 -0
- package/skills/service-omni-channel-inventory-analyze/scripts/tests/_bootstrap.py +84 -0
- package/skills/service-omni-channel-inventory-analyze/scripts/tests/test_inventory_analyze_contracts.py +141 -0
- package/skills/service-omni-channel-limits-analyze/SKILL.md +70 -0
- package/skills/service-omni-channel-limits-analyze/references/api-notes.md +22 -0
- package/skills/service-omni-channel-limits-analyze/scripts/analyze.sh +159 -0
- package/skills/service-omni-channel-limits-analyze/scripts/tests/_bootstrap.py +87 -0
- package/skills/service-omni-channel-limits-analyze/scripts/tests/test_limits_analyze_contracts.py +99 -0
- package/skills/service-omni-channel-setup-coordinate/SKILL.md +12 -20
- package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +55 -5
- package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +38 -0
- package/skills/service-omni-command-center-analyze/SKILL.md +2 -2
- package/skills/service-omni-command-center-analyze/scripts/analyze.sh +3 -3
- package/skills/dx-org-manage/examples/snapshots/error_output.json +0 -9
- package/skills/dx-org-manage/examples/snapshots/success_output.json +0 -15
- package/skills/dx-org-manage/references/cli_flags.md +0 -67
- package/skills/dx-org-manage/references/creating-snapshot.md +0 -103
- package/skills/dx-org-manage/references/snapshot_usage.md +0 -74
- package/skills/experience-accessibility-validate/scripts/contrast-ratio.py +0 -153
- package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +0 -205
- package/skills/experience-ui-bundle-features-generate/scripts/verify-react-bundle.sh +0 -14
- /package/skills/experience-ui-bundle-features-generate/references/{conflict-resolution-schema.json → common/conflict-resolution-schema.json} +0 -0
- /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))
|