wavetermdev/waveterm · error
invalid origin value '%s': must be 'start' or 'end'
Error message
invalid origin value '%s': must be 'start' or 'end'
What it means
The optional "origin" parameter controls where offset counting starts and must be exactly "start" or "end". Any other string is rejected at parse time so the callback never applies an undefined seek semantic.
Source
Thrown at pkg/aiusechat/tools_readfile.go:53
if input == nil {
return nil, fmt.Errorf("input is required")
}
if err := utilfn.ReUnmarshal(result, input); err != nil {
return nil, fmt.Errorf("invalid input format: %w", err)
}
if result.Filename == "" {
return nil, fmt.Errorf("missing filename parameter")
}
if result.Origin == nil {
origin := "start"
result.Origin = &origin
}
if *result.Origin != "start" && *result.Origin != "end" {
return nil, fmt.Errorf("invalid origin value '%s': must be 'start' or 'end'", *result.Origin)
}
if result.Offset == nil {
offset := 0
result.Offset = &offset
}
if *result.Offset < 0 {
return nil, fmt.Errorf("offset must be non-negative, got %d", *result.Offset)
}
if result.Count == nil {
count := ReadFileDefaultLineCount
result.Count = &count
}
if *result.Count < 1 {
return nil, fmt.Errorf("count must be at least 1, got %d", *result.Count)View on GitHub (pinned to a4447c1563)
Solutions
- Use origin "start" (default) or "end" verbatim, lowercase.
- Omit "origin" entirely to get the default "start".
- Validate against the enum before calling: origin == "start" || origin == "end".
Example fix
// before
{"filename": "/tmp/a.txt", "origin": "beginning"}
// after
{"filename": "/tmp/a.txt", "origin": "start"} Defensive patterns
Strategy: validation
Validate before calling
if origin !== undefined && origin !== 'start' && origin !== 'end' {
throw new Error("origin must be 'start' or 'end'")
} Type guard
func validOrigin(s string) bool { return s == "start" || s == "end" } Try / catch
params, err := parseReadTextFileInput(input)
if err != nil && strings.HasPrefix(err.Error(), "invalid origin value") {
// coerce: default to "start" and retry
} Prevention
- Only emit the literals "start" or "end"
- Omit origin when default (start) is intended
- Lowercase-normalize any computed origin value
When it happens
Trigger: Passing origin values like "beginning", "top", "0", "middle", or locale variants; uppercase "Start" also fails because the check is case-sensitive.
Common situations: Agents paraphrasing enum values; ports from other file-read APIs using "begin"/"end" conventions; prompt templates hard-coding the wrong token.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- input is required
- missing filename parameter
- offset must be non-negative, got %d
- count must be at least 1, got %d
- integer overflow
AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01).
Data as JSON: /api/errors/8a6505c85be8c947.
Report an issue: GitHub.