@autopilot-harness/core 0.1.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/LICENSE +21 -0
- package/README.md +8 -0
- package/dist/autopilot-ignore.d.ts +23 -0
- package/dist/autopilot-ignore.d.ts.map +1 -0
- package/dist/autopilot-ignore.js +271 -0
- package/dist/autopilot-ignore.js.map +1 -0
- package/dist/checklist-md.d.ts +62 -0
- package/dist/checklist-md.d.ts.map +1 -0
- package/dist/checklist-md.js +217 -0
- package/dist/checklist-md.js.map +1 -0
- package/dist/code-edit-detector.d.ts +10 -0
- package/dist/code-edit-detector.d.ts.map +1 -0
- package/dist/code-edit-detector.js +44 -0
- package/dist/code-edit-detector.js.map +1 -0
- package/dist/i18n-render.d.ts +3 -0
- package/dist/i18n-render.d.ts.map +1 -0
- package/dist/i18n-render.js +8 -0
- package/dist/i18n-render.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/list-tracks.d.ts +29 -0
- package/dist/list-tracks.d.ts.map +1 -0
- package/dist/list-tracks.js +232 -0
- package/dist/list-tracks.js.map +1 -0
- package/dist/migrate.d.ts +19 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +101 -0
- package/dist/migrate.js.map +1 -0
- package/dist/phase-actions.d.ts +35 -0
- package/dist/phase-actions.d.ts.map +1 -0
- package/dist/phase-actions.js +480 -0
- package/dist/phase-actions.js.map +1 -0
- package/dist/project-config.d.ts +29 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +301 -0
- package/dist/project-config.js.map +1 -0
- package/dist/project-path.d.ts +26 -0
- package/dist/project-path.d.ts.map +1 -0
- package/dist/project-path.js +104 -0
- package/dist/project-path.js.map +1 -0
- package/dist/review-engine.d.ts +263 -0
- package/dist/review-engine.d.ts.map +1 -0
- package/dist/review-engine.js +2273 -0
- package/dist/review-engine.js.map +1 -0
- package/dist/review-i18n.d.ts +29 -0
- package/dist/review-i18n.d.ts.map +1 -0
- package/dist/review-i18n.js +54 -0
- package/dist/review-i18n.js.map +1 -0
- package/dist/review-lenses.d.ts +13 -0
- package/dist/review-lenses.d.ts.map +1 -0
- package/dist/review-lenses.js +43 -0
- package/dist/review-lenses.js.map +1 -0
- package/dist/review-runtime.d.ts +12 -0
- package/dist/review-runtime.d.ts.map +1 -0
- package/dist/review-runtime.js +37 -0
- package/dist/review-runtime.js.map +1 -0
- package/dist/review-scope.d.ts +9 -0
- package/dist/review-scope.d.ts.map +1 -0
- package/dist/review-scope.js +92 -0
- package/dist/review-scope.js.map +1 -0
- package/dist/sqlite.d.ts +15 -0
- package/dist/sqlite.d.ts.map +1 -0
- package/dist/sqlite.js +38 -0
- package/dist/sqlite.js.map +1 -0
- package/dist/state-store.d.ts +277 -0
- package/dist/state-store.d.ts.map +1 -0
- package/dist/state-store.js +1091 -0
- package/dist/state-store.js.map +1 -0
- package/dist/track-slug.d.ts +4 -0
- package/dist/track-slug.d.ts.map +1 -0
- package/dist/track-slug.js +18 -0
- package/dist/track-slug.js.map +1 -0
- package/dist/transcript-followup.d.ts +59 -0
- package/dist/transcript-followup.d.ts.map +1 -0
- package/dist/transcript-followup.js +310 -0
- package/dist/transcript-followup.js.map +1 -0
- package/dist/trigger-parser.d.ts +54 -0
- package/dist/trigger-parser.d.ts.map +1 -0
- package/dist/trigger-parser.js +250 -0
- package/dist/trigger-parser.js.map +1 -0
- package/dist/verify-report.d.ts +52 -0
- package/dist/verify-report.d.ts.map +1 -0
- package/dist/verify-report.js +195 -0
- package/dist/verify-report.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { type ConfirmLens } from "./review-lenses.js";
|
|
2
|
+
import type { ReviewScope } from "./project-config.js";
|
|
3
|
+
import { type SessionRow, type StateStore } from "./state-store.js";
|
|
4
|
+
import { type VerifyCommandConfig } from "./verify-report.js";
|
|
5
|
+
export type FollowupKind = "review.fix" | "review.confirm" | "review.confirm_final" | "advance" | "done" | "review_complete" | "recover" | "recover_planning" | "recover_ambient" | "stuck" | "verify_fix";
|
|
6
|
+
export interface FollowupAction {
|
|
7
|
+
kind: FollowupKind;
|
|
8
|
+
message: string;
|
|
9
|
+
/** false = deliver message once without requesting another agent turn. */
|
|
10
|
+
loop: boolean;
|
|
11
|
+
meta?: Record<string, string | number | boolean>;
|
|
12
|
+
}
|
|
13
|
+
export interface StopHandlerInput {
|
|
14
|
+
conversationId: string;
|
|
15
|
+
status: "completed" | "error" | "aborted";
|
|
16
|
+
loopCount: number;
|
|
17
|
+
/** Cursor transcript path — enables pending redelivery / in-flight gating. */
|
|
18
|
+
transcriptPath?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ReviewEngineConfig {
|
|
21
|
+
confirmRounds: number;
|
|
22
|
+
/** When completed-stop fix→confirm may run. Default executing_only. */
|
|
23
|
+
reviewScope: ReviewScope;
|
|
24
|
+
verifyEnabled: boolean;
|
|
25
|
+
verifyCommands: VerifyCommandConfig[];
|
|
26
|
+
maxIdleStops: number;
|
|
27
|
+
/** 0 = never pause on turn errors. */
|
|
28
|
+
maxErrorsBeforePause: number;
|
|
29
|
+
projectRoot: string;
|
|
30
|
+
/**
|
|
31
|
+
* Error-stop recover debounce / same-window coalesce (ms).
|
|
32
|
+
* Default {@link RECOVER_DEBOUNCE_MS} (3000). Tests pass 0 to skip sleep.
|
|
33
|
+
*/
|
|
34
|
+
recoverDebounceMs?: number;
|
|
35
|
+
/** Override sync sleep used by recover debounce (tests). */
|
|
36
|
+
sleepSync?: (ms: number) => void;
|
|
37
|
+
/** Optional override for verify report path (tests). */
|
|
38
|
+
verifyReportPath?: string;
|
|
39
|
+
/** Render followup message; default English templates. */
|
|
40
|
+
renderFollowup?: (kind: FollowupKind, vars: Record<string, string | number>) => string;
|
|
41
|
+
/** Resolve confirm lens; default English CONFIRM_LENSES. */
|
|
42
|
+
resolveLens?: (roundIndex: number, confirmRounds: number) => ConfirmLens;
|
|
43
|
+
}
|
|
44
|
+
export declare class ReviewEngine {
|
|
45
|
+
private readonly store;
|
|
46
|
+
private readonly config;
|
|
47
|
+
constructor(store: StateStore, config: ReviewEngineConfig);
|
|
48
|
+
private render;
|
|
49
|
+
private lens;
|
|
50
|
+
/**
|
|
51
|
+
* FS trust root: StateStore is authoritative.
|
|
52
|
+
* config.projectRoot must not widen the boundary (mismatched/evil config).
|
|
53
|
+
*/
|
|
54
|
+
private trustedProjectRoot;
|
|
55
|
+
/**
|
|
56
|
+
* Parse session checklist only when realpath stays under the project root.
|
|
57
|
+
* O_NOFOLLOW alone cannot stop intermediate directory symlink escapes or a
|
|
58
|
+
* poisoned absolute checklist_path in the session row.
|
|
59
|
+
*/
|
|
60
|
+
private parseSessionChecklist;
|
|
61
|
+
private reviewChainResetFields;
|
|
62
|
+
private renderAdvanceOrDone;
|
|
63
|
+
/** Resolve sticky reviewing id from chain, or fall back to hint / firstUnchecked. */
|
|
64
|
+
private resolveReviewingItemId;
|
|
65
|
+
/** E1: afterFileEdit product code → code_edited=1 (+ sticky reviewing_item_id). */
|
|
66
|
+
onCodeEdited(conversationId: string): void;
|
|
67
|
+
handleStop(input: StopHandlerInput): FollowupAction | null;
|
|
68
|
+
private pendingBlocksAdvance;
|
|
69
|
+
private tryRedeliverPending;
|
|
70
|
+
private inferPendingKind;
|
|
71
|
+
private emit;
|
|
72
|
+
/**
|
|
73
|
+
* Cursor Stop button (and similar host interrupts) arrive as status=aborted.
|
|
74
|
+
* Do not inject recover — that fights the user and loops with loop_limit:null.
|
|
75
|
+
* Drop recover/stuck pending so transcript revert cannot redeliver them later.
|
|
76
|
+
* Clear sticky code_edited so Stop→revert→resend cannot open a phantom fix
|
|
77
|
+
* chain on the next completed stop (disk may already be clean).
|
|
78
|
+
* Leave fix/confirm pending alone (delivery retry still valid if inject raced).
|
|
79
|
+
* Both clears share one exclusiveWrite so a mid-abort failure cannot leave
|
|
80
|
+
* recover gone while code_edited sticky (or the reverse).
|
|
81
|
+
*/
|
|
82
|
+
private handleAbortedStop;
|
|
83
|
+
private handleErrorStop;
|
|
84
|
+
private resolveRecoverDebounceMs;
|
|
85
|
+
private sleepRecoverDebounce;
|
|
86
|
+
/**
|
|
87
|
+
* Error recover: claim under exclusiveWrite → sleep debounce → emit at most
|
|
88
|
+
* once per window. Concurrent error stops in the same window coalesce to null.
|
|
89
|
+
* Outside the window, if still dead, redeliver once (new window).
|
|
90
|
+
* Emit ownership is CAS'd on `pending_followup_at` so claimer+redeliver
|
|
91
|
+
* cannot both return followup_message after overlapping sleeps.
|
|
92
|
+
*/
|
|
93
|
+
private debouncedErrorRecover;
|
|
94
|
+
/**
|
|
95
|
+
* Claim the recover inject slot for this error storm.
|
|
96
|
+
* - coalesced: another stop already owns the window → do not emit
|
|
97
|
+
* - claimer/redeliver: pending written; `stamp` is pending_followup_at for CAS emit
|
|
98
|
+
* - failed: exclusiveWrite threw
|
|
99
|
+
*/
|
|
100
|
+
private tryClaimErrorRecoverWindow;
|
|
101
|
+
/**
|
|
102
|
+
* After debounce: skip inject if the session already revived or recover is
|
|
103
|
+
* already in-flight on the transcript; otherwise CAS-emit on claim stamp.
|
|
104
|
+
*/
|
|
105
|
+
private finishErrorRecoverAfterDebounce;
|
|
106
|
+
/**
|
|
107
|
+
* True when finish-time inflight is the same dead harness tip snapped at claim.
|
|
108
|
+
* Requires the same harness kind first (fix vs confirm must not match), then
|
|
109
|
+
* exact match. Only fix tips allow finish starting with claim's 48-char prefix
|
|
110
|
+
* (round digits appear early in en/zh). Confirm is exact-only: English confirm
|
|
111
|
+
* puts {lensTitle} after ~100 chars, so a 48-prefix would treat different
|
|
112
|
+
* lenses as the same tip. Advance/Briefly stay exact-only for the same
|
|
113
|
+
* shared-lead-in reason.
|
|
114
|
+
*/
|
|
115
|
+
private isSameDeadHarnessTip;
|
|
116
|
+
/**
|
|
117
|
+
* Classify completed-stop orphan transcript errors from one tail read.
|
|
118
|
+
* - none: no unresolved turn_ended error
|
|
119
|
+
* - skip_recover_tip: unresolved error AND a recover tip after that error
|
|
120
|
+
* (do not re-bump error_count / re-enter handleErrorStop)
|
|
121
|
+
* - salvage: unresolved error with no post-error recover tip yet
|
|
122
|
+
*
|
|
123
|
+
* Invariant: a newer turn_ended error after an old unanswered recover tip must
|
|
124
|
+
* salvage again — the prior tip does not cover the new failure.
|
|
125
|
+
*/
|
|
126
|
+
private classifyCompletedOrphan;
|
|
127
|
+
/** Coarse kind bucket so fix/confirm/advance tips cannot share a prefix match. */
|
|
128
|
+
private harnessFollowupKind;
|
|
129
|
+
/**
|
|
130
|
+
* Atomically take emit ownership: only the stop whose claim stamp still
|
|
131
|
+
* matches may return followup. Winner bumps pending_followup_at so a racing
|
|
132
|
+
* redeliver lands in-window and coalesces instead of double-injecting.
|
|
133
|
+
*/
|
|
134
|
+
private tryCasRecoverEmit;
|
|
135
|
+
private clearRecoverPendingBestEffort;
|
|
136
|
+
/**
|
|
137
|
+
* Block completed-stop recover redelivery for ~holdMs using pending_redeliver_at
|
|
138
|
+
* against {@link PENDING_REDELIVER_COOLDOWN_MS}. CAS emit nulls the hold so a
|
|
139
|
+
* host-dropped inject can redeliver immediately (unlike gating on
|
|
140
|
+
* pending_followup_at, which CAS refreshes and would extend the block).
|
|
141
|
+
*
|
|
142
|
+
* When holdMs > cooldown, `at` is in the future so
|
|
143
|
+
* {@link pendingRedeliverAllowed} stays false until ~holdMs elapses — do not
|
|
144
|
+
* clamp hold to cooldown (that would unblock mid-sleep for long debounce).
|
|
145
|
+
*/
|
|
146
|
+
private armRecoverClaimRedeliverHold;
|
|
147
|
+
/**
|
|
148
|
+
* Last-resort when tryClaimErrorRecoverWindow's exclusiveWrite failed.
|
|
149
|
+
* Retries ambient soft-reset+pending up to 3×; then column-only disarm +
|
|
150
|
+
* emitRecover (never unlocked neutralize/soft-reset, never full-neutralize
|
|
151
|
+
* after transient lock failures — that wiped mid-confirm confirm_left).
|
|
152
|
+
* Skip wipe/emit when recover pending already exists.
|
|
153
|
+
*/
|
|
154
|
+
private compensateFailedErrorRecoverClaim;
|
|
155
|
+
/** After a successful compensate write, drop recover if session paused mid-flight. */
|
|
156
|
+
private recoverActionIfStillRunnable;
|
|
157
|
+
private sessionStillErrorRecoverable;
|
|
158
|
+
/**
|
|
159
|
+
* Compensating emit after claim failure: never overwrite a peer recover pending.
|
|
160
|
+
* Ambient: soft-reset under the same lock before stamp (resume mid-fix /
|
|
161
|
+
* preserve mid-confirm). Never unlocked soft-reset on the legacy fallback.
|
|
162
|
+
* If exclusiveWrite is unavailable, fall back to legacy {@link emit} only when
|
|
163
|
+
* no recover pending is visible and a recover row was stamped.
|
|
164
|
+
*/
|
|
165
|
+
private emitRecoverAfterFailedClaim;
|
|
166
|
+
/**
|
|
167
|
+
* Ambient error recover write: soft-reset + recover pending under one
|
|
168
|
+
* exclusiveWrite. "exists" = peer already claimed recover (do not overwrite).
|
|
169
|
+
*/
|
|
170
|
+
private tryCommitAmbientErrorRecover;
|
|
171
|
+
/**
|
|
172
|
+
* Ambient/planning error recover: drop confirm/pending arming so recover
|
|
173
|
+
* (armChain=false) cannot leave chain_pending=1 → phantom E3.
|
|
174
|
+
*
|
|
175
|
+
* Call only under exclusiveWrite (with savePendingFollowup). Compensate must
|
|
176
|
+
* not call this unlocked: clearing undelivered confirm/fix pending while
|
|
177
|
+
* confirm_left is already post-decrement desyncs the next E4 lens.
|
|
178
|
+
*
|
|
179
|
+
* Preserve mid-confirm / E5-ready counters so the completed stop after
|
|
180
|
+
* recover continues E4/E5. Ready-for-E3 (fix done, chain_pending only)
|
|
181
|
+
* advances into confirm via confirm_left=confirmRounds (E4 emits 1/N) —
|
|
182
|
+
* do not regress to another fix. Ready-for-E3 requires empty pending (not
|
|
183
|
+
* merely !fixPending). Force code_edited only for an active fix
|
|
184
|
+
* (code_edited / undelivered fix pending / chain_pending with pending still
|
|
185
|
+
* set). Bare leftover fix_round is ignored (ambient phantom residue).
|
|
186
|
+
*/
|
|
187
|
+
private applySoftResetAmbientChainForErrorRecover;
|
|
188
|
+
/** Shared with inferPendingKind — locale templates must keep these prefixes. */
|
|
189
|
+
private isFixFollowupMessage;
|
|
190
|
+
/** Mid-confirm or E5-ready — must not phantom-arm code_edited over E4/E5. */
|
|
191
|
+
private isMidConfirmOrE5;
|
|
192
|
+
/** True when a stop may still advance the review chain (re-check under write lock). */
|
|
193
|
+
private sessionRunnable;
|
|
194
|
+
/** Genuine error stop may inject recover (planning, project ambient, or armed executing). */
|
|
195
|
+
private sessionErrorRecoverable;
|
|
196
|
+
private recoverKindForPhase;
|
|
197
|
+
/** completed stop → reset error_count */
|
|
198
|
+
noteCompletedOk(session: SessionRow): void;
|
|
199
|
+
private maybeResetErrorCountOnItemChange;
|
|
200
|
+
/**
|
|
201
|
+
* E0': checklist executing, not in fix/confirm — skip lenses when there is no
|
|
202
|
+
* product code edit. Soft/verified success advances in one IMMEDIATE txn with
|
|
203
|
+
* evidence re-check (never arm at-E5 first). Only required-verify *fail*
|
|
204
|
+
* arms at-E5 to reuse E5c verify_fix / stuck.
|
|
205
|
+
*/
|
|
206
|
+
private e0NoCodeContinue;
|
|
207
|
+
/**
|
|
208
|
+
* E0 direct advance/done: re-check soft or verified evidence under one
|
|
209
|
+
* IMMEDIATE write — never enters the confirm/E5 state machine.
|
|
210
|
+
*/
|
|
211
|
+
private e0DirectAdvance;
|
|
212
|
+
/** Arm confirm_left=0 + ICC=1 only when still idle on the no-code path. */
|
|
213
|
+
private armAtE5ForNoCode;
|
|
214
|
+
/** Undo a failed arm so the next stop cannot skip soft evidence via E5. */
|
|
215
|
+
private disarmE5NoCode;
|
|
216
|
+
/** Session-monotonic round counter (fix + confirm share fix_round; no hard cap). */
|
|
217
|
+
private nextSessionRound;
|
|
218
|
+
private e2Fix;
|
|
219
|
+
private e3ArmConfirm;
|
|
220
|
+
private e4Confirm;
|
|
221
|
+
private e5Gate;
|
|
222
|
+
private e5bAdvance;
|
|
223
|
+
private bumpProgress;
|
|
224
|
+
/**
|
|
225
|
+
* Best-effort session bookkeeping after a followup was already committed
|
|
226
|
+
* (pending_followup in exclusiveWrite). Must not throw into handleStop's
|
|
227
|
+
* soft-fail catch — that would drop the committed action from the hook reply.
|
|
228
|
+
*/
|
|
229
|
+
private afterFollowupCommitted;
|
|
230
|
+
private incrementIdle;
|
|
231
|
+
/** After a no-progress stop that didn't inject, check stuck threshold. */
|
|
232
|
+
checkStuck(session: SessionRow): FollowupAction | null;
|
|
233
|
+
}
|
|
234
|
+
/** Apply OFF trigger side effects (v0.1). */
|
|
235
|
+
export declare function applyOff(store: StateStore, conversationId: string): SessionRow | null;
|
|
236
|
+
/** Apply ON trigger side effects (v0.1). */
|
|
237
|
+
export declare function applyOn(store: StateStore, conversationId: string, projectRoot: string, opts?: {
|
|
238
|
+
initialBrief?: string;
|
|
239
|
+
slug?: string;
|
|
240
|
+
}): {
|
|
241
|
+
ok: true;
|
|
242
|
+
session: SessionRow;
|
|
243
|
+
} | {
|
|
244
|
+
ok: false;
|
|
245
|
+
userMessage: string;
|
|
246
|
+
};
|
|
247
|
+
export type ApplyResumeResult = {
|
|
248
|
+
ok: true;
|
|
249
|
+
session: SessionRow | null;
|
|
250
|
+
} | {
|
|
251
|
+
ok: false;
|
|
252
|
+
userMessage: string;
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Apply RESUME: unpause local session, or claim another conversation's track
|
|
256
|
+
* onto this conversation_id (preserving review_chains).
|
|
257
|
+
*/
|
|
258
|
+
export declare function applyResume(store: StateStore, conversationId: string, opts?: {
|
|
259
|
+
slug?: string;
|
|
260
|
+
}): ApplyResumeResult;
|
|
261
|
+
/** resume_review: only chain_pending=1 */
|
|
262
|
+
export declare function applyResumeReview(store: StateStore, conversationId: string): void;
|
|
263
|
+
//# sourceMappingURL=review-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-engine.d.ts","sourceRoot":"","sources":["../src/review-engine.ts"],"names":[],"mappings":"AAYA,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAM/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAwB1B,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,YAAY,GACpB,YAAY,GACZ,gBAAgB,GAChB,sBAAsB,GACtB,SAAS,GACT,MAAM,GACN,iBAAiB,GACjB,SAAS,GACT,kBAAkB,GAClB,iBAAiB,GACjB,OAAO,GACP,YAAY,CAAC;AAEjB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC;IACvF,4DAA4D;IAC5D,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,WAAW,CAAC;CAC1E;AAgFD,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,kBAAkB;IAG7C,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,IAAI;IAKZ;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IA4B7B,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,mBAAmB;IAoB3B,qFAAqF;IACrF,OAAO,CAAC,sBAAsB;IAsB9B,mFAAmF;IACnF,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAoB1C,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,cAAc,GAAG,IAAI;IA4I1D,OAAO,CAAC,oBAAoB;IAuC5B,OAAO,CAAC,mBAAmB;IAiG3B,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,IAAI;IAgBZ;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,eAAe;IA2FvB,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,oBAAoB;IAQ5B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAqF7B;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IA8GlC;;;OAGG;IACH,OAAO,CAAC,+BAA+B;IAsFvC;;;;;;;;OAQG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;;;;;;;;OASG;IACH,OAAO,CAAC,uBAAuB;IA2B/B,kFAAkF;IAClF,OAAO,CAAC,mBAAmB;IA2B3B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA2CzB,OAAO,CAAC,6BAA6B;IAUrC;;;;;;;;;OASG;IACH,OAAO,CAAC,4BAA4B;IAcpC;;;;;;OAMG;IACH,OAAO,CAAC,iCAAiC;IAqEzC,sFAAsF;IACtF,OAAO,CAAC,4BAA4B;IAWpC,OAAO,CAAC,4BAA4B;IASpC;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IA0EnC;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAqCpC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,yCAAyC;IA+CjD,gFAAgF;IAChF,OAAO,CAAC,oBAAoB;IAK5B,6EAA6E;IAC7E,OAAO,CAAC,gBAAgB;IAWxB,uFAAuF;IACvF,OAAO,CAAC,eAAe;IAKvB,6FAA6F;IAC7F,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,mBAAmB;IAM3B,yCAAyC;IACzC,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAY1C,OAAO,CAAC,gCAAgC;IAMxC;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IA6FxB;;;OAGG;IACH,OAAO,CAAC,eAAe;IA8HvB,2EAA2E;IAC3E,OAAO,CAAC,gBAAgB;IA8BxB,2EAA2E;IAC3E,OAAO,CAAC,cAAc;IA4BtB,oFAAoF;IACpF,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,KAAK;IAwCb,OAAO,CAAC,YAAY;IAkDpB,OAAO,CAAC,SAAS;IAmDjB,OAAO,CAAC,MAAM;IA8Kd,OAAO,CAAC,UAAU;IA+KlB,OAAO,CAAC,YAAY;IAcpB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,aAAa;IAwBrB,0EAA0E;IAC1E,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,IAAI;CAYvD;AAED,6CAA6C;AAC7C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CA6CrF;AAED,4CAA4C;AAC5C,wBAAgB,OAAO,CACrB,KAAK,EAAE,UAAU,EACjB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAyDxE;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AA+FvC;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,cAAc,EAAE,MAAM,EACtB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvB,iBAAiB,CA6CnB;AAED,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAEjF"}
|