Files
tutti/packages/agent/daemon/hostadapter/runtime_side_conversation.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

71 lines
2.4 KiB
Go

package hostadapter
import (
"context"
agentruntime "github.com/tutti-os/tutti/packages/agent/daemon/runtime"
host "github.com/tutti-os/tutti/packages/agent/host"
)
type sideConversationRuntimeBackend interface {
SideCapabilitiesForSource(context.Context, agentruntime.Session) (agentruntime.SideConversationCapabilities, error)
OpenSide(context.Context, agentruntime.SideConversationOpenInput) (agentruntime.SideConversationOpenResult, error)
}
func (a *RuntimeController) ResolveSideConversation(
ctx context.Context,
source host.ProviderRuntimeSession,
) (host.SideConversationCapabilities, error) {
if err := a.requireBackend(); err != nil {
return host.SideConversationCapabilities{}, err
}
backend, ok := a.Backend.(sideConversationRuntimeBackend)
if !ok {
return host.SideConversationCapabilities{}, nil
}
capabilities, err := backend.SideCapabilitiesForSource(ctx, runtimeSession(source))
return hostSideCapabilities(capabilities), mapRuntimeError(err)
}
func (a *RuntimeController) OpenSideConversation(
ctx context.Context,
input host.RuntimeOpenSideConversationInput,
) (host.OpenSideConversationResult, error) {
if err := a.requireBackend(); err != nil {
return host.OpenSideConversationResult{}, err
}
backend, ok := a.Backend.(sideConversationRuntimeBackend)
if !ok {
return host.OpenSideConversationResult{}, host.ErrSideConversationUnsupported
}
result, err := backend.OpenSide(
ctx,
agentruntime.SideConversationOpenInput{
RoomID: input.Source.WorkspaceID,
SourceAgentSessionID: input.Source.ID,
SideAgentSessionID: input.SideAgentSessionID,
RequestID: input.RequestID,
Source: runtimeSession(input.Source),
},
)
if err != nil {
return host.OpenSideConversationResult{}, mapRuntimeError(err)
}
return host.OpenSideConversationResult{
Session: a.sessionWithState(result.Session),
Capabilities: hostSideCapabilities(result.Capabilities),
}, nil
}
func hostSideCapabilities(
capabilities agentruntime.SideConversationCapabilities,
) host.SideConversationCapabilities {
return host.SideConversationCapabilities{
Supported: capabilities.Supported,
ActiveSourceTurn: capabilities.ActiveSourceTurn,
Ephemeral: capabilities.Ephemeral,
HideInheritedTurns: capabilities.HideInheritedTurns,
ModelBoundaryInjected: capabilities.ModelBoundaryInjected,
}
}