forcedotcom / forcedotcom/cli

sf agent mcp asset replace --assets null throws raw TypeError instead of InvalidShape

Open Beginner friendly
#3,625 4 comments 0 reactions 0 assignees View on GitHub
area:afdx bug investigating owned by another team validated
Dominant language
No language data
Stars
571
Forks
80
Avg merge
2d 15h
Merged PRs (30d)
3

Description

### Summary

`sf agent mcp asset replace` throws an uncaught `TypeError` when `--assets` is valid JSON with the value `null`.

`null` is valid JSON, but it is not a valid asset input shape. The command should reject it with the existing `InvalidShape` error instead of exposing an internal JavaScript error:

```text
Cannot read properties of null (reading 'assets')
```

The failure occurs while parsing the CLI input, before an API request is made.

### Steps To Reproduce

A separate reproduction repository is not required because this can be reproduced directly with the Salesforce CLI command.

With an authenticated target org, run:

```powershell
sf agent mcp asset replace --mcp-server-id --assets "null" -o --json
```

The command returns a result similar to:

```json
{
"name": "TypeError",
"message": "Cannot read properties of null (reading 'assets')",
"exitCode": 10,
"context": "ApiCatalogMcpServerAssetReplace"
}
```

### Expected result

Because `null` is valid JSON but does not match either supported asset shape, the command should reject it with the existing `InvalidShape` error.

For example, invalid object shapes are already handled as `InvalidShape`.

### Actual result

The command attempts to access `.assets` on `null` and throws a raw JavaScript `TypeError`:

```text
Cannot read properties of null (reading 'assets')
```

### Additional information

The issue appears to be in the client-side input validation for `agent mcp asset replace`.

The command currently distinguishes between an array and an object containing an `assets` property. When the parsed JSON value is `null`, it attempts to read `.assets` before the existing `InvalidShape` validation can run.

I reproduced this locally and also added a regression test against the current `salesforcecli/plugin-agent` source. Before the fix, the full unit test suite resulted in:

```text
447 passing
1 failing

AssertionError: expected 'TypeError' to equal 'InvalidShape'
```

After guarding the property access, the suite passes with:

```text
448 passing
```

`yarn build` also completes successfully.

`agent mcp` is currently in Developer Preview.

### System Information

Shell: Windows PowerShell

```json
{
"architecture": "win32-x64",
"cliVersion": "@salesforce/cli/2.146.3",
"nodeVersion": "node-v22.23.1",
"osVersion": "Windows_NT 10.0.26200",
"rootPath": "C:\\Program Files\\sf\\client",
"shell": "cmd.exe",
"pluginVersions": [
"@oclif/plugin-autocomplete 3.2.54 (core)",
"@oclif/plugin-commands 4.1.61 (core)",
"@oclif/plugin-help 6.2.55 (core)",
"@oclif/plugin-not-found 3.2.90 (core)",
"@oclif/plugin-plugins 5.4.86 (core)",
"@oclif/plugin-search 1.2.54 (core)",
"@oclif/plugin-update 4.7.56 (core)",
"@oclif/plugin-version 2.2.52 (core)",
"@oclif/plugin-warn-if-update-available 3.1.70 (core)",
"@oclif/plugin-which 3.2.59 (core)",
"@salesforce/cli 2.146.3 (core)",
"agent 1.45.0 (core)",
"apex 3.9.40 (core)",
"api 1.3.54 (core)",
"auth 4.4.9 (core)",
"data 4.0.115 (core)",
"deploy-retrieve 3.24.61 (core)",
"info 3.4.155 (core)",
"limits 3.3.106 (core)",
"marketplace 1.3.44 (core)",
"org 5.11.26 (core)",
"packaging 2.30.6 (core)",
"schema 3.3.131 (core)",
"settings 2.4.101 (core)",
"sobject 1.4.125 (core)",
"telemetry 3.8.33 (core)",
"templates 56.20.0 (core)",
"trust 3.8.43 (core)",
"user 3.10.9 (core)"
]
}
```

Contributor guide

Open the contributing guide

Research direction

Start in the client-side input validation for `agent mcp asset replace` in the plugin-agent source and run its unit test suite with `--assets "null"`. Compare the null path with the existing invalid-object-shape handling. Done means null produces `InvalidShape`, the regression suite passes with 448 tests, and `yarn build` succeeds.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, node.js
Domain
cli, testing-qa
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
78/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.