@n8n/instance-ai 1.26.3 → 1.27.1
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/communication-style.prompt.d.ts +2 -0
- package/dist/agent/communication-style.prompt.js +73 -0
- package/dist/agent/communication-style.prompt.js.map +1 -0
- package/dist/agent/instance-agent.js +1 -2
- package/dist/agent/instance-agent.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-debriefing.d.ts +10 -0
- package/dist/agent/sub-agent-factory.d.ts +1 -1
- package/dist/agent/sub-agent-factory.js +3 -0
- package/dist/agent/sub-agent-factory.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +3 -3
- package/dist/agent/system-prompt.js +19 -28
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/debug/run-debug-buffer.js +38 -1
- package/dist/debug/run-debug-buffer.js.map +1 -1
- package/dist/debug/sanitize-debug-snapshot.js +10 -7
- package/dist/debug/sanitize-debug-snapshot.js.map +1 -1
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.js +12 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +14 -6
- package/dist/index.js +17 -10
- package/dist/index.js.map +1 -1
- package/dist/prompts/prompt-profiles.d.ts +1 -0
- package/dist/prompts/prompt-profiles.js +11 -1
- package/dist/prompts/prompt-profiles.js.map +1 -1
- package/dist/runtime/instance-context-state.d.ts +96 -0
- package/dist/runtime/instance-context-state.js +12 -0
- package/dist/runtime/instance-context-state.js.map +1 -0
- package/dist/runtime/run-state-registry.d.ts +5 -0
- package/dist/runtime/run-state-registry.js +12 -0
- package/dist/runtime/run-state-registry.js.map +1 -1
- package/dist/stream/instance-context-reach.d.ts +4 -0
- package/dist/stream/instance-context-reach.js +49 -0
- package/dist/stream/instance-context-reach.js.map +1 -0
- package/dist/stream/work-summary-accumulator.d.ts +20 -0
- package/dist/stream/work-summary-accumulator.js +20 -1
- package/dist/stream/work-summary-accumulator.js.map +1 -1
- package/dist/tools/agent-context.tool.d.ts +154 -0
- package/dist/tools/agent-context.tool.js +125 -0
- package/dist/tools/agent-context.tool.js.map +1 -0
- package/dist/tools/conversation-history.tool.js +3 -10
- package/dist/tools/conversation-history.tool.js.map +1 -1
- package/dist/tools/credentials.tool.js +96 -22
- package/dist/tools/credentials.tool.js.map +1 -1
- package/dist/tools/executions.tool.js +12 -1
- package/dist/tools/executions.tool.js.map +1 -1
- package/dist/tools/index.js +19 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/nodes.tool.js +11 -3
- package/dist/tools/nodes.tool.js.map +1 -1
- package/dist/tools/orchestration/build-agent.tool.js +33 -15
- package/dist/tools/orchestration/build-agent.tool.js.map +1 -1
- package/dist/tools/save-user-preference.tool.d.ts +3 -0
- package/dist/tools/save-user-preference.tool.js +87 -0
- package/dist/tools/save-user-preference.tool.js.map +1 -0
- package/dist/tools/shared/safe-error-message.d.ts +3 -0
- package/dist/tools/shared/safe-error-message.js +11 -0
- package/dist/tools/shared/safe-error-message.js.map +1 -0
- package/dist/tools/tool-ids.d.ts +2 -2
- package/dist/tools/tool-ids.js +4 -4
- package/dist/tools/tool-ids.js.map +1 -1
- package/dist/tools/workflows/build-workflow.tool.js +49 -9
- package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
- package/dist/tools/workflows/prepare-workflow-setup.d.ts +25 -0
- package/dist/tools/workflows/prepare-workflow-setup.js +114 -0
- package/dist/tools/workflows/prepare-workflow-setup.js.map +1 -0
- package/dist/tools/workflows/resolve-credentials.d.ts +1 -1
- package/dist/tools/workflows/resolve-credentials.js +10 -2
- package/dist/tools/workflows/resolve-credentials.js.map +1 -1
- package/dist/tools/workflows/setup-credential-selections.d.ts +15 -0
- package/dist/tools/workflows/setup-credential-selections.js +97 -0
- package/dist/tools/workflows/setup-credential-selections.js.map +1 -0
- package/dist/tools/workflows/setup-items.d.ts +2 -0
- package/dist/tools/workflows/setup-items.js +27 -11
- package/dist/tools/workflows/setup-items.js.map +1 -1
- package/dist/tools/workflows/workflow-file-bindings.d.ts +32 -2
- package/dist/tools/workflows/workflow-file-bindings.js +27 -5
- package/dist/tools/workflows/workflow-file-bindings.js.map +1 -1
- package/dist/tools/workflows.tool.js +5 -2
- package/dist/tools/workflows.tool.js.map +1 -1
- package/dist/types.d.ts +63 -15
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/package.json +18 -10
- package/skills/agent-builder/SKILL.md +32 -2
- package/skills/debugging-executions/SKILL.md +53 -0
- package/skills/intent-recognition/SKILL.md +3 -3
- package/skills/workflow-builder/SKILL.md +21 -5
- package/dist/tools/agents.tool.d.ts +0 -2
- package/dist/tools/agents.tool.js +0 -40
- package/dist/tools/agents.tool.js.map +0 -1
- package/dist/tools/orchestration/list-agent-capabilities.tool.d.ts +0 -2
- package/dist/tools/orchestration/list-agent-capabilities.tool.js +0 -45
- package/dist/tools/orchestration/list-agent-capabilities.tool.js.map +0 -1
|
@@ -86,6 +86,10 @@ first move whenever the user is debugging a **read** node that already failed a
|
|
|
86
86
|
real execution: the node ran for real once already, and a mock-only check is
|
|
87
87
|
what sends the user back for a second session.
|
|
88
88
|
|
|
89
|
+
The action refuses a replay that would re-run a node above the target: an
|
|
90
|
+
unpinned one the execution never reached, one that failed there, or a loop
|
|
91
|
+
that did not finish. Pick another execution, or tell the user which node would run again.
|
|
92
|
+
|
|
89
93
|
### Decide whether the node is safe to run first
|
|
90
94
|
|
|
91
95
|
A step run is a real run. The node uses the user's real credentials and reaches
|
|
@@ -142,6 +146,55 @@ Mocked input does **not** make a write node safe. The node still runs for real
|
|
|
142
146
|
against the user's systems; only its input is invented, which makes the effect
|
|
143
147
|
less predictable, not more.
|
|
144
148
|
|
|
149
|
+
### Running a tool
|
|
150
|
+
|
|
151
|
+
A tool never runs on its own. n8n runs it through the node that owns it —
|
|
152
|
+
usually the Agent. A step run on a tool therefore behaves like a step run on
|
|
153
|
+
that Agent:
|
|
154
|
+
|
|
155
|
+
- `mockInput` feeds the **Agent's** input, not the tool's arguments.
|
|
156
|
+
- `reuseExecutionId` replays the nodes above the **Agent**.
|
|
157
|
+
- A chain run (neither option) runs every node above the Agent for real. Give
|
|
158
|
+
one of the two options when a node up there writes.
|
|
159
|
+
- `ranThroughNodeNames` lists **every** node that can run the tool, not the one
|
|
160
|
+
that ran it. A tool on several agents lists them all: the engine picks one,
|
|
161
|
+
and it does not report which. Do not name a single Agent to the user when
|
|
162
|
+
this field holds more than one.
|
|
163
|
+
- A tool on two Agents where one runs above the other is refused. Run the
|
|
164
|
+
upper Agent, then read the tool with `executions(action="get-node-output")`.
|
|
165
|
+
|
|
166
|
+
The tool's own arguments come from `toolArguments` — the values the agent would
|
|
167
|
+
normally decide:
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
executions(action="run-step", workflowId, nodeName="Search Tickets Tool",
|
|
171
|
+
reuseExecutionId=<the failed execution>,
|
|
172
|
+
toolArguments={"query": "login fails", "status": "open"})
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The example targets a **read** tool on purpose. The write rule above holds here
|
|
176
|
+
too, and a tool hides the write behind a friendly name: a step run on a "Create
|
|
177
|
+
Ticket" tool creates the ticket again, and `toolArguments` does not change that.
|
|
178
|
+
Only run one when the user has accepted a second write.
|
|
179
|
+
|
|
180
|
+
Use the argument names from the node's `$fromAI` calls, which
|
|
181
|
+
`workflows(action="get-as-code")` shows. Pass a plain string instead for a tool
|
|
182
|
+
that takes one free-text input (Wikipedia, Code Tool, a vector store used as a
|
|
183
|
+
tool).
|
|
184
|
+
|
|
185
|
+
A tool that declares `$fromAI` arguments is refused without them: it would
|
|
186
|
+
otherwise fail for a reason that has nothing to do with the user's problem, and
|
|
187
|
+
you would report that as the defect. A node that holds several tools is refused
|
|
188
|
+
outright, because nothing here can name one of its tools the way the agent
|
|
189
|
+
does: the "MCP Client Tool" node, and every node the MCP registry added, whose
|
|
190
|
+
type is `@n8n/mcp-registry.<server slug>`. Run the Agent for those, and read
|
|
191
|
+
the node's output from that execution.
|
|
192
|
+
|
|
193
|
+
A sub-node that is not a tool — a model, memory, embeddings — cannot be run this
|
|
194
|
+
way at all. Run the Agent, and read the sub-node with
|
|
195
|
+
`executions(action="get-node-output")` on **that** execution: n8n records every
|
|
196
|
+
call a sub-node made while the Agent ran.
|
|
197
|
+
|
|
145
198
|
## Successful execution with wrong or empty value
|
|
146
199
|
|
|
147
200
|
When `debug` doesn't apply because nothing errored, call
|
|
@@ -281,7 +281,7 @@ continuity for that primitive.
|
|
|
281
281
|
|
|
282
282
|
**Unsupported capabilities**: when the user names a specific channel or
|
|
283
283
|
capability for an agent (e.g. "WhatsApp", "Teams"), call
|
|
284
|
-
`
|
|
284
|
+
`agent-context` with `type: "capabilities"` before classifying. If the named channel is
|
|
285
285
|
absent, it is unsupported for agents — do not classify the request as a
|
|
286
286
|
workflow substitute, do not improvise workflow nodes to fake the channel,
|
|
287
287
|
and do not claim it can be configured. Explain that it is unavailable for
|
|
@@ -396,7 +396,7 @@ valid, apply the growth tiebreaker instead of asking a theoretical preference.
|
|
|
396
396
|
actions or whether an investigator must choose and adapt them.
|
|
397
397
|
- "Build me an agent my team can @mention on WhatsApp to triage customer
|
|
398
398
|
messages." -> **agent-anchored** (explicit agent artifact + chat
|
|
399
|
-
interaction), but call `
|
|
399
|
+
interaction), but call `agent-context` with `type: "capabilities"` first: WhatsApp is absent,
|
|
400
400
|
so do not build. Explain WhatsApp is unsupported for agents, offer the
|
|
401
401
|
supported chat channels the tool returned, with their
|
|
402
402
|
`capabilities`, and ask which to use — or whether the user wants a
|
|
@@ -438,7 +438,7 @@ valid, apply the growth tiebreaker instead of asking a theoretical preference.
|
|
|
438
438
|
workflow-anchored pipeline. A Chat Trigger workflow is correct only when
|
|
439
439
|
chat is merely the manual trigger for a fixed graph.
|
|
440
440
|
- Never improvise a workflow substitute for an unsupported agent channel or
|
|
441
|
-
capability. When the user names a channel not
|
|
441
|
+
capability. When the user names a channel not returned by `agent-context`,
|
|
442
442
|
explain the limitation and offer supported alternatives — do not add
|
|
443
443
|
workflow nodes that fake the channel or silently translate the request
|
|
444
444
|
into a workflow change.
|
|
@@ -59,6 +59,20 @@ first action turn (each extra sequential turn resends the whole context). When
|
|
|
59
59
|
unsure which nodes to use, load this skill first and follow its research
|
|
60
60
|
process below.
|
|
61
61
|
|
|
62
|
+
## Early service connections
|
|
63
|
+
|
|
64
|
+
When the `credentials(action="setup")` schema offers `filePath`, announce
|
|
65
|
+
known service credentials immediately after the first node definitions or
|
|
66
|
+
credential type search. Do this before detailed planning, SDK research, or
|
|
67
|
+
source generation. Do not wait for every service to be resolved.
|
|
68
|
+
|
|
69
|
+
Pick the source `filePath` and call credential setup with the complete list
|
|
70
|
+
of types known so far. Make it the only tool call in that response. Wait for
|
|
71
|
+
its successful `preBuild: true` result before continuing. Add later discoveries
|
|
72
|
+
with another complete list. Do not batch setup with source writing.
|
|
73
|
+
|
|
74
|
+
When early setup is unavailable, keep the post-build setup flow below.
|
|
75
|
+
|
|
62
76
|
## Repair Strategy
|
|
63
77
|
|
|
64
78
|
When the edit is to fix a node the user reports as erroring or showing a red
|
|
@@ -97,10 +111,12 @@ resources, credentials, channel IDs, or timezone; use placeholders or unresolved
|
|
|
97
111
|
for a capability the user did not name,
|
|
98
112
|
discover coverage first and use a Gateway credits–covered node instead of asking
|
|
99
113
|
when the user has no credential for a comparable tool (see Gateway credits
|
|
100
|
-
Preference). Setup details
|
|
101
|
-
|
|
102
|
-
unresolved `newCredential()` calls
|
|
103
|
-
|
|
114
|
+
Preference). Setup details such as recipients, accounts, resources,
|
|
115
|
+
channels, credentials, and timezone belong in placeholders or
|
|
116
|
+
unresolved `newCredential()` calls. Announce known credentials through early
|
|
117
|
+
setup when available, then continue building without waiting for the user.
|
|
118
|
+
After the first build, resolve remaining setup and use `ask-user` when stuck
|
|
119
|
+
or when choices are ambiguous; do not retry the same
|
|
104
120
|
failing approach more than twice. Never re-ask an answered, deferred, or skipped
|
|
105
121
|
question. A skip grants no additional permission. Choose defaults only for
|
|
106
122
|
unspecified details within the requested task. If a skipped question seeks
|
|
@@ -978,7 +994,7 @@ For AI Agent workflows:
|
|
|
978
994
|
|
|
979
995
|
After building a workflow that uses a trigger with an HTTP endpoint, share the
|
|
980
996
|
full production URL with the user. Use the Webhook base URL and Form base URL
|
|
981
|
-
from
|
|
997
|
+
from the `<instance-urls>` block in the user's turn. Each trigger type has a distinct
|
|
982
998
|
pattern:
|
|
983
999
|
|
|
984
1000
|
- **Webhook Trigger**: `{webhookBaseUrl}/{path}` (where `{path}` is the node's
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createAgentsTool = createAgentsTool;
|
|
4
|
-
const agents_1 = require("@n8n/agents");
|
|
5
|
-
const zod_1 = require("zod");
|
|
6
|
-
const tool_ids_1 = require("./tool-ids");
|
|
7
|
-
const agentsInputSchema = zod_1.z.object({
|
|
8
|
-
action: zod_1.z
|
|
9
|
-
.literal('list')
|
|
10
|
-
.describe('List the n8n Agents in this project (id, name, published state, last update), most recently updated first.'),
|
|
11
|
-
});
|
|
12
|
-
const agentsOutputSchema = zod_1.z.object({
|
|
13
|
-
count: zod_1.z.number(),
|
|
14
|
-
agents: zod_1.z.array(zod_1.z.object({
|
|
15
|
-
agentId: zod_1.z.string(),
|
|
16
|
-
name: zod_1.z.string(),
|
|
17
|
-
published: zod_1.z.boolean(),
|
|
18
|
-
updatedAt: zod_1.z.string(),
|
|
19
|
-
})),
|
|
20
|
-
});
|
|
21
|
-
function createAgentsTool(context) {
|
|
22
|
-
return new agents_1.Tool(tool_ids_1.DOMAIN_TOOL_IDS.AGENTS)
|
|
23
|
-
.description('List the n8n Agent artifacts in this project — id, name, published state, and last ' +
|
|
24
|
-
'update, most recently updated first. Use it to answer questions about existing ' +
|
|
25
|
-
'agents and to find the `agentId` to pass to `build-agent` when the user wants to ' +
|
|
26
|
-
'edit an agent that was not built in this conversation. Read-only; agents are ' +
|
|
27
|
-
'created and edited via `build-agent`.')
|
|
28
|
-
.input(agentsInputSchema)
|
|
29
|
-
.output(agentsOutputSchema)
|
|
30
|
-
.handler(async () => {
|
|
31
|
-
const delegate = context.domainContext?.builderDelegate;
|
|
32
|
-
if (!delegate) {
|
|
33
|
-
throw new Error('Agent listing is not available on this instance.');
|
|
34
|
-
}
|
|
35
|
-
const agents = await delegate.listAgents();
|
|
36
|
-
return { count: agents.length, agents };
|
|
37
|
-
})
|
|
38
|
-
.build();
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=agents.tool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agents.tool.js","sourceRoot":"","sources":["../../src/tools/agents.tool.ts"],"names":[],"mappings":";;;AAMA,wCAAmC;AACnC,6BAAwB;AAGxB,yCAA6C;AAE7C,MAAM,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,OAAC;SACP,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CACR,4GAA4G,CAC5G;CACF,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,OAAC,CAAC,KAAK,CACd,OAAC,CAAC,MAAM,CAAC;QACR,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;QAChB,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE;QACtB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;KACrB,CAAC,CACF;CACD,CAAC,CAAC;AAEH,0BAAiC,OAA6B;IAC7D,OAAO,IAAI,aAAI,CAAC,0BAAe,CAAC,MAAM,CAAC;SACrC,WAAW,CACX,qFAAqF;QACpF,iFAAiF;QACjF,mFAAmF;QACnF,+EAA+E;QAC/E,uCAAuC,CACxC;SACA,KAAK,CAAC,iBAAiB,CAAC;SACxB,MAAM,CAAC,kBAAkB,CAAC;SAC1B,OAAO,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC,CAAC;SACD,KAAK,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createListAgentCapabilitiesTool = createListAgentCapabilitiesTool;
|
|
4
|
-
const agents_1 = require("@n8n/agents");
|
|
5
|
-
const zod_1 = require("zod");
|
|
6
|
-
const tool_ids_1 = require("../tool-ids");
|
|
7
|
-
const chatIntegrationDescriptorSchema = zod_1.z.object({
|
|
8
|
-
type: zod_1.z.string(),
|
|
9
|
-
label: zod_1.z.string(),
|
|
10
|
-
icon: zod_1.z.string(),
|
|
11
|
-
credentialTypes: zod_1.z.array(zod_1.z.string()),
|
|
12
|
-
capabilities: zod_1.z.array(zod_1.z.string()).optional(),
|
|
13
|
-
useIntegrationWhen: zod_1.z.array(zod_1.z.string()).optional(),
|
|
14
|
-
useNodeToolWhen: zod_1.z.array(zod_1.z.string()).optional(),
|
|
15
|
-
});
|
|
16
|
-
const listAgentCapabilitiesOutputSchema = zod_1.z.object({
|
|
17
|
-
channels: zod_1.z.array(chatIntegrationDescriptorSchema),
|
|
18
|
-
agentCapabilities: zod_1.z.array(zod_1.z.string()),
|
|
19
|
-
limitations: zod_1.z.array(zod_1.z.string()),
|
|
20
|
-
});
|
|
21
|
-
function createListAgentCapabilitiesTool(context) {
|
|
22
|
-
return new agents_1.Tool(tool_ids_1.ORCHESTRATION_TOOL_IDS.LIST_AGENT_CAPABILITIES)
|
|
23
|
-
.description('List what n8n Agents can do and the chat-channel integrations they support. ' +
|
|
24
|
-
"Returns each supported channel's `type`, `label`, supported credential types, " +
|
|
25
|
-
'and builder guidance (`capabilities`, `useIntegrationWhen`, `useNodeToolWhen`), ' +
|
|
26
|
-
'plus `agentCapabilities` (what an agent can do beyond chat) and `limitations` ' +
|
|
27
|
-
'(agent-level constraints to respect when planning a build). ' +
|
|
28
|
-
'Call this before building or modifying an agent whenever the user names a ' +
|
|
29
|
-
'specific channel or capability (e.g. WhatsApp, Teams): if the named channel ' +
|
|
30
|
-
'is absent from `channels`, it is unsupported for agents — explain the ' +
|
|
31
|
-
'limitation and offer the listed alternatives instead of improvising a ' +
|
|
32
|
-
'workflow substitute or claiming it is configured. Read-only; channels and ' +
|
|
33
|
-
'capabilities are configured via `build-agent`.')
|
|
34
|
-
.input(zod_1.z.object({}))
|
|
35
|
-
.output(listAgentCapabilitiesOutputSchema)
|
|
36
|
-
.handler(async () => {
|
|
37
|
-
const delegate = context.domainContext?.builderDelegate;
|
|
38
|
-
if (!delegate) {
|
|
39
|
-
throw new Error('Agent capabilities are not available on this instance.');
|
|
40
|
-
}
|
|
41
|
-
return await delegate.listAgentCapabilities();
|
|
42
|
-
})
|
|
43
|
-
.build();
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=list-agent-capabilities.tool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-agent-capabilities.tool.js","sourceRoot":"","sources":["../../../src/tools/orchestration/list-agent-capabilities.tool.ts"],"names":[],"mappings":";;;AAWA,wCAAmC;AACnC,6BAAwB;AAGxB,0CAAqD;AAErD,MAAM,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,eAAe,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;IACpC,YAAY,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,kBAAkB,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAClD,eAAe,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC;AAEH,MAAM,iCAAiC,GAAG,OAAC,CAAC,MAAM,CAAC;IAElD,QAAQ,EAAE,OAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC;IAElD,iBAAiB,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;IAEtC,WAAW,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;CAChC,CAAC,CAAC;AAEH,yCAAgD,OAA6B;IAC5E,OAAO,IAAI,aAAI,CAAC,iCAAsB,CAAC,uBAAuB,CAAC;SAC7D,WAAW,CACX,8EAA8E;QAC7E,gFAAgF;QAChF,kFAAkF;QAClF,gFAAgF;QAChF,8DAA8D;QAC9D,4EAA4E;QAC5E,8EAA8E;QAC9E,wEAAwE;QACxE,wEAAwE;QACxE,4EAA4E;QAC5E,gDAAgD,CACjD;SACA,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACnB,MAAM,CAAC,iCAAiC,CAAC;SACzC,OAAO,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC3E,CAAC;QAID,OAAO,MAAM,QAAQ,CAAC,qBAAqB,EAAE,CAAC;IAC/C,CAAC,CAAC;SACD,KAAK,EAAE,CAAC;AACX,CAAC"}
|