@moxxy/sdk 0.26.0 → 0.28.0
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/channel.d.ts +13 -0
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +19 -0
- package/dist/channel.js.map +1 -1
- package/dist/event-store.d.ts +5 -1
- package/dist/event-store.d.ts.map +1 -1
- package/dist/event-store.js +24 -1
- package/dist/event-store.js.map +1 -1
- package/dist/events.d.ts +9 -3
- package/dist/events.d.ts.map +1 -1
- package/dist/first-party.d.ts +17 -0
- package/dist/first-party.d.ts.map +1 -0
- package/dist/first-party.js +19 -0
- package/dist/first-party.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/dist/isolation.d.ts +14 -0
- package/dist/isolation.d.ts.map +1 -1
- package/dist/isolation.js +75 -0
- package/dist/isolation.js.map +1 -1
- package/dist/mode/checkpoint.d.ts +107 -0
- package/dist/mode/checkpoint.d.ts.map +1 -0
- package/dist/mode/checkpoint.js +2 -0
- package/dist/mode/checkpoint.js.map +1 -0
- package/dist/mode/react-loop.d.ts +129 -0
- package/dist/mode/react-loop.d.ts.map +1 -0
- package/dist/mode/react-loop.js +480 -0
- package/dist/mode/react-loop.js.map +1 -0
- package/dist/mode/stuck-loop.d.ts +7 -0
- package/dist/mode/stuck-loop.d.ts.map +1 -1
- package/dist/mode/stuck-loop.js +4 -0
- package/dist/mode/stuck-loop.js.map +1 -1
- package/dist/mode-helpers.d.ts +4 -0
- package/dist/mode-helpers.d.ts.map +1 -1
- package/dist/mode-helpers.js +3 -0
- package/dist/mode-helpers.js.map +1 -1
- package/dist/mode.d.ts +43 -2
- package/dist/mode.d.ts.map +1 -1
- package/dist/mode.js.map +1 -1
- package/dist/plugin.d.ts +10 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/reflector.d.ts +58 -0
- package/dist/reflector.d.ts.map +1 -0
- package/dist/reflector.js +2 -0
- package/dist/reflector.js.map +1 -0
- package/dist/schemas.d.ts +215 -8
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +37 -0
- package/dist/schemas.js.map +1 -1
- package/dist/session-like.d.ts +52 -0
- package/dist/session-like.d.ts.map +1 -1
- package/dist/tool-dispatch.d.ts +35 -1
- package/dist/tool-dispatch.d.ts.map +1 -1
- package/dist/tool-dispatch.js +51 -0
- package/dist/tool-dispatch.js.map +1 -1
- package/package.json +1 -1
- package/src/channel.ts +25 -0
- package/src/event-store.ts +16 -1
- package/src/events.ts +9 -2
- package/src/exit-after-pair.test.ts +32 -0
- package/src/first-party.test.ts +26 -0
- package/src/first-party.ts +19 -0
- package/src/index.ts +32 -4
- package/src/isolation-aggregate.test.ts +69 -0
- package/src/isolation.ts +67 -0
- package/src/mode/checkpoint.ts +105 -0
- package/src/mode/react-loop.ts +694 -0
- package/src/mode/stuck-loop.ts +11 -0
- package/src/mode-helpers.ts +16 -0
- package/src/mode.ts +43 -2
- package/src/plugin.ts +10 -1
- package/src/reflector.ts +61 -0
- package/src/schemas.ts +41 -0
- package/src/session-like.ts +49 -0
- package/src/tool-dispatch.test.ts +77 -0
- package/src/tool-dispatch.ts +82 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { ModeContext } from '../mode.js';
|
|
2
|
+
import type { StopReason } from '../provider-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Turn-end checkpoints — the extension point that lets a mode gate the moment
|
|
5
|
+
* the model stops calling tools and (apparently) finishes its turn. The shared
|
|
6
|
+
* ReAct loop ({@link runReactLoop}) invokes each checkpoint in declared order
|
|
7
|
+
* at that instant; a checkpoint can approve the completion (`pass`), feed a
|
|
8
|
+
* correction back into the conversation and keep the turn alive (`inject`),
|
|
9
|
+
* re-ask the model without new input (`retry`), or end the turn on its own
|
|
10
|
+
* terms (`stop`).
|
|
11
|
+
*
|
|
12
|
+
* A checkpoint's `run` may do anything async — run a fixed shell command via
|
|
13
|
+
* `ctx.tools.execute`, or spawn and await a full child agent turn via
|
|
14
|
+
* `ctx.subagents.spawn` (a lint gate, a completion reviewer). Two rules keep
|
|
15
|
+
* that power safe:
|
|
16
|
+
*
|
|
17
|
+
* 1. Honor `check.signal` in every await. It aborts on user cancel AND on
|
|
18
|
+
* this checkpoint's `timeoutMs` — an await that ignores it outlives the
|
|
19
|
+
* turn.
|
|
20
|
+
* 2. Never spawn a child running a checkpoint-bearing mode (pass
|
|
21
|
+
* `mode: 'default'`). The loop core also disarms checkpoints inside
|
|
22
|
+
* subagent sessions ({@link ModeContext.isSubagent}) as a backstop, so a
|
|
23
|
+
* mistake here degrades to an ungated child instead of unbounded
|
|
24
|
+
* recursion.
|
|
25
|
+
*/
|
|
26
|
+
export type CheckpointResult = {
|
|
27
|
+
readonly action: 'pass';
|
|
28
|
+
} | {
|
|
29
|
+
readonly action: 'inject';
|
|
30
|
+
/**
|
|
31
|
+
* Feedback fed back to the model. Persistent by default: appended to the
|
|
32
|
+
* event log as a checkpoint-origin `user_prompt`, so it survives
|
|
33
|
+
* resume/replay and projects into every subsequent provider call.
|
|
34
|
+
* Clamped to the loop's `maxInjectBytes`.
|
|
35
|
+
*/
|
|
36
|
+
readonly text: string;
|
|
37
|
+
/**
|
|
38
|
+
* When true the text is NOT logged — it rides the next provider call as
|
|
39
|
+
* a volatile trailing user message (goal mode's nudge mechanism) and
|
|
40
|
+
* vanishes afterwards. Use for steering ("keep going"), not for
|
|
41
|
+
* substantive feedback the model must act on across several tool
|
|
42
|
+
* batches. The loop forwards `volatileTailCount` to the cache strategy
|
|
43
|
+
* so the rolling tail breakpoint stays ahead of it.
|
|
44
|
+
*/
|
|
45
|
+
readonly volatile?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Loop again with no new input (idle-tolerant modes count idle rounds
|
|
49
|
+
* before giving up). Counts against the injection budget like `inject`.
|
|
50
|
+
*/
|
|
51
|
+
| {
|
|
52
|
+
readonly action: 'retry';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* End the turn NOW, skipping any remaining checkpoints. The checkpoint is
|
|
56
|
+
* expected to have already emitted its own wrap-up events via `ctx.emit`
|
|
57
|
+
* (a stall notice, a completion summary) — the loop adds nothing.
|
|
58
|
+
*/
|
|
59
|
+
| {
|
|
60
|
+
readonly action: 'stop';
|
|
61
|
+
};
|
|
62
|
+
export interface CheckpointContext {
|
|
63
|
+
/** The final text the model produced for this turn-end candidate. */
|
|
64
|
+
readonly candidateText: string;
|
|
65
|
+
/**
|
|
66
|
+
* How the provider ended the candidate call. Checkpoints that verify
|
|
67
|
+
* completion claims should treat only `'end_turn'` as a claim — a
|
|
68
|
+
* `'max_tokens'` candidate is a truncation, not a claim.
|
|
69
|
+
*/
|
|
70
|
+
readonly stopReason: StopReason;
|
|
71
|
+
readonly iteration: number;
|
|
72
|
+
/**
|
|
73
|
+
* Consecutive turn-end candidates without an intervening tool batch,
|
|
74
|
+
* 1-based (this candidate included). Resets when the model does real work.
|
|
75
|
+
* Idle-tolerant modes use this as their stall counter.
|
|
76
|
+
*/
|
|
77
|
+
readonly consecutiveIdle: number;
|
|
78
|
+
/** `inject`/`retry` rounds already spent this turn. */
|
|
79
|
+
readonly injectionsUsed: number;
|
|
80
|
+
/** The loop's `maxInjections` — lets a checkpoint soften its bar on the last round. */
|
|
81
|
+
readonly injectionBudget: number;
|
|
82
|
+
/**
|
|
83
|
+
* Aborts on user cancel OR this checkpoint's timeout. Thread it into every
|
|
84
|
+
* await (`ctx.tools.execute(..., signal)`, subagent spawns, fetches).
|
|
85
|
+
*/
|
|
86
|
+
readonly signal: AbortSignal;
|
|
87
|
+
}
|
|
88
|
+
export interface TurnCheckpoint {
|
|
89
|
+
/** Stable name — stamped on checkpoint plugin events and injected-prompt origins. */
|
|
90
|
+
readonly name: string;
|
|
91
|
+
/**
|
|
92
|
+
* Wall-clock budget for one evaluation (default 120_000 ms, floored at
|
|
93
|
+
* 1_000). On timeout the checkpoint fails OPEN: the loop logs a visible
|
|
94
|
+
* warning and proceeds as if it passed — a stuck checker must never wedge
|
|
95
|
+
* the turn.
|
|
96
|
+
*/
|
|
97
|
+
readonly timeoutMs?: number;
|
|
98
|
+
/**
|
|
99
|
+
* Which turn-end candidates this checkpoint sees. `'end_turn'` (default)
|
|
100
|
+
* gates only natural completions — truncated/errored candidates bypass it.
|
|
101
|
+
* `'idle'` gates every no-tool completion regardless of stop reason
|
|
102
|
+
* (goal/collab-style stall handling wants these too).
|
|
103
|
+
*/
|
|
104
|
+
readonly gateOn?: 'end_turn' | 'idle';
|
|
105
|
+
run(check: CheckpointContext, ctx: ModeContext): Promise<CheckpointResult>;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=checkpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/mode/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AACH;;;GAGG;GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE;AAC9B;;;;GAIG;GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhC,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,uDAAuD;IACvD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,uFAAuF;IACvF,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACtC,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC5E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/mode/checkpoint.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { MoxxyEvent } from '../events.js';
|
|
2
|
+
import type { ModeContext } from '../mode.js';
|
|
3
|
+
import type { TokenUsage } from '../provider.js';
|
|
4
|
+
import type { StopReason } from '../provider-utils.js';
|
|
5
|
+
import { type StuckLoopReport, type StuckTripInfo } from '../tool-dispatch.js';
|
|
6
|
+
import type { TurnCheckpoint } from './checkpoint.js';
|
|
7
|
+
import { type CollectedToolUse } from './collect-stream.js';
|
|
8
|
+
/**
|
|
9
|
+
* The shared ReAct loop core every tool-calling mode runs on. One hardened
|
|
10
|
+
* copy of the plumbing that used to be duplicated per mode (default / goal /
|
|
11
|
+
* collab-agent): provider retry with bounded exponential back-off, reactive
|
|
12
|
+
* compaction on context overflow, turn-boundary elision, stuck-loop
|
|
13
|
+
* detection, abort handling on every await — plus the turn-end checkpoint
|
|
14
|
+
* gate ({@link TurnCheckpoint}) that lets a mode verify a completion claim
|
|
15
|
+
* (run lints, spawn a reviewer agent) before the turn is allowed to end.
|
|
16
|
+
*
|
|
17
|
+
* Modes express their POLICY through {@link ReactLoopOptions}: hooks fire at
|
|
18
|
+
* fixed points (iteration start, provider success, tool batch end, iteration
|
|
19
|
+
* cap) and checkpoints fire at the turn-end candidate. Hooks emit their own
|
|
20
|
+
* events via `ctx.emit` — the live event channel is the log subscription
|
|
21
|
+
* (`runTurn` discards the yielded stream), so emit order is what channels
|
|
22
|
+
* and tests observe.
|
|
23
|
+
*/
|
|
24
|
+
/** Bounded back-off for retryable provider errors — see the field docs. */
|
|
25
|
+
export declare const MAX_CONSECUTIVE_RETRIES = 6;
|
|
26
|
+
/**
|
|
27
|
+
* Override the retry back-off sleep (test seam). Returns a restore fn that
|
|
28
|
+
* callers MUST invoke (in a `finally`) — `sleepImpl` is a module-scoped
|
|
29
|
+
* singleton shared process-wide, so a leaked override bleeds the fake sleep
|
|
30
|
+
* into every other turn/test running in the same worker (parallel subagent
|
|
31
|
+
* fan-out, multiple Sessions in one host). Test-only; never call from prod.
|
|
32
|
+
*/
|
|
33
|
+
export declare function __setRetrySleepForTests(fn: (ms: number, signal: AbortSignal) => Promise<void>): () => void;
|
|
34
|
+
/** What a clean provider call produced — input to {@link ReactLoopOptions.onProviderSuccess}. */
|
|
35
|
+
export interface ProviderSuccessInfo {
|
|
36
|
+
readonly text: string;
|
|
37
|
+
readonly stopReason: StopReason;
|
|
38
|
+
readonly toolUses: ReadonlyArray<CollectedToolUse>;
|
|
39
|
+
readonly usage?: TokenUsage;
|
|
40
|
+
readonly iteration: number;
|
|
41
|
+
}
|
|
42
|
+
/** A completed tool batch — input to {@link ReactLoopOptions.onToolBatchEnd}. */
|
|
43
|
+
export interface ToolBatchInfo {
|
|
44
|
+
readonly toolUses: ReadonlyArray<CollectedToolUse>;
|
|
45
|
+
readonly iteration: number;
|
|
46
|
+
}
|
|
47
|
+
/** Hooks return this to end the turn; the hook emits its own wrap-up events first. */
|
|
48
|
+
export interface StopDirective {
|
|
49
|
+
readonly action: 'stop';
|
|
50
|
+
}
|
|
51
|
+
export interface ReactLoopOptions {
|
|
52
|
+
/** Name stamped on `mode_iteration` events (e.g. `'default'`, `'goal'`). */
|
|
53
|
+
readonly strategyName: string;
|
|
54
|
+
/**
|
|
55
|
+
* Iteration cap when the context doesn't supply one. Default 500. May be
|
|
56
|
+
* `Number.POSITIVE_INFINITY` for an uncapped loop (goal mode): the run then
|
|
57
|
+
* ends only via a terminal signal (checkpoint/hook stop, abort, fatal
|
|
58
|
+
* error) — an explicit `ctx.maxIterations` still takes precedence.
|
|
59
|
+
*/
|
|
60
|
+
readonly defaultMaxIterations?: number;
|
|
61
|
+
/** Prefix for provider-error messages (goal mode uses `'goal: '`). */
|
|
62
|
+
readonly errorPrefix?: string;
|
|
63
|
+
/**
|
|
64
|
+
* When set, an already-aborted signal is reported (with this reason) BEFORE
|
|
65
|
+
* the first iteration — goal/collab preflight. When omitted the first
|
|
66
|
+
* iteration's own abort check covers it with the generic reason.
|
|
67
|
+
*/
|
|
68
|
+
readonly preflightAbortReason?: string;
|
|
69
|
+
/** Turn-end gates, run in declared order. Omit/empty → plain ReAct loop. */
|
|
70
|
+
readonly checkpoints?: ReadonlyArray<TurnCheckpoint>;
|
|
71
|
+
/**
|
|
72
|
+
* Hard cap on checkpoint `inject`/`retry` rounds per idle EPISODE — i.e.
|
|
73
|
+
* consecutive gate rounds with no tool work between them; the count resets
|
|
74
|
+
* whenever a tool batch executes (default 3). When exhausted the turn ends
|
|
75
|
+
* with the model's answer as-is plus a visible warning — a
|
|
76
|
+
* permanently-failing gate degrades loudly instead of looping forever.
|
|
77
|
+
*/
|
|
78
|
+
readonly maxInjections?: number;
|
|
79
|
+
/** Clamp on injected feedback length in characters (default 16_384). */
|
|
80
|
+
readonly maxInjectChars?: number;
|
|
81
|
+
/**
|
|
82
|
+
* Stuck-loop policy + wording overrides; sensible defaults from
|
|
83
|
+
* `strategyName`. `action` picks what a detector trip does:
|
|
84
|
+
*
|
|
85
|
+
* - `'abort'` (default): fail the batch and end the turn with a fatal
|
|
86
|
+
* error — the historical behavior, right for attended modes where the
|
|
87
|
+
* user is present to redirect.
|
|
88
|
+
* - `'nudge'`: never stop. The batch still executes (repeated calls are
|
|
89
|
+
* usually legitimate work — re-running a failing build between edits),
|
|
90
|
+
* a visible warning + `extraOnStuck` events are emitted, the detector
|
|
91
|
+
* resets, and `nudgeText` (or a default) rides the next provider call
|
|
92
|
+
* as a volatile steer. For unattended modes (goal) where a heuristic
|
|
93
|
+
* must never kill the run.
|
|
94
|
+
*/
|
|
95
|
+
readonly stuck?: Partial<StuckLoopReport> & {
|
|
96
|
+
readonly action?: 'abort' | 'nudge';
|
|
97
|
+
/** Volatile steer for `'nudge'` trips; default wording when omitted. */
|
|
98
|
+
readonly nudgeText?: (info: StuckTripInfo) => string;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Runs after compaction/elision, before the provider call. May return a
|
|
102
|
+
* volatile user message to ride ONLY the next call (collab's inbox/pause
|
|
103
|
+
* awareness) — never appended to the log; the cache strategy is told via
|
|
104
|
+
* `volatileTailCount` so its tail breakpoint stays ahead of it.
|
|
105
|
+
*/
|
|
106
|
+
readonly onIterationStart?: (ctx: ModeContext, iteration: number) => Promise<{
|
|
107
|
+
readonly volatileUserText?: string;
|
|
108
|
+
} | undefined>;
|
|
109
|
+
/**
|
|
110
|
+
* Runs after every clean provider call (reasoning already logged, tools not
|
|
111
|
+
* yet executed). Return `{action: 'stop'}` to end the turn — the hook emits
|
|
112
|
+
* its own wrap-up events first (goal mode's token-budget backstop).
|
|
113
|
+
*/
|
|
114
|
+
readonly onProviderSuccess?: (ctx: ModeContext, info: ProviderSuccessInfo) => Promise<StopDirective | undefined>;
|
|
115
|
+
/**
|
|
116
|
+
* Runs after a tool batch executes cleanly. Return `{action: 'stop'}` to
|
|
117
|
+
* end the turn (goal/collab terminal-tool detection: `goal_complete`,
|
|
118
|
+
* `collab_done`); the hook emits its own completion events first.
|
|
119
|
+
*/
|
|
120
|
+
readonly onToolBatchEnd?: (ctx: ModeContext, info: ToolBatchInfo) => Promise<StopDirective | undefined>;
|
|
121
|
+
/**
|
|
122
|
+
* Replaces the default "exceeded maxIterations" fatal error — the hook
|
|
123
|
+
* emits its own cap-reached events (goal mode adds a plugin event and its
|
|
124
|
+
* own wording). The loop returns right after.
|
|
125
|
+
*/
|
|
126
|
+
readonly onMaxIterations?: (ctx: ModeContext, maxIterations: number) => Promise<void>;
|
|
127
|
+
}
|
|
128
|
+
export declare function runReactLoop(ctx: ModeContext, opts: ReactLoopOptions): AsyncIterable<MoxxyEvent>;
|
|
129
|
+
//# sourceMappingURL=react-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-loop.d.ts","sourceRoot":"","sources":["../../src/mode/react-loop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAInF;;;;;;;;;;;;;;;GAeG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAgBzC;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GACrD,MAAM,IAAI,CAMZ;AAED,iGAAiG;AACjG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,sFAAsF;AACtF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACrD;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,wEAAwE;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG;QAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QACpC,wEAAwE;QACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,MAAM,CAAC;KACtD,CAAC;IACF;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC1B,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;QAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IACjE;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAC3B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,mBAAmB,KACtB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,aAAa,KAChB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvF;AAED,wBAAuB,YAAY,CACjC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,gBAAgB,GACrB,aAAa,CAAC,UAAU,CAAC,CA+S3B"}
|