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

  1. Use origin "start" (default) or "end" verbatim, lowercase.
  2. Omit "origin" entirely to get the default "start".
  3. 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

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


AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01). Data as JSON: /api/errors/8a6505c85be8c947. Report an issue: GitHub.