experimental-agent 0.0.2 → 0.0.4
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/README.md +13 -2
- package/dist/agent-workflow.d.mts +11 -3
- package/dist/agent-workflow.d.ts +11 -3
- package/dist/agent-workflow.js +1921 -1144
- package/dist/agent-workflow.mjs +7 -3
- package/dist/chunk-3ODWQVIA.mjs +12 -0
- package/dist/chunk-64THY7Y7.mjs +155 -0
- package/dist/chunk-GSRJYPWF.mjs +284 -0
- package/dist/chunk-HJGPUEFC.mjs +42 -0
- package/dist/chunk-JCPQQWIK.mjs +2057 -0
- package/dist/chunk-JEE2FQ4O.mjs +844 -0
- package/dist/chunk-T7PMZLOX.mjs +79 -0
- package/dist/chunk-TQRCSTCF.mjs +103 -0
- package/dist/chunk-VBLZWXVE.mjs +318 -0
- package/dist/{types-DPXFq_r6.d.ts → client-6g79J0s3.d.mts} +866 -31
- package/dist/{types-DPXFq_r6.d.mts → client-6g79J0s3.d.ts} +866 -31
- package/dist/client-SREKHM6I.mjs +15 -0
- package/dist/client.d.mts +37 -0
- package/dist/client.d.ts +37 -0
- package/dist/client.js +58 -0
- package/dist/client.mjs +30 -0
- package/dist/{client-HUG4HT5L.mjs → handler-36FM5H35.mjs} +4 -5
- package/dist/index.d.mts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.js +3102 -1438
- package/dist/index.mjs +720 -147
- package/dist/lifecycle-workflow.d.mts +3 -10
- package/dist/lifecycle-workflow.d.ts +3 -10
- package/dist/lifecycle-workflow.js +170 -1246
- package/dist/lifecycle-workflow.mjs +5 -41
- package/dist/local-fs-handlers-P4WGW3QY.mjs +235 -0
- package/dist/next/loader.d.mts +14 -0
- package/dist/next/loader.d.ts +14 -0
- package/dist/next/loader.js +206 -0
- package/dist/next/loader.mjs +103 -0
- package/dist/next.d.mts +34 -0
- package/dist/next.d.ts +34 -0
- package/dist/next.js +329 -0
- package/dist/next.mjs +224 -0
- package/dist/process-manager-JAKAXROL.mjs +10 -0
- package/dist/{client-4Y3UPWFR.mjs → sandbox-QAPGBVYM.mjs} +4 -3
- package/dist/storage-Q376OZH3.mjs +20 -0
- package/dist/{vercel-2CFDMEHB.mjs → vercel-LLXAHKVJ.mjs} +3 -1
- package/dist/vercel-sdk-VHKEX2GQ.mjs +8 -0
- package/package.json +32 -19
- package/dist/chunk-24DJSI7C.mjs +0 -374
- package/dist/chunk-4RGMKC2M.mjs +0 -755
- package/dist/chunk-6ICYKNCC.mjs +0 -284
- package/dist/chunk-PGYYQ3WZ.mjs +0 -1088
- package/dist/client-BBpD9kKL.d.ts +0 -193
- package/dist/client-BGJViybU.d.mts +0 -193
- package/dist/lifecycle-workflow-steps-HHN46ZAD.mjs +0 -20
- package/dist/local-BYPFRMLZ.mjs +0 -282
- package/dist/process-manager-H2HF6G4G.mjs +0 -153
- package/dist/sandbox-BFA4ECEQ.mjs +0 -10
- package/dist/storage-2U2QFNWI.mjs +0 -27
- /package/dist/{chunk-36X6L7SK.mjs → chunk-TAXLUVIC.mjs} +0 -0
|
@@ -1,44 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
async function sandboxLifecycleWorkflow({
|
|
6
|
-
input
|
|
7
|
-
}) {
|
|
8
|
-
"use workflow";
|
|
9
|
-
const activityHook = sandboxActivityHook.create({ token: input.id });
|
|
10
|
-
const iterator = activityHook[Symbol.asyncIterator]();
|
|
11
|
-
let pendingNext = iterator.next();
|
|
12
|
-
let sandboxConfig = input.initialConfig;
|
|
13
|
-
if (sandboxConfig.type !== "vercel") {
|
|
14
|
-
throw new Error("Sandbox config is not a Vercel sandbox");
|
|
15
|
-
}
|
|
16
|
-
const idleTimeoutMs = sandboxConfig.lifecycle?.stopAfterInactiveMs ?? DEFAULT_IDLE_TIMEOUT_MS;
|
|
17
|
-
while (true) {
|
|
18
|
-
const result = await Promise.race([
|
|
19
|
-
pendingNext.then((r) => ({ ...r, type: "activity" })),
|
|
20
|
-
sleep(idleTimeoutMs).then(() => ({ type: "timeout" }))
|
|
21
|
-
]);
|
|
22
|
-
if (result.type === "timeout") {
|
|
23
|
-
const { snapshotSandboxStep } = await import("./lifecycle-workflow-steps-HHN46ZAD.mjs");
|
|
24
|
-
await snapshotSandboxStep(input).catch((e) => {
|
|
25
|
-
if (FatalError.is(e)) {
|
|
26
|
-
console.error("Snapshot failed permanently:", e.message);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
throw e;
|
|
30
|
-
});
|
|
31
|
-
break;
|
|
32
|
-
}
|
|
33
|
-
if (result.done) {
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
sandboxConfig = result.value.newConfig;
|
|
37
|
-
pendingNext = iterator.next();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
sandboxLifecycleWorkflow
|
|
3
|
+
} from "./chunk-TQRCSTCF.mjs";
|
|
4
|
+
import "./chunk-3ODWQVIA.mjs";
|
|
40
5
|
export {
|
|
41
|
-
sandboxActivityHook,
|
|
42
6
|
sandboxLifecycleWorkflow
|
|
43
7
|
};
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import "./chunk-3ODWQVIA.mjs";
|
|
2
|
+
|
|
3
|
+
// src/storage/bindings/local-fs-handlers.ts
|
|
4
|
+
import { mkdir, readdir, readFile, unlink, writeFile } from "node:fs/promises";
|
|
5
|
+
import { dirname, join, resolve } from "node:path";
|
|
6
|
+
|
|
7
|
+
// src/utils/paginate.ts
|
|
8
|
+
function paginate(opts) {
|
|
9
|
+
const { items, cursor, limit } = opts;
|
|
10
|
+
const startIndex = cursor ? items.findIndex((m) => m.id === cursor) + 1 : 0;
|
|
11
|
+
const sliced = limit !== void 0 ? items.slice(startIndex, startIndex + limit) : items.slice(startIndex);
|
|
12
|
+
const nextCursor = limit !== void 0 && startIndex + limit < items.length ? sliced.at(-1)?.id ?? null : null;
|
|
13
|
+
return { items: sliced, nextCursor };
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// src/storage/bindings/local-fs-handlers.ts
|
|
17
|
+
function createFilesystemHandlers(basePath) {
|
|
18
|
+
const resolvedBase = resolve(basePath);
|
|
19
|
+
const sessionDir = join(resolvedBase, "session");
|
|
20
|
+
const messageDir = join(resolvedBase, "message");
|
|
21
|
+
const partDir = join(resolvedBase, "part");
|
|
22
|
+
const sandboxDir = join(resolvedBase, "sandbox");
|
|
23
|
+
const commandDir = join(resolvedBase, "command");
|
|
24
|
+
async function ensureDir(dir) {
|
|
25
|
+
await mkdir(dir, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
async function readJson(filePath) {
|
|
28
|
+
try {
|
|
29
|
+
const content = await readFile(filePath, "utf-8");
|
|
30
|
+
return JSON.parse(content);
|
|
31
|
+
} catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async function writeJsonFile(filePath, data) {
|
|
36
|
+
await ensureDir(dirname(filePath));
|
|
37
|
+
await writeFile(filePath, JSON.stringify(data, null, 2));
|
|
38
|
+
}
|
|
39
|
+
async function readAllFromDir(dir) {
|
|
40
|
+
try {
|
|
41
|
+
const files = await readdir(dir);
|
|
42
|
+
const results = await Promise.all(
|
|
43
|
+
files.filter((f) => f.endsWith(".json")).map((f) => readJson(join(dir, f)))
|
|
44
|
+
);
|
|
45
|
+
return results.filter((r) => r !== null);
|
|
46
|
+
} catch {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
"session.get": async ({ id }) => {
|
|
52
|
+
const sessionPath = join(sessionDir, `${id}.json`);
|
|
53
|
+
return await readJson(sessionPath) ?? null;
|
|
54
|
+
},
|
|
55
|
+
"session.set": async (session) => {
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
const sessionPath = join(sessionDir, `${session.id}.json`);
|
|
58
|
+
const existing = await readJson(sessionPath);
|
|
59
|
+
const newSession = {
|
|
60
|
+
...session,
|
|
61
|
+
tags: session.tags ?? existing?.tags ?? {},
|
|
62
|
+
createdAt: existing?.createdAt ?? session.createdAt ?? now,
|
|
63
|
+
updatedAt: now
|
|
64
|
+
};
|
|
65
|
+
await writeJsonFile(sessionPath, newSession);
|
|
66
|
+
return newSession;
|
|
67
|
+
},
|
|
68
|
+
"session.list": async ({ tags, cursor, limit }) => {
|
|
69
|
+
const allSessions = await readAllFromDir(sessionDir);
|
|
70
|
+
let filtered = allSessions;
|
|
71
|
+
if (tags && Object.keys(tags).length > 0) {
|
|
72
|
+
filtered = filtered.filter((s) => {
|
|
73
|
+
const sessionTags = s.tags ?? {};
|
|
74
|
+
return Object.entries(tags).every(
|
|
75
|
+
([key, value]) => sessionTags[key] === value
|
|
76
|
+
);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
filtered.sort((a, b) => a.createdAt - b.createdAt);
|
|
80
|
+
return paginate({ items: filtered, cursor, limit });
|
|
81
|
+
},
|
|
82
|
+
"session.listBySandbox": async ({ sandboxId, tags, cursor, limit }) => {
|
|
83
|
+
const allSessions = await readAllFromDir(sessionDir);
|
|
84
|
+
let filtered = allSessions.filter((s) => s.sandboxId === sandboxId);
|
|
85
|
+
if (tags && Object.keys(tags).length > 0) {
|
|
86
|
+
filtered = filtered.filter((s) => {
|
|
87
|
+
const sessionTags = s.tags ?? {};
|
|
88
|
+
return Object.entries(tags).every(
|
|
89
|
+
([key, value]) => sessionTags[key] === value
|
|
90
|
+
);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
filtered.sort((a, b) => a.createdAt - b.createdAt);
|
|
94
|
+
return paginate({ items: filtered, cursor, limit });
|
|
95
|
+
},
|
|
96
|
+
"session.tag.set": async ({ sessionId, tags }) => {
|
|
97
|
+
const sessionPath = join(sessionDir, `${sessionId}.json`);
|
|
98
|
+
const existing = await readJson(sessionPath);
|
|
99
|
+
if (!existing) {
|
|
100
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
101
|
+
}
|
|
102
|
+
const mergedTags = { ...existing.tags, ...tags };
|
|
103
|
+
const now = Date.now();
|
|
104
|
+
const updatedSession = {
|
|
105
|
+
...existing,
|
|
106
|
+
tags: mergedTags,
|
|
107
|
+
updatedAt: now
|
|
108
|
+
};
|
|
109
|
+
await writeJsonFile(sessionPath, updatedSession);
|
|
110
|
+
return updatedSession;
|
|
111
|
+
},
|
|
112
|
+
"message.get": async ({ id }) => {
|
|
113
|
+
return await readJson(join(messageDir, `${id}.json`));
|
|
114
|
+
},
|
|
115
|
+
"message.set": async (message) => {
|
|
116
|
+
await writeJsonFile(join(messageDir, `${message.id}.json`), message);
|
|
117
|
+
return message;
|
|
118
|
+
},
|
|
119
|
+
"message.list": async ({ sessionId, cursor, limit }) => {
|
|
120
|
+
const allMessages = await readAllFromDir(messageDir);
|
|
121
|
+
const filtered = allMessages.filter((m) => m.sessionId === sessionId).sort((a, b) => a.createdAt - b.createdAt);
|
|
122
|
+
return paginate({ items: filtered, cursor, limit });
|
|
123
|
+
},
|
|
124
|
+
"part.listByMessage": async ({ messageId, cursor, limit }) => {
|
|
125
|
+
const allParts = await readAllFromDir(partDir);
|
|
126
|
+
const filtered = allParts.filter((p) => p.messageId === messageId).sort((a, b) => a.index - b.index);
|
|
127
|
+
return paginate({ items: filtered, cursor, limit });
|
|
128
|
+
},
|
|
129
|
+
"part.listBySession": async ({ sessionId, cursor, limit }) => {
|
|
130
|
+
const allParts = await readAllFromDir(partDir);
|
|
131
|
+
const filtered = allParts.filter((p) => p.sessionId === sessionId).sort((a, b) => {
|
|
132
|
+
if (a.messageId !== b.messageId) {
|
|
133
|
+
return a.messageId.localeCompare(b.messageId);
|
|
134
|
+
}
|
|
135
|
+
return a.index - b.index;
|
|
136
|
+
});
|
|
137
|
+
return paginate({ items: filtered, cursor, limit });
|
|
138
|
+
},
|
|
139
|
+
"part.set": async (part) => {
|
|
140
|
+
await writeJsonFile(join(partDir, `${part.id}.json`), part);
|
|
141
|
+
return part;
|
|
142
|
+
},
|
|
143
|
+
"part.delete": async ({ id }) => {
|
|
144
|
+
try {
|
|
145
|
+
await unlink(join(partDir, `${id}.json`));
|
|
146
|
+
} catch {
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"sandbox.get": async ({ key }) => {
|
|
150
|
+
const safeName = Buffer.from(key).toString("base64url");
|
|
151
|
+
const sandboxPath = join(sandboxDir, `${safeName}.json`);
|
|
152
|
+
const data = await readJson(sandboxPath);
|
|
153
|
+
if (!data) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
return data;
|
|
157
|
+
},
|
|
158
|
+
"sandbox.set": async (record) => {
|
|
159
|
+
const safeName = Buffer.from(record.id).toString("base64url");
|
|
160
|
+
const sandboxPath = join(sandboxDir, `${safeName}.json`);
|
|
161
|
+
const existing = await readJson(sandboxPath);
|
|
162
|
+
const newRecord = {
|
|
163
|
+
...record,
|
|
164
|
+
tags: record.tags ?? existing?.tags ?? null
|
|
165
|
+
};
|
|
166
|
+
await writeJsonFile(sandboxPath, newRecord);
|
|
167
|
+
},
|
|
168
|
+
"sandbox.list": async ({ tags, order, cursor, limit }) => {
|
|
169
|
+
const allSandboxes = await readAllFromDir(sandboxDir);
|
|
170
|
+
let filtered = allSandboxes;
|
|
171
|
+
if (tags && Object.keys(tags).length > 0) {
|
|
172
|
+
filtered = filtered.filter((s) => {
|
|
173
|
+
const sandboxTags = s.tags ?? {};
|
|
174
|
+
return Object.entries(tags).every(
|
|
175
|
+
([key, value]) => sandboxTags[key] === value
|
|
176
|
+
);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
const sortField = order?.startsWith("lastActivityAt") ? "lastActivityAt" : "createdAt";
|
|
180
|
+
const sortDir = order?.endsWith("_desc") ? -1 : 1;
|
|
181
|
+
filtered.sort(
|
|
182
|
+
(a, b) => sortDir * ((a[sortField] ?? 0) - (b[sortField] ?? 0))
|
|
183
|
+
);
|
|
184
|
+
return paginate({ items: filtered, cursor, limit });
|
|
185
|
+
},
|
|
186
|
+
"sandbox.tag.set": async ({ sandboxId, tags }) => {
|
|
187
|
+
const safeName = Buffer.from(sandboxId).toString("base64url");
|
|
188
|
+
const sandboxPath = join(sandboxDir, `${safeName}.json`);
|
|
189
|
+
const existing = await readJson(sandboxPath);
|
|
190
|
+
if (!existing) {
|
|
191
|
+
throw new Error(`Sandbox ${sandboxId} not found`);
|
|
192
|
+
}
|
|
193
|
+
const mergedTags = { ...existing.tags, ...tags };
|
|
194
|
+
const updatedSandbox = {
|
|
195
|
+
...existing,
|
|
196
|
+
tags: mergedTags
|
|
197
|
+
};
|
|
198
|
+
await writeJsonFile(sandboxPath, updatedSandbox);
|
|
199
|
+
return updatedSandbox;
|
|
200
|
+
},
|
|
201
|
+
"sandbox.getBySession": async ({ sessionId }) => {
|
|
202
|
+
const allSandboxes = await readAllFromDir(sandboxDir);
|
|
203
|
+
const matching = allSandboxes.filter(
|
|
204
|
+
(s) => s.id.startsWith(`${sessionId}-`)
|
|
205
|
+
);
|
|
206
|
+
if (matching.length === 0) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
matching.sort(
|
|
210
|
+
(a, b) => (b.lastActivityAt ?? 0) - (a.lastActivityAt ?? 0)
|
|
211
|
+
);
|
|
212
|
+
return matching[0];
|
|
213
|
+
},
|
|
214
|
+
"command.get": async ({ id }) => {
|
|
215
|
+
return await readJson(join(commandDir, `${id}.json`));
|
|
216
|
+
},
|
|
217
|
+
"command.set": async (command) => {
|
|
218
|
+
await writeJsonFile(join(commandDir, `${command.id}.json`), command);
|
|
219
|
+
return command;
|
|
220
|
+
},
|
|
221
|
+
"command.list": async ({ sessionId, includeFinished, cursor, limit }) => {
|
|
222
|
+
const allCommands = await readAllFromDir(commandDir);
|
|
223
|
+
let filtered = allCommands.filter((c) => c.sessionId === sessionId);
|
|
224
|
+
if (!includeFinished) {
|
|
225
|
+
filtered = filtered.filter((c) => c.status === "running");
|
|
226
|
+
}
|
|
227
|
+
filtered.sort((a, b) => a.startedAt - b.startedAt);
|
|
228
|
+
return paginate({ items: filtered, cursor, limit });
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
export {
|
|
233
|
+
createFilesystemHandlers
|
|
234
|
+
};
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvYmluZGluZ3MvbG9jYWwtZnMtaGFuZGxlcnMudHMiLCAiLi4vc3JjL3V0aWxzL3BhZ2luYXRlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHVubGluaywgd3JpdGVGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwYWdpbmF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9wYWdpbmF0ZVwiO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kLFxuICBIYW5kbGVycyxcbiAgTWVzc2FnZSxcbiAgUGFydCxcbiAgU2FuZGJveFJlY29yZCxcbiAgU2Vzc2lvbixcbn0gZnJvbSBcIi4uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWxlc3lzdGVtSGFuZGxlcnMoYmFzZVBhdGg6IHN0cmluZyk6IEhhbmRsZXJzIHtcbiAgY29uc3QgcmVzb2x2ZWRCYXNlID0gcmVzb2x2ZShiYXNlUGF0aCk7XG4gIGNvbnN0IHNlc3Npb25EaXIgPSBqb2luKHJlc29sdmVkQmFzZSwgXCJzZXNzaW9uXCIpO1xuICBjb25zdCBtZXNzYWdlRGlyID0gam9pbihyZXNvbHZlZEJhc2UsIFwibWVzc2FnZVwiKTtcbiAgY29uc3QgcGFydERpciA9IGpvaW4ocmVzb2x2ZWRCYXNlLCBcInBhcnRcIik7XG4gIGNvbnN0IHNhbmRib3hEaXIgPSBqb2luKHJlc29sdmVkQmFzZSwgXCJzYW5kYm94XCIpO1xuICBjb25zdCBjb21tYW5kRGlyID0gam9pbihyZXNvbHZlZEJhc2UsIFwiY29tbWFuZFwiKTtcblxuICBhc3luYyBmdW5jdGlvbiBlbnN1cmVEaXIoZGlyOiBzdHJpbmcpIHtcbiAgICBhd2FpdCBta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVhZEpzb248VD4oZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCBcInV0Zi04XCIpO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCkgYXMgVDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHdyaXRlSnNvbkZpbGUoZmlsZVBhdGg6IHN0cmluZywgZGF0YTogdW5rbm93bikge1xuICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKGZpbGVQYXRoKSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWFkQWxsRnJvbURpcjxUPihkaXI6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcihkaXIpO1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBmaWxlc1xuICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYuZW5kc1dpdGgoXCIuanNvblwiKSlcbiAgICAgICAgICAubWFwKChmKSA9PiByZWFkSnNvbjxUPihqb2luKGRpciwgZikpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXN1bHRzLmZpbHRlcigocik6IHIgaXMgTm9uTnVsbGFibGU8dHlwZW9mIHI+ID0+IHIgIT09IG51bGwpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uUGF0aCA9IGpvaW4oc2Vzc2lvbkRpciwgYCR7aWR9Lmpzb25gKTtcbiAgICAgIHJldHVybiAoYXdhaXQgcmVhZEpzb248U2Vzc2lvbj4oc2Vzc2lvblBhdGgpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24uc2V0XCI6IGFzeW5jIChzZXNzaW9uKSA9PiB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3Qgc2Vzc2lvblBhdGggPSBqb2luKHNlc3Npb25EaXIsIGAke3Nlc3Npb24uaWR9Lmpzb25gKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZEpzb248U2Vzc2lvbj4oc2Vzc2lvblBhdGgpO1xuICAgICAgY29uc3QgbmV3U2Vzc2lvbjogU2Vzc2lvbiA9IHtcbiAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgdGFnczogc2Vzc2lvbi50YWdzID8/IGV4aXN0aW5nPy50YWdzID8/IHt9LFxuICAgICAgICBjcmVhdGVkQXQ6IGV4aXN0aW5nPy5jcmVhdGVkQXQgPz8gc2Vzc2lvbi5jcmVhdGVkQXQgPz8gbm93LFxuICAgICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgIH07XG4gICAgICBhd2FpdCB3cml0ZUpzb25GaWxlKHNlc3Npb25QYXRoLCBuZXdTZXNzaW9uKTtcbiAgICAgIHJldHVybiBuZXdTZXNzaW9uO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24ubGlzdFwiOiBhc3luYyAoeyB0YWdzLCBjdXJzb3IsIGxpbWl0IH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbFNlc3Npb25zID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8U2Vzc2lvbj4oc2Vzc2lvbkRpcik7XG4gICAgICBsZXQgZmlsdGVyZWQgPSBhbGxTZXNzaW9ucztcbiAgICAgIGlmICh0YWdzICYmIE9iamVjdC5rZXlzKHRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoKHMpID0+IHtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uVGFncyA9IHMudGFncyA/PyB7fTtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGFncykuZXZlcnkoXG4gICAgICAgICAgICAoW2tleSwgdmFsdWVdKSA9PiBzZXNzaW9uVGFnc1trZXldID09PSB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWQuc29ydCgoYSwgYikgPT4gYS5jcmVhdGVkQXQgLSBiLmNyZWF0ZWRBdCk7XG4gICAgICByZXR1cm4gcGFnaW5hdGUoeyBpdGVtczogZmlsdGVyZWQsIGN1cnNvciwgbGltaXQgfSk7XG4gICAgfSxcblxuICAgIFwic2Vzc2lvbi5saXN0QnlTYW5kYm94XCI6IGFzeW5jICh7IHNhbmRib3hJZCwgdGFncywgY3Vyc29yLCBsaW1pdCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGxTZXNzaW9ucyA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPFNlc3Npb24+KHNlc3Npb25EaXIpO1xuICAgICAgbGV0IGZpbHRlcmVkID0gYWxsU2Vzc2lvbnMuZmlsdGVyKChzKSA9PiBzLnNhbmRib3hJZCA9PT0gc2FuZGJveElkKTtcbiAgICAgIGlmICh0YWdzICYmIE9iamVjdC5rZXlzKHRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoKHMpID0+IHtcbiAgICAgICAgICBjb25zdCBzZXNzaW9uVGFncyA9IHMudGFncyA/PyB7fTtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGFncykuZXZlcnkoXG4gICAgICAgICAgICAoW2tleSwgdmFsdWVdKSA9PiBzZXNzaW9uVGFnc1trZXldID09PSB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWQuc29ydCgoYSwgYikgPT4gYS5jcmVhdGVkQXQgLSBiLmNyZWF0ZWRBdCk7XG4gICAgICByZXR1cm4gcGFnaW5hdGUoeyBpdGVtczogZmlsdGVyZWQsIGN1cnNvciwgbGltaXQgfSk7XG4gICAgfSxcblxuICAgIFwic2Vzc2lvbi50YWcuc2V0XCI6IGFzeW5jICh7IHNlc3Npb25JZCwgdGFncyB9KSA9PiB7XG4gICAgICBjb25zdCBzZXNzaW9uUGF0aCA9IGpvaW4oc2Vzc2lvbkRpciwgYCR7c2Vzc2lvbklkfS5qc29uYCk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHJlYWRKc29uPFNlc3Npb24+KHNlc3Npb25QYXRoKTtcbiAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXNzaW9uICR7c2Vzc2lvbklkfSBub3QgZm91bmRgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1lcmdlZFRhZ3MgPSB7IC4uLmV4aXN0aW5nLnRhZ3MsIC4uLnRhZ3MgfTtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCB1cGRhdGVkU2Vzc2lvbjogU2Vzc2lvbiA9IHtcbiAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgIHRhZ3M6IG1lcmdlZFRhZ3MsXG4gICAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHdyaXRlSnNvbkZpbGUoc2Vzc2lvblBhdGgsIHVwZGF0ZWRTZXNzaW9uKTtcbiAgICAgIHJldHVybiB1cGRhdGVkU2Vzc2lvbjtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVhZEpzb248TWVzc2FnZT4oam9pbihtZXNzYWdlRGlyLCBgJHtpZH0uanNvbmApKTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLnNldFwiOiBhc3luYyAobWVzc2FnZSkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShqb2luKG1lc3NhZ2VEaXIsIGAke21lc3NhZ2UuaWR9Lmpzb25gKSwgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmxpc3RcIjogYXN5bmMgKHsgc2Vzc2lvbklkLCBjdXJzb3IsIGxpbWl0IH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbE1lc3NhZ2VzID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8TWVzc2FnZT4obWVzc2FnZURpcik7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGFsbE1lc3NhZ2VzXG4gICAgICAgIC5maWx0ZXIoKG0pID0+IG0uc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmNyZWF0ZWRBdCAtIGIuY3JlYXRlZEF0KTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0Lmxpc3RCeU1lc3NhZ2VcIjogYXN5bmMgKHsgbWVzc2FnZUlkLCBjdXJzb3IsIGxpbWl0IH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbFBhcnRzID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8UGFydD4ocGFydERpcik7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGFsbFBhcnRzXG4gICAgICAgIC5maWx0ZXIoKHApID0+IHAubWVzc2FnZUlkID09PSBtZXNzYWdlSWQpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgICByZXR1cm4gcGFnaW5hdGUoeyBpdGVtczogZmlsdGVyZWQsIGN1cnNvciwgbGltaXQgfSk7XG4gICAgfSxcblxuICAgIFwicGFydC5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCwgY3Vyc29yLCBsaW1pdCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGxQYXJ0cyA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPFBhcnQ+KHBhcnREaXIpO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBhbGxQYXJ0c1xuICAgICAgICAuZmlsdGVyKChwKSA9PiBwLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGlmIChhLm1lc3NhZ2VJZCAhPT0gYi5tZXNzYWdlSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhLm1lc3NhZ2VJZC5sb2NhbGVDb21wYXJlKGIubWVzc2FnZUlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybiBwYWdpbmF0ZSh7IGl0ZW1zOiBmaWx0ZXJlZCwgY3Vyc29yLCBsaW1pdCB9KTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LnNldFwiOiBhc3luYyAocGFydCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVKc29uRmlsZShqb2luKHBhcnREaXIsIGAke3BhcnQuaWR9Lmpzb25gKSwgcGFydCk7XG4gICAgICByZXR1cm4gcGFydDtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LmRlbGV0ZVwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB1bmxpbmsoam9pbihwYXJ0RGlyLCBgJHtpZH0uanNvbmApKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgaWYgZmlsZSBkb2Vzbid0IGV4aXN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogYXN5bmMgKHsga2V5IH0pID0+IHtcbiAgICAgIGNvbnN0IHNhZmVOYW1lID0gQnVmZmVyLmZyb20oa2V5KS50b1N0cmluZyhcImJhc2U2NHVybFwiKTtcbiAgICAgIGNvbnN0IHNhbmRib3hQYXRoID0gam9pbihzYW5kYm94RGlyLCBgJHtzYWZlTmFtZX0uanNvbmApO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRKc29uPFNhbmRib3hSZWNvcmQ+KHNhbmRib3hQYXRoKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guc2V0XCI6IGFzeW5jIChyZWNvcmQpID0+IHtcbiAgICAgIGNvbnN0IHNhZmVOYW1lID0gQnVmZmVyLmZyb20ocmVjb3JkLmlkKS50b1N0cmluZyhcImJhc2U2NHVybFwiKTtcbiAgICAgIGNvbnN0IHNhbmRib3hQYXRoID0gam9pbihzYW5kYm94RGlyLCBgJHtzYWZlTmFtZX0uanNvbmApO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkSnNvbjxTYW5kYm94UmVjb3JkPihzYW5kYm94UGF0aCk7XG4gICAgICBjb25zdCBuZXdSZWNvcmQ6IFNhbmRib3hSZWNvcmQgPSB7XG4gICAgICAgIC4uLnJlY29yZCxcbiAgICAgICAgdGFnczogcmVjb3JkLnRhZ3MgPz8gZXhpc3Rpbmc/LnRhZ3MgPz8gbnVsbCxcbiAgICAgIH07XG4gICAgICBhd2FpdCB3cml0ZUpzb25GaWxlKHNhbmRib3hQYXRoLCBuZXdSZWNvcmQpO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3gubGlzdFwiOiBhc3luYyAoeyB0YWdzLCBvcmRlciwgY3Vyc29yLCBsaW1pdCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGxTYW5kYm94ZXMgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxTYW5kYm94UmVjb3JkPihzYW5kYm94RGlyKTtcbiAgICAgIGxldCBmaWx0ZXJlZCA9IGFsbFNhbmRib3hlcztcbiAgICAgIGlmICh0YWdzICYmIE9iamVjdC5rZXlzKHRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoKHMpID0+IHtcbiAgICAgICAgICBjb25zdCBzYW5kYm94VGFncyA9IHMudGFncyA/PyB7fTtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGFncykuZXZlcnkoXG4gICAgICAgICAgICAoW2tleSwgdmFsdWVdKSA9PiBzYW5kYm94VGFnc1trZXldID09PSB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgc29ydEZpZWxkID0gb3JkZXI/LnN0YXJ0c1dpdGgoXCJsYXN0QWN0aXZpdHlBdFwiKVxuICAgICAgICA/IFwibGFzdEFjdGl2aXR5QXRcIlxuICAgICAgICA6IFwiY3JlYXRlZEF0XCI7XG4gICAgICBjb25zdCBzb3J0RGlyID0gb3JkZXI/LmVuZHNXaXRoKFwiX2Rlc2NcIikgPyAtMSA6IDE7XG4gICAgICBmaWx0ZXJlZC5zb3J0KFxuICAgICAgICAoYSwgYikgPT4gc29ydERpciAqICgoYVtzb3J0RmllbGRdID8/IDApIC0gKGJbc29ydEZpZWxkXSA/PyAwKSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gcGFnaW5hdGUoeyBpdGVtczogZmlsdGVyZWQsIGN1cnNvciwgbGltaXQgfSk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC50YWcuc2V0XCI6IGFzeW5jICh7IHNhbmRib3hJZCwgdGFncyB9KSA9PiB7XG4gICAgICBjb25zdCBzYWZlTmFtZSA9IEJ1ZmZlci5mcm9tKHNhbmRib3hJZCkudG9TdHJpbmcoXCJiYXNlNjR1cmxcIik7XG4gICAgICBjb25zdCBzYW5kYm94UGF0aCA9IGpvaW4oc2FuZGJveERpciwgYCR7c2FmZU5hbWV9Lmpzb25gKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVhZEpzb248U2FuZGJveFJlY29yZD4oc2FuZGJveFBhdGgpO1xuICAgICAgaWYgKCFleGlzdGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhbmRib3ggJHtzYW5kYm94SWR9IG5vdCBmb3VuZGApO1xuICAgICAgfVxuICAgICAgY29uc3QgbWVyZ2VkVGFncyA9IHsgLi4uZXhpc3RpbmcudGFncywgLi4udGFncyB9O1xuICAgICAgY29uc3QgdXBkYXRlZFNhbmRib3g6IFNhbmRib3hSZWNvcmQgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICB0YWdzOiBtZXJnZWRUYWdzLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHdyaXRlSnNvbkZpbGUoc2FuZGJveFBhdGgsIHVwZGF0ZWRTYW5kYm94KTtcbiAgICAgIHJldHVybiB1cGRhdGVkU2FuZGJveDtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsU2FuZGJveGVzID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8U2FuZGJveFJlY29yZD4oc2FuZGJveERpcik7XG4gICAgICBjb25zdCBtYXRjaGluZyA9IGFsbFNhbmRib3hlcy5maWx0ZXIoKHMpID0+XG4gICAgICAgIHMuaWQuc3RhcnRzV2l0aChgJHtzZXNzaW9uSWR9LWApXG4gICAgICApO1xuICAgICAgaWYgKG1hdGNoaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG1hdGNoaW5nLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiAoYi5sYXN0QWN0aXZpdHlBdCA/PyAwKSAtIChhLmxhc3RBY3Rpdml0eUF0ID8/IDApXG4gICAgICApO1xuICAgICAgcmV0dXJuIG1hdGNoaW5nWzBdO1xuICAgIH0sXG5cbiAgICBcImNvbW1hbmQuZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZWFkSnNvbjxDb21tYW5kPihqb2luKGNvbW1hbmREaXIsIGAke2lkfS5qc29uYCkpO1xuICAgIH0sXG5cbiAgICBcImNvbW1hbmQuc2V0XCI6IGFzeW5jIChjb21tYW5kKSA9PiB7XG4gICAgICBhd2FpdCB3cml0ZUpzb25GaWxlKGpvaW4oY29tbWFuZERpciwgYCR7Y29tbWFuZC5pZH0uanNvbmApLCBjb21tYW5kKTtcbiAgICAgIHJldHVybiBjb21tYW5kO1xuICAgIH0sXG5cbiAgICBcImNvbW1hbmQubGlzdFwiOiBhc3luYyAoeyBzZXNzaW9uSWQsIGluY2x1ZGVGaW5pc2hlZCwgY3Vyc29yLCBsaW1pdCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGxDb21tYW5kcyA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPENvbW1hbmQ+KGNvbW1hbmREaXIpO1xuICAgICAgbGV0IGZpbHRlcmVkID0gYWxsQ29tbWFuZHMuZmlsdGVyKChjKSA9PiBjLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICAgIGlmICghaW5jbHVkZUZpbmlzaGVkKSB7XG4gICAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChjKSA9PiBjLnN0YXR1cyA9PT0gXCJydW5uaW5nXCIpO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWQuc29ydCgoYSwgYikgPT4gYS5zdGFydGVkQXQgLSBiLnN0YXJ0ZWRBdCk7XG4gICAgICByZXR1cm4gcGFnaW5hdGUoeyBpdGVtczogZmlsdGVyZWQsIGN1cnNvciwgbGltaXQgfSk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IExpc3RSZXN1bHQgfSBmcm9tIFwiLi4vc3RvcmFnZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFnaW5hdGU8VCBleHRlbmRzIHsgaWQ6IHN0cmluZyB9PihvcHRzOiB7XG4gIGl0ZW1zOiBUW107XG4gIGN1cnNvcj86IHN0cmluZztcbiAgbGltaXQ/OiBudW1iZXI7XG59KTogTGlzdFJlc3VsdDxUPiB7XG4gIGNvbnN0IHsgaXRlbXMsIGN1cnNvciwgbGltaXQgfSA9IG9wdHM7XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSBjdXJzb3IgPyBpdGVtcy5maW5kSW5kZXgoKG0pID0+IG0uaWQgPT09IGN1cnNvcikgKyAxIDogMDtcbiAgY29uc3Qgc2xpY2VkID1cbiAgICBsaW1pdCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGl0ZW1zLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBsaW1pdClcbiAgICAgIDogaXRlbXMuc2xpY2Uoc3RhcnRJbmRleCk7XG4gIGNvbnN0IG5leHRDdXJzb3IgPVxuICAgIGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgc3RhcnRJbmRleCArIGxpbWl0IDwgaXRlbXMubGVuZ3RoXG4gICAgICA/IChzbGljZWQuYXQoLTEpPy5pZCA/PyBudWxsKVxuICAgICAgOiBudWxsO1xuICByZXR1cm4geyBpdGVtczogc2xpY2VkLCBuZXh0Q3Vyc29yIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7QUFBQSxTQUFTLE9BQU8sU0FBUyxVQUFVLFFBQVEsaUJBQWlCO0FBQzVELFNBQVMsU0FBUyxNQUFNLGVBQWU7OztBQ0NoQyxTQUFTLFNBQW1DLE1BSWpDO0FBQ2hCLFFBQU0sRUFBRSxPQUFPLFFBQVEsTUFBTSxJQUFJO0FBQ2pDLFFBQU0sYUFBYSxTQUFTLE1BQU0sVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLE1BQU0sSUFBSSxJQUFJO0FBQzFFLFFBQU0sU0FDSixVQUFVLFNBQ04sTUFBTSxNQUFNLFlBQVksYUFBYSxLQUFLLElBQzFDLE1BQU0sTUFBTSxVQUFVO0FBQzVCLFFBQU0sYUFDSixVQUFVLFVBQWEsYUFBYSxRQUFRLE1BQU0sU0FDN0MsT0FBTyxHQUFHLEVBQUUsR0FBRyxNQUFNLE9BQ3RCO0FBQ04sU0FBTyxFQUFFLE9BQU8sUUFBUSxXQUFXO0FBQ3JDOzs7QUROTyxTQUFTLHlCQUF5QixVQUE0QjtBQUNuRSxRQUFNLGVBQWUsUUFBUSxRQUFRO0FBQ3JDLFFBQU0sYUFBYSxLQUFLLGNBQWMsU0FBUztBQUMvQyxRQUFNLGFBQWEsS0FBSyxjQUFjLFNBQVM7QUFDL0MsUUFBTSxVQUFVLEtBQUssY0FBYyxNQUFNO0FBQ3pDLFFBQU0sYUFBYSxLQUFLLGNBQWMsU0FBUztBQUMvQyxRQUFNLGFBQWEsS0FBSyxjQUFjLFNBQVM7QUFFL0MsaUJBQWUsVUFBVSxLQUFhO0FBQ3BDLFVBQU0sTUFBTSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFBQSxFQUN0QztBQUVBLGlCQUFlLFNBQVksVUFBcUM7QUFDOUQsUUFBSTtBQUNGLFlBQU0sVUFBVSxNQUFNLFNBQVMsVUFBVSxPQUFPO0FBQ2hELGFBQU8sS0FBSyxNQUFNLE9BQU87QUFBQSxJQUMzQixRQUFRO0FBQ04sYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsaUJBQWUs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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type LoaderOptions = {
|
|
2
|
+
debug?: boolean;
|
|
3
|
+
};
|
|
4
|
+
type LoaderContext = {
|
|
5
|
+
resourcePath: string;
|
|
6
|
+
getOptions(): LoaderOptions;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Webpack/Turbopack loader that wires up agent.rpc by requiring steps.js
|
|
10
|
+
* at the END of the file. Using require() avoids import hoisting issues.
|
|
11
|
+
*/
|
|
12
|
+
declare function agentRpcLoader(this: LoaderContext, source: string): string;
|
|
13
|
+
|
|
14
|
+
export { agentRpcLoader as default };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type LoaderOptions = {
|
|
2
|
+
debug?: boolean;
|
|
3
|
+
};
|
|
4
|
+
type LoaderContext = {
|
|
5
|
+
resourcePath: string;
|
|
6
|
+
getOptions(): LoaderOptions;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Webpack/Turbopack loader that wires up agent.rpc by requiring steps.js
|
|
10
|
+
* at the END of the file. Using require() avoids import hoisting issues.
|
|
11
|
+
*/
|
|
12
|
+
declare function agentRpcLoader(this: LoaderContext, source: string): string;
|
|
13
|
+
|
|
14
|
+
export { agentRpcLoader as default };
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/next/loader.ts
|
|
31
|
+
var loader_exports = {};
|
|
32
|
+
__export(loader_exports, {
|
|
33
|
+
default: () => agentRpcLoader
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(loader_exports);
|
|
36
|
+
var path = __toESM(require("path"));
|
|
37
|
+
var import_core = require("@swc/core");
|
|
38
|
+
|
|
39
|
+
// package.json
|
|
40
|
+
var package_default = {
|
|
41
|
+
name: "experimental-agent",
|
|
42
|
+
version: "0.0.4",
|
|
43
|
+
main: "./dist/index.js",
|
|
44
|
+
module: "./dist/index.mjs",
|
|
45
|
+
types: "./dist/index.d.ts",
|
|
46
|
+
sideEffects: true,
|
|
47
|
+
license: "MIT",
|
|
48
|
+
files: [
|
|
49
|
+
"dist/**"
|
|
50
|
+
],
|
|
51
|
+
exports: {
|
|
52
|
+
".": {
|
|
53
|
+
types: "./dist/index.d.ts",
|
|
54
|
+
import: "./dist/index.mjs",
|
|
55
|
+
require: "./dist/index.js"
|
|
56
|
+
},
|
|
57
|
+
"./next": {
|
|
58
|
+
types: "./dist/next.d.ts",
|
|
59
|
+
import: "./dist/next.mjs",
|
|
60
|
+
require: "./dist/next.js"
|
|
61
|
+
},
|
|
62
|
+
"./next/loader": {
|
|
63
|
+
types: "./dist/next/loader.d.ts",
|
|
64
|
+
import: "./dist/next/loader.mjs",
|
|
65
|
+
require: "./dist/next/loader.js"
|
|
66
|
+
},
|
|
67
|
+
"./client": {
|
|
68
|
+
types: "./dist/client.d.ts",
|
|
69
|
+
import: "./dist/client.mjs",
|
|
70
|
+
require: "./dist/client.js"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
scripts: {
|
|
74
|
+
build: "tsup",
|
|
75
|
+
dev: "tsup --watch",
|
|
76
|
+
clean: "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
77
|
+
release: "pnpm build && npm publish",
|
|
78
|
+
typecheck: "tsc --noEmit",
|
|
79
|
+
test: "vitest run",
|
|
80
|
+
"test:watch": "vitest"
|
|
81
|
+
},
|
|
82
|
+
dependencies: {
|
|
83
|
+
"@hono/node-server": "^1.19.9",
|
|
84
|
+
"@swc/core": "^1.10.0",
|
|
85
|
+
"@vercel/oidc": "^3.1.0",
|
|
86
|
+
"better-all": "^0.0.5",
|
|
87
|
+
errore: "^0.8.2",
|
|
88
|
+
"fast-deep-equal": "^3.1.3",
|
|
89
|
+
glob: "^11.0.0",
|
|
90
|
+
hono: "^4.11.6",
|
|
91
|
+
sandbox: "^1.0.18",
|
|
92
|
+
ulid: "^3.0.2",
|
|
93
|
+
zod: "^4.3.6"
|
|
94
|
+
},
|
|
95
|
+
devDependencies: {
|
|
96
|
+
"@agent/tsconfig": "workspace:*",
|
|
97
|
+
"@types/node": "^20.11.24",
|
|
98
|
+
dotenv: "^17.2.3",
|
|
99
|
+
next: "^16.0.0",
|
|
100
|
+
tsup: "^8.0.2",
|
|
101
|
+
"type-fest": "^5.4.2",
|
|
102
|
+
typescript: "5.5.4",
|
|
103
|
+
vitest: "^3.0.0"
|
|
104
|
+
},
|
|
105
|
+
peerDependencies: {
|
|
106
|
+
ai: "^6.0.0",
|
|
107
|
+
workflow: "https://workflow-docs-7evupb64d.vercel.sh/workflow.tgz"
|
|
108
|
+
},
|
|
109
|
+
publishConfig: {
|
|
110
|
+
access: "public"
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// src/next/loader.ts
|
|
115
|
+
var PACKAGE_NAME = package_default.name;
|
|
116
|
+
var AGENT_PROTOCOL_VERSION = "v1";
|
|
117
|
+
var TYPESCRIPT_EXT_REGEX = /\.(ts|tsx|mts|cts)$/;
|
|
118
|
+
function agentRpcLoader(source) {
|
|
119
|
+
const { debug } = this.getOptions();
|
|
120
|
+
const log = debug ? (...args) => console.log("[agent-loader]", ...args) : () => void 0;
|
|
121
|
+
log("processing:", this.resourcePath);
|
|
122
|
+
if (!source.includes(PACKAGE_NAME)) {
|
|
123
|
+
log("skipping - no package name");
|
|
124
|
+
return source;
|
|
125
|
+
}
|
|
126
|
+
const filename = this.resourcePath;
|
|
127
|
+
const isTypeScript = TYPESCRIPT_EXT_REGEX.test(filename);
|
|
128
|
+
let ast;
|
|
129
|
+
try {
|
|
130
|
+
ast = (0, import_core.parseSync)(source, {
|
|
131
|
+
syntax: isTypeScript ? "typescript" : "ecmascript",
|
|
132
|
+
tsx: filename.endsWith(".tsx"),
|
|
133
|
+
jsx: filename.endsWith(".jsx")
|
|
134
|
+
});
|
|
135
|
+
} catch {
|
|
136
|
+
return source;
|
|
137
|
+
}
|
|
138
|
+
const agentExports = findAgentExports(ast);
|
|
139
|
+
if (agentExports.length === 0) {
|
|
140
|
+
log("skipping - no agent exports");
|
|
141
|
+
return source;
|
|
142
|
+
}
|
|
143
|
+
log("found agent exports:", agentExports);
|
|
144
|
+
const fileDir = path.dirname(filename);
|
|
145
|
+
const srcIndex = filename.lastIndexOf(`${path.sep}src${path.sep}`);
|
|
146
|
+
if (srcIndex === -1) {
|
|
147
|
+
log("skipping - no src dir found");
|
|
148
|
+
return source;
|
|
149
|
+
}
|
|
150
|
+
const srcDir = filename.substring(0, srcIndex + 4);
|
|
151
|
+
const appDir = path.join(srcDir, "app");
|
|
152
|
+
const stepsPath = path.join(
|
|
153
|
+
appDir,
|
|
154
|
+
".well-known",
|
|
155
|
+
"agent",
|
|
156
|
+
AGENT_PROTOCOL_VERSION,
|
|
157
|
+
"steps.js"
|
|
158
|
+
);
|
|
159
|
+
let relativePath = path.relative(fileDir, stepsPath).replace(/\\/g, "/");
|
|
160
|
+
if (!(relativePath.startsWith("./") || relativePath.startsWith("../"))) {
|
|
161
|
+
relativePath = `./${relativePath}`;
|
|
162
|
+
}
|
|
163
|
+
const initCalls = agentExports.map((name) => {
|
|
164
|
+
const initName = `__init${name[0].toUpperCase()}${name.slice(1)}`;
|
|
165
|
+
return `${initName}(${name});`;
|
|
166
|
+
}).join("\n");
|
|
167
|
+
const initImports = agentExports.map((name) => `__init${name[0].toUpperCase()}${name.slice(1)}`).join(", ");
|
|
168
|
+
log("injecting init calls for:", agentExports);
|
|
169
|
+
return `${source}
|
|
170
|
+
import { ${initImports} } from "${relativePath}";
|
|
171
|
+
${initCalls}`;
|
|
172
|
+
}
|
|
173
|
+
function findAgentExports(ast) {
|
|
174
|
+
let agentLocalName = null;
|
|
175
|
+
for (const item of ast.body) {
|
|
176
|
+
if (item.type === "ImportDeclaration" && item.source.value === PACKAGE_NAME) {
|
|
177
|
+
for (const specifier of item.specifiers) {
|
|
178
|
+
if (specifier.type === "ImportSpecifier") {
|
|
179
|
+
const imported = specifier.imported?.type === "Identifier" ? specifier.imported.value : specifier.local.value;
|
|
180
|
+
if (imported === "agent") {
|
|
181
|
+
agentLocalName = specifier.local.value;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (!agentLocalName) {
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
const exports = [];
|
|
192
|
+
for (const item of ast.body) {
|
|
193
|
+
if (item.type === "ExportDeclaration" && item.declaration) {
|
|
194
|
+
const decl = item.declaration;
|
|
195
|
+
if (decl.type === "VariableDeclaration") {
|
|
196
|
+
for (const declarator of decl.declarations) {
|
|
197
|
+
if (declarator.id.type === "Identifier" && declarator.init?.type === "CallExpression" && declarator.init.callee.type === "Identifier" && declarator.init.callee.value === agentLocalName) {
|
|
198
|
+
exports.push(declarator.id.value);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return exports;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL25leHQvbG9hZGVyLnRzIiwgIi4uLy4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyB0eXBlIE1vZHVsZSwgcGFyc2VTeW5jIH0gZnJvbSBcIkBzd2MvY29yZVwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vLi4vcGFja2FnZS5qc29uXCI7XG5cbnR5cGUgTG9hZGVyT3B0aW9ucyA9IHtcbiAgZGVidWc/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2FkZXJDb250ZXh0ID0ge1xuICByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgZ2V0T3B0aW9ucygpOiBMb2FkZXJPcHRpb25zO1xufTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gcGtnLm5hbWU7XG5jb25zdCBBR0VOVF9QUk9UT0NPTF9WRVJTSU9OID0gXCJ2MVwiO1xuY29uc3QgVFlQRVNDUklQVF9FWFRfUkVHRVggPSAvXFwuKHRzfHRzeHxtdHN8Y3RzKSQvO1xuXG4vKipcbiAqIFdlYnBhY2svVHVyYm9wYWNrIGxvYWRlciB0aGF0IHdpcmVzIHVwIGFnZW50LnJwYyBieSByZXF1aXJpbmcgc3RlcHMuanNcbiAqIGF0IHRoZSBFTkQgb2YgdGhlIGZpbGUuIFVzaW5nIHJlcXVpcmUoKSBhdm9pZHMgaW1wb3J0IGhvaXN0aW5nIGlzc3Vlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWdlbnRScGNMb2FkZXIoXG4gIHRoaXM6IExvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCB7IGRlYnVnIH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgY29uc3QgbG9nID0gZGVidWdcbiAgICA/ICguLi5hcmdzOiB1bmtub3duW10pID0+IGNvbnNvbGUubG9nKFwiW2FnZW50LWxvYWRlcl1cIiwgLi4uYXJncylcbiAgICA6ICgpID0+IHVuZGVmaW5lZDtcblxuICBsb2coXCJwcm9jZXNzaW5nOlwiLCB0aGlzLnJlc291cmNlUGF0aCk7XG5cbiAgaWYgKCFzb3VyY2UuaW5jbHVkZXMoUEFDS0FHRV9OQU1FKSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gcGFja2FnZSBuYW1lXCIpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucmVzb3VyY2VQYXRoO1xuICBjb25zdCBpc1R5cGVTY3JpcHQgPSBUWVBFU0NSSVBUX0VYVF9SRUdFWC50ZXN0KGZpbGVuYW1lKTtcblxuICBsZXQgYXN0OiBNb2R1bGU7XG4gIHRyeSB7XG4gICAgYXN0ID0gcGFyc2VTeW5jKHNvdXJjZSwge1xuICAgICAgc3ludGF4OiBpc1R5cGVTY3JpcHQgPyBcInR5cGVzY3JpcHRcIiA6IFwiZWNtYXNjcmlwdFwiLFxuICAgICAgdHN4OiBmaWxlbmFtZS5lbmRzV2l0aChcIi50c3hcIiksXG4gICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzeFwiKSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGNvbnN0IGFnZW50RXhwb3J0cyA9IGZpbmRBZ2VudEV4cG9ydHMoYXN0KTtcbiAgaWYgKGFnZW50RXhwb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coXCJza2lwcGluZyAtIG5vIGFnZW50IGV4cG9ydHNcIik7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGxvZyhcImZvdW5kIGFnZW50IGV4cG9ydHM6XCIsIGFnZW50RXhwb3J0cyk7XG5cbiAgLy8gQ2FsY3VsYXRlIHBhdGggdG8gc3RlcHMuanNcbiAgY29uc3QgZmlsZURpciA9IHBhdGguZGlybmFtZShmaWxlbmFtZSk7XG4gIGNvbnN0IHNyY0luZGV4ID0gZmlsZW5hbWUubGFzdEluZGV4T2YoYCR7cGF0aC5zZXB9c3JjJHtwYXRoLnNlcH1gKTtcbiAgaWYgKHNyY0luZGV4ID09PSAtMSkge1xuICAgIGxvZyhcInNraXBwaW5nIC0gbm8gc3JjIGRpciBmb3VuZFwiKTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc3JjRGlyID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIHNyY0luZGV4ICsgNCk7XG4gIGNvbnN0IGFwcERpciA9IHBhdGguam9pbihzcmNEaXIsIFwiYXBwXCIpO1xuICBjb25zdCBzdGVwc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgYXBwRGlyLFxuICAgIFwiLndlbGwta25vd25cIixcbiAgICBcImFnZW50XCIsXG4gICAgQUdFTlRfUFJPVE9DT0xfVkVSU0lPTixcbiAgICBcInN0ZXBzLmpzXCJcbiAgKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZmlsZURpciwgc3RlcHNQYXRoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcblxuICBpZiAoIShyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpIHx8IHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cblxuICAvLyBJbXBvcnQgdGhlIGluaXQgZnVuY3Rpb24gZnJvbSBzdGVwcy5qcyBhbmQgY2FsbCBpdCBmb3IgZWFjaCBhZ2VudFxuICAvLyBzdGVwcy5qcyBubyBsb25nZXIgaW1wb3J0cyB0aGUgYWdlbnQsIHNvIG5vIGNpcmN1bGFyIGRlcGVuZGVuY3lcbiAgY29uc3QgaW5pdENhbGxzID0gYWdlbnRFeHBvcnRzXG4gICAgLm1hcCgobmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW5pdE5hbWUgPSBgX19pbml0JHtuYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHtuYW1lLnNsaWNlKDEpfWA7XG4gICAgICByZXR1cm4gYCR7aW5pdE5hbWV9KCR7bmFtZX0pO2A7XG4gICAgfSlcbiAgICAuam9pbihcIlxcblwiKTtcblxuICBjb25zdCBpbml0SW1wb3J0cyA9IGFnZW50RXhwb3J0c1xuICAgIC5tYXAoKG5hbWUpID0+IGBfX2luaXQke25hbWVbMF0udG9VcHBlckNhc2UoKX0ke25hbWUuc2xpY2UoMSl9YClcbiAgICAuam9pbihcIiwgXCIpO1xuXG4gIGxvZyhcImluamVjdGluZyBpbml0IGNhbGxzIGZvcjpcIiwgYWdlbnRFeHBvcnRzKTtcbiAgcmV0dXJuIGAke3NvdXJjZX1cbmltcG9ydCB7ICR7aW5pdEltcG9ydHN9IH0gZnJvbSBcIiR7cmVsYXRpdmVQYXRofVwiO1xuJHtpbml0Q2FsbHN9YDtcbn1cblxuZnVuY3Rpb24gZmluZEFnZW50RXhwb3J0cyhhc3Q6IE1vZHVsZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGFnZW50TG9jYWxOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoXG4gICAgICBpdGVtLnR5cGUgPT09IFwiSW1wb3J0RGVjbGFyYXRpb25cIiAmJlxuICAgICAgaXRlbS5zb3VyY2UudmFsdWUgPT09IFBBQ0tBR0VfTkFNRVxuICAgICkge1xuICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2YgaXRlbS5zcGVjaWZpZXJzKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIudHlwZSA9PT0gXCJJbXBvcnRTcGVjaWZpZXJcIikge1xuICAgICAgICAgIGNvbnN0IGltcG9ydGVkID1cbiAgICAgICAgICAgIHNwZWNpZmllci5pbXBvcnRlZD8udHlwZSA9PT0gXCJJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgPyBzcGVjaWZpZXIuaW1wb3J0ZWQudmFsdWVcbiAgICAgICAgICAgICAgOiBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG5cbiAgICAgICAgICBpZiAoaW1wb3J0ZWQgPT09IFwiYWdlbnRcIikge1xuICAgICAgICAgICAgYWdlbnRMb2NhbE5hbWUgPSBzcGVjaWZpZXIubG9jYWwudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWFnZW50TG9jYWxOYW1lKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZXhwb3J0czogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXN0LmJvZHkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSBcIkV4cG9ydERlY2xhcmF0aW9uXCIgJiYgaXRlbS5kZWNsYXJhdGlvbikge1xuICAgICAgY29uc3QgZGVjbCA9IGl0ZW0uZGVjbGFyYXRpb247XG4gICAgICBpZiAoZGVjbC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIikge1xuICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0b3Igb2YgZGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmlkLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICAgICAgICBkZWNsYXJhdG9yLmluaXQ/LnR5cGUgPT09IFwiQ2FsbEV4cHJlc3Npb25cIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgICAgICAgICAgZGVjbGFyYXRvci5pbml0LmNhbGxlZS52YWx1ZSA9PT0gYWdlbnRMb2NhbE5hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaChkZWNsYXJhdG9yLmlkLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0cztcbn1cbiIsICJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjAuNFwiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9uZXh0Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQuanNcIlxuICAgIH0sXG4gICAgXCIuL25leHQvbG9hZGVyXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbmV4dC9sb2FkZXIuanNcIlxuICAgIH0sXG4gICAgXCIuL2NsaWVudFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2NsaWVudC5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9jbGllbnQubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvY2xpZW50LmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGhvbm8vbm9kZS1zZXJ2ZXJcIjogXCJeMS4xOS45XCIsXG4gICAgXCJAc3djL2NvcmVcIjogXCJeMS4xMC4wXCIsXG4gICAgXCJAdmVyY2VsL29pZGNcIjogXCJeMy4xLjBcIixcbiAgICBcImJldHRlci1hbGxcIjogXCJeMC4wLjVcIixcbiAgICBcImVycm9yZVwiOiBcIl4wLjguMlwiLFxuICAgIFwiZmFzdC1kZWVwLWVxdWFsXCI6IFwiXjMuMS4zXCIsXG4gICAgXCJnbG9iXCI6IFwiXjExLjAuMFwiLFxuICAgIFwiaG9ub1wiOiBcIl40LjExLjZcIixcbiAgICBcInNhbmRib3hcIjogXCJeMS4wLjE4XCIsXG4gICAgXCJ1bGlkXCI6IFwiXjMuMC4yXCIsXG4gICAgXCJ6b2RcIjogXCJeNC4zLjZcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYWdlbnQvdHNjb25maWdcIjogXCJ3b3Jrc3BhY2U6KlwiLFxuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjAuMTEuMjRcIixcbiAgICBcImRvdGVudlwiOiBcIl4xNy4yLjNcIixcbiAgICBcIm5leHRcIjogXCJeMTYuMC4wXCIsXG4gICAgXCJ0c3VwXCI6IFwiXjguMC4yXCIsXG4gICAgXCJ0eXBlLWZlc3RcIjogXCJeNS40LjJcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCI1LjUuNFwiLFxuICAgIFwidml0ZXN0XCI6IFwiXjMuMC4wXCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImFpXCI6IFwiXjYuMC4wXCIsXG4gICAgXCJ3b3JrZmxvd1wiOiBcImh0dHBzOi8vd29ya2Zsb3ctZG9jcy03ZXZ1cGI2NGQudmVyY2VsLnNoL3dvcmtmbG93LnRnelwiXG4gIH0sXG4gIFwicHVibGlzaENvbmZpZ1wiOiB7XG4gICAgXCJhY2Nlc3NcIjogXCJwdWJsaWNcIlxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FBc0I7QUFDdEIsa0JBQXVDOzs7QUNEdkM7QUFBQSxFQUNFLE1BQVE7QUFBQSxFQUNSLFNBQVc7QUFBQSxFQUNYLE1BQVE7QUFBQSxFQUNSLFFBQVU7QUFBQSxFQUNWLE9BQVM7QUFBQSxFQUNULGFBQWU7QUFBQSxFQUNmLFNBQVc7QUFBQSxFQUNYLE9BQVM7QUFBQSxJQUNQO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBVztBQUFBLElBQ1QsS0FBSztBQUFBLE1BQ0gsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxNQUNmLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxZQUFZO0FBQUEsTUFDVixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULE9BQVM7QUFBQSxJQUNULEtBQU87QUFBQSxJQUNQLE9BQVM7QUFBQSxJQUNULFNBQVc7QUFBQSxJQUNYLFdBQWE7QUFBQSxJQUNiLE1BQVE7QUFBQSxJQUNSLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0EsY0FBZ0I7QUFBQSxJQUNkLHFCQUFxQjtBQUFBLElBQ3JCLGFBQWE7QUFBQSxJQUNiLGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLFFBQVU7QUFBQSxJQUNWLG1CQUFtQjtBQUFBLElBQ25CLE1BQVE7QUFBQSxJQUNSLE1BQVE7QUFBQSxJQUNSLFNBQVc7QUFBQSxJQUNYLE1BQVE7QUFBQSxJQUNSLEtBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxpQkFBbUI7QUFBQSxJQUNqQixtQkFBbUI7QUFBQSxJQUNuQixlQUFlO0FBQUEsSUFDZixRQUFVO0FBQUEsSUFDVixNQUFRO0FBQUEsSUFDUixNQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsSUFDYixZQUFjO0FBQUEsSUFDZCxRQUFVO0FBQUEsRUFDWjtBQUFBLEVBQ0Esa0JBQW9CO0FBQUEsSUFDbEIsSUFBTTtBQUFBLElBQ04sVUFBWTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLGVBQWlCO0FBQUEsSUFDZixRQUFVO0FBQUEsRUFDWjtBQUNGOzs7QUQzREEsSUFBTSxlQUFlLGdCQUFJO0FBQ3pCLElBQU0seUJBQXlCO0FBQy9CLElBQU0sdUJBQXVCO0FBTWQsU0FBUixlQUVMLFFBQ1E7QUFDUixRQUFNLEVBQUUsTUFBTSxJQUFJLEtBQUssV0FBVztBQUNsQyxRQUFNLE1BQU0sUUFDUixJQUFJLFNBQW9CLFFBQVEsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLElBQzdELE1BQU07QUFFVixNQUFJLGVBQWUsS0FBSyxZQUFZO0FBRXBDLE1BQUksQ0FBQyxPQUFPLFNBQVMsWUFBWSxHQUFHO0FBQ2xDLFFBQUksNEJBQTRCO0FBQ2hDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxXQUFXLEtBQUs7QUFDdEIsUUFBTSxlQUFlLHFCQUFxQixLQUFLLFFBQVE7QUFFdkQsTUFBSTtBQUNKLE1BQUk7QUFDRixjQUFNLHVCQUFVLFFBQVE7QUFBQSxNQUN0QixRQUFRLGVBQWUsZUFBZTtBQUFBLE1BQ3RDLEtBQUssU0FBUyxTQUFTLE1BQU07QUFBQSxNQUM3QixLQUFLLFNBQVMsU0FBUyxNQUFNO0FBQUEsSUFDL0IsQ0FBQztBQUFBLEVBQ0gsUUFBUTtBQUNOLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxlQUFlLGlCQUFpQixHQUFHO0FBQ3pDLE1BQUksYUFBYSxXQUFXLEdBQUc7QUFDN0IsUUFBSSw2QkFBNkI7QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLHdCQUF3QixZQUFZO0FBR3hDLFFBQU0sVUFBZSxhQUFRLFFBQVE7QUFDckMsUUFBTSxXQUFXLFNBQVMsWUFBWSxHQUFRLFFBQUcsTUFBVyxRQUFHLEVBQUU7QUFDakUsTUFBSSxhQUFhLElBQUk7QUFDbkIsUUFBSSw2QkFBNkI7QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsU0FBUyxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBQ2pELFFBQU0sU0FBYyxVQUFLLFFBQVEsS0FBSztBQUN0QyxRQUFNLFlBQWlCO0FBQUEsSUFDckI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNBLE1BQUksZUFBb0IsY0FBUyxTQUFTLFNBQVMsRUFBRSxRQUFRLE9BQU8sR0FBRztBQUV2RSxNQUFJLEVBQUUsYUFBYSxXQUFXLElBQUksS0FBSyxhQUFhLFdBQVcsS0FBSyxJQUFJO0FBQ3RFLG1CQUFlLEtBQUssWUFBWTtBQUFBLEVBQ2xDO0FBSUEsUUFBTSxZQUFZLGFBQ2YsSUFBSSxDQUFDLFNBQVM7QUFDYixVQUFNLFdBQVcsU0FBUyxLQUFLLENBQUMsRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELFdBQU8sR0FBRyxRQUFRLElBQUksSUFBSTtBQUFBLEVBQzVCLENBQUMsRUFDQSxLQUFLLElBQUk7QUFFWixRQUFNLGNBQWMsYUFDakIsSUFBSSxDQUFDLFNBQVMsU0FBUyxLQUFLLENBQUMsRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDOUQsS0FBSyxJQUFJO0FBRVosTUFBSSw2QkFBNkIsWUFBWTtBQUM3QyxTQUFPLEdBQUcsTUFBTTtBQUFBLFdBQ1AsV0FBVyxZQUFZLFlBQVk7QUFBQSxFQUM1QyxTQUFTO0FBQ1g7QUFFQSxTQUFTLGlCQUFpQixLQUF1QjtBQUMvQyxNQUFJLGlCQUFnQztBQUVwQyxhQUFXLFFBQVEsSUFBSSxNQUFNO0FBQzNCLFFBQ0UsS0FBSyxTQUFTLHVCQUNkLEtBQUssT0FBTyxVQUFVLGNBQ3RCO0FBQ0EsaUJBQVcsYUFBYSxLQUFLLFlBQVk7QUFDdkMsWUFBSSxVQUFVLFNBQVMsbUJBQW1CO0FBQ3hDLGdCQUFNLFdBQ0osVUFBVSxVQUFVLFNBQVMsZUFDekIsVUFBVSxTQUFTLFFBQ25CLFVBQVUsTUFBTTtBQUV0QixjQUFJLGFBQWEsU0FBUztBQUN4Qiw2QkFBaUIsVUFBVSxNQUFNO0FBQ2pDO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLENBQUMsZ0JBQWdCO0FBQ25CLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxRQUFNLFVBQW9CLENBQUM7QUFFM0IsYUFBVyxRQUFRLElBQUksTUFBTTtBQUMzQixRQUFJLEtBQUssU0FBUyx1QkFBdUIsS0FBSyxhQUFhO0FBQ3pELFlBQU0sT0FBTyxLQUFLO0FBQ2xCLFVBQUksS0FBSyxTQUFTLHVCQUF1QjtBQUN2QyxtQkFBVyxjQUFjLEtBQUssY0FBYztBQUMxQyxjQUNFLFdBQVcsR0FBRyxTQUFTLGdCQUN2QixXQUFXLE1BQU0sU0FBUyxvQkFDMUIsV0FBVyxLQUFLLE9BQU8sU0FBUyxnQkFDaEMsV0FBVyxLQUFLLE9BQU8sVUFBVSxnQkFDakM7QUFDQSxvQkFBUSxLQUFLLFdBQVcsR0FBRyxLQUFLO0FBQUEsVUFDbEM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
|