| 333 | } |
| 334 | |
| 335 | func (d *Daemon) bootTasks(ctx context.Context, state *bootState) error { |
| 336 | if state == nil || state.registry == nil || state.sessions == nil { |
| 337 | return nil |
| 338 | } |
| 339 | |
| 340 | store, ok := state.registry.(taskStore) |
| 341 | if !ok { |
| 342 | state.logger.Warn("daemon: task runtime skipped because registry does not implement task store") |
| 343 | return nil |
| 344 | } |
| 345 | |
| 346 | bridge, err := newTaskSessionBridge( |
| 347 | state.sessions, |
| 348 | d.homePaths.HomeDir, |
| 349 | state.logger, |
| 350 | withTaskSessionContextOverlay(state.situationContext), |
| 351 | ) |
| 352 | if err != nil { |
| 353 | return err |
| 354 | } |
| 355 | reentry, err := bootHarnessReentryBridge(ctx, state) |
| 356 | if err != nil { |
| 357 | return fmt.Errorf("daemon: create harness reentry bridge: %w", err) |
| 358 | } |
| 359 | wakeBridge, err := newTaskWakeBridge(ctx, state.sessions, state.logger) |
| 360 | if err != nil { |
| 361 | return fmt.Errorf("daemon: create task wake bridge: %w", err) |
| 362 | } |
| 363 | reviewRequests := newRunReviewRequestedForwarder() |
| 364 | eventObserver, bridgeNotifications, networkTaskStatus := d.composeTaskEventObserver(state, store, reentry) |
| 365 | manager, err := taskpkg.NewManager( |
| 366 | taskManagerOptions( |
| 367 | store, |
| 368 | bridge, |
| 369 | wakeBridge, |
| 370 | eventObserver, |
| 371 | state.notifier, |
| 372 | reviewRequests, |
| 373 | state.cfg.Task.Recovery, |
| 374 | state.cfg.Autonomy.Scheduler, |
| 375 | state.cfg.Autonomy.BlockRecurrenceLimit, |
| 376 | )..., |
| 377 | ) |
| 378 | if err != nil { |
| 379 | return fmt.Errorf("daemon: create task manager: %w", err) |
| 380 | } |
| 381 | detached, err := newHarnessDetachedWorkBridge(manager, store, state.sessions) |
| 382 | if err != nil { |
| 383 | return fmt.Errorf("daemon: create detached harness bridge: %w", err) |
| 384 | } |
| 385 | |
| 386 | state.tasks = &taskRuntime{ |
| 387 | manager: manager, |
| 388 | store: store, |
| 389 | detached: detached, |
| 390 | reentry: reentry, |
| 391 | wakeBridge: wakeBridge, |
| 392 | bridgeNotifications: bridgeNotifications, |