From 92d6b1d7391b967452f262fad7c79f23dc5da9c1 Mon Sep 17 00:00:00 2001 From: Donnie Adams Date: Mon, 28 Oct 2024 07:24:26 -0400 Subject: [PATCH 1/2] chore: make workspace ID required when deleting workspaces Signed-off-by: Donnie Adams --- src/gptscript.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gptscript.ts b/src/gptscript.ts index 14695e7..40ca832 100644 --- a/src/gptscript.ts +++ b/src/gptscript.ts @@ -473,10 +473,11 @@ export class GPTScript { return out.trim() } - async deleteWorkspace(workspaceID?: string): Promise { + async deleteWorkspace(workspaceID: string): Promise { if (!workspaceID) { - workspaceID = process.env.GPTSCRIPT_WORKSPACE_ID ?? "" + return Promise.reject("workspace ID cannot be empty") } + await this.runBasicCommand("workspaces/delete", { id: workspaceID, workspaceTool: this.opts.WorkspaceTool, From ec61ee880c281b3ed282659e8232e1aec1f0bf92 Mon Sep 17 00:00:00 2001 From: Donnie Adams Date: Mon, 28 Oct 2024 07:48:02 -0400 Subject: [PATCH 2/2] feat: add ability to stat files in workspace API Signed-off-by: Donnie Adams --- src/gptscript.ts | 21 +++++++++++++++++++++ tests/gptscript.test.ts | 16 ++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/gptscript.ts b/src/gptscript.ts index 40ca832..431e48d 100644 --- a/src/gptscript.ts +++ b/src/gptscript.ts @@ -548,6 +548,20 @@ export class GPTScript { return Buffer.from(out.trim(), "base64") } + async statFileInWorkspace(filePath: string, workspaceID?: string): Promise { + if (!workspaceID) { + workspaceID = process.env.GPTSCRIPT_WORKSPACE_ID ?? "" + } + const out = await this.runBasicCommand("workspaces/stat-file", { + id: workspaceID, + filePath: filePath, + workspaceTool: this.opts.WorkspaceTool, + env: this.opts.Env, + }) + + return JSON.parse(out) + } + /** * Helper method to handle the common logic for loading. * @@ -590,6 +604,13 @@ export class GPTScript { } } +export interface FileInfo { + workspaceID: string + name: string + size: number + modTime: string +} + export class Run { public readonly id: string public readonly opts: RunOpts diff --git a/tests/gptscript.test.ts b/tests/gptscript.test.ts index b0ac6bd..4ac834c 100644 --- a/tests/gptscript.test.ts +++ b/tests/gptscript.test.ts @@ -977,6 +977,14 @@ describe("gptscript module", () => { await g.writeFileInWorkspace("test.txt", Buffer.from("test"), workspaceID) const content = await g.readFileInWorkspace("test.txt", workspaceID) expect(content.toString()).toEqual("test") + + const fileInfo = await g.statFileInWorkspace("test.txt", workspaceID) + expect(fileInfo.size).toEqual(4) + expect(fileInfo.name).toEqual("test.txt") + expect(fileInfo.workspaceID).toEqual(workspaceID) + expect(fileInfo.modTime).toBeDefined() + + await g.deleteFileInWorkspace("test.txt", workspaceID) await g.deleteWorkspace(workspaceID) }, 60000) @@ -1034,6 +1042,14 @@ describe("gptscript module", () => { await g.writeFileInWorkspace("test.txt", Buffer.from("test"), workspaceID) const content = await g.readFileInWorkspace("test.txt", workspaceID) expect(content.toString()).toEqual("test") + + const fileInfo = await g.statFileInWorkspace("test.txt", workspaceID) + expect(fileInfo.size).toEqual(4) + expect(fileInfo.name).toEqual("test.txt") + expect(fileInfo.workspaceID).toEqual(workspaceID) + expect(fileInfo.modTime).toBeDefined() + + await g.deleteFileInWorkspace("test.txt", workspaceID) await g.deleteWorkspace(workspaceID) }, 60000)