@zhihaohong52/sonata 0.9.0 → 0.10.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 (53) hide show
  1. package/README.md +27 -15
  2. package/dist/build-info.js +54 -0
  3. package/dist/build-info.js.map +1 -0
  4. package/dist/catalog.js +123 -132
  5. package/dist/catalog.js.map +1 -1
  6. package/dist/cli.js +19 -3
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/agents.js +30 -6
  9. package/dist/commands/agents.js.map +1 -1
  10. package/dist/commands/catalog.js +7 -1
  11. package/dist/commands/catalog.js.map +1 -1
  12. package/dist/commands/doctor.js +69 -16
  13. package/dist/commands/doctor.js.map +1 -1
  14. package/dist/commands/serve.js +116 -44
  15. package/dist/commands/serve.js.map +1 -1
  16. package/dist/commands/sync.js +149 -12
  17. package/dist/commands/sync.js.map +1 -1
  18. package/dist/commands/usage.js +1 -1
  19. package/dist/commands/usage.js.map +1 -1
  20. package/dist/config.js +28 -7
  21. package/dist/config.js.map +1 -1
  22. package/dist/init/guidance.js +34 -5
  23. package/dist/init/guidance.js.map +1 -1
  24. package/dist/init/plan.js +13 -3
  25. package/dist/init/plan.js.map +1 -1
  26. package/dist/init/toml.js +2 -1
  27. package/dist/init/toml.js.map +1 -1
  28. package/dist/ledger.js +89 -25
  29. package/dist/ledger.js.map +1 -1
  30. package/dist/native/router.js +19 -2
  31. package/dist/native/router.js.map +1 -1
  32. package/dist/native/ui-detail.js +174 -0
  33. package/dist/native/ui-detail.js.map +1 -0
  34. package/dist/native/ui-runs.js +258 -0
  35. package/dist/native/ui-runs.js.map +1 -0
  36. package/dist/native/ui-sessions.js +56 -0
  37. package/dist/native/ui-sessions.js.map +1 -0
  38. package/dist/native/ui-usage.js +56 -0
  39. package/dist/native/ui-usage.js.map +1 -0
  40. package/dist/native/ui.js +199 -0
  41. package/dist/native/ui.js.map +1 -0
  42. package/dist/tui-ink/agents-app.js +16 -10
  43. package/dist/tui-ink/agents-app.js.map +1 -1
  44. package/dist/tui-ink/app-state.js +5 -4
  45. package/dist/tui-ink/app-state.js.map +1 -1
  46. package/dist/tui-ink/app.js +41 -13
  47. package/dist/tui-ink/app.js.map +1 -1
  48. package/dist/tui-ink/components/models-step.js +12 -3
  49. package/dist/tui-ink/components/models-step.js.map +1 -1
  50. package/hooks/ensure-serve.mjs +0 -1
  51. package/package.json +5 -3
  52. package/skills/loop/SKILL.md +22 -13
  53. package/ui/index.html +275 -0
package/README.md CHANGED
@@ -17,8 +17,9 @@ Two ways to run it:
17
17
  - **Native** — the foreign model runs *inside Claude Code's own loop*: its
18
18
  tools, its permission modes, no separate TUI. A local routing proxy
19
19
  (`sonata serve`) makes this possible; see the [Native path guide](docs/guide/native-path.md).
20
- This is the default: `sonata init` generates one tier agent per role, each
21
- backed by a ranked list of models the router tries in order.
20
+ This is the default: `sonata init` generates one agent per role and present tier
21
+ (up to 12 agents), each backed by a ranked list of models the router tries in
22
+ order.
22
23
  - **Harness** — the foreign model runs in *its own* CLI (OpenCode, Codex, Pi,
23
24
  Reasonix), launched in a detached tmux session and driven through
24
25
  `sonata dispatch`. No proxy required — this is the fallback lane: when
@@ -192,13 +193,17 @@ Picking a harness-catalogued provider then shows its models to select from:
192
193
  2 of 13 · space toggle · type to filter · enter confirm · esc cancel
193
194
  ```
194
195
 
195
- Then it asks you to rank your selected models into `simple`/`complex` tiers per
196
- role — pre-sorted by a cached Artificial Analysis catalog (`sonata catalog
196
+ Then it asks you to rank your selected models into `simple`, `normal` and
197
+ `complex` tiers per role — pre-sorted by a cached Artificial Analysis catalog
198
+ (`sonata catalog
197
199
  update`, with a free key from [artificialanalysis.ai](https://artificialanalysis.ai))
198
200
  when one exists, or built-in defaults otherwise. `complex` is ordered by raw
199
- capability and `simple` by capability **per task-dollar**, so demanding work
200
- goes to the strongest model you picked and grunt work to the one that returns
201
- the most per dollar rather than merely the cheapest. Set `avoid_gateways` in
201
+ capability. `normal` is ordered by capability **per task-dollar** without a cost
202
+ cap, while `simple` uses that same value order under a cost cap of 12 times the
203
+ best-value model's cost per task. Thus `simple` is a cost-capped prefix of
204
+ `normal`: demanding work goes to the strongest model you picked, ordinary work
205
+ gets the best value, and grunt work stays within the cheaper fallback chain. Set
206
+ `avoid_gateways` in
202
207
  `sonata.toml` to rank a particular gateway's models last without dropping them
203
208
  as fallbacks. It then asks whether the config
204
209
  applies to this project or the whole machine, writes `sonata.toml`, generates
@@ -283,21 +288,28 @@ that suits it:
283
288
 
284
289
  > "Use code-simple to convert these callbacks to async/await."
285
290
 
291
+ > "Use code-normal to add this flag and its tests."
292
+
286
293
  > "Get review-complex to look at the auth refactor."
287
294
 
288
- Judging `simple` vs `complex` is a call you make per task mechanical,
289
- well-specified, single-file work is `simple`; cross-cutting, ambiguous, or
290
- design-sensitive work is `complex`. When unsure, use `-complex`. The
291
- `sonata-loop` skill `sonata init` installs (`skills/loop/SKILL.md`) drives
292
- this across a whole feature: plan, route each task to a tier, gate behind
293
- review, escalate a task to `complex` after two failed reviews at `simple`.
295
+ Choose a tier by the task, not its size: `simple` is specified closely enough
296
+ that the diff can be written without asking a question; `normal` is the default
297
+ when you know what to change but need to fit it into the surrounding code;
298
+ `complex` needs a design decision or the meaning of done is ambiguous. Size is
299
+ not difficulty: a large mechanical change is `simple`, while a three-line
300
+ interface decision is `complex`. When unsure, use `-normal`; a task that fails
301
+ review twice is re-run one tier up. The `sonata-loop` skill `sonata init` installs
302
+ (`skills/loop/SKILL.md`) drives this across a whole feature: plan, route each task
303
+ to a tier, gate behind review, and escalate `simple` to `normal` to `complex`
304
+ after repeated failures.
294
305
 
295
306
  They compose with everything Claude Code already does — parallel fan-out,
296
307
  workflows, and `isolation: "worktree"`.
297
308
 
298
309
  ## How it works
299
310
 
300
- `sonata init` generates one agent per role × difficulty tier — `code-simple`,
311
+ `sonata init` generates one agent per role × present tier — up to 12 agents
312
+ across `simple`, `normal` and `complex` — such as `code-simple`, `code-normal`,
301
313
  `code-complex`, `review-simple`, and so on. Each agent's frontmatter names a
302
314
  router alias (`model: sonata-code-simple`), not a specific model:
303
315
 
@@ -376,7 +388,7 @@ killed and the run is reported `DONE`, `degraded`, with a report beginning
376
388
  | `sonata auth` | Manage native-path gateway keys (`list`, `add <gateway>`, `remove <gateway>`, `login <gateway>`) |
377
389
  | `sonata catalog [update]` | Show the cached Artificial Analysis catalog's age, or refresh it (needs a stored `artificialanalysis` key). `sonata doctor` warns when it goes stale |
378
390
  | `sonata litellm install\|status` | Install or report sonata's own pinned LiteLLM venv. `status` answering `not-required` is healthy — it means no gateway in this config routes through it |
379
- | `sonata serve` | Run the native router and its managed LiteLLM child (`--daemon` detaches) |
391
+ | `sonata serve` | Run the native router and its managed LiteLLM child (`--daemon` detaches); UI: `http://localhost:4100/` |
380
392
  | `sonata restart` | Kill whatever sonata router currently holds the port and start a fresh daemon |
381
393
  | `sonata code` | Launch a Claude Code session routed through the local proxy (passes `claude` args through) |
382
394
  | `sonata route on\|off\|status [--global]` | Route every plain `claude` session in the project (or, with `--global`, every project) through the proxy via settings.local.json/settings.json |
@@ -0,0 +1,54 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ /**
4
+ * The version string a build reports.
5
+ *
6
+ * A published install has no stamp and reports the manifest version unchanged
7
+ * — that number is the truth there, and appending anything to it would make
8
+ * `sonata --version` disagree with npm. A local build reports
9
+ * `<version>+dev.<timestamp>`, because the manifest version of a development
10
+ * install is whatever the last release set and says nothing about the code
11
+ * actually running: two clones at different commits both claim `0.9.1`.
12
+ *
13
+ * **Build metadata, not a prerelease.** The first version of this emitted
14
+ * `<version>-dev-<timestamp>`, which is a valid semver *prerelease* — and a
15
+ * prerelease sorts *below* its release, so a build made from code newer than
16
+ * 0.9.1 announced itself as older than 0.9.1. Anything that compared them
17
+ * would have got the answer backwards, which is the one question the stamp
18
+ * exists to answer. Metadata after `+` is ignored for precedence entirely, so
19
+ * the string says "0.9.1 plus these local changes" and claims nothing about
20
+ * what version is coming next.
21
+ *
22
+ * `.dirty` rides on the end when the worktree was not clean, since that is
23
+ * exactly the build whose commit does not describe it.
24
+ */
25
+ export function stampedVersion(version, info) {
26
+ if (info === undefined)
27
+ return version;
28
+ return `${version}+dev.${info.builtAt}${info.dirty ? '.dirty' : ''}`;
29
+ }
30
+ /**
31
+ * Read the stamp sitting beside the executing file, or `undefined`.
32
+ *
33
+ * Absent is the normal case twice over: a published install never has one, and
34
+ * neither does `npm run dev`, which runs `src/` through tsx and was never
35
+ * built. So an unreadable or malformed stamp degrades to "no stamp" rather
36
+ * than throwing — a version command that fails tells you less than a version
37
+ * command that omits one field.
38
+ */
39
+ export function readBuildInfo(dir) {
40
+ try {
41
+ const parsed = JSON.parse(readFileSync(join(dir, 'build-info.json'), 'utf8'));
42
+ if (typeof parsed.builtAt !== 'string' || parsed.builtAt === '')
43
+ return undefined;
44
+ return {
45
+ builtAt: parsed.builtAt,
46
+ commit: typeof parsed.commit === 'string' && parsed.commit !== '' ? parsed.commit : 'unknown',
47
+ dirty: parsed.dirty === true,
48
+ };
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ }
54
+ //# sourceMappingURL=build-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-info.js","sourceRoot":"","sources":["../src/build-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAmBjC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,IAAgB;IAC9D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACvC,OAAO,GAAG,OAAO,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACvE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAuB,CAAC;QACpG,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,EAAE;YAAE,OAAO,SAAS,CAAC;QAClF,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC7F,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI;SAC7B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
package/dist/catalog.js CHANGED
@@ -15,14 +15,6 @@ export const AA_ATTRIBUTION = 'Model rankings by Artificial Analysis — https:/
15
15
  /** Coding Index at or above this ⇒ complex-eligible. Chosen so today's
16
16
  * mid-tier coders (deepseek-v4-flash class) sit just above the line. */
17
17
  export const AA_CAPABLE_CODING_INDEX = 40;
18
- /**
19
- * Blended $/1M tokens at or below this ⇒ cheap enough for the simple tier.
20
- *
21
- * Only reaches the simple tier for a model AA has **not** costed per task;
22
- * `SIMPLE_COST_CEILING` decides the ones it has. Kept because a per-1M rate is
23
- * the only price such a model has.
24
- */
25
- export const AA_CHEAP_BLENDED_PRICE_USD = 1.0;
26
18
  /**
27
19
  * A model may cost at most this multiple of the cheapest *selected* model's
28
20
  * per-task cost and still be eligible for a simple tier.
@@ -39,7 +31,7 @@ export const AA_CHEAP_BLENDED_PRICE_USD = 1.0;
39
31
  * at $1.50/1M while costing $0.577/task — less per unit of work than five
40
32
  * models that got in, and a sixth of the way to the $1/1M bar it failed.
41
33
  *
42
- * **Relative**, for the reason `SIMPLE_CAPABILITY_FLOOR` is: an absolute bar
34
+ * **Relative**, because an absolute bar
43
35
  * is wrong in both directions. A user whose whole selection is expensive gets
44
36
  * an empty simple tier and falls back to mirroring complex, which stops the
45
37
  * tier discriminating at all; one whose selection is uniformly cheap gets
@@ -79,39 +71,6 @@ export const AA_CAPABILITY_TIE_MARGIN = 1.0;
79
71
  export function capabilityOf(entry) {
80
72
  return entry.agenticIndex ?? entry.codingIndex ?? entry.intelligenceIndex ?? 0;
81
73
  }
82
- /**
83
- * What one unit of work costs, best available measure first.
84
- *
85
- * `costPerTask` prices the work; the blended per-1M rate only prices tokens
86
- * and is a weaker proxy, kept for models AA has not costed.
87
- */
88
- export function costOfEntry(entry) {
89
- return entry.costPerTask ?? entry.blendedPriceUsd;
90
- }
91
- /**
92
- * A model must reach this fraction of the best score among the *selected*
93
- * models to be eligible for a simple tier.
94
- *
95
- * Relative, not absolute: an absolute floor is wrong in both directions —
96
- * it excludes everything when a user's whole selection is modest, and admits
97
- * junk when their selection is strong. The simple tier optimises
98
- * capability-per-dollar, and without a floor a very cheap, very weak model
99
- * wins on ratio alone.
100
- *
101
- * Set where it is to keep the tier *deep* as well as good. A tier is a ranked
102
- * fallback list, so a floor strict enough to admit one model leaves the router
103
- * nothing to fall through to and sends the first failure straight to 529 and
104
- * the dispatch lane. Measured on a real 17-model config, 0.85 admitted exactly
105
- * one model where 0.75 admits four.
106
- *
107
- * The floor is not only a depth control: it also decides the *leader*, because
108
- * a model it admits can outrank the others on value. On that same config,
109
- * raising it to 0.85 excludes the cheapest model and promotes a stronger,
110
- * dearer one. So it trades capability against both cost and resilience, and
111
- * moving it changes what grunt work actually runs on — not merely what stands
112
- * behind that choice.
113
- */
114
- export const SIMPLE_CAPABILITY_FLOOR = 0.75;
115
74
  /**
116
75
  * The key an AA score is stored and looked up under.
117
76
  *
@@ -255,8 +214,16 @@ function familiesOf(aa) {
255
214
  return index;
256
215
  }
257
216
  /**
258
- * The effort family a normalized model name belongs to, if the catalog scores
259
- * it at two or more levels. One scored level is a model, not a choice.
217
+ * The effort family a normalized model name belongs to.
218
+ *
219
+ * A family of one is still a family: AA's only DeepSeek V4.1 Flash row is
220
+ * "(Reasoning, Max Effort)", and that is a level to pin, not a level-less
221
+ * model — offered bare, the key ranks on the max-effort score and runs at
222
+ * whatever the gateway defaults to. A row stating no level is recorded at
223
+ * `none` for the same reason, so it too is a singleton family and
224
+ * `expandCandidates` emits `<key>@none`. Only a model the catalog does not
225
+ * hold, or a cache written before families were recorded, has none — which
226
+ * is the state `loadConfig` cannot check and skips on.
260
227
  *
261
228
  * Resolved through the same spellings `aaEntryFor` tries, so a name that finds
262
229
  * its score also finds its family.
@@ -270,10 +237,9 @@ export function catalogFamily(normalized, aa) {
270
237
  for (const spelling of [name, aaMatchKey(name)]) {
271
238
  const entry = aa.models[spelling];
272
239
  const fam = entry?.family !== undefined ? families.get(entry.family) : families.get(spelling);
273
- // The first spelling that identifies a model wins, even if it has no variants.
274
- if (entry !== undefined || fam !== undefined) {
275
- return fam !== undefined && fam.variants.size >= 2 ? fam : undefined;
276
- }
240
+ // The first spelling that identifies a model wins, even if it has no family.
241
+ if (entry !== undefined || fam !== undefined)
242
+ return fam;
277
243
  }
278
244
  }
279
245
  }
@@ -367,18 +333,18 @@ function aaEntryFor(normalized, aa, effort) {
367
333
  * anything unlisted is capable-not-cheap, the direction that never silently
368
334
  * hands hard work to a weak model. */
369
335
  const CURATED = {
370
- 'deepseek-v4-flash': { capable: true, cheap: true },
371
- 'deepseek-v4-pro': { capable: true, cheap: false },
372
- 'gpt-5.6-luna': { capable: true, cheap: true },
373
- 'gpt-5.6-terra': { capable: true, cheap: false },
374
- 'gpt-5.6-sol': { capable: true, cheap: false },
375
- 'kimi-k3': { capable: true, cheap: true },
376
- 'kimi-k3-free': { capable: false, cheap: true },
377
- 'glm-5.3': { capable: true, cheap: true },
378
- 'grok-4.6': { capable: true, cheap: false },
379
- 'gemini-3.7-flash': { capable: true, cheap: true },
380
- 'qwen3.8-max': { capable: true, cheap: false },
381
- 'ox-alpha-free': { capable: false, cheap: true },
336
+ 'deepseek-v4-flash': { capable: true },
337
+ 'deepseek-v4-pro': { capable: true },
338
+ 'gpt-5.6-luna': { capable: true },
339
+ 'gpt-5.6-terra': { capable: true },
340
+ 'gpt-5.6-sol': { capable: true },
341
+ 'kimi-k3': { capable: true },
342
+ 'kimi-k3-free': { capable: false },
343
+ 'glm-5.3': { capable: true },
344
+ 'grok-4.6': { capable: true },
345
+ 'gemini-3.7-flash': { capable: true },
346
+ 'qwen3.8-max': { capable: true },
347
+ 'ox-alpha-free': { capable: false },
382
348
  };
383
349
  export function lookupModel(name, aa, providers = [], upstreamFor = identityUpstream) {
384
350
  const { key, effort } = splitCandidate(name);
@@ -387,7 +353,6 @@ export function lookupModel(name, aa, providers = [], upstreamFor = identityUpst
387
353
  if (scored !== undefined) {
388
354
  return {
389
355
  capable: scored.codingIndex >= AA_CAPABLE_CODING_INDEX,
390
- cheap: scored.blendedPriceUsd <= AA_CHEAP_BLENDED_PRICE_USD,
391
356
  source: 'aa',
392
357
  };
393
358
  }
@@ -395,13 +360,28 @@ export function lookupModel(name, aa, providers = [], upstreamFor = identityUpst
395
360
  const curated = normalized.map((spelling) => CURATED[spelling]).find((entry) => entry !== undefined);
396
361
  if (curated !== undefined)
397
362
  return { ...curated, source: 'curated' };
398
- return { capable: true, cheap: false, source: 'default' };
363
+ return { capable: true, source: 'default' };
399
364
  }
400
365
  /** The AA row behind a candidate (`key` or `key@effort`), joined through the match key. */
401
366
  function scoreFor(candidate, aa, providers = [], upstreamFor = identityUpstream) {
402
367
  const { key, effort } = splitCandidate(candidate);
403
368
  return aaEntryFor(normalizedFor(key, providers, upstreamFor), aa, effort);
404
369
  }
370
+ /** Whether AA supplies the per-task cost required for init ranking. */
371
+ export function hasTaskCost(candidate, aa, providers = [], upstreamFor = identityUpstream) {
372
+ // Without a cache there is no exclusion data; preserve the built-in path.
373
+ if (aa === undefined)
374
+ return true;
375
+ // Finite, not merely present: a hand-edited or foreign-written cache can
376
+ // carry `null`, a string or a NaN, and `.toFixed(3)` on the ranking label
377
+ // throws on the first two while the third ranks on a meaningless number.
378
+ const cost = scoreFor(candidate, aa, providers, upstreamFor)?.costPerTask;
379
+ return typeof cost === 'number' && Number.isFinite(cost);
380
+ }
381
+ /** Keep only candidates AA can compare on its dollars-per-task scale. */
382
+ export function taskCostedCandidates(candidates, aa, providers = [], upstreamFor = identityUpstream) {
383
+ return candidates.filter((candidate) => hasTaskCost(candidate, aa, providers, upstreamFor));
384
+ }
405
385
  /**
406
386
  * Each key as the candidates a ranking may choose between: one per scored
407
387
  * level for a model the catalog knows by level, the bare key otherwise. A
@@ -418,8 +398,18 @@ export function expandCandidates(keys, aa, providers = [], upstreamFor = identit
418
398
  return fam === undefined ? [candidate] : [...fam.variants.keys()].map((level) => joinCandidate(key, level));
419
399
  });
420
400
  }
401
+ /**
402
+ * Whether the catalog turns this bare key into pinned candidates at all.
403
+ *
404
+ * Counted by *difference*, not by how many levels came back: a family of one
405
+ * expands to a single candidate that is not the bare key, and the whole point
406
+ * is that the bare key must not survive. Counting `> 1` dropped exactly that
407
+ * model, which is how a single-level saved key was silently deleted from a
408
+ * tier rather than re-proposed.
409
+ */
421
410
  export function hasEffortVariants(key, aa, providers = [], upstreamFor = identityUpstream) {
422
- return expandCandidates([key], aa, providers, upstreamFor).length > 1;
411
+ const expanded = expandCandidates([key], aa, providers, upstreamFor);
412
+ return expanded.length > 1 || expanded[0] !== key;
423
413
  }
424
414
  /**
425
415
  * The variants of every *bare* saved candidate whose model has effort levels.
@@ -437,7 +427,10 @@ export function unpinnedVariants(saved, aa, providers = [], upstreamFor = identi
437
427
  if (effort !== undefined)
438
428
  return [];
439
429
  const expanded = expandCandidates([candidate], aa, providers, upstreamFor);
440
- return expanded.length > 1 ? expanded : [];
430
+ // Difference, not count: a family of one yields a single *pinned*
431
+ // candidate, and the saved bare key it replaces is the thing being
432
+ // repaired. A `> 1` test dropped it from the tier instead.
433
+ return expanded.length > 1 || expanded[0] !== candidate ? expanded : [];
441
434
  });
442
435
  }
443
436
  /**
@@ -452,10 +445,9 @@ export function candidateLabel(candidate, aa, providers = [], upstreamFor = iden
452
445
  const entry = scoreFor(candidate, aa, providers, upstreamFor);
453
446
  if (entry === undefined)
454
447
  return head;
455
- const cost = entry.costPerTask !== undefined
456
- ? `$${entry.costPerTask.toFixed(3)}/task`
457
- : `$${entry.blendedPriceUsd.toFixed(2)}/1M`;
458
- return `${head.padEnd(32)} ${capabilityOf(entry).toFixed(1).padStart(4)} ${cost}`;
448
+ if (entry.costPerTask === undefined)
449
+ return `${head} (AA publishes no cost-per-task — add by hand to sonata.toml)`;
450
+ return `${head.padEnd(32)} ${capabilityOf(entry).toFixed(1).padStart(4)} $${entry.costPerTask.toFixed(3)}/task`;
459
451
  }
460
452
  /**
461
453
  * Which of `modelKeys` the ranking catalog can actually score.
@@ -480,8 +472,8 @@ export function catalogCoverage(modelKeys, aa, providers = [], upstreamFor = ide
480
472
  function rank(key, aa, providers = [], upstreamFor = identityUpstream) {
481
473
  const scored = scoreFor(key, aa, providers, upstreamFor);
482
474
  return scored !== undefined
483
- ? { index: capabilityOf(scored), price: costOfEntry(scored) }
484
- : { index: AA_CAPABLE_CODING_INDEX, price: AA_CHEAP_BLENDED_PRICE_USD };
475
+ ? { index: capabilityOf(scored), price: scored.costPerTask ?? 0 }
476
+ : { index: AA_CAPABLE_CODING_INDEX, price: 0 };
485
477
  }
486
478
  /**
487
479
  * Capability per dollar — how a simple tier is ordered.
@@ -495,13 +487,37 @@ function rank(key, aa, providers = [], upstreamFor = identityUpstream) {
495
487
  function valueOf(r) {
496
488
  return r.index / Math.max(r.price, 0.01);
497
489
  }
490
+ /**
491
+ * Rank a role's selected models into the three tiers.
492
+ *
493
+ * Each tier is one sort key over the two quantities AA publishes — a coding
494
+ * index and a cost per task. `complex` takes capability, cost breaking a
495
+ * near-tie; `normal` takes capability per task-dollar; `simple` is `normal`
496
+ * filtered to a cost cap, so it never sorts independently and cannot disagree
497
+ * with `normal` about order.
498
+ *
499
+ * Only candidates AA prices per task are considered (`taskCostedCandidates`),
500
+ * because capability-per-token and capability-per-task are different units and
501
+ * ranking across them is an arithmetic error, not a judgement.
502
+ *
503
+ * Three properties are deliberate and easy to undo by accident:
504
+ * `simple` is a *subsequence* of `normal`, not a prefix — value is not
505
+ * monotonic in cost; the cap is anchored to the best-value model, which
506
+ * therefore always clears it, so `simple` is never empty on any config; and
507
+ * there is no capability floor, because a floor makes the value ranking
508
+ * collapse into the cost ranking and `normal` becomes a copy of `simple`.
509
+ *
510
+ * Avoided gateways are demoted rather than excluded, and never set either bar.
511
+ */
498
512
  export function proposeTiers(modelKeys, aa, providers = [], avoided = new Set(), upstreamFor = identityUpstream) {
499
513
  // Rank over every scored level of every selected model. A model AA scores
500
514
  // at several efforts is several candidates here - luna@high and luna@max
501
515
  // are different capability/cost points, and which one a tier wants is the
502
516
  // whole question. Identity without families, so a catalog-less run (and
503
517
  // every existing caller) sees exactly the keys it passed.
504
- const candidates = expandCandidates(modelKeys, aa, providers, upstreamFor);
518
+ // With a catalog, only AA's per-task scale is valid. Without one, keep the
519
+ // built-in proposal path usable because there is no exclusion data yet.
520
+ const candidates = taskCostedCandidates(expandCandidates(modelKeys, aa, providers, upstreamFor), aa, providers, upstreamFor);
505
521
  const bareKey = (candidate) => splitCandidate(candidate).key;
506
522
  const rankOf = (k) => rank(k, aa, providers, upstreamFor);
507
523
  // An avoided model sorts after every non-avoided one, whatever it scores.
@@ -528,12 +544,16 @@ export function proposeTiers(modelKeys, aa, providers = [], avoided = new Set(),
528
544
  const ra = rankOf(a);
529
545
  const rb = rankOf(b);
530
546
  const gap = Math.abs(rb.index - ra.index) <= AA_CAPABILITY_TIE_MARGIN ? 0 : rb.index - ra.index;
531
- return avoidance(a, b) || gap || ra.price - rb.price || byLevel(a, b);
547
+ const byPrice = ra.price - rb.price;
548
+ return avoidance(a, b) || gap || byPrice || byLevel(a, b);
532
549
  };
533
550
  // Simple work wants the most capability per dollar, capability breaking
534
551
  // ties. At one price, value *is* capability, so a score inside the tie
535
552
  // margin is the same noise it is above — a lower level scoring 0.3 higher
536
553
  // is not an edge, and the level decides as it does there.
554
+ //
555
+ // Every candidate left here has an AA per-task cost, so capability per
556
+ // dollar is one comparable unit rather than a mix of work and token prices.
537
557
  const byValue = (a, b) => {
538
558
  const ra = rankOf(a);
539
559
  const rb = rankOf(b);
@@ -542,67 +562,33 @@ export function proposeTiers(modelKeys, aa, providers = [], avoided = new Set(),
542
562
  }
543
563
  return avoidance(a, b) || valueOf(rb) - valueOf(ra) || rb.index - ra.index || byLevel(a, b);
544
564
  };
545
- const complex = candidates.filter((k) => lookupModel(k, aa, providers, upstreamFor).capable).sort(byCapability);
546
- // The floor is relative to the best model actually selected, so it adapts to
547
- // the user's own set rather than to an absolute score that is wrong whenever
548
- // their selection is uniformly strong or uniformly modest.
549
- // Measured over the models that can actually lead the tier: including an
550
- // avoided model here could raise the bar high enough to exclude everything
551
- // preferred, inverting the setting's intent.
552
- const preferred = candidates.filter((k) => !avoided.has(bareKey(k)));
553
- const leaders = preferred.length > 0 ? preferred : candidates;
554
- const best = Math.max(0, ...leaders.map((k) => rankOf(k).index));
555
- // The cost bar is relative to the cheapest model that can actually *enter*
556
- // the tier — not merely the cheapest one selected. `best` gets away with
557
- // reading every leader because it is a `Math.max`, which a weak model cannot
558
- // drag down; the ceiling is a `Math.min`, which one absolutely can. A very
559
- // cheap, very weak model would set a bar so low that nothing eligible clears
560
- // it, `simple` would come back empty, and the fallback would mirror the
561
- // complex set — the tier silently ceasing to discriminate, which is the whole
562
- // failure the floor exists to prevent. So the same two predicates that decide
563
- // membership below also decide who is allowed to set the bar.
564
- //
565
- // Avoided models are already out (`leaders`), for the same reason the
566
- // capability floor is measured over `preferred`: an avoided model setting the
567
- // bar would move it for models the user asked to demote, which is not what
568
- // avoidance means.
569
- //
570
- // Measured over per-task costs only. `rankOf().price` falls back to a per-1M
571
- // rate when AA has not costed a model, and the two are different units by
572
- // two orders of magnitude — a ratio that mixes them would read an uncosted
573
- // model as ~30x dearer than it is and refuse it on a unit error.
565
+ const capable = (k) => lookupModel(k, aa, providers, upstreamFor).capable;
574
566
  const perTask = (k) => scoreFor(k, aa, providers, upstreamFor)?.costPerTask;
575
- const eligible = (k) => lookupModel(k, aa, providers, upstreamFor).capable
576
- && rankOf(k).index >= best * SIMPLE_CAPABILITY_FLOOR;
577
- const costs = leaders
578
- .filter(eligible)
579
- .map(perTask)
580
- .filter((c) => c !== undefined && c > 0);
581
- const ceiling = costs.length > 0 ? Math.min(...costs) * SIMPLE_COST_CEILING : undefined;
582
- // A model AA has not costed per task has no place on that scale, so it keeps
583
- // the absolute judgement it had before: the curated table's `cheap`, or the
584
- // per-1M bar. That is the pre-existing behaviour for exactly the models this
585
- // change has no better information about.
586
- const isCheap = (k) => {
567
+ const complex = candidates.filter(capable).sort(byCapability);
568
+ const normal = candidates.filter(capable).sort(byValue);
569
+ // Anchor the cap to the best-value model that can actually lead. Avoided
570
+ // models remain fallbacks but must not raise the price paid by preferred ones.
571
+ const anchor = normal.find((k) => !avoided.has(bareKey(k))) ?? normal[0];
572
+ const anchorCost = anchor === undefined ? undefined : perTask(anchor);
573
+ const ceiling = anchorCost === undefined ? undefined : anchorCost * SIMPLE_COST_CEILING;
574
+ // Filtering `normal` rather than sorting again is what stops `simple`
575
+ // disagreeing with it about order: it never does its own sort.
576
+ //
577
+ // The result is a **subsequence, not a prefix**. `normal` is ordered by
578
+ // value, and value is not monotonic in cost — a dearer model with a much
579
+ // better score outranks a cheap weak one — so an over-ceiling candidate can
580
+ // sit ahead of an under-ceiling one and the filter skips past it.
581
+ // Truncating at the first over-ceiling candidate would make it a true
582
+ // prefix and would drop the qualifying cheap models behind it, which is the
583
+ // opposite of what a cheap tier is for.
584
+ const simple = ceiling === undefined ? [] : normal.filter((k) => {
587
585
  const cost = perTask(k);
588
- if (cost === undefined || ceiling === undefined)
589
- return lookupModel(k, aa, providers, upstreamFor).cheap;
590
- return cost <= ceiling;
591
- };
592
- // Same `eligible` the ceiling is measured over, so who sets the bar and who
593
- // is judged against it cannot drift apart.
594
- const simple = candidates.filter((k) => eligible(k) && isCheap(k)).sort(byValue);
595
- // A tier must always resolve to something: with no capable model, everything
596
- // is complex-eligible; with no cheap-capable model, simple mirrors complex.
597
- // The fallback is sorted too — raw input order would break the documented
598
- // "index descending, price ascending" ordering on exactly the path where no
599
- // model cleared the threshold.
586
+ return cost !== undefined && cost <= ceiling;
587
+ });
600
588
  const complexFinal = complex.length > 0 ? complex : [...candidates].sort(byCapability);
601
- // Falls back to the complex set, but re-sorted by value: the reason to
602
- // fall back is that nothing cleared the cheap bar, not that cost stopped
603
- // mattering for grunt work.
604
- const simpleFinal = simple.length > 0 ? simple : [...complexFinal].sort(byValue);
605
- return { simple: simpleFinal, complex: complexFinal };
589
+ const normalFinal = normal.length > 0 ? normal : [...complexFinal].sort(byValue);
590
+ const simpleFinal = simple.length > 0 ? simple : normalFinal;
591
+ return { simple: simpleFinal, normal: normalFinal, complex: complexFinal };
606
592
  }
607
593
  /**
608
594
  * How long a ranking cache stays trustworthy.
@@ -646,8 +632,13 @@ export function loadAaCatalog(home) {
646
632
  Number.isFinite(entry.blendedPriceUsd)) {
647
633
  // An unknown level is a hand-edit or a foreign writer; the score is
648
634
  // still good, so keep the row and drop only the field.
649
- const { effort, ...rest } = entry;
650
- models[name] = effort !== undefined && isEffort(effort) ? { ...rest, effort } : rest;
635
+ const { effort, costPerTask, ...rest } = entry;
636
+ // Same treatment as `effort`: the row's score is still good, so drop
637
+ // only the malformed field and let the model read as uncosted.
638
+ const kept = typeof costPerTask === 'number' && Number.isFinite(costPerTask)
639
+ ? { ...rest, costPerTask }
640
+ : rest;
641
+ models[name] = effort !== undefined && isEffort(effort) ? { ...kept, effort } : kept;
651
642
  }
652
643
  }
653
644
  if (Object.keys(models).length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAe,MAAM,aAAa,CAAC;AAGlG,MAAM,CAAC,MAAM,cAAc,GACzB,uEAAuE,CAAC;AAE1E;wEACwE;AACxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAyD5C;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;AACjF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,eAAe,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAI5C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,YAA+B,EAAE;IAC/E,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,uEAAuE;IACvE,qDAAqD;IACrD,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACxF,6EAA6E;IAC7E,0EAA0E;IAC1E,MAAM,iBAAiB,GAAG;QACxB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,QAAQ,GAAG,CAAC;QAC9C,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY;KAClD,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC3D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM;QACR,CAAC;IACH,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC3D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM;QACR,CAAC;IACH,CAAC;IACD,oEAAoE;IACpE,2EAA2E;IAC3E,uEAAuE;IACvE,0EAA0E;IAC1E,qEAAqE;IACrE,wEAAwE;IACxE,yDAAyD;IACzD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,CAAC;YAAE,MAAM;QACpB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC5B,gEAAgE;QAChE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,MAAM;QAClD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAWD;;;;GAIG;AACH,MAAM,WAAW,GAAG,IAAI,OAAO,EAAyC,CAAC;AAEzE,SAAS,UAAU,CAAC,EAAa;IAC/B,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,SAAS;QACvE,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;YAClD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,GAAG,KAAK,KAAK,CAAC,MAAM;YAAE,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IACvD,CAAC;IACD,yEAAyE;IACzE,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,UAAsC,EAAE,EAAc;IAClF,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACjF,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,KAAK,MAAM,QAAQ,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAClC,MAAM,GAAG,GAAG,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC9F,+EAA+E;gBAC/E,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBAC7C,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAUD,0GAA0G;AAC1G,SAAS,gBAAgB,CAAC,MAA2C;IACnE,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,KAAK,EAAE,EAAE,IAAI,KAAK,EAAE,SAAS,IAAI,GAAG,CAAC;IAC9C,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAgE,EAChE,EAAc,EACd,cAA2B,gBAAgB,CAAC,MAAM,CAAC;IAEnD,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU,EAAE,CAAC;YAClD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,MAAM,KAAK,SAAS;oBAAE,SAAS;gBACnC,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5E,IAAI,MAAM,KAAK,SAAS;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAgE,EAChE,EAAc,EACd,WAAyB;IAEzB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;QACvE,OAAO,SAAS,IAAI,IAAI,IAAI,KAAK,GAAG,gDAAgD,MAAM,EAAE;cACxF,oBAAoB,MAAM,CAAC,OAAO,IAAI,UAAU,sDAAsD;cACtG,yCAAyC,GAAG,IAAI,QAAQ,uBAAuB,CAAC;IACtF,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;AACrH,CAAC;AAcD,MAAM,gBAAgB,GAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;AAEnD;;;;;;;;;GASG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,SAA4B,EAAE,WAAwB;IACxF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvE,0EAA0E;IAC1E,2EAA2E;IAC3E,0EAA0E;IAC1E,yEAAyE;IACzE,mEAAmE;IACnE,4EAA4E;IAC5E,kEAAkE;IAClE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC;YACnC,kBAAkB,CAAC,IAAI,CAAC;SACzB,CAAC,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;4BAI4B;AAC5B,SAAS,UAAU,CAAC,UAAsC,EAAE,EAAc,EAAE,MAAe;IACzF,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrF,KAAK,MAAM,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAClF,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;sCAEsC;AACtC,MAAM,OAAO,GAAyD;IACpE,mBAAmB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IACnD,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;IAClD,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9C,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;IAChD,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;IAC9C,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IACzC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IAC/C,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IACzC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;IAC3C,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IAClD,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;IAC9C,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;CACjD,CAAC;AAEF,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,EAAc,EACd,YAA+B,EAAE,EACjC,cAA2B,gBAAgB;IAE3C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,WAAW,IAAI,uBAAuB;YACtD,KAAK,EAAE,MAAM,CAAC,eAAe,IAAI,0BAA0B;YAC3D,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IACD,sEAAsE;IACtE,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACrG,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACpE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC5D,CAAC;AAID,2FAA2F;AAC3F,SAAS,QAAQ,CACf,SAAiB,EACjB,EAAc,EACd,YAA+B,EAAE,EACjC,cAA2B,gBAAgB;IAE3C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAuB,EACvB,EAAc,EACd,YAA+B,EAAE,EACjC,cAA2B,gBAAgB;IAE3C,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAChC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9G,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,EAAc,EACd,YAA+B,EAAE,EACjC,cAA2B,gBAAgB;IAE3C,OAAO,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAoC,EACpC,EAAc,EACd,YAA+B,EAAE,EACjC,cAA2B,gBAAgB;IAE3C,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACzC,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC3E,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,EAAc,EACd,YAA+B,EAAE,EACjC,cAA2B,gBAAgB;IAE3C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,KAAK,SAAS;QAC1C,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QACzC,CAAC,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9C,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;AACrF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,SAA4B,EAC5B,EAAc,EACd,YAA+B,EAAE,EACjC,cAA2B,gBAAgB;IAE3C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;kEACkE;AAClE,SAAS,IAAI,CACX,GAAW,EACX,EAAc,EACd,YAA+B,EAAE,EACjC,cAA2B,gBAAgB;IAE3C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACzD,OAAO,MAAM,KAAK,SAAS;QACzB,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE;QAC7D,CAAC,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;AAC5E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,OAAO,CAAC,CAAmC;IAClD,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,SAAmB,EACnB,EAAc,EACd,YAA+B,EAAE,EACjC,UAA+B,IAAI,GAAG,EAAE,EACxC,cAA2B,gBAAgB;IAE3C,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,wEAAwE;IACxE,0DAA0D;IAC1D,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAU,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;IAC7E,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAClE,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,qBAAqB;IACrB,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9G,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,sEAAsE;IACtE,0EAA0E;IAC1E,iEAAiE;IACjE,0EAA0E;IAC1E,4EAA4E;IAC5E,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE;QACpC,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;QAChG,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IACF,wEAAwE;IACxE,uEAAuE;IACvE,0EAA0E;IAC1E,0DAA0D;IAC1D,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,wBAAwB,EAAE,CAAC;YACvF,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChH,6EAA6E;IAC7E,6EAA6E;IAC7E,2DAA2D;IAC3D,yEAAyE;IACzE,2EAA2E;IAC3E,6CAA6C;IAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,2EAA2E;IAC3E,yEAAyE;IACzE,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,wEAAwE;IACxE,8EAA8E;IAC9E,8EAA8E;IAC9E,8DAA8D;IAC9D,EAAE;IACF,sEAAsE;IACtE,8EAA8E;IAC9E,2EAA2E;IAC3E,mBAAmB;IACnB,EAAE;IACF,6EAA6E;IAC7E,0EAA0E;IAC1E,2EAA2E;IAC3E,iEAAiE;IACjE,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC;IACpF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,OAAO;WACtF,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,uBAAuB,CAAC;IACvD,MAAM,KAAK,GAAG,OAAO;SAClB,MAAM,CAAC,QAAQ,CAAC;SAChB,GAAG,CAAC,OAAO,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,6EAA6E;IAC7E,4EAA4E;IAC5E,6EAA6E;IAC7E,0CAA0C;IAC1C,MAAM,OAAO,GAAG,CAAC,CAAS,EAAW,EAAE;QACrC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC;QACzG,OAAO,IAAI,IAAI,OAAO,CAAC;IACzB,CAAC,CAAC;IACF,4EAA4E;IAC5E,2CAA2C;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjF,6EAA6E;IAC7E,4EAA4E;IAC5E,0EAA0E;IAC1E,4EAA4E;IAC5E,+BAA+B;IAC/B,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvF,uEAAuE;IACvE,yEAAyE;IACzE,4BAA4B;IAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C,uFAAuF;AACvF,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,GAAS;IAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,2EAA2E;IAC3E,wCAAwC;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAc,CAAC;QAChE,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QACjH,0EAA0E;QAC1E,2EAA2E;QAC3E,uEAAuE;QACvE,4EAA4E;QAC5E,kDAAkD;QAClD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,IACE,KAAK,KAAK,IAAI;gBACd,OAAO,KAAK,KAAK,QAAQ;gBACzB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;gBAClC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,EACtC,CAAC;gBACD,oEAAoE;gBACpE,uDAAuD;gBACvD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,KAAgB,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACvF,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACvD,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,yEAAyE;YACzE,yEAAyE;YACzE,iEAAiE;YACjE,GAAG,CAAC,OAAO,GAAG,CAAC,wBAAwB,KAAK,QAAQ;gBAClD,CAAC,CAAC,EAAE,wBAAwB,EAAE,GAAG,CAAC,wBAAwB,EAAE;gBAC5D,CAAC,CAAC,EAAE,CAAC;YACP,MAAM;SACP,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}