wavetermdev/waveterm · error

opening config file

Error message

opening config file: %w

What it means

The CreateBlockCommand RPC used to open the config file editor block in the Wave UI failed; editConfigRun wraps it as "opening config file". The connection was established but block creation was rejected or timed out (2000ms).

Solutions

  1. Verify the tab id is still valid (tab still open)
  2. Retry the command after checking `wsh status`
  3. Inspect the wrapped inner error for the server's rejection reason
  4. Restart the Wave terminal connection if the RPC layer is stale

Example fix

// before
wsh editconfig  # tab closed -> error
// after
# open/switch to a live tab, then
wsh editconfig
Defensive patterns

Strategy: retry

Validate before calling

if os.Getenv("WAVETERM_TABID") == "" {
    return errors.New("no tab context; CreateBlock would fail")
}

Try / catch

if err := wsh.EditConfig(); err != nil {
    if strings.Contains(err.Error(), "opening config file") {
        time.Sleep(1 * time.Second)
        err = wsh.EditConfig() // retry after transient RPC failure
    }
}

Prevention

When it happens

Trigger: CreateBlockCommand returning an error: invalid tab id, unknown controller type, server rejecting the blockdef, or RPC timeout/disconnection during creation.

Common situations: WAVETERM_TABID referencing a tab that was closed; wsh connected to a stale server after a Wave restart; transient network issue on a remote connection.

Related errors


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

Appendix: source

Thrown at cmd/wsh/cmd/wshcmd-editconfig.go:60

	if tabId == "" {
		return fmt.Errorf("no WAVETERM_TABID env var set")
	}

	wshCmd := &wshrpc.CommandCreateBlockData{
		TabId: tabId,
		BlockDef: &waveobj.BlockDef{
			Meta: map[string]interface{}{
				waveobj.MetaKey_View: "waveconfig",
				waveobj.MetaKey_File: configFile,
			},
		},
		Magnified: editConfigMagnified,
		Focused:   true,
	}

	_, err := wshclient.CreateBlockCommand(RpcClient, *wshCmd, &wshrpc.RpcOpts{Timeout: 2000})
	if err != nil {
		return fmt.Errorf("opening config file: %w", err)
	}
	return nil
}

View on GitHub (pinned to a4447c1563)