@salesforce/afv-skills 1.29.0 → 1.31.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/README.md +2 -0
- package/package.json +1 -1
- package/skills/agentforce-architecture-analyze/README.md +2 -8
- package/skills/agentforce-architecture-analyze/SKILL.md +2 -2
- package/skills/agentforce-architecture-analyze/references/contract.json +4 -4
- package/skills/agentforce-architecture-analyze/references/soql_fields.md +1 -1
- package/skills/data360-activate/README.md +0 -1
- package/skills/data360-activate/SKILL.md +0 -2
- package/skills/data360-code-extension-generate/SKILL.md +15 -2
- package/skills/data360-connect/README.md +0 -2
- package/skills/data360-connect/SKILL.md +0 -2
- package/skills/data360-harmonize/SKILL.md +0 -1
- package/skills/data360-orchestrate/README.md +0 -7
- package/skills/data360-orchestrate/SKILL.md +0 -2
- package/skills/data360-prepare/README.md +0 -1
- package/skills/data360-prepare/SKILL.md +0 -1
- package/skills/data360-query/README.md +0 -1
- package/skills/data360-query/SKILL.md +0 -1
- package/skills/data360-segment/README.md +0 -1
- package/skills/data360-segment/SKILL.md +0 -2
- package/skills/dx-pkg-post-install-configure/SKILL.md +184 -0
- package/skills/experience-cms-brand-apply/SKILL.md +47 -16
- package/skills/experience-lwc-generate/README.md +3 -2
- package/skills/experience-lwc-generate/references/async-notification-patterns.md +1 -1
- package/skills/experience-lwc-generate/references/component-patterns.md +3 -3
- package/skills/experience-lwc-generate/references/flow-integration-guide.md +1 -1
- package/skills/experience-lwc-generate/references/lwc-best-practices.md +4 -4
- package/skills/experience-lwc-generate/references/scoring-and-testing.md +1 -1
- package/skills/experience-lwc-generate/references/state-management.md +2 -2
- package/skills/experience-lwc-generate/references/triangle-pattern.md +3 -3
- package/skills/experience-lwc-generate/scripts/post-tool-validate.py +2 -2
- package/skills/experience-lwc-generate/scripts/template_validator.py +1 -1
- package/skills/experience-ui-bundle-app-coordinate/SKILL.md +198 -34
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-hosting-target.sh +26 -0
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-sfdx-project.sh +15 -0
- package/skills/experience-ui-bundle-metadata-generate/SKILL.md +19 -8
- package/skills/experience-ui-bundle-metadata-generate/references/csp-metadata-format.md +2 -2
- package/skills/experience-ui-bundle-metadata-generate/scripts/check-api-version.sh +30 -0
- package/skills/external-diagram-mermaid-generate/README.md +2 -2
- package/skills/external-diagram-mermaid-generate/SKILL.md +1 -3
- package/skills/external-diagram-mermaid-generate/assets/agentforce/agent-flow.md +4 -4
- package/skills/external-diagram-mermaid-generate/assets/architecture/system-landscape.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/b2b-commerce-erd.md +3 -3
- package/skills/external-diagram-mermaid-generate/assets/datamodel/campaigns-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/consent-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/files-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/forecasting-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/fsl-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/party-model-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/quote-order-erd.md +3 -3
- package/skills/external-diagram-mermaid-generate/assets/datamodel/revenue-cloud-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/sales-cloud-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/salesforce-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/scheduler-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/service-cloud-erd.md +3 -3
- package/skills/external-diagram-mermaid-generate/assets/datamodel/territory-management-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/integration/api-sequence.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/authorization-code-pkce.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/authorization-code.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/client-credentials.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/device-authorization.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/oauth/jwt-bearer.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/oauth/refresh-token.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/user-agent-social-sign-on.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/role-hierarchy/user-hierarchy.md +1 -1
- package/skills/external-diagram-mermaid-generate/references/color-palette.md +13 -13
- package/skills/external-diagram-mermaid-generate/references/diagram-conventions.md +5 -5
- package/skills/external-diagram-mermaid-generate/references/erd-conventions.md +1 -1
- package/skills/external-diagram-mermaid-generate/references/mermaid-styling.md +2 -2
- package/skills/external-diagram-mermaid-generate/references/preview-guide.md +1 -1
- package/skills/external-diagram-mermaid-generate/references/usage-examples.md +9 -9
- package/skills/external-diagram-mermaid-generate/scripts/README.md +1 -1
- package/skills/integration-connectivity-connected-app-configure/README.md +4 -5
- package/skills/integration-connectivity-connected-app-configure/SKILL.md +2 -2
- package/skills/integration-connectivity-connected-app-configure/references/example-usage.md +7 -7
- package/skills/integration-connectivity-connected-app-configure/references/migration-guide.md +1 -1
- package/skills/integration-connectivity-connected-app-configure/references/oauth-flows-reference.md +1 -1
- package/skills/integration-connectivity-connected-app-configure/references/testing-validation-guide.md +3 -3
- package/skills/integration-connectivity-generate/README.md +1 -1
- package/skills/integration-connectivity-generate/SKILL.md +6 -0
- package/skills/integration-connectivity-generate/assets/callouts/rest-queueable-callout.cls +1 -1
- package/skills/integration-connectivity-generate/assets/external-services/external-service-operations.md +1 -1
- package/skills/integration-connectivity-generate/assets/soap/wsdl2apex-guide.md +1 -1
- package/skills/integration-connectivity-generate/references/callout-patterns.md +4 -0
- package/skills/integration-connectivity-generate/references/cdc-guide.md +2 -2
- package/skills/integration-connectivity-generate/references/event-driven-architecture-guide.md +5 -5
- package/skills/integration-connectivity-generate/references/event-patterns.md +3 -2
- package/skills/integration-connectivity-generate/references/external-services-guide.md +4 -1
- package/skills/integration-connectivity-generate/references/messaging-api-v2.md +2 -2
- package/skills/integration-connectivity-generate/references/named-credentials-automation.md +1 -1
- package/skills/integration-connectivity-generate/references/named-credentials-guide.md +12 -2
- package/skills/integration-connectivity-generate/references/platform-events-guide.md +3 -3
- package/skills/integration-connectivity-generate/references/rest-callout-patterns.md +1 -1
- package/skills/integration-connectivity-generate/references/scoring-rubric.md +1 -1
- package/skills/integration-connectivity-generate/references/security-best-practices.md +5 -2
- package/skills/integration-connectivity-generate/scripts/configure-named-credential.sh +16 -5
- package/skills/integration-connectivity-generate/scripts/set-api-credential.sh +11 -2
- package/skills/integration-connectivity-generate/scripts/suggest_credential_setup.py +4 -3
- package/skills/integration-connectivity-generate/scripts/validate_integration.py +1 -1
- package/skills/omnistudio-callable-apex-generate/README.md +1 -5
- package/skills/omnistudio-callable-apex-generate/SKILL.md +14 -4
- package/skills/omnistudio-callable-apex-generate/assets/pattern_callable_vanilla.cls +8 -1
- package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +1 -1
- package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +1 -1
- package/skills/omnistudio-datamapper-generate/SKILL.md +1 -1
- package/skills/omnistudio-datamapper-generate/assets/completion-summary-template.md +2 -2
- package/skills/omnistudio-datamapper-generate/references/best-practices.md +9 -9
- package/skills/omnistudio-datamapper-generate/references/naming-conventions.md +6 -6
- package/skills/omnistudio-datapacks-deploy/README.md +1 -1
- package/skills/omnistudio-datapacks-deploy/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +1 -1
- package/skills/omnistudio-dependencies-analyze/SKILL.md +12 -5
- package/skills/omnistudio-dependencies-analyze/references/dependency-patterns.md +9 -9
- package/skills/omnistudio-dependencies-analyze/references/namespace-guide.md +1 -1
- package/skills/omnistudio-epc-catalog-generate/README.md +1 -1
- package/skills/omnistudio-flexcard-generate/SKILL.md +11 -4
- package/skills/omnistudio-flexcard-generate/references/best-practices.md +6 -6
- package/skills/omnistudio-flexcard-generate/references/data-binding-guide.md +9 -9
- package/skills/omnistudio-integration-procedure-generate/SKILL.md +9 -1
- package/skills/omnistudio-integration-procedure-generate/references/element-types.md +3 -3
- package/skills/omnistudio-omniscript-generate/SKILL.md +2 -2
- package/skills/omnistudio-omniscript-generate/references/best-practices.md +1 -1
- package/skills/omnistudio-omniscript-generate/scripts/check-duplicate-omniscript.sh +8 -0
- package/skills/omnistudio-omniscript-generate/scripts/deploy-omniscript.sh +8 -0
- package/skills/platform-apex-logs-debug/README.md +2 -2
- package/skills/platform-apex-logs-debug/references/cli-commands.md +2 -2
- package/skills/platform-apex-logs-debug/references/debug-log-reference.md +16 -16
- package/skills/platform-apex-logs-debug/references/log-analysis-tools.md +2 -2
- package/skills/platform-apex-test-run/README.md +1 -1
- package/skills/platform-apex-test-run/references/test-fix-loop.md +2 -2
- package/skills/platform-apex-test-run/references/testing-best-practices.md +3 -3
- package/skills/platform-custom-field-generate/SKILL.md +12 -11
- package/skills/platform-custom-field-generate/references/advanced-picklists.md +17 -17
- package/skills/platform-custom-report-type-generate/SKILL.md +259 -0
- package/skills/platform-custom-report-type-generate/examples/AccountProjectsWithTasks.reportType-meta.xml +51 -0
- package/skills/platform-custom-report-type-generate/examples/AccountsWithIndustry.reportType-meta.xml +27 -0
- package/skills/platform-custom-report-type-generate/examples/AccountsWithProjects.reportType-meta.xml +44 -0
- package/skills/platform-custom-report-type-generate/references/category-values.md +32 -0
- package/skills/platform-custom-report-type-generate/references/errors-and-troubleshooting.md +24 -0
- package/skills/platform-data-manage/README.md +4 -4
- package/skills/platform-data-manage/references/bulk-testing-example.md +1 -1
- package/skills/platform-data-manage/references/crud-workflow-example.md +2 -2
- package/skills/platform-data-manage/references/orchestration.md +6 -6
- package/skills/platform-dataspace-access-configure/SKILL.md +318 -0
- package/skills/platform-docs-get/SKILL.md +4 -0
- package/skills/platform-docs-get/scripts/extract_salesforce_doc.py +78 -13
- package/skills/platform-encryption-configure/SKILL.md +122 -0
- package/skills/platform-encryption-configure/assets/EncryptionKey.settings-meta.xml +17 -0
- package/skills/platform-encryption-configure/assets/PlatformEncryption.settings-meta.xml +15 -0
- package/skills/platform-encryption-configure/assets/encrypted-field.field-meta.xml +22 -0
- package/skills/platform-encryption-configure/examples/cache-only-keys.settings-meta.xml +11 -0
- package/skills/platform-encryption-configure/references/encryption-schemes.md +34 -0
- package/skills/platform-encryption-configure/references/key-models.md +34 -0
- package/skills/platform-encryption-configure/references/tenant-secret-lifecycle.md +23 -0
- package/skills/platform-encryption-configure/scripts/validate-encryption-metadata.sh +54 -0
- package/skills/platform-flexipage-generate/SKILL.md +281 -346
- package/skills/platform-flexipage-generate/references/cli_commands.md +39 -0
- package/skills/platform-flexipage-generate/references/flexipage_fieldSection.md +162 -0
- package/skills/platform-flexipage-generate/references/flexipage_richText.md +84 -0
- package/skills/platform-flexipage-generate/references/identifiers_and_regions.md +167 -0
- package/skills/platform-flexipage-generate/references/mcp_action_examples.md +104 -0
- package/skills/platform-flexipage-generate/references/record_flexipage_dynamicHighlights.md +119 -0
- package/skills/platform-flexipage-generate/references/xml_rules.md +335 -0
- package/skills/platform-flexipage-generate/scripts/resolve-component-instructions.sh +42 -0
- package/skills/platform-flexipage-generate/scripts/scan-lwc-components.sh +113 -0
- package/skills/platform-metadata-api-context-get/SKILL.md +13 -10
- package/skills/platform-metadata-deploy/README.md +2 -2
- package/skills/platform-metadata-deploy/references/agent-deployment-guide.md +2 -2
- package/skills/platform-metadata-deploy/references/deployment-workflows.md +16 -16
- package/skills/platform-metadata-deploy/references/orchestration.md +3 -3
- package/skills/platform-metadata-deploy/references/trigger-deployment-safety.md +2 -2
- package/skills/platform-models-api-configure/SKILL.md +140 -0
- package/skills/platform-models-api-configure/scripts/get-orgjwt.sh +48 -0
- package/skills/platform-policy-rule-generate/SKILL.md +260 -0
- package/skills/platform-policy-rule-generate/references/deploy-errors.md +54 -0
- package/skills/platform-policy-rule-generate/references/fixtures-index.md +29 -0
- package/skills/platform-policy-rule-generate/references/policy-schema-full.md +250 -0
- package/skills/platform-policy-rule-generate/references/templates-access.md +132 -0
- package/skills/platform-policy-rule-generate/references/templates-advanced.md +58 -0
- package/skills/platform-policy-rule-generate/references/templates-record.md +75 -0
- package/skills/platform-policy-rule-generate/references/templates-transform.md +70 -0
- package/skills/platform-policy-rule-generate/references/templates.md +10 -0
- package/skills/platform-policy-rule-generate/references/ui-compatibility.md +142 -0
- package/skills/platform-soql-query/README.md +1 -1
- package/skills/platform-soql-query/SKILL.md +1 -1
- package/skills/platform-soql-query/references/anti-patterns.md +1 -1
- package/skills/platform-soql-query/references/field-coverage-rules.md +1 -1
- package/skills/platform-soql-query/references/query-optimization.md +1 -1
- package/skills/platform-soql-query/scripts/post-tool-validate.py +3 -3
- package/skills/data360-activate/CREDITS.md +0 -5
- package/skills/data360-connect/CREDITS.md +0 -5
- package/skills/data360-harmonize/CREDITS.md +0 -3
- package/skills/data360-orchestrate/CREDITS.md +0 -15
- package/skills/data360-orchestrate/UPSTREAM.md +0 -45
- package/skills/data360-prepare/CREDITS.md +0 -7
- package/skills/data360-query/CREDITS.md +0 -7
- package/skills/data360-segment/CREDITS.md +0 -3
- package/skills/experience-lwc-generate/CREDITS.md +0 -5
- package/skills/external-diagram-mermaid-generate/CREDITS.md +0 -46
- package/skills/external-diagram-visual-generate/CREDITS.md +0 -80
- package/skills/external-diagram-visual-generate/README.md +0 -83
- package/skills/external-diagram-visual-generate/SKILL.md +0 -207
- package/skills/external-diagram-visual-generate/assets/architecture/integration-flow.md +0 -55
- package/skills/external-diagram-visual-generate/assets/erd/core-objects.md +0 -131
- package/skills/external-diagram-visual-generate/assets/erd/custom-objects.md +0 -60
- package/skills/external-diagram-visual-generate/assets/lwc/dashboard-card.md +0 -45
- package/skills/external-diagram-visual-generate/assets/lwc/data-table.md +0 -57
- package/skills/external-diagram-visual-generate/assets/lwc/record-form.md +0 -60
- package/skills/external-diagram-visual-generate/assets/review/apex-review.md +0 -57
- package/skills/external-diagram-visual-generate/assets/review/lwc-review.md +0 -48
- package/skills/external-diagram-visual-generate/references/architect-aesthetic-guide.md +0 -257
- package/skills/external-diagram-visual-generate/references/examples-index.md +0 -35
- package/skills/external-diagram-visual-generate/references/gemini-cli-setup.md +0 -65
- package/skills/external-diagram-visual-generate/references/interview-questions.md +0 -529
- package/skills/external-diagram-visual-generate/references/iteration-workflow.md +0 -173
- package/skills/external-diagram-visual-generate/scripts/check-prerequisites.sh +0 -101
- package/skills/external-diagram-visual-generate/scripts/generate_image.py +0 -243
- package/skills/integration-connectivity-connected-app-configure/CREDITS.md +0 -3
- package/skills/integration-connectivity-generate/CREDITS.md +0 -5
- package/skills/omnistudio-callable-apex-generate/CREDITS.md +0 -9
- package/skills/omnistudio-datamapper-generate/CREDITS.md +0 -5
- package/skills/omnistudio-datapacks-deploy/CREDITS.md +0 -5
- package/skills/omnistudio-dependencies-analyze/CREDITS.md +0 -5
- package/skills/omnistudio-epc-catalog-generate/CREDITS.md +0 -14
- package/skills/omnistudio-flexcard-generate/CREDITS.md +0 -5
- package/skills/omnistudio-integration-procedure-generate/CREDITS.md +0 -5
- package/skills/omnistudio-omniscript-generate/CREDITS.md +0 -5
- package/skills/platform-apex-generate/CREDITS.md +0 -5
- package/skills/platform-apex-logs-debug/CREDITS.md +0 -22
- package/skills/platform-apex-test-generate/CREDITS.md +0 -5
- package/skills/platform-apex-test-run/CREDITS.md +0 -22
- package/skills/platform-data-manage/CREDITS.md +0 -5
- package/skills/platform-metadata-deploy/CREDITS.md +0 -25
- package/skills/platform-soql-query/CREDITS.md +0 -21
- /package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterfaceConversion/{MyCustomVlocityOpenInterface2.cls → MyCustomClass.cls} +0 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
# Critical XML Rules & Deployment Errors
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
0. [STOP — Read Before Writing ANY componentInstance](#stop--read-before-writing-any-componentinstance)
|
|
6
|
+
1. [Property Value Encoding](#1-property-value-encoding-most-common-error)
|
|
7
|
+
2. [Field References](#2-field-references)
|
|
8
|
+
3. [Region vs Facet Types](#3-region-vs-facet-types)
|
|
9
|
+
4. [itemInstances — ONE Child Per Wrapper](#4-iteminstances--one-child-per-wrapper-critical)
|
|
10
|
+
5. [Unique Identifiers and Region Names](#5-unique-identifiers-and-region-names-critical---prevents-duplicate-errors)
|
|
11
|
+
6. [Correct Element Names](#6-correct-element-names-critical--prevents-invalid-xml-errors)
|
|
12
|
+
7. [Common Deployment Errors](#common-deployment-errors)
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## STOP — Read Before Writing ANY componentInstance
|
|
17
|
+
|
|
18
|
+
**The element name is `<componentInstanceProperties>`, NEVER `<properties>`.**
|
|
19
|
+
|
|
20
|
+
```xml
|
|
21
|
+
<!-- WRONG — WILL FAIL DEPLOYMENT -->
|
|
22
|
+
<componentInstance>
|
|
23
|
+
<properties>
|
|
24
|
+
<name>label</name>
|
|
25
|
+
<value>Hello</value>
|
|
26
|
+
</properties>
|
|
27
|
+
<componentName>flexipage:fieldSection</componentName>
|
|
28
|
+
<identifier>id1</identifier>
|
|
29
|
+
</componentInstance>
|
|
30
|
+
|
|
31
|
+
<!-- CORRECT — the ONLY valid element name -->
|
|
32
|
+
<componentInstance>
|
|
33
|
+
<componentInstanceProperties>
|
|
34
|
+
<name>label</name>
|
|
35
|
+
<value>Hello</value>
|
|
36
|
+
</componentInstanceProperties>
|
|
37
|
+
<componentName>flexipage:fieldSection</componentName>
|
|
38
|
+
<identifier>id1</identifier>
|
|
39
|
+
</componentInstance>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**There is no `<properties>` element in FlexiPage XML. It does not exist. Every time you write a property inside `<componentInstance>`, you MUST write `<componentInstanceProperties>`. If you find yourself typing `<properties>`, STOP and correct it to `<componentInstanceProperties>`.**
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 1. Property Value Encoding (MOST COMMON ERROR)
|
|
47
|
+
|
|
48
|
+
**Any property value with HTML/XML characters MUST be manually encoded in the following order** (wrong order causes double-encoding corruption):
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
1. & → & (FIRST! Encode this before others)
|
|
52
|
+
2. < → <
|
|
53
|
+
3. > → >
|
|
54
|
+
4. " → "
|
|
55
|
+
5. ' → '
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Wrong:**
|
|
59
|
+
```xml
|
|
60
|
+
<value><b>Important</b> text</value>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Correct:**
|
|
64
|
+
```xml
|
|
65
|
+
<value><b>Important</b> text</value>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Check your XML:** Search for `<value>` tags - they should never contain raw `<` or `>` characters.
|
|
69
|
+
|
|
70
|
+
## 2. Field References
|
|
71
|
+
|
|
72
|
+
Use `Record.{FieldApiName}` — never `{ObjectName}.{FieldApiName}` (Salesforce resolves from Record, not object name).
|
|
73
|
+
|
|
74
|
+
```xml
|
|
75
|
+
<!-- Correct -->
|
|
76
|
+
<fieldItem>Record.Name</fieldItem>
|
|
77
|
+
|
|
78
|
+
<!-- Wrong -->
|
|
79
|
+
<fieldItem>Account.Name</fieldItem>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 3. Region vs Facet Types
|
|
83
|
+
|
|
84
|
+
**Template Regions** (header, main, sidebar):
|
|
85
|
+
```xml
|
|
86
|
+
<name>header</name>
|
|
87
|
+
<type>Region</type>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Component Facets** (internal slots like fieldSection columns):
|
|
91
|
+
```xml
|
|
92
|
+
<name>Facet-12345</name>
|
|
93
|
+
<type>Facet</type>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Rule:** If it's a template region name → `Region`. If it's a component slot → `Facet`.
|
|
97
|
+
|
|
98
|
+
## 4. itemInstances — ONE Child Per Wrapper (CRITICAL)
|
|
99
|
+
|
|
100
|
+
**Each `<itemInstances>` can contain exactly ONE child element** — either one `<componentInstance>` OR one `<fieldInstance>`. Never put multiple children inside a single `<itemInstances>`.
|
|
101
|
+
|
|
102
|
+
```xml
|
|
103
|
+
<!-- WRONG — multiple componentInstance in one itemInstances -->
|
|
104
|
+
<itemInstances>
|
|
105
|
+
<componentInstance>
|
|
106
|
+
<componentName>flexipage:field</componentName>
|
|
107
|
+
<identifier>field1</identifier>
|
|
108
|
+
</componentInstance>
|
|
109
|
+
<componentInstance>
|
|
110
|
+
<componentName>flexipage:field</componentName>
|
|
111
|
+
<identifier>field2</identifier>
|
|
112
|
+
</componentInstance>
|
|
113
|
+
</itemInstances>
|
|
114
|
+
|
|
115
|
+
<!-- CORRECT — each componentInstance in its own itemInstances -->
|
|
116
|
+
<itemInstances>
|
|
117
|
+
<componentInstance>
|
|
118
|
+
<componentName>flexipage:field</componentName>
|
|
119
|
+
<identifier>field1</identifier>
|
|
120
|
+
</componentInstance>
|
|
121
|
+
</itemInstances>
|
|
122
|
+
<itemInstances>
|
|
123
|
+
<componentInstance>
|
|
124
|
+
<componentName>flexipage:field</componentName>
|
|
125
|
+
<identifier>field2</identifier>
|
|
126
|
+
</componentInstance>
|
|
127
|
+
</itemInstances>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### fieldInstance Structure
|
|
131
|
+
|
|
132
|
+
Every fieldInstance requires:
|
|
133
|
+
```xml
|
|
134
|
+
<itemInstances>
|
|
135
|
+
<fieldInstance>
|
|
136
|
+
<fieldInstanceProperties>
|
|
137
|
+
<name>uiBehavior</name>
|
|
138
|
+
<value>none</value> <!-- none|readonly|required -->
|
|
139
|
+
</fieldInstanceProperties>
|
|
140
|
+
<fieldItem>Record.FieldName__c</fieldItem>
|
|
141
|
+
<identifier>RecordFieldName_cField</identifier>
|
|
142
|
+
</fieldInstance>
|
|
143
|
+
</itemInstances>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Valid `uiBehavior` values (lowercase only):**
|
|
147
|
+
|
|
148
|
+
| Value | Meaning |
|
|
149
|
+
|-------|---------|
|
|
150
|
+
| `none` | Field respects standard editability settings (default) |
|
|
151
|
+
| `readonly` | Field is permanently locked on this page |
|
|
152
|
+
| `required` | Field must be filled out before saving on this page |
|
|
153
|
+
|
|
154
|
+
**Rules:**
|
|
155
|
+
- Each `<itemInstances>` gets exactly ONE child (`<componentInstance>` or `<fieldInstance>`)
|
|
156
|
+
- fieldInstance must have `fieldInstanceProperties` with `uiBehavior`
|
|
157
|
+
- Use `Record.{Field}` format
|
|
158
|
+
- There is NO `edit` value — use `none` for standard editable fields
|
|
159
|
+
|
|
160
|
+
## 5. Unique Identifiers and Region Names (CRITICAL - PREVENTS DUPLICATE ERRORS)
|
|
161
|
+
|
|
162
|
+
**EVERY identifier and region/facet name MUST be unique across the entire FlexiPage file.**
|
|
163
|
+
|
|
164
|
+
- **NEVER create two `<flexiPageRegions>` blocks with the same `<name>`**
|
|
165
|
+
- **If multiple components belong to same facet, combine them in ONE region with multiple `<itemInstances>`**
|
|
166
|
+
- **NEVER reuse the same `<identifier>` value**
|
|
167
|
+
- **Always read entire file first and extract ALL existing identifiers and names**
|
|
168
|
+
- **Element order inside `<flexiPageRegions>`**: `<itemInstances>` FIRST, then `<mode>` (if needed), then `<name>`, then `<type>` — NEVER put `<name>`/`<type>` before `<itemInstances>`
|
|
169
|
+
|
|
170
|
+
**Wrong - This WILL FAIL with duplicate name error:**
|
|
171
|
+
```xml
|
|
172
|
+
<!-- First field section in detail tab -->
|
|
173
|
+
<flexiPageRegions>
|
|
174
|
+
<itemInstances>
|
|
175
|
+
<componentInstance>
|
|
176
|
+
<identifier>flexipage_property_details_fieldSection</identifier>
|
|
177
|
+
...
|
|
178
|
+
</componentInstance>
|
|
179
|
+
</itemInstances>
|
|
180
|
+
<name>detailTabContent</name> <!-- WRONG: DUPLICATE NAME -->
|
|
181
|
+
<type>Facet</type>
|
|
182
|
+
</flexiPageRegions>
|
|
183
|
+
|
|
184
|
+
<!-- Second field section in detail tab -->
|
|
185
|
+
<flexiPageRegions>
|
|
186
|
+
<itemInstances>
|
|
187
|
+
<componentInstance>
|
|
188
|
+
<identifier>flexipage_pricing_fieldSection</identifier>
|
|
189
|
+
...
|
|
190
|
+
</componentInstance>
|
|
191
|
+
</itemInstances>
|
|
192
|
+
<name>detailTabContent</name> <!-- WRONG: DUPLICATE NAME - DEPLOYMENT FAILS -->
|
|
193
|
+
<type>Facet</type>
|
|
194
|
+
</flexiPageRegions>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Correct - Combine itemInstances in ONE region:**
|
|
198
|
+
```xml
|
|
199
|
+
<!-- Both field sections in same detail tab facet -->
|
|
200
|
+
<flexiPageRegions>
|
|
201
|
+
<itemInstances>
|
|
202
|
+
<componentInstance>
|
|
203
|
+
<identifier>flexipage_property_details_fieldSection</identifier>
|
|
204
|
+
...
|
|
205
|
+
</componentInstance>
|
|
206
|
+
</itemInstances>
|
|
207
|
+
<itemInstances>
|
|
208
|
+
<componentInstance>
|
|
209
|
+
<identifier>flexipage_pricing_fieldSection</identifier>
|
|
210
|
+
...
|
|
211
|
+
</componentInstance>
|
|
212
|
+
</itemInstances>
|
|
213
|
+
<name>detailTabContent</name> <!-- CORRECT: ONE REGION, MULTIPLE COMPONENTS -->
|
|
214
|
+
<type>Facet</type>
|
|
215
|
+
</flexiPageRegions>
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**When to combine vs separate:**
|
|
219
|
+
- **Combine**: Components that logically belong to same tab/section (e.g., multiple field sections in detail tab)
|
|
220
|
+
- **Separate**: Components that belong to different tabs/sections (e.g., `detailTabContent` vs `relatedTabContent`)
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## 6. Correct Element Names (CRITICAL — PREVENTS INVALID XML ERRORS)
|
|
225
|
+
|
|
226
|
+
**FlexiPage XML uses specific element names. Common LLM hallucinations use WRONG names that cause deployment failures.**
|
|
227
|
+
|
|
228
|
+
| WRONG (do NOT use) | CORRECT |
|
|
229
|
+
|---|---|
|
|
230
|
+
| `<entityType>` | `<sobjectType>` |
|
|
231
|
+
| `<properties>` | `<componentInstanceProperties>` |
|
|
232
|
+
| `<regions>` | `<flexiPageRegions>` |
|
|
233
|
+
| `<components>` | `<itemInstances>` |
|
|
234
|
+
| `<innerComponents>` | (does not exist — use facets for nesting) |
|
|
235
|
+
| `<fieldItems>` | `<itemInstances>` containing `<fieldInstance>` |
|
|
236
|
+
| `<template>value</template>` | `<template><name>value</name></template>` |
|
|
237
|
+
| `<parentFlexiPage>flexipage:templateName</parentFlexiPage>` | `<parentFlexiPage>flexipage__default_rec_L</parentFlexiPage>` |
|
|
238
|
+
|
|
239
|
+
**Do NOT invent elements or component names:**
|
|
240
|
+
|
|
241
|
+
Only use component names discovered through the 3-tier discovery process or present in the template from CLI. Do NOT add any XML element that is not present in the template structure from the CLI template. If a component name did not come from discovery or the CLI template.
|
|
242
|
+
|
|
243
|
+
| WRONG (do NOT use) | Why / What to use instead |
|
|
244
|
+
|---|---|
|
|
245
|
+
| `<apiVersion>` | Not a FlexiPage element — API version lives in `sfdx-project.json` |
|
|
246
|
+
| `<description>` | Not a FlexiPage element — use `<masterLabel>` for the page name |
|
|
247
|
+
| `flexipage:tabs` | Does not exist — use `flexipage:tabset` + `flexipage:tab` in facets |
|
|
248
|
+
| `flexipage:tabset2` | Does not exist — correct name is `flexipage:tabset` |
|
|
249
|
+
| `flexipage:facet` | Does not exist — use `flexipage:column` with `body` property |
|
|
250
|
+
| `flexipage:fields` | Does not exist — use individual `fieldInstance` elements in a field facet |
|
|
251
|
+
| `<type>String</type>` inside `componentInstanceProperties` | Remove — only valid `<type>` value is `decorator`, and only for UtilityBar pages |
|
|
252
|
+
|
|
253
|
+
**Correct top-level FlexiPage structure (element order):**
|
|
254
|
+
```xml
|
|
255
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
256
|
+
<FlexiPage xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
257
|
+
<flexiPageRegions>...</flexiPageRegions>
|
|
258
|
+
<masterLabel>Page Name</masterLabel>
|
|
259
|
+
<parentFlexiPage>flexipage__default_rec_L</parentFlexiPage>
|
|
260
|
+
<sobjectType>Account</sobjectType>
|
|
261
|
+
<template>
|
|
262
|
+
<name>flexipage:recordHomeTemplateDesktop</name>
|
|
263
|
+
</template>
|
|
264
|
+
<type>RecordPage</type>
|
|
265
|
+
</FlexiPage>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**Correct componentInstance structure:**
|
|
269
|
+
```xml
|
|
270
|
+
<componentInstance>
|
|
271
|
+
<componentInstanceProperties>
|
|
272
|
+
<name>propertyName</name>
|
|
273
|
+
<value>propertyValue</value>
|
|
274
|
+
</componentInstanceProperties>
|
|
275
|
+
<componentName>lightning:card</componentName>
|
|
276
|
+
<identifier>unique_id_1</identifier>
|
|
277
|
+
</componentInstance>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**`<componentInstanceProperties>` children — `<name>`, `<value>`, and optionally `<type>`:**
|
|
281
|
+
|
|
282
|
+
```xml
|
|
283
|
+
<!-- WRONG — "String", "Facet", etc. are NOT valid <type> values -->
|
|
284
|
+
<componentInstanceProperties>
|
|
285
|
+
<name>fieldApiName</name>
|
|
286
|
+
<type>String</type>
|
|
287
|
+
<value>Record.Name</value>
|
|
288
|
+
</componentInstanceProperties>
|
|
289
|
+
|
|
290
|
+
<!-- CORRECT — omit <type> for standard properties (most cases) -->
|
|
291
|
+
<componentInstanceProperties>
|
|
292
|
+
<name>fieldApiName</name>
|
|
293
|
+
<value>Record.Name</value>
|
|
294
|
+
</componentInstanceProperties>
|
|
295
|
+
|
|
296
|
+
<!-- CORRECT — <type>decorator</type> ONLY for UtilityBar component decorators -->
|
|
297
|
+
<componentInstanceProperties>
|
|
298
|
+
<name>panelHeight</name>
|
|
299
|
+
<type>decorator</type>
|
|
300
|
+
<value>480</value>
|
|
301
|
+
</componentInstanceProperties>
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**`<type>` rules:**
|
|
305
|
+
- If omitted (default): the property applies to the Lightning component itself
|
|
306
|
+
- If `decorator`: the property applies to the **component decorator** (a wrapper that adds capabilities like height/width when opened)
|
|
307
|
+
- The ONLY valid value is `decorator` — never `String`, `Facet`, `Integer`, etc.
|
|
308
|
+
- Component decorators are ONLY supported on **UtilityBar** page types — do NOT use `<type>decorator</type>` on RecordPage, AppPage, or HomePage
|
|
309
|
+
|
|
310
|
+
**Nesting is done via facets, NOT via inner elements.** Components that contain other components reference a facet name in their properties; the facet is a sibling `<flexiPageRegions>` with `<type>Facet</type>`.
|
|
311
|
+
|
|
312
|
+
| Error | Cause | Fix |
|
|
313
|
+
|-------|-------|-----|
|
|
314
|
+
| "Element regions invalid in FlexiPage" | Used `<regions>` instead of `<flexiPageRegions>` | Replace with `<flexiPageRegions>` |
|
|
315
|
+
| "Element components invalid in FlexiPageRegion" | Used `<components>` instead of `<itemInstances>` | Replace with `<itemInstances>` |
|
|
316
|
+
| "couldn't retrieve design time component information" | Used hallucinated component name (`flexipage:tabs`, `flexipage:tabset2`) | Use `flexipage:tabset` — see `identifiers_and_regions.md` for the full 3-layer tab pattern |
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## Common Deployment Errors
|
|
321
|
+
|
|
322
|
+
| Error | Cause | Fix |
|
|
323
|
+
|-------|-------|-----|
|
|
324
|
+
| "We couldn't retrieve or load the information on the field" | Invalid field API name — field doesn't exist or has incorrect spelling | Use MCP tools or describe commands to discover valid fields |
|
|
325
|
+
| "Invalid field reference" | Used `ObjectName.Field` instead of `Record.Field` | Change to `Record.{FieldApiName}` |
|
|
326
|
+
| "Element componentInstance is duplicated at this location in type ItemInstance" | Multiple `<componentInstance>` in one `<itemInstances>` | Each `<componentInstance>` needs its own `<itemInstances>` wrapper |
|
|
327
|
+
| "Element fieldInstance is duplicated" | Multiple fieldInstances in one `<itemInstances>` | Each fieldInstance needs its own `<itemInstances>` wrapper |
|
|
328
|
+
| "Missing fieldInstanceProperties" | No uiBehavior specified | Add `fieldInstanceProperties` with `uiBehavior` |
|
|
329
|
+
| "Unused Facet" | Facet defined but not referenced by any component | Remove Facet or reference it in a component property |
|
|
330
|
+
| "XML parsing error" | Unencoded HTML/XML in property values | Encode `<`, `>`, `&`, `"`, `'` in all `<value>` tags |
|
|
331
|
+
| "Cannot create component with namespace" | Invalid page name (used `__c` suffix) | Use `Volunteer_Record_Page` not `Volunteer__c_Record_Page` |
|
|
332
|
+
| "Region specifies mode that parent doesn't support" | Added `<mode>` to a region that doesn't support it | Only use `<mode>` where required (e.g., `<mode>Replace</mode>` in `detailTabContent` for Dynamic Forms) |
|
|
333
|
+
| "We couldn't retrieve the design time component information for component X" | Hallucinated component name (e.g., `flexipage:tabs`, `flexipage:tabset2`) | Use correct component name — see Section 6 table and `identifiers_and_regions.md` for valid patterns |
|
|
334
|
+
| "'String' is not a valid value for the enum 'ComponentInstancePropertyTypeEnum'" | Used invalid `<type>` value (e.g., `String`, `Facet`, `Integer`) inside `<componentInstanceProperties>` | Remove `<type>` entirely — the only valid value is `decorator`, and only for UtilityBar page types |
|
|
335
|
+
| "Element apiVersion invalid at this location in type FlexiPage" | Added `<apiVersion>` to FlexiPage XML | Remove — API version belongs in `sfdx-project.json`, not in FlexiPage metadata |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# resolve-component-instructions.sh — Resolve the instructions file path for a component.
|
|
3
|
+
#
|
|
4
|
+
# Usage: scripts/resolve-component-instructions.sh <componentDefinition>
|
|
5
|
+
#
|
|
6
|
+
# Arguments:
|
|
7
|
+
# componentDefinition — Component FQN in colon format (e.g., "flexipage:fieldSection")
|
|
8
|
+
#
|
|
9
|
+
# Output: The path to the instructions file if it exists, or empty string if not found.
|
|
10
|
+
#
|
|
11
|
+
# Examples:
|
|
12
|
+
# scripts/resolve-component-instructions.sh "record_flexipage:dynamicHighlights"
|
|
13
|
+
# → references/record_flexipage_dynamicHighlights.md
|
|
14
|
+
#
|
|
15
|
+
# scripts/resolve-component-instructions.sh "flexipage:fieldSection"
|
|
16
|
+
# → references/flexipage_fieldSection.md
|
|
17
|
+
#
|
|
18
|
+
# scripts/resolve-component-instructions.sh "c:expenseTracker"
|
|
19
|
+
# → (empty — file does not exist)
|
|
20
|
+
|
|
21
|
+
set -euo pipefail
|
|
22
|
+
|
|
23
|
+
COMPONENT="${1:-}"
|
|
24
|
+
|
|
25
|
+
if [ -z "$COMPONENT" ]; then
|
|
26
|
+
echo "Usage: $0 <componentDefinition>" >&2
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Derive filename: replace ':' with '_', append .md
|
|
31
|
+
FILENAME=$(echo "$COMPONENT" | sed 's/:/_/g').md
|
|
32
|
+
|
|
33
|
+
# Resolve path relative to the skill directory
|
|
34
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
35
|
+
SKILL_DIR="$(dirname "$SCRIPT_DIR")"
|
|
36
|
+
FILEPATH="$SKILL_DIR/references/$FILENAME"
|
|
37
|
+
|
|
38
|
+
if [ -f "$FILEPATH" ]; then
|
|
39
|
+
echo "references/$FILENAME"
|
|
40
|
+
else
|
|
41
|
+
echo ""
|
|
42
|
+
fi
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# scan-lwc-components.sh — Scan local SFDX project for LWC components matching a query.
|
|
3
|
+
#
|
|
4
|
+
# Usage: scripts/scan-lwc-components.sh <query> [packageDirectory]
|
|
5
|
+
#
|
|
6
|
+
# Arguments:
|
|
7
|
+
# query — User intent keywords (e.g., "expense tracker")
|
|
8
|
+
# packageDirectory — SFDX package directory path (default: read from sfdx-project.json)
|
|
9
|
+
#
|
|
10
|
+
# Output: Ranked JSON array of matches with confidence scores.
|
|
11
|
+
# [{"name": "expenseTracker", "score": 75, "confidence": "high"}]
|
|
12
|
+
#
|
|
13
|
+
# Confidence tiers:
|
|
14
|
+
# high (≥70%): auto-select, confirm with user
|
|
15
|
+
# medium (40-69%): present ranked list for user selection
|
|
16
|
+
# low (<40%): skip, proceed to Tier 2
|
|
17
|
+
|
|
18
|
+
set -euo pipefail
|
|
19
|
+
|
|
20
|
+
QUERY="${1:-}"
|
|
21
|
+
PKG_DIR="${2:-}"
|
|
22
|
+
|
|
23
|
+
if [ -z "$QUERY" ]; then
|
|
24
|
+
echo "Usage: $0 <query> [packageDirectory]" >&2
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# Resolve package directory from sfdx-project.json if not provided
|
|
29
|
+
if [ -z "$PKG_DIR" ]; then
|
|
30
|
+
if [ -f "sfdx-project.json" ]; then
|
|
31
|
+
PKG_DIR=$(python3 -c "
|
|
32
|
+
import json, sys
|
|
33
|
+
with open('sfdx-project.json') as f:
|
|
34
|
+
data = json.load(f)
|
|
35
|
+
dirs = data.get('packageDirectories', [])
|
|
36
|
+
if dirs:
|
|
37
|
+
print(dirs[0].get('path', 'force-app'))
|
|
38
|
+
else:
|
|
39
|
+
print('force-app')
|
|
40
|
+
" 2>/dev/null || echo "force-app")
|
|
41
|
+
else
|
|
42
|
+
PKG_DIR="force-app"
|
|
43
|
+
fi
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# Check if package directory exists
|
|
47
|
+
if [ ! -d "$PKG_DIR" ]; then
|
|
48
|
+
echo "[]"
|
|
49
|
+
exit 0
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# Tokenize query: lowercase, split on spaces
|
|
53
|
+
IFS=' ' read -ra QUERY_TOKENS <<< "$(echo "$QUERY" | tr '[:upper:]' '[:lower:]')"
|
|
54
|
+
|
|
55
|
+
# Find all LWC component directories
|
|
56
|
+
RESULTS="["
|
|
57
|
+
FIRST=true
|
|
58
|
+
|
|
59
|
+
while IFS= read -r dir; do
|
|
60
|
+
COMP_NAME=$(basename "$dir")
|
|
61
|
+
|
|
62
|
+
# Tokenize camelCase component name: split on uppercase boundaries → lowercase
|
|
63
|
+
COMP_TOKENS=$(echo "$COMP_NAME" | sed 's/\([a-z]\)\([A-Z]\)/\1 \2/g' | tr '[:upper:]' '[:lower:]')
|
|
64
|
+
IFS=' ' read -ra TOKENS <<< "$COMP_TOKENS"
|
|
65
|
+
TOTAL=${#TOKENS[@]}
|
|
66
|
+
|
|
67
|
+
if [ "$TOTAL" -eq 0 ]; then
|
|
68
|
+
continue
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
# Count matched tokens
|
|
72
|
+
MATCHED=0
|
|
73
|
+
for qt in "${QUERY_TOKENS[@]}"; do
|
|
74
|
+
for ct in "${TOKENS[@]}"; do
|
|
75
|
+
if [ "$qt" = "$ct" ]; then
|
|
76
|
+
MATCHED=$((MATCHED + 1))
|
|
77
|
+
break
|
|
78
|
+
fi
|
|
79
|
+
done
|
|
80
|
+
done
|
|
81
|
+
|
|
82
|
+
# Calculate score
|
|
83
|
+
SCORE=$(( (MATCHED * 100) / TOTAL ))
|
|
84
|
+
|
|
85
|
+
# Determine confidence tier
|
|
86
|
+
if [ "$SCORE" -ge 70 ]; then
|
|
87
|
+
CONFIDENCE="high"
|
|
88
|
+
elif [ "$SCORE" -ge 40 ]; then
|
|
89
|
+
CONFIDENCE="medium"
|
|
90
|
+
else
|
|
91
|
+
CONFIDENCE="low"
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# Only include medium and high confidence matches
|
|
95
|
+
if [ "$SCORE" -ge 40 ]; then
|
|
96
|
+
if [ "$FIRST" = true ]; then
|
|
97
|
+
FIRST=false
|
|
98
|
+
else
|
|
99
|
+
RESULTS+=","
|
|
100
|
+
fi
|
|
101
|
+
RESULTS+="{\"name\":\"$COMP_NAME\",\"score\":$SCORE,\"confidence\":\"$CONFIDENCE\"}"
|
|
102
|
+
fi
|
|
103
|
+
done < <(find "$PKG_DIR" -path "*/lwc/*" -type d -maxdepth 5 | grep -v "__tests__")
|
|
104
|
+
|
|
105
|
+
RESULTS+="]"
|
|
106
|
+
|
|
107
|
+
# Sort by score descending (using python for JSON sorting)
|
|
108
|
+
echo "$RESULTS" | python3 -c "
|
|
109
|
+
import json, sys
|
|
110
|
+
data = json.load(sys.stdin)
|
|
111
|
+
data.sort(key=lambda x: x['score'], reverse=True)
|
|
112
|
+
print(json.dumps(data, indent=2))
|
|
113
|
+
" 2>/dev/null || echo "$RESULTS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-metadata-api-context-get
|
|
3
|
-
description: "Salesforce
|
|
3
|
+
description: "REQUIRED companion for Salesforce metadata generation — load this schema/API-context skill in the SAME turn as ANY metadata generation skill; if you load a generator, you ALSO load this. Use it whenever you create, generate, add, edit, or author metadata or a *-meta.xml file: custom object, custom field, formula field, picklist, lookup, master-detail, validation rule, permission set, profile, custom tab, lightning record page, flexipage, list view, custom application, flow, layout, record type, sharing rules, report, and 604 Metadata API types. It provides the authoritative schema, fields, field properties, required flags, allowed enum values, and XML structure so generated *-meta.xml deploys cleanly — skipping it causes hallucinated element names and deploy failures. Trigger on *-meta.xml, metadata schema, api context, 'Salesforce metadata', or 'sfdx project'. DO NOT use for SOQL, DML, runtime sObject access, or Tooling API records."
|
|
4
4
|
metadata:
|
|
5
5
|
version: "1.0"
|
|
6
6
|
minApiVersion: "67.0"
|
|
@@ -53,12 +53,15 @@ To get information about a specific metadata type:
|
|
|
53
53
|
|
|
54
54
|
### Example Queries (Section-Specific)
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
|
|
56
|
+
**Recommended:**
|
|
57
|
+
- "Show me only the 'fields' section from CustomObject.json"
|
|
58
|
+
- "What fields are in the 'fields' section of Profile.json?"
|
|
59
|
+
- "Load the 'description' and 'fields' sections from Flow.json"
|
|
60
|
+
- "Give me just the 'declarative_metadata_sample_definition' from ApexClass.json"
|
|
61
|
+
|
|
62
|
+
**Avoid:**
|
|
63
|
+
- "Show me the CustomObject metadata type" (too broad - entire file)
|
|
64
|
+
- "Load CustomObject.json" (includes unnecessary WSDL and other sections)
|
|
62
65
|
|
|
63
66
|
## JSON File Structure
|
|
64
67
|
|
|
@@ -116,7 +119,7 @@ Some metadata types have additional sections specific to their functionality. Se
|
|
|
116
119
|
|
|
117
120
|
### Section-Specific Loading (BEST PRACTICE)
|
|
118
121
|
|
|
119
|
-
|
|
122
|
+
**CRITICAL WARNING: DO NOT use the `read_file` tool (or any whole-file reading tool) on these JSON files!**
|
|
120
123
|
|
|
121
124
|
`read_file` loads the entire file content into your context, defeating the purpose of section-specific consumption. You will waste 60-80% of your token budget loading unnecessary WSDL segments and verbose sections. (Using `Read` on small files such as this SKILL.md or the index table is fine — this rule is only about the large metadata-type JSON files.)
|
|
122
125
|
|
|
@@ -140,13 +143,13 @@ See [`examples/README.md`](examples/README.md) for complete documentation and us
|
|
|
140
143
|
|
|
141
144
|
### What NOT to Do
|
|
142
145
|
|
|
143
|
-
|
|
146
|
+
**NEVER use the `read_file` tool on these JSON files**:
|
|
144
147
|
```text
|
|
145
148
|
read_file assets/metadata_api/CustomObject.json # Loads entire file into context!
|
|
146
149
|
read_file assets/metadata_api/Flow.json # Wastes 60-80% tokens!
|
|
147
150
|
```
|
|
148
151
|
|
|
149
|
-
|
|
152
|
+
**NEVER load all files**:
|
|
150
153
|
```text
|
|
151
154
|
read_file assets/metadata_api/*.json # This loads ~15MB of data!
|
|
152
155
|
```
|
|
@@ -16,7 +16,7 @@ Comprehensive Salesforce DevOps automation using sf CLI v2. Validate, deploy, ve
|
|
|
16
16
|
|
|
17
17
|
### 1. Invoke the skill
|
|
18
18
|
|
|
19
|
-
```
|
|
19
|
+
```text
|
|
20
20
|
Skill: platform-metadata-deploy
|
|
21
21
|
Request: "Deploy all changes to org dev with validation"
|
|
22
22
|
```
|
|
@@ -61,7 +61,7 @@ After a successful dry run, guide the user to the next safe step:
|
|
|
61
61
|
|
|
62
62
|
## Orchestration Order
|
|
63
63
|
|
|
64
|
-
```
|
|
64
|
+
```text
|
|
65
65
|
platform-custom-object-generate/automation-flow-generate → platform-metadata-deploy → platform-data-manage
|
|
66
66
|
```
|
|
67
67
|
|
|
@@ -31,7 +31,7 @@ Agentforce agents consist of multiple metadata components:
|
|
|
31
31
|
|
|
32
32
|
### Metadata Hierarchy
|
|
33
33
|
|
|
34
|
-
```
|
|
34
|
+
```text
|
|
35
35
|
Bot (Agent Definition)
|
|
36
36
|
└── BotVersion (Version Config)
|
|
37
37
|
└── GenAiPlannerBundle (Reasoning Engine)
|
|
@@ -365,7 +365,7 @@ Pass the BotVersion number you intend to activate as the third argument.
|
|
|
365
365
|
|
|
366
366
|
**Critical:** Dependencies must be deployed BEFORE the agent.
|
|
367
367
|
|
|
368
|
-
```
|
|
368
|
+
```text
|
|
369
369
|
1. Custom Objects/Fields (platform-custom-object-generate, platform-custom-field-generate)
|
|
370
370
|
↓
|
|
371
371
|
2. Apex Classes (platform-apex-generate)
|