humanish 0.49.0 → 0.50.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 (59) hide show
  1. package/README.md +52 -3
  2. package/dist/concurrent-shared-world-lab.d.ts +5 -0
  3. package/dist/concurrent-shared-world-lab.js +28 -0
  4. package/dist/concurrent-shared-world-lab.js.map +1 -1
  5. package/dist/cua-actor-lab.d.ts +7 -0
  6. package/dist/cua-actor-lab.js +46 -2
  7. package/dist/cua-actor-lab.js.map +1 -1
  8. package/dist/e2b-terminal-lab.d.ts +7 -0
  9. package/dist/e2b-terminal-lab.js +54 -0
  10. package/dist/e2b-terminal-lab.js.map +1 -1
  11. package/dist/init-templates.js +7 -2
  12. package/dist/init-templates.js.map +1 -1
  13. package/dist/lab-engine.d.ts +11 -0
  14. package/dist/lab-engine.js +18 -0
  15. package/dist/lab-engine.js.map +1 -1
  16. package/dist/oss-lab.d.ts +3 -0
  17. package/dist/oss-lab.js.map +1 -1
  18. package/dist/oss-meta-lab.d.ts +3 -0
  19. package/dist/oss-meta-lab.js +13 -0
  20. package/dist/oss-meta-lab.js.map +1 -1
  21. package/dist/program.d.ts +14 -0
  22. package/dist/program.js +127 -9
  23. package/dist/program.js.map +1 -1
  24. package/dist/run-detail.d.ts +59 -0
  25. package/dist/run-detail.js +108 -0
  26. package/dist/run-detail.js.map +1 -0
  27. package/dist/run-index.d.ts +71 -0
  28. package/dist/run-index.js +206 -0
  29. package/dist/run-index.js.map +1 -0
  30. package/dist/run-paths.js +16 -1
  31. package/dist/run-paths.js.map +1 -1
  32. package/dist/run-projection.d.ts +182 -0
  33. package/dist/run-projection.js +349 -0
  34. package/dist/run-projection.js.map +1 -0
  35. package/dist/run-status.d.ts +139 -0
  36. package/dist/run-status.js +218 -0
  37. package/dist/run-status.js.map +1 -0
  38. package/dist/run.d.ts +15 -0
  39. package/dist/run.js +91 -6
  40. package/dist/run.js.map +1 -1
  41. package/dist/scripted-browser-lab.d.ts +5 -0
  42. package/dist/scripted-browser-lab.js +27 -0
  43. package/dist/scripted-browser-lab.js.map +1 -1
  44. package/dist/shared-world-lab.d.ts +5 -0
  45. package/dist/shared-world-lab.js +27 -0
  46. package/dist/shared-world-lab.js.map +1 -1
  47. package/dist/tui-app.js +402 -0
  48. package/dist/tui-contract.d.ts +73 -0
  49. package/dist/tui-contract.js +32 -0
  50. package/dist/tui-contract.js.map +1 -0
  51. package/dist/tui-launch.d.ts +48 -0
  52. package/dist/tui-launch.js +159 -0
  53. package/dist/tui-launch.js.map +1 -0
  54. package/docs/contracts/run-bundle.md +8 -0
  55. package/docs/contracts/schemas.md +70 -1
  56. package/docs/goals/current.md +3 -2
  57. package/docs/ramp/README.md +1 -1
  58. package/package.json +8 -5
  59. package/skills/humanish/SKILL.md +19 -0
@@ -0,0 +1,59 @@
1
+ export declare const RUN_DETAIL_SCHEMA = "humanish.run-detail.v1";
2
+ /** A participant's most recent recorded thinking. Quoted, never summarized. */
3
+ export interface RunThought {
4
+ /** The provider's reasoning summary, verbatim. */
5
+ text: string;
6
+ /** Its own heading, when the provider gave one ("reasoning turn 25"). */
7
+ title?: string;
8
+ at?: string;
9
+ }
10
+ export interface RunParticipant {
11
+ /** Stream id — stable within a run, and what distinguishes lanes of one study. */
12
+ id: string;
13
+ /** What to call them on screen: the lane's own label, else the persona id. */
14
+ label: string;
15
+ /** The persona id, when the trace recorded one. */
16
+ personaId?: string;
17
+ /**
18
+ * The persona's declared traits (`patience:medium`, `skill:medium`, …). This is the abbreviated
19
+ * persona a reader actually wants beside a live thought — it says who is struggling, which a
20
+ * name alone does not.
21
+ */
22
+ traits: string[];
23
+ /** `running`, `passed`, `failed`, `contract_proof_only` — the lane's own word for itself. */
24
+ status?: string;
25
+ /** Why the actor stopped, when it has. */
26
+ completionReason?: string;
27
+ thought?: RunThought;
28
+ turns?: number;
29
+ actions?: number;
30
+ /**
31
+ * Thoughts recorded so far. The mid-run flush carries the trace ITEMS but not the `counts` block,
32
+ * so a live participant has no turn count to show — but the thoughts can be counted directly, and
33
+ * "8 thoughts" is a true statement about progress rather than an inferred turn number.
34
+ */
35
+ thoughts?: number;
36
+ /** `null` when declared absent; absent when never recorded. Never coerced to 0. */
37
+ estimatedCostUsd?: number | null;
38
+ }
39
+ export interface RunDetail {
40
+ schema: typeof RUN_DETAIL_SCHEMA;
41
+ runId: string;
42
+ participants: RunParticipant[];
43
+ /**
44
+ * Repo-relative path to this run's self-contained Observer artifact, when it has been written.
45
+ * The terminal cannot show screenshots; this is where the operator goes for the pictures.
46
+ */
47
+ observerPath?: string;
48
+ }
49
+ /**
50
+ * Read one run's participants. Returns null when the run has no readable bundle yet — an ordinary
51
+ * state for a run that has just started, not a failure.
52
+ *
53
+ * Reads the bundle NARROWLY rather than through `loadRunBundle`, which applies the strict
54
+ * evidence-of-record guard. That guard is right for verification and wrong here: a mid-run flush is
55
+ * a partial document by definition, so validating it as a complete bundle would make the live view
56
+ * — the only view that needs this — the one case that never renders. Nothing read here is treated
57
+ * as a claim about what a participant did; it is what to put on a screen.
58
+ */
59
+ export declare function readRunDetail(cwdInput: string, runId: string): Promise<RunDetail | null>;
@@ -0,0 +1,108 @@
1
+ // What ONE run is doing right now (#455).
2
+ //
3
+ // The run index answers "which runs exist and are any alive" for every run in a project, cheaply
4
+ // and without opening evidence. This answers a different question about a SINGLE run — who is in
5
+ // it, what are they thinking, how far have they got — and it does open the bundle, because that is
6
+ // where the answer lives. That trade is only affordable for the one run someone is looking at,
7
+ // which is exactly when it is asked.
8
+ //
9
+ // The shape it reads from is the actor trace (`humanish.actor-trace.v1`), in two places:
10
+ // - `stream.liveActor` while a run is in flight (the mid-run flush), and
11
+ // - `stream.actor` once it has finished.
12
+ // Reading both means the same screen renders a run the whole way through rather than going blank
13
+ // at the moment it completes.
14
+ import { readFile } from "node:fs/promises";
15
+ import path from "node:path";
16
+ import { resolveRunPath } from "./run.js";
17
+ export const RUN_DETAIL_SCHEMA = "humanish.run-detail.v1";
18
+ /**
19
+ * The latest reasoning a participant has recorded.
20
+ *
21
+ * Takes the LAST reasoning item rather than the newest by timestamp: the trace is append-ordered by
22
+ * construction, and half of a live flush may not carry `at` yet. An item still in flight is skipped
23
+ * — a partial thought read mid-write would be quoted as though the participant had finished it.
24
+ */
25
+ function latestThought(trace) {
26
+ const items = trace.items ?? [];
27
+ for (let index = items.length - 1; index >= 0; index -= 1) {
28
+ const item = items[index];
29
+ if (item?.kind !== "reasoning")
30
+ continue;
31
+ if (item.lifecycle !== undefined && item.lifecycle !== "completed")
32
+ continue;
33
+ const text = typeof item.text === "string" ? item.text.trim() : "";
34
+ if (text === "")
35
+ continue;
36
+ return {
37
+ text,
38
+ ...(typeof item.title === "string" && item.title !== "" ? { title: item.title } : {}),
39
+ ...(typeof item.at === "string" ? { at: item.at } : {})
40
+ };
41
+ }
42
+ return undefined;
43
+ }
44
+ function participantFrom(stream, index) {
45
+ // A live run's flush wins over the finished trace: while both exist, the live one is the newer
46
+ // account of what is happening.
47
+ const trace = stream.liveActor ?? stream.actor ?? {};
48
+ const id = stream.id ?? `stream-${index + 1}`;
49
+ const personaId = trace.persona?.id;
50
+ // Computed once: calling it twice to test-then-use reads as though the two could differ.
51
+ const thought = latestThought(trace);
52
+ const status = trace.status ?? stream.status;
53
+ const thoughts = (trace.items ?? []).filter((item) => item?.kind === "reasoning").length;
54
+ return {
55
+ id,
56
+ label: stream.label ?? personaId ?? id,
57
+ ...(personaId === undefined ? {} : { personaId }),
58
+ traits: Array.isArray(trace.persona?.traitsApplied) ? trace.persona.traitsApplied : [],
59
+ ...(status === undefined ? {} : { status }),
60
+ ...(trace.completionReason === undefined ? {} : { completionReason: trace.completionReason }),
61
+ ...(thought === undefined ? {} : { thought }),
62
+ ...(typeof trace.counts?.turns === "number" ? { turns: trace.counts.turns } : {}),
63
+ ...(typeof trace.counts?.actions === "number" ? { actions: trace.counts.actions } : {}),
64
+ ...(thoughts > 0 ? { thoughts } : {}),
65
+ ...(trace.estimatedCost === undefined || trace.estimatedCost.estimatedCostUsd === undefined
66
+ ? {}
67
+ : { estimatedCostUsd: trace.estimatedCost.estimatedCostUsd })
68
+ };
69
+ }
70
+ /**
71
+ * Read one run's participants. Returns null when the run has no readable bundle yet — an ordinary
72
+ * state for a run that has just started, not a failure.
73
+ *
74
+ * Reads the bundle NARROWLY rather than through `loadRunBundle`, which applies the strict
75
+ * evidence-of-record guard. That guard is right for verification and wrong here: a mid-run flush is
76
+ * a partial document by definition, so validating it as a complete bundle would make the live view
77
+ * — the only view that needs this — the one case that never renders. Nothing read here is treated
78
+ * as a claim about what a participant did; it is what to put on a screen.
79
+ */
80
+ export async function readRunDetail(cwdInput, runId) {
81
+ const runPaths = await resolveRunPath(path.resolve(cwdInput), runId).catch(() => null);
82
+ if (runPaths === null)
83
+ return null;
84
+ let bundle;
85
+ try {
86
+ const raw = await readFile(path.join(runPaths.absoluteRunRoot, "run.json"), "utf8");
87
+ const parsed = JSON.parse(raw);
88
+ if (parsed === null || typeof parsed !== "object")
89
+ return null;
90
+ bundle = parsed;
91
+ }
92
+ catch {
93
+ // Absent or torn: the run has not written one yet, or is writing it now.
94
+ return null;
95
+ }
96
+ const streams = Array.isArray(bundle.streams) ? bundle.streams : [];
97
+ const cwd = path.resolve(cwdInput);
98
+ const observerAbsolute = path.join(runPaths.absoluteRunRoot, "observer", "index.html");
99
+ return {
100
+ schema: RUN_DETAIL_SCHEMA,
101
+ runId: bundle.runId ?? runId,
102
+ participants: streams.map(participantFrom),
103
+ ...(observerAbsolute.startsWith(cwd)
104
+ ? { observerPath: path.relative(cwd, observerAbsolute) }
105
+ : { observerPath: observerAbsolute })
106
+ };
107
+ }
108
+ //# sourceMappingURL=run-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-detail.js","sourceRoot":"","sources":["../src/run-detail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { type RunLabProvenance, type RunLiveness } from "./run-status.js";
2
+ export declare const RUN_INDEX_SCHEMA = "humanish.run-index.v1";
3
+ export interface RunIndexEntry {
4
+ runId: string;
5
+ /** Where the entry's facts came from: the status record, the bundle, or the directory alone. */
6
+ derivedFrom: "status" | "bundle" | "directory";
7
+ liveness: RunLiveness;
8
+ mode?: "dry-run" | "live";
9
+ /**
10
+ * The pid that owns a run, when it recorded one. This is how a surface identifies the run IT just
11
+ * started without minting an id or guessing at a new directory: it spawned a process, and exactly
12
+ * one run's record carries that pid.
13
+ */
14
+ pid?: number;
15
+ lab?: RunLabProvenance;
16
+ startedAt?: string;
17
+ updatedAt?: string;
18
+ completedAt?: string;
19
+ verdict?: string;
20
+ participants?: {
21
+ total: number;
22
+ reachedGoal: number;
23
+ reportedFriction?: number;
24
+ };
25
+ estimatedCostUsd?: number | null;
26
+ /** Wall-clock span when both ends are known; used for per-lab medians. */
27
+ durationMs?: number;
28
+ }
29
+ export interface RunIndexResult {
30
+ schema: typeof RUN_INDEX_SCHEMA;
31
+ cwd: string;
32
+ /** Newest first, by the best timestamp each entry has. */
33
+ runs: RunIndexEntry[];
34
+ /** Directories that could not be read at all, by name — surfaced, never silently dropped. */
35
+ unreadable: string[];
36
+ }
37
+ /** What a cached entry was derived from, so a changed file invalidates exactly that entry. */
38
+ interface CacheKey {
39
+ file: string;
40
+ mtimeMs: number;
41
+ size: number;
42
+ ino: number;
43
+ }
44
+ /**
45
+ * A process-lifetime cache. Deliberately explicit rather than module-global state: a caller that
46
+ * refreshes on a cadence keeps one and passes it back, and a caller that wants a cold read passes
47
+ * nothing. Nothing here is authoritative, so a stale slot can only ever cost a re-read.
48
+ */
49
+ export declare class RunIndexCache {
50
+ private readonly slots;
51
+ get(runId: string, key: CacheKey): RunIndexEntry | undefined;
52
+ set(runId: string, key: CacheKey, entry: RunIndexEntry): void;
53
+ /** Drop entries for runs that no longer exist, so a long-lived surface cannot leak. */
54
+ retain(runIds: Iterable<string>): void;
55
+ get size(): number;
56
+ }
57
+ export interface ReadRunIndexOptions {
58
+ /** Reused across refreshes so unchanged runs are not re-read. */
59
+ cache?: RunIndexCache;
60
+ /** Injectable clock, so liveness classification is reproducible in tests. */
61
+ nowMs?: number;
62
+ /** Cap the number of runs returned (newest first). The full directory is still enumerated —
63
+ * a cap on reads, not on truth — and the count reflects what was read. */
64
+ limit?: number;
65
+ }
66
+ /**
67
+ * Read every run in `.humanish/runs`, cheapest source first. Never throws for a bad run directory;
68
+ * an unreadable one is named in `unreadable`.
69
+ */
70
+ export declare function readRunIndex(cwdInput: string, options?: ReadRunIndexOptions): Promise<RunIndexResult>;
71
+ export {};
@@ -0,0 +1,206 @@
1
+ // The run index (#455 PR 2): list and classify every run in a project WITHOUT parsing bundles.
2
+ //
3
+ // The existing `listRuns` walks each run tree — screenshots included — validating symlinks and
4
+ // then parses each `run.json`: measured 197ms cold / 152ms warm at 25 runs. That is fine for a
5
+ // command that prints once and exits, and much too hot for a surface that refreshes on a cadence
6
+ // over SSH. This module reads the small `status.json` record each run now writes (586 bytes beside
7
+ // a 92KB bundle) and caches per-run entries keyed on the stat of the file each was derived from.
8
+ //
9
+ // HONESTY RULES, unchanged from the record itself:
10
+ // - `run.json` is the evidence-of-record. Every field here is a projection for listing and
11
+ // classification; nothing here is a claim about what a participant did.
12
+ // - A run with no status record is NOT assumed finished. It is classified from what is on disk:
13
+ // a bundle means finished, receipts without a bundle mean interrupted. That is the honest
14
+ // reading of a run whose process died — and, before this contract existed, of every run.
15
+ // - One unreadable run directory degrades that run, never the listing.
16
+ import { readdir, readFile, stat } from "node:fs/promises";
17
+ import path from "node:path";
18
+ import { RUN_STATUS_FILE, classifyRunStatus, inferLegacyLabId, isRunStatusRecord } from "./run-status.js";
19
+ export const RUN_INDEX_SCHEMA = "humanish.run-index.v1";
20
+ /**
21
+ * A process-lifetime cache. Deliberately explicit rather than module-global state: a caller that
22
+ * refreshes on a cadence keeps one and passes it back, and a caller that wants a cold read passes
23
+ * nothing. Nothing here is authoritative, so a stale slot can only ever cost a re-read.
24
+ */
25
+ export class RunIndexCache {
26
+ slots = new Map();
27
+ get(runId, key) {
28
+ const slot = this.slots.get(runId);
29
+ if (slot === undefined)
30
+ return undefined;
31
+ const same = slot.key.file === key.file &&
32
+ slot.key.mtimeMs === key.mtimeMs &&
33
+ slot.key.size === key.size &&
34
+ slot.key.ino === key.ino;
35
+ return same ? slot.entry : undefined;
36
+ }
37
+ set(runId, key, entry) {
38
+ this.slots.set(runId, { key, entry });
39
+ }
40
+ /** Drop entries for runs that no longer exist, so a long-lived surface cannot leak. */
41
+ retain(runIds) {
42
+ const keep = new Set(runIds);
43
+ for (const runId of [...this.slots.keys()]) {
44
+ if (!keep.has(runId))
45
+ this.slots.delete(runId);
46
+ }
47
+ }
48
+ get size() {
49
+ return this.slots.size;
50
+ }
51
+ }
52
+ async function statKey(file) {
53
+ try {
54
+ const stats = await stat(file);
55
+ return { file, mtimeMs: stats.mtimeMs, size: stats.size, ino: Number(stats.ino) };
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ async function readJson(file) {
62
+ try {
63
+ return JSON.parse(await readFile(file, "utf8"));
64
+ }
65
+ catch {
66
+ // A torn read cannot happen (writes are tmp+rename), so this is a genuinely absent or
67
+ // malformed file: the caller degrades that run rather than the listing.
68
+ return null;
69
+ }
70
+ }
71
+ function entryFromStatus(record, nowMs) {
72
+ const started = Date.parse(record.startedAt);
73
+ const ended = record.completedAt === undefined ? Number.NaN : Date.parse(record.completedAt);
74
+ return {
75
+ runId: record.runId,
76
+ derivedFrom: "status",
77
+ liveness: classifyRunStatus(record, nowMs),
78
+ mode: record.mode,
79
+ ...(typeof record.pid === "number" ? { pid: record.pid } : {}),
80
+ ...(record.lab === undefined ? {} : { lab: record.lab }),
81
+ startedAt: record.startedAt,
82
+ updatedAt: record.updatedAt,
83
+ ...(record.completedAt === undefined ? {} : { completedAt: record.completedAt }),
84
+ ...(record.outcome?.verdict === undefined ? {} : { verdict: record.outcome.verdict }),
85
+ ...(record.outcome?.participants === undefined ? {} : { participants: record.outcome.participants }),
86
+ ...(record.outcome?.estimatedCostUsd === undefined ? {} : { estimatedCostUsd: record.outcome.estimatedCostUsd }),
87
+ ...(Number.isFinite(started) && Number.isFinite(ended) ? { durationMs: ended - started } : {})
88
+ };
89
+ }
90
+ function entryFromBundle(runId, bundle) {
91
+ // A bundle on disk USUALLY means the run reached its final write. But a live run now flushes an
92
+ // IN-PROGRESS bundle as it goes (so anything asking what a participant is doing has something to
93
+ // read), and that bundle marks its simulations `running`. Reaching this branch at all means there
94
+ // was no status record to classify from, so there is no freshness to judge — and the honest
95
+ // reading of "it started, and nothing here says it finished" is interrupted, not finished.
96
+ const inProgress = (bundle.simulations ?? []).some((simulation) => simulation?.status === "running");
97
+ const legacyLabId = bundle.lab === undefined ? inferLegacyLabId(bundle) : undefined;
98
+ return {
99
+ runId: bundle.runId ?? runId,
100
+ derivedFrom: "bundle",
101
+ liveness: inProgress ? "interrupted" : "finished",
102
+ ...(bundle.mode === "dry-run" || bundle.mode === "live" ? { mode: bundle.mode } : {}),
103
+ ...(bundle.lab !== undefined ? { lab: bundle.lab } : legacyLabId === undefined ? {} : { lab: { id: legacyLabId } }),
104
+ ...(bundle.createdAt === undefined ? {} : { startedAt: bundle.createdAt }),
105
+ ...(bundle.review?.verdict === undefined ? {} : { verdict: bundle.review.verdict }),
106
+ ...(bundle.review?.participants === undefined ? {} : { participants: bundle.review.participants }),
107
+ ...(bundle.cost?.estimatedTotalUsd === undefined ? {} : { estimatedCostUsd: bundle.cost.estimatedTotalUsd })
108
+ };
109
+ }
110
+ /**
111
+ * Read every run in `.humanish/runs`, cheapest source first. Never throws for a bad run directory;
112
+ * an unreadable one is named in `unreadable`.
113
+ */
114
+ export async function readRunIndex(cwdInput, options = {}) {
115
+ const cwd = path.resolve(cwdInput);
116
+ const runsRoot = path.join(cwd, ".humanish", "runs");
117
+ const nowMs = options.nowMs ?? Date.now();
118
+ const cache = options.cache;
119
+ let dirents;
120
+ try {
121
+ dirents = await readdir(runsRoot, { withFileTypes: true });
122
+ }
123
+ catch {
124
+ // No runs directory yet is an ordinary empty state, not a failure.
125
+ return { schema: RUN_INDEX_SCHEMA, cwd, runs: [], unreadable: [] };
126
+ }
127
+ const runIds = dirents.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
128
+ const runs = [];
129
+ const unreadable = [];
130
+ for (const runId of runIds) {
131
+ const runDir = path.join(runsRoot, runId);
132
+ const statusFile = path.join(runDir, RUN_STATUS_FILE);
133
+ const bundleFile = path.join(runDir, "run.json");
134
+ // Cheapest source first: the status record. Its stat is the cache key, so a live run whose
135
+ // record ticks every 5s re-reads 586 bytes and nothing else.
136
+ const statusKey = await statKey(statusFile);
137
+ if (statusKey !== null) {
138
+ const cached = cache?.get(runId, statusKey);
139
+ if (cached !== undefined) {
140
+ // Liveness is time-dependent, so it is recomputed even on a cache hit — a record that has
141
+ // not changed can still have gone stale since the last read.
142
+ runs.push(cached.derivedFrom === "status" && cached.updatedAt !== undefined
143
+ ? { ...cached, liveness: classifyRunStatus({ state: cached.completedAt === undefined ? "running" : "finished", updatedAt: cached.updatedAt }, nowMs) }
144
+ : cached);
145
+ continue;
146
+ }
147
+ const raw = await readJson(statusFile);
148
+ if (isRunStatusRecord(raw)) {
149
+ const entry = entryFromStatus(raw, nowMs);
150
+ cache?.set(runId, statusKey, entry);
151
+ runs.push(entry);
152
+ continue;
153
+ }
154
+ }
155
+ // No usable status record: fall back to the bundle. This is every run written before the
156
+ // contract existed, and it is why an old project still lists correctly.
157
+ const bundleKey = await statKey(bundleFile);
158
+ if (bundleKey !== null) {
159
+ const cached = cache?.get(runId, bundleKey);
160
+ if (cached !== undefined) {
161
+ runs.push(cached);
162
+ continue;
163
+ }
164
+ const raw = await readJson(bundleFile);
165
+ if (raw !== null && typeof raw === "object") {
166
+ const entry = entryFromBundle(runId, raw);
167
+ cache?.set(runId, bundleKey, entry);
168
+ runs.push(entry);
169
+ continue;
170
+ }
171
+ unreadable.push(runId);
172
+ continue;
173
+ }
174
+ // Neither record nor bundle: receipts without an outcome. That is precisely an interrupted
175
+ // run — the shape a dropped connection leaves — and saying so is more useful than hiding it.
176
+ runs.push({ runId, derivedFrom: "directory", liveness: "interrupted" });
177
+ }
178
+ cache?.retain(runIds);
179
+ runs.sort((left, right) => sortKey(right) - sortKey(left));
180
+ return {
181
+ schema: RUN_INDEX_SCHEMA,
182
+ cwd,
183
+ runs: options.limit === undefined ? runs : runs.slice(0, Math.max(0, options.limit)),
184
+ unreadable
185
+ };
186
+ }
187
+ /** Newest-first ordering: the most recent thing known about a run, else its id's own timestamp. */
188
+ function sortKey(entry) {
189
+ for (const candidate of [entry.completedAt, entry.updatedAt, entry.startedAt]) {
190
+ if (candidate === undefined)
191
+ continue;
192
+ const parsed = Date.parse(candidate);
193
+ if (Number.isFinite(parsed))
194
+ return parsed;
195
+ }
196
+ // Run ids embed an ISO-ish stamp (`cua-2026-08-19T07-44-13-489Z-…`); recover it when present so
197
+ // a directory-only entry still sorts sensibly instead of sinking to the bottom.
198
+ const match = /(\d{4}-\d{2}-\d{2})T(\d{2})-(\d{2})-(\d{2})-(\d{3})Z/.exec(entry.runId);
199
+ if (match) {
200
+ const parsed = Date.parse(`${match[1]}T${match[2]}:${match[3]}:${match[4]}.${match[5]}Z`);
201
+ if (Number.isFinite(parsed))
202
+ return parsed;
203
+ }
204
+ return 0;
205
+ }
206
+ //# sourceMappingURL=run-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-index.js","sourceRoot":"","sources":["../src/run-index.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,EAAE;AACF,+FAA+F;AAC/F,+FAA+F;AAC/F,iGAAiG;AACjG,mGAAmG;AACnG,iGAAiG;AACjG,EAAE;AACF,mDAAmD;AACnD,6FAA6F;AAC7F,4EAA4E;AAC5E,kGAAkG;AAClG,8FAA8F;AAC9F,6FAA6F;AAC7F,yEAAyE;AAEzE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAIlB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AA+CxD;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACP,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEtD,GAAG,CAAC,KAAa,EAAE,GAAa;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzC,MAAM,IAAI,GACR,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;YAC1B,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;YAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;QAC3B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,GAAa,EAAE,KAAoB;QACpD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,uFAAuF;IACvF,MAAM,CAAC,MAAwB;QAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AAED,KAAK,UAAU,OAAO,CAAC,IAAY;IACjC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAY,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,sFAAsF;QACtF,wEAAwE;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAuB,EAAE,KAAa;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7F,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC;QAC1C,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,CAAC,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;QACxD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;QAChF,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrF,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACpG,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAChH,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/F,CAAC;AACJ,CAAC;AAkBD,SAAS,eAAe,CAAC,KAAa,EAAE,MAAmB;IACzD,gGAAgG;IAChG,iGAAiG;IACjG,kGAAkG;IAClG,4FAA4F;IAC5F,2FAA2F;IAC3F,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;IACrG,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK;QAC5B,WAAW,EAAE,QAAQ;QACrB,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;QACjD,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC;QACnH,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAC1E,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACnF,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAClG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC7G,CAAC;AACJ,CAAC;AAYD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,UAA+B,EAAE;IACpF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE5B,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;QACnE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACrE,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzF,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAEjD,2FAA2F;QAC3F,6DAA6D;QAC7D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,0FAA0F;gBAC1F,6DAA6D;gBAC7D,IAAI,CAAC,IAAI,CACP,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;oBAC/D,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE;oBACtJ,CAAC,CAAC,MAAM,CACX,CAAC;gBACF,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC1C,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjB,SAAS;YACX,CAAC;QACH,CAAC;QAED,yFAAyF;QACzF,wEAAwE;QACxE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,GAAkB,CAAC,CAAC;gBACzD,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QAED,2FAA2F;QAC3F,6FAA6F;QAC7F,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,GAAG;QACH,IAAI,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACpF,UAAU;KACX,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,SAAS,OAAO,CAAC,KAAoB;IACnC,KAAK,MAAM,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9E,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IAC7C,CAAC;IACD,gGAAgG;IAChG,gFAAgF;IAChF,MAAM,KAAK,GAAG,sDAAsD,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvF,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
package/dist/run-paths.js CHANGED
@@ -295,7 +295,22 @@ async function assertNoSymlinkDescendants(directory) {
295
295
  const entries = await readdir(directory, { withFileTypes: true });
296
296
  for (const entry of entries) {
297
297
  const child = path.join(directory, entry.name);
298
- const stats = await lstat(child);
298
+ // A run directory can be written CONCURRENTLY with this walk — the atomic writer creates a
299
+ // `.humanish-write-*.tmp` sibling and renames it, and a run now also refreshes its own status
300
+ // record on a cadence. An entry that vanished between readdir and lstat therefore proves
301
+ // nothing except that it is gone, and a path that no longer exists cannot be a symlink escape:
302
+ // skip it rather than failing the containment check on a benign race. (Latent before the status
303
+ // record existed — the mid-run bundle flush had the same exposure.)
304
+ let stats;
305
+ try {
306
+ stats = await lstat(child);
307
+ }
308
+ catch (error) {
309
+ if (isNodeError(error) && error.code === "ENOENT") {
310
+ continue;
311
+ }
312
+ throw error;
313
+ }
299
314
  if (stats.isSymbolicLink()) {
300
315
  throw new Error("Humanish run directories must not contain symbolic links.");
301
316
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-paths.js","sourceRoot":"","sources":["../src/run-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AA4BrF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;WAClB,KAAK,KAAK,GAAG;WACb,KAAK,KAAK,IAAI;WACd,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;WACpB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;WACrB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,KAAa;IACjE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,KAAa;IACpE,IAAI,CAAC;QACH,OAAO,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAgB,EAAE,KAAa;IACrE,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,eAAe,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7D,OAAO;QACL,eAAe;QACf,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC;QACrD,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,wBAAwB,CAAC;QACvE,qBAAqB,EAAE,wBAAwB;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,QAAgB,EAAE,KAAa;IAC3E,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAChF,IAAI,QAAQ,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,0BAA0B,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC9D,OAAO,gCAAgC,CAAC,MAAM,+BAA+B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,QAAkC;IAElC,MAAM,+BAA+B,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,0BAA0B,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3D,MAAM,0BAA0B,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACjE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,QAAkC;IAElC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAChD,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;KACnC,CAAC,CAAC;IACH,IAAI,eAAe,KAAK,QAAQ,CAAC,gBAAgB,IAAI,cAAc,KAAK,QAAQ,CAAC,eAAe,EAAE,CAAC;QACjG,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,uBAAuB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC;QAC7E,uBAAuB,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC;KAC5E,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,QAAgB,EAChB,KAAa;IAEb,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpE,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,KAAK,CAAC,eAAe,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,0BAA0B,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC9D,OAAO,gCAAgC,CAAC,MAAM,+BAA+B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,QAAgB,EAAE,KAAa;IAC/E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,uCAAuC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACxF,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAgB,EAChB,OAA6B;IAE7B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjE,IAAI,CAAC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,QAAgB,EAChB,OAA6B;IAE7B,MAAM,QAAQ,GAAG,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5E,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,QAAgB,EAChB,GAAG,QAAkB;IAErB,MAAM,MAAM,GAAG,MAAM,uCAAuC,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,QAAgB,EAChB,GAAG,QAAkB;IAErB,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uCAAuC,CAC3D,QAAgB,EAChB,GAAG,QAAkB;IAErB,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC;IAC9E,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0CAA0C,CAC9D,QAAgB,EAChB,WAAuB;IAEvB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wCAAwC,CAC5D,QAAgB,EAChB,GAAG,QAAkB;IAErB,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,0CAA0C,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAAgB,EAChB,GAAG,QAAkB;IAErB,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,QAAgB,EAAE,GAAG,QAAkB;IACrF,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uCAAuC,CAC3D,QAAgB,EAChB,GAAG,QAAkB;IAErB,OAAO,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,cAAsB;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,OAAO,QAAQ,KAAK,EAAE;WACjB,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;WAClB,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;WACvB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;WAC7B,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;WAC7B,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;WACrB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,QAAgB,EAChB,QAAkB,EAClB,MAAe;IAEf,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErC,KAAK,MAAM,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7D,MAAM,UAAU,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAkB;IACnD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;WACpB,OAAO,KAAK,GAAG;WACf,OAAO,KAAK,IAAI;WAChB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;WACtB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;WACvB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,QAAgB;IACxD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;QAChH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,SAAiB;IACzD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,0BAA0B,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC5C,KAAuB,EACvB,OAAe;IAEf,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,KAAK,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACxC,KAAK,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAC1C,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;QACnH,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,KAAK;QACR,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC;QACjE,eAAe;QACf,gBAAgB;QAChB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC3G,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;KAChH,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,SAAiB,EAAE,QAAsB;IAC9E,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,IACE,KAAK,CAAC,cAAc,EAAE;WACnB,CAAC,KAAK,CAAC,WAAW,EAAE;WACpB,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW;WAC1C,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;WAC1B,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;WAC1B,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,EAC1C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"run-paths.js","sourceRoot":"","sources":["../src/run-paths.ts"],"names":[],"mappings":"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"}