@n8n/instance-ai 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/dist/agent/instance-agent.js +4 -12
  2. package/dist/agent/instance-agent.js.map +1 -1
  3. package/dist/agent/sanitize-mcp-schemas.d.ts +4 -0
  4. package/dist/agent/sanitize-mcp-schemas.js +88 -18
  5. package/dist/agent/sanitize-mcp-schemas.js.map +1 -1
  6. package/dist/agent/sub-agent-debriefing.d.ts +4 -4
  7. package/dist/agent/system-prompt.js +18 -18
  8. package/dist/agent/system-prompt.js.map +1 -1
  9. package/dist/build.tsbuildinfo +1 -1
  10. package/dist/constants/max-steps.d.ts +9 -0
  11. package/dist/constants/max-steps.js +13 -0
  12. package/dist/constants/max-steps.js.map +1 -0
  13. package/dist/index.d.ts +5 -2
  14. package/dist/index.js +12 -3
  15. package/dist/index.js.map +1 -1
  16. package/dist/memory/title-utils.d.ts +1 -1
  17. package/dist/memory/title-utils.js +5 -23
  18. package/dist/memory/title-utils.js.map +1 -1
  19. package/dist/planned-tasks/planned-task-service.js +42 -6
  20. package/dist/planned-tasks/planned-task-service.js.map +1 -1
  21. package/dist/storage/workflow-loop-storage.d.ts +10 -0
  22. package/dist/stream/work-summary-accumulator.d.ts +6 -6
  23. package/dist/tools/credentials.tool.d.ts +2 -0
  24. package/dist/tools/credentials.tool.js +253 -0
  25. package/dist/tools/credentials.tool.js.map +1 -0
  26. package/dist/tools/data-tables.tool.d.ts +2 -0
  27. package/dist/tools/data-tables.tool.js +410 -0
  28. package/dist/tools/data-tables.tool.js.map +1 -0
  29. package/dist/tools/executions.tool.d.ts +2 -0
  30. package/dist/tools/executions.tool.js +174 -0
  31. package/dist/tools/executions.tool.js.map +1 -0
  32. package/dist/tools/index.d.ts +21 -57
  33. package/dist/tools/index.js +35 -132
  34. package/dist/tools/index.js.map +1 -1
  35. package/dist/tools/nodes.tool.d.ts +2 -0
  36. package/dist/tools/nodes.tool.js +298 -0
  37. package/dist/tools/nodes.tool.js.map +1 -0
  38. package/dist/tools/orchestration/blueprint.schema.d.ts +15 -15
  39. package/dist/tools/orchestration/browser-credential-setup.tool.js +13 -17
  40. package/dist/tools/orchestration/browser-credential-setup.tool.js.map +1 -1
  41. package/dist/tools/orchestration/build-workflow-agent.prompt.js +32 -28
  42. package/dist/tools/orchestration/build-workflow-agent.prompt.js.map +1 -1
  43. package/dist/tools/orchestration/build-workflow-agent.tool.d.ts +9 -1
  44. package/dist/tools/orchestration/build-workflow-agent.tool.js +73 -58
  45. package/dist/tools/orchestration/build-workflow-agent.tool.js.map +1 -1
  46. package/dist/tools/orchestration/data-table-agent.prompt.d.ts +1 -1
  47. package/dist/tools/orchestration/data-table-agent.prompt.js +7 -7
  48. package/dist/tools/orchestration/data-table-agent.tool.js +10 -22
  49. package/dist/tools/orchestration/data-table-agent.tool.js.map +1 -1
  50. package/dist/tools/orchestration/delegate.tool.js +3 -3
  51. package/dist/tools/orchestration/delegate.tool.js.map +1 -1
  52. package/dist/tools/orchestration/plan-agent-prompt.d.ts +1 -1
  53. package/dist/tools/orchestration/plan-agent-prompt.js +5 -5
  54. package/dist/tools/orchestration/plan-with-agent.tool.js +9 -11
  55. package/dist/tools/orchestration/plan-with-agent.tool.js.map +1 -1
  56. package/dist/tools/orchestration/research-with-agent.tool.js +6 -9
  57. package/dist/tools/orchestration/research-with-agent.tool.js.map +1 -1
  58. package/dist/tools/research.tool.d.ts +2 -0
  59. package/dist/tools/research.tool.js +159 -0
  60. package/dist/tools/research.tool.js.map +1 -0
  61. package/dist/tools/{orchestration/update-tasks.tool.d.ts → task-control.tool.d.ts} +2 -2
  62. package/dist/tools/task-control.tool.js +81 -0
  63. package/dist/tools/task-control.tool.js.map +1 -0
  64. package/dist/tools/templates.tool.d.ts +1 -0
  65. package/dist/tools/templates.tool.js +144 -0
  66. package/dist/tools/templates.tool.js.map +1 -0
  67. package/dist/tools/workflows/build-workflow.tool.js +2 -0
  68. package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
  69. package/dist/tools/workflows/materialize-node-type.tool.d.ts +4 -4
  70. package/dist/tools/workflows/setup-workflow.service.d.ts +4 -1
  71. package/dist/tools/workflows/setup-workflow.service.js +91 -15
  72. package/dist/tools/workflows/setup-workflow.service.js.map +1 -1
  73. package/dist/tools/workflows/submit-workflow.tool.d.ts +1 -0
  74. package/dist/tools/workflows/submit-workflow.tool.js +5 -0
  75. package/dist/tools/workflows/submit-workflow.tool.js.map +1 -1
  76. package/dist/tools/workflows.tool.d.ts +2 -0
  77. package/dist/tools/workflows.tool.js +493 -0
  78. package/dist/tools/workflows.tool.js.map +1 -0
  79. package/dist/tools/workspace.tool.d.ts +2 -0
  80. package/dist/tools/workspace.tool.js +278 -0
  81. package/dist/tools/workspace.tool.js.map +1 -0
  82. package/dist/tracing/langsmith-tracing.d.ts +1 -0
  83. package/dist/tracing/langsmith-tracing.js +170 -2
  84. package/dist/tracing/langsmith-tracing.js.map +1 -1
  85. package/dist/tracing/trace-replay.d.ts +61 -0
  86. package/dist/tracing/trace-replay.js +208 -0
  87. package/dist/tracing/trace-replay.js.map +1 -0
  88. package/dist/types.d.ts +7 -0
  89. package/dist/workflow-loop/guidance.js +5 -5
  90. package/dist/workflow-loop/guidance.js.map +1 -1
  91. package/dist/workflow-loop/workflow-loop-controller.js +5 -0
  92. package/dist/workflow-loop/workflow-loop-controller.js.map +1 -1
  93. package/dist/workflow-loop/workflow-loop-state.d.ts +7 -0
  94. package/dist/workflow-loop/workflow-loop-state.js +2 -0
  95. package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
  96. package/package.json +10 -8
  97. package/dist/agent/tool-access.d.ts +0 -2
  98. package/dist/agent/tool-access.js +0 -28
  99. package/dist/agent/tool-access.js.map +0 -1
  100. package/dist/tools/best-practices/get-best-practices.tool.d.ts +0 -9
  101. package/dist/tools/best-practices/get-best-practices.tool.js +0 -66
  102. package/dist/tools/best-practices/get-best-practices.tool.js.map +0 -1
  103. package/dist/tools/credentials/delete-credential.tool.d.ts +0 -20
  104. package/dist/tools/credentials/delete-credential.tool.js +0 -58
  105. package/dist/tools/credentials/delete-credential.tool.js.map +0 -1
  106. package/dist/tools/credentials/get-credential.tool.d.ts +0 -10
  107. package/dist/tools/credentials/get-credential.tool.js +0 -32
  108. package/dist/tools/credentials/get-credential.tool.js.map +0 -1
  109. package/dist/tools/credentials/list-credentials.tool.d.ts +0 -16
  110. package/dist/tools/credentials/list-credentials.tool.js +0 -72
  111. package/dist/tools/credentials/list-credentials.tool.js.map +0 -1
  112. package/dist/tools/credentials/search-credential-types.tool.d.ts +0 -10
  113. package/dist/tools/credentials/search-credential-types.tool.js +0 -46
  114. package/dist/tools/credentials/search-credential-types.tool.js.map +0 -1
  115. package/dist/tools/credentials/setup-credentials.tool.d.ts +0 -69
  116. package/dist/tools/credentials/setup-credentials.tool.js +0 -140
  117. package/dist/tools/credentials/setup-credentials.tool.js.map +0 -1
  118. package/dist/tools/credentials/test-credential.tool.d.ts +0 -10
  119. package/dist/tools/credentials/test-credential.tool.js +0 -32
  120. package/dist/tools/credentials/test-credential.tool.js.map +0 -1
  121. package/dist/tools/data-tables/add-data-table-column.tool.d.ts +0 -23
  122. package/dist/tools/data-tables/add-data-table-column.tool.js +0 -67
  123. package/dist/tools/data-tables/add-data-table-column.tool.js.map +0 -1
  124. package/dist/tools/data-tables/create-data-table.tool.d.ts +0 -38
  125. package/dist/tools/data-tables/create-data-table.tool.js +0 -106
  126. package/dist/tools/data-tables/create-data-table.tool.js.map +0 -1
  127. package/dist/tools/data-tables/delete-data-table-column.tool.d.ts +0 -20
  128. package/dist/tools/data-tables/delete-data-table-column.tool.js +0 -55
  129. package/dist/tools/data-tables/delete-data-table-column.tool.js.map +0 -1
  130. package/dist/tools/data-tables/delete-data-table-rows.tool.d.ts +0 -63
  131. package/dist/tools/data-tables/delete-data-table-rows.tool.js +0 -79
  132. package/dist/tools/data-tables/delete-data-table-rows.tool.js.map +0 -1
  133. package/dist/tools/data-tables/delete-data-table.tool.d.ts +0 -17
  134. package/dist/tools/data-tables/delete-data-table.tool.js +0 -54
  135. package/dist/tools/data-tables/delete-data-table.tool.js.map +0 -1
  136. package/dist/tools/data-tables/get-data-table-schema.tool.d.ts +0 -10
  137. package/dist/tools/data-tables/get-data-table-schema.tool.js +0 -29
  138. package/dist/tools/data-tables/get-data-table-schema.tool.js.map +0 -1
  139. package/dist/tools/data-tables/insert-data-table-rows.tool.d.ts +0 -20
  140. package/dist/tools/data-tables/insert-data-table-rows.tool.js +0 -62
  141. package/dist/tools/data-tables/insert-data-table-rows.tool.js.map +0 -1
  142. package/dist/tools/data-tables/list-data-tables.tool.d.ts +0 -10
  143. package/dist/tools/data-tables/list-data-tables.tool.js +0 -34
  144. package/dist/tools/data-tables/list-data-tables.tool.js.map +0 -1
  145. package/dist/tools/data-tables/query-data-table-rows.tool.d.ts +0 -62
  146. package/dist/tools/data-tables/query-data-table-rows.tool.js +0 -56
  147. package/dist/tools/data-tables/query-data-table-rows.tool.js.map +0 -1
  148. package/dist/tools/data-tables/rename-data-table-column.tool.d.ts +0 -23
  149. package/dist/tools/data-tables/rename-data-table-column.tool.js +0 -56
  150. package/dist/tools/data-tables/rename-data-table-column.tool.js.map +0 -1
  151. package/dist/tools/data-tables/update-data-table-rows.tool.d.ts +0 -66
  152. package/dist/tools/data-tables/update-data-table-rows.tool.js +0 -67
  153. package/dist/tools/data-tables/update-data-table-rows.tool.js.map +0 -1
  154. package/dist/tools/executions/debug-execution.tool.d.ts +0 -10
  155. package/dist/tools/executions/debug-execution.tool.js +0 -43
  156. package/dist/tools/executions/debug-execution.tool.js.map +0 -1
  157. package/dist/tools/executions/get-execution.tool.d.ts +0 -10
  158. package/dist/tools/executions/get-execution.tool.js +0 -28
  159. package/dist/tools/executions/get-execution.tool.js.map +0 -1
  160. package/dist/tools/executions/get-node-output.tool.d.ts +0 -19
  161. package/dist/tools/executions/get-node-output.tool.js +0 -41
  162. package/dist/tools/executions/get-node-output.tool.js.map +0 -1
  163. package/dist/tools/executions/list-executions.tool.d.ts +0 -16
  164. package/dist/tools/executions/list-executions.tool.js +0 -47
  165. package/dist/tools/executions/list-executions.tool.js.map +0 -1
  166. package/dist/tools/executions/run-workflow.tool.d.ts +0 -26
  167. package/dist/tools/executions/run-workflow.tool.js +0 -92
  168. package/dist/tools/executions/run-workflow.tool.js.map +0 -1
  169. package/dist/tools/executions/stop-execution.tool.d.ts +0 -10
  170. package/dist/tools/executions/stop-execution.tool.js +0 -27
  171. package/dist/tools/executions/stop-execution.tool.js.map +0 -1
  172. package/dist/tools/nodes/explore-node-resources.tool.d.ts +0 -34
  173. package/dist/tools/nodes/explore-node-resources.tool.js +0 -73
  174. package/dist/tools/nodes/explore-node-resources.tool.js.map +0 -1
  175. package/dist/tools/nodes/get-node-description.tool.d.ts +0 -10
  176. package/dist/tools/nodes/get-node-description.tool.js +0 -54
  177. package/dist/tools/nodes/get-node-description.tool.js.map +0 -1
  178. package/dist/tools/nodes/get-node-type-definition.tool.d.ts +0 -40
  179. package/dist/tools/nodes/get-node-type-definition.tool.js +0 -75
  180. package/dist/tools/nodes/get-node-type-definition.tool.js.map +0 -1
  181. package/dist/tools/nodes/get-suggested-nodes.tool.d.ts +0 -9
  182. package/dist/tools/nodes/get-suggested-nodes.tool.js +0 -56
  183. package/dist/tools/nodes/get-suggested-nodes.tool.js.map +0 -1
  184. package/dist/tools/nodes/list-nodes.tool.d.ts +0 -10
  185. package/dist/tools/nodes/list-nodes.tool.js +0 -35
  186. package/dist/tools/nodes/list-nodes.tool.js.map +0 -1
  187. package/dist/tools/nodes/search-nodes.tool.d.ts +0 -16
  188. package/dist/tools/nodes/search-nodes.tool.js +0 -91
  189. package/dist/tools/nodes/search-nodes.tool.js.map +0 -1
  190. package/dist/tools/orchestration/cancel-background-task.tool.d.ts +0 -10
  191. package/dist/tools/orchestration/cancel-background-task.tool.js +0 -26
  192. package/dist/tools/orchestration/cancel-background-task.tool.js.map +0 -1
  193. package/dist/tools/orchestration/correct-background-task.tool.d.ts +0 -13
  194. package/dist/tools/orchestration/correct-background-task.tool.js +0 -43
  195. package/dist/tools/orchestration/correct-background-task.tool.js.map +0 -1
  196. package/dist/tools/orchestration/update-tasks.tool.js +0 -26
  197. package/dist/tools/orchestration/update-tasks.tool.js.map +0 -1
  198. package/dist/tools/templates/search-template-parameters.tool.d.ts +0 -18
  199. package/dist/tools/templates/search-template-parameters.tool.js +0 -57
  200. package/dist/tools/templates/search-template-parameters.tool.js.map +0 -1
  201. package/dist/tools/templates/search-template-structures.tool.d.ts +0 -15
  202. package/dist/tools/templates/search-template-structures.tool.js +0 -47
  203. package/dist/tools/templates/search-template-structures.tool.js.map +0 -1
  204. package/dist/tools/web-research/fetch-url.tool.d.ts +0 -13
  205. package/dist/tools/web-research/fetch-url.tool.js +0 -132
  206. package/dist/tools/web-research/fetch-url.tool.js.map +0 -1
  207. package/dist/tools/web-research/index.d.ts +0 -1
  208. package/dist/tools/web-research/index.js +0 -6
  209. package/dist/tools/web-research/index.js.map +0 -1
  210. package/dist/tools/web-research/web-search.tool.d.ts +0 -16
  211. package/dist/tools/web-research/web-search.tool.js +0 -59
  212. package/dist/tools/web-research/web-search.tool.js.map +0 -1
  213. package/dist/tools/workflows/delete-workflow.tool.d.ts +0 -20
  214. package/dist/tools/workflows/delete-workflow.tool.js +0 -55
  215. package/dist/tools/workflows/delete-workflow.tool.js.map +0 -1
  216. package/dist/tools/workflows/get-workflow-as-code.tool.d.ts +0 -10
  217. package/dist/tools/workflows/get-workflow-as-code.tool.js +0 -39
  218. package/dist/tools/workflows/get-workflow-as-code.tool.js.map +0 -1
  219. package/dist/tools/workflows/get-workflow-version.tool.d.ts +0 -13
  220. package/dist/tools/workflows/get-workflow-version.tool.js +0 -40
  221. package/dist/tools/workflows/get-workflow-version.tool.js.map +0 -1
  222. package/dist/tools/workflows/get-workflow.tool.d.ts +0 -10
  223. package/dist/tools/workflows/get-workflow.tool.js +0 -38
  224. package/dist/tools/workflows/get-workflow.tool.js.map +0 -1
  225. package/dist/tools/workflows/list-workflow-versions.tool.d.ts +0 -16
  226. package/dist/tools/workflows/list-workflow-versions.tool.js +0 -49
  227. package/dist/tools/workflows/list-workflow-versions.tool.js.map +0 -1
  228. package/dist/tools/workflows/list-workflows.tool.d.ts +0 -13
  229. package/dist/tools/workflows/list-workflows.tool.js +0 -44
  230. package/dist/tools/workflows/list-workflows.tool.js.map +0 -1
  231. package/dist/tools/workflows/publish-workflow.tool.d.ts +0 -10
  232. package/dist/tools/workflows/publish-workflow.tool.js +0 -97
  233. package/dist/tools/workflows/publish-workflow.tool.js.map +0 -1
  234. package/dist/tools/workflows/restore-workflow-version.tool.d.ts +0 -20
  235. package/dist/tools/workflows/restore-workflow-version.tool.js +0 -72
  236. package/dist/tools/workflows/restore-workflow-version.tool.js.map +0 -1
  237. package/dist/tools/workflows/setup-workflow.tool.d.ts +0 -13
  238. package/dist/tools/workflows/setup-workflow.tool.js +0 -215
  239. package/dist/tools/workflows/setup-workflow.tool.js.map +0 -1
  240. package/dist/tools/workflows/unpublish-workflow.tool.d.ts +0 -20
  241. package/dist/tools/workflows/unpublish-workflow.tool.js +0 -65
  242. package/dist/tools/workflows/unpublish-workflow.tool.js.map +0 -1
  243. package/dist/tools/workflows/update-workflow-version.tool.d.ts +0 -19
  244. package/dist/tools/workflows/update-workflow-version.tool.js +0 -37
  245. package/dist/tools/workflows/update-workflow-version.tool.js.map +0 -1
  246. package/dist/tools/workspace/cleanup-test-executions.tool.d.ts +0 -23
  247. package/dist/tools/workspace/cleanup-test-executions.tool.js +0 -62
  248. package/dist/tools/workspace/cleanup-test-executions.tool.js.map +0 -1
  249. package/dist/tools/workspace/create-folder.tool.d.ts +0 -23
  250. package/dist/tools/workspace/create-folder.tool.js +0 -72
  251. package/dist/tools/workspace/create-folder.tool.js.map +0 -1
  252. package/dist/tools/workspace/delete-folder.tool.d.ts +0 -29
  253. package/dist/tools/workspace/delete-folder.tool.js +0 -67
  254. package/dist/tools/workspace/delete-folder.tool.js.map +0 -1
  255. package/dist/tools/workspace/list-folders.tool.d.ts +0 -10
  256. package/dist/tools/workspace/list-folders.tool.js +0 -28
  257. package/dist/tools/workspace/list-folders.tool.js.map +0 -1
  258. package/dist/tools/workspace/list-projects.tool.d.ts +0 -4
  259. package/dist/tools/workspace/list-projects.tool.js +0 -26
  260. package/dist/tools/workspace/list-projects.tool.js.map +0 -1
  261. package/dist/tools/workspace/list-tags.tool.d.ts +0 -4
  262. package/dist/tools/workspace/list-tags.tool.js +0 -25
  263. package/dist/tools/workspace/list-tags.tool.js.map +0 -1
  264. package/dist/tools/workspace/move-workflow-to-folder.tool.d.ts +0 -26
  265. package/dist/tools/workspace/move-workflow-to-folder.tool.js +0 -60
  266. package/dist/tools/workspace/move-workflow-to-folder.tool.js.map +0 -1
  267. package/dist/tools/workspace/tag-workflow.tool.d.ts +0 -23
  268. package/dist/tools/workspace/tag-workflow.tool.js +0 -56
  269. package/dist/tools/workspace/tag-workflow.tool.js.map +0 -1
@@ -0,0 +1,278 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWorkspaceTool = createWorkspaceTool;
4
+ const tools_1 = require("@mastra/core/tools");
5
+ const api_types_1 = require("@n8n/api-types");
6
+ const nanoid_1 = require("nanoid");
7
+ const zod_1 = require("zod");
8
+ const sanitize_mcp_schemas_1 = require("../agent/sanitize-mcp-schemas");
9
+ const workflowIdField = zod_1.z.string().describe('Workflow ID');
10
+ const workflowNameField = zod_1.z
11
+ .string()
12
+ .optional()
13
+ .describe('Workflow name (for confirmation message)');
14
+ const projectIdField = zod_1.z.string().describe('Project ID');
15
+ const folderIdField = zod_1.z.string().describe('Folder ID');
16
+ const folderNameField = zod_1.z.string().optional().describe('Folder name (for confirmation message)');
17
+ const listProjectsAction = zod_1.z.object({
18
+ action: zod_1.z.literal('list-projects').describe('List all projects accessible to the current user'),
19
+ });
20
+ const listTagsAction = zod_1.z.object({
21
+ action: zod_1.z.literal('list-tags').describe('List all available tags'),
22
+ });
23
+ const tagWorkflowAction = zod_1.z.object({
24
+ action: zod_1.z
25
+ .literal('tag-workflow')
26
+ .describe('Assign tags to a workflow, creating missing tags automatically'),
27
+ workflowId: workflowIdField,
28
+ workflowName: workflowNameField,
29
+ tags: zod_1.z.array(zod_1.z.string()).min(1).describe('Tag names to assign to the workflow'),
30
+ });
31
+ const cleanupTestExecutionsAction = zod_1.z.object({
32
+ action: zod_1.z
33
+ .literal('cleanup-test-executions')
34
+ .describe('Delete manual/test execution records for a workflow'),
35
+ workflowId: workflowIdField,
36
+ workflowName: workflowNameField,
37
+ olderThanHours: zod_1.z
38
+ .number()
39
+ .optional()
40
+ .describe('Only delete executions older than this many hours. Defaults to 1.'),
41
+ });
42
+ const listFoldersAction = zod_1.z.object({
43
+ action: zod_1.z.literal('list-folders').describe('List folders in a project'),
44
+ projectId: projectIdField,
45
+ });
46
+ const createFolderAction = zod_1.z.object({
47
+ action: zod_1.z.literal('create-folder').describe('Create a new folder in a project'),
48
+ name: zod_1.z.string().describe('Name for the new folder'),
49
+ projectId: projectIdField,
50
+ parentFolderId: zod_1.z
51
+ .string()
52
+ .optional()
53
+ .describe('ID of the parent folder for nesting. Omit for root-level folder.'),
54
+ });
55
+ const deleteFolderAction = zod_1.z.object({
56
+ action: zod_1.z.literal('delete-folder').describe('Delete a folder from a project'),
57
+ folderId: folderIdField,
58
+ folderName: folderNameField,
59
+ projectId: projectIdField,
60
+ transferToFolderId: zod_1.z
61
+ .string()
62
+ .optional()
63
+ .describe('ID of a folder to move contents into before deletion. If omitted, contents are flattened to project root and archived.'),
64
+ transferToFolderName: zod_1.z
65
+ .string()
66
+ .optional()
67
+ .describe('Name of the transfer folder (for confirmation message)'),
68
+ });
69
+ const moveWorkflowToFolderAction = zod_1.z.object({
70
+ action: zod_1.z.literal('move-workflow-to-folder').describe('Move a workflow into a folder'),
71
+ workflowId: workflowIdField,
72
+ workflowName: workflowNameField,
73
+ folderId: folderIdField,
74
+ folderName: folderNameField,
75
+ });
76
+ const suspendSchema = zod_1.z.object({
77
+ requestId: zod_1.z.string(),
78
+ message: zod_1.z.string(),
79
+ severity: api_types_1.instanceAiConfirmationSeveritySchema,
80
+ });
81
+ const resumeSchema = zod_1.z.object({
82
+ approved: zod_1.z.boolean(),
83
+ });
84
+ function buildInputSchema(context) {
85
+ const baseActions = [
86
+ listProjectsAction,
87
+ listTagsAction,
88
+ tagWorkflowAction,
89
+ cleanupTestExecutionsAction,
90
+ ];
91
+ if (context.workspaceService?.listFolders) {
92
+ return (0, sanitize_mcp_schemas_1.sanitizeInputSchema)(zod_1.z.discriminatedUnion('action', [
93
+ ...baseActions,
94
+ listFoldersAction,
95
+ createFolderAction,
96
+ deleteFolderAction,
97
+ moveWorkflowToFolderAction,
98
+ ]));
99
+ }
100
+ return (0, sanitize_mcp_schemas_1.sanitizeInputSchema)(zod_1.z.discriminatedUnion('action', [...baseActions]));
101
+ }
102
+ function extractCtx(ctx) {
103
+ return {
104
+ resumeData: ctx?.agent?.resumeData,
105
+ suspend: ctx?.agent?.suspend,
106
+ };
107
+ }
108
+ async function handleListProjects(context) {
109
+ const projects = await context.workspaceService.listProjects();
110
+ return { projects };
111
+ }
112
+ async function handleListTags(context) {
113
+ const tags = await context.workspaceService.listTags();
114
+ return { tags };
115
+ }
116
+ async function handleTagWorkflow(context, input, ctx) {
117
+ const { resumeData, suspend } = extractCtx(ctx);
118
+ if (context.permissions?.tagWorkflow === 'blocked') {
119
+ return { appliedTags: [], denied: true, reason: 'Action blocked by admin' };
120
+ }
121
+ const needsApproval = context.permissions?.tagWorkflow !== 'always_allow';
122
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
123
+ await suspend?.({
124
+ requestId: (0, nanoid_1.nanoid)(),
125
+ message: `Tag workflow "${input.workflowName ?? input.workflowId}" (ID: ${input.workflowId}) with [${input.tags.join(', ')}]?`,
126
+ severity: 'info',
127
+ });
128
+ return { appliedTags: [] };
129
+ }
130
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
131
+ return { appliedTags: [], denied: true, reason: 'User denied the action' };
132
+ }
133
+ const appliedTags = await context.workspaceService.tagWorkflow(input.workflowId, input.tags);
134
+ return { appliedTags };
135
+ }
136
+ async function handleCleanupTestExecutions(context, input, ctx) {
137
+ const { resumeData, suspend } = extractCtx(ctx);
138
+ if (context.permissions?.cleanupTestExecutions === 'blocked') {
139
+ return { deletedCount: 0, denied: true, reason: 'Action blocked by admin' };
140
+ }
141
+ const needsApproval = context.permissions?.cleanupTestExecutions !== 'always_allow';
142
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
143
+ const hours = input.olderThanHours ?? 1;
144
+ await suspend?.({
145
+ requestId: (0, nanoid_1.nanoid)(),
146
+ message: `Delete test executions for workflow "${input.workflowName ?? input.workflowId}" older than ${hours} hour(s)?`,
147
+ severity: 'warning',
148
+ });
149
+ return { deletedCount: 0 };
150
+ }
151
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
152
+ return { deletedCount: 0, denied: true, reason: 'User denied the action' };
153
+ }
154
+ const result = await context.workspaceService.cleanupTestExecutions(input.workflowId, {
155
+ olderThanHours: input.olderThanHours,
156
+ });
157
+ return { deletedCount: result.deletedCount };
158
+ }
159
+ async function handleListFolders(context, input) {
160
+ const folders = await context.workspaceService.listFolders(input.projectId);
161
+ return { folders };
162
+ }
163
+ async function handleCreateFolder(context, input, ctx) {
164
+ const { resumeData, suspend } = extractCtx(ctx);
165
+ if (context.permissions?.createFolder === 'blocked') {
166
+ return {
167
+ id: '',
168
+ name: '',
169
+ parentFolderId: null,
170
+ denied: true,
171
+ reason: 'Action blocked by admin',
172
+ };
173
+ }
174
+ const needsApproval = context.permissions?.createFolder !== 'always_allow';
175
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
176
+ await suspend?.({
177
+ requestId: (0, nanoid_1.nanoid)(),
178
+ message: `Create folder "${input.name}" in project "${input.projectId}"?`,
179
+ severity: 'info',
180
+ });
181
+ return { id: '', name: '', parentFolderId: null };
182
+ }
183
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
184
+ return {
185
+ id: '',
186
+ name: '',
187
+ parentFolderId: null,
188
+ denied: true,
189
+ reason: 'User denied the action',
190
+ };
191
+ }
192
+ const folder = await context.workspaceService.createFolder(input.name, input.projectId, input.parentFolderId);
193
+ return { ...folder };
194
+ }
195
+ async function handleDeleteFolder(context, input, ctx) {
196
+ const { resumeData, suspend } = extractCtx(ctx);
197
+ if (context.permissions?.deleteFolder === 'blocked') {
198
+ return { success: false, denied: true, reason: 'Action blocked by admin' };
199
+ }
200
+ const needsApproval = context.permissions?.deleteFolder !== 'always_allow';
201
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
202
+ const transferNote = input.transferToFolderId
203
+ ? ` Contents will be moved to folder "${input.transferToFolderName ?? input.transferToFolderId}".`
204
+ : ' Contents will be flattened to project root and archived.';
205
+ await suspend?.({
206
+ requestId: (0, nanoid_1.nanoid)(),
207
+ message: `Delete folder "${input.folderName ?? input.folderId}"?${transferNote}`,
208
+ severity: 'destructive',
209
+ });
210
+ return { success: false };
211
+ }
212
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
213
+ return { success: false, denied: true, reason: 'User denied the action' };
214
+ }
215
+ await context.workspaceService.deleteFolder(input.folderId, input.projectId, input.transferToFolderId);
216
+ return { success: true };
217
+ }
218
+ async function handleMoveWorkflowToFolder(context, input, ctx) {
219
+ const { resumeData, suspend } = extractCtx(ctx);
220
+ if (context.permissions?.moveWorkflowToFolder === 'blocked') {
221
+ return { success: false, denied: true, reason: 'Action blocked by admin' };
222
+ }
223
+ const needsApproval = context.permissions?.moveWorkflowToFolder !== 'always_allow';
224
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
225
+ await suspend?.({
226
+ requestId: (0, nanoid_1.nanoid)(),
227
+ message: `Move workflow "${input.workflowName ?? input.workflowId}" to folder "${input.folderName ?? input.folderId}"?`,
228
+ severity: 'info',
229
+ });
230
+ return { success: false };
231
+ }
232
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
233
+ return { success: false, denied: true, reason: 'User denied the action' };
234
+ }
235
+ await context.workspaceService.moveWorkflowToFolder(input.workflowId, input.folderId);
236
+ return { success: true };
237
+ }
238
+ function createWorkspaceTool(context) {
239
+ if (!context.workspaceService) {
240
+ return (0, tools_1.createTool)({
241
+ id: 'workspace',
242
+ description: 'Workspace management is not available in this environment.',
243
+ inputSchema: zod_1.z.object({ action: zod_1.z.string() }),
244
+ execute: async () => {
245
+ return { error: 'Workspace service is not available in this environment.' };
246
+ },
247
+ });
248
+ }
249
+ const inputSchema = buildInputSchema(context);
250
+ return (0, tools_1.createTool)({
251
+ id: 'workspace',
252
+ description: 'Manage workspace resources — projects, tags, folders, and execution cleanup.',
253
+ inputSchema,
254
+ suspendSchema,
255
+ resumeSchema,
256
+ execute: async (input, ctx) => {
257
+ switch (input.action) {
258
+ case 'list-projects':
259
+ return await handleListProjects(context);
260
+ case 'list-tags':
261
+ return await handleListTags(context);
262
+ case 'tag-workflow':
263
+ return await handleTagWorkflow(context, input, ctx);
264
+ case 'cleanup-test-executions':
265
+ return await handleCleanupTestExecutions(context, input, ctx);
266
+ case 'list-folders':
267
+ return await handleListFolders(context, input);
268
+ case 'create-folder':
269
+ return await handleCreateFolder(context, input, ctx);
270
+ case 'delete-folder':
271
+ return await handleDeleteFolder(context, input, ctx);
272
+ case 'move-workflow-to-folder':
273
+ return await handleMoveWorkflowToFolder(context, input, ctx);
274
+ }
275
+ },
276
+ });
277
+ }
278
+ //# sourceMappingURL=workspace.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.tool.js","sourceRoot":"","sources":["../../src/tools/workspace.tool.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,7 @@ export declare function mergeTraceRunInputs(run: InstanceAiTraceRun | undefined,
51
51
  export declare function buildAgentTraceInputs(options: AgentTraceInputOptions): Record<string, unknown>;
52
52
  export declare function withTraceParentContext<T>(parentRun: RunTree | undefined, fn: () => Promise<T>): Promise<T>;
53
53
  export declare function withCurrentTraceSpan<T>(options: CurrentTraceSpanOptions<T>, fn: () => Promise<T>): Promise<T>;
54
+ export declare function createTraceReplayOnlyContext(): InstanceAiTraceContext;
54
55
  export declare function createInstanceAiTraceContext(options: CreateInstanceAiTraceContextOptions): Promise<InstanceAiTraceContext | undefined>;
55
56
  export declare function continueInstanceAiTraceContext(existingContext: InstanceAiTraceContext, options: CreateInstanceAiTraceContextOptions): Promise<InstanceAiTraceContext>;
56
57
  export declare function createDetachedSubAgentTraceContext(options: CreateDetachedSubAgentTraceContextOptions): Promise<InstanceAiTraceContext | undefined>;
@@ -9,6 +9,7 @@ exports.mergeTraceRunInputs = mergeTraceRunInputs;
9
9
  exports.buildAgentTraceInputs = buildAgentTraceInputs;
10
10
  exports.withTraceParentContext = withTraceParentContext;
11
11
  exports.withCurrentTraceSpan = withCurrentTraceSpan;
12
+ exports.createTraceReplayOnlyContext = createTraceReplayOnlyContext;
12
13
  exports.createInstanceAiTraceContext = createInstanceAiTraceContext;
13
14
  exports.continueInstanceAiTraceContext = continueInstanceAiTraceContext;
14
15
  exports.createDetachedSubAgentTraceContext = createDetachedSubAgentTraceContext;
@@ -16,6 +17,7 @@ const tools_1 = require("@mastra/core/tools");
16
17
  const langsmith_1 = require("langsmith");
17
18
  const traceable_1 = require("langsmith/traceable");
18
19
  const node_async_hooks_1 = require("node:async_hooks");
20
+ const trace_replay_1 = require("./trace-replay");
19
21
  const stream_helpers_1 = require("../utils/stream-helpers");
20
22
  const DEFAULT_PROJECT_NAME = 'instance-ai';
21
23
  const DEFAULT_TAGS = ['instance-ai'];
@@ -534,7 +536,7 @@ function createTraceContext(projectName, traceKind, rootRun, actorRun, getProxyH
534
536
  traceClients.delete(run.traceId);
535
537
  }
536
538
  };
537
- return {
539
+ const ctx = {
538
540
  projectName,
539
541
  traceKind,
540
542
  rootRun,
@@ -546,8 +548,18 @@ function createTraceContext(projectName, traceKind, rootRun, actorRun, getProxyH
546
548
  finishRun,
547
549
  failRun,
548
550
  toHeaders: (run) => hydrateRunTree(run).toHeaders(),
549
- wrapTools: (tools, traceOptions) => wrapTools(tools, traceOptions),
551
+ wrapTools: (tools, traceOptions) => {
552
+ if (ctx.replayMode === 'replay' && ctx.traceIndex && ctx.idRemapper) {
553
+ return replayWrapTools(tools, ctx.traceIndex, ctx.idRemapper, traceOptions);
554
+ }
555
+ if (ctx.replayMode === 'record' && ctx.traceWriter) {
556
+ return recordWrapTools(tools, ctx.traceWriter, traceOptions);
557
+ }
558
+ return wrapTools(tools, traceOptions);
559
+ },
560
+ replayMode: 'off',
550
561
  };
562
+ return ctx;
551
563
  }
552
564
  function createRunStateFromTree(tree) {
553
565
  const parentRunId = tree.parent_run?.id ?? tree.parent_run_id;
@@ -656,6 +668,162 @@ function wrapTools(tools, options) {
656
668
  }
657
669
  return wrapped;
658
670
  }
671
+ function replayWrapTool(tool, traceIndex, idRemapper, agentRole) {
672
+ return (0, tools_1.createTool)({
673
+ id: tool.id,
674
+ description: tool.description,
675
+ inputSchema: tool.inputSchema,
676
+ outputSchema: tool.outputSchema,
677
+ suspendSchema: tool.suspendSchema,
678
+ resumeSchema: tool.resumeSchema,
679
+ requestContextSchema: tool.requestContextSchema,
680
+ execute: async (input, context) => {
681
+ const event = traceIndex.next(agentRole, tool.id);
682
+ const remappedInput = idRemapper.remapInput(input);
683
+ const realOutput = await tool.execute(remappedInput, context);
684
+ idRemapper.learn(event.output, realOutput);
685
+ return realOutput;
686
+ },
687
+ mastra: tool.mastra,
688
+ requireApproval: tool.requireApproval,
689
+ providerOptions: tool.providerOptions,
690
+ toModelOutput: tool.toModelOutput,
691
+ mcp: tool.mcp,
692
+ onInputStart: tool.onInputStart,
693
+ onInputDelta: tool.onInputDelta,
694
+ onInputAvailable: tool.onInputAvailable,
695
+ onOutput: tool.onOutput,
696
+ });
697
+ }
698
+ function pureReplayWrapTool(tool, traceIndex, idRemapper, agentRole) {
699
+ return (0, tools_1.createTool)({
700
+ id: tool.id,
701
+ description: tool.description,
702
+ inputSchema: tool.inputSchema,
703
+ outputSchema: tool.outputSchema,
704
+ suspendSchema: tool.suspendSchema,
705
+ resumeSchema: tool.resumeSchema,
706
+ requestContextSchema: tool.requestContextSchema,
707
+ execute: async (_input, _context) => {
708
+ const event = traceIndex.next(agentRole, tool.id);
709
+ return await Promise.resolve(idRemapper.remapOutput(event.output));
710
+ },
711
+ mastra: tool.mastra,
712
+ requireApproval: tool.requireApproval,
713
+ providerOptions: tool.providerOptions,
714
+ toModelOutput: tool.toModelOutput,
715
+ mcp: tool.mcp,
716
+ onInputStart: tool.onInputStart,
717
+ onInputDelta: tool.onInputDelta,
718
+ onInputAvailable: tool.onInputAvailable,
719
+ onOutput: tool.onOutput,
720
+ });
721
+ }
722
+ function replayWrapTools(tools, traceIndex, idRemapper, options) {
723
+ const agentRole = options?.agentRole ?? 'orchestrator';
724
+ const wrapped = {};
725
+ const entries = Object.entries(tools);
726
+ for (const [name, tool] of entries) {
727
+ if (!isTraceableMastraTool(tool)) {
728
+ wrapped[name] = tools[name];
729
+ continue;
730
+ }
731
+ if (trace_replay_1.PURE_REPLAY_TOOLS.has(tool.id)) {
732
+ wrapped[name] = pureReplayWrapTool(tool, traceIndex, idRemapper, agentRole);
733
+ }
734
+ else {
735
+ wrapped[name] = replayWrapTool(tool, traceIndex, idRemapper, agentRole);
736
+ }
737
+ }
738
+ return wrapped;
739
+ }
740
+ function recordWrapTool(tool, traceWriter, agentRole, traceOptions) {
741
+ const traced = wrapToolExecute(tool, traceOptions);
742
+ return (0, tools_1.createTool)({
743
+ id: traced.id,
744
+ description: traced.description,
745
+ inputSchema: traced.inputSchema,
746
+ outputSchema: traced.outputSchema,
747
+ suspendSchema: traced.suspendSchema,
748
+ resumeSchema: traced.resumeSchema,
749
+ requestContextSchema: traced.requestContextSchema,
750
+ execute: async (input, context) => {
751
+ const resumeData = context?.agent?.resumeData;
752
+ const inputRecord = (input ?? {});
753
+ const result = await traced.execute(input, context);
754
+ const outputRecord = (result ?? {});
755
+ if (resumeData !== undefined && resumeData !== null) {
756
+ traceWriter.recordToolResume(agentRole, tool.id, inputRecord, outputRecord, resumeData);
757
+ }
758
+ else if (context?.agent?.suspend && outputRecord.denied === true) {
759
+ traceWriter.recordToolSuspend(agentRole, tool.id, inputRecord, outputRecord, {});
760
+ }
761
+ else {
762
+ traceWriter.recordToolCall(agentRole, tool.id, inputRecord, outputRecord);
763
+ }
764
+ return result;
765
+ },
766
+ mastra: traced.mastra,
767
+ requireApproval: traced.requireApproval,
768
+ providerOptions: traced.providerOptions,
769
+ toModelOutput: traced.toModelOutput,
770
+ mcp: traced.mcp,
771
+ onInputStart: traced.onInputStart,
772
+ onInputDelta: traced.onInputDelta,
773
+ onInputAvailable: traced.onInputAvailable,
774
+ onOutput: traced.onOutput,
775
+ });
776
+ }
777
+ function recordWrapTools(tools, traceWriter, options) {
778
+ const agentRole = options?.agentRole ?? 'orchestrator';
779
+ const wrapped = {};
780
+ const entries = Object.entries(tools);
781
+ for (const [name, tool] of entries) {
782
+ if (!isTraceableMastraTool(tool)) {
783
+ wrapped[name] = tools[name];
784
+ continue;
785
+ }
786
+ wrapped[name] = recordWrapTool(tool, traceWriter, agentRole, options);
787
+ }
788
+ return wrapped;
789
+ }
790
+ function createTraceReplayOnlyContext() {
791
+ const stubRun = {
792
+ id: 'stub',
793
+ name: 'stub',
794
+ runType: 'chain',
795
+ projectName: '',
796
+ startTime: Date.now(),
797
+ traceId: 'stub',
798
+ dottedOrder: '',
799
+ executionOrder: 0,
800
+ childExecutionOrder: 0,
801
+ };
802
+ const ctx = {
803
+ projectName: '',
804
+ traceKind: 'message_turn',
805
+ rootRun: stubRun,
806
+ actorRun: stubRun,
807
+ messageRun: stubRun,
808
+ orchestratorRun: stubRun,
809
+ startChildRun: async () => await Promise.resolve(stubRun),
810
+ withRunTree: async (_run, fn) => await fn(),
811
+ finishRun: async () => { },
812
+ failRun: async () => { },
813
+ toHeaders: () => ({}),
814
+ wrapTools: (tools, traceOptions) => {
815
+ if (ctx.replayMode === 'replay' && ctx.traceIndex && ctx.idRemapper) {
816
+ return replayWrapTools(tools, ctx.traceIndex, ctx.idRemapper, traceOptions);
817
+ }
818
+ if (ctx.replayMode === 'record' && ctx.traceWriter) {
819
+ return recordWrapTools(tools, ctx.traceWriter, traceOptions);
820
+ }
821
+ return tools;
822
+ },
823
+ replayMode: 'off',
824
+ };
825
+ return ctx;
826
+ }
659
827
  async function createRun(options) {
660
828
  const runTree = new langsmith_1.RunTree({
661
829
  name: options.name,