@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,141 @@
1
+ # Content Type: sfdc_cms__themeLayout
2
+
3
+ **Use when** user explicitly requests creating a new layout.
4
+
5
+ ## Table of Contents
6
+
7
+ - Directory Structure
8
+ - Purpose A: Generate new theme layouts under the `sfdc_cms__themeLayout` directory.
9
+
10
+ - _meta.json Structure
11
+ - content.json Structure
12
+ - Naming Conventions
13
+ - Theme Sync After Creation
14
+ - Generation Checklist
15
+ - Purpose B: Editing existing theme layouts under the `sfdc_cms__themeLayout` directory.
16
+
17
+ ## Directory Structure
18
+
19
+ 1. **Location**: `digitalExperiences/site/[SITE_NAME]/sfdc_cms__themeLayout/[THEME_LAYOUT_NAME]/`
20
+ 2. **Required Files**:
21
+
22
+ - `_meta.json` - Metadata file defining the API name and type
23
+ - `content.json` - Content file defining the configuration and layout
24
+
25
+ ## Purpose A: Generate New Theme Layouts
26
+
27
+ **IMPORTANT**: These guidelines should ONLY be applied when the user explicitly requests creating a new layout for their site. Do not apply these guidelines automatically for other tasks or when editing existing layouts.
28
+
29
+ ### _meta.json Structure
30
+
31
+ The `_meta.json` file must contain:
32
+
33
+ ```json
34
+ {
35
+ "apiName": "[THEME_LAYOUT_NAME]",
36
+ "type": "sfdc_cms__themeLayout",
37
+ "path": "themeLayouts"
38
+ }
39
+ ```
40
+
41
+ **Rules**:
42
+
43
+ - `apiName`: Must match the themeLayout directory name exactly
44
+ - `type`: Always `"sfdc_cms__themeLayout"`
45
+ - `path`: Always `"themeLayouts"`
46
+
47
+ ### content.json Structure
48
+
49
+ The `content.json` file must contain:
50
+
51
+ ```json
52
+ {
53
+ "type": "sfdc_cms__themeLayout",
54
+ "title": "[DISPLAY_TITLE]",
55
+ "contentBody": {
56
+ "component": {
57
+ "attributes": { },
58
+ "children": [ "[regions in the layout]" ],
59
+ "definition": "[FQN of root layout component]",
60
+ "id": "[root component id]",
61
+ "type": "component"
62
+ }
63
+ },
64
+ "urlName": "[url name]"
65
+ }
66
+ ```
67
+
68
+ **Field Definitions**:
69
+
70
+ - `type`: Always `"sfdc_cms__themeLayout"`
71
+ - `title`: Human-readable display title, words separated by spaces (e.g. "Scoped Header and Footer")
72
+ - `contentBody`: Include all `required` properties from `schemaDefinition`. Use `examplesOfContentType` for reference.
73
+ - Do not add additional fields.
74
+ - `urlName`: URL identifier (lowercase, words separated by dashes e.g., "scoped-header-and-footer")
75
+
76
+ **Rules**:
77
+
78
+ - Before any actions, *always* call `execute_metadata_action` to get the full schema and examples per the skill document.
79
+
80
+ ### Naming Conventions
81
+
82
+ 1. **Directory Name**: Should be in camelCase
83
+ 2. **apiName**: Must exactly match the directory name
84
+ 3. **title**: Human-readable title with spaces (e.g., "Service Not Available Theme Layout")
85
+ 4. **urlName**: Lowercase with hyphens for URL-friendly format (e.g., "new-layout")
86
+
87
+ ### Theme Sync After Creation
88
+
89
+ After creating a new `sfdc_cms__themeLayout`, you MUST update:
90
+
91
+ ```
92
+ digitalExperiences/site/[SITE_NAME]/sfdc_cms__theme/[THEME_API_NAME]/content.json
93
+ ```
94
+
95
+ **Lookup**: To find the theme content.json for the current site:
96
+
97
+ 1. Navigate up from the current theme layout directory to the site directory.
98
+ 2. Look in sfdc_cms__theme/ (sibling directory to sfdc_cms__themeLayout/).
99
+ 3. Find the theme directory (typically one per site).
100
+ 4. Read the file: content.json.
101
+
102
+ **Action (append-only)**:
103
+
104
+ - ALWAYS append a new entry to `contentBody.layouts`.
105
+ - Do NOT replace or remove existing `layouts` entries.
106
+ - `layoutId` MUST exactly match the new theme layout `apiName`.
107
+ - `layoutType` MUST be chosen based on intended view usage.
108
+ - **Default**: Generate a random 30-character alphanumeric string (e.g., `xEGgPxY5j5TForZe3J7SBguOfQicEy`) for the `layoutType`. Ensure this string is unique and does not match any existing `layoutType` in the list.
109
+
110
+ **Example**:
111
+
112
+ ```json
113
+ {
114
+ "contentBody": {
115
+ "layouts": [
116
+ { "layoutId": "existingLayoutA", "layoutType": "Inner" },
117
+ { "layoutId": "existingLayoutB", "layoutType": "ServiceNotAvailable" },
118
+ { "layoutId": "[NEW_THEME_LAYOUT_API_NAME]", "layoutType": "[30_CHAR_RANDOM_STRING]" }
119
+ ]
120
+ }
121
+ }
122
+ ```
123
+
124
+ ### Generation Checklist
125
+
126
+ When generating a new theme layout, ensure:
127
+
128
+ - [ ] `_meta.json` created with correct `apiName`, `type`, and `path` (III)
129
+ - [ ] `content.json` created with all required fields (IV)
130
+ - [ ] `urlName` uses lowercase with hyphens (V)
131
+ - [ ] `title` is human-readable (V)
132
+ - [ ] `sfdc_cms__theme/[THEME_API_NAME]/content.json` updated by appending a new `contentBody.layouts` mapping (VI)
133
+ - [ ] **CRITICAL**: Complete all the UUID generation steps. See `docs/handle-component-and-region-ids.md`
134
+
135
+ ## Purpose B: Editing Existing Theme Layouts
136
+
137
+ ### Component Modifications
138
+
139
+ When adding, removing, or configuring components in existing theme layouts, **always** refer to [handle-ui-components.md](docs/handle-ui-components.md) for placement hierarchy, component structure, column layout, and property configuration.
140
+
141
+ **Note**: Theme layouts often define the overall structure (header/footer) surrounding the main content region. Ensure components are added to the correct region (e.g., `header`, `footer`).
@@ -0,0 +1,233 @@
1
+ # Content Type: sfdc_cms__view
2
+
3
+ **Use when** user explicitly requests creating a new page or editing an existing page.
4
+
5
+ ## Table of Contents
6
+
7
+ - Purpose A: Generate New Views
8
+ - Purpose B: Editing Existing Views
9
+
10
+ ## Purpose A: Generate New Views
11
+
12
+ ### Generation Guidelines
13
+
14
+ **PAGE TYPES**: These guidelines supports two types of pages:
15
+
16
+ 1. **Custom Pages** - Single view 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.
17
+ 2. **Object Pages** - Requires 3 views: Detail, List, and Related List (e.g., Account, custom objects)
18
+
19
+ ### Core Principles
20
+
21
+ 1. **Route Association**: Views are referenced by routes via the `activeViewId` field.
22
+ 2. **CRITICAL**: The `viewType` MUST exactly match the `routeType` in the corresponding route.
23
+
24
+ ### Directory Structure (All Views)
25
+
26
+ 1. **Location**: Views must be created under: `digitalExperiences/site/[SITE_NAME]/sfdc_cms__view/[VIEW_NAME]/`
27
+ 2. **Required Files**:
28
+ - `_meta.json` - Metadata file defining the API name and type
29
+ - `content.json` - Content file defining the configuration and layout
30
+ 3. **Naming Convention**: Underscore-separated names, no "__c" suffix (About_Us, Account_Detail)
31
+
32
+ ### _meta.json Structure (All Views)
33
+
34
+ The `_meta.json` file must contain:
35
+
36
+ ```json
37
+ {
38
+ "apiName": "[VIEW_NAME]",
39
+ "type": "sfdc_cms__view",
40
+ "path": "views"
41
+ }
42
+ ```
43
+
44
+ **Rules**:
45
+
46
+ - `apiName`: Must match directory name exactly. **No "__c" suffix**.
47
+ - `type`: Always `"sfdc_cms__view"`
48
+ - `path`: Always `"views"`
49
+
50
+ ### Theme Layout Type (All Views)
51
+
52
+ The `contentBody.themeLayoutType` field specifies which theme layout to use for the view.
53
+
54
+ - **Default**: `"Inner"` - Use this default if the user does not specify a layout OR if the lookup fails to find a matching layoutType
55
+ - **Lookup**: To find valid values:
56
+ 1. Navigate up from the current view directory to the site directory
57
+ 2. Look in `sfdc_cms__theme/` (sibling directory to `sfdc_cms__view/`)
58
+ 3. Find the theme directory (typically one per site)
59
+ 4. Check `content.json` → `contentBody.layouts[]` for the layouts array
60
+
61
+ - **Layout Name/ID Resolution**: If the user provides only a layout name or ID (e.g., "scopedHeaderAndFooter"), you must look up the corresponding `layoutType`:
62
+ 1. Find the theme's `content.json` as described above
63
+ 2. Locate the `contentBody.layouts` array containing `layoutId`/`layoutType` pairs
64
+ 3. Match the user-provided name/ID against `layoutId` values
65
+ 4. Use the corresponding `layoutType` value for `contentBody.themeLayoutType`
66
+ 5. **Use ONLY the `layoutType` value** for `contentBody.themeLayoutType` - do NOT use the layoutId or user's provided name
67
+ 6. **If no match is found, use the default `"Inner"`**
68
+
69
+ ### PART A: CUSTOM PAGES
70
+
71
+ Use this section when creating single-view custom content pages.
72
+
73
+ #### A.1. content.json Structure
74
+
75
+ The `content.json` file must contain:
76
+
77
+ ```json
78
+ {
79
+ "type": "sfdc_cms__view",
80
+ "title": "[DISPLAY_TITLE]",
81
+ "contentBody": {},
82
+ "urlName": "[URL_NAME]"
83
+ }
84
+ ```
85
+
86
+ **Field Definitions**:
87
+
88
+ - `type`: Always `"sfdc_cms__view"`
89
+ - `title`: Human-readable display title (e.g., About Us)
90
+ - `contentBody`: Include all `required` properties from `schemaDefinition`. Use `examplesOfContentType` for reference.
91
+ - `urlName`: Lowercase with hyphens (e.g., `about-us`)
92
+
93
+ #### A.2. Component Structure
94
+
95
+ **MUST** use `community_layout:sldsFlexibleLayout` as the root with exactly 2 regions (`content` and `sfdcHiddenRegion`), even if no components exist:
96
+
97
+ ```
98
+ community_layout:sldsFlexibleLayout (root)
99
+ ├── content (region) — main page content
100
+ └── sfdcHiddenRegion (region) — hidden region for SEO and metadata
101
+ ```
102
+
103
+ **CRITICAL REQUIREMENTS**:
104
+
105
+ - **Region names are fixed**: The region `name` field MUST be exactly `content` or `sfdcHiddenRegion`. Do NOT invent custom region names.
106
+ - **sfdcHiddenRegion MUST contain seoAssistant**: The `sfdcHiddenRegion` region MUST ALWAYS include a `community_builder:seoAssistant` component in its `children` array.
107
+ - **Components live in children**: All components are placed inside the `children` array of a region. Use an empty `children: []` array for `content` if no components exist.
108
+
109
+ Each region requires: `id` (unique UUID), `name`, `title`, `type: "region"`, `children`. Do not add any other fields.
110
+
111
+ #### A.3. Naming Conventions Summary
112
+
113
+ | Field | Format | Example |
114
+ |-|-|-|
115
+ | Directory/apiName | Underscore-separated, no "__c" | `About_Us` |
116
+ | title | Human-readable | `About Us` |
117
+ | viewType | `custom-` + lowercase-hyphens | `custom-about-us` |
118
+ | urlName | Lowercase-hyphens | `about-us` |
119
+
120
+ #### A.4. Route Dependency
121
+
122
+ The route's `activeViewId` must match the view's directory name exactly.
123
+
124
+ #### A.5. Generation Checklist
125
+
126
+ - [ ] Directory and `_meta.json` follow structure (see Directory Structure, _meta.json Structure)
127
+ - [ ] `content.json` has all required fields (A.1)
128
+ - [ ] Component structure correct with both regions (A.1)
129
+ - [ ] **CRITICAL**: Complete all the UUID generation steps. see `docs/handle-component-and-region-ids.md`
130
+ - [ ] `viewType` matches route's `routeType` (CRITICAL)
131
+
132
+ ### PART B: OBJECT PAGES
133
+
134
+ Use this section when creating object pages that require Detail, List, and Related List views.
135
+
136
+ #### B.1. Overview
137
+
138
+ Object pages require **three views**: Detail, List, and Related List. All share the same object name.
139
+
140
+ **Object Types & viewType Format**:
141
+
142
+ | Object Type | Identifier | viewType Example |
143
+ |-|-|-|
144
+ | Standard (Account, Contact) | `keyPrefix` (3-char) | `detail-001`, `list-001`, `relatedlist-001` |
145
+ | Custom (Test_Object__c) | API name with `__c` | `detail-Test_Object__c`, `list-Test_Object__c` |
146
+
147
+ Obtain object information from the `objectList` MCP output from `sfdc_cms__route`:
148
+
149
+ ```json
150
+ [
151
+ ["Label", "ApiName", "KeyPrefix", "IsCustom"]
152
+ ]
153
+ ```
154
+
155
+ #### B.2. Required Views
156
+
157
+ Create three directories under `sfdc_cms__view/`:
158
+
159
+ - `[OBJECT_NAME]_Detail/`
160
+ - `[OBJECT_NAME]_List/`
161
+ - `[OBJECT_NAME]_Related_List/`
162
+
163
+ #### B.3. content.json Structure
164
+
165
+ ```json
166
+ {
167
+ "type": "sfdc_cms__view",
168
+ "title": "[OBJECT_NAME] [TYPE]",
169
+ "contentBody": {
170
+ "component": {},
171
+ "dataProviders": [],
172
+ "themeLayoutType": "[THEME_LAYOUT_TYPE]",
173
+ "viewType": "[PREFIX]-[IDENTIFIER]"
174
+ },
175
+ "urlName": "[OBJECT_NAME_LOWERCASE]-[TYPE]"
176
+ }
177
+ ```
178
+
179
+ **Field Definitions**:
180
+
181
+ - `type`: Always `"sfdc_cms__view"`
182
+ - `title`: Human-readable (e.g., "Account Detail")
183
+ - `contentBody`: Include all `required` properties from `schemaDefinition`. Use `examplesOfContentType` for reference.
184
+ - `contentBody.viewType`: **CRITICAL**: Must exactly match route's `routeType`
185
+ - `urlName`: Lowercase with hyphens (e.g., `account-detail`)
186
+
187
+ **Rules**:
188
+
189
+ - Before any actions, *always* call `execute_metadata_action` to get the full schema and examples per the skill document.
190
+
191
+ #### B.4. Component Structure
192
+
193
+ Uses same structure as Part A.1 (Component Structure) with these SEO assistant differences:
194
+
195
+ - **Detail View**: `pageTitle: "{!Record._Object}: {!Record._Title}"`
196
+ - **List/Related List Views**: `recordId: "{!recordId}"` (no pageTitle)
197
+
198
+ Default template includes one section with one empty column. `seedComponents` must be `[]` (not `null`).
199
+
200
+ #### B.5. Naming Conventions Summary
201
+
202
+ | Field | Detail | List | Related List |
203
+ |-|-|-|-|
204
+ | Directory/apiName | `[Object]_Detail` | `[Object]_List` | `[Object]_Related_List` |
205
+ | title | `[Object] Detail` | `[Object] List` | `[Object] Related List` |
206
+ | viewType (Standard) | `detail-[keyPrefix]` | `list-[keyPrefix]` | `relatedlist-[keyPrefix]` |
207
+ | viewType (Custom) | `detail-[ApiName__c]` | `list-[ApiName__c]` | `relatedlist-[ApiName__c]` |
208
+ | urlName | `[object]-detail` | `[object]-list` | `[object]-related-list` |
209
+
210
+ #### B.6. Route Dependency
211
+
212
+ The route's `activeViewId` must match the view's directory name exactly. The `viewType` must exactly match the route's `routeType`.
213
+
214
+ #### B.7. Generation Checklist
215
+
216
+ - [ ] Object type determined; identifier obtained (`keyPrefix` or API name with `__c`)
217
+ - [ ] All three views created: **Detail**, **List**, and **Related List**, each with `_meta.json` and `content.json`
218
+ - [ ] `viewType` matches route's `routeType` for all three views (CRITICAL)
219
+ - [ ] Component structure correct with both regions (see A.1)
220
+ - [ ] SEO assistant configured correctly per view type (B.4)
221
+ - [ ] **CRITICAL**: Complete both UUID generation steps. see `docs/handle-component-and-region-ids.md`
222
+
223
+ ## Purpose B: Editing Existing Views
224
+
225
+ Use this section when modifying existing views under the `sfdc_cms__view` directory.
226
+
227
+ ### Component Modifications
228
+
229
+ When adding, removing, or configuring components in existing views, **always** refer to [handle-ui-components.md](docs/handle-ui-components.md) for placement hierarchy, component structure, column layout, and property configuration.
230
+
231
+ ### Theme Layout Type
232
+
233
+ To change a view's theme layout, update `contentBody.themeLayoutType` in the view's `content.json`. See **Theme Layout Type (All Views)** for default and lookup details
@@ -0,0 +1,42 @@
1
+ # Guest User Sharing Rules (Public Sites Only)
2
+
3
+ **Use when** the user explicitly wants to make the site **public** (accessible to unauthenticated visitors). If the site is private/login-required, guest sharing rules are not needed.
4
+ If sharingRules metadata is not available locally in force-app/main/default/sharingRules, retrieve it from the org before creating new rules.
5
+
6
+ ## Retrieve Full SharingRules Schema
7
+
8
+ Use the metadata MCP tool with metadataType "SharingRules" to retrieve schema.
9
+
10
+ ## XML Example
11
+
12
+ ```xml
13
+ <?xml version="1.0" encoding="UTF-8"?>
14
+ <SharingRules xmlns="http://soap.sforce.com/2006/04/metadata">
15
+ <sharingGuestRules>
16
+ <fullName>ShareAccountsWithSiteGuest</fullName>
17
+ <accessLevel>Read</accessLevel>
18
+ <includeHVUOwnedRecords>false</includeHVUOwnedRecords>
19
+ <label>Share Accounts With Site Guest</label>
20
+ <sharedTo>
21
+ <guestUser>[site Guest User's CommunityNickanme]</guestUser>
22
+ </sharedTo>
23
+ <criteriaItems>
24
+ <field>Name</field>
25
+ <operation>notEqual</operation>
26
+ <value>null</value>
27
+ </criteriaItems>
28
+ </sharingGuestRules>
29
+ </SharingRules>
30
+ ```
31
+
32
+ ## Critical Requirements
33
+
34
+ 1. **SharedTo Element**: Must use `<guestUser>{site Guest User's CommunityNickanme}</guestUser>` (not URL path prefix).
35
+ 2. **includeHVUOwnedRecords**: Required field. Set to `false` unless records owned by high-volume site users should be included.
36
+ 3. **One XML file per object**: Put all rules for a given object in one file. Do not create additional.
37
+
38
+ ## Common Mistakes
39
+
40
+ - Using `<role>` or `<group>` instead of `<guestUser>` in sharedTo
41
+ - Omitting the required `includeHVUOwnedRecords` field
42
+ - Using `includeRecordsOwnedByAll` (that's for `sharingCriteriaRules`, not guest rules)
@@ -0,0 +1,27 @@
1
+ # UUID Generation
2
+
3
+ **Use when** handling IDs for components and regions of views. All component and region IDs in Experience Site content must be unique UUIDs.
4
+
5
+ ## Requirements
6
+
7
+ 1. **Format**: Lowercase UUID v4 (e.g., `5d56a22f-c1e8-40d3-92ec-6e10e71e36de`)
8
+ 2. **Uniqueness**: Must be unique across ALL `content.json` files in site (under `digitalExperiences/site/<SITE_NAME>/`)
9
+
10
+ ## For New content.json Files Only
11
+
12
+ **Multistep Process (REQUIRED)**:
13
+
14
+ - **CRITICAL**: Each step must be performed separately - do NOT combine steps into a single automated command or script
15
+ - **Step 1**: Create files with descriptive placeholders for UUIDs (e.g., `UUID_CONTENT_REGION`, `UUID_HIDDEN_REGION`, `UUID_SEO_COMPONENT`)
16
+ - **Step 2**: Count the total number of UUID placeholder occurrences in the generated file, then generate exactly that many UUIDs using:
17
+ - `node -e "console.log(Array.from({length: N}, () => require('crypto').randomUUID()).join('\n'))"` where N is the total count of placeholder occurrences. Present this command to the user for execution.
18
+ - **Step 3**: Replace each placeholder occurrence sequentially with the generated UUIDs from the list, ensuring each occurrence gets a unique UUID from the list. Perform replacements one at a time or in small batches - do NOT automate this with scripts.
19
+ - **Step 4**: Validate that all placeholders have been replaced - read the file and search for any remaining placeholder patterns (e.g., `UUID_`). The file is NOT valid until all placeholders are replaced with actual UUIDs.
20
+ - **CRITICAL**: Every single placeholder occurrence must be replaced with a DIFFERENT UUID from the generated list, even if the placeholder name is repeated. For example, if you have 5 total placeholder occurrences, generate 5 UUIDs and replace each occurrence with the next UUID from the list.
21
+ - **NEVER** write UUIDs inline during file creation - always use the multistep placeholder approach
22
+
23
+ ## For Editing Existing content.json Files
24
+
25
+ - **CRITICAL**: Read file first and preserve all existing UUIDs exactly as-is
26
+ - NEVER replace existing UUIDs with placeholders
27
+ - For newly added components/regions only, follow the multistep placeholder process from step 3
@@ -0,0 +1,215 @@
1
+ # UI Component Handling
2
+
3
+ **Use when** adding/configuring components to be used in Experience site.
4
+
5
+ ## Component Insertion
6
+
7
+ Insert custom Lightning Web Components (LWC) into views.
8
+
9
+ ### What is a Custom Component?
10
+
11
+ Any LWC in `c` namespace (e.g., `c:heroBanner`). Distinct from OOTB components (e.g., `community_builder:htmlEditor`).
12
+
13
+ ### Prerequisites for Custom LWC
14
+
15
+ **js-meta.xml Requirements**:
16
+
17
+ - `<isExposed>true</isExposed>`
18
+ - Targets: `lightningCommunity__Page`, `lightningCommunity__Default`
19
+
20
+ **Property Type Constraints (MANDATORY GATE)**:
21
+
22
+ 1. **Supported**: String, Integer, Boolean, Color, Picklist
23
+ 2. **Unsupported**: Any other type → **STOP immediately**
24
+ - Do NOT delete, comment, or auto-correct
25
+ - Advise user to set up Custom Property Editor (CPE) or Custom Property Type
26
+ 3. **Type Mismatch**: `type="Number"` → change to `type="Integer"` in js-meta.xml
27
+
28
+ **Do not proceed** until LWC files are compliant or user advised on CPE/CPT.
29
+
30
+ ### Placement Hierarchy
31
+
32
+ **NEVER** place components directly in top-level regions. Must nest inside `community_layout:section` → column region.
33
+
34
+ ```
35
+ community_layout:sldsFlexibleLayout (root)
36
+ └── region (content/header/footer)
37
+ └── community_layout:section
38
+ └── region (column: col1/col2)
39
+ └── component(s)
40
+ ```
41
+
42
+ ### Column Width & Layout
43
+
44
+ **12-unit grid**: Column widths sum to 12 per section.
45
+
46
+ **Width Formats**:
47
+
48
+ - Grid units: 8 + 4
49
+ - Percentages: 66% + 33% → 8 + 4; 50% + 50% → 6 + 6
50
+ - Ratios: 2:1 → 8 + 4; 1:1 → 6 + 6; equal thirds → 4 + 4 + 4
51
+
52
+ **Layout Rules**:
53
+
54
+ - One section = one horizontal row
55
+ - Multiple rows = multiple sections (siblings)
56
+ - Multiple components in column = vertical stack
57
+
58
+ **Set width in** `sectionConfig` (JSON string attribute on section component).
59
+
60
+ ### sectionConfig Structure
61
+
62
+ **Top-level** (when parsed):
63
+
64
+ - `UUID`: Section ID (matches section component's `id`)
65
+ - `columns`: Array of column definitions
66
+
67
+ **Each column**:
68
+
69
+ - `UUID`: Column ID (matches column region's `id`)
70
+ - `columnKey`: Column identifier (e.g., `col1`, `col2`) - matches column region's `name`
71
+ - `columnName`: Display name (e.g., "Column 1")
72
+ - `columnWidth`: String from `"1"` to `"12"` (must sum to 12)
73
+ - `seedComponents`: Array or `null` (typically `[]` or `null`)
74
+
75
+ **Example** (serialized as JSON string in `sectionConfig` attribute):
76
+
77
+ ```json
78
+ {
79
+ "UUID": "295e6a8b-fd94-485b-af9d-7ccf5b3048ee",
80
+ "columns": [
81
+ {
82
+ "UUID": "7e1f7e33-5ba8-4fef-8494-6ea3e90b22a0",
83
+ "columnKey": "col1",
84
+ "columnName": "Column 1",
85
+ "columnWidth": "12",
86
+ "seedComponents": null
87
+ }
88
+ ]
89
+ }
90
+ ```
91
+
92
+ ### Named Region Creation
93
+ In order to create a component with drag-n-droppable region/slot that can be used in Experience Builder sites and persist across views, there are multiple steps needed.
94
+
95
+ Page layout components should add the lightningCommunity__Page_Layout target in js-meta.xml.
96
+ Theme layout components should add the lightningCommunity__Theme_Layout target in js-meta.xml.
97
+ Add lightningCommunity__Page as a target for page layouts and any component with slots that is not explicitly defined as a theme layout.
98
+
99
+ The js file in LWC need to declare named slots:
100
+ ```js
101
+ /**
102
+ * @slot header
103
+ * @slot footer
104
+ */
105
+ export default class YourComponentName extends LightningElement {}
106
+ ```
107
+
108
+ Do not add any other comments in the declaration comment block. The named @slot annotations must be the last comments
109
+ in the block before the class declaration.
110
+
111
+ In html, named slots are needed. <slot name="header"> and <slot name="footer"> in the above example.
112
+
113
+ For theme layout component, a <slot> with no name is the main content region, a slot with name is a sticky region that doesn't change from page to page that uses the same theme layout component.
114
+
115
+ No need to declare target config properties for the slots/regions.
116
+ See the example below for adding a component with named slots into a view.
117
+
118
+ ### Component Structure
119
+
120
+ ```json
121
+ {
122
+ "id": "[UNIQUE_UUID]",
123
+ "type": "component",
124
+ "definition": "[NAMESPACE]:[COMPONENT_NAME]",
125
+ "attributes": {
126
+ "[ATTRIBUTE_NAME]": "[ATTRIBUTE_VALUE]"
127
+ }
128
+ }
129
+ ```
130
+
131
+ **Field Definitions**:
132
+
133
+ - `id`: Unique UUID (see `handle-component-and-region-ids.md`)
134
+ - `type`: Always `"component"`
135
+ - `definition`:
136
+ - Custom LWC: `c:[componentName]` (e.g., `c:heroBanner`)
137
+ - OOTB: `[namespace]:[componentName]` (e.g., `community_builder:richTextEditor`)
138
+ - `attributes`: Component properties
139
+ - **Omit if no attributes** (don't include empty object)
140
+ - Custom LWC: Only `@api` properties in `targetConfigs` (with `lightningCommunity__Default` target)
141
+ - OOTB: Only exposed schema properties
142
+
143
+ ### Complete Examples
144
+
145
+ **Example 1: Overall structure**
146
+ Correct nesting: `content` region → section → column region → components
147
+
148
+ ```json
149
+ {
150
+ "type": "region",
151
+ "name": "content",
152
+ "children": [
153
+ {
154
+ "attributes": {
155
+ "sectionConfig": "{\"UUID\":\"295e6a8b-fd94-485b-af9d-7ccf5b3048ee\",\"columns\":[{\"UUID\":\"7e1f7e33-5ba8-4fef-8494-6ea3e90b22a0\",\"columnName\":\"Column 1\",\"columnKey\":\"col1\",\"columnWidth\":\"12\",\"seedComponents\":null}]}"
156
+ },
157
+ "children": [
158
+ {
159
+ "children": [
160
+ {
161
+ "definition": "c:testComponent",
162
+ "id": "2ae498bd-2871-487d-8fb1-b186376cee3b",
163
+ "type": "component"
164
+ },
165
+ {
166
+ "id": "7c7d3b6a-1e2f-4a33-9c1e-8b2a6d5f4e3b",
167
+ "type": "component",
168
+ "definition": "c:helloWorld",
169
+ "attributes": {
170
+ "title": "Hello"
171
+ }
172
+ }
173
+ ],
174
+ "id": "7e1f7e33-5ba8-4fef-8494-6ea3e90b22a0",
175
+ "name": "col1",
176
+ "title": "Column 1",
177
+ "type": "region"
178
+ }
179
+ ],
180
+ "definition": "community_layout:section",
181
+ "id": "295e6a8b-fd94-485b-af9d-7ccf5b3048ee",
182
+ "type": "component"
183
+ }
184
+ ]
185
+ }
186
+ ```
187
+
188
+ **CRITICAL**: Follow UUID generation process (`handle-component-and-region-ids.md`) when inserting components.
189
+
190
+ **Example 2: Representing slots**
191
+ If a component with slots (i.e. @slot annotation) is inserted, slots must appear as named regions.
192
+ In this example the component threeColumn has 3 slots, named left, center, and right.
193
+ ```json
194
+ {
195
+ "attributes" : { },
196
+ "children" : [ {
197
+ "id" : "4c6148c7-c07e-4245-ae50-ac07891046f2",
198
+ "name" : "left",
199
+ "title" : "left",
200
+ "type" : "region"
201
+ }, {
202
+ "id" : "f362e789-7f09-40b4-a59f-03f76ea73401",
203
+ "name" : "center",
204
+ "title" : "center",
205
+ "type" : "region"
206
+ }, {
207
+ "id" : "2678ddd4-a1a4-41c4-bf5a-1a3e55891eb2",
208
+ "name" : "right",
209
+ "title" : "right",
210
+ "type" : "region"
211
+ } ],
212
+ "definition" : "c:threeColumn",
213
+ "id" : "b9e517c5-90ac-49e9-91b7-3730512c95a3",
214
+ "type" : "component"
215
+ }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: salesforce-flow
3
- description: Generate Salesforce Flows using the MCP tool execute_metadata_action. Use when the user asks to create, build, or generate a flow — including Screen, Autolaunched, Record-Triggered (before/after-save), Scheduled, or Platform Event-Triggered Flows. Also trigger for flow-like requests such as "when a record is created", "trigger daily at", "send an email when", "update the field when", "automate", "workflow", or "flow XML/metadata". This is the only skill for Salesforce Flow generation.
3
+ description: Generate Salesforce Flows using the MCP tool execute_metadata_action. Use when the user asks to create, build, or generate a flow — including Screen, Autolaunched, Record-Triggered (before/after-save), Scheduled. Also trigger for flow-like requests such as "when a record is created", "trigger daily at", "send an email when", "update the field when", "automate", "workflow", or "flow XML/metadata". This is the only skill for Salesforce Flow generation.
4
4
  ---
5
5
 
6
6
  ## Goal
@@ -21,7 +21,7 @@ Use this skill when you need to:
21
21
  # Flow Metadata Specification
22
22
 
23
23
  ## Overview
24
- Salesforce Flows are powerful automation tools that enable complex business process automation without code. Flows can collect and process data through interactive screens, execute logic and calculations, manipulate records, call external services, and trigger based on various events. Flow types include Screen Flows (user-guided), Autolaunched Flows (background processing), Record-Triggered Flows (database events), Scheduled Flows (time-based), and Platform Event-Triggered Flows (event-driven).
24
+ Salesforce Flows are powerful automation tools that enable complex business process automation without code. Flows can collect and process data through interactive screens, execute logic and calculations, manipulate records, call external services, and trigger based on various events. Flow types include Screen Flows (user-guided), Autolaunched Flows (background processing), Record-Triggered Flows (database events) and Scheduled Flows (time-based).
25
25
 
26
26
  ## Purpose
27
27
  - Automate complex business processes with declarative logic and branching