larksuite/cli · error
%s.Params[%d] must be a non-blank trimmed param
Error message
%s.Params[%d] must be a non-blank trimmed param
What it means
Thrown when a param entry in Authorization conditional scopes is empty or has leading/trailing whitespace. Param names must be non-blank and trimmed so they can be matched exactly against compiled input fields.
Source
Thrown at shortcuts/common/typed_compile_contract.go:69
return nil, fmt.Errorf("Input.Relations[%d] duplicates an earlier relation", i)
}
seen[key] = struct{}{}
result = append(result, compiled)
}
return result, nil
}
func compileAuthorization(definition typedAuthorizationDefinition, fields []compiledInputField, fieldByName map[string]int) error {
for identity, authorization := range definition.Identities {
for i, conditional := range authorization.ConditionalScopes {
path := fmt.Sprintf("Authorization.%s.ConditionalScopes[%d]", identity, i)
if len(conditional.Params) > 0 && conditional.When == "" {
return fmt.Errorf("%s.Params requires agent-readable When text", path)
}
seen := make(map[string]struct{}, len(conditional.Params))
for j, param := range conditional.Params {
if param == "" || param != strings.TrimSpace(param) {
return fmt.Errorf("%s.Params[%d] must be a non-blank trimmed param", path, j)
}
fieldIndex, ok := fieldByName[param]
if !ok {
return fmt.Errorf("%s references unknown param --%s", path, param)
}
if fields[fieldIndex].cli.Hidden {
return fmt.Errorf("%s references hidden param --%s; use a public canonical param", path, param)
}
if _, duplicate := seen[param]; duplicate {
return fmt.Errorf("%s.Params contains duplicate param --%s", path, param)
}
seen[param] = struct{}{}
}
}
}
return nil
}
View on GitHub (pinned to 7fd6ef3c07)
Solutions
- Trim whitespace or remove the blank entry from Params
- strings.TrimSpace each element when params are derived from user-supplied config
Example fix
// before
Params: strings.Split("--chat-id, --message-id", ",") // ["--chat-id", " --message-id"]
// after
Params: []string{"--chat-id", "--message-id"} // pre-trimmed literals Defensive patterns
Strategy: validation
Validate before calling
for j, p := range cs.Params {
if strings.TrimSpace(p) == "" || p != strings.TrimSpace(p) {
return fmt.Errorf("param %d must be trimmed and non-blank", j)
}
} Try / catch
if err := common.CompileTypedDefinition(def); err != nil {
return fmt.Errorf("untrimmed param in conditional scopes: %w", err)
} Prevention
- Always strings.TrimSpace elements derived from split/config strings
- Use literal flag names, not strings built at runtime
- Keep param lists as code literals reviewed in diffs
When it happens
Trigger: ConditionalScopes entry with Params containing "" or " --doc-id " (untrimmed).
Common situations: Building param lists from split strings without trimming; placeholder empty strings left in scaffolding; trailing comma/space artifacts in hand-edited slices.
Related errors
- %s.Params requires agent-readable When text
- %s references unknown param --%s
- %s references hidden param --%s; use a public canonical para
- %s.Params contains duplicate param --%s
- Metadata.Authorization.IdentityOrder must contain each decla
AI-assisted analysis of larksuite/cli@7fd6ef3c07 (2026-09-04).
Data as JSON: /api/errors/d16229e58ef49d74.
Report an issue: GitHub.