@cat-factory/contracts 0.232.0 → 0.233.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/debug-api.d.ts.map +1 -1
- package/dist/debug-api.js +2 -1
- package/dist/debug-api.js.map +1 -1
- package/dist/entities.d.ts +2 -1
- package/dist/entities.d.ts.map +1 -1
- package/dist/entities.js +2 -1
- package/dist/entities.js.map +1 -1
- package/dist/execution.d.ts +10 -111
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +10 -89
- package/dist/execution.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/requests.js +1 -1
- package/dist/requests.js.map +1 -1
- package/dist/routes/agent-runs.d.ts +2 -2
- package/dist/routes/bug-hunt.d.ts +2 -2
- package/dist/routes/execution.d.ts +8 -8
- package/dist/routes/human-review.d.ts +1 -1
- package/dist/routes/human-test.d.ts +5 -5
- package/dist/routes/visual-confirm.d.ts +3 -3
- package/dist/routes/workspaces.d.ts +2 -2
- package/dist/run-provenance.d.ts +107 -0
- package/dist/run-provenance.d.ts.map +1 -0
- package/dist/run-provenance.js +140 -0
- package/dist/run-provenance.js.map +1 -0
- package/dist/snapshot.d.ts +1 -1
- package/dist/tracker.d.ts +4 -3
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +4 -3
- package/dist/tracker.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
// A run's PROVENANCE: how it entered the system, whether it may land its work, and where it
|
|
3
|
+
// actually executed. Three small vocabularies that answer questions about the run rather than
|
|
4
|
+
// about the work, all of them riding the run's `detail` JSON rather than a column, and all read
|
|
5
|
+
// by policy (admission, the merge decision, the clarification writeback) or by an investigator
|
|
6
|
+
// after the fact. Split out of `execution.ts`, which describes the STEPS.
|
|
7
|
+
/**
|
|
8
|
+
* How a run entered the system. See `ExecutionInstance.intakeOrigin`.
|
|
9
|
+
*
|
|
10
|
+
* - `ui`: someone started it in the app, on their own board. The read-time default, and what
|
|
11
|
+
* every legacy run is.
|
|
12
|
+
* - `public-api`: started headlessly through the `/api/v1` surface.
|
|
13
|
+
* - `tracker`: dispatched from a pushed ticket by a per-ticket issue-intake schedule.
|
|
14
|
+
* - `schedule`: a recurring schedule fired it, either on its cadence or because a tracker push
|
|
15
|
+
* drained its queue early. Both are the same run against the same reused block (ADR 0032), so
|
|
16
|
+
* they deliberately share one origin; what differs is only what made the tick happen.
|
|
17
|
+
*
|
|
18
|
+
* `ui` is the DEFAULT, which makes it a positive claim that a human is watching in the app, not
|
|
19
|
+
* a catch-all for "nothing said". Every UNATTENDED start path names itself, so a path that
|
|
20
|
+
* states nothing is the app: the one caller allowed to rely on the default. That rule exists
|
|
21
|
+
* because the opposite reading is silent, and it already cost one bug (a webhook-dispatched run
|
|
22
|
+
* defaulted into `ui` and its parked review's questions never reached the requester's ticket).
|
|
23
|
+
*/
|
|
24
|
+
export const intakeOriginSchema = v.picklist(['ui', 'public-api', 'tracker', 'schedule']);
|
|
25
|
+
/**
|
|
26
|
+
* Whether an intake origin means the run's questions have to be pushed back OUT to where it came
|
|
27
|
+
* from, because there is no human overseer in the app to answer them (the parked requirements
|
|
28
|
+
* review's questions, above all).
|
|
29
|
+
*
|
|
30
|
+
* A `Record` rather than a `!== 'ui'` test on purpose: this is the classification the whole
|
|
31
|
+
* clarification writeback keys off, and a new intake surface must state which side of it falls
|
|
32
|
+
* on rather than inheriting an answer by being new. Adding a member to the picklist above fails
|
|
33
|
+
* to compile until it is answered here.
|
|
34
|
+
*
|
|
35
|
+
* `schedule` is the entry worth explaining, because "unattended" would predict `true` and the
|
|
36
|
+
* answer is `false`. A cadence fire runs against the schedule's REUSED block, and in queue mode
|
|
37
|
+
* `BugIntakeService` REPLACE-links each pick onto it: the block's linked ticket is dropped and
|
|
38
|
+
* re-pointed on the next fire, by design, so the block never accumulates stale context. Posting
|
|
39
|
+
* questions there would open a conversation on a channel that closes underneath it, since a
|
|
40
|
+
* reply arriving after the link moved resolves to no block and is dropped. What the writeback
|
|
41
|
+
* needs is not "was anyone present" but "is there a STABLE place to hold a conversation", and a
|
|
42
|
+
* reused block does not have one. Per-ticket dispatch does, which is why it is `true`: one
|
|
43
|
+
* permanent block per ticket. Giving queue mode the same treatment is a change to the LINKAGE
|
|
44
|
+
* (a per-run link, or a block per pick), never a flip of this flag.
|
|
45
|
+
*/
|
|
46
|
+
const HEADLESS_INTAKE = {
|
|
47
|
+
ui: false,
|
|
48
|
+
'public-api': true,
|
|
49
|
+
tracker: true,
|
|
50
|
+
schedule: false,
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Whether a run entered headlessly ({@link HEADLESS_INTAKE}). `undefined` is every legacy run
|
|
54
|
+
* and degrades to `ui`, the safe reading: no outbound writeback for a run whose intake cannot
|
|
55
|
+
* be proven headless.
|
|
56
|
+
*
|
|
57
|
+
* `=== true` rather than the bare lookup, which the type says is already a `boolean`. The value
|
|
58
|
+
* reaches here off a run's persisted `detail` JSON, and the picklist is a CLOSED vocabulary whose
|
|
59
|
+
* members outlive their retirement in stored rows: a run written under a member later dropped
|
|
60
|
+
* from the type indexes to `undefined` at runtime, and the declared `boolean` would be a lie the
|
|
61
|
+
* caller reads as "not headless" anyway. Saying so explicitly makes unrecognised and absent one
|
|
62
|
+
* answer on purpose rather than by luck.
|
|
63
|
+
*/
|
|
64
|
+
export function isHeadlessIntake(origin) {
|
|
65
|
+
return origin != null && HEADLESS_INTAKE[origin] === true;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Whether a run may LAND its work. `live` (the default, and every run before this existed) is the
|
|
69
|
+
* historical behaviour. `dry_run` is the sandboxed mode: the pipeline runs in full and opens its
|
|
70
|
+
* pull request, so the human sees a real diff on a real branch, but nothing merges: neither the
|
|
71
|
+
* `merger` step's auto-merge nor the manual merge endpoint.
|
|
72
|
+
*
|
|
73
|
+
* The PR is deliberately still opened. The deliverable a non-developer initiator needs to SEE is the diff,
|
|
74
|
+
* and withholding the push would leave them reading prose about work they cannot inspect; what
|
|
75
|
+
* makes the mode a sandbox is that the change cannot reach the default branch, not that it stays
|
|
76
|
+
* invisible.
|
|
77
|
+
*
|
|
78
|
+
* Requested per run at start, and FORCED for the roles a task's merge preset lists in
|
|
79
|
+
* `dryRunRoles`. The two compose one way only: a live request from a sandboxed role is a dry run,
|
|
80
|
+
* and there is no way to ask out of it, or the setting would be advisory.
|
|
81
|
+
*/
|
|
82
|
+
export const runModeSchema = v.picklist(['live', 'dry_run']);
|
|
83
|
+
/**
|
|
84
|
+
* Whether a run is sandboxed. A helper rather than `=== 'dry_run'` scattered across the merge path
|
|
85
|
+
* and the SPA, so every place that must refuse to land work (or must say that a run will never
|
|
86
|
+
* land any) reads the mode the same way, and so a run persisted before the mode existed
|
|
87
|
+
* (absent ⇒ `live`) can never be mistaken for one.
|
|
88
|
+
*/
|
|
89
|
+
export function isDryRun(mode) {
|
|
90
|
+
return mode === 'dry_run';
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Per-run diagnostic context captured for AFTER-THE-FACT investigation of a run (esp. a
|
|
94
|
+
* failure): the "where/what did this run actually execute on" facts that were previously
|
|
95
|
+
* spread across the DB (repo↔service↔installation joins), the harness transcript (model), or
|
|
96
|
+
* lost entirely (which backend a step ran on). Stamped by the engine at dispatch and refined
|
|
97
|
+
* on the first poll; it reflects the MOST RECENT container-step dispatch (the step most likely
|
|
98
|
+
* relevant to a failure), not a per-step history. Rides in the run's `detail` JSON (no dedicated
|
|
99
|
+
* column), like `ExecutionInstance.notes`/`frontendBindings`. Absent on legacy runs and on
|
|
100
|
+
* runs with no container step (pure inline/gate pipelines). NEVER carries a token or secret.
|
|
101
|
+
*/
|
|
102
|
+
export const runDiagnosticsSchema = v.object({
|
|
103
|
+
/** Context of the most recent container-step dispatch. */
|
|
104
|
+
lastDispatch: v.optional(v.object({
|
|
105
|
+
/** Index of the dispatched step within the pipeline. */
|
|
106
|
+
stepIndex: v.number(),
|
|
107
|
+
/** The step's agent kind (`coder`, `merger`, a custom kind, …). */
|
|
108
|
+
agentKind: v.string(),
|
|
109
|
+
/** Resolved model ref `provider:model` (e.g. `anthropic:claude-opus-4-8`); null if unresolved. */
|
|
110
|
+
model: v.optional(v.nullable(v.string())),
|
|
111
|
+
/**
|
|
112
|
+
* Which runner backend the step actually ran on, the datum that distinguishes a native
|
|
113
|
+
* host-process run from a sandboxed container: `local-native` | `local-container` |
|
|
114
|
+
* `runner-pool` | `cloudflare-container`. Filled on the first poll (the transport reports
|
|
115
|
+
* it); absent until then or on an older runtime.
|
|
116
|
+
*/
|
|
117
|
+
executionBackend: v.optional(v.string()),
|
|
118
|
+
/** The repo the step operated on. */
|
|
119
|
+
repo: v.optional(v.object({
|
|
120
|
+
owner: v.string(),
|
|
121
|
+
name: v.string(),
|
|
122
|
+
/** The base branch the work branched from. */
|
|
123
|
+
baseBranch: v.optional(v.string()),
|
|
124
|
+
/** VCS provider (`github` | `gitlab`), resolved from the run's repo origin. */
|
|
125
|
+
provider: v.optional(v.string()),
|
|
126
|
+
})),
|
|
127
|
+
/** Epoch ms the dispatch was recorded. */
|
|
128
|
+
at: v.number(),
|
|
129
|
+
})),
|
|
130
|
+
/**
|
|
131
|
+
* The control-plane (orchestrator) host running the engine, NOT necessarily where the agent
|
|
132
|
+
* ran (a container step runs elsewhere; see `lastDispatch.executionBackend`). `platform` is the
|
|
133
|
+
* orchestrator's `process.platform` (e.g. `win32` pins a Windows local deployment, the class
|
|
134
|
+
* of host that surfaced the native-Windows git-auth break). Best-effort.
|
|
135
|
+
*/
|
|
136
|
+
host: v.optional(v.object({
|
|
137
|
+
platform: v.optional(v.string()),
|
|
138
|
+
})),
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=run-provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-provenance.js","sourceRoot":"","sources":["../src/run-provenance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,4FAA4F;AAC5F,8FAA8F;AAC9F,gGAAgG;AAChG,+FAA+F;AAC/F,0EAA0E;AAE1E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;AAGzF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,eAAe,GAAkC;IACrD,EAAE,EAAE,KAAK;IACT,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,KAAK;CAChB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAgC;IAC/D,OAAO,MAAM,IAAI,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;AAC3D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;AAG5D;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAgC;IACvD,OAAO,IAAI,KAAK,SAAS,CAAA;AAC3B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,0DAA0D;IAC1D,YAAY,EAAE,CAAC,CAAC,QAAQ,CACtB,CAAC,CAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,mEAAmE;QACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,kGAAkG;QAClG,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC;;;;;WAKG;QACH,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACxC,qCAAqC;QACrC,IAAI,EAAE,CAAC,CAAC,QAAQ,CACd,CAAC,CAAC,MAAM,CAAC;YACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,8CAA8C;YAC9C,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAClC,+EAA+E;YAC/E,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjC,CAAC,CACH;QACD,0CAA0C;QAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;KACf,CAAC,CACH;IACD;;;;;OAKG;IACH,IAAI,EAAE,CAAC,CAAC,QAAQ,CACd,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACjC,CAAC,CACH;CACF,CAAC,CAAA"}
|
package/dist/snapshot.d.ts
CHANGED
|
@@ -1456,7 +1456,7 @@ export declare const workspaceSnapshotSchema: v.ObjectSchema<{
|
|
|
1456
1456
|
readonly initiatedBy: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
1457
1457
|
readonly initiatedByRole: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<readonly ["admin", "member", "viewer"], undefined>, undefined>, undefined>;
|
|
1458
1458
|
readonly mode: v.OptionalSchema<v.PicklistSchema<["live", "dry_run"], undefined>, undefined>;
|
|
1459
|
-
readonly intakeOrigin: v.OptionalSchema<v.PicklistSchema<["ui", "public-api"], undefined>, undefined>;
|
|
1459
|
+
readonly intakeOrigin: v.OptionalSchema<v.PicklistSchema<["ui", "public-api", "tracker", "schedule"], undefined>, undefined>;
|
|
1460
1460
|
readonly createdAt: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1461
1461
|
readonly rev: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1462
1462
|
readonly diagnostics: v.OptionalSchema<v.ObjectSchema<{
|
package/dist/tracker.d.ts
CHANGED
|
@@ -25,9 +25,10 @@ export declare const trackerSettingsSchema: v.ObjectSchema<{
|
|
|
25
25
|
* issue(s), so the loop is answerable from where the work was requested. Per-task
|
|
26
26
|
* overridable via `Block.trackerQuestionsOnPark`. Default off.
|
|
27
27
|
*
|
|
28
|
-
* Deliberately scoped to runs whose `ExecutionInstance.intakeOrigin` is
|
|
29
|
-
* a
|
|
30
|
-
* surface is unchanged
|
|
28
|
+
* Deliberately scoped to runs whose `ExecutionInstance.intakeOrigin` is HEADLESS
|
|
29
|
+
* (`isHeadlessIntake`: a `/api/v1` start or a per-ticket tracker dispatch): a task started
|
|
30
|
+
* in the SPA has a human overseer in the app and its clarification surface is unchanged
|
|
31
|
+
* (see `docs/initiatives/headless-clarification-loop.md`).
|
|
31
32
|
*/
|
|
32
33
|
readonly writebackQuestionsOnPark: v.BooleanSchema<undefined>;
|
|
33
34
|
readonly updatedAt: v.NumberSchema<undefined>;
|
package/dist/tracker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAY5B,eAAO,MAAM,iBAAiB,2DAA2C,CAAA;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEjE,oFAAoF;AACpF,eAAO,MAAM,qBAAqB;;IAEhC,mFAAmF;;IAEnF,uEAAuE;;IAEvE;;;OAGG;;IAEH;;;;OAIG;;IAEH
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAY5B,eAAO,MAAM,iBAAiB,2DAA2C,CAAA;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEjE,oFAAoF;AACpF,eAAO,MAAM,qBAAqB;;IAEhC,mFAAmF;;IAEnF,uEAAuE;;IAEvE;;;OAGG;;IAEH;;;;OAIG;;IAEH;;;;;;;;;;OAUG;;;aAGH,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE,iDAAiD;AACjD,eAAO,MAAM,wBAAwB;;;;;;;aAOnC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
|
package/dist/tracker.js
CHANGED
|
@@ -33,9 +33,10 @@ export const trackerSettingsSchema = v.object({
|
|
|
33
33
|
* issue(s), so the loop is answerable from where the work was requested. Per-task
|
|
34
34
|
* overridable via `Block.trackerQuestionsOnPark`. Default off.
|
|
35
35
|
*
|
|
36
|
-
* Deliberately scoped to runs whose `ExecutionInstance.intakeOrigin` is
|
|
37
|
-
* a
|
|
38
|
-
* surface is unchanged
|
|
36
|
+
* Deliberately scoped to runs whose `ExecutionInstance.intakeOrigin` is HEADLESS
|
|
37
|
+
* (`isHeadlessIntake`: a `/api/v1` start or a per-ticket tracker dispatch): a task started
|
|
38
|
+
* in the SPA has a human overseer in the app and its clarification surface is unchanged
|
|
39
|
+
* (see `docs/initiatives/headless-clarification-loop.md`).
|
|
39
40
|
*/
|
|
40
41
|
writebackQuestionsOnPark: v.boolean(),
|
|
41
42
|
updatedAt: v.number(),
|
package/dist/tracker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,yEAAyE;AACzE,kFAAkF;AAClF,0EAA0E;AAC1E,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;AAGzE,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACtC,mFAAmF;IACnF,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,uEAAuE;IACvE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC;;;OAGG;IACH,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE;IACrC;;;;OAIG;IACH,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE;IACpC
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,yEAAyE;AACzE,kFAAkF;AAClF,0EAA0E;AAC1E,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;AAGzE,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACtC,mFAAmF;IACnF,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,uEAAuE;IACvE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC;;;OAGG;IACH,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE;IACrC;;;;OAIG;IACH,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE;IACpC;;;;;;;;;;OAUG;IACH,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAA;AAGF,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACtC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,wBAAwB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACjD,uBAAuB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,wBAAwB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CAClD,CAAC,CAAA"}
|