@salesforce/b2c-dx-mcp 3.2.0 → 3.3.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 (313) hide show
  1. package/bin/run.js +5 -9
  2. package/content/guidance/b2c/b2c-hooks/references/ORDER-HOOK-LIFECYCLE.md +1 -1
  3. package/content/guidance/b2c/b2c-onboarding/SKILL.md +4 -4
  4. package/content/guidance/b2c/b2c-ordering/SKILL.md +2 -2
  5. package/content/guidance/b2c/b2c-querying-data/SKILL.md +2 -2
  6. package/content/guidance/b2c/b2c-scapi-admin/SKILL.md +3 -3
  7. package/content/guidance/b2c/b2c-scapi-admin/references/CLIENT-EXAMPLES.md +4 -4
  8. package/content/guidance/b2c/b2c-scapi-shopper/SKILL.md +6 -6
  9. package/content/guidance/b2c/b2c-scapi-shopper/references/CLIENT-EXAMPLES.md +8 -9
  10. package/content/guidance/b2c-cli/b2c-cip/SKILL.md +3 -3
  11. package/content/guidance/b2c-cli/b2c-cip/references/SALES_ANALYSIS.md +1 -1
  12. package/content/guidance/b2c-cli/b2c-config/SKILL.md +31 -21
  13. package/content/guidance/b2c-cli/b2c-content/SKILL.md +1 -1
  14. package/content/guidance/b2c-cli/b2c-debug/SKILL.md +1 -1
  15. package/content/guidance/b2c-cli/b2c-docs/SKILL.md +23 -2
  16. package/content/guidance/b2c-cli/b2c-ecdn/references/ADVANCED.md +1 -1
  17. package/content/guidance/b2c-cli/b2c-job/references/IMPORT.md +1 -1
  18. package/content/guidance/b2c-cli/b2c-metrics/SKILL.md +1 -1
  19. package/content/guidance/b2c-cli/b2c-mrt/SKILL.md +3 -3
  20. package/content/guidance/b2c-cli/b2c-scapi-custom/SKILL.md +1 -1
  21. package/content/guidance/b2c-cli/b2c-scapi-schemas/SKILL.md +1 -1
  22. package/content/guidance/b2c-cli/b2c-site-import-export/SKILL.md +1 -1
  23. package/content/guidance/b2c-cli/b2c-sites/SKILL.md +1 -1
  24. package/content/guidance/b2c-cli/b2c-slas/SKILL.md +1 -1
  25. package/content/guidance/b2c-ops/b2c-checkout-triage/SKILL.md +2 -2
  26. package/content/guidance/b2c-ops/b2c-job-health/SKILL.md +2 -2
  27. package/content/guidance/b2c-ops/b2c-order-failure-triage/SKILL.md +1 -1
  28. package/content/guidance/b2c-ops/b2c-order-failure-triage/references/order-evidence.md +2 -2
  29. package/content/guidance/b2c-ops/b2c-production-triage/SKILL.md +4 -4
  30. package/content/guidance/index.json +935 -258
  31. package/content/guidance/mcp/{cip → b2c-mcp-cip}/SKILL.md +10 -8
  32. package/content/guidance/mcp/{b2c-config → b2c-mcp-config}/SKILL.md +10 -9
  33. package/content/guidance/mcp/{debugger → b2c-mcp-debugger}/SKILL.md +9 -8
  34. package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/SKILL.md +81 -10
  35. package/content/guidance/mcp/{server → b2c-mcp-server}/SKILL.md +49 -25
  36. package/content/guidance/storefront-next/sfnext-accessibility/SKILL.md +103 -0
  37. package/content/guidance/storefront-next/sfnext-accessibility/references/checklist.md +64 -0
  38. package/content/guidance/storefront-next/sfnext-analytics-consent/SKILL.md +91 -0
  39. package/content/guidance/storefront-next/sfnext-analytics-consent/references/CUSTOM-ADAPTER.md +49 -0
  40. package/content/guidance/storefront-next/sfnext-authentication/SKILL.md +86 -79
  41. package/content/guidance/storefront-next/sfnext-authentication/references/COOKIES.md +39 -0
  42. package/content/guidance/storefront-next/sfnext-authentication/references/LOGIN-FLOWS.md +59 -0
  43. package/content/guidance/storefront-next/sfnext-commerce-features/SKILL.md +67 -0
  44. package/content/guidance/storefront-next/sfnext-commerce-features/references/FEATURE-PREREQUISITES.md +37 -0
  45. package/content/guidance/storefront-next/sfnext-components/SKILL.md +98 -136
  46. package/content/guidance/storefront-next/sfnext-components/references/COMPONENT-AUTHORING.md +118 -0
  47. package/content/guidance/storefront-next/sfnext-components/references/SHAPE-TOKENS.md +51 -0
  48. package/content/guidance/storefront-next/sfnext-components/references/STORYBOOK.md +54 -0
  49. package/content/guidance/storefront-next/sfnext-components/references/TOKEN-SYSTEM.md +53 -0
  50. package/content/guidance/storefront-next/sfnext-components/references/TROUBLESHOOTING.md +19 -0
  51. package/content/guidance/storefront-next/sfnext-configuration/SKILL.md +116 -113
  52. package/content/guidance/storefront-next/sfnext-configuration/references/ENV-VARIABLES.md +55 -0
  53. package/content/guidance/storefront-next/sfnext-configuration/references/MULTI-SITE-URLS.md +137 -0
  54. package/content/guidance/storefront-next/sfnext-data-fetching/SKILL.md +100 -150
  55. package/content/guidance/storefront-next/sfnext-data-fetching/references/ACTIONS.md +53 -0
  56. package/content/guidance/storefront-next/sfnext-data-fetching/references/API-CLIENTS.md +34 -0
  57. package/content/guidance/storefront-next/sfnext-data-fetching/references/LOADERS.md +73 -0
  58. package/content/guidance/storefront-next/sfnext-data-fetching/references/SCAPI-FETCHER.md +23 -77
  59. package/content/guidance/storefront-next/sfnext-deployment/SKILL.md +83 -97
  60. package/content/guidance/storefront-next/sfnext-deployment/references/MRT-DEPLOYMENT.md +37 -68
  61. package/content/guidance/storefront-next/sfnext-extensions/SKILL.md +73 -97
  62. package/content/guidance/storefront-next/sfnext-extensions/references/ACTION-HOOKS.md +57 -0
  63. package/content/guidance/storefront-next/sfnext-extensions/references/BASE-AUDIT.md +47 -44
  64. package/content/guidance/storefront-next/sfnext-extensions/references/CLI-AND-INSTALL.md +58 -0
  65. package/content/guidance/storefront-next/sfnext-extensions/references/EXTENSION-EXAMPLES.md +49 -86
  66. package/content/guidance/storefront-next/sfnext-hybrid-storefronts/SKILL.md +59 -114
  67. package/content/guidance/storefront-next/sfnext-hybrid-storefronts/references/HYBRID-PROXY-CONFIG.md +53 -90
  68. package/content/guidance/storefront-next/sfnext-i18n/SKILL.md +96 -131
  69. package/content/guidance/storefront-next/sfnext-i18n/references/locale-config.md +35 -0
  70. package/content/guidance/storefront-next/sfnext-overview/SKILL.md +101 -0
  71. package/content/guidance/storefront-next/sfnext-page-designer/SKILL.md +152 -131
  72. package/content/guidance/storefront-next/sfnext-page-designer/references/BUSINESS-MANAGER.md +46 -0
  73. package/content/guidance/storefront-next/sfnext-page-designer/references/COMPONENT-REGISTRY.md +86 -53
  74. package/content/guidance/storefront-next/sfnext-page-designer/references/DECORATOR-PATTERNS.md +119 -131
  75. package/content/guidance/storefront-next/sfnext-page-designer/references/REVIEW-CHECKLIST.md +83 -0
  76. package/content/guidance/storefront-next/sfnext-page-designer/references/TROUBLESHOOTING.md +35 -0
  77. package/content/guidance/storefront-next/sfnext-performance/SKILL.md +75 -105
  78. package/content/guidance/storefront-next/sfnext-performance/references/PERFORMANCE-REVIEW-CHECKLIST.md +85 -0
  79. package/content/guidance/storefront-next/sfnext-performance/references/SUSPENSE-AND-STREAMING.md +58 -0
  80. package/content/guidance/storefront-next/sfnext-project-setup/SKILL.md +103 -116
  81. package/content/guidance/storefront-next/sfnext-project-setup/references/PROJECT-STRUCTURE.md +61 -99
  82. package/content/guidance/storefront-next/sfnext-project-setup/references/SCRIPTS.md +47 -0
  83. package/content/guidance/storefront-next/sfnext-project-setup/references/SFNEXT-CLI.md +63 -0
  84. package/content/guidance/storefront-next/sfnext-quality-gates/SKILL.md +70 -0
  85. package/content/guidance/storefront-next/sfnext-quality-gates/references/lint-and-budgets.md +39 -0
  86. package/content/guidance/storefront-next/sfnext-revalidation/SKILL.md +121 -0
  87. package/content/guidance/storefront-next/sfnext-revalidation/references/POLICIES-AND-TAGS.md +55 -0
  88. package/content/guidance/storefront-next/sfnext-routing/SKILL.md +86 -143
  89. package/content/guidance/storefront-next/sfnext-routing/references/ROUTE-CONVENTIONS.md +51 -51
  90. package/content/guidance/storefront-next/sfnext-routing/references/URLS-AND-SEO-ROUTES.md +22 -0
  91. package/content/guidance/storefront-next/sfnext-scapi/SKILL.md +126 -0
  92. package/content/guidance/storefront-next/sfnext-scapi/references/WORKED-EXAMPLE.md +39 -0
  93. package/content/guidance/storefront-next/sfnext-security/SKILL.md +129 -0
  94. package/content/guidance/storefront-next/sfnext-security/references/COOKIE-DOMAIN.md +39 -0
  95. package/content/guidance/storefront-next/sfnext-security/references/TURNSTILE.md +43 -0
  96. package/content/guidance/storefront-next/sfnext-seo/SKILL.md +95 -0
  97. package/content/guidance/storefront-next/sfnext-seo/references/MULTI-DOMAIN-BASE-PATH.md +17 -0
  98. package/content/guidance/storefront-next/sfnext-seo/references/SEO-ROUTES.md +31 -0
  99. package/content/guidance/storefront-next/sfnext-state-management/SKILL.md +80 -89
  100. package/content/guidance/storefront-next/sfnext-state-management/references/PATTERNS.md +45 -0
  101. package/content/guidance/storefront-next/sfnext-testing/SKILL.md +105 -138
  102. package/content/guidance/storefront-next/sfnext-testing/references/E2E.md +38 -0
  103. package/content/guidance/storefront-next/sfnext-testing/references/STORYBOOK-PATTERNS.md +73 -94
  104. package/content/guidance/storefront-next/sfnext-testing/references/UNIT-AND-ROUTE-TESTS.md +60 -0
  105. package/content/guidance/storefront-next/sfnext-theming/SKILL.md +104 -0
  106. package/content/guidance/storefront-next/sfnext-theming/references/REBRAND-CHECKLIST.md +29 -0
  107. package/dist/commands/mcp.d.ts +8 -2
  108. package/dist/commands/mcp.js +54 -20
  109. package/dist/guidance.d.ts +4 -1
  110. package/dist/guidance.js +23 -5
  111. package/dist/registry.d.ts +2 -1
  112. package/dist/registry.js +3 -3
  113. package/dist/server.d.ts +10 -0
  114. package/dist/server.js +21 -0
  115. package/dist/skill-references.js +5 -5
  116. package/dist/tools/cartridges/index.js +1 -0
  117. package/dist/tools/cip/index.js +6 -3
  118. package/dist/tools/diagnostics/debug-capture-at-breakpoint.js +1 -1
  119. package/dist/tools/diagnostics/debug-set-breakpoints.js +1 -1
  120. package/dist/tools/diagnostics/debug-start-session.js +1 -1
  121. package/dist/tools/scapi/execution-registry.js +9 -9
  122. package/dist/tools/scapi/index.d.ts +4 -1
  123. package/dist/tools/scapi/index.js +4 -2
  124. package/dist/tools/scapi/scapi-code.d.ts +2 -2
  125. package/dist/tools/scapi/scapi-code.js +17 -61
  126. package/dist/utils/types.d.ts +6 -0
  127. package/node_modules/@salesforce/b2c-agent-plugins/CHANGELOG.md +20 -0
  128. package/node_modules/@salesforce/b2c-agent-plugins/README.md +5 -0
  129. package/node_modules/@salesforce/b2c-agent-plugins/b2c/.codex-plugin/plugin.json +1 -1
  130. package/node_modules/@salesforce/b2c-agent-plugins/b2c/plugin.json +1 -1
  131. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-hooks/references/ORDER-HOOK-LIFECYCLE.md +1 -1
  132. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-onboarding/SKILL.md +4 -4
  133. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-ordering/SKILL.md +2 -2
  134. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-querying-data/SKILL.md +2 -2
  135. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-admin/SKILL.md +3 -3
  136. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-admin/references/CLIENT-EXAMPLES.md +4 -4
  137. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-shopper/SKILL.md +6 -6
  138. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-shopper/references/CLIENT-EXAMPLES.md +8 -9
  139. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/.codex-plugin/plugin.json +1 -1
  140. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/plugin.json +1 -1
  141. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-cip/SKILL.md +3 -3
  142. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-cip/references/SALES_ANALYSIS.md +1 -1
  143. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-config/SKILL.md +31 -21
  144. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-content/SKILL.md +1 -1
  145. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-debug/SKILL.md +1 -1
  146. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-docs/SKILL.md +23 -2
  147. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-ecdn/references/ADVANCED.md +1 -1
  148. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-job/references/IMPORT.md +1 -1
  149. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-metrics/SKILL.md +1 -1
  150. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-mrt/SKILL.md +3 -3
  151. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-scapi-custom/SKILL.md +1 -1
  152. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-scapi-schemas/SKILL.md +1 -1
  153. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-site-import-export/SKILL.md +1 -1
  154. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-sites/SKILL.md +1 -1
  155. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-slas/SKILL.md +1 -1
  156. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/.codex-plugin/plugin.json +1 -1
  157. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/plugin.json +1 -1
  158. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-checkout-triage/SKILL.md +2 -2
  159. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-job-health/SKILL.md +2 -2
  160. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-order-failure-triage/SKILL.md +1 -1
  161. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-order-failure-triage/references/order-evidence.md +2 -2
  162. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-production-triage/SKILL.md +4 -4
  163. package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/README.md +4 -4
  164. package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/skills/figma-to-sfnext-pagedesigner/SKILL.md +76 -73
  165. package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/skills/figma-to-sfnext-pagedesigner/evals/trigger-evals.json +12 -10
  166. package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/skills/figma-to-sfnext-pagedesigner/references/PAGE-DESIGNER-SFN.md +49 -74
  167. package/node_modules/@salesforce/b2c-agent-plugins/package.json +1 -1
  168. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/.codex-plugin/plugin.json +9 -6
  169. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/README.md +43 -22
  170. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/plugin.json +9 -6
  171. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-accessibility/SKILL.md +103 -0
  172. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-accessibility/evals/trigger-evals.json +5 -0
  173. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-accessibility/references/checklist.md +64 -0
  174. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-analytics-consent/SKILL.md +91 -0
  175. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-analytics-consent/evals/trigger-evals.json +5 -0
  176. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-analytics-consent/references/CUSTOM-ADAPTER.md +49 -0
  177. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/SKILL.md +86 -79
  178. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/evals/trigger-evals.json +5 -0
  179. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/references/COOKIES.md +39 -0
  180. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/references/LOGIN-FLOWS.md +59 -0
  181. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-commerce-features/SKILL.md +67 -0
  182. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-commerce-features/evals/trigger-evals.json +5 -0
  183. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-commerce-features/references/FEATURE-PREREQUISITES.md +37 -0
  184. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/SKILL.md +98 -136
  185. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/evals/trigger-evals.json +5 -0
  186. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/COMPONENT-AUTHORING.md +118 -0
  187. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/SHAPE-TOKENS.md +51 -0
  188. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/STORYBOOK.md +54 -0
  189. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/TOKEN-SYSTEM.md +53 -0
  190. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/TROUBLESHOOTING.md +19 -0
  191. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/SKILL.md +116 -113
  192. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/evals/trigger-evals.json +5 -0
  193. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/references/ENV-VARIABLES.md +55 -0
  194. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/references/MULTI-SITE-URLS.md +137 -0
  195. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/SKILL.md +100 -150
  196. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/evals/trigger-evals.json +5 -0
  197. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/ACTIONS.md +53 -0
  198. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/API-CLIENTS.md +34 -0
  199. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/LOADERS.md +73 -0
  200. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/SCAPI-FETCHER.md +23 -77
  201. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-deployment/SKILL.md +83 -97
  202. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-deployment/evals/trigger-evals.json +5 -0
  203. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-deployment/references/MRT-DEPLOYMENT.md +37 -68
  204. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/SKILL.md +73 -97
  205. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/evals/trigger-evals.json +5 -0
  206. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/ACTION-HOOKS.md +57 -0
  207. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/BASE-AUDIT.md +47 -44
  208. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/CLI-AND-INSTALL.md +58 -0
  209. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/EXTENSION-EXAMPLES.md +49 -86
  210. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-hybrid-storefronts/SKILL.md +59 -114
  211. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-hybrid-storefronts/evals/trigger-evals.json +5 -0
  212. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-hybrid-storefronts/references/HYBRID-PROXY-CONFIG.md +53 -90
  213. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-i18n/SKILL.md +96 -131
  214. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-i18n/evals/trigger-evals.json +5 -0
  215. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-i18n/references/locale-config.md +35 -0
  216. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-overview/SKILL.md +101 -0
  217. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-overview/evals/trigger-evals.json +5 -0
  218. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/SKILL.md +152 -131
  219. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/evals/trigger-evals.json +5 -0
  220. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/BUSINESS-MANAGER.md +46 -0
  221. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/COMPONENT-REGISTRY.md +86 -53
  222. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/DECORATOR-PATTERNS.md +119 -131
  223. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/REVIEW-CHECKLIST.md +83 -0
  224. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/TROUBLESHOOTING.md +35 -0
  225. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/SKILL.md +75 -105
  226. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/evals/trigger-evals.json +5 -0
  227. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/references/PERFORMANCE-REVIEW-CHECKLIST.md +85 -0
  228. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/references/SUSPENSE-AND-STREAMING.md +58 -0
  229. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/SKILL.md +103 -116
  230. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/evals/trigger-evals.json +5 -0
  231. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/PROJECT-STRUCTURE.md +61 -99
  232. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/SCRIPTS.md +47 -0
  233. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/SFNEXT-CLI.md +63 -0
  234. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-quality-gates/SKILL.md +70 -0
  235. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-quality-gates/evals/trigger-evals.json +5 -0
  236. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-quality-gates/references/lint-and-budgets.md +39 -0
  237. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-revalidation/SKILL.md +121 -0
  238. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-revalidation/evals/trigger-evals.json +5 -0
  239. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-revalidation/references/POLICIES-AND-TAGS.md +55 -0
  240. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/SKILL.md +86 -143
  241. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/evals/trigger-evals.json +5 -0
  242. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/references/ROUTE-CONVENTIONS.md +51 -51
  243. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/references/URLS-AND-SEO-ROUTES.md +22 -0
  244. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi/SKILL.md +126 -0
  245. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi/evals/trigger-evals.json +5 -0
  246. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi/references/WORKED-EXAMPLE.md +39 -0
  247. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/SKILL.md +129 -0
  248. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/evals/trigger-evals.json +5 -0
  249. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/references/COOKIE-DOMAIN.md +39 -0
  250. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/references/TURNSTILE.md +43 -0
  251. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/SKILL.md +95 -0
  252. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/evals/trigger-evals.json +5 -0
  253. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/references/MULTI-DOMAIN-BASE-PATH.md +17 -0
  254. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/references/SEO-ROUTES.md +31 -0
  255. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-state-management/SKILL.md +80 -89
  256. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-state-management/evals/trigger-evals.json +5 -0
  257. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-state-management/references/PATTERNS.md +45 -0
  258. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/SKILL.md +105 -138
  259. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/evals/trigger-evals.json +5 -0
  260. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/references/E2E.md +38 -0
  261. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/references/STORYBOOK-PATTERNS.md +73 -94
  262. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/references/UNIT-AND-ROUTE-TESTS.md +60 -0
  263. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-theming/SKILL.md +104 -0
  264. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-theming/evals/trigger-evals.json +5 -0
  265. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-theming/references/REBRAND-CHECKLIST.md +29 -0
  266. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next-figma/skills/sfnext-create-figma-kit/SKILL.md +3 -3
  267. package/oclif.manifest.json +21 -4
  268. package/package.json +3 -3
  269. package/content/guidance/storefront-next/sfnext-create-component/SKILL.md +0 -195
  270. package/content/guidance/storefront-next/sfnext-create-component/references/COMPONENT-AUTHORING.md +0 -206
  271. package/content/guidance/storefront-next/sfnext-create-component/references/PROJECT-STRUCTURE.md +0 -43
  272. package/content/guidance/storefront-next/sfnext-create-component/references/TOKEN-SYSTEM.md +0 -130
  273. package/content/guidance/storefront-next/sfnext-create-component/references/TROUBLESHOOTING.md +0 -34
  274. package/content/guidance/storefront-next/sfnext-create-vertical/SKILL.md +0 -135
  275. package/content/guidance/storefront-next/sfnext-create-vertical/references/COMPONENT-AUTHORING.md +0 -206
  276. package/content/guidance/storefront-next/sfnext-create-vertical/references/PROJECT-STRUCTURE.md +0 -43
  277. package/content/guidance/storefront-next/sfnext-create-vertical/references/TOKEN-SYSTEM.md +0 -130
  278. package/content/guidance/storefront-next/sfnext-create-vertical/references/TROUBLESHOOTING.md +0 -34
  279. package/content/guidance/storefront-next/sfnext-custom-apis/SKILL.md +0 -221
  280. package/content/guidance/storefront-next/sfnext-custom-apis/references/WORKFLOW-EXAMPLES.md +0 -294
  281. package/content/guidance/storefront-next/sfnext-data-fetching/references/LOADER-PATTERNS.md +0 -102
  282. package/content/guidance/storefront-next/sfnext-project-setup/references/ENV-VARIABLES.md +0 -82
  283. package/content/guidance/storefront-next/sfnext-scapi-management/SKILL.md +0 -203
  284. package/content/guidance/storefront-next/sfnext-scapi-management/references/CLI-COMMANDS.md +0 -122
  285. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/SKILL.md +0 -195
  286. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/evals/trigger-evals.json +0 -12
  287. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/COMPONENT-AUTHORING.md +0 -206
  288. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/PROJECT-STRUCTURE.md +0 -43
  289. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/TOKEN-SYSTEM.md +0 -130
  290. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/TROUBLESHOOTING.md +0 -34
  291. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/SKILL.md +0 -135
  292. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/evals/trigger-evals.json +0 -12
  293. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/COMPONENT-AUTHORING.md +0 -206
  294. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/PROJECT-STRUCTURE.md +0 -43
  295. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/TOKEN-SYSTEM.md +0 -130
  296. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/TROUBLESHOOTING.md +0 -34
  297. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-custom-apis/SKILL.md +0 -221
  298. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-custom-apis/evals/trigger-evals.json +0 -12
  299. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-custom-apis/references/WORKFLOW-EXAMPLES.md +0 -294
  300. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/LOADER-PATTERNS.md +0 -102
  301. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/ENV-VARIABLES.md +0 -82
  302. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi-management/SKILL.md +0 -203
  303. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi-management/evals/trigger-evals.json +0 -12
  304. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi-management/references/CLI-COMMANDS.md +0 -122
  305. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/custom-apis.md +0 -0
  306. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/custom-properties.md +0 -0
  307. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/jobs.md +0 -0
  308. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/products.md +0 -0
  309. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/promotions.md +0 -0
  310. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/saving.md +0 -0
  311. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/snippets.md +0 -0
  312. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/tokens.md +0 -0
  313. /package/content/guidance/mcp/{server → b2c-mcp-server}/references/files.md +0 -0
@@ -0,0 +1,104 @@
1
+ ---
2
+ name: sfnext-theming
3
+ description: >-
4
+ Re-brand and re-skin a Storefront Next storefront: change the color palette, corner radius and shadows (shape tokens), header and footer colors, typography and web fonts, logo, favicon, hero scrims, and brand copy, with WCAG contrast checks. Use when asked to rebrand or restyle the storefront, change the primary color, swap the font, make the header dark, make cards rounded or flat, replace the logo, edit src/theme, core.css, header.css, brand.css, tailwind.css, base.css, or src/lib/fonts.ts, or verify a theme change in the Design System Storybook stories. Do not use for building or styling an individual component (use `storefront-next:sfnext-components`), Figma kit sync (use `storefront-next-figma:sfnext-create-figma-kit`), or site configuration (use `storefront-next:sfnext-configuration`).
5
+ ---
6
+
7
+ # Theming a Storefront Next Storefront
8
+
9
+ Your storefront has exactly one theme, in `src/theme/`, and it is yours to edit. Rebranding is mostly value changes in a few CSS files; components pick the new look up through token classes. Choose a starting look with `sfnext create-storefront --vertical <id>` (a starter theme) and then customize it as below.
10
+
11
+ ## Where things live
12
+
13
+ | Concern | File |
14
+ |---|---|
15
+ | Entry point and Tailwind `@source` scoping | `src/theme/index.css` (imports `shared.css`, which sets import order) |
16
+ | Palette: background, foreground, primary, secondary, accent, muted, border, ring, destructive/success/warning/info | `src/theme/tokens/core.css` |
17
+ | Shape: `--ui-radius`, `--ui-shadow`, `--ui-border-width` | `src/theme/tokens/core.css` |
18
+ | Header, menu, footer, newsletter band, `--header-logo-filter` | `src/theme/tokens/header.css` |
19
+ | Status and feedback colors | `src/theme/tokens/status.css` |
20
+ | Swatches, sidebar, agentic UI, payment and cart extras, focus helpers | `tokens/swatch.css`, `sidebar.css`, `agentic.css`, `components.css`, `custom.css` |
21
+ | `--brand-*` color primitives and hero scrims (`--hero-overlay-*`, `--hero-scrim`) | `src/theme/tokens/brand.css` |
22
+ | Font stacks `--font-sans/-serif/-mono`; token-to-utility bridge | `src/theme/tailwind.css` (`@theme inline`) |
23
+ | `@font-face`, base layer, `.section-container`, section-scoped shape rules | `src/theme/base.css` |
24
+ | Component-level CSS (navigation, cart sheet, toasts, store locator) | `src/theme/overrides/*.css` |
25
+ | Font binding and preload | `public/fonts/*.woff2`, `src/lib/fonts.ts` (used by `src/root.tsx`) |
26
+ | Logo, favicon, hero and payment images | `public/images/`, `public/favicon.ico` |
27
+ | Site name and brand strings | `src/locales/<locale>/translations.json` (`common.defaultSiteName`) |
28
+
29
+ Palette values are not all derived from `brand.css`: `core.css` sets `--primary` and friends directly, so change them there. Token-to-class wiring and the full token file list are covered in `storefront-next:sfnext-components` (token system reference).
30
+
31
+ ## Workflow
32
+
33
+ ### 1. Read the current theme
34
+
35
+ Open `src/theme/index.css`, `tokens/core.css`, `tokens/header.css`, and `tailwind.css` before editing. Keep variable names; change values.
36
+
37
+ ### 2. Palette
38
+
39
+ Edit `:root` in `tokens/core.css`: `--primary`/`--primary-foreground`, `--background`/`--foreground`, `--secondary`, `--accent`, `--muted`, borders, `--ring`. Comments in the file record WCAG contrast ratios for the current values; recompute for yours. Minimums: 4.5:1 for text (`--primary` on `--primary-foreground`, `--foreground` on `--background`, each status color on its `-foreground`), 3:1 for borders and focus rings against the surface.
40
+
41
+ Update `tokens/status.css` if semantic colors clash with the new palette, and `tokens/swatch.css`, `tokens/components.css` where defaults look off.
42
+
43
+ ### 3. Header, footer, and newsletter chrome
44
+
45
+ `tokens/header.css` is deliberately decoupled from `--primary`, so changing the primary color does not recolor the header. Set `--header-background`/`--header-foreground`, menu hover/active colors, and `--footer-*` yourself. The logo is an image: for a dark header with a dark logo, set `--header-logo-filter` (for example `brightness(0) invert(1)` turns a black logo white; `none` leaves it alone). `--newsletter-background` defaults to `var(--primary)`.
46
+
47
+ ### 4. Shape
48
+
49
+ Set `--ui-radius`, `--ui-shadow`, `--ui-border-width` in `core.css` to re-skin every shadcn primitive at once. Flat and square: `0`, `none`, `0`. Soft and raised: `var(--radius-xl)`, a light shadow, `0`. Do not edit primitives or add `rounded-*`/`shadow-*` classes, and never write `--radius-ui` / `--shadow-ui` (compile-time bridges, silent no-op). Scoped overrides, section rules, and the Card border exception are covered in `storefront-next:sfnext-components` (shape tokens reference). If your default border width is 0, the section rules at the bottom of `base.css` re-enable 1px Card borders on account, auth, and checkout pages; adjust those to taste.
50
+
51
+ ### 5. Typography
52
+
53
+ Four touch points, all must agree:
54
+
55
+ 1. Put the variable `.woff2` in `public/fonts/`.
56
+ 2. `src/lib/fonts.ts`: `import font from '/fonts/<file>.woff2'; export const primaryFont = font;` (`root.tsx` preloads it).
57
+ 3. `@font-face` in `src/theme/base.css` (same URL, weight range, `font-display: swap`).
58
+ 4. `--font-sans` / `--font-serif` / `--font-mono` in `src/theme/tailwind.css`, with a fallback stack of similar metrics.
59
+
60
+ Self-host fonts (WOFF2, preloaded, no third-party CDN). Remove the old font file if unused.
61
+
62
+ ### 6. Assets and copy
63
+
64
+ - Logo: replace `public/images/logo.svg` (the `Logo` component in `src/components/logo` renders it; you can replace that component for an inline-SVG logo).
65
+ - Favicon: `public/favicon.ico`.
66
+ - Hero and promo images: `public/images/` (and the Page Designer content that references them).
67
+ - Brand name: `common.defaultSiteName` in each `src/locales/<locale>/translations.json` you ship (used in page titles).
68
+ - Hero text scrims: `--brand-black`/`--brand-white` in `brand.css` feed `--hero-overlay-dark/-light` and `--hero-scrim`; update them with the brand so hero text stays legible.
69
+
70
+ ### 7. Dark mode
71
+
72
+ The shipped theme has one palette and no `.dark` token block. Do not promise dark mode; it would be new work (a `.dark` scope for every token file).
73
+
74
+ ### 8. Verify
75
+
76
+ ```bash
77
+ pnpm dev # look at home, PLP, PDP, cart, checkout, account
78
+ pnpm storybook # Design System/Theme/Colors, Typography, Radius, Shadows
79
+ pnpm lint # color-linter flags hard-coded colors
80
+ pnpm typecheck
81
+ pnpm storybook:test --type=snapshot # add --update only after reviewing intended changes
82
+ pnpm storybook:test --type=a11y # contrast and ARIA via axe-core
83
+ ```
84
+
85
+ The `Design System/Theme/*` stories (`src/design-system/stories/`) render the live tokens and are the quickest visual check.
86
+
87
+ ## Guardrails
88
+
89
+ - Change values in token files; do not sprinkle hex codes or `bg-[#...]` in components.
90
+ - Need a new token? Define it in a `tokens/*.css` file and bridge it in `@theme inline` in `tailwind.css` (see TOKEN-SYSTEM).
91
+ - Component-level CSS goes in `src/theme/overrides/*.css` (import it from `shared.css`) or `base.css`; prefer `[data-slot="..."]` selectors over utility-class selectors.
92
+
93
+ ## Design handoff
94
+
95
+ If your designers work in Figma, keep the Figma variables and code tokens aligned with `storefront-next-figma:sfnext-create-figma-kit` (requires the Figma MCP server). Change the tokens in code first, then sync the kit.
96
+
97
+ ## Related Skills
98
+
99
+ - `storefront-next:sfnext-components` - Build and style components with token classes and shape tokens
100
+ - `storefront-next:sfnext-accessibility` - Contrast, focus, and accessibility scans
101
+ - `storefront-next:sfnext-i18n` - Locale files that hold brand copy
102
+ - `storefront-next:sfnext-performance` - Font and image loading guidance
103
+ - `storefront-next:sfnext-page-designer` - Content and hero components authored in Page Designer
104
+ - `storefront-next-figma:sfnext-create-figma-kit` - Sync the Figma design kit with your tokens
@@ -0,0 +1,29 @@
1
+ # Rebrand Checklist
2
+
3
+ Work top to bottom; each item names the file to touch.
4
+
5
+ - [ ] `src/theme/tokens/core.css`: `--primary`, `--primary-foreground`, `--background`, `--foreground`, `--secondary`, `--accent`, `--muted`, `--border`, `--input`, `--ring`
6
+ - [ ] `src/theme/tokens/core.css`: contrast re-checked (text 4.5:1, borders and focus rings 3:1); update the ratio comments
7
+ - [ ] `src/theme/tokens/core.css`: `--ui-radius`, `--ui-shadow`, `--ui-border-width`
8
+ - [ ] `src/theme/base.css`: section-scoped Card border rules still match the chosen border width
9
+ - [ ] `src/theme/tokens/header.css`: header, menu, footer, newsletter colors; `--header-logo-filter`
10
+ - [ ] `src/theme/tokens/status.css`: status colors still readable against the new surfaces
11
+ - [ ] `src/theme/tokens/brand.css`: `--brand-*` primitives and hero scrims
12
+ - [ ] `src/theme/tokens/swatch.css`, `components.css`: swatch and badge defaults
13
+ - [ ] Font: `public/fonts/`, `src/lib/fonts.ts`, `@font-face` in `src/theme/base.css`, `--font-*` in `src/theme/tailwind.css`
14
+ - [ ] `public/images/logo.svg`, `public/favicon.ico`, hero images
15
+ - [ ] `common.defaultSiteName` in `src/locales/*/translations.json`
16
+ - [ ] Page Designer content referencing old imagery or colors
17
+ - [ ] `pnpm lint`, `pnpm typecheck`, `pnpm storybook:test --type=snapshot`, `--type=a11y`
18
+ - [ ] Visual pass: home, PLP, PDP, cart, checkout, account, error pages
19
+
20
+ ## Common mistakes
21
+
22
+ | Mistake | Result |
23
+ |---|---|
24
+ | Editing only `brand.css` | Little changes; the palette is in `core.css` |
25
+ | Writing `--radius-ui` or `--shadow-ui` | Silent no-op; use `--ui-radius` / `--ui-shadow` |
26
+ | Changing the font file but not `base.css` `@font-face` | Old font still loads or fallback shows |
27
+ | Forgetting `--header-logo-filter` after a header color change | Logo unreadable |
28
+ | Hard-coding hex in components | `pnpm lint` fails (`custom/color-linter`) and the theme no longer controls it |
29
+ | Changing `--primary` and expecting the header to follow | Header tokens are independent; edit `header.css` |
@@ -24,6 +24,7 @@ export default class McpServerCommand extends BaseCommand<typeof McpServerComman
24
24
  toolsets: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
25
  tools: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
26
  'docs-topics': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ 'scapi-schemas': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
28
  server: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
28
29
  'webdav-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
29
30
  'code-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
@@ -53,6 +54,7 @@ export default class McpServerCommand extends BaseCommand<typeof McpServerComman
53
54
  lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
54
55
  config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
55
56
  instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
57
+ 'dotenv-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
56
58
  'project-directory': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
57
59
  'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
58
60
  'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
@@ -87,8 +89,10 @@ export default class McpServerCommand extends BaseCommand<typeof McpServerComman
87
89
  * 1. Per-call configPath
88
90
  * 2. Startup --config / SFCC_CONFIG
89
91
  * 3. SFCC_CONFIG from the selected project's .env
90
- * 4. dw.json in the selected project directory
91
- * 5. Shared default dw.json from the tooling settings
92
+ * 4. dw.json in the selected project directory, plus the shared default
93
+ * dw.json from the tooling settings
94
+ *
95
+ * An explicit path (1-3) is used on its own; an empty one selects no dw.json.
92
96
  *
93
97
  * Values are then merged through the normal CLI resolver, including
94
98
  * environment, plugin, dw.json, ~/.mobify, and package.json sources.
@@ -131,6 +135,8 @@ export default class McpServerCommand extends BaseCommand<typeof McpServerComman
131
135
  * These can be exposed to Services if needed for features like telemetry or caching.
132
136
  */
133
137
  run(): Promise<void>;
138
+ /** Load --scapi-schemas once at startup; relative paths resolve from the project directory. */
139
+ private loadLocalScapiSchemas;
134
140
  /** Parse a project's .env without mutating the long-lived MCP process environment. */
135
141
  private loadProjectEnvironment;
136
142
  }
@@ -135,6 +135,7 @@ import { Flags } from '@oclif/core';
135
135
  import { BaseCommand, MrtCommand, InstanceCommand, loadConfig, extractInstanceFlags, extractMrtFlags, } from '@salesforce/b2c-tooling-sdk/cli';
136
136
  import { serveStdio } from '@modelcontextprotocol/server/stdio';
137
137
  import { EnvSource, readProjectEnvironment } from '@salesforce/b2c-tooling-sdk/config';
138
+ import { loadLocalScapiSchemas } from '@salesforce/b2c-tooling-sdk/scapi';
138
139
  import { B2CDxMcpServer } from '../server.js';
139
140
  import { Services } from '../services.js';
140
141
  import { ServerContext } from '../server-context.js';
@@ -199,11 +200,17 @@ export default class McpServerCommand extends BaseCommand {
199
200
  }),
200
201
  'docs-topics': Flags.string({
201
202
  description: 'Limit the documentation exposed by the docs tools to these categories (comma-separated allowlist). ' +
202
- 'Options: script-api, job-step, commerce-api, pwa-kit-managed-runtime, sfnext, sfra, b2c-commerce, ocapi, tooling, ' +
203
+ 'Options: script-api, job-step, commerce-api, pwa-kit-managed-runtime, sfnext, sfra, b2c-commerce, commerce-solutions, ocapi, tooling, ' +
203
204
  'help-admin, help-merchant, help-kb. ' +
204
205
  'Bounds the whole docs corpus; per-call category/storefront narrow within it. Unknown names are ignored.',
205
206
  env: 'SFCC_DOCS_TOPICS',
206
207
  }),
208
+ 'scapi-schemas': Flags.string({
209
+ description: 'Local SCAPI OpenAPI contracts for scapi_search and scapi_execute (comma-separated JSON files or directories). ' +
210
+ 'Each replaces the bundled or live contract with the same family/name/version from servers[0].url, or adds an API. ' +
211
+ 'Developer option for beta and pre-release APIs.',
212
+ env: 'SFCC_SCAPI_SCHEMAS',
213
+ }),
207
214
  };
208
215
  /** Signal that triggered shutdown (if any) - used to exit process after finally() */
209
216
  shutdownSignal;
@@ -240,8 +247,10 @@ export default class McpServerCommand extends BaseCommand {
240
247
  * 1. Per-call configPath
241
248
  * 2. Startup --config / SFCC_CONFIG
242
249
  * 3. SFCC_CONFIG from the selected project's .env
243
- * 4. dw.json in the selected project directory
244
- * 5. Shared default dw.json from the tooling settings
250
+ * 4. dw.json in the selected project directory, plus the shared default
251
+ * dw.json from the tooling settings
252
+ *
253
+ * An explicit path (1-3) is used on its own; an empty one selects no dw.json.
245
254
  *
246
255
  * Values are then merged through the normal CLI resolver, including
247
256
  * environment, plugin, dw.json, ~/.mobify, and package.json sources.
@@ -256,15 +265,18 @@ export default class McpServerCommand extends BaseCommand {
256
265
  ? path.resolve(effectiveProjectDirectory ?? process.cwd(), projectContext.configPath)
257
266
  : undefined) ??
258
267
  baseOptions.configPath ??
259
- (projectConfigPath && effectiveProjectDirectory
268
+ // An empty SFCC_CONFIG selects no dw.json, as in the CLI.
269
+ (projectConfigPath
260
270
  ? path.isAbsolute(projectConfigPath)
261
271
  ? projectConfigPath
262
272
  : path.resolve(effectiveProjectDirectory, projectConfigPath)
263
- : undefined);
273
+ : projectConfigPath);
264
274
  const options = {
265
275
  ...baseOptions,
266
276
  ...mrt.options,
267
277
  configPath,
278
+ // The selected project's .env supplies Storefront Next fallbacks below dw.json.
279
+ envFile: projectEnvironment ? path.join(effectiveProjectDirectory, '.env') : baseOptions.envFile,
268
280
  instance: projectContext?.instanceName ?? baseOptions.instance,
269
281
  projectDirectory: effectiveProjectDirectory,
270
282
  workingDirectory: effectiveProjectDirectory,
@@ -301,20 +313,20 @@ export default class McpServerCommand extends BaseCommand {
301
313
  source: 'argument',
302
314
  };
303
315
  }
304
- else if (baseOptions.configPath) {
305
- primaryConfiguration = { path: path.resolve(baseOptions.configPath), source: 'server' };
316
+ else if (baseOptions.configPath !== undefined) {
317
+ primaryConfiguration = { path: baseOptions.configPath && path.resolve(baseOptions.configPath), source: 'server' };
318
+ }
319
+ else if (projectConfigPath === undefined) {
320
+ primaryConfiguration = { path: path.join(effectiveProjectDirectory, 'dw.json'), source: 'projectDirectory' };
306
321
  }
307
- else if (projectConfigPath) {
322
+ else {
308
323
  primaryConfiguration = {
309
- path: path.isAbsolute(projectConfigPath)
310
- ? projectConfigPath
311
- : path.resolve(effectiveProjectDirectory, projectConfigPath),
324
+ path: projectConfigPath && !path.isAbsolute(projectConfigPath)
325
+ ? path.resolve(effectiveProjectDirectory, projectConfigPath)
326
+ : projectConfigPath,
312
327
  source: 'projectEnvironment',
313
328
  };
314
329
  }
315
- else {
316
- primaryConfiguration = { path: path.join(effectiveProjectDirectory, 'dw.json'), source: 'projectDirectory' };
317
- }
318
330
  return Services.fromResolvedConfig(config, projectEnvironment, {
319
331
  projectDirectory: {
320
332
  path: effectiveProjectDirectory,
@@ -359,13 +371,14 @@ export default class McpServerCommand extends BaseCommand {
359
371
  const startupFlags = {
360
372
  toolsets: this.flags.toolsets ? this.flags.toolsets.split(',').map((s) => s.trim()) : undefined,
361
373
  tools: this.flags.tools ? this.flags.tools.split(',').map((s) => s.trim()) : undefined,
362
- configPath: this.flags.config,
374
+ configPath: this.getConfigPathFlag(),
363
375
  // Default project directory for tool calls. oclif handles the environment fallback.
364
376
  projectDirectory: this.flags['project-directory'],
365
377
  // Docs topic allowlist (bounds the docs corpus at startup). Flag first
366
378
  // (--docs-topics / SFCC_DOCS_TOPICS), else config `docsCategories`
367
379
  // (dw.json `docs-categories`, SFCC_DOCS_CATEGORIES, package.json).
368
380
  docsTopics: this.flags['docs-topics'] ?? this.resolvedConfig?.values.docsCategories?.join(','),
381
+ scapiSchemas: this.loadLocalScapiSchemas(),
369
382
  };
370
383
  // Add toolsets to telemetry attributes
371
384
  if (this.telemetry && startupFlags.toolsets) {
@@ -393,11 +406,11 @@ export default class McpServerCommand extends BaseCommand {
393
406
  'resources/read': { ttlMs: 300_000, cacheScope: 'private' },
394
407
  },
395
408
  instructions: 'Discover tool schemas before calling. Prefer dedicated tools; otherwise scapi_search/scapi_execute for Commerce APIs. ' +
396
- 'Read skill:// URIs as MCP resources, or skill files with skills_read({uri: "<URI>"}) when enabled; not native skill commands. ' +
397
- 'SCAPI: first read skill://mcp/scapi/SKILL.md. ' +
398
- 'Analytics: cip_discover/cip_query; skill://mcp/cip/SKILL.md. ' +
399
- 'Skills: config skill://mcp/b2c-config/SKILL.md; debugging skill://mcp/debugger/SKILL.md; ' +
400
- 'setup/toolsets skill://mcp/server/SKILL.md; catalog skill://index (look for b2c-ops runbooks for operations and incidents).',
409
+ 'Skills: load them through your client when it lists them; otherwise read skill:// URIs as MCP resources or with skills_read({uri: "<URI>"}). ' +
410
+ 'SCAPI: first read skill://mcp/b2c-mcp-scapi/SKILL.md. ' +
411
+ 'Analytics: cip_discover/cip_query; skill://mcp/b2c-mcp-cip/SKILL.md. ' +
412
+ 'Config, auth and deploy prerequisites skill://mcp/b2c-mcp-config/SKILL.md; debugging skill://mcp/b2c-mcp-debugger/SKILL.md; ' +
413
+ 'skill index, setup and tool choice skill://mcp/b2c-mcp-server/SKILL.md; full catalog skill://index (b2c-ops runbooks for operations and incidents).',
401
414
  });
402
415
  activeServer = server;
403
416
  await registerToolsets(startupFlags, server, loadServices, context);
@@ -433,6 +446,27 @@ export default class McpServerCommand extends BaseCommand {
433
446
  });
434
447
  this.logger.info({ version: this.config.version }, 'MCP Server running on stdio');
435
448
  }
449
+ /** Load --scapi-schemas once at startup; relative paths resolve from the project directory. */
450
+ loadLocalScapiSchemas() {
451
+ const value = this.flags['scapi-schemas'];
452
+ if (!value)
453
+ return undefined;
454
+ const base = this.flags['project-directory'] ?? process.cwd();
455
+ const paths = value
456
+ .split(',')
457
+ .map((entry) => entry.trim())
458
+ .filter(Boolean)
459
+ .map((entry) => path.resolve(base, entry));
460
+ let documents;
461
+ try {
462
+ documents = loadLocalScapiSchemas(paths);
463
+ }
464
+ catch (error) {
465
+ this.error(error instanceof Error ? error.message : String(error));
466
+ }
467
+ this.logger.info({ scapiSchemas: documents.map((document) => document.entry.id) }, `Using ${documents.length} local SCAPI contract(s)`);
468
+ return documents;
469
+ }
436
470
  /** Parse a project's .env without mutating the long-lived MCP process environment. */
437
471
  loadProjectEnvironment(projectDirectory) {
438
472
  if (!projectDirectory)
@@ -2,5 +2,8 @@ import type { B2CDxMcpServer } from './server.js';
2
2
  import type { McpTool } from './utils/types.js';
3
3
  /** Read-only guidance does not load instance configuration or credentials. */
4
4
  export declare function createGuidanceTool(): McpTool;
5
- /** Advertise an index and featured skills; the template reads the entire available catalog. */
5
+ /**
6
+ * Advertise an index and featured skills; the template reads the entire available catalog.
7
+ * Also serves the MCP skills extension (skills/list, skills/get) over the same catalog.
8
+ */
6
9
  export declare function registerGuidanceResources(server: B2CDxMcpServer, includeSharedSkills?: boolean): void;
package/dist/guidance.js CHANGED
@@ -121,7 +121,16 @@ export function createGuidanceTool() {
121
121
  },
122
122
  };
123
123
  }
124
- /** Advertise an index and featured skills; the template reads the entire available catalog. */
124
+ function protocolError(error) {
125
+ const detail = error instanceof GuidanceError
126
+ ? error
127
+ : new GuidanceError('SKILLS_UNAVAILABLE', 'Packaged skills are unavailable.');
128
+ return new ProtocolError(ProtocolErrorCode.InvalidParams, detail.message, { code: detail.code });
129
+ }
130
+ /**
131
+ * Advertise an index and featured skills; the template reads the entire available catalog.
132
+ * Also serves the MCP skills extension (skills/list, skills/get) over the same catalog.
133
+ */
125
134
  export function registerGuidanceResources(server, includeSharedSkills = true) {
126
135
  const catalog = catalogLoader(includeSharedSkills ? undefined : ['mcp'])();
127
136
  const read = async (uri) => {
@@ -129,10 +138,7 @@ export function registerGuidanceResources(server, includeSharedSkills = true) {
129
138
  return { contents: [{ uri, mimeType: 'text/markdown', text: catalog.readResource(uri) }] };
130
139
  }
131
140
  catch (error) {
132
- const detail = error instanceof GuidanceError
133
- ? error
134
- : new GuidanceError('SKILLS_UNAVAILABLE', 'Packaged skills are unavailable.');
135
- throw new ProtocolError(ProtocolErrorCode.InvalidParams, detail.message, { code: detail.code });
141
+ throw protocolError(error);
136
142
  }
137
143
  };
138
144
  server.registerResource('skill-index', GUIDANCE_INDEX_URI, {
@@ -151,5 +157,17 @@ export function registerGuidanceResources(server, includeSharedSkills = true) {
151
157
  mimeType: 'text/markdown',
152
158
  }, async (uri) => read(uri.toString()));
153
159
  server.addResourceReader('skill://', read);
160
+ // Lists the featured MCP skills; skills/get answers for every served skill.
161
+ server.addSkillsExtension({
162
+ list: () => catalog.skills(),
163
+ get(uri) {
164
+ try {
165
+ return catalog.skill(uri);
166
+ }
167
+ catch (error) {
168
+ throw protocolError(error);
169
+ }
170
+ },
171
+ });
154
172
  }
155
173
  //# sourceMappingURL=guidance.js.map
@@ -1,4 +1,5 @@
1
1
  import type { ProjectType } from '@salesforce/b2c-tooling-sdk/discovery';
2
+ import type { ScapiSchemaDocument } from '@salesforce/b2c-tooling-sdk/scapi';
2
3
  import { type DocCategory } from '@salesforce/b2c-tooling-sdk/docs';
3
4
  import type { McpTool, Toolset, StartupFlags } from './utils/index.js';
4
5
  import type { B2CDxMcpServer } from './server.js';
@@ -17,6 +18,6 @@ export type ToolRegistry = Record<Toolset, McpTool[]>;
17
18
  * @param loadServices - Function that loads configuration and returns Services instance
18
19
  * @returns Complete tool registry
19
20
  */
20
- export declare function createToolRegistry(loadServices: ServicesLoader, serverContext?: ServerContext, detectedWorkspaces?: readonly ProjectType[], enabledDocCategories?: readonly DocCategory[]): ToolRegistry;
21
+ export declare function createToolRegistry(loadServices: ServicesLoader, serverContext?: ServerContext, detectedWorkspaces?: readonly ProjectType[], enabledDocCategories?: readonly DocCategory[], scapiSchemas?: readonly ScapiSchemaDocument[]): ToolRegistry;
21
22
  /** Register all toolsets by default, or only explicitly selected toolsets/tools. */
22
23
  export declare function registerToolsets(flags: StartupFlags, server: B2CDxMcpServer, loadServices: ServicesLoader, serverContext?: ServerContext): Promise<void>;
package/dist/registry.js CHANGED
@@ -22,7 +22,7 @@ import { createGuidanceTool, registerGuidanceResources } from './guidance.js';
22
22
  * @param loadServices - Function that loads configuration and returns Services instance
23
23
  * @returns Complete tool registry
24
24
  */
25
- export function createToolRegistry(loadServices, serverContext, detectedWorkspaces = [], enabledDocCategories) {
25
+ export function createToolRegistry(loadServices, serverContext, detectedWorkspaces = [], enabledDocCategories, scapiSchemas) {
26
26
  const registry = {
27
27
  CARTRIDGES: [],
28
28
  DIAGNOSTICS: [],
@@ -40,7 +40,7 @@ export function createToolRegistry(loadServices, serverContext, detectedWorkspac
40
40
  ...createDiagnosticsTools(loadServices, serverContext),
41
41
  ...createDocsTools(loadServices, { detectedWorkspaces, enabledCategories: enabledDocCategories }),
42
42
  ...createMrtTools(loadServices),
43
- ...createScapiTools(loadServices, serverContext?.scapiExecutions),
43
+ ...createScapiTools(loadServices, serverContext?.scapiExecutions, scapiSchemas),
44
44
  createGuidanceTool(),
45
45
  ];
46
46
  // Organize tools by their declared toolsets (supports multi-toolset)
@@ -70,7 +70,7 @@ export async function registerToolsets(flags, server, loadServices, serverContex
70
70
  logger.info({ docsTopics: enabledDocCategories }, `Documentation restricted to topics: ${enabledDocCategories.join(', ')}`);
71
71
  }
72
72
  // Tool availability is independent of the workspace. Explicit selection customizes the default catalog.
73
- const toolRegistry = createToolRegistry(loadServices, serverContext, [], enabledDocCategories);
73
+ const toolRegistry = createToolRegistry(loadServices, serverContext, [], enabledDocCategories, flags.scapiSchemas);
74
74
  const existingToolNames = new Set(Object.values(toolRegistry)
75
75
  .flat()
76
76
  .map((tool) => tool.name));
package/dist/server.d.ts CHANGED
@@ -3,6 +3,8 @@ import type { CallToolResult, Implementation, ReadResourceResult, ToolAnnotation
3
3
  import { type ZodRawShape } from 'zod';
4
4
  import type { Telemetry } from '@salesforce/b2c-tooling-sdk/telemetry';
5
5
  import type { McpToolConfig, ToolContext } from './utils/types.js';
6
+ /** MCP skills extension identifier (SEP-2640). */
7
+ export declare const SKILLS_EXTENSION = "io.modelcontextprotocol/skills";
6
8
  /**
7
9
  * Extended server options.
8
10
  */
@@ -35,6 +37,14 @@ export declare class B2CDxMcpServer extends McpServer {
35
37
  constructor(serverInfo: Implementation, options?: B2CDxMcpServerOptions);
36
38
  /** Register after resource metadata. Resolve raw URIs before URL dot-segment normalization. */
37
39
  addResourceReader(prefix: string, read: (uri: string) => Promise<ReadResourceResult>): void;
40
+ /**
41
+ * Serve the MCP skills extension (SEP-2640): `skills/list` and `skills/get`.
42
+ * Register before connecting. `get` throws a ProtocolError for unknown skills.
43
+ */
44
+ addSkillsExtension(skills: {
45
+ list: () => unknown[];
46
+ get: (uri: string) => unknown;
47
+ }): void;
38
48
  /**
39
49
  * Register a tool with the server.
40
50
  *
package/dist/server.js CHANGED
@@ -6,6 +6,8 @@
6
6
  import { McpServer, ProtocolError, ProtocolErrorCode, CLIENT_INFO_META_KEY, PROTOCOL_VERSION_META_KEY, CLIENT_CAPABILITIES_META_KEY, } from '@modelcontextprotocol/server';
7
7
  import { z } from 'zod';
8
8
  import { getLogger } from '@salesforce/b2c-tooling-sdk/logging';
9
+ /** MCP skills extension identifier (SEP-2640). */
10
+ export const SKILLS_EXTENSION = 'io.modelcontextprotocol/skills';
9
11
  /**
10
12
  * A server implementation that extends the base MCP server.
11
13
  *
@@ -57,6 +59,25 @@ export class B2CDxMcpServer extends McpServer {
57
59
  throw new ProtocolError(ProtocolErrorCode.InvalidParams, 'Resource URI is not available.');
58
60
  });
59
61
  }
62
+ /**
63
+ * Serve the MCP skills extension (SEP-2640): `skills/list` and `skills/get`.
64
+ * Register before connecting. `get` throws a ProtocolError for unknown skills.
65
+ */
66
+ addSkillsExtension(skills) {
67
+ this.server.registerCapabilities({ extensions: { [SKILLS_EXTENSION]: {} } });
68
+ this.server.setRequestHandler('skills/list', { params: z.object({ cursor: z.string().optional() }).loose().optional() }, async (params, context) => {
69
+ this.logRequestClient(context);
70
+ // One page: an issued cursor never exists, so any cursor is invalid.
71
+ if (params?.cursor !== undefined)
72
+ throw new ProtocolError(ProtocolErrorCode.InvalidParams, 'Invalid cursor.');
73
+ const modern = Boolean(context.mcpReq?.envelope?.[PROTOCOL_VERSION_META_KEY]);
74
+ return { skills: skills.list(), ...(modern && { ttlMs: 300_000, cacheScope: 'private' }) };
75
+ });
76
+ this.server.setRequestHandler('skills/get', { params: z.object({ uri: z.string() }).loose() }, async (params, context) => {
77
+ this.logRequestClient(context);
78
+ return { skill: skills.get(params.uri) };
79
+ });
80
+ }
60
81
  /**
61
82
  * Register a tool with the server.
62
83
  *
@@ -5,10 +5,10 @@
5
5
  */
6
6
  /** Targets must resolve through resources even when skills_read is not selected. */
7
7
  export const MCP_SKILL_REFERENCES = {
8
- configSources: { uri: 'skill://mcp/b2c-config/SKILL.md', section: 'where-configuration-comes-from' },
9
- debuggerPrerequisites: { uri: 'skill://mcp/debugger/SKILL.md', section: 'prerequisites' },
10
- debuggerRecovery: { uri: 'skill://mcp/debugger/SKILL.md', section: 'recovery' },
11
- scapiAuthentication: { uri: 'skill://mcp/scapi/SKILL.md', section: 'authentication' },
12
- cipAccess: { uri: 'skill://mcp/cip/SKILL.md', section: 'configuration-and-access' },
8
+ configSources: { uri: 'skill://mcp/b2c-mcp-config/SKILL.md', section: 'where-configuration-comes-from' },
9
+ debuggerPrerequisites: { uri: 'skill://mcp/b2c-mcp-debugger/SKILL.md', section: 'prerequisites' },
10
+ debuggerRecovery: { uri: 'skill://mcp/b2c-mcp-debugger/SKILL.md', section: 'recovery' },
11
+ scapiAuthentication: { uri: 'skill://mcp/b2c-mcp-scapi/SKILL.md', section: 'authentication' },
12
+ cipAccess: { uri: 'skill://mcp/b2c-mcp-cip/SKILL.md', section: 'configuration-and-access' },
13
13
  };
14
14
  //# sourceMappingURL=skill-references.js.map
@@ -40,6 +40,7 @@ function createCartridgeDeployTool(loadServices, injections) {
40
40
  idempotent: false,
41
41
  openWorld: true,
42
42
  description: 'Find and deploy cartridges or selected files to B2C Commerce via WebDAV; overwrites matching remote files. ' +
43
+ 'Prerequisites (instance, credentials, code version): skill://mcp/b2c-mcp-config/SKILL.md. ' +
43
44
  "After deployment, add new cartridges to the site's cartridge path in Business Manager: Sites → Manage Sites → Settings tab → Cartridges.",
44
45
  toolsets: ['CARTRIDGES'],
45
46
  requiresInstance: true,
@@ -10,6 +10,7 @@ import { createProjectContextInputSchema } from '../project-context.js';
10
10
  import { MCP_SKILL_REFERENCES } from '../../skill-references.js';
11
11
  import { resolveCipClient } from './client.js';
12
12
  const MAX_OUTPUT_BYTES = 24_000;
13
+ const CIP_SKILL_REQUIRED = 'CIP_SKILL_REQUIRED: Read skill://mcp/b2c-mcp-cip/SKILL.md through resources or skills_read, then retry with skillRead: true.';
13
14
  const params = z
14
15
  .record(z.string(), z.string())
15
16
  .optional()
@@ -68,7 +69,9 @@ export function createCipTools(loadServices, dependencies) {
68
69
  };
69
70
  const execution = {
70
71
  ...connection,
71
- skillRead: z.boolean().optional().describe('True after reading the linked CIP skill.'),
72
+ skillRead: z
73
+ .literal(true, { error: CIP_SKILL_REQUIRED })
74
+ .describe('Required. Set true only after reading skill://mcp/b2c-mcp-cip/SKILL.md (MCP resource, or skills_read({uri})).'),
72
75
  report: z.string().min(1).max(100).optional().describe('Curated report name; supply report or sql.'),
73
76
  params,
74
77
  sql: z
@@ -157,7 +160,7 @@ export function createCipTools(loadServices, dependencies) {
157
160
  idempotent: true,
158
161
  openWorld: true,
159
162
  toolsets: ['CIP'],
160
- description: 'Query CIP analytics using a curated report or SQL. Read skill://mcp/cip/SKILL.md first. Returns bounded rows; filter/group in SQL. Warehouse data is not live SCAPI state.',
163
+ description: 'Query CIP analytics using a curated report or SQL. Read skill://mcp/b2c-mcp-cip/SKILL.md first. Returns bounded rows; filter/group in SQL. Warehouse data is not live SCAPI state.',
161
164
  inputSchema: execution,
162
165
  async handler(args, context) {
163
166
  let resolution;
@@ -165,7 +168,7 @@ export function createCipTools(loadServices, dependencies) {
165
168
  try {
166
169
  const input = z.object(execution).strict().parse(args);
167
170
  if (input.skillRead !== true)
168
- throw new Error('CIP_SKILL_REQUIRED: Read skill://mcp/cip/SKILL.md through resources or skills_read, then retry with skillRead: true.');
171
+ throw new Error(CIP_SKILL_REQUIRED);
169
172
  if (Number(Boolean(input.report)) + Number(Boolean(input.sql)) !== 1)
170
173
  throw new Error('Supply exactly one of report or sql.');
171
174
  if (input.sql && input.params)
@@ -18,7 +18,7 @@ export function createDebugCaptureAtBreakpointTool(loadServices, serverContext)
18
18
  openWorld: true,
19
19
  description: 'Add a breakpoint and wait for a halt; return stack, variables, and evaluations. ' +
20
20
  'Trigger a GET here or an external request concurrently. Capture does not resume by default. ' +
21
- 'Workflow: skill://mcp/debugger/SKILL.md.',
21
+ 'Workflow: skill://mcp/b2c-mcp-debugger/SKILL.md.',
22
22
  toolsets: ['CARTRIDGES', 'DIAGNOSTICS', 'SCAPI'],
23
23
  inputSchema: {
24
24
  session_id: z.string(),
@@ -15,7 +15,7 @@ export function createDebugSetBreakpointsTool(loadServices, serverContext) {
15
15
  idempotent: true,
16
16
  openWorld: true,
17
17
  description: 'Replace all session breakpoints. verified means local source mapping, not deployed-code validation. ' +
18
- 'Workflow: skill://mcp/debugger/SKILL.md.',
18
+ 'Workflow: skill://mcp/b2c-mcp-debugger/SKILL.md.',
19
19
  toolsets: ['CARTRIDGES', 'DIAGNOSTICS', 'SCAPI'],
20
20
  inputSchema: {
21
21
  session_id: z.string(),
@@ -16,7 +16,7 @@ export function createDebugStartSessionTool(loadServices, serverContext) {
16
16
  idempotent: false,
17
17
  openWorld: true,
18
18
  description: 'Start a script debugger session and map cartridges; replaces any remote debugger client. Requires BM Basic Auth with WebDAV_Manage_Customization. ' +
19
- 'Use returned session_id; end with debug_end_session. Workflow: skill://mcp/debugger/SKILL.md.',
19
+ 'Use returned session_id; end with debug_end_session. Workflow: skill://mcp/b2c-mcp-debugger/SKILL.md.',
20
20
  toolsets: ['CARTRIDGES', 'DIAGNOSTICS', 'SCAPI'],
21
21
  inputSchema: {
22
22
  cartridgeDirectory: z
@@ -91,7 +91,7 @@ export class ScapiExecution {
91
91
  `${request.method} ${path}`,
92
92
  ...(Object.keys(request.query).length > 0 ? [`Query:\n${preview(request.query)}`] : []),
93
93
  ...(request.body === undefined ? [] : [`Body:\n${preview(request.body)}`]),
94
- 'Safety Mode requires approval. Declining stops this execution.',
94
+ 'Safety Mode requires approval. Accept sends this request only; declining stops this execution.',
95
95
  earlierWrites ? `Earlier write requests sent: ${earlierWrites}; no rollback.` : 'No earlier writes.',
96
96
  `Execution: ${this.id}`,
97
97
  ].join('\n');
@@ -101,11 +101,8 @@ export class ScapiExecution {
101
101
  inputRequests: {
102
102
  [key]: inputRequired.elicit({
103
103
  message,
104
- requestedSchema: {
105
- type: 'object',
106
- properties: { approve: { type: 'boolean', title: 'Approve this request only', default: false } },
107
- required: ['approve'],
108
- },
104
+ // No fields: the client's own accept/decline/cancel buttons carry the decision.
105
+ requestedSchema: { type: 'object', properties: {} },
109
106
  }),
110
107
  },
111
108
  }),
@@ -191,11 +188,14 @@ export class ScapiExecution {
191
188
  this.event = deferred();
192
189
  round.responded = true;
193
190
  const result = this.wait(context);
194
- if (!context.supportsElicitation || response.action !== 'accept' || response.content?.approve !== true) {
195
- this.cancel('SCAPI_APPROVAL_DECLINED: execution cancelled without sending the pending request.');
191
+ if (context.supportsElicitation && response.action === 'accept') {
192
+ round.decision.resolve();
193
+ }
194
+ else if (response.action === 'cancel') {
195
+ this.cancel('SCAPI_APPROVAL_CANCELLED: approval dismissed; execution cancelled without sending the pending request.');
196
196
  }
197
197
  else {
198
- round.decision.resolve();
198
+ this.cancel('SCAPI_APPROVAL_DECLINED: execution cancelled without sending the pending request.');
199
199
  }
200
200
  return result;
201
201
  }