@salesforce/afv-skills 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/package.json +4 -4
  2. package/skills/agentforce-development/SKILL.md +427 -0
  3. package/skills/agentforce-development/assets/README-legacy.md +89 -0
  4. package/skills/agentforce-development/assets/agent-spec-template.md +90 -0
  5. package/skills/agentforce-development/assets/agents/README.md +45 -0
  6. package/skills/agentforce-development/assets/agents/hello-world.agent +60 -0
  7. package/skills/agentforce-development/assets/agents/multi-topic.agent +105 -0
  8. package/skills/agentforce-development/assets/agents/production-faq.agent +101 -0
  9. package/skills/agentforce-development/assets/agents/production-faq.bundle-meta.xml +4 -0
  10. package/skills/agentforce-development/assets/agents/simple-qa.agent +72 -0
  11. package/skills/agentforce-development/assets/apex/models-api-queueable.cls +225 -0
  12. package/skills/agentforce-development/assets/bundle-meta.xml +23 -0
  13. package/skills/agentforce-development/assets/components/apex-action.agent +52 -0
  14. package/skills/agentforce-development/assets/components/error-handling.agent +58 -0
  15. package/skills/agentforce-development/assets/components/escalation-setup.agent +169 -0
  16. package/skills/agentforce-development/assets/components/flow-action.agent +66 -0
  17. package/skills/agentforce-development/assets/components/n-ary-conditions.agent +110 -0
  18. package/skills/agentforce-development/assets/components/topic-with-actions.agent +40 -0
  19. package/skills/agentforce-development/assets/deterministic-routing.agent +166 -0
  20. package/skills/agentforce-development/assets/escalation-pattern.agent +209 -0
  21. package/skills/agentforce-development/assets/flow-action-lookup.agent +115 -0
  22. package/skills/agentforce-development/assets/hub-and-spoke.agent +104 -0
  23. package/skills/agentforce-development/assets/invocable-apex-template.cls +187 -0
  24. package/skills/agentforce-development/assets/local-info-agent-annotated.agent +355 -0
  25. package/skills/agentforce-development/assets/metadata/basic-prompt-template.promptTemplate-meta.xml +109 -0
  26. package/skills/agentforce-development/assets/metadata/genai-function-apex.xml +92 -0
  27. package/skills/agentforce-development/assets/metadata/genai-function-flow.xml +57 -0
  28. package/skills/agentforce-development/assets/metadata/genai-plugin.xml +72 -0
  29. package/skills/agentforce-development/assets/metadata/http-callout-flow.flow-meta.xml +348 -0
  30. package/skills/agentforce-development/assets/metadata/record-grounded-prompt.promptTemplate-meta.xml +136 -0
  31. package/skills/agentforce-development/assets/minimal-starter.agent +42 -0
  32. package/skills/agentforce-development/assets/patterns/README.md +254 -0
  33. package/skills/agentforce-development/assets/patterns/action-callbacks.agent +178 -0
  34. package/skills/agentforce-development/assets/patterns/advanced-input-bindings.agent +141 -0
  35. package/skills/agentforce-development/assets/patterns/bidirectional-routing.agent +156 -0
  36. package/skills/agentforce-development/assets/patterns/critical-input-collection.agent +244 -0
  37. package/skills/agentforce-development/assets/patterns/delegation-routing.agent +89 -0
  38. package/skills/agentforce-development/assets/patterns/lifecycle-events.agent +127 -0
  39. package/skills/agentforce-development/assets/patterns/llm-controlled-actions.agent +184 -0
  40. package/skills/agentforce-development/assets/patterns/multi-step-workflow.agent +282 -0
  41. package/skills/agentforce-development/assets/patterns/open-gate-routing.agent +286 -0
  42. package/skills/agentforce-development/assets/patterns/procedural-instructions.agent +273 -0
  43. package/skills/agentforce-development/assets/patterns/prompt-template-action.agent +188 -0
  44. package/skills/agentforce-development/assets/patterns/system-instruction-overrides.agent +293 -0
  45. package/skills/agentforce-development/assets/prompt-rag-search.agent +131 -0
  46. package/skills/agentforce-development/assets/template-multi-topic.agent +160 -0
  47. package/skills/agentforce-development/assets/template-single-topic.agent +81 -0
  48. package/skills/agentforce-development/assets/verification-gate.agent +208 -0
  49. package/skills/agentforce-development/references/action-prompt-templates.md +164 -0
  50. package/skills/agentforce-development/references/actions-reference.md +592 -0
  51. package/skills/agentforce-development/references/agent-access-guide.md +72 -0
  52. package/skills/agentforce-development/references/agent-design-and-spec-creation.md +1010 -0
  53. package/skills/agentforce-development/references/agent-metadata-and-lifecycle.md +575 -0
  54. package/skills/agentforce-development/references/agent-script-core-language.md +1218 -0
  55. package/skills/agentforce-development/references/agent-topic-map-diagrams.md +323 -0
  56. package/skills/agentforce-development/references/agent-user-setup.md +526 -0
  57. package/skills/agentforce-development/references/agent-validation-and-debugging.md +803 -0
  58. package/skills/agentforce-development/references/known-issues.md +353 -0
  59. package/skills/agentforce-development/references/minimal-examples.md +67 -0
  60. package/skills/agentforce-development/references/production-gotchas.md +279 -0
  61. package/skills/agentforce-development/references/salesforce-cli-for-agents.md +393 -0
  62. package/skills/agentforce-development/references/version-history.md +23 -0
  63. package/skills/generate-permission-set/SKILL.md +174 -0
  64. package/skills/salesforce-custom-application/SKILL.md +1 -2
  65. package/skills/salesforce-custom-field/SKILL.md +0 -4
  66. package/skills/salesforce-custom-tab/SKILL.md +84 -8
  67. package/skills/salesforce-experience-lwr-site/SKILL.md +196 -0
  68. package/skills/salesforce-experience-lwr-site/docs/bootstrap-template-byo-lwr.md +224 -0
  69. package/skills/salesforce-experience-lwr-site/docs/configure-content-brandingSet.md +131 -0
  70. package/skills/salesforce-experience-lwr-site/docs/configure-content-route.md +232 -0
  71. package/skills/salesforce-experience-lwr-site/docs/configure-content-themeLayout.md +141 -0
  72. package/skills/salesforce-experience-lwr-site/docs/configure-content-view.md +233 -0
  73. package/skills/salesforce-experience-lwr-site/docs/configure-guest-sharing-rules.md +42 -0
  74. package/skills/salesforce-experience-lwr-site/docs/handle-component-and-region-ids.md +27 -0
  75. package/skills/salesforce-experience-lwr-site/docs/handle-ui-components.md +215 -0
  76. package/skills/salesforce-flow/SKILL.md +2 -2
  77. package/skills/salesforce-fragment/SKILL.md +85 -10
  78. package/skills/salesforce-lightning-app-build/SKILL.md +102 -10
  79. package/skills/apex-class/SKILL.md +0 -253
  80. package/skills/apex-class/examples/AccountDeduplicationBatch.cls +0 -148
  81. package/skills/apex-class/examples/AccountSelector.cls +0 -193
  82. package/skills/apex-class/examples/AccountService.cls +0 -201
  83. package/skills/apex-class/templates/abstract.cls +0 -128
  84. package/skills/apex-class/templates/batch.cls +0 -125
  85. package/skills/apex-class/templates/domain.cls +0 -102
  86. package/skills/apex-class/templates/dto.cls +0 -108
  87. package/skills/apex-class/templates/exception.cls +0 -51
  88. package/skills/apex-class/templates/interface.cls +0 -25
  89. package/skills/apex-class/templates/queueable.cls +0 -92
  90. package/skills/apex-class/templates/schedulable.cls +0 -75
  91. package/skills/apex-class/templates/selector.cls +0 -92
  92. package/skills/apex-class/templates/service.cls +0 -69
  93. package/skills/apex-class/templates/utility.cls +0 -97
  94. package/skills/apex-test-class/SKILL.md +0 -101
  95. package/skills/apex-test-class/references/assertion-patterns.md +0 -209
  96. package/skills/apex-test-class/references/async-testing.md +0 -276
  97. package/skills/apex-test-class/references/mocking-patterns.md +0 -219
  98. package/skills/apex-test-class/references/test-data-factory.md +0 -176
  99. package/skills/deployment-readiness-check/SKILL.md +0 -257
  100. package/skills/deployment-readiness-check/assets/deployment_checklist.md +0 -286
  101. package/skills/deployment-readiness-check/references/rollback_procedures.md +0 -308
  102. package/skills/deployment-readiness-check/scripts/check_metadata.sh +0 -207
  103. package/skills/salesforce-experience-site/SKILL.md +0 -178
@@ -0,0 +1,224 @@
1
+ # Build Your Own (LWR) Template
2
+
3
+ **Use when** creating a new site or retrieving default values for site metadata.
4
+
5
+ ## Table of Contents
6
+
7
+ - Bootstrap Options
8
+ - Default Values Reference
9
+
10
+ ## Bootstrap Options
11
+
12
+ **IMPORTANT**: First site setup initializes services. Warn user - recommend Option 1 for first site.
13
+
14
+ Ask user to choose:
15
+
16
+ 1. Create in org, then download metadata
17
+ 2. Scaffold locally before deploying
18
+
19
+ ### Option 1: Create in Org
20
+
21
+ ```bash
22
+ sf community create --name "{siteName}" --template-name 'Build Your Own (LWR)' --url-path-prefix "{prefix}"
23
+ ```
24
+
25
+ After creation, retrieve metadata using sf CLI.
26
+
27
+ ### Option 2: Scaffold Locally
28
+
29
+ ```bash
30
+ sf template generate digital-experience site --name "{siteName}" --template-name 'Build Your Own (LWR)' --url-path-prefix "{prefix}"
31
+ ```
32
+
33
+ Generates metadata with defaults: DigitalExperienceConfig, DigitalExperiences, Network, CustomSite, and content (route, view, themeLayout, etc.).
34
+
35
+ #### Post-Creation Config
36
+
37
+ After site metadata is generated, use MCP tool `execute_metadata_action` to fetch additional information about the template:
38
+
39
+ ```json
40
+ {
41
+ "metadataType": "ExperienceSiteLwr",
42
+ "actionName": "getSiteTemplateMetadata",
43
+ "parameters": { "templateDevName": "talon-template-byo" }
44
+ }
45
+ ```
46
+
47
+ If result provides `disabledViews`, delete both view and route directories.
48
+
49
+ **Example**: If `disabledViews` includes "tooManyRequests":
50
+
51
+ - Delete: `digitalExperiences/site/{siteDevName}/sfdc_cms__view/tooManyRequests/`
52
+ - Delete: `digitalExperiences/site/{siteDevName}/sfdc_cms__route/Too_Many_Requests/`
53
+
54
+ ---
55
+
56
+ ## Default Values Reference
57
+
58
+ **Note**: CLI generates these. Listed for reference only - use CLI first.
59
+
60
+ ### Metadata Defaults
61
+
62
+ **DigitalExperienceConfig**:
63
+
64
+ ```yaml
65
+ label: {siteName}
66
+ urlPathPrefix: {siteUrlPathPrefix}
67
+ space: site/{siteName}1
68
+ ```
69
+
70
+ **DigitalExperienceBundle**:
71
+
72
+ ```yaml
73
+ label: {siteName}1
74
+ modules: [sfdc_cms__collection, sfdc_cms__mobilePublisherConfig]
75
+ ```
76
+
77
+ **Network**:
78
+
79
+ ```yaml
80
+ allowInternalUserLogin: false
81
+ allowMembersToFlag: false
82
+ changePasswordTemplate: unfiled$public/CommunityChangePasswordEmailTemplate
83
+ disableReputationRecordConversations: true
84
+ emailSenderAddress: {adminEmailAddress}
85
+ emailSenderName: {siteName}
86
+ embeddedLoginEnabled: false
87
+ enableApexCDNCaching: true
88
+ enableCustomVFErrorPageOverrides: false
89
+ enableDirectMessages: true
90
+ enableExpFriendlyUrlsAsDefault: false
91
+ enableExperienceBundleBasedSnaOverrideEnabled: true
92
+ enableGuestChatter: false
93
+ enableGuestFileAccess: false
94
+ enableGuestMemberVisibility: false
95
+ enableImageOptimizationCDN: true
96
+ enableInvitation: false
97
+ enableKnowledgeable: false
98
+ enableLWRExperienceConnectedApp: true
99
+ enableMemberVisibility: false
100
+ enableNicknameDisplay: true
101
+ enablePrivateMessages: false
102
+ enableReputation: false
103
+ enableShowAllNetworkSettings: false
104
+ enableSiteAsContainer: true
105
+ enableTalkingAboutStats: true
106
+ enableTopicAssignmentRules: true
107
+ enableTopicSuggestions: false
108
+ enableUpDownVote: false
109
+ forgotPasswordTemplate: unfiled$public/CommunityForgotPasswordEmailTemplate
110
+ gatherCustomerSentimentData: false
111
+ headlessForgotPasswordTemplate: unfiled$public/CommunityHeadlessForgotPasswordTemplate
112
+ headlessRegistrationTemplate: unfiled$public/CommunityHeadlessRegistrationTemplate
113
+ networkMemberGroups:
114
+ - profile: admin
115
+ networkPageOverrides:
116
+ - changePasswordPageOverrideSetting: Standard
117
+ - forgotPasswordPageOverrideSetting: Designer
118
+ - homePageOverrideSetting: Designer
119
+ - loginPageOverrideSetting: Designer
120
+ - selfRegProfilePageOverrideSetting: Designer
121
+ newSenderAddress: admin@company.com
122
+ picassoSite: {siteName}1
123
+ selfRegistration: false
124
+ sendWelcomeEmail: true
125
+ site: {siteName}
126
+ siteArchiveStatus: NotArchived
127
+ status: UnderConstruction
128
+ tabs:
129
+ - defaultTab: home
130
+ - standardTab: Chatter
131
+ urlPathPrefix: {siteUrlPathPrefix}vforcesite
132
+ welcomeTemplate: unfiled$public/CommunityWelcomeEmailTemplate
133
+ ```
134
+
135
+ **CustomSite**:
136
+
137
+ ```yaml
138
+ active: true
139
+ allowGuestPaymentsApi: false
140
+ allowHomePage: false
141
+ allowStandardAnswersPages: false
142
+ allowStandardIdeasPages: false
143
+ allowStandardLookups: false
144
+ allowStandardPortalPages: true
145
+ allowStandardSearch: false
146
+ authorizationRequiredPage: CommunitiesLogin
147
+ bandwidthExceededPage: BandwidthExceeded
148
+ browserXssProtection: true
149
+ cachePublicVisualforcePagesInProxyServers: true
150
+ clickjackProtectionLevel: SameOriginOnly
151
+ contentSniffingProtection: true
152
+ enableAuraRequests: true
153
+ fileNotFoundPage: FileNotFound
154
+ genericErrorPage: Exception
155
+ inMaintenancePage: InMaintenance
156
+ indexPage: CommunitiesLanding
157
+ masterLabel: {siteName}
158
+ redirectToCustomDomain: false
159
+ referrerPolicyOriginWhenCrossOrigin: true
160
+ selfRegPage: CommunitiesSelfReg
161
+ siteType: ChatterNetwork
162
+ urlPathPrefix: {siteUrlPathPrefix}vforcesite
163
+ ```
164
+
165
+ ### Content Defaults
166
+
167
+ apiNames and other metadata of site contents:
168
+
169
+ **sfdc_cms__appPage**:
170
+
171
+ - mainAppPage
172
+
173
+ **sfdc_cms__brandingSet**:
174
+
175
+ - Build_Your_Own_LWR
176
+
177
+ **sfdc_cms__languageSettings**:
178
+
179
+ - languages
180
+
181
+ **sfdc_cms__mobilePublisherConfig**:
182
+
183
+ - mobilePublisherConfig
184
+
185
+ **sfdc_cms__theme**:
186
+
187
+ - Build_Your_Own_LWR
188
+
189
+ **sfdc_cms__route**:
190
+
191
+ | Route | apiName | routeType | urlPrefix | urlName | viewId | configurationTags |
192
+ |-------|---------|-----------|-----------|---------|--------|-------------------|
193
+ | Home | Home | home | "" | home | home | |
194
+ | Login | Login | login-main | login | login | login | |
195
+ | Register | Register | self-register | SelfRegister | register | register | |
196
+ | Forgot_Password | Forgot_Password | forgot-password | ForgotPassword | forgot-password | forgotPassword | |
197
+ | Check_Password | Check_Password | check-password | CheckPasswordResetEmail | check-password | checkPasswordResetEmail | |
198
+ | Error | Error | error | error | error | error | |
199
+ | Service_Not_Available | Service_Not_Available | service-not-available | service-not-available | service-not-available | serviceNotAvailable | allow-in-static-site |
200
+ | Too_Many_Requests | Too_Many_Requests | too-many-requests | too-many-requests | too-many-requests | tooManyRequests | too-many-requests, allow-in-static-site |
201
+ | News_Detail__c | News_Detail__c | managed-content-sfdc_cms__news | news | news-detail | newsDetail | |
202
+
203
+ **sfdc_cms__view**:
204
+
205
+ | View | apiName | viewType | urlName | themeLayoutType |
206
+ |------|---------|----------|---------|-----------------|
207
+ | home | home | home | home | Inner |
208
+ | login | login | login-main | login | Inner |
209
+ | register | register | self-register | register | Inner |
210
+ | forgotPassword | forgotPassword | forgot-password | forgot-password | Inner |
211
+ | checkPasswordResetEmail | checkPasswordResetEmail | check-password | check-password | Inner |
212
+ | error | error | error | error | Inner |
213
+ | serviceNotAvailable | serviceNotAvailable | service-not-available | service-not-available | ServiceNotAvailable |
214
+ | tooManyRequests | tooManyRequests | too-many-requests | too-many-requests | ServiceNotAvailable |
215
+ | newsDetail | newsDetail | managed-content-sfdc_cms__news | news-detail | Inner |
216
+
217
+ **sfdc_cms__site**:
218
+
219
+ - {siteName}1
220
+
221
+ **sfdc_cms__themeLayout**:
222
+
223
+ - scopedHeaderAndFooter
224
+ - snaThemeLayout
@@ -0,0 +1,131 @@
1
+ # Content Type: sfdc_cms__brandingSet
2
+
3
+ **Use when** user explicitly requests creating/updating branding set.
4
+
5
+ ## Table of Contents
6
+
7
+ - Core Principles
8
+ - Generation Guidelines
9
+ - Branding Property Patterns
10
+
11
+ ## Core Principles
12
+
13
+ 1. **Purpose**: Manage site-wide branding properties (colors, fonts, etc.).
14
+ 2. **Site Association**: Branding sets are linked to the site configuration.
15
+
16
+ ## Generation Guidelines
17
+
18
+ ### 1. Directory Structure
19
+
20
+ 1. **Location**: `digitalExperiences/site/[SITE_NAME]/sfdc_cms__brandingSet/[BRANDING_SET_NAME]/`
21
+ 2. **Required Files**:
22
+ - `_meta.json` - Metadata file defining the API name and type
23
+ - `content.json` - Content file defining the configuration and layout
24
+ 3. **Naming Convention**: Underscore-separated names (e.g., `Branding_Set`).
25
+
26
+ ### 2. _meta.json Structure
27
+
28
+ The `_meta.json` file must contain:
29
+
30
+ ```json
31
+ {
32
+ "apiName": "[BRANDING_SET_NAME]",
33
+ "type": "sfdc_cms__brandingSet",
34
+ "path": "brandingSets"
35
+ }
36
+ ```
37
+
38
+ **Rules**:
39
+
40
+ - `apiName`: Must match the directory name exactly (e.g., `Branding_Set`)
41
+
42
+ ### 3. content.json Structure
43
+
44
+ The `content.json` file must contain:
45
+
46
+ ```json
47
+ {
48
+ "type": "sfdc_cms__brandingSet",
49
+ "title": "[DISPLAY_TITLE]",
50
+ "contentBody": {},
51
+ "urlName": "[URL_NAME]"
52
+ }
53
+ ```
54
+
55
+ **Field Definitions**:
56
+
57
+ - `type`: **Required**. Represents the content type. The only supported value is `"sfdc_cms__brandingSet"`.
58
+ - `title`: **Required**. Human-readable display title (e.g., Branding Set).
59
+ - Maximum length is **100 characters**.
60
+ - Must be **unique** within the space's brandingSet content items.
61
+ - `contentBody`: Include all `required` properties from `schemaDefinition`. Use `examplesOfContentType` for reference.
62
+ - `brandingSetType`: Represents whether the color palette is for the entire site or a specific section.
63
+ - `APP`: The branding set applies to the entire site. There can be only one branding set of this type.
64
+ - `SCOPED`: A `SCOPED` branding set can be applied only to a section component for granular overrides.
65
+ - `definitionName`: **Required**. Represents the name for the branding set used in the site or template’s theme.
66
+ - **Build Your Own (LWR)**: uses `talon-template-byo:branding`
67
+ - **Microsite**: uses `microsite-template-marketing:branding`
68
+ - `values`: **Required**. Represents a map (object) of branding values (colors, fonts, etc.) that can be applied to a site.
69
+ - **Format**: An object containing key-value pairs that represent branding-set values.
70
+ - **Patterns**: See the "Branding Property Patterns" section for details on value relationships.
71
+ - `urlName`: Lowercase with hyphens (e.g., `branding-set`)
72
+
73
+ **Rules**:
74
+
75
+ - Before any actions, *always* call `execute_metadata_action` to get the full schema and examples per the skill document.
76
+
77
+ ### 4. Naming Conventions Summary
78
+
79
+ | Field | Format | Example |
80
+ |-------|--------|--------|
81
+ | Directory/apiName | Underscore-separated | `Branding_Set` |
82
+ | title | Human-readable | `Branding Set` |
83
+ | urlName | Lowercase-hyphens | `build-your-own-lwr` |
84
+
85
+ ### 5. Generation Checklist
86
+
87
+ - [ ] Directory and `_meta.json` follow naming conventions (1, 2)
88
+ - [ ] `content.json` has all required fields (3)
89
+ - [ ] `contentBody` follows the schema provided by `execute_metadata_action`
90
+
91
+ ## Branding Property Patterns
92
+
93
+ When generating or validating `contentBody.values`, follow these established patterns for consistency:
94
+
95
+ ### 1. Color Scaling Patterns (The "Rule of 3")
96
+
97
+ Salesforce uses a numeric suffix system (`Color`, `Color1`, `Color2`, `Color3`) to create a tonal palette.
98
+
99
+ - **Darkening Trend**: As the suffix number increases, the color becomes progressively darker.
100
+ - Example: `BackgroundColor` (#ffffff) → `_BackgroundColor1` (#ebebeb) → `_BackgroundColor2` (#c2c2c2) → `_BackgroundColor3` (#858585).
101
+ - **Contrast/Foreground Colors**: Every base color has a corresponding `ForegroundColor` to ensure accessibility.
102
+ - **WCAG Compliance**: Ensure a color contrast ratio of at least **4.5:1** between the background and foreground colors for standard text.
103
+ - Dark base colors usually have white (#ffffff) foregrounds.
104
+ - Light base colors (like `_NeutralColor`) usually have black (#000000) foregrounds.
105
+
106
+ ### 2. Font Size Hierarchy
107
+
108
+ - **Base vs. Small**: The `Small` variant is typically **75%** of the base size.
109
+ - Example: `BodyFontSize` (1rem) → `BodySmallFontSize` (0.75rem).
110
+ - **Heading Scale**: Headings follow a standard typographic scale:
111
+ - `HeadingExtraLarge`: 2.5rem
112
+ - `HeadingLarge`: 1.75rem (~70% of XL)
113
+ - `HeadingMedium`: 1.25rem (~50% of XL)
114
+ - `HeadingSmall`: 1.125rem
115
+
116
+ ### 3. Design Token Mapping
117
+
118
+ Prefer using **DXP Design Tokens** over hardcoded values where possible:
119
+
120
+ - **Fonts**: Use `var(--dxp-s-html-font-family)` for base, body, and button fonts.
121
+ - **Brand Alignment**: Use `var(--dxp-g-brand)` for primary brand colors and links.
122
+
123
+ ### 4. Component Consistency
124
+
125
+ - **Buttons**: Maintain consistent `BorderRadius` (e.g., 4px) across all button sizes (Small, Medium, Large).
126
+ - **Form Elements**: `FormElementLabelFontSize` and `FormElementTextFontSize` should match.
127
+
128
+ ### 5. Spacing and Ratios
129
+
130
+ - **Device Ratios**: Desktop spacing (padding/spacers) is typically **1.33x** larger than mobile spacing.
131
+ - Example: `ColumnSpacerSizeDesktop` (1rem) vs `ColumnSpacerSizeMobile` (0.75rem).
@@ -0,0 +1,232 @@
1
+ # Content Type: sfdc_cms__route
2
+
3
+ **Use when** user explicitly requests creating a new page. Not for editing existing routes.
4
+
5
+ ## Table of Contents
6
+
7
+ - Generation Guidelines
8
+ - Core Principles
9
+ - Directory Structure (All Routes)
10
+ - _meta.json Structure
11
+ - Part A: CUSTOM PAGES
12
+ - Part B: OBJECT PAGES
13
+
14
+ ## Generation Guidelines
15
+
16
+ **PAGE TYPES**: These guidelines supports two types of pages:
17
+
18
+ 1. **Custom Pages** - Single route pages for custom content (e.g., About Us). **Note**: Standard pages (e.g., Home, Login) come pre-built with the site and cannot be created.
19
+ 2. **Object Pages** - Requires 3 routes: Detail, List, and Related List (e.g., Account, custom objects)
20
+
21
+ ## Core Principles
22
+
23
+ 1. **Purpose**: Generate new routes under the `sfdc_cms__route` directory.
24
+ 2. **View Association**: Each route must reference a corresponding view in the `sfdc_cms__view` directory.
25
+ 3. **CRITICAL**: The `routeType` in the route's `content.json` MUST exactly match the `viewType` in the corresponding view's `content.json`. This is a required validation rule.
26
+
27
+ ## Directory Structure (All Routes)
28
+
29
+ 1. **Location**: `digitalExperiences/site/[SITE_NAME]/sfdc_cms__route/[ROUTE_NAME]/`
30
+ 2. **Required Files**:
31
+ - `_meta.json` - Metadata file defining the API name and type
32
+ - `content.json` - Content file defining the configuration and layout
33
+ 3. **Naming Convention**: Underscore-separated names with "__c" suffix (About_Us__c, Account_Detail__c)
34
+
35
+ ## _meta.json Structure (All Routes)
36
+
37
+ The `_meta.json` file must contain:
38
+
39
+ ```json
40
+ {
41
+ "apiName": "[ROUTE_NAME]",
42
+ "type": "sfdc_cms__route",
43
+ "path": "routes"
44
+ }
45
+ ```
46
+
47
+ **Rules**:
48
+
49
+ - `apiName`: Must match the route directory name exactly
50
+ - `type`: Always `"sfdc_cms__route"`
51
+ - `path`: Always `"routes"`
52
+
53
+ ## Part A: CUSTOM PAGES
54
+
55
+ Use this section when creating single-route custom content pages.
56
+
57
+ ### A.1. content.json Structure
58
+
59
+ The `content.json` file must contain:
60
+
61
+ ```json
62
+ {
63
+ "type": "sfdc_cms__route",
64
+ "title": "[DISPLAY_TITLE]",
65
+ "contentBody": {},
66
+ "urlName": "[URL_NAME]"
67
+ }
68
+ ```
69
+
70
+ **Field Definitions**:
71
+
72
+ - `type`: Always `"sfdc_cms__route"`
73
+ - `title`: Human-readable display title (e.g., About Us)
74
+ - `contentBody`: Include all `required` properties from `schemaDefinition`. Use `examplesOfContentType` for reference.
75
+ - `urlName`: URL identifier (lowercase with hyphens, e.g., `about-us`)
76
+
77
+ ### A.2. Naming Conventions
78
+
79
+ For a page named "About Us":
80
+
81
+ | Field | Format | Example |
82
+ |-------|--------|--------|
83
+ | Directory Name | Underscore-separated + "__c" | `About_Us__c` |
84
+ | apiName | Same as directory | `About_Us__c` |
85
+ | title | Human-readable | `About Us` |
86
+ | contentBody.activeViewId | Underscore-separated (no __c) | `About_Us` |
87
+ | contentBody.routeType | "custom-" + lowercase hyphens | `custom-about-us` |
88
+ | contentBody.urlPrefix | Lowercase hyphens | `about-us` |
89
+ | urlName | Lowercase hyphens | `about-us` |
90
+
91
+ **CRITICAL**: `routeType` MUST exactly match `viewType` in the corresponding view's `content.json`.
92
+
93
+ ### A.3. View Dependency
94
+
95
+ - Before creating a route, ensure the corresponding view exists in `sfdc_cms__view/[view_name]/`
96
+ - If the view doesn't exist, create it first following the view creation guidelines
97
+
98
+ ### A.4. Generation Checklist
99
+
100
+ - [ ] Route directory and files created (see Directory Structure)
101
+ - [ ] `_meta.json` follows structure (see _meta.json Structure)
102
+ - [ ] `content.json` follows structure (see A.1)
103
+ - [ ] All naming conventions applied (see A.2)
104
+ - [ ] Corresponding view exists (see A.3)
105
+
106
+ ## Part B: OBJECT PAGES
107
+
108
+ Use this section when creating object pages that require Detail, List, and Related List routes.
109
+
110
+ ### B.1. Overview
111
+
112
+ Object pages require **three routes** to be created together:
113
+
114
+ 1. **Detail Route** - Displays a single record
115
+ 2. **List Route** - Displays a list of records
116
+ 3. **Related List Route** - Displays related records for a parent record
117
+
118
+ **OBJECT TYPES**: Two types of Salesforce objects use different `routeType` formats:
119
+
120
+ | Object Type | routeType Format | Example |
121
+ |-------------|------------------|----------|
122
+ | **Standard** (Account, Contact) | `[type]-[keyPrefix]` | `detail-001`, `list-001`, `relatedlist-001` |
123
+ | **Custom** (Test_Object__c) | `[type]-[ObjectApiName]` | `detail-Test_Object__c`, `list-Test_Object__c` |
124
+
125
+ - **keyPrefix**: 3-character identifier unique to each standard object (Account=001, Contact=003)
126
+ - **ObjectApiName**: Custom object API name including the "__c" suffix
127
+
128
+ Obtain object information from the `objectList` MCP output:
129
+
130
+ ```json
131
+ [
132
+ ["Label", "ApiName", "KeyPrefix", "IsCustom"]
133
+ ]
134
+ ```
135
+
136
+ ### B.2. Required Routes
137
+
138
+ Create three directories under `sfdc_cms__route/`:
139
+
140
+ - `[OBJECT_NAME]_Detail__c/`
141
+ - `[OBJECT_NAME]_List__c/`
142
+ - `[OBJECT_NAME]_Related_List__c/`
143
+
144
+ ### B.3. content.json Structure
145
+
146
+ Each route's `content.json` file must contain:
147
+
148
+ ```json
149
+ {
150
+ "type": "sfdc_cms__route",
151
+ "title": "[OBJECT_NAME] [TYPE]",
152
+ "contentBody": {},
153
+ "urlName": "[object_name_lowercase]-[type]"
154
+ }
155
+ ```
156
+
157
+ **Field Definitions**:
158
+
159
+ - `type`: Always `"sfdc_cms__route"`
160
+ - `title`: Human-readable title (Account Detail, Account List)
161
+ - `contentBody`: Include all `required` properties from `schemaDefinition`. Use `examplesOfContentType` for reference.
162
+ - `contentBody.urlPrefix`: **CRITICAL**: Must be identical across all three object page views (Detail, List, and Related List) for the same object.
163
+ - `urlName`: Lowercase with hyphens (account-detail, account-list)
164
+
165
+ ### B.4. Object Page Examples
166
+
167
+ Use `[ObjectName]` as the object name (Account, Test_Object) and `[IDENTIFIER]` as:
168
+
169
+ - **Standard objects**: keyPrefix (001 for Account, 003 for Contact)
170
+ - **Custom objects**: ObjectApiName (Test_Object__c)
171
+
172
+ #### content.json Template
173
+
174
+ ```json
175
+ {
176
+ "type": "sfdc_cms__route",
177
+ "title": "[ObjectName] [Detail|List|Related List]",
178
+ "contentBody": {
179
+ "activeViewId": "[ObjectName]_[Detail|List|Related_List]",
180
+ "configurationTags": [],
181
+ "pageAccess": "UseParent",
182
+ "routeType": "[detail|list|relatedlist]-[IDENTIFIER]",
183
+ "urlPrefix": "[object-name-lowercase]"
184
+ },
185
+ "urlName": "[object-name-lowercase]-[detail|list|related-list]"
186
+ }
187
+ ```
188
+
189
+ **Rules**:
190
+
191
+ - Before any actions, *always* call `execute_metadata_action` to get the full schema and examples per the skill document.
192
+
193
+ #### routeType Examples
194
+
195
+ | Route Type | Standard (Account) | Custom (Test_Object__c) |
196
+ |------------|-------------------|------------------------|
197
+ | Detail | `detail-001` | `detail-Test_Object__c` |
198
+ | List | `list-001` | `list-Test_Object__c` |
199
+ | Related List | `relatedlist-001` | `relatedlist-Test_Object__c` |
200
+
201
+ ### B.5. Naming Conventions
202
+
203
+ For an object named "Account":
204
+
205
+ | Field | Detail | List | Related List |
206
+ |-------|--------|------|---------------|
207
+ | Directory Name | `Account_Detail__c` | `Account_List__c` | `Account_Related_List__c` |
208
+ | apiName | `Account_Detail__c` | `Account_List__c` | `Account_Related_List__c` |
209
+ | title | `Account Detail` | `Account List` | `Account Related List` |
210
+ | activeViewId | `Account_Detail` | `Account_List` | `Account_Related_List` |
211
+ | routeType (Standard) | `detail-[keyPrefix]` | `list-[keyPrefix]` | `relatedlist-[keyPrefix]` |
212
+ | routeType (Custom) | `detail-[ObjectApiName]` | `list-[ObjectApiName]` | `relatedlist-[ObjectApiName]` |
213
+ | urlPrefix | `account` | `account` | `account` |
214
+ | urlName | `account-detail` | `account-list` | `account-related-list` |
215
+
216
+ **CRITICAL**: `routeType` MUST exactly match `viewType` in the corresponding view's `content.json`.
217
+
218
+ ### B.6. View Dependency
219
+
220
+ - Before creating routes, ensure corresponding views exist in `sfdc_cms__view/`:
221
+ - `[ObjectName]_Detail/`, `[ObjectName]_List/`, `[ObjectName]_Related_List/`
222
+ - `activeViewId` must match the view directory name exactly
223
+ - `routeType` must exactly match `viewType` in the corresponding view
224
+ - If views don't exist, create them first following the view creation guidelines
225
+
226
+ ### B.7. Generation Checklist
227
+
228
+ - [ ] Object type determined (Standard or Custom) and identifier obtained (keyPrefix or ObjectApiName)
229
+ - [ ] All three routes created: **Detail**, **List**, and **Related List**, each with `_meta.json` and `content.json`
230
+ - [ ] All naming conventions applied (see B.5)
231
+ - [ ] Corresponding views exist (see B.6)
232
+ - [ ] `routeType` matches `viewType` for all three routes