@@ -147,9 +147,9 @@ func (g *GPTScript) RemoveAll(ctx context.Context, opts ...RemoveAllOptions) err
147147}
148148
149149type WriteFileInWorkspaceOptions struct {
150- WorkspaceID string
151- CreateRevision * bool
152- LatestRevision string
150+ WorkspaceID string
151+ CreateRevision * bool
152+ LatestRevisionID string
153153}
154154
155155func (g * GPTScript ) WriteFileInWorkspace (ctx context.Context , filePath string , contents []byte , opts ... WriteFileInWorkspaceOptions ) error {
@@ -161,8 +161,8 @@ func (g *GPTScript) WriteFileInWorkspace(ctx context.Context, filePath string, c
161161 if o .CreateRevision != nil {
162162 opt .CreateRevision = o .CreateRevision
163163 }
164- if o .LatestRevision != "" {
165- opt .LatestRevision = o .LatestRevision
164+ if o .LatestRevisionID != "" {
165+ opt .LatestRevisionID = o .LatestRevisionID
166166 }
167167 }
168168
@@ -171,13 +171,13 @@ func (g *GPTScript) WriteFileInWorkspace(ctx context.Context, filePath string, c
171171 }
172172
173173 _ , err := g .runBasicCommand (ctx , "workspaces/write-file" , map [string ]any {
174- "id" : opt .WorkspaceID ,
175- "contents" : base64 .StdEncoding .EncodeToString (contents ),
176- "filePath" : filePath ,
177- "createRevision" : opt .CreateRevision ,
178- "latestRevision " : opt .LatestRevision ,
179- "workspaceTool" : g .globalOpts .WorkspaceTool ,
180- "env" : g .globalOpts .Env ,
174+ "id" : opt .WorkspaceID ,
175+ "contents" : base64 .StdEncoding .EncodeToString (contents ),
176+ "filePath" : filePath ,
177+ "createRevision" : opt .CreateRevision ,
178+ "latestRevisionID " : opt .LatestRevisionID ,
179+ "workspaceTool" : g .globalOpts .WorkspaceTool ,
180+ "env" : g .globalOpts .Env ,
181181 })
182182
183183 return parsePossibleConflictInWorkspaceError (err )
@@ -214,26 +214,34 @@ func (g *GPTScript) DeleteFileInWorkspace(ctx context.Context, filePath string,
214214}
215215
216216type ReadFileInWorkspaceOptions struct {
217- WorkspaceID string
217+ WorkspaceID string
218+ WithLatestRevisionID bool
218219}
219220
220- func (g * GPTScript ) ReadFileInWorkspace (ctx context.Context , filePath string , opts ... ReadFileInWorkspaceOptions ) ([]byte , error ) {
221+ type ReadFileInWorkspaceResponse struct {
222+ Content []byte `json:"content"`
223+ RevisionID string `json:"revisionID"`
224+ }
225+
226+ func (g * GPTScript ) ReadFileInWorkspace (ctx context.Context , filePath string , opts ... ReadFileInWorkspaceOptions ) (* ReadFileInWorkspaceResponse , error ) {
221227 var opt ReadFileInWorkspaceOptions
222228 for _ , o := range opts {
223229 if o .WorkspaceID != "" {
224230 opt .WorkspaceID = o .WorkspaceID
225231 }
232+ opt .WithLatestRevisionID = opt .WithLatestRevisionID || o .WithLatestRevisionID
226233 }
227234
228235 if opt .WorkspaceID == "" {
229236 opt .WorkspaceID = os .Getenv ("GPTSCRIPT_WORKSPACE_ID" )
230237 }
231238
232239 out , err := g .runBasicCommand (ctx , "workspaces/read-file" , map [string ]any {
233- "id" : opt .WorkspaceID ,
234- "filePath" : filePath ,
235- "workspaceTool" : g .globalOpts .WorkspaceTool ,
236- "env" : g .globalOpts .Env ,
240+ "id" : opt .WorkspaceID ,
241+ "filePath" : filePath ,
242+ "withLatestRevisionID" : opt .WithLatestRevisionID ,
243+ "workspaceTool" : g .globalOpts .WorkspaceTool ,
244+ "env" : g .globalOpts .Env ,
237245 })
238246 if err != nil {
239247 if strings .HasSuffix (err .Error (), fmt .Sprintf ("not found: %s/%s" , opt .WorkspaceID , filePath )) {
@@ -242,7 +250,13 @@ func (g *GPTScript) ReadFileInWorkspace(ctx context.Context, filePath string, op
242250 return nil , err
243251 }
244252
245- return base64 .StdEncoding .DecodeString (out )
253+ var resp ReadFileInWorkspaceResponse
254+ err = json .Unmarshal ([]byte (out ), & resp )
255+ if err != nil {
256+ return nil , err
257+ }
258+
259+ return & resp , nil
246260}
247261
248262type FileInfo struct {
@@ -251,10 +265,12 @@ type FileInfo struct {
251265 Size int64
252266 ModTime time.Time
253267 MimeType string
268+ RevisionID string
254269}
255270
256271type StatFileInWorkspaceOptions struct {
257- WorkspaceID string
272+ WorkspaceID string
273+ WithLatestRevisionID bool
258274}
259275
260276func (g * GPTScript ) StatFileInWorkspace (ctx context.Context , filePath string , opts ... StatFileInWorkspaceOptions ) (FileInfo , error ) {
@@ -263,17 +279,19 @@ func (g *GPTScript) StatFileInWorkspace(ctx context.Context, filePath string, op
263279 if o .WorkspaceID != "" {
264280 opt .WorkspaceID = o .WorkspaceID
265281 }
282+ opt .WithLatestRevisionID = opt .WithLatestRevisionID || o .WithLatestRevisionID
266283 }
267284
268285 if opt .WorkspaceID == "" {
269286 opt .WorkspaceID = os .Getenv ("GPTSCRIPT_WORKSPACE_ID" )
270287 }
271288
272289 out , err := g .runBasicCommand (ctx , "workspaces/stat-file" , map [string ]any {
273- "id" : opt .WorkspaceID ,
274- "filePath" : filePath ,
275- "workspaceTool" : g .globalOpts .WorkspaceTool ,
276- "env" : g .globalOpts .Env ,
290+ "id" : opt .WorkspaceID ,
291+ "filePath" : filePath ,
292+ "withLatestRevisionID" : opt .WithLatestRevisionID ,
293+ "workspaceTool" : g .globalOpts .WorkspaceTool ,
294+ "env" : g .globalOpts .Env ,
277295 })
278296 if err != nil {
279297 if strings .HasSuffix (err .Error (), fmt .Sprintf ("not found: %s/%s" , opt .WorkspaceID , filePath )) {
@@ -291,16 +309,11 @@ func (g *GPTScript) StatFileInWorkspace(ctx context.Context, filePath string, op
291309 return info , nil
292310}
293311
294- type RevisionInfo struct {
295- FileInfo
296- RevisionID string
297- }
298-
299312type ListRevisionsForFileInWorkspaceOptions struct {
300313 WorkspaceID string
301314}
302315
303- func (g * GPTScript ) ListRevisionsForFileInWorkspace (ctx context.Context , filePath string , opts ... ListRevisionsForFileInWorkspaceOptions ) ([]RevisionInfo , error ) {
316+ func (g * GPTScript ) ListRevisionsForFileInWorkspace (ctx context.Context , filePath string , opts ... ListRevisionsForFileInWorkspaceOptions ) ([]FileInfo , error ) {
304317 var opt ListRevisionsForFileInWorkspaceOptions
305318 for _ , o := range opts {
306319 if o .WorkspaceID != "" {
@@ -325,7 +338,7 @@ func (g *GPTScript) ListRevisionsForFileInWorkspace(ctx context.Context, filePat
325338 return nil , err
326339 }
327340
328- var info []RevisionInfo
341+ var info []FileInfo
329342 err = json .Unmarshal ([]byte (out ), & info )
330343 if err != nil {
331344 return nil , err
0 commit comments