@@ -70,6 +70,7 @@ export interface ToolCatalogEntry {
7070 | 'rename_workflow'
7171 | 'research'
7272 | 'respond'
73+ | 'restore_resource'
7374 | 'revert_to_version'
7475 | 'run'
7576 | 'run_block'
@@ -158,6 +159,7 @@ export interface ToolCatalogEntry {
158159 | 'rename_workflow'
159160 | 'research'
160161 | 'respond'
162+ | 'restore_resource'
161163 | 'revert_to_version'
162164 | 'run'
163165 | 'run_block'
@@ -479,9 +481,13 @@ export const DeleteFile: ToolCatalogEntry = {
479481 parameters : {
480482 type : 'object' ,
481483 properties : {
482- fileId : { type : 'string' , description : 'Canonical workspace file ID of the file to delete.' } ,
484+ fileIds : {
485+ type : 'array' ,
486+ description : 'Canonical workspace file IDs of the files to delete.' ,
487+ items : { type : 'string' } ,
488+ } ,
483489 } ,
484- required : [ 'fileId ' ] ,
490+ required : [ 'fileIds ' ] ,
485491 } ,
486492 resultSchema : {
487493 type : 'object' ,
@@ -501,8 +507,14 @@ export const DeleteFolder: ToolCatalogEntry = {
501507 mode : 'async' ,
502508 parameters : {
503509 type : 'object' ,
504- properties : { folderId : { type : 'string' , description : 'The folder ID to delete.' } } ,
505- required : [ 'folderId' ] ,
510+ properties : {
511+ folderIds : {
512+ type : 'array' ,
513+ description : 'The folder IDs to delete.' ,
514+ items : { type : 'string' } ,
515+ } ,
516+ } ,
517+ required : [ 'folderIds' ] ,
506518 } ,
507519 requiresConfirmation : true ,
508520 requiredPermission : 'write' ,
@@ -515,8 +527,14 @@ export const DeleteWorkflow: ToolCatalogEntry = {
515527 mode : 'async' ,
516528 parameters : {
517529 type : 'object' ,
518- properties : { workflowId : { type : 'string' , description : 'The workflow ID to delete.' } } ,
519- required : [ 'workflowId' ] ,
530+ properties : {
531+ workflowIds : {
532+ type : 'array' ,
533+ description : 'The workflow IDs to delete.' ,
534+ items : { type : 'string' } ,
535+ } ,
536+ } ,
537+ required : [ 'workflowIds' ] ,
520538 } ,
521539 requiresConfirmation : true ,
522540 requiredPermission : 'write' ,
@@ -1176,7 +1194,7 @@ export const Glob: ToolCatalogEntry = {
11761194 'Optional target-only UI phrase for the search row. The UI verb is supplied for you, so pass text like "workflow configs" or "knowledge bases", not a full sentence like "Finding workflow configs".' ,
11771195 } ,
11781196 } ,
1179- required : [ 'pattern' ] ,
1197+ required : [ 'pattern' , 'toolTitle' ] ,
11801198 } ,
11811199}
11821200
@@ -1221,7 +1239,7 @@ export const Grep: ToolCatalogEntry = {
12211239 'Optional target-only UI phrase for the search row. The UI verb is supplied for you, so pass text like "Slack integrations" or "deployed workflows", not a full sentence like "Searching for Slack integrations".' ,
12221240 } ,
12231241 } ,
1224- required : [ 'pattern' ] ,
1242+ required : [ 'pattern' , 'toolTitle' ] ,
12251243 } ,
12261244}
12271245
@@ -1322,22 +1340,21 @@ export const KnowledgeBase: ToolCatalogEntry = {
13221340 description :
13231341 'Tag definition IDs to opt out of (optional for add_connector). See tagDefinitions in the connector schema.' ,
13241342 } ,
1325- documentId : {
1326- type : 'string' ,
1327- description : 'Document ID (required for delete_document, update_document)' ,
1343+ documentId : { type : 'string' , description : 'Document ID (required for update_document)' } ,
1344+ documentIds : {
1345+ type : 'array' ,
1346+ description : 'Document IDs (for batch delete_document)' ,
1347+ items : { type : 'string' } ,
13281348 } ,
13291349 enabled : {
13301350 type : 'boolean' ,
13311351 description : 'Enable/disable a document (optional for update_document)' ,
13321352 } ,
1333- fileId : {
1334- type : 'string ' ,
1353+ fileIds : {
1354+ type : 'array ' ,
13351355 description :
1336- 'Canonical workspace file ID to add as a document (preferred for add_file). Discover via read("files/{name}/meta.json") or glob("files/by-id/*/meta.json").' ,
1337- } ,
1338- filePath : {
1339- type : 'string' ,
1340- description : 'Legacy workspace file reference for add_file. Prefer fileId.' ,
1356+ 'Canonical workspace file IDs to add as documents (for add_file). Discover via read("files/{name}/meta.json") or glob("files/by-id/*/meta.json").' ,
1357+ items : { type : 'string' } ,
13411358 } ,
13421359 filename : {
13431360 type : 'string' ,
@@ -1348,6 +1365,11 @@ export const KnowledgeBase: ToolCatalogEntry = {
13481365 description :
13491366 'Knowledge base ID (required for get, query, add_file, list_tags, create_tag, get_tag_usage)' ,
13501367 } ,
1368+ knowledgeBaseIds : {
1369+ type : 'array' ,
1370+ description : 'Knowledge base IDs (for batch delete)' ,
1371+ items : { type : 'string' } ,
1372+ } ,
13511373 name : {
13521374 type : 'string' ,
13531375 description : "Name of the knowledge base (required for 'create')" ,
@@ -1470,9 +1492,11 @@ export const ManageCredential: ToolCatalogEntry = {
14701492 parameters : {
14711493 type : 'object' ,
14721494 properties : {
1473- credentialId : {
1474- type : 'string' ,
1475- description : 'The credential ID (from environment/credentials.json)' ,
1495+ credentialId : { type : 'string' , description : 'The credential ID (required for rename)' } ,
1496+ credentialIds : {
1497+ type : 'array' ,
1498+ description : 'Array of credential IDs (for batch delete)' ,
1499+ items : { type : 'string' } ,
14761500 } ,
14771501 displayName : { type : 'string' , description : 'New display name (required for rename)' } ,
14781502 operation : {
@@ -1481,7 +1505,7 @@ export const ManageCredential: ToolCatalogEntry = {
14811505 enum : [ 'rename' , 'delete' ] ,
14821506 } ,
14831507 } ,
1484- required : [ 'operation' , 'credentialId' ] ,
1508+ required : [ 'operation' ] ,
14851509 } ,
14861510 requiresConfirmation : true ,
14871511 requiredPermission : 'admin' ,
@@ -1542,7 +1566,12 @@ export const ManageCustomTool: ToolCatalogEntry = {
15421566 toolId : {
15431567 type : 'string' ,
15441568 description :
1545- "The ID of the custom tool (required for edit/delete). Must be the exact toolId from the get_workflow_data custom tool response - do not guess or construct it. DO NOT PROVIDE THE TOOL ID IF THE OPERATION IS 'ADD'." ,
1569+ "The ID of the custom tool (required for edit). Must be the exact toolId from the get_workflow_data custom tool response - do not guess or construct it. DO NOT PROVIDE THE TOOL ID IF THE OPERATION IS 'ADD'." ,
1570+ } ,
1571+ toolIds : {
1572+ type : 'array' ,
1573+ description : 'Array of custom tool IDs (for batch delete)' ,
1574+ items : { type : 'string' } ,
15461575 } ,
15471576 } ,
15481577 required : [ 'operation' ] ,
@@ -1564,7 +1593,12 @@ export const ManageJob: ToolCatalogEntry = {
15641593 'Operation-specific arguments. For create: {title, prompt, cron?, time?, timezone?, lifecycle?, successCondition?, maxRuns?}. For get/delete: {jobId}. For update: {jobId, title?, prompt?, cron?, timezone?, status?, lifecycle?, successCondition?, maxRuns?}. For list: no args needed.' ,
15651594 properties : {
15661595 cron : { type : 'string' , description : 'Cron expression for recurring jobs' } ,
1567- jobId : { type : 'string' , description : 'Job ID (required for get, update, delete)' } ,
1596+ jobId : { type : 'string' , description : 'Job ID (required for get, update)' } ,
1597+ jobIds : {
1598+ type : 'array' ,
1599+ description : 'Array of job IDs (for batch delete)' ,
1600+ items : { type : 'string' } ,
1601+ } ,
15681602 lifecycle : {
15691603 type : 'string' ,
15701604 description :
@@ -1702,9 +1736,11 @@ export const MaterializeFile: ToolCatalogEntry = {
17021736 parameters : {
17031737 type : 'object' ,
17041738 properties : {
1705- fileName : {
1706- type : 'string' ,
1707- description : 'The name of the uploaded file to materialize (e.g. "report.pdf")' ,
1739+ fileNames : {
1740+ type : 'array' ,
1741+ description :
1742+ 'The names of the uploaded files to materialize (e.g. ["report.pdf", "data.csv"])' ,
1743+ items : { type : 'string' } ,
17081744 } ,
17091745 knowledgeBaseId : {
17101746 type : 'string' ,
@@ -1724,7 +1760,7 @@ export const MaterializeFile: ToolCatalogEntry = {
17241760 'Custom name for the table (only used with operation "table"). Defaults to the file name without extension.' ,
17251761 } ,
17261762 } ,
1727- required : [ 'fileName ' ] ,
1763+ required : [ 'fileNames ' ] ,
17281764 } ,
17291765 requiredPermission : 'write' ,
17301766}
@@ -1761,9 +1797,13 @@ export const MoveWorkflow: ToolCatalogEntry = {
17611797 type : 'string' ,
17621798 description : 'Target folder ID. Omit or pass empty string to move to workspace root.' ,
17631799 } ,
1764- workflowId : { type : 'string' , description : 'The workflow ID to move.' } ,
1800+ workflowIds : {
1801+ type : 'array' ,
1802+ description : 'The workflow IDs to move.' ,
1803+ items : { type : 'string' } ,
1804+ } ,
17651805 } ,
1766- required : [ 'workflowId ' ] ,
1806+ required : [ 'workflowIds ' ] ,
17671807 } ,
17681808 requiredPermission : 'write' ,
17691809}
@@ -1813,14 +1853,24 @@ export const OpenResource: ToolCatalogEntry = {
18131853 parameters : {
18141854 type : 'object' ,
18151855 properties : {
1816- id : { type : 'string' , description : 'The resource ID to open.' } ,
1817- type : {
1818- type : 'string' ,
1819- description : 'The resource type to open.' ,
1820- enum : [ 'workflow' , 'table' , 'knowledgebase' , 'file' ] ,
1856+ resources : {
1857+ type : 'array' ,
1858+ description : 'Array of resources to open. Each item must have type and id.' ,
1859+ items : {
1860+ type : 'object' ,
1861+ properties : {
1862+ id : { type : 'string' , description : 'The resource ID.' } ,
1863+ type : {
1864+ type : 'string' ,
1865+ description : 'The resource type.' ,
1866+ enum : [ 'workflow' , 'table' , 'knowledgebase' , 'file' ] ,
1867+ } ,
1868+ } ,
1869+ required : [ 'type' , 'id' ] ,
1870+ } ,
18211871 } ,
18221872 } ,
1823- required : [ 'type' , 'id '] ,
1873+ required : [ 'resources ' ] ,
18241874 } ,
18251875}
18261876
@@ -1948,6 +1998,27 @@ export const Respond: ToolCatalogEntry = {
19481998 hidden : true ,
19491999}
19502000
2001+ export const RestoreResource : ToolCatalogEntry = {
2002+ id : 'restore_resource' ,
2003+ name : 'restore_resource' ,
2004+ executor : 'sim' ,
2005+ mode : 'async' ,
2006+ parameters : {
2007+ type : 'object' ,
2008+ properties : {
2009+ id : { type : 'string' , description : 'The canonical resource ID to restore.' } ,
2010+ type : {
2011+ type : 'string' ,
2012+ description : 'The resource type to restore.' ,
2013+ enum : [ 'workflow' , 'table' , 'file' , 'knowledgebase' , 'folder' ] ,
2014+ } ,
2015+ } ,
2016+ required : [ 'type' , 'id' ] ,
2017+ } ,
2018+ requiresConfirmation : true ,
2019+ requiredPermission : 'admin' ,
2020+ }
2021+
19512022export const RevertToVersion : ToolCatalogEntry = {
19522023 id : 'revert_to_version' ,
19532024 name : 'revert_to_version' ,
@@ -2208,7 +2279,7 @@ export const SearchOnline: ToolCatalogEntry = {
22082279 'Optional target-only UI phrase for the search row. The UI verb is supplied for you, so pass text like "pricing changes" or "Slack webhook docs", not a full sentence like "Searching online for pricing changes".' ,
22092280 } ,
22102281 } ,
2211- required : [ 'query' ] ,
2282+ required : [ 'query' , 'toolTitle' ] ,
22122283 } ,
22132284}
22142285
@@ -2534,7 +2605,13 @@ export const UserTable: ToolCatalogEntry = {
25342605 } ,
25352606 tableId : {
25362607 type : 'string' ,
2537- description : "Table ID (required for most operations except 'create')" ,
2608+ description :
2609+ "Table ID (required for most operations except 'create' and batch 'delete')" ,
2610+ } ,
2611+ tableIds : {
2612+ type : 'array' ,
2613+ description : 'Array of table IDs (for batch delete)' ,
2614+ items : { type : 'string' } ,
25382615 } ,
25392616 unique : {
25402617 type : 'boolean' ,
@@ -3030,6 +3107,7 @@ export const TOOL_CATALOG: Record<string, ToolCatalogEntry> = {
30303107 [ RenameWorkflow . id ] : RenameWorkflow ,
30313108 [ Research . id ] : Research ,
30323109 [ Respond . id ] : Respond ,
3110+ [ RestoreResource . id ] : RestoreResource ,
30333111 [ RevertToVersion . id ] : RevertToVersion ,
30343112 [ Run . id ] : Run ,
30353113 [ RunBlock . id ] : RunBlock ,
0 commit comments