sf agent mcp asset replace --assets null throws raw TypeError instead of InvalidShape
- 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
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