@orc-brain/core 1.0.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/dist/autoLoop.d.ts +70 -0
- package/dist/autoLoop.d.ts.map +1 -0
- package/dist/autoLoop.js +178 -0
- package/dist/autoLoop.js.map +1 -0
- package/dist/backpressure.d.ts +38 -0
- package/dist/backpressure.d.ts.map +1 -0
- package/dist/backpressure.js +103 -0
- package/dist/backpressure.js.map +1 -0
- package/dist/budgetTracker.d.ts +53 -0
- package/dist/budgetTracker.d.ts.map +1 -0
- package/dist/budgetTracker.js +93 -0
- package/dist/budgetTracker.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +107 -0
- package/dist/config.js.map +1 -0
- package/dist/escalation.d.ts +43 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +81 -0
- package/dist/escalation.js.map +1 -0
- package/dist/eventBus.d.ts +30 -0
- package/dist/eventBus.d.ts.map +1 -0
- package/dist/eventBus.js +42 -0
- package/dist/eventBus.js.map +1 -0
- package/dist/goalJudge.d.ts +92 -0
- package/dist/goalJudge.d.ts.map +1 -0
- package/dist/goalJudge.js +254 -0
- package/dist/goalJudge.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/modelRouter.d.ts +40 -0
- package/dist/modelRouter.d.ts.map +1 -0
- package/dist/modelRouter.js +114 -0
- package/dist/modelRouter.js.map +1 -0
- package/dist/orchestrator.d.ts +242 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +975 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/pacing.d.ts +34 -0
- package/dist/pacing.d.ts.map +1 -0
- package/dist/pacing.js +49 -0
- package/dist/pacing.js.map +1 -0
- package/dist/planValidation.d.ts +24 -0
- package/dist/planValidation.d.ts.map +1 -0
- package/dist/planValidation.js +134 -0
- package/dist/planValidation.js.map +1 -0
- package/dist/planner.d.ts +70 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +210 -0
- package/dist/planner.js.map +1 -0
- package/dist/plugins/host.d.ts +39 -0
- package/dist/plugins/host.d.ts.map +1 -0
- package/dist/plugins/host.js +109 -0
- package/dist/plugins/host.js.map +1 -0
- package/dist/plugins/registry.d.ts +71 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +269 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/secrets.d.ts +30 -0
- package/dist/plugins/secrets.d.ts.map +1 -0
- package/dist/plugins/secrets.js +99 -0
- package/dist/plugins/secrets.js.map +1 -0
- package/dist/preflight.d.ts +38 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +108 -0
- package/dist/preflight.js.map +1 -0
- package/dist/reporting.d.ts +41 -0
- package/dist/reporting.d.ts.map +1 -0
- package/dist/reporting.js +229 -0
- package/dist/reporting.js.map +1 -0
- package/dist/safety/denyRules.d.ts +57 -0
- package/dist/safety/denyRules.d.ts.map +1 -0
- package/dist/safety/denyRules.js +498 -0
- package/dist/safety/denyRules.js.map +1 -0
- package/dist/safety/envClassifier.d.ts +45 -0
- package/dist/safety/envClassifier.d.ts.map +1 -0
- package/dist/safety/envClassifier.js +99 -0
- package/dist/safety/envClassifier.js.map +1 -0
- package/dist/safety/index.d.ts +83 -0
- package/dist/safety/index.d.ts.map +1 -0
- package/dist/safety/index.js +184 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/safety/limitSignals.d.ts +36 -0
- package/dist/safety/limitSignals.d.ts.map +1 -0
- package/dist/safety/limitSignals.js +79 -0
- package/dist/safety/limitSignals.js.map +1 -0
- package/dist/safety/paths.d.ts +32 -0
- package/dist/safety/paths.d.ts.map +1 -0
- package/dist/safety/paths.js +102 -0
- package/dist/safety/paths.js.map +1 -0
- package/dist/safety/redact.d.ts +17 -0
- package/dist/safety/redact.d.ts.map +1 -0
- package/dist/safety/redact.js +85 -0
- package/dist/safety/redact.js.map +1 -0
- package/dist/spawnEnv.d.ts +18 -0
- package/dist/spawnEnv.d.ts.map +1 -0
- package/dist/spawnEnv.js +43 -0
- package/dist/spawnEnv.js.map +1 -0
- package/dist/store/auditLog.d.ts +28 -0
- package/dist/store/auditLog.d.ts.map +1 -0
- package/dist/store/auditLog.js +48 -0
- package/dist/store/auditLog.js.map +1 -0
- package/dist/store/index.d.ts +140 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +648 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/schema.d.ts +17 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +197 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/system.d.ts +69 -0
- package/dist/system.d.ts.map +1 -0
- package/dist/system.js +135 -0
- package/dist/system.js.map +1 -0
- package/dist/workerManager.d.ts +80 -0
- package/dist/workerManager.d.ts.map +1 -0
- package/dist/workerManager.js +280 -0
- package/dist/workerManager.js.map +1 -0
- package/dist/worktrees.d.ts +74 -0
- package/dist/worktrees.d.ts.map +1 -0
- package/dist/worktrees.js +210 -0
- package/dist/worktrees.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator core (§3, §5). Owns the Goal, the Scope DAG, and the Run state
|
|
3
|
+
* machine. Runs the dispatch loop: on each tick, take ready tasks (dependencies
|
|
4
|
+
* met, scope approved, budget available, concurrency slot free), consult the
|
|
5
|
+
* Model Router, and hand a fully-specified WorkerSpec to the Worker Manager.
|
|
6
|
+
*
|
|
7
|
+
* Phase 2 (§15): Planner-driven DAG materialization + plan approval,
|
|
8
|
+
* pause/resume with session persistence, and bounded retries land here on top
|
|
9
|
+
* of the Phase 1 safety-wired dispatch loop.
|
|
10
|
+
*/
|
|
11
|
+
import type { ExternalRef, Goal, OrchestratorConfig, Plan, Project, Run, Scope, Task } from "@orc-brain/shared";
|
|
12
|
+
import type { Store } from "./store/index.js";
|
|
13
|
+
import type { AuditSink, SafetyLayer } from "./safety/index.js";
|
|
14
|
+
import type { EventBus } from "./eventBus.js";
|
|
15
|
+
import type { BudgetTracker } from "./budgetTracker.js";
|
|
16
|
+
import type { WorkerManager } from "./workerManager.js";
|
|
17
|
+
import type { Planner } from "./planner.js";
|
|
18
|
+
import type { EscalationManager } from "./escalation.js";
|
|
19
|
+
import type { ReportingEngine } from "./reporting.js";
|
|
20
|
+
import type { Backpressure } from "./backpressure.js";
|
|
21
|
+
import type { WorktreeManager } from "./worktrees.js";
|
|
22
|
+
/**
|
|
23
|
+
* Hook the autonomous controller registers so the orchestrator can hand off a
|
|
24
|
+
* quiesced run (all tasks terminal) instead of finalizing it itself
|
|
25
|
+
* (autonomous-loop.md §3.1, G4). Fire-and-forget: the controller owns the
|
|
26
|
+
* done / re-plan / pause decision.
|
|
27
|
+
*/
|
|
28
|
+
export interface AutoLoopHook {
|
|
29
|
+
onRunQuiesced(runId: string): void;
|
|
30
|
+
}
|
|
31
|
+
/** Wires the core collaborators together. */
|
|
32
|
+
export interface OrchestratorDeps {
|
|
33
|
+
store: Store;
|
|
34
|
+
bus: EventBus;
|
|
35
|
+
config: OrchestratorConfig;
|
|
36
|
+
safety: SafetyLayer;
|
|
37
|
+
workers: WorkerManager;
|
|
38
|
+
budget: BudgetTracker;
|
|
39
|
+
audit: AuditSink;
|
|
40
|
+
planner: Planner;
|
|
41
|
+
escalation: EscalationManager;
|
|
42
|
+
reporting: ReportingEngine;
|
|
43
|
+
backpressure: Backpressure;
|
|
44
|
+
worktrees: WorktreeManager;
|
|
45
|
+
}
|
|
46
|
+
/** The orchestration core. In-proc methods are invoked by the API layer. */
|
|
47
|
+
export declare class Orchestrator {
|
|
48
|
+
private readonly deps;
|
|
49
|
+
private readonly running;
|
|
50
|
+
/** Run each in-flight task belongs to: per-run counts + pause/panic scoping. */
|
|
51
|
+
private readonly runOfTask;
|
|
52
|
+
/** Tasks blocked by an escalation, so a settling worker isn't retried (§8.5). */
|
|
53
|
+
private readonly blocked;
|
|
54
|
+
/** Set on shutdown so late worker callbacks don't touch a closed store. */
|
|
55
|
+
private stopped;
|
|
56
|
+
/** Autonomous controller, registered when auto-loop is enabled (§3.1). */
|
|
57
|
+
private autoLoop?;
|
|
58
|
+
/** Tasks-per-hour throttle, shared across runs (spec 002 §R14). */
|
|
59
|
+
private readonly pacer;
|
|
60
|
+
/** Last engaged pacing gate, so `pacing.hold` is edge-triggered (§R16). */
|
|
61
|
+
private pacingHold;
|
|
62
|
+
constructor(deps: OrchestratorDeps);
|
|
63
|
+
/** Number of in-flight workers belonging to one run. */
|
|
64
|
+
private runningCountFor;
|
|
65
|
+
/** In-flight handles belonging to one run (pause/panic never cross runs). */
|
|
66
|
+
private handlesFor;
|
|
67
|
+
/** Publishes `pacing.hold` once per engagement (spec 002 §R16). */
|
|
68
|
+
private emitPacingHold;
|
|
69
|
+
/** Interrupts the worker of a task the escalation manager just blocked (§8.5). */
|
|
70
|
+
private blockTask;
|
|
71
|
+
/**
|
|
72
|
+
* Applies an operator resolution to a blocked escalation (§8.5): deny-&-instruct
|
|
73
|
+
* and approve-once re-queue the task (with guidance / a single-use exemption),
|
|
74
|
+
* skip marks it skipped. Then the dispatch loop is re-kicked.
|
|
75
|
+
*/
|
|
76
|
+
resolveEscalation(escalationId: string, action: "deny_instruct" | "approve_once" | "skip_task", message?: string): void;
|
|
77
|
+
createGoal(input: Parameters<Store["createGoal"]>[0]): Goal;
|
|
78
|
+
/**
|
|
79
|
+
* Feature flow (spec 002 §R4, spec 003 §R4): creates a goal under a project
|
|
80
|
+
* and immediately kicks planning, fire-and-forget. The single entrypoint for
|
|
81
|
+
* `POST /api/projects/:id/goals` and plugin task imports, so the two paths
|
|
82
|
+
* cannot drift. A planner failure drops the goal back to draft.
|
|
83
|
+
*/
|
|
84
|
+
createFeatureGoal(project: Project, input: {
|
|
85
|
+
objective: string;
|
|
86
|
+
title?: string;
|
|
87
|
+
external_ref?: ExternalRef | null;
|
|
88
|
+
}): Goal;
|
|
89
|
+
createScope(input: Parameters<Store["createScope"]>[0]): Scope;
|
|
90
|
+
createTask(input: Parameters<Store["createTask"]>[0]): Task;
|
|
91
|
+
/** Approves a scope so its tasks become dispatchable (§8, §10 plan review). */
|
|
92
|
+
approveScope(scopeId: string): void;
|
|
93
|
+
/** Approves every proposed scope of a goal (`orc approve <goal-id>`, §9). */
|
|
94
|
+
approveGoal(goalId: string): Scope[];
|
|
95
|
+
/**
|
|
96
|
+
* Runs the Planner for a goal and materializes its Plan into proposed scopes
|
|
97
|
+
* and pending tasks, ready for operator approval. The plan is inert until
|
|
98
|
+
* approved — nothing dispatches here (§3: the Planner never dispatches).
|
|
99
|
+
*/
|
|
100
|
+
planGoal(goalId: string): Promise<{
|
|
101
|
+
scopes: Scope[];
|
|
102
|
+
tasks: Task[];
|
|
103
|
+
}>;
|
|
104
|
+
/**
|
|
105
|
+
* Replaces a goal's proposed plan with an edited one (`orc plan edit`, §9).
|
|
106
|
+
* Validates the candidate, drops the existing proposed scopes/tasks, and
|
|
107
|
+
* re-materializes. Throws if validation fails so a bad edit never lands.
|
|
108
|
+
*/
|
|
109
|
+
replacePlan(goalId: string, candidate: unknown): {
|
|
110
|
+
scopes: Scope[];
|
|
111
|
+
tasks: Task[];
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Cancels a goal's proposed plan (§10 plan review): drops the proposed
|
|
115
|
+
* scopes and their tasks and returns the goal to `draft` so it can be
|
|
116
|
+
* re-planned. Approved/running scopes are never touched
|
|
117
|
+
* ({@link Store.deleteProposedPlan} only deletes `proposed` ones).
|
|
118
|
+
*/
|
|
119
|
+
cancelPlan(goalId: string): void;
|
|
120
|
+
/**
|
|
121
|
+
* Applies a re-plan cycle's {@link Plan} additively — grows the goal's DAG
|
|
122
|
+
* without deleting existing scopes/tasks (autonomous-loop.md §3.3, G2). Used
|
|
123
|
+
* by the autonomous controller; the plan is already validated by the Planner.
|
|
124
|
+
* New scopes land `proposed`; the controller approves them per its mode.
|
|
125
|
+
*/
|
|
126
|
+
applyReplan(goalId: string, plan: Plan): {
|
|
127
|
+
scopes: Scope[];
|
|
128
|
+
tasks: Task[];
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Materializes a validated {@link Plan} into Scope/Task rows, resolving the
|
|
132
|
+
* plan's name-based `depends_on` references to the newly-minted ULIDs. Scopes
|
|
133
|
+
* land `proposed`, tasks `pending`; approval (per scope or per goal) flips
|
|
134
|
+
* scopes to `approved` so the dispatch loop can pick their tasks up.
|
|
135
|
+
*
|
|
136
|
+
* Thin wrapper over {@link appendPlan}: on the first materialization there are
|
|
137
|
+
* no existing scopes, so the two are equivalent.
|
|
138
|
+
*/
|
|
139
|
+
private materializePlan;
|
|
140
|
+
/**
|
|
141
|
+
* Appends a validated {@link Plan}'s scopes/tasks to a goal WITHOUT deleting
|
|
142
|
+
* anything (autonomous-loop.md §3.3, G2). This is what a re-plan cycle uses to
|
|
143
|
+
* grow the DAG. Scope-level `depends_on` may reference either newly-created or
|
|
144
|
+
* pre-existing scope names, so a re-planned scope can depend on an
|
|
145
|
+
* already-completed one; on a name collision the new scope wins (consistent
|
|
146
|
+
* with intra-plan resolution). New scopes land `proposed`, tasks `pending`.
|
|
147
|
+
*/
|
|
148
|
+
private appendPlan;
|
|
149
|
+
/** Starts a run for a goal and kicks the dispatch loop (§5). */
|
|
150
|
+
startRun(goalId: string, opts: {
|
|
151
|
+
budget_usd: number;
|
|
152
|
+
concurrency_limit?: number;
|
|
153
|
+
/** Feature-flow run (spec 002 §R5): auto-loops even with global config off. */
|
|
154
|
+
auto_loop?: boolean;
|
|
155
|
+
}): Run;
|
|
156
|
+
/**
|
|
157
|
+
* Graceful pause (§5): halt dispatch and interrupt running workers, waiting up
|
|
158
|
+
* to `pause.grace_ms` for them to yield at a tool-call boundary. Workers that
|
|
159
|
+
* do not settle within the grace window are marked `dirty` — resume will
|
|
160
|
+
* re-verify their workspace before continuing (§13.6).
|
|
161
|
+
*/
|
|
162
|
+
pause(runId: string, reason?: string): Promise<void>;
|
|
163
|
+
/** A promise that resolves after `ms`, with an unref'd timer. */
|
|
164
|
+
private delay;
|
|
165
|
+
/**
|
|
166
|
+
* Resume (§5): re-queue every `paused` task so the dispatch loop picks it up
|
|
167
|
+
* again. Tasks that captured a `session_id` continue that session (SDK
|
|
168
|
+
* `resume:`) with a continuation prompt; the scope config is re-applied fresh
|
|
169
|
+
* so resume never inherits stale permissions. Then the run re-enters Running.
|
|
170
|
+
*/
|
|
171
|
+
resume(runId: string): void;
|
|
172
|
+
/**
|
|
173
|
+
* Hard abort / kill switch (§5, §8.6): interrupt everything immediately and
|
|
174
|
+
* flag every in-flight task dirty — a hard stop may leave half-applied edits.
|
|
175
|
+
*/
|
|
176
|
+
panic(runId: string): Promise<void>;
|
|
177
|
+
/** Number of workers currently in flight. */
|
|
178
|
+
get inFlight(): number;
|
|
179
|
+
/**
|
|
180
|
+
* Halts the dispatch loop for shutdown. Late worker `done` callbacks that fire
|
|
181
|
+
* after the store closes become no-ops, so nothing touches a closed database.
|
|
182
|
+
*/
|
|
183
|
+
stop(): void;
|
|
184
|
+
/**
|
|
185
|
+
* One dispatch tick (§5). Selects ready tasks and spawns workers up to the
|
|
186
|
+
* concurrency limit. The budget gate is a single choke-point (§13.10): if the
|
|
187
|
+
* run is stopped, nothing new is dispatched.
|
|
188
|
+
*/
|
|
189
|
+
tick(runId: string): Promise<void>;
|
|
190
|
+
private dependenciesMet;
|
|
191
|
+
private dispatch;
|
|
192
|
+
/**
|
|
193
|
+
* Reacts to a settled worker (§5, §13). A failure while the run is
|
|
194
|
+
* pausing/paused is an interrupt, not a real failure — the task is marked
|
|
195
|
+
* `paused` for resume. A genuine failure retries up to `retry.max_attempts`,
|
|
196
|
+
* feeding router R5 escalation, before it is left `failed`.
|
|
197
|
+
*/
|
|
198
|
+
private onWorkerSettled;
|
|
199
|
+
/**
|
|
200
|
+
* Detects scope completion (autonomous-loop.md §3.2, G1). For each active
|
|
201
|
+
* scope whose tasks are all terminal, transitions it to `done` (none failed)
|
|
202
|
+
* or `failed` (≥1 failed after retries) and emits `scope.done`/`scope.failed`.
|
|
203
|
+
* A scope with no tasks, or holding a non-terminal task (queued/paused/
|
|
204
|
+
* blocked), is left untouched. Idempotent: already-terminal scopes are
|
|
205
|
+
* skipped, so this is safe to call after every worker settles.
|
|
206
|
+
*/
|
|
207
|
+
private settleScopesFor;
|
|
208
|
+
/**
|
|
209
|
+
* Opt-in auto-merge of a settled scope branch into the run's base branch
|
|
210
|
+
* (spec 002 v2). Conservative by design: any skip (dirty checkout, wrong
|
|
211
|
+
* branch, conflict) leaves the branch for manual merge — the default flow.
|
|
212
|
+
* Every outcome is audited.
|
|
213
|
+
*/
|
|
214
|
+
private maybeAutoMerge;
|
|
215
|
+
/**
|
|
216
|
+
* Detects a rate-limit signal in a worker failure (§7.4). If found, engages
|
|
217
|
+
* backpressure and re-queues the task without consuming a retry attempt — the
|
|
218
|
+
* dispatch gate holds it until the limit clears. Returns true when handled.
|
|
219
|
+
*/
|
|
220
|
+
private handleLimitSignal;
|
|
221
|
+
/** Bounded retry (§5 `failed → queued`, §13). Requeues or gives up. */
|
|
222
|
+
private handleFailure;
|
|
223
|
+
private emitTaskState;
|
|
224
|
+
/** Registers the autonomous controller (autonomous-loop.md §3.1, G4). */
|
|
225
|
+
setAutoLoop(hook: AutoLoopHook): void;
|
|
226
|
+
private maybeFinish;
|
|
227
|
+
/**
|
|
228
|
+
* Marks a run terminal (done/failed), emits the transition, stops the interval
|
|
229
|
+
* timer, and writes the final report (§11). Used by `maybeFinish` and, in auto
|
|
230
|
+
* mode, by the controller when success criteria are satisfied.
|
|
231
|
+
*/
|
|
232
|
+
finalizeRun(runId: string, state: "done" | "failed", reason?: string): void;
|
|
233
|
+
/**
|
|
234
|
+
* Parks an auto-loop run as `paused` with a reason (autonomous-loop.md §3.1):
|
|
235
|
+
* the runaway guards (`cycle_cap`, `no_progress`) and the supervised approval
|
|
236
|
+
* gate (`awaiting_replan_approval`) all land here. Non-terminal — an operator
|
|
237
|
+
* (or a mode change) can resume. Halts the dispatch loop via the run state.
|
|
238
|
+
*/
|
|
239
|
+
parkRun(runId: string, reason: string): void;
|
|
240
|
+
private emitRunState;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,IAAI,EAEJ,kBAAkB,EAClB,IAAI,EACJ,OAAO,EACP,GAAG,EACH,KAAK,EACL,IAAI,EACL,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA2BtD;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC;IACd,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,4EAA4E;AAC5E,qBAAa,YAAY;IAeX,OAAO,CAAC,QAAQ,CAAC,IAAI;IAdjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,2EAA2E;IAC3E,OAAO,CAAC,OAAO,CAAS;IACxB,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,2EAA2E;IAC3E,OAAO,CAAC,UAAU,CAAuB;gBAEZ,IAAI,EAAE,gBAAgB;IAQnD,wDAAwD;IACxD,OAAO,CAAC,eAAe;IAMvB,6EAA6E;IAC7E,OAAO,CAAC,UAAU;IAQlB,mEAAmE;IACnE,OAAO,CAAC,cAAc;IActB,kFAAkF;IAClF,OAAO,CAAC,SAAS;IAMjB;;;;OAIG;IACH,iBAAiB,CACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,WAAW,EACtD,OAAO,CAAC,EAAE,MAAM,GACf,IAAI;IA4CP,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAI3D;;;;;OAKG;IACH,iBAAiB,CACf,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;KACnC,GACA,IAAI;IAyCP,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;IAI9D,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAI3D,+EAA+E;IAC/E,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC,6EAA6E;IAC7E,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE;IAUpC;;;;OAIG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IAW3E;;;;OAIG;IACH,WAAW,CACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,GACjB;QAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE;IAarC;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOhC;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG;QAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE;IAM3E;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;IAgFlB,gEAAgE;IAChE,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,+EAA+E;QAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GACA,GAAG;IAkDN;;;;;OAKG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCpE,iEAAiE;IACjE,OAAO,CAAC,KAAK;IAOb;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoB3B;;;OAGG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAczC,6CAA6C;IAC7C,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;OAGG;IACH,IAAI,IAAI,IAAI;IAMZ;;;;OAIG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DxC,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,QAAQ;IAiJhB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAuCvB;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAoDvB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAiCtB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA0CzB,uEAAuE;IACvE,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,aAAa;IAoBrB,yEAAyE;IACzE,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIrC,OAAO,CAAC,WAAW;IA0BnB;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAU3E;;;;;OAKG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAU5C,OAAO,CAAC,YAAY;CAWrB"}
|