@@ -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 )
@@ -245,16 +245,57 @@ func (g *GPTScript) ReadFileInWorkspace(ctx context.Context, filePath string, op
245245	return  base64 .StdEncoding .DecodeString (out )
246246}
247247
248+ type  ReadFileWithRevisionInWorkspaceResponse  struct  {
249+ 	Content     []byte  `json:"content"` 
250+ 	RevisionID  string  `json:"revisionID"` 
251+ }
252+ 
253+ func  (g  * GPTScript ) ReadFileWithRevisionInWorkspace (ctx  context.Context , filePath  string , opts  ... ReadFileInWorkspaceOptions ) (* ReadFileWithRevisionInWorkspaceResponse , error ) {
254+ 	var  opt  ReadFileInWorkspaceOptions 
255+ 	for  _ , o  :=  range  opts  {
256+ 		if  o .WorkspaceID  !=  ""  {
257+ 			opt .WorkspaceID  =  o .WorkspaceID 
258+ 		}
259+ 	}
260+ 
261+ 	if  opt .WorkspaceID  ==  ""  {
262+ 		opt .WorkspaceID  =  os .Getenv ("GPTSCRIPT_WORKSPACE_ID" )
263+ 	}
264+ 
265+ 	out , err  :=  g .runBasicCommand (ctx , "workspaces/read-file-with-revision" , map [string ]any {
266+ 		"id" :            opt .WorkspaceID ,
267+ 		"filePath" :      filePath ,
268+ 		"workspaceTool" : g .globalOpts .WorkspaceTool ,
269+ 		"env" :           g .globalOpts .Env ,
270+ 	})
271+ 	if  err  !=  nil  {
272+ 		if  strings .HasSuffix (err .Error (), fmt .Sprintf ("not found: %s/%s" , opt .WorkspaceID , filePath )) {
273+ 			return  nil , newNotFoundInWorkspaceError (opt .WorkspaceID , filePath )
274+ 		}
275+ 		return  nil , err 
276+ 	}
277+ 
278+ 	var  resp  ReadFileWithRevisionInWorkspaceResponse 
279+ 	err  =  json .Unmarshal ([]byte (out ), & resp )
280+ 	if  err  !=  nil  {
281+ 		return  nil , err 
282+ 	}
283+ 
284+ 	return  & resp , nil 
285+ }
286+ 
248287type  FileInfo  struct  {
249288	WorkspaceID  string 
250289	Name         string 
251290	Size         int64 
252291	ModTime      time.Time 
253292	MimeType     string 
293+ 	RevisionID   string 
254294}
255295
256296type  StatFileInWorkspaceOptions  struct  {
257- 	WorkspaceID  string 
297+ 	WorkspaceID           string 
298+ 	WithLatestRevisionID  bool 
258299}
259300
260301func  (g  * GPTScript ) StatFileInWorkspace (ctx  context.Context , filePath  string , opts  ... StatFileInWorkspaceOptions ) (FileInfo , error ) {
@@ -263,17 +304,19 @@ func (g *GPTScript) StatFileInWorkspace(ctx context.Context, filePath string, op
263304		if  o .WorkspaceID  !=  ""  {
264305			opt .WorkspaceID  =  o .WorkspaceID 
265306		}
307+ 		opt .WithLatestRevisionID  =  opt .WithLatestRevisionID  ||  o .WithLatestRevisionID 
266308	}
267309
268310	if  opt .WorkspaceID  ==  ""  {
269311		opt .WorkspaceID  =  os .Getenv ("GPTSCRIPT_WORKSPACE_ID" )
270312	}
271313
272314	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 ,
315+ 		"id" :                   opt .WorkspaceID ,
316+ 		"filePath" :             filePath ,
317+ 		"withLatestRevisionID" : opt .WithLatestRevisionID ,
318+ 		"workspaceTool" :        g .globalOpts .WorkspaceTool ,
319+ 		"env" :                  g .globalOpts .Env ,
277320	})
278321	if  err  !=  nil  {
279322		if  strings .HasSuffix (err .Error (), fmt .Sprintf ("not found: %s/%s" , opt .WorkspaceID , filePath )) {
@@ -291,16 +334,11 @@ func (g *GPTScript) StatFileInWorkspace(ctx context.Context, filePath string, op
291334	return  info , nil 
292335}
293336
294- type  RevisionInfo  struct  {
295- 	FileInfo 
296- 	RevisionID  string 
297- }
298- 
299337type  ListRevisionsForFileInWorkspaceOptions  struct  {
300338	WorkspaceID  string 
301339}
302340
303- func  (g  * GPTScript ) ListRevisionsForFileInWorkspace (ctx  context.Context , filePath  string , opts  ... ListRevisionsForFileInWorkspaceOptions ) ([]RevisionInfo , error ) {
341+ func  (g  * GPTScript ) ListRevisionsForFileInWorkspace (ctx  context.Context , filePath  string , opts  ... ListRevisionsForFileInWorkspaceOptions ) ([]FileInfo , error ) {
304342	var  opt  ListRevisionsForFileInWorkspaceOptions 
305343	for  _ , o  :=  range  opts  {
306344		if  o .WorkspaceID  !=  ""  {
@@ -325,7 +363,7 @@ func (g *GPTScript) ListRevisionsForFileInWorkspace(ctx context.Context, filePat
325363		return  nil , err 
326364	}
327365
328- 	var  info  []RevisionInfo 
366+ 	var  info  []FileInfo 
329367	err  =  json .Unmarshal ([]byte (out ), & info )
330368	if  err  !=  nil  {
331369		return  nil , err 
0 commit comments