@salesforce/afv-skills 1.51.0 → 1.53.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/afv-skills",
3
- "version": "1.51.0",
3
+ "version": "1.53.0",
4
4
  "description": "Salesforce skills for Agentforce Vibes",
5
5
  "license": "CC-BY-NC-4.0",
6
6
  "files": [
@@ -11,8 +11,8 @@
11
11
  "registry": "https://registry.npmjs.org"
12
12
  },
13
13
  "devDependencies": {
14
- "@salesforce/ui-bundle-template-app-react-sample-b2e": "^11.57.2",
15
- "@salesforce/ui-bundle-template-app-react-sample-b2x": "^11.57.2",
14
+ "@salesforce/ui-bundle-template-app-react-sample-b2e": "^12.4.4",
15
+ "@salesforce/ui-bundle-template-app-react-sample-b2x": "^12.4.4",
16
16
  "@salesforce/webapp-template-app-react-sample-b2e-experimental": "^1.117.1",
17
17
  "@salesforce/webapp-template-app-react-sample-b2x-experimental": "^1.117.1"
18
18
  },
@@ -12,7 +12,7 @@ metadata:
12
12
  This skill takes an intermediate JSON spec and produces a deployed Salesforce Flow with `processType=DataCaptureFlow`. It assumes the spec is already correct and approved — confirmation with the user happens upstream in the design skills.
13
13
 
14
14
  > **Runtime contract:** every org interaction in this skill is a REST call
15
- > dispatched through the Codey runtime (`execute_api` locally / the hosted
15
+ > dispatched through the Codey runtime (`dispatch` locally / the hosted
16
16
  > Headless 360 MCP in shared surfaces). This skill has **no dependency on the
17
17
  > execution environment** — no `sf` CLI, no shell scripts, no local Python, no
18
18
  > temp files. Auth probes, record reads, and record writes are single REST
@@ -6,7 +6,7 @@ The shape below is the JSON transliteration of the Metadata blob retrieved from
6
6
 
7
7
  ## The deploy call
8
8
 
9
- ```http
9
+ ```text
10
10
  POST /services/data/vXX.0/tooling/sobjects/Flow
11
11
  {
12
12
  "FullName": "<FlowApiName>",
@@ -12,7 +12,7 @@ metadata:
12
12
  This skill patches a flow that already exists in a connected org. The source of truth is the deployed flow's `Metadata` JSON, retrieved live from the Tooling `Flow` sObject — there is no spec file, no `.flow-meta.xml`, no zip, no SFDX project. The skill retrieves the JSON, edits it in memory, and PATCHes it back.
13
13
 
14
14
  > **Runtime contract:** every org interaction in this skill is a REST call
15
- > dispatched through the Codey runtime (`execute_api` locally / the hosted
15
+ > dispatched through the Codey runtime (`dispatch` locally / the hosted
16
16
  > Headless 360 MCP in shared surfaces). This skill has **no dependency on the
17
17
  > execution environment** — no `sf` CLI, no local Python, no temp files, no
18
18
  > scratch SFDX project. Auth probes, the flow retrieve, and the redeploy are
@@ -12,6 +12,14 @@ metadata:
12
12
  semver: ">=2.0.0"
13
13
  ---
14
14
 
15
+ # Querying Fs Data Capture Reference
16
+
17
+ ## When to Use This Skill
18
+
19
+ Build, edit, and deploy Salesforce Data Capture Flows (processType DataCaptureFlow) — Field Service mobile / offline forms. Use when authoring flow-meta.xml with runtime_service_fieldservice:dc* components, Repeater loops (.AllItems), master-detail child record persistence, visual polish (gradient banners, progress bars, callouts), supporting objects with FLS/permsets, debugging DataCaptureFlow deploy errors, or troubleshooting why a deployed form doesn't appear on the FSL Mobile Forms tab (DDC/WorkPlan OWD + AssignedResource sharing prerequisites).
20
+
21
+ ## Workflow
22
+
15
23
  # Salesforce Data Capture Flow Skill
16
24
 
17
25
  Build, edit, and deploy Salesforce Flows with `processType: DataCaptureFlow` (Field Service mobile / offline forms).
@@ -38,13 +46,6 @@ Optional `IsLlmTargetable` custom property — if you include it, it must be a J
38
46
 
39
47
  The `<booleanValue>false</booleanValue>` form deploys but blocks activation — error: `The value of the IsLlmTargetable custom property's value field must be a string in JSON format`. Omitting the property entirely is also fine.
40
48
 
41
- Required input variables:
42
- ```xml
43
- <variables><name>recordId</name><dataType>String</dataType><isInput>true</isInput><isOutput>false</isOutput><isCollection>false</isCollection></variables>
44
- <variables><name>parentRecordId</name><dataType>String</dataType><isInput>true</isInput><isOutput>false</isOutput><isCollection>false</isCollection></variables>
45
- <variables><name>parentObjectType</name><dataType>String</dataType><isInput>true</isInput><isOutput>false</isOutput><isCollection>false</isCollection></variables>
46
- ```
47
-
48
49
  ---
49
50
 
50
51
  ## XML structure rules
@@ -430,8 +431,6 @@ The same accessors are also used inside `recordCreates` / `recordUpdates` `input
430
431
 
431
432
  ### Conditionally-hidden required fields — use `validationRule`, not `isRequired`
432
433
 
433
- Never mark a field `isRequired=true` if it's behind a `visibilityRule`. The required check still fires while the field is hidden, so users can't proceed. Instead, set the field `isRequired=false` and wrap the rule:
434
-
435
434
  ```text
436
435
  IF(TriggerField.selectedChoiceValues = "Yes",
437
436
  AND(NOT(ISBLANK(value)), value >= 0, value <= 100000),
@@ -672,8 +671,6 @@ APEX
672
671
 
673
672
  ### 4. Tech must sign out and sign back in
674
673
 
675
- FSL Mobile caches the sharing snapshot at login. Pull-to-refresh does not pick up new sharing — only a fresh auth token will. Tell the user to **sign out completely** of the FSL Mobile app, then sign back in. After that, the Forms tab fetch succeeds and DDC records render.
676
-
677
674
  ### What is NOT the cause (don't waste time on these)
678
675
 
679
676
  - **Layout related-list naming** — `<relatedList>DynamicDataCapture</relatedList>` (singular) is the correct XML form. The UI API uses plural `DynamicDataCaptures` separately. Don't try to align them.
@@ -754,9 +751,25 @@ for f in r.get('details', {}).get('componentFailures', []):
754
751
 
755
752
  ## Reference examples
756
753
 
757
- Bundled alongside this skill at `examples/` — these are **human / IDE reference files for hand-authoring locally; they are not fetched at agent runtime.** The rules inlined in this skill body above are authoritative at runtime; the example files illustrate those same rules in a complete, deploy-ready flow for a person reading the bundle:
754
+ Bundled alongside this skill at `examples/` (in this skill):
758
755
 
759
756
  - `Data_Capture_All_Components.flow-meta.xml` — every component in deployment-ready XML
760
- - `DataCapture_Showcase.flow-meta.xml` — full end-to-end flow: multi-screen form, continue-editing recordLookup, Repeater → Loop → child records via `.AllItems`, Create-or-Update CUD chain driven by a Decision, visual polish (banner, progress, callouts, review cards). The most complete worked example of the XML format; if you have the bundle open, use it to cross-check structure against the rules above.
761
- - `Repeater_with_prepopulation.flow-meta.xml` — validated worked example of the prepopulated-Repeater pattern: `recordLookups` (ServiceResource) → Repeater bound via `collection` inputParameter with nested field `value` defaults using `SourceCollection[$EachItem].FieldApiName` → post-Repeater Loop over `.AllItems` feeding a display screen that reads `{!LoopName.nestedField.value}` and `{!LoopName.UniqueField__Id}`. Mirrors the prepopulation + post-Repeater display rules documented above.
762
- - `DataCapture_Repeater_with_data_showcase.flow` (in the org, not committed) — `.AllItems` loop spike; also documents non-working cross-row validation formula syntaxes
757
+ - `DataCapture_Showcase.flow-meta.xml` — full end-to-end flow: multi-screen form, continue-editing recordLookup, Repeater → Loop → child records via `.AllItems`, Create-or-Update CUD chain driven by a Decision, visual polish (banner, progress, callouts, review cards). **This is the canonical "truth" for XML format — when skill rules conflict with this file, the file wins.**
758
+ - `Repeater_with_prepopulation.flow-meta.xml` — canonical prepopulated-Repeater pattern: `recordLookups` (ServiceResource) → Repeater bound via `collection` inputParameter with nested field `value` defaults using `SourceCollection[$EachItem].FieldApiName` → post-Repeater Loop over `.AllItems` feeding a display screen that reads `{!LoopName.nestedField.value}` and `{!LoopName.UniqueField__Id}`. **Validated example — treat as ground truth for prepopulation and post-Repeater display XML.**
759
+ - `DataCapture_Repeater_with_data_showcase.flow` (in the org, not committed) — canonical `.AllItems` loop spike; also documents non-working cross-row validation formula syntaxes
760
+
761
+ ─────
762
+ **Runtime context (Headless 360 / agentic):** When this skill runs in the Headless 360 / agentic context, prefer the platform dispatch tool (``dispatch`` in the hosted Headless 360 MCP; ``dispatch`` in the local-dev MCP) over CLI tools (``sf project deploy``, ``sfdx``, shell commands) when possible. The operations available to you are listed below in ``steps:``; each has been verified against the live org. Call the dispatch tool against the canonical paths. CLI fallback is acceptable only when no API path exists for a given capability.
763
+
764
+ ## Critical Constraints
765
+
766
+ **Operational rules:**
767
+
768
+ - Required input variables:
769
+ ```xml
770
+ <variables><name>recordId</name><dataType>String</dataType><isInput>true</isInput><isOutput>false</isOutput><isCollection>false</isCollection></variables>
771
+ <variables><name>parentRecordId</name><dataType>String</dataType><isInput>true</isInput><isOutput>false</isOutput><isCollection>false</isCollection></variables>
772
+ <variables><name>parentObjectType</name><dataType>String</dataType><isInput>true</isInput><isOutput>false</isOutput><isCollection>false</isCollection></variables>
773
+ ```
774
+ - Never mark a field `isRequired=true` if it's behind a `visibilityRule`. The required check still fires while the field is hidden, so users can't proceed. Instead, set the field `isRequired=false` and wrap the rule:
775
+ - FSL Mobile caches the sharing snapshot at login. Pull-to-refresh does not pick up new sharing — only a fresh auth token will. Tell the user to **sign out completely** of the FSL Mobile app, then sign back in. After that, the Forms tab fetch succeeds and DDC records render.
@@ -51,7 +51,7 @@ Never expose internal skill names, SOR IDs, or tool references to the user.
51
51
  - If not covered + no context: exact structured question
52
52
 
53
53
  4. **Question format** (three or four parts):
54
- ```markdown
54
+ ```text
55
55
  **Recommendation:** [Only include when context is sufficient. Lead with the best-fit option given what's known, then briefly note alternatives with the condition under which they'd apply instead — not a flat menu of equal choices, but a ranked steer. Omit entirely when confidence is low.]
56
56
 
57
57
  **Question:** [The actual question — or a lighter "does this fit?" when a Recommendation is present]
@@ -16,7 +16,7 @@ This skill ingests a brand source and produces a 14-field color scheme that gets
16
16
  > Methodology, color tables, and contrast checks are unchanged from upstream — refresh from upstream when content changes there.
17
17
 
18
18
  > **Runtime contract:** every org interaction in this skill is a single REST
19
- > call dispatched through the Codey runtime (`execute_api` locally / the hosted
19
+ > call dispatched through the Codey runtime (`dispatch` locally / the hosted
20
20
  > Headless 360 MCP in shared surfaces). This skill has **no dependency on the
21
21
  > execution environment** — no `sf` CLI, no shell scripts, no local Python, no
22
22
  > temp files. Colors are derived and validated by the agent inline, then