@salesforce/afv-skills 1.63.0 → 1.65.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 (484) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-gpt-email-generation-configure/SKILL.md +312 -0
  3. package/skills/agentforce-offline-experimentation-run/SKILL.md +253 -0
  4. package/skills/agentforce-offline-experimentation-run/scripts/build_report.py +796 -0
  5. package/skills/agentforce-offline-experimentation-run/scripts/resolve-token.sh +111 -0
  6. package/skills/agentforce-offline-experimentation-run/scripts/sfap_replay.py +1053 -0
  7. package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +64 -0
  8. package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +46 -0
  9. package/skills/automation-company-profile-info-query/SKILL.md +51 -0
  10. package/skills/automation-digital-wallet-configure/SKILL.md +689 -0
  11. package/skills/automation-flow-coordinate/SKILL.md +95 -0
  12. package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +1569 -0
  13. package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +96 -0
  14. package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +23 -0
  15. package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +31 -0
  16. package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +179 -0
  17. package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +13 -0
  18. package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +83 -0
  19. package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +69 -0
  20. package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +274 -0
  21. package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +192 -0
  22. package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +130 -0
  23. package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +92 -0
  24. package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +88 -0
  25. package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +152 -0
  26. package/skills/automation-flow-coordinate/references/elements/start/start.md +539 -0
  27. package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +152 -0
  28. package/skills/automation-flow-coordinate/references/elements/wait/wait.md +497 -0
  29. package/skills/automation-flow-coordinate/references/recipes/author/author.md +868 -0
  30. package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +300 -0
  31. package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +292 -0
  32. package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +323 -0
  33. package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +109 -0
  34. package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +219 -0
  35. package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +180 -0
  36. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +175 -0
  37. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +255 -0
  38. package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +212 -0
  39. package/skills/automation-flow-coordinate/references/resources/variable/variable.md +171 -0
  40. package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +786 -0
  41. package/skills/automation-flow-coordinate/references/shared/end/end.md +267 -0
  42. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +69 -0
  43. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +80 -0
  44. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +116 -0
  45. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +321 -0
  46. package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +320 -0
  47. package/skills/automation-flow-coordinate/references/shared/server-functions.md +597 -0
  48. package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +21 -11
  49. package/skills/automation-sandbox-post-copy-config-generate/assets/config_template.json +10 -0
  50. package/skills/automation-sandbox-post-copy-config-generate/assets/json_schema.json +33 -1
  51. package/skills/automation-sandbox-post-copy-config-generate/references/configuration_catalog.md +44 -1
  52. package/skills/automation-sandbox-post-copy-configure/SKILL.md +132 -124
  53. package/skills/automation-sandbox-post-copy-configure/references/flow_activation_path.md +151 -0
  54. package/skills/automation-sandbox-post-copy-configure/references/scheduled_apex_path.md +55 -9
  55. package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +69 -0
  56. package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +78 -0
  57. package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +373 -0
  58. package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +273 -0
  59. package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +259 -0
  60. package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +369 -0
  61. package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +542 -0
  62. package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +159 -0
  63. package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +349 -0
  64. package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +505 -0
  65. package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +380 -0
  66. package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +567 -0
  67. package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +159 -0
  68. package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +360 -0
  69. package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +539 -0
  70. package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +358 -0
  71. package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +602 -0
  72. package/skills/commerce-b2b-store-configure/SKILL.md +251 -0
  73. package/skills/commerce-credit-memo-create/SKILL.md +139 -0
  74. package/skills/commerce-delivery-business-hours-configure/SKILL.md +277 -0
  75. package/skills/commerce-delivery-estimation-apply/SKILL.md +155 -0
  76. package/skills/commerce-delivery-estimation-configure/SKILL.md +377 -0
  77. package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +174 -0
  78. package/skills/commerce-estimate-bopis-query/SKILL.md +279 -0
  79. package/skills/commerce-estimate-delivery-date-query/SKILL.md +349 -0
  80. package/skills/commerce-fees-apply/SKILL.md +227 -0
  81. package/skills/commerce-fulfillment-routing-analyze/SKILL.md +200 -0
  82. package/skills/commerce-guest-buyer-create/SKILL.md +173 -0
  83. package/skills/commerce-location-bopis-configure/SKILL.md +378 -0
  84. package/skills/commerce-location-business-hours-configure/SKILL.md +235 -0
  85. package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +309 -0
  86. package/skills/commerce-location-graph-integrate/SKILL.md +131 -0
  87. package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +755 -0
  88. package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +331 -0
  89. package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +579 -0
  90. package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +626 -0
  91. package/skills/commerce-merchant-catalog-configure/SKILL.md +614 -0
  92. package/skills/commerce-merchant-extension-provider-configure/SKILL.md +368 -0
  93. package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +118 -0
  94. package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +65 -0
  95. package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +90 -0
  96. package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +72 -0
  97. package/skills/commerce-merchant-insights-query/SKILL.md +279 -0
  98. package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +656 -0
  99. package/skills/commerce-order-summary-change-apply/SKILL.md +375 -0
  100. package/skills/commerce-product-details-get/SKILL.md +363 -0
  101. package/skills/commerce-product-search/SKILL.md +563 -0
  102. package/skills/commerce-react-storefront-create/SKILL.md +350 -0
  103. package/skills/commerce-return-order-summary-create/SKILL.md +513 -0
  104. package/skills/commerce-search-relevance-analyze/SKILL.md +757 -0
  105. package/skills/commerce-temporary-processing-time-override-create/SKILL.md +274 -0
  106. package/skills/communications-initial-setup-configure/SKILL.md +630 -0
  107. package/skills/communications-multisite-configure/SKILL.md +571 -0
  108. package/skills/communications-revenue-cloud-settings-configure/SKILL.md +74 -0
  109. package/skills/communications-smb-fiber-catalog-create/SKILL.md +413 -0
  110. package/skills/communications-tmf-integrate/SKILL.md +1368 -0
  111. package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +54 -107
  112. package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +1 -1
  113. package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +82 -5
  114. package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +35 -2
  115. package/skills/consumer-goods-promotion-bo-api-deploy/references/preflight-and-seed-queries.md +149 -0
  116. package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +17 -1
  117. package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +448 -0
  118. package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +269 -0
  119. package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +271 -0
  120. package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +382 -0
  121. package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +373 -0
  122. package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +389 -0
  123. package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +338 -0
  124. package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +547 -0
  125. package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +346 -0
  126. package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +1110 -0
  127. package/skills/crm-analytics-adoption-insights-configure/SKILL.md +224 -0
  128. package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +418 -0
  129. package/skills/crm-analytics-dashboards-configure/SKILL.md +731 -0
  130. package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +233 -0
  131. package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +184 -0
  132. package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +167 -0
  133. package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +55 -0
  134. package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +1350 -0
  135. package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +1862 -0
  136. package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +83 -0
  137. package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +81 -0
  138. package/skills/data360-activation-create/SKILL.md +104 -0
  139. package/skills/data360-activation-external-platform-get/SKILL.md +49 -0
  140. package/skills/data360-activation-target-create/SKILL.md +93 -0
  141. package/skills/data360-activation-v2-create/SKILL.md +456 -0
  142. package/skills/data360-audience-dmo-get/SKILL.md +38 -0
  143. package/skills/data360-calculated-affinity-create/SKILL.md +82 -0
  144. package/skills/data360-calculated-insight-create/SKILL.md +148 -0
  145. package/skills/data360-catalog-metadata-create/SKILL.md +183 -0
  146. package/skills/data360-code-extension-create/SKILL.md +115 -0
  147. package/skills/data360-communication-capping-create/SKILL.md +227 -0
  148. package/skills/data360-connection-create/SKILL.md +491 -0
  149. package/skills/data360-content-lens-create/SKILL.md +181 -0
  150. package/skills/data360-data-action-create/SKILL.md +126 -0
  151. package/skills/data360-data-action-target-create/SKILL.md +181 -0
  152. package/skills/data360-data-clean-room-create/SKILL.md +238 -0
  153. package/skills/data360-data-governance-create/SKILL.md +746 -0
  154. package/skills/data360-data-graph-create/SKILL.md +82 -0
  155. package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +38 -0
  156. package/skills/data360-data-lake-object-create/SKILL.md +207 -0
  157. package/skills/data360-data-model-object-catalog-get/SKILL.md +49 -0
  158. package/skills/data360-data-model-object-create/SKILL.md +128 -0
  159. package/skills/data360-data-model-object-mapping-create/SKILL.md +106 -0
  160. package/skills/data360-data-space-create/SKILL.md +161 -0
  161. package/skills/data360-data-streams-create/SKILL.md +324 -0
  162. package/skills/data360-engagement-signal-get/SKILL.md +38 -0
  163. package/skills/data360-experiment-create/SKILL.md +82 -0
  164. package/skills/data360-goal-based-campaign-create/SKILL.md +192 -0
  165. package/skills/data360-harmonization-process-history-get/SKILL.md +38 -0
  166. package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +84 -0
  167. package/skills/data360-identity-resolution-create/SKILL.md +115 -0
  168. package/skills/data360-intelligent-document-processing-create/SKILL.md +148 -0
  169. package/skills/data360-knowledge-graph-construction-create/SKILL.md +93 -0
  170. package/skills/data360-knowledge-graph-create/SKILL.md +216 -0
  171. package/skills/data360-knowledge-space-mcp-configure/SKILL.md +475 -0
  172. package/skills/data360-machine-learning-mcp-configure/SKILL.md +697 -0
  173. package/skills/data360-multi-org-mcp-configure/SKILL.md +117 -0
  174. package/skills/data360-secondary-index-mcp-configure/SKILL.md +126 -0
  175. package/skills/data360-segment-mcp-configure/SKILL.md +159 -0
  176. package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +93 -0
  177. package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +93 -0
  178. package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +93 -0
  179. package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +38 -0
  180. package/skills/data360-semantic-engine-mcp-configure/SKILL.md +62 -0
  181. package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +38 -0
  182. package/skills/data360-semantic-metric-mcp-configure/SKILL.md +93 -0
  183. package/skills/data360-semantic-model-mcp-configure/SKILL.md +115 -0
  184. package/skills/data360-standard-mapping-mcp-configure/SKILL.md +38 -0
  185. package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +73 -0
  186. package/skills/dx-devops-conflict-resolve/SKILL.md +1 -5
  187. package/skills/dx-devops-pipeline-manage/SKILL.md +1 -5
  188. package/skills/dx-devops-project-manage/SKILL.md +1 -5
  189. package/skills/dx-devops-promote/SKILL.md +1 -5
  190. package/skills/dx-devops-request-status/SKILL.md +1 -5
  191. package/skills/dx-lifecycle-center/SKILL.md +120 -0
  192. package/skills/dx-lifecycle-center/examples/workflows.md +175 -0
  193. package/skills/dx-lifecycle-center/references/connect-api.md +123 -0
  194. package/skills/dx-lifecycle-center/references/connect-org.md +184 -0
  195. package/skills/dx-lifecycle-center/references/deploy.md +153 -0
  196. package/skills/dx-lifecycle-center/references/error-handling.md +21 -0
  197. package/skills/dx-lifecycle-center/references/hub-org.md +37 -0
  198. package/skills/dx-lifecycle-center/references/list-orgs.md +99 -0
  199. package/skills/dx-lifecycle-center/references/request-body.md +75 -0
  200. package/skills/dx-lifecycle-center/references/troubleshooting.md +31 -0
  201. package/skills/dx-lifecycle-center/scripts/poll-deploy-status.sh +200 -0
  202. package/skills/dx-lifecycle-center/scripts/resolve-environment.sh +120 -0
  203. package/skills/dx-org-devhub-configure/SKILL.md +1 -3
  204. package/skills/dx-org-shape-manage/SKILL.md +1 -5
  205. package/skills/dx-org-snapshot-manage/SKILL.md +1 -3
  206. package/skills/education-cloud-academic-calendar-generate/SKILL.md +1 -3
  207. package/skills/education-cloud-course-catalog-migrate/SKILL.md +1 -3
  208. package/skills/education-cloud-domain-configure/SKILL.md +1 -3
  209. package/skills/education-cloud-multi-campus-configure/SKILL.md +1 -3
  210. package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +1 -5
  211. package/skills/experience-afv-query/SKILL.md +234 -0
  212. package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +63 -0
  213. package/skills/experience-apex-components-configure/SKILL.md +69 -0
  214. package/skills/experience-apex-pages-configure/SKILL.md +107 -0
  215. package/skills/experience-app-home-configure/SKILL.md +76 -0
  216. package/skills/experience-aura-lightning-out-access-configure/SKILL.md +58 -0
  217. package/skills/experience-briefcase-configure/SKILL.md +287 -0
  218. package/skills/experience-community-flexi-page-list-create/SKILL.md +74 -0
  219. package/skills/experience-community-template-definition-list-query/SKILL.md +48 -0
  220. package/skills/experience-community-theme-definition-list-query/SKILL.md +38 -0
  221. package/skills/experience-content-assets-configure/SKILL.md +86 -0
  222. package/skills/experience-custom-domain-create/SKILL.md +727 -0
  223. package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +41 -0
  224. package/skills/experience-field-service-app-builder-configure/SKILL.md +187 -0
  225. package/skills/experience-flow-category-configure/SKILL.md +117 -0
  226. package/skills/experience-formula-configure/SKILL.md +358 -0
  227. package/skills/experience-global-actions-configure/SKILL.md +69 -0
  228. package/skills/experience-global-publisher-layouts-configure/SKILL.md +79 -0
  229. package/skills/experience-instrumentation-configure/SKILL.md +64 -0
  230. package/skills/experience-lex-engagement-configure/SKILL.md +50 -0
  231. package/skills/experience-lightning-bolt-open/SKILL.md +12 -0
  232. package/skills/experience-lightning-out-configure/SKILL.md +129 -0
  233. package/skills/experience-lightning-preview-configure/SKILL.md +67 -0
  234. package/skills/experience-lightning-types-query/SKILL.md +98 -0
  235. package/skills/experience-malware-scan-configure/SKILL.md +71 -0
  236. package/skills/experience-my-salesforce-configure/SKILL.md +126 -0
  237. package/skills/experience-navigation-menus-configure/SKILL.md +235 -0
  238. package/skills/experience-notification-types-configure/SKILL.md +206 -0
  239. package/skills/experience-notifications-configure/SKILL.md +75 -0
  240. package/skills/experience-record-discovery-query/SKILL.md +227 -0
  241. package/skills/experience-regenerate-previews-open/SKILL.md +94 -0
  242. package/skills/experience-sales-cloud-mab-configure/SKILL.md +254 -0
  243. package/skills/experience-schema-builder-open/SKILL.md +38 -0
  244. package/skills/experience-simple-record-home-configure/SKILL.md +110 -0
  245. package/skills/experience-static-resources-configure/SKILL.md +74 -0
  246. package/skills/experience-ui-bundle-2gp-deploy/SKILL.md +1 -3
  247. package/skills/experience-ui-bundle-features-generate/SKILL.md +1 -5
  248. package/skills/experience-ui-bundle-mfa-configure/SKILL.md +1 -3
  249. package/skills/field-service-data-capture-form-deployer-configure/SKILL.md +23 -2
  250. package/skills/field-service-data-capture-form-designer-configure/SKILL.md +13 -3
  251. package/skills/field-service-data-capture-migrate/SKILL.md +1 -3
  252. package/skills/field-service-mobile-branding-configure/SKILL.md +17 -3
  253. package/skills/field-service-objective-designer-configure/SKILL.md +72 -379
  254. package/skills/field-service-prework-brief-deployer-configure/SKILL.md +10 -537
  255. package/skills/field-service-scheduling-policy-designer-query/SKILL.md +65 -1093
  256. package/skills/{field-service-setup-orchestrator-get → field-service-setup-coordinate}/SKILL.md +18 -3
  257. package/skills/field-service-sobject-create-configure/SKILL.md +13 -213
  258. package/skills/field-service-voice-to-form-configure/SKILL.md +40 -11
  259. package/skills/field-service-work-plan-configure/SKILL.md +253 -0
  260. package/skills/field-service-work-rule-designer-configure/SKILL.md +121 -95
  261. package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +180 -0
  262. package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +196 -0
  263. package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +106 -0
  264. package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +96 -0
  265. package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +111 -0
  266. package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +250 -0
  267. package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +122 -0
  268. package/skills/fsc-digital-origination-coordinate/SKILL.md +653 -0
  269. package/skills/fsc-digital-origination-demo-run/SKILL.md +225 -0
  270. package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +112 -0
  271. package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +396 -0
  272. package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +336 -0
  273. package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +208 -0
  274. package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +375 -0
  275. package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +83 -0
  276. package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +248 -0
  277. package/skills/fsc-digital-origination-sample-data-create/SKILL.md +206 -0
  278. package/skills/fsc-document-checklist-settings-configure/SKILL.md +57 -0
  279. package/skills/fsc-flexible-hierarchy-configure/SKILL.md +148 -0
  280. package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +1430 -0
  281. package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +471 -0
  282. package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +429 -0
  283. package/skills/fsc-pricing-product-configurator-configure/SKILL.md +150 -0
  284. package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +123 -0
  285. package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +82 -0
  286. package/skills/fsc-product-act3-attributes-create/SKILL.md +249 -0
  287. package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +196 -0
  288. package/skills/fsc-product-act5-considerations-get/SKILL.md +44 -0
  289. package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +384 -0
  290. package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +144 -0
  291. package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +107 -0
  292. package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +189 -0
  293. package/skills/fsc-stage-management-definition-create/SKILL.md +108 -0
  294. package/skills/fsc-stage-management-permissions-assign/SKILL.md +143 -0
  295. package/skills/fsc-stage-management-transitions-configure/SKILL.md +139 -0
  296. package/skills/health-cloud-appt-booking-config-configure/SKILL.md +135 -0
  297. package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +134 -0
  298. package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +136 -0
  299. package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +134 -0
  300. package/skills/health-cloud-care-requests-create/SKILL.md +178 -0
  301. package/skills/health-cloud-initial-configure/SKILL.md +511 -0
  302. package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +1374 -0
  303. package/skills/health-cloud-provider-search-settings-configure/SKILL.md +924 -0
  304. package/skills/health-cloud-referral-management-coordinate/SKILL.md +513 -0
  305. package/skills/health-cloud-timeline-configure/SKILL.md +622 -0
  306. package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +135 -0
  307. package/skills/industries-account-score-settings-query/SKILL.md +78 -0
  308. package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +177 -0
  309. package/skills/industries-ad-product-availability-search/SKILL.md +399 -0
  310. package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +628 -0
  311. package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +73 -0
  312. package/skills/industries-atm-settings-starter-configure/SKILL.md +76 -0
  313. package/skills/industries-batch-document-ai-configure/SKILL.md +196 -0
  314. package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +71 -0
  315. package/skills/industries-branch-management-settings-configure/SKILL.md +89 -0
  316. package/skills/industries-bre-decision-table-access-configure/SKILL.md +367 -0
  317. package/skills/industries-brokerage-settings-configure/SKILL.md +41 -0
  318. package/skills/industries-calendar-sync-settings-configure/SKILL.md +89 -0
  319. package/skills/industries-care-request-settings-configure/SKILL.md +218 -0
  320. package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +54 -0
  321. package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +380 -0
  322. package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +216 -0
  323. package/skills/industries-catalog-process-intake-configure/SKILL.md +219 -0
  324. package/skills/industries-catalog-process-knowledge-configure/SKILL.md +153 -0
  325. package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +168 -0
  326. package/skills/industries-cds-general-settings-configure/SKILL.md +69 -0
  327. package/skills/industries-claim-financial-settings-configure/SKILL.md +169 -0
  328. package/skills/industries-clinical-data-model-settings-configure/SKILL.md +136 -0
  329. package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +105 -0
  330. package/skills/industries-collection-plan-settings-configure/SKILL.md +132 -0
  331. package/skills/industries-comms-service-console-settings-configure/SKILL.md +159 -0
  332. package/skills/industries-compliance-configure/SKILL.md +102 -0
  333. package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +76 -0
  334. package/skills/industries-contact-center-app-layout-configure/SKILL.md +88 -0
  335. package/skills/industries-contact-center-components-configure/SKILL.md +96 -0
  336. package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +95 -0
  337. package/skills/industries-contact-center-user-access-assign/SKILL.md +96 -0
  338. package/skills/industries-course-waitlist-config-configure/SKILL.md +162 -0
  339. package/skills/industries-crisis-center-settings-configure/SKILL.md +84 -0
  340. package/skills/industries-custom-object-settings-configure/SKILL.md +94 -0
  341. package/skills/industries-data-cloud-integration-configure/SKILL.md +88 -0
  342. package/skills/industries-data-space-feature-mappings-configure/SKILL.md +245 -0
  343. package/skills/industries-decision-matrix-builder-configure/SKILL.md +78 -0
  344. package/skills/industries-decision-table-hbase-configure/SKILL.md +87 -0
  345. package/skills/industries-decision-table-version-configure/SKILL.md +74 -0
  346. package/skills/industries-decision-tables-builder-configure/SKILL.md +253 -0
  347. package/skills/industries-decision-tables-configure/SKILL.md +439 -0
  348. package/skills/industries-energy-utilities-configure/SKILL.md +251 -0
  349. package/skills/industries-eu-cloud-multisite-configure/SKILL.md +1008 -0
  350. package/skills/industries-eu-new-connections-configure/SKILL.md +30 -0
  351. package/skills/industries-explainability-msg-template-configure/SKILL.md +135 -0
  352. package/skills/industries-expression-set-message-token-configure/SKILL.md +135 -0
  353. package/skills/industries-field-service-settings-configure/SKILL.md +82 -0
  354. package/skills/industries-form-framework-settings-configure/SKILL.md +30 -0
  355. package/skills/industries-fsc-ai-settings-configure/SKILL.md +57 -0
  356. package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +172 -0
  357. package/skills/industries-fsc-b2b-settings-configure/SKILL.md +61 -0
  358. package/skills/industries-fsc-insurance-settings-configure/SKILL.md +58 -0
  359. package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +103 -0
  360. package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +117 -0
  361. package/skills/industries-fsc-wealth-settings-configure/SKILL.md +99 -0
  362. package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +120 -0
  363. package/skills/industries-fundraising-rfm-configure/SKILL.md +128 -0
  364. package/skills/industries-fundraising-settings-configure/SKILL.md +145 -0
  365. package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +299 -0
  366. package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +87 -0
  367. package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +58 -0
  368. package/skills/industries-hc-score-category-settings-configure/SKILL.md +167 -0
  369. package/skills/industries-health-engagement-settings-configure/SKILL.md +218 -0
  370. package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +131 -0
  371. package/skills/industries-home-health-bundling-policy-create/SKILL.md +50 -0
  372. package/skills/industries-home-health-entity-labels-configure/SKILL.md +29 -0
  373. package/skills/industries-home-health-fsl-package-deploy/SKILL.md +71 -0
  374. package/skills/industries-home-health-fsl-settings-validate/SKILL.md +27 -0
  375. package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +80 -0
  376. package/skills/industries-home-health-guided-setup-configure/SKILL.md +836 -0
  377. package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +55 -0
  378. package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +61 -0
  379. package/skills/industries-home-health-licenses-assign/SKILL.md +27 -0
  380. package/skills/industries-home-health-operating-hours-create/SKILL.md +40 -0
  381. package/skills/industries-home-health-scheduling-policy-create/SKILL.md +41 -0
  382. package/skills/industries-home-health-service-objective-create/SKILL.md +22 -0
  383. package/skills/industries-home-health-skills-create/SKILL.md +31 -0
  384. package/skills/industries-home-health-users-create/SKILL.md +29 -0
  385. package/skills/industries-icm-act3-toggles-configure/SKILL.md +198 -0
  386. package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +361 -0
  387. package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +550 -0
  388. package/skills/industries-integrated-care-management-configure/SKILL.md +168 -0
  389. package/skills/industries-object-enablement-configure/SKILL.md +86 -0
  390. package/skills/industries-tpm-system-processing-service-configure/SKILL.md +64 -0
  391. package/skills/insurance-brokerage-agency-billing-configure/SKILL.md +1 -3
  392. package/skills/integration-apex-settings-configure/SKILL.md +61 -0
  393. package/skills/marketing-e360-email-archiving-configure/SKILL.md +73 -0
  394. package/skills/marketing-message-test/SKILL.md +1 -3
  395. package/skills/nonprofit-fundraising-configure/SKILL.md +240 -0
  396. package/skills/nonprofit-fundraising-configure/references/gotchas.md +26 -0
  397. package/skills/nonprofit-fundraising-configure/references/mcp-invocation.md +678 -0
  398. package/skills/nonprofit-fundraising-configure/references/permission-targeting.md +35 -0
  399. package/skills/nonprofit-volunteer-management-model-get/SKILL.md +166 -0
  400. package/skills/nonprofit-volunteer-management-model-get/references/entities.md +315 -0
  401. package/skills/nonprofit-volunteer-management-model-get/references/relationships.md +175 -0
  402. package/skills/nonprofit-volunteer-management-model-get/references/themes.md +143 -0
  403. package/skills/nonprofit-volunteer-management-records-create/SKILL.md +121 -0
  404. package/skills/nonprofit-volunteer-management-records-create/references/field-guide.md +284 -0
  405. package/skills/nonprofit-volunteer-management-records-create/references/mcp-invocation.md +248 -0
  406. package/skills/nonprofit-volunteer-management-records-create/references/review-format.md +140 -0
  407. package/skills/nonprofit-volunteer-management-records-create/scripts/expand-series.py +632 -0
  408. package/skills/nonprofit-volunteer-management-records-create/scripts/render-review-table.py +419 -0
  409. package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_expand_series.py +690 -0
  410. package/skills/nonprofit-volunteer-management-records-create/scripts/tests/test_render_review_table.py +421 -0
  411. package/skills/nonprofit-volunteer-management-structure-generate/SKILL.md +119 -0
  412. package/skills/nonprofit-volunteer-management-structure-generate/references/configuration-decisions.md +159 -0
  413. package/skills/nonprofit-volunteer-management-structure-generate/references/discovery-interview.md +137 -0
  414. package/skills/nonprofit-volunteer-management-structure-generate/references/edge-cases.md +48 -0
  415. package/skills/nonprofit-volunteer-management-structure-generate/references/mcp-invocation.md +75 -0
  416. package/skills/nonprofit-volunteer-management-structure-generate/references/plan-output.md +141 -0
  417. package/skills/platform-custom-field-generate/SKILL.md +1 -0
  418. package/skills/platform-custom-field-generate/references/advanced-picklists.md +5 -5
  419. package/skills/platform-custom-metadata-type-generate/SKILL.md +3 -0
  420. package/skills/platform-custom-object-generate/SKILL.md +4 -0
  421. package/skills/platform-custom-permissions-configure/SKILL.md +687 -0
  422. package/skills/platform-custom-setting-generate/SKILL.md +3 -0
  423. package/skills/platform-datamask-run/SKILL.md +1 -5
  424. package/skills/platform-label-workbench-import-create/SKILL.md +67 -0
  425. package/skills/platform-permission-set-generate/SKILL.md +3 -0
  426. package/skills/platform-privacy-agent-settings-configure/SKILL.md +752 -0
  427. package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +1 -3
  428. package/skills/platform-sandbox-configure/SKILL.md +1 -3
  429. package/skills/platform-value-set-generate/SKILL.md +3 -0
  430. package/skills/sales-call-scoring-configure/SKILL.md +1 -5
  431. package/skills/service-agentforce-channel-configure/SKILL.md +1 -3
  432. package/skills/service-agentforce-human-escalation-configure/SKILL.md +1 -3
  433. package/skills/service-catalog-template-coordinate/SKILL.md +1 -3
  434. package/skills/service-concierge-portal-generate/SKILL.md +1 -3
  435. package/skills/service-email-to-case-configure/SKILL.md +1 -5
  436. package/skills/service-itsm-agentic-setup-agent-runtime-access-assign/SKILL.md +1 -3
  437. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +1 -3
  438. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +1 -3
  439. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +1 -3
  440. package/skills/service-itsm-agentic-setup-cmdb-access-assign/SKILL.md +1 -3
  441. package/skills/service-itsm-agentic-setup-cmdb-bundle-deploy/SKILL.md +1 -5
  442. package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +1 -3
  443. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +1 -3
  444. package/skills/service-itsm-agentic-setup-cmdb-discovery-configure/SKILL.md +1 -3
  445. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +1 -3
  446. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +1 -3
  447. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +1 -0
  448. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +1 -3
  449. package/skills/service-itsm-agentic-setup-uel-user-create/SKILL.md +1 -9
  450. package/skills/service-itsm-incident-mgmt-configure/SKILL.md +1 -5
  451. package/skills/service-itsm-incident-priority-configure/SKILL.md +1 -3
  452. package/skills/service-itsm-slack-itservice-configure/SKILL.md +1 -3
  453. package/skills/service-itsm-swarming-configure/SKILL.md +1 -3
  454. package/skills/service-itsm-teams-configure/SKILL.md +1 -3
  455. package/skills/service-itsm-teams-debug/SKILL.md +1 -3
  456. package/skills/service-itsm-teams-employee-agent-configure/SKILL.md +1 -3
  457. package/skills/service-itsm-teams-itdesk-configure/SKILL.md +1 -3
  458. package/skills/service-itsm-teams-itservice-configure/SKILL.md +1 -3
  459. package/skills/service-native-voice-recording-transcription-configure/SKILL.md +1 -3
  460. package/skills/service-omni-agent-users-create/SKILL.md +1 -3
  461. package/skills/service-omni-agent-work-sharing-configure/SKILL.md +1 -3
  462. package/skills/service-omni-attribute-routing-configure/SKILL.md +1 -3
  463. package/skills/service-omni-base-settings-configure/SKILL.md +1 -3
  464. package/skills/service-omni-channel-inventory-analyze/SKILL.md +1 -3
  465. package/skills/service-omni-channel-limits-analyze/SKILL.md +1 -3
  466. package/skills/service-omni-channel-setup-coordinate/SKILL.md +1 -3
  467. package/skills/service-omni-command-center-analyze/SKILL.md +1 -3
  468. package/skills/service-omni-command-center-configure/SKILL.md +1 -3
  469. package/skills/service-omni-permission-set-assign/SKILL.md +1 -3
  470. package/skills/service-omni-presence-status-deploy/SKILL.md +1 -3
  471. package/skills/service-omni-presence-user-config-deploy/SKILL.md +1 -3
  472. package/skills/service-omni-queue-deploy/SKILL.md +1 -3
  473. package/skills/service-omni-queue-members-assign/SKILL.md +1 -3
  474. package/skills/service-omni-queue-routing-config-deploy/SKILL.md +1 -3
  475. package/skills/service-omni-routing-flow-deploy/SKILL.md +1 -3
  476. package/skills/service-omni-service-channel-configure/SKILL.md +1 -3
  477. package/skills/service-omni-sidebar-configure/SKILL.md +1 -3
  478. package/skills/service-omni-skills-based-routing-configure/SKILL.md +1 -3
  479. package/skills/service-omni-supervisor-config-deploy/SKILL.md +1 -3
  480. package/skills/service-omni-supervisor-permset-assign/SKILL.md +1 -3
  481. package/skills/service-omni-supervisor-surface-deploy/SKILL.md +1 -3
  482. package/skills/service-omni-supervisor-users-create/SKILL.md +1 -3
  483. package/skills/service-omni-work-skill-routing-configure/SKILL.md +1 -3
  484. package/skills/tableau-next-asset-create/README.md +0 -65
@@ -0,0 +1,602 @@
1
+ ---
2
+ name: commerce-b2b-merchant-quote-configure
3
+ description: "Use this skill when users want to b2B Commerce merchant quote management — sales rep / sales ops / commerce admin working buyer-submitted RFQs. Trigger when users mention b2b, merchant, quote, management."
4
+ metadata:
5
+ version: "1.0"
6
+ accessCheck: "(BuyerAccount.hasEntitledProductsInQuotePricebook) || (ExperienceCloud.externalFileSharingEnabled) || (Org.noCPQOrStandardQuoteInUse) || (Quote.noActiveApprovalProcessLock) || (RecordLevelAccess.Quote) || (User.hasContentNoteCreateAccess) || (User.hasQuoteEditAccess) || (User.hasQuoteLineItemEditAccess)"
7
+ ---
8
+
9
+ # Managing B2b Merchant Quote Management
10
+
11
+ ## When to Use This Skill
12
+
13
+ B2B Commerce merchant quote management — sales rep / sales ops / commerce admin working buyer-submitted RFQs. Reviews pending quotes for a customer Account, edits line-item pricing (UnitPrice, Discount), adds line items from the buyer's entitled catalog (including free promotional items via Discount=100), adds buyer-visible notes, approves/rejects. Trigger phrases: "approve a quote for a customer", "review pending B2B quotes", "discount a quote", "add a free product to a customer quote", "process an RFQ", "sales rep quote approval", "merchant quote review", "quote negotiation", "reject a customer quote", "adjust quote pricing", "give a buyer a goodwill discount". Two entry modes: (1) know the account name → resolve-account-by-name first; (2) have the AccountId → skip resolve, start at list-pending-quotes-for-account. Notes take plain title + plain text; the skill handles HTML wrap + base64 on write. Always call get-valid-quote-statuses before update-quote-status (orgs customize the picklist heavily). Status semantics matter — see update-quote-status for the merchant-column vs buyer-column refuse-then-confirm guardrail.
14
+
15
+ ## Workflow
16
+
17
+ Flows (drop resolve-account-by-name if the merchant already has an AccountId; start at list-pending-quotes-for-account):
18
+ - Happy path (approve with adjustments):
19
+ resolve-account-by-name → list-pending-quotes-for-account → (pick)
20
+ → get-quote-detail → list-quote-line-items → update-quote-line-item
21
+ → verify-update-quote-line-item → add-buyer-visible-note →
22
+ verify-add-buyer-visible-note → get-valid-quote-statuses →
23
+ update-quote-status(newStatus="Approved") →
24
+ verify-update-quote-status.
25
+
26
+ - Goodwill / free-giveaway (add free promo, then approve):
27
+ resolve-account-by-name → list-pending-quotes-for-account →
28
+ get-quote-detail (capture Pricebook2Id + AccountId/QuoteAccountId)
29
+ → list-storefronts-for-buyer-account → list-entitlement-policies-
30
+ for-buyer → list-eligible-products-for-storefront (uses Quote's
31
+ Pricebook2Id, NOT WebStore's) → add-quote-line-item(Discount=100,
32
+ description="Promotional item") → verify-add-quote-line-item →
33
+ add-buyer-visible-note → get-valid-quote-statuses →
34
+ update-quote-status("Approved") → verify-update-quote-status.
35
+
36
+ - Rejection: resolve-account-by-name →
37
+ list-pending-quotes-for-account → get-quote-detail →
38
+ list-quote-line-items → add-buyer-visible-note(reason) →
39
+ get-valid-quote-statuses → update-quote-status("Rejected") →
40
+ verify-update-quote-status.
41
+
42
+ - Fast approval: resolve-account-by-name →
43
+ list-pending-quotes-for-account → get-quote-detail →
44
+ get-valid-quote-statuses → update-quote-status("Approved") →
45
+ verify-update-quote-status.
46
+
47
+ Session tips: always call get-valid-quote-statuses before update-quote-status (org-specific picklist). Buyer visibility on notes requires org-level Experience Cloud external file sharing — composite succeeds either way but the buyer won't see the note if it's off; confirm once per environment. update-quote-line-item is field-level merge (omit=unchanged, null=clear). list-all-quotes-for-account is for historical review, off the primary path.
48
+ # Pagination contract (uniform across all list steps — agent-first, NOT UI-scroll-first)
49
+ Defaults: `pageSize=20` on every list step (10 on resolve-account-by-name — LIKE search is noisy, top matches only). Never pass pageSize > 50 unless the merchant explicitly asks for exhaustive results.
50
+ Page-1-then-wait (CRITICAL): after page 1, the agent MUST STOP and hand back to the merchant even when the page is saturated (`len(records) == pageSize`). Do NOT auto-walk pages 2+ in the same turn. Correct behavior:
51
+
52
+ ### Phase 1: Fetch page 1 with the step's default pageSize
53
+
54
+ Fetch page 1 with the step's default pageSize.
55
+
56
+ ### Phase 2: Render the rows
57
+
58
+ Render the rows.
59
+
60
+ ### Phase 3: If len(records) == pageSize, tell the merchant
61
+
62
+ "showing first
63
+ {pageSize} — say 'more' / 'next' to load the next page, or
64
+ narrow with a filter (nameFilter, status) if you're looking
65
+ for something specific." Then WAIT.
66
+ Only fetch subsequent pages on explicit merchant reaction ("more", "next", "keep going", "show the rest"). Agentic clients (Slack, Teams, Claude Desktop) don't want a wall-of-text dump. One page per merchant turn.
67
+ Cursor keying (why fields differ across steps):
68
+ - Account, Quote, Product steps → cursor on `afterId` with
69
+ `Id < 'lastIdFromPreviousPage'` and `ORDER BY Id DESC`. Id is
70
+ unique; wall-clock cursors DROP rows on bulk-load orgs
71
+ (verified 2026-07-27: 4 Accounts sharing
72
+ CreatedDate=2026-07-01T10:02:10.000 were skipped by a
73
+ CreatedDate cursor).
74
+ - list-quote-line-items → cursor on `afterLineNumber` (LineNumber
75
+ is Salesforce-issued per-Quote monotonic + unique — the one
76
+ case where a non-Id cursor is provably safe). String-quoted:
77
+ `LineNumber > '00000005'`.
78
+ - list-all-storefronts, list-storefronts-for-buyer-account,
79
+ list-buyer-groups-for-storefront, list-notes-on-quote → NO
80
+ cursor; natural universe is bounded — expand pageSize instead.
81
+
82
+ Cursor SOQL shape (CRITICAL): the `q:` template on each cursor step is the PAGE-1 shape (no cursor clause). Page 2+ requires the agent to REBUILD the SOQL by injecting the cursor predicate before `ORDER BY`. Example (list-all-accessible-accounts):
83
+ Page 1: `SELECT ... WHERE IsBuyer = true ORDER BY Id DESC LIMIT 20`
84
+ Page 2: `SELECT ... WHERE IsBuyer = true AND Id <
85
+ 'lastIdFromPage1' ORDER BY Id DESC LIMIT 20`
86
+ Do NOT try `OR afterId = null` — SOQL rejects `null = null` and `'X' = null` (verified 2026-07-27). Conditional injection is the only working shape.
87
+ Stop-when-tail: if a step returns fewer rows than pageSize, that's the tail — do NOT invoke again with a cursor.
88
+ Hard ceilings (safety net, NOT the default; page-1-then-wait means reaching page 5 requires the merchant to have said "more" 5 times): Accounts 5 pages · Quotes 5 · Products 5 (push toward nameFilter before walking >250 SKUs) · Quote line items 10 (Cart→Quote max 2000) · Notes 3. At ceiling with a still-saturated page: warn the merchant + suggest a narrower filter.
89
+ # Auto-refresh after every mutation (no confirmation needed)
90
+ Every write step is paired with a verify-* step. The agent MUST invoke the paired verify AUTOMATICALLY after the write succeeds — do NOT ask permission. The verify is part of the write's contract. After verify, ALSO refresh + DISPLAY the affected Quote state:
91
+ - After update-quote-line-item or add-quote-line-item: run
92
+ list-quote-line-items (page 1) AND re-fetch get-quote-detail
93
+ for Subtotal / Discount / GrandTotal / LineItemCount. Show
94
+ before/after on both the mutated line and Quote rollups.
95
+ - After add-buyer-visible-note: run list-notes-on-quote so the
96
+ merchant sees the new note in the full list.
97
+ - After update-quote-status: run get-quote-detail for the
98
+ Status transition + LastModifiedDate; if Status moved to
99
+ Approved / Rejected / Presented, ALSO re-run
100
+ list-quote-line-items so the merchant captures the buyer-facing
101
+ snapshot.
102
+ Merchant should never have to ask "what does the quote look like now?" Skip auto-refresh only on explicit "just do the update, don't re-fetch".
103
+
104
+ ## Critical Constraints
105
+
106
+ **Preconditions:**
107
+
108
+ - Caller is an INTERNAL Salesforce user (User.UserType='Standard'). NOT for portal / community buyer users — they use the buyer-facing commerce-quotes-connect-api skill. Internal identity unlocks cross-Account visibility, QuoteLineItem edit access, and the ability to create ContentDocumentLink with Visibility=AllUsers. (check: `User.UserType == 'Standard'`)
109
+ - Read + Edit CRUD on Quote sObject with editable FLS on Status. Without it, update-quote-status returns HTTP 400 INSUFFICIENT_ACCESS / INVALID_FIELD_FOR_INSERT_UPDATE. (check: `User.hasQuoteEditAccess`)
110
+ - Read + Edit CRUD on QuoteLineItem with editable FLS on UnitPrice and Discount. Standard Sales User profiles have this; custom sales-ops profiles may not. Without it, update-quote-line-item returns HTTP 400 INSUFFICIENT_ACCESS. (check: `User.hasQuoteLineItemEditAccess`)
111
+ - Record-level access to the target Quote / QuoteLineItem via ownership, role hierarchy, sharing rules, or manual shares. In B2B Commerce orgs, buyer-created quotes are typically owned by the buyer's community user and shared with merchants via Account ownership or account-team rules. Without access, SOQL returns zero rows (silent) and GET returns 404 — org config issue, not fixable in the skill. (check: `RecordLevelAccess.Quote`)
112
+ - Create on ContentNote and ContentDocumentLink (standard users have this by default). Without it, add-buyer-visible-note composite returns HTTP 403 on the first sub-call. (check: `User.hasContentNoteCreateAccess`)
113
+ - Org does NOT have Salesforce CPQ installed, OR (if installed) the target Quotes are standard Quote records, not SBQQ__Quote__c. This skill targets standard Quote / QuoteLineItem; CPQ orgs working exclusively with SBQQ objects need a CPQ-specific variant (QLI edits may be blocked by CPQ triggers). (check: `Org.noCPQOrStandardQuoteInUse`)
114
+ - No active Approval Process locking Quote.Status. If the Quote is mid-approval, PATCH returns HTTP 400 UNABLE_TO_LOCK_ROW / ENTITY_IS_LOCKED — that flow needs a separate skill built around ProcessInstanceWorkitem + /process/approvals. (check: `Quote.noActiveApprovalProcessLock`)
115
+ - For add-quote-line-item ONLY — Quote.Pricebook2Id must be set, the buyer Account must be in a BuyerGroup with an active CommerceEntitlementPolicy + at least one CommerceEntitlementProduct, and at least one of those products must have an active PricebookEntry in the Quote's pricebook. Misalignment → empty eligible-products query or INVALID_CROSS_REFERENCE_KEY on POST. (check: `BuyerAccount.hasEntitledProductsInQuotePricebook`)
116
+ - For buyer-visible notes ONLY — Experience Cloud external file sharing must be enabled at the org level (Setup → Sharing Settings → File Sharing = "Set by Record"). If off, the note is created + linked successfully but NOT visible to buyers in Experience Cloud (silent — the 2xx response doesn't indicate buyer visibility). (check: `ExperienceCloud.externalFileSharingEnabled`)
117
+
118
+ ## Verification Checklist
119
+
120
+ After every write operation, confirm the effect by re-reading state:
121
+
122
+ - After `update-quote-line-item`: call `verify-update-quote-line-item`
123
+ - After `add-quote-line-item`: call `verify-add-quote-line-item`
124
+ - After `add-buyer-visible-note`: call `verify-add-buyer-visible-note`
125
+ - After `update-quote-status`: call `verify-update-quote-status`
126
+
127
+ ## Operations Reference
128
+
129
+ Operations grouped by purpose. Use these as the building blocks for the workflows above.
130
+
131
+ ### Summary
132
+
133
+ | Operation | Purpose | Status | Call | Depends on |
134
+ |-----------|---------|--------|------|------------|
135
+ | `resolve-account-by-name` | read | — | `queryAccounts` | — |
136
+ | `list-all-storefronts` | read | — | `queryAllStorefronts` | — |
137
+ | `list-buyer-groups-for-storefront` | read | — | `queryBuyerGroupsForStorefront` | `list-all-storefronts` |
138
+ | `list-accounts-for-buyer-groups` | read | — | `queryAccountsForBuyerGroups` | `list-buyer-groups-for-storefront` |
139
+ | `list-all-accessible-accounts` | read | — | `queryAllAccessibleAccounts` | — |
140
+ | `list-pending-quotes-for-account` | read | — | `queryQuotesPendingReview` | `resolve-account-by-name` |
141
+ | `list-all-quotes-for-account` | read | — | `queryAllQuotesForAccount` | `resolve-account-by-name` |
142
+ | `get-quote-detail` | read | — | `getQuoteDetail` | `list-pending-quotes-for-account` |
143
+ | `list-quote-line-items` | read | — | `queryQuoteLineItems` | `get-quote-detail` |
144
+ | `list-storefronts-for-buyer-account` | read | — | `queryStorefrontsForBuyerAccount` | `get-quote-detail` |
145
+ | `list-entitlement-policies-for-buyer` | read | — | `queryEntitlementPoliciesForBuyer` | `list-storefronts-for-buyer-account` |
146
+ | `list-eligible-products-for-storefront` | read | — | `queryEligibleProductsForStorefront` | `list-entitlement-policies-for-buyer` |
147
+ | `update-quote-line-item` | write | — | `updateQuoteLineItem` | `list-quote-line-items` |
148
+ | `verify-update-quote-line-item` | verify | — | `getQuoteLineItem` | `update-quote-line-item` |
149
+ | `add-quote-line-item` | write | — | `createQuoteLineItem` | `list-eligible-products-for-storefront` |
150
+ | `verify-add-quote-line-item` | verify | — | `getQuoteLineItem` | `add-quote-line-item` |
151
+ | `list-notes-on-quote` | read | — | `queryQuoteContentDocumentLinks` | `get-quote-detail` |
152
+ | `get-note-full` | read | — | `getContentNote` | `list-notes-on-quote` |
153
+ | `get-note-body` | read | — | `getContentNoteBody` | `get-note-full` |
154
+ | `add-buyer-visible-note` | write | — | `addBuyerVisibleQuoteNote` | `get-quote-detail` |
155
+ | `verify-add-buyer-visible-note` | verify | — | `queryQuoteContentDocumentLinks` | `add-buyer-visible-note` |
156
+ | `get-valid-quote-statuses` | validate | — | `getQuoteStatusPicklistValues` | — |
157
+ | `update-quote-status` | write | — | `updateQuoteStatus` | `get-quote-detail`, `get-valid-quote-statuses` |
158
+ | `verify-update-quote-status` | verify | — | `getQuoteDetail` | `update-quote-status` |
159
+
160
+ ### Dependency graph
161
+
162
+ ```mermaid
163
+ graph TD
164
+ resolve_account_by_name["resolve-account-by-name (read)"]
165
+ list_all_storefronts["list-all-storefronts (read)"]
166
+ list_buyer_groups_for_storefront["list-buyer-groups-for-storefront (read)"]
167
+ list_accounts_for_buyer_groups["list-accounts-for-buyer-groups (read)"]
168
+ list_all_accessible_accounts["list-all-accessible-accounts (read)"]
169
+ list_pending_quotes_for_account["list-pending-quotes-for-account (read)"]
170
+ list_all_quotes_for_account["list-all-quotes-for-account (read)"]
171
+ get_quote_detail["get-quote-detail (read)"]
172
+ list_quote_line_items["list-quote-line-items (read)"]
173
+ list_storefronts_for_buyer_account["list-storefronts-for-buyer-account (read)"]
174
+ list_entitlement_policies_for_buyer["list-entitlement-policies-for-buyer (read)"]
175
+ list_eligible_products_for_storefront["list-eligible-products-for-storefront (read)"]
176
+ update_quote_line_item["update-quote-line-item (write)"]
177
+ verify_update_quote_line_item["verify-update-quote-line-item (verify)"]
178
+ add_quote_line_item["add-quote-line-item (write)"]
179
+ verify_add_quote_line_item["verify-add-quote-line-item (verify)"]
180
+ list_notes_on_quote["list-notes-on-quote (read)"]
181
+ get_note_full["get-note-full (read)"]
182
+ get_note_body["get-note-body (read)"]
183
+ add_buyer_visible_note["add-buyer-visible-note (write)"]
184
+ verify_add_buyer_visible_note["verify-add-buyer-visible-note (verify)"]
185
+ get_valid_quote_statuses["get-valid-quote-statuses (validate)"]
186
+ update_quote_status["update-quote-status (write)"]
187
+ verify_update_quote_status["verify-update-quote-status (verify)"]
188
+ list_all_storefronts --> list_buyer_groups_for_storefront
189
+ list_buyer_groups_for_storefront --> list_accounts_for_buyer_groups
190
+ resolve_account_by_name --> list_pending_quotes_for_account
191
+ resolve_account_by_name --> list_all_quotes_for_account
192
+ list_pending_quotes_for_account --> get_quote_detail
193
+ get_quote_detail --> list_quote_line_items
194
+ get_quote_detail --> list_storefronts_for_buyer_account
195
+ list_storefronts_for_buyer_account --> list_entitlement_policies_for_buyer
196
+ list_entitlement_policies_for_buyer --> list_eligible_products_for_storefront
197
+ list_quote_line_items --> update_quote_line_item
198
+ update_quote_line_item --> verify_update_quote_line_item
199
+ list_eligible_products_for_storefront --> add_quote_line_item
200
+ add_quote_line_item --> verify_add_quote_line_item
201
+ get_quote_detail --> list_notes_on_quote
202
+ list_notes_on_quote --> get_note_full
203
+ get_note_full --> get_note_body
204
+ get_quote_detail --> add_buyer_visible_note
205
+ add_buyer_visible_note --> verify_add_buyer_visible_note
206
+ get_quote_detail --> update_quote_status
207
+ get_valid_quote_statuses --> update_quote_status
208
+ update_quote_status --> verify_update_quote_status
209
+ ```
210
+
211
+ ### Read operations
212
+
213
+ #### `resolve-account-by-name`
214
+
215
+ Resolve an AccountId from a merchant-supplied account name or partial name. Use SOQL LIKE to match on Account.Name; return the top matches so the merchant can disambiguate. If the merchant already has an AccountId, skip this step and pass the id directly to list-pending-quotes-for-account.
216
+
217
+
218
+ **Call:** `queryAccounts`
219
+
220
+ **Inputs:**
221
+
222
+ - `accountNameQuery` *(`String`)* — Merchant-supplied account name or fragment. Use SOQL LIKE semantics — %fragment% for substring match, or an exact name for exact match. Case-insensitive.
223
+
224
+ - `pageSize` *(`Integer`)* — Rows to return. Defaults to 10 (agent-first UX). Bump up to 50 only if the merchant explicitly asks for more matches. See the top-level "Pagination contract" section.
225
+
226
+ #### `list-all-storefronts`
227
+
228
+ List B2B Commerce storefronts (WebStore Type='B2B'). Entry point for browsing buyer accounts by storefront. Followed by list-buyer-groups-for-storefront then list-accounts-for-buyer-groups.
229
+
230
+
231
+ **Call:** `queryAllStorefronts`
232
+
233
+ **Inputs:**
234
+
235
+ - `includeAllStorefrontTypes` *(`Boolean`)* — Default false → filter WHERE Type='B2B' (B2C / D2C storefronts don't have merchant quote review). Pass true only when the merchant explicitly wants all storefronts on the org (rare, e.g. org-wide inventory review) — the agent drops the WHERE entirely (see agent_guidance).
236
+
237
+ - `pageSize` *(`Integer`)* — Rows to return. Defaults to 20 — the merchant is picking one storefront so seeing the full spread at once beats paginating. Bump to 50 only if the merchant explicitly asks. No cursor on this step — storefronts are org-bounded (≤100/org), so if the first page hits the ceiling, expand pageSize rather than paginating. See the top-level "Pagination contract".
238
+
239
+ #### `list-buyer-groups-for-storefront`
240
+
241
+ List BuyerGroups mapped to a storefront. Step 1 of the 2-hop "browse buyer accounts by storefront" flow (feeds list-accounts-for-buyer-groups). Split to stay under SOQL's 2-level semi-join limit.
242
+
243
+
244
+ **Call:** `queryBuyerGroupsForStorefront`
245
+
246
+ **Inputs:**
247
+
248
+ - `webStoreId` *(`String`)* — Id of the target WebStore, from list-all-storefronts or supplied directly by the merchant.
249
+
250
+ - **Source:** output of `list-all-storefronts`
251
+ - `pageSize` *(`Integer`)* — Rows to return. Defaults to 20 — buyer groups per storefront are typically <20 so the first page captures the full mapping in one call, letting the merchant pick without paginating. Expand to 50 only for the rare storefront with more buyer groups than that. No cursor — the natural universe is bounded per storefront. See top-level "Pagination contract".
252
+
253
+
254
+ **Depends on:** `list-all-storefronts`
255
+
256
+ #### `list-accounts-for-buyer-groups`
257
+
258
+ List the buyer Accounts that are members of a set of BuyerGroups, ordered by Account.Id DESC and paged via Id cursor. Step 2 of the 2-hop "browse buyer accounts by storefront" flow — takes BuyerGroupIds from list-buyer-groups-for-storefront and returns the reachable Accounts.
259
+
260
+
261
+ **Call:** `queryAccountsForBuyerGroups`
262
+
263
+ **Inputs:**
264
+
265
+ - `buyerGroupIds` *(`List<String>`)* — Array of BuyerGroupIds from list-buyer-groups-for-storefront.buyer_groups[*].BuyerGroupId. Rendered into a SOQL IN clause.
266
+
267
+ - **Source:** output of `list-buyer-groups-for-storefront`
268
+ - `pageSize` *(`Integer`)* — Rows to return. Default 20; bump to 50 on merchant request. See top-level "Pagination contract".
269
+
270
+ - `afterId` *(`String`)* — Cursor. Omit on page 1. On saturated pages, pass the LAST record's Id. See top-level "Pagination contract".
271
+
272
+
273
+ **Depends on:** `list-buyer-groups-for-storefront`
274
+
275
+ #### `list-all-accessible-accounts`
276
+
277
+ List every buyer Account visible to the merchant (across all storefronts), paged via Id cursor. Filtered on IsBuyer = true so partner / internal / non-commerce Accounts do not clutter the list. Use when the merchant does not know the account name or storefront and wants to browse.
278
+
279
+
280
+ **Call:** `queryAllAccessibleAccounts`
281
+
282
+ **Inputs:**
283
+
284
+ - `pageSize` *(`Integer`)* — Rows to return. Default 20; bump to 50 on merchant request. See top-level "Pagination contract".
285
+
286
+ - `afterId` *(`String`)* — Cursor. Omit on page 1. On saturated pages, pass the LAST record's Id. See top-level "Pagination contract".
287
+
288
+ #### `list-pending-quotes-for-account`
289
+
290
+ List all quotes for a specific Account that still need merchant review — i.e., Status is neither Approved nor Rejected. Returns the fields commonly needed to triage which quote to drill into.
291
+
292
+
293
+ **Call:** `queryQuotesPendingReview`
294
+
295
+ **Inputs:**
296
+
297
+ - `accountId` *(`String`)* — Id of the Account whose pending quotes are being listed. Comes from resolve-account-by-name.accounts[*].Id, or supplied directly by the merchant.
298
+
299
+ - **Source:** output of `resolve-account-by-name`
300
+ - `pageSize` *(`Integer`)* — Rows to return. Default 20; bump to 50 on merchant request. See top-level "Pagination contract".
301
+
302
+ - `afterId` *(`String`)* — Cursor. Omit on page 1. On saturated pages, pass the LAST record's Id. See top-level "Pagination contract".
303
+
304
+
305
+ **Depends on:** `resolve-account-by-name`
306
+
307
+ #### `list-all-quotes-for-account`
308
+
309
+ List all quotes for an Account regardless of Status — for when the merchant wants to see historical / already-decided quotes too. Same shape as list-pending-quotes-for-account but without the Status filter.
310
+
311
+
312
+ **Call:** `queryAllQuotesForAccount`
313
+
314
+ **Inputs:**
315
+
316
+ - `accountId` *(`String`)*
317
+ - `pageSize` *(`Integer`)* — Rows to return. Default 20; bump to 50 on merchant request. See top-level "Pagination contract".
318
+
319
+ - `afterId` *(`String`)* — Cursor. Omit on page 1. On saturated pages, pass the LAST record's Id. See top-level "Pagination contract".
320
+
321
+
322
+ **Depends on:** `resolve-account-by-name`
323
+
324
+ #### `get-quote-detail`
325
+
326
+ Retrieve full field detail for a single Quote by Id. Returns all accessible fields on the Quote sObject subject to FLS — including pricing rollups, addresses, contact, opportunity linkage, status, description, and any org-defined custom fields.
327
+
328
+
329
+ **Call:** `getQuoteDetail`
330
+
331
+ **Inputs:**
332
+
333
+ - `quoteId` *(`String`)* — Id of the target Quote. Comes from a prior list step's records[*].Id.
334
+
335
+
336
+ **Depends on:** `list-pending-quotes-for-account`
337
+
338
+ #### `list-quote-line-items`
339
+
340
+ List line items on a specific Quote with their pricing and product references, paged by LineNumber ASC with a small agent-first default. This is the surface the merchant reviews before deciding to adjust price / discount, add a note, or approve / reject.
341
+
342
+
343
+ **Call:** `queryQuoteLineItems`
344
+
345
+ **Inputs:**
346
+
347
+ - `quoteId` *(`String`)*
348
+ - `pageSize` *(`Integer`)* — Rows to return. Default 20; bump to 50 on merchant request (Cart→Quote conversions can reach 2000 lines). See top-level "Pagination contract".
349
+
350
+ - `afterLineNumber` *(`String`)* — Cursor. Omit on page 1. On saturated pages, pass the LAST record's LineNumber as a zero-padded string (e.g. "00000005"). See top-level "Pagination contract" for the string-quoting requirement.
351
+
352
+
353
+ **Depends on:** `get-quote-detail`
354
+
355
+ #### `list-storefronts-for-buyer-account`
356
+
357
+ List B2B storefronts (WebStore) a buyer Account is entitled to. Runs before list-eligible-products-for-storefront: an Account can belong to multiple BuyerGroups across WebStores — merchant picks one. Walks Account → BuyerGroupMember → BuyerGroup → WebStoreBuyerGroup → WebStore.
358
+
359
+
360
+ **Call:** `queryStorefrontsForBuyerAccount`
361
+
362
+ **Inputs:**
363
+
364
+ - `accountId` *(`String`)* — Id of the buyer Account (Quote.AccountId OR Quote.QuoteAccountId — buyer-created quotes populate the latter; use whichever is non-null).
365
+
366
+ - `pageSize` *(`Integer`)* — Rows to return. Default 20; bump to 50 on merchant request. No cursor — storefront entitlements per Account are naturally bounded.
367
+
368
+
369
+ **Depends on:** `get-quote-detail`
370
+
371
+ #### `list-entitlement-policies-for-buyer`
372
+
373
+ Resolve CommerceEntitlementPolicy Ids a buyer Account is entitled under (BuyerGroupMember → CommerceEntitlementBuyerGroup). Preliminary step for list-eligible-products-for-storefront — SOQL forbids nested semi-joins, so the full entitlement walk is split into TWO queries (this one produces PolicyIds; the next inlines them into a PricebookEntry query).
374
+
375
+
376
+ **Call:** `queryEntitlementPoliciesForBuyer`
377
+
378
+ **Inputs:**
379
+
380
+ - `accountId` *(`String`)* — Id of the buyer Account (from Quote.AccountId or Quote.QuoteAccountId). Passed to BuyerGroupMember.BuyerId.
381
+
382
+
383
+ **Depends on:** `list-storefronts-for-buyer-account`
384
+
385
+ #### `list-eligible-products-for-storefront`
386
+
387
+ List products a buyer Account is entitled to buy from a storefront, joined with the Quote's Pricebook so each carries a resolvable PricebookEntryId + UnitPrice. Used before add-quote-line-item so the merchant picks from a genuinely eligible catalog. Consumes PolicyIds from list-entitlement-policies-for-buyer (SOQL single-semi-join limit — the walk is split into two steps).
388
+
389
+
390
+ **Call:** `queryEligibleProductsForStorefront`
391
+
392
+ **Inputs:**
393
+
394
+ - `policyIds` *(`String`)* — Comma-separated, single-quoted PolicyId list from list-entitlement-policies-for-buyer.records[*].PolicyId (inlined into a SOQL IN(...) clause). Example: `'1Ce000000000001AAA','1Ce000000000002AAA'`. If the policies list is empty, DO NOT call this step; surface "buyer has no entitlements".
395
+
396
+ - **Source:** output of `list-entitlement-policies-for-buyer`
397
+ - `quotePricebookId` *(`String`)* — Pricebook2Id from Quote.Pricebook2Id (via get-quote-detail). NOT WebStore's default pricebook — the two can differ, and QuoteLineItem.PricebookEntryId must resolve against the Quote's pricebook. See agent_guidance for the trap.
398
+
399
+ - `nameFilter` *(`String`)* — Optional SOQL LIKE fragment on Product2.Name. Omit → all eligible products (paged). Pass "Alpine" → "%Alpine%". Recommended for catalogs >50 SKUs.
400
+
401
+ - `pageSize` *(`Integer`)* — Rows to return. Default 20; bump to 50 on merchant request. Prefer nameFilter over walking a large catalog. See top-level "Pagination contract".
402
+
403
+ - `afterId` *(`String`)* — Cursor. Omit on page 1. On saturated pages, pass the LAST PricebookEntry.Id. See top-level "Pagination contract".
404
+
405
+
406
+ **Depends on:** `list-entitlement-policies-for-buyer`
407
+
408
+ #### `list-notes-on-quote`
409
+
410
+ List notes attached to a Quote via ContentDocumentLink, filtered to notes only (ContentDocument.FileType='SNOTE'). Returns metadata + TextPreview snippet (~255 chars) — not the full body. Use to show note history without pulling full content per note.
411
+
412
+
413
+ **Call:** `queryQuoteContentDocumentLinks`
414
+
415
+ **Inputs:**
416
+
417
+ - `quoteId` *(`String`)*
418
+ - `pageSize` *(`Integer`)* — Rows to return. Defaults to 20 — a Quote typically has ≤20 notes so the first page usually captures the entire history in one call, avoiding the paginate/expand round-trip. Bump to 50 only for pathological Quotes. See top-level "Pagination contract".
419
+
420
+
421
+ **Depends on:** `get-quote-detail`
422
+
423
+ #### `get-note-full`
424
+
425
+ Metadata + TextPreview for a single ContentNote by Id. Content is a URL reference (relative /Content path), NOT the inline body — the real note body is base64 HTML served by a separate binary GET (see get-note-body). TextPreview is plain-text and usually enough for display.
426
+
427
+
428
+ **Call:** `getContentNote`
429
+
430
+ **Inputs:**
431
+
432
+ - `contentDocumentId` *(`String`)* — The ContentDocumentId returned by list-notes-on-quote — it is the Id of the underlying ContentNote (ContentNote inherits its Id from ContentDocument at storage time).
433
+
434
+
435
+ **Depends on:** `list-notes-on-quote`
436
+
437
+ #### `get-note-body`
438
+
439
+ Fetch the full HTML body of a ContentNote from its /Content binary endpoint. Only needed when TextPreview is insufficient (note longer than ~255 chars or full formatting required). Response is the raw HTML string, not a JSON envelope.
440
+
441
+
442
+ **Call:** `getContentNoteBody`
443
+
444
+ **Inputs:**
445
+
446
+ - `contentDocumentId` *(`String`)*
447
+
448
+ **Depends on:** `get-note-full`
449
+
450
+ ### Write operations
451
+
452
+ #### `update-quote-line-item`
453
+
454
+ Update UnitPrice, Discount, and/or Description on one QuoteLineItem. UnitPrice and Discount are independent (updating one doesn't clear the other). TotalPrice + Quote rollups (Subtotal, GrandTotal) recompute automatically. Discount is a percentage 0-100, NOT a fraction.
455
+
456
+
457
+ **Call:** `updateQuoteLineItem`
458
+
459
+ **Inputs:**
460
+
461
+ - `quoteLineItemId` *(`String`)*
462
+ - `unitPrice` *(`Number`)* — New per-unit price for the line, in the Quote's currency. Omit to leave UnitPrice unchanged. Cannot be negative.
463
+
464
+ - `discount` *(`Number`)* — Discount percentage 0-100 (NOT 0-1). Omit to leave Discount unchanged. Zero clears any existing discount.
465
+
466
+ - `description` *(`String`)* — Line-item description / notes visible to buyer in the storefront.
467
+
468
+
469
+ **Depends on:** `list-quote-line-items`
470
+
471
+ **Rollback:** {'description': 'Re-PATCH the line item with the ORIGINAL UnitPrice / Discount / Description values captured from list-quote-line-items before the write. sObject PATCH does not track history; the merchant (or agent) is responsible for capturing prior values if rollback is needed.\n', 'operation': 'updateQuoteLineItem', 'invocation': {'kind': 'rest', 'method': 'PATCH', 'path': '/sobjects/QuoteLineItem/{quoteLineItemId}', 'body': {'UnitPrice': '{originalUnitPrice}', 'Discount': '{originalDiscount}', 'Description': '{originalDescription}'}}}
472
+
473
+ #### `add-quote-line-item`
474
+
475
+ Add a NEW line item to a Quote — used for goodwill operations like a free promotional product (Discount=100). Product MUST come from list-eligible-products-for-storefront so entitlement is honored and PricebookEntry resolves against the Quote's pricebook. TotalPrice + Quote rollups recompute via triggers.
476
+
477
+
478
+ **Call:** `createQuoteLineItem`
479
+
480
+ **Inputs:**
481
+
482
+ - `quoteId` *(`String`)*
483
+ - `product2Id` *(`String`)* — Product2Id of the entitled product. Comes from list-eligible-products-for-storefront.eligible_products[*].Product2Id.
484
+
485
+ - **Source:** output of `list-eligible-products-for-storefront`
486
+ - `pricebookEntryId` *(`String`)* — PricebookEntry Id for the (product, pricebook) pair. Comes from list-eligible-products-for-storefront.eligible_products[*].Id. MUST resolve against the Quote's pricebook — using a PricebookEntry from a different pricebook fails with INVALID_CROSS_REFERENCE_KEY.
487
+
488
+ - **Source:** output of `list-eligible-products-for-storefront`
489
+ - `quantity` *(`Number`)* — Quantity of the product to add. Must be >= 1.
490
+
491
+ - `unitPrice` *(`Number`)* — Per-unit price to stamp on the line. REQUIRED on the sObject REST POST — Salesforce does NOT auto-default from PricebookEntry.UnitPrice on this endpoint (verified 2026-07-24: POST with PricebookEntryId only + Quantity but no UnitPrice returns HTTP 400 REQUIRED_FIELD_MISSING: [UnitPrice]). Fetch the pricebook's list price from list-eligible-products-for-storefront.eligible_products[*].UnitPrice and pass it through explicitly (or pass a merchant-negotiated value). Cannot be negative.
492
+
493
+ - **Source:** output of `list-eligible-products-for-storefront`
494
+ - `discount` *(`Number`)* — Discount percentage 0-100. Use 100 to give the item free (TotalPrice = 0). Omit for no discount.
495
+
496
+ - `description` *(`String`)* — Line-item description / notes visible to buyer in the storefront. Recommended to fill this in for goodwill / promotional lines so the buyer sees why the free item was added (e.g., "Promotional item — thank you for your business").
497
+
498
+
499
+ **Depends on:** `list-eligible-products-for-storefront`
500
+
501
+ **Rollback:** {'description': 'DELETE the QuoteLineItem. Quote-level rollups (Subtotal, GrandTotal) auto-recalculate down after the delete via standard triggers.\n', 'operation': 'deleteQuoteLineItem', 'invocation': {'kind': 'rest', 'method': 'DELETE', 'path': '/sobjects/QuoteLineItem/{quote_line_item_id}'}}
502
+
503
+ #### `add-buyer-visible-note`
504
+
505
+ Create a buyer-visible note on a Quote. Composite two-record op: (1) INSERT ContentNote (title + base64 HTML body); (2) INSERT ContentDocumentLink linking that note to the Quote with ShareType='V' + Visibility='AllUsers' (visible to external buyer users). Both commit atomically in one /composite/ call.
506
+
507
+
508
+ **Call:** `addBuyerVisibleQuoteNote`
509
+
510
+ **Inputs:**
511
+
512
+ - `quoteId` *(`String`)* — Id of the Quote to attach the note to.
513
+ - `title` *(`String`)* — Note title. Max 200 chars. Shown to buyer in note list.
514
+
515
+ - `bodyText` *(`String`)* — Plain-text body of the note. THE AGENT MUST base64-encode the HTML-wrapped body before dispatch — see agent_guidance below for the exact transformation. Max ~500 KB decoded.
516
+
517
+
518
+ **Depends on:** `get-quote-detail`
519
+
520
+ **Rollback:** {'description': 'Delete both records: DELETE the ContentDocumentLink first, then DELETE the ContentNote. If the ContentNote is deleted while links still exist, Salesforce cascades but leaves orphan entries in some audit tables — clean up the link first.\n', 'operation': 'deleteBuyerVisibleQuoteNote', 'invocation': {'kind': 'rest', 'method': 'POST', 'path': '/composite', 'body': {'compositeRequest': [{'method': 'DELETE', 'url': '/sobjects/ContentDocumentLink/{content_document_link_id}', 'referenceId': 'dropLink'}, {'method': 'DELETE', 'url': '/sobjects/ContentNote/{content_note_id}', 'referenceId': 'dropNote'}]}}}
521
+
522
+ #### `update-quote-status`
523
+
524
+ Approve or reject a quote by flipping Quote.Status to a specific picklist value. This is a direct field PATCH — no Approval Process is invoked. The merchant is responsible for picking a valid value (typically "Approved" or "Rejected") based on get-valid-quote-statuses output.
525
+
526
+
527
+ **Call:** `updateQuoteStatus`
528
+
529
+ **Inputs:**
530
+
531
+ - `quoteId` *(`String`)*
532
+ - `newStatus` *(`String`)* — Target Quote.Status value. Must be an active value from get-valid-quote-statuses. Typical values: "Approved", "Rejected". Some orgs use "Denied" or "Accepted" instead.
533
+
534
+ - **Source:** output of `get-valid-quote-statuses`
535
+
536
+ **Depends on:** `get-quote-detail`, `get-valid-quote-statuses`
537
+
538
+ **Rollback:** {'description': 'PATCH Quote.Status back to its prior value (captured from get-quote-detail before the update). Salesforce does not track prior-status automatically for direct PATCHes.\n', 'operation': 'updateQuoteStatus', 'invocation': {'kind': 'rest', 'method': 'PATCH', 'path': '/sobjects/Quote/{quoteId}', 'body': {'Status': '{priorStatus}'}}}
539
+
540
+ ### Verify operations
541
+
542
+ #### `verify-update-quote-line-item`
543
+
544
+ Re-read the QuoteLineItem after update to confirm UnitPrice / Discount / Description landed.
545
+
546
+
547
+ **Call:** `getQuoteLineItem`
548
+
549
+ **Inputs:**
550
+
551
+ - `quoteLineItemId` *(`String`)*
552
+
553
+ **Depends on:** `update-quote-line-item`
554
+
555
+ #### `verify-add-quote-line-item`
556
+
557
+ Re-read the newly created QuoteLineItem to confirm the Quantity, UnitPrice, Discount, and TotalPrice landed correctly — especially useful for the Discount=100 free-giveaway pattern (asserts TotalPrice == 0).
558
+
559
+
560
+ **Call:** `getQuoteLineItem`
561
+
562
+ **Inputs:**
563
+
564
+ - `quoteLineItemId` *(`String`)*
565
+
566
+ **Depends on:** `add-quote-line-item`
567
+
568
+ #### `verify-add-buyer-visible-note`
569
+
570
+ Re-list ContentDocumentLinks on the quote (filtered to FileType='SNOTE') and confirm the newly added note appears with the expected title and correct share/visibility settings.
571
+
572
+
573
+ **Call:** `queryQuoteContentDocumentLinks`
574
+
575
+ **Inputs:**
576
+
577
+ - `quoteId` *(`String`)*
578
+ - `expectedTitle` *(`String`)*
579
+
580
+ **Depends on:** `add-buyer-visible-note`
581
+
582
+ #### `verify-update-quote-status`
583
+
584
+ Re-read the Quote after status update to confirm the new Status persisted.
585
+
586
+
587
+ **Call:** `getQuoteDetail`
588
+
589
+ **Inputs:**
590
+
591
+ - `quoteId` *(`String`)*
592
+
593
+ **Depends on:** `update-quote-status`
594
+
595
+ ### Other operations
596
+
597
+ #### `get-valid-quote-statuses`
598
+
599
+ Fetch valid Quote.Status picklist values via the UI-API picklist-values endpoint (master record type 012000000000000AAA — the standard record type used when Quote has no custom types). Status is customizable; call before update-quote-status so the agent picks a value the org accepts. Returns just active values (~1KB) — NOT the full sObject describe (~800KB), which trips result-truncation gates.
600
+
601
+
602
+ **Call:** `getQuoteStatusPicklistValues`