| 817 | } |
| 818 | |
| 819 | func (h *HostAPIHandler) createBridgeSession( |
| 820 | ctx context.Context, |
| 821 | instance bridgepkg.BridgeInstance, |
| 822 | ) (*session.Session, error) { |
| 823 | if h.sessions == nil { |
| 824 | return nil, unavailableRPCError(errors.New("session manager is not configured")) |
| 825 | } |
| 826 | if h.workspaces == nil { |
| 827 | return nil, unavailableRPCError(errors.New("workspace resolver is not configured")) |
| 828 | } |
| 829 | if strings.TrimSpace(instance.WorkspaceID) == "" { |
| 830 | return nil, unavailableRPCError(errors.New("bridge instance workspace is required to create a session")) |
| 831 | } |
| 832 | |
| 833 | resolved, err := h.workspaces.Resolve(ctx, instance.WorkspaceID) |
| 834 | if err != nil { |
| 835 | return nil, unavailableRPCError(fmt.Errorf("resolve workspace %q: %w", instance.WorkspaceID, err)) |
| 836 | } |
| 837 | |
| 838 | agentName, err := aghconfig.ResolveAgentName("", resolved.Config.Defaults) |
| 839 | if err != nil { |
| 840 | return nil, unavailableRPCError( |
| 841 | fmt.Errorf("resolve default agent for workspace %q: %w", resolved.WorkspaceID, err), |
| 842 | ) |
| 843 | } |
| 844 | workspaceID, err := hostAPIResolvedWorkspaceID(&resolved) |
| 845 | if err != nil { |
| 846 | return nil, unavailableRPCError(err) |
| 847 | } |
| 848 | |
| 849 | created, err := h.sessions.Create(ctx, session.CreateOpts{ |
| 850 | AgentName: agentName, |
| 851 | Provider: "", |
| 852 | Workspace: workspaceID, |
| 853 | Type: session.SessionTypeUser, |
| 854 | }) |
| 855 | if err != nil { |
| 856 | return nil, unavailableRPCError(fmt.Errorf("create bridge session: %w", err)) |
| 857 | } |
| 858 | return created, nil |
| 859 | } |
| 860 | |
| 861 | func (h *HostAPIHandler) stopBridgeSession(ctx context.Context, sessionID string) error { |
| 862 | if h.sessions == nil || strings.TrimSpace(sessionID) == "" { |