kovidgoyal/kitty · error
got a remote data response form the terminal without an open
Error message
got a remote data response form the terminal without an open remote dir
What it means
The kitten received a remote drop-data response from the terminal while drop_status.open_remote_dir is nil, i.e. no remote directory drop is in progress. This indicates a protocol/state desync or an unexpected response.
Source
Thrown at kittens/dnd/drop.go:808
dnd.drop_status.data_requests.in_flight_count++
} else {
dnd.drop_status.data_requests.pending = append(dnd.drop_status.data_requests.pending, cmd)
}
}
func (dnd *dnd) data_request_completed() {
dnd.drop_status.data_requests.in_flight_count--
if len(dnd.drop_status.data_requests.pending) > 0 && dnd.drop_status.data_requests.in_flight_count < max_inflight_data_rquests {
dnd.lp.QueueDnDData(dnd.drop_status.data_requests.pending[0])
dnd.drop_status.data_requests.in_flight_count++
dnd.drop_status.data_requests.pending = dnd.drop_status.data_requests.pending[1:]
}
}
func (dnd *dnd) on_remote_drop_data(cmd DC) (err error) {
drop_status := &dnd.drop_status
if drop_status.open_remote_dir == nil {
return fmt.Errorf("got a remote data response form the terminal without an open remote dir")
}
if cmd.X == 0 && cmd.Y == 0 && cmd.Yp == 0 {
if drop_status.current_remote_entry == nil {
return fmt.Errorf("got a remote data response form the terminal without a current remote entry")
}
} else {
num := utils.IfElse(cmd.Yp != 0 && cmd.Yp != 1, cmd.X, cmd.Y) - 1
if num < 0 || num >= len(drop_status.open_remote_dir.children) {
return fmt.Errorf("got a remote data response from the terminal for an entry that does not exist")
}
drop_status.current_remote_entry = drop_status.open_remote_dir.children[num]
}
e := drop_status.current_remote_entry
if e.dest == nil {
e.item_type = cmd.Xp
switch cmd.Xp {
case 0:
f, err := utils.CreateExclusiveAt(e.base_dir.handle, e.name, 0o666)View on GitHub (pinned to 6d5d0c4406)
Solutions
- Update kitty so kitten and terminal protocol versions match
- Retry the drop; a late/stale response after an aborted drop is often transient
- Report upstream with --debug-input logs if reproducible
Defensive patterns
Strategy: type-guard
Type guard
func hasOpenRemoteDir(ds *drop_status) bool { return ds.open_remote_dir != nil } Try / catch
Ignore stale responses when no remote dir is open (log-and-continue) instead of propagating the error.
Prevention
- Reset drop state atomically when a remote drop is aborted
- Use matched kitten/terminal versions
When it happens
Trigger: on_remote_drop_data(cmd) is called via on_drop_data (root_remote_dir != nil) but open_remote_dir was never set — e.g. the open-dir request failed or was reset before the response arrived.
Common situations: Terminal/kitten version mismatch, late response arriving after the drop was aborted, or a bug in remote directory traversal state management.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- got a remote data response form the terminal without a curre
- terminal responded with drag source error: %s
- terminal asked for drag data from MIME list with out of boun
- terminal sent a duplicate drag data request
- terminal asked for drag data from URI list but no list prese
AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27).
Data as JSON: /api/errors/92e2922b1546400f.
Report an issue: GitHub.