@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,410 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDataTablesTool = createDataTablesTool;
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 columnTypeSchema = zod_1.z.enum(['string', 'number', 'boolean', 'date']);
10
+ const filterSchema = zod_1.z.object({
11
+ type: zod_1.z.enum(['and', 'or']).describe('Combine filters with AND or OR'),
12
+ filters: zod_1.z.array(zod_1.z.object({
13
+ columnName: zod_1.z.string(),
14
+ condition: zod_1.z.enum(['eq', 'neq', 'like', 'gt', 'gte', 'lt', 'lte']),
15
+ value: zod_1.z.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean()]).nullable(),
16
+ })),
17
+ });
18
+ const filterSchemaWithMinOne = zod_1.z.object({
19
+ type: zod_1.z.enum(['and', 'or']).describe('Combine filters with AND or OR'),
20
+ filters: zod_1.z
21
+ .array(zod_1.z.object({
22
+ columnName: zod_1.z.string(),
23
+ condition: zod_1.z.enum(['eq', 'neq', 'like', 'gt', 'gte', 'lt', 'lte']),
24
+ value: zod_1.z.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean()]).nullable(),
25
+ }))
26
+ .min(1),
27
+ });
28
+ const confirmationSuspendSchema = zod_1.z.object({
29
+ requestId: zod_1.z.string(),
30
+ message: zod_1.z.string(),
31
+ severity: api_types_1.instanceAiConfirmationSeveritySchema,
32
+ });
33
+ const confirmationResumeSchema = zod_1.z.object({
34
+ approved: zod_1.z.boolean(),
35
+ });
36
+ function isNameConflictError(error) {
37
+ let current = error;
38
+ while (current instanceof Error) {
39
+ if (current.constructor.name === 'DataTableNameConflictError')
40
+ return true;
41
+ current = current.cause;
42
+ }
43
+ return false;
44
+ }
45
+ const listAction = zod_1.z.object({
46
+ action: zod_1.z.literal('list').describe('List data tables in a project'),
47
+ projectId: zod_1.z.string().optional().describe('Project ID. Defaults to personal project.'),
48
+ });
49
+ const schemaAction = zod_1.z.object({
50
+ action: zod_1.z.literal('schema').describe('Get column definitions for a data table'),
51
+ dataTableId: zod_1.z.string().describe('ID of the data table'),
52
+ });
53
+ const queryAction = zod_1.z.object({
54
+ action: zod_1.z.literal('query').describe('Query rows from a data table with optional filtering'),
55
+ dataTableId: zod_1.z.string().describe('ID of the data table'),
56
+ filter: filterSchema.optional().describe('Row filter conditions'),
57
+ limit: zod_1.z
58
+ .number()
59
+ .int()
60
+ .positive()
61
+ .max(100)
62
+ .optional()
63
+ .describe('Max rows to return (default 50)'),
64
+ offset: zod_1.z.number().int().min(0).optional().describe('Number of rows to skip'),
65
+ });
66
+ const createAction = zod_1.z.object({
67
+ action: zod_1.z.literal('create').describe('Create a new data table with typed columns'),
68
+ name: zod_1.z.string().min(1).max(128).describe('Table name'),
69
+ projectId: zod_1.z.string().optional().describe('Project ID. Defaults to personal project.'),
70
+ columns: zod_1.z
71
+ .array(zod_1.z.object({
72
+ name: zod_1.z.string().describe('Column name (alphanumeric + underscores)'),
73
+ type: columnTypeSchema.describe('Column data type'),
74
+ }))
75
+ .min(1)
76
+ .describe('Column definitions'),
77
+ });
78
+ const deleteAction = zod_1.z.object({
79
+ action: zod_1.z.literal('delete').describe('Permanently delete a data table and all its rows'),
80
+ dataTableId: zod_1.z.string().describe('ID of the data table'),
81
+ });
82
+ const addColumnAction = zod_1.z.object({
83
+ action: zod_1.z.literal('add-column').describe('Add a new column to an existing data table'),
84
+ dataTableId: zod_1.z.string().describe('ID of the data table'),
85
+ columnName: zod_1.z.string().describe('Column name (alphanumeric + underscores)'),
86
+ type: columnTypeSchema.describe('Column data type'),
87
+ });
88
+ const deleteColumnAction = zod_1.z.object({
89
+ action: zod_1.z.literal('delete-column').describe('Remove a column from a data table'),
90
+ dataTableId: zod_1.z.string().describe('ID of the data table'),
91
+ columnId: zod_1.z.string().describe('ID of the column'),
92
+ });
93
+ const renameColumnAction = zod_1.z.object({
94
+ action: zod_1.z.literal('rename-column').describe('Rename a column in a data table'),
95
+ dataTableId: zod_1.z.string().describe('ID of the data table'),
96
+ columnId: zod_1.z.string().describe('ID of the column'),
97
+ newName: zod_1.z.string().describe('New column name'),
98
+ });
99
+ const insertRowsAction = zod_1.z.object({
100
+ action: zod_1.z.literal('insert-rows').describe('Insert rows into a data table'),
101
+ dataTableId: zod_1.z.string().describe('ID of the data table'),
102
+ rows: zod_1.z
103
+ .array(zod_1.z.record(zod_1.z.unknown()))
104
+ .min(1)
105
+ .max(100)
106
+ .describe('Array of row objects (column name → value)'),
107
+ });
108
+ const updateRowsAction = zod_1.z.object({
109
+ action: zod_1.z.literal('update-rows').describe('Update rows matching a filter in a data table'),
110
+ dataTableId: zod_1.z.string().describe('ID of the data table'),
111
+ filter: filterSchema.describe('Row filter conditions'),
112
+ data: zod_1.z.record(zod_1.z.unknown()).describe('Column values to set on matching rows'),
113
+ });
114
+ const deleteRowsAction = zod_1.z.object({
115
+ action: zod_1.z
116
+ .literal('delete-rows')
117
+ .describe('Delete rows matching a filter from a data table. At least one filter condition is required.'),
118
+ dataTableId: zod_1.z.string().describe('ID of the data table'),
119
+ filter: filterSchemaWithMinOne.describe('Row filter conditions'),
120
+ });
121
+ const readOnlyActions = [listAction, schemaAction, queryAction];
122
+ const allActions = [
123
+ listAction,
124
+ schemaAction,
125
+ queryAction,
126
+ createAction,
127
+ deleteAction,
128
+ addColumnAction,
129
+ deleteColumnAction,
130
+ renameColumnAction,
131
+ insertRowsAction,
132
+ updateRowsAction,
133
+ deleteRowsAction,
134
+ ];
135
+ async function handleList(context, input) {
136
+ const tables = await context.dataTableService.list({ projectId: input.projectId });
137
+ return { tables };
138
+ }
139
+ async function handleSchema(context, input) {
140
+ const columns = await context.dataTableService.getSchema(input.dataTableId);
141
+ return { columns };
142
+ }
143
+ async function handleQuery(context, input) {
144
+ const result = await context.dataTableService.queryRows(input.dataTableId, {
145
+ filter: input.filter,
146
+ limit: input.limit,
147
+ offset: input.offset,
148
+ });
149
+ const returnedRows = result.data.length;
150
+ const remaining = result.count - (input.offset ?? 0) - returnedRows;
151
+ if (remaining > 0) {
152
+ return {
153
+ ...result,
154
+ hint: `${remaining} more rows available. Use plan with a manage-data-tables task for bulk operations.`,
155
+ };
156
+ }
157
+ return result;
158
+ }
159
+ async function handleCreate(context, input, ctx) {
160
+ const resumeData = ctx?.agent?.resumeData;
161
+ const suspend = ctx?.agent?.suspend;
162
+ if (context.permissions?.createDataTable === 'blocked') {
163
+ return { denied: true, reason: 'Action blocked by admin' };
164
+ }
165
+ const needsApproval = context.permissions?.createDataTable !== 'always_allow';
166
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
167
+ let message = `Create data table "${input.name}"?`;
168
+ if (input.projectId) {
169
+ const project = await context.workspaceService?.getProject?.(input.projectId);
170
+ const projectLabel = project?.name ?? input.projectId;
171
+ message = `Create data table "${input.name}" in project "${projectLabel}"?`;
172
+ }
173
+ await suspend?.({
174
+ requestId: (0, nanoid_1.nanoid)(),
175
+ message,
176
+ severity: 'info',
177
+ });
178
+ return {};
179
+ }
180
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
181
+ return { denied: true, reason: 'User denied the action' };
182
+ }
183
+ try {
184
+ const table = await context.dataTableService.create(input.name, input.columns, {
185
+ projectId: input.projectId,
186
+ });
187
+ return { table };
188
+ }
189
+ catch (error) {
190
+ if (isNameConflictError(error)) {
191
+ return {
192
+ denied: true,
193
+ reason: `Table "${input.name}" already exists. Use list-data-tables to find it and get-data-table-schema to check its columns.`,
194
+ };
195
+ }
196
+ throw error;
197
+ }
198
+ }
199
+ async function handleDelete(context, input, ctx) {
200
+ const resumeData = ctx?.agent?.resumeData;
201
+ const suspend = ctx?.agent?.suspend;
202
+ if (context.permissions?.deleteDataTable === 'blocked') {
203
+ return { success: false, denied: true, reason: 'Action blocked by admin' };
204
+ }
205
+ const needsApproval = context.permissions?.deleteDataTable !== 'always_allow';
206
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
207
+ await suspend?.({
208
+ requestId: (0, nanoid_1.nanoid)(),
209
+ message: `Delete data table "${input.dataTableId}"? This will permanently remove the table and all its data.`,
210
+ severity: 'destructive',
211
+ });
212
+ return { success: false };
213
+ }
214
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
215
+ return { success: false, denied: true, reason: 'User denied the action' };
216
+ }
217
+ await context.dataTableService.delete(input.dataTableId);
218
+ return { success: true };
219
+ }
220
+ async function handleAddColumn(context, input, ctx) {
221
+ const resumeData = ctx?.agent?.resumeData;
222
+ const suspend = ctx?.agent?.suspend;
223
+ if (context.permissions?.mutateDataTableSchema === 'blocked') {
224
+ return { denied: true, reason: 'Action blocked by admin' };
225
+ }
226
+ const needsApproval = context.permissions?.mutateDataTableSchema !== 'always_allow';
227
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
228
+ await suspend?.({
229
+ requestId: (0, nanoid_1.nanoid)(),
230
+ message: `Add column "${input.columnName}" (${input.type}) to data table "${input.dataTableId}"?`,
231
+ severity: 'warning',
232
+ });
233
+ return {};
234
+ }
235
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
236
+ return { denied: true, reason: 'User denied the action' };
237
+ }
238
+ const column = await context.dataTableService.addColumn(input.dataTableId, {
239
+ name: input.columnName,
240
+ type: input.type,
241
+ });
242
+ return { column };
243
+ }
244
+ async function handleDeleteColumn(context, input, ctx) {
245
+ const resumeData = ctx?.agent?.resumeData;
246
+ const suspend = ctx?.agent?.suspend;
247
+ if (context.permissions?.mutateDataTableSchema === 'blocked') {
248
+ return { success: false, denied: true, reason: 'Action blocked by admin' };
249
+ }
250
+ const needsApproval = context.permissions?.mutateDataTableSchema !== 'always_allow';
251
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
252
+ await suspend?.({
253
+ requestId: (0, nanoid_1.nanoid)(),
254
+ message: `Delete column "${input.columnId}" from data table "${input.dataTableId}"? All data in this column will be permanently lost.`,
255
+ severity: 'destructive',
256
+ });
257
+ return { success: false };
258
+ }
259
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
260
+ return { success: false, denied: true, reason: 'User denied the action' };
261
+ }
262
+ await context.dataTableService.deleteColumn(input.dataTableId, input.columnId);
263
+ return { success: true };
264
+ }
265
+ async function handleRenameColumn(context, input, ctx) {
266
+ const resumeData = ctx?.agent?.resumeData;
267
+ const suspend = ctx?.agent?.suspend;
268
+ if (context.permissions?.mutateDataTableSchema === 'blocked') {
269
+ return { success: false, denied: true, reason: 'Action blocked by admin' };
270
+ }
271
+ const needsApproval = context.permissions?.mutateDataTableSchema !== 'always_allow';
272
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
273
+ await suspend?.({
274
+ requestId: (0, nanoid_1.nanoid)(),
275
+ message: `Rename column "${input.columnId}" to "${input.newName}" in data table "${input.dataTableId}"?`,
276
+ severity: 'warning',
277
+ });
278
+ return { success: false };
279
+ }
280
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
281
+ return { success: false, denied: true, reason: 'User denied the action' };
282
+ }
283
+ await context.dataTableService.renameColumn(input.dataTableId, input.columnId, input.newName);
284
+ return { success: true };
285
+ }
286
+ async function handleInsertRows(context, input, ctx) {
287
+ const resumeData = ctx?.agent?.resumeData;
288
+ const suspend = ctx?.agent?.suspend;
289
+ if (context.permissions?.mutateDataTableRows === 'blocked') {
290
+ return { denied: true, reason: 'Action blocked by admin' };
291
+ }
292
+ const needsApproval = context.permissions?.mutateDataTableRows !== 'always_allow';
293
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
294
+ await suspend?.({
295
+ requestId: (0, nanoid_1.nanoid)(),
296
+ message: `Insert ${input.rows.length} row(s) into data table "${input.dataTableId}"?`,
297
+ severity: 'warning',
298
+ });
299
+ return {};
300
+ }
301
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
302
+ return { denied: true, reason: 'User denied the action' };
303
+ }
304
+ return await context.dataTableService.insertRows(input.dataTableId, input.rows);
305
+ }
306
+ async function handleUpdateRows(context, input, ctx) {
307
+ const resumeData = ctx?.agent?.resumeData;
308
+ const suspend = ctx?.agent?.suspend;
309
+ if (context.permissions?.mutateDataTableRows === 'blocked') {
310
+ return { denied: true, reason: 'Action blocked by admin' };
311
+ }
312
+ const needsApproval = context.permissions?.mutateDataTableRows !== 'always_allow';
313
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
314
+ await suspend?.({
315
+ requestId: (0, nanoid_1.nanoid)(),
316
+ message: `Update rows in data table "${input.dataTableId}"?`,
317
+ severity: 'warning',
318
+ });
319
+ return {};
320
+ }
321
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
322
+ return { denied: true, reason: 'User denied the action' };
323
+ }
324
+ return await context.dataTableService.updateRows(input.dataTableId, input.filter, input.data);
325
+ }
326
+ async function handleDeleteRows(context, input, ctx) {
327
+ const resumeData = ctx?.agent?.resumeData;
328
+ const suspend = ctx?.agent?.suspend;
329
+ if (context.permissions?.mutateDataTableRows === 'blocked') {
330
+ return { success: false, denied: true, reason: 'Action blocked by admin' };
331
+ }
332
+ const needsApproval = context.permissions?.mutateDataTableRows !== 'always_allow';
333
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
334
+ const filterDesc = input.filter.filters
335
+ .map((f) => `${f.columnName} ${f.condition} ${String(f.value)}`)
336
+ .join(` ${input.filter.type} `);
337
+ await suspend?.({
338
+ requestId: (0, nanoid_1.nanoid)(),
339
+ message: `Delete rows where ${filterDesc}? This cannot be undone.`,
340
+ severity: 'destructive',
341
+ });
342
+ return { success: false };
343
+ }
344
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
345
+ return { success: false, denied: true, reason: 'User denied the action' };
346
+ }
347
+ const result = await context.dataTableService.deleteRows(input.dataTableId, input.filter);
348
+ return {
349
+ success: true,
350
+ deletedCount: result.deletedCount,
351
+ dataTableId: result.dataTableId,
352
+ tableName: result.tableName,
353
+ projectId: result.projectId,
354
+ };
355
+ }
356
+ function createDataTablesTool(context, surface = 'full') {
357
+ if (surface === 'orchestrator') {
358
+ const inputSchema = (0, sanitize_mcp_schemas_1.sanitizeInputSchema)(zod_1.z.discriminatedUnion('action', [...readOnlyActions]));
359
+ return (0, tools_1.createTool)({
360
+ id: 'data-tables',
361
+ description: 'Manage data tables — list, get schema, and query rows.',
362
+ inputSchema,
363
+ execute: async (input) => {
364
+ switch (input.action) {
365
+ case 'list':
366
+ return await handleList(context, input);
367
+ case 'schema':
368
+ return await handleSchema(context, input);
369
+ case 'query':
370
+ return await handleQuery(context, input);
371
+ }
372
+ },
373
+ });
374
+ }
375
+ const inputSchema = (0, sanitize_mcp_schemas_1.sanitizeInputSchema)(zod_1.z.discriminatedUnion('action', [...allActions]));
376
+ return (0, tools_1.createTool)({
377
+ id: 'data-tables',
378
+ description: 'Manage data tables — list, query, create, modify columns, and manage rows.',
379
+ inputSchema,
380
+ suspendSchema: confirmationSuspendSchema,
381
+ resumeSchema: confirmationResumeSchema,
382
+ execute: async (input, ctx) => {
383
+ switch (input.action) {
384
+ case 'list':
385
+ return await handleList(context, input);
386
+ case 'schema':
387
+ return await handleSchema(context, input);
388
+ case 'query':
389
+ return await handleQuery(context, input);
390
+ case 'create':
391
+ return await handleCreate(context, input, ctx);
392
+ case 'delete':
393
+ return await handleDelete(context, input, ctx);
394
+ case 'add-column':
395
+ return await handleAddColumn(context, input, ctx);
396
+ case 'delete-column':
397
+ return await handleDeleteColumn(context, input, ctx);
398
+ case 'rename-column':
399
+ return await handleRenameColumn(context, input, ctx);
400
+ case 'insert-rows':
401
+ return await handleInsertRows(context, input, ctx);
402
+ case 'update-rows':
403
+ return await handleUpdateRows(context, input, ctx);
404
+ case 'delete-rows':
405
+ return await handleDeleteRows(context, input, ctx);
406
+ }
407
+ },
408
+ });
409
+ }
410
+ //# sourceMappingURL=data-tables.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-tables.tool.js","sourceRoot":"","sources":["../../src/tools/data-tables.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { InstanceAiContext } from '../types';
2
+ export declare function createExecutionsTool(context: InstanceAiContext): import("@mastra/core/tools").Tool<InferPublicSchema<T>, InferPublicSchema<T>, InferPublicSchema<T>, InferPublicSchema<T>, import("@mastra/core/tools").ToolExecutionContext<InferPublicSchema<T>, InferPublicSchema<T>, unknown>, "executions", unknown>;
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createExecutionsTool = createExecutionsTool;
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 MAX_TIMEOUT_MS = 600_000;
10
+ const listAction = zod_1.z.object({
11
+ action: zod_1.z.literal('list').describe('List recent workflow executions'),
12
+ workflowId: zod_1.z.string().optional().describe('Workflow ID'),
13
+ status: zod_1.z
14
+ .string()
15
+ .optional()
16
+ .describe('Filter by status (e.g. "success", "error", "running", "waiting")'),
17
+ limit: zod_1.z
18
+ .number()
19
+ .int()
20
+ .positive()
21
+ .max(100)
22
+ .optional()
23
+ .describe('Max results to return (default 20)'),
24
+ });
25
+ const getAction = zod_1.z.object({
26
+ action: zod_1.z.literal('get').describe('Get execution status without blocking (poll running ones)'),
27
+ executionId: zod_1.z.string().describe('Execution ID'),
28
+ });
29
+ const runAction = zod_1.z.object({
30
+ action: zod_1.z.literal('run').describe('Execute a workflow and wait for completion'),
31
+ workflowId: zod_1.z.string().describe('Workflow ID'),
32
+ workflowName: zod_1.z.string().optional().describe('Name of the workflow (for confirmation message)'),
33
+ inputData: zod_1.z
34
+ .record(zod_1.z.unknown())
35
+ .optional()
36
+ .describe('Input data passed to the workflow trigger. Works for ANY trigger type — ' +
37
+ 'the system injects inputData as the trigger node output, bypassing the need for a real event. ' +
38
+ 'For webhook triggers, inputData is the request body (do NOT wrap in { body: ... }). ' +
39
+ 'For event-based triggers (e.g. Linear, GitHub, Slack), pass inputData matching ' +
40
+ 'the shape the trigger would emit (e.g. { action: "create", data: { ... } }).'),
41
+ timeout: zod_1.z
42
+ .number()
43
+ .int()
44
+ .min(1000)
45
+ .max(MAX_TIMEOUT_MS)
46
+ .optional()
47
+ .describe('Max wait time in milliseconds (default 300000, max 600000)'),
48
+ });
49
+ const debugAction = zod_1.z.object({
50
+ action: zod_1.z.literal('debug').describe('Analyze a failed execution with structured diagnostics'),
51
+ executionId: zod_1.z.string().describe('Execution ID'),
52
+ });
53
+ const getNodeOutputAction = zod_1.z.object({
54
+ action: zod_1.z
55
+ .literal('get-node-output')
56
+ .describe('Retrieve raw output of a specific node from an execution'),
57
+ executionId: zod_1.z.string().describe('Execution ID'),
58
+ nodeName: zod_1.z.string().describe('Name of the node whose output to retrieve'),
59
+ startIndex: zod_1.z.number().int().min(0).optional().describe('Item index to start from (default 0)'),
60
+ maxItems: zod_1.z
61
+ .number()
62
+ .int()
63
+ .min(1)
64
+ .max(50)
65
+ .optional()
66
+ .describe('Maximum number of items to return (default 10, max 50)'),
67
+ });
68
+ const stopAction = zod_1.z.object({
69
+ action: zod_1.z.literal('stop').describe('Cancel a running workflow execution'),
70
+ executionId: zod_1.z.string().describe('Execution ID'),
71
+ });
72
+ const inputSchema = (0, sanitize_mcp_schemas_1.sanitizeInputSchema)(zod_1.z.discriminatedUnion('action', [
73
+ listAction,
74
+ getAction,
75
+ runAction,
76
+ debugAction,
77
+ getNodeOutputAction,
78
+ stopAction,
79
+ ]));
80
+ const suspendSchema = zod_1.z.object({
81
+ requestId: zod_1.z.string(),
82
+ message: zod_1.z.string(),
83
+ severity: api_types_1.instanceAiConfirmationSeveritySchema,
84
+ });
85
+ const resumeSchema = zod_1.z.object({
86
+ approved: zod_1.z.boolean(),
87
+ });
88
+ async function handleList(context, input) {
89
+ const executions = await context.executionService.list({
90
+ workflowId: input.workflowId,
91
+ status: input.status,
92
+ limit: input.limit,
93
+ });
94
+ return { executions };
95
+ }
96
+ async function handleGet(context, input) {
97
+ return await context.executionService.getStatus(input.executionId);
98
+ }
99
+ async function handleRun(context, input, resumeData, suspend) {
100
+ if (context.permissions?.runWorkflow === 'blocked') {
101
+ return {
102
+ executionId: '',
103
+ status: 'error',
104
+ denied: true,
105
+ reason: 'Action blocked by admin',
106
+ };
107
+ }
108
+ const needsApproval = context.permissions?.runWorkflow !== 'always_allow';
109
+ if (needsApproval && (resumeData === undefined || resumeData === null)) {
110
+ await suspend?.({
111
+ requestId: (0, nanoid_1.nanoid)(),
112
+ message: `Execute workflow "${input.workflowName ?? input.workflowId}" (ID: ${input.workflowId})?`,
113
+ severity: 'warning',
114
+ });
115
+ return {
116
+ executionId: '',
117
+ status: 'error',
118
+ denied: true,
119
+ reason: 'Awaiting confirmation',
120
+ };
121
+ }
122
+ if (resumeData !== undefined && resumeData !== null && !resumeData.approved) {
123
+ return {
124
+ executionId: '',
125
+ status: 'error',
126
+ denied: true,
127
+ reason: 'User denied the action',
128
+ };
129
+ }
130
+ return await context.executionService.run(input.workflowId, input.inputData, {
131
+ timeout: input.timeout,
132
+ });
133
+ }
134
+ async function handleDebug(context, input) {
135
+ return await context.executionService.getDebugInfo(input.executionId);
136
+ }
137
+ async function handleGetNodeOutput(context, input) {
138
+ return await context.executionService.getNodeOutput(input.executionId, input.nodeName, {
139
+ startIndex: input.startIndex,
140
+ maxItems: input.maxItems,
141
+ });
142
+ }
143
+ async function handleStop(context, input) {
144
+ return await context.executionService.stop(input.executionId);
145
+ }
146
+ function createExecutionsTool(context) {
147
+ return (0, tools_1.createTool)({
148
+ id: 'executions',
149
+ description: 'Manage workflow executions — list, inspect, run, debug, get node output, and stop.',
150
+ inputSchema,
151
+ suspendSchema,
152
+ resumeSchema,
153
+ execute: async (input, ctx) => {
154
+ switch (input.action) {
155
+ case 'list':
156
+ return await handleList(context, input);
157
+ case 'get':
158
+ return await handleGet(context, input);
159
+ case 'run': {
160
+ const resumeData = ctx?.agent?.resumeData;
161
+ const suspend = ctx?.agent?.suspend;
162
+ return await handleRun(context, input, resumeData, suspend);
163
+ }
164
+ case 'debug':
165
+ return await handleDebug(context, input);
166
+ case 'get-node-output':
167
+ return await handleGetNodeOutput(context, input);
168
+ case 'stop':
169
+ return await handleStop(context, input);
170
+ }
171
+ },
172
+ });
173
+ }
174
+ //# sourceMappingURL=executions.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executions.tool.js","sourceRoot":"","sources":["../../src/tools/executions.tool.ts"],"names":[],"mappings":"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"}