Files
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

236 lines
8.2 KiB
Go

package api
import (
"context"
"strings"
tuttigenerated "github.com/tutti-os/tutti/services/tuttid/api/generated"
workspaceapi "github.com/tutti-os/tutti/services/tuttid/api/workspace"
"github.com/tutti-os/tutti/services/tuttid/apierrors"
workspaceservice "github.com/tutti-os/tutti/services/tuttid/service/workspace"
)
func (api DaemonAPI) ListWorkspaces(ctx context.Context, _ tuttigenerated.ListWorkspacesRequestObject) (tuttigenerated.ListWorkspacesResponseObject, error) {
if api.WorkspaceService == nil {
return tuttigenerated.ListWorkspaces503JSONResponse{
ServiceUnavailableErrorJSONResponse: serviceUnavailableError(
apierrors.WorkspaceServiceUnavailable(apierrors.WithDeveloperMessage("workspace service is unavailable")),
),
}, nil
}
workspaces, err := api.WorkspaceService.List(ctx)
if err != nil {
return tuttigenerated.ListWorkspaces502JSONResponse{
WorkspaceOperationErrorJSONResponse: workspaceOperationError(
apierrors.WorkspaceOperationFailed(apierrors.WithCause(err)),
),
}, nil
}
return tuttigenerated.ListWorkspaces200JSONResponse{
Workspaces: workspaceapi.GeneratedSummariesFromBiz(workspaces),
TotalCount: len(workspaces),
}, nil
}
func (api DaemonAPI) CreateWorkspace(ctx context.Context, request tuttigenerated.CreateWorkspaceRequestObject) (tuttigenerated.CreateWorkspaceResponseObject, error) {
if api.WorkspaceService == nil {
return tuttigenerated.CreateWorkspace503JSONResponse{
ServiceUnavailableErrorJSONResponse: serviceUnavailableError(
apierrors.WorkspaceServiceUnavailable(apierrors.WithDeveloperMessage("workspace service is unavailable")),
),
}, nil
}
if request.Body == nil {
return tuttigenerated.CreateWorkspace400JSONResponse{
InvalidRequestErrorJSONResponse: invalidRequestError(
apierrors.EmptyBody(apierrors.WithDeveloperMessage("empty body")),
),
}, nil
}
name := strings.TrimSpace(request.Body.Name)
if name == "" {
return tuttigenerated.CreateWorkspace400JSONResponse{
InvalidRequestErrorJSONResponse: invalidRequestError(
apierrors.MissingWorkspaceName(
apierrors.WithDeveloperMessage("workspace name is required"),
apierrors.WithParams(map[string]any{"field": "name"}),
),
),
}, nil
}
workspace, err := api.WorkspaceService.Create(ctx, workspaceservice.CreateInput{
Name: name,
})
if err != nil {
return writeCreateWorkspaceError(err), nil
}
return tuttigenerated.CreateWorkspace201JSONResponse(workspaceapi.GeneratedEnvelopeResponseFromBiz(workspace)), nil
}
func (api DaemonAPI) GetStartupWorkspace(ctx context.Context, _ tuttigenerated.GetStartupWorkspaceRequestObject) (tuttigenerated.GetStartupWorkspaceResponseObject, error) {
if api.WorkspaceService == nil {
return tuttigenerated.GetStartupWorkspace503JSONResponse{
ServiceUnavailableErrorJSONResponse: serviceUnavailableError(
apierrors.WorkspaceServiceUnavailable(apierrors.WithDeveloperMessage("workspace service is unavailable")),
),
}, nil
}
response, err := api.WorkspaceService.Startup(ctx)
if err != nil {
return tuttigenerated.GetStartupWorkspace502JSONResponse{
WorkspaceOperationErrorJSONResponse: workspaceOperationError(
apierrors.WorkspaceOperationFailed(apierrors.WithCause(err)),
),
}, nil
}
return tuttigenerated.GetStartupWorkspace200JSONResponse(workspaceapi.GeneratedStartupResponseFromBiz(response)), nil
}
func (api DaemonAPI) DeleteWorkspace(ctx context.Context, request tuttigenerated.DeleteWorkspaceRequestObject) (tuttigenerated.DeleteWorkspaceResponseObject, error) {
if api.WorkspaceService == nil {
return tuttigenerated.DeleteWorkspace503JSONResponse{
ServiceUnavailableErrorJSONResponse: serviceUnavailableError(
apierrors.WorkspaceServiceUnavailable(apierrors.WithDeveloperMessage("workspace service is unavailable")),
),
}, nil
}
workspaceID := strings.TrimSpace(string(request.WorkspaceID))
if workspaceID == "" {
return tuttigenerated.DeleteWorkspace400JSONResponse{
InvalidRequestErrorJSONResponse: invalidRequestError(
apierrors.MissingWorkspaceID(
apierrors.WithDeveloperMessage("workspace id is required"),
apierrors.WithParams(map[string]any{"field": "workspaceId"}),
),
),
}, nil
}
response, err := api.WorkspaceService.Delete(ctx, workspaceID)
if err != nil {
return writeDeleteWorkspaceError(err), nil
}
return tuttigenerated.DeleteWorkspace200JSONResponse{
WorkspaceId: response.WorkspaceID,
}, nil
}
func (api DaemonAPI) GetWorkspace(ctx context.Context, request tuttigenerated.GetWorkspaceRequestObject) (tuttigenerated.GetWorkspaceResponseObject, error) {
if api.WorkspaceService == nil {
return tuttigenerated.GetWorkspace503JSONResponse{
ServiceUnavailableErrorJSONResponse: serviceUnavailableError(
apierrors.WorkspaceServiceUnavailable(apierrors.WithDeveloperMessage("workspace service is unavailable")),
),
}, nil
}
workspaceID := strings.TrimSpace(string(request.WorkspaceID))
if workspaceID == "" {
return tuttigenerated.GetWorkspace400JSONResponse{
InvalidRequestErrorJSONResponse: invalidRequestError(
apierrors.MissingWorkspaceID(
apierrors.WithDeveloperMessage("workspace id is required"),
apierrors.WithParams(map[string]any{"field": "workspaceId"}),
),
),
}, nil
}
workspace, err := api.WorkspaceService.Get(ctx, workspaceID)
if err != nil {
return writeGetWorkspaceError(err), nil
}
return tuttigenerated.GetWorkspace200JSONResponse(workspaceapi.GeneratedEnvelopeResponseFromBiz(workspace)), nil
}
func (api DaemonAPI) UpdateWorkspace(ctx context.Context, request tuttigenerated.UpdateWorkspaceRequestObject) (tuttigenerated.UpdateWorkspaceResponseObject, error) {
if api.WorkspaceService == nil {
return tuttigenerated.UpdateWorkspace503JSONResponse{
ServiceUnavailableErrorJSONResponse: serviceUnavailableError(
apierrors.WorkspaceServiceUnavailable(apierrors.WithDeveloperMessage("workspace service is unavailable")),
),
}, nil
}
workspaceID := strings.TrimSpace(string(request.WorkspaceID))
if workspaceID == "" {
return tuttigenerated.UpdateWorkspace400JSONResponse{
InvalidRequestErrorJSONResponse: invalidRequestError(
apierrors.MissingWorkspaceID(
apierrors.WithDeveloperMessage("workspace id is required"),
apierrors.WithParams(map[string]any{"field": "workspaceId"}),
),
),
}, nil
}
if request.Body == nil {
return tuttigenerated.UpdateWorkspace400JSONResponse{
InvalidRequestErrorJSONResponse: invalidRequestError(
apierrors.EmptyBody(apierrors.WithDeveloperMessage("empty body")),
),
}, nil
}
name := strings.TrimSpace(request.Body.Name)
if name == "" {
return tuttigenerated.UpdateWorkspace400JSONResponse{
InvalidRequestErrorJSONResponse: invalidRequestError(
apierrors.MissingWorkspaceName(
apierrors.WithDeveloperMessage("workspace name is required"),
apierrors.WithParams(map[string]any{"field": "name"}),
),
),
}, nil
}
workspace, err := api.WorkspaceService.Update(ctx, workspaceID, workspaceservice.UpdateInput{
Name: name,
})
if err != nil {
return writeUpdateWorkspaceError(err), nil
}
return tuttigenerated.UpdateWorkspace200JSONResponse(workspaceapi.GeneratedEnvelopeResponseFromBiz(workspace)), nil
}
func (api DaemonAPI) OpenWorkspace(ctx context.Context, request tuttigenerated.OpenWorkspaceRequestObject) (tuttigenerated.OpenWorkspaceResponseObject, error) {
if api.WorkspaceService == nil {
return tuttigenerated.OpenWorkspace503JSONResponse{
ServiceUnavailableErrorJSONResponse: serviceUnavailableError(
apierrors.WorkspaceServiceUnavailable(apierrors.WithDeveloperMessage("workspace service is unavailable")),
),
}, nil
}
workspaceID := strings.TrimSpace(string(request.WorkspaceID))
if workspaceID == "" {
return tuttigenerated.OpenWorkspace400JSONResponse{
InvalidRequestErrorJSONResponse: invalidRequestError(
apierrors.MissingWorkspaceID(
apierrors.WithDeveloperMessage("workspace id is required"),
apierrors.WithParams(map[string]any{"field": "workspaceId"}),
),
),
}, nil
}
workspace, err := api.WorkspaceService.Open(ctx, workspaceID)
if err != nil {
return writeOpenWorkspaceError(err), nil
}
return tuttigenerated.OpenWorkspace200JSONResponse(workspaceapi.GeneratedEnvelopeResponseFromBiz(workspace)), nil
}