Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,50 @@ struct SessionSourcePersistenceTests {
#expect(data.externalSessionKey == nil)
}

@Test
func chatSession_resetClearsScheduledOriginForNextManualChat() {
let scheduleId = UUID()
let dispatchId = UUID()
let session = ChatSession()
session.source = .schedule
session.externalSessionKey = scheduleId.uuidString
session.dispatchTaskId = dispatchId
session.sessionId = dispatchId
session.title = "Scheduled report"

session.reset()

#expect(session.source == .chat)
#expect(session.sourcePluginId == nil)
#expect(session.externalSessionKey == nil)
#expect(session.dispatchTaskId == nil)
#expect(session.sessionId == nil)
#expect(session.turns.isEmpty)
}

@Test
func chatSession_firstSaveAfterResetPersistsManualChatOrigin() async throws {
try await ChatHistoryTestStorage.run {
let scheduleId = UUID()
let dispatchId = UUID()
let session = ChatSession()
session.source = .schedule
session.externalSessionKey = scheduleId.uuidString
session.dispatchTaskId = dispatchId
session.sessionId = dispatchId

session.reset()
session.turns = [ChatTurn(role: .user, content: "manual follow-up")]
session.save()

let data = session.toSessionData()
#expect(data.source == .chat)
#expect(data.sourcePluginId == nil)
#expect(data.externalSessionKey == nil)
#expect(data.dispatchTaskId == nil)
}
}

@Test
func executionContext_reattach_restoresIdAndOriginAndTurns() async {
let originalId = UUID()
Expand Down
4 changes: 4 additions & 0 deletions Packages/OsaurusCore/Views/Chat/ChatView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -572,6 +572,10 @@ final class ChatSession: ObservableObject {
title = "New Chat"
createdAt = Date()
updatedAt = Date()
source = .chat
sourcePluginId = nil
externalSessionKey = nil
dispatchTaskId = nil
isDirty = false

// Reset agent-loop UI state.
Expand Down
Loading