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
71 lines
2.4 KiB
Go
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,
|
|
}
|
|
}
|