@nuvin/agent-core 0.3.1-rc.2 → 0.4.0-rc.3
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/VERSION +2 -2
- package/dist/agent/index.js +1 -1
- package/dist/chunk-6FBVJKFJ.js +1 -0
- package/dist/chunk-CVOXBVKH.js +1 -0
- package/dist/chunk-D5IVWJHX.js +1 -1
- package/dist/chunk-EQGBU73Q.js +1 -1
- package/dist/chunk-GAZGO6N7.js +1 -1
- package/dist/chunk-IUZALP6K.js +1 -1
- package/dist/chunk-LIE76IJA.js +1 -1
- package/dist/chunk-X7VAACWY.js +1 -1
- package/dist/chunk-YNOIG4FD.js +1 -1
- package/dist/formats/index.js +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/isolate/index.js +1 -1
- package/dist/models/index.js +1 -1
- package/dist/shared/bash-completion-visibility.d.ts +9 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.js +1 -1
- package/dist/shared/types.d.ts +39 -3
- package/dist/tools/core/runtime-manager-tools.d.ts +48 -2
- package/dist/tools/file-editing/bash-artifact-read.d.ts +13 -0
- package/dist/tools/file-editing/file-read-tool.d.ts +1 -0
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/shell/background-bash-controller.d.ts +20 -17
- package/dist/tools/shell/background-bash-process.d.ts +2 -10
- package/dist/tools/shell/bash-artifact.d.ts +62 -0
- package/dist/tools/shell/bash-tool.d.ts +21 -7
- package/package.json +2 -2
- package/dist/chunk-FFIZ6TKW.js +0 -1
- package/dist/chunk-IMXQOWD3.js +0 -1
- package/dist/tools/shell/bash-output-tool.d.ts +0 -21
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { ChildProcess } from "node:child_process";
|
|
2
|
+
import type { BashArtifactCapture, BashArtifactPublication, BashArtifactRef } from "./bash-artifact.ts";
|
|
2
3
|
export type BackgroundBashStartRequest = Readonly<{
|
|
4
|
+
toolCallId: string;
|
|
5
|
+
artifact: BashArtifactCapture;
|
|
3
6
|
command: string;
|
|
4
7
|
description: string;
|
|
5
8
|
cwd: string;
|
|
@@ -9,6 +12,7 @@ export type BackgroundBashStartRequest = Readonly<{
|
|
|
9
12
|
}>;
|
|
10
13
|
export type BackgroundBashAttachInput = Readonly<{
|
|
11
14
|
child: ChildProcess;
|
|
15
|
+
artifact: BashArtifactCapture;
|
|
12
16
|
description: string;
|
|
13
17
|
commandPreview: string;
|
|
14
18
|
cwd: string;
|
|
@@ -18,6 +22,12 @@ export type BackgroundBashAttached = Readonly<{
|
|
|
18
22
|
pid: number | null;
|
|
19
23
|
}>;
|
|
20
24
|
export type BackgroundBashTerminalResult = Readonly<{
|
|
25
|
+
bashArtifactVersion: 1;
|
|
26
|
+
artifact: BashArtifactPublication;
|
|
27
|
+
processStarted: boolean;
|
|
28
|
+
closeConfirmed: boolean;
|
|
29
|
+
terminationConfirmed: boolean;
|
|
30
|
+
finishedAt: number;
|
|
21
31
|
status: "exited" | "killed" | "error";
|
|
22
32
|
exitCode: number | null;
|
|
23
33
|
signal: string | null;
|
|
@@ -31,7 +41,14 @@ export type BackgroundBashStartErrorCode = "background-start-cancelled" | "backg
|
|
|
31
41
|
/** Stable detached-only start failure that never exposes provider or OS error text. */
|
|
32
42
|
export declare class BackgroundBashStartError extends Error {
|
|
33
43
|
readonly code: BackgroundBashStartErrorCode;
|
|
34
|
-
|
|
44
|
+
readonly correlation?: (BashArtifactRef & Readonly<{
|
|
45
|
+
shellId: string;
|
|
46
|
+
attemptId: string;
|
|
47
|
+
}>) | undefined;
|
|
48
|
+
constructor(code: BackgroundBashStartErrorCode, correlation?: (BashArtifactRef & Readonly<{
|
|
49
|
+
shellId: string;
|
|
50
|
+
attemptId: string;
|
|
51
|
+
}>) | undefined);
|
|
35
52
|
}
|
|
36
53
|
export type BackgroundBashInspection = Readonly<{
|
|
37
54
|
description: string;
|
|
@@ -51,17 +68,6 @@ export type BackgroundBashInspection = Readonly<{
|
|
|
51
68
|
forceRequested: boolean;
|
|
52
69
|
errorCode?: string;
|
|
53
70
|
}>;
|
|
54
|
-
export type BackgroundBashReadResult = Readonly<{
|
|
55
|
-
shellId: string;
|
|
56
|
-
offset: number;
|
|
57
|
-
nextOffset: number;
|
|
58
|
-
output: string;
|
|
59
|
-
status: "running" | "exited" | "killed" | "error";
|
|
60
|
-
exitCode: number | null;
|
|
61
|
-
signal: string | null;
|
|
62
|
-
truncated: boolean;
|
|
63
|
-
totalDropped: number;
|
|
64
|
-
}>;
|
|
65
71
|
export type BackgroundBashTerminationResult = Readonly<{
|
|
66
72
|
shellId: string;
|
|
67
73
|
outcome: "killed" | "already-terminal" | "failed";
|
|
@@ -73,15 +79,12 @@ export type BackgroundBashTerminationResult = Readonly<{
|
|
|
73
79
|
forceRequested: boolean;
|
|
74
80
|
}>;
|
|
75
81
|
export interface BackgroundBashController {
|
|
76
|
-
start(request: BackgroundBashStartRequest): Promise<Readonly<{
|
|
82
|
+
start(request: BackgroundBashStartRequest): Promise<BashArtifactRef & Readonly<{
|
|
77
83
|
shellId: string;
|
|
84
|
+
attemptId: string;
|
|
78
85
|
pid: number | null;
|
|
79
86
|
status: "running";
|
|
80
87
|
}>>;
|
|
81
|
-
read(request: Readonly<{
|
|
82
|
-
shellId: string;
|
|
83
|
-
offset?: number;
|
|
84
|
-
}>): Promise<BackgroundBashReadResult>;
|
|
85
88
|
kill(shellId: string): Promise<BackgroundBashTerminationResult>;
|
|
86
89
|
}
|
|
87
90
|
//# sourceMappingURL=background-bash-controller.d.ts.map
|
|
@@ -25,6 +25,8 @@ export declare class BackgroundBashProcessStore {
|
|
|
25
25
|
terminate(workId: string, signalAdapter?: ProcessTreeSignalAdapter, forceIfUnconfirmed?: boolean): Promise<BackgroundBashTerminationResult>;
|
|
26
26
|
release(workId: string): void;
|
|
27
27
|
private requestTermination;
|
|
28
|
+
private requestSignal;
|
|
29
|
+
private classifyClose;
|
|
28
30
|
private confirmed;
|
|
29
31
|
private failed;
|
|
30
32
|
private terminationResult;
|
|
@@ -36,14 +38,4 @@ export declare class BackgroundBashProcessStore {
|
|
|
36
38
|
private evict;
|
|
37
39
|
private entry;
|
|
38
40
|
}
|
|
39
|
-
export declare function filterBackgroundBashOutput(input: Readonly<{
|
|
40
|
-
output: string;
|
|
41
|
-
offset: number;
|
|
42
|
-
nextOffset: number;
|
|
43
|
-
status: "running" | "exited" | "killed" | "error";
|
|
44
|
-
regex?: string;
|
|
45
|
-
}>): Readonly<{
|
|
46
|
-
output: string;
|
|
47
|
-
nextOffset: number;
|
|
48
|
-
}>;
|
|
49
41
|
//# sourceMappingURL=background-bash-process.d.ts.map
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export declare const BASH_OUTPUT_MAX_BYTES = 67108864;
|
|
2
|
+
export type BashArtifactOwner = Readonly<{
|
|
3
|
+
profile: string;
|
|
4
|
+
workspace: string;
|
|
5
|
+
sessionId: string;
|
|
6
|
+
}>;
|
|
7
|
+
export type BashArtifactDestination = Readonly<{
|
|
8
|
+
owner: BashArtifactOwner;
|
|
9
|
+
sessionDir: string;
|
|
10
|
+
}>;
|
|
11
|
+
export type BashExecutionState = "starting" | "running" | "terminating" | "exited" | "killed" | "error" | "abandoned";
|
|
12
|
+
export type BashCaptureState = "capturing" | "complete" | "truncated" | "error" | "interrupted";
|
|
13
|
+
export type BashArtifactRef = Readonly<{
|
|
14
|
+
artifactId: string;
|
|
15
|
+
outputPath: string;
|
|
16
|
+
statusPath: string;
|
|
17
|
+
}>;
|
|
18
|
+
export type BashExecutionSnapshot = Readonly<{
|
|
19
|
+
state: BashExecutionState;
|
|
20
|
+
exitCode: number | null;
|
|
21
|
+
signal: string | null;
|
|
22
|
+
errorCode: string | null;
|
|
23
|
+
finishedAt: number | null;
|
|
24
|
+
}>;
|
|
25
|
+
export type BashArtifactStatus = BashArtifactRef & BashExecutionSnapshot & Readonly<{
|
|
26
|
+
version: 1;
|
|
27
|
+
owner: BashArtifactOwner;
|
|
28
|
+
toolCallId: string;
|
|
29
|
+
shellId?: string;
|
|
30
|
+
captureState: BashCaptureState;
|
|
31
|
+
bytesRetained: number;
|
|
32
|
+
maxBytes: 67108864;
|
|
33
|
+
truncated: boolean;
|
|
34
|
+
captureErrorCode: string | null;
|
|
35
|
+
startedAt: number;
|
|
36
|
+
updatedAt: number;
|
|
37
|
+
}>;
|
|
38
|
+
export type BashArtifactPublication = Readonly<{
|
|
39
|
+
status: BashArtifactStatus;
|
|
40
|
+
statusErrorCode: string | null;
|
|
41
|
+
}>;
|
|
42
|
+
export interface BashArtifactCapture {
|
|
43
|
+
readonly ref: BashArtifactRef;
|
|
44
|
+
/** Pass per-stream decoded text in arrival order; pause that source until this
|
|
45
|
+
* resolves. One outstanding append per source bounds caller-owned input too.
|
|
46
|
+
* Capture failures/capping resolve normally so both pipes can keep draining. */
|
|
47
|
+
append(stream: "stdout" | "stderr", decoded: string): Promise<void>;
|
|
48
|
+
/** Stops admission, drains accepted appends and closes output; idempotent. */
|
|
49
|
+
flush(): Promise<void>;
|
|
50
|
+
/** Terminal snapshots require flush. Storage failure returns statusErrorCode;
|
|
51
|
+
* the disk file is then last-known, while status contains current memory facts. */
|
|
52
|
+
publish(execution: BashExecutionSnapshot, shellId?: string): Promise<BashArtifactPublication>;
|
|
53
|
+
/** Marks released unfinished capture abandoned, never claims an OS kill. */
|
|
54
|
+
interrupt(): Promise<BashArtifactPublication>;
|
|
55
|
+
}
|
|
56
|
+
export declare function isBashArtifactStatus(value: unknown): value is BashArtifactStatus;
|
|
57
|
+
export declare function writeBashArtifactStatus(status: BashArtifactStatus): Promise<void>;
|
|
58
|
+
export declare function createBashArtifact(input: Readonly<{
|
|
59
|
+
destination: BashArtifactDestination;
|
|
60
|
+
toolCallId: string;
|
|
61
|
+
}>): Promise<BashArtifactCapture>;
|
|
62
|
+
//# sourceMappingURL=bash-artifact.d.ts.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BashExecutionTarget, ToolExecutionContext } from "../../shared/types.ts";
|
|
2
2
|
import { type BackgroundBashController } from "./background-bash-controller.ts";
|
|
3
|
+
import { type BashArtifactCapture, type BashArtifactDestination } from "./bash-artifact.ts";
|
|
3
4
|
export interface BashToolInput {
|
|
4
5
|
command: string;
|
|
5
6
|
description: string;
|
|
@@ -21,9 +22,20 @@ export interface BashToolOptions {
|
|
|
21
22
|
scrubEnvKeys?: readonly string[];
|
|
22
23
|
scrubEnvPrefixes?: readonly string[];
|
|
23
24
|
backgroundController?: BackgroundBashController;
|
|
24
|
-
|
|
25
|
+
artifactDestination?: () => BashArtifactDestination | undefined;
|
|
26
|
+
outputBudgetBytes?: number;
|
|
27
|
+
backgroundCapability?: "foreground-only" | "interactive-main";
|
|
28
|
+
trackForegroundExecution?: (execution: BashForegroundExecution) => void;
|
|
29
|
+
verifyExecution?: (target: BashExecutionTarget, authorization: unknown, ctx: ToolExecutionContext, phase?: "preflight" | "final") => Promise<void> | void;
|
|
25
30
|
}
|
|
26
31
|
export declare function resolveBashExecutionTarget(input: Pick<BashToolInput, "command" | "cwd" | "runInBackground">, options?: Pick<BashToolOptions, "allowedDirs" | "defaultCwd" | "shellPath">): BashExecutionTarget;
|
|
32
|
+
export interface BashForegroundExecution {
|
|
33
|
+
readonly artifact: BashArtifactCapture;
|
|
34
|
+
/** Confirmed child close, capture flush, and final status publication. */
|
|
35
|
+
readonly settled: Promise<void>;
|
|
36
|
+
/** Bounded process-tree escalation; rejects when close cannot be confirmed. */
|
|
37
|
+
terminate(reason: unknown): Promise<void>;
|
|
38
|
+
}
|
|
27
39
|
export declare function createBashTool(options?: BashToolOptions): import("../../shared/types.ts").ToolDefinition<{
|
|
28
40
|
description: string;
|
|
29
41
|
command: string;
|
|
@@ -34,7 +46,11 @@ export declare function createBashTool(options?: BashToolOptions): import("../..
|
|
|
34
46
|
outputRegex?: string | undefined;
|
|
35
47
|
}, string, import("../../shared/types.ts").ToolOutputEnvelope, {
|
|
36
48
|
type: "object";
|
|
49
|
+
additionalProperties: false;
|
|
37
50
|
properties: {
|
|
51
|
+
runInBackground?: {
|
|
52
|
+
type: "boolean";
|
|
53
|
+
} | undefined;
|
|
38
54
|
command: {
|
|
39
55
|
type: "string";
|
|
40
56
|
};
|
|
@@ -55,9 +71,6 @@ export declare function createBashTool(options?: BashToolOptions): import("../..
|
|
|
55
71
|
type: "string";
|
|
56
72
|
description: string;
|
|
57
73
|
};
|
|
58
|
-
runInBackground: {
|
|
59
|
-
type: "boolean";
|
|
60
|
-
};
|
|
61
74
|
};
|
|
62
75
|
required: readonly ["command", "description"];
|
|
63
76
|
}>;
|
|
@@ -71,7 +84,11 @@ export declare function createShellExecTool(options?: BashToolOptions): import("
|
|
|
71
84
|
outputRegex?: string | undefined;
|
|
72
85
|
}, string, import("../../shared/types.ts").ToolOutputEnvelope, {
|
|
73
86
|
type: "object";
|
|
87
|
+
additionalProperties: false;
|
|
74
88
|
properties: {
|
|
89
|
+
runInBackground?: {
|
|
90
|
+
type: "boolean";
|
|
91
|
+
} | undefined;
|
|
75
92
|
command: {
|
|
76
93
|
type: "string";
|
|
77
94
|
};
|
|
@@ -92,9 +109,6 @@ export declare function createShellExecTool(options?: BashToolOptions): import("
|
|
|
92
109
|
type: "string";
|
|
93
110
|
description: string;
|
|
94
111
|
};
|
|
95
|
-
runInBackground: {
|
|
96
|
-
type: "boolean";
|
|
97
|
-
};
|
|
98
112
|
};
|
|
99
113
|
required: readonly ["command", "description"];
|
|
100
114
|
}>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nuvin/agent-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0-rc.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Core agent, model, format, and tool primitives for Nuvin",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"tsup": "^8.5.1",
|
|
57
57
|
"typescript": "^6.0.2",
|
|
58
58
|
"vitest": "^4.1.2",
|
|
59
|
-
"@nuvin/config": "0.4.1-rc.
|
|
59
|
+
"@nuvin/config": "0.4.1-rc.2"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
62
|
"@anthropic-ai/sdk": "^0.82.0",
|
package/dist/chunk-FFIZ6TKW.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function _0x2935(){var _0x108afa=['ndqZntHqBfLvB1q','mZbPzgn5Deq','mtK5ntmZnwL1Eu9fqW','mZa3mtyXngLZDw5SBa','BwvZC2fNzq','nJu5ndH5vNfwq3q','ody1ndC5nM1rCvz2sW','nKnMwwjTra','C3rHDgu','odHJrvfZEuC','ndqYnJq3rvHKqxr2','mtjTDgrTuw0','mti5t05Ly25n','BMfTzq','nZqYotCZAK1ZBKvN','vhvYBKzHAwXLzevYCM9Y'];_0x2935=function(){return _0x108afa;};return _0x2935();}(function(_0x55e94c,_0x366b4d){var _0x3c9bd7={_0x5b2662:0x235,_0x35a9b2:0x22d,_0x172ac6:0x243,_0x2e692e:0x234,_0x3a80c2:0x149,_0x24028b:0x148,_0x483b3e:0x139,_0x202458:0x140,_0x390a2e:0x148,_0x12b4e8:0x153,_0x50e35c:0x14a,_0x123537:0x14a,_0x2620e9:0x237,_0x3e182f:0x23e,_0x41503b:0x233,_0x40fffa:0x23a,_0x307b7b:0x145,_0x325c30:0x14d,_0x53949a:0x232,_0x22dab3:0x230,_0x4388c7:0x141,_0x5c4b94:0x245,_0x5a1cc3:0x235},_0x309d4c={_0x31630d:0x30d},_0x3c0b6=_0x55e94c();function _0x1f0a57(_0x153d38,_0x39abb3,_0x502361,_0x537eff){return _0x5931(_0x502361- -_0x309d4c._0x31630d,_0x153d38);}function _0x2eb6f2(_0x2eed00,_0x3922f7,_0x59826d,_0x1cc856){return _0x5931(_0x59826d-0x71,_0x2eed00);}while(!![]){try{var _0x4fadf2=-parseInt(_0x1f0a57(-0x22c,-_0x3c9bd7._0x5b2662,-0x233,-_0x3c9bd7._0x35a9b2))/0x1*(-parseInt(_0x1f0a57(-0x239,-_0x3c9bd7._0x172ac6,-0x23c,-_0x3c9bd7._0x2e692e))/0x2)+-parseInt(_0x2eb6f2(_0x3c9bd7._0x3a80c2,0x144,0x147,_0x3c9bd7._0x24028b))/0x3*(-parseInt(_0x2eb6f2(_0x3c9bd7._0x483b3e,0x140,_0x3c9bd7._0x202458,_0x3c9bd7._0x390a2e))/0x4)+parseInt(_0x2eb6f2(_0x3c9bd7._0x12b4e8,_0x3c9bd7._0x50e35c,0x14d,_0x3c9bd7._0x123537))/0x5*(-parseInt(_0x1f0a57(-0x23a,-_0x3c9bd7._0x2620e9,-0x238,-_0x3c9bd7._0x3e182f))/0x6)+parseInt(_0x1f0a57(-_0x3c9bd7._0x41503b,-_0x3c9bd7._0x2e692e,-0x230,-0x236))/0x7+parseInt(_0x1f0a57(-0x23c,-0x23a,-_0x3c9bd7._0x40fffa,-_0x3c9bd7._0x2620e9))/0x8*(parseInt(_0x2eb6f2(0x141,0x149,_0x3c9bd7._0x307b7b,_0x3c9bd7._0x325c30))/0x9)+-parseInt(_0x1f0a57(-0x22f,-0x22f,-_0x3c9bd7._0x53949a,-_0x3c9bd7._0x22dab3))/0xa*(-parseInt(_0x2eb6f2(_0x3c9bd7._0x3a80c2,0x142,0x149,_0x3c9bd7._0x4388c7))/0xb)+-parseInt(_0x1f0a57(-_0x3c9bd7._0x5c4b94,-_0x3c9bd7._0x5a1cc3,-0x23d,-0x242))/0xc;if(_0x4fadf2===_0x366b4d)break;else _0x3c0b6['push'](_0x3c0b6['shift']());}catch(_0x278586){_0x3c0b6['push'](_0x3c0b6['shift']());}}}(_0x2935,0x7b504));var TurnFailedError=class extends Error{[_0x21ed4f(0x44d,0x452,0x44d,0x44e)];constructor(_0x420a6a,_0x1091f2){var _0x4ada62={_0x18dc2f:0x161,_0x25ffb1:0x15b,_0x4cab35:0x168,_0x2e3400:0x16a,_0x264a91:0x163,_0x7b9048:0x179,_0x4a2d03:0x16d,_0x58d5ce:0x169},_0x4ecdbb={_0x234e63:0x49},_0x2c0bef={_0x3cd494:0x1a8,_0x4cc1f4:0x13d};super(_0x420a6a instanceof Error?_0x420a6a[_0x23c692(-_0x4ada62._0x18dc2f,-_0x4ada62._0x25ffb1,-0x15c,-0x162)]:'Turn\x20failed',{'cause':_0x420a6a});function _0x409c9b(_0x78b3f4,_0x37dc7a,_0x111418,_0x3c1c5a){return _0x21ed4f(_0x78b3f4-_0x2c0bef._0x3cd494,_0x37dc7a-_0x2c0bef._0x4cc1f4,_0x37dc7a,_0x111418- -0x2e4);}function _0x23c692(_0x31fc54,_0xe4b202,_0x425bd8,_0x42b817){return _0x21ed4f(_0x31fc54-_0x4ecdbb._0x234e63,_0xe4b202-0x1bb,_0x425bd8,_0x31fc54- -0x5bb);}this[_0x23c692(-_0x4ada62._0x4cab35,-_0x4ada62._0x2e3400,-_0x4ada62._0x264a91,-0x166)]=_0x409c9b(_0x4ada62._0x7b9048,0x178,0x171,0x179),this[_0x23c692(-_0x4ada62._0x4a2d03,-0x16f,-0x167,-_0x4ada62._0x58d5ce)]=_0x1091f2;}};function _0x21ed4f(_0x205d29,_0x2c2e27,_0x51b765,_0x557d15){return _0x5931(_0x557d15-0x37c,_0x51b765);}function _0x5931(_0x447b27,_0x446dbc){_0x447b27=_0x447b27-0xcf;var _0x2935cf=_0x2935();var _0x593170=_0x2935cf[_0x447b27];if(_0x5931['iZWtec']===undefined){var _0x551251=function(_0x34c044){var _0x4461d7='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x420a6a='',_0x1091f2='';for(var _0x2aee2a=0x0,_0x35f826,_0x512634,_0xa04995=0x0;_0x512634=_0x34c044['charAt'](_0xa04995++);~_0x512634&&(_0x35f826=_0x2aee2a%0x4?_0x35f826*0x40+_0x512634:_0x512634,_0x2aee2a++%0x4)?_0x420a6a+=String['fromCharCode'](0xff&_0x35f826>>(-0x2*_0x2aee2a&0x6)):0x0){_0x512634=_0x4461d7['indexOf'](_0x512634);}for(var _0x446631=0x0,_0x49392d=_0x420a6a['length'];_0x446631<_0x49392d;_0x446631++){_0x1091f2+='%'+('00'+_0x420a6a['charCodeAt'](_0x446631)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1091f2);};_0x5931['PZhiQg']=_0x551251,_0x5931['gWpSDr']={},_0x5931['iZWtec']=!![];}var _0x34a48e=_0x2935cf[0x0],_0x48ed94=_0x447b27+_0x34a48e,_0x59ae94=_0x5931['gWpSDr'][_0x48ed94];return!_0x59ae94?(_0x593170=_0x5931['PZhiQg'](_0x593170),_0x5931['gWpSDr'][_0x48ed94]=_0x593170):_0x593170=_0x59ae94,_0x593170;}export{TurnFailedError};
|