@salesforce/afv-skills 1.59.0 → 1.60.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/agentforce-architecture-analyze/SKILL.md +66 -17
- package/skills/agentforce-architecture-analyze/assets/cli/show_access_token.yaml +4 -7
- package/skills/agentforce-architecture-analyze/references/contract.json +1 -1
- package/skills/agentforce-architecture-analyze/scripts/emit_env.py +2 -2
- package/skills/agentforce-architecture-analyze/scripts/main.py +40 -44
- package/skills/agentforce-architecture-analyze/scripts/rest_client.py +11 -3
- package/skills/agentforce-architecture-analyze/scripts/sf_cli.py +77 -10
- package/skills/agentforce-architecture-analyze/scripts/tests/test_end_to_end_fixture.py +1 -0
- package/skills/agentforce-architecture-analyze/scripts/tests/test_flow_children_inflation.py +1 -0
- package/skills/agentforce-architecture-analyze/scripts/tests/test_main_pipeline.py +53 -2
- package/skills/agentforce-architecture-analyze/scripts/tests/test_resolve_creds.py +184 -36
- package/skills/agentforce-architecture-analyze/scripts/tests/test_rest_client.py +17 -0
- package/skills/agentforce-architecture-analyze/scripts/tests/test_sf_cli.py +165 -11
- package/skills/agentforce-architecture-analyze/scripts/tests/test_skill_md_pipeline_block.py +319 -0
- package/skills/agentforce-d360-analyze/SKILL.md +28 -10
- package/skills/agentforce-d360-analyze/scripts/dc.py +200 -50
- package/skills/agentforce-d360-analyze/scripts/discover_sessions.py +10 -6
- package/skills/agentforce-d360-analyze/scripts/fetch_dc.py +22 -6
- package/skills/agentforce-d360-analyze/scripts/resolve_session.py +21 -13
- package/skills/agentforce-d360-analyze/scripts/tests/test_dc_and_resolve_session.py +298 -76
- package/skills/agentforce-d360-analyze/scripts/tests/test_default_target_org.py +432 -0
- package/skills/agentforce-d360-analyze/scripts/tests/test_discover_sessions.py +1 -1
- package/skills/agentforce-d360-analyze/scripts/tests/test_resolve_session_main.py +9 -3
- package/skills/agentforce-d360-analyze/scripts/tests/test_skill_md_prefix_block.py +176 -0
- package/skills/consumer-goods-accruals-datakit-deploy/SKILL.md +17 -27
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/setup.js +7 -17
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/00-check-prerequisites.js +47 -63
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/01-download-static-resource.js +10 -13
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/02-replace-org-id.js +46 -46
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/03-deploy-metadata.js +4 -21
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/06-create-dataspace.js +58 -82
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/07-deploy-accruals-reports.js +16 -315
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/08-deploy-ui.js +9 -24
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/09-completion.js +44 -44
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/utils.js +11 -63
- package/skills/consumer-goods-rtr-datacloud-export-configure/SKILL.md +2 -1
- package/skills/consumer-goods-tpe-dashboard-configure/SKILL.md +2 -1
- package/skills/consumer-goods-tpe-dashboard-custom-kpi-configure/SKILL.md +2 -1
- package/skills/consumer-goods-tpe-datakit-deploy/SKILL.md +2 -1
- package/skills/data360-schema-get/SKILL.md +3 -3
- package/skills/design-systems-slds-validate/references/report-format.md +1 -1
- package/skills/dx-org-manage/SKILL.md +1 -0
- package/skills/dx-org-shape-manage/SKILL.md +1 -0
- package/skills/dx-org-snapshot-manage/SKILL.md +172 -0
- package/skills/dx-org-snapshot-manage/examples/create_error_output.json +16 -0
- package/skills/dx-org-snapshot-manage/examples/create_success_output.json +19 -0
- package/skills/dx-org-snapshot-manage/examples/delete_output.json +9 -0
- package/skills/dx-org-snapshot-manage/examples/get_output.json +19 -0
- package/skills/dx-org-snapshot-manage/examples/list_output.json +36 -0
- package/skills/dx-org-snapshot-manage/references/cli_flags.md +179 -0
- package/skills/dx-org-snapshot-manage/references/snapshot_usage.md +55 -0
- package/skills/dx-org-trial-expiration-check/SKILL.md +1 -1
- package/skills/dx-org-trial-expiration-check/scripts/check_expiration.sh +2 -2
- package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +7 -5
- package/skills/education-cloud-student-recruitment-agent-configure/references/prerequisites.md +11 -11
- package/skills/experience-content-media-image-generate/SKILL.md +83 -0
- package/skills/experience-content-media-image-generate/scripts/download-image.sh +84 -0
- package/skills/external-diagram-mermaid-generate/SKILL.md +12 -12
- package/skills/field-service-data-capture-migrate/references/component-mapping.md +1 -1
- package/skills/field-service-data-capture-migrate/references/fsm-dc-capability-catalog.md +1 -2
- package/skills/field-service-data-capture-migrate/references/known-deploy-errors.md +1 -0
- package/skills/field-service-data-capture-migrate/references/transformer-rules.md +1 -1
- package/skills/field-service-data-capture-migrate/scripts/transform_flow.py +12 -1
- package/skills/field-service-data-capture-migrate/scripts/vendor/build_flow.py +4 -1
- package/skills/field-service-setup-orchestrator-get/SKILL.md +0 -1
- package/skills/insurance-brokerage-agency-billing-configure/SKILL.md +233 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/accounting-setup.md +117 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/billing-rules-config.md +237 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/billing-settings.md +271 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/demo-policy-config.md +138 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/org-defaults.md +64 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/permissions-config.md +226 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/prerequisites.md +142 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +3 -2
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-execution-state-and-recovery.md +3 -3
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-overview.md +68 -45
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-visit-creation-data.md +17 -18
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +16 -3
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-creation-data.md +16 -13
- package/skills/marketing-message-test/SKILL.md +194 -0
- package/skills/marketing-message-test/references/api-contract.md +333 -0
- package/skills/omnistudio-callable-apex-generate/SKILL.md +3 -3
- package/skills/omnistudio-datamapper-generate/SKILL.md +6 -6
- package/skills/omnistudio-datapacks-deploy/SKILL.md +11 -11
- package/skills/omnistudio-dependencies-analyze/SKILL.md +5 -5
- package/skills/omnistudio-epc-catalog-generate/SKILL.md +6 -6
- package/skills/omnistudio-flexcard-generate/SKILL.md +6 -6
- package/skills/omnistudio-integration-procedure-generate/SKILL.md +6 -6
- package/skills/omnistudio-omniscript-generate/SKILL.md +6 -5
- package/skills/platform-apex-logs-debug/SKILL.md +1 -0
- package/skills/platform-metadata-deploy/SKILL.md +1 -0
- package/skills/platform-models-api-configure/SKILL.md +5 -5
- package/skills/platform-soql-query/SKILL.md +1 -0
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +17 -6
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +107 -192
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone-action.json +6 -6
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +49 -20
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +4 -4
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +224 -290
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/workflow.md +295 -0
- package/skills/service-itsm-incident-priority-configure/SKILL.md +1 -1
- package/skills/service-itsm-slack-itservice-configure/SKILL.md +2 -1
- package/skills/service-itsm-slack-itservice-configure/references/manage-slack-connection.md +2 -2
- package/skills/service-omni-channel-setup-coordinate/SKILL.md +20 -13
- package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +5 -55
- package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +0 -38
- package/skills/service-omni-command-center-analyze/SKILL.md +2 -3
- package/skills/service-omni-command-center-analyze/scripts/analyze.sh +3 -3
- package/skills/tableau-next-asset-create/README.md +65 -0
- package/skills/tableau-next-asset-create/SKILL.md +409 -0
- package/skills/tableau-next-asset-create/references/admin-users.md +149 -0
- package/skills/tableau-next-asset-create/references/ai-readiness.md +355 -0
- package/skills/tableau-next-asset-create/references/alerts.md +111 -0
- package/skills/tableau-next-asset-create/references/build-workflow.md +819 -0
- package/skills/tableau-next-asset-create/references/dashboard-authoring.md +302 -0
- package/skills/tableau-next-asset-create/references/dashboard-design-principles.md +352 -0
- package/skills/tableau-next-asset-create/references/data-transform-gotchas.md +210 -0
- package/skills/tableau-next-asset-create/references/data-understanding.md +387 -0
- package/skills/tableau-next-asset-create/references/deep-reference-index.md +74 -0
- package/skills/tableau-next-asset-create/references/destructive-operations.md +62 -0
- package/skills/tableau-next-asset-create/references/edit-dashboard.md +273 -0
- package/skills/tableau-next-asset-create/references/edit-visualization.md +529 -0
- package/skills/tableau-next-asset-create/references/empty-source-handling.md +104 -0
- package/skills/tableau-next-asset-create/references/ingest-and-metric-gotchas.md +638 -0
- package/skills/tableau-next-asset-create/references/insight-bundle.md +69 -0
- package/skills/tableau-next-asset-create/references/large-flat-file-handling.md +331 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/_envelope.json +54 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/_shared-widget-fields.json +122 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/add_page.json +29 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/delete_page.json +27 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/discard_dashboard.json +11 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/move_widget.json +30 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/move_widget_to_page.json +30 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/place_widget_on_page.json +30 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/remove_widget_from_dashboard.json +16 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/remove_widget_from_page.json +26 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/rename_page.json +28 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/save_dashboard.json +18 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/undo.json +11 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_button_widget.json +69 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_container_widget.json +88 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_filter_widget.json +146 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_metric_widget.json +78 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_navigation_widget.json +80 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_parameter_widget.json +160 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_text_widget.json +103 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_visualization_widget.json +68 -0
- package/skills/tableau-next-asset-create/references/sdm-tool-reference.md +721 -0
- package/skills/tableau-next-asset-create/references/semantic-query-and-enrichment.md +355 -0
- package/skills/tableau-next-asset-create/references/shared-gates.md +322 -0
- package/skills/tableau-next-asset-create/references/sharing-and-promotion.md +306 -0
- package/skills/tableau-next-asset-create/references/tasks/ai-readiness-audit.md +51 -0
- package/skills/tableau-next-asset-create/references/tasks/analyze-data.md +48 -0
- package/skills/tableau-next-asset-create/references/tasks/build-dashboard.md +66 -0
- package/skills/tableau-next-asset-create/references/tasks/build-end-to-end.md +73 -0
- package/skills/tableau-next-asset-create/references/tasks/create-data-transform.md +51 -0
- package/skills/tableau-next-asset-create/references/tasks/create-viz.md +58 -0
- package/skills/tableau-next-asset-create/references/tasks/edit-dashboard.md +80 -0
- package/skills/tableau-next-asset-create/references/tasks/edit-sdm.md +106 -0
- package/skills/tableau-next-asset-create/references/tasks/edit-viz.md +40 -0
- package/skills/tableau-next-asset-create/references/tasks/enrich-model.md +68 -0
- package/skills/tableau-next-asset-create/references/tasks/ingest-flat-file.md +68 -0
- package/skills/tableau-next-asset-create/references/tasks/manage-alert.md +35 -0
- package/skills/tableau-next-asset-create/references/tasks/profile-dataset.md +47 -0
- package/skills/tableau-next-asset-create/references/tasks/promote-or-reuse.md +46 -0
- package/skills/tableau-next-asset-create/references/tasks/provision-user.md +39 -0
- package/skills/tableau-next-asset-create/references/tasks/query-model.md +92 -0
- package/skills/tableau-next-asset-create/references/tasks/review-verified-questions.md +42 -0
- package/skills/tableau-next-asset-create/references/tasks/share-asset.md +37 -0
- package/skills/tableau-next-asset-create/references/verified-questions.md +125 -0
- package/skills/tableau-next-asset-create/references/viz-authoring.md +992 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/predefined-incident-policy.json +0 -102
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# CLI Flags Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for the scratch org snapshot commands: `sf org create snapshot`, `sf org get snapshot`, `sf org list snapshot`, and `sf org delete snapshot`.
|
|
4
|
+
|
|
5
|
+
> **Global flags (all four commands):** `--json` (format output as JSON — ALWAYS use this) and `--flags-dir <value>` (import flag values from a directory).
|
|
6
|
+
>
|
|
7
|
+
> **Dev Hub flag (all four commands):** `--target-dev-hub` / `-v` — username or alias of the Dev Hub org. Required unless the `target-dev-hub` config variable is already set. There is **no** `--target-org` flag; snapshots are a Dev Hub feature.
|
|
8
|
+
>
|
|
9
|
+
> **API version (all four commands):** `--api-version <value>` — override the API version used for API requests.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## `sf org create snapshot`
|
|
14
|
+
|
|
15
|
+
Create a point-in-time copy (metadata and data) of a scratch org.
|
|
16
|
+
|
|
17
|
+
### Required Flags
|
|
18
|
+
|
|
19
|
+
| Flag | Alias | Description | Example |
|
|
20
|
+
|------|-------|-------------|---------|
|
|
21
|
+
| `--source-org` | `-o` | ID or locally authenticated username/alias of the scratch org to snapshot. Aliases/usernames auto-resolve to the org ID (IDs start with `00D`). | `--source-org my-scratch` |
|
|
22
|
+
| `--name` | `-n` | Unique name of the snapshot. **Max 15 characters** — longer values fail with `STRING_TOO_LONG` (verified live). | `--name Dependencies` |
|
|
23
|
+
| `--target-dev-hub` | `-v` | Dev Hub username or alias. Not required if the `target-dev-hub` config is set. | `--target-dev-hub DevHub` |
|
|
24
|
+
|
|
25
|
+
### Optional Flags
|
|
26
|
+
|
|
27
|
+
| Flag | Alias | Description | Example |
|
|
28
|
+
|------|-------|-------------|---------|
|
|
29
|
+
| `--description` | `-d` | Description of the snapshot. Document the contents; include a VCS tag or commit ID. | `--description "Contains PackageA v1.1.0"` |
|
|
30
|
+
| `--api-version` | | Override the API version. | `--api-version 66.0` |
|
|
31
|
+
|
|
32
|
+
### Usage Patterns
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Basic snapshot creation (by alias)
|
|
36
|
+
sf org create snapshot --source-org my-scratch --name MySnapshot --json
|
|
37
|
+
|
|
38
|
+
# With a description
|
|
39
|
+
sf org create snapshot --source-org my-scratch --name MySnapshot \
|
|
40
|
+
--description "Baseline with Package v1.2.0" --json
|
|
41
|
+
|
|
42
|
+
# Using the source org ID instead of an alias
|
|
43
|
+
sf org create snapshot --source-org 00D5g00000001XyEAI --name MySnapshot --json
|
|
44
|
+
|
|
45
|
+
# Specify the Dev Hub explicitly
|
|
46
|
+
sf org create snapshot --source-org my-scratch --name NightlyBranch \
|
|
47
|
+
--target-dev-hub NightlyDevHub --json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Legacy alias:** `sf force org snapshot create`
|
|
51
|
+
|
|
52
|
+
> **Asynchronous:** creation returns a record whose `Status` is `InProgress` (verified live — not `New` or `Pending`). Poll `sf org get snapshot` until `Status` is `Active` before using the snapshot.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## `sf org get snapshot`
|
|
57
|
+
|
|
58
|
+
Get details about a snapshot — including its creation status.
|
|
59
|
+
|
|
60
|
+
### Required Flags
|
|
61
|
+
|
|
62
|
+
| Flag | Alias | Description | Example |
|
|
63
|
+
|------|-------|-------------|---------|
|
|
64
|
+
| `--snapshot` | `-s` | Name or ID of the snapshot to retrieve. IDs start with `0Oo`. | `--snapshot Dependencies` |
|
|
65
|
+
| `--target-dev-hub` | `-v` | Dev Hub username or alias (or default config). | `--target-dev-hub DevHub` |
|
|
66
|
+
|
|
67
|
+
### Usage Patterns
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Get details by name
|
|
71
|
+
sf org get snapshot --snapshot Dependencies --json
|
|
72
|
+
|
|
73
|
+
# Get details by ID
|
|
74
|
+
sf org get snapshot --snapshot 0Oo5g00000001ABCAA --json
|
|
75
|
+
|
|
76
|
+
# Against a specific Dev Hub
|
|
77
|
+
sf org get snapshot --snapshot Dependencies --target-dev-hub SnapshotDevHub --json
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Legacy alias:** `sf force org snapshot get`
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## `sf org list snapshot`
|
|
85
|
+
|
|
86
|
+
List the scratch org snapshots in a Dev Hub.
|
|
87
|
+
|
|
88
|
+
### Flags
|
|
89
|
+
|
|
90
|
+
Takes only the Dev Hub flag (`--target-dev-hub` / `-v`) plus the global flags. As an admin you see all snapshots in the Dev Hub; as a user you see only your own unless granted View All.
|
|
91
|
+
|
|
92
|
+
> **No server-side filters** (verified live). `sf org list snapshot` returns every snapshot (subject to your visibility) with no flags to filter by status, date, or expiry. Filter client-side from the `--json` output.
|
|
93
|
+
|
|
94
|
+
### Usage Patterns
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# List snapshots in the default Dev Hub
|
|
98
|
+
sf org list snapshot --json
|
|
99
|
+
|
|
100
|
+
# List snapshots in a specific Dev Hub
|
|
101
|
+
sf org list snapshot --target-dev-hub SnapshotDevHub --json
|
|
102
|
+
|
|
103
|
+
# Save the list to a file
|
|
104
|
+
sf org list snapshot --json > tmp/MySnapshotList.json
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Legacy alias:** `sf force org snapshot list`
|
|
108
|
+
|
|
109
|
+
### Filtering for snapshots expiring soon
|
|
110
|
+
|
|
111
|
+
Each snapshot record carries an `ExpirationDate` (`YYYY-MM-DD`, populated once the snapshot is `Active`; `null` while `InProgress` — verified live). To list snapshots expiring within N days, pipe the JSON through `jq`:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Snapshots expiring within DAYS days, soonest first (negative = already expired).
|
|
115
|
+
DAYS=30
|
|
116
|
+
sf org list snapshot --target-dev-hub SnapshotDevHub --json \
|
|
117
|
+
| jq --argjson days "$DAYS" -r '
|
|
118
|
+
(now | floor) as $now
|
|
119
|
+
| [ .result[]
|
|
120
|
+
| select(.ExpirationDate != null)
|
|
121
|
+
| . + { daysUntilExpiry: ((((.ExpirationDate + "T00:00:00Z") | fromdateiso8601) - $now) / 86400 | floor) }
|
|
122
|
+
| select(.daysUntilExpiry <= $days) ]
|
|
123
|
+
| sort_by(.daysUntilExpiry)
|
|
124
|
+
| if length == 0 then "No snapshots expiring within \($days) day(s)."
|
|
125
|
+
else (.[] | "\(.SnapshotName)\t[\(.Status)]\texpires \(.ExpirationDate)\tin \(.daysUntilExpiry)d") end'
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Requires `jq` (>= 1.6) on the PATH alongside `sf`.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## `sf org delete snapshot`
|
|
133
|
+
|
|
134
|
+
Delete a scratch org snapshot.
|
|
135
|
+
|
|
136
|
+
### Required Flags
|
|
137
|
+
|
|
138
|
+
| Flag | Alias | Description | Example |
|
|
139
|
+
|------|-------|-------------|---------|
|
|
140
|
+
| `--snapshot` | `-s` | Name or ID of the snapshot to delete. IDs start with `0Oo`. | `--snapshot BaseSnapshot` |
|
|
141
|
+
| `--target-dev-hub` | `-v` | Dev Hub username or alias (or default config). | `--target-dev-hub DevHub` |
|
|
142
|
+
|
|
143
|
+
### Optional Flags
|
|
144
|
+
|
|
145
|
+
| Flag | Alias | Description | Example |
|
|
146
|
+
|------|-------|-------------|---------|
|
|
147
|
+
| `--no-prompt` | `-p` | Don't prompt to confirm the deletion (use in scripts/CI). | `--no-prompt` |
|
|
148
|
+
| `--api-version` | | Override the API version. | `--api-version 66.0` |
|
|
149
|
+
|
|
150
|
+
### Usage Patterns
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Delete by ID (prompts for confirmation)
|
|
154
|
+
sf org delete snapshot --snapshot 0Oo5g00000001ABCAA --json
|
|
155
|
+
|
|
156
|
+
# Delete by name without prompting (scripts/CI)
|
|
157
|
+
sf org delete snapshot --snapshot BaseSnapshot --no-prompt --json
|
|
158
|
+
|
|
159
|
+
# Against a specific Dev Hub
|
|
160
|
+
sf org delete snapshot --snapshot BaseSnapshot --target-dev-hub SnapshotDevHub --json
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Legacy alias:** `sf force org snapshot delete`
|
|
164
|
+
|
|
165
|
+
> Without `--no-prompt`, the command asks for confirmation. Declining returns with no result and performs no deletion. Dev Hub admins can delete any snapshot; users can delete only their own unless granted Modify All.
|
|
166
|
+
>
|
|
167
|
+
> **Bulk-delete guardrail:** there is no single command to delete multiple snapshots — each `sf org delete snapshot` call removes one snapshot. Before deleting multiple/all snapshots, or any delete with `--no-prompt`, first run `sf org list snapshot --json`, echo the resolved target names back to the user, and obtain explicit confirmation.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Important Notes
|
|
172
|
+
|
|
173
|
+
- **No update command exists anywhere in the CLI** (verified — `sf org --help` under the `org` topic lists only `create/get/list/delete` for `snapshot`). To rename, redescribe, or change expiration, delete and recreate.
|
|
174
|
+
- **Dev Hub must have Scratch Org Snapshots enabled** — otherwise commands fail with a feature-not-enabled error.
|
|
175
|
+
- **Snapshot name limit (create)** — `--name` is capped at **15 characters** (verified live); a longer value fails with `STRING_TOO_LONG`. Names must also be unique within the Dev Hub.
|
|
176
|
+
- **Source-org auto-resolution (create)** — `--source-org` accepts an org ID (`00D...`), username, or alias; aliases/usernames resolve to the org ID locally.
|
|
177
|
+
- **Snapshot identifier (get/delete)** — `--snapshot` accepts the snapshot name or its ID (`0Oo...`).
|
|
178
|
+
- **Asynchronous creation** — `create` does not wait for the snapshot to finish; use `sf org get snapshot` to poll `Status` until it is `Active`.
|
|
179
|
+
- **Returned fields** — snapshot records expose `Id`, `SnapshotName`, `Description`, `Status`, `SourceOrg`, `CreatedDate`, `LastModifiedDate`, `ExpirationDate`, and `Error` (populated only when `Status` is `Error`), plus the standard sobject `attributes` wrapper on `get`/`list`.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Using Snapshots in Scratch Org Definition Files
|
|
2
|
+
|
|
3
|
+
Snapshot lifecycle (create/get/list/delete) is owned by this skill. Once a snapshot's `Status` is `Active` (checked via `sf org get snapshot` — see `SKILL.md`), reference it by name to create new scratch orgs — that part is owned by the **`dx-org-manage`** skill.
|
|
4
|
+
|
|
5
|
+
## Scratch Org Definition File Format
|
|
6
|
+
|
|
7
|
+
Use the `snapshot` field instead of `edition` in `project-scratch-def.json`:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"orgName": "My Company",
|
|
12
|
+
"snapshot": "MySnapshot",
|
|
13
|
+
"features": ["EnableSetPasswordInApi"]
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Key Differences from Edition-Based Definitions
|
|
18
|
+
|
|
19
|
+
| Field | Edition-based | Snapshot-based |
|
|
20
|
+
|-------|--------------|----------------|
|
|
21
|
+
| Primary field | `"edition": "Developer"` | `"snapshot": "MySnapshot"` |
|
|
22
|
+
| Contents | Empty org with edition defaults | Pre-configured org state (metadata + data) from the snapshot |
|
|
23
|
+
|
|
24
|
+
## Or via Command Flag
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
sf org create scratch --snapshot MySnapshot --target-dev-hub <alias> --alias <name> --json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Common Use Cases
|
|
31
|
+
|
|
32
|
+
### 1. Package Development
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{ "orgName": "Package Dev Org", "snapshot": "Dependencies_v1.2.0" }
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 2. Testing Baseline
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{ "orgName": "Test Baseline", "snapshot": "TestData_Populated" }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 3. CI/CD Pipeline
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{ "orgName": "CI Scratch Org", "snapshot": "Nightly_Build_Baseline" }
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Workflow Summary
|
|
51
|
+
|
|
52
|
+
1. **Create the snapshot** (`dx-org-snapshot-manage`): `sf org create snapshot --source-org <scratch> --name MySnapshot`
|
|
53
|
+
2. **Poll status** (`dx-org-snapshot-manage`): `sf org get snapshot --snapshot MySnapshot` until `Status` is `Active`
|
|
54
|
+
3. **Reference in a definition file**: `"snapshot": "MySnapshot"`
|
|
55
|
+
4. **Create the new scratch org** (`dx-org-manage`): `sf org create scratch --definition-file config/project-scratch-def.json`
|
|
@@ -173,7 +173,7 @@ Org IDs of at-risk orgs so the steps are actionable:
|
|
|
173
173
|
for LDV orgs. (Salesforce Help article 000387818.)
|
|
174
174
|
- **Nonprofits:** email your Account Executive with subject "Trial Extension"
|
|
175
175
|
and the trial-starter email, Org ID, and username; AMER
|
|
176
|
-
|
|
176
|
+
the Power of Us Desk, other regions My Account support /
|
|
177
177
|
1-800-NO-SOFTWARE. Works even if already expired. (Article 004754220.)
|
|
178
178
|
- **Developer Edition:** DE orgs have no subscription clock but are deactivated
|
|
179
179
|
after prolonged inactivity (~180 days without a login); log in periodically.
|
|
@@ -402,8 +402,8 @@ render_renew() {
|
|
|
402
402
|
echo " - Email of the customer that started the trial"
|
|
403
403
|
echo " - Org ID (or your org's name if you can't access the Org ID)"
|
|
404
404
|
echo " - Username"
|
|
405
|
-
echo " AMER:
|
|
406
|
-
echo " Other regions:
|
|
405
|
+
echo " AMER: the Power of Us Desk"
|
|
406
|
+
echo " Other regions: My Account support or 1-800-NO-SOFTWARE"
|
|
407
407
|
echo " Ref: Salesforce Help article 004754220"
|
|
408
408
|
echo
|
|
409
409
|
echo " Developer Edition orgs:"
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: education-cloud-student-recruitment-agent-configure
|
|
3
|
-
description: "Use this skill to set up and configure the Education Cloud Student Recruitment Agent (SRA) — the packaged Agentforce agent (namespace sturecruitment) that answers admissions FAQs, captures inquiries, registers campus tours, and files applications for prospective students. TRIGGER when the user wants to: create or configure an admissions, recruitment, or enrollment agent, set up the Student Recruitment Agent, deploy SRA to an Experience Cloud site, clone the SRA flows or permission sets, add the SRA subagents (Admissions and Enrollments FAQ; Admissions Application; Campus Tours, Visits, and Events Registration; Request for Information), wire Learning Program grounding, or build the escalation subagent. Guides platform enablement, permissions, grounding, agent creation, and channel deployment — API-first with UI fallback. DO NOT TRIGGER for the Transfer Credit Agent, generic Agentforce authoring (use agentforce-generate), or base Education Cloud domain enablement."
|
|
3
|
+
description: "Use this skill to set up and configure the Education Cloud Student Recruitment Agent (SRA) — the packaged Agentforce agent (namespace sturecruitment) that answers admissions FAQs, captures inquiries, registers campus tours, and files applications for prospective students. TRIGGER when the user wants to: create or configure an admissions, recruitment, or enrollment agent, set up the Student Recruitment Agent, deploy SRA to an Experience Cloud site, clone the SRA flows or permission sets, add the SRA subagents (Admissions and Enrollments FAQ; Admissions Application; Campus Tours, Visits, and Events Registration; Request for Information), wire Learning Program grounding, or build the escalation subagent. Guides platform enablement, permissions, grounding, agent creation, and channel deployment — API-first with UI fallback. DO NOT TRIGGER for the Transfer Credit Agent, generic Agentforce authoring (use agentforce-generate), or base Education Cloud domain enablement (use education-cloud-domain-configure)."
|
|
4
4
|
metadata:
|
|
5
5
|
version: "1.0"
|
|
6
6
|
minApiVersion: "67.0"
|
|
7
7
|
domains: ["Education"]
|
|
8
8
|
relatedSkills:
|
|
9
9
|
- "agentforce-generate"
|
|
10
|
+
- "education-cloud-domain-configure"
|
|
10
11
|
- "platform-custom-field-generate"
|
|
11
12
|
- "platform-metadata-deploy"
|
|
12
13
|
- "platform-sharing-owd-configure"
|
|
@@ -30,7 +31,7 @@ metadata:
|
|
|
30
31
|
|
|
31
32
|
- **In scope**: The full SRA setup sequence — the three platform toggles (Einstein, SRA, Omni-Channel; Agentforce provisioning is a verify-only Step-1 gate, not a toggle the skill flips), the `EducationCloudAiAgentAccess` permission set + OWD/sharing foundation, Learning Program grounding (Data Cloud data stream + hybrid search index + prompt template) and Knowledge/data-library grounding, creating the Service (unauth) and Employee (auth) agents, adding the 4 packaged SRA subagents, building the customer escalation subagent, cloning and configuring the 6 admissions flows (Service path), and deploying to Experience Cloud channels with user verification.
|
|
32
33
|
- **Out of scope**: The **Transfer Credit Agent** (separate agent, own perms/help — never include its steps); generic Agentforce agent authoring from scratch (see Cross-Skill Integration below); Data Cloud connector plumbing beyond the SRA grounding path; deciding the substance of Knowledge article content — Claude may draft an article for the customer to review, but the customer owns what it says.
|
|
33
|
-
- **The EDU foundation is a checked dependency, not an assumption**: SRA depends on base Education Cloud enablement, Person Accounts, R&A domain objects, and Data Cloud. This skill doesn't re-implement
|
|
34
|
+
- **The EDU foundation is a checked dependency, not an assumption**: SRA depends on base Education Cloud enablement, Person Accounts, R&A domain objects, and Data Cloud. This skill doesn't re-implement `education-cloud-domain-configure`, but verifies each piece concretely (step 2a) and only routes there to *fill a gap it detects*.
|
|
34
35
|
|
|
35
36
|
---
|
|
36
37
|
|
|
@@ -53,7 +54,7 @@ Defaults unless specified:
|
|
|
53
54
|
|
|
54
55
|
**Step 0 resolves the org's current API version; Step 1 is a hard prerequisites gate — clear both before touching anything else.** The rest is a linear, sequential set of steps (0–13); confirm before every irreversible or org-shaping action, and end every step with its verify call. (See *Talking to the user* below.)
|
|
55
56
|
|
|
56
|
-
**Every org-changing step walks a three-tier ladder, then verifies — tier = what runtime you have:** **T1** headless MCP (`dispatch`/`dispatch_readonly`, no shell) · **T2** `sf` CLI (needs a shell) · **T3** Setup UI. Try T1; drop to T2 on a route/allowlist failure; T3 if no shell. Steps carry a best-tier tag; the verify-only preflight (step 1) uses STOP/
|
|
57
|
+
**Every org-changing step walks a three-tier ladder, then verifies — tier = what runtime you have:** **T1** headless MCP (`dispatch`/`dispatch_readonly`, no shell) · **T2** `sf` CLI (needs a shell) · **T3** Setup UI. Try T1; drop to T2 on a route/allowlist failure; T3 if no shell. Steps carry a best-tier tag; the verify-only preflight (step 1) uses STOP/REDIRECT labels instead. `references/execution-model.md` has the ladder detail — allowlist, route signals, query-routing, API-version policy; read it whenever a tier or route is unclear.
|
|
57
58
|
|
|
58
59
|
**Several steps land on T3 with no tier-1/tier-2 write path at all** (hand the user the Setup path, then verify) — each is tagged inline where it occurs (e.g. `[T3 · ...]` on steps 8, 9a, 12); every other action has a tier-1 path.
|
|
59
60
|
|
|
@@ -77,11 +78,11 @@ All steps are sequential. Each step is one action + its best tier + a pointer to
|
|
|
77
78
|
|
|
78
79
|
### 1 — Verify prerequisites & gates
|
|
79
80
|
|
|
80
|
-
> **Step 1 is a hard gate — clear it before enabling or building anything.** If a STOP check (external grant the skill can't flip) or
|
|
81
|
+
> **Step 1 is a hard gate — clear it before enabling or building anything.** If a STOP check (external grant the skill can't flip) or a REDIRECT check (foundation the skill doesn't own) fails, **do not start the toggles or the foundation build** — stop and request the grant, or redirect to `education-cloud-domain-configure`, then re-verify. **Also confirm now, before saying anything to the customer: `references/customer-narration.md` has been read in full this run (see *Talking to the user* above) — this gate isn't cleared until that's true too.** Don't build permissions/OWD/grounding for an agent that can't exist. Full preflight-gate table and every verify call: `references/prerequisites.md`.
|
|
81
82
|
|
|
82
83
|
1. **Confirm edition & the Einstein-for-EDU license.** Both are STOP checks — halt if either is missing. (Agentforce provisioning is verified in item 2; Data Cloud in item 2a.)
|
|
83
84
|
2. **Verify the three SRA gates** — Agentforce provisioning, Education Cloud enabled, and the runtime `orgHasStudentRecruitmentAgentBetaAccess` check (a three-part AND — its exact composition and per-part verify live in `references/prerequisites.md`). Stop if provisioning, the license, or the Gater is missing.
|
|
84
|
-
- **2a — Verify the EDU foundation** (don't assume
|
|
85
|
+
- **2a — Verify the EDU foundation** (don't assume `education-cloud-domain-configure` ran): EDU enablement, Person Accounts, R&A domain schema, and Data Cloud. Route the first three to `education-cloud-domain-configure`, then re-verify; Data Cloud is a Home-Org grant (stop, don't redirect).
|
|
85
86
|
|
|
86
87
|
### 2 — Enable the platform toggles
|
|
87
88
|
|
|
@@ -159,6 +160,7 @@ This skill configures a live org; no repository files. Expected outputs:
|
|
|
159
160
|
|
|
160
161
|
| Need | Delegate to |
|
|
161
162
|
|------|-------------|
|
|
163
|
+
| A verified EDU-foundation gap in EDU enablement, Person Accounts, or the R&A domain schema (step 2a) — not blind pre-delegation. Missing **Data Cloud** is *not* routed here — that's a Home-Org grant, outside this skill's scope | `education-cloud-domain-configure` |
|
|
162
164
|
| Generic Agentforce agent authoring or metadata generation | `agentforce-generate` |
|
|
163
165
|
|
|
164
166
|
---
|
package/skills/education-cloud-student-recruitment-agent-configure/references/prerequisites.md
CHANGED
|
@@ -12,22 +12,22 @@ The **Tier** column below uses the three-tier ladder (see `execution-model.md`):
|
|
|
12
12
|
|
|
13
13
|
The dividing question is **"can the skill flip it via API?"**:
|
|
14
14
|
|
|
15
|
-
- **Prerequisites → verify only.** If unmet, tell the user to fix it, then **re-verify** — never enable it here. These are: the **Einstein for Education Cloud license** (P3, commercial/provisioning grant); **Education Cloud enablement** (P2 — owned by
|
|
15
|
+
- **Prerequisites → verify only.** If unmet, tell the user to fix it (or route to `education-cloud-domain-configure`), then **re-verify** — never enable it here. These are: the **Einstein for Education Cloud license** (P3, commercial/provisioning grant); **Education Cloud enablement** (P2 — owned by the domain-setup skill); the **EinsteinGPT add-on license** (the commercial entitlement — distinct from the `EinsteinGPTPlatformEnabled` *toggle*, which IS in-skill-flippable at step 2, next bullet); and the running user being a **System Administrator**.
|
|
16
16
|
- **In-skill → check if present, enable if not**, through the tier ladder **Headless → other MCPs → `sf` CLI → manual UI**. These are: **Einstein Setup** (`EinsteinGPTPlatformEnabled`) and the **SRA toggle** (`RecruitmentAgentEnabled` — the skill's defining action).
|
|
17
17
|
|
|
18
18
|
## The preflight gate — run this FIRST, before any enable or build work
|
|
19
19
|
|
|
20
|
-
**Step 1 is a hard gate, not a formality.** Before enabling or configuring anything (the toggles at Step 2 onward), verify every prerequisite the skill **cannot fix itself**. If one is unmet, **do not proceed into the skill's own work** — stop
|
|
20
|
+
**Step 1 is a hard gate, not a formality.** Before enabling or configuring anything (the toggles at Step 2 onward), verify every prerequisite the skill **cannot fix itself**. If one is unmet, **do not proceed into the skill's own work** — stop or redirect, get it resolved, and re-verify. Building permissions / OWD / grounding for an agent that can never exist is wasted effort; catch it here at Step 1, not when agent creation 501s at Step 9.
|
|
21
21
|
|
|
22
22
|
Classify each check into one of three outcomes:
|
|
23
23
|
|
|
24
24
|
| Outcome | Prerequisites | Action if unmet |
|
|
25
25
|
|---|---|---|
|
|
26
26
|
| **STOP** — external grant; nothing in our ecosystem can flip it | **P4** Agentforce provisioning · **P3** Einstein-for-EDU license · the **SRA Gater** (`StudentRecruitmentAgent256`) · **P5 / F-iv** Data Cloud entitlement · **P1** edition | Report exactly which grant is missing and **halt**. Request it from Salesforce / the account team. Do **not** start the toggles (Step 2). |
|
|
27
|
-
| **
|
|
27
|
+
| **REDIRECT** — foundation the skill doesn't own but `education-cloud-domain-configure` does | **P2 / F-i** EDU enablement · **F-ii** Person Accounts · **F-iii** R&A domain schema | Send the user to `education-cloud-domain-configure` to fill that gap, then **re-verify** and continue. Do not re-implement it here. |
|
|
28
28
|
| **ENABLE in-skill** — the skill flips these via the tier ladder | **Einstein Setup** (`EinsteinGPTPlatformEnabled`) · the **SRA toggle** (`RecruitmentAgentEnabled`); running-user builder PS **assignment** is likewise in-skill (Step 4) | Not a gate — Einstein/SRA toggles are the enablement step's job (item 3, `platform-enablement.md`), the PS assignment is item 4's. Check, enable if off, verify. |
|
|
29
29
|
|
|
30
|
-
**Proceed to the toggles (Step 2) only when every STOP and
|
|
30
|
+
**Proceed to the toggles (Step 2) only when every STOP and REDIRECT check is green.** These are definitive *now*, at Step 1 — you don't have to wait for a downstream failure to learn the answer. In particular, **provisioning is detectable here**: if `BotDefinition` is an unqueryable / `INVALID_TYPE` object (vs. a `200` with zero rows, which means "provisioned, no bots yet"), the org isn't Agentforce-provisioned — that's a STOP at Step 1, not a surprise 501 at Step 9. Use the concrete verify call for each requirement in the tables below.
|
|
31
31
|
|
|
32
32
|
> **WARNING: When reporting findings, an ENABLE-in-skill item being off is not a FAIL.** `RecruitmentAgentEnabled = false` and `EinsteinGPTPlatformEnabled = false` are the expected starting state — this skill turns them on itself at Step 2/3. Report them as not-yet-enabled/no external action needed, and reserve FAIL/STOP language for the STOP row's unmet external grants.
|
|
33
33
|
|
|
@@ -38,14 +38,14 @@ Almost nothing here is *purely* manual. For each prerequisite, separate **can th
|
|
|
38
38
|
| # | Requirement | Configure? (tier) | **Verify call (run this)** | Tier |
|
|
39
39
|
|---|---|---|---|---|
|
|
40
40
|
| P1 | Edition (Enterprise / Performance / Unlimited / Developer) | **No** — commercial | Edition has no SOQL/tooling query field and no tier-1 GET (this one genuinely has no `/query` form, unlike the WHERE-filter verifies below); verify at tier 2 (`sf`) or a tier-3 UI check (Setup → Company Information).<br>Tier 2: `sf org display --target-org <alias> --json` → check `.result.edition` ∈ {Enterprise, Performance, Unlimited, Developer} | T3 |
|
|
41
|
-
| P2 | Education Cloud enabled | **Yes** — verify here (step 2a); if off,
|
|
41
|
+
| P2 | Education Cloud enabled | **Yes** — verify here (step 2a); if off, send to `education-cloud-domain-configure`, then re-verify | **T1** — `dispatch_readonly` GET `/services/data/vXX/tooling/sobjects/IndustriesSettings/bWRjLzBIRS9JbmR1c3RyaWVzU2V0dGluZ3M=` (deterministic DurableId) → top-level **`IsEducationCloudEnabled == true`** (the top-level field; **not** `.Metadata.enableEducationCloud` — that's the write-path member name, see `platform-enablement.md`) | T1 |
|
|
42
42
|
| P3 | **Einstein for Education Cloud license** (the license gate on the SRA toggle) | **No** — **commercial/license grant — verify only** — `OrgPermissions.EinsteinForEducationCloud`, granted by the *Einstein for Education Cloud add-on*. **If absent, the `RecruitmentAgentEnabled` toggle can't be enabled** (it's part of the toggle's `editAccess`). Report it and stop — the skill can't flip a license. | **T1** — `dispatch_readonly` `/query`: `SELECT Status FROM PermissionSetLicense WHERE DeveloperName='EinsteinForEducationCloudPsl'` → confirm **`Status='Active'`** (`OrgPermissions.EinsteinForEducationCloud` itself has no SOQL surface; this PermissionSetLicense is the underlying grant) → fall back to `sf data query` (T2) → UI (T3) | T1 verify (license itself is T3/commercial) |
|
|
43
43
|
| P4 | **Agentforce provisioned** | **No** — **Salesforce grant — no API** | **Preflight STOP check — resolve at Step 1.** Attempt tier-1 `/query` (routable over `dispatch_readonly`) for `BotDefinition` existence → fall back to `sf data query` (T2) → tier-3 UI check.<br>Tier 2: `sf data query -q "SELECT Id FROM BotDefinition LIMIT 1" --target-org <alias>`.<br>**Read the result precisely:** a **`200` with zero rows = provisioned, just no agents yet → PASS** (do not stop). Only an **error / `INVALID_TYPE` / 501 (object not queryable) = NOT provisioned → STOP now**, don't defer to the Step-9 501. | T1 verify (dispatch_readonly /query) → T2 sf (provisioning itself T3) |
|
|
44
44
|
| P5 | Data Cloud / Data 360 | **No** — Home Org grant | query a Data Cloud object / confirm Data Cloud app available | T1 (comes with Home Org) |
|
|
45
45
|
|
|
46
46
|
> **The only prerequisite the agent truly cannot touch via API is P4 (provisioning)** (a Salesforce grant), alongside the commercial license gates P1/P3 and the Data Cloud entitlement P5. Everything else is configurable or delegated, and each gets a verify call.
|
|
47
47
|
>
|
|
48
|
-
> **Running-user access is not a separate gate.** The person running this skill must be a **System Administrator** (stated in the scope line above) plus hold the builder permission sets the config work needs — but **assigning those sets is the skill's own job, done at tier 1** as part of the Step 4 permissions work (`permissions.md`), not a stop/
|
|
48
|
+
> **Running-user access is not a separate gate.** The person running this skill must be a **System Administrator** (stated in the scope line above) plus hold the builder permission sets the config work needs — but **assigning those sets is the skill's own job, done at tier 1** as part of the Step 4 permissions work (`permissions.md`), not a stop/redirect prerequisite. See "assignment and the perm-set clone are tier 1" below for the mechanics.
|
|
49
49
|
>
|
|
50
50
|
> **Message-consumption billing is out of scope.** Flex Credits / Conversations billing is a *runtime commercial* concern, not a setup gate — SRA configures fine without it and you only feel it at message volume. Confirm SKUs with the account team; the skill does not verify or stop on it.
|
|
51
51
|
|
|
@@ -105,7 +105,7 @@ SRA is gated behind three conditions. If any is false, most agent steps 501/403.
|
|
|
105
105
|
|
|
106
106
|
## Step 2a — Verify the EDU foundation (head-start check, not a blind delegation)
|
|
107
107
|
|
|
108
|
-
SRA is built **on top of** the Education Cloud R&A foundation. Do **not** assume
|
|
108
|
+
SRA is built **on top of** the Education Cloud R&A foundation. Do **not** assume `education-cloud-domain-configure` has been run — **verify each piece**, and if one is missing, send the user to that skill to fill *that gap*, then re-verify. Never re-implement its enablement here, and never proceed on an unverified foundation.
|
|
109
109
|
|
|
110
110
|
Opening line to the user: *"If you've already set up your Education Cloud foundation for Recruitment & Admissions, that's a great head start — let me confirm the parts your admissions agent needs are actually in place."*
|
|
111
111
|
|
|
@@ -117,7 +117,7 @@ Opening line to the user: *"If you've already set up your Education Cloud founda
|
|
|
117
117
|
| F-iv | **Data Cloud available** | Learning Program grounding (P5) | `SELECT Id FROM DataStream LIMIT 1` at **T1** (routable over `dispatch_readonly`) — a `200` confirms Data Cloud is provisioned, even if the only rows are internal/system streams (Education-specific streams are F-iv.a's concern, not this check's) → fall back to `sf` (T2) → tier-3 UI | T1 verify (dispatch_readonly /query) (comes with Home Org) |
|
|
118
118
|
| F-iv.a | **Standard DMOs pre-provisioned** (Learning Program, Academic Term, PTAT, Application Timeline) | Grounding retriever indexes them | These come pre-provisioned with Education Cloud (F-i) + Data Cloud (F-iv) — nothing to install. Verify directly via the DMO's own Connect REST resource (not a SOQL-queryable sObject, and not `DataStream`): `GET /services/data/vXX/ssot/data-model-objects/ssot__<Object>__dlm` (routable over `dispatch_readonly`), using the DMO's own name — `LearningProgram`, `AcademicTerm`, `ApplicationTimeline`, and **`ProgramTermApplicationTimeline`** (**WARNING:** spelled out in full — not F-iii's abbreviated `ProgramTermApplnTimeline` sObject name, which 404s here) → `200` = present → fall back to `sf` (T2) → tier-3 UI (Data Cloud → Data Model). A `404` here (not a `DataStream` search or a guessed sObject name erroring) is the only valid absence signal | T1 verify (dispatch_readonly GET /ssot/data-model-objects) → T2 sf |
|
|
119
119
|
|
|
120
|
-
> **WARNING: F-iii's pass condition is `EntityDefinition` presence alone — do not additionally require a live `describe`/query-as-data success on these objects.** The running user's ability to actually query or describe them as data depends on the builder persona's EDU permission sets (*Education Cloud Full Access*, etc.), which this skill itself assigns later at step 4a — not something F-iii should presuppose. A `describe`/query attempt against one of these objects failing with an access- or "not supported"-shaped error **before** step 4a runs is expected, not a sign the domain schema is missing (see SKILL.md Gotchas: EDU objects show 0 fields until *Education Cloud Full Access* is assigned). Only treat the object as genuinely missing — and only then
|
|
120
|
+
> **WARNING: F-iii's pass condition is `EntityDefinition` presence alone — do not additionally require a live `describe`/query-as-data success on these objects.** The running user's ability to actually query or describe them as data depends on the builder persona's EDU permission sets (*Education Cloud Full Access*, etc.), which this skill itself assigns later at step 4a — not something F-iii should presuppose. A `describe`/query attempt against one of these objects failing with an access- or "not supported"-shaped error **before** step 4a runs is expected, not a sign the domain schema is missing (see SKILL.md Gotchas: EDU objects show 0 fields until *Education Cloud Full Access* is assigned). Only treat the object as genuinely missing — and only then route to `education-cloud-domain-configure` — if it's absent from `EntityDefinition` itself.
|
|
121
121
|
|
|
122
122
|
> **WARNING: F-iv.a's pass condition is DMO presence alone — do not also check for the `DataStream`/DLO ingestion pipeline and report its absence as a gap.** The CRM connector, data streams, and DLO→DMO mapping that actually populate these DMOs are built by *this skill* at setup time (see `grounding.md`'s Mechanism 2 data-spine section) — they are work this skill owns, not a foundation prerequisite to verify beforehand. Finding zero `LearningProgram`/`AcademicTerm`/etc. data streams during preflight is the expected starting state, not something to flag as a readiness gap — same category as F-iii's "0 records is fine."
|
|
123
123
|
|
|
@@ -132,10 +132,10 @@ SELECT Name FROM Profile WHERE Name IN ('Customer Community Login User','Custome
|
|
|
132
132
|
```
|
|
133
133
|
If none of these are present, the AEA path's portal group (`permissions.md` Step 6b) likely doesn't exist yet — flag that to the customer rather than assuming Step 6b's target is already there.
|
|
134
134
|
|
|
135
|
-
|
|
135
|
+
Route each missing piece to where it can actually be fixed — a blanket "go run `education-cloud-domain-configure`" is wrong, because that skill does not configure Data Cloud:
|
|
136
136
|
|
|
137
|
-
- **F-i, F-ii, F-iii** (EDU enablement, Person Accounts, R&A domain schema) → *"The agent needs <piece>, which isn't set up yet — let's get your Education Cloud foundation set up first, then I'll re-verify and continue."*
|
|
138
|
-
- **F-iv** (Data Cloud) → **do not**
|
|
137
|
+
- **F-i, F-ii, F-iii** (EDU enablement, Person Accounts, R&A domain schema) → *"The agent needs <piece>, which isn't set up yet — let's get your Education Cloud foundation set up first, then I'll re-verify and continue."* Route this to `education-cloud-domain-configure` (that skill covers all three: it drives `enableEducationCloud`, Person Accounts, and R&A-domain enablement, which brings the object schema).
|
|
138
|
+
- **F-iv** (Data Cloud) → **do not** redirect to `education-cloud-domain-configure` — it doesn't touch Data Cloud. Data Cloud is a **Home-Org entitlement** (P5): if it's absent, treat it like the other Salesforce grants (P3/P4) — report the gap and stop; it is not something this skill or that one can flip. The grounding *setup* built on top of Data Cloud is done later **inside this skill** (`grounding.md`), not here.
|
|
139
139
|
|
|
140
140
|
## Org requirement — provisioned + entitled, not a bare org
|
|
141
141
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: experience-content-media-image-generate
|
|
3
|
+
description: "Generates high-fidelity visual assets, logos, and UI mockups using the media-management MCP server. Trigger this skill whenever the user asks to generate an image, create a logo, produce a hero banner, design a UI icon, or build a visual asset. It is explicitly designed to handle technical specifications including file formats (PNG, JPEG, WEBP), specific dimensions (e.g. 1024x1024), and transparency requirements. Use this skill when the user needs to integrate generated imagery into application code or web pages. It ensures consistent output quality and provides a standardized SVG fallback if the generation tool is unavailable."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
domains: ["Experience"]
|
|
7
|
+
cliTools:
|
|
8
|
+
- tool: ["jq"]
|
|
9
|
+
semver: ">=1.6.0"
|
|
10
|
+
- tool: ["sf"]
|
|
11
|
+
semver: ">=2.0.0"
|
|
12
|
+
mcpTools:
|
|
13
|
+
media-management:
|
|
14
|
+
tools: ["create_image"]
|
|
15
|
+
semver: ">=1.0.0"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Generating Images
|
|
19
|
+
|
|
20
|
+
## Goal
|
|
21
|
+
|
|
22
|
+
To programmatically generate, download, and preview visual assets requested by the user, ensuring specific format and quality standards are met while providing a robust fallback mechanism.
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
1. Check if the `media-management` MCP server is configured and its `create_image` tool is available.
|
|
27
|
+
2. If available, use `create_image` to generate the image.
|
|
28
|
+
3. If not available, use the placeholder fallback below.
|
|
29
|
+
|
|
30
|
+
## MCP: media-management
|
|
31
|
+
|
|
32
|
+
**Tool:** `create_image`
|
|
33
|
+
|
|
34
|
+
Check your available tools. If `create_image` is present, use it as the primary image generation method — pass the natural language prompt and applicable parameters from the table below. (`media-management` here refers to the MCP server name, not this skill.)
|
|
35
|
+
|
|
36
|
+
If `create_image` is not in your tool list, the `media-management` MCP is not configured — use the placeholder fallback below.
|
|
37
|
+
|
|
38
|
+
## Image Generation Parameters
|
|
39
|
+
|
|
40
|
+
Use these defaults unless the user specifies otherwise:
|
|
41
|
+
|
|
42
|
+
| Parameter | Default | Options |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `model` | `Standard` | `Standard`, `Premium` |
|
|
45
|
+
| `size` | `auto` | `auto`, `1024x1024`, `1536x1024`, `1024x1536` (pick closest to user-requested size) |
|
|
46
|
+
| `quality` | `medium` | `low`, `medium`, `high` |
|
|
47
|
+
| `outputCompression` | `75` | `0–100` (webp/jpeg only) |
|
|
48
|
+
| `outputFormat` | `webp` | `webp`, `jpeg`, `png` |
|
|
49
|
+
| `background` | `auto` | `auto`, `transparent`, `opaque` |
|
|
50
|
+
|
|
51
|
+
**Format rule:** If `outputFormat` is `png`, set `outputCompression` to `100`.
|
|
52
|
+
|
|
53
|
+
## After Successful Generation
|
|
54
|
+
|
|
55
|
+
Run `download-image.sh` (located in this skill's `scripts/` directory) to download and preview the image:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
bash scripts/download-image.sh \
|
|
59
|
+
--url "<image_url_from_response>" \
|
|
60
|
+
--id "<responseId>" \
|
|
61
|
+
--format "<outputFormat>" \
|
|
62
|
+
--preview
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The script handles credential retrieval, download, and VS Code preview. Pass `--output-dir <dir>` to override the default `generatedimages/` directory.
|
|
66
|
+
|
|
67
|
+
**Never resize or post-process the generated image with external tools.** To control display dimensions, use CSS properties (e.g. `width`, `height`, `object-fit`) at the point of use.
|
|
68
|
+
|
|
69
|
+
## Fallback: Use placeholder URL
|
|
70
|
+
|
|
71
|
+
If image generation fails or is not enabled, return the following URL as the image source — do not download it, do not save it locally:
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
https://cdn.scs.static.lightning.force.com/content/assets/d5222d4a11e6c2b735152d7eea824ce4/placeholder.svg
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use this URL directly wherever the image is referenced in code (e.g. as a `src` attribute or CSS `url()`).
|
|
78
|
+
|
|
79
|
+
## Placeholder Policy
|
|
80
|
+
|
|
81
|
+
There is only one placeholder URL. Do not download it, modify it, or generate alternative placeholders using Python, ImageMagick, or any other tool.
|
|
82
|
+
|
|
83
|
+
If the user requests a placeholder of a specific size or format, inform them that only this placeholder URL is available and direct them to use CSS properties (e.g. `width`, `height`, `object-fit`) to scale it at the point of use.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
usage() {
|
|
5
|
+
cat <<EOF
|
|
6
|
+
Usage: $(basename "$0") --url <image_url> --id <response_id> --format <output_format> [--output-dir <dir>] [--preview]
|
|
7
|
+
|
|
8
|
+
Required:
|
|
9
|
+
--url URL of the generated image to download
|
|
10
|
+
--id Response ID used as the output filename
|
|
11
|
+
--format Output format (webp, jpeg, png)
|
|
12
|
+
|
|
13
|
+
Optional:
|
|
14
|
+
--output-dir Directory to save the image (default: generatedimages)
|
|
15
|
+
--preview Open the image in VS Code after download
|
|
16
|
+
EOF
|
|
17
|
+
exit 1
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
OUTPUT_DIR="generatedimages"
|
|
21
|
+
PREVIEW=false
|
|
22
|
+
URL=""
|
|
23
|
+
RESPONSE_ID=""
|
|
24
|
+
FORMAT=""
|
|
25
|
+
|
|
26
|
+
while [[ $# -gt 0 ]]; do
|
|
27
|
+
case "$1" in
|
|
28
|
+
--url) URL="$2"; shift 2 ;;
|
|
29
|
+
--id) RESPONSE_ID="$2"; shift 2 ;;
|
|
30
|
+
--format) FORMAT="$2"; shift 2 ;;
|
|
31
|
+
--output-dir) OUTPUT_DIR="$2"; shift 2 ;;
|
|
32
|
+
--preview) PREVIEW=true; shift ;;
|
|
33
|
+
*) usage ;;
|
|
34
|
+
esac
|
|
35
|
+
done
|
|
36
|
+
|
|
37
|
+
if [[ -z "$URL" || -z "$RESPONSE_ID" || -z "$FORMAT" ]]; then
|
|
38
|
+
usage
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
case "$FORMAT" in
|
|
42
|
+
webp|jpeg|png) ;;
|
|
43
|
+
*) echo "Error: invalid format '$FORMAT'. Must be webp, jpeg, or png." >&2; exit 1 ;;
|
|
44
|
+
esac
|
|
45
|
+
|
|
46
|
+
if [[ "$RESPONSE_ID" == */* || "$RESPONSE_ID" == *..* ]]; then
|
|
47
|
+
echo "Error: invalid response ID '$RESPONSE_ID'. Must not contain '/' or '..'." >&2
|
|
48
|
+
exit 1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
if [[ ! "$URL" =~ ^https:// ]]; then
|
|
52
|
+
echo "Error: URL must start with https://" >&2
|
|
53
|
+
exit 1
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
TARGET_ORG=$(sf config get target-org --json | jq -r '.result[0].value')
|
|
57
|
+
|
|
58
|
+
if [[ -z "$TARGET_ORG" || "$TARGET_ORG" == "null" ]]; then
|
|
59
|
+
echo "Error: no target-org configured. Run 'sf config set target-org <org>'" >&2
|
|
60
|
+
exit 1
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
ACCESS_TOKEN=$(sf org display --target-org "$TARGET_ORG" --json | jq -r '.result.accessToken')
|
|
64
|
+
|
|
65
|
+
if [[ -z "$ACCESS_TOKEN" || "$ACCESS_TOKEN" == "null" ]]; then
|
|
66
|
+
echo "Error: failed to retrieve access token for org '$TARGET_ORG'" >&2
|
|
67
|
+
exit 1
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
mkdir -p "$OUTPUT_DIR"
|
|
71
|
+
|
|
72
|
+
OUTPUT_FILE="${OUTPUT_DIR}/${RESPONSE_ID}.${FORMAT}"
|
|
73
|
+
|
|
74
|
+
if ! curl -fsS -H "Authorization: Bearer $ACCESS_TOKEN" -o "$OUTPUT_FILE" -- "$URL"; then
|
|
75
|
+
rm -f "$OUTPUT_FILE"
|
|
76
|
+
echo "Error: failed to download image from $URL" >&2
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
echo "$OUTPUT_FILE"
|
|
81
|
+
|
|
82
|
+
if [[ "$PREVIEW" == true ]]; then
|
|
83
|
+
code "$OUTPUT_FILE"
|
|
84
|
+
fi
|
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
name: external-diagram-mermaid-generate
|
|
3
3
|
description: "Salesforce architecture diagrams using Mermaid with ASCII fallback. Use this skill when generating text-based diagrams for Salesforce architecture, OAuth flows, ERDs, integration sequences, or Agentforce structure. TRIGGER when: user says \"diagram\", \"visualize\", \"ERD\", or asks for sequence diagrams, flowcharts, class diagrams, or architecture visualizations in Mermaid. DO NOT TRIGGER when: user asks about non-Salesforce systems."
|
|
4
4
|
metadata:
|
|
5
|
+
version: "1.0"
|
|
6
|
+
domains: ["External"]
|
|
7
|
+
relatedSkills:
|
|
8
|
+
- "agentforce-generate"
|
|
9
|
+
- "automation-flow-generate"
|
|
10
|
+
- "integration-connectivity-connected-app-configure"
|
|
11
|
+
- "integration-connectivity-generate"
|
|
12
|
+
- "platform-apex-generate"
|
|
13
|
+
- "platform-custom-field-generate"
|
|
14
|
+
- "platform-custom-object-generate"
|
|
15
|
+
- "platform-data-manage"
|
|
16
|
+
- "platform-metadata-deploy"
|
|
5
17
|
cliTools:
|
|
6
18
|
- tool: ["curl"]
|
|
7
19
|
semver: ">=7.0.0"
|
|
@@ -13,18 +25,6 @@ metadata:
|
|
|
13
25
|
semver: ">=3.10.0"
|
|
14
26
|
- tool: ["sf"]
|
|
15
27
|
semver: ">=2.0.0"
|
|
16
|
-
relatedSkills:
|
|
17
|
-
- "agentforce-generate"
|
|
18
|
-
- "automation-flow-generate"
|
|
19
|
-
- "integration-connectivity-connected-app-configure"
|
|
20
|
-
- "integration-connectivity-generate"
|
|
21
|
-
- "platform-apex-generate"
|
|
22
|
-
- "platform-custom-field-generate"
|
|
23
|
-
- "platform-custom-object-generate"
|
|
24
|
-
- "platform-data-manage"
|
|
25
|
-
- "platform-metadata-deploy"
|
|
26
|
-
version: "1.0"
|
|
27
|
-
domains: ["External"]
|
|
28
28
|
---
|
|
29
29
|
|
|
30
30
|
# external-diagram-mermaid-generate: Salesforce Diagram Generation
|
|
@@ -174,7 +174,7 @@ preserves these but flags for offline-priming verification.
|
|
|
174
174
|
| Legacy parameter | DC parameter | Notes |
|
|
175
175
|
|---|---|---|
|
|
176
176
|
| `label` | `label` | Direct map for ComponentInstance fields |
|
|
177
|
-
| `required` | Field-level `<isRequired>` |
|
|
177
|
+
| `required` | Field-level `<isRequired>` **and** a `required` inputParameter | `ComponentInstance` fields read required-ness from the inputParameter at DC runtime, not `<isRequired>` alone — transformer emits both. Exception: `dcCheckbox`/`dcToggle` don't expose a `required` input attribute; only `<isRequired>` is set for those. |
|
|
178
178
|
| `placeholder` | *(not supported)* | Bake into label text |
|
|
179
179
|
| `disabled` / `readOnly` | `isDisabled` / `isReadonly` | Available on some DC components |
|
|
180
180
|
| `helpText` | *(not supported)* | Bake into label or use DisplayText |
|