Skip to content

Commit c8e8c50

Browse files
committed
fix(mship): add folder rename tools and locked workflow status
1 parent a028d07 commit c8e8c50

11 files changed

Lines changed: 378 additions & 267 deletions

File tree

apps/sim/app/workspace/[workspaceId]/home/hooks/stream/stream-helpers.ts

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import { resolveStreamToolOutcome } from '@/lib/copilot/chat/stream-tool-outcome
44
import type { MothershipStreamV1ToolUI } from '@/lib/copilot/generated/mothership-stream-v1'
55
import {
66
CrawlWebsite,
7-
CreateFolder,
8-
DeleteFolder,
97
DeleteWorkflow,
108
DeployApi,
119
DeployChat,
@@ -18,13 +16,14 @@ import {
1816
ManageCredentialOperation,
1917
ManageCustomTool,
2018
ManageCustomToolOperation,
19+
ManageFolder,
20+
ManageFolderOperation,
2121
ManageMcpTool,
2222
ManageMcpToolOperation,
2323
ManageScheduledTask,
2424
ManageScheduledTaskOperation,
2525
ManageSkill,
2626
ManageSkillOperation,
27-
MoveFolder,
2827
MoveWorkflow,
2928
QueryLogs,
3029
Redeploy,
@@ -55,11 +54,7 @@ export const DEPLOY_TOOL_NAMES: Set<string> = new Set([
5554
Redeploy.id,
5655
])
5756

58-
export const FOLDER_TOOL_NAMES: Set<string> = new Set([
59-
CreateFolder.id,
60-
DeleteFolder.id,
61-
MoveFolder.id,
62-
])
57+
export const FOLDER_TOOL_NAMES: Set<string> = new Set([ManageFolder.id])
6358

6459
export const WORKFLOW_MUTATION_TOOL_NAMES: Set<string> = new Set([
6560
MoveWorkflow.id,
@@ -370,6 +365,19 @@ export function resolveToolDisplayTitle(
370365
)
371366
}
372367

368+
if (name === ManageFolder.id) {
369+
return resolveOperationDisplayTitle(
370+
args.operation,
371+
{
372+
[ManageFolderOperation.create]: 'Creating folder',
373+
[ManageFolderOperation.rename]: 'Renaming folder',
374+
[ManageFolderOperation.move]: 'Moving folder',
375+
[ManageFolderOperation.delete]: 'Deleting folder',
376+
},
377+
'Folder action'
378+
)
379+
}
380+
373381
if (name === RunWorkflow.id) {
374382
const workflowName = resolveWorkflowNameForDisplay(args.workflowId)
375383
return workflowName ? `Running ${workflowName}` : 'Running workflow'
@@ -521,5 +529,18 @@ export function resolveStreamingToolDisplayTitle(
521529
)
522530
}
523531

532+
if (name === ManageFolder.id) {
533+
return resolveOperationDisplayTitle(
534+
matchStreamingStringArg(streamingArgs, 'operation'),
535+
{
536+
[ManageFolderOperation.create]: 'Creating folder',
537+
[ManageFolderOperation.rename]: 'Renaming folder',
538+
[ManageFolderOperation.move]: 'Moving folder',
539+
[ManageFolderOperation.delete]: 'Deleting folder',
540+
},
541+
'Folder action'
542+
)
543+
}
544+
524545
return undefined
525546
}

apps/sim/lib/copilot/generated/tool-catalog-v1.ts

Lines changed: 66 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@ export interface ToolCatalogEntry {
1414
| 'crawl_website'
1515
| 'create_file'
1616
| 'create_file_folder'
17-
| 'create_folder'
1817
| 'create_workflow'
1918
| 'create_workspace_mcp_server'
2019
| 'delete_file'
2120
| 'delete_file_folder'
22-
| 'delete_folder'
2321
| 'delete_workflow'
2422
| 'delete_workspace_mcp_server'
2523
| 'deploy'
@@ -52,22 +50,21 @@ export interface ToolCatalogEntry {
5250
| 'knowledge'
5351
| 'knowledge_base'
5452
| 'list_file_folders'
55-
| 'list_folders'
5653
| 'list_integration_tools'
5754
| 'list_user_workspaces'
5855
| 'list_workspace_mcp_servers'
5956
| 'load_deployment'
6057
| 'load_integration_tool'
6158
| 'manage_credential'
6259
| 'manage_custom_tool'
60+
| 'manage_folder'
6361
| 'manage_mcp_tool'
6462
| 'manage_scheduled_task'
6563
| 'manage_skill'
6664
| 'materialize_file'
6765
| 'media'
6866
| 'move_file'
6967
| 'move_file_folder'
70-
| 'move_folder'
7168
| 'move_workflow'
7269
| 'oauth_get_auth_link'
7370
| 'oauth_request_access'
@@ -115,12 +112,10 @@ export interface ToolCatalogEntry {
115112
| 'crawl_website'
116113
| 'create_file'
117114
| 'create_file_folder'
118-
| 'create_folder'
119115
| 'create_workflow'
120116
| 'create_workspace_mcp_server'
121117
| 'delete_file'
122118
| 'delete_file_folder'
123-
| 'delete_folder'
124119
| 'delete_workflow'
125120
| 'delete_workspace_mcp_server'
126121
| 'deploy'
@@ -153,22 +148,21 @@ export interface ToolCatalogEntry {
153148
| 'knowledge'
154149
| 'knowledge_base'
155150
| 'list_file_folders'
156-
| 'list_folders'
157151
| 'list_integration_tools'
158152
| 'list_user_workspaces'
159153
| 'list_workspace_mcp_servers'
160154
| 'load_deployment'
161155
| 'load_integration_tool'
162156
| 'manage_credential'
163157
| 'manage_custom_tool'
158+
| 'manage_folder'
164159
| 'manage_mcp_tool'
165160
| 'manage_scheduled_task'
166161
| 'manage_skill'
167162
| 'materialize_file'
168163
| 'media'
169164
| 'move_file'
170165
| 'move_file_folder'
171-
| 'move_folder'
172166
| 'move_workflow'
173167
| 'oauth_get_auth_link'
174168
| 'oauth_request_access'
@@ -405,23 +399,6 @@ export const CreateFileFolder: ToolCatalogEntry = {
405399
requiredPermission: 'write',
406400
}
407401

408-
export const CreateFolder: ToolCatalogEntry = {
409-
id: 'create_folder',
410-
name: 'create_folder',
411-
route: 'sim',
412-
mode: 'async',
413-
parameters: {
414-
type: 'object',
415-
properties: {
416-
name: { type: 'string', description: 'Folder name.' },
417-
parentId: { type: 'string', description: 'Optional parent folder ID.' },
418-
workspaceId: { type: 'string', description: 'Optional workspace ID.' },
419-
},
420-
required: ['name'],
421-
},
422-
requiredPermission: 'write',
423-
}
424-
425402
export const CreateWorkflow: ToolCatalogEntry = {
426403
id: 'create_workflow',
427404
name: 'create_workflow',
@@ -519,26 +496,6 @@ export const DeleteFileFolder: ToolCatalogEntry = {
519496
requiredPermission: 'write',
520497
}
521498

522-
export const DeleteFolder: ToolCatalogEntry = {
523-
id: 'delete_folder',
524-
name: 'delete_folder',
525-
route: 'sim',
526-
mode: 'async',
527-
parameters: {
528-
type: 'object',
529-
properties: {
530-
folderIds: {
531-
type: 'array',
532-
description: 'The folder IDs to delete.',
533-
items: { type: 'string' },
534-
},
535-
},
536-
required: ['folderIds'],
537-
},
538-
requiresConfirmation: true,
539-
requiredPermission: 'write',
540-
}
541-
542499
export const DeleteWorkflow: ToolCatalogEntry = {
543500
id: 'delete_workflow',
544501
name: 'delete_workflow',
@@ -2366,19 +2323,6 @@ export const ListFileFolders: ToolCatalogEntry = {
23662323
requiredPermission: 'read',
23672324
}
23682325

2369-
export const ListFolders: ToolCatalogEntry = {
2370-
id: 'list_folders',
2371-
name: 'list_folders',
2372-
route: 'sim',
2373-
mode: 'async',
2374-
parameters: {
2375-
type: 'object',
2376-
properties: {
2377-
workspaceId: { type: 'string', description: 'Optional workspace ID to list folders for.' },
2378-
},
2379-
},
2380-
}
2381-
23822326
export const ListIntegrationTools: ToolCatalogEntry = {
23832327
id: 'list_integration_tools',
23842328
name: 'list_integration_tools',
@@ -2562,6 +2506,51 @@ export const ManageCustomTool: ToolCatalogEntry = {
25622506
requiredPermission: 'write',
25632507
}
25642508

2509+
export const ManageFolder: ToolCatalogEntry = {
2510+
id: 'manage_folder',
2511+
name: 'manage_folder',
2512+
route: 'sim',
2513+
mode: 'async',
2514+
parameters: {
2515+
type: 'object',
2516+
properties: {
2517+
destinationPath: {
2518+
type: 'string',
2519+
description:
2520+
'Destination parent folder\'s VFS path for move/create. Omit (or pass "workflows") to target the workspace root.',
2521+
},
2522+
folderId: {
2523+
type: 'string',
2524+
description:
2525+
'Target folder ID, used as a fallback when path is not given. Readable from a contained workflow\'s meta.json "folderId".',
2526+
},
2527+
name: {
2528+
type: 'string',
2529+
description:
2530+
'Folder name. Required for rename (the new name); for create when you pass a destination parent instead of a full path.',
2531+
},
2532+
operation: {
2533+
type: 'string',
2534+
description: 'The operation to perform.',
2535+
enum: ['create', 'rename', 'move', 'delete'],
2536+
},
2537+
parentId: {
2538+
type: 'string',
2539+
description:
2540+
'Destination parent folder ID, used as a fallback when destinationPath is not given.',
2541+
},
2542+
path: {
2543+
type: 'string',
2544+
description:
2545+
'Target folder\'s VFS path (e.g. "workflows/Marketing/Q3 Campaigns"), per-segment percent-encoded like every VFS path. Identifies the folder for rename/move/delete; for create it is the new folder\'s full path (its parent must already exist).',
2546+
},
2547+
},
2548+
required: ['operation'],
2549+
},
2550+
requiresConfirmation: true,
2551+
requiredPermission: 'write',
2552+
}
2553+
25652554
export const ManageMcpTool: ToolCatalogEntry = {
25662555
id: 'manage_mcp_tool',
25672556
name: 'manage_mcp_tool',
@@ -2820,26 +2809,6 @@ export const MoveFileFolder: ToolCatalogEntry = {
28202809
requiredPermission: 'write',
28212810
}
28222811

2823-
export const MoveFolder: ToolCatalogEntry = {
2824-
id: 'move_folder',
2825-
name: 'move_folder',
2826-
route: 'sim',
2827-
mode: 'async',
2828-
parameters: {
2829-
type: 'object',
2830-
properties: {
2831-
folderId: { type: 'string', description: 'The folder ID to move.' },
2832-
parentId: {
2833-
type: 'string',
2834-
description:
2835-
'Target parent folder ID. Omit or pass empty string to move to workspace root.',
2836-
},
2837-
},
2838-
required: ['folderId'],
2839-
},
2840-
requiredPermission: 'write',
2841-
}
2842-
28432812
export const MoveWorkflow: ToolCatalogEntry = {
28442813
id: 'move_workflow',
28452814
name: 'move_workflow',
@@ -3958,8 +3927,7 @@ export const UserTable: ToolCatalogEntry = {
39583927
},
39593928
limit: {
39603929
type: 'number',
3961-
description:
3962-
'Maximum rows to return or affect (optional, default 100). Omit on update_rows_by_filter / delete_rows_by_filter to act on every match.',
3930+
description: 'Maximum rows to return or affect (optional, default 100)',
39633931
},
39643932
mapping: {
39653933
type: 'object',
@@ -4439,6 +4407,23 @@ export const ManageCustomToolOperationValues = [
44394407
ManageCustomToolOperation.list,
44404408
] as const
44414409

4410+
export const ManageFolderOperation = {
4411+
create: 'create',
4412+
rename: 'rename',
4413+
move: 'move',
4414+
delete: 'delete',
4415+
} as const
4416+
4417+
export type ManageFolderOperation =
4418+
(typeof ManageFolderOperation)[keyof typeof ManageFolderOperation]
4419+
4420+
export const ManageFolderOperationValues = [
4421+
ManageFolderOperation.create,
4422+
ManageFolderOperation.rename,
4423+
ManageFolderOperation.move,
4424+
ManageFolderOperation.delete,
4425+
] as const
4426+
44424427
export const ManageMcpToolOperation = {
44434428
add: 'add',
44444429
edit: 'edit',
@@ -4615,12 +4600,10 @@ export const TOOL_CATALOG: Record<string, ToolCatalogEntry> = {
46154600
[CrawlWebsite.id]: CrawlWebsite,
46164601
[CreateFile.id]: CreateFile,
46174602
[CreateFileFolder.id]: CreateFileFolder,
4618-
[CreateFolder.id]: CreateFolder,
46194603
[CreateWorkflow.id]: CreateWorkflow,
46204604
[CreateWorkspaceMcpServer.id]: CreateWorkspaceMcpServer,
46214605
[DeleteFile.id]: DeleteFile,
46224606
[DeleteFileFolder.id]: DeleteFileFolder,
4623-
[DeleteFolder.id]: DeleteFolder,
46244607
[DeleteWorkflow.id]: DeleteWorkflow,
46254608
[DeleteWorkspaceMcpServer.id]: DeleteWorkspaceMcpServer,
46264609
[Deploy.id]: Deploy,
@@ -4653,22 +4636,21 @@ export const TOOL_CATALOG: Record<string, ToolCatalogEntry> = {
46534636
[Knowledge.id]: Knowledge,
46544637
[KnowledgeBase.id]: KnowledgeBase,
46554638
[ListFileFolders.id]: ListFileFolders,
4656-
[ListFolders.id]: ListFolders,
46574639
[ListIntegrationTools.id]: ListIntegrationTools,
46584640
[ListUserWorkspaces.id]: ListUserWorkspaces,
46594641
[ListWorkspaceMcpServers.id]: ListWorkspaceMcpServers,
46604642
[LoadDeployment.id]: LoadDeployment,
46614643
[LoadIntegrationTool.id]: LoadIntegrationTool,
46624644
[ManageCredential.id]: ManageCredential,
46634645
[ManageCustomTool.id]: ManageCustomTool,
4646+
[ManageFolder.id]: ManageFolder,
46644647
[ManageMcpTool.id]: ManageMcpTool,
46654648
[ManageScheduledTask.id]: ManageScheduledTask,
46664649
[ManageSkill.id]: ManageSkill,
46674650
[MaterializeFile.id]: MaterializeFile,
46684651
[Media.id]: Media,
46694652
[MoveFile.id]: MoveFile,
46704653
[MoveFileFolder.id]: MoveFileFolder,
4671-
[MoveFolder.id]: MoveFolder,
46724654
[MoveWorkflow.id]: MoveWorkflow,
46734655
[OauthGetAuthLink.id]: OauthGetAuthLink,
46744656
[OauthRequestAccess.id]: OauthRequestAccess,

0 commit comments

Comments
 (0)