| 110 | |
| 111 | func (m *SessionManager) Pin(sessionID string, pinned bool) (*session.Meta, error) { |
| 112 | return m.store.Pin(sessionID, pinned) |
| 113 | } |
| 114 | |
| 115 | func (m *SessionManager) Shutdown() { |
| 116 | m.mu.Lock() |
| 117 | sessions := make([]*SessionController, 0, len(m.sessions)) |
| 118 | for _, controller := range m.sessions { |
| 119 | sessions = append(sessions, controller) |
| 120 | } |
| 121 | m.mu.Unlock() |
| 122 | for _, controller := range sessions { |
| 123 | controller.Shutdown() |
| 124 | } |
| 125 | } |
| 126 | |
| 127 | func (m *SessionManager) createWithState(sessionID, cwd string, state *agent.AgentState) (*SessionController, error) { |
| 128 | cfg := m.baseConfig |
| 129 | if strings.TrimSpace(cwd) != "" && cwd != cfg.CWD { |
| 130 | cfg = config.NewConfigForCWD(cwd) |
| 131 | applyPinnedDaemonConfig(&cfg, m.baseConfig) |
| 132 | } |
| 133 | if err := apppaths.EnsureProjectManifest(cfg.ProjectPaths, time.Now()); err != nil { |
| 134 | return nil, err |
| 135 | } |
| 136 | engine := agent.NewQueryEngine(&cfg) |
| 137 | if recovery := m.store.LoadSkillRecovery(sessionID); recovery != nil && engine.CoreEngine != nil { |
| 138 | engine.CoreEngine.ImportSkillRecoverySnapshot(recovery) |
| 139 | engine.CoreEngine.MarkSkillHistoryCompacted("main") |
| 140 | } |