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

184 lines
5.6 KiB
Go

package workspace
import (
"encoding/json"
"fmt"
tuttigenerated "github.com/tutti-os/tutti/services/tuttid/api/generated"
workspacebiz "github.com/tutti-os/tutti/services/tuttid/biz/workspace"
workspaceservice "github.com/tutti-os/tutti/services/tuttid/service/workspace"
)
func GeneratedWorkbenchResponseFromBiz(item workspacebiz.WorkbenchSnapshot) (tuttigenerated.WorkspaceWorkbenchResponse, error) {
var snapshot tuttigenerated.WorkbenchSnapshot
if err := json.Unmarshal(item.JSON, &snapshot); err != nil {
return tuttigenerated.WorkspaceWorkbenchResponse{}, fmt.Errorf("decode stored workspace workbench snapshot: %w", err)
}
return tuttigenerated.WorkspaceWorkbenchResponse{
Snapshot: snapshot,
}, nil
}
func WorkbenchSnapshotFromGenerated(snapshot tuttigenerated.WorkbenchSnapshot) workspaceservice.WorkbenchSnapshot {
var nodes []workspaceservice.WorkbenchSnapshotNode
if snapshot.Nodes != nil {
nodes = make([]workspaceservice.WorkbenchSnapshotNode, len(snapshot.Nodes))
for index, node := range snapshot.Nodes {
nodes[index] = workspaceservice.WorkbenchSnapshotNode{
ID: node.Id,
Kind: node.Kind,
Title: node.Title,
Frame: workbenchFrameFromGenerated(node.Frame),
DisplayMode: workbenchDisplayModeFromGenerated(node.DisplayMode),
RestoreFrame: workbenchFramePointerFromGenerated(node.RestoreFrame),
IsMinimized: node.IsMinimized,
Data: node.Data,
AdapterState: mapPointerValue(node.AdapterState),
}
}
}
return workspaceservice.WorkbenchSnapshot{
SchemaVersion: int(snapshot.SchemaVersion),
Nodes: nodes,
NodeStack: cloneStringSlicePointer(snapshot.NodeStack),
ActiveNodeID: snapshot.ActiveNodeId,
Spaces: workbenchSpacesFromGenerated(snapshot.Spaces),
ActiveSpaceID: snapshot.ActiveSpaceId,
LayoutBasis: workbenchLayoutBasisFromGenerated(snapshot.LayoutBasis),
LockedLayout: workbenchLockedLayoutFromGenerated(snapshot.LockedLayout),
Metadata: mapPointerValue(snapshot.Metadata),
}
}
func workbenchLockedLayoutFromGenerated(
lockedLayout *tuttigenerated.WorkbenchLockedLayout,
) *workspaceservice.WorkbenchSnapshotLockedLayout {
if lockedLayout == nil {
return nil
}
result := &workspaceservice.WorkbenchSnapshotLockedLayout{
Preset: workspaceservice.WorkbenchSnapshotLayoutPreset{
Kind: workspaceservice.WorkbenchSnapshotLayoutPresetKind(
lockedLayout.Preset.Kind,
),
},
NodeIDs: append([]string(nil), lockedLayout.NodeIDs...),
}
if lockedLayout.NormalizedFrames == nil {
return result
}
normalizedFrames := make(
map[string]workspaceservice.WorkbenchSnapshotNormalizedFrame,
len(*lockedLayout.NormalizedFrames),
)
for nodeID, frame := range *lockedLayout.NormalizedFrames {
normalizedFrames[nodeID] = workspaceservice.WorkbenchSnapshotNormalizedFrame{
X: float64(frame.X),
Y: float64(frame.Y),
Width: float64(frame.Width),
Height: float64(frame.Height),
}
}
result.NormalizedFrames = normalizedFrames
return result
}
func workbenchLayoutBasisFromGenerated(
layoutBasis *tuttigenerated.WorkbenchLayoutBasis,
) *workspaceservice.WorkbenchSnapshotLayoutBasis {
if layoutBasis == nil {
return nil
}
return &workspaceservice.WorkbenchSnapshotLayoutBasis{
SurfaceSize: workspaceservice.WorkbenchSnapshotSize{
Width: float64(layoutBasis.SurfaceSize.Width),
Height: float64(layoutBasis.SurfaceSize.Height),
},
LayoutConstraints: workspaceservice.WorkbenchSnapshotLayoutConstraints{
MinWidth: float64(layoutBasis.LayoutConstraints.MinWidth),
MinHeight: float64(layoutBasis.LayoutConstraints.MinHeight),
SurfacePadding: float64(layoutBasis.LayoutConstraints.SurfacePadding),
SafeArea: workspaceservice.WorkbenchSnapshotSafeArea{
Top: float64(layoutBasis.LayoutConstraints.SafeArea.Top),
Right: float64(layoutBasis.LayoutConstraints.SafeArea.Right),
Bottom: float64(layoutBasis.LayoutConstraints.SafeArea.Bottom),
Left: float64(layoutBasis.LayoutConstraints.SafeArea.Left),
},
},
}
}
func workbenchSpacesFromGenerated(
spaces *[]tuttigenerated.WorkbenchSnapshotSpace,
) *[]workspaceservice.WorkbenchSnapshotSpace {
if spaces == nil {
return nil
}
inputs := make([]workspaceservice.WorkbenchSnapshotSpace, len(*spaces))
for index, space := range *spaces {
inputs[index] = workspaceservice.WorkbenchSnapshotSpace{
ID: space.Id,
Name: space.Name,
NodeIDs: append([]string(nil), space.NodeIds...),
Frame: workbenchFramePointerFromGenerated(space.Frame),
Data: space.Data,
}
}
return &inputs
}
func workbenchFramePointerFromGenerated(
frame *tuttigenerated.WorkbenchFrame,
) *workspaceservice.WorkbenchSnapshotFrame {
if frame == nil {
return nil
}
input := workbenchFrameFromGenerated(*frame)
return &input
}
func workbenchFrameFromGenerated(frame tuttigenerated.WorkbenchFrame) workspaceservice.WorkbenchSnapshotFrame {
return workspaceservice.WorkbenchSnapshotFrame{
X: float64(frame.X),
Y: float64(frame.Y),
Width: float64(frame.Width),
Height: float64(frame.Height),
}
}
func workbenchDisplayModeFromGenerated(
mode *tuttigenerated.WorkbenchSnapshotNodeDisplayMode,
) *workspaceservice.WorkbenchSnapshotDisplayMode {
if mode == nil {
return nil
}
value := workspaceservice.WorkbenchSnapshotDisplayMode(*mode)
return &value
}
func cloneStringSlicePointer(value *[]string) *[]string {
if value == nil {
return nil
}
clone := append([]string(nil), (*value)...)
return &clone
}
func mapPointerValue(value *map[string]interface{}) map[string]interface{} {
if value == nil {
return nil
}
return *value
}