(ctx context.Context, input string)
| 194 | seq atomic.Int64 |
| 195 | } |
| 196 | |
| 197 | func NewSessionController(sessionID string, cfg config.Config, engine *agent.QueryEngine, state *agent.AgentState, store *session.Store, emit func(PushEvent)) *SessionController { |
| 198 | controller := &SessionController{ |
| 199 | id: sessionID, |
| 200 | cfg: cfg, |
| 201 | engine: engine, |
| 202 | store: store, |
| 203 | state: state, |
| 204 | } |
| 205 | controller.bridge = NewWSRendererBridge(sessionID, emit, controller.nextSeq) |
| 206 | controller.ui = luminaui.NewUiRuntime(engine, controller.bridge) |
| 207 | if engine != nil && engine.CoreEngine != nil { |
| 208 | engine.CoreEngine.StateObserver = controller.observeState |
| 209 | } |
| 210 | return controller |
| 211 | } |
| 212 | |
| 213 | func (c *SessionController) ID() string { |
| 214 | return c.id |
| 215 | } |
| 216 | |
| 217 | func (c *SessionController) RuntimeConfig() config.Config { |
| 218 | c.stateMu.Lock() |
| 219 | state := c.state |
| 220 | c.stateMu.Unlock() |
| 221 | cfg := c.cfg |
| 222 | if state != nil && state.YoloEnabled() { |
| 223 | cfg.Yolo = true |
| 224 | } |
| 225 | return cfg |
| 226 | } |
| 227 | |
| 228 | func (c *SessionController) Mount() { |
| 229 | c.stateMu.Lock() |
| 230 | state := c.state |
| 231 | c.stateMu.Unlock() |
| 232 | c.ui.MountStateSnapshot(state) |
| 233 | } |
no test coverage detected