Skip to content

Commit a044aad

Browse files
committed
refactor: merge reconciler and runtime and divide debugger and agent
1 parent 4ecd159 commit a044aad

27 files changed

+1624
-1304
lines changed

cmd/pkg/cli/apply.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ func runApplyCommand(config ApplyConfig) func(cmd *cobra.Command, args []string)
6161
return err
6262
}
6363

64-
for _, spc := range specs {
65-
if spc.GetNamespace() == "" {
66-
spc.SetNamespace(namespace)
64+
for _, sp := range specs {
65+
if sp.GetNamespace() == "" {
66+
sp.SetNamespace(namespace)
6767
}
6868
}
6969

@@ -74,12 +74,12 @@ func runApplyCommand(config ApplyConfig) func(cmd *cobra.Command, args []string)
7474

7575
var inserts []spec.Spec
7676
var updates []spec.Spec
77-
for _, spc := range specs {
78-
if match := resourcebase.Match(spc, exists...); len(match) > 0 {
79-
spc.SetID(match[0].GetID())
80-
updates = append(updates, spc)
77+
for _, sp := range specs {
78+
if match := resourcebase.Match(sp, exists...); len(match) > 0 {
79+
sp.SetID(match[0].GetID())
80+
updates = append(updates, sp)
8181
} else {
82-
inserts = append(inserts, spc)
82+
inserts = append(inserts, sp)
8383
}
8484
}
8585

cmd/pkg/cli/debug.go

Lines changed: 79 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cli
22

33
import (
44
"bytes"
5+
"context"
56
"encoding/json"
67
"fmt"
78
"strconv"
@@ -12,6 +13,7 @@ import (
1213
tea "github.com/charmbracelet/bubbletea"
1314
"github.com/gofrs/uuid"
1415
"github.com/siyul-park/uniflow/cmd/pkg/resource"
16+
"github.com/siyul-park/uniflow/pkg/agent"
1517
"github.com/siyul-park/uniflow/pkg/debug"
1618
"github.com/siyul-park/uniflow/pkg/port"
1719
"github.com/siyul-park/uniflow/pkg/process"
@@ -27,11 +29,10 @@ type Debugger struct {
2729

2830
// debugModel represents the state and logic for the debugger UI.
2931
type debugModel struct {
30-
view debugView
31-
input textinput.Model
32-
debugger *debug.Debugger
33-
queue []*debug.Breakpoint
34-
breakpoints []*debug.Breakpoint
32+
view debugView
33+
input textinput.Model
34+
agent *agent.Agent
35+
debugger *debug.Debugger
3536
}
3637

3738
// debugView defines an interface for different debug view types.
@@ -42,8 +43,8 @@ type debugView interface {
4243
// Various debug view types
4344
type (
4445
errDebugView struct{ err error }
45-
frameDebugView struct{ frame *debug.Frame }
46-
framesDebugView struct{ frames []*debug.Frame }
46+
frameDebugView struct{ frame *agent.Frame }
47+
framesDebugView struct{ frames []*agent.Frame }
4748
breakpointDebugView struct {
4849
id int
4950
breakpoint *debug.Breakpoint
@@ -66,14 +67,15 @@ var _ debugView = (*processDebugView)(nil)
6667
var _ debugView = (*processesDebugView)(nil)
6768

6869
// NewDebugger initializes a new Debugger with an input model and UI.
69-
func NewDebugger(debugger *debug.Debugger, options ...tea.ProgramOption) *Debugger {
70+
func NewDebugger(agent *agent.Agent, options ...tea.ProgramOption) *Debugger {
7071
ti := textinput.New()
7172
ti.Prompt = "(debug) "
7273
ti.Focus()
7374

7475
model := &debugModel{
7576
input: ti,
76-
debugger: debugger,
77+
agent: agent,
78+
debugger: debug.NewDebugger(agent),
7779
}
7880
program := tea.NewProgram(model, options...)
7981

@@ -157,181 +159,132 @@ func (m *debugModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
157159
}
158160
}
159161

160-
breakpoint := debug.NewBreakpoint(
162+
bp := debug.NewBreakpoint(
161163
debug.WithSymbol(sb),
162164
debug.WithInPort(inPort),
163165
debug.WithOutPort(outPort),
164166
)
165-
m.debugger.Watch(breakpoint)
167+
m.debugger.AddBreakpoint(bp)
166168

167-
m.breakpoints = append(m.breakpoints, breakpoint)
168-
m.view = &breakpointDebugView{id: len(m.breakpoints) - 1, breakpoint: breakpoint}
169+
bps := m.debugger.Breakpoints()
170+
m.view = &breakpointDebugView{id: len(bps) - 1, breakpoint: bp}
169171

170-
return m, m.nextFrame(breakpoint)
172+
return m, tea.Cmd(func() tea.Msg {
173+
if m.debugger.Pause(context.Background()) {
174+
if m.debugger.Breakpoint() == bp {
175+
return m.debugger.Frame()
176+
}
177+
}
178+
return nil
179+
})
171180
case "continue", "c":
172-
var breakpoint *debug.Breakpoint
173-
if len(m.queue) > 0 {
174-
breakpoint = m.queue[0]
175-
m.queue = m.queue[1:]
176-
}
177-
if breakpoint == nil {
178-
m.view = nil
179-
return m, nil
180-
}
181-
182-
var frame *debug.Frame
183-
if len(m.queue) > 0 {
184-
breakpoint := m.queue[0]
185-
frame = breakpoint.Frame()
186-
}
187-
188-
if frame == nil {
189-
m.view = nil
190-
} else {
191-
m.view = &frameDebugView{frame: frame}
192-
}
181+
m.view = nil
193182

194-
return m, m.nextFrame(breakpoint)
183+
return m, tea.Cmd(func() tea.Msg {
184+
if m.debugger.Step(context.Background()) {
185+
return m.debugger.Frame()
186+
}
187+
return nil
188+
})
195189
case "delete", "d":
196-
var breakpoint *debug.Breakpoint
190+
bps := m.debugger.Breakpoints()
191+
192+
var bp *debug.Breakpoint
197193
if len(args) > 1 {
198-
if i, err := strconv.Atoi(args[1]); err == nil && i < len(m.breakpoints) {
199-
breakpoint = m.breakpoints[i]
194+
if i, err := strconv.Atoi(args[1]); err == nil && i < len(bps) {
195+
bp = bps[i]
200196
}
201-
} else if len(m.queue) > 0 {
202-
breakpoint = m.queue[0]
203-
}
204-
if breakpoint == nil {
205-
m.view = nil
206-
return m, nil
197+
} else {
198+
bp = m.debugger.Breakpoint()
207199
}
208200

209-
m.debugger.Unwatch(breakpoint)
210-
breakpoint.Close()
211-
212-
for i := 0; i < len(m.queue); i++ {
213-
b := m.queue[i]
214-
if b == breakpoint {
215-
m.queue = append(m.queue[:i], m.queue[i+1:]...)
216-
i--
217-
}
218-
}
219-
for i := 0; i < len(m.breakpoints); i++ {
220-
b := m.breakpoints[i]
221-
if b == breakpoint {
222-
m.breakpoints = append(m.breakpoints[:i], m.breakpoints[i+1:]...)
223-
i--
224-
}
225-
}
201+
m.debugger.RemoveBreakpoint(bp)
226202

227203
m.view = nil
228204
return m, nil
229205
case "breakpoints", "bps":
230-
m.view = &breakpointsDebugView{breakpoints: m.breakpoints}
206+
bps := m.debugger.Breakpoints()
207+
208+
m.view = &breakpointsDebugView{breakpoints: bps}
231209
return m, nil
232210
case "breakpoint", "bp":
233-
var breakpoint *debug.Breakpoint
211+
bps := m.debugger.Breakpoints()
212+
213+
var bp *debug.Breakpoint
234214
if len(args) > 1 {
235-
if i, err := strconv.Atoi(args[1]); err == nil && i < len(m.breakpoints) {
236-
breakpoint = m.breakpoints[i]
215+
if i, err := strconv.Atoi(args[1]); err == nil && i < len(bps) {
216+
bp = bps[i]
237217
}
238-
} else if len(m.queue) > 0 {
239-
breakpoint = m.queue[0]
218+
} else {
219+
bp = m.debugger.Breakpoint()
240220
}
241-
if breakpoint == nil {
221+
if bp == nil {
242222
m.view = nil
243223
return m, nil
244224
}
245-
m.view = &breakpointDebugView{breakpoint: breakpoint}
225+
226+
m.view = &breakpointDebugView{breakpoint: bp}
246227
return m, nil
247228
case "symbols", "sbs":
248-
var symbols []*symbol.Symbol
249-
for _, id := range m.debugger.Symbols() {
250-
if sb, ok := m.debugger.Symbol(id); ok {
251-
symbols = append(symbols, sb)
252-
}
253-
}
254-
m.view = &symbolsDebugView{symbols: symbols}
229+
sbs := m.agent.Symbols()
230+
231+
m.view = &symbolsDebugView{symbols: sbs}
255232
return m, nil
256233
case "symbol", "sb":
257234
var sb *symbol.Symbol
258235
if len(args) > 1 {
259236
sb = m.findSymbol(args[1])
260-
} else if len(m.queue) > 0 {
261-
breakpoint := m.queue[0]
262-
frame := breakpoint.Frame()
263-
if frame != nil {
264-
sb = frame.Symbol
265-
} else {
266-
sb = breakpoint.Symbol()
267-
}
237+
} else {
238+
sb = m.debugger.Symbol()
268239
}
269240
if sb == nil {
270241
m.view = nil
271242
return m, nil
272243
}
244+
273245
m.view = &symbolDebugView{symbol: sb}
274246
return m, nil
275247
case "processes", "procs":
276-
var procs []*process.Process
277-
for _, id := range m.debugger.Processes() {
278-
if proc, ok := m.debugger.Process(id); ok {
279-
procs = append(procs, proc)
280-
}
281-
}
248+
procs := m.agent.Processes()
249+
282250
m.view = &processesDebugView{processes: procs}
283251
return m, nil
284-
285252
case "process", "proc":
286253
var proc *process.Process
287254
if len(args) > 1 {
288255
id, _ := uuid.FromString(args[1])
289-
proc, _ = m.debugger.Process(id)
290-
} else if len(m.queue) > 0 {
291-
breakpoint := m.queue[0]
292-
frame := breakpoint.Frame()
293-
if frame != nil {
294-
proc = frame.Process
295-
} else {
296-
proc = breakpoint.Process()
297-
}
256+
proc, _ = m.agent.Process(id)
257+
} else {
258+
proc = m.debugger.Process()
298259
}
299260
if proc == nil {
300261
m.view = nil
301262
return m, nil
302263
}
264+
303265
m.view = &processDebugView{process: proc}
304266
return m, nil
305267
case "frame", "frm":
306-
var frame *debug.Frame
307-
if len(m.queue) > 0 {
308-
breakpoint := m.queue[0]
309-
frame = breakpoint.Frame()
310-
}
268+
frame := m.debugger.Frame()
311269
if frame == nil {
312270
m.view = nil
313271
return m, nil
314272
}
273+
315274
m.view = &frameDebugView{frame: frame}
316275
return m, nil
317276
case "frames", "frms":
318277
var proc *process.Process
319278
if len(args) > 1 {
320279
id, _ := uuid.FromString(args[1])
321-
proc, _ = m.debugger.Process(id)
322-
} else if len(m.queue) > 0 {
323-
breakpoint := m.queue[0]
324-
frame := breakpoint.Frame()
325-
if frame != nil {
326-
proc = frame.Process
327-
} else {
328-
proc = breakpoint.Process()
329-
}
280+
proc, _ = m.agent.Process(id)
281+
} else {
282+
proc = m.debugger.Process()
330283
}
331284

332-
var frames []*debug.Frame
285+
var frames []*agent.Frame
333286
if proc != nil {
334-
frames, _ = m.debugger.Frames(proc.ID())
287+
frames, _ = m.agent.Frames(proc.ID())
335288
}
336289

337290
if frames == nil {
@@ -342,15 +295,11 @@ func (m *debugModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
342295
return m, nil
343296
}
344297
}
345-
case *debug.Breakpoint:
346-
m.queue = append(m.queue, msg)
347-
if len(m.queue) == 1 {
348-
frame := msg.Frame()
349-
if frame == nil {
350-
m.view = nil
351-
} else {
352-
m.view = &frameDebugView{frame: frame}
353-
}
298+
case *agent.Frame:
299+
if msg == nil {
300+
m.view = nil
301+
} else {
302+
m.view = &frameDebugView{frame: msg}
354303
}
355304
return m, nil
356305
}
@@ -360,14 +309,9 @@ func (m *debugModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
360309

361310
// Close resets the model state and stops watching the current breakpoint.
362311
func (m *debugModel) Close() {
363-
for _, b := range m.breakpoints {
364-
m.debugger.Unwatch(b)
365-
b.Close()
366-
}
367-
368312
m.view = nil
369-
m.queue = nil
370-
m.breakpoints = nil
313+
m.debugger.Close()
314+
m.agent.Close()
371315
}
372316

373317
func (m *debugModel) nextInput(msg tea.Msg) tea.Cmd {
@@ -376,16 +320,9 @@ func (m *debugModel) nextInput(msg tea.Msg) tea.Cmd {
376320
return cmd
377321
}
378322

379-
func (m *debugModel) nextFrame(breakpoint *debug.Breakpoint) tea.Cmd {
380-
return tea.Cmd(func() tea.Msg {
381-
breakpoint.Next()
382-
return breakpoint
383-
})
384-
}
385-
386323
func (m *debugModel) findSymbol(key string) *symbol.Symbol {
387-
for _, id := range m.debugger.Symbols() {
388-
if sb, ok := m.debugger.Symbol(id); ok && (sb.ID().String() == key || sb.Name() == key) {
324+
for _, sb := range m.agent.Symbols() {
325+
if sb.ID().String() == key || sb.Name() == key {
389326
return sb
390327
}
391328
}

0 commit comments

Comments
 (0)