返回 DeepSeek-Reasonix
remote_runtime_wire.go
根目录 / desktop / remote_runtime_wire.go
1 package main
2
3 import (
4 "bytes"
5 "encoding/json"
6 "fmt"
7
8 "reasonix/internal/event"
9 )
10
11 // Decode before converting to value fields: missing false/zero facts are not
12 // observations of an idle runtime. Unknown extension fields remain compatible.
13 func decodeRemoteRuntimeState(data json.RawMessage) (event.RuntimeStateSnapshot, error) {
14 var fields map[string]json.RawMessage
15 var state event.RuntimeStateSnapshot
16 if err := json.Unmarshal(data, &fields); err != nil {
17 return state, err
18 }
19 for _, key := range []string{"schemaVersion", "runtimeEpoch", "revision", "phase", "running", "pendingPrompt", "cancelRequested", "cancellable", "backgroundJobs"} {
20 value, found := fields[key]
21 if !found || bytes.Equal(bytes.TrimSpace(value), []byte("null")) {
22 return state, fmt.Errorf("runtime state missing %s", key)
23 }
24 }
25 if err := json.Unmarshal(data, &state); err != nil {
26 return state, err
27 }
28 if !validRuntimeState(state) {
29 return state, fmt.Errorf("invalid runtime state")
30 }
31 return state, nil
32 }
33
34 func (p *remoteTabStatusPayload) UnmarshalJSON(data []byte) error {
35 type plain remoteTabStatusPayload
36 var wire struct {
37 *plain
38 State json.RawMessage `json:"runtimeState"`
39 }
40 wire.plain = (*plain)(p)
41 if err := json.Unmarshal(data, &wire); err != nil {
42 return err
43 }
44 if len(wire.State) == 0 {
45 return nil
46 }
47 state, err := decodeRemoteRuntimeState(wire.State)
48 if err != nil {
49 return err
50 }
51 p.RuntimeState = &state
52 return nil
53 }
54
54 lines GO