@n8n/instance-ai 1.23.1 → 1.24.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/instance-agent.js +5 -2
- package/dist/agent/instance-agent.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +1 -0
- package/dist/agent/system-prompt.js +15 -1
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/error-formatting.js +3 -7
- package/dist/error-formatting.js.map +1 -1
- package/dist/errors/folder-resolution.error.d.ts +6 -0
- package/dist/errors/folder-resolution.error.js +13 -0
- package/dist/errors/folder-resolution.error.js.map +1 -0
- package/dist/errors/workflow-snapshot-changed.error.d.ts +4 -0
- package/dist/errors/workflow-snapshot-changed.error.js +11 -0
- package/dist/errors/workflow-snapshot-changed.error.js.map +1 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.js +19 -3
- package/dist/index.js.map +1 -1
- package/dist/knowledge-base/extract-builder-templates-archive.js +2 -4
- package/dist/knowledge-base/extract-builder-templates-archive.js.map +1 -1
- package/dist/runtime/background-task-manager.d.ts +3 -1
- package/dist/runtime/background-task-manager.js +15 -1
- package/dist/runtime/background-task-manager.js.map +1 -1
- package/dist/runtime/liveness-policy.js.map +1 -1
- package/dist/runtime/resumable-stream-executor.d.ts +1 -2
- package/dist/runtime/resumable-stream-executor.js +4 -17
- 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 +18 -0
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/runtime/stream-runner.d.ts +0 -2
- package/dist/runtime/stream-runner.js +0 -1
- package/dist/runtime/stream-runner.js.map +1 -1
- package/dist/storage/agent-tree-snapshot.d.ts +0 -4
- package/dist/stream/consume-with-hitl.d.ts +0 -3
- package/dist/stream/consume-with-hitl.js +0 -2
- package/dist/stream/consume-with-hitl.js.map +1 -1
- package/dist/tools/conversation-history.schema.d.ts +231 -0
- package/dist/tools/conversation-history.schema.js +36 -0
- package/dist/tools/conversation-history.schema.js.map +1 -0
- package/dist/tools/conversation-history.tool.d.ts +2 -0
- package/dist/tools/conversation-history.tool.js +135 -0
- package/dist/tools/conversation-history.tool.js.map +1 -0
- package/dist/tools/credentials.tool.d.ts +3 -0
- package/dist/tools/credentials.tool.js +65 -0
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/data-tables.tool.js +59 -14
- package/dist/tools/data-tables.tool.js.map +1 -1
- package/dist/tools/evals/eval-config.tool.js +3 -5
- package/dist/tools/evals/eval-config.tool.js.map +1 -1
- package/dist/tools/index.js +12 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp-servers.tool.js +1 -1
- package/dist/tools/mcp-servers.tool.js.map +1 -1
- package/dist/tools/n8n-docs/registry.d.ts +0 -1
- package/dist/tools/n8n-docs/registry.js +2 -5
- package/dist/tools/n8n-docs/registry.js.map +1 -1
- package/dist/tools/n8n-docs.tool.js +2 -1
- package/dist/tools/n8n-docs.tool.js.map +1 -1
- package/dist/tools/nodes/credential-setupability.json +1792 -0
- package/dist/tools/nodes/setup-preference.d.ts +9 -0
- package/dist/tools/nodes/setup-preference.js +23 -0
- package/dist/tools/nodes/setup-preference.js.map +1 -0
- package/dist/tools/nodes.tool.js +22 -9
- package/dist/tools/nodes.tool.js.map +1 -1
- package/dist/tools/orchestration/agent-target-binding.d.ts +6 -0
- package/dist/tools/orchestration/agent-target-binding.js +56 -32
- package/dist/tools/orchestration/agent-target-binding.js.map +1 -1
- package/dist/tools/orchestration/build-agent.tool.js +20 -3
- package/dist/tools/orchestration/build-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/eval-setup-agent.tool.js +0 -1
- package/dist/tools/orchestration/eval-setup-agent.tool.js.map +1 -1
- package/dist/tools/orchestration/list-agent-capabilities.tool.d.ts +2 -0
- package/dist/tools/orchestration/list-agent-capabilities.tool.js +45 -0
- package/dist/tools/orchestration/list-agent-capabilities.tool.js.map +1 -0
- package/dist/tools/orchestration/verification/prepare-run.d.ts +1 -1
- package/dist/tools/orchestration/verification/prepare-run.js +32 -37
- package/dist/tools/orchestration/verification/prepare-run.js.map +1 -1
- package/dist/tools/orchestration/verification/types.d.ts +1 -0
- package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +3 -0
- package/dist/tools/orchestration/verify-built-workflow.tool.js +8 -2
- package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
- package/dist/tools/tool-ids.d.ts +2 -0
- package/dist/tools/tool-ids.js +4 -0
- package/dist/tools/tool-ids.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.d.ts +32 -0
- package/dist/tools/workflows/build-workflow.tool.js +140 -29
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/generate-simulation-fixtures.service.d.ts +6 -0
- package/dist/tools/workflows/generate-simulation-fixtures.service.js +119 -14
- package/dist/tools/workflows/generate-simulation-fixtures.service.js.map +1 -1
- package/dist/tools/workflows/plan-verification-simulation.js +21 -2
- package/dist/tools/workflows/plan-verification-simulation.js.map +1 -1
- package/dist/tools/workflows/preserve-node-positions.js +33 -9
- package/dist/tools/workflows/preserve-node-positions.js.map +1 -1
- package/dist/tools/workflows/setup-items.d.ts +23 -0
- package/dist/tools/workflows/setup-items.js +154 -0
- package/dist/tools/workflows/setup-items.js.map +1 -0
- package/dist/tools/workflows/summarize-workflow.d.ts +4 -1
- package/dist/tools/workflows/summarize-workflow.js +8 -2
- package/dist/tools/workflows/summarize-workflow.js.map +1 -1
- package/dist/tools/workflows/workflow-build-remediation.js +3 -2
- package/dist/tools/workflows/workflow-build-remediation.js.map +1 -1
- package/dist/tools/workflows/workflow-build-telemetry.d.ts +1 -1
- package/dist/tools/workflows/workflow-build-telemetry.js.map +1 -1
- package/dist/tools/workflows/workflow-file-bindings.d.ts +1 -0
- package/dist/tools/workflows/workflow-file-bindings.js +13 -1
- package/dist/tools/workflows/workflow-file-bindings.js.map +1 -1
- package/dist/tools/workflows/workflow-source-compiler.d.ts +1 -0
- package/dist/tools/workflows/workflow-source-compiler.js +1 -0
- package/dist/tools/workflows/workflow-source-compiler.js.map +1 -1
- package/dist/tools/workflows/workflow-source-materializer.d.ts +28 -0
- package/dist/tools/workflows/workflow-source-materializer.js +98 -0
- package/dist/tools/workflows/workflow-source-materializer.js.map +1 -0
- package/dist/tools/workflows.tool.d.ts +1 -1
- package/dist/tools/workflows.tool.js +195 -23
- package/dist/tools/workflows.tool.js.map +1 -1
- package/dist/tools/workspace.tool.js +8 -3
- package/dist/tools/workspace.tool.js.map +1 -1
- package/dist/tracing/langsmith-tracing.js +3 -5
- package/dist/tracing/langsmith-tracing.js.map +1 -1
- package/dist/tracing/trace-payloads.js +4 -5
- package/dist/tracing/trace-payloads.js.map +1 -1
- package/dist/types.d.ts +92 -7
- package/dist/types.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/model-config-id.d.ts +1 -0
- package/dist/utils/model-config-id.js +24 -0
- package/dist/utils/model-config-id.js.map +1 -0
- package/dist/utils/node-keyed-items.d.ts +1 -0
- package/dist/utils/node-keyed-items.js +10 -0
- package/dist/utils/node-keyed-items.js.map +1 -0
- package/dist/workflow-loop/guidance.js +1 -1
- package/dist/workflow-loop/guidance.js.map +1 -1
- package/dist/workspace/sandbox-setup.d.ts +1 -0
- package/dist/workspace/sandbox-setup.js +8 -9
- package/dist/workspace/sandbox-setup.js.map +1 -1
- package/dist/workspace/snapshot-manager.js +1 -1
- package/dist/workspace/snapshot-manager.js.map +1 -1
- package/package.json +12 -12
- package/skills/agent-builder/SKILL.md +23 -0
- package/skills/data-table-manager/SKILL.md +34 -3
- package/skills/intent-recognition/SKILL.md +55 -0
- package/skills/workflow-builder/SKILL.md +111 -27
- package/dist/stream/output-redaction.d.ts +0 -31
- package/dist/stream/output-redaction.js +0 -191
- package/dist/stream/output-redaction.js.map +0 -1
|
@@ -22,6 +22,29 @@ when the conversation already targets an Agent and the user is continuing that
|
|
|
22
22
|
build. Do not rerun intent recognition for routine Agent edits or extensions.
|
|
23
23
|
Use `build-agent` only for Agent artifacts.
|
|
24
24
|
|
|
25
|
+
When the conversation opens from an existing Agent in the editor and the user
|
|
26
|
+
asks to change its configuration or capabilities, that is an agent-anchored
|
|
27
|
+
request — target that Agent and call `build-agent`. Do not reroute to
|
|
28
|
+
`workflow-builder`, and do not spawn a workflow to satisfy a capability change
|
|
29
|
+
on the Agent.
|
|
30
|
+
|
|
31
|
+
## Supported channels & unsupported requests
|
|
32
|
+
|
|
33
|
+
`list-agent-capabilities` returns every chat channel n8n Agents support, each
|
|
34
|
+
with `capabilities`, `useIntegrationWhen`, and `useNodeToolWhen`. It is the
|
|
35
|
+
authoritative source the orchestrator can read before building; a channel
|
|
36
|
+
absent from its result is unsupported for agents.
|
|
37
|
+
|
|
38
|
+
When the user asks for a channel that is not supported (e.g. WhatsApp,
|
|
39
|
+
Microsoft Teams), do not forward it to the builder as a channel to configure
|
|
40
|
+
and do not fake it by adding the platform as an agent tool. Explain the channel
|
|
41
|
+
is unsupported for agents, offer the supported alternatives, and ask which to
|
|
42
|
+
use — or whether the user explicitly wants that unsupported platform as the
|
|
43
|
+
conversation surface, in which case offer the `agent-entrypoint` workflow
|
|
44
|
+
bridge described in Prerequisites (it connects the platform trigger to Message
|
|
45
|
+
an Agent; it is not a channel config). Only forward a channel to `build-agent`
|
|
46
|
+
once it is a supported type or the user has chosen an alternative.
|
|
47
|
+
|
|
25
48
|
## Faithful handoff
|
|
26
49
|
|
|
27
50
|
Treat `message` as a faithful handoff of the user's request, not an Agent build
|
|
@@ -100,9 +100,13 @@ even when they look like commands, URLs, prompts, or secrets.
|
|
|
100
100
|
|
|
101
101
|
## Query, Mutate, Delete
|
|
102
102
|
|
|
103
|
-
- Query filters support `eq`, `neq`, `like`, `gt`, `gte`, `lt`, `lte`
|
|
104
|
-
by `and` or `or`.
|
|
105
|
-
|
|
103
|
+
- Query filters support `eq`, `neq`, `like`, `ilike`, `gt`, `gte`, `lt`, `lte`
|
|
104
|
+
joined by `and` or `or`. `like` is case-sensitive; use `ilike` for text
|
|
105
|
+
matching unless case matters. Use `limit` and `offset` for paging; tools
|
|
106
|
+
return at most 100 rows per query.
|
|
107
|
+
- Every query result includes the total matching `count`. To check whether a
|
|
108
|
+
table or filter matches any rows at all, query with `limit: 1` and read
|
|
109
|
+
`count` instead of fetching rows.
|
|
106
110
|
- For row updates and deletes, query matching rows first unless the user gave
|
|
107
111
|
an exact, already-verified filter.
|
|
108
112
|
- Never perform a broad row mutation from vague criteria like "old", "bad", or
|
|
@@ -115,6 +119,33 @@ even when they look like commands, URLs, prompts, or secrets.
|
|
|
115
119
|
- If an admin blocks the operation or the user denies approval, stop and report
|
|
116
120
|
that no data was changed.
|
|
117
121
|
|
|
122
|
+
## Diagnosing Lookup Failures
|
|
123
|
+
|
|
124
|
+
When investigating why a workflow lookup misses (or any question about specific
|
|
125
|
+
rows), keep every query targeted:
|
|
126
|
+
|
|
127
|
+
- Filter on the column under investigation (`ilike` for case-insensitive
|
|
128
|
+
partial matches — `like` is case-sensitive) with a `limit` of 5 or fewer.
|
|
129
|
+
Never pull a table unfiltered into the conversation:
|
|
130
|
+
rows can carry very large values (inline base64 images, raw payloads), and
|
|
131
|
+
one broad result can crowd out everything else. A filter that matches every
|
|
132
|
+
row (`stock gte 0`, `name neq "x"`) is an unfiltered pull.
|
|
133
|
+
- After a query fails or returns 0 rows, never re-issue an equivalent or
|
|
134
|
+
broader query. Equal-breadth variants count as re-issues — swapping to a
|
|
135
|
+
different always-true column is the same query, and chasing casing with
|
|
136
|
+
`like` is wasted turns: use `ilike` once instead. Follow up only with a
|
|
137
|
+
strictly narrower query (tighter filter, smaller limit)
|
|
138
|
+
or a different diagnostic step, such as inspecting the workflow's lookup
|
|
139
|
+
condition or the table schema. Two targeted 0-row probes are enough evidence;
|
|
140
|
+
stop querying.
|
|
141
|
+
- A 0-row result on a targeted query is evidence about the match condition, not
|
|
142
|
+
proof the data is missing. When the user has confirmed the row exists, treat
|
|
143
|
+
that as ground truth: never conclude the data is missing or stored elsewhere —
|
|
144
|
+
diagnose the workflow's matching logic (a common culprit is an `eq` condition
|
|
145
|
+
against free-form input, where only `ilike` (case-insensitive contains)
|
|
146
|
+
reliably matches user-typed names), apply the fix, and ask the user to
|
|
147
|
+
re-test.
|
|
148
|
+
|
|
118
149
|
## Fixing A Wrong Schema
|
|
119
150
|
|
|
120
151
|
If a table's columns do not match what is required (your design or the user's
|
|
@@ -38,6 +38,10 @@ directly for out-of-scope.
|
|
|
38
38
|
- The user's request or scenario prompt.
|
|
39
39
|
- Whether the user is mid-build on an existing workflow or agent in this
|
|
40
40
|
conversation — incremental requests default to extending that primitive.
|
|
41
|
+
- Whether the editor/canvas context the conversation opened from shows an
|
|
42
|
+
existing **agent** or an existing **workflow** (or both). An existing agent
|
|
43
|
+
in context that the user asks to change is an agent-anchored request — see
|
|
44
|
+
Context continuity and Existing-agent modification.
|
|
41
45
|
- Any explicit constraints about determinism, auditability, latency, cost,
|
|
42
46
|
compliance, reusability, or allowed tools.
|
|
43
47
|
- If the request is underspecified on an anchor-deciding axis, ask for the
|
|
@@ -236,6 +240,35 @@ Only cross into the other primitive when the
|
|
|
236
240
|
incremental request itself carries its own anchor signal — and even then,
|
|
237
241
|
prefer asking before switching paradigm if it isn't clearly load-bearing.
|
|
238
242
|
|
|
243
|
+
**Existing-agent modification**: context continuity extends to an agent the
|
|
244
|
+
user did not build in this conversation but opened in the editor. When the
|
|
245
|
+
editor/canvas context shows an existing agent and the user asks to change,
|
|
246
|
+
add, or remove its configuration or capabilities (instructions, model,
|
|
247
|
+
tools, skills, tasks, channels, memory, sub-agents), classify
|
|
248
|
+
**agent-anchored** and route to `build-agent` targeting that agent. Do not
|
|
249
|
+
route to `workflow-builder`, and do not treat the request as a workflow
|
|
250
|
+
change even when a workflow is also in context, unless the user explicitly
|
|
251
|
+
names the workflow as the target. A capability the agent cannot have is
|
|
252
|
+
still an agent-anchored request — handle it per Unsupported capabilities
|
|
253
|
+
below, do not reclassify it as a workflow.
|
|
254
|
+
|
|
255
|
+
**Mixed agent + workflow context**: when both an agent and a workflow are in
|
|
256
|
+
context and the request is ambiguous about which one the user wants to
|
|
257
|
+
change, classify **needs-clarification** and ask which target — do not
|
|
258
|
+
assume the workflow. Once the user names the target, follow context
|
|
259
|
+
continuity for that primitive.
|
|
260
|
+
|
|
261
|
+
**Unsupported capabilities**: when the user names a specific channel or
|
|
262
|
+
capability for an agent (e.g. "WhatsApp", "Teams"), call
|
|
263
|
+
`list-agent-capabilities` before classifying. If the named channel is
|
|
264
|
+
absent, it is unsupported for agents — do not classify the request as a
|
|
265
|
+
workflow substitute, do not improvise workflow nodes to fake the channel,
|
|
266
|
+
and do not claim it can be configured. Explain that it is unavailable for
|
|
267
|
+
agents, offer the supported alternatives the tool returned (with their
|
|
268
|
+
`capabilities`), and only build a workflow if the user explicitly chooses
|
|
269
|
+
that path after the limitation is stated. This is an agent-anchored request
|
|
270
|
+
that the agent cannot fully satisfy, not a workflow-anchored one.
|
|
271
|
+
|
|
239
272
|
**Clarify triggers**: rule-based vs judgment-based (what defines "important"
|
|
240
273
|
or "urgent"?), scope/autonomy (act on its own vs draft for review),
|
|
241
274
|
interaction mode (one-shot vs chat). Do not clarify when the criterion could
|
|
@@ -330,6 +363,23 @@ instead.
|
|
|
330
363
|
- "Tell me when something important happens with our shipments." ->
|
|
331
364
|
**needs-clarification**: "important" is undefined; ask whether concrete
|
|
332
365
|
rules exist or this needs judgment-based triage.
|
|
366
|
+
- "Build me an agent my team can @mention on WhatsApp to triage customer
|
|
367
|
+
messages." -> **agent-anchored** (explicit agent artifact + chat
|
|
368
|
+
interaction), but call `list-agent-capabilities` first: WhatsApp is absent,
|
|
369
|
+
so do not build. Explain WhatsApp is unsupported for agents, offer the
|
|
370
|
+
supported chat channels the tool returned, with their
|
|
371
|
+
`capabilities`, and ask which to use — or whether the user wants a
|
|
372
|
+
workflow path instead. Do not improvise a workflow with a WhatsApp node
|
|
373
|
+
and do not claim the channel is configured.
|
|
374
|
+
- (An existing agent is open in the editor.) "Make it also file a Linear
|
|
375
|
+
ticket when it can't resolve an issue." -> **agent-anchored**: the open
|
|
376
|
+
agent is the target; route to `build-agent` targeting that agent to add the
|
|
377
|
+
capability. Do not start a workflow build, even though a workflow could
|
|
378
|
+
also file a ticket — the user asked to change the agent.
|
|
379
|
+
- (Both an agent and a workflow are open.) "Add a daily summary of new
|
|
380
|
+
signups to the data warehouse." -> **needs-clarification**: ask whether
|
|
381
|
+
the summary belongs to the agent (a scheduled task on it) or the workflow
|
|
382
|
+
(a new branch in the graph); do not assume the workflow.
|
|
333
383
|
|
|
334
384
|
## Gotchas
|
|
335
385
|
|
|
@@ -353,6 +403,11 @@ instead.
|
|
|
353
403
|
*node* exists only for `embeds_other: true` steps inside a genuinely
|
|
354
404
|
workflow-anchored pipeline. A Chat Trigger workflow is correct only when
|
|
355
405
|
chat is merely the manual trigger for a fixed graph.
|
|
406
|
+
- Never improvise a workflow substitute for an unsupported agent channel or
|
|
407
|
+
capability. When the user names a channel not in `list-agent-capabilities`,
|
|
408
|
+
explain the limitation and offer supported alternatives — do not add
|
|
409
|
+
workflow nodes that fake the channel or silently translate the request
|
|
410
|
+
into a workflow change.
|
|
356
411
|
- Do not demote an explicitly requested agent to an embedded AI Agent step
|
|
357
412
|
inside a workflow — workflow-anchored with `embeds_other: true` is for
|
|
358
413
|
agent steps inside a pipeline the user described as a pipeline.
|
|
@@ -34,12 +34,17 @@ You are an expert n8n workflow builder. You generate complete, valid
|
|
|
34
34
|
TypeScript code using `@n8n/workflow-sdk` for new workflows and for existing
|
|
35
35
|
saved workflow changes.
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
For a new workflow, write the complete TypeScript SDK source with
|
|
38
38
|
`workspace_write_file` first, then call `build-workflow({ filePath })`. For
|
|
39
39
|
existing saved workflow edits, call `workflows(action="get-as-code",
|
|
40
|
-
workflowId)
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
workflowId)`: it writes the current source to a bound workspace file
|
|
41
|
+
(`src/workflows/<name>.workflow.ts`) and returns the `filePath` plus a `nodes`
|
|
42
|
+
index with line numbers. Locate the target node from the index, read only the
|
|
43
|
+
lines you need, apply the edit with `workspace_str_replace_file`, then call
|
|
44
|
+
`build-workflow({ filePath })` — the file is already bound, so no `workflowId`
|
|
45
|
+
is needed. Never re-emit the whole source with `workspace_write_file`, and do
|
|
46
|
+
not fetch the same unchanged workflow again in another format. All edits go
|
|
47
|
+
through the workspace source file and `build-workflow`. Do not load
|
|
43
48
|
`planning` or call `create-tasks` first; `planning` is only for coordinated
|
|
44
49
|
multi-artifact work per the orchestrator routing rules. Do not create a plan
|
|
45
50
|
just for verification.
|
|
@@ -60,11 +65,12 @@ editing anything — never guess at the cause or change the node on a hunch.
|
|
|
60
65
|
|
|
61
66
|
When called with failure details for an existing workflow, start from the
|
|
62
67
|
workspace source file if one is available in the conversation or tool output. If
|
|
63
|
-
you only have a saved n8n workflow ID, use `workflows(action="get-as-code")
|
|
64
|
-
|
|
65
|
-
`
|
|
66
|
-
|
|
67
|
-
`
|
|
68
|
+
you only have a saved n8n workflow ID, use `workflows(action="get-as-code")`:
|
|
69
|
+
it writes the source to a bound `src/workflows/<name>.workflow.ts` file and
|
|
70
|
+
returns its `filePath` with a node index. Make the smallest requested edit in
|
|
71
|
+
that file with `workspace_str_replace_file`, then call `build-workflow` with the
|
|
72
|
+
`filePath`. Later repairs reuse the same `filePath`; `build-workflow` remembers
|
|
73
|
+
the bound workflow ID.
|
|
68
74
|
|
|
69
75
|
For repairs, prefer editing the workspace file directly with file tools
|
|
70
76
|
(`workspace_str_replace_file`) and calling `build-workflow` again with the same
|
|
@@ -197,9 +203,9 @@ follow its build → publish → assign steps.
|
|
|
197
203
|
`src/workflows/main.workflow.ts` for a one-off new workflow, or a clearly
|
|
198
204
|
named `.workflow.ts` file when multiple source files are useful. For an
|
|
199
205
|
existing workflow with no source file in context, call
|
|
200
|
-
`workflows(action="get-as-code", workflowId)
|
|
201
|
-
|
|
202
|
-
|
|
206
|
+
`workflows(action="get-as-code", workflowId)` and use the `filePath` it
|
|
207
|
+
returns — the file is written and bound for you. Edit it in place; do not
|
|
208
|
+
rewrite it.
|
|
203
209
|
6. Produce complete TypeScript SDK code and write it with
|
|
204
210
|
`workspace_write_file` (new/full rewrite) or `workspace_str_replace_file`
|
|
205
211
|
(targeted edit). Do not put secrets in the source file.
|
|
@@ -225,6 +231,15 @@ follow its build → publish → assign steps.
|
|
|
225
231
|
For planned build follow-ups where `buildTask.isSupportingWorkflow === true`,
|
|
226
232
|
pass `isSupportingWorkflow: true`; that saved supporting workflow is the
|
|
227
233
|
task's final deliverable.
|
|
234
|
+
When the tool offers `folderPath` and the new workflow has a home — the user
|
|
235
|
+
named a folder, or you chose one from the project's folders because the
|
|
236
|
+
related workflows live there — pass it on the create call, named the way the
|
|
237
|
+
user named it (`Clients/Acme`, `Acme`). The workflow is created inside that
|
|
238
|
+
folder; a folder that does not resolve fails the build before anything is
|
|
239
|
+
saved and lists the real folders, so retry with one of those or ask the user.
|
|
240
|
+
Never leave a workflow at the project root when its place was already clear.
|
|
241
|
+
`folderPath` is for new workflows only; move an existing one with
|
|
242
|
+
`workspace(action="move-workflow-to-folder")`.
|
|
228
243
|
9. Trace wiring before declaring done. For IF, Switch, Merge, AI-agent, loop, or
|
|
229
244
|
multi-workflow wiring, trace each branch from source to target. Confirm IF
|
|
230
245
|
branches are wired on the workflow builder (`.to(ifNode).onTrue(...).onFalse(...)`
|
|
@@ -239,10 +254,14 @@ follow its build → publish → assign steps.
|
|
|
239
254
|
`workflow-sdk validate` on that file, then calling `build-workflow` again
|
|
240
255
|
with the same `filePath`. Save again before any verification step.
|
|
241
256
|
11. Modify existing workflows by editing the workspace `.workflow.ts` source
|
|
242
|
-
file.
|
|
243
|
-
|
|
244
|
-
|
|
257
|
+
file with scoped replacements. A file created by
|
|
258
|
+
`workflows(action="get-as-code")` is already bound to the saved workflow;
|
|
259
|
+
pass the real n8n `workflowId` on the first `build-workflow` call only when
|
|
260
|
+
you wrote the file yourself. Never pass local SDK workflow IDs as n8n
|
|
245
261
|
workflow IDs.
|
|
262
|
+
If you know the workflow's folder (from a `list` result's `folder`), call
|
|
263
|
+
`workflows(action="list", folderPath)` to read its sibling workflows before
|
|
264
|
+
editing. Match the project's existing naming, node choices, and structure.
|
|
246
265
|
12. After a successful direct `build-workflow` result, if the tool output
|
|
247
266
|
contains `postBuildFlow.required: true`, follow the inlined
|
|
248
267
|
`postBuildFlow.instructions` from that output (do not load `post-build-flow`
|
|
@@ -269,9 +288,12 @@ Use the current turn's higher-priority instructions to decide who verifies:
|
|
|
269
288
|
successful `build-workflow`. The checkpoint task owns verification.
|
|
270
289
|
|
|
271
290
|
Build/save success is not workflow-quality evidence. When this turn is
|
|
272
|
-
responsible for verification or repair, inspect the persisted workflow
|
|
273
|
-
|
|
274
|
-
|
|
291
|
+
responsible for verification or repair, inspect the persisted workflow before
|
|
292
|
+
reporting a verdict: read the bound workspace source file you just built, or call
|
|
293
|
+
`workflows(action="get-as-code", workflowId)` when the workflow may have changed
|
|
294
|
+
outside this conversation (it reports whether the file is still current, refreshes
|
|
295
|
+
it when the saved workflow changed, and returns `conflict` when the file holds
|
|
296
|
+
unbuilt edits — build or discard those first). Judge the saved graph against the user's
|
|
275
297
|
requested outcome — not a hidden service-specific checklist. If it is a
|
|
276
298
|
draft, misses the outcome, or the evidence is weak, edit the same source file,
|
|
277
299
|
rebuild with the same `filePath`, then inspect and verify again.
|
|
@@ -343,10 +365,17 @@ decision after testing.
|
|
|
343
365
|
that the credential (or Gateway credits) is being used.
|
|
344
366
|
- Never use raw credential objects like `{ id: '...', name: '...' }` in SDK
|
|
345
367
|
code; replace them with `newCredential()` when editing roundtripped code.
|
|
346
|
-
-
|
|
347
|
-
|
|
348
|
-
|
|
368
|
+
- `credentials(action="list")` returns connected credential instances, not all
|
|
369
|
+
supported credential types. If it has no suitable instance for a named
|
|
370
|
+
service, call `credentials(action="search-types")` with the service name
|
|
371
|
+
before choosing generic authentication. Pick in this order:
|
|
349
372
|
1. A **dedicated credential type** whenever search finds one.
|
|
373
|
+
For an HTTP Request node, use the most specific type for the target service
|
|
374
|
+
and operation. Set `authentication` to `'predefinedCredentialType'` and
|
|
375
|
+
`nodeCredentialType` to the returned type. If no credential instance
|
|
376
|
+
exists, leave `newCredential('Suggested Name')` unresolved for setup. Do
|
|
377
|
+
not use generic authentication only because the user has not connected an
|
|
378
|
+
account.
|
|
350
379
|
2. **Simplified Custom Auth** (`httpTemplatedCustomAuth`) for any service
|
|
351
380
|
without a dedicated type whose auth is expressible as header/query/body
|
|
352
381
|
values — this covers API keys and bearer tokens. When the provider
|
|
@@ -384,6 +413,41 @@ decision after testing.
|
|
|
384
413
|
- Always declare `output` on nodes that use unresolved credentials when mock
|
|
385
414
|
data is needed for verification.
|
|
386
415
|
|
|
416
|
+
## Credential Setup Preference
|
|
417
|
+
|
|
418
|
+
Discovery results can include a `setupPreference` array. Each entry has:
|
|
419
|
+
|
|
420
|
+
- `type`, the credential type
|
|
421
|
+
- `setupCompletionPercent`, a percentage from 0 to 100 rounded to the nearest
|
|
422
|
+
5 percentage points, or `null`
|
|
423
|
+
- `popularityScore`, a relative adoption score from 0 to 1 rounded to one
|
|
424
|
+
decimal place, or `null`
|
|
425
|
+
|
|
426
|
+
Setup completion measures completion of an Instance AI setup step containing
|
|
427
|
+
the credential; it is not an activation or validity rate. For either metric,
|
|
428
|
+
`null` means there was not enough data. Popularity is relative recent adoption,
|
|
429
|
+
not a percentage. Treat both as coarse signals and ignore small differences.
|
|
430
|
+
|
|
431
|
+
When choosing a service:
|
|
432
|
+
|
|
433
|
+
1. Honor explicit intent and existing workflow choices.
|
|
434
|
+
2. Prefer a semantically suitable service with a usable existing credential,
|
|
435
|
+
then apply the existing Gateway credits rules.
|
|
436
|
+
3. Compare setup preference only among the remaining semantically
|
|
437
|
+
interchangeable candidates. Before deciding, inspect discovery results for
|
|
438
|
+
every candidate the user named.
|
|
439
|
+
|
|
440
|
+
- When setup completion and popularity clearly support one candidate, choose it
|
|
441
|
+
and continue without asking.
|
|
442
|
+
- When the signals are close or conflict and the user has not delegated the
|
|
443
|
+
choice, ask exactly one `single` question. If skipped, choose a sensible default.
|
|
444
|
+
- When the user explicitly asks you to choose, make a sensible choice and
|
|
445
|
+
continue without asking.
|
|
446
|
+
|
|
447
|
+
Use judgment instead of calculating a combined score or applying a fixed
|
|
448
|
+
threshold. Never let this metadata override stronger semantic relevance or use
|
|
449
|
+
it to choose between authentication methods for the same service.
|
|
450
|
+
|
|
387
451
|
## Gateway credits Preference
|
|
388
452
|
|
|
389
453
|
"Gateway credits" is the user-facing name of n8n's managed credential
|
|
@@ -485,6 +549,25 @@ via `load_skill` first (if not already loaded this turn), then follow that
|
|
|
485
549
|
skill for schema/row guidance. Create or inspect tables directly with
|
|
486
550
|
`data-tables`; do not invent table IDs, table names, or column names.
|
|
487
551
|
|
|
552
|
+
When diagnosing why a workflow's table lookup misses, keep every `data-tables`
|
|
553
|
+
query targeted: filter on the column under investigation (`ilike` for
|
|
554
|
+
case-insensitive partial matches; `like` is case-sensitive) with `limit` of 5
|
|
555
|
+
or fewer. Never pull a table unfiltered — rows can carry very large values
|
|
556
|
+
(inline base64 images, raw payloads), and a filter that matches every row
|
|
557
|
+
(`stock gte 0`) is an unfiltered pull. Results include the total matching
|
|
558
|
+
`count`, so `limit: 1` answers "does this table/filter match anything"; to see
|
|
559
|
+
stored values, sample at most 5 rows. After a 0-row or failed query, retry
|
|
560
|
+
only strictly narrower or switch to a different diagnostic step — a targeted
|
|
561
|
+
query returning 0 rows is evidence about the match condition (commonly an `eq`
|
|
562
|
+
condition against free-form input where only `ilike` — case-insensitive
|
|
563
|
+
contains — reliably matches user-typed text), not proof the data is missing.
|
|
564
|
+
Equal-breadth variants count as re-issues: swapping to a different always-true
|
|
565
|
+
column is the same query, and chasing casing with `like` is wasted turns — use
|
|
566
|
+
`ilike` once instead. Two targeted 0-row probes are enough evidence — stop
|
|
567
|
+
querying and fix the logic. When the user has confirmed the row exists, never
|
|
568
|
+
conclude the data is missing or stored elsewhere; state the matching-logic
|
|
569
|
+
cause, apply the fix, and ask them to re-test.
|
|
570
|
+
|
|
488
571
|
When the ask is a summary, digest, or report over a period ("weekly summary of
|
|
489
572
|
what was recorded", "digest of this week's rows"), the summary branch must
|
|
490
573
|
read that period's rows back from where the workflow logs them (Data Table,
|
|
@@ -524,10 +607,11 @@ every reported error and warning before calling `build-workflow`.
|
|
|
524
607
|
`{{ }}`. `$json` is only the current item from the immediate predecessor.
|
|
525
608
|
- Use string values directly for discriminator fields like `resource` and
|
|
526
609
|
`operation`, for example `resource: 'message'`.
|
|
527
|
-
- When editing a
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
610
|
+
- When editing a saved workflow, leave layout alone. The source `get-as-code`
|
|
611
|
+
writes carries no `position` arrays: the saved layout is restored on save by
|
|
612
|
+
node `id`, and nodes you add are placed by the layout engine. Do not add a
|
|
613
|
+
`position` to any node, and never run a whole-file substitution (for example
|
|
614
|
+
`sed`) over the source to change layout.
|
|
531
615
|
- When editing a pre-loaded workflow, keep every `config.id` value **exactly** as
|
|
532
616
|
`get-as-code` produced it, on the node it came with. `id` is the node's
|
|
533
617
|
permanent identity in n8n — execution logs, poll cursors, deduplication state
|
|
@@ -535,8 +619,8 @@ every reported error and warning before calling `build-workflow`.
|
|
|
535
619
|
Move it, rewire it, change its parameters — the `id` stays. Never invent, edit,
|
|
536
620
|
renumber or reuse an `id`, and never copy one from a template, another workflow
|
|
537
621
|
or another node. **Omit `id` entirely for any node you are adding** — one is
|
|
538
|
-
assigned on save. Deleting a node means deleting its `id` line with it.
|
|
539
|
-
|
|
622
|
+
assigned on save. Deleting a node means deleting its `id` line with it. Like
|
|
623
|
+
`position`, `id` is saved state: never write one by hand.
|
|
540
624
|
- Use `placeholder('hint')` directly as the parameter value. Do not wrap
|
|
541
625
|
placeholders in `expr()`, objects, or arrays unless the node definition
|
|
542
626
|
explicitly expects an object and the placeholder is the direct value of one
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { type RedactionOptions } from '@n8n/agents';
|
|
2
|
-
import type { InstanceAiEvent } from '@n8n/api-types';
|
|
3
|
-
import type { Logger } from '../logger';
|
|
4
|
-
export declare const DEFAULT_OUTPUT_REDACTION_OPTIONS: RedactionOptions;
|
|
5
|
-
interface OutputRedactorContext {
|
|
6
|
-
logger: Logger;
|
|
7
|
-
threadId: string;
|
|
8
|
-
runId: string;
|
|
9
|
-
agentId: string;
|
|
10
|
-
options?: RedactionOptions | false;
|
|
11
|
-
}
|
|
12
|
-
export declare class OutputRedactor {
|
|
13
|
-
private readonly context;
|
|
14
|
-
private readonly enabled;
|
|
15
|
-
private readonly options;
|
|
16
|
-
private readonly text;
|
|
17
|
-
private readonly reasoning;
|
|
18
|
-
private matches;
|
|
19
|
-
constructor(context: OutputRedactorContext);
|
|
20
|
-
processEvent(event: InstanceAiEvent): InstanceAiEvent[];
|
|
21
|
-
flush(): InstanceAiEvent[];
|
|
22
|
-
private processDelta;
|
|
23
|
-
private drainChannel;
|
|
24
|
-
private makeDelta;
|
|
25
|
-
private redactStructural;
|
|
26
|
-
private redactConfirmation;
|
|
27
|
-
private redactString;
|
|
28
|
-
private recordMatches;
|
|
29
|
-
private logSummary;
|
|
30
|
-
}
|
|
31
|
-
export {};
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OutputRedactor = exports.DEFAULT_OUTPUT_REDACTION_OPTIONS = void 0;
|
|
4
|
-
const agents_1 = require("@n8n/agents");
|
|
5
|
-
const is_record_1 = require("@n8n/utils/is-record");
|
|
6
|
-
exports.DEFAULT_OUTPUT_REDACTION_OPTIONS = {
|
|
7
|
-
secrets: true,
|
|
8
|
-
detect: ['credit-card'],
|
|
9
|
-
};
|
|
10
|
-
const MAX_TARGET_APPROVAL_ARG_DEPTH = 8;
|
|
11
|
-
const WITHHELD_TARGET_APPROVAL_ARG = '[REDACTED]';
|
|
12
|
-
function withholdDeepTargetApprovalArgs(value, depth = 0) {
|
|
13
|
-
if (value === null || typeof value !== 'object')
|
|
14
|
-
return value;
|
|
15
|
-
if (depth >= MAX_TARGET_APPROVAL_ARG_DEPTH)
|
|
16
|
-
return WITHHELD_TARGET_APPROVAL_ARG;
|
|
17
|
-
if (Array.isArray(value)) {
|
|
18
|
-
return value.map((item) => withholdDeepTargetApprovalArgs(item, depth + 1));
|
|
19
|
-
}
|
|
20
|
-
return Object.fromEntries(Object.entries(value).map(([key, item]) => [
|
|
21
|
-
key,
|
|
22
|
-
withholdDeepTargetApprovalArgs(item, depth + 1),
|
|
23
|
-
]));
|
|
24
|
-
}
|
|
25
|
-
class OutputRedactor {
|
|
26
|
-
context;
|
|
27
|
-
enabled;
|
|
28
|
-
options;
|
|
29
|
-
text;
|
|
30
|
-
reasoning;
|
|
31
|
-
matches = [];
|
|
32
|
-
constructor(context) {
|
|
33
|
-
this.context = context;
|
|
34
|
-
this.enabled = context.options !== false;
|
|
35
|
-
this.options =
|
|
36
|
-
context.options === false || context.options === undefined
|
|
37
|
-
? exports.DEFAULT_OUTPUT_REDACTION_OPTIONS
|
|
38
|
-
: context.options;
|
|
39
|
-
this.text = { type: 'text-delta', redactor: new agents_1.StreamingRedactor(this.options) };
|
|
40
|
-
this.reasoning = { type: 'reasoning-delta', redactor: new agents_1.StreamingRedactor(this.options) };
|
|
41
|
-
}
|
|
42
|
-
processEvent(event) {
|
|
43
|
-
if (!this.enabled)
|
|
44
|
-
return [event];
|
|
45
|
-
if (event.type === 'text-delta')
|
|
46
|
-
return this.processDelta(event, this.text, this.reasoning);
|
|
47
|
-
if (event.type === 'reasoning-delta') {
|
|
48
|
-
return this.processDelta(event, this.reasoning, this.text);
|
|
49
|
-
}
|
|
50
|
-
return [
|
|
51
|
-
...this.drainChannel(this.reasoning),
|
|
52
|
-
...this.drainChannel(this.text),
|
|
53
|
-
this.redactStructural(event),
|
|
54
|
-
];
|
|
55
|
-
}
|
|
56
|
-
flush() {
|
|
57
|
-
if (!this.enabled)
|
|
58
|
-
return [];
|
|
59
|
-
const events = [...this.drainChannel(this.reasoning), ...this.drainChannel(this.text)];
|
|
60
|
-
this.logSummary();
|
|
61
|
-
return events;
|
|
62
|
-
}
|
|
63
|
-
processDelta(event, channel, otherChannel) {
|
|
64
|
-
const events = [];
|
|
65
|
-
events.push(...this.drainChannel(otherChannel));
|
|
66
|
-
if (channel.responseId !== undefined && channel.responseId !== event.responseId) {
|
|
67
|
-
events.push(...this.drainChannel(channel));
|
|
68
|
-
}
|
|
69
|
-
channel.responseId = event.responseId;
|
|
70
|
-
const { text, matches } = channel.redactor.push(event.payload.text);
|
|
71
|
-
this.recordMatches(matches);
|
|
72
|
-
if (text)
|
|
73
|
-
events.push(this.makeDelta(channel, text));
|
|
74
|
-
return events;
|
|
75
|
-
}
|
|
76
|
-
drainChannel(channel) {
|
|
77
|
-
const { text, matches } = channel.redactor.flush();
|
|
78
|
-
this.recordMatches(matches);
|
|
79
|
-
return text ? [this.makeDelta(channel, text)] : [];
|
|
80
|
-
}
|
|
81
|
-
makeDelta(channel, text) {
|
|
82
|
-
return {
|
|
83
|
-
type: channel.type,
|
|
84
|
-
runId: this.context.runId,
|
|
85
|
-
agentId: this.context.agentId,
|
|
86
|
-
...(channel.responseId ? { responseId: channel.responseId } : {}),
|
|
87
|
-
payload: { text },
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
redactStructural(event) {
|
|
91
|
-
if (event.type === 'tool-call') {
|
|
92
|
-
const { value, matches } = (0, agents_1.redactDeep)(event.payload.args, this.options);
|
|
93
|
-
this.recordMatches(matches);
|
|
94
|
-
return {
|
|
95
|
-
...event,
|
|
96
|
-
payload: { ...event.payload, args: (0, is_record_1.isRecord)(value) ? value : event.payload.args },
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
if (event.type === 'tool-result') {
|
|
100
|
-
const { value, matches } = (0, agents_1.redactDeep)(event.payload.result, this.options);
|
|
101
|
-
this.recordMatches(matches);
|
|
102
|
-
return { ...event, payload: { ...event.payload, result: value } };
|
|
103
|
-
}
|
|
104
|
-
if (event.type === 'tool-error') {
|
|
105
|
-
return {
|
|
106
|
-
...event,
|
|
107
|
-
payload: { ...event.payload, error: this.redactString(event.payload.error) },
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
if (event.type === 'confirmation-request') {
|
|
111
|
-
return this.redactConfirmation(event);
|
|
112
|
-
}
|
|
113
|
-
return event;
|
|
114
|
-
}
|
|
115
|
-
redactConfirmation(event) {
|
|
116
|
-
const payload = event.payload;
|
|
117
|
-
const questions = payload.questions?.map((question) => ({
|
|
118
|
-
...question,
|
|
119
|
-
question: this.redactString(question.question),
|
|
120
|
-
...(question.options ? { options: question.options.map((o) => this.redactString(o)) } : {}),
|
|
121
|
-
}));
|
|
122
|
-
const tasks = payload.tasks
|
|
123
|
-
? {
|
|
124
|
-
...payload.tasks,
|
|
125
|
-
tasks: payload.tasks.tasks.map((task) => ({
|
|
126
|
-
...task,
|
|
127
|
-
description: this.redactString(task.description),
|
|
128
|
-
...(task.detail ? { detail: this.redactString(task.detail) } : {}),
|
|
129
|
-
})),
|
|
130
|
-
}
|
|
131
|
-
: undefined;
|
|
132
|
-
const planItems = payload.planItems?.map((item) => ({
|
|
133
|
-
...item,
|
|
134
|
-
title: this.redactString(item.title),
|
|
135
|
-
spec: this.redactString(item.spec),
|
|
136
|
-
}));
|
|
137
|
-
let targetApproval = payload.targetApproval;
|
|
138
|
-
if (targetApproval) {
|
|
139
|
-
const boundedArgs = withholdDeepTargetApprovalArgs(targetApproval.args);
|
|
140
|
-
const { value, matches } = (0, agents_1.redactDeep)(boundedArgs, this.options);
|
|
141
|
-
this.recordMatches(matches);
|
|
142
|
-
targetApproval = {
|
|
143
|
-
...targetApproval,
|
|
144
|
-
toolName: this.redactString(targetApproval.toolName),
|
|
145
|
-
...(targetApproval.displayName
|
|
146
|
-
? { displayName: this.redactString(targetApproval.displayName) }
|
|
147
|
-
: {}),
|
|
148
|
-
args: value,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
return {
|
|
152
|
-
...event,
|
|
153
|
-
payload: {
|
|
154
|
-
...payload,
|
|
155
|
-
message: this.redactString(payload.message),
|
|
156
|
-
...(payload.introMessage ? { introMessage: this.redactString(payload.introMessage) } : {}),
|
|
157
|
-
...(questions ? { questions } : {}),
|
|
158
|
-
...(tasks ? { tasks } : {}),
|
|
159
|
-
...(planItems ? { planItems } : {}),
|
|
160
|
-
...(targetApproval ? { targetApproval } : {}),
|
|
161
|
-
},
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
redactString(text) {
|
|
165
|
-
const { text: redacted, matches } = (0, agents_1.redactText)(text, this.options);
|
|
166
|
-
this.recordMatches(matches);
|
|
167
|
-
return redacted;
|
|
168
|
-
}
|
|
169
|
-
recordMatches(matches) {
|
|
170
|
-
for (const match of matches)
|
|
171
|
-
this.matches.push(match.category);
|
|
172
|
-
}
|
|
173
|
-
logSummary() {
|
|
174
|
-
if (this.matches.length === 0)
|
|
175
|
-
return;
|
|
176
|
-
const categories = {};
|
|
177
|
-
for (const category of this.matches) {
|
|
178
|
-
categories[category] = (categories[category] ?? 0) + 1;
|
|
179
|
-
}
|
|
180
|
-
this.context.logger.info('Instance AI redacted sensitive content from agent output', {
|
|
181
|
-
threadId: this.context.threadId,
|
|
182
|
-
runId: this.context.runId,
|
|
183
|
-
agentId: this.context.agentId,
|
|
184
|
-
count: this.matches.length,
|
|
185
|
-
categories,
|
|
186
|
-
});
|
|
187
|
-
this.matches = [];
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
exports.OutputRedactor = OutputRedactor;
|
|
191
|
-
//# sourceMappingURL=output-redaction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output-redaction.js","sourceRoot":"","sources":["../../src/stream/output-redaction.ts"],"names":[],"mappings":"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"}
|