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.
- package/dist/active-workflow-manager.d.ts +8 -8
- package/dist/active-workflow-manager.js +38 -23
- package/dist/active-workflow-manager.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/chat/chat-execution-manager.d.ts +5 -0
- package/dist/chat/chat-execution-manager.js +50 -10
- package/dist/chat/chat-execution-manager.js.map +1 -1
- package/dist/chat/chat-service.d.ts +0 -1
- package/dist/chat/chat-service.js +12 -18
- package/dist/chat/chat-service.js.map +1 -1
- package/dist/chat/utils.d.ts +1 -0
- package/dist/chat/utils.js +14 -4
- package/dist/chat/utils.js.map +1 -1
- package/dist/controllers/invitation.controller.d.ts +1 -5
- package/dist/controllers/invitation.controller.js +3 -32
- package/dist/controllers/invitation.controller.js.map +1 -1
- package/dist/controllers/role.controller.d.ts +3 -1
- package/dist/controllers/role.controller.js +19 -3
- package/dist/controllers/role.controller.js.map +1 -1
- package/dist/controllers/users.controller.d.ts +2 -27
- package/dist/controllers/users.controller.js +6 -132
- package/dist/controllers/users.controller.js.map +1 -1
- package/dist/credentials/credentials.service.js +24 -3
- package/dist/credentials/credentials.service.js.map +1 -1
- package/dist/errors/subworkflow-policy-denial.error.d.ts +4 -1
- package/dist/errors/subworkflow-policy-denial.error.js +26 -10
- package/dist/errors/subworkflow-policy-denial.error.js.map +1 -1
- package/dist/evaluation.ee/evaluation-test-run.service.d.ts +46 -0
- package/dist/evaluation.ee/evaluation-test-run.service.js +65 -0
- package/dist/evaluation.ee/evaluation-test-run.service.js.map +1 -0
- package/dist/evaluation.ee/insights/insights-context-builder.js +4 -2
- package/dist/evaluation.ee/insights/insights-context-builder.js.map +1 -1
- package/dist/evaluation.ee/test-runs.controller.ee.d.ts +1 -1
- package/dist/evaluation.ee/test-runs.controller.ee.js +5 -2
- package/dist/evaluation.ee/test-runs.controller.ee.js.map +1 -1
- package/dist/executions/execution-recovery.service.d.ts +3 -1
- package/dist/executions/execution-recovery.service.js +13 -4
- package/dist/executions/execution-recovery.service.js.map +1 -1
- package/dist/executions/pre-execution-checks/subworkflow-policy-checker.d.ts +5 -2
- package/dist/executions/pre-execution-checks/subworkflow-policy-checker.js +28 -8
- package/dist/executions/pre-execution-checks/subworkflow-policy-checker.js.map +1 -1
- package/dist/modules/agents/agent-interrupted-execution-sweeper.d.ts +5 -1
- package/dist/modules/agents/agent-interrupted-execution-sweeper.js +14 -2
- package/dist/modules/agents/agent-interrupted-execution-sweeper.js.map +1 -1
- package/dist/modules/agents/agent-runtime-reconstruction.service.d.ts +1 -0
- package/dist/modules/agents/agent-runtime-reconstruction.service.js +39 -4
- package/dist/modules/agents/agent-runtime-reconstruction.service.js.map +1 -1
- package/dist/modules/agents/agents.module.d.ts +1 -1
- package/dist/modules/agents/agents.module.js +3 -0
- package/dist/modules/agents/agents.module.js.map +1 -1
- package/dist/modules/agents/background/agent-background-job.service.d.ts +34 -0
- package/dist/modules/agents/background/agent-background-job.service.js +168 -0
- package/dist/modules/agents/background/agent-background-job.service.js.map +1 -0
- package/dist/modules/agents/background/background-job-tools.d.ts +21 -0
- package/dist/modules/agents/background/background-job-tools.js +157 -0
- package/dist/modules/agents/background/background-job-tools.js.map +1 -0
- package/dist/modules/agents/background/sub-agent-background-runner.d.ts +27 -0
- package/dist/modules/agents/background/sub-agent-background-runner.js +123 -0
- package/dist/modules/agents/background/sub-agent-background-runner.js.map +1 -0
- package/dist/modules/agents/entities/agent-background-job.entity.d.ts +18 -0
- package/dist/modules/agents/entities/agent-background-job.entity.js +78 -0
- package/dist/modules/agents/entities/agent-background-job.entity.js.map +1 -0
- package/dist/modules/agents/repositories/agent-background-job.repository.d.ts +37 -0
- package/dist/modules/agents/repositories/agent-background-job.repository.js +61 -0
- package/dist/modules/agents/repositories/agent-background-job.repository.js.map +1 -0
- package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.d.ts +4 -5
- package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.js +4 -14
- package/dist/modules/agents/sub-agents/delegate-sub-agent-tool.js.map +1 -1
- package/dist/modules/agents/sub-agents/format-sub-agent-tool-output.d.ts +3 -0
- package/dist/modules/agents/sub-agents/format-sub-agent-tool-output.js +14 -0
- package/dist/modules/agents/sub-agents/format-sub-agent-tool-output.js.map +1 -0
- package/dist/modules/agents/sub-agents/{sub-agent-foreground-runner.d.ts → sub-agent-runner.d.ts} +5 -5
- package/dist/modules/agents/sub-agents/{sub-agent-foreground-runner.js → sub-agent-runner.js} +8 -11
- package/dist/modules/agents/sub-agents/sub-agent-runner.js.map +1 -0
- package/dist/modules/agents/tools/workflow-tool-factory.d.ts +2 -0
- package/dist/modules/agents/tools/workflow-tool-factory.js +2 -1
- package/dist/modules/agents/tools/workflow-tool-factory.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.service.d.ts +3 -1
- package/dist/modules/chat-hub/chat-hub.service.js +8 -2
- package/dist/modules/chat-hub/chat-hub.service.js.map +1 -1
- package/dist/modules/community-packages/community-packages.service.js +4 -0
- package/dist/modules/community-packages/community-packages.service.js.map +1 -1
- package/dist/modules/instance-ai/eval/execution.service.js +1 -1
- package/dist/modules/instance-ai/eval/execution.service.js.map +1 -1
- package/dist/modules/log-streaming.ee/destinations/destination-credentials-access.d.ts +4 -0
- package/dist/modules/log-streaming.ee/destinations/destination-credentials-access.js +21 -0
- package/dist/modules/log-streaming.ee/destinations/destination-credentials-access.js.map +1 -0
- package/dist/modules/log-streaming.ee/log-streaming.controller.d.ts +4 -2
- package/dist/modules/log-streaming.ee/log-streaming.controller.js +13 -4
- package/dist/modules/log-streaming.ee/log-streaming.controller.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/constants.d.ts +1 -0
- package/dist/modules/mcp/tools/workflow-builder/constants.js +2 -1
- package/dist/modules/mcp/tools/workflow-builder/constants.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js +2 -1
- package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js.map +1 -1
- package/dist/modules/mcp/tools/workflow-builder/validate-workflow-code.tool.js +2 -1
- package/dist/modules/mcp/tools/workflow-builder/validate-workflow-code.tool.js.map +1 -1
- package/dist/modules/oauth-server/oauth-server.service.js +29 -0
- package/dist/modules/oauth-server/oauth-server.service.js.map +1 -1
- package/dist/modules/oauth-server/oauth-session.service.d.ts +1 -0
- package/dist/modules/oauth-server/oauth-session.service.js +5 -5
- package/dist/modules/oauth-server/oauth-session.service.js.map +1 -1
- package/dist/modules/source-control.ee/source-control.service.ee.d.ts +1 -0
- package/dist/modules/source-control.ee/source-control.service.ee.js +24 -20
- package/dist/modules/source-control.ee/source-control.service.ee.js.map +1 -1
- package/dist/modules/sso-oidc/oidc.controller.ee.js +1 -0
- package/dist/modules/sso-oidc/oidc.controller.ee.js.map +1 -1
- package/dist/modules/sso-oidc/oidc.service.ee.d.ts +1 -0
- package/dist/modules/sso-oidc/oidc.service.ee.js +7 -0
- package/dist/modules/sso-oidc/oidc.service.ee.js.map +1 -1
- package/dist/public-api/v1/handlers/evaluations/evaluations.handler.js +11 -35
- package/dist/public-api/v1/handlers/evaluations/evaluations.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/log-streaming/log-streaming.handler.js +10 -3
- package/dist/public-api/v1/handlers/log-streaming/log-streaming.handler.js.map +1 -1
- package/dist/public-api/v1/handlers/users/users.handler.ee.d.ts +1 -1
- package/dist/public-api/v1/handlers/users/users.handler.ee.js +16 -18
- package/dist/public-api/v1/handlers/users/users.handler.ee.js.map +1 -1
- package/dist/public-api/v1/handlers/users/users.mapper.d.ts +12 -0
- package/dist/public-api/v1/handlers/users/users.mapper.js +27 -0
- package/dist/public-api/v1/handlers/users/users.mapper.js.map +1 -0
- package/dist/push/abstract.push.js +2 -1
- package/dist/push/abstract.push.js.map +1 -1
- package/dist/scaling/constants.d.ts +2 -2
- package/dist/scaling/constants.js +1 -0
- package/dist/scaling/constants.js.map +1 -1
- package/dist/scaling/pubsub/pubsub.event-map.d.ts +3 -0
- package/dist/scaling/pubsub/pubsub.types.d.ts +2 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.js +25 -25
- package/dist/server.js.map +1 -1
- package/dist/services/active-workflows.service.d.ts +4 -5
- package/dist/services/active-workflows.service.js +11 -12
- package/dist/services/active-workflows.service.js.map +1 -1
- package/dist/services/credentials-tester.service.d.ts +1 -0
- package/dist/services/credentials-tester.service.js +9 -1
- package/dist/services/credentials-tester.service.js.map +1 -1
- package/dist/services/project.service.ee.d.ts +1 -0
- package/dist/services/project.service.ee.js +3 -0
- package/dist/services/project.service.ee.js.map +1 -1
- package/dist/services/user.service.d.ts +41 -8
- package/dist/services/user.service.js +174 -8
- package/dist/services/user.service.js.map +1 -1
- package/dist/task-runners/task-broker/auth/task-broker-auth.service.js +1 -2
- package/dist/task-runners/task-broker/auth/task-broker-auth.service.js.map +1 -1
- package/dist/utils/request-path.d.ts +2 -0
- package/dist/utils/request-path.js +58 -0
- package/dist/utils/request-path.js.map +1 -0
- package/dist/webhooks/hitl-interaction-webhooks.d.ts +1 -0
- package/dist/webhooks/hitl-interaction-webhooks.js +5 -3
- package/dist/webhooks/hitl-interaction-webhooks.js.map +1 -1
- package/dist/webhooks/slack-interaction-webhooks.d.ts +1 -0
- package/dist/webhooks/slack-interaction-webhooks.js +4 -0
- package/dist/webhooks/slack-interaction-webhooks.js.map +1 -1
- package/dist/webhooks/telegram-interaction-webhooks.d.ts +1 -0
- package/dist/webhooks/telegram-interaction-webhooks.js +4 -0
- package/dist/webhooks/telegram-interaction-webhooks.js.map +1 -1
- package/dist/webhooks/webhook-request-sanitizer.js +8 -0
- package/dist/webhooks/webhook-request-sanitizer.js.map +1 -1
- package/dist/webhooks/webhook-response-headers.js +11 -2
- package/dist/webhooks/webhook-response-headers.js.map +1 -1
- package/dist/workflows/publication/publication-status-reporter.d.ts +4 -4
- package/dist/workflows/publication/publication-status-reporter.js +16 -16
- package/dist/workflows/publication/publication-status-reporter.js.map +1 -1
- package/dist/workflows/workflow-push-notifier.service.d.ts +9 -0
- package/dist/workflows/workflow-push-notifier.service.js +31 -0
- package/dist/workflows/workflow-push-notifier.service.js.map +1 -0
- package/dist/workflows/workflow-sharing.service.d.ts +7 -3
- package/dist/workflows/workflow-sharing.service.js +29 -2
- package/dist/workflows/workflow-sharing.service.js.map +1 -1
- package/package.json +35 -35
- package/dist/modules/agents/sub-agents/sub-agent-foreground-runner.js.map +0 -1
- package/dist/public-api/v1/handlers/users/users.service.ee.d.ts +0 -21
- package/dist/public-api/v1/handlers/users/users.service.ee.js +0 -68
- 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
|
|
1
|
+
import { type InlineSubAgentProviderToolsResolver, type ModelConfig, type SubAgentTaskDifficulty } from '@n8n/agents';
|
|
2
2
|
import type { SubAgentRunPolicy, SubAgentSource } from '@n8n/api-types';
|
|
3
|
-
import type {
|
|
4
|
-
export interface CreateN8nDelegateSubAgentToolOptions extends
|
|
5
|
-
runner:
|
|
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.
|
|
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":"
|
|
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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"}
|