aws-runtime-bridge 1.9.0 → 1.9.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.
Files changed (84) hide show
  1. package/dist/adapter/AcodeSdkAdapter.d.ts +2 -0
  2. package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
  3. package/dist/adapter/AcodeSdkAdapter.js +84 -18
  4. package/dist/adapter/AcodeSdkAdapter.test.js +275 -13
  5. package/dist/adapter/acode-tool-names.d.ts +16 -0
  6. package/dist/adapter/acode-tool-names.d.ts.map +1 -0
  7. package/dist/adapter/acode-tool-names.js +37 -0
  8. package/dist/adapter/acode-tool-names.test.d.ts +2 -0
  9. package/dist/adapter/acode-tool-names.test.d.ts.map +1 -0
  10. package/dist/adapter/acode-tool-names.test.js +28 -0
  11. package/dist/adapter/types.d.ts +22 -3
  12. package/dist/adapter/types.d.ts.map +1 -1
  13. package/dist/adapter/types.js +2 -1
  14. package/dist/routes/git.d.ts +10 -0
  15. package/dist/routes/git.d.ts.map +1 -1
  16. package/dist/routes/git.js +37 -3
  17. package/dist/routes/git.test.js +47 -1
  18. package/dist/routes/sessions.d.ts +1 -1
  19. package/dist/routes/sessions.d.ts.map +1 -1
  20. package/dist/routes/sessions.js +11 -4
  21. package/dist/routes/sessions.test.js +3 -0
  22. package/dist/routes/terminal.d.ts +28 -8
  23. package/dist/routes/terminal.d.ts.map +1 -1
  24. package/dist/routes/terminal.js +260 -44
  25. package/dist/routes/terminal.stop-options.test.d.ts +2 -0
  26. package/dist/routes/terminal.stop-options.test.d.ts.map +1 -0
  27. package/dist/routes/terminal.stop-options.test.js +39 -0
  28. package/dist/routes/terminal.test.js +87 -4
  29. package/dist/services/session-output.d.ts +5 -0
  30. package/dist/services/session-output.d.ts.map +1 -1
  31. package/package/acode/dist/built-in-file-tools.d.ts +5 -1
  32. package/package/acode/dist/built-in-file-tools.d.ts.map +1 -1
  33. package/package/acode/dist/built-in-file-tools.js +14 -203
  34. package/package/acode/dist/builtins/commandArtifacts.d.ts +25 -0
  35. package/package/acode/dist/builtins/commandArtifacts.d.ts.map +1 -0
  36. package/package/acode/dist/builtins/commandArtifacts.js +77 -0
  37. package/package/acode/dist/builtins/commandOutputEvents.d.ts +21 -0
  38. package/package/acode/dist/builtins/commandOutputEvents.d.ts.map +1 -0
  39. package/package/acode/dist/builtins/commandOutputEvents.js +56 -0
  40. package/package/acode/dist/builtins/shellCommandPreparation.d.ts +15 -0
  41. package/package/acode/dist/builtins/shellCommandPreparation.d.ts.map +1 -0
  42. package/package/acode/dist/builtins/shellCommandPreparation.js +44 -0
  43. package/package/acode/dist/builtins/shellCommandResult.d.ts +30 -0
  44. package/package/acode/dist/builtins/shellCommandResult.d.ts.map +1 -0
  45. package/package/acode/dist/builtins/shellCommandResult.js +71 -0
  46. package/package/acode/dist/builtins/shellCommandRunner.d.ts +14 -0
  47. package/package/acode/dist/builtins/shellCommandRunner.d.ts.map +1 -0
  48. package/package/acode/dist/builtins/shellCommandRunner.js +114 -0
  49. package/package/acode/dist/builtins/shellOutputDecoder.d.ts +5 -0
  50. package/package/acode/dist/builtins/shellOutputDecoder.d.ts.map +1 -0
  51. package/package/acode/dist/builtins/shellOutputDecoder.js +30 -0
  52. package/package/acode/dist/mcpToolNames.d.ts +11 -0
  53. package/package/acode/dist/mcpToolNames.d.ts.map +1 -0
  54. package/package/acode/dist/mcpToolNames.js +17 -0
  55. package/package/acode/dist/runtime.d.ts +19 -0
  56. package/package/acode/dist/runtime.d.ts.map +1 -1
  57. package/package/acode/dist/runtime.js +233 -35
  58. package/package/acode/dist/types.d.ts +1 -1
  59. package/package/acode/dist/types.d.ts.map +1 -1
  60. package/package/acode/package.json +1 -1
  61. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +3 -3
  62. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
  63. package/package/aws-client-agent-mcp/dist/mcp-server.js +10 -7
  64. package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
  65. package/package/aws-client-agent-mcp/dist/mcp-server.test.js +47 -0
  66. package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -1
  67. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +1 -36
  68. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
  69. package/package/aws-client-agent-mcp/dist/mcp-tools.js +3 -169
  70. package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
  71. package/package/aws-client-agent-mcp/dist/mcp-tools.test.d.ts +2 -0
  72. package/package/aws-client-agent-mcp/dist/mcp-tools.test.d.ts.map +1 -0
  73. package/package/aws-client-agent-mcp/dist/mcp-tools.test.js +45 -0
  74. package/package/aws-client-agent-mcp/dist/mcp-tools.test.js.map +1 -0
  75. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +11 -0
  76. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts.map +1 -0
  77. package/package/aws-client-agent-mcp/dist/memory-tools.js +144 -0
  78. package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -0
  79. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +1 -1
  80. package/package/aws-client-agent-mcp/dist/websocket-client.js +1 -0
  81. package/package/aws-client-agent-mcp/dist/websocket-client.js.map +1 -1
  82. package/package/aws-client-agent-mcp/dist/websocket-client.test.js +43 -3
  83. package/package/aws-client-agent-mcp/dist/websocket-client.test.js.map +1 -1
  84. package/package.json +1 -1
@@ -0,0 +1,14 @@
1
+ import { type CommandOutputEvent, type CommandOutputSink } from "./commandOutputEvents.js";
2
+ import { type ShellCommandResult } from "./shellCommandResult.js";
3
+ export type { CommandOutputEvent, CommandOutputSink };
4
+ export interface RunShellCommandOptions {
5
+ readonly commandText: string;
6
+ readonly workspaceRoot: string;
7
+ readonly cwd: string;
8
+ readonly timeoutMs: number;
9
+ readonly inactivityTimeoutMs: number;
10
+ readonly onOutput?: CommandOutputSink;
11
+ }
12
+ export type { ShellCommandResult };
13
+ export declare function runShellCommand(options: RunShellCommandOptions): Promise<ShellCommandResult>;
14
+ //# sourceMappingURL=shellCommandRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellCommandRunner.d.ts","sourceRoot":"","sources":["../../src/builtins/shellCommandRunner.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEtB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EAEN,KAAK,kBAAkB,EACvB,MAAM,yBAAyB,CAAC;AAMjC,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CACtC;AAED,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAInC,wBAAsB,eAAe,CACpC,OAAO,EAAE,sBAAsB,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CAqH7B"}
@@ -0,0 +1,114 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createOutputEventCollector, } from "./commandOutputEvents.js";
3
+ import { prepareShellCommand, shellExecutable, } from "./shellCommandPreparation.js";
4
+ import { resolveClosedShellCommand, } from "./shellCommandResult.js";
5
+ import { createShellOutputDecoder, decodeShellOutputChunk, } from "./shellOutputDecoder.js";
6
+ const KILL_ESCALATION_DELAY_MS = 1000;
7
+ export async function runShellCommand(options) {
8
+ const shell = shellExecutable();
9
+ const prepared = await prepareShellCommand(options.commandText, options.workspaceRoot, shell);
10
+ return new Promise((resolve, reject) => {
11
+ const startedAt = new Date();
12
+ const child = spawn(shell.command, [...shell.argsPrefix, prepared.commandText], {
13
+ cwd: options.cwd,
14
+ env: process.env,
15
+ windowsVerbatimArguments: process.platform === "win32",
16
+ windowsHide: true,
17
+ });
18
+ const outputEvents = createOutputEventCollector({
19
+ cwd: options.cwd,
20
+ commandLineCount: prepared.commandLineCount,
21
+ commandFilePath: prepared.commandFilePath,
22
+ onOutput: options.onOutput,
23
+ });
24
+ let stdout = "";
25
+ let stderr = "";
26
+ let timedOut = false;
27
+ let inactivityTimedOut = false;
28
+ let killEscalationTimer;
29
+ let inactivityTimer;
30
+ const stdoutDecoder = createShellOutputDecoder();
31
+ const stderrDecoder = createShellOutputDecoder();
32
+ const clearTimers = () => {
33
+ if (inactivityTimer)
34
+ clearTimeout(inactivityTimer);
35
+ if (killEscalationTimer)
36
+ clearTimeout(killEscalationTimer);
37
+ inactivityTimer = undefined;
38
+ killEscalationTimer = undefined;
39
+ };
40
+ const escalateKill = () => {
41
+ if (killEscalationTimer)
42
+ return;
43
+ killEscalationTimer = setTimeout(() => {
44
+ if (!child.killed) {
45
+ child.kill("SIGKILL");
46
+ }
47
+ }, KILL_ESCALATION_DELAY_MS);
48
+ killEscalationTimer.unref?.();
49
+ };
50
+ const timer = setTimeout(() => {
51
+ timedOut = true;
52
+ child.kill("SIGTERM");
53
+ escalateKill();
54
+ }, options.timeoutMs);
55
+ timer.unref?.();
56
+ const resetInactivityTimer = () => {
57
+ if (inactivityTimer)
58
+ clearTimeout(inactivityTimer);
59
+ inactivityTimer = setTimeout(() => {
60
+ inactivityTimedOut = true;
61
+ timedOut = true;
62
+ child.kill("SIGTERM");
63
+ escalateKill();
64
+ }, options.inactivityTimeoutMs);
65
+ inactivityTimer.unref?.();
66
+ };
67
+ resetInactivityTimer();
68
+ const appendStdout = (text) => {
69
+ if (!text)
70
+ return;
71
+ stdout += text;
72
+ outputEvents.push("stdout", text);
73
+ resetInactivityTimer();
74
+ };
75
+ const appendStderr = (text) => {
76
+ if (!text)
77
+ return;
78
+ stderr += text;
79
+ outputEvents.push("stderr", text);
80
+ resetInactivityTimer();
81
+ };
82
+ child.stdout?.on("data", (chunk) => {
83
+ appendStdout(decodeShellOutputChunk(stdoutDecoder, chunk));
84
+ });
85
+ child.stderr?.on("data", (chunk) => {
86
+ appendStderr(decodeShellOutputChunk(stderrDecoder, chunk));
87
+ });
88
+ child.on("error", (error) => {
89
+ clearTimeout(timer);
90
+ clearTimers();
91
+ outputEvents.close();
92
+ reject(error);
93
+ });
94
+ child.on("close", (exitCode, signal) => {
95
+ clearTimeout(timer);
96
+ clearTimers();
97
+ appendStdout(decodeShellOutputChunk(stdoutDecoder, undefined, true));
98
+ appendStderr(decodeShellOutputChunk(stderrDecoder, undefined, true));
99
+ outputEvents.close();
100
+ void resolveClosedShellCommand({
101
+ exitCode,
102
+ signal,
103
+ stdout,
104
+ stderr,
105
+ startedAt,
106
+ timedOut,
107
+ inactivityTimedOut,
108
+ prepared,
109
+ workspaceRoot: options.workspaceRoot,
110
+ cwd: options.cwd,
111
+ }).then(resolve, reject);
112
+ });
113
+ });
114
+ }
@@ -0,0 +1,5 @@
1
+ import { TextDecoder } from "node:util";
2
+ export declare function resolveShellOutputEncoding(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string;
3
+ export declare function createShellOutputDecoder(encoding?: string): TextDecoder;
4
+ export declare function decodeShellOutputChunk(decoder: TextDecoder, chunk?: Buffer, end?: boolean): string;
5
+ //# sourceMappingURL=shellOutputDecoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellOutputDecoder.d.ts","sourceRoot":"","sources":["../../src/builtins/shellOutputDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAKxC,wBAAgB,0BAA0B,CACzC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,MAAM,CAUR;AAED,wBAAgB,wBAAwB,CACvC,QAAQ,SAA+B,GACrC,WAAW,CAMb;AAED,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,UAAQ,GACT,MAAM,CAQR"}
@@ -0,0 +1,30 @@
1
+ import { TextDecoder } from "node:util";
2
+ const DEFAULT_WINDOWS_SHELL_OUTPUT_ENCODING = "gb18030";
3
+ const DEFAULT_SHELL_OUTPUT_ENCODING = "utf-8";
4
+ export function resolveShellOutputEncoding(platform = process.platform, env = process.env) {
5
+ const configuredEncoding = env.ACODE_COMMAND_OUTPUT_ENCODING?.trim() ||
6
+ env.AWS_TERMINAL_OUTPUT_ENCODING?.trim();
7
+ if (configuredEncoding) {
8
+ return configuredEncoding;
9
+ }
10
+ return platform === "win32"
11
+ ? DEFAULT_WINDOWS_SHELL_OUTPUT_ENCODING
12
+ : DEFAULT_SHELL_OUTPUT_ENCODING;
13
+ }
14
+ export function createShellOutputDecoder(encoding = resolveShellOutputEncoding()) {
15
+ try {
16
+ return new TextDecoder(encoding, { fatal: false });
17
+ }
18
+ catch {
19
+ return new TextDecoder(DEFAULT_SHELL_OUTPUT_ENCODING, { fatal: false });
20
+ }
21
+ }
22
+ export function decodeShellOutputChunk(decoder, chunk, end = false) {
23
+ if (end) {
24
+ return decoder.decode();
25
+ }
26
+ if (!chunk || chunk.length === 0) {
27
+ return "";
28
+ }
29
+ return decoder.decode(chunk, { stream: true });
30
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Main flow: normalize common MCP separators, then use the final segment as
3
+ * the semantic tool name that controls timeout policy.
4
+ */
5
+ export declare function getSemanticToolName(toolName: string): string;
6
+ /**
7
+ * Main flow: classify only exact polling tool names so similarly named tools
8
+ * keep the regular MCP timeout.
9
+ */
10
+ export declare function isMcpPollingToolName(toolName: string): boolean;
11
+ //# sourceMappingURL=mcpToolNames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpToolNames.d.ts","sourceRoot":"","sources":["../src/mcpToolNames.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D"}
@@ -0,0 +1,17 @@
1
+ const POLLING_TOOL_NAMES = new Set(["poll_message", "get_message"]);
2
+ /**
3
+ * Main flow: normalize common MCP separators, then use the final segment as
4
+ * the semantic tool name that controls timeout policy.
5
+ */
6
+ export function getSemanticToolName(toolName) {
7
+ const normalized = toolName.trim().toLowerCase();
8
+ const segments = normalized.split(/__|[./]/).filter(Boolean);
9
+ return segments.at(-1) ?? normalized;
10
+ }
11
+ /**
12
+ * Main flow: classify only exact polling tool names so similarly named tools
13
+ * keep the regular MCP timeout.
14
+ */
15
+ export function isMcpPollingToolName(toolName) {
16
+ return POLLING_TOOL_NAMES.has(getSemanticToolName(toolName));
17
+ }
@@ -3,12 +3,15 @@ import type { ACodeRuntimeConfig } from "./types.js";
3
3
  export declare class ACodeRuntime extends EventEmitter {
4
4
  private readonly config;
5
5
  private readonly hookBus;
6
+ private initialConversation;
6
7
  private state;
7
8
  private abortController;
8
9
  private submitQueue;
9
10
  private activeTurn;
10
11
  private abortRequested;
11
12
  private sessionCompleteEmitted;
13
+ private contextVersion;
14
+ private readonly stopWaiters;
12
15
  constructor(config: ACodeRuntimeConfig);
13
16
  private emitAcodeEvent;
14
17
  /**
@@ -23,6 +26,12 @@ export declare class ACodeRuntime extends EventEmitter {
23
26
  * MCP tool call 则执行工具并继续同一轮,最后输出 assistant 文本与 usage。
24
27
  */
25
28
  submit(message: string): Promise<void>;
29
+ /**
30
+ * Reset only the conversation context while keeping the live ACode session,
31
+ * MCP connections, exposed tools, commands, and hooks available.
32
+ */
33
+ resetContext(): Promise<void>;
34
+ private isTurnSuperseded;
26
35
  private executeSubmit;
27
36
  /** 中止当前轮次;由执行轮次统一发出一个终态事件,避免 aborted/failed 双终态。 */
28
37
  abort(): Promise<void>;
@@ -34,6 +43,16 @@ export declare class ACodeRuntime extends EventEmitter {
34
43
  private readChatCompletionStream;
35
44
  private handleToolCalls;
36
45
  private callMcpToolWithTimeout;
46
+ /**
47
+ * Build a one-shot waiter that rejects long-running MCP calls when the runtime stops.
48
+ * Main flow: register a stop callback -> race it with the SDK call -> remove it after either side settles.
49
+ */
50
+ private createRuntimeStopWaiter;
51
+ /**
52
+ * Notify and clear every pending runtime-stop waiter.
53
+ * Main flow: snapshot callbacks -> clear the set -> reject each pending MCP race exactly once.
54
+ */
55
+ private notifyRuntimeStop;
37
56
  private appendSyntheticMultimodalUserMessage;
38
57
  private appendToolFailureResult;
39
58
  private connectMcpServers;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB3C,OAAO,KAAK,EAOV,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAuoCpB,qBAAa,YAAa,SAAQ,YAAY;IAmChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAlCnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IAEvC,OAAO,CAAC,KAAK,CAoBX;IAEF,OAAO,CAAC,eAAe,CAAgC;IAEvD,OAAO,CAAC,WAAW,CAAoC;IAEvD,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,sBAAsB,CAAS;gBAEV,MAAM,EAAE,kBAAkB;IAevD,OAAO,CAAC,cAAc;IAatB;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyF5B;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAM9B,aAAa;IA2E3B,oDAAoD;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,uCAAuC;IACjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3B,OAAO,CAAC,kBAAkB;YAaZ,YAAY;YAoEZ,qBAAqB;YA4JrB,wBAAwB;YA6ExB,eAAe;YAoJf,sBAAsB;YAqCtB,oCAAoC;IAkBlD,OAAO,CAAC,uBAAuB;YAuBjB,iBAAiB;IA2C/B,OAAO,CAAC,kBAAkB;YA2BZ,oBAAoB;CAiBnC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkB3C,OAAO,KAAK,EAOV,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAksCpB,qBAAa,YAAa,SAAQ,YAAY;IAsChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IArCnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,mBAAmB,CAAqB;IAEhD,OAAO,CAAC,KAAK,CAoBX;IAEF,OAAO,CAAC,eAAe,CAAgC;IAEvD,OAAO,CAAC,WAAW,CAAoC;IAEvD,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;gBAExB,MAAM,EAAE,kBAAkB;IAevD,OAAO,CAAC,cAAc;IAatB;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2F5B;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS5C;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAWnC,OAAO,CAAC,gBAAgB;YAIV,aAAa;IA6F3B,oDAAoD;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,uCAAuC;IACjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B3B,OAAO,CAAC,kBAAkB;YAaZ,YAAY;YAoFZ,qBAAqB;YAuKrB,wBAAwB;YA8ExB,eAAe;YAuMf,sBAAsB;IA6CpC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAiC/B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;YAQX,oCAAoC;IAsBlD,OAAO,CAAC,uBAAuB;YAuBjB,iBAAiB;IA2C/B,OAAO,CAAC,kBAAkB;YA2BZ,oBAAoB;CAiBnC"}