@salesforce/b2c-dx-mcp 3.0.1 → 3.1.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 (57) hide show
  1. package/content/guidance/b2c-cli/b2c-config/SKILL.md +18 -1
  2. package/content/guidance/b2c-cli/b2c-job/SKILL.md +2 -0
  3. package/content/guidance/b2c-cli/b2c-job/references/EXPORT.md +9 -3
  4. package/content/guidance/b2c-cli/b2c-job/references/IMPORT.md +12 -0
  5. package/content/guidance/b2c-cli/b2c-mrt/SKILL.md +5 -4
  6. package/content/guidance/b2c-cli/b2c-mrt/references/BUNDLE-COMMANDS.md +21 -3
  7. package/content/guidance/b2c-cli/b2c-mrt/references/ENVIRONMENT-COMMANDS.md +23 -0
  8. package/content/guidance/b2c-cli/b2c-webdav/SKILL.md +17 -0
  9. package/content/guidance/index.json +18 -18
  10. package/content/guidance/mcp/scapi/SKILL.md +46 -14
  11. package/dist/guidance.js +0 -2
  12. package/dist/registry.js +1 -1
  13. package/dist/server-context.d.ts +2 -0
  14. package/dist/server-context.js +4 -0
  15. package/dist/server.d.ts +2 -4
  16. package/dist/server.js +16 -3
  17. package/dist/tools/scapi/execution-registry.d.ts +62 -0
  18. package/dist/tools/scapi/execution-registry.js +303 -0
  19. package/dist/tools/scapi/index.d.ts +2 -1
  20. package/dist/tools/scapi/index.js +2 -2
  21. package/dist/tools/scapi/scapi-code.d.ts +2 -1
  22. package/dist/tools/scapi/scapi-code.js +71 -34
  23. package/dist/utils/types.d.ts +10 -3
  24. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CLhGwQTn.d.mts +2 -1
  25. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-dBHMsxwf.d.cts +2 -1
  26. package/node_modules/@modelcontextprotocol/server/dist/mcp-D7GmuPnv.cjs +1 -1
  27. package/node_modules/@modelcontextprotocol/server/dist/mcp-DXXb3Vv3.mjs +1 -1
  28. package/node_modules/@modelcontextprotocol/server/dist/src-CX2iR2pK.mjs +2 -0
  29. package/node_modules/@modelcontextprotocol/server/dist/src-STyD_Vvf.cjs +2 -0
  30. package/node_modules/@salesforce/b2c-agent-plugins/CHANGELOG.md +22 -0
  31. package/node_modules/@salesforce/b2c-agent-plugins/README.md +4 -2
  32. package/node_modules/@salesforce/b2c-agent-plugins/b2c/.codex-plugin/plugin.json +1 -1
  33. package/node_modules/@salesforce/b2c-agent-plugins/b2c/plugin.json +1 -1
  34. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/.codex-plugin/plugin.json +1 -1
  35. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/plugin.json +1 -1
  36. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-config/SKILL.md +18 -1
  37. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-job/SKILL.md +2 -0
  38. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-job/references/EXPORT.md +9 -3
  39. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-job/references/IMPORT.md +12 -0
  40. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-mrt/SKILL.md +5 -4
  41. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-mrt/references/BUNDLE-COMMANDS.md +21 -3
  42. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-mrt/references/ENVIRONMENT-COMMANDS.md +23 -0
  43. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-webdav/SKILL.md +17 -0
  44. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/.codex-plugin/plugin.json +1 -1
  45. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/plugin.json +1 -1
  46. package/node_modules/@salesforce/b2c-agent-plugins/b2c-python-sdk/.codex-plugin/plugin.json +41 -0
  47. package/node_modules/@salesforce/b2c-agent-plugins/b2c-python-sdk/README.md +35 -0
  48. package/node_modules/@salesforce/b2c-agent-plugins/b2c-python-sdk/assets/logo.svg +31 -0
  49. package/node_modules/@salesforce/b2c-agent-plugins/b2c-python-sdk/plugin.json +45 -0
  50. package/node_modules/@salesforce/b2c-agent-plugins/b2c-python-sdk/skills/using-b2c-tooling-sdk/SKILL.md +226 -0
  51. package/node_modules/@salesforce/b2c-agent-plugins/b2c-python-sdk/skills/using-b2c-tooling-sdk/references/api-catalog.md +154 -0
  52. package/node_modules/@salesforce/b2c-agent-plugins/package.json +1 -1
  53. package/node_modules/@salesforce/b2c-agent-plugins/plugins.json +3 -0
  54. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/.codex-plugin/plugin.json +1 -1
  55. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/plugin.json +1 -1
  56. package/oclif.manifest.json +1 -1
  57. package/package.json +3 -3
@@ -6252,6 +6252,8 @@ var Protocol = class {
6252
6252
  this._requestHandlerAbortControllers.get(notification.params.requestId)?.abort(notification.params.reason);
6253
6253
  }
6254
6254
  _setupTimeout(messageId, timeout, maxTotalTimeout, onTimeout, resetTimeoutOnProgress = false) {
6255
+ // Zero disables the deadline for human-paced elicitation; cancellation remains active.
6256
+ if (timeout === 0) return;
6255
6257
  this._timeoutInfo.set(messageId, {
6256
6258
  timeoutId: setTimeout(onTimeout, timeout),
6257
6259
  startTime: Date.now(),
@@ -1,5 +1,27 @@
1
1
  # @salesforce/b2c-agent-plugins
2
2
 
3
+ ## 1.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#667](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/pull/667) [`f9110ac`](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/commit/f9110ace279f3f3290ceaac9104e6436d71d2688) - Add a `b2c-python-sdk` agent-skills plugin for consuming the Python `salesforce-b2c-tooling-sdk` from scripts and notebooks. Install it from the plugin marketplace (`b2c-python-sdk`) or with `b2c setup skills b2c-python-sdk`. The skill covers install/import, async-vs-sync usage, choosing an auth mechanism, resolving config from `dw.json`, the operations-vs-clients error contract, and SLAS shopper tokens, with a full symbol catalog reference. (Thanks [@priandsf](https://github.com/priandsf)!)
8
+
9
+ ### Patch Changes
10
+
11
+ - [#690](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/pull/690) [`df4f24c`](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/commit/df4f24c963c050facea179013fc69db129ade5ea) - Make the `b2c mrt env var` family (`list` / `set` / `push` / `delete`) backend-aware, so environment variables can be read and written over the SCAPI Storefront Environments API (OAuth, scopes `sfcc.storefront.environments` for reads and `sfcc.storefront.environments.rw` for writes) instead of the legacy MRT Cloud API (per-user API key). Select the backend with `--mrt-backend` (`auto` | `legacy` | `scapi`, also `MRT_BACKEND` / `mrtBackend` in `dw.json`): `auto` prefers SCAPI when `--short-code`/`--tenant-id` and client-credentials or JWT Bearer auth are configured — otherwise legacy — and falls back to legacy on safe pre-execution errors; `scapi` never silently falls back. Over SCAPI, `set` and `delete` apply a merge-PATCH (only the keys you pass change; `delete` sends the key with a `null` value), and `push` pins every write to the backend its initial read resolved to, so a single `push` never crosses backends. The legacy path is unchanged. (Thanks [@kieran-sf](https://github.com/kieran-sf)!)
12
+
13
+ Under `--json`, `env var list` returns the serving backend's native shape (legacy `{count, variables}` vs the SCAPI environment-variables map) — the human-readable table is normalized across backends, but `--json` is not, so pin `legacy` or `scapi` when a script needs a stable shape. All four commands now emit only their result object on stdout under `--json` (progress text is suppressed); `push --json` is non-interactive and requires `--yes` when there are changes to apply.
14
+
15
+ - [#667](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/pull/667) [`f9110ac`](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/commit/f9110ace279f3f3290ceaac9104e6436d71d2688) - Hardened the Python SDK's `sync` facade: calling it from inside an already-running event loop (e.g. a Jupyter cell) now warns instead of silently blocking forever with no explanation, mixing direct `await` use and `sync` use of the same object now raises an actionable error instead of a confusing cross-loop `RuntimeError`, and syncified objects now preserve identity/equality with their async counterparts (`sync_obj == async_obj`, stable `is`/hashing across repeated calls). Also fixed a PKCE code example in the `b2c-python-sdk` skill that referenced a nonexistent `AuthCredentials` constructor. (Thanks [@priandsf](https://github.com/priandsf)!)
16
+
17
+ - [#705](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/pull/705) [`66c599d`](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/commit/66c599da0664563f3aaeb529a749b9d5f8f0bfc6) - Show a readable effective safety policy and rule count in `b2c setup inspect`, including instance, global-file, and environment sources. Use `--verbose` for the full ordered ruleset; `--json` includes the complete structured configuration. (Thanks [@clavery](https://github.com/clavery)!)
18
+
19
+ - [#686](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/pull/686) [`643d0c0`](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/commit/643d0c055eb2101bb5bbce24d5bf5a9701610220) - Export one composable storefront by name and optionally wait for Storefront Next post-import setup after a successful site archive import, surfacing import data errors if setup never starts. Export configuration types and the IDE selector now also include the latest platform data units. (Thanks [@clavery](https://github.com/clavery)!)
20
+
21
+ - [#689](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/pull/689) [`880d25a`](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/commit/880d25a42a841e41202dab3d428a3433a7350ebd) - Reuse Storefront Next B2C Commerce, SLAS, site, and MRT environment variables as configuration fallbacks while preserving toolkit-specific overrides and normalizing full organization IDs. (Thanks [@clavery](https://github.com/clavery)!)
22
+
23
+ - [#706](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/pull/706) [`3fe3a10`](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/commit/3fe3a10f6ea0a1e7c1e8824d387efac45b7e6e7f) - Support `--root=dynamic` across WebDAV commands to manage site-specific files, including Velocity templates, independently of code deployments. Include the site ID as the first segment of the remote path, for example `b2c webdav ls --root=dynamic MySite/`. (Thanks [@clavery](https://github.com/clavery)!)
24
+
3
25
  ## 1.9.0
4
26
 
5
27
  ### Minor Changes
@@ -15,6 +15,7 @@ These skills follow the open [Agent Skills](https://agentskills.io/home) standar
15
15
  | [`b2c-ops`](./b2c-ops) | Administrator and operator runbooks — job health, checkout failures, incident triage, recovery checks, and escalation |
16
16
  | [`storefront-next`](./storefront-next) | Storefront Next development — project setup, routing, data fetching, components, design-system component authoring, vertical/theme creation, Page Designer, authentication, hybrid storefronts, i18n, state management, extensions, performance, testing, and Managed Runtime deployment |
17
17
  | [`storefront-next-figma`](./storefront-next-figma) | Figma design-kit workflows for Storefront Next verticals — duplicate the kit, sync Brand variables from `brand.css`, edit components at the correct layer, and publish Code Connect. **Requires the [Figma MCP server](https://help.figma.com/hc/en-us/articles/32132100833559-Guide-to-the-Figma-MCP-server).** |
18
+ | [`b2c-python-sdk`](./b2c-python-sdk) | Consuming the `salesforce-b2c-tooling-sdk` Python SDK from scripts and notebooks — install/import, choose an auth mechanism, resolve config from `dw.json`, and call the OCAPI/SCAPI/WebDAV clients and operations (code deploy, jobs, sites, catalogs, sandboxes, metrics, logs, SLAS shopper tokens) |
18
19
 
19
20
  `b2c-dx-mcp` is also published as a plugin from this repository, but it is an **MCP server plugin**, not a skills plugin — its skills are not in this directory. For installation and configuration, see the [MCP Installation Guide](../docs/mcp/installation.md) and [MCP Overview](../docs/mcp/index.md).
20
21
 
@@ -59,7 +60,8 @@ skills/
59
60
  ├── b2c-cli/skills/ # B2C CLI operation skills
60
61
  ├── b2c-ops/skills/ # Administrator/operator runbooks
61
62
  ├── storefront-next/skills/ # Storefront Next skills
62
- └── storefront-next-figma/skills/ # Figma design-kit skill(s)
63
+ ├── storefront-next-figma/skills/ # Figma design-kit skill(s)
64
+ └── b2c-python-sdk/skills/ # Python tooling SDK consumer skill(s)
63
65
  ```
64
66
 
65
67
  Plugins listed in [`plugins.json`](./plugins.json) are zipped to `<name>-skills.zip` and attached to the `b2c-agent-plugins` GitHub release; the B2C CLI downloads those artifacts for `b2c setup skills`. Adding a plugin there is all that's needed for the release workflow to package it.
@@ -70,7 +72,7 @@ Plugins listed in [`plugins.json`](./plugins.json) are zipped to `<name>-skills.
70
72
  - When changing development patterns, update the relevant `b2c/skills/<topic>/SKILL.md`.
71
73
  - Add runbooks under `b2c-ops/skills/` using the shared operational structure in
72
74
  `.agents/skills/mcp-development/references/workflows.md`; link shipped outcomes
73
- from the Operations guide. Register collections in `guidance/collections.json`
75
+ from the Operations guide. Register collections in `packages/b2c-dx-mcp/skills/collections.json`
74
76
  for MCP bundling and in both marketplaces for native installation.
75
77
  - To make a new plugin installable via the B2C CLI, add it to [`plugins.json`](./plugins.json) and register a source in `packages/b2c-tooling-sdk/src/skills/sources.ts` (plus the `SkillSet` type in `types.ts`).
76
78
  - Add a changeset targeting `@salesforce/b2c-agent-plugins` for any skill content changes.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "b2c",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "B2C Commerce development skills including Custom API development guides.",
5
5
  "author": {
6
6
  "name": "Salesforce"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "b2c",
4
- "version": "1.9.0",
4
+ "version": "1.10.0",
5
5
  "description": "B2C Commerce development skills including Custom API development guides.",
6
6
  "author": {
7
7
  "name": "Salesforce"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "b2c-cli",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "B2C CLI Skills for Salesforce Commerce Cloud development.",
5
5
  "author": {
6
6
  "name": "Salesforce"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "b2c-cli",
4
- "version": "1.9.0",
4
+ "version": "1.10.0",
5
5
  "description": "B2C CLI Skills for Salesforce Commerce Cloud development.",
6
6
  "author": {
7
7
  "name": "Salesforce"
@@ -31,6 +31,23 @@ Sources, in resolution order (highest priority first):
31
31
 
32
32
  For unexpected values, inspect resolved configuration and sources with `config_inspect` or `b2c setup inspect`.
33
33
 
34
+ ### Storefront Next Environment Compatibility
35
+
36
+ The resolver accepts these Storefront Next variables as fallbacks, so a project
37
+ can reuse its existing B2C Commerce and SLAS configuration:
38
+
39
+ | Storefront Next variable | Resolved field | Default toolkit variable |
40
+ | -------------------------------------------- | ------------------ | ------------------------- |
41
+ | `PUBLIC__app__commerce__api__clientId` | `slasClientId` | `SFCC_SLAS_CLIENT_ID` |
42
+ | `PUBLIC__app__commerce__api__organizationId` | `tenantId` | `SFCC_TENANT_ID` |
43
+ | `PUBLIC__app__commerce__api__shortCode` | `shortCode` | `SFCC_SHORTCODE` |
44
+ | `COMMERCE_API_SLAS_SECRET` | `slasClientSecret` | `SFCC_SLAS_CLIENT_SECRET` |
45
+ | `PUBLIC__app__defaultSiteId` | `siteId` | `SFCC_SITE_ID` |
46
+ | `MRT_PROJECT` | `mrtProject` | `MRT_PROJECT` |
47
+ | `MRT_TARGET` | `mrtEnvironment` | `MRT_ENVIRONMENT` |
48
+
49
+ Explicit flags and default toolkit variables win over these fallbacks.
50
+
34
51
  ### Shared Global Default
35
52
 
36
53
  Use a shared fallback when the same `dw.json`-format file should work across the CLI, MCP server, and B2C DX VS Code extension:
@@ -263,7 +280,7 @@ The `setup inspect` command displays configuration organized by category:
263
280
  - **Managed Runtime (MRT)**: mrtProject, mrtEnvironment, mrtApiKey, mrtOrigin (if set)
264
281
  - **Project**: configured deployment, content, and documentation defaults
265
282
  - **Metadata**: siteId, instanceName, and projectDirectory (only shown when configured)
266
- - **Safety**: safety configuration (only shown when configured)
283
+ - **Safety**: effective level, level-based confirmation, source column, and rule count after combining instance, global-file, and environment settings (only shown when configured). `SafetyFile` identifies the global file listed in Sources; `SafetyEnv` identifies environment settings. Use `--verbose` for numbered rules in matching order with their sources, or `--json` for the complete effective safety object. Explicit confirmation rules still apply when level confirmation is disabled.
267
284
  - **Sources**: List of all configuration sources that were loaded
268
285
 
269
286
  Each value shows its source in brackets:
@@ -39,7 +39,9 @@ Deletion removes completed execution records; it does not cancel jobs.
39
39
 
40
40
  ```bash
41
41
  b2c job import ./archive --show-log
42
+ b2c job import ./storefront-export.zip --wait-for-storefront
42
43
  b2c job export --site MySite --site-data campaigns_and_promotions --output ./export
44
+ b2c job export --storefront my-storefront --output ./export
43
45
  ```
44
46
 
45
47
  Import/export wait by default and transfer files over WebDAV. Jobs prefer SCAPI
@@ -39,6 +39,9 @@ b2c job export --site RefArch
39
39
  # export a site with specific site data units
40
40
  b2c job export --site RefArch --site-data content,site_preferences
41
41
 
42
+ # export one composable storefront by storefront name
43
+ b2c job export --storefront my-storefront
44
+
42
45
  # export multiple sites
43
46
  b2c job export --site RefArch --site SiteGenesis --site-data campaigns_and_promotions
44
47
 
@@ -98,6 +101,7 @@ Do not require a temporary directory and copy step for export-based migrations.
98
101
  | Flag | Description |
99
102
  | ------------------ | ------------------------------------------------------------------------------ |
100
103
  | `--site` | Site IDs to export (use `--site-data` to pick specific units, defaults to all) |
104
+ | `--storefront` | One composable storefront name |
101
105
  | `--catalog` | Catalog IDs |
102
106
  | `--library` | Library IDs |
103
107
  | `--inventory-list` | Inventory list IDs |
@@ -106,10 +110,12 @@ Do not require a temporary directory and copy step for export-based migrations.
106
110
 
107
111
  **Site data units** (use with `--site-data`):
108
112
 
109
- `ab_tests`, `active_data_feeds`, `all`, `cache_settings`, `campaigns_and_promotions`, `content`, `coupons`, `custom_objects`, `customer_cdn_settings`, `customer_groups`, `distributed_commerce_extensions`, `dynamic_file_resources`, `gift_certificates`, `ocapi_settings`, `payment_methods`, `payment_processors`, `redirect_urls`, `search_settings`, `shipping`, `site_descriptor`, `site_preferences`, `sitemap_settings`, `slots`, `sorting_rules`, `source_codes`, `static_dynamic_alias_mappings`, `stores`, `tax`, `url_rules`
113
+ `ab_tests`, `active_data_feeds`, `all`, `cache_settings`, `campaigns_and_promotions`, `channels`, `commerce_feature_states`, `content`, `coupons`, `custom_objects`, `customer_cdn_settings`, `customer_groups`, `distributed_commerce_extensions`, `dynamic_file_resources`, `gift_certificates`, `ocapi_settings`, `payment_methods`, `payment_processors`, `point_of_sale_channels`, `redirect_urls`, `search_settings`, `shipping`, `site_descriptor`, `site_preferences`, `sitemap_settings`, `slots`, `sorting_rules`, `source_codes`, `static_dynamic_alias_mappings`, `stores`, `tax`, `url_rules`
110
114
 
111
115
  **Global data units** (use with `--global-data`):
112
116
 
113
- `access_roles`, `all`, `csc_settings`, `csrf_whitelists`, `custom_preference_groups`, `custom_quota_settings`, `custom_types`, `geolocations`, `global_custom_objects`, `job_schedules`, `job_schedules_deprecated`, `locales`, `meta_data`, `oauth_providers`, `ocapi_settings`, `page_meta_tags`, `preferences`, `price_adjustment_limits`, `services`, `sorting_rules`, `static_resources`, `system_type_definitions`, `users`, `webdav_client_permissions`
117
+ `access_roles`, `all`, `csc_settings`, `csrf_whitelists`, `custom_preference_groups`, `custom_quota_settings`, `custom_types`, `event_routing`, `geolocations`, `global_custom_objects`, `job_schedules`, `job_schedules_deprecated`, `locales`, `meta_data`, `oauth_providers`, `ocapi_settings`, `page_meta_tags`, `preferences`, `price_adjustment_limits`, `services`, `sorting_rules`, `static_resources`, `system_type_definitions`, `users`, `webdav_client_permissions`
118
+
119
+ For full control over the export configuration (including `assignments`, `catalog_static_resources`, `library_static_resources`, and `customer_lists`), use `--data-units` with a JSON string matching the `ExportDataUnitsConfiguration` shape. The `storefronts` object is keyed by storefront name and may select only one storefront.
114
120
 
115
- For full control over the export configuration (including `catalog_static_resources`, `library_static_resources`, and `customer_lists`), use `--data-units` with a JSON string matching the `ExportDataUnitsConfiguration` shape.
121
+ The `storefronts` export data unit requires B2C Commerce 26.10 or later. Failed storefront exports include a version note alongside the original error; check the instance version when the server rejects this data unit.
@@ -23,12 +23,24 @@ b2c job import existing-archive.zip --remote
23
23
  # show job log on failure
24
24
  b2c job import ./my-site-data --show-log
25
25
 
26
+ # wait for Storefront Next post-import setup after the archive import succeeds
27
+ b2c job import ./storefront-export.zip --wait-for-storefront
28
+
26
29
  # import only a subset of a directory (extra positionals are paths/globs
27
30
  # resolved against the directory; preserves layout inside the archive)
28
31
  b2c job import ./my-site-data sites/RefArch libraries/mylib
29
32
  b2c job import ./my-site-data 'libraries/**'
30
33
  ```
31
34
 
35
+ `--wait-for-storefront` snapshots existing setup-job executions before import,
36
+ waits for the archive import to succeed, and then polls briefly for the newly
37
+ triggered `sfcc-post-import-setup-storefront` execution before waiting for it to
38
+ finish. It cannot be combined with `--no-wait`. If no new setup execution appears
39
+ within 60 seconds, the CLI checks available import logs and includes `[DATAERROR]`
40
+ entries in the timeout error. Logs are downloaded for this diagnostic only on
41
+ discovery timeout. Resolve any reported data errors before retrying; if logs are
42
+ unavailable or contain no data errors, inspect the import contents and recent job executions.
43
+
32
44
  ### Import Sets
33
45
 
34
46
  `job import-set` first applies site import/export archives from discovered cartridge `metadata/` sources, then applies archives in `./migrations`, and skips archives already recorded on the target instance:
@@ -17,15 +17,16 @@ Run `b2c setup inspect` to see the resolved configuration and which source provi
17
17
 
18
18
  ### MRT Backends (legacy vs SCAPI)
19
19
 
20
- Most MRT commands run against the legacy MRT Cloud API (API key). Two commands — `mrt bundle history` and `mrt bundle deploy <bundleId>` — can also run over the SCAPI MRT backend. Choose with `--mrt-backend` (`MRT_BACKEND` / `SFCC_MRT_BACKEND`, or `mrtBackend` in `dw.json`):
20
+ Most MRT commands run against the legacy MRT Cloud API (API key). Several commands can also run over the SCAPI MRT backend: `mrt bundle history`, `mrt bundle list`, `mrt bundle deploy` (both the local-build push and deploying an existing `<bundleId>`), and the `mrt env var` family (`list` / `set` / `push` / `delete`). Choose with `--mrt-backend` (`MRT_BACKEND` / `SFCC_MRT_BACKEND`, or `mrtBackend` in `dw.json`):
21
21
 
22
- - `auto` (default) — use SCAPI when it's configured (`--short-code` + `--tenant-id` + client-credentials or JWT Bearer auth; scopes `sfcc.storefront.deployments[.rw]`), otherwise legacy. Falls back to legacy on safe pre-execution errors.
22
+ - `auto` (default) — use SCAPI when it's configured (`--short-code` + `--tenant-id` + client-credentials or JWT Bearer auth), otherwise legacy. Falls back to legacy on safe pre-execution errors. Each command requests its own scopes: bundle commands use `sfcc.storefront.deployments[.rw]`; env var commands use `sfcc.storefront.environments[.rw]` (reads accept either tier, writes require `.rw`).
23
23
  - `legacy` — always the MRT Cloud API.
24
- - `scapi` — always SCAPI, with no fallback; errors if prerequisites are missing. Also errors on unsupported commands and on the local-build push path (`deploy` with no bundle ID).
24
+ - `scapi` — always SCAPI, with no fallback; errors if prerequisites are missing. Also errors on unsupported commands (every MRT command except the bundle and env var commands above).
25
25
 
26
26
  Notes:
27
27
 
28
- - Under `--json`, these commands emit the **serving backend's native shape** (legacy `{count, next, previous, deployments}` vs SCAPI `{limit, offset, total, data}`). The human table is normalized; `--json` is not. Pin `legacy` or `scapi` when a script needs a stable shape.
28
+ - Under `--json`, these commands emit the **serving backend's native shape** (e.g. `bundle history` is legacy `{count, next, previous, deployments}` vs SCAPI `{limit, offset, total, data}`; `env var list` is legacy `{count, variables}` vs the SCAPI native environment-variables map). The human table is normalized; `--json` is not. Pin `legacy` or `scapi` when a script needs a stable shape.
29
+ - Env vars over SCAPI use the Storefront Environments API. `set` and `delete` apply a merge-PATCH (only the keys you pass change; `delete` sends the key with a `null` value); values are always masked by both backends. `push` resolves the backend once from its initial read and pins every write to it, so a single `push` never crosses backends.
29
30
  - Legacy-only flags (`--api-key`, `--cloud-origin` / `-u`, `--credentials-file` / `-c`) are ignored — with a warning — when SCAPI serves the request.
30
31
  - `--storefront` (long) and `-s` (short) are aliases of `--project` / `-p` — the SCAPI storefront ID is the project slug, so all four are interchangeable on every `mrt` command. On `mrt project create` this flag sets the new project's slug (auto-generated from the name if omitted); `mrt bundle save` uses `-d` for `--save-dir`, keeping `-s` free for the storefront alias.
31
32
 
@@ -31,11 +31,22 @@ b2c mrt bundle deploy -p my-storefront --ssr-param SSRProxyPath=/api
31
31
  b2c mrt bundle deploy -p my-storefront \
32
32
  --ssr-param SSRProxyPath=/api \
33
33
  --ssr-param SSRTimeout=30000
34
+
35
+ # Push a local build and deploy it via the SCAPI backend
36
+ b2c mrt bundle deploy -p my-storefront -e staging --mrt-backend scapi
37
+
38
+ # Push via SCAPI with a custom v2 archive layout
39
+ b2c mrt bundle deploy -p my-storefront --mrt-backend scapi --root-dir bld --match-mode ignore_missing
40
+
41
+ # Push via the legacy v2 endpoint (opt in with --v2)
42
+ b2c mrt bundle deploy -p my-storefront --mrt-backend legacy --v2 --match-mode ignore_missing
34
43
  ```
35
44
 
45
+ **Bundle format:** SCAPI always uploads the v2 format. The legacy backend defaults to v1; pass `--v2` to upload through the legacy v2 endpoint (upload, plus a separate deploy when `-e` is given). `--root-dir`, `--config-path`, and `--match-mode` control the v2 archive layout and only take effect on a v2 upload — on a legacy v1 push they are ignored and the command warns (pass `--v2` to enable them). `b2c mrt bundle deploy --v2` performs the same v2 upload as `b2c mrt bundle upload-v2` and can also deploy in one step.
46
+
36
47
  ### Deploy Existing Bundle
37
48
 
38
- Deploying an existing bundle (with a bundle ID) is backend-aware — it honors `--mrt-backend` (`auto` / `legacy` / `scapi`). Pushing a local build is legacy-pinned. See the "MRT Backends" section in the skill overview.
49
+ Both the local-build push and deploying an existing bundle (with a bundle ID) are backend-aware — they honor `--mrt-backend` (`auto` / `legacy` / `scapi`). For a local-build push under `auto`, a safe SCAPI upload failure falls back to legacy, but once the bundle is uploaded a later deploy failure is not retried on legacy (so a bundle is never uploaded twice). See the "MRT Backends" section in the skill overview.
39
50
 
40
51
  ```bash
41
52
  # Deploy existing bundle by ID
@@ -55,6 +66,10 @@ b2c mrt bundle deploy 12345 -p my-storefront -e production --mrt-backend scapi -
55
66
  | `--build-dir`, `-b` | Path to build directory | `build` |
56
67
  | `--ssr-only` | Server-only file patterns | `ssr.js,ssr.mjs,server/**/*` |
57
68
  | `--ssr-shared` | Shared file patterns | `static/**/*,client/**/*` |
69
+ | `--v2` | Use the v2 bundle format/endpoint (SCAPI always uses v2; opt in on legacy) | `false` |
70
+ | `--root-dir` | Archive path prefix for built files and the config file (v2 uploads only) | `bld` |
71
+ | `--config-path` | In-archive config file path, relative to `--root-dir` (v2 uploads only) | `.mrt/config.json` |
72
+ | `--match-mode` | Handling of SSR patterns matching no files — `strict` or `ignore_missing` (v2 uploads only) | `strict` |
58
73
  | `--node-version`, `-n` | Node.js version for SSR | `24.x` |
59
74
  | `--ssr-param` | SSR parameters (key=value, can repeat) | |
60
75
 
@@ -102,16 +117,19 @@ b2c mrt bundle upload-v2 -p my-storefront --dependencies @./deps.json --cc-overr
102
117
 
103
118
  ## Bundle List
104
119
 
105
- List bundles in a project.
120
+ List bundles in a project. Backend-aware (`--mrt-backend`); under `--json` it returns the serving backend's native response verbatim (legacy vs SCAPI shapes differ).
106
121
 
107
122
  ```bash
108
123
  b2c mrt bundle list --project my-storefront
109
124
  b2c mrt bundle list -p my-storefront --limit 10
110
125
  b2c mrt bundle list -p my-storefront --offset 20
111
126
  b2c mrt bundle list -p my-storefront --json
127
+
128
+ # Force the SCAPI backend
129
+ b2c mrt bundle list -p my-storefront --mrt-backend scapi
112
130
  ```
113
131
 
114
- **Output columns:** Bundle ID, Message, Status, Created
132
+ **Output columns:** Bundle ID, Message, Status, User, Created
115
133
 
116
134
  ## Bundle History
117
135
 
@@ -110,11 +110,16 @@ b2c mrt env b2c -p my-storefront -e production --clear-sites
110
110
 
111
111
  ## Environment Variables
112
112
 
113
+ The `mrt env var` commands (`list` / `set` / `push` / `delete`) are backend-aware: they honor `--mrt-backend` (`auto` / `legacy` / `scapi`) and, over SCAPI, use the Storefront Environments API (scopes `sfcc.storefront.environments` for reads, `sfcc.storefront.environments.rw` for writes). See the [MRT Backends](../SKILL.md#mrt-backends-legacy-vs-scapi) section for backend selection. Values are always masked by both backends. `set` and `delete` apply a merge-PATCH — only the keys you pass change (`delete` sends the key with a `null` value); other variables are preserved. Under `--json`, each command returns the serving backend's native shape.
114
+
113
115
  ### List Variables
114
116
 
115
117
  ```bash
116
118
  b2c mrt env var list --project my-storefront --environment production
117
119
  b2c mrt env var list -p my-storefront -e staging --json
120
+
121
+ # Force the SCAPI backend
122
+ b2c mrt env var list -p my-storefront -e staging --mrt-backend scapi
118
123
  ```
119
124
 
120
125
  ### Set Variables
@@ -130,6 +135,9 @@ b2c mrt env var set API_KEY=secret DEBUG=true FEATURE_FLAG=enabled \
130
135
  # Value with spaces (use quotes)
131
136
  b2c mrt env var set "MESSAGE=hello world" -p my-storefront -e production
132
137
 
138
+ # Force the SCAPI backend
139
+ b2c mrt env var set API_KEY=secret -p my-storefront -e staging --mrt-backend scapi
140
+
133
141
  # Using environment variables for auth
134
142
  export MRT_API_KEY=your-api-key
135
143
  export MRT_PROJECT=my-storefront
@@ -137,10 +145,25 @@ export MRT_ENVIRONMENT=staging
137
145
  b2c mrt env var set MY_VAR=value
138
146
  ```
139
147
 
148
+ ### Push Variables from a .env File
149
+
150
+ Diff a local `.env` file against the remote environment and apply the additions/updates (remote-only variables are not deleted). `push` resolves the backend once from its initial read and pins every write to it; over SCAPI the changes are applied as a single merge-PATCH.
151
+
152
+ ```bash
153
+ # Push ./.env, with confirmation prompt
154
+ b2c mrt env var push -p my-storefront -e production
155
+
156
+ # Push a custom file, skipping confirmation, over SCAPI
157
+ b2c mrt env var push -p my-storefront -e staging --file config/.env --yes --mrt-backend scapi
158
+ ```
159
+
140
160
  ### Delete Variable
141
161
 
142
162
  ```bash
143
163
  b2c mrt env var delete MY_VAR -p my-storefront -e production
164
+
165
+ # Force the SCAPI backend
166
+ b2c mrt env var delete MY_VAR -p my-storefront -e production --mrt-backend scapi
144
167
  ```
145
168
 
146
169
  ## URL Redirects
@@ -37,11 +37,28 @@ The `--root` flag specifies the WebDAV directory:
37
37
  - `catalogs` - Product catalogs
38
38
  - `libraries` - Content libraries
39
39
  - `static` - Static resources
40
+ - `dynamic` - Site-specific files, including Velocity templates
40
41
  - `logs` - Application logs
41
42
  - `securitylogs` - Security logs
42
43
 
43
44
  ## Examples
44
45
 
46
+ ### Dynamic Site Files
47
+
48
+ Use `--root=dynamic` with the site ID as the first remote path segment. For example,
49
+ `MySite/mockData/mock.vm` resolves to `Sites/Dynamic/MySite/mockData/mock.vm`.
50
+ This location holds site-specific files independently of code versions, including
51
+ Velocity templates used by `dw.template.Velocity.renderTemplate()`.
52
+
53
+ ```bash
54
+ b2c webdav ls --root=dynamic MySite/
55
+ b2c webdav mkdir --root=dynamic MySite/mockData
56
+ b2c webdav put --root=dynamic ./mock.vm MySite/mockData/
57
+ b2c webdav get --root=dynamic MySite/mockData/mock.vm -o ./mock.vm
58
+ ```
59
+
60
+ The same root and site-prefixed paths work with `rm`, `zip`, and `unzip`.
61
+
45
62
  ### List Files
46
63
 
47
64
  ```bash
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "b2c-ops",
3
- "version": "1.9.0",
3
+ "version": "1.10.0",
4
4
  "description": "B2C Commerce operator and administrator runbooks for job health, checkout and failed orders, and incident triage.",
5
5
  "author": {
6
6
  "name": "Salesforce"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "b2c-ops",
4
- "version": "1.9.0",
4
+ "version": "1.10.0",
5
5
  "description": "B2C Commerce operator and administrator runbooks for job health, checkout and failed orders, and incident triage.",
6
6
  "author": {
7
7
  "name": "Salesforce"
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "b2c-python-sdk",
3
+ "version": "0.1.0",
4
+ "description": "Consuming the salesforce-b2c-tooling-sdk Python SDK — authenticate to B2C Commerce, resolve dw.json config, and call OCAPI/SCAPI/WebDAV clients and operations from scripts or notebooks.",
5
+ "author": {
6
+ "name": "Salesforce"
7
+ },
8
+ "homepage": "https://salesforcecommercecloud.github.io/b2c-developer-tooling/",
9
+ "repository": "https://github.com/SalesforceCommerceCloud/b2c-developer-tooling",
10
+ "license": "Apache-2.0",
11
+ "keywords": [
12
+ "salesforce",
13
+ "b2c-commerce",
14
+ "commerce-cloud",
15
+ "python",
16
+ "sdk",
17
+ "scapi",
18
+ "ocapi"
19
+ ],
20
+ "skills": "./skills/",
21
+ "interface": {
22
+ "displayName": "B2C Python SDK",
23
+ "shortDescription": "Use the Salesforce B2C Commerce Python tooling SDK from your AI assistant.",
24
+ "longDescription": "Skills for consuming the salesforce-b2c-tooling-sdk Python SDK from scripts and Jupyter notebooks — install and import it, choose an authentication mechanism, resolve config from dw.json, and call the OCAPI/SCAPI/WebDAV clients and higher-level operations (code deploy, jobs, sites, catalogs, sandboxes, metrics, logs, SLAS shopper tokens).",
25
+ "developerName": "Salesforce",
26
+ "category": "Productivity",
27
+ "capabilities": [
28
+ "Read"
29
+ ],
30
+ "logo": "./assets/logo.svg",
31
+ "composerIcon": "./assets/logo.svg",
32
+ "brandColor": "#0D9DDA",
33
+ "websiteURL": "https://salesforcecommercecloud.github.io/b2c-developer-tooling/",
34
+ "defaultPrompt": [
35
+ "Write a Python script that deploys the cartridges in ./cartridges using the B2C tooling SDK",
36
+ "Use the Python SDK to authenticate from my dw.json and run a job",
37
+ "Show me how to mint a SLAS guest shopper token with the Python SDK",
38
+ "Read the latest error logs from my instance with the Python tooling SDK"
39
+ ]
40
+ }
41
+ }
@@ -0,0 +1,35 @@
1
+ # b2c-python-sdk
2
+
3
+ Agent skills for **consuming** the [`salesforce-b2c-tooling-sdk`](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/tree/main/python/b2c-tooling-sdk) Python SDK — authenticate to a Salesforce B2C Commerce instance, resolve config from `dw.json`, and call the OCAPI/SCAPI/WebDAV clients and higher-level operations from Python scripts and Jupyter notebooks.
4
+
5
+ > This plugin is for developers **writing Python code against the SDK**. To *develop the SDK itself*, see the SDK's own `python/b2c-tooling-sdk/CLAUDE.md`. To drive the B2C **CLI**, use the `b2c-cli` plugin instead.
6
+
7
+ Part of the [B2C Developer Tooling](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling) marketplace.
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ # Claude Code
13
+ claude plugin marketplace add SalesforceCommerceCloud/b2c-developer-tooling
14
+ claude plugin install b2c-python-sdk@b2c-developer-tooling
15
+
16
+ # GitHub Copilot CLI
17
+ copilot plugin marketplace add SalesforceCommerceCloud/b2c-developer-tooling
18
+ copilot plugin install b2c-python-sdk@b2c-developer-tooling
19
+ ```
20
+
21
+ **VS Code (GitHub Copilot):** Command Palette → **Chat: Install Plugin From Source** → enter the repo `SalesforceCommerceCloud/b2c-developer-tooling`.
22
+
23
+ **Codex:** open the repo as a workspace, restart Codex, then install from the **B2C Developer Tooling** marketplace in the plugin directory.
24
+
25
+ For file-copy install to any supported IDE, use `b2c setup skills b2c-python-sdk`. See the [install guide](https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/agent-skills) for details.
26
+
27
+ ## What's included
28
+
29
+ - **`using-b2c-tooling-sdk`** — installing and importing the SDK, choosing between the async and sync facades, picking an authentication mechanism, resolving config from `dw.json`, the operations-vs-clients error contract, and minting SLAS shopper tokens. Includes a full symbol catalog in [`references/api-catalog.md`](./skills/using-b2c-tooling-sdk/references/api-catalog.md).
30
+
31
+ See [`skills/`](./skills/) for the full list.
32
+
33
+ ## License
34
+
35
+ Apache-2.0. See the [repo LICENSE](https://github.com/SalesforceCommerceCloud/b2c-developer-tooling/blob/main/LICENSE.txt).
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 92 64">
3
+ <defs>
4
+ <style>
5
+ .cls-1, .cls-2 {
6
+ fill: #fff;
7
+ }
8
+
9
+ .cls-3 {
10
+ fill: #0d9dda;
11
+ }
12
+
13
+ .cls-2 {
14
+ fill-rule: evenodd;
15
+ }
16
+ </style>
17
+ </defs>
18
+ <path class="cls-3" d="m38.33,6.98c2.95-3.07,7.05-4.98,11.59-4.98,6.04,0,11.3,3.37,14.11,8.36,2.44-1.09,5.14-1.7,7.97-1.7,10.89,0,19.71,8.9,19.71,19.89s-8.83,19.89-19.71,19.89c-1.33,0-2.63-.13-3.88-.39-2.47,4.4-7.18,7.38-12.58,7.38-2.26,0-4.4-.52-6.3-1.45-2.5,5.89-8.34,10.02-15.13,10.02s-13.11-4.48-15.43-10.76c-1.01.21-2.06.33-3.14.33-8.43,0-15.26-6.9-15.26-15.42,0-5.71,3.07-10.69,7.63-13.36-.94-2.16-1.46-4.55-1.46-7.05C6.45,7.94,14.4,0,24.21,0,29.97,0,35.09,2.74,38.33,6.98Z"/>
19
+ <g>
20
+ <path class="cls-1" d="m13.53,33.19c-.06.15.02.18.04.21.17.12.35.21.52.32.93.49,1.81.64,2.73.64,1.88,0,3.04-1,3.04-2.6v-.03c0-1.48-1.32-2.02-2.55-2.41l-.16-.05c-.93-.3-1.73-.56-1.73-1.18v-.03c0-.52.47-.91,1.2-.91.81,0,1.77.27,2.38.61,0,0,.18.12.25-.06.04-.1.35-.94.38-1.03.04-.1-.03-.17-.09-.21-.71-.43-1.68-.72-2.69-.72h-.19c-1.72,0-2.92,1.04-2.92,2.52v.03c0,1.57,1.32,2.07,2.56,2.43l.2.06c.9.28,1.68.52,1.68,1.15v.03c0,.58-.51,1.01-1.32,1.01-.32,0-1.33,0-2.42-.7-.13-.08-.21-.13-.31-.19-.05-.03-.19-.09-.25.08l-.37,1.03Z"/>
21
+ <path class="cls-1" d="m40.98,33.19c-.06.15.02.18.04.21.17.12.35.21.52.32.93.49,1.81.64,2.73.64,1.88,0,3.04-1,3.04-2.6v-.03c0-1.48-1.31-2.02-2.55-2.41l-.16-.05c-.93-.3-1.73-.56-1.73-1.18v-.03c0-.52.47-.91,1.2-.91.81,0,1.77.27,2.38.61,0,0,.18.12.25-.06.04-.1.35-.94.38-1.03.04-.1-.03-.17-.09-.21-.71-.43-1.68-.72-2.69-.72h-.19c-1.72,0-2.92,1.04-2.92,2.52v.03c0,1.57,1.32,2.07,2.56,2.43l.2.06c.9.28,1.68.52,1.68,1.15v.03c0,.58-.51,1.01-1.32,1.01-.32,0-1.33,0-2.42-.7-.13-.08-.21-.13-.31-.19-.03-.02-.19-.08-.25.08l-.37,1.03Z"/>
22
+ <path class="cls-1" d="m61.29,28.36c-.15-.52-.39-.98-.71-1.36-.32-.38-.72-.69-1.2-.91-.48-.22-1.04-.34-1.68-.34s-1.2.11-1.68.34c-.48.22-.88.53-1.2.91-.32.38-.56.84-.71,1.36-.15.52-.23,1.08-.23,1.68s.08,1.17.23,1.68c.15.52.39.98.71,1.36.32.38.73.69,1.2.91.48.22,1.04.33,1.68.33s1.2-.11,1.68-.33c.48-.22.88-.52,1.2-.91.32-.38.56-.84.71-1.36.15-.52.23-1.08.23-1.68s-.08-1.17-.23-1.68m-1.57,1.68c0,.91-.17,1.62-.5,2.13-.33.5-.83.74-1.52.74s-1.19-.24-1.52-.74c-.33-.51-.5-1.22-.5-2.13s.17-1.62.49-2.12c.33-.5.82-.74,1.52-.74s1.19.24,1.52.74c.33.5.5,1.21.5,2.12"/>
23
+ <path class="cls-2" d="m74.15,32.67c-.05-.15-.2-.09-.2-.09-.23.09-.47.17-.73.21-.26.04-.55.06-.86.06-.76,0-1.36-.23-1.79-.67-.43-.45-.68-1.17-.67-2.14,0-.89.22-1.55.6-2.06.38-.51.96-.76,1.74-.76.65,0,1.14.07,1.66.24,0,0,.12.05.18-.11.14-.38.24-.65.39-1.07.04-.12-.06-.17-.1-.18-.2-.08-.68-.21-1.04-.26-.34-.05-.73-.08-1.17-.08-.66,0-1.24.11-1.75.34-.5.22-.92.53-1.26.91-.34.38-.59.84-.76,1.36-.17.52-.26,1.08-.26,1.69,0,1.3.35,2.35,1.04,3.12.69.77,1.73,1.16,3.09,1.16.8,0,1.62-.16,2.22-.4,0,0,.11-.05.06-.19l-.38-1.06Z"/>
24
+ <path class="cls-2" d="m82.16,28.07c-.13-.5-.46-1.01-.68-1.24-.34-.37-.67-.62-1.01-.77-.43-.19-.95-.31-1.52-.31-.66,0-1.26.11-1.75.34-.49.23-.9.54-1.22.93-.32.39-.56.85-.72,1.38-.15.52-.23,1.09-.23,1.69s.08,1.18.24,1.69c.16.52.42.97.77,1.35.35.38.8.68,1.33.88.53.21,1.18.31,1.92.31,1.53,0,2.34-.35,2.67-.53.06-.03.11-.09.05-.25l-.35-.97c-.05-.14-.2-.09-.2-.09-.38.14-.92.39-2.18.39-.82,0-1.43-.24-1.81-.62-.39-.39-.58-.96-.62-1.76h5.3s.14,0,.15-.13c0-.06.18-1.09-.16-2.28Zm-5.27,1.11c.07-.5.21-.92.43-1.25.32-.5.82-.77,1.52-.77s1.15.27,1.48.77c.22.33.31.76.35,1.25h-3.78Z"/>
25
+ <path class="cls-2" d="m39.72,28.07c-.13-.5-.46-1.01-.68-1.24-.34-.37-.67-.62-1.01-.77-.43-.19-.95-.31-1.52-.31-.66,0-1.26.11-1.75.34-.49.23-.9.54-1.22.93-.32.39-.56.85-.72,1.38-.15.52-.23,1.09-.23,1.69s.08,1.18.24,1.69c.16.52.42.97.77,1.35.35.38.8.68,1.33.88.53.21,1.18.31,1.92.31,1.53,0,2.34-.35,2.67-.53.06-.03.11-.09.04-.25l-.35-.97c-.05-.14-.2-.09-.2-.09-.38.14-.92.39-2.18.39-.82,0-1.43-.24-1.81-.62-.39-.39-.58-.96-.62-1.76h5.3s.14,0,.15-.13c0-.06.18-1.09-.16-2.28Zm-5.27,1.11c.07-.5.21-.92.43-1.25.33-.5.82-.77,1.52-.77s1.15.27,1.49.77c.22.33.31.76.35,1.25h-3.78Z"/>
26
+ <path class="cls-1" d="m25.1,28.92c-.22-.02-.49-.02-.83-.02-.45,0-.89.06-1.31.17-.41.11-.79.28-1.11.51-.32.23-.58.52-.77.87-.19.35-.28.76-.28,1.22s.08.88.24,1.21c.16.33.39.61.69.83.29.21.66.37,1.08.47.42.09.89.14,1.4.14.54,0,1.09-.05,1.61-.13.52-.09,1.16-.22,1.33-.26.18-.04.37-.09.37-.09.13-.03.12-.17.12-.17v-4.85c0-1.06-.29-1.85-.85-2.34-.56-.49-1.37-.73-2.43-.73-.4,0-1.04.05-1.42.13,0,0-1.16.22-1.63.6,0,0-.1.06-.05.21l.38,1.01c.05.13.17.09.17.09,0,0,.04-.02.09-.04,1.02-.55,2.31-.54,2.31-.54.57,0,1.01.12,1.31.34.29.22.44.56.44,1.26v.22c-.45-.07-.87-.1-.87-.1Zm-2.11,3.72c-.21-.17-.24-.21-.31-.31-.1-.16-.16-.39-.16-.69,0-.47.15-.8.47-1.03,0,0,.46-.4,1.54-.38.76,0,1.44.12,1.44.12v2.41h0s-.67.14-1.43.19c-1.08.06-1.56-.31-1.55-.31Z"/>
27
+ <path class="cls-2" d="m67.84,26.19c.04-.12-.04-.18-.08-.19-.09-.03-.54-.13-.89-.15-.67-.04-1.04.07-1.37.22-.33.15-.69.39-.9.66v-.65c0-.09-.06-.16-.15-.16h-1.36c-.09,0-.15.07-.15.16v7.91c0,.09.07.16.16.16h1.39c.09,0,.16-.07.16-.16v-3.95c0-.53.06-1.06.18-1.39.11-.33.27-.59.46-.78.19-.19.41-.32.65-.39.25-.08.52-.1.71-.1.28,0,.58.07.58.07.1.01.16-.05.19-.14.09-.24.35-.97.4-1.11Z"/>
28
+ <path class="cls-2" d="m54.77,22.53c-.17-.05-.32-.09-.52-.12-.2-.04-.45-.06-.72-.06-.96,0-1.71.27-2.24.81-.53.53-.89,1.34-1.06,2.4l-.06.36h-1.2s-.15,0-.18.15l-.2,1.1c-.01.11.03.17.17.17h1.17l-1.19,6.63c-.09.53-.2.97-.32,1.31-.12.33-.23.57-.37.75-.14.17-.26.3-.48.37-.18.06-.39.09-.62.09-.13,0-.3-.02-.43-.05-.13-.02-.19-.05-.29-.09,0,0-.14-.05-.19.09-.04.11-.36.97-.39,1.08-.04.1.02.19.08.21.16.06.27.09.48.14.29.07.54.07.78.07.49,0,.93-.07,1.3-.2.37-.13.69-.37.98-.68.31-.34.5-.7.69-1.19.18-.48.34-1.08.47-1.78l1.19-6.76h1.75s.15,0,.18-.15l.2-1.1c.01-.11-.03-.17-.17-.17h-1.69s.09-.63.28-1.2c.08-.24.24-.43.37-.57.13-.13.28-.22.44-.28.17-.05.36-.08.57-.08.16,0,.32.02.44.04.16.03.23.05.27.07.17.05.2,0,.23-.08l.41-1.11c.04-.12-.06-.17-.1-.18Z"/>
29
+ <path class="cls-2" d="m31.1,33.99c0,.09-.06.16-.15.16h-1.41c-.09,0-.15-.07-.15-.16v-11.31c0-.09.06-.16.15-.16h1.41c.09,0,.15.07.15.16v11.31Z"/>
30
+ </g>
31
+ </svg>
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
+ "name": "b2c-python-sdk",
4
+ "version": "0.1.0",
5
+ "description": "Consuming the salesforce-b2c-tooling-sdk Python SDK — authenticate to B2C Commerce, resolve dw.json config, and call OCAPI/SCAPI/WebDAV clients and operations from scripts or notebooks.",
6
+ "author": {
7
+ "name": "Salesforce"
8
+ },
9
+ "homepage": "https://salesforcecommercecloud.github.io/b2c-developer-tooling/",
10
+ "repository": "https://github.com/SalesforceCommerceCloud/b2c-developer-tooling",
11
+ "license": "Apache-2.0",
12
+ "keywords": [
13
+ "salesforce",
14
+ "b2c-commerce",
15
+ "commerce-cloud",
16
+ "python",
17
+ "sdk",
18
+ "scapi",
19
+ "ocapi"
20
+ ],
21
+ "extensions": {
22
+ "com.openai": {
23
+ "interface": {
24
+ "displayName": "B2C Python SDK",
25
+ "shortDescription": "Use the Salesforce B2C Commerce Python tooling SDK from your AI assistant.",
26
+ "longDescription": "Skills for consuming the salesforce-b2c-tooling-sdk Python SDK from scripts and Jupyter notebooks — install and import it, choose an authentication mechanism, resolve config from dw.json, and call the OCAPI/SCAPI/WebDAV clients and higher-level operations (code deploy, jobs, sites, catalogs, sandboxes, metrics, logs, SLAS shopper tokens).",
27
+ "developerName": "Salesforce",
28
+ "category": "Productivity",
29
+ "capabilities": [
30
+ "Read"
31
+ ],
32
+ "logo": "./assets/logo.svg",
33
+ "composerIcon": "./assets/logo.svg",
34
+ "brandColor": "#0D9DDA",
35
+ "websiteURL": "https://salesforcecommercecloud.github.io/b2c-developer-tooling/",
36
+ "defaultPrompt": [
37
+ "Write a Python script that deploys the cartridges in ./cartridges using the B2C tooling SDK",
38
+ "Use the Python SDK to authenticate from my dw.json and run a job",
39
+ "Show me how to mint a SLAS guest shopper token with the Python SDK",
40
+ "Read the latest error logs from my instance with the Python tooling SDK"
41
+ ]
42
+ }
43
+ }
44
+ }
45
+ }