Files
tutti/packages/agent/host/conformance/deleted_session_lifecycle.go
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

54 lines
1.9 KiB
Go

package conformance
import (
"context"
"fmt"
agenthost "github.com/tutti-os/tutti/packages/agent/host"
)
func runLosslessDeletedSessionRestore(ctx context.Context, driver DeletedSessionLifecycleDriver) error {
ref := agenthost.SessionRef{WorkspaceID: "workspace-1", AgentSessionID: "session-restore"}
if err := driver.Reset(ctx, Fixture{Session: &SessionSeed{
WorkspaceID: ref.WorkspaceID, AgentSessionID: ref.AgentSessionID,
Provider: "codex", ProviderSessionID: "provider-session-restore",
Title: "Recoverable", Cwd: "/workspace", Live: false,
}}); err != nil {
return err
}
before := driver.Metrics()
deleted, err := driver.DeleteSession(ctx, ref)
if err != nil {
return err
}
if !deleted.Deleted || !deleted.CanonicalRemoved {
return fmt.Errorf("delete result = %#v, want canonical tombstone", deleted)
}
page, err := driver.ListDeletedSessions(ctx, agenthost.ListDeletedSessionsInput{WorkspaceID: ref.WorkspaceID})
if err != nil {
return err
}
if len(page.Sessions) != 1 || page.Sessions[0].AgentSessionID != ref.AgentSessionID || !page.Sessions[0].Restorable {
return fmt.Errorf("deleted session page = %#v, want one restorable component", page)
}
restored, err := driver.RestoreDeletedSession(ctx, agenthost.RestoreDeletedSessionInput(ref))
if err != nil {
return err
}
if !restored.Restored || len(restored.RestoredSessionIDs) != 1 || restored.RestoredSessionIDs[0] != ref.AgentSessionID {
return fmt.Errorf("restore result = %#v", restored)
}
after := driver.Metrics()
if after.StartCalls != before.StartCalls || after.ResumeCalls != before.ResumeCalls {
return fmt.Errorf("restore started provider work: before=%#v after=%#v", before, after)
}
canonical, err := driver.GetCanonicalSession(ctx, ref)
if err != nil {
return err
}
if canonical.SessionID != ref.AgentSessionID || canonical.ProviderSessionID != "provider-session-restore" {
return fmt.Errorf("restored canonical session = %#v", canonical)
}
return nil
}