n8n 2.38.0 → 2.38.2

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 (174) hide show
  1. package/dist/active-workflow-manager.d.ts +8 -8
  2. package/dist/active-workflow-manager.js +38 -23
  3. package/dist/active-workflow-manager.js.map +1 -1
  4. package/dist/build.tsbuildinfo +1 -1
  5. package/dist/chat/chat-execution-manager.d.ts +5 -0
  6. package/dist/chat/chat-execution-manager.js +50 -10
  7. package/dist/chat/chat-execution-manager.js.map +1 -1
  8. package/dist/chat/chat-service.d.ts +0 -1
  9. package/dist/chat/chat-service.js +12 -18
  10. package/dist/chat/chat-service.js.map +1 -1
  11. package/dist/chat/utils.d.ts +1 -0
  12. package/dist/chat/utils.js +14 -4
  13. package/dist/chat/utils.js.map +1 -1
  14. package/dist/controllers/invitation.controller.d.ts +1 -5
  15. package/dist/controllers/invitation.controller.js +3 -32
  16. package/dist/controllers/invitation.controller.js.map +1 -1
  17. package/dist/controllers/role.controller.d.ts +3 -1
  18. package/dist/controllers/role.controller.js +19 -3
  19. package/dist/controllers/role.controller.js.map +1 -1
  20. package/dist/controllers/users.controller.d.ts +2 -27
  21. package/dist/controllers/users.controller.js +6 -132
  22. package/dist/controllers/users.controller.js.map +1 -1
  23. package/dist/credentials/credentials.service.js +24 -3
  24. package/dist/credentials/credentials.service.js.map +1 -1
  25. package/dist/errors/subworkflow-policy-denial.error.d.ts +4 -1
  26. package/dist/errors/subworkflow-policy-denial.error.js +26 -10
  27. package/dist/errors/subworkflow-policy-denial.error.js.map +1 -1
  28. package/dist/evaluation.ee/evaluation-test-run.service.d.ts +46 -0
  29. package/dist/evaluation.ee/evaluation-test-run.service.js +65 -0
  30. package/dist/evaluation.ee/evaluation-test-run.service.js.map +1 -0
  31. package/dist/evaluation.ee/insights/insights-context-builder.js +4 -2
  32. package/dist/evaluation.ee/insights/insights-context-builder.js.map +1 -1
  33. package/dist/evaluation.ee/test-runs.controller.ee.d.ts +1 -1
  34. package/dist/evaluation.ee/test-runs.controller.ee.js +5 -2
  35. package/dist/evaluation.ee/test-runs.controller.ee.js.map +1 -1
  36. package/dist/executions/execution-recovery.service.d.ts +3 -1
  37. package/dist/executions/execution-recovery.service.js +13 -4
  38. package/dist/executions/execution-recovery.service.js.map +1 -1
  39. package/dist/executions/pre-execution-checks/subworkflow-policy-checker.d.ts +5 -2
  40. package/dist/executions/pre-execution-checks/subworkflow-policy-checker.js +28 -8
  41. package/dist/executions/pre-execution-checks/subworkflow-policy-checker.js.map +1 -1
  42. package/dist/modules/agents/agent-interrupted-execution-sweeper.d.ts +5 -1
  43. package/dist/modules/agents/agent-interrupted-execution-sweeper.js +14 -2
  44. package/dist/modules/agents/agent-interrupted-execution-sweeper.js.map +1 -1
  45. package/dist/modules/agents/agent-runtime-reconstruction.service.d.ts +1 -0
  46. package/dist/modules/agents/agent-runtime-reconstruction.service.js +39 -4
  47. package/dist/modules/agents/agent-runtime-reconstruction.service.js.map +1 -1
  48. package/dist/modules/agents/agents.module.d.ts +1 -1
  49. package/dist/modules/agents/agents.module.js +3 -0
  50. package/dist/modules/agents/agents.module.js.map +1 -1
  51. package/dist/modules/agents/background/agent-background-job.service.d.ts +34 -0
  52. package/dist/modules/agents/background/agent-background-job.service.js +168 -0
  53. package/dist/modules/agents/background/agent-background-job.service.js.map +1 -0
  54. package/dist/modules/agents/background/background-job-tools.d.ts +21 -0
  55. package/dist/modules/agents/background/background-job-tools.js +157 -0
  56. package/dist/modules/agents/background/background-job-tools.js.map +1 -0
  57. package/dist/modules/agents/background/sub-agent-background-runner.d.ts +27 -0
  58. package/dist/modules/agents/background/sub-agent-background-runner.js +123 -0
  59. package/dist/modules/agents/background/sub-agent-background-runner.js.map +1 -0
  60. package/dist/modules/agents/entities/agent-background-job.entity.d.ts +18 -0
  61. package/dist/modules/agents/entities/agent-background-job.entity.js +78 -0
  62. package/dist/modules/agents/entities/agent-background-job.entity.js.map +1 -0
  63. package/dist/modules/agents/repositories/agent-background-job.repository.d.ts +37 -0
  64. package/dist/modules/agents/repositories/agent-background-job.repository.js +61 -0
  65. package/dist/modules/agents/repositories/agent-background-job.repository.js.map +1 -0
  66. package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.d.ts +4 -5
  67. package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.js +4 -14
  68. package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.js.map +1 -1
  69. package/dist/modules/agents/sub-agents/format-sub-agent-tool-output.d.ts +3 -0
  70. package/dist/modules/agents/sub-agents/format-sub-agent-tool-output.js +14 -0
  71. package/dist/modules/agents/sub-agents/format-sub-agent-tool-output.js.map +1 -0
  72. package/dist/modules/agents/sub-agents/{sub-agent-foreground-runner.d.ts → sub-agent-runner.d.ts} +5 -5
  73. package/dist/modules/agents/sub-agents/{sub-agent-foreground-runner.js → sub-agent-runner.js} +8 -11
  74. package/dist/modules/agents/sub-agents/sub-agent-runner.js.map +1 -0
  75. package/dist/modules/agents/tools/workflow-tool-factory.d.ts +2 -0
  76. package/dist/modules/agents/tools/workflow-tool-factory.js +2 -1
  77. package/dist/modules/agents/tools/workflow-tool-factory.js.map +1 -1
  78. package/dist/modules/chat-hub/chat-hub.service.d.ts +3 -1
  79. package/dist/modules/chat-hub/chat-hub.service.js +8 -2
  80. package/dist/modules/chat-hub/chat-hub.service.js.map +1 -1
  81. package/dist/modules/community-packages/community-packages.service.js +4 -0
  82. package/dist/modules/community-packages/community-packages.service.js.map +1 -1
  83. package/dist/modules/instance-ai/eval/execution.service.js +1 -1
  84. package/dist/modules/instance-ai/eval/execution.service.js.map +1 -1
  85. package/dist/modules/log-streaming.ee/destinations/destination-credentials-access.d.ts +4 -0
  86. package/dist/modules/log-streaming.ee/destinations/destination-credentials-access.js +21 -0
  87. package/dist/modules/log-streaming.ee/destinations/destination-credentials-access.js.map +1 -0
  88. package/dist/modules/log-streaming.ee/log-streaming.controller.d.ts +4 -2
  89. package/dist/modules/log-streaming.ee/log-streaming.controller.js +13 -4
  90. package/dist/modules/log-streaming.ee/log-streaming.controller.js.map +1 -1
  91. package/dist/modules/mcp/tools/workflow-builder/constants.d.ts +1 -0
  92. package/dist/modules/mcp/tools/workflow-builder/constants.js +2 -1
  93. package/dist/modules/mcp/tools/workflow-builder/constants.js.map +1 -1
  94. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js +2 -1
  95. package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js.map +1 -1
  96. package/dist/modules/mcp/tools/workflow-builder/validate-workflow-code.tool.js +2 -1
  97. package/dist/modules/mcp/tools/workflow-builder/validate-workflow-code.tool.js.map +1 -1
  98. package/dist/modules/oauth-server/oauth-server.service.js +29 -0
  99. package/dist/modules/oauth-server/oauth-server.service.js.map +1 -1
  100. package/dist/modules/oauth-server/oauth-session.service.d.ts +1 -0
  101. package/dist/modules/oauth-server/oauth-session.service.js +5 -5
  102. package/dist/modules/oauth-server/oauth-session.service.js.map +1 -1
  103. package/dist/modules/source-control.ee/source-control.service.ee.d.ts +1 -0
  104. package/dist/modules/source-control.ee/source-control.service.ee.js +24 -20
  105. package/dist/modules/source-control.ee/source-control.service.ee.js.map +1 -1
  106. package/dist/modules/sso-oidc/oidc.controller.ee.js +1 -0
  107. package/dist/modules/sso-oidc/oidc.controller.ee.js.map +1 -1
  108. package/dist/modules/sso-oidc/oidc.service.ee.d.ts +1 -0
  109. package/dist/modules/sso-oidc/oidc.service.ee.js +7 -0
  110. package/dist/modules/sso-oidc/oidc.service.ee.js.map +1 -1
  111. package/dist/public-api/v1/handlers/evaluations/evaluations.handler.js +11 -35
  112. package/dist/public-api/v1/handlers/evaluations/evaluations.handler.js.map +1 -1
  113. package/dist/public-api/v1/handlers/log-streaming/log-streaming.handler.js +10 -3
  114. package/dist/public-api/v1/handlers/log-streaming/log-streaming.handler.js.map +1 -1
  115. package/dist/public-api/v1/handlers/users/users.handler.ee.d.ts +1 -1
  116. package/dist/public-api/v1/handlers/users/users.handler.ee.js +16 -18
  117. package/dist/public-api/v1/handlers/users/users.handler.ee.js.map +1 -1
  118. package/dist/public-api/v1/handlers/users/users.mapper.d.ts +12 -0
  119. package/dist/public-api/v1/handlers/users/users.mapper.js +27 -0
  120. package/dist/public-api/v1/handlers/users/users.mapper.js.map +1 -0
  121. package/dist/push/abstract.push.js +2 -1
  122. package/dist/push/abstract.push.js.map +1 -1
  123. package/dist/scaling/constants.d.ts +2 -2
  124. package/dist/scaling/constants.js +1 -0
  125. package/dist/scaling/constants.js.map +1 -1
  126. package/dist/scaling/pubsub/pubsub.event-map.d.ts +3 -0
  127. package/dist/scaling/pubsub/pubsub.types.d.ts +2 -1
  128. package/dist/server.d.ts +1 -0
  129. package/dist/server.js +25 -25
  130. package/dist/server.js.map +1 -1
  131. package/dist/services/active-workflows.service.d.ts +4 -5
  132. package/dist/services/active-workflows.service.js +11 -12
  133. package/dist/services/active-workflows.service.js.map +1 -1
  134. package/dist/services/credentials-tester.service.d.ts +1 -0
  135. package/dist/services/credentials-tester.service.js +9 -1
  136. package/dist/services/credentials-tester.service.js.map +1 -1
  137. package/dist/services/project.service.ee.d.ts +1 -0
  138. package/dist/services/project.service.ee.js +3 -0
  139. package/dist/services/project.service.ee.js.map +1 -1
  140. package/dist/services/user.service.d.ts +41 -8
  141. package/dist/services/user.service.js +174 -8
  142. package/dist/services/user.service.js.map +1 -1
  143. package/dist/task-runners/task-broker/auth/task-broker-auth.service.js +1 -2
  144. package/dist/task-runners/task-broker/auth/task-broker-auth.service.js.map +1 -1
  145. package/dist/utils/request-path.d.ts +2 -0
  146. package/dist/utils/request-path.js +58 -0
  147. package/dist/utils/request-path.js.map +1 -0
  148. package/dist/webhooks/hitl-interaction-webhooks.d.ts +1 -0
  149. package/dist/webhooks/hitl-interaction-webhooks.js +5 -3
  150. package/dist/webhooks/hitl-interaction-webhooks.js.map +1 -1
  151. package/dist/webhooks/slack-interaction-webhooks.d.ts +1 -0
  152. package/dist/webhooks/slack-interaction-webhooks.js +4 -0
  153. package/dist/webhooks/slack-interaction-webhooks.js.map +1 -1
  154. package/dist/webhooks/telegram-interaction-webhooks.d.ts +1 -0
  155. package/dist/webhooks/telegram-interaction-webhooks.js +4 -0
  156. package/dist/webhooks/telegram-interaction-webhooks.js.map +1 -1
  157. package/dist/webhooks/webhook-request-sanitizer.js +8 -0
  158. package/dist/webhooks/webhook-request-sanitizer.js.map +1 -1
  159. package/dist/webhooks/webhook-response-headers.js +11 -2
  160. package/dist/webhooks/webhook-response-headers.js.map +1 -1
  161. package/dist/workflows/publication/publication-status-reporter.d.ts +4 -4
  162. package/dist/workflows/publication/publication-status-reporter.js +16 -16
  163. package/dist/workflows/publication/publication-status-reporter.js.map +1 -1
  164. package/dist/workflows/workflow-push-notifier.service.d.ts +9 -0
  165. package/dist/workflows/workflow-push-notifier.service.js +31 -0
  166. package/dist/workflows/workflow-push-notifier.service.js.map +1 -0
  167. package/dist/workflows/workflow-sharing.service.d.ts +7 -3
  168. package/dist/workflows/workflow-sharing.service.js +29 -2
  169. package/dist/workflows/workflow-sharing.service.js.map +1 -1
  170. package/package.json +35 -35
  171. package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js.map +0 -1
  172. package/dist/public-api/v1/handlers/users/users.service.ee.d.ts +0 -21
  173. package/dist/public-api/v1/handlers/users/users.service.ee.js +0 -68
  174. package/dist/public-api/v1/handlers/users/users.service.ee.js.map +0 -1
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSpawnBackgroundSubAgentTool = createSpawnBackgroundSubAgentTool;
4
+ exports.createCheckBackgroundJobsTool = createCheckBackgroundJobsTool;
5
+ exports.createCancelBackgroundJobTool = createCancelBackgroundJobTool;
6
+ const agents_1 = require("@n8n/agents");
7
+ const tool_1 = require("@n8n/agents/tool");
8
+ const api_types_1 = require("@n8n/api-types");
9
+ const zod_1 = require("zod");
10
+ const agent_sandbox_principal_1 = require("../agent-sandbox-principal");
11
+ const RESULT_ECHO_MAX_CHARS = 8000;
12
+ function threadIdOf(ctx) {
13
+ return ctx.persistence?.threadId;
14
+ }
15
+ function createSpawnBackgroundSubAgentTool(options) {
16
+ const roster = options.availableSubAgents
17
+ .map((agent) => `- ${agent.id}: ${agent.name}${agent.useWhen ? ` — ${agent.useWhen}` : ''}`)
18
+ .join('\n');
19
+ return new tool_1.Tool('spawn_background_subagent')
20
+ .description('Dispatch a sub-agent as a detached background job. Returns a receipt immediately; the ' +
21
+ 'sub-agent keeps working after your turn ends. Pass "inline" as subAgentId to spawn a ' +
22
+ 'copy of yourself for a self-contained subtask.' +
23
+ (roster ? ` Available configured sub-agents:\n${roster}` : ''))
24
+ .systemInstruction('Prefer spawn_background_subagent for independent pieces of work that can run in parallel ' +
25
+ 'while you continue. After spawning, either continue with non-overlapping work or end ' +
26
+ 'your turn telling the user that work continues in the background — never poll ' +
27
+ 'check_background_jobs in a loop waiting for jobs to finish; check once in a later turn ' +
28
+ 'instead. The final answer is the contract; never expect the full trace. Instruct ' +
29
+ 'sub-agents producing large outputs to write them to the shared workspace and return a ' +
30
+ 'summary.')
31
+ .input(zod_1.z.object({
32
+ subAgentId: zod_1.z
33
+ .string()
34
+ .describe('Id of a configured sub-agent from the roster, or "inline" for a copy of yourself'),
35
+ taskName: zod_1.z
36
+ .string()
37
+ .min(1)
38
+ .max(255)
39
+ .describe('Short label for the job, echoed in status checks'),
40
+ goal: zod_1.z.string().describe('What the sub-agent should accomplish'),
41
+ context: zod_1.z.string().optional().describe('Background information the sub-agent needs'),
42
+ expectedOutput: zod_1.z.string().optional().describe('Shape of the answer to return'),
43
+ difficulty: zod_1.z
44
+ .enum(api_types_1.SUB_AGENT_TASK_DIFFICULTIES)
45
+ .optional()
46
+ .describe('Inline spawns only: picks the model tier configured for this difficulty'),
47
+ }))
48
+ .output(zod_1.z.object({
49
+ status: zod_1.z.enum(['started', 'limit-reached', 'rejected']),
50
+ jobId: zod_1.z.string().optional(),
51
+ note: zod_1.z.string().optional(),
52
+ }))
53
+ .handler(async (input, ctx) => {
54
+ const parentThreadId = threadIdOf(ctx);
55
+ const parentResourceId = ctx.persistence?.resourceId;
56
+ if (!parentThreadId || !parentResourceId) {
57
+ return {
58
+ status: 'rejected',
59
+ note: 'Background jobs need a persisted conversation thread; none is active.',
60
+ };
61
+ }
62
+ const isSelfDelegation = input.subAgentId === agents_1.INLINE_SUB_AGENT_ID;
63
+ const source = isSelfDelegation
64
+ ? { agentId: options.parentAgentId }
65
+ : options.sourcesById[input.subAgentId];
66
+ if (!source) {
67
+ const ids = [...options.availableSubAgents.map((agent) => agent.id), 'inline'].join(', ');
68
+ return {
69
+ status: 'rejected',
70
+ note: `No sub-agent matched "${input.subAgentId}". Available: ${ids}.`,
71
+ };
72
+ }
73
+ const sandboxScope = (0, agent_sandbox_principal_1.decodeAgentSandboxHostMetadata)(ctx.persistence?.hostMetadata);
74
+ const receipt = await options.backgroundRunner.spawn({
75
+ subAgentId: source.agentId,
76
+ source,
77
+ taskName: input.taskName,
78
+ goal: input.goal,
79
+ context: input.context,
80
+ expectedOutput: input.expectedOutput,
81
+ ...(isSelfDelegation && input.difficulty !== undefined
82
+ ? { difficulty: input.difficulty }
83
+ : {}),
84
+ parentThreadId,
85
+ parentResourceId,
86
+ ...(sandboxScope?.projectId === options.projectId
87
+ ? { parentSandboxPrincipalHash: sandboxScope.principalHash }
88
+ : {}),
89
+ }, {
90
+ projectId: options.projectId,
91
+ parentAgentId: options.parentAgentId,
92
+ ...options.runContext,
93
+ });
94
+ if (receipt.status === 'started') {
95
+ return {
96
+ status: 'started',
97
+ jobId: receipt.jobId,
98
+ note: 'Job dispatched. Check on it later with check_background_jobs.',
99
+ };
100
+ }
101
+ return {
102
+ status: 'limit-reached',
103
+ note: 'This conversation already has the maximum number of running background jobs. Wait for one to finish or cancel one.',
104
+ };
105
+ })
106
+ .build();
107
+ }
108
+ function createCheckBackgroundJobsTool(jobService) {
109
+ return new tool_1.Tool('check_background_jobs')
110
+ .description('List the background jobs of this conversation with their status and, once settled, ' +
111
+ 'their result or error. Pass an empty object {} to list all jobs (required — do not pass null). ' +
112
+ 'Call this at most once per turn: when jobs are still running, tell the user and end your ' +
113
+ 'turn — repeated checks within one turn only burn time and tokens.')
114
+ .input(zod_1.z.object({
115
+ jobIds: zod_1.z.array(zod_1.z.string()).max(50).optional().describe('Limit the check to these job ids'),
116
+ }))
117
+ .handler(async (input, ctx) => {
118
+ const parentThreadId = threadIdOf(ctx);
119
+ if (!parentThreadId) {
120
+ return { jobs: [], note: 'No persisted conversation thread is active.' };
121
+ }
122
+ const jobs = await jobService.listForThread(parentThreadId, input.jobIds);
123
+ return {
124
+ jobs: jobs.map((job) => ({
125
+ jobId: job.id,
126
+ kind: job.kind,
127
+ title: job.title,
128
+ status: job.status,
129
+ ...(job.result !== null ? { result: truncateResult(job.result) } : {}),
130
+ ...(job.error !== null ? { error: truncateResult(job.error) } : {}),
131
+ startedAt: job.createdAt.toISOString(),
132
+ ...(job.timeoutAt !== null ? { timeoutAt: job.timeoutAt.toISOString() } : {}),
133
+ })),
134
+ runningCount: jobs.filter((job) => job.status === 'running').length,
135
+ };
136
+ })
137
+ .build();
138
+ }
139
+ function createCancelBackgroundJobTool(jobService) {
140
+ return new tool_1.Tool('cancel_background_job')
141
+ .description('Cancel a running background job of this conversation by its job id.')
142
+ .input(zod_1.z.object({ jobId: zod_1.z.string() }))
143
+ .output(zod_1.z.object({ status: zod_1.z.enum(['cancelled', 'not-found', 'already-settled']) }))
144
+ .handler(async (input, ctx) => {
145
+ const parentThreadId = threadIdOf(ctx);
146
+ if (!parentThreadId)
147
+ return { status: 'not-found' };
148
+ return { status: await jobService.cancel(parentThreadId, input.jobId) };
149
+ })
150
+ .build();
151
+ }
152
+ function truncateResult(result) {
153
+ if (result.length <= RESULT_ECHO_MAX_CHARS)
154
+ return result;
155
+ return `${result.slice(0, RESULT_ECHO_MAX_CHARS)}\n[... truncated, ${result.length} characters total]`;
156
+ }
157
+ //# sourceMappingURL=background-job-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-job-tools.js","sourceRoot":"","sources":["../../../../src/modules/agents/background/background-job-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { SubAgentSource, SubAgentTaskDifficulty } from '@n8n/api-types';
2
+ import { Logger } from '@n8n/backend-common';
3
+ import { AgentBackgroundJobService, type BackgroundJobReceipt } from './agent-background-job.service';
4
+ import { SubAgentRunner, type SubAgentRunContext } from '../sub-agents/sub-agent-runner';
5
+ export interface BackgroundSpawnRequest {
6
+ subAgentId: string;
7
+ source: SubAgentSource;
8
+ taskName: string;
9
+ goal: string;
10
+ context?: string;
11
+ expectedOutput?: string;
12
+ difficulty?: SubAgentTaskDifficulty;
13
+ parentThreadId: string;
14
+ parentResourceId: string;
15
+ parentSandboxPrincipalHash?: string;
16
+ }
17
+ export declare class SubAgentBackgroundRunner {
18
+ private readonly runner;
19
+ private readonly jobService;
20
+ private readonly logger;
21
+ private dispatchCounter;
22
+ constructor(runner: SubAgentRunner, jobService: AgentBackgroundJobService, logger: Logger);
23
+ spawn(request: BackgroundSpawnRequest, context: {
24
+ projectId: string;
25
+ parentAgentId: string;
26
+ } & Pick<SubAgentRunContext, 'credentialProvider' | 'runType' | 'workflowToolExecutionMode' | 'user' | 'instrumentation'>): Promise<BackgroundJobReceipt>;
27
+ }
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SubAgentBackgroundRunner = void 0;
13
+ const agents_1 = require("@n8n/agents");
14
+ const backend_common_1 = require("@n8n/backend-common");
15
+ const di_1 = require("@n8n/di");
16
+ const uuid_1 = require("uuid");
17
+ const agent_background_job_service_1 = require("./agent-background-job.service");
18
+ const format_sub_agent_tool_output_1 = require("../sub-agents/format-sub-agent-tool-output");
19
+ const sub_agent_runner_1 = require("../sub-agents/sub-agent-runner");
20
+ let SubAgentBackgroundRunner = class SubAgentBackgroundRunner {
21
+ constructor(runner, jobService, logger) {
22
+ this.runner = runner;
23
+ this.jobService = jobService;
24
+ this.logger = logger;
25
+ this.dispatchCounter = 0;
26
+ this.logger = this.logger.scoped('agents');
27
+ }
28
+ async spawn(request, context) {
29
+ const taskPath = (0, agents_1.createChildSubAgentTaskPath)(request.taskName, this.dispatchCounter++);
30
+ const jobId = (0, uuid_1.v4)();
31
+ const childThreadId = (0, uuid_1.v4)();
32
+ const receipt = await this.jobService.registerSubAgentJob({
33
+ id: jobId,
34
+ parentAgentId: context.parentAgentId,
35
+ parentThreadId: request.parentThreadId,
36
+ title: request.taskName,
37
+ subAgentId: request.subAgentId,
38
+ childThreadId,
39
+ });
40
+ if (receipt.status !== 'started')
41
+ return receipt;
42
+ const abortController = new AbortController();
43
+ this.jobService.registerAbortController(jobId, abortController);
44
+ const timeout = setTimeout(() => {
45
+ void this.jobService
46
+ .settle(jobId, {
47
+ status: 'failed',
48
+ error: `Timed out after ${Math.round(agent_background_job_service_1.SUB_AGENT_BACKGROUND_TIMEOUT_MS / 60_000)} minutes`,
49
+ })
50
+ .catch((error) => {
51
+ this.logger.error('Failed to settle timed-out background job', { jobId, error });
52
+ })
53
+ .finally(() => abortController.abort());
54
+ }, agent_background_job_service_1.SUB_AGENT_BACKGROUND_TIMEOUT_MS);
55
+ timeout.unref();
56
+ void this.runner
57
+ .run({
58
+ goal: request.goal,
59
+ source: request.source,
60
+ ...(request.context !== undefined ? { context: request.context } : {}),
61
+ ...(request.expectedOutput !== undefined
62
+ ? { expectedOutput: request.expectedOutput }
63
+ : {}),
64
+ parentThreadId: request.parentThreadId,
65
+ parentResourceId: request.parentResourceId,
66
+ ...(request.parentSandboxPrincipalHash !== undefined
67
+ ? { parentSandboxPrincipalHash: request.parentSandboxPrincipalHash }
68
+ : {}),
69
+ childThreadId,
70
+ taskPath,
71
+ }, {
72
+ projectId: context.projectId,
73
+ parentAgentId: context.parentAgentId,
74
+ credentialProvider: context.credentialProvider,
75
+ runType: context.runType,
76
+ workflowToolExecutionMode: context.workflowToolExecutionMode,
77
+ user: context.user,
78
+ instrumentation: context.instrumentation,
79
+ abortSignal: abortController.signal,
80
+ ...(request.difficulty !== undefined
81
+ ? { selfDelegationDifficulty: request.difficulty }
82
+ : {}),
83
+ })
84
+ .then((result) => settlementFor(result))
85
+ .catch((error) => ({
86
+ status: 'failed',
87
+ error: error instanceof Error ? error.message : String(error),
88
+ }))
89
+ .then(async (settlement) => {
90
+ const settled = await this.jobService.settle(jobId, settlement);
91
+ if (settled && settlement.status === 'failed') {
92
+ this.logger.warn('Background sub-agent job failed', { jobId, error: settlement.error });
93
+ }
94
+ })
95
+ .catch((error) => {
96
+ this.logger.error('Failed to settle background sub-agent job', { jobId, error });
97
+ })
98
+ .finally(() => clearTimeout(timeout));
99
+ return receipt;
100
+ }
101
+ };
102
+ exports.SubAgentBackgroundRunner = SubAgentBackgroundRunner;
103
+ exports.SubAgentBackgroundRunner = SubAgentBackgroundRunner = __decorate([
104
+ (0, di_1.Service)(),
105
+ __metadata("design:paramtypes", [sub_agent_runner_1.SubAgentRunner, agent_background_job_service_1.AgentBackgroundJobService, backend_common_1.Logger])
106
+ ], SubAgentBackgroundRunner);
107
+ function settlementFor(result) {
108
+ const output = (0, format_sub_agent_tool_output_1.formatSubAgentToolOutput)(result);
109
+ if (output.status === 'completed') {
110
+ return { status: 'completed', result: output.answer };
111
+ }
112
+ if (output.status === 'suspended') {
113
+ return {
114
+ status: 'failed',
115
+ error: 'Sub-agent suspended awaiting human input, which background runs do not support',
116
+ };
117
+ }
118
+ return {
119
+ status: output.status === 'cancelled' ? 'cancelled' : 'failed',
120
+ error: output.error ?? null,
121
+ };
122
+ }
123
+ //# sourceMappingURL=sub-agent-background-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-background-runner.js","sourceRoot":"","sources":["../../../../src/modules/agents/background/sub-agent-background-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { WithTimestampsAndStringId } from '@n8n/db';
2
+ export type AgentBackgroundJobKind = 'subagent' | 'workflow';
3
+ export type AgentBackgroundJobStatus = 'running' | 'completed' | 'failed' | 'cancelled';
4
+ export declare class AgentBackgroundJob extends WithTimestampsAndStringId {
5
+ kind: AgentBackgroundJobKind;
6
+ status: AgentBackgroundJobStatus;
7
+ parentAgentId: string;
8
+ parentThreadId: string;
9
+ title: string;
10
+ subAgentId: string | null;
11
+ childThreadId: string | null;
12
+ childExecutionId: string | null;
13
+ workflowId: string | null;
14
+ timeoutAt: Date | null;
15
+ result: string | null;
16
+ error: string | null;
17
+ settledAt: Date | null;
18
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AgentBackgroundJob = void 0;
13
+ const db_1 = require("@n8n/db");
14
+ const typeorm_1 = require("@n8n/typeorm");
15
+ let AgentBackgroundJob = class AgentBackgroundJob extends db_1.WithTimestampsAndStringId {
16
+ };
17
+ exports.AgentBackgroundJob = AgentBackgroundJob;
18
+ __decorate([
19
+ (0, typeorm_1.Column)({ type: 'varchar', length: 16 }),
20
+ __metadata("design:type", String)
21
+ ], AgentBackgroundJob.prototype, "kind", void 0);
22
+ __decorate([
23
+ (0, typeorm_1.Column)({ type: 'varchar', length: 16 }),
24
+ __metadata("design:type", String)
25
+ ], AgentBackgroundJob.prototype, "status", void 0);
26
+ __decorate([
27
+ (0, typeorm_1.Column)({ type: 'varchar', length: 36 }),
28
+ __metadata("design:type", String)
29
+ ], AgentBackgroundJob.prototype, "parentAgentId", void 0);
30
+ __decorate([
31
+ (0, typeorm_1.Column)({ type: 'varchar', length: 128 }),
32
+ __metadata("design:type", String)
33
+ ], AgentBackgroundJob.prototype, "parentThreadId", void 0);
34
+ __decorate([
35
+ (0, typeorm_1.Column)({ type: 'varchar', length: 255 }),
36
+ __metadata("design:type", String)
37
+ ], AgentBackgroundJob.prototype, "title", void 0);
38
+ __decorate([
39
+ (0, typeorm_1.Column)({ type: 'varchar', length: 36, nullable: true }),
40
+ __metadata("design:type", Object)
41
+ ], AgentBackgroundJob.prototype, "subAgentId", void 0);
42
+ __decorate([
43
+ (0, typeorm_1.Column)({ type: 'varchar', length: 128, nullable: true }),
44
+ __metadata("design:type", Object)
45
+ ], AgentBackgroundJob.prototype, "childThreadId", void 0);
46
+ __decorate([
47
+ (0, typeorm_1.Column)({ type: 'varchar', length: 36, nullable: true }),
48
+ __metadata("design:type", Object)
49
+ ], AgentBackgroundJob.prototype, "childExecutionId", void 0);
50
+ __decorate([
51
+ (0, typeorm_1.Column)({ type: 'varchar', length: 36, nullable: true }),
52
+ __metadata("design:type", Object)
53
+ ], AgentBackgroundJob.prototype, "workflowId", void 0);
54
+ __decorate([
55
+ (0, db_1.DateTimeColumn)({ precision: 3, nullable: true }),
56
+ __metadata("design:type", Object)
57
+ ], AgentBackgroundJob.prototype, "timeoutAt", void 0);
58
+ __decorate([
59
+ (0, typeorm_1.Column)({ type: 'text', nullable: true }),
60
+ __metadata("design:type", Object)
61
+ ], AgentBackgroundJob.prototype, "result", void 0);
62
+ __decorate([
63
+ (0, typeorm_1.Column)({ type: 'text', nullable: true }),
64
+ __metadata("design:type", Object)
65
+ ], AgentBackgroundJob.prototype, "error", void 0);
66
+ __decorate([
67
+ (0, db_1.DateTimeColumn)({ precision: 3, nullable: true }),
68
+ __metadata("design:type", Object)
69
+ ], AgentBackgroundJob.prototype, "settledAt", void 0);
70
+ exports.AgentBackgroundJob = AgentBackgroundJob = __decorate([
71
+ (0, typeorm_1.Entity)({ name: 'agent_background_job' }),
72
+ (0, typeorm_1.Index)(['parentThreadId', 'status']),
73
+ (0, typeorm_1.Index)(['parentAgentId']),
74
+ (0, typeorm_1.Index)(['settledAt']),
75
+ (0, typeorm_1.Index)(['childExecutionId'], { unique: true, where: '"childExecutionId" IS NOT NULL' }),
76
+ (0, typeorm_1.Index)(['timeoutAt'], { where: '"status" = \'running\'' })
77
+ ], AgentBackgroundJob);
78
+ //# sourceMappingURL=agent-background-job.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-background-job.entity.js","sourceRoot":"","sources":["../../../../src/modules/agents/entities/agent-background-job.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAoE;AACpE,0CAAqD;AAkB9C,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,8BAAyB;CAiDhE,CAAA;;AA/CA;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;gDACX;AAG7B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;kDACP;AAGjC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;yDAClB;AAMtB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;0DAClB;AAIvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;iDAC3B;AAId;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sDAC9B;AAI1B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDAC5B;AAI7B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4DACxB;AAIhC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sDAC9B;AAI1B;IADC,IAAA,mBAAc,EAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDAC1B;AAIvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACnB;AAGtB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDACpB;AAGrB;IADC,IAAA,mBAAc,EAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDAC1B;6BAhDX,kBAAkB;IAN9B,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;IACxC,IAAA,eAAK,EAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACnC,IAAA,eAAK,EAAC,CAAC,eAAe,CAAC,CAAC;IACxB,IAAA,eAAK,EAAC,CAAC,WAAW,CAAC,CAAC;IACpB,IAAA,eAAK,EAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;IACtF,IAAA,eAAK,EAAC,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;GAC7C,kBAAkB,CAiD9B"}
@@ -0,0 +1,37 @@
1
+ import { DataSource, Repository } from '@n8n/typeorm';
2
+ import { AgentBackgroundJob, type AgentBackgroundJobKind, type AgentBackgroundJobStatus } from '../entities/agent-background-job.entity';
3
+ type NewAgentBackgroundJobBase = {
4
+ id: string;
5
+ parentAgentId: string;
6
+ parentThreadId: string;
7
+ title: string;
8
+ };
9
+ export type NewSubAgentJob = NewAgentBackgroundJobBase & {
10
+ kind: 'subagent';
11
+ subAgentId: string;
12
+ childThreadId: string;
13
+ timeoutAt: Date;
14
+ };
15
+ export type NewWorkflowJob = NewAgentBackgroundJobBase & {
16
+ kind: 'workflow';
17
+ workflowId: string;
18
+ childExecutionId: string;
19
+ };
20
+ export type NewAgentBackgroundJob = NewSubAgentJob | NewWorkflowJob;
21
+ export type AgentBackgroundJobSettlement = {
22
+ status: Exclude<AgentBackgroundJobStatus, 'running'>;
23
+ result?: string | null;
24
+ error?: string | null;
25
+ };
26
+ export declare class AgentBackgroundJobRepository extends Repository<AgentBackgroundJob> {
27
+ constructor(dataSource: DataSource);
28
+ insertJob(job: NewAgentBackgroundJob): Promise<void>;
29
+ countRunningByParentThread(parentThreadId: string): Promise<number>;
30
+ findByParentThread(parentThreadId: string, ids?: string[]): Promise<AgentBackgroundJob[]>;
31
+ findRunningWorkflowJobByExecutionId(executionId: string): Promise<AgentBackgroundJob | null>;
32
+ findRunningJobs(kind?: AgentBackgroundJobKind): Promise<AgentBackgroundJob[]>;
33
+ findRunningPastTimeout(now: Date): Promise<AgentBackgroundJob[]>;
34
+ settleIfRunning(id: string, settlement: AgentBackgroundJobSettlement): Promise<boolean>;
35
+ deleteSettledBefore(cutoff: Date): Promise<void>;
36
+ }
37
+ export {};
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AgentBackgroundJobRepository = void 0;
13
+ const di_1 = require("@n8n/di");
14
+ const typeorm_1 = require("@n8n/typeorm");
15
+ const agent_background_job_entity_1 = require("../entities/agent-background-job.entity");
16
+ let AgentBackgroundJobRepository = class AgentBackgroundJobRepository extends typeorm_1.Repository {
17
+ constructor(dataSource) {
18
+ super(agent_background_job_entity_1.AgentBackgroundJob, dataSource.manager);
19
+ }
20
+ async insertJob(job) {
21
+ await this.insert({ ...job, status: 'running' });
22
+ }
23
+ async countRunningByParentThread(parentThreadId) {
24
+ return await this.count({ where: { parentThreadId, status: 'running' } });
25
+ }
26
+ async findByParentThread(parentThreadId, ids) {
27
+ return await this.find({
28
+ where: ids?.length ? { parentThreadId, id: (0, typeorm_1.In)(ids) } : { parentThreadId },
29
+ order: { createdAt: 'ASC' },
30
+ });
31
+ }
32
+ async findRunningWorkflowJobByExecutionId(executionId) {
33
+ return await this.findOne({
34
+ where: { kind: 'workflow', status: 'running', childExecutionId: executionId },
35
+ });
36
+ }
37
+ async findRunningJobs(kind) {
38
+ return await this.find({ where: kind ? { status: 'running', kind } : { status: 'running' } });
39
+ }
40
+ async findRunningPastTimeout(now) {
41
+ return await this.find({ where: { status: 'running', timeoutAt: (0, typeorm_1.LessThan)(now) } });
42
+ }
43
+ async settleIfRunning(id, settlement) {
44
+ const result = await this.update({ id, status: 'running' }, {
45
+ status: settlement.status,
46
+ result: settlement.result ?? null,
47
+ error: settlement.error ?? null,
48
+ settledAt: new Date(),
49
+ });
50
+ return result.affected === 1;
51
+ }
52
+ async deleteSettledBefore(cutoff) {
53
+ await this.delete({ status: (0, typeorm_1.Not)('running'), settledAt: (0, typeorm_1.LessThan)(cutoff) });
54
+ }
55
+ };
56
+ exports.AgentBackgroundJobRepository = AgentBackgroundJobRepository;
57
+ exports.AgentBackgroundJobRepository = AgentBackgroundJobRepository = __decorate([
58
+ (0, di_1.Service)(),
59
+ __metadata("design:paramtypes", [typeorm_1.DataSource])
60
+ ], AgentBackgroundJobRepository);
61
+ //# sourceMappingURL=agent-background-job.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-background-job.repository.js","sourceRoot":"","sources":["../../../../src/modules/agents/repositories/agent-background-job.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,0CAAyE;AAEzE,yFAIiD;AA+B1C,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,oBAA8B;IAC/E,YAAY,UAAsB;QACjC,KAAK,CAAC,gDAAkB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAA0B;QACzC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,0BAA0B,CAAC,cAAsB;QACtD,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,cAAsB,EAAE,GAAc;QAC9D,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC;YACtB,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE;YACzE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAC3B,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mCAAmC,CACxC,WAAmB;QAEnB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;YACzB,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE;SAC7E,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAA6B;QAClD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/F,CAAC;IAGD,KAAK,CAAC,sBAAsB,CAAC,GAAS;QACrC,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAA,kBAAQ,EAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IAOD,KAAK,CAAC,eAAe,CAAC,EAAU,EAAE,UAAwC;QACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAC/B,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EACzB;YACC,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,IAAI;YACjC,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,IAAI;YAC/B,SAAS,EAAE,IAAI,IAAI,EAAE;SACrB,CACD,CAAC;QACF,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC9B,CAAC;IAGD,KAAK,CAAC,mBAAmB,CAAC,MAAY;QACrC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAA,aAAG,EAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAA,kBAAQ,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;CACD,CAAA;;uCA3DY,4BAA4B;IADxC,IAAA,YAAO,GAAE;qCAEe,oBAAU;GADtB,4BAA4B,CA2DxC"}
@@ -1,8 +1,8 @@
1
- import { type DelegateSubAgentToolOutput, type InlineSubAgentProviderToolsResolver, type ModelConfig, type SubAgentTaskDifficulty } from '@n8n/agents';
1
+ import { type InlineSubAgentProviderToolsResolver, type ModelConfig, type SubAgentTaskDifficulty } from '@n8n/agents';
2
2
  import type { SubAgentRunPolicy, SubAgentSource } from '@n8n/api-types';
3
- import type { SubAgentForegroundRunContext, SubAgentForegroundResult, SubAgentForegroundRunner } from './sub-agent-foreground-runner';
4
- export interface CreateN8nDelegateSubAgentToolOptions extends SubAgentForegroundRunContext {
5
- runner: SubAgentForegroundRunner;
3
+ import type { SubAgentRunContext, SubAgentRunner } from './sub-agent-runner';
4
+ export interface CreateN8nDelegateSubAgentToolOptions extends SubAgentRunContext {
5
+ runner: SubAgentRunner;
6
6
  sourcesById: Record<string, SubAgentSource>;
7
7
  availableSubAgents?: Array<{
8
8
  id: string;
@@ -14,4 +14,3 @@ export interface CreateN8nDelegateSubAgentToolOptions extends SubAgentForeground
14
14
  resolveInlineSubAgentProviderTools?: InlineSubAgentProviderToolsResolver;
15
15
  }
16
16
  export declare function createN8nDelegateSubAgentTool(options: CreateN8nDelegateSubAgentToolOptions): import("@n8n/agents").BuiltTool;
17
- export declare function formatSubAgentToolOutput(result: SubAgentForegroundResult): DelegateSubAgentToolOutput;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createN8nDelegateSubAgentTool = createN8nDelegateSubAgentTool;
4
- exports.formatSubAgentToolOutput = formatSubAgentToolOutput;
5
4
  const agents_1 = require("@n8n/agents");
6
5
  const n8n_workflow_1 = require("n8n-workflow");
7
6
  const response_error_1 = require("../../../errors/response-errors/abstract/response.error");
8
7
  const agent_sandbox_principal_1 = require("../agent-sandbox-principal");
8
+ const format_sub_agent_tool_output_1 = require("./format-sub-agent-tool-output");
9
9
  function createN8nDelegateSubAgentTool(options) {
10
10
  const { runner, sourcesById, availableSubAgents, policy, inlineSubAgentModelsByDifficulty, resolveInlineSubAgentProviderTools, ...runContext } = options;
11
11
  return (0, agents_1.createDelegateSubAgentTool)({
@@ -32,10 +32,9 @@ function createN8nDelegateSubAgentTool(options) {
32
32
  };
33
33
  }
34
34
  const parentSandboxScope = (0, agent_sandbox_principal_1.decodeAgentSandboxHostMetadata)(request.parentHostMetadata);
35
- const result = await runner.runForeground({
35
+ const result = await runner.run({
36
36
  goal: request.goal,
37
37
  source: selectedSource,
38
- executionMode: 'foreground',
39
38
  ...(request.context !== undefined ? { context: request.context } : {}),
40
39
  ...(request.expectedOutput !== undefined
41
40
  ? { expectedOutput: request.expectedOutput }
@@ -65,7 +64,7 @@ function createN8nDelegateSubAgentTool(options) {
65
64
  ? { selfDelegationDifficulty: request.difficulty }
66
65
  : {}),
67
66
  });
68
- return formatSubAgentToolOutput(result);
67
+ return (0, format_sub_agent_tool_output_1.formatSubAgentToolOutput)(result);
69
68
  },
70
69
  resumeSubAgent: async (request, helpers) => {
71
70
  if (request.childThreadId === undefined || request.resumeContext === undefined) {
@@ -93,7 +92,7 @@ function createN8nDelegateSubAgentTool(options) {
93
92
  const result = request.subAgentId === agents_1.INLINE_SUB_AGENT_ID
94
93
  ? await runner.resumeForeground(request, context, resolveExpectedSourceAgentId(request.subAgentId, runContext.parentAgentId))
95
94
  : await runner.resumeForeground(request, context);
96
- return formatSubAgentToolOutput(result);
95
+ return (0, format_sub_agent_tool_output_1.formatSubAgentToolOutput)(result);
97
96
  },
98
97
  cancelSubAgent: async (request) => {
99
98
  if (request.resumeContext === undefined) {
@@ -129,13 +128,4 @@ function resolveExpectedSourceAgentId(subAgentId, parentAgentId) {
129
128
  }
130
129
  return parentAgentId;
131
130
  }
132
- function formatSubAgentToolOutput(result) {
133
- const output = (0, agents_1.generateResultToDelegateSubAgentOutput)(result.taskPath, result.result, result.threadId);
134
- return {
135
- ...output,
136
- ...(output.status === 'suspended' && result.resumeContext !== undefined
137
- ? { resumeContext: result.resumeContext }
138
- : {}),
139
- };
140
- }
141
131
  //# sourceMappingURL=delegate-sub-agent-tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delegate-sub-agent-tool.js","sourceRoot":"","sources":["../../../../src/modules/agents/sub-agents/delegate-sub-agent-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delegate-sub-agent-tool.js","sourceRoot":"","sources":["../../../../src/modules/agents/sub-agents/delegate-sub-agent-tool.ts"],"names":[],"mappings":";;;AAAA,wCAMqB;AAErB,+CAA2D;AAE3D,qFAAiF;AAEjF,wEAA4E;AAC5E,iFAA0E;AAY1E,uCAA8C,OAA6C;IAC1F,MAAM,EACL,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,gCAAgC,EAChC,kCAAkC,EAClC,GAAG,UAAU,EACb,GAAG,OAAO,CAAC;IAEZ,OAAO,IAAA,mCAA0B,EAAC;QACjC,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,gCAAgC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gCAAgC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,GAAG,CAAC,kCAAkC,KAAK,SAAS;YACnD,CAAC,CAAC,EAAE,kCAAkC,EAAE;YACxC,CAAC,CAAC,EAAE,CAAC;QACN,8BAA8B;QAC9B,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;YACvC,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,KAAK,4BAAmB,CAAC;YACpE,MAAM,cAAc,GAAG,oBAAoB,CAAC;gBAC3C,WAAW;gBACX,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,aAAa,EAAE,UAAU,CAAC,aAAa;aACvC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,OAAO;oBACN,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,mCAAmC,OAAO,CAAC,UAAU,sFAAsF;iBAClJ,CAAC;YACH,CAAC;YACD,MAAM,kBAAkB,GAAG,IAAA,wDAA8B,EAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAEtF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAC9B;gBACC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,cAAc;gBACtB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS;oBACvC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS;oBACvC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;oBACzC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE;oBAChD,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,kBAAkB,EAAE,SAAS,KAAK,UAAU,CAAC,SAAS;oBACzD,CAAC,CAAC,EAAE,0BAA0B,EAAE,kBAAkB,CAAC,aAAa,EAAE;oBAClE,CAAC,CAAC,EAAE,CAAC;gBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC1B,EACD;gBACC,GAAG,UAAU;gBACb,GAAG,CAAC,OAAO,CAAC,sBAAsB,KAAK,SAAS;oBAC/C,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,sBAAsB,EAAE;oBACtD,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;oBAC1C,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,iBAAiB,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxF,OAAO,EAAE,OAAO,CAAC,SAAS;gBAC1B,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;oBACvD,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,UAAU,EAAE;oBAClD,CAAC,CAAC,EAAE,CAAC;aACN,CACD,CAAC;YAEF,OAAO,IAAA,uDAAwB,EAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;YAC1C,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChF,OAAO;oBACN,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,iEAAiE;iBACxE,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG;gBACf,GAAG,UAAU;gBACb,GAAG,CAAC,OAAO,CAAC,sBAAsB,KAAK,SAAS;oBAC/C,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,sBAAsB,EAAE;oBACtD,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;oBAC1C,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,iBAAiB,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC;gBACN,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxF,OAAO,EAAE,OAAO,CAAC,SAAS;gBAC1B,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,4BAAmB,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;oBACjF,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,UAAU,EAAE;oBAClD,CAAC,CAAC,EAAE,CAAC;aACN,CAAC;YACF,MAAM,MAAM,GACX,OAAO,CAAC,UAAU,KAAK,4BAAmB;gBACzC,CAAC,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAC7B,OAAO,EACP,OAAO,EACP,4BAA4B,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAC1E;gBACF,CAAC,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEpD,OAAO,IAAA,uDAAwB,EAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjC,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,OAAO,CAAC,UAAU,KAAK,4BAAmB,EAAE,CAAC;gBAChD,MAAM,MAAM,CAAC,gBAAgB,CAC5B,OAAO,EACP,4BAA4B,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAC1E,CAAC;gBACF,OAAO;YACR,CAAC;YACD,MAAM,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAc;IACrD,IAAI,KAAK,YAAY,+BAAgB;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,CAAC,CAAC,KAAK,YAAY,8BAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,oBAAoB,CAAC,OAI7B;IACA,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAC3D,IAAI,UAAU,KAAK,4BAAmB,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,4BAA4B,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,4BAA4B,CAAC,UAAkB,EAAE,aAAsB;IAC/E,IAAI,UAAU,KAAK,4BAAmB;QAAE,OAAO,UAAU,CAAC;IAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,MAAM,IAAI,wBAAS,CAAC,mDAAmD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,aAAa,CAAC;AACtB,CAAC"}