From 6160af00b57b3a2f8853526655ac03a63cb1588e Mon Sep 17 00:00:00 2001 From: Justin Blumencranz <96924014+j15z@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:04:01 -0700 Subject: [PATCH 1/2] feat(copilot): identify current workspace in workspace list --- .../tools/handlers/workflow/queries.test.ts | 48 ++++++++++++++++++- .../tools/handlers/workflow/queries.ts | 5 +- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/apps/sim/lib/copilot/tools/handlers/workflow/queries.test.ts b/apps/sim/lib/copilot/tools/handlers/workflow/queries.test.ts index 86fe5c9e63a..1321c6a6e0a 100644 --- a/apps/sim/lib/copilot/tools/handlers/workflow/queries.test.ts +++ b/apps/sim/lib/copilot/tools/handlers/workflow/queries.test.ts @@ -11,11 +11,13 @@ const { getEffectiveBlockOutputPathsMock, hasTriggerCapabilityMock, getBlockMock, + listUserWorkspacesMock, } = vi.hoisted(() => ({ ensureWorkflowAccessMock: vi.fn(), getEffectiveBlockOutputPathsMock: vi.fn(), hasTriggerCapabilityMock: vi.fn(), getBlockMock: vi.fn(), + listUserWorkspacesMock: vi.fn(), })) const loadWorkflowFromNormalizedTablesMock = @@ -44,7 +46,51 @@ vi.mock('@/blocks/registry', () => ({ vi.mock('@/lib/workflows/utils', () => workflowsUtilsMock) -import { executeGetBlockOutputs } from './queries' +vi.mock('@/lib/workspaces/utils', () => ({ + listUserWorkspaces: listUserWorkspacesMock, +})) + +import { executeGetBlockOutputs, executeListUserWorkspaces } from './queries' + +describe('executeListUserWorkspaces', () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it('marks the current workspace in the accessible workspace list', async () => { + listUserWorkspacesMock.mockResolvedValue([ + { workspaceId: 'workspace-1', workspaceName: 'One', role: 'owner' }, + { workspaceId: 'workspace-2', workspaceName: 'Two', role: 'read' }, + ]) + + const result = await executeListUserWorkspaces({ + userId: 'user-1', + workflowId: 'workflow-1', + workspaceId: 'workspace-2', + }) + + expect(listUserWorkspacesMock).toHaveBeenCalledWith('user-1') + expect(result).toEqual({ + success: true, + output: { + workspaces: [ + { + workspaceId: 'workspace-1', + workspaceName: 'One', + role: 'owner', + isCurrent: false, + }, + { + workspaceId: 'workspace-2', + workspaceName: 'Two', + role: 'read', + isCurrent: true, + }, + ], + }, + }) + }) +}) describe('executeGetBlockOutputs', () => { beforeEach(() => { diff --git a/apps/sim/lib/copilot/tools/handlers/workflow/queries.ts b/apps/sim/lib/copilot/tools/handlers/workflow/queries.ts index f7b556ca453..bb5c63d2478 100644 --- a/apps/sim/lib/copilot/tools/handlers/workflow/queries.ts +++ b/apps/sim/lib/copilot/tools/handlers/workflow/queries.ts @@ -32,7 +32,10 @@ export async function executeListUserWorkspaces( context: ExecutionContext ): Promise { try { - const workspaces = await listUserWorkspaces(context.userId) + const workspaces = (await listUserWorkspaces(context.userId)).map((workspace) => ({ + ...workspace, + isCurrent: workspace.workspaceId === context.workspaceId, + })) return { success: true, output: { workspaces } } } catch (error) { From debb15384891d16f7c0de881c295b72fbd3b1547 Mon Sep 17 00:00:00 2001 From: Justin Blumencranz <96924014+j15z@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:12:25 -0700 Subject: [PATCH 2/2] fix(review): use absolute workspace query import --- apps/sim/lib/copilot/tools/handlers/workflow/queries.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/sim/lib/copilot/tools/handlers/workflow/queries.test.ts b/apps/sim/lib/copilot/tools/handlers/workflow/queries.test.ts index 1321c6a6e0a..33277c80567 100644 --- a/apps/sim/lib/copilot/tools/handlers/workflow/queries.test.ts +++ b/apps/sim/lib/copilot/tools/handlers/workflow/queries.test.ts @@ -50,7 +50,10 @@ vi.mock('@/lib/workspaces/utils', () => ({ listUserWorkspaces: listUserWorkspacesMock, })) -import { executeGetBlockOutputs, executeListUserWorkspaces } from './queries' +import { + executeGetBlockOutputs, + executeListUserWorkspaces, +} from '@/lib/copilot/tools/handlers/workflow/queries' describe('executeListUserWorkspaces', () => { beforeEach(() => {