@@ -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