@salesforce/afv-skills 1.37.0 → 1.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-generate/README.md +20 -3
  3. package/skills/agentforce-generate/SKILL.md +253 -440
  4. package/skills/agentforce-generate/assets/agent-spec-template.md +6 -2
  5. package/skills/agentforce-generate/assets/agents/order-service.agent +16 -12
  6. package/skills/agentforce-generate/assets/agents/production-faq.agent +4 -4
  7. package/skills/agentforce-generate/assets/agents/router-first.agent +5 -5
  8. package/skills/agentforce-generate/assets/agents/template-single-subagent.agent +4 -4
  9. package/skills/agentforce-generate/assets/agents/verification-gate.agent +8 -6
  10. package/skills/agentforce-generate/assets/agents/voice-knowledge-grounded.agent +9 -9
  11. package/skills/agentforce-generate/assets/agents/voice-service-agent.agent +7 -7
  12. package/skills/agentforce-generate/assets/patterns/README.md +3 -3
  13. package/skills/agentforce-generate/assets/patterns/action-callbacks.agent +5 -5
  14. package/skills/agentforce-generate/assets/patterns/advanced-input-bindings.agent +6 -8
  15. package/skills/agentforce-generate/assets/patterns/bidirectional-routing.agent +11 -13
  16. package/skills/agentforce-generate/assets/patterns/critical-input-collection.agent +11 -16
  17. package/skills/agentforce-generate/assets/patterns/lifecycle-events.agent +2 -3
  18. package/skills/agentforce-generate/assets/patterns/llm-controlled-actions.agent +6 -7
  19. package/skills/agentforce-generate/assets/patterns/open-gate-routing.agent +3 -3
  20. package/skills/agentforce-generate/assets/patterns/prompt-template-action.agent +14 -19
  21. package/skills/agentforce-generate/assets/patterns/system-instruction-overrides.agent +11 -20
  22. package/skills/agentforce-generate/references/actions-reference.md +2 -2
  23. package/skills/agentforce-generate/references/agent-audit-and-repair.md +135 -0
  24. package/skills/agentforce-generate/references/agent-audit-candidate-verification.md +160 -0
  25. package/skills/agentforce-generate/references/agent-audit-diagnostic-catalog.md +156 -0
  26. package/skills/agentforce-generate/references/agent-audit-diagnostics-actions-state.md +176 -0
  27. package/skills/agentforce-generate/references/agent-audit-diagnostics-architecture-evaluation.md +68 -0
  28. package/skills/agentforce-generate/references/agent-audit-diagnostics-instructions-routing.md +283 -0
  29. package/skills/agentforce-generate/references/agent-audit-evaluation-loop.md +191 -0
  30. package/skills/agentforce-generate/references/agent-audit-repair-report.md +143 -0
  31. package/skills/agentforce-generate/references/agent-audit-scope-path-review.md +180 -0
  32. package/skills/agentforce-generate/references/agent-design-and-spec-creation.md +105 -59
  33. package/skills/agentforce-generate/references/agent-script-core-language.md +144 -61
  34. package/skills/agentforce-generate/references/agent-subagent-map-diagrams.md +33 -23
  35. package/skills/agentforce-generate/references/agent-validation-and-debugging.md +37 -11
  36. package/skills/agentforce-generate/references/agentscript-toolchain.md +112 -0
  37. package/skills/agentforce-generate/references/architecture-patterns.md +81 -18
  38. package/skills/agentforce-generate/references/common-control-flow-pitfalls.md +255 -0
  39. package/skills/agentforce-generate/references/control-flow-actions-sequencing.md +198 -0
  40. package/skills/agentforce-generate/references/control-flow-lifecycle-side-effects.md +87 -0
  41. package/skills/agentforce-generate/references/examples.md +22 -22
  42. package/skills/agentforce-generate/references/instruction-resolution.md +123 -83
  43. package/skills/agentforce-generate/references/known-issues.md +1 -2
  44. package/skills/agentforce-generate/references/optimization-pattern-1-data-flow.md +4 -0
  45. package/skills/agentforce-generate/references/optimization-pattern-2-deterministic-logic.md +33 -0
  46. package/skills/agentforce-generate/references/optimization-pattern-3-reference-syntax.md +32 -3
  47. package/skills/agentforce-generate/references/optimization-pattern-4-escalation.md +2 -2
  48. package/skills/agentforce-generate/references/patterns-by-requirement.md +3 -1
  49. package/skills/agentforce-generate/references/posture-and-determinism.md +103 -22
  50. package/skills/agentforce-generate/references/reference-map.md +19 -3
  51. package/skills/agentforce-generate/references/scoring-rubric.md +1 -1
  52. package/skills/agentforce-generate/references/voice-latency-heuristics.md +4 -0
  53. package/skills/agentforce-generate/references/voice-modality-reference.md +4 -4
  54. package/skills/agentforce-generate/references/zen-of-agentscript.md +139 -23
  55. package/skills/agentforce-generate/scripts/agentscript-sdk-loader.mjs +133 -0
  56. package/skills/agentforce-generate/scripts/index-agent.mjs +141 -0
  57. package/skills/agentforce-generate/scripts/setup-agentscript-sdk.mjs +337 -0
  58. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +1 -1
  59. package/skills/automation-sandbox-post-copy-configure/SKILL.md +433 -0
  60. package/skills/automation-sandbox-post-copy-configure/assets/api_request_templates.json +89 -0
  61. package/skills/automation-sandbox-post-copy-configure/examples/sample_config_input.json +40 -0
  62. package/skills/automation-sandbox-post-copy-configure/examples/sample_execution_summary.md +79 -0
  63. package/skills/automation-sandbox-post-copy-configure/references/api_endpoints.md +273 -0
  64. package/skills/automation-sandbox-post-copy-configure/references/authentication.md +94 -0
  65. package/skills/automation-sandbox-post-copy-configure/references/execution_phasing.md +93 -0
  66. package/skills/automation-sandbox-post-copy-configure/references/rules_gotchas.md +35 -0
  67. package/skills/automation-sandbox-post-copy-configure/scripts/classify-patch-result.mjs +88 -0
  68. package/skills/automation-sandbox-post-copy-configure/scripts/map-metadata-key.mjs +98 -0
  69. package/skills/automation-sandbox-post-copy-configure/scripts/plan-phases.mjs +98 -0
  70. package/skills/automation-sandbox-post-copy-configure/scripts/resolve-target-org.mjs +56 -0
  71. package/skills/design-systems-slds-validate/SKILL.md +14 -13
  72. package/skills/dx-code-analyzer-custom-rule-create/examples/xpath-examples.md +1 -1
  73. package/skills/dx-code-analyzer-custom-rule-create/references/xpath-patterns-security.md +1 -1
  74. package/skills/dx-org-devhub-configure/SKILL.md +268 -0
  75. package/skills/dx-org-devhub-configure/examples/status-output.md +39 -0
  76. package/skills/dx-org-devhub-configure/scripts/devhub.sh +650 -0
  77. package/skills/dx-org-devhub-configure/scripts/test-devhub.sh +116 -0
  78. package/skills/dx-org-manage/SKILL.md +135 -42
  79. package/skills/dx-org-manage/assets/derive-alias.sh +95 -0
  80. package/skills/dx-org-manage/assets/scratch-def.seed.json +6 -0
  81. package/skills/dx-org-manage/examples/README.md +1 -1
  82. package/skills/dx-org-manage/examples/scratch-orgs/delete_output.json +8 -0
  83. package/skills/dx-org-manage/examples/scratch-orgs/display_output.json +23 -0
  84. package/skills/dx-org-manage/examples/scratch-orgs/list_output.json +58 -0
  85. package/skills/dx-org-manage/examples/scratch-orgs/resume_output.json +38 -0
  86. package/skills/dx-org-manage/examples/scratch-orgs/success_definition_file.json +1 -1
  87. package/skills/dx-org-manage/examples/scratch-orgs/success_edition.json +1 -1
  88. package/skills/dx-org-manage/examples/scratch-orgs/success_shape.json +41 -0
  89. package/skills/dx-org-manage/examples/scratch-orgs/success_snapshot.json +1 -1
  90. package/skills/dx-org-manage/examples/snapshots/error_output.json +3 -3
  91. package/skills/dx-org-manage/references/creating-scratch-org.md +2 -2
  92. package/skills/dx-org-manage/references/creating-snapshot.md +1 -2
  93. package/skills/dx-org-manage/references/definition_file_options.md +24 -0
  94. package/skills/dx-org-manage/references/edition_types.md +10 -8
  95. package/skills/dx-org-manage/references/opening-org.md +11 -12
  96. package/skills/dx-org-manage/references/scratch-org-create.md +303 -0
  97. package/skills/dx-org-manage/references/scratch-org-operations.md +135 -0
  98. package/skills/experience-aura-lwc-migrate/SKILL.md +120 -0
  99. package/skills/experience-aura-lwc-migrate/references/aura-api-expert.md +170 -0
  100. package/skills/experience-aura-lwc-migrate/references/aura-data-expert.md +172 -0
  101. package/skills/experience-aura-lwc-migrate/references/aura-migration-guidelines.md +299 -0
  102. package/skills/experience-aura-lwc-migrate/references/aura-prd-framework.md +79 -0
  103. package/skills/experience-aura-lwc-migrate/references/aura-redundant-code-expert.md +24 -0
  104. package/skills/experience-aura-lwc-migrate/references/aura-reference-expert.md +140 -0
  105. package/skills/experience-aura-lwc-migrate/references/aura-resolver-expert.md +115 -0
  106. package/skills/experience-aura-lwc-migrate/references/aura-slots-expert.md +67 -0
  107. package/skills/experience-aura-lwc-migrate/references/aura-style-expert.md +62 -0
  108. package/skills/experience-aura-lwc-migrate/references/aura-to-lwc-completeness-checklist.md +188 -0
  109. package/skills/experience-aura-lwc-migrate/references/aura-values-expert.md +67 -0
  110. package/skills/experience-content-media-search/SKILL.md +17 -12
  111. package/skills/experience-content-media-stock-image-search/SKILL.md +192 -0
  112. package/skills/experience-content-media-stock-image-search/scripts/download-stock-image.py +102 -0
  113. package/skills/experience-lds-best-practices-apply/SKILL.md +245 -0
  114. package/skills/experience-lds-best-practices-apply/references/adapter-apis.md +1640 -0
  115. package/skills/experience-lds-best-practices-apply/references/lds-data-consistency.md +126 -0
  116. package/skills/experience-lds-best-practices-apply/references/lds-expert.md +429 -0
  117. package/skills/experience-lds-best-practices-apply/references/lds-referential-integrity.md +322 -0
  118. package/skills/experience-lds-best-practices-apply/references/wire-adapter-types.md +1511 -0
  119. package/skills/experience-lds-graphql-generate/SKILL.md +222 -0
  120. package/skills/experience-lds-graphql-generate/references/generation-guide.md +236 -0
  121. package/skills/experience-lds-graphql-generate/references/generation-mutation.md +277 -0
  122. package/skills/experience-lds-graphql-generate/references/generation-query.md +237 -0
  123. package/skills/experience-lds-graphql-generate/scripts/fetch-lds-graphql-schema.sh +230 -0
  124. package/skills/experience-lds-graphql-generate/scripts/test-lds-graphql-query.sh +128 -0
  125. package/skills/experience-lwc-accessibility-validate/SKILL.md +112 -0
  126. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-1-1-non-text-content.md +88 -0
  127. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-i-lists.md +52 -0
  128. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-ii-tables.md +106 -0
  129. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-iii-form-labels.md +78 -0
  130. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-iv-regions.md +26 -0
  131. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-1-v-groups.md +66 -0
  132. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-3-5-identify-input.md +70 -0
  133. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-1-4-3-contrast.md +115 -0
  134. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-1-1-keyboard.md +47 -0
  135. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-4-4-link-purpose.md +39 -0
  136. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-4-6-headings-labels.md +50 -0
  137. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-5-1-pointer-gestures.md +54 -0
  138. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-5-2-pointer-cancellation.md +49 -0
  139. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-5-3-label-in-name.md +77 -0
  140. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-2-5-7-dragging-movement.md +45 -0
  141. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-2-1-on-focus.md +55 -0
  142. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-2-2-on-input.md +51 -0
  143. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-3-1-error-identification.md +84 -0
  144. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-3-2-labels-instructions.md +50 -0
  145. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-3-3-3-error-suggestion.md +64 -0
  146. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-4-1-2-i-name.md +105 -0
  147. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-4-1-2-ii-role.md +99 -0
  148. package/skills/experience-lwc-accessibility-validate/references/reviewers/sc-4-1-2-iii-value.md +97 -0
  149. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-1-1-non-text-content.md +83 -0
  150. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-4-1-use-of-color.md +62 -0
  151. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-4-10-resize-reflow.md +18 -0
  152. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-4-11-non-text-contrast.md +43 -0
  153. package/skills/experience-lwc-accessibility-validate/references/vision/sc-1-4-3-contrast.md +25 -0
  154. package/skills/experience-lwc-accessibility-validate/scripts/contrast-ratio.py +153 -0
  155. package/skills/experience-lwc-design-generate/SKILL.md +261 -0
  156. package/skills/experience-lwc-design-generate/references/figma-to-prd-blueprint.md +66 -0
  157. package/skills/experience-lwc-design-generate/references/prd-analysis-template.md +17 -0
  158. package/skills/experience-lwc-design-generate/scripts/check-component-name.sh +75 -0
  159. package/skills/experience-lwc-design-generate/scripts/detect-project-tools.sh +97 -0
  160. package/skills/experience-lwc-runtime-observe/SKILL.md +244 -0
  161. package/skills/experience-lwc-runtime-observe/examples/component-preview-and-dom.md +41 -0
  162. package/skills/experience-lwc-runtime-observe/scripts/extract-dom.sh +79 -0
  163. package/skills/experience-lwc-runtime-observe/scripts/open-frontdoor.sh +46 -0
  164. package/skills/experience-lwc-runtime-observe/scripts/verify-toolchain.sh +48 -0
  165. package/skills/experience-lwc-security-validate/SKILL.md +151 -0
  166. package/skills/experience-lwc-security-validate/examples/review-report.md +6 -0
  167. package/skills/experience-lwc-security-validate/examples/score-report.sarif.json +32 -0
  168. package/skills/experience-lwc-security-validate/references/lws-security-expert.md +986 -0
  169. package/skills/experience-lwc-security-validate/references/security-analysis.md +611 -0
  170. package/skills/experience-lwc-security-validate/scripts/check-lwc-import.sh +166 -0
  171. package/skills/experience-lwc-security-validate/scripts/validate-sarif.sh +131 -0
  172. package/skills/experience-ui-bundle-2gp-deploy/SKILL.md +454 -0
  173. package/skills/experience-ui-bundle-2gp-deploy/assets/CustomApplication.app-meta.xml +12 -0
  174. package/skills/experience-ui-bundle-2gp-deploy/assets/PermissionSet.permissionset-meta.xml +9 -0
  175. package/skills/experience-ui-bundle-2gp-deploy/scripts/find-bundle-package-dir.sh +53 -0
  176. package/skills/experience-ui-bundle-agentforce-client-generate/SKILL.md +104 -26
  177. package/skills/experience-ui-bundle-agentforce-client-generate/references/constraints.md +35 -24
  178. package/skills/experience-ui-bundle-agentforce-client-generate/references/examples.md +92 -1
  179. package/skills/experience-ui-bundle-agentforce-client-generate/references/style-tokens.md +2 -0
  180. package/skills/experience-ui-bundle-agentforce-client-generate/references/troubleshooting.md +14 -1
  181. package/skills/experience-ui-bundle-agentforce-client-generate/scripts/detect-framework.sh +67 -0
  182. package/skills/experience-ui-bundle-deploy/SKILL.md +83 -14
  183. package/skills/experience-ui-bundle-deploy/assets/Communities.settings-meta.xml +19 -0
  184. package/skills/experience-ui-bundle-deploy/assets/org-setup.config.template.json +5 -0
  185. package/skills/experience-ui-bundle-deploy/assets/social-login-auth-providers.apex +158 -0
  186. package/skills/experience-ui-bundle-deploy/references/config-scaffold.md +13 -1
  187. package/skills/experience-ui-bundle-deploy/references/social-login.md +179 -0
  188. package/skills/experience-ui-bundle-frontend-generate/SKILL.md +14 -0
  189. package/skills/experience-ui-bundle-mfa-configure/SKILL.md +6 -5
  190. package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +15 -7
  191. package/skills/experience-ui-bundle-salesforce-data-access/SKILL.md +41 -5
  192. package/skills/experience-ui-bundle-salesforce-data-access/references/caching.md +10 -22
  193. package/skills/experience-ui-bundle-salesforce-data-access/references/graphql-hand-authoring.md +4 -19
  194. package/skills/experience-ui-bundle-salesforce-data-access/references/migration.md +5 -0
  195. package/skills/experience-ui-bundle-salesforce-data-access/references/sdk-api.md +33 -150
  196. package/skills/mobile-platform-native-capabilities-integrate/references/nfc.md +35 -0
  197. package/skills/platform-apex-generate/SKILL.md +8 -7
  198. package/skills/platform-apex-test-generate/SKILL.md +3 -1
  199. package/skills/platform-apex-test-run/SKILL.md +9 -8
  200. package/skills/platform-lightning-type-widget-coordinate/SKILL.md +1 -1
  201. package/skills/platform-lightning-type-widget-coordinate/examples/existing-lightning-type-with-widget-prompt.md +1 -1
  202. package/skills/platform-lightning-type-widget-coordinate/examples/new-lightning-type-with-widget-prompt.md +1 -1
  203. package/skills/platform-lightning-type-widget-coordinate/references/validation-gates.md +3 -3
  204. package/skills/platform-mcp-tool-widget-coordinate/SKILL.md +43 -67
  205. package/skills/platform-mcp-tool-widget-coordinate/examples/action-name-source-prompt.md +1 -2
  206. package/skills/platform-mcp-tool-widget-coordinate/examples/apex-invocable-source-prompt.md +2 -3
  207. package/skills/platform-mcp-tool-widget-coordinate/examples/nested-object-list-source-prompt.md +163 -0
  208. package/skills/platform-mcp-tool-widget-coordinate/examples/nested-object-single-source-prompt.md +198 -0
  209. package/skills/platform-mcp-tool-widget-coordinate/examples/pasted-tool-output-prompt.md +0 -1
  210. package/skills/platform-mcp-tool-widget-coordinate/references/build-plan-format.md +17 -11
  211. package/skills/platform-mcp-tool-widget-coordinate/references/mcp-tool-output-discovery.md +48 -15
  212. package/skills/platform-mcp-tool-widget-coordinate/references/two-clt-modeling.md +73 -10
  213. package/skills/platform-mcp-tool-widget-coordinate/references/validation-gates.md +48 -8
  214. package/skills/platform-policy-rule-generate/SKILL.md +22 -12
  215. package/skills/platform-policy-rule-generate/references/deploy-errors.md +1 -1
  216. package/skills/platform-policy-rule-generate/references/policy-schema-full.md +8 -29
  217. package/skills/platform-policy-rule-generate/references/templates-advanced.md +1 -1
  218. package/skills/platform-sharing-owd-configure/SKILL.md +20 -8
  219. package/skills/platform-sharing-owd-configure/references/access_levels.md +14 -1
  220. package/skills/platform-sharing-rules-generate/SKILL.md +67 -35
  221. package/skills/platform-sharing-rules-generate/examples/create-cases.md +16 -17
  222. package/skills/platform-sharing-rules-generate/examples/delete-cases.md +34 -79
  223. package/skills/platform-sharing-rules-generate/examples/edit-cases.md +13 -26
  224. package/skills/platform-sharing-rules-generate/scripts/count-remaining-rules.sh +33 -0
  225. package/skills/platform-widget-generate/SKILL.md +3 -5
  226. package/skills/platform-widget-generate/examples/conditional.json +18 -13
  227. package/skills/platform-widget-generate/examples/list-with-foreach.json +2 -2
  228. package/skills/platform-widget-generate/examples/single-object.json +2 -2
  229. package/skills/platform-widget-generate/references/schema-from-lightning-type.md +27 -6
  230. package/skills/platform-widget-generate/references/widget-bundle-layout.md +4 -3
  231. package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +287 -0
  232. package/skills/service-itsm-agentic-setup-cmdb-access-assign/references/mcp-invocation.md +260 -0
  233. package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +252 -0
  234. package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/references/mcp-invocation.md +204 -0
  235. package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +259 -0
  236. package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +188 -0
  237. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +197 -0
  238. package/skills/service-itsm-agentic-setup-cmdb-coordinate/examples/output-templates.md +77 -0
  239. package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +316 -0
  240. package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/references/mcp-invocation.md +221 -0
  241. package/skills/service-itsm-incident-priority-configure/SKILL.md +168 -0
  242. package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +200 -0
  243. package/skills/service-itsm-incident-priority-configure/examples/render-matrix.md +54 -0
  244. package/skills/service-itsm-incident-priority-configure/examples/seed-full-matrix.md +52 -0
  245. package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +264 -0
  246. package/skills/platform-mcp-tool-widget-coordinate/examples/nested-object-source-prompt.md +0 -191
  247. package/skills/platform-policy-rule-generate/references/fixtures-index.md +0 -29
@@ -0,0 +1,67 @@
1
+ ## 🎰 Slots Expert Analysis Framework
2
+
3
+ ### Analysis Focus
4
+
5
+ Analyze component composition patterns, content projection, and child component integration in the Aura component.
6
+
7
+ ### Key Areas to Review
8
+
9
+ #### 1. Aura Facet Analysis
10
+
11
+ - Look for `<aura:facet>` declarations and usage
12
+ - Document how facets are used for content projection
13
+ - Identify dynamic facet content and conditional rendering
14
+ - Note any nested facet patterns or complex compositions
15
+
16
+ #### 2. Body Content Patterns
17
+
18
+ - Analyze `{!v.body}` usage for content projection
19
+ - Document how child components are composed
20
+ - Identify conditional rendering of body content
21
+ - Note any iteration patterns over child elements
22
+
23
+ #### 3. Component Composition
24
+
25
+ - Find all child components and their content patterns
26
+ - Document how content is passed to child components
27
+ - Identify any wrapper or container component patterns
28
+ - Note any dynamic component creation or destruction
29
+
30
+ #### 4. Content Distribution
31
+
32
+ - Analyze how different content types are distributed
33
+ - Document named slots vs default content patterns
34
+ - Identify any content transformation or filtering
35
+ - Note accessibility considerations for content structure
36
+
37
+ ### Migration Considerations
38
+
39
+ #### Default Slot Analysis
40
+
41
+ Your task is to identify a placeholder for an anonymous block of markup that translates into a default slot in LWC.
42
+ Named slots or other elements and attributes are not part of this analysis and will be covered separately.
43
+ In Aura an anonymous block of markup is injected using the expression "{!v.body}" or "{#v.body}".
44
+
45
+ Review Aura component above and fix its blueprint using following rules:
46
+
47
+ 1. Every occurance of the expression "{!v.body}" or "{#v.body}" should be present as an element in the "contentRequirements" section.
48
+ 2. If such element has already been added, do not add another one but update one that has been added by adding "default slot" in "what" section.
49
+ 3. LWC components can have only one default slot, so it's crucial to include conditions under which this fragment is present in "what".
50
+
51
+ - For each issue found, provide a separate, detailed report.
52
+ - Keep issues concise, avoid duplicated issues or unnecessary or non-applicable problems.
53
+
54
+ #### Named Slot Analysis
55
+
56
+ In Aura, placeholders for blocks of markup are added by declaring attributes with type "Aura.Component" or "Aura.Component[]" for one or more component instances.
57
+ Such placeholders are similar to slots in LWC web components.
58
+
59
+ Review Aura component above and fix its blueprint using following rules:
60
+
61
+ 1. Every `<aura:attribute>` with type "Aura.Component" or "Aura.Component[]" should be added as an element in the "contentRequirements" section.
62
+ 2. Only elements for `<aura:attribute>` with type "Aura.Component" or "Aura.Component[]" can be added as part of this review. Ignore all other elements.
63
+ 3. The "name" of the included element should be set to the name of the attribute.
64
+ 4. The "what" of the included element should be set to "named slot inside <name of other existing item inside contentRequirements or root>".
65
+
66
+ - For each issue found, provide a separate, detailed report.
67
+ - Keep issues concise, avoid duplicated issues or unnecessary or non-applicable problems.
@@ -0,0 +1,62 @@
1
+ ## 🎨 Style Expert Analysis Framework
2
+
3
+ ### Analysis Focus
4
+
5
+ Analyze styling patterns, CSS architecture, and design token usage in the Aura component.
6
+
7
+ ### Key Areas to Review
8
+
9
+ #### 1. CSS File Analysis
10
+
11
+ - Document all CSS classes and their purposes
12
+ - Identify SLDS (Salesforce Lightning Design System) usage patterns
13
+ - Note any custom CSS that may conflict with LWC styling
14
+ - Check for responsive design patterns and media queries
15
+
16
+ #### 2. Styling Token Usage
17
+
18
+ - Look for design token references and their usage
19
+ - Document theme customization patterns
20
+ - Identify brand-specific styling requirements
21
+ - Note any dynamic styling based on component state
22
+
23
+ #### 3. CSS Encapsulation Patterns
24
+
25
+ - Analyze CSS scoping and inheritance patterns
26
+ - Document any global CSS dependencies
27
+ - Identify component-specific styling isolation
28
+ - Note potential CSS conflicts or specificity issues
29
+
30
+ #### 4. Dynamic Styling
31
+
32
+ - Find any JavaScript-based style manipulation
33
+ - Document conditional styling based on component state
34
+ - Identify user preference or theme switching patterns
35
+ - Note any performance-critical styling operations
36
+
37
+ ### Migration Considerations
38
+
39
+ - Aura CSS files become LWC CSS modules with different scoping
40
+ - SLDS usage patterns may need updates for LWC compatibility
41
+ - CSS custom properties and design tokens have different APIs
42
+ - Shadow DOM styling requires different approaches
43
+ - Global CSS access is more restricted in LWC
44
+
45
+ ### Additional knowledge
46
+
47
+ #### Style Intent analysis
48
+
49
+ Your task is to look at the Aura Component definition, and make sure that the blueprint only describes the experiences a user may have with a component.
50
+ Developers often accidentially expose APIs that allow customization of styles or CSS classes.
51
+
52
+ Review Aura component above and fix its blueprint using following rules:
53
+
54
+ 1. Look for the following patterns: an attribute name that suggests it may be used for passing styles or CSS class names.
55
+ 2. For each match found, reason about the intent around the reference. Why is the style being provided and what is it used for in the component?
56
+ 3. Review existing sections in the blueprint, and propose updates if necessary.
57
+
58
+ - If something appears in the 'styling' section already, verify it doesn't appear the data section.
59
+ - If something appears in both sections, the dataRequirements section should be updated to remove it.
60
+
61
+ * For each issue found, provide a separate, detailed report.
62
+ * Keep issues concise, avoid duplicated issues or unnecessary or non-applicable problems.
@@ -0,0 +1,188 @@
1
+ # Aura to LWC Conversion Completeness Checklist
2
+
3
+ You are a Salesforce principal architect. Your task is to help a developer verify whether their conversion of a Salesforce Aura component to a Lightning Web Component (LWC) is truly complete. This is a developer-focused self-checklist, not a platform evaluation or LLM-as-judge scenario. The goal is to provide confidence and clarity for the developer, not to benchmark platform performance.
4
+
5
+ ## Instructions
6
+
7
+ 1. **Review the Completeness Metrics:**
8
+ For each of the following metrics, use the provided rating to assess the LWC conversion. For each metric, select one of the following qualitative ratings:
9
+
10
+ - **Excellent**: Perfect or near-perfect match in understanding and detail
11
+ - **Good**: Strong understanding with minor differences
12
+ - **Satisfactory**: Adequate understanding with some notable differences
13
+ - **Limited**: Basic understanding with significant gaps
14
+ - **Poor**: Major misunderstandings or omissions
15
+ - **Missing**: Issue completely overlooked or fatally misunderstood
16
+
17
+ 2. **For Each Metric:**
18
+
19
+ - State the metric and its description
20
+ - Assign a rating (from the list above)
21
+ - Provide a brief justification for the rating
22
+ - Optionally, add one or two sentences explaining any gaps, strengths, or issues
23
+
24
+ 3. **Checklist Output:**
25
+
26
+ - Present your results as a list, not a table
27
+ - For each metric, include:
28
+ - Metric name
29
+ - Description
30
+ - Rating
31
+ - Justification/comments
32
+
33
+ 4. **Summary and Recommendations:**
34
+
35
+ - At the end, summarize your overall confidence in the conversion's completeness
36
+ - List specific, actionable recommendations to address any gaps or issues
37
+
38
+ 5. **Context:**
39
+
40
+ - The component name is: `{{componentName}}`
41
+ - The Aura component file is: `{{componentName}}.cmp`
42
+ - The LWC template file is: `{{componentName}}.html`
43
+ - You have access to supporting files such as controllers, helpers, CSS, blueprints, Jest tests (in `__tests__`), and UTAM page objects (in `__utam__`).
44
+
45
+ 6. **Important Notes:**
46
+ - This checklist is a comprehensive aid for developers to verify their work, not a judge of platform performance.
47
+ - The resulting ratings are confidence measures for the developer, not benchmarks.
48
+ - Each metric could, in the future, have a more detailed, dedicated tool for finer-grained verification, but avoid duplicating existing tools unless a true gap is identified.
49
+ - If you find that guidance is unclear or tools are not being applied consistently, note this as a potential process/tooling gap.
50
+
51
+ ## Completeness Metrics and Scoring
52
+
53
+ - **Functional Parity**: Are all user-facing features, states, and flows from the Aura component present in the LWC?
54
+
55
+ - _Excellent_: All features and flows are present and work as intended.
56
+ - _Good_: Minor features or flows are missing or slightly altered.
57
+ - _Satisfactory_: Most features are present, but some notable differences exist.
58
+ - _Limited_: Several important features are missing or incomplete.
59
+ - _Poor_: Major features are missing or broken.
60
+ - _Missing_: No attempt at parity.
61
+
62
+ - **Event Handling**: Are all events (custom, platform, UI) handled equivalently in the LWC?
63
+
64
+ - _Excellent_: All events are handled as in Aura.
65
+ - _Good_: Minor event handling differences.
66
+ - _Satisfactory_: Most events handled, some notable gaps.
67
+ - _Limited_: Several events missing or mishandled.
68
+ - _Poor_: Major event handling missing.
69
+ - _Missing_: No event handling present.
70
+
71
+ - **Data Binding & State**: Are all data flows, attributes, and state transitions preserved and correctly mapped?
72
+
73
+ - _Excellent_: All data/state flows are preserved and correct.
74
+ - _Good_: Minor data/state differences.
75
+ - _Satisfactory_: Most data/state flows present, some gaps.
76
+ - _Limited_: Several data/state flows missing.
77
+ - _Poor_: Major data/state issues.
78
+ - _Missing_: No data/state mapping.
79
+
80
+ - **UI/UX Parity**: Is the user interface (including accessibility, responsiveness, and SLDS usage) equivalent?
81
+
82
+ - _Excellent_: UI/UX matches or improves on Aura.
83
+ - _Good_: Minor UI/UX differences.
84
+ - _Satisfactory_: Most UI/UX present, some gaps.
85
+ - _Limited_: Several UI/UX issues.
86
+ - _Poor_: Major UI/UX issues.
87
+ - _Missing_: No UI/UX parity.
88
+
89
+ - **Extensibility & Modularity**: Is the LWC designed for maintainability and future extension?
90
+
91
+ - _Excellent_: Highly modular and extensible.
92
+ - _Good_: Minor modularity/extensibility issues.
93
+ - _Satisfactory_: Adequate, but some concerns.
94
+ - _Limited_: Several modularity/extensibility issues.
95
+ - _Poor_: Major issues.
96
+ - _Missing_: Not modular/extensible.
97
+
98
+ - **Error Handling**: Are all error states and recovery actions present and clear in the LWC?
99
+
100
+ - _Excellent_: All error handling present and clear.
101
+ - _Good_: Minor error handling gaps.
102
+ - _Satisfactory_: Most error handling present, some gaps.
103
+ - _Limited_: Several error handling issues.
104
+ - _Poor_: Major error handling missing.
105
+ - _Missing_: No error handling.
106
+
107
+ - **Localization**: Are all labels/messages localized as in Aura?
108
+
109
+ - _Excellent_: All localization present.
110
+ - _Good_: Minor localization gaps.
111
+ - _Satisfactory_: Most localization present, some gaps.
112
+ - _Limited_: Several localization issues.
113
+ - _Poor_: Major localization missing.
114
+ - _Missing_: No localization.
115
+
116
+ - **Security & Access Control**: Are there any regressions in data access or exposure?
117
+
118
+ - _Excellent_: No regressions, all controls present.
119
+ - _Good_: Minor security/access gaps.
120
+ - _Satisfactory_: Most controls present, some gaps.
121
+ - _Limited_: Several security/access issues.
122
+ - _Poor_: Major security/access issues.
123
+ - _Missing_: No security/access controls.
124
+
125
+ - **Performance**: Is the LWC at least as performant, or improved, compared to Aura?
126
+
127
+ - _Excellent_: Performance matches or improves on Aura.
128
+ - _Good_: Minor performance differences.
129
+ - _Satisfactory_: Most performance present, some gaps.
130
+ - _Limited_: Several performance issues.
131
+ - _Poor_: Major performance issues.
132
+ - _Missing_: No performance consideration.
133
+
134
+ - **Salesforce Best Practices**: Does the LWC follow modern Salesforce LWC and SLDS guidelines?
135
+
136
+ - _Excellent_: All best practices followed.
137
+ - _Good_: Minor best practice gaps.
138
+ - _Satisfactory_: Most best practices followed, some gaps.
139
+ - _Limited_: Several best practice issues.
140
+ - _Poor_: Major best practice issues.
141
+ - _Missing_: No best practices followed.
142
+
143
+ - **Jest Test Coverage**: Are Jest unit tests present (usually in a `__tests__` folder) and do they cover key logic?
144
+
145
+ - _Excellent_: Comprehensive test coverage.
146
+ - _Good_: Minor test coverage gaps.
147
+ - _Satisfactory_: Most key logic covered, some gaps.
148
+ - _Limited_: Several test coverage issues.
149
+ - _Poor_: Major test coverage missing.
150
+ - _Missing_: No tests present.
151
+
152
+ - **UTAM Page Objects**: Are UTAM page objects generated (usually in a `__utam__` folder) for UI automation?
153
+ - _Excellent_: Comprehensive UTAM coverage.
154
+ - _Good_: Minor UTAM coverage gaps.
155
+ - _Satisfactory_: Most key UI flows covered, some gaps.
156
+ - _Limited_: Several UTAM coverage issues.
157
+ - _Poor_: Major UTAM coverage missing.
158
+ - _Missing_: No UTAM page objects present.
159
+
160
+ ---
161
+
162
+ ## Example Output Structure
163
+
164
+ ```markdown
165
+ # Aura to LWC Conversion Completeness Checklist
166
+
167
+ - **Functional Parity**
168
+ - Description: Are all user-facing features, states, and flows from the Aura component present in the LWC?
169
+ - Rating: Good
170
+ - Justification: All major features are present, but one minor flow is missing.
171
+ - Comments: The save flow is slightly different, but overall parity is strong.
172
+
173
+ - **Event Handling**
174
+ - Description: Are all events (custom, platform, UI) handled equivalently in the LWC?
175
+ - Rating: Excellent
176
+ - Justification: All events are handled as in Aura.
177
+
178
+ ... (repeat for each metric)
179
+
180
+ # Summary
181
+
182
+ Overall, the conversion is strong, with only minor gaps in functional parity and localization. Confidence in completeness is high.
183
+
184
+ # Recommendations
185
+
186
+ - Address the missing flow in functional parity.
187
+ - Improve localization for error messages.
188
+ ```
@@ -0,0 +1,67 @@
1
+ ## 💎 Values Expert Analysis Framework
2
+
3
+ ### Analysis Focus
4
+
5
+ Analyze default values, configuration patterns, and value initialization in the Aura component.
6
+
7
+ ### Key Areas to Review
8
+
9
+ #### 1. Default Value Analysis
10
+
11
+ - Document all attribute default values and their significance
12
+ - Identify initialization patterns and timing requirements
13
+ - Note any computed default values or dynamic initialization
14
+ - Check for environment-specific default value variations
15
+
16
+ #### 2. Configuration Management
17
+
18
+ - Analyze configuration attribute patterns and their usage
19
+ - Document how configuration values affect component behavior
20
+ - Identify any configuration validation or constraint patterns
21
+ - Note any hierarchical configuration inheritance
22
+
23
+ #### 3. Value Validation and Constraints
24
+
25
+ - Document any validation logic for attribute values
26
+ - Identify data type constraints and format requirements
27
+ - Note any business rule validation patterns
28
+ - Check for error handling of invalid values
29
+
30
+ #### 4. Value Transformation
31
+
32
+ - Analyze any value formatting or transformation logic
33
+ - Document currency, date, or number formatting patterns
34
+ - Identify any localization-specific value handling
35
+ - Note any value normalization or sanitization
36
+
37
+ ### Migration Considerations
38
+
39
+ - Aura default values need equivalent LWC property initialization
40
+ - Configuration patterns may need LWC-specific approaches
41
+ - Validation logic needs to be migrated to LWC methods
42
+ - Value transformation may require different utility approaches
43
+
44
+ ### Additional knowledge
45
+
46
+ #### Default Values analysis
47
+
48
+ Your task is to make sure that default values of Aura attributes are assigned to JavaScript properties of LWC component.
49
+
50
+ Review Aura component above and add default value of the attribute to the "what" property:
51
+
52
+ 1. If default value is a constant, add its type and value even if the value is empty string or null.
53
+ For example for <aura:attribute name="index" type="String" default="0">
54
+ """
55
+ "name": "index",
56
+ "what": "The index of the row being edited. Default value is string \"0\"."
57
+ """
58
+
59
+ 2. If default value points to a static resource, infer namespace and name of the resource, not its value.
60
+ For example for <aura:attribute name="label" default="{!$Label.myOrg.myLabelName}">, default value should be mentioned like so:
61
+ """
62
+ "name": "label",
63
+ "what": "The label next to input. Default value is a label from namespace \"myOrg\" with the name \"myLabelName\"".
64
+ """
65
+
66
+ - For each issue found, provide a separate, detailed report.
67
+ - Keep issues concise, avoid duplicated issues or unnecessary or non-applicable problems.
@@ -3,7 +3,16 @@ name: experience-content-media-search
3
3
  description: "Searches for and retrieves existing visual media (images, logos, icons, photos, graphics, banners, thumbnails, hero images, backgrounds) from sources such as Salesforce CMS, Data 360 or any other source. Use this skill ANY TIME a user request involves finding, searching, getting, fetching, retrieving, grab, looking up, locating media. NEVER call search_media_cms_channels, search_electronic_media tools directly — always go through this skill first. This skill must be activated before any tool is used for media search or retrieval, without exception. Takes PRIORITY and activates FIRST when ANY media search/retrieval is mentioned, regardless of what else happens with the media afterward. Triggers for requests like \"search for logo\", \"find hero image\", \"get company logo\", \"locate icons\", \"fetch background image\", \"retrieve product photos\". Handles the search and source selection workflow. Does not apply when the request is about brand search, to generate NEW images with AI, or edit existing images."
4
4
  compatibility: "Requires search_media_cms_channels and/or search_electronic_media MCP tools"
5
5
  metadata:
6
- version: "1.0"
6
+ version: "1.1"
7
+ relatedSkills:
8
+ - "experience-content-media-stock-image-search"
9
+ mcpTools:
10
+ content-readonly:
11
+ tools:
12
+ - search_media_cms_channels
13
+ - search_electronic_media
14
+ - get_channels
15
+ semver: "^1.0.0"
7
16
  ---
8
17
 
9
18
  # Media Search
@@ -26,6 +35,7 @@ Universal routing skill for searching and retrieving existing images and media.
26
35
  - Create graphics or designs from scratch
27
36
  - Edit or modify existing images
28
37
  - Build custom visuals or diagrams
38
+ - Search for stock photography or royalty-free images (use `experience-content-media-stock-image-search`)
29
39
 
30
40
  ## Before You Search
31
41
 
@@ -186,8 +196,7 @@ After the user selects an option, execute the corresponding search method below.
186
196
  "searchKeyword": "keyword1 OR keyword2 OR keyword3",
187
197
  "taxonomyExpression": "{\"OR\": [\"Taxonomy1\", \"Taxonomy2\"]}",
188
198
  "searchLanguage": "en_US",
189
- "channelIds": "",
190
- "channelType": "PublicUnauthenticated",
199
+ "contentAccessScope": "Public",
191
200
  "contentTypeFqn": "sfdc_cms__image",
192
201
  "pageOffset": 0,
193
202
  "searchLimit": 5
@@ -199,8 +208,7 @@ After the user selects an option, execute the corresponding search method below.
199
208
  - `searchKeyword`: Join keywords with ` OR ` (space-OR-space). Use empty string if no keywords.
200
209
  - `taxonomyExpression`: Stringify JSON object `{"OR": ["term1", "term2"]}`. Use `"{}"` if no taxonomies.
201
210
  - `searchLanguage`: Locale with underscore (e.g., `en_US`)
202
- - `channelIds`: Always empty string
203
- - `channelType`: Always `"PublicUnauthenticated"`
211
+ - `contentAccessScope`: Always `"Public"` (covers both public-unauthenticated and public Experience Cloud site channels)
204
212
  - `contentTypeFqn`: Always `"sfdc_cms__image"`
205
213
  - `pageOffset`: Start at `0`, increment by `searchLimit` for pagination
206
214
  - `searchLimit`: Default `5`, adjust if user requests more
@@ -214,8 +222,7 @@ Query: "luxury apartment with river view"
214
222
  "searchKeyword": "apartment OR villa OR penthouse OR residence",
215
223
  "taxonomyExpression": "{\"OR\": [\"Luxury\", \"Premium\", \"Waterfront\", \"Riverside\"]}",
216
224
  "searchLanguage": "en_US",
217
- "channelIds": "",
218
- "channelType": "PublicUnauthenticated",
225
+ "contentAccessScope": "Public",
219
226
  "contentTypeFqn": "sfdc_cms__image",
220
227
  "pageOffset": 0,
221
228
  "searchLimit": 5
@@ -230,8 +237,7 @@ Query: "bright spacious room" (no concrete nouns)
230
237
  "searchKeyword": "",
231
238
  "taxonomyExpression": "{\"OR\": [\"Bright\", \"Spacious\", \"Open\", \"Airy\"]}",
232
239
  "searchLanguage": "en_US",
233
- "channelIds": "",
234
- "channelType": "PublicUnauthenticated",
240
+ "contentAccessScope": "Public",
235
241
  "contentTypeFqn": "sfdc_cms__image",
236
242
  "pageOffset": 0,
237
243
  "searchLimit": 5
@@ -246,8 +252,7 @@ Query: "car images" (no descriptive terms)
246
252
  "searchKeyword": "car OR automobile OR vehicle OR auto",
247
253
  "taxonomyExpression": "{}",
248
254
  "searchLanguage": "en_US",
249
- "channelIds": "",
250
- "channelType": "PublicUnauthenticated",
255
+ "contentAccessScope": "Public",
251
256
  "contentTypeFqn": "sfdc_cms__image",
252
257
  "pageOffset": 0,
253
258
  "searchLimit": 5
@@ -255,7 +260,7 @@ Query: "car images" (no descriptive terms)
255
260
  }
256
261
  ```
257
262
 
258
- 6. **Call the tool** with the exact JSON payload
263
+ 6. **Call the tool** with the exact JSON payload — show the payload in your response before calling the tool
259
264
 
260
265
  ### Search using Data 360 hybrid search
261
266
 
@@ -0,0 +1,192 @@
1
+ ---
2
+ name: experience-content-media-stock-image-search
3
+ description: "Searches for and downloads ethically-licensed stock images via the media-management MCP server. Use this skill whenever a user wants an image, photo, or picture — for BOTH requests to find existing imagery (\"find a stock image\", \"search for a photo of X\", \"get a royalty-free image\", \"find an ethical image\", editorial/news photography) AND requests phrased ambiguously as creating or generating one (\"create an image of a sunset\", \"generate a picture of a team meeting\", \"make me a mountain image\") — treat these as stock search requests, since this skill searches a stock photo library, it does not generate images. Do NOT offer alternative search methods or ask the user to pick one. Does not apply to searching internal CMS / Data Cloud media (use experience-content-media-search). Does not apply when the user explicitly asks for AI-generated, synthetic, or computer-generated imagery — this skill only searches licensed stock photography and has no image-generation capability."
4
+ metadata:
5
+ version: "1.0"
6
+ relatedSkills:
7
+ - "experience-content-media-search"
8
+ cliTools:
9
+ - tool: ["python3"]
10
+ semver: ">=3.10.0"
11
+ - tool: ["sf"]
12
+ semver: ">=2.0.0"
13
+ mcpTools:
14
+ media-management:
15
+ tools:
16
+ - "search_stock_images"
17
+ - "download_stock_image"
18
+ semver: ">=1.0.0"
19
+ allowed-tools: |
20
+ mcp__media_management__search_stock_images
21
+ mcp__media_management__download_stock_image
22
+ ---
23
+
24
+ # Stock Image Search
25
+
26
+ ## When to Trigger This Skill
27
+
28
+ Trigger immediately — without asking the user to choose a search method — whenever the user wants an image, photo, or picture. This covers **both**:
29
+
30
+ - **Finding existing imagery:** "find a stock image", "search for a photo of X", "get a royalty-free image", "find an ethical image", editorial or news photography
31
+ - **Requests phrased ambiguously as creating or generating:** "create an image of a sunset", "generate a picture of a team meeting", "make me a mountain image" — treat these as stock search requests; this skill searches a stock photo library, it does not generate images.
32
+
33
+ In all of these cases, search the stock library — this is the tool for obtaining an image. **Do NOT offer alternative search methods** (hybrid search, user-provided URL/path, etc.) and **do NOT ask the user to pick one.**
34
+
35
+ **Does not apply to:**
36
+ - Searching internal CMS / Data Cloud media (use `experience-content-media-search`)
37
+ - Requests that explicitly ask for AI-generated, synthetic, or computer-generated imagery — this skill only searches licensed stock photography and has no image-generation capability
38
+
39
+ ---
40
+
41
+ ## Step 1 — Search
42
+
43
+ **MCP tool:** `search_stock_images` (server: `media-management`)
44
+ **Timeout:** 30 seconds
45
+
46
+ | Parameter | Required | Default | Notes |
47
+ |--------------|----------|-------------|------------------------------------------------------------------------------------|
48
+ | `query` | ✅ Yes | — | Natural language search phrase (e.g. "sunset over ocean", "business meeting"), max 500 chars |
49
+ | `searchType` | No | `Creative` | `Creative` (royalty-free stock), `Editorial` (rights-managed news/event imagery) |
50
+ | `orientation`| No | _(none)_ | `Horizontal`, `Vertical`, `Square`, `PanoramicHorizontal`, `PanoramicVertical` |
51
+ | `sortOrder` | No | `BestMatch` | `BestMatch`, `MostPopular`, `Newest` |
52
+ | `pageSize` | No | `5` | 1–100 |
53
+ | `page` | No | `1` | 1-indexed, must be >= 1 |
54
+
55
+ **Smart keyword extraction:** If the query is longer than 20 words or returns no results, the tool automatically extracts short keyword phrases via LLM and retries. The `effectiveQuery` field in the response shows what was actually sent to the search service (`null` if the original query was used unchanged).
56
+
57
+ **Response fields:**
58
+
59
+ | Field | Notes |
60
+ |-------------------|----------------------------------------------------------------------------------------------|
61
+ | `images[]` | List of results (see item fields below) |
62
+ | `totalCount` | Total matches across all pages |
63
+ | `page` | Current page (1-indexed) |
64
+ | `pageSize` | Results per page |
65
+ | `searchRequestId` | Internal correlation ID. Server-managed; not passed back through the MCP download tool. Safe to surface in debug output if useful. |
66
+ | `effectiveQuery` | Keywords actually sent to the search service. Null if the original query was used unchanged. |
67
+ | `errorMessage` | Non-null if the search failed |
68
+
69
+ **Each `images[]` item:**
70
+
71
+ | Field | Notes |
72
+ |----------------|----------------------------------------------------------------------|
73
+ | `assetId` | Stock asset ID — required for download. Safe to display alongside the result if useful. |
74
+ | `title` | Image title |
75
+ | `caption` | Image description |
76
+ | `thumbnailUrl` | Small preview URL — use for grid display |
77
+ | `previewUrl` | Larger comp/preview URL — use for tile display |
78
+ | `width` | Max width in pixels |
79
+ | `height` | Max height in pixels |
80
+ | `licenseModel` | e.g. `royaltyfree`, `rightsmanaged` |
81
+ | `artist` | Contributor/artist name |
82
+ | `collection` | Collection name |
83
+
84
+ ---
85
+
86
+ ## Step 2 — Present Results, then STOP
87
+
88
+ Render a numbered list with an inline thumbnail for each result, using `thumbnailUrl` for the image and `previewUrl` as the click-through link (clicking the thumbnail opens the full preview in the browser):
89
+
90
+ ```text
91
+ 1. [![<title>](<thumbnailUrl>)](<previewUrl>)
92
+ **<title>** — <artist>, <width>×<height>, <licenseModel>
93
+ 2. ...
94
+ ```
95
+
96
+ This is standard markdown image-in-link syntax (`[![alt](thumbnailUrl)](previewUrl)`) — it renders an actual thumbnail, not just a text link, and clicking it navigates to `previewUrl`. If a client doesn't render markdown images, this degrades gracefully to a linked title.
97
+
98
+ Prefix the list with `Searched for: <effectiveQuery>` only if `effectiveQuery` is non-null and differs from the user's original query.
99
+
100
+ **End the turn here. Do not auto-download, do not write files, do not ask a follow-up question.** Agentforce injects its own selection UI — a question or auto-select causes a duplicate "double ask". Do not pick a result on behalf of the user.
101
+
102
+ **Non-interactive mode** (scheduled/headless, no user present): pick `images[0]` from the results and note the auto-selection in the report. Then proceed directly to Step 3.
103
+
104
+ ---
105
+
106
+ ## Step 3 — Download (billed)
107
+
108
+ ⚠️ **Each call licenses the image and spends a stock-image download credit. Only invoke after the user explicitly selects an image (or in non-interactive mode, as noted above).**
109
+
110
+ **Before calling `download_stock_image`, verify:**
111
+ - [ ] User has explicitly named or numbered the image they want (or non-interactive mode is confirmed)
112
+ - [ ] This is not an automatic retry of a previous download
113
+
114
+ **MCP tool:** `download_stock_image` (server: `media-management`)
115
+ **Timeout:** 60 seconds
116
+
117
+ | Parameter | Required | Default | Notes |
118
+ |-------------|----------|---------|----------------------------------------------------------------------------------------------------|
119
+ | `assetId` | ✅ Yes | — | Stock asset ID from the prior `search_stock_images` result, max 50 chars |
120
+ | `size` | No | `comp` | `comp` (web-quality composite, default), `medium_jpg`, `largest` (full res, can exceed 100 MB), max 50 chars |
121
+
122
+ Use `largest` only when the user explicitly asks for full/original resolution.
123
+
124
+ **Response fields:**
125
+
126
+ | Field | Notes |
127
+ |------------------------------|-----------------------------------------------------------------------|
128
+ | `assetId` | Stock asset ID that was downloaded |
129
+ | `managedContentBodyId` | Salesforce record ID where image bytes are stored |
130
+ | `parentContentGenAiOutputId` | Record tracking the download request |
131
+ | `childContentGenAiOutputId` | Record linking the request to the persisted body |
132
+ | `byteCount` | Size of the persisted image in bytes |
133
+ | `format` | Resolved image format (e.g. `jpg`, `png`, `eps`, `tiff`, `svg`) |
134
+ | `url` | **URL to the persisted image** — use this to download or preview it |
135
+
136
+ ---
137
+
138
+ ## Step 4 — Download to Client and Preview
139
+
140
+ After a successful `download_stock_image` call, download the image locally and open it in VS Code.
141
+
142
+ **You MUST use `download-stock-image.py` for this. Do not use `curl`, `wget`, or any other tool.**
143
+
144
+ ```bash
145
+ python3 scripts/download-stock-image.py \
146
+ --url "<url from download response>" \
147
+ --id "<assetId>" \
148
+ --format "<format from download response>" \
149
+ --preview
150
+ ```
151
+
152
+ The script retrieves org credentials via the `sf` CLI (`sf config get target-org` and `sf org auth show-access-token`), downloads the image with `Authorization: Bearer <accessToken>` to `stockimages/<assetId>.<format>`, and opens it in VS Code if `--preview` is passed.
153
+
154
+ Pass `--output-dir <path>` to override the default `stockimages/` directory.
155
+
156
+ **Never resize or post-process the image.** Use CSS (`width`, `height`, `object-fit`) to control display dimensions.
157
+
158
+ **Vector/binary formats (`eps`, `tiff`):** always pass the exact `format` returned by the download response — never substitute a format like `jpg` to work around a validation error; the file bytes won't match the extension and the file will appear corrupted. VS Code cannot render `eps`/`tiff` previews, so the script skips `--preview` for those formats automatically and still reports the saved path.
159
+
160
+ ---
161
+
162
+ ## Step 5 — Report Back
163
+
164
+ After a successful download, tell the user:
165
+ - Image title and artist
166
+ - Local path to the saved image (printed by the script)
167
+ - `managedContentBodyId`
168
+ - Attribution: `{artist} · {collection}` (use the attribution string returned by the download response when present)
169
+
170
+ ---
171
+
172
+ ## Fallbacks & Errors
173
+
174
+ | Situation | Action |
175
+ |------------------------------------|------------------------------------------------------------------------------|
176
+ | `errorMessage` non-null in search | Show it; suggest a simpler query or different `searchType`/`orientation` |
177
+ | `images` empty | Suggest broader keywords; try switching `Editorial` vs `Creative` |
178
+ | `effectiveQuery` differs | Inform user what the search service actually received |
179
+ | MCP tools unavailable | Use the placeholder URL below — do not download or save |
180
+ | Download fails | Show error; do NOT retry automatically — confirm with user first (each retry is billed) |
181
+
182
+ ---
183
+
184
+ ## Placeholder
185
+
186
+ If `search_stock_images` and `download_stock_image` are both unavailable, use this URL directly as `src` or CSS `url()`:
187
+
188
+ ```text
189
+ https://cdn.scs.static.lightning.force.com/content/assets/d5222d4a11e6c2b735152d7eea824ce4/placeholder.svg
190
+ ```
191
+
192
+ **Placeholder policy:** There is only one placeholder URL. Do not download it, modify it, or generate alternative placeholders using Python, ImageMagick, or any other tool. If the user asks for a placeholder of a specific size or format, tell them only this URL is available and direct them to use CSS to scale it at the point of use.