@salesforce/afv-skills 1.23.0 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/commerce-b2b-open-code-components-replace/SKILL.md +244 -0
- package/skills/commerce-b2b-open-code-components-replace/assets/ootb-to-open-code-mapping.json +66 -0
- package/skills/{developing-datacloud-code-extension → data360-code-extension-generate}/SKILL.md +7 -7
- package/skills/{developing-datacloud-code-extension → data360-code-extension-generate}/references/README.md +7 -7
- package/skills/{developing-datacloud-code-extension → data360-code-extension-generate}/references/quick-reference.md +2 -2
- package/skills/{getting-datacloud-schema → data360-schema-get}/SKILL.md +26 -26
- package/skills/{getting-datacloud-schema → data360-schema-get}/references/README.md +9 -9
- package/skills/dx-org-manage/SKILL.md +192 -0
- package/skills/dx-org-manage/examples/README.md +45 -0
- package/skills/dx-org-manage/examples/scratch-orgs/error_no_devhub.json +9 -0
- package/skills/dx-org-manage/examples/scratch-orgs/error_timeout.json +13 -0
- package/skills/dx-org-manage/examples/scratch-orgs/success_definition_file.json +28 -0
- package/skills/dx-org-manage/examples/scratch-orgs/success_edition.json +26 -0
- package/skills/dx-org-manage/examples/scratch-orgs/success_snapshot.json +27 -0
- package/skills/dx-org-manage/examples/snapshots/error_output.json +9 -0
- package/skills/dx-org-manage/examples/snapshots/success_output.json +15 -0
- package/skills/dx-org-manage/references/cli_flags.md +67 -0
- package/skills/dx-org-manage/references/creating-scratch-org.md +164 -0
- package/skills/dx-org-manage/references/creating-snapshot.md +103 -0
- package/skills/dx-org-manage/references/definition_file_options.md +224 -0
- package/skills/dx-org-manage/references/edition_types.md +78 -0
- package/skills/dx-org-manage/references/opening-org.md +160 -0
- package/skills/dx-org-manage/references/snapshot_usage.md +74 -0
- package/skills/dx-org-permission-set-assign/SKILL.md +98 -0
- package/skills/dx-org-permission-set-assign/examples/error_output.json +19 -0
- package/skills/dx-org-permission-set-assign/examples/success_output.json +16 -0
- package/skills/dx-org-permission-set-assign/references/cli_flags.md +68 -0
- package/skills/experience-cms-brand-apply/SKILL.md +1 -1
- package/skills/experience-ui-bundle-app-coordinate/SKILL.md +31 -19
- package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +1 -1
- package/skills/experience-ui-bundle-frontend-generate/implementation/header-footer.md +1 -1
- package/skills/experience-ui-bundle-salesforce-data-access/SKILL.md +336 -581
- package/skills/experience-ui-bundle-salesforce-data-access/references/caching.md +172 -0
- package/skills/experience-ui-bundle-salesforce-data-access/references/graphiti-cli.md +373 -0
- package/skills/experience-ui-bundle-salesforce-data-access/references/graphql-hand-authoring.md +376 -0
- package/skills/experience-ui-bundle-salesforce-data-access/references/migration.md +119 -0
- package/skills/experience-ui-bundle-salesforce-data-access/references/rest-and-integration.md +152 -0
- package/skills/experience-ui-bundle-salesforce-data-access/references/sdk-api.md +217 -0
- package/skills/experience-ui-bundle-salesforce-data-access/scripts/graphql-search.sh +36 -9
- package/skills/platform-agentsetup-categories-fetch/SKILL.md +109 -0
- package/skills/platform-agentsetup-categories-fetch/references/api-response-schema.md +121 -0
- package/skills/platform-custom-object-generate/SKILL.md +62 -7
- package/skills/platform-custom-object-generate/references/description-enrichment.md +125 -0
- package/skills/platform-metadata-retrieve/SKILL.md +121 -0
- package/skills/platform-metadata-retrieve/examples/error_output.json +10 -0
- package/skills/platform-metadata-retrieve/examples/success_output.json +27 -0
- package/skills/platform-metadata-retrieve/references/cli_flags.md +138 -0
- package/skills/platform-metadata-retrieve/references/retrieval_modes.md +181 -0
- package/skills/platform-sharing-rules-generate/SKILL.md +165 -0
- package/skills/platform-sharing-rules-generate/references/rule-types.md +199 -0
- package/skills/platform-tracing-agentforce-configure/SKILL.md +118 -0
- package/skills/platform-tracing-agentforce-configure/assets/AgentforcePlatformTracing-template.xml +4 -0
- package/skills/platform-tracing-configure/SKILL.md +118 -0
- package/skills/platform-tracing-configure/assets/EventSettings-template.xml +4 -0
- package/skills/platform-trust-archive-manage/SKILL.md +25 -11
- package/skills/platform-trust-archive-manage/examples/monitor-failed-jobs.md +2 -2
- package/skills/platform-trust-archive-manage/references/archive-activity-entity.md +1 -1
- package/skills/platform-trust-archive-manage/references/connect-api-operations.md +51 -12
- /package/skills/{getting-datacloud-schema → data360-schema-get}/scripts/get_dlo_schema.py +0 -0
- /package/skills/{getting-datacloud-schema → data360-schema-get}/scripts/get_dmo_schema.py +0 -0
package/package.json
CHANGED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: commerce-b2b-open-code-components-replace
|
|
3
|
+
description: "Replace OOTB (out-of-the-box) B2B Commerce components with open source equivalents in site metadata content.json files, or look up the equivalent open code `site:` component for OOTB definitions. Use when users mention \"replace OOTB components\", \"replace commerce components with open code\", \"swap OOTB for open source\", \"replace commerce_builder:\", \"replace OOTB in site\", \"replace component in site metadata\", \"replace component definition\", \"find open code equivalent\", \"equivalent open code component\", \"OOTB to open code mapping\", \"what is the site component for\", components \"in this view\" or \"for a given view\", or a specific list of component names — and want to update or only discover mappings in their store metadata."
|
|
4
|
+
allowed-tools: Bash(grep:*) Bash(ls:*) Read Write
|
|
5
|
+
metadata:
|
|
6
|
+
version: "1.0"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Replacing OOTB B2B Commerce Components with Open Code
|
|
10
|
+
|
|
11
|
+
This skill replaces OOTB (out-of-the-box) B2B Commerce component definitions in site metadata `content.json` files with their open source `site:` equivalents, or looks up the equivalent open code component for given OOTB definitions without making changes. It uses an authoritative mapping loaded from `assets/ootb-to-open-code-mapping.json`.
|
|
12
|
+
|
|
13
|
+
## Scope
|
|
14
|
+
|
|
15
|
+
**Modes:** **Full replace** runs the scan (Step 1), user selection if needed, then `content.json` updates (Step 2–3). **Lookup only** (user asks for equivalents but not to change files): apply the mapping-authority rule and report OOTB → `site:` for the named components or for definitions found in the scoped `content.json` — **do not** call Write unless the user confirms replacement. **View-scoped** work: limit file discovery and reads to `sfdc_cms__view/<ViewName>/` (or the path the user gives) instead of all views.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
### Resolve `<package-dir>`
|
|
22
|
+
|
|
23
|
+
Read `sfdx-project.json` and pick the active package directory. Extract `packageDirectories[]` and use the entry with `"default": true`; if no entry is flagged default, use the first entry. Use this value as `<package-dir>` everywhere below. If `sfdx-project.json` is missing or has no `packageDirectories`, tell the user and abort.
|
|
24
|
+
|
|
25
|
+
### Delegate setup
|
|
26
|
+
|
|
27
|
+
Before replacing components, delegate to the **commerce-b2b-open-code-components-integrate** skill to ensure:
|
|
28
|
+
|
|
29
|
+
1. Open source repository is cloned at `.tmp/b2b-commerce-open-source-components`
|
|
30
|
+
2. Store is selected and site metadata is retrieved locally
|
|
31
|
+
3. Open code components are copied to the store's site metadata
|
|
32
|
+
|
|
33
|
+
The integrating skill owns the `.tmp/` clone lifecycle (it prompts the user to reuse or re-clone an existing checkout); this skill assumes the clone is already present.
|
|
34
|
+
|
|
35
|
+
Send a plain-text chat reply to the user (per Rule 1): "Before replacing components, I need to verify that the open code components are set up in your store. Let me check..."
|
|
36
|
+
|
|
37
|
+
If any prerequisite is not met, the integrating skill will handle it. Once all checks pass, proceed to the replacement workflow.
|
|
38
|
+
|
|
39
|
+
**Required state** after prerequisites:
|
|
40
|
+
- **Package dir** — the value resolved above (e.g., `force-app`)
|
|
41
|
+
- **Store name** — e.g., `My_B2B_Store1`
|
|
42
|
+
- **Site metadata path** — `<package-dir>/main/default/digitalExperiences/site/<store-name>/`
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Replacement Workflow
|
|
47
|
+
|
|
48
|
+
### Step 1: Scan Site and Cross-Reference Mapping
|
|
49
|
+
|
|
50
|
+
**This step is MANDATORY.** Always scan the site first before attempting any replacements.
|
|
51
|
+
|
|
52
|
+
Send a plain-text chat reply to the user (per Rule 1): "I'm scanning your store's site metadata to find all OOTB commerce components currently in use and checking which have open code equivalents."
|
|
53
|
+
|
|
54
|
+
**Step 1a — Find affected files** (one command, simple literal match):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
grep -rl '"commerce' \
|
|
58
|
+
<package-dir>/main/default/digitalExperiences/site/<store-name>/sfdc_cms__view/ \
|
|
59
|
+
<package-dir>/main/default/digitalExperiences/site/<store-name>/sfdc_cms__themeLayout/ \
|
|
60
|
+
--include="content.json"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Step 1b — Read the mapping and parse the matched files.** Read `assets/ootb-to-open-code-mapping.json` once into memory. Then, using the **Read** tool, parse each matched file and extract all `"definition"` values that start with `commerce` (e.g., `commerce_builder:cartBadge`). Collect a deduplicated list of OOTB components across all files.
|
|
64
|
+
|
|
65
|
+
**Step 1c — List repo components** (one command):
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
ls .tmp/b2b-commerce-open-source-components/force-app/main/default/sfdc_cms__lwc/
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Using the parsed definitions, the `ls` output, and the mapping table, categorize every discovered OOTB component into three groups:
|
|
72
|
+
|
|
73
|
+
**Show the user a breakdown and a selectable list:**
|
|
74
|
+
|
|
75
|
+
First, inform the user about skipped and unmapped components:
|
|
76
|
+
```text
|
|
77
|
+
Found X OOTB components in your site:
|
|
78
|
+
|
|
79
|
+
In mapping table but NOT in repo (skipping):
|
|
80
|
+
- commerce_builder:quoteSummary → site:quoteSummary (not found in repo)
|
|
81
|
+
|
|
82
|
+
No mapping available (not in mapping table):
|
|
83
|
+
- commerce_builder:actionButtons
|
|
84
|
+
- commerce_builder:layoutHeaderOne
|
|
85
|
+
- commerce_builder:searchInputContainer
|
|
86
|
+
- commerce_builder:myAccountMegaMenu
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Then present the replaceable components as a **multi-select list** so the user can pick from checkboxes instead of typing. Include an "All of the above" option:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
Which components would you like to replace?
|
|
93
|
+
|
|
94
|
+
☐ commerce_builder:heading → site:productHeading
|
|
95
|
+
☐ commerce_builder:cartBadge → site:cartBadge
|
|
96
|
+
☐ commerce_builder:searchInput → site:searchInput
|
|
97
|
+
☐ All of the above
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
If user provided specific component name(s) in the original request, pre-filter to those and skip the selection prompt.
|
|
101
|
+
|
|
102
|
+
### Step 2: Replace in content.json
|
|
103
|
+
|
|
104
|
+
Send a plain-text chat reply to the user (per Rule 1): "I'm now replacing the selected OOTB component definitions with their open code equivalents in your site's content.json files."
|
|
105
|
+
|
|
106
|
+
The affected files are already known from Step 1. For each file that contains selected components:
|
|
107
|
+
1. Use the **Read** tool to read the file
|
|
108
|
+
2. For each selected OOTB component, confirm again that the mapped **`site:`** target exists in the open code repo. Only proceed with replacements that pass this check.
|
|
109
|
+
3. Replace all matching `"definition"` values with their mapped open code equivalents — **always** use the exact `site:<name>` string from the mapping table
|
|
110
|
+
- Example: `"definition": "commerce_builder:heading"` → `"definition": "site:productHeading"`
|
|
111
|
+
4. Use the **Write** tool to save the updated file
|
|
112
|
+
5. Preserve all other JSON properties — only `"definition"` values change
|
|
113
|
+
|
|
114
|
+
**Batch efficiently:** if a file contains multiple OOTB components, apply ALL replacements in a single Read → modify → Write pass. Do NOT read and write the same file multiple times.
|
|
115
|
+
|
|
116
|
+
### Step 3: Report
|
|
117
|
+
|
|
118
|
+
```text
|
|
119
|
+
✅ Replacement Complete!
|
|
120
|
+
|
|
121
|
+
Replaced X components across Y files:
|
|
122
|
+
- commerce_builder:heading → site:productHeading (3 files)
|
|
123
|
+
- commerce_builder:cartBadge → site:cartBadge (2 files)
|
|
124
|
+
- commerce_builder:searchInput → site:searchInput (4 files)
|
|
125
|
+
|
|
126
|
+
Skipped (not in repo):
|
|
127
|
+
- commerce_builder:quoteSummary
|
|
128
|
+
|
|
129
|
+
No mapping available (left unchanged):
|
|
130
|
+
- commerce_builder:actionButtons
|
|
131
|
+
- commerce_builder:layoutHeaderOne
|
|
132
|
+
- commerce_builder:searchInputContainer
|
|
133
|
+
|
|
134
|
+
Modified files:
|
|
135
|
+
- sfdc_cms__view/Home/content.json
|
|
136
|
+
- sfdc_cms__view/Product_Detail/content.json
|
|
137
|
+
- sfdc_cms__themeLayout/DefaultTheme/content.json
|
|
138
|
+
|
|
139
|
+
Next Steps:
|
|
140
|
+
1. Deploy: sf project deploy start -d <package-dir>/main/default/digitalExperiences/site/<store-name>
|
|
141
|
+
2. Test the store thoroughly in Experience Builder
|
|
142
|
+
3. Publish your site when ready
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Example Interaction
|
|
148
|
+
|
|
149
|
+
**User:** "Replace OOTB components with open code versions"
|
|
150
|
+
|
|
151
|
+
**Agent:** "Before replacing components, I need to verify that the open code components are set up in your store. Let me check..."
|
|
152
|
+
- ✓ Open source repo cloned
|
|
153
|
+
- ✓ Store metadata available for My_B2B_Store1
|
|
154
|
+
- ✓ Open code components are integrated
|
|
155
|
+
|
|
156
|
+
**Agent:** "I'm scanning your store's site metadata to find all OOTB commerce components and checking which have open code equivalents."
|
|
157
|
+
|
|
158
|
+
_(Runs grep -rl to find files with commerce definitions, Reads those files to extract component names, runs ls to list repo components, then cross-references with mapping table)_
|
|
159
|
+
|
|
160
|
+
```text
|
|
161
|
+
Found 8 OOTB components in your site:
|
|
162
|
+
|
|
163
|
+
No mapping available (not in mapping table):
|
|
164
|
+
- commerce_builder:searchInputContainer
|
|
165
|
+
- commerce_builder:layoutHeaderOne
|
|
166
|
+
- commerce_builder:myAccountMegaMenu
|
|
167
|
+
- commerce_builder:actionButtons
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Agent** _(asks the user via a multi-select prompt):_
|
|
171
|
+
```text
|
|
172
|
+
Which components would you like to replace?
|
|
173
|
+
|
|
174
|
+
☐ commerce_builder:heading → site:productHeading
|
|
175
|
+
☐ commerce_builder:cartBadge → site:cartBadge
|
|
176
|
+
☐ commerce_builder:searchInput → site:searchInput
|
|
177
|
+
☐ commerce_builder:cartSummary → site:cartSummary
|
|
178
|
+
☐ All of the above
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**User:** _(selects heading and cartBadge)_
|
|
182
|
+
|
|
183
|
+
**Agent:** "I'm now replacing the selected OOTB component definitions with their open code equivalents in your site's content.json files."
|
|
184
|
+
|
|
185
|
+
_(Files already known from scan — one Read/Write pass per affected file, all replacements batched)_
|
|
186
|
+
|
|
187
|
+
```text
|
|
188
|
+
✅ Replacement Complete!
|
|
189
|
+
|
|
190
|
+
Replaced 2 components across 5 files:
|
|
191
|
+
- commerce_builder:heading → site:productHeading (3 files)
|
|
192
|
+
- commerce_builder:cartBadge → site:cartBadge (2 files)
|
|
193
|
+
|
|
194
|
+
No mapping available (left unchanged):
|
|
195
|
+
- commerce_builder:searchInputContainer
|
|
196
|
+
- commerce_builder:layoutHeaderOne
|
|
197
|
+
- commerce_builder:myAccountMegaMenu
|
|
198
|
+
- commerce_builder:actionButtons
|
|
199
|
+
|
|
200
|
+
Modified files:
|
|
201
|
+
- sfdc_cms__view/Home/content.json
|
|
202
|
+
- sfdc_cms__view/Product_Detail/content.json
|
|
203
|
+
- sfdc_cms__themeLayout/DefaultTheme/content.json
|
|
204
|
+
|
|
205
|
+
Next Steps:
|
|
206
|
+
1. Deploy: sf project deploy start -d force-app/main/default/digitalExperiences/site/My_B2B_Store1
|
|
207
|
+
2. Test the store thoroughly in Experience Builder
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Rules
|
|
213
|
+
|
|
214
|
+
1. **Always explain in chat before executing.** Before every Bash or Write tool call, send a plain-text reply in the conversation that says what the command will do and why. The explanation MUST appear as a normal chat message preceding the tool call. Do NOT embed it inside the command itself (no `echo` lines, no `#` comments), do NOT prefix it to the command, and do NOT rely solely on the tool's `description` parameter — that field is not guaranteed to be visible to the user. After the explanation, issue the tool call and wait for the user to approve it before continuing.
|
|
215
|
+
2. **`assets/ootb-to-open-code-mapping.json` is the only source of truth.** Every OOTB → open-code mapping comes from that file; never guess, infer, or hallucinate component names. Each replacement's new `"definition"` MUST be the exact mapped value from the file, which always uses the `site:` namespace (e.g. `site:productHeading`). Before writing, verify the mapped target exists in the cloned open code components repo (under `.tmp/b2b-commerce-open-source-components/force-app/main/default/sfdc_cms__lwc/`); if it is not present, skip the replacement and report it under "not in repo".
|
|
216
|
+
3. **Use Read and Write tools for JSON files.** Use the Read tool to parse `content.json` files and the Write tool to update them. Do NOT use bash to parse or edit JSON — no sed, awk, perl, or regex on JSON content. Bash is only for **simple file discovery** (`grep -rl`, `find`, `ls`) — never for extracting or modifying JSON values.
|
|
217
|
+
4. **Minimize commands.** Batch work into as few commands as possible. Use a single grep to scan all files, a single ls to verify the repo, and one Read/Write pass per file. Do NOT run a separate command for every component or every directory.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Error Handling
|
|
222
|
+
|
|
223
|
+
| Error | Message | Action |
|
|
224
|
+
|-------|---------|--------|
|
|
225
|
+
| Prerequisites not met | "Open code components are not integrated yet." | Run integrating skill first |
|
|
226
|
+
| No mapping found | "No mapping found for '{component}'." | Show available mappings, report as unmapped |
|
|
227
|
+
| Component not in repo | "Open code component '{name}' not found in cloned repo." | Skip and inform user |
|
|
228
|
+
| No OOTB components in site | "No OOTB commerce components found in site metadata." | Inform user, nothing to replace |
|
|
229
|
+
| No replaceable components | "All OOTB components found are unmapped — none can be replaced." | Show the unmapped list, suggest checking for updated mappings |
|
|
230
|
+
| content.json parse error | "Failed to parse content.json: {file}" | Show error, skip file, continue with remaining files |
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Verification Checklist
|
|
235
|
+
|
|
236
|
+
- [ ] Prerequisites verified via integrating skill (repo, store, components)
|
|
237
|
+
- [ ] Site scanned + repo verified + mapping cross-referenced in minimal commands (Step 1)
|
|
238
|
+
- [ ] Each replacement uses the exact mapped `site:` definition and was verified present in the open code repo before write
|
|
239
|
+
- [ ] Breakdown shown to user with three categories before proceeding
|
|
240
|
+
- [ ] User selected components to replace (or provided names)
|
|
241
|
+
- [ ] Each `content.json` file updated in a single Read → modify → Write pass
|
|
242
|
+
- [ ] JSON structure preserved, no syntax errors introduced
|
|
243
|
+
- [ ] User informed of skipped and unmapped components
|
|
244
|
+
- [ ] Deployment command provided
|
package/skills/commerce-b2b-open-code-components-replace/assets/ootb-to-open-code-mapping.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"commerce_builder:actionButton": "site:commonButton",
|
|
3
|
+
"commerce_builder:b2bCartContents": "site:cartB2bCartContents",
|
|
4
|
+
"commerce_builder:cartAppliedPromotion": "site:cartPromotionApplied",
|
|
5
|
+
"commerce_builder:cartApplyCoupon": "site:cartApplyCoupon",
|
|
6
|
+
"commerce_builder:cartBadge": "site:cartBadge",
|
|
7
|
+
"commerce_builder:cartPromotions": "site:cartPromotions",
|
|
8
|
+
"commerce_builder:cartSummary": "site:cartSummary",
|
|
9
|
+
"commerce_builder:checkoutButton": "site:checkoutButton",
|
|
10
|
+
"commerce_builder:checkoutDeliveryAddress": "site:checkoutDeliveryAddress",
|
|
11
|
+
"commerce_builder:checkoutDeliveryMethod": "site:checkoutDeliverymethod",
|
|
12
|
+
"commerce_builder:checkoutGiftOptions": "site:checkoutGiftOptions",
|
|
13
|
+
"commerce_builder:checkoutNotification": "site:checkoutNotification",
|
|
14
|
+
"commerce_builder:checkoutPurchaseOrder": "site:checkoutPurchaseOrder",
|
|
15
|
+
"commerce_builder:checkoutShippingInstructions": "site:checkoutShippingInstructions",
|
|
16
|
+
"commerce_builder:checkoutSubscriptionPolicyDisclaimer": "site:checkoutSubscriptionPolicyDisclaimer",
|
|
17
|
+
"commerce_builder:consentBlanket": "site:legalConsentBlanket",
|
|
18
|
+
"commerce_builder:countryPickerV2": "site:commonCountryPicker",
|
|
19
|
+
"commerce_builder:drilldownNavigation": "site:commonDrilldownNavigation",
|
|
20
|
+
"commerce_builder:formattedCurrency": "site:commonFormattedCurrency",
|
|
21
|
+
"commerce_builder:heading": "site:productHeading",
|
|
22
|
+
"commerce_builder:layoutFooter": "site:layoutFooter",
|
|
23
|
+
"commerce_builder:layoutHeaderSimple": "site:layoutHeaderSimple",
|
|
24
|
+
"commerce_builder:linkList": "site:commonLinksList",
|
|
25
|
+
"commerce_builder:myAccountAddressContainer": "site:myaccountAddress",
|
|
26
|
+
"commerce_builder:navigationMenuItemList": "site:myaccountNavigationMenuItems",
|
|
27
|
+
"commerce_builder:orderConfirmationBillingDetails": "site:orderConfirmationDetailsBilling",
|
|
28
|
+
"commerce_builder:orderConfirmationDeliveryGroup": "site:orderConfirmationDeliverygroup",
|
|
29
|
+
"commerce_builder:orderConfirmationErrorMessage": "site:orderConfirmationMessageError",
|
|
30
|
+
"commerce_builder:orderConfirmationSuccessMessage": "site:orderConfirmationMessageSuccess",
|
|
31
|
+
"commerce_builder:orderDetails": "site:orderDetails",
|
|
32
|
+
"commerce_builder:orderList": "site:orderList",
|
|
33
|
+
"commerce_builder:orderListDateFilter": "site:orderListDateFilter",
|
|
34
|
+
"commerce_builder:orderProductsInfo": "site:orderProducts",
|
|
35
|
+
"commerce_builder:orderPromotionsSummary": "site:orderPromotions",
|
|
36
|
+
"commerce_builder:orderShipmentTracker": "site:orderShipmentTracker",
|
|
37
|
+
"commerce_builder:paymentByExpress": "site:paymentByExpress",
|
|
38
|
+
"commerce_builder:productAttachments": "site:productAttachments",
|
|
39
|
+
"commerce_builder:productBundle": "site:productBundle",
|
|
40
|
+
"commerce_builder:productBundleItem": "site:productBundleItem",
|
|
41
|
+
"commerce_builder:productFieldsTable": "site:productFieldsTable",
|
|
42
|
+
"commerce_builder:productFrequentlyBoughtTogether": "site:productFrequentlyBoughtTogether",
|
|
43
|
+
"commerce_builder:productMediaGallery": "site:productMediaGallery",
|
|
44
|
+
"commerce_builder:productPricingDetails": "site:productPricingDetails",
|
|
45
|
+
"commerce_builder:productSellingModelSelector": "site:productSellingmodelSelector",
|
|
46
|
+
"commerce_builder:productSet": "site:productSet",
|
|
47
|
+
"commerce_builder:promotionDiscountsApproaching": "site:promotionDiscountsApproaching",
|
|
48
|
+
"commerce_builder:purchaseOptions": "site:productPurchaseOptions",
|
|
49
|
+
"commerce_builder:purchasedProducts": "site:productListPurchased",
|
|
50
|
+
"commerce_builder:quickOrder": "site:orderQuickOrder",
|
|
51
|
+
"commerce_builder:quoteSummary": "site:quoteSummary",
|
|
52
|
+
"commerce_builder:searchFilters": "site:searchFilters",
|
|
53
|
+
"commerce_builder:searchInput": "site:searchInput",
|
|
54
|
+
"commerce_builder:searchNoResultsLayout": "site:searchResultsLayoutEmpty",
|
|
55
|
+
"commerce_builder:searchResults": "site:searchResults",
|
|
56
|
+
"commerce_builder:searchResultsLayout": "site:searchResultsLayout",
|
|
57
|
+
"commerce_builder:searchSortMenu": "site:searchSortMenu",
|
|
58
|
+
"commerce_builder:socialLinks": "site:commonLinksSocial",
|
|
59
|
+
"commerce_builder:splitShipmentHeader": "site:cartSplitshipmentHeader",
|
|
60
|
+
"commerce_builder:stickyContainer": "site:commonContainerSticky",
|
|
61
|
+
"commerce_builder:subscriptions": "site:productSubscriptions",
|
|
62
|
+
"commerce_builder:userProfileMenu": "site:myAccountUserProfileMenu",
|
|
63
|
+
"commerce_builder:variantSelector": "site:productVariantSelector",
|
|
64
|
+
"commerce_builder:wishlist": "site:productWishlist",
|
|
65
|
+
"commerce_builder:wishlistShortcut": "site:productWishlistShortcut"
|
|
66
|
+
}
|
package/skills/{developing-datacloud-code-extension → data360-code-extension-generate}/SKILL.md
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: data360-code-extension-generate
|
|
3
3
|
description: "Develop and deploy Data Cloud Code Extensions using SF CLI plugin. Use this skill when creating custom Python transformations for Data Cloud, deploying code extensions, or testing data transformations. Supports init, run, scan, and deploy operations."
|
|
4
4
|
metadata:
|
|
5
5
|
version: "1.0"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# data360-code-extension-generate Skill
|
|
9
9
|
|
|
10
10
|
## Overview
|
|
11
11
|
|
|
@@ -79,7 +79,7 @@ sf data-code-extension function init --package-dir <directory>
|
|
|
79
79
|
- `--package-dir, -p` - Directory path where the package will be created
|
|
80
80
|
|
|
81
81
|
**What it creates:**
|
|
82
|
-
```
|
|
82
|
+
```text
|
|
83
83
|
my-transform/ # Project root
|
|
84
84
|
├── payload/ # CRITICAL: This is what --package-dir must point to for deploy
|
|
85
85
|
│ ├── entrypoint.py # Main transformation code
|
|
@@ -172,7 +172,7 @@ cat payload/config.json
|
|
|
172
172
|
|
|
173
173
|
#### Step 4b: Validate Each DLO Schema
|
|
174
174
|
|
|
175
|
-
**Use the `
|
|
175
|
+
**Use the `data360-schema-get` skill to verify DLOs exist and check field names.**
|
|
176
176
|
|
|
177
177
|
For each DLO referenced in your code:
|
|
178
178
|
|
|
@@ -260,7 +260,7 @@ sf data-code-extension script deploy --target-org <org_alias> --name <name> --pa
|
|
|
260
260
|
| `Cannot connect to Docker daemon` | Start Docker Desktop |
|
|
261
261
|
| `No org found for alias` | `sf org login web --alias <org_alias>` |
|
|
262
262
|
| `config.json not found` | `sf data-code-extension script scan --entrypoint ./payload/entrypoint.py` |
|
|
263
|
-
| `DLO not found` | Verify DLO exists (use
|
|
263
|
+
| `DLO not found` | Verify DLO exists (use data360-schema-get skill), check spelling and `__dll` suffix |
|
|
264
264
|
| `Permission denied writing` | Re-run scan, verify target DLO exists and is writable |
|
|
265
265
|
| `Deploy fails - wrong directory` | Ensure `--package-dir` points to `payload/` directory, not project root |
|
|
266
266
|
|
|
@@ -285,9 +285,9 @@ sf data-code-extension script deploy --target-org <org_alias> --name <name> --pa
|
|
|
285
285
|
|
|
286
286
|
## Integration with Other Skills
|
|
287
287
|
|
|
288
|
-
**Use with
|
|
288
|
+
**Use with data360-schema-get skill (CRITICAL for validation):**
|
|
289
289
|
|
|
290
|
-
The `
|
|
290
|
+
The `data360-schema-get` skill is **required** for validating DLOs before testing code extensions.
|
|
291
291
|
|
|
292
292
|
**Use with Datakit Workflow:**
|
|
293
293
|
1. Create DLO via code extension
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# data360-code-extension-generate Skill
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
@@ -17,25 +17,25 @@ This skill helps you create Data Cloud Code Extensions through a complete workfl
|
|
|
17
17
|
## Usage
|
|
18
18
|
|
|
19
19
|
**Initialize a project:**
|
|
20
|
-
```
|
|
20
|
+
```text
|
|
21
21
|
"Create a new Data Cloud code extension project called employee-transform"
|
|
22
22
|
"Initialize a code extension to transform employee data"
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
**Test locally:**
|
|
26
|
-
```
|
|
26
|
+
```text
|
|
27
27
|
"Run the code extension in my-transform directory against afvibe org"
|
|
28
28
|
"Test the entrypoint.py file locally"
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
**Scan for permissions:**
|
|
32
|
-
```
|
|
32
|
+
```text
|
|
33
33
|
"Scan the entrypoint.py to generate config"
|
|
34
34
|
"Update permissions in config.json"
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
**Deploy:**
|
|
38
|
-
```
|
|
38
|
+
```text
|
|
39
39
|
"Deploy Employee_Upper code extension to afvibe"
|
|
40
40
|
"Deploy this transform with package-version 1.0.0"
|
|
41
41
|
```
|
|
@@ -135,7 +135,7 @@ print(f"Processed {len(output)} employee records")
|
|
|
135
135
|
|
|
136
136
|
After `init`, you'll have:
|
|
137
137
|
|
|
138
|
-
```
|
|
138
|
+
```text
|
|
139
139
|
my-transform/
|
|
140
140
|
├── payload/
|
|
141
141
|
│ ├── entrypoint.py # Your transformation code
|
|
@@ -173,7 +173,7 @@ client.write_to_dmo('EmployeeDMO', df, 'upsert')
|
|
|
173
173
|
| Wrong Python version | Use pyenv to install 3.11.0 |
|
|
174
174
|
| Org not connected | `sf org login web --alias <alias>` |
|
|
175
175
|
| Config missing | Run scan command |
|
|
176
|
-
| DLO not found | Check DLO name, use
|
|
176
|
+
| DLO not found | Check DLO name, use data360-schema-get skill |
|
|
177
177
|
| Docker error | Start Docker Desktop |
|
|
178
178
|
|
|
179
179
|
## CPU Size Selection
|
|
@@ -215,7 +215,7 @@ sf data-code-extension script scan --entrypoint ./payload/entrypoint.py
|
|
|
215
215
|
|
|
216
216
|
## File Structure
|
|
217
217
|
|
|
218
|
-
```
|
|
218
|
+
```text
|
|
219
219
|
my-project/
|
|
220
220
|
├── payload/
|
|
221
221
|
│ ├── entrypoint.py # Main code
|
|
@@ -248,7 +248,7 @@ my-project/
|
|
|
248
248
|
| Wrong Python version | Use pyenv to install 3.11.0 |
|
|
249
249
|
| Org not connected | `sf org login web --alias <alias>` |
|
|
250
250
|
| Config missing | Run scan command |
|
|
251
|
-
| DLO not found | Check DLO name, use
|
|
251
|
+
| DLO not found | Check DLO name, use data360-schema-get skill |
|
|
252
252
|
| Docker error | Start Docker Desktop |
|
|
253
253
|
|
|
254
254
|
## Deployment Checklist
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: data360-schema-get
|
|
3
3
|
description: "Retrieve Data Lake Object (DLO) and Data Model Object (DMO) schema information from Salesforce Data Cloud using REST APIs. Use this skill when you need to inspect DLO or DMO field definitions, data types, or metadata. Takes org alias and optional DLO/DMO name as parameters."
|
|
4
4
|
metadata:
|
|
5
5
|
version: "1.0"
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# data360-schema-get Skill
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
## Overview
|
|
@@ -42,7 +42,7 @@ sf org list
|
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
Example output:
|
|
45
|
-
```
|
|
45
|
+
```text
|
|
46
46
|
┌────┬───────┬──────────────────────────┬────────────────────┬───────────┐
|
|
47
47
|
│ │ Alias │ Username │ Org Id │ Status │
|
|
48
48
|
├────┼───────┼──────────────────────────┼────────────────────┼───────────┤
|
|
@@ -67,28 +67,28 @@ sf org login web --alias <org_alias>
|
|
|
67
67
|
|
|
68
68
|
### Step 3a: Execute DLO Schema Script
|
|
69
69
|
|
|
70
|
-
The Python scripts are bundled with this skill
|
|
70
|
+
The Python scripts are bundled with this skill in the `scripts/` subdirectory.
|
|
71
71
|
|
|
72
72
|
**To list all DLOs:**
|
|
73
73
|
```bash
|
|
74
|
-
python3
|
|
74
|
+
python3 ./scripts/get_dlo_schema.py <org_alias>
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
**To get specific DLO schema:**
|
|
78
78
|
```bash
|
|
79
|
-
python3
|
|
79
|
+
python3 ./scripts/get_dlo_schema.py <org_alias> <dlo_name>
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
### Step 3b: Execute DMO Schema Script
|
|
83
83
|
|
|
84
84
|
**To list all DMOs:**
|
|
85
85
|
```bash
|
|
86
|
-
python3
|
|
86
|
+
python3 ./scripts/get_dmo_schema.py <org_alias>
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
**To get specific DMO schema:**
|
|
90
90
|
```bash
|
|
91
|
-
python3
|
|
91
|
+
python3 ./scripts/get_dmo_schema.py <org_alias> <dmo_name>
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
### Step 4: Present Results
|
|
@@ -135,7 +135,7 @@ After displaying results, suggest relevant follow-up actions:
|
|
|
135
135
|
## API Endpoints Used
|
|
136
136
|
|
|
137
137
|
### List All DLOs
|
|
138
|
-
```
|
|
138
|
+
```text
|
|
139
139
|
GET /services/data/v64.0/ssot/data-lake-objects
|
|
140
140
|
```
|
|
141
141
|
|
|
@@ -158,14 +158,14 @@ Response structure:
|
|
|
158
158
|
```
|
|
159
159
|
|
|
160
160
|
### Get DLO Schema
|
|
161
|
-
```
|
|
161
|
+
```text
|
|
162
162
|
GET /services/data/v64.0/ssot/data-lake-objects/{dlo_name}
|
|
163
163
|
```
|
|
164
164
|
|
|
165
165
|
Response structure (same as individual object in list response, but wrapped in paginated format).
|
|
166
166
|
|
|
167
167
|
### List All DMOs
|
|
168
|
-
```
|
|
168
|
+
```text
|
|
169
169
|
GET /services/data/v64.0/ssot/data-model-objects
|
|
170
170
|
```
|
|
171
171
|
|
|
@@ -186,7 +186,7 @@ Response structure:
|
|
|
186
186
|
```
|
|
187
187
|
|
|
188
188
|
### Get DMO Schema
|
|
189
|
-
```
|
|
189
|
+
```text
|
|
190
190
|
GET /services/data/v64.0/ssot/data-model-objects/{dmo_name}
|
|
191
191
|
```
|
|
192
192
|
|
|
@@ -219,29 +219,29 @@ Response structure (same as individual object in list response, but wrapped in p
|
|
|
219
219
|
## Example Usage
|
|
220
220
|
|
|
221
221
|
**Example 1: List all DLOs**
|
|
222
|
-
```
|
|
222
|
+
```text
|
|
223
223
|
User: "Show me all DLOs in afvibe org"
|
|
224
224
|
|
|
225
225
|
Response:
|
|
226
226
|
1. Run sf org list to discover connected org alias
|
|
227
227
|
2. Authenticate to afvibe
|
|
228
|
-
3. Run: python3
|
|
228
|
+
3. Run: python3 ./scripts/get_dlo_schema.py afvibe
|
|
229
229
|
4. Display formatted list of DLOs
|
|
230
230
|
```
|
|
231
231
|
|
|
232
232
|
**Example 2: Get specific DLO schema**
|
|
233
|
-
```
|
|
233
|
+
```text
|
|
234
234
|
User: "Get the schema for Employee__dll in afvibe"
|
|
235
235
|
|
|
236
236
|
Response:
|
|
237
237
|
1. Run sf org list to discover connected org alias
|
|
238
238
|
2. Authenticate to afvibe
|
|
239
|
-
3. Run: python3
|
|
239
|
+
3. Run: python3 ./scripts/get_dlo_schema.py afvibe Employee__dll
|
|
240
240
|
4. Display field schema with types and metadata
|
|
241
241
|
```
|
|
242
242
|
|
|
243
243
|
**Example 3: Explore DLOs then get schema**
|
|
244
|
-
```
|
|
244
|
+
```text
|
|
245
245
|
User: "What DLOs exist in myorg and show me the schema for the Employee one"
|
|
246
246
|
|
|
247
247
|
Response:
|
|
@@ -253,29 +253,29 @@ Response:
|
|
|
253
253
|
```
|
|
254
254
|
|
|
255
255
|
**Example 4: List all DMOs**
|
|
256
|
-
```
|
|
256
|
+
```text
|
|
257
257
|
User: "Show me all DMOs in afvibe org"
|
|
258
258
|
|
|
259
259
|
Response:
|
|
260
260
|
1. Run sf org list to discover connected org alias
|
|
261
261
|
2. Authenticate to afvibe
|
|
262
|
-
3. Run: python3
|
|
262
|
+
3. Run: python3 ./scripts/get_dmo_schema.py afvibe
|
|
263
263
|
4. Display formatted list of DMOs
|
|
264
264
|
```
|
|
265
265
|
|
|
266
266
|
**Example 5: Get specific DMO schema**
|
|
267
|
-
```
|
|
267
|
+
```text
|
|
268
268
|
User: "Get the schema for Individual__dlm in afvibe"
|
|
269
269
|
|
|
270
270
|
Response:
|
|
271
271
|
1. Run sf org list to discover connected org alias
|
|
272
272
|
2. Authenticate to afvibe
|
|
273
|
-
3. Run: python3
|
|
273
|
+
3. Run: python3 ./scripts/get_dmo_schema.py afvibe Individual__dlm
|
|
274
274
|
4. Display field schema with types and metadata
|
|
275
275
|
```
|
|
276
276
|
|
|
277
277
|
**Example 6: Explore DMOs then get schema**
|
|
278
|
-
```
|
|
278
|
+
```text
|
|
279
279
|
User: "What DMOs exist in myorg and show me the schema for the Individual one"
|
|
280
280
|
|
|
281
281
|
Response:
|
|
@@ -289,7 +289,7 @@ Response:
|
|
|
289
289
|
## Output Format
|
|
290
290
|
|
|
291
291
|
### DLO List Output
|
|
292
|
-
```
|
|
292
|
+
```text
|
|
293
293
|
Found 5 DLOs in org 'afvibe':
|
|
294
294
|
|
|
295
295
|
1. DataCustomCodeLogs__dll
|
|
@@ -306,7 +306,7 @@ Found 5 DLOs in org 'afvibe':
|
|
|
306
306
|
```
|
|
307
307
|
|
|
308
308
|
### DLO Schema Output
|
|
309
|
-
```
|
|
309
|
+
```yaml
|
|
310
310
|
DLO: Employee__dll
|
|
311
311
|
Label: Employee
|
|
312
312
|
Category: Profile
|
|
@@ -331,7 +331,7 @@ Next steps:
|
|
|
331
331
|
```
|
|
332
332
|
|
|
333
333
|
### DMO List Output
|
|
334
|
-
```
|
|
334
|
+
```text
|
|
335
335
|
Found 10 DMOs in org 'afvibe':
|
|
336
336
|
|
|
337
337
|
1. Individual__dlm
|
|
@@ -346,7 +346,7 @@ Found 10 DMOs in org 'afvibe':
|
|
|
346
346
|
```
|
|
347
347
|
|
|
348
348
|
### DMO Schema Output
|
|
349
|
-
```
|
|
349
|
+
```yaml
|
|
350
350
|
DMO: Individual__dlm
|
|
351
351
|
Label: Individual
|
|
352
352
|
Category: Profile
|