@n8n/instance-ai 1.13.2 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/apply-agent-thinking.js +24 -19
- package/dist/agent/apply-agent-thinking.js.map +1 -1
- package/dist/agent/computer-use-prompt.js +5 -6
- package/dist/agent/computer-use-prompt.js.map +1 -1
- package/dist/agent/shared-prompts.d.ts +1 -1
- package/dist/agent/shared-prompts.js +1 -1
- package/dist/agent/shared-prompts.js.map +1 -1
- package/dist/agent/sub-agent-factory.d.ts +1 -1
- package/dist/agent/system-prompt.js +20 -3
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/orchestrator-identity.d.ts +1 -0
- package/dist/runtime/orchestrator-identity.js +7 -0
- package/dist/runtime/orchestrator-identity.js.map +1 -0
- package/dist/runtime/orchestrator-run-control.d.ts +16 -0
- package/dist/runtime/orchestrator-run-control.js +26 -0
- package/dist/runtime/orchestrator-run-control.js.map +1 -0
- package/dist/runtime/resumable-stream-executor.d.ts +3 -0
- package/dist/runtime/resumable-stream-executor.js +26 -0
- package/dist/runtime/resumable-stream-executor.js.map +1 -1
- package/dist/runtime/run-state-registry.d.ts +4 -0
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/runtime/stream-runner.d.ts +3 -0
- package/dist/runtime/stream-runner.js +2 -0
- package/dist/runtime/stream-runner.js.map +1 -1
- package/dist/storage/terminal-outcome-storage.d.ts +2 -2
- package/dist/storage/workflow-loop-storage.d.ts +5 -0
- package/dist/tools/executions.tool.js +2 -1
- package/dist/tools/executions.tool.js.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/n8n-docs/ranking.d.ts +12 -0
- package/dist/tools/n8n-docs/ranking.js +170 -0
- package/dist/tools/n8n-docs/ranking.js.map +1 -0
- package/dist/tools/n8n-docs/registry.d.ts +34 -0
- package/dist/tools/n8n-docs/registry.js +216 -0
- package/dist/tools/n8n-docs/registry.js.map +1 -0
- package/dist/tools/n8n-docs/schemas.d.ts +163 -0
- package/dist/tools/n8n-docs/schemas.js +89 -0
- package/dist/tools/n8n-docs/schemas.js.map +1 -0
- package/dist/tools/n8n-docs.tool.d.ts +7 -0
- package/dist/tools/n8n-docs.tool.js +147 -0
- package/dist/tools/n8n-docs.tool.js.map +1 -0
- package/dist/tools/nodes/suggested-nodes-data.js +1 -4
- package/dist/tools/nodes/suggested-nodes-data.js.map +1 -1
- package/dist/tools/orchestration/plan.tool.js +1 -0
- package/dist/tools/orchestration/plan.tool.js.map +1 -1
- package/dist/tools/orchestration/verification/analyze-result.d.ts +28 -0
- package/dist/tools/orchestration/verification/analyze-result.js +238 -0
- package/dist/tools/orchestration/verification/analyze-result.js.map +1 -0
- package/dist/tools/orchestration/verification/finalize-result.d.ts +18 -0
- package/dist/tools/orchestration/verification/finalize-result.js +137 -0
- package/dist/tools/orchestration/verification/finalize-result.js.map +1 -0
- package/dist/tools/orchestration/verification/prepare-run.d.ts +16 -0
- package/dist/tools/orchestration/verification/prepare-run.js +58 -0
- package/dist/tools/orchestration/verification/prepare-run.js.map +1 -0
- package/dist/tools/orchestration/verification/resolve-target.d.ts +18 -0
- package/dist/tools/orchestration/verification/resolve-target.js +113 -0
- package/dist/tools/orchestration/verification/resolve-target.js.map +1 -0
- package/dist/tools/orchestration/verification/types.d.ts +44 -0
- package/dist/tools/orchestration/verification/types.js +3 -0
- package/dist/tools/orchestration/verification/types.js.map +1 -0
- package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +6 -3
- package/dist/tools/orchestration/verify-built-workflow.tool.js +70 -448
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/shared/ask-user.tool.d.ts +4 -4
- package/dist/tools/shared/ask-user.tool.js +6 -0
- package/dist/tools/shared/ask-user.tool.js.map +1 -1
- package/dist/tools/tool-ids.d.ts +2 -0
- package/dist/tools/tool-ids.js +4 -1
- package/dist/tools/tool-ids.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.js +4 -0
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/detect-array-input-collapse.d.ts +3 -0
- package/dist/tools/workflows/detect-array-input-collapse.js +76 -0
- package/dist/tools/workflows/detect-array-input-collapse.js.map +1 -0
- package/dist/tools/workflows/generate-simulation-fixtures.service.js +1 -1
- package/dist/tools/workflows/generate-simulation-fixtures.service.js.map +1 -1
- package/dist/tools/workflows/setup-workflow.schema.d.ts +26 -26
- package/dist/tools/workflows/setup-workflow.service.d.ts +1 -1
- package/dist/tools/workflows/setup-workflow.service.js +24 -1
- package/dist/tools/workflows/setup-workflow.service.js.map +1 -1
- package/dist/tools/workflows/workflow-build-routing.d.ts +5 -1
- package/dist/tools/workflows/workflow-build-routing.js +9 -1
- package/dist/tools/workflows/workflow-build-routing.js.map +1 -1
- package/dist/tools/workflows/workflow-json-utils.d.ts +1 -0
- package/dist/tools/workflows/workflow-json-utils.js +95 -0
- package/dist/tools/workflows/workflow-json-utils.js.map +1 -1
- package/dist/tools/workflows/workflow-source-compiler.js +2 -0
- package/dist/tools/workflows/workflow-source-compiler.js.map +1 -1
- package/dist/tools/workflows.tool.js +1 -1
- package/dist/tools/workflows.tool.js.map +1 -1
- package/dist/types.d.ts +4 -5
- package/dist/types.js.map +1 -1
- package/dist/workflow-loop/guidance.js +4 -2
- package/dist/workflow-loop/guidance.js.map +1 -1
- package/dist/workflow-loop/remediation.d.ts +1 -0
- package/dist/workflow-loop/remediation.js +2 -1
- package/dist/workflow-loop/remediation.js.map +1 -1
- package/dist/workflow-loop/verification-obligation.js +10 -0
- package/dist/workflow-loop/verification-obligation.js.map +1 -1
- package/dist/workflow-loop/workflow-loop-state.d.ts +3 -0
- package/dist/workflow-loop/workflow-loop-state.js +1 -0
- package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
- package/dist/workflow-loop/workflow-task-service.d.ts +1 -0
- package/dist/workflow-loop/workflow-task-service.js +13 -0
- package/dist/workflow-loop/workflow-task-service.js.map +1 -1
- package/package.json +16 -15
- package/skills/data-table-manager/SKILL.md +21 -0
- package/skills/data-table-manager/references/data-table-playbook.md +9 -0
- package/skills/debugging-executions/SKILL.md +15 -2
- package/skills/n8n-docs-assistant/SKILL.md +49 -0
- package/skills/planned-task-runtime/SKILL.md +4 -2
- package/skills/post-build-flow/SKILL.md +51 -5
- package/skills/workflow-builder/SKILL.md +65 -12
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.n8nDocsToolInputSchema = exports.n8nDocsRuntimeInputSchema = exports.MAX_CONTENT_LENGTH = exports.DEFAULT_MAX_CONTENT_LENGTH = exports.MAX_RESULTS = exports.DEFAULT_MAX_RESULTS = exports.MAX_PAGES = exports.DEFAULT_MAX_PAGES = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const sanitize_mcp_schemas_1 = require("../../agent/sanitize-mcp-schemas");
|
|
6
|
+
exports.DEFAULT_MAX_PAGES = 3;
|
|
7
|
+
exports.MAX_PAGES = 5;
|
|
8
|
+
exports.DEFAULT_MAX_RESULTS = 8;
|
|
9
|
+
exports.MAX_RESULTS = 20;
|
|
10
|
+
exports.DEFAULT_MAX_CONTENT_LENGTH = 30_000;
|
|
11
|
+
exports.MAX_CONTENT_LENGTH = 100_000;
|
|
12
|
+
const intentSchema = zod_1.z.enum(['credential-setup', 'node-help', 'hosting', 'api', 'general']);
|
|
13
|
+
const sharedLookupFields = {
|
|
14
|
+
query: zod_1.z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Docs lookup query. Include the product area, service, and task. Optional when credential or node context is provided.'),
|
|
18
|
+
intent: intentSchema.optional().describe('The kind of n8n docs answer needed.'),
|
|
19
|
+
credentialType: zod_1.z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('n8n credential type name, for example "gmailOAuth2Api".'),
|
|
23
|
+
credentialDisplayName: zod_1.z
|
|
24
|
+
.string()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('Human-readable credential name, for example "Gmail OAuth2 API".'),
|
|
27
|
+
documentationUrl: zod_1.z
|
|
28
|
+
.string()
|
|
29
|
+
.url()
|
|
30
|
+
.optional()
|
|
31
|
+
.describe('Known n8n docs URL from credential or node metadata.'),
|
|
32
|
+
nodeType: zod_1.z
|
|
33
|
+
.string()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('n8n node type name, for example "n8n-nodes-base.gmail".'),
|
|
36
|
+
};
|
|
37
|
+
const maxContentLengthField = zod_1.z
|
|
38
|
+
.number()
|
|
39
|
+
.int()
|
|
40
|
+
.positive()
|
|
41
|
+
.max(exports.MAX_CONTENT_LENGTH)
|
|
42
|
+
.default(exports.DEFAULT_MAX_CONTENT_LENGTH)
|
|
43
|
+
.optional()
|
|
44
|
+
.describe(`Maximum content length in characters (default ${exports.DEFAULT_MAX_CONTENT_LENGTH}).`);
|
|
45
|
+
const lookupAction = zod_1.z.object({
|
|
46
|
+
action: zod_1.z
|
|
47
|
+
.literal('lookup')
|
|
48
|
+
.describe('Search the n8n docs registry, read the best matching markdown pages, and return source material. When answering from returned documents, end with Source or Sources using the returned page titles and URLs.'),
|
|
49
|
+
...sharedLookupFields,
|
|
50
|
+
oauthRedirectUrl: zod_1.z
|
|
51
|
+
.string()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe('OAuth redirect URL currently shown in the n8n credential modal.'),
|
|
54
|
+
maxPages: zod_1.z
|
|
55
|
+
.number()
|
|
56
|
+
.int()
|
|
57
|
+
.min(1)
|
|
58
|
+
.max(exports.MAX_PAGES)
|
|
59
|
+
.default(exports.DEFAULT_MAX_PAGES)
|
|
60
|
+
.optional()
|
|
61
|
+
.describe(`Maximum docs pages to read (default ${exports.DEFAULT_MAX_PAGES}, max ${exports.MAX_PAGES}).`),
|
|
62
|
+
maxContentLength: maxContentLengthField,
|
|
63
|
+
});
|
|
64
|
+
const searchAction = zod_1.z.object({
|
|
65
|
+
action: zod_1.z.literal('search').describe('Search the n8n docs registry without reading pages.'),
|
|
66
|
+
...sharedLookupFields,
|
|
67
|
+
maxResults: zod_1.z
|
|
68
|
+
.number()
|
|
69
|
+
.int()
|
|
70
|
+
.min(1)
|
|
71
|
+
.max(exports.MAX_RESULTS)
|
|
72
|
+
.default(exports.DEFAULT_MAX_RESULTS)
|
|
73
|
+
.optional()
|
|
74
|
+
.describe(`Maximum registry matches to return (default ${exports.DEFAULT_MAX_RESULTS}, max ${exports.MAX_RESULTS}).`),
|
|
75
|
+
});
|
|
76
|
+
const readAction = zod_1.z.object({
|
|
77
|
+
action: zod_1.z
|
|
78
|
+
.literal('read')
|
|
79
|
+
.describe('Read one n8n docs markdown page from the registry. When answering from the returned document, end with Source using the returned page title and URL.'),
|
|
80
|
+
url: zod_1.z.string().url().describe('n8n docs page URL. Must resolve to a docs registry entry.'),
|
|
81
|
+
maxContentLength: maxContentLengthField,
|
|
82
|
+
});
|
|
83
|
+
exports.n8nDocsRuntimeInputSchema = zod_1.z.discriminatedUnion('action', [
|
|
84
|
+
lookupAction,
|
|
85
|
+
searchAction,
|
|
86
|
+
readAction,
|
|
87
|
+
]);
|
|
88
|
+
exports.n8nDocsToolInputSchema = (0, sanitize_mcp_schemas_1.sanitizeInputSchema)(exports.n8nDocsRuntimeInputSchema);
|
|
89
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/tools/n8n-docs/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { InstanceAiContext } from '../types';
|
|
2
|
+
import { rankN8nDocsEntries, type N8nDocsMatch } from './n8n-docs/ranking';
|
|
3
|
+
import { getDocsUrlCandidates, normalizeDocsUrl, N8N_DOCS_REGISTRY_URL, resetN8nDocsRegistryCacheForTests, toPublicDocsUrl, type N8nDocsDocument, parseN8nDocsRegistry } from './n8n-docs/registry';
|
|
4
|
+
import { N8N_DOCS_TOOL_ID } from './tool-ids';
|
|
5
|
+
export { N8N_DOCS_TOOL_ID };
|
|
6
|
+
export { N8N_DOCS_REGISTRY_URL, getDocsUrlCandidates, normalizeDocsUrl, parseN8nDocsRegistry, rankN8nDocsEntries, resetN8nDocsRegistryCacheForTests, toPublicDocsUrl, type N8nDocsDocument, type N8nDocsMatch, };
|
|
7
|
+
export declare function createN8nDocsTool(context: Pick<InstanceAiContext, 'logger'>): import("@n8n/agents").BuiltTool;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toPublicDocsUrl = exports.resetN8nDocsRegistryCacheForTests = exports.rankN8nDocsEntries = exports.parseN8nDocsRegistry = exports.normalizeDocsUrl = exports.getDocsUrlCandidates = exports.N8N_DOCS_REGISTRY_URL = exports.N8N_DOCS_TOOL_ID = void 0;
|
|
4
|
+
exports.createN8nDocsTool = createN8nDocsTool;
|
|
5
|
+
const agents_1 = require("@n8n/agents");
|
|
6
|
+
const ranking_1 = require("./n8n-docs/ranking");
|
|
7
|
+
Object.defineProperty(exports, "rankN8nDocsEntries", { enumerable: true, get: function () { return ranking_1.rankN8nDocsEntries; } });
|
|
8
|
+
const registry_1 = require("./n8n-docs/registry");
|
|
9
|
+
Object.defineProperty(exports, "getDocsUrlCandidates", { enumerable: true, get: function () { return registry_1.getDocsUrlCandidates; } });
|
|
10
|
+
Object.defineProperty(exports, "normalizeDocsUrl", { enumerable: true, get: function () { return registry_1.normalizeDocsUrl; } });
|
|
11
|
+
Object.defineProperty(exports, "N8N_DOCS_REGISTRY_URL", { enumerable: true, get: function () { return registry_1.N8N_DOCS_REGISTRY_URL; } });
|
|
12
|
+
Object.defineProperty(exports, "resetN8nDocsRegistryCacheForTests", { enumerable: true, get: function () { return registry_1.resetN8nDocsRegistryCacheForTests; } });
|
|
13
|
+
Object.defineProperty(exports, "toPublicDocsUrl", { enumerable: true, get: function () { return registry_1.toPublicDocsUrl; } });
|
|
14
|
+
Object.defineProperty(exports, "parseN8nDocsRegistry", { enumerable: true, get: function () { return registry_1.parseN8nDocsRegistry; } });
|
|
15
|
+
const schemas_1 = require("./n8n-docs/schemas");
|
|
16
|
+
const tool_ids_1 = require("./tool-ids");
|
|
17
|
+
Object.defineProperty(exports, "N8N_DOCS_TOOL_ID", { enumerable: true, get: function () { return tool_ids_1.N8N_DOCS_TOOL_ID; } });
|
|
18
|
+
const SOURCE_ATTRIBUTION_INSTRUCTION = 'When answering from returned docs, end with `Source: [Page title](page URL)` for one page or `Sources:` for multiple pages, using only returned page titles and URLs.';
|
|
19
|
+
function clamp(value, fallback, max) {
|
|
20
|
+
if (value === undefined)
|
|
21
|
+
return fallback;
|
|
22
|
+
return Math.min(value, max);
|
|
23
|
+
}
|
|
24
|
+
function toPublicMatch(match) {
|
|
25
|
+
const publicUrl = (0, registry_1.toPublicDocsUrl)(match.url);
|
|
26
|
+
return {
|
|
27
|
+
...match,
|
|
28
|
+
url: publicUrl,
|
|
29
|
+
path: new URL(publicUrl).pathname,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function emptyLookupResult(input, registry) {
|
|
33
|
+
return {
|
|
34
|
+
query: (0, ranking_1.getLookupQuery)(input),
|
|
35
|
+
intent: input.intent ?? 'general',
|
|
36
|
+
registryUrl: registry_1.N8N_DOCS_REGISTRY_URL,
|
|
37
|
+
registryFetchedAt: registry.registry?.fetchedAt ?? '',
|
|
38
|
+
matches: [],
|
|
39
|
+
documents: [],
|
|
40
|
+
...(registry.hint ? { hint: registry.hint } : {}),
|
|
41
|
+
...(registry.error ? { error: registry.error } : {}),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async function handleSearch(context, input) {
|
|
45
|
+
const registry = await (0, registry_1.getN8nDocsRegistry)(context);
|
|
46
|
+
if (!registry.registry)
|
|
47
|
+
return emptyLookupResult(input, registry);
|
|
48
|
+
const maxResults = clamp(input.maxResults, schemas_1.DEFAULT_MAX_RESULTS, schemas_1.MAX_RESULTS);
|
|
49
|
+
const matches = (0, ranking_1.rankN8nDocsEntries)(registry.registry.entries, input).slice(0, maxResults);
|
|
50
|
+
return {
|
|
51
|
+
query: (0, ranking_1.getLookupQuery)(input),
|
|
52
|
+
intent: input.intent ?? 'general',
|
|
53
|
+
registryUrl: registry_1.N8N_DOCS_REGISTRY_URL,
|
|
54
|
+
registryFetchedAt: registry.registry.fetchedAt,
|
|
55
|
+
matches: matches.map(toPublicMatch),
|
|
56
|
+
...(registry.hint ? { hint: registry.hint } : {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function handleLookup(context, input) {
|
|
60
|
+
const registry = await (0, registry_1.getN8nDocsRegistry)(context);
|
|
61
|
+
if (!registry.registry)
|
|
62
|
+
return emptyLookupResult(input, registry);
|
|
63
|
+
const maxPages = clamp(input.maxPages, schemas_1.DEFAULT_MAX_PAGES, schemas_1.MAX_PAGES);
|
|
64
|
+
const maxContentLength = clamp(input.maxContentLength, schemas_1.DEFAULT_MAX_CONTENT_LENGTH, schemas_1.MAX_CONTENT_LENGTH);
|
|
65
|
+
const matches = (0, ranking_1.rankN8nDocsEntries)(registry.registry.entries, input);
|
|
66
|
+
const pagesToRead = (0, ranking_1.pickLookupMatches)(matches, maxPages);
|
|
67
|
+
const documents = [];
|
|
68
|
+
const readErrors = [];
|
|
69
|
+
const readResults = await Promise.allSettled(pagesToRead.map(async (match) => await (0, registry_1.readN8nDocsEntry)(match, maxContentLength)));
|
|
70
|
+
for (const [index, result] of readResults.entries()) {
|
|
71
|
+
const match = pagesToRead[index];
|
|
72
|
+
if (!match)
|
|
73
|
+
continue;
|
|
74
|
+
if (result.status === 'fulfilled') {
|
|
75
|
+
documents.push(result.value);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
readErrors.push(`${match.title}: ${(0, registry_1.getFetchErrorMessage)(result.reason)}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const hints = [
|
|
82
|
+
registry.hint,
|
|
83
|
+
readErrors.length ? `Some docs pages could not be read: ${readErrors.join('; ')}` : undefined,
|
|
84
|
+
].filter((hint) => typeof hint === 'string' && hint.length > 0);
|
|
85
|
+
return {
|
|
86
|
+
query: (0, ranking_1.getLookupQuery)(input),
|
|
87
|
+
intent: input.intent ?? 'general',
|
|
88
|
+
registryUrl: registry_1.N8N_DOCS_REGISTRY_URL,
|
|
89
|
+
registryFetchedAt: registry.registry.fetchedAt,
|
|
90
|
+
matches: pagesToRead.map(toPublicMatch),
|
|
91
|
+
documents,
|
|
92
|
+
...(hints.length ? { hint: hints.join(' ') } : {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
async function handleRead(context, input) {
|
|
96
|
+
const registry = await (0, registry_1.getN8nDocsRegistry)(context);
|
|
97
|
+
if (!registry.registry) {
|
|
98
|
+
return {
|
|
99
|
+
url: input.url,
|
|
100
|
+
registryUrl: registry_1.N8N_DOCS_REGISTRY_URL,
|
|
101
|
+
registryFetchedAt: '',
|
|
102
|
+
documents: [],
|
|
103
|
+
...(registry.hint ? { hint: registry.hint } : {}),
|
|
104
|
+
...(registry.error ? { error: registry.error } : {}),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const docsRegistry = registry.registry;
|
|
108
|
+
const entry = (0, registry_1.getDocsUrlCandidates)(input.url)
|
|
109
|
+
.map((candidate) => docsRegistry.byUrl.get(candidate))
|
|
110
|
+
.find((candidate) => candidate !== undefined);
|
|
111
|
+
if (!entry) {
|
|
112
|
+
return {
|
|
113
|
+
url: input.url,
|
|
114
|
+
registryUrl: registry_1.N8N_DOCS_REGISTRY_URL,
|
|
115
|
+
registryFetchedAt: docsRegistry.fetchedAt,
|
|
116
|
+
documents: [],
|
|
117
|
+
error: 'URL is not an n8n docs registry entry.',
|
|
118
|
+
...(registry.hint ? { hint: registry.hint } : {}),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const maxContentLength = clamp(input.maxContentLength, schemas_1.DEFAULT_MAX_CONTENT_LENGTH, schemas_1.MAX_CONTENT_LENGTH);
|
|
122
|
+
return {
|
|
123
|
+
url: (0, registry_1.toPublicDocsUrl)(entry.url),
|
|
124
|
+
registryUrl: registry_1.N8N_DOCS_REGISTRY_URL,
|
|
125
|
+
registryFetchedAt: docsRegistry.fetchedAt,
|
|
126
|
+
documents: [await (0, registry_1.readN8nDocsEntry)(entry, maxContentLength)],
|
|
127
|
+
...(registry.hint ? { hint: registry.hint } : {}),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function createN8nDocsTool(context) {
|
|
131
|
+
return new agents_1.Tool(tool_ids_1.N8N_DOCS_TOOL_ID)
|
|
132
|
+
.description(`Search and read current n8n documentation from docs.n8n.io. Use for n8n product, setup, credential, node, hosting, API, and troubleshooting questions. ${SOURCE_ATTRIBUTION_INSTRUCTION}`)
|
|
133
|
+
.input(schemas_1.n8nDocsToolInputSchema)
|
|
134
|
+
.handler(async (input) => {
|
|
135
|
+
const parsedInput = schemas_1.n8nDocsRuntimeInputSchema.parse(input);
|
|
136
|
+
switch (parsedInput.action) {
|
|
137
|
+
case 'lookup':
|
|
138
|
+
return await handleLookup(context, parsedInput);
|
|
139
|
+
case 'search':
|
|
140
|
+
return await handleSearch(context, parsedInput);
|
|
141
|
+
case 'read':
|
|
142
|
+
return await handleRead(context, parsedInput);
|
|
143
|
+
}
|
|
144
|
+
})
|
|
145
|
+
.build();
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=n8n-docs.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n8n-docs.tool.js","sourceRoot":"","sources":["../../src/tools/n8n-docs.tool.ts"],"names":[],"mappings":";;;AA0LA,8CAkBC;AA5MD,wCAAmC;AAGnC,gDAK4B;AAkC3B,mGApCA,4BAAkB,OAoCA;AAjCnB,kDAW6B;AAmB5B,qGA5BA,+BAAoB,OA4BA;AACpB,iGA3BA,2BAAgB,OA2BA;AAFhB,sGAxBA,gCAAqB,OAwBA;AAKrB,kHA3BA,4CAAiC,OA2BA;AACjC,gGA3BA,0BAAe,OA2BA;AAHf,qGAtBA,+BAAoB,OAsBA;AApBrB,gDAY4B;AAC5B,yCAA8C;AAErC,iGAFA,2BAAgB,OAEA;AAazB,MAAM,8BAA8B,GACnC,uKAAuK,CAAC;AAEzK,SAAS,KAAK,CAAC,KAAyB,EAAE,QAAgB,EAAE,GAAW;IACtE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,KAAmB;IACzC,MAAM,SAAS,GAAG,IAAA,0BAAe,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO;QACN,GAAG,KAAK;QACR,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ;KACjC,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACzB,KAA8C,EAC9C,QAAwD;IAExD,OAAO;QACN,KAAK,EAAE,IAAA,wBAAc,EAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,WAAW,EAAE,gCAAqB;QAClC,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;QACrD,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAA0C,EAAE,KAAyB;IAChG,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAkB,EAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ;QAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,6BAAmB,EAAE,qBAAW,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAA,4BAAkB,EAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE1F,OAAO;QACN,KAAK,EAAE,IAAA,wBAAc,EAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,WAAW,EAAE,gCAAqB;QAClC,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS;QAC9C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACnC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAA0C,EAAE,KAAyB;IAChG,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAkB,EAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ;QAAE,OAAO,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,2BAAiB,EAAE,mBAAS,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG,KAAK,CAC7B,KAAK,CAAC,gBAAgB,EACtB,oCAA0B,EAC1B,4BAAkB,CAClB,CAAC;IACF,MAAM,OAAO,GAAG,IAAA,4BAAkB,EAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,IAAA,2BAAiB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,UAAU,CAC3C,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,IAAA,2BAAgB,EAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CACjF,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACP,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,IAAA,+BAAoB,EAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACF,CAAC;IAED,MAAM,KAAK,GAAG;QACb,QAAQ,CAAC,IAAI;QACb,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,sCAAsC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;KAC7F,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEhF,OAAO;QACN,KAAK,EAAE,IAAA,wBAAc,EAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,WAAW,EAAE,gCAAqB;QAClC,iBAAiB,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS;QAC9C,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;QACvC,SAAS;QACT,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAA0C,EAAE,KAAuB;IAC5F,MAAM,QAAQ,GAAG,MAAM,IAAA,6BAAkB,EAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO;YACN,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,WAAW,EAAE,gCAAqB;YAClC,iBAAiB,EAAE,EAAE;YACrB,SAAS,EAAE,EAAE;YACb,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACvC,MAAM,KAAK,GAAG,IAAA,+BAAoB,EAAC,KAAK,CAAC,GAAG,CAAC;SAC3C,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SACrD,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO;YACN,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,WAAW,EAAE,gCAAqB;YAClC,iBAAiB,EAAE,YAAY,CAAC,SAAS;YACzC,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,wCAAwC;YAC/C,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjD,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAC7B,KAAK,CAAC,gBAAgB,EACtB,oCAA0B,EAC1B,4BAAkB,CAClB,CAAC;IACF,OAAO;QACN,GAAG,EAAE,IAAA,0BAAe,EAAC,KAAK,CAAC,GAAG,CAAC;QAC/B,WAAW,EAAE,gCAAqB;QAClC,iBAAiB,EAAE,YAAY,CAAC,SAAS;QACzC,SAAS,EAAE,CAAC,MAAM,IAAA,2BAAgB,EAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAC5D,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAA0C;IAC3E,OAAO,IAAI,aAAI,CAAC,2BAAgB,CAAC;SAC/B,WAAW,CACX,0JAA0J,8BAA8B,EAAE,CAC1L;SACA,KAAK,CAAC,gCAAsB,CAAC;SAC7B,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxB,MAAM,WAAW,GAAG,mCAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3D,QAAQ,WAAW,CAAC,MAAM,EAAE,CAAC;YAC5B,KAAK,QAAQ;gBACZ,OAAO,MAAM,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACjD,KAAK,QAAQ;gBACZ,OAAO,MAAM,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACjD,KAAK,MAAM;gBACV,OAAO,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;IACF,CAAC,CAAC;SACD,KAAK,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -208,10 +208,7 @@ exports.suggestedNodesData = {
|
|
|
208
208
|
name: 'n8n-nodes-base.dataTable',
|
|
209
209
|
note: 'PREFERRED for form data storage',
|
|
210
210
|
},
|
|
211
|
-
{
|
|
212
|
-
name: 'n8n-nodes-base.googleSheets',
|
|
213
|
-
note: 'When spreadsheet/document ID is unknown, use placeholder() in documentId __rl.value with cachedResultName from the user prompt — never an empty string. Setup collects the real ID later. For sheetName: list mode value must be the numeric tab id (0 for first tab); use mode name with the tab title when the user says Sheet1.',
|
|
214
|
-
},
|
|
211
|
+
{ name: 'n8n-nodes-base.googleSheets' },
|
|
215
212
|
{
|
|
216
213
|
name: '@n8n/n8n-nodes-langchain.openAi',
|
|
217
214
|
note: 'Confirmation/summary text: resource=text, operation=response. See open-ai-output-shape.md for downstream field paths (not $json.text).',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suggested-nodes-data.js","sourceRoot":"","sources":["../../../src/tools/nodes/suggested-nodes-data.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"suggested-nodes-data.js","sourceRoot":"","sources":["../../../src/tools/nodes/suggested-nodes-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -210,6 +210,7 @@ function createPlanTool(context) {
|
|
|
210
210
|
if (resumeData.approved) {
|
|
211
211
|
await context.plannedTaskService.approvePlan(context.threadId);
|
|
212
212
|
await context.schedulePlannedTasks();
|
|
213
|
+
context.requestRunHandoff?.('planned-tasks-scheduled');
|
|
213
214
|
trackPlanningRoute(context, input.tasks, {
|
|
214
215
|
route: input.planningContext?.source === 'replan' ? 'replan' : 'skill',
|
|
215
216
|
source: input.planningContext?.source,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.tool.js","sourceRoot":"","sources":["../../../src/tools/orchestration/plan.tool.ts"],"names":[],"mappings":";;;AAkJA,
|
|
1
|
+
{"version":3,"file":"plan.tool.js","sourceRoot":"","sources":["../../../src/tools/orchestration/plan.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ExecutionRunResult, VerificationNodePreview } from './types';
|
|
2
|
+
import type { RemediationMetadata, WorkflowBuildOutcome, WorkflowLoopState } from '../../../workflow-loop/workflow-loop-state';
|
|
3
|
+
export declare function buildNodePreviews(resultData: Record<string, unknown> | undefined, maxChars: number, simulatedNodeNames?: ReadonlySet<string>): VerificationNodePreview[];
|
|
4
|
+
export declare function countProducedOutputRows(resultData: Record<string, unknown> | undefined): number | undefined;
|
|
5
|
+
export declare function namesOrDataKeys(reachedNames: Set<string>, data: Record<string, unknown> | undefined): string[] | undefined;
|
|
6
|
+
export interface VerificationAnalysis {
|
|
7
|
+
success: boolean;
|
|
8
|
+
reachedNames: Set<string>;
|
|
9
|
+
reachedSimulatedNodes: Array<{
|
|
10
|
+
nodeName: string;
|
|
11
|
+
reason: string;
|
|
12
|
+
}>;
|
|
13
|
+
nodesNotReached: string[];
|
|
14
|
+
remediation?: RemediationMetadata;
|
|
15
|
+
nodesExecuted?: string[];
|
|
16
|
+
simulationNote?: string;
|
|
17
|
+
coverageNote?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function analyzeVerificationResult(args: {
|
|
20
|
+
result: ExecutionRunResult;
|
|
21
|
+
buildOutcome: WorkflowBuildOutcome;
|
|
22
|
+
simulatedNodes: Array<{
|
|
23
|
+
nodeName: string;
|
|
24
|
+
reason: string;
|
|
25
|
+
}>;
|
|
26
|
+
stateBefore: WorkflowLoopState | undefined;
|
|
27
|
+
runId: string;
|
|
28
|
+
}): VerificationAnalysis;
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildNodePreviews = buildNodePreviews;
|
|
4
|
+
exports.countProducedOutputRows = countProducedOutputRows;
|
|
5
|
+
exports.namesOrDataKeys = namesOrDataKeys;
|
|
6
|
+
exports.analyzeVerificationResult = analyzeVerificationResult;
|
|
7
|
+
const utils_1 = require("@n8n/utils");
|
|
8
|
+
const remediation_1 = require("../../../workflow-loop/remediation");
|
|
9
|
+
const CREDENTIAL_FAILURE_KEYWORDS = [
|
|
10
|
+
'credential',
|
|
11
|
+
'unauthorized',
|
|
12
|
+
'forbidden',
|
|
13
|
+
'401',
|
|
14
|
+
'403',
|
|
15
|
+
'free tier',
|
|
16
|
+
'quota',
|
|
17
|
+
];
|
|
18
|
+
const TRANSIENT_FAILURE_KEYWORDS = ['429', 'rate limit', '502', 'bad gateway', 'timed out'];
|
|
19
|
+
function stringifyForToolOutput(value) {
|
|
20
|
+
if (typeof value === 'string')
|
|
21
|
+
return value;
|
|
22
|
+
try {
|
|
23
|
+
return JSON.stringify(value) ?? String(value);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return String(value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function unwrapUntrustedData(value) {
|
|
30
|
+
const match = /^<untrusted_data\b[^>]*>\n([\s\S]*)\n<\/untrusted_data>$/i.exec(value);
|
|
31
|
+
if (!match)
|
|
32
|
+
return value;
|
|
33
|
+
const content = match[1];
|
|
34
|
+
if (content === undefined)
|
|
35
|
+
return value;
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(content);
|
|
38
|
+
return parsed;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function outputForInspection(nodeOutput) {
|
|
45
|
+
return typeof nodeOutput === 'string' ? unwrapUntrustedData(nodeOutput) : nodeOutput;
|
|
46
|
+
}
|
|
47
|
+
function getCountFromMetadata(value) {
|
|
48
|
+
if (!(0, utils_1.isRecord)(value))
|
|
49
|
+
return undefined;
|
|
50
|
+
for (const key of ['totalItems', '_itemCount']) {
|
|
51
|
+
const count = value[key];
|
|
52
|
+
if (typeof count === 'number' && Number.isFinite(count) && count >= 0) {
|
|
53
|
+
return count;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
function countOutputItems(nodeOutput) {
|
|
59
|
+
const output = outputForInspection(nodeOutput);
|
|
60
|
+
if (Array.isArray(output))
|
|
61
|
+
return output.length;
|
|
62
|
+
const metadataCount = getCountFromMetadata(output);
|
|
63
|
+
if (metadataCount !== undefined)
|
|
64
|
+
return metadataCount;
|
|
65
|
+
if (output === undefined || output === null)
|
|
66
|
+
return 0;
|
|
67
|
+
return 1;
|
|
68
|
+
}
|
|
69
|
+
function previewValue(value, maxChars) {
|
|
70
|
+
const serialized = stringifyForToolOutput(value);
|
|
71
|
+
if (maxChars <= 0) {
|
|
72
|
+
return { preview: '', truncated: serialized.length > 0 };
|
|
73
|
+
}
|
|
74
|
+
if (serialized.length <= maxChars) {
|
|
75
|
+
return { preview: serialized, truncated: false };
|
|
76
|
+
}
|
|
77
|
+
return { preview: `${serialized.slice(0, maxChars)}...`, truncated: true };
|
|
78
|
+
}
|
|
79
|
+
function buildNodePreviews(resultData, maxChars, simulatedNodeNames) {
|
|
80
|
+
if (!resultData)
|
|
81
|
+
return [];
|
|
82
|
+
return Object.entries(resultData).map(([nodeName, nodeOutput]) => {
|
|
83
|
+
const serialized = stringifyForToolOutput(nodeOutput);
|
|
84
|
+
const preview = previewValue(nodeOutput, maxChars);
|
|
85
|
+
return {
|
|
86
|
+
nodeName,
|
|
87
|
+
itemCount: countOutputItems(nodeOutput),
|
|
88
|
+
preview: preview.preview,
|
|
89
|
+
truncated: preview.truncated,
|
|
90
|
+
chars: serialized.length,
|
|
91
|
+
...(simulatedNodeNames?.has(nodeName) ? { simulated: true } : {}),
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function countProducedOutputRows(resultData) {
|
|
96
|
+
if (!resultData)
|
|
97
|
+
return undefined;
|
|
98
|
+
let count = 0;
|
|
99
|
+
for (const nodeOutput of Object.values(resultData)) {
|
|
100
|
+
const itemCount = countOutputItems(nodeOutput);
|
|
101
|
+
if (itemCount !== undefined)
|
|
102
|
+
count += itemCount;
|
|
103
|
+
}
|
|
104
|
+
return count;
|
|
105
|
+
}
|
|
106
|
+
function maxEmittedItemCount(resultData) {
|
|
107
|
+
if (!resultData)
|
|
108
|
+
return 0;
|
|
109
|
+
let max = 0;
|
|
110
|
+
for (const nodeOutput of Object.values(resultData)) {
|
|
111
|
+
const count = countOutputItems(nodeOutput) ?? 0;
|
|
112
|
+
if (count > max)
|
|
113
|
+
max = count;
|
|
114
|
+
}
|
|
115
|
+
return max;
|
|
116
|
+
}
|
|
117
|
+
function messageMatchesAny(normalized, keywords) {
|
|
118
|
+
return keywords.some((keyword) => normalized.includes(keyword));
|
|
119
|
+
}
|
|
120
|
+
function classifyVerificationFailure(error, status, buildOutcome) {
|
|
121
|
+
if (status === 'waiting') {
|
|
122
|
+
const hasSimulationPlan = (buildOutcome.nodeSimulationPlan?.length ?? 0) > 0;
|
|
123
|
+
return (0, remediation_1.createRemediation)({
|
|
124
|
+
category: 'needs_setup',
|
|
125
|
+
shouldEdit: false,
|
|
126
|
+
reason: hasSimulationPlan ? 'unsimulated_user_action_node' : 'execution_waiting',
|
|
127
|
+
guidance: hasSimulationPlan
|
|
128
|
+
? 'Verification paused on a node that waits for user action and was not simulated — ' +
|
|
129
|
+
'nodes downstream of it were not verified. This is not a workflow bug: do not edit ' +
|
|
130
|
+
'the code. Report to the user which node paused and that the rest of the workflow ' +
|
|
131
|
+
'needs a manual test.'
|
|
132
|
+
: 'Workflow verification is waiting for user action or setup. Stop code edits and ask the user to complete setup.',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
const normalized = (error ?? '').toLowerCase();
|
|
136
|
+
const mockedCredentialTypeCount = buildOutcome.mockedCredentialTypes?.length ?? 0;
|
|
137
|
+
const mockedNodeCount = buildOutcome.mockedNodeNames?.length ?? 0;
|
|
138
|
+
const hasMockedCredentialContext = Boolean(mockedCredentialTypeCount > 0 || mockedNodeCount > 0);
|
|
139
|
+
if ((0, utils_1.isPlaceholderValue)(error)) {
|
|
140
|
+
return (0, remediation_1.createRemediation)({
|
|
141
|
+
category: 'needs_setup',
|
|
142
|
+
shouldEdit: false,
|
|
143
|
+
reason: 'mocked_credentials_or_placeholders',
|
|
144
|
+
guidance: 'Workflow verification reached an unresolved setup value. Stop code edits and route to workflows(action="setup").',
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
if (messageMatchesAny(normalized, CREDENTIAL_FAILURE_KEYWORDS)) {
|
|
148
|
+
return (0, remediation_1.createRemediation)({
|
|
149
|
+
category: 'needs_setup',
|
|
150
|
+
shouldEdit: false,
|
|
151
|
+
reason: hasMockedCredentialContext
|
|
152
|
+
? 'mocked_credentials_or_placeholders'
|
|
153
|
+
: 'credential_or_setup_failure',
|
|
154
|
+
guidance: hasMockedCredentialContext
|
|
155
|
+
? 'Workflow submitted successfully, but verification is blocked by mocked credentials. Stop code edits and route to workflows(action="setup").'
|
|
156
|
+
: 'Workflow submitted successfully, but verification requires credential or account setup. Stop code edits and route to workflows(action="setup").',
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
if (messageMatchesAny(normalized, TRANSIENT_FAILURE_KEYWORDS)) {
|
|
160
|
+
return (0, remediation_1.createRemediation)({
|
|
161
|
+
category: 'blocked',
|
|
162
|
+
shouldEdit: false,
|
|
163
|
+
reason: 'external_service_or_timeout',
|
|
164
|
+
guidance: 'Workflow submitted successfully, but verification is blocked by an external service or timeout. Stop code edits and explain the blocker to the user.',
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return (0, remediation_1.createRemediation)({
|
|
168
|
+
category: 'code_fixable',
|
|
169
|
+
shouldEdit: true,
|
|
170
|
+
reason: 'runtime_failure',
|
|
171
|
+
guidance: 'Verification found a workflow runtime failure. Diagnose it and apply one batched workflow-code repair if the guard allows it.',
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
function buildSimulationNote(reachedSimulatedNodes, planMissing) {
|
|
175
|
+
if (reachedSimulatedNodes.length > 0) {
|
|
176
|
+
return (`Simulated ${reachedSimulatedNodes.length} node(s) during verification — no real external writes happened: ` +
|
|
177
|
+
reachedSimulatedNodes.map((n) => `${n.nodeName} (${n.reason})`).join('; ') +
|
|
178
|
+
'. Relay this to the user when presenting the result.');
|
|
179
|
+
}
|
|
180
|
+
if (planMissing) {
|
|
181
|
+
return ('No simulation plan was available for this verification run — nodes were NOT ' +
|
|
182
|
+
'simulated and may have performed real external writes (sent messages, created or ' +
|
|
183
|
+
'modified records). Relay this to the user when presenting the result.');
|
|
184
|
+
}
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
function buildCoverageNote(nodesNotReached, result, success) {
|
|
188
|
+
if (nodesNotReached.length === 0)
|
|
189
|
+
return undefined;
|
|
190
|
+
const ending = result.lastNodeExecuted
|
|
191
|
+
? `. Execution ended at "${result.lastNodeExecuted}"${success ? ' because it produced no output items (empty item lists stop downstream nodes)' : ''}.`
|
|
192
|
+
: '.';
|
|
193
|
+
const collapsedFromCollection = success && maxEmittedItemCount(result.data) >= 2;
|
|
194
|
+
const guidance = success
|
|
195
|
+
? collapsedFromCollection
|
|
196
|
+
? ' An upstream node emitted multiple items but the chain collapsed to zero before reaching them. The usual cause is a Code node reading `$input.first().json` (a single split item) instead of `$input.all().map(i => i.json)` — an HTTP Request node splits a top-level array (including a bare array of IDs) into one item per element. Fix the node that dropped the items to read every item, then re-run verification. Do NOT report the workflow as fully verified.'
|
|
197
|
+
: ' This usually means a lookup or query returned nothing. Seed matching test data and re-run verification, or tell the user the unreached part needs a manual test. Do NOT report the workflow as fully verified.'
|
|
198
|
+
: '';
|
|
199
|
+
return (`Partial coverage: ${nodesNotReached.length} node(s) were never reached and remain UNVERIFIED: ` +
|
|
200
|
+
nodesNotReached.join(', ') +
|
|
201
|
+
ending +
|
|
202
|
+
guidance);
|
|
203
|
+
}
|
|
204
|
+
function namesOrDataKeys(reachedNames, data) {
|
|
205
|
+
if (reachedNames.size > 0)
|
|
206
|
+
return [...reachedNames];
|
|
207
|
+
return data ? Object.keys(data) : undefined;
|
|
208
|
+
}
|
|
209
|
+
function analyzeVerificationResult(args) {
|
|
210
|
+
const { result, buildOutcome, simulatedNodes, stateBefore, runId } = args;
|
|
211
|
+
const reachedNames = new Set(result.executedNodeNames ?? (result.data ? Object.keys(result.data) : []));
|
|
212
|
+
const reachedSimulatedNodes = simulatedNodes.filter((n) => reachedNames.has(n.nodeName));
|
|
213
|
+
const nodesNotReached = (buildOutcome.nodeSimulationPlan ?? [])
|
|
214
|
+
.map((verdict) => verdict.nodeName)
|
|
215
|
+
.filter((name) => !reachedNames.has(name));
|
|
216
|
+
const hasSimulationPlan = (buildOutcome.nodeSimulationPlan?.length ?? 0) > 0;
|
|
217
|
+
const hasOutput = result.data ? Object.keys(result.data).length > 0 : false;
|
|
218
|
+
const success = result.status === 'success' ||
|
|
219
|
+
(!hasSimulationPlan && result.status === 'waiting' && !result.error && hasOutput);
|
|
220
|
+
const failureRemediation = success
|
|
221
|
+
? undefined
|
|
222
|
+
: classifyVerificationFailure(result.error, result.status, buildOutcome);
|
|
223
|
+
const budgetRemediation = failureRemediation?.shouldEdit === true
|
|
224
|
+
? (0, remediation_1.terminalRemediationFromState)(stateBefore, runId)
|
|
225
|
+
: undefined;
|
|
226
|
+
const remediation = budgetRemediation ?? failureRemediation;
|
|
227
|
+
return {
|
|
228
|
+
success,
|
|
229
|
+
reachedNames,
|
|
230
|
+
reachedSimulatedNodes,
|
|
231
|
+
nodesNotReached,
|
|
232
|
+
remediation,
|
|
233
|
+
nodesExecuted: namesOrDataKeys(reachedNames, result.data),
|
|
234
|
+
simulationNote: buildSimulationNote(reachedSimulatedNodes, false),
|
|
235
|
+
coverageNote: buildCoverageNote(nodesNotReached, result, success),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=analyze-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-result.js","sourceRoot":"","sources":["../../../../src/tools/orchestration/verification/analyze-result.ts"],"names":[],"mappings":"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"}
|