--- title: workspace --- # Service: `workspace` ## Constants ```godefaultWorkspacelistFile ``` ## Types ### `type Options` ```go type Options 0 *ast.StructType { 1 . Struct: - 2 . Fields: *ast.FieldList { 3 . . Opening: - 4 . . List: nil 5 . . Closing: - 6 . } 7 . Incomplete: false 8 } ``` Options holds configuration for the workspace service. ### `type Service` ```go type Service 0 *ast.StructType { 1 . Struct: - 2 . Fields: *ast.FieldList { 3 . . Opening: - 4 . . List: []*ast.Field (len = 4) { 5 . . . 0: *ast.Field { 6 . . . . Doc: nil 7 . . . . Names: nil 8 . . . . Type: *ast.StarExpr { 9 . . . . . Star: - 10 . . . . . X: *ast.IndexExpr { 11 . . . . . . X: *ast.SelectorExpr { 12 . . . . . . . X: *ast.Ident { 13 . . . . . . . . NamePos: - 14 . . . . . . . . Name: "core" 15 . . . . . . . . Obj: nil 16 . . . . . . . } 17 . . . . . . . Sel: *ast.Ident { 18 . . . . . . . . NamePos: - 19 . . . . . . . . Name: "Runtime" 20 . . . . . . . . Obj: nil 21 . . . . . . . } 22 . . . . . . } 23 . . . . . . Lbrack: - 24 . . . . . . Index: *ast.Ident { 25 . . . . . . . NamePos: - 26 . . . . . . . Name: "Options" 27 . . . . . . . Obj: *ast.Object { 28 . . . . . . . . Kind: type 29 . . . . . . . . Name: "Options" 30 . . . . . . . . Decl: *ast.TypeSpec { 31 . . . . . . . . . Doc: nil 32 . . . . . . . . . Name: *ast.Ident { 33 . . . . . . . . . . NamePos: - 34 . . . . . . . . . . Name: "Options" 35 . . . . . . . . . . Obj: *(obj @ 27) 36 . . . . . . . . . } 37 . . . . . . . . . TypeParams: nil 38 . . . . . . . . . Assign: - 39 . . . . . . . . . Type: *ast.StructType { 40 . . . . . . . . . . Struct: - 41 . . . . . . . . . . Fields: *ast.FieldList { 42 . . . . . . . . . . . Opening: - 43 . . . . . . . . . . . List: nil 44 . . . . . . . . . . . Closing: - 45 . . . . . . . . . . } 46 . . . . . . . . . . Incomplete: false 47 . . . . . . . . . } 48 . . . . . . . . . Comment: nil 49 . . . . . . . . } 50 . . . . . . . . Data: nil 51 . . . . . . . . Type: nil 52 . . . . . . . } 53 . . . . . . } 54 . . . . . . Rbrack: - 55 . . . . . } 56 . . . . } 57 . . . . Tag: nil 58 . . . . Comment: nil 59 . . . } 60 . . . 1: *ast.Field { 61 . . . . Doc: nil 62 . . . . Names: []*ast.Ident (len = 1) { 63 . . . . . 0: *ast.Ident { 64 . . . . . . NamePos: - 65 . . . . . . Name: "activeWorkspace" 66 . . . . . . Obj: *ast.Object { 67 . . . . . . . Kind: var 68 . . . . . . . Name: "activeWorkspace" 69 . . . . . . . Decl: *(obj @ 60) 70 . . . . . . . Data: nil 71 . . . . . . . Type: nil 72 . . . . . . } 73 . . . . . } 74 . . . . } 75 . . . . Type: *ast.StarExpr { 76 . . . . . Star: - 77 . . . . . X: *ast.Ident { 78 . . . . . . NamePos: - 79 . . . . . . Name: "Workspace" 80 . . . . . . Obj: *ast.Object { 81 . . . . . . . Kind: type 82 . . . . . . . Name: "Workspace" 83 . . . . . . . Decl: *ast.TypeSpec { 84 . . . . . . . . Doc: nil 85 . . . . . . . . Name: *ast.Ident { 86 . . . . . . . . . NamePos: - 87 . . . . . . . . . Name: "Workspace" 88 . . . . . . . . . Obj: *(obj @ 80) 89 . . . . . . . . } 90 . . . . . . . . TypeParams: nil 91 . . . . . . . . Assign: - 92 . . . . . . . . Type: *ast.StructType { 93 . . . . . . . . . Struct: - 94 . . . . . . . . . Fields: *ast.FieldList { 95 . . . . . . . . . . Opening: - 96 . . . . . . . . . . List: []*ast.Field (len = 2) { 97 . . . . . . . . . . . 0: *ast.Field { 98 . . . . . . . . . . . . Doc: nil 99 . . . . . . . . . . . . Names: []*ast.Ident (len = 1) { 100 . . . . . . . . . . . . . 0: *ast.Ident { 101 . . . . . . . . . . . . . . NamePos: - 102 . . . . . . . . . . . . . . Name: "Name" 103 . . . . . . . . . . . . . . Obj: *ast.Object { 104 . . . . . . . . . . . . . . . Kind: var 105 . . . . . . . . . . . . . . . Name: "Name" 106 . . . . . . . . . . . . . . . Decl: *(obj @ 97) 107 . . . . . . . . . . . . . . . Data: nil 108 . . . . . . . . . . . . . . . Type: nil 109 . . . . . . . . . . . . . . } 110 . . . . . . . . . . . . . } 111 . . . . . . . . . . . . } 112 . . . . . . . . . . . . Type: *ast.Ident { 113 . . . . . . . . . . . . . NamePos: - 114 . . . . . . . . . . . . . Name: "string" 115 . . . . . . . . . . . . . Obj: nil 116 . . . . . . . . . . . . } 117 . . . . . . . . . . . . Tag: nil 118 . . . . . . . . . . . . Comment: nil 119 . . . . . . . . . . . } 120 . . . . . . . . . . . 1: *ast.Field { 121 . . . . . . . . . . . . Doc: nil 122 . . . . . . . . . . . . Names: []*ast.Ident (len = 1) { 123 . . . . . . . . . . . . . 0: *ast.Ident { 124 . . . . . . . . . . . . . . NamePos: - 125 . . . . . . . . . . . . . . Name: "Path" 126 . . . . . . . . . . . . . . Obj: *ast.Object { 127 . . . . . . . . . . . . . . . Kind: var 128 . . . . . . . . . . . . . . . Name: "Path" 129 . . . . . . . . . . . . . . . Decl: *(obj @ 120) 130 . . . . . . . . . . . . . . . Data: nil 131 . . . . . . . . . . . . . . . Type: nil 132 . . . . . . . . . . . . . . } 133 . . . . . . . . . . . . . } 134 . . . . . . . . . . . . } 135 . . . . . . . . . . . . Type: *ast.Ident { 136 . . . . . . . . . . . . . NamePos: - 137 . . . . . . . . . . . . . Name: "string" 138 . . . . . . . . . . . . . Obj: nil 139 . . . . . . . . . . . . } 140 . . . . . . . . . . . . Tag: nil 141 . . . . . . . . . . . . Comment: nil 142 . . . . . . . . . . . } 143 . . . . . . . . . . } 144 . . . . . . . . . . Closing: - 145 . . . . . . . . . } 146 . . . . . . . . . Incomplete: false 147 . . . . . . . . } 148 . . . . . . . . Comment: nil 149 . . . . . . . } 150 . . . . . . . Data: nil 151 . . . . . . . Type: nil 152 . . . . . . } 153 . . . . . } 154 . . . . } 155 . . . . Tag: nil 156 . . . . Comment: nil 157 . . . } 158 . . . 2: *ast.Field { 159 . . . . Doc: nil 160 . . . . Names: []*ast.Ident (len = 1) { 161 . . . . . 0: *ast.Ident { 162 . . . . . . NamePos: - 163 . . . . . . Name: "workspaceList" 164 . . . . . . Obj: *ast.Object { 165 . . . . . . . Kind: var 166 . . . . . . . Name: "workspaceList" 167 . . . . . . . Decl: *(obj @ 158) 168 . . . . . . . Data: nil 169 . . . . . . . Type: nil 170 . . . . . . } 171 . . . . . } 172 . . . . } 173 . . . . Type: *ast.MapType { 174 . . . . . Map: - 175 . . . . . Key: *ast.Ident { 176 . . . . . . NamePos: - 177 . . . . . . Name: "string" 178 . . . . . . Obj: nil 179 . . . . . } 180 . . . . . Value: *ast.Ident { 181 . . . . . . NamePos: - 182 . . . . . . Name: "string" 183 . . . . . . Obj: nil 184 . . . . . } 185 . . . . } 186 . . . . Tag: nil 187 . . . . Comment: *ast.CommentGroup { 188 . . . . . List: []*ast.Comment (len = 1) { 189 . . . . . . 0: *ast.Comment { 190 . . . . . . . Slash: - 191 . . . . . . . Text: "// Maps Workspace ID to Public Key" 192 . . . . . . } 193 . . . . . } 194 . . . . } 195 . . . } 196 . . . 3: *ast.Field { 197 . . . . Doc: nil 198 . . . . Names: []*ast.Ident (len = 1) { 199 . . . . . 0: *ast.Ident { 200 . . . . . . NamePos: - 201 . . . . . . Name: "medium" 202 . . . . . . Obj: *ast.Object { 203 . . . . . . . Kind: var 204 . . . . . . . Name: "medium" 205 . . . . . . . Decl: *(obj @ 196) 206 . . . . . . . Data: nil 207 . . . . . . . Type: nil 208 . . . . . . } 209 . . . . . } 210 . . . . } 211 . . . . Type: *ast.SelectorExpr { 212 . . . . . X: *ast.Ident { 213 . . . . . . NamePos: - 214 . . . . . . Name: "io" 215 . . . . . . Obj: nil 216 . . . . . } 217 . . . . . Sel: *ast.Ident { 218 . . . . . . NamePos: - 219 . . . . . . Name: "Medium" 220 . . . . . . Obj: nil 221 . . . . . } 222 . . . . } 223 . . . . Tag: nil 224 . . . . Comment: nil 225 . . . } 226 . . } 227 . . Closing: - 228 . } 229 . Incomplete: false 230 } ``` Service manages user workspaces. #### Methods - `CreateWorkspace(identifier, password 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } , 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: CreateWorkspace creates a new, obfuscated workspace on the local medium. - `HandleIPCEvents(c 0 *ast.StarExpr { 1 . Star: - 2 . X: *ast.SelectorExpr { 3 . . X: *ast.Ident { 4 . . . NamePos: - 5 . . . Name: "core" 6 . . . Obj: nil 7 . . } 8 . . Sel: *ast.Ident { 9 . . . NamePos: - 10 . . . Name: "Core" 11 . . . Obj: nil 12 . . } 13 . } 14 } , msg 0 *ast.SelectorExpr { 1 . X: *ast.Ident { 2 . . NamePos: - 3 . . Name: "core" 4 . . Obj: nil 5 . } 6 . Sel: *ast.Ident { 7 . . NamePos: - 8 . . Name: "Message" 9 . . Obj: nil 10 . } 11 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: HandleIPCEvents processes IPC messages, including injecting dependencies on startup. - `ServiceStartup( 0 *ast.SelectorExpr { 1 . X: *ast.Ident { 2 . . NamePos: - 3 . . Name: "context" 4 . . Obj: nil 5 . } 6 . Sel: *ast.Ident { 7 . . NamePos: - 8 . . Name: "Context" 9 . . Obj: nil 10 . } 11 } , 0 *ast.SelectorExpr { 1 . X: *ast.Ident { 2 . . NamePos: - 3 . . Name: "application" 4 . . Obj: nil 5 . } 6 . Sel: *ast.Ident { 7 . . NamePos: - 8 . . Name: "ServiceOptions" 9 . . Obj: nil 10 . } 11 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: ServiceStartup initializes the service, loading the workspace list. - `SwitchWorkspace(name 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: SwitchWorkspace changes the active workspace. - `WorkspaceFileGet(filename 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } , 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: WorkspaceFileGet retrieves a file from the active workspace. - `WorkspaceFileSet(filename, content 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: WorkspaceFileSet writes a file to the active workspace. - `getWorkspaceDir() 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } , 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: getWorkspaceDir retrieves the WorkspaceDir from the config service. ### `type Workspace` ```go type Workspace 0 *ast.StructType { 1 . Struct: - 2 . Fields: *ast.FieldList { 3 . . Opening: - 4 . . List: []*ast.Field (len = 2) { 5 . . . 0: *ast.Field { 6 . . . . Doc: nil 7 . . . . Names: []*ast.Ident (len = 1) { 8 . . . . . 0: *ast.Ident { 9 . . . . . . NamePos: - 10 . . . . . . Name: "Name" 11 . . . . . . Obj: *ast.Object { 12 . . . . . . . Kind: var 13 . . . . . . . Name: "Name" 14 . . . . . . . Decl: *(obj @ 5) 15 . . . . . . . Data: nil 16 . . . . . . . Type: nil 17 . . . . . . } 18 . . . . . } 19 . . . . } 20 . . . . Type: *ast.Ident { 21 . . . . . NamePos: - 22 . . . . . Name: "string" 23 . . . . . Obj: nil 24 . . . . } 25 . . . . Tag: nil 26 . . . . Comment: nil 27 . . . } 28 . . . 1: *ast.Field { 29 . . . . Doc: nil 30 . . . . Names: []*ast.Ident (len = 1) { 31 . . . . . 0: *ast.Ident { 32 . . . . . . NamePos: - 33 . . . . . . Name: "Path" 34 . . . . . . Obj: *ast.Object { 35 . . . . . . . Kind: var 36 . . . . . . . Name: "Path" 37 . . . . . . . Decl: *(obj @ 28) 38 . . . . . . . Data: nil 39 . . . . . . . Type: nil 40 . . . . . . } 41 . . . . . } 42 . . . . } 43 . . . . Type: *ast.Ident { 44 . . . . . NamePos: - 45 . . . . . Name: "string" 46 . . . . . Obj: nil 47 . . . . } 48 . . . . Tag: nil 49 . . . . Comment: nil 50 . . . } 51 . . } 52 . . Closing: - 53 . } 54 . Incomplete: false 55 } ``` Workspace represents a user's workspace. ### `type localMedium` ```go type localMedium 0 *ast.StructType { 1 . Struct: - 2 . Fields: *ast.FieldList { 3 . . Opening: - 4 . . List: nil 5 . . Closing: - 6 . } 7 . Incomplete: false 8 } ``` localMedium implements the Medium interface for the local disk. #### Methods - `EnsureDir(path 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: EnsureDir creates a directory on the local disk. - `FileGet(path 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } , 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: FileGet reads a file from the local disk. - `FileSet(path, content 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: FileSet writes a file to the local disk. - `IsFile(path 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "bool" 3 . Obj: nil 4 } `: IsFile checks if a path exists and is a file on the local disk. - `Read(path 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } , 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: Read reads a file from the local disk. - `Write(path, content 0 *ast.Ident { 1 . NamePos: - 2 . Name: "string" 3 . Obj: nil 4 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: Write writes a file to the local disk. ## Functions - `NewLocalMedium() 0 *ast.SelectorExpr { 1 . X: *ast.Ident { 2 . . NamePos: - 3 . . Name: "io" 4 . . Obj: nil 5 . } 6 . Sel: *ast.Ident { 7 . . NamePos: - 8 . . Name: "Medium" 9 . . Obj: nil 10 . } 11 } `: NewLocalMedium creates a new instance of the local storage medium. - `Register(c 0 *ast.StarExpr { 1 . Star: - 2 . X: *ast.SelectorExpr { 3 . . X: *ast.Ident { 4 . . . NamePos: - 5 . . . Name: "core" 6 . . . Obj: nil 7 . . } 8 . . Sel: *ast.Ident { 9 . . . NamePos: - 10 . . . Name: "Core" 11 . . . Obj: nil 12 . . } 13 . } 14 } ) 0 *ast.Ident { 1 . NamePos: - 2 . Name: "any" 3 . Obj: nil 4 } , 0 *ast.Ident { 1 . NamePos: - 2 . Name: "error" 3 . Obj: nil 4 } `: Register is the constructor for dynamic dependency injection (used with core.WithService). It creates a Service instance and initializes its core.Runtime field. Dependencies are injected during ServiceStartup.