harness-dispatch 0.4.0 → 0.6.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.
Files changed (185) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/README.md +232 -87
  3. package/config.default.yaml +416 -397
  4. package/dist/auth.d.ts.map +1 -1
  5. package/dist/auth.js +2 -2
  6. package/dist/auth.js.map +1 -1
  7. package/dist/billing.d.ts +35 -4
  8. package/dist/billing.d.ts.map +1 -1
  9. package/dist/billing.js +48 -17
  10. package/dist/billing.js.map +1 -1
  11. package/dist/bin.d.ts.map +1 -1
  12. package/dist/bin.js +147 -91
  13. package/dist/bin.js.map +1 -1
  14. package/dist/breaker-store.d.ts +60 -9
  15. package/dist/breaker-store.d.ts.map +1 -1
  16. package/dist/breaker-store.js +246 -50
  17. package/dist/breaker-store.js.map +1 -1
  18. package/dist/circuit-breaker.d.ts +35 -0
  19. package/dist/circuit-breaker.d.ts.map +1 -1
  20. package/dist/circuit-breaker.js +68 -11
  21. package/dist/circuit-breaker.js.map +1 -1
  22. package/dist/config/coercions.d.ts +31 -0
  23. package/dist/config/coercions.d.ts.map +1 -0
  24. package/dist/config/coercions.js +169 -0
  25. package/dist/config/coercions.js.map +1 -0
  26. package/dist/config/env-interpolation.d.ts +36 -0
  27. package/dist/config/env-interpolation.d.ts.map +1 -0
  28. package/dist/config/env-interpolation.js +73 -0
  29. package/dist/config/env-interpolation.js.map +1 -0
  30. package/dist/config/protocol.d.ts +51 -0
  31. package/dist/config/protocol.d.ts.map +1 -0
  32. package/dist/config/protocol.js +300 -0
  33. package/dist/config/protocol.js.map +1 -0
  34. package/dist/config/route-fields.d.ts +72 -0
  35. package/dist/config/route-fields.d.ts.map +1 -0
  36. package/dist/config/route-fields.js +128 -0
  37. package/dist/config/route-fields.js.map +1 -0
  38. package/dist/config/validation.d.ts +72 -0
  39. package/dist/config/validation.d.ts.map +1 -0
  40. package/dist/config/validation.js +189 -0
  41. package/dist/config/validation.js.map +1 -0
  42. package/dist/config.d.ts +19 -2
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +214 -635
  45. package/dist/config.js.map +1 -1
  46. package/dist/configure-yaml.d.ts +23 -0
  47. package/dist/configure-yaml.d.ts.map +1 -0
  48. package/dist/configure-yaml.js +193 -0
  49. package/dist/configure-yaml.js.map +1 -0
  50. package/dist/dispatch-log.d.ts.map +1 -1
  51. package/dist/dispatch-log.js +2 -3
  52. package/dist/dispatch-log.js.map +1 -1
  53. package/dist/dispatchers/base.d.ts +3 -0
  54. package/dist/dispatchers/base.d.ts.map +1 -1
  55. package/dist/dispatchers/base.js.map +1 -1
  56. package/dist/dispatchers/generic-cli.d.ts +15 -1
  57. package/dist/dispatchers/generic-cli.d.ts.map +1 -1
  58. package/dist/dispatchers/generic-cli.js +69 -5
  59. package/dist/dispatchers/generic-cli.js.map +1 -1
  60. package/dist/dispatchers/openai-compatible.d.ts.map +1 -1
  61. package/dist/dispatchers/openai-compatible.js +70 -2
  62. package/dist/dispatchers/openai-compatible.js.map +1 -1
  63. package/dist/dispatchers/shared/kill-tree.d.ts +17 -4
  64. package/dist/dispatchers/shared/kill-tree.d.ts.map +1 -1
  65. package/dist/dispatchers/shared/kill-tree.js +28 -4
  66. package/dist/dispatchers/shared/kill-tree.js.map +1 -1
  67. package/dist/dispatchers/shared/rate-limit-headers.d.ts +17 -0
  68. package/dist/dispatchers/shared/rate-limit-headers.d.ts.map +1 -1
  69. package/dist/dispatchers/shared/rate-limit-headers.js +27 -0
  70. package/dist/dispatchers/shared/rate-limit-headers.js.map +1 -1
  71. package/dist/dispatchers/shared/stream-subprocess.d.ts +11 -0
  72. package/dist/dispatchers/shared/stream-subprocess.d.ts.map +1 -1
  73. package/dist/dispatchers/shared/stream-subprocess.js +62 -35
  74. package/dist/dispatchers/shared/stream-subprocess.js.map +1 -1
  75. package/dist/dispatchers/shared/subprocess.d.ts.map +1 -1
  76. package/dist/dispatchers/shared/subprocess.js +3 -0
  77. package/dist/dispatchers/shared/subprocess.js.map +1 -1
  78. package/dist/dispatchers/shared/which-available.d.ts.map +1 -1
  79. package/dist/dispatchers/shared/which-available.js +16 -2
  80. package/dist/dispatchers/shared/which-available.js.map +1 -1
  81. package/dist/file-lock.d.ts +17 -0
  82. package/dist/file-lock.d.ts.map +1 -0
  83. package/dist/file-lock.js +143 -0
  84. package/dist/file-lock.js.map +1 -0
  85. package/dist/http/parse.d.ts +64 -0
  86. package/dist/http/parse.d.ts.map +1 -0
  87. package/dist/http/parse.js +230 -0
  88. package/dist/http/parse.js.map +1 -0
  89. package/dist/http/server.d.ts +2 -0
  90. package/dist/http/server.d.ts.map +1 -1
  91. package/dist/http/server.js +249 -286
  92. package/dist/http/server.js.map +1 -1
  93. package/dist/index.d.ts +1 -1
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +3 -2
  96. package/dist/index.js.map +1 -1
  97. package/dist/job-runner.js +23 -5
  98. package/dist/job-runner.js.map +1 -1
  99. package/dist/jobs/context.d.ts +17 -0
  100. package/dist/jobs/context.d.ts.map +1 -0
  101. package/dist/jobs/context.js +84 -0
  102. package/dist/jobs/context.js.map +1 -0
  103. package/dist/jobs/store.d.ts +80 -0
  104. package/dist/jobs/store.d.ts.map +1 -0
  105. package/dist/jobs/store.js +279 -0
  106. package/dist/jobs/store.js.map +1 -0
  107. package/dist/jobs/types.d.ts +135 -0
  108. package/dist/jobs/types.d.ts.map +1 -0
  109. package/dist/jobs/types.js +11 -0
  110. package/dist/jobs/types.js.map +1 -0
  111. package/dist/jobs.d.ts +165 -85
  112. package/dist/jobs.d.ts.map +1 -1
  113. package/dist/jobs.js +824 -208
  114. package/dist/jobs.js.map +1 -1
  115. package/dist/leaderboard.d.ts +24 -1
  116. package/dist/leaderboard.d.ts.map +1 -1
  117. package/dist/leaderboard.js +94 -2
  118. package/dist/leaderboard.js.map +1 -1
  119. package/dist/mcp/config-hot-reload.d.ts.map +1 -1
  120. package/dist/mcp/config-hot-reload.js +1 -1
  121. package/dist/mcp/config-hot-reload.js.map +1 -1
  122. package/dist/mcp/dispatcher-factory.d.ts +16 -1
  123. package/dist/mcp/dispatcher-factory.d.ts.map +1 -1
  124. package/dist/mcp/dispatcher-factory.js +41 -3
  125. package/dist/mcp/dispatcher-factory.js.map +1 -1
  126. package/dist/mcp/tool-schemas.d.ts +194 -0
  127. package/dist/mcp/tool-schemas.d.ts.map +1 -0
  128. package/dist/mcp/tool-schemas.js +311 -0
  129. package/dist/mcp/tool-schemas.js.map +1 -0
  130. package/dist/mcp/tools.d.ts +26 -51
  131. package/dist/mcp/tools.d.ts.map +1 -1
  132. package/dist/mcp/tools.js +122 -151
  133. package/dist/mcp/tools.js.map +1 -1
  134. package/dist/observability/index.d.ts +16 -3
  135. package/dist/observability/index.d.ts.map +1 -1
  136. package/dist/observability/index.js +23 -7
  137. package/dist/observability/index.js.map +1 -1
  138. package/dist/observability/spans.d.ts.map +1 -1
  139. package/dist/observability/spans.js +4 -1
  140. package/dist/observability/spans.js.map +1 -1
  141. package/dist/quota.d.ts +106 -22
  142. package/dist/quota.d.ts.map +1 -1
  143. package/dist/quota.js +198 -58
  144. package/dist/quota.js.map +1 -1
  145. package/dist/route-policy.d.ts.map +1 -1
  146. package/dist/route-policy.js +13 -3
  147. package/dist/route-policy.js.map +1 -1
  148. package/dist/router.d.ts +29 -1
  149. package/dist/router.d.ts.map +1 -1
  150. package/dist/router.js +102 -40
  151. package/dist/router.js.map +1 -1
  152. package/dist/safety.d.ts.map +1 -1
  153. package/dist/safety.js +11 -2
  154. package/dist/safety.js.map +1 -1
  155. package/dist/state-dir.d.ts +17 -0
  156. package/dist/state-dir.d.ts.map +1 -0
  157. package/dist/state-dir.js +21 -0
  158. package/dist/state-dir.js.map +1 -0
  159. package/dist/status.d.ts +49 -0
  160. package/dist/status.d.ts.map +1 -1
  161. package/dist/status.js +67 -4
  162. package/dist/status.js.map +1 -1
  163. package/dist/types.d.ts +74 -1
  164. package/dist/types.d.ts.map +1 -1
  165. package/dist/working-dir.d.ts +13 -0
  166. package/dist/working-dir.d.ts.map +1 -1
  167. package/dist/working-dir.js +27 -0
  168. package/dist/working-dir.js.map +1 -1
  169. package/dist/workspace-lock.d.ts +40 -0
  170. package/dist/workspace-lock.d.ts.map +1 -0
  171. package/dist/workspace-lock.js +258 -0
  172. package/dist/workspace-lock.js.map +1 -0
  173. package/dist/workspace-resolve.d.ts +98 -0
  174. package/dist/workspace-resolve.d.ts.map +1 -0
  175. package/dist/workspace-resolve.js +382 -0
  176. package/dist/workspace-resolve.js.map +1 -0
  177. package/dist/workspaces.d.ts +16 -0
  178. package/dist/workspaces.d.ts.map +1 -1
  179. package/dist/workspaces.js +166 -22
  180. package/dist/workspaces.js.map +1 -1
  181. package/package.json +99 -96
  182. package/dist/dashboard/live.d.ts +0 -49
  183. package/dist/dashboard/live.d.ts.map +0 -1
  184. package/dist/dashboard/live.js +0 -149
  185. package/dist/dashboard/live.js.map +0 -1
package/dist/jobs.d.ts CHANGED
@@ -10,91 +10,13 @@
10
10
  * by the unit-test suite, which injects fake dispatchers a separate
11
11
  * process could not see).
12
12
  */
13
- import type { RuntimeHolder } from "./mcp/config-hot-reload.js";
14
- import type { DispatchResult, DispatcherEvent, RouteHints, RoutingDecision, WorkspacePolicy } from "./types.js";
15
- export interface JobDeps {
16
- holder: RuntimeHolder;
17
- }
18
- export interface StartJobInput {
19
- prompt: string;
20
- files?: string[];
21
- workingDir?: string;
22
- hints?: RouteHints;
23
- workspacePolicy?: WorkspacePolicy;
24
- service?: string;
25
- /**
26
- * Live dispatcher-event tap, used by the `dispatch` tool to forward MCP
27
- * progress notifications during its inline grace window. Never serialized
28
- * (the manifest lists its fields explicitly), never awaited, and a throw
29
- * here must not fail the job.
30
- */
31
- onEvent?: (event: DispatcherEvent) => void;
32
- }
33
- export interface JobStatus {
34
- jobId: string;
35
- /**
36
- * "orphaned" is never written to disk — it's computed on read: a job
37
- * whose status file says "running" but whose heartbeat (updatedAt) has
38
- * gone stale means the server process that owned the background run
39
- * exited (session restart, crash) and the run died with it. Reporting it
40
- * as still "running" forever is a lie that makes callers poll a corpse.
41
- */
42
- status: "queued" | "running" | "completed" | "failed" | "orphaned";
43
- createdAt: string;
44
- updatedAt: string;
45
- jobDir: string;
46
- service?: string;
47
- route?: string;
48
- success?: boolean;
49
- /** Bounded copy — full text in output/stderr.log. */
50
- error?: string;
51
- durationMs?: number;
52
- /** Suggested seconds to wait before polling action=get again. */
53
- nextPollSeconds?: number;
54
- /** Agent-facing guidance on how to collect the result. */
55
- instructions?: string;
56
- /** Set when workingDir was omitted and defaulted to the router's own cwd. */
57
- warning?: string;
58
- }
59
- export interface JobManifest {
60
- jobId: string;
61
- createdAt: string;
62
- workingDir: string;
63
- promptPath: string;
64
- files: Array<{
65
- originalPath: string;
66
- snapshotPath?: string;
67
- sizeBytes?: number;
68
- error?: string;
69
- }>;
70
- hints?: RouteHints;
71
- workspacePolicy?: WorkspacePolicy;
72
- service?: string;
73
- /** Set when workingDir was omitted and defaulted to the router's own cwd. */
74
- warning?: string;
75
- }
76
- export interface JobResultPayload {
77
- jobId: string;
78
- result: DispatchResult;
79
- decision: RoutingDecision | null;
80
- }
81
- /**
82
- * Config-driven retention (`retention: { jobs_days: N }` in config.yaml) —
83
- * set at runtime bootstrap and on every hot reload. Precedence:
84
- * HARNESS_DISPATCH_JOB_MAX_AGE_MS env > config > 7-day default.
85
- */
86
- export declare function setJobRetentionDays(days: number | undefined): void;
87
- export interface StartedJob {
88
- status: JobStatus;
89
- /**
90
- * Resolves once the run has reached a terminal state on disk (result.json
91
- * or a failed/orphaned status). Never rejects. In detached mode this is a
92
- * disk watcher on the job directory — the run itself lives in a separate
93
- * job-runner process; in in-process mode (HARNESS_DISPATCH_INPROC_JOBS=1,
94
- * used by unit tests with injected fakes) it is the runJob promise itself.
95
- */
96
- completion: Promise<void>;
97
- }
13
+ import type { RouterConfig } from "./types.js";
14
+ import { buildContextPreamble } from "./jobs/context.js";
15
+ import { setJobRetentionDays } from "./jobs/store.js";
16
+ import type { JobDeps, JobManifest, JobResultPayload, JobStatus, StartedJob, StartJobInput } from "./jobs/types.js";
17
+ export { buildContextPreamble };
18
+ export { setJobRetentionDays };
19
+ export type { JobDeps, JobManifest, JobResultPayload, JobStatus, StartedJob, StartJobInput };
98
20
  /**
99
21
  * Rebuild a job's input from its on-disk bundle and execute it. This is the
100
22
  * detached runner's whole job; the manifest deliberately carries everything
@@ -103,6 +25,83 @@ export interface StartedJob {
103
25
  * created.
104
26
  */
105
27
  export declare function executeJobDir(deps: JobDeps, jobDir: string): Promise<void>;
28
+ /**
29
+ * Occupied slots: jobs actually executing right now. Counts `running` (and
30
+ * plain `queued` — a runner spawned but not yet started) only while the
31
+ * heartbeat is fresh, so a crashed runner's slot is reclaimed by the same
32
+ * ORPHAN_THRESHOLD_MS rule that already frees its status. Slot-queued jobs
33
+ * are waiting for a slot, not holding one.
34
+ */
35
+ /**
36
+ * What one run of a route costs against the concurrency budget.
37
+ *
38
+ * Unknown routes count as a full 1.0 on purpose. A job that has not been
39
+ * routed yet (no forced `service`) has no weight to look up, and this bound
40
+ * exists because a measured burst of 13 concurrent CLIs exhausted memory —
41
+ * so the safe assumption for "might be anything" is "might be heavy".
42
+ */
43
+ export declare function resourceWeightFor(status: JobStatus, config: RouterConfig | undefined): number;
44
+ /**
45
+ * Capacity currently in use, as a weighted sum rather than a job count.
46
+ *
47
+ * With every weight at 1.0 this is exactly the old count, so an existing
48
+ * `max_concurrent_runs` keeps its previous meaning.
49
+ */
50
+ export declare function activeCapacity(statuses: Array<{
51
+ status: JobStatus;
52
+ }>, config: RouterConfig | undefined): number;
53
+ /**
54
+ * How many supervisor PROCESSES may exist, regardless of how many jobs run.
55
+ *
56
+ * Previously every job got its own detached Node process. Measured on Windows
57
+ * with Node 24: a bare node process is 52 MB RSS and one that has bootstrapped
58
+ * a runtime is 65 MB, against ~54 MB for the agent CLI it exists to supervise.
59
+ * So more than half the memory of a concurrent run was wrapper, and it scaled
60
+ * linearly — 13 concurrent jobs meant 845 MB of supervision before any agent
61
+ * had read a file. That is the concurrency ceiling.
62
+ *
63
+ * A supervisor is almost entirely idle: it waits on a child process and writes
64
+ * the result. One can watch several at once for the cost of async I/O, so
65
+ * wrapper memory becomes O(1) in the number of jobs instead of O(N), capped
66
+ * here at ~260 MB.
67
+ *
68
+ * Four rather than one purely to bound blast radius: a supervisor crash strands
69
+ * only the jobs it held. Those are recoverable anyway — the job directory is
70
+ * the source of truth and the heartbeat check already marks stranded jobs
71
+ * orphaned — but losing a quarter of in-flight work beats losing all of it.
72
+ */
73
+ export declare const SUPERVISOR_POOL_SIZE = 4;
74
+ /**
75
+ * Take exclusive ownership of a job directory.
76
+ *
77
+ * `wx` fails if the file exists, atomically, on both Windows and POSIX — which
78
+ * is what stops two supervisors racing onto the same job. A claim left behind
79
+ * by a crashed supervisor is reclaimed once that job's heartbeat has gone
80
+ * stale, by the same ORPHAN_THRESHOLD_MS rule used everywhere else.
81
+ *
82
+ * Exported for tests: the one-winner property under concurrent reclaim is the
83
+ * invariant, and it is only checkable by calling this directly.
84
+ */
85
+ export declare function claimJobDir(jobDir: string, status: JobStatus): Promise<boolean>;
86
+ /**
87
+ * Supervisor main loop: claim work, run several jobs at once, exit when idle.
88
+ *
89
+ * Exiting on idle keeps the no-jobs steady state at zero processes, same as
90
+ * before — the pool is a way to share supervision cost while work exists, not
91
+ * a daemon.
92
+ */
93
+ export declare function runSupervisor(deps: JobDeps, supervisorId?: string): Promise<void>;
94
+ /**
95
+ * Start slot-queued jobs, oldest first, until the machine is at its limit.
96
+ *
97
+ * Deliberately has no daemon behind it: this runs on every new dispatch and
98
+ * again as each runner exits, which between them covers every moment a slot
99
+ * can free. The cost of that choice is that if every runner dies while jobs
100
+ * are queued, the queue resumes on the next dispatch rather than immediately.
101
+ * Bounded waiting was the explicit alternative and was not chosen — a queued
102
+ * job keeps its jobId and its artifacts either way, so nothing is lost.
103
+ */
104
+ export declare function drainSlotQueue(config: RouterConfig | undefined, configPath: string | undefined): Promise<void>;
106
105
  export declare function startAsyncJob(deps: JobDeps, input: StartJobInput): Promise<JobStatus>;
107
106
  export declare function startAsyncJobTracked(deps: JobDeps, input: StartJobInput): Promise<StartedJob>;
108
107
  export declare function getAsyncJob(jobId: string): Promise<{
@@ -113,4 +112,85 @@ export declare function getAsyncJob(jobId: string): Promise<{
113
112
  partialOutput?: string;
114
113
  }>;
115
114
  export declare function listAsyncJobs(): Promise<JobStatus[]>;
115
+ /** What a cancel request actually did — the caller needs to tell these apart. */
116
+ export interface CancelOutcome {
117
+ jobId: string;
118
+ /**
119
+ * `cancelled` — it was queued and never started; stopped outright.
120
+ * `cancelling` — it is running; teardown requested and lands shortly.
121
+ * `already_finished` — it had already reached a terminal state; nothing done.
122
+ */
123
+ outcome: "cancelled" | "cancelling" | "already_finished";
124
+ status: JobStatus["status"];
125
+ message: string;
126
+ }
127
+ /**
128
+ * Ask a job to stop.
129
+ *
130
+ * Cancellation cannot be a signal here: jobs run inside POOLED supervisors,
131
+ * and the only pid recorded against a job belongs to a process that is also
132
+ * running other jobs, so signalling it would cancel work nobody asked to
133
+ * cancel. Instead this writes a marker the run itself honours — it drops out
134
+ * of its event stream, which triggers the dispatcher's teardown (killTree on
135
+ * the agent CLI and its children) and releases the workspace lock through the
136
+ * same path a normal finish uses.
137
+ *
138
+ * Two consequences worth stating plainly, because a caller who assumes
139
+ * otherwise will be surprised:
140
+ *
141
+ * 1. It is not instantaneous. A running job stops within about a second;
142
+ * `cancelling` means requested, not done. Poll job_status to see it land.
143
+ * 2. Work already done is NOT undone. A cancelled agent may have already
144
+ * edited files in the workspace, and those edits stay. Cancelling stops
145
+ * further work; it is not a rollback.
146
+ *
147
+ * A cancelled run is deliberately not recorded as a failure: the route's
148
+ * circuit breaker and failure count never see it, because the caller changing
149
+ * their mind says nothing about whether the route works.
150
+ */
151
+ export declare function cancelJob(jobId: string, reason?: string): Promise<CancelOutcome>;
152
+ /**
153
+ * Inspect or resolve the isolated workspace a finished job left behind.
154
+ *
155
+ * Looks the job up the same way job_status does, then hands off to
156
+ * workspace-resolve.ts. Kept here so the caller only ever needs a jobId —
157
+ * where the workspace lives, and which policy produced it, are details
158
+ * recorded in the job's own result.
159
+ */
160
+ export declare function resolveJobWorkspace(jobId: string, action: "diff" | "apply" | "discard", opts?: {
161
+ force?: boolean;
162
+ }): Promise<unknown>;
163
+ export interface RetryOutcome {
164
+ jobId: string;
165
+ retryOf: string;
166
+ service?: string;
167
+ reusedFrom: {
168
+ prompt: boolean;
169
+ files: number;
170
+ workingDir: string;
171
+ };
172
+ message: string;
173
+ }
174
+ /**
175
+ * Run a finished job's task again.
176
+ *
177
+ * The last verb missing from the job lifecycle: you could start work, watch
178
+ * it, stop it, and resolve its workspace — but if it failed, reproducing it
179
+ * meant reconstructing the prompt, the file list, the working directory and
180
+ * the hints by hand, from a job record that already holds all four. The
181
+ * machinery to execute a job bundle existed (executeJobDir) and simply was
182
+ * not reachable from outside.
183
+ *
184
+ * The prompt is taken from prompt.md, which is the FROZEN prompt — including
185
+ * any context preamble the original dispatch rendered in. A retry therefore
186
+ * reproduces what the delegate actually saw, not what the caller typed.
187
+ *
188
+ * `service` retargets the attempt, which is the common case rather than an
189
+ * afterthought: the reason a run failed is often the route, not the task
190
+ * ("codex hit its usage limit — try claude"). Omit it to reuse the original
191
+ * route, or to let the router pick again if the original had none.
192
+ */
193
+ export declare function retryJob(jobId: string, deps: JobDeps, opts?: {
194
+ service?: string;
195
+ }): Promise<RetryOutcome>;
116
196
  //# sourceMappingURL=jobs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,OAAO,KAAK,EAIV,YAAY,EAGb,MAAM,YAAY,CAAC;AASpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAcL,mBAAmB,EAOpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,aAAa,EACd,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAC/B,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AAiS7F;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAchF;AAkGD;;;;;;GAMG;AACH;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAQ7F;AAeD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC,EACtC,MAAM,EAAE,YAAY,GAAG,SAAS,GAC/B,MAAM,CAUR;AAOD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAatC;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCrF;AAwBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6EvF;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAyJD,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAE3F;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CA+FnG;AAOD,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC,CA2DD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAgB1D;AAED,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,OAAO,EAAE,WAAW,GAAG,YAAY,GAAG,kBAAkB,CAAC;IACzD,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAiDtF;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,EACpC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7B,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,EACb,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9B,OAAO,CAAC,YAAY,CAAC,CA+CvB"}