@salesforce/afv-skills 1.65.0 → 1.65.1
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/field-service-data-capture-form-deployer-configure/SKILL.md +2 -23
- package/skills/field-service-data-capture-form-designer-configure/SKILL.md +3 -13
- package/skills/field-service-mobile-branding-configure/SKILL.md +3 -17
- package/skills/field-service-objective-designer-configure/SKILL.md +379 -72
- package/skills/field-service-prework-brief-deployer-configure/SKILL.md +537 -10
- package/skills/field-service-scheduling-policy-designer-query/SKILL.md +1093 -65
- package/skills/field-service-sobject-create-configure/SKILL.md +213 -13
- package/skills/field-service-voice-to-form-configure/SKILL.md +11 -40
- package/skills/field-service-work-rule-designer-configure/SKILL.md +95 -121
- package/skills/agentforce-gpt-email-generation-configure/SKILL.md +0 -312
- package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +0 -64
- package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +0 -46
- package/skills/automation-company-profile-info-query/SKILL.md +0 -51
- package/skills/automation-digital-wallet-configure/SKILL.md +0 -689
- package/skills/automation-flow-coordinate/SKILL.md +0 -95
- package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +0 -1569
- package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +0 -96
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +0 -23
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +0 -31
- package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +0 -179
- package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +0 -13
- package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +0 -83
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +0 -69
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +0 -274
- package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +0 -192
- package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +0 -130
- package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +0 -92
- package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +0 -88
- package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/start/start.md +0 -539
- package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/wait/wait.md +0 -497
- package/skills/automation-flow-coordinate/references/recipes/author/author.md +0 -868
- package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +0 -300
- package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +0 -292
- package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +0 -323
- package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +0 -109
- package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +0 -219
- package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +0 -180
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +0 -175
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +0 -255
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +0 -212
- package/skills/automation-flow-coordinate/references/resources/variable/variable.md +0 -171
- package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +0 -786
- package/skills/automation-flow-coordinate/references/shared/end/end.md +0 -267
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +0 -69
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +0 -80
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +0 -116
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +0 -321
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +0 -320
- package/skills/automation-flow-coordinate/references/shared/server-functions.md +0 -597
- package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +0 -69
- package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +0 -78
- package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +0 -373
- package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +0 -273
- package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +0 -259
- package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +0 -369
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +0 -542
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +0 -349
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +0 -505
- package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +0 -380
- package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +0 -567
- package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +0 -360
- package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +0 -539
- package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +0 -358
- package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +0 -602
- package/skills/commerce-b2b-store-configure/SKILL.md +0 -251
- package/skills/commerce-credit-memo-create/SKILL.md +0 -139
- package/skills/commerce-delivery-business-hours-configure/SKILL.md +0 -277
- package/skills/commerce-delivery-estimation-apply/SKILL.md +0 -155
- package/skills/commerce-delivery-estimation-configure/SKILL.md +0 -377
- package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +0 -174
- package/skills/commerce-estimate-bopis-query/SKILL.md +0 -279
- package/skills/commerce-estimate-delivery-date-query/SKILL.md +0 -349
- package/skills/commerce-fees-apply/SKILL.md +0 -227
- package/skills/commerce-fulfillment-routing-analyze/SKILL.md +0 -200
- package/skills/commerce-guest-buyer-create/SKILL.md +0 -173
- package/skills/commerce-location-bopis-configure/SKILL.md +0 -378
- package/skills/commerce-location-business-hours-configure/SKILL.md +0 -235
- package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +0 -309
- package/skills/commerce-location-graph-integrate/SKILL.md +0 -131
- package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +0 -755
- package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +0 -331
- package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +0 -579
- package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +0 -626
- package/skills/commerce-merchant-catalog-configure/SKILL.md +0 -614
- package/skills/commerce-merchant-extension-provider-configure/SKILL.md +0 -368
- package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +0 -118
- package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +0 -65
- package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +0 -90
- package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +0 -72
- package/skills/commerce-merchant-insights-query/SKILL.md +0 -279
- package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +0 -656
- package/skills/commerce-order-summary-change-apply/SKILL.md +0 -375
- package/skills/commerce-product-details-get/SKILL.md +0 -363
- package/skills/commerce-product-search/SKILL.md +0 -563
- package/skills/commerce-react-storefront-create/SKILL.md +0 -350
- package/skills/commerce-return-order-summary-create/SKILL.md +0 -513
- package/skills/commerce-search-relevance-analyze/SKILL.md +0 -757
- package/skills/commerce-temporary-processing-time-override-create/SKILL.md +0 -274
- package/skills/communications-initial-setup-configure/SKILL.md +0 -630
- package/skills/communications-multisite-configure/SKILL.md +0 -571
- package/skills/communications-revenue-cloud-settings-configure/SKILL.md +0 -74
- package/skills/communications-smb-fiber-catalog-create/SKILL.md +0 -413
- package/skills/communications-tmf-integrate/SKILL.md +0 -1368
- package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +0 -448
- package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +0 -269
- package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +0 -271
- package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +0 -382
- package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +0 -373
- package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +0 -389
- package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +0 -338
- package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +0 -547
- package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +0 -346
- package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +0 -1110
- package/skills/crm-analytics-adoption-insights-configure/SKILL.md +0 -224
- package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +0 -418
- package/skills/crm-analytics-dashboards-configure/SKILL.md +0 -731
- package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +0 -233
- package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +0 -184
- package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +0 -167
- package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +0 -55
- package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +0 -1350
- package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +0 -1862
- package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +0 -83
- package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +0 -81
- package/skills/data360-activation-create/SKILL.md +0 -104
- package/skills/data360-activation-external-platform-get/SKILL.md +0 -49
- package/skills/data360-activation-target-create/SKILL.md +0 -93
- package/skills/data360-activation-v2-create/SKILL.md +0 -456
- package/skills/data360-audience-dmo-get/SKILL.md +0 -38
- package/skills/data360-calculated-affinity-create/SKILL.md +0 -82
- package/skills/data360-calculated-insight-create/SKILL.md +0 -148
- package/skills/data360-catalog-metadata-create/SKILL.md +0 -183
- package/skills/data360-code-extension-create/SKILL.md +0 -115
- package/skills/data360-communication-capping-create/SKILL.md +0 -227
- package/skills/data360-connection-create/SKILL.md +0 -491
- package/skills/data360-content-lens-create/SKILL.md +0 -181
- package/skills/data360-data-action-create/SKILL.md +0 -126
- package/skills/data360-data-action-target-create/SKILL.md +0 -181
- package/skills/data360-data-clean-room-create/SKILL.md +0 -238
- package/skills/data360-data-governance-create/SKILL.md +0 -746
- package/skills/data360-data-graph-create/SKILL.md +0 -82
- package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +0 -38
- package/skills/data360-data-lake-object-create/SKILL.md +0 -207
- package/skills/data360-data-model-object-catalog-get/SKILL.md +0 -49
- package/skills/data360-data-model-object-create/SKILL.md +0 -128
- package/skills/data360-data-model-object-mapping-create/SKILL.md +0 -106
- package/skills/data360-data-space-create/SKILL.md +0 -161
- package/skills/data360-data-streams-create/SKILL.md +0 -324
- package/skills/data360-engagement-signal-get/SKILL.md +0 -38
- package/skills/data360-experiment-create/SKILL.md +0 -82
- package/skills/data360-goal-based-campaign-create/SKILL.md +0 -192
- package/skills/data360-harmonization-process-history-get/SKILL.md +0 -38
- package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +0 -84
- package/skills/data360-identity-resolution-create/SKILL.md +0 -115
- package/skills/data360-intelligent-document-processing-create/SKILL.md +0 -148
- package/skills/data360-knowledge-graph-construction-create/SKILL.md +0 -93
- package/skills/data360-knowledge-graph-create/SKILL.md +0 -216
- package/skills/data360-knowledge-space-mcp-configure/SKILL.md +0 -475
- package/skills/data360-machine-learning-mcp-configure/SKILL.md +0 -697
- package/skills/data360-multi-org-mcp-configure/SKILL.md +0 -117
- package/skills/data360-secondary-index-mcp-configure/SKILL.md +0 -126
- package/skills/data360-segment-mcp-configure/SKILL.md +0 -159
- package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-engine-mcp-configure/SKILL.md +0 -62
- package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-metric-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-model-mcp-configure/SKILL.md +0 -115
- package/skills/data360-standard-mapping-mcp-configure/SKILL.md +0 -38
- package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +0 -73
- package/skills/experience-afv-query/SKILL.md +0 -234
- package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +0 -63
- package/skills/experience-apex-components-configure/SKILL.md +0 -69
- package/skills/experience-apex-pages-configure/SKILL.md +0 -107
- package/skills/experience-app-home-configure/SKILL.md +0 -76
- package/skills/experience-aura-lightning-out-access-configure/SKILL.md +0 -58
- package/skills/experience-briefcase-configure/SKILL.md +0 -287
- package/skills/experience-community-flexi-page-list-create/SKILL.md +0 -74
- package/skills/experience-community-template-definition-list-query/SKILL.md +0 -48
- package/skills/experience-community-theme-definition-list-query/SKILL.md +0 -38
- package/skills/experience-content-assets-configure/SKILL.md +0 -86
- package/skills/experience-custom-domain-create/SKILL.md +0 -727
- package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +0 -41
- package/skills/experience-field-service-app-builder-configure/SKILL.md +0 -187
- package/skills/experience-flow-category-configure/SKILL.md +0 -117
- package/skills/experience-formula-configure/SKILL.md +0 -358
- package/skills/experience-global-actions-configure/SKILL.md +0 -69
- package/skills/experience-global-publisher-layouts-configure/SKILL.md +0 -79
- package/skills/experience-instrumentation-configure/SKILL.md +0 -64
- package/skills/experience-lex-engagement-configure/SKILL.md +0 -50
- package/skills/experience-lightning-bolt-open/SKILL.md +0 -12
- package/skills/experience-lightning-out-configure/SKILL.md +0 -129
- package/skills/experience-lightning-preview-configure/SKILL.md +0 -67
- package/skills/experience-lightning-types-query/SKILL.md +0 -98
- package/skills/experience-malware-scan-configure/SKILL.md +0 -71
- package/skills/experience-my-salesforce-configure/SKILL.md +0 -126
- package/skills/experience-navigation-menus-configure/SKILL.md +0 -235
- package/skills/experience-notification-types-configure/SKILL.md +0 -206
- package/skills/experience-notifications-configure/SKILL.md +0 -75
- package/skills/experience-record-discovery-query/SKILL.md +0 -227
- package/skills/experience-regenerate-previews-open/SKILL.md +0 -94
- package/skills/experience-sales-cloud-mab-configure/SKILL.md +0 -254
- package/skills/experience-schema-builder-open/SKILL.md +0 -38
- package/skills/experience-simple-record-home-configure/SKILL.md +0 -110
- package/skills/experience-static-resources-configure/SKILL.md +0 -74
- package/skills/field-service-setup-coordinate/SKILL.md +0 -62
- package/skills/field-service-work-plan-configure/SKILL.md +0 -253
- package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +0 -180
- package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +0 -196
- package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +0 -106
- package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +0 -96
- package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +0 -111
- package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +0 -250
- package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +0 -122
- package/skills/fsc-digital-origination-coordinate/SKILL.md +0 -653
- package/skills/fsc-digital-origination-demo-run/SKILL.md +0 -225
- package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +0 -112
- package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +0 -396
- package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +0 -336
- package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +0 -208
- package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +0 -375
- package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +0 -83
- package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +0 -248
- package/skills/fsc-digital-origination-sample-data-create/SKILL.md +0 -206
- package/skills/fsc-document-checklist-settings-configure/SKILL.md +0 -57
- package/skills/fsc-flexible-hierarchy-configure/SKILL.md +0 -148
- package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +0 -1430
- package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +0 -471
- package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +0 -429
- package/skills/fsc-pricing-product-configurator-configure/SKILL.md +0 -150
- package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +0 -123
- package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +0 -82
- package/skills/fsc-product-act3-attributes-create/SKILL.md +0 -249
- package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +0 -196
- package/skills/fsc-product-act5-considerations-get/SKILL.md +0 -44
- package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +0 -384
- package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +0 -144
- package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +0 -107
- package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +0 -189
- package/skills/fsc-stage-management-definition-create/SKILL.md +0 -108
- package/skills/fsc-stage-management-permissions-assign/SKILL.md +0 -143
- package/skills/fsc-stage-management-transitions-configure/SKILL.md +0 -139
- package/skills/health-cloud-appt-booking-config-configure/SKILL.md +0 -135
- package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +0 -136
- package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-requests-create/SKILL.md +0 -178
- package/skills/health-cloud-initial-configure/SKILL.md +0 -511
- package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +0 -1374
- package/skills/health-cloud-provider-search-settings-configure/SKILL.md +0 -924
- package/skills/health-cloud-referral-management-coordinate/SKILL.md +0 -513
- package/skills/health-cloud-timeline-configure/SKILL.md +0 -622
- package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +0 -135
- package/skills/industries-account-score-settings-query/SKILL.md +0 -78
- package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +0 -177
- package/skills/industries-ad-product-availability-search/SKILL.md +0 -399
- package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +0 -628
- package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +0 -73
- package/skills/industries-atm-settings-starter-configure/SKILL.md +0 -76
- package/skills/industries-batch-document-ai-configure/SKILL.md +0 -196
- package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +0 -71
- package/skills/industries-branch-management-settings-configure/SKILL.md +0 -89
- package/skills/industries-bre-decision-table-access-configure/SKILL.md +0 -367
- package/skills/industries-brokerage-settings-configure/SKILL.md +0 -41
- package/skills/industries-calendar-sync-settings-configure/SKILL.md +0 -89
- package/skills/industries-care-request-settings-configure/SKILL.md +0 -218
- package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +0 -54
- package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +0 -380
- package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +0 -216
- package/skills/industries-catalog-process-intake-configure/SKILL.md +0 -219
- package/skills/industries-catalog-process-knowledge-configure/SKILL.md +0 -153
- package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +0 -168
- package/skills/industries-cds-general-settings-configure/SKILL.md +0 -69
- package/skills/industries-claim-financial-settings-configure/SKILL.md +0 -169
- package/skills/industries-clinical-data-model-settings-configure/SKILL.md +0 -136
- package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +0 -105
- package/skills/industries-collection-plan-settings-configure/SKILL.md +0 -132
- package/skills/industries-comms-service-console-settings-configure/SKILL.md +0 -159
- package/skills/industries-compliance-configure/SKILL.md +0 -102
- package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +0 -76
- package/skills/industries-contact-center-app-layout-configure/SKILL.md +0 -88
- package/skills/industries-contact-center-components-configure/SKILL.md +0 -96
- package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +0 -95
- package/skills/industries-contact-center-user-access-assign/SKILL.md +0 -96
- package/skills/industries-course-waitlist-config-configure/SKILL.md +0 -162
- package/skills/industries-crisis-center-settings-configure/SKILL.md +0 -84
- package/skills/industries-custom-object-settings-configure/SKILL.md +0 -94
- package/skills/industries-data-cloud-integration-configure/SKILL.md +0 -88
- package/skills/industries-data-space-feature-mappings-configure/SKILL.md +0 -245
- package/skills/industries-decision-matrix-builder-configure/SKILL.md +0 -78
- package/skills/industries-decision-table-hbase-configure/SKILL.md +0 -87
- package/skills/industries-decision-table-version-configure/SKILL.md +0 -74
- package/skills/industries-decision-tables-builder-configure/SKILL.md +0 -253
- package/skills/industries-decision-tables-configure/SKILL.md +0 -439
- package/skills/industries-energy-utilities-configure/SKILL.md +0 -251
- package/skills/industries-eu-cloud-multisite-configure/SKILL.md +0 -1008
- package/skills/industries-eu-new-connections-configure/SKILL.md +0 -30
- package/skills/industries-explainability-msg-template-configure/SKILL.md +0 -135
- package/skills/industries-expression-set-message-token-configure/SKILL.md +0 -135
- package/skills/industries-field-service-settings-configure/SKILL.md +0 -82
- package/skills/industries-form-framework-settings-configure/SKILL.md +0 -30
- package/skills/industries-fsc-ai-settings-configure/SKILL.md +0 -57
- package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +0 -172
- package/skills/industries-fsc-b2b-settings-configure/SKILL.md +0 -61
- package/skills/industries-fsc-insurance-settings-configure/SKILL.md +0 -58
- package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +0 -103
- package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +0 -117
- package/skills/industries-fsc-wealth-settings-configure/SKILL.md +0 -99
- package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +0 -120
- package/skills/industries-fundraising-rfm-configure/SKILL.md +0 -128
- package/skills/industries-fundraising-settings-configure/SKILL.md +0 -145
- package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +0 -299
- package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +0 -87
- package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +0 -58
- package/skills/industries-hc-score-category-settings-configure/SKILL.md +0 -167
- package/skills/industries-health-engagement-settings-configure/SKILL.md +0 -218
- package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +0 -131
- package/skills/industries-home-health-bundling-policy-create/SKILL.md +0 -50
- package/skills/industries-home-health-entity-labels-configure/SKILL.md +0 -29
- package/skills/industries-home-health-fsl-package-deploy/SKILL.md +0 -71
- package/skills/industries-home-health-fsl-settings-validate/SKILL.md +0 -27
- package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +0 -80
- package/skills/industries-home-health-guided-setup-configure/SKILL.md +0 -836
- package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +0 -55
- package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +0 -61
- package/skills/industries-home-health-licenses-assign/SKILL.md +0 -27
- package/skills/industries-home-health-operating-hours-create/SKILL.md +0 -40
- package/skills/industries-home-health-scheduling-policy-create/SKILL.md +0 -41
- package/skills/industries-home-health-service-objective-create/SKILL.md +0 -22
- package/skills/industries-home-health-skills-create/SKILL.md +0 -31
- package/skills/industries-home-health-users-create/SKILL.md +0 -29
- package/skills/industries-icm-act3-toggles-configure/SKILL.md +0 -198
- package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +0 -361
- package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +0 -550
- package/skills/industries-integrated-care-management-configure/SKILL.md +0 -168
- package/skills/industries-object-enablement-configure/SKILL.md +0 -86
- package/skills/industries-tpm-system-processing-service-configure/SKILL.md +0 -64
- package/skills/integration-apex-settings-configure/SKILL.md +0 -61
- package/skills/marketing-e360-email-archiving-configure/SKILL.md +0 -73
- package/skills/platform-custom-permissions-configure/SKILL.md +0 -687
- package/skills/platform-label-workbench-import-create/SKILL.md +0 -67
- package/skills/platform-privacy-agent-settings-configure/SKILL.md +0 -752
|
@@ -1,471 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: fsc-flexible-hierarchy-graph-config-create
|
|
3
|
-
description: "Build and deploy a bespoke Flexible Hierarchy graph config as a `RelationshipGraphDefinition` MDAPI component — first ask whether the admin has a config, then either take an admin-supplied config as-is (Path A, name read from its `masterLabel`) or ask the name and construct the `graphDefinition` from scratch (Path B: root object, node objects, per-object graph/grid view fields, node relationships), confirm right before the deploy, then create it via MDAPI deploy and read back. Invoked from the fsc-flexible-hierarchy-configure foundation skill's hierarchy-type step to create the bespoke hierarchy config."
|
|
4
|
-
metadata:
|
|
5
|
-
relatedSkills:
|
|
6
|
-
- fsc-flexible-hierarchy-configure
|
|
7
|
-
version: "1.0"
|
|
8
|
-
cliTools:
|
|
9
|
-
- tool:
|
|
10
|
-
- "sf"
|
|
11
|
-
semver: ">=2.0.0"
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Create a Bespoke Hierarchy Config
|
|
15
|
-
|
|
16
|
-
The **Bespoke Configuration** branch of the hierarchy-type step (**Step 9**) of the
|
|
17
|
-
[`fsc-flexible-hierarchy-configure`](../../../SKILL.md) foundation skill (see
|
|
18
|
-
[`../foundation-configure/SKILL.md`](../foundation-configure/SKILL.md)). The foundation skill
|
|
19
|
-
delegates here to build a **bespoke** hierarchy config — nodes and relations authored directly. This
|
|
20
|
-
is the *only* path when the org's Rule-Based Hierarchy preference isn't on, and remains available
|
|
21
|
-
even when it is (the admin can still choose Bespoke over Rule-Based at Step 9's modality gate).
|
|
22
|
-
Authoring a **Rule-Based** config — the `rules.graph.rootNode` tree of role-based filters and
|
|
23
|
-
automatic parent/child expansion — is out of scope for *this* skill; Step 9 delegates that to the
|
|
24
|
-
sibling [`../fsc-flexible-hierarchy-rule-based-graph-config-create/SKILL.md`](../fsc-flexible-hierarchy-rule-based-graph-config-create/SKILL.md)
|
|
25
|
-
sub-skill instead.
|
|
26
|
-
|
|
27
|
-
## Sequencing — one question at a time, never batch
|
|
28
|
-
|
|
29
|
-
This skill is multi-turn: the Path A/B branch, the name, and the pre-deploy confirm are each their
|
|
30
|
-
own turn. Ask **only the current question**, wait for the answer, then move on — **never bundle a
|
|
31
|
-
later question (e.g. node objects, relationships, the pre-deploy confirm) into the same message as
|
|
32
|
-
an earlier one, and never collect several answers up front.** This applies in full even if you're
|
|
33
|
-
serving this skill directly rather than being routed here from the foundation skill.
|
|
34
|
-
|
|
35
|
-
A hierarchy type is a **`RelationshipGraphDefinition`** metadata component — a deployable MDAPI type
|
|
36
|
-
(`metadataApiName="RelationshipGraphDefinition"`, `manageable`, `keyPrefix="06J"`). **This skill always
|
|
37
|
-
creates a brand-new record — never an update** (the `DeveloperName` uniqueness check above guarantees
|
|
38
|
-
it), and creation for this type needs a different **verb** than the rest of this skill uses on the
|
|
39
|
-
generic `/headless/metadata` facet. That facet's **PUT is update-only** for this type: PUT against a
|
|
40
|
-
`DeveloperName` that doesn't exist yet returns 400 `INVALID_CROSS_REFERENCE_KEY` ("Component does not
|
|
41
|
-
exist"), even with an otherwise-valid payload (confirmed against a live org — repeated identical
|
|
42
|
-
retries fail the same way, ruling out transience or a stale partial-create). **POST is a working create
|
|
43
|
-
transport in principle**, on either facet — confirmed `POST /services/data/v{version}.0/headless/metadata`
|
|
44
|
-
(body `{type, fullName, xmlRep}`) returns 200 with the new record's id, and the Tooling API's
|
|
45
|
-
generic-sObject POST is `createable: true` for this type via
|
|
46
|
-
`GET .../tooling/sobjects/RelationshipGraphDefinition/describe`. **But for
|
|
47
|
-
`GraphType: "FlexibleHierarchy"` specifically, the Tooling API POST is unreliable** — confirmed live
|
|
48
|
-
failing 5+ identical retries with `INVALID_FIELD_FOR_INSERT_UPDATE` on `GraphType`, on an
|
|
49
|
-
org where the Setup UI and an MDAPI deploy of the identical payload both succeeded immediately after.
|
|
50
|
-
**Create it via MDAPI deploy instead:** `sf project deploy start --source-dir <path>` against a
|
|
51
|
-
`relationshipGraphDefinitions/<DeveloperName>.relationshipGraphDefinition-meta.xml` component with the
|
|
52
|
-
same field shape as JSON would carry, HTML-escaped into XML. **Deploy at the org's highest supported
|
|
53
|
-
API version, not the CLI's/project's default** — confirmed live that an MDAPI deploy of this exact
|
|
54
|
-
type can fail with the *same* `INVALID_FIELD_FOR_INSERT_UPDATE`-style "Looks like you don't have access
|
|
55
|
-
to Graph Type FlexibleHierarchy" message purely from an API-version gap (deploying at v60 failed,
|
|
56
|
-
identical payload at v67 — the org's own default — succeeded), even though the running user genuinely
|
|
57
|
-
has access. So this error string alone doesn't prove a permission problem: before troubleshooting
|
|
58
|
-
access/permission sets, check the org's max supported API version (e.g. `GET /services/data` for the
|
|
59
|
-
version list, or the version a plain describe call resolves to) and pass it explicitly
|
|
60
|
-
(`sf project deploy start --api-version <max>`, and/or bump `sourceApiVersion` in `sfdx-project.json`)
|
|
61
|
-
rather than trusting whatever a scratch/default project scaffold ships with. See
|
|
62
|
-
[`references/hierarchy-type-payload.md`](references/hierarchy-type-payload.md) for the exact shape and
|
|
63
|
-
the full transport-failure writeup. Not a Java service call either way. There
|
|
64
|
-
is no `FlexibleHierarchyType` sObject despite the `FlexibleHierarchySetup` Setup node's name; a
|
|
65
|
-
`FlexibleHierarchy` instance's `HierarchyTypeReferenceId` is a lookup to this record — creating the
|
|
66
|
-
actual `FlexibleHierarchy` instance is out of scope.
|
|
67
|
-
|
|
68
|
-
## Prerequisites (established by the foundation skill before delegating here)
|
|
69
|
-
|
|
70
|
-
- FSC + ARC (Actionable Relationship Center) enabled on the org, with the running user able to
|
|
71
|
-
access and modify ARC graphs, and the Flexible Hierarchies feature preference on —
|
|
72
|
-
all confirmed in the foundation skill's earlier steps.
|
|
73
|
-
- The record-page placement made in the foundation skill's record-page step (its Step 8), **if any**.
|
|
74
|
-
This is context only — the config's root object does **not** have to match it. Step 8 is optional
|
|
75
|
-
(placement may be skipped entirely) and multi-select (the component may go on several objects), so
|
|
76
|
-
there's often no single record-page object to align to. Pick the hierarchy root independently from the
|
|
77
|
-
supported objects (see below).
|
|
78
|
-
|
|
79
|
-
## Free-text inputs must use a real text prompt — never a fixed-option picker
|
|
80
|
-
|
|
81
|
-
Several inputs in this skill are **open free-text**, not selections from a known set: the hierarchy-type
|
|
82
|
-
name, the root object, the "any other node objects" list, and the graph/grid view fields' "Enter my
|
|
83
|
-
own" escape. For every one of these, **ask a plain free-text question the admin types into** — do not
|
|
84
|
-
render it through a mechanism that only offers fixed selectable options.
|
|
85
|
-
|
|
86
|
-
**Tooling note (the trap that bit a real run):** if the only question mechanism available forces fixed
|
|
87
|
-
selectable options with no real text field — e.g. an `AskUserQuestion`-style tool where free text
|
|
88
|
-
arrives *only* via an auto-added "Other" — **do not use it for these inputs.** A label like "Type a
|
|
89
|
-
name" or "Enter objects (comma-separated)" inside such a picker is a **dead option**: selecting it
|
|
90
|
-
captures the literal string of the label, not what the admin meant to type, and there's nowhere to type
|
|
91
|
-
it. Ask as a plain free-text turn and read the answer from the admin's reply. This applies to *every*
|
|
92
|
-
free-text input below, not just one prompt.
|
|
93
|
-
|
|
94
|
-
**Second tooling note (also bit a real run):** don't try to work around the dead-option trap above by
|
|
95
|
-
calling an `AskUserQuestion`-style tool with a single placeholder option (e.g. one option reading "Type
|
|
96
|
-
it below") just to get a required field past the tool's validation — the tool itself requires **≥2
|
|
97
|
-
real, distinct options** and rejects a one-option call outright (`InputValidationError:
|
|
98
|
-
[...] expected array to have >=2 items`). Don't retry by inventing a second filler option either; that
|
|
99
|
-
just produces two meaningless choices for a question that has no fixed set of answers. For a genuinely
|
|
100
|
-
open, no-default, no-fixed-set field, abandon the picker tool entirely and ask in plain text — same
|
|
101
|
-
outcome as the first tooling note, reached from a different failed attempt.
|
|
102
|
-
|
|
103
|
-
## First ask: do you have a hierarchy config to deploy, or should I build one?
|
|
104
|
-
|
|
105
|
-
**Ask this fork FIRST — before the name.** It decides the `graphDefinition` payload (the hard part of
|
|
106
|
-
the component) and **determines whether you get interviewed for nodes and display fields.** It also
|
|
107
|
-
governs whether the name even needs asking: a Path A config already carries its own `masterLabel`, so
|
|
108
|
-
for a deploy of an existing config **you don't need to ask for a name separately** — you read it from
|
|
109
|
-
the config (and only confirm it). Only Path B, where you build from scratch, has no name to read, so
|
|
110
|
-
that's the branch that asks for one. Ask the fork as a **Yes/No choice the admin selects — not a
|
|
111
|
-
free-text answer they type.** Present exactly two options (Yes / No); don't make them guess the
|
|
112
|
-
wording:
|
|
113
|
-
|
|
114
|
-
> Do you already have a hierarchy config ready to deploy?
|
|
115
|
-
> - **Yes** — paste your `graphDefinition` JSON or full `RelationshipGraphDefinition` XML and I'll
|
|
116
|
-
> deploy it as-is (I'll only validate the root object exists in the org — standard or custom — and
|
|
117
|
-
> read the label).
|
|
118
|
-
> - **No** — I'll build one with you: the root object, any other node objects, the graph/grid
|
|
119
|
-
> display fields for each, and optional node relationships.
|
|
120
|
-
|
|
121
|
-
Two paths follow from that answer:
|
|
122
|
-
|
|
123
|
-
- **Path A — the admin brings a config.** If they hand you a `graphDefinition` JSON or a full
|
|
124
|
-
`RelationshipGraphDefinition` MDAPI XML (like the sample in the reference), **use it as-is** —
|
|
125
|
-
don't silently rewrite their node/relationship choices. Reconcile only the essentials: confirm its
|
|
126
|
-
root object (`graph.rootNode.object.entity`) is a real entity in the org — **standard or custom**
|
|
127
|
-
(validate it against the org's describe, not a fixed list); it does **not** need to match any Step 8
|
|
128
|
-
record-page object (see Prerequisites),
|
|
129
|
-
and **read the name from the config's own `masterLabel`** — **don't ask for a name separately on
|
|
130
|
-
this path**; just echo the `masterLabel` you found and let them correct it if it's wrong. **Strip
|
|
131
|
-
the invalid duplicate `flexibleHierarchy` block if present** (see the pitfall below). This is the
|
|
132
|
-
preferred path when a config already exists.
|
|
133
|
-
- **Path B — build it from scratch.** Only here do you construct the graph, and that means gathering
|
|
134
|
-
**every field** from the admin — including the **name** (Path A read it from the config; Path B has
|
|
135
|
-
none, so ask for it here):
|
|
136
|
-
|
|
137
|
-
> What should the hierarchy type be called? (Required — there's no default.)
|
|
138
|
-
|
|
139
|
-
The **name** becomes the component's `masterLabel` (and `DeveloperName`). **Ask it as an open,
|
|
140
|
-
typed, free-text question — NOT a multiple-choice picker** (see the free-text-input rule hoisted at
|
|
141
|
-
the top of this skill). There is no default hierarchy type and no suggested list, so you cannot offer
|
|
142
|
-
options to select from: don't present a fixed choice (e.g. "Legal Entity") as option 1, don't
|
|
143
|
-
pre-fill or default to any name, and — because the name is **required** — **do not offer a "Skip"
|
|
144
|
-
option**. **Keep the prompt clean and do NOT improvise a suggested name from external or attached
|
|
145
|
-
context** — do not mine the conversation, Downloads, an attached Apex script, an existing
|
|
146
|
-
`RelationshipGraphDefinition` `DeveloperName`, or any other artifact to propose "something like
|
|
147
|
-
`<X>`". Even a soft, "it's your call" suggestion biases the answer and leaks unrelated context into
|
|
148
|
-
the prompt. Ask the bare open question — e.g. *"What should the hierarchy type be called? (Required —
|
|
149
|
-
there's no default.)"* — and nothing more; let the admin supply the name unprompted.
|
|
150
|
-
|
|
151
|
-
**`DeveloperName` must be unique — check for a collision and, if it exists, ask for another name.**
|
|
152
|
-
The typed label becomes both `masterLabel` and `DeveloperName`, and `DeveloperName` derives by
|
|
153
|
-
normalizing the label to a valid API name (spaces/punctuation → underscores, collapse repeats, strip
|
|
154
|
-
leading/trailing and leading-digit issues — e.g. `Legal Hierarchy` → `Legal_Hierarchy`). Because the
|
|
155
|
-
org **only accepts a unique `DeveloperName`** for `RelationshipGraphDefinition`, before building the
|
|
156
|
-
payload **query the org for an existing record with that `DeveloperName`** —
|
|
157
|
-
`SELECT Id, DeveloperName, MasterLabel FROM RelationshipGraphDefinition WHERE DeveloperName='<derived>'`.
|
|
158
|
-
If a record already exists, **do not overwrite it and do not silently append a suffix** — tell the
|
|
159
|
-
admin the name is already taken and **ask for a different name**, then re-derive and re-check, looping
|
|
160
|
-
until the `DeveloperName` is free. Word it plainly — e.g. *"A hierarchy type with the API name
|
|
161
|
-
`<derived>` already exists. Please choose a different name."* Only proceed to build the payload once
|
|
162
|
-
the derived `DeveloperName` is confirmed unique. **Do not ask for a description, and do not emit a `<description>` element**;
|
|
163
|
-
`RelationshipGraphDefinition` does **not** accept `<description>` — deploying one fails dry-run with
|
|
164
|
-
`Element ...description invalid at this location in type RelationshipGraphDefinition` (confirmed against a live org).
|
|
165
|
-
|
|
166
|
-
**Ask whether to save this as a reusable template — a real field, unlike description:**
|
|
167
|
-
|
|
168
|
-
> Do you want to save this as a reusable template? (yes / no — defaults to no if skipped)
|
|
169
|
-
|
|
170
|
-
Set `isTemplate` to `true` only if the admin opts in; leave it `false` (the default) on "no" or on
|
|
171
|
-
no answer. This is optional and skippable — don't block on it or re-ask if declined. Then construct
|
|
172
|
-
the graph. Ask for the root object **as typed free-text, not multiple-choice**:
|
|
173
|
-
> Which object should be the root object? Enter the object API name — e.g. `Account` or
|
|
174
|
-
> `My_Object__c`.
|
|
175
|
-
→ `graph.rootNode.object.entity`. **Validate that the typed object actually exists in the org —
|
|
176
|
-
standard or custom.** Common choices are standard objects like Account, Contact, FinancialAccount,
|
|
177
|
-
PartyRelationshipGroup, Opportunity, Case, BranchUnit, FinancialDeal, Product2, InsurancePolicy, or
|
|
178
|
-
Lead, but **custom objects (anything ending in `__c`) are fully supported too** — don't reject an
|
|
179
|
-
object just because it's custom or isn't in that common set. Confirm it against the org's schema
|
|
180
|
-
(e.g. an `EntityDefinition` query or describe); if it doesn't exist in the org, **tell the admin no
|
|
181
|
-
such object exists and ask them to enter another** — don't silently accept or drop it. The root is
|
|
182
|
-
validated **by existence in the org only** — it does **not** have to match any object chosen for
|
|
183
|
-
Step 8 record-page placement (which is optional and multi-select).
|
|
184
|
-
Build one `nodeList` entry per object, **handling each object's fields right after it's chosen**
|
|
185
|
-
rather than collecting all objects first. Start with the **root object** (already chosen above),
|
|
186
|
-
then ask for the other node objects **as typed free-text, not multiple-choice** — phrase it around
|
|
187
|
-
the chosen root, e.g.:
|
|
188
|
-
> Any other node objects besides `<root object>`? Enter the object API names, comma-separated —
|
|
189
|
-
> or leave it blank / say "none" if there aren't any.
|
|
190
|
-
This is **skippable**: a blank / "none" answer means `nodeList` holds just the root object's entry
|
|
191
|
-
(a valid single-object hierarchy). **Validate each typed object against the org's schema — standard
|
|
192
|
-
or custom** (split on commas, trim, and confirm each exists via `EntityDefinition`/describe).
|
|
193
|
-
Standard objects like Account, Contact, FinancialAccount, PartyRelationshipGroup, Opportunity, Case,
|
|
194
|
-
BranchUnit, FinancialDeal, Product2, InsurancePolicy, and Lead are the common choices, but **custom
|
|
195
|
-
objects (`__c`) are fully supported** — never reject one just for being custom. **Reject and re-ask
|
|
196
|
-
anything that doesn't exist in the org** (report which one); don't silently drop it.
|
|
197
|
-
For the root object, and then for **each** node object as it's selected, gather that object's
|
|
198
|
-
display fields → `graphViewFields` + `gridViewFields` for its `nodeList` entry (`entityApiName`,
|
|
199
|
-
`graphViewFields`, `gridViewFields`).
|
|
200
|
-
**Ask the graph-view and grid-view fields as TWO SEPARATE questions** — the two lists can differ,
|
|
201
|
-
so don't fold them into one prompt.
|
|
202
|
-
|
|
203
|
-
**Present each as a real interactive multi-select picker, NOT a static markdown list and NOT bare
|
|
204
|
-
free-text — and never fold the "any other fields" escape into the picker itself.** You already have
|
|
205
|
-
to `describe` the object to validate the fields (below), so use that same describe to *offer* fields
|
|
206
|
-
as genuine selectable options (e.g. via the host's actual multi-select question tool) instead of
|
|
207
|
-
dumping a list of field names as text or making the admin recall API names cold. Because an object
|
|
208
|
-
can have dozens/hundreds of fields — including **custom** ones — you can't list them all, so build
|
|
209
|
-
the picker like this, **identically for every node — the root object and every other node object
|
|
210
|
-
alike**:
|
|
211
|
-
- Offer exactly **3 shortlisted fields** — the object's own likely display fields pulled from the
|
|
212
|
-
describe (common, human-meaningful fields for that object — e.g. for Account: `Industry`, `Type`,
|
|
213
|
-
`AnnualRevenue`; for Contact: `Title`, `Department`, `Email`) — as the picker's selectable options.
|
|
214
|
-
On a **custom object** the shortlist is built the same way from *its* describe (its own `__c`
|
|
215
|
-
fields are perfectly valid display fields — surface the meaningful ones rather than leaving the
|
|
216
|
-
shortlist empty).
|
|
217
|
-
- **Do not add an "Enter my own" option inside the picker.** A picker option that's really an
|
|
218
|
-
invitation to type free text is a *dead option* — the exact anti-pattern the free-text-input rule
|
|
219
|
-
at the top of this skill already forbids (selecting it captures the literal label, not what the
|
|
220
|
-
admin meant to type). Instead, **immediately after the picker answer comes back, ask a separate,
|
|
221
|
-
genuine free-text follow-up**: *"Any other fields for the `<view>` view on `<object>`? Enter API
|
|
222
|
-
names, comma-separated, or say none."* This is what keeps custom and related fields (`My_Field__c`,
|
|
223
|
-
`Owner.Name`, `My_Lookup__r.Name`) reachable without turning the picker into a dead-option trap.
|
|
224
|
-
**Custom fields are fully supported in both the graph view and the grid view, for the root object
|
|
225
|
-
and every other node** — validate them against the describe exactly like standard fields (see
|
|
226
|
-
below); never reject a field just because it's custom.
|
|
227
|
-
|
|
228
|
-
For the **graph view**, present the picker as a **multi-select over the 3 shortlisted fields, capped
|
|
229
|
-
at 2 picks** (the Name field always shows automatically, so the card holds Name + up to 2 more = 3
|
|
230
|
-
total):
|
|
231
|
-
> **Graph view — `<object>` (pick up to 2; Name always shows automatically):**
|
|
232
|
-
> - `<shortlisted field 1>`
|
|
233
|
-
> - `<shortlisted field 2>`
|
|
234
|
-
> - `<shortlisted field 3>`
|
|
235
|
-
|
|
236
|
-
Then, as its own separate turn: *"Any other fields for the graph view on `<object>`? Enter API
|
|
237
|
-
names, comma-separated, or say none."*
|
|
238
|
-
|
|
239
|
-
For the **grid view**, present the **same 3-option multi-select picker — same shortlist — but with
|
|
240
|
-
NO cap** (pick as many of the 3 as they want). This list can differ from the graph view, so ask it as
|
|
241
|
-
its own distinct question:
|
|
242
|
-
> **Grid view — `<object>` (pick as many as you want):**
|
|
243
|
-
> - `<shortlisted field 1>`
|
|
244
|
-
> - `<shortlisted field 2>`
|
|
245
|
-
> - `<shortlisted field 3>`
|
|
246
|
-
|
|
247
|
-
Then, as its own separate turn: *"Any other fields for the grid view on `<object>`? Enter API names,
|
|
248
|
-
comma-separated, or say none."*
|
|
249
|
-
|
|
250
|
-
**Graph-view hard cap: at most 2 fields in `graphViewFields`.** The Name field is carried
|
|
251
|
-
separately in `nameField` and always renders, so the graph card shows Name + up to 2 more (3 total).
|
|
252
|
-
If the admin types more than 2 for the graph view, **warn them that the graph is limited to 2 (plus
|
|
253
|
-
the auto-shown Name), show the first 2 you would keep as the default, and ask whether they want to
|
|
254
|
-
change the selection** rather than silently proceeding. Phrase it as a proceed-or-modify prompt —
|
|
255
|
-
e.g. *"Heads-up: the graph view is capped at 2 fields (plus Name, which always shows). You picked
|
|
256
|
-
`<N>`, so I'll go with `<field 1>` and `<field 2>` and drop `<the rest>`. Keep these two, or pick a
|
|
257
|
-
different two?"* — and **default to proceeding with those first 2**; only re-collect if the admin
|
|
258
|
-
says they want to change it. Never silently truncate without this warning, and never re-collect
|
|
259
|
-
without offering the keep-these default. If they include the Name field itself among the 2, it lives
|
|
260
|
-
in `nameField`, so don't count or duplicate it.
|
|
261
|
-
**The grid view has no such limit** — `gridViewFields` can hold as many as they want.
|
|
262
|
-
`nameField` is **mandatory on every node and set automatically** from the object's standard name
|
|
263
|
-
field (`Name`, or `CaseNumber` for Case) — don't ask for it; if the admin also lists the name field
|
|
264
|
-
among their view fields, keep it in `nameField` and don't duplicate it.
|
|
265
|
-
`showRelatedContacts` is **asked only for the `Account` object** ("Should Account nodes show
|
|
266
|
-
related contacts?"); for every other object don't ask — default it to `false`.
|
|
267
|
-
**Validate every typed field against that object's live schema before deploying — this is
|
|
268
|
-
mandatory, not optional, precisely because the input is free-text.** Describe the object (e.g. `sf
|
|
269
|
-
sobject describe` / `EntityDefinition` + `FieldDefinition`) and confirm each named field actually
|
|
270
|
-
exists on it. Fields may be:
|
|
271
|
-
- **direct standard** — `Name`, `Industry`, `AnnualRevenue`;
|
|
272
|
-
- **custom** — anything ending in `__c` (e.g. `My_Custom_Field__c`). **Custom fields are fully
|
|
273
|
-
supported** — validate them against the describe exactly like standard fields; never reject a
|
|
274
|
-
field just because it's custom;
|
|
275
|
-
- **dotted relationship paths** — standard (`Owner.Name`, `Account.AccountNumber`) **or custom
|
|
276
|
-
relationships** ending in `__r` (e.g. `My_Lookup__r.Name`). Resolve a dotted path by traversing
|
|
277
|
-
the relationship: confirm the relationship (`Owner` / `Account` / `My_Lookup__r`) exists on the
|
|
278
|
-
starting object, then confirm the trailing field exists on the related object.
|
|
279
|
-
|
|
280
|
-
**Normalize the self-object prefix — don't reject it.** Admins frequently type a field on the
|
|
281
|
-
node object *itself* with the object name prefixed, e.g. `Account.Type` while configuring the
|
|
282
|
-
`Account` node, or `Case.CreatedDate` on the `Case` node. That's not a relationship path — it's the
|
|
283
|
-
object's own `Type`/`CreatedDate` field. **When the leading segment equals the node object's own
|
|
284
|
-
API name, strip it** and validate/emit the bare field (`Account.Type` → `Type`); mention that you
|
|
285
|
-
normalized it. Only treat a dotted path as a real relationship traversal when the leading segment is
|
|
286
|
-
a *relationship* on the object (`Owner`, `Account` on Contact, a `__r`), not the object's own name.
|
|
287
|
-
Split the comma-separated input, trim each entry, and validate each one. **Reject and re-ask any
|
|
288
|
-
field that doesn't resolve** (report which one and why — "no such field `Foo` on `Account`"); don't
|
|
289
|
-
silently drop it and don't deploy a config containing an unvalidated field. Echo back the validated
|
|
290
|
-
field list before building the payload. Then ask **"Do you want to define node relationships? (Skip if not.)"** —
|
|
291
|
-
**opt-in and skippable**: if the admin declines, `relationshipList` stays empty `[]` (the common
|
|
292
|
-
case). **The ASK itself is not optional — it must be its own standalone message with an explicit
|
|
293
|
-
answer, never inferred from silence or from moving on to the next topic.** Confirmed live: a run
|
|
294
|
-
built the node list and display fields, then moved straight into the next phase without ever asking
|
|
295
|
-
this question at all — that is not the same as the admin declining, and `relationshipList` being
|
|
296
|
-
empty because of it is a bug, not the documented common case. Only if they opt in, gather **each
|
|
297
|
-
relationship** through six questions — **present every one as a multiple-choice question so the
|
|
298
|
-
admin can only pick a legal value, never free-text**:
|
|
299
|
-
- **Parent Node Object** → `parentNodeEntityApiName`. **Choices = the objects already in
|
|
300
|
-
`nodeList`** (the root + node objects chosen above) — not the full supported-object set.
|
|
301
|
-
- **Child Node Object** → `childNodeEntityApiName`. **Choices = the objects already in `nodeList`.**
|
|
302
|
-
- **Junction Object** → `junctionObjectProperties.junctionEntityApiName`. **First check whether any
|
|
303
|
-
real junction is even available before offering this path.** A valid junction is an object the
|
|
304
|
-
user can read that carries lookup fields pointing at **both** the chosen Parent Node Object **and**
|
|
305
|
-
the chosen Child Node Object — nothing else can serve as a junction. So, once parent and child are
|
|
306
|
-
picked, query the org's accessible entities and their lookup fields (e.g. `EntityDefinition` +
|
|
307
|
-
`FieldDefinition`/describe, filtering `ReferenceTo` for the parent and child objects) and build the
|
|
308
|
-
candidate list from only the objects that have **both** required lookups. **Choices = that
|
|
309
|
-
computed candidate list**, not the full set of readable objects. **Filter `ReferenceTo`
|
|
310
|
-
client-side, not via a SOQL WHERE-clause operator** — `contains`/`LIKE`/`INCLUDES` are not
|
|
311
|
-
confirmed to work against this field; fetch the describe/query results and check each field's
|
|
312
|
-
`ReferenceTo` list in code instead. This is one instance of a general rule for every filter this
|
|
313
|
-
skill builds: only use an operator that's actually confirmed for that field's datatype — for the
|
|
314
|
-
plain string/id fields these steps otherwise filter on (e.g. the `DeveloperName` uniqueness check),
|
|
315
|
-
that means `=`/`!=` (eq/ne) only. If a filter you need isn't confirmed-safe for a field's datatype,
|
|
316
|
-
that's a validation error — stop before firing the query and tell the admin what's blocked, rather
|
|
317
|
-
than guessing at an operator and reporting whatever error the org returns.
|
|
318
|
-
- **If one or more junction candidates exist:** ask the Junction Object question (multiple-choice
|
|
319
|
-
over the candidates), then its three field questions below.
|
|
320
|
-
- **If NO object qualifies:** the relationship **cannot be added by default** — a junction object
|
|
321
|
-
is required, so without one there is no legal relationship to capture. Do **not** fall through
|
|
322
|
-
to a direct parent→child relationship, and **do not offer to create a new custom junction
|
|
323
|
-
object** — building supporting metadata (new custom objects/fields) is out of scope for this
|
|
324
|
-
skill entirely; never present "create a new object" as an option, on this or any other path.
|
|
325
|
-
**Tell the admin why the relationship can't be added** — e.g. *"No junction object is available
|
|
326
|
-
for `<Parent>` → `<Child>` (no object you can access has lookup fields to both), so this
|
|
327
|
-
relationship can't be added."* — then give them exactly one recovery option: **name an existing
|
|
328
|
-
object** they believe qualifies, as typed free-text (e.g. *"If you know of an existing object
|
|
329
|
-
with lookups to both `<Parent>` and `<Child>`, you can type its API name — otherwise I'll drop
|
|
330
|
-
this relationship."*). Validate whatever they type the same way as the automated scan (must
|
|
331
|
-
carry lookups to both the parent and child); if it validates, treat it as the chosen junction and
|
|
332
|
-
continue to the three junction-field questions; if it doesn't validate, explain why (e.g. "no
|
|
333
|
-
lookup to `<Child>` on that object") and drop the relationship. If the admin has no such object,
|
|
334
|
-
offer to capture a **different** parent/child pair or finish (`relationshipList` may stay empty
|
|
335
|
-
`[]` if no pair has a junction). Don't silently omit any of this; state the reason so the admin
|
|
336
|
-
understands the junction path was checked and ruled out, not forgotten.
|
|
337
|
-
- **Parent Lookup field** → `junctionObjectProperties.parentFieldApiName` (choices = lookup fields
|
|
338
|
-
on the chosen junction object that reference the Parent Node Object). **State the direction in the
|
|
339
|
-
prompt so the admin can't pick it backwards:** the *parent lookup* is the junction field pointing
|
|
340
|
-
at the **parent (higher) node** — the one whose children you're expanding. The graph expands a node
|
|
341
|
-
N by finding junction rows where `parentFieldApiName = N.Id` and reading each child from
|
|
342
|
-
`childFieldApiName`, so **reversing these two inverts the entire tree** (parents render as
|
|
343
|
-
children). *Only asked when a junction was available and chosen.*
|
|
344
|
-
- **Child Lookup field** → `junctionObjectProperties.childFieldApiName` (choices = lookup fields on
|
|
345
|
-
the junction object that reference the Child Node Object). The *child lookup* points at the
|
|
346
|
-
**child (lower) node**. *Only asked when a junction was available and chosen.*
|
|
347
|
-
- **⚠️ Self-referential junctions (both lookups reference the SAME node object) — recommend the
|
|
348
|
-
correct direction, don't leave it to a coin-flip.** When the parent and child node are the same
|
|
349
|
-
object (e.g. an Account→Account hierarchy via `AccountAccountRelation`, whose `AccountId` and
|
|
350
|
-
`RelatedAccountId` both look up to `Account`), "which lookup is the parent" is genuinely ambiguous
|
|
351
|
-
and easy to reverse — a real run picked it backwards and produced an inverted tree. For these,
|
|
352
|
-
surface the FSC convention as the **recommended default** (still overridable): for
|
|
353
|
-
`AccountAccountRelation`, **parent = `AccountId`, child = `RelatedAccountId`**. This is grounded —
|
|
354
|
-
it's what the FSC "create hierarchy type" UI generates, and it matches the `HierarchyType`
|
|
355
|
-
picklist's `Child` semantics (a record `{Account, RelatedAccount, HierarchyType=Child}` means the
|
|
356
|
-
RelatedAccount is a child of the Account). Present it as *"Parent lookup — recommended `AccountId`
|
|
357
|
-
(the FSC default for Account hierarchies)"*, not as an unlabeled equal choice.
|
|
358
|
-
- **Relationship name field** → `junctionObjectProperties.titleFieldApiName` (choices = **text
|
|
359
|
-
(`string`/`textarea`) and picklist fields** on the junction object). **Always ask this — present
|
|
360
|
-
the picker; never silently default it to `Name`.** The org accepts a text OR a picklist field here
|
|
361
|
-
and **rejects reference/lookup, date, and other types** with `INVALID_FIELD_FOR_INSERT_UPDATE`
|
|
362
|
-
*"Specify a text field for Relationship Name Field"* (grounded via live Tooling-API creates on
|
|
363
|
-
`AccountAccountRelation`: `Name`/string ✅ and `HierarchyType`/picklist ✅ both created;
|
|
364
|
-
`RelatedAccountId`/reference ❌ and `EndDate`/date ❌ both rejected with that error). So build the
|
|
365
|
-
choice list from the junction object's describe **filtered to `string`/`textarea`/`picklist`
|
|
366
|
-
fields**, and never surface reference, date, number, or boolean fields as options.
|
|
367
|
-
**⚠️ Do NOT mirror the FSC UI's own "Relationship Name" dropdown — it is broader than what actually
|
|
368
|
-
deploys.** That UI dropdown also lists the junction's reference/lookup fields (on
|
|
369
|
-
`AccountAccountRelation` it shows Account, Related Account, Party Role Relationship, Related Inverse
|
|
370
|
-
Account alongside the text/picklist fields), but selecting one of those fails the create — the UI is
|
|
371
|
-
permissive, the create is not (the "a deploy result can lie" discipline, inverted). Offer only the
|
|
372
|
-
string/textarea/picklist fields. *Only asked when a junction was available and chosen.*
|
|
373
|
-
|
|
374
|
-
**A junction object is required for every relationship** — there is no direct-lookup fallback. If no
|
|
375
|
-
qualifying junction exists for the chosen parent/child pair, the relationship can't be added (see the
|
|
376
|
-
"If NO object qualifies" branch above); emit a `relationshipList` entry **only** when a junction was
|
|
377
|
-
available and chosen, carrying `parentNodeEntityApiName` + `childNodeEntityApiName` +
|
|
378
|
-
`junctionObjectProperties`.
|
|
379
|
-
**Validation (baked into the choice lists — don't relax it):** parent and child **must be objects
|
|
380
|
-
already in `nodeList`**; the junction **must be one the user has access to AND carry lookups to both
|
|
381
|
-
the parent and child** (the junction option is only offered when at least one such object exists —
|
|
382
|
-
see the pre-check above); the three junction fields must exist on the chosen junction object — and
|
|
383
|
-
the **relationship name field (`titleFieldApiName`) must be a *text* (`string`/`textarea`) or
|
|
384
|
-
*picklist* field** (the org rejects reference/lookup, date, number, etc. with "Specify a text field
|
|
385
|
-
for Relationship Name Field" — grounded by live creates: string ✅, picklist ✅, reference ❌, date ❌),
|
|
386
|
-
so its choice list is pre-filtered to string/textarea/picklist fields; note the FSC UI dropdown is
|
|
387
|
-
more permissive than the create (it lists lookup fields too), so don't copy the UI's reference entries. `summaryRollupList` is emitted as an empty array
|
|
388
|
-
`[]` in the payload (rollup is out of scope) — but it is **internal wire plumbing only: never ask
|
|
389
|
-
about it, never offer it, and never show it when echoing/summarizing the config back to the admin.**
|
|
390
|
-
The admin can't add rollups here, so surfacing an empty `summaryRollupList: []` only confuses them;
|
|
391
|
-
keep it in the deployed JSON, keep it out of everything the user sees. **Don't reconstruct the shape
|
|
392
|
-
from memory — pattern-match the validated example and the full
|
|
393
|
-
per-field input checklist in [`references/hierarchy-type-payload.md`](references/hierarchy-type-payload.md).**
|
|
394
|
-
|
|
395
|
-
**Loop — after each relationship, ask if they want to capture another.** As soon as one relationship
|
|
396
|
-
is fully captured (parent/child + the junction details), append it to `relationshipList`,
|
|
397
|
-
echo back the relationship you just recorded, and ask:
|
|
398
|
-
|
|
399
|
-
> **Captured: `<Parent>` → `<Child>` (junction via `<Junction>`).**
|
|
400
|
-
> Do you want to capture another node relationship? (Say "no" / "done" to finish.)
|
|
401
|
-
|
|
402
|
-
Keep looping through the six-question capture for each "yes"; stop only when the admin says no/done.
|
|
403
|
-
Don't assume a single relationship is the whole set, and don't ask for all relationships in one
|
|
404
|
-
prompt — capture one, confirm it, then offer to add more.
|
|
405
|
-
|
|
406
|
-
## ⚠️ Pitfall (both paths): the `flexibleHierarchy` block belongs ONLY under `graph.globalUiConfig`
|
|
407
|
-
|
|
408
|
-
The `graph` object allows exactly `rootNode` + `globalUiConfig` (`additionalProperties: false`); a
|
|
409
|
-
`flexibleHierarchy` copy placed as a sibling at the graph root is schema-invalid and trips Jackson's
|
|
410
|
-
`FAIL_ON_UNKNOWN_PROPERTIES`. Some exported/hand-authored configs carry this redundant top-level copy
|
|
411
|
-
— strip it before deploying.
|
|
412
|
-
|
|
413
|
-
## Defaults that don't need to be asked
|
|
414
|
-
|
|
415
|
-
`isActive` = `true` (the type goes live immediately), and `graphType` = the fixed constant
|
|
416
|
-
`FlexibleHierarchy`. The component's `RootObject` field is system-derived from
|
|
417
|
-
`rootNode.object.entity` — never set it directly. `isTemplate` is the one exception in this
|
|
418
|
-
section — it's asked (see the template question above), defaulting to `false` only when skipped or
|
|
419
|
-
declined, not asked-and-answered.
|
|
420
|
-
|
|
421
|
-
## Deploy + verify
|
|
422
|
-
|
|
423
|
-
**Confirm right before the deploy — one explicit go-ahead immediately before the write.** Once the
|
|
424
|
-
component is assembled (Path A's reconciled config or Path B's built graph), show the admin what's
|
|
425
|
-
about to be deployed — the hierarchy-type name (`masterLabel`) and root object — and ask for a
|
|
426
|
-
go-ahead just before deploying:
|
|
427
|
-
|
|
428
|
-
> Ready to deploy the `<name>` hierarchy type (root object `<object>`). Deploy it now? (yes / no)
|
|
429
|
-
|
|
430
|
-
Deploy only on *yes*. This confirm is **specific to this final write** — it's the one gate in Step 9,
|
|
431
|
-
placed immediately before the `RelationshipGraphDefinition` deploy, not a re-confirmation of the name
|
|
432
|
-
or config questions already answered above. (Don't surface `summaryRollupList` or other internal wire
|
|
433
|
-
plumbing in this summary — name + root object is what the admin decides on.)
|
|
434
|
-
|
|
435
|
-
On *yes*, create the component via **MDAPI deploy** (`sf project deploy start --source-dir <path>
|
|
436
|
-
--api-version <org's max>`) against a
|
|
437
|
-
`relationshipGraphDefinitions/<DeveloperName>.relationshipGraphDefinition-meta.xml`
|
|
438
|
-
component — **not** the Tooling API POST, which fails unreliably for `GraphType: "FlexibleHierarchy"`
|
|
439
|
-
(see the transport note above). Don't PUT either (that facet's PUT is update-only for this type and
|
|
440
|
-
400s on a genuinely new `DeveloperName`). **Always deploy at the org's highest supported API version**
|
|
441
|
-
— see the transport note above for why a lower/default version can produce the same
|
|
442
|
-
"don't have access to Graph Type FlexibleHierarchy" error as a genuine permission gap. Then read back to confirm the record exists. **Read back
|
|
443
|
-
with queryable columns only:**
|
|
444
|
-
`RelationshipGraphDefinition` exposes just `Id`, `IsDeleted`, `DeveloperName`, `Language`,
|
|
445
|
-
`MasterLabel`, `NamespacePrefix`, and the audit fields — **`GraphType`, `RootObject`, and `IsActive`
|
|
446
|
-
are NOT queryable** (they live inside `relationshipGraphDefVersions`/`graphDefinition`) and a
|
|
447
|
-
`SELECT`/`WHERE` on them fails with `INVALID_FIELD` (confirmed against a live org). Use
|
|
448
|
-
`SELECT Id, DeveloperName, MasterLabel FROM RelationshipGraphDefinition WHERE DeveloperName='<Name>'`.
|
|
449
|
-
([Help: create hierarchy types](https://help.salesforce.com/s/articleView?id=ind.fsc_flexible_hierarchies_create_hierarchy_types.htm))
|
|
450
|
-
|
|
451
|
-
## End state
|
|
452
|
-
|
|
453
|
-
A `RelationshipGraphDefinition` component for the confirmed hierarchy type (from the admin's own
|
|
454
|
-
config or one built with them) created via MDAPI deploy and confirmed present by read-back.
|
|
455
|
-
|
|
456
|
-
<!-- skill-validate: ignore-start -->
|
|
457
|
-
<!-- codey:operations start -->
|
|
458
|
-
## Operations Reference
|
|
459
|
-
|
|
460
|
-
Operations this skill uses — routing and dependency reference.
|
|
461
|
-
|
|
462
|
-
| Operation | Purpose | Status | Call | Depends on |
|
|
463
|
-
|-----------|---------|--------|------|------------|
|
|
464
|
-
| `step-1-validate-root-object` | discovery | — | `GET /services/data/v66.0/sobjects/EntityDefinition/describe` | — |
|
|
465
|
-
| `step-2-check-developer-name-uniqueness` | discovery | — | `GET /services/data/v66.0/query` | `step-1-validate-root-object` |
|
|
466
|
-
| `step-3-validate-node-objects-and-fields` | discovery | — | `GET /services/data/v66.0/sobjects/{object}/describe` | `step-1-validate-root-object` |
|
|
467
|
-
| `step-4-resolve-junction-candidates` | discovery | — | `GET /services/data/v66.0/query` | `step-3-validate-node-objects-and-fields` |
|
|
468
|
-
| `step-5-deploy-relationship-graph-definition` | write | — | `/headless/metadata` | `step-2-check-developer-name-uniqueness`, `step-3-validate-node-objects-and-fields`, `step-4-resolve-junction-candidates` |
|
|
469
|
-
| `step-6-verify-relationship-graph-definition` | verify | — | `GET /services/data/v66.0/query` | `step-5-deploy-relationship-graph-definition` |
|
|
470
|
-
<!-- codey:operations end -->
|
|
471
|
-
<!-- skill-validate: ignore-end -->
|