@excitedjs/agent-runtime-claude-code 0.6.1-beta.205 → 0.7.0-alpha.g13b5c64f637b
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 +92 -44
- package/dist/config.d.ts +2 -2
- package/dist/rpc.d.ts +27 -93
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +181 -369
- package/dist/rpc.js.map +1 -1
- package/dist/runtime-activity.d.ts +33 -0
- package/dist/runtime-activity.d.ts.map +1 -0
- package/dist/{runtime-submissions.js → runtime-activity.js} +25 -118
- package/dist/runtime-activity.js.map +1 -0
- package/dist/runtime-session.d.ts +6 -2
- package/dist/runtime-session.d.ts.map +1 -1
- package/dist/runtime-session.js +20 -11
- package/dist/runtime-session.js.map +1 -1
- package/dist/runtime.d.ts +3 -14
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +37 -152
- package/dist/runtime.js.map +1 -1
- package/dist/stream.d.ts +7 -3
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +20 -11
- package/dist/stream.js.map +1 -1
- package/dist/supervisor.d.ts.map +1 -1
- package/dist/supervisor.js +24 -33
- package/dist/supervisor.js.map +1 -1
- package/dist/types.d.ts +26 -17
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -5
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
- package/dist/admission-classify.d.ts +0 -7
- package/dist/admission-classify.d.ts.map +0 -1
- package/dist/admission-classify.js +0 -17
- package/dist/admission-classify.js.map +0 -1
- package/dist/runtime-submissions.d.ts +0 -58
- package/dist/runtime-submissions.d.ts.map +0 -1
- package/dist/runtime-submissions.js.map +0 -1
package/README.md
CHANGED
|
@@ -7,68 +7,116 @@ The built-in **Claude Code** Agent Runtime provider for
|
|
|
7
7
|
It implements the public `AgentRuntimeProvider` contract from
|
|
8
8
|
[`@excitedjs/dreamux-types`](../../dreamux-types) against a resident `claude`
|
|
9
9
|
stream-json child: process supervision, the stream-json wire protocol (line
|
|
10
|
-
framing,
|
|
11
|
-
|
|
10
|
+
framing, result aggregation, control-request replies), pending-request idle
|
|
11
|
+
deadlines, MCP config translation (`--mcp-config`), teammate completion delivery
|
|
12
12
|
as a plain user turn, bounded native transcript pagination, and Claude Code
|
|
13
13
|
doctor diagnostics.
|
|
14
14
|
|
|
15
15
|
## Boundary
|
|
16
16
|
|
|
17
|
-
This package
|
|
17
|
+
This package uses `@excitedjs/dreamux-types` and shared `@excitedjs/dreamux-utils`.
|
|
18
|
+
It never imports
|
|
18
19
|
`@excitedjs/dreamux` core. Everything host-specific — per-dispatcher paths, the
|
|
19
20
|
durable state sink, the process `PATH` seeded from the host package bins — is
|
|
20
21
|
supplied by the Dreamux host through the neutral `AgentRuntimeCreateContext` and
|
|
21
22
|
the provider factory options. The package owns only Claude Code engine mechanics
|
|
22
23
|
and its own runtime config parsing; it reconstructs no Dreamux host
|
|
23
|
-
layout/path/log contracts.
|
|
24
|
-
|
|
24
|
+
layout/path/log contracts. Shared process supervision and state-write fencing
|
|
25
|
+
come from `@excitedjs/dreamux-utils`.
|
|
25
26
|
|
|
26
27
|
## Loading
|
|
27
28
|
|
|
28
|
-
Dreamux core resolves `builtin:claude-code`
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
default-exports a generic provider-loader factory, so
|
|
29
|
+
Dreamux core resolves `builtin:claude-code` through the generic provider loader
|
|
30
|
+
and supplies host contracts through the neutral create context. The package
|
|
31
|
+
default-exports that provider factory, so
|
|
32
32
|
`loadExternalAgentRuntimeProviders({ refs: ['builtin:claude-code'] })` can load it
|
|
33
33
|
through the same package-loader path as external `npm:` providers.
|
|
34
34
|
|
|
35
|
-
##
|
|
35
|
+
## Resident session and request settlement
|
|
36
36
|
|
|
37
37
|
The public runtime boundary returns one `RuntimeSubmission` handle per accepted
|
|
38
|
-
send
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
38
|
+
send. Every input follows the same native write path; admission resolves after
|
|
39
|
+
write acknowledgement or positive native evidence. RPC holds one table of
|
|
40
|
+
unanswered requests and settles them directly from native results or command
|
|
41
|
+
cancellation/refusal. There is no enclosing request window or aggregate drainage.
|
|
42
|
+
|
|
43
|
+
A native result answering requests creates one immutable `RuntimeCompletion`
|
|
44
|
+
shared by those requests. Folded inputs share that object; queued inputs wait
|
|
45
|
+
for their own result. Consumption lifecycle and a matching submitted result UUID
|
|
46
|
+
are positive attribution evidence. A completed lifecycle frame may precede or
|
|
47
|
+
follow its result and does not decide when another input can be submitted.
|
|
48
|
+
|
|
49
|
+
Background native turns may run without a submission. Their activity and result
|
|
50
|
+
boundaries remain observable, but they settle no unrelated request and do not
|
|
51
|
+
terminate the resident process. Explicit inputs steered into a background turn
|
|
52
|
+
settle normally once they join it. Concurrent input requires lifecycle evidence;
|
|
53
|
+
sessions without it retain single-input compatibility. Native `cancelled` can
|
|
54
|
+
describe a hard failure; it does not imply a user stop. Consumed commands retain
|
|
55
|
+
their result membership through terminal lifecycle frames. An unconsumed command
|
|
56
|
+
that is cancelled, refused or discarded settles as failed. Every native error
|
|
57
|
+
result remains observable, including UUID-less errors and the `success` arm with
|
|
58
|
+
`is_error: true` carrying API error text.
|
|
59
|
+
|
|
60
|
+
A setup error can precede `started` and omit the input UUID. It reports a failed
|
|
61
|
+
native end with its error details but cannot identify a queued request. A later
|
|
62
|
+
named `cancelled` fails that request with its protocol state; the adapter does not
|
|
63
|
+
guess that a preceding unbound error belongs to it.
|
|
64
|
+
|
|
65
|
+
Core owns source deduplication, captured recipients and completion-token delivery.
|
|
66
|
+
The provider owns native admission: `failed` means the command was proven not
|
|
67
|
+
written, while `ambiguous` means a native write may have been accepted and must
|
|
68
|
+
not be retried automatically. Runtime stop synchronously fences new input,
|
|
69
|
+
releases pending capability/write waiters, terminates the supervised process
|
|
70
|
+
group with absence proof, resolves unsettled submissions as stopped, and drains
|
|
71
|
+
already-started admission calls before it resolves.
|
|
56
72
|
|
|
57
73
|
## Native sessions and transcripts
|
|
58
74
|
|
|
59
|
-
For a fresh runtime this package generates the native UUID before launch
|
|
60
|
-
passes it through Claude Code's `--session-id
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
is
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
+
For a fresh runtime this package generates the native UUID before launch and
|
|
76
|
+
passes it through Claude Code's `--session-id`. The native identity is durably
|
|
77
|
+
published before input is written. Resume uses that same authoritative session
|
|
78
|
+
id. Recent activity reads locate Claude's native history independently of the
|
|
79
|
+
live process; transcript discovery never controls request settlement.
|
|
80
|
+
|
|
81
|
+
`readRecentActivity` is a cold bounded read that never starts a Claude process.
|
|
82
|
+
It returns neutral assistant/tool activity records and provider-owned opaque
|
|
83
|
+
cursors. It is not a completion source.
|
|
84
|
+
|
|
85
|
+
## Custom session factories
|
|
86
|
+
|
|
87
|
+
A custom `ClaudeCodeSessionFactory` now implements `submit()` returning
|
|
88
|
+
`RuntimeAdmission`; accepted submissions carry their own settlement promises.
|
|
89
|
+
The old `submitTurn()`/`steerTurn()` window interface is removed. Session specs
|
|
90
|
+
provide the pinned `sessionId` and optional `outputSchemaEnabled` result contract;
|
|
91
|
+
the exit handler receives its failure cause.
|
|
92
|
+
|
|
93
|
+
Session implementations own result validation and settlement. Their
|
|
94
|
+
`onProtocolEvent` callback reports native activity independently: result events
|
|
95
|
+
retain `commandUuids` for observation, and the public `command_lifecycle` variant
|
|
96
|
+
reports native command state without deciding settlement in runtime or Core.
|
|
97
|
+
An `interrupted` event can report an independently known interruption boundary.
|
|
98
|
+
Emitting a callback alone no longer settles a
|
|
99
|
+
request. These are breaking changes to the Claude-specific extension seam;
|
|
100
|
+
the neutral `AgentRuntime` and `RuntimeSubmission` contracts are unchanged.
|
|
101
|
+
|
|
102
|
+
## Direct stream RPC consumers
|
|
103
|
+
|
|
104
|
+
The exported `ClaudeCodeStreamRpc` has the same single `submit()` path, returning
|
|
105
|
+
`Promise<RuntimeAdmission>` in place of `submitTurn()` and `steerTurn()`. Accepted
|
|
106
|
+
handles own eventual settlement; callers no longer await an aggregate window.
|
|
107
|
+
Replace `failPending(error)` with `fail(error)` for transport failure or `stop()`
|
|
108
|
+
for deliberate teardown. A session retired after an unexpected exit retains
|
|
109
|
+
that failure for subsequent admission, even after cleanup calls `stop()`.
|
|
110
|
+
|
|
111
|
+
`ClaudeCodeStreamRpcOptions` now requires `sessionId` (a pinned native ID or
|
|
112
|
+
`null`) and accepts optional `outputSchemaEnabled` for result validation.
|
|
113
|
+
`reapOnTimeout(error)` receives the failure `Error`. Protocol callbacks are
|
|
114
|
+
observation only, as described above. Parsed `ResultEnvelope` and `TurnOutcome`
|
|
115
|
+
also expose `terminalReason`, a string or `null`, for native terminal diagnostics.
|
|
116
|
+
These changes break direct RPC consumers as well as custom session factories.
|
|
117
|
+
|
|
118
|
+
The default adapter uses consumption events because the observed background
|
|
119
|
+
folds omit both result UUID echo fields. Claude Code 2.1.263 marks
|
|
120
|
+
`command_lifecycle` as internal; it is not a documented stable SDK contract.
|
|
121
|
+
Compatibility tests and real native captures are distinguished in the task's
|
|
122
|
+
verification record.
|
package/dist/config.d.ts
CHANGED
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
* is reset on every inbound stream line, so it bounds the max time the
|
|
29
29
|
* still-alive child may emit *no* stream activity — not the total turn duration.
|
|
30
30
|
* A child silent for the whole window is failed and reaped/re-spawned (rather
|
|
31
|
-
* than
|
|
32
|
-
*
|
|
31
|
+
* than blocking request settlement and TeamMate completion delivery), while a
|
|
32
|
+
* long but actively-streaming turn never trips it.
|
|
33
33
|
*/
|
|
34
34
|
export interface DispatcherClaudeCodeConfig {
|
|
35
35
|
bin: string;
|
package/dist/rpc.d.ts
CHANGED
|
@@ -1,116 +1,50 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code stream-json turn RPC.
|
|
3
|
-
*
|
|
4
|
-
* The supervisor owns the child process. This class owns one in-flight command
|
|
5
|
-
* group, stdout line demux, command drainage, and defensive control replies.
|
|
6
|
-
*
|
|
7
|
-
* One resident CLI execution window can span several submitted commands: a
|
|
8
|
-
* live steer is written while the CLI is already running. How the CLI answers them is
|
|
9
|
-
* not fixed, which is what makes settlement subtle (probed against a live
|
|
10
|
-
* 2.1.231 resident session):
|
|
11
|
-
*
|
|
12
|
-
* - **Commands fold.** A message that arrives while the in-flight turn is
|
|
13
|
-
* inside a tool call is absorbed into that turn at the next query-loop
|
|
14
|
-
* boundary. Several commands then share ONE `result` (3 → 1 observed), and
|
|
15
|
-
* a folded command's uuid never appears on any `result`.
|
|
16
|
-
* - **Or they do not.** A command that arrives between turns runs on its own
|
|
17
|
-
* and gets its own `result`.
|
|
18
|
-
* - **`result.user_message_uuid` is not a completion ledger.** It is present
|
|
19
|
-
* only sometimes, is not reliably the first-submitted uuid of a fold, and
|
|
20
|
-
* is absent entirely on the `error_during_execution` artifact an
|
|
21
|
-
* interrupt produces.
|
|
22
|
-
* - **`command_lifecycle` is the attribution signal.** Started commands identify
|
|
23
|
-
* the submissions represented by the next native `result`; terminal states
|
|
24
|
-
* drain the resident execution window. Its ordering against `result` is not
|
|
25
|
-
* stable.
|
|
26
|
-
*
|
|
27
|
-
* Every valid `result` is forwarded immediately as its own native completion
|
|
28
|
-
* boundary. Lifecycle terminality only decides when the command group has
|
|
29
|
-
* drained and the resident session may accept a new initial command; it never
|
|
30
|
-
* aggregates several results into one completion.
|
|
31
|
-
*/
|
|
1
|
+
/** Resident Claude input admission, request settlement and native stream handling. */
|
|
32
2
|
import type { Writable } from 'node:stream';
|
|
33
3
|
import type { TurnSubmitOptions } from './types.js';
|
|
34
|
-
|
|
35
|
-
export declare class ClaudeSteerAdmissionError extends Error {
|
|
36
|
-
readonly admission: 'failed' | 'ambiguous';
|
|
37
|
-
constructor(admission: 'failed' | 'ambiguous', message: string, options?: ErrorOptions);
|
|
38
|
-
}
|
|
4
|
+
import type { RuntimeAdmission } from '@excitedjs/dreamux-types';
|
|
39
5
|
export interface ClaudeCodeStreamRpcOptions {
|
|
6
|
+
sessionId: string | null;
|
|
7
|
+
outputSchemaEnabled?: boolean;
|
|
40
8
|
turnTimeoutMs: number;
|
|
41
9
|
log?: (level: 'info' | 'warn' | 'error', msg: string, err?: unknown) => void;
|
|
42
|
-
reapOnTimeout: () => void;
|
|
10
|
+
reapOnTimeout: (error: Error) => void;
|
|
43
11
|
onRemoteControlUrl?: (url: string) => void;
|
|
44
12
|
onProtocolEvent?: import('./types.js').ClaudeCodeSessionSpec['onProtocolEvent'];
|
|
45
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* One resident transport, one association from UUID to unanswered request.
|
|
16
|
+
* Native results consume requests directly; no aggregate execution window waits
|
|
17
|
+
* for terminal lifecycle frames. The consumed set also includes native internal
|
|
18
|
+
* commands so cancellation is scoped to work that actually entered a turn.
|
|
19
|
+
*/
|
|
46
20
|
export declare class ClaudeCodeStreamRpc {
|
|
47
21
|
private readonly stdin;
|
|
48
22
|
private readonly options;
|
|
49
23
|
private readonly lineBuf;
|
|
50
|
-
private
|
|
24
|
+
private readonly aggregator;
|
|
25
|
+
private readonly requests;
|
|
26
|
+
private readonly consumed;
|
|
51
27
|
private lifecycleSupported;
|
|
28
|
+
private timer;
|
|
29
|
+
private closed;
|
|
52
30
|
private remoteControlRequestId;
|
|
53
31
|
constructor(stdin: Writable, options: ClaudeCodeStreamRpcOptions);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
private
|
|
32
|
+
submit(prompt: string, options?: TurnSubmitOptions, commandUuid?: string): Promise<RuntimeAdmission>;
|
|
33
|
+
private acceptRequest;
|
|
34
|
+
private failWrite;
|
|
57
35
|
onStdoutChunk(chunk: string): void;
|
|
58
|
-
|
|
36
|
+
/** Actual transport loss fails each outstanding request, without a completion. */
|
|
37
|
+
fail(error: Error): void;
|
|
38
|
+
/** Explicit teardown stops requests and converges unconfirmed admissions. */
|
|
39
|
+
stop(): void;
|
|
40
|
+
private close;
|
|
59
41
|
enableRemoteControl(): void;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
* returning it so the caller can resolve or reject it exactly once.
|
|
63
|
-
*/
|
|
64
|
-
private settlePending;
|
|
65
|
-
/**
|
|
66
|
-
* Mark a submitted command as producing nothing further, then re-check
|
|
67
|
-
* settlement. `abnormalReason` is `null` for the normal ending (`completed`)
|
|
68
|
-
* and a short phrase for a command that never ran — those are logged,
|
|
69
|
-
* because the CLI gives no other trace of a command it declined.
|
|
70
|
-
*
|
|
71
|
-
* A command ending abnormally never fails the turn by itself: the probe
|
|
72
|
-
* shows a `cancelled` command coexisting with another that answers normally
|
|
73
|
-
* (that is exactly what an interrupt looks like), so
|
|
74
|
-
* rejecting on `cancelled` — as the pre-#342 code did — is wrong.
|
|
75
|
-
*/
|
|
76
|
-
private markCommandTerminal;
|
|
77
|
-
/**
|
|
78
|
-
* The drainage gate: every submitted command has reached a terminal
|
|
79
|
-
* lifecycle state AND at least one valid `result` has been seen. Result
|
|
80
|
-
* identity and settlement have already been forwarded one-by-one.
|
|
81
|
-
*
|
|
82
|
-
* Two escapes, both anti-hang:
|
|
83
|
-
*
|
|
84
|
-
* - no lifecycle signal at all (`msg_lifecycle_v1` absent, so no
|
|
85
|
-
* `command_lifecycle` will ever arrive) — the `result` is then the only
|
|
86
|
-
* terminal event there is, so settle on it;
|
|
87
|
-
* - every command terminal, none of them ever ran, and no result — nothing
|
|
88
|
-
* can answer this turn, so fail it loudly. The idle deadline is not an
|
|
89
|
-
* acceptable backstop here: it reaps the resident child, and any inbound
|
|
90
|
-
* line re-arms it, so a healthy session could be killed long after the
|
|
91
|
-
* turn became unanswerable.
|
|
92
|
-
*
|
|
93
|
-
* When a command *did* run but no result has arrived yet, this waits: the
|
|
94
|
-
* probe shows terminal lifecycle states arriving both before and after the
|
|
95
|
-
* result they belong to, so "terminal, therefore no result is coming" is not
|
|
96
|
-
* a sound inference.
|
|
97
|
-
*/
|
|
98
|
-
private settleIfReady;
|
|
99
|
-
/**
|
|
100
|
-
* (Re)arm the per-turn idle deadline. `turnTimeoutMs` is a *max-idle* window,
|
|
101
|
-
* not a total-turn cap: any inbound stream line for this turn pushes it out
|
|
102
|
-
* (see `onLine`). A genuinely wedged child (no stream activity for the whole
|
|
103
|
-
* window) is still reaped — preserving the #120 anti-hang intent — but a long
|
|
104
|
-
* but continuously-streaming turn never trips the deadline (#156).
|
|
105
|
-
*/
|
|
42
|
+
private clearIdleIfEmpty;
|
|
43
|
+
/** Outstanding work has a max-idle deadline; pure background work has none. */
|
|
106
44
|
private armIdleTimer;
|
|
107
45
|
private onLine;
|
|
108
46
|
private decideLifecycleSupport;
|
|
109
|
-
private
|
|
110
|
-
private rejectCapabilityWaiters;
|
|
111
|
-
private resolveWriteWaiter;
|
|
112
|
-
private rejectWriteWaiter;
|
|
113
|
-
private rejectWriteWaiters;
|
|
47
|
+
private rejectWaitingRequests;
|
|
114
48
|
private onControlRequest;
|
|
115
49
|
private onControlResponse;
|
|
116
50
|
}
|
package/dist/rpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAa5C,OAAO,KAAK,EAAc,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,0BAA0B,CAAC;AAWlC,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7E,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,OAAO,YAAY,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;CACjF;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAW5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,kBAAkB,CAAwB;IAClD,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,sBAAsB,CAAuB;gBAGlC,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,0BAA0B;IAGtD,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,EAC/B,WAAW,GAAE,MAAqB,GACjC,OAAO,CAAC,gBAAgB,CAAC;IAwC5B,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,SAAS;IAUjB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQlC,kFAAkF;IAClF,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIxB,6EAA6E;IAC7E,IAAI,IAAI,IAAI;IAIZ,OAAO,CAAC,KAAK;IAkBb,mBAAmB,IAAI,IAAI;IAM3B,OAAO,CAAC,gBAAgB;IAOxB,+EAA+E;IAC/E,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,MAAM;IAsFd,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,iBAAiB;CAyB1B"}
|