linersh 0.5.7 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +65 -165
  2. package/bin/liner.js +82 -44
  3. package/cli-update-docs/ABOUT.md +16 -16
  4. package/cli-update-docs/AI-HANDOFF.md +62 -204
  5. package/cli-update-docs/CURATION.md +48 -19
  6. package/cli-update-docs/JTBD-MASTER-PROMPT-ABOUT.md +9 -12
  7. package/cli-update-docs/JTBD-MASTER-PROMPT.md +1 -1
  8. package/cli-update-docs/LINER-MASTER.md +77 -63
  9. package/cli-update-docs/LINER-MD-PRD.md +531 -0
  10. package/cli-update-docs/MIXTAPE-FORMAT.md +76 -44
  11. package/cli-update-docs/PLATFORM.md +47 -46
  12. package/cli-update-docs/README.md +6 -6
  13. package/cli-update-docs/SKILL.md +72 -37
  14. package/cli-update-docs/TUI-BACKLOG.md +205 -26
  15. package/cli-update-docs/quality-check-tests.md +256 -8
  16. package/cli-update-docs/source-finding-tactics.md +140 -3
  17. package/cli-update-docs/source-quality-hierarchy.md +83 -0
  18. package/cli-update-docs/synthesis-guidance.md +19 -5
  19. package/dist/agents/artifact-validation.js +440 -0
  20. package/dist/agents/artifact-validation.js.map +1 -0
  21. package/dist/agents/candidate-longlist.js +100 -0
  22. package/dist/agents/candidate-longlist.js.map +1 -0
  23. package/dist/agents/detect.js +3 -2
  24. package/dist/agents/detect.js.map +1 -1
  25. package/dist/agents/evaluation-assembly.js +270 -0
  26. package/dist/agents/evaluation-assembly.js.map +1 -0
  27. package/dist/agents/headless-runner.js +227 -0
  28. package/dist/agents/headless-runner.js.map +1 -0
  29. package/dist/agents/jtbd-clarify.js +42 -41
  30. package/dist/agents/jtbd-clarify.js.map +1 -1
  31. package/dist/agents/models.js +6 -7
  32. package/dist/agents/models.js.map +1 -1
  33. package/dist/agents/prompts.js +220 -20
  34. package/dist/agents/prompts.js.map +1 -1
  35. package/dist/agents/runner.js +462 -21
  36. package/dist/agents/runner.js.map +1 -1
  37. package/dist/phases.js +13 -13
  38. package/dist/phases.js.map +1 -1
  39. package/dist/source-inbox.js +297 -0
  40. package/dist/source-inbox.js.map +1 -0
  41. package/dist/version.js +3 -9
  42. package/dist/version.js.map +1 -1
  43. package/dist/yaml-io.js +42 -11
  44. package/dist/yaml-io.js.map +1 -1
  45. package/package.json +26 -23
  46. package/cli-update-docs/JOB-STORY-MIGRATION.md +0 -99
  47. package/dist/App.js +0 -220
  48. package/dist/App.js.map +0 -1
  49. package/dist/colors.js +0 -132
  50. package/dist/colors.js.map +0 -1
  51. package/dist/components/Header.js +0 -15
  52. package/dist/components/Header.js.map +0 -1
  53. package/dist/components/KeyHints.js +0 -17
  54. package/dist/components/KeyHints.js.map +0 -1
  55. package/dist/components/LabeledBox.js +0 -53
  56. package/dist/components/LabeledBox.js.map +0 -1
  57. package/dist/components/NextSteps.js +0 -18
  58. package/dist/components/NextSteps.js.map +0 -1
  59. package/dist/index.js +0 -17
  60. package/dist/index.js.map +0 -1
  61. package/dist/screens/AgentSetup.js +0 -224
  62. package/dist/screens/AgentSetup.js.map +0 -1
  63. package/dist/screens/BootSplash.js +0 -163
  64. package/dist/screens/BootSplash.js.map +0 -1
  65. package/dist/screens/CompileView.js +0 -567
  66. package/dist/screens/CompileView.js.map +0 -1
  67. package/dist/screens/FramingConfirmReview.js +0 -197
  68. package/dist/screens/FramingConfirmReview.js.map +0 -1
  69. package/dist/screens/Gate1Review.js +0 -147
  70. package/dist/screens/Gate1Review.js.map +0 -1
  71. package/dist/screens/Gate2Review.js +0 -162
  72. package/dist/screens/Gate2Review.js.map +0 -1
  73. package/dist/screens/ImportPrompt.js +0 -173
  74. package/dist/screens/ImportPrompt.js.map +0 -1
  75. package/dist/screens/JsSetup.js +0 -77
  76. package/dist/screens/JsSetup.js.map +0 -1
  77. package/dist/screens/LocalFilePicker.js +0 -139
  78. package/dist/screens/LocalFilePicker.js.map +0 -1
  79. package/dist/screens/NewMixtapeWizard.js +0 -662
  80. package/dist/screens/NewMixtapeWizard.js.map +0 -1
  81. package/dist/screens/PhaseRunner.js +0 -1203
  82. package/dist/screens/PhaseRunner.js.map +0 -1
  83. package/dist/screens/ProcessManifest.js +0 -160
  84. package/dist/screens/ProcessManifest.js.map +0 -1
  85. package/dist/screens/ProjectHub.js +0 -557
  86. package/dist/screens/ProjectHub.js.map +0 -1
  87. package/dist/screens/SourceModal.js +0 -269
  88. package/dist/screens/SourceModal.js.map +0 -1
  89. package/dist/screens/TapeBrowser.js +0 -312
  90. package/dist/screens/TapeBrowser.js.map +0 -1
  91. package/dist/screens/TapeDraftReview.js +0 -444
  92. package/dist/screens/TapeDraftReview.js.map +0 -1
  93. package/dist/screens/TapeEditor.js +0 -310
  94. package/dist/screens/TapeEditor.js.map +0 -1
  95. package/dist/screens/cassette-art.js +0 -72
  96. package/dist/screens/cassette-art.js.map +0 -1
  97. package/dist/store.js +0 -10
  98. package/dist/store.js.map +0 -1
@@ -1,557 +0,0 @@
1
- import React, { useMemo, useState } from "react";
2
- import { Box, Text, useApp as useInkApp, useInput, useStdin } from "ink";
3
- import { spawn } from "node:child_process";
4
- import { existsSync, readFileSync, statSync, writeFileSync } from "node:fs";
5
- import { join } from "node:path";
6
- const TAPE_DRAFT_REL = "working/07-tape-draft.yaml";
7
- import { Header } from "../components/Header.js";
8
- import { KeyHints } from "../components/KeyHints.js";
9
- import { LabeledBox } from "../components/LabeledBox.js";
10
- import { useApp } from "../store.js";
11
- import { projectFolder } from "../yaml-io.js";
12
- import { computePhases, everythingComplete, statusGlyph, statusColor, statusLabel, } from "../phases.js";
13
- import { migrateProgress, progressFileExists, readProgress, TOTAL_STEPS, } from "../progress.js";
14
- import { runShare } from "../ipc.js";
15
- import { openFolder } from "../open-folder.js";
16
- import { detectAgents } from "../agents/detect.js";
17
- import { resolveEditor } from "../editor.js";
18
- import { MUTED, ON_FILL, CURRENT, ERROR, HEADING, STRUCTURE, SUCCESS, WARNING } from "../colors.js";
19
- const PREVIEW_LINES = 14;
20
- export function ProjectHub({ tape: initialTape, folder, }) {
21
- const app = useApp();
22
- const ink = useInkApp();
23
- const { setRawMode } = useStdin();
24
- const project = useMemo(() => projectFolder(folder), [folder]);
25
- const [tape, setTape] = useState(initialTape);
26
- const [refreshTick, setRefreshTick] = useState(0);
27
- // Read or migrate the progress cursor on mount. Migration runs once for
28
- // projects that pre-date `.liner-progress.json` (e.g. created with an
29
- // older TUI build); it walks the phase artifacts and sets step to the
30
- // longest consecutive "done" prefix.
31
- const [progress, setProgress] = useState(() => {
32
- if (progressFileExists(folder))
33
- return readProgress(folder);
34
- return migrateProgress(folder, initialTape);
35
- });
36
- const compiledArtifactCurrent = useMemo(() => isCompiledArtifactCurrent(project), [project, refreshTick]);
37
- const displayProgress = useMemo(() => compiledArtifactCurrent && progress.step >= TOTAL_STEPS - 1
38
- ? { ...progress, step: TOTAL_STEPS }
39
- : progress, [compiledArtifactCurrent, progress]);
40
- const compileWarningCount = useMemo(() => (compiledArtifactCurrent ? countCompilationNotes(project.mixtapePath) : 0), [compiledArtifactCurrent, project.mixtapePath, refreshTick]);
41
- const phases = useMemo(() => computePhases(project, tape, displayProgress),
42
- // refreshTick is intentionally in the dep array so file changes re-derive
43
- // status. eslint-disable-next-line react-hooks/exhaustive-deps
44
- [project, tape, displayProgress, refreshTick]);
45
- // Current index IS the progress cursor — clamped so the all-done state
46
- // (step >= TOTAL_STEPS) still has a sensible "last visible" phase to focus.
47
- const currentIndex = Math.min(displayProgress.step, phases.length - 1);
48
- // Single summary view: a status box + the full phase checklist with a
49
- // detail pane, always shown. `selected` is the highlighted phase; it starts
50
- // on the current (recommended-next) phase.
51
- const [selected, setSelected] = useState(currentIndex);
52
- // Detect once at mount whether any agent CLI is installed. Drives whether
53
- // enter on agent-eligible phases runs the agent or falls back to $EDITOR.
54
- const hasAgent = useMemo(() => detectAgents().length > 0, []);
55
- const focusedPhase = phases[selected];
56
- const focusedIndex = selected;
57
- const allDone = everythingComplete(displayProgress);
58
- const notStarted = displayProgress.step === 0;
59
- const readyToCompile = !allDone && displayProgress.step === TOTAL_STEPS - 1;
60
- const nextLabel = phases[currentIndex]?.label ?? "Framing";
61
- function refresh() {
62
- // Re-read progress in case another screen advanced the cursor (gate
63
- // accept, phase agent run, compile success). Without this the hub
64
- // would show stale status until the user navigated away and back.
65
- setProgress(readProgress(folder));
66
- setRefreshTick((t) => t + 1);
67
- }
68
- function openInEditor(relPath, opts = {}) {
69
- const full = join(folder, relPath);
70
- if (!existsSync(full) && opts.template) {
71
- writeFileSync(full, opts.template, "utf8");
72
- }
73
- const editor = resolveEditor();
74
- setRawMode(false);
75
- const child = spawn(editor, [full], { stdio: "inherit" });
76
- child.on("close", () => {
77
- setRawMode(true);
78
- refresh();
79
- app.setNotification({ kind: "info", message: `${relPath} updated.` });
80
- });
81
- child.on("error", (e) => {
82
- setRawMode(true);
83
- app.setNotification({
84
- kind: "error",
85
- message: `Could not launch ${editor}: ${e.message}`,
86
- });
87
- });
88
- }
89
- /**
90
- * The primary action for a phase, invoked by Enter. Designed so the user
91
- * almost never has to think — the most likely thing happens.
92
- *
93
- * - Agent-eligible phases: run the agent (or fall back to $EDITOR if no
94
- * agent CLI is installed).
95
- * - Gates: open the review screen (blocked if prerequisites missing).
96
- * - Assembly: review the pending draft if one exists; otherwise run agent.
97
- * - Compile: dedicated screen.
98
- */
99
- function enterPhase(phase) {
100
- switch (phase.id) {
101
- case "framing":
102
- case "candidates":
103
- case "evaluation":
104
- case "quality":
105
- case "synthesis": {
106
- runAgentOrFallback(phase);
107
- return;
108
- }
109
- case "assembly": {
110
- if (existsSync(join(folder, TAPE_DRAFT_REL))) {
111
- app.navigate({ kind: "tapeDraft", tape, folder });
112
- }
113
- else {
114
- runAgentOrFallback(phase);
115
- }
116
- return;
117
- }
118
- case "gate0": {
119
- if (phase.status === "blocked") {
120
- app.setNotification({
121
- kind: "error",
122
- message: "Confirm framing needs Phase 1 (knowledge map) first.",
123
- });
124
- return;
125
- }
126
- app.navigate({ kind: "gate0", tape, folder });
127
- return;
128
- }
129
- case "gate1": {
130
- if (phase.status === "blocked") {
131
- app.setNotification({
132
- kind: "error",
133
- message: "Confirm candidates needs Phase 2 (long-list) first.",
134
- });
135
- return;
136
- }
137
- app.navigate({ kind: "gate1", tape, folder });
138
- return;
139
- }
140
- case "gate2": {
141
- if (phase.status === "blocked") {
142
- app.setNotification({
143
- kind: "error",
144
- message: "Confirm evaluation needs Phases 4 and 5 first.",
145
- });
146
- return;
147
- }
148
- app.navigate({ kind: "gate2", tape, folder });
149
- return;
150
- }
151
- case "compile": {
152
- if (tape.sources.length === 0) {
153
- app.setNotification({
154
- kind: "error",
155
- message: "Add sources in Phase 7 before compiling.",
156
- });
157
- return;
158
- }
159
- app.navigate({
160
- kind: "compile",
161
- tape,
162
- folder,
163
- showExisting: compiledArtifactCurrent && existsSync(project.mixtapePath),
164
- });
165
- return;
166
- }
167
- }
168
- }
169
- /**
170
- * Run the configured agent for `phase` if one is installed, otherwise drop
171
- * the curator into $EDITOR on the phase's artifact (or the source editor
172
- * for assembly). Either way Enter "does something useful" — the agent vs.
173
- * editor decision is hidden from the keymap.
174
- */
175
- function runAgentOrFallback(phase) {
176
- if (hasAgent) {
177
- app.navigate({ kind: "phaseRunner", tape, folder, phaseId: phase.id });
178
- return;
179
- }
180
- app.setNotification({
181
- kind: "info",
182
- message: "No agent installed — opening the artifact in $EDITOR.",
183
- });
184
- editPhase(phase);
185
- }
186
- /**
187
- * Explicit "edit by hand" path — Enter's escape hatch, bound to `e`.
188
- * For assembly, "edit" means the source editor (the existing TapeEditor
189
- * surface) rather than raw tape.yaml in $EDITOR.
190
- */
191
- function editPhase(phase) {
192
- if (phase.id === "assembly") {
193
- app.navigate({ kind: "editor", tape, folder });
194
- return;
195
- }
196
- if (phase.artifact) {
197
- openInEditor(phase.artifact);
198
- return;
199
- }
200
- app.setNotification({
201
- kind: "error",
202
- message: `Phase ${phase.number} has no artifact to edit.`,
203
- });
204
- }
205
- function share() {
206
- void runShare(folder)
207
- .then((archivePath) => {
208
- app.setNotification({ kind: "info", message: `Shared → ${archivePath}` });
209
- })
210
- .catch((e) => {
211
- app.setNotification({ kind: "error", message: e.message });
212
- });
213
- }
214
- function actOnFocused() {
215
- const phase = focusedPhase;
216
- if (!phase)
217
- return;
218
- // In TOC mode, block entering anything past the current phase — even if
219
- // its artifact happens to exist from a prior out-of-order run. The
220
- // methodology is linear; jumping ahead leaves earlier phases empty and
221
- // confuses the status display.
222
- if (focusedIndex > currentIndex) {
223
- app.setNotification({
224
- kind: "error",
225
- message: `Finish ${phases[currentIndex]?.label ?? "the current phase"} first.`,
226
- });
227
- return;
228
- }
229
- enterPhase(phase);
230
- }
231
- useInput((input, key) => {
232
- if (key.upArrow || input === "k") {
233
- setSelected((s) => Math.max(0, s - 1));
234
- return;
235
- }
236
- if (key.downArrow || input === "j") {
237
- setSelected((s) => Math.min(phases.length - 1, s + 1));
238
- return;
239
- }
240
- if (key.return) {
241
- actOnFocused();
242
- }
243
- else if (input === "e") {
244
- if (focusedPhase)
245
- editPhase(focusedPhase);
246
- }
247
- else if (input === "s") {
248
- share();
249
- }
250
- else if (input === "p") {
251
- app.navigate({ kind: "manifest", tape, folder });
252
- }
253
- else if (input === "o") {
254
- openFolder(folder);
255
- }
256
- else if (key.escape) {
257
- void app.refreshProjects();
258
- app.navigate({ kind: "browser" });
259
- }
260
- else if (input === "q") {
261
- ink.exit();
262
- }
263
- });
264
- return (React.createElement(Box, { flexDirection: "column" },
265
- React.createElement(Header, { title: tape.title || "untitled mixtape", subtitle: `${folder}${tape.jtbd ? ` · ${truncate(tape.jtbd, 60)}` : ""}` }),
266
- React.createElement(StatusBox, { allDone: allDone, notStarted: notStarted, readyToCompile: readyToCompile, nextLabel: nextLabel, sourceCount: tape.sources.length, warningCount: compileWarningCount }),
267
- React.createElement(TocView, { phases: phases, selected: selected, currentIndex: currentIndex, folder: folder, tape: tape, hasAgent: hasAgent }),
268
- React.createElement(ProgressBar, { phases: phases, currentIndex: currentIndex, selected: selected }),
269
- app.notification ? (React.createElement(Box, { marginTop: 1 },
270
- React.createElement(Text, { color: app.notification.kind === "error" ? ERROR : SUCCESS }, app.notification.message))) : null,
271
- React.createElement(Box, { marginTop: 1 },
272
- React.createElement(Text, { color: HEADING }, allDone
273
- ? "next · it's ready — share it, open the folder, or revisit any phase"
274
- : readyToCompile
275
- ? "done · final mix assembled — press enter to compile MIXTAPE.md"
276
- : focusedIndex > currentIndex
277
- ? `next · finish ${nextLabel} first`
278
- : `next · ${focusedPhase ? primaryActionLabel(focusedPhase, hasAgent, folder) : "select a phase"}`)),
279
- React.createElement(Box, { marginTop: 0 },
280
- React.createElement(KeyHints, { hints: [
281
- { key: "↑↓", label: "select phase" },
282
- { key: "enter", label: hasAgent ? "run selected" : "edit selected" },
283
- { key: "e", label: "edit by hand" },
284
- { key: "p", label: "process" },
285
- { key: "s", label: "share" },
286
- { key: "o", label: "open folder" },
287
- { key: "esc", label: "back" },
288
- { key: "q", label: "quit" },
289
- ] }))));
290
- }
291
- // ---------------------------------------------------------------------------
292
- // Status box — the one-glance "where is this mixtape" summary at the top.
293
- // ---------------------------------------------------------------------------
294
- function StatusBox({ allDone, notStarted, readyToCompile, nextLabel, sourceCount, warningCount, }) {
295
- // Compiled (allDone) → green "ready to use"; just-started → neutral;
296
- // mid-flow → yellow "in progress, next: …". The checklist below carries the
297
- // per-phase detail; this box answers "is it done?" at a glance.
298
- const { color, glyph, line, sub } = allDone
299
- ? {
300
- color: SUCCESS,
301
- glyph: "✓",
302
- line: warningCount > 0
303
- ? "Ready to use — compiled with warnings"
304
- : "Ready to use — compiled",
305
- sub: `${sourceCount} source${sourceCount === 1 ? "" : "s"} · MIXTAPE.md written${warningCount > 0
306
- ? ` · ${warningCount} warning${warningCount === 1 ? "" : "s"}`
307
- : ""}`,
308
- }
309
- : readyToCompile
310
- ? {
311
- color: SUCCESS,
312
- glyph: "✓",
313
- line: "Methodology complete — ready to compile",
314
- sub: `final mix assembled · ${sourceCount} source${sourceCount === 1 ? "" : "s"} on tape`,
315
- }
316
- : notStarted
317
- ? {
318
- color: STRUCTURE,
319
- glyph: "○",
320
- line: "Not started",
321
- sub: `begin with ${nextLabel}`,
322
- }
323
- : {
324
- color: CURRENT,
325
- glyph: "◐",
326
- line: "In progress",
327
- sub: `next: ${nextLabel}`,
328
- };
329
- return (React.createElement(Box, { marginBottom: 1 },
330
- React.createElement(LabeledBox, { label: "status", color: color },
331
- React.createElement(Text, { color: color, bold: true },
332
- glyph,
333
- " ",
334
- line),
335
- React.createElement(Text, { color: MUTED }, sub))));
336
- }
337
- /**
338
- * Render a phase's sub-step checklist. Done steps get a green ✓ and stay
339
- * fully colored; pending steps get a dim ○ and lighter text so the eye lands
340
- * on what's already accomplished. Hints render dim after the main text.
341
- */
342
- function SubStepList({ steps }) {
343
- return (React.createElement(Box, { flexDirection: "column" }, steps.map((step, i) => (React.createElement(Box, { key: i },
344
- React.createElement(Text, { color: step.done ? SUCCESS : STRUCTURE, bold: step.done }, step.done ? "✓" : "○"),
345
- React.createElement(Text, { color: !step.done ? MUTED : undefined }, ` ${step.text}`),
346
- step.hint ? (React.createElement(Text, { color: MUTED }, ` · ${step.hint}`)) : null)))));
347
- }
348
- // ---------------------------------------------------------------------------
349
- // TOC view — full phase list. Behind `l`.
350
- // ---------------------------------------------------------------------------
351
- function TocView({ phases, selected, currentIndex, folder, tape, hasAgent, }) {
352
- const selectedPhase = phases[selected];
353
- return (React.createElement(Box, { flexDirection: "row", width: "100%", marginBottom: 1 },
354
- React.createElement(Box, { flexDirection: "column", width: "38%", minWidth: 26, flexShrink: 0 }, phases.map((phase, i) => (React.createElement(PhaseRow, { key: phase.id, phase: phase, selected: i === selected, future: i > currentIndex })))),
355
- React.createElement(Box, { width: 2, flexShrink: 0 },
356
- React.createElement(Text, { color: MUTED }, "\u2502")),
357
- React.createElement(Box, { flexDirection: "column", flexGrow: 1, minWidth: 20 }, selectedPhase ? (React.createElement(PhaseDetail, { phase: selectedPhase, folder: folder, tape: tape, hasAgent: hasAgent })) : null)));
358
- }
359
- // ---------------------------------------------------------------------------
360
- // Progress bar — dense single-line summary.
361
- // ---------------------------------------------------------------------------
362
- function ProgressBar({ phases, currentIndex, selected, }) {
363
- return (React.createElement(Box, { flexWrap: "wrap", columnGap: 1 },
364
- React.createElement(Text, { color: MUTED }, "progress: "),
365
- phases.map((p, i) => {
366
- const isCurrent = i === currentIndex;
367
- const isSelected = selected != null && i === selected;
368
- const isPast = p.status === "complete";
369
- const color = isPast ? SUCCESS : isCurrent ? STRUCTURE : undefined;
370
- return (React.createElement(Text, { key: p.id, backgroundColor: isSelected ? STRUCTURE : undefined, color: isSelected ? ON_FILL : !isPast && !isCurrent ? MUTED : color, bold: isCurrent || isSelected },
371
- phaseShortLabel(p),
372
- statusGlyph(p.status)));
373
- })));
374
- }
375
- function phaseShortLabel(phase) {
376
- // For numeric phases, use the number; for special phases (gates, compile),
377
- // the `number` field is already a single glyph (↳, →) — pass it through.
378
- return phase.number;
379
- }
380
- /**
381
- * Long-form label for the focus card chip + TOC detail header. Numbered phases
382
- * read "Phase N — Label"; gates and compile (whose `number` is a glyph like
383
- * `↳` or `→`) read just the label — no "Phase glyph —" awkwardness.
384
- */
385
- function chipLabelFor(phase) {
386
- if (/^\d/.test(phase.number))
387
- return `Phase ${phase.number} — ${phase.label}`;
388
- return phase.label;
389
- }
390
- function PhaseRow({ phase, selected, future = false, }) {
391
- const statusFg = statusColor(phase.status);
392
- if (selected) {
393
- return (React.createElement(Box, null,
394
- React.createElement(Text, { backgroundColor: STRUCTURE, color: ON_FILL, bold: true }, " ▶ "),
395
- React.createElement(Text, { backgroundColor: STRUCTURE, color: statusFg ?? ON_FILL, bold: true },
396
- statusGlyph(phase.status),
397
- " "),
398
- React.createElement(Text, { backgroundColor: STRUCTURE, color: ON_FILL }, phase.number.padEnd(7, " ")),
399
- React.createElement(Text, { backgroundColor: STRUCTURE, color: ON_FILL, bold: true },
400
- truncate(phase.label, 22),
401
- future ? " 🔒" : "",
402
- " ")));
403
- }
404
- return (React.createElement(Box, null,
405
- React.createElement(Text, null, " "),
406
- React.createElement(Text, { color: future ? MUTED : statusFg },
407
- statusGlyph(phase.status),
408
- " "),
409
- React.createElement(Text, { color: MUTED }, phase.number.padEnd(7, " ")),
410
- React.createElement(Text, { color: future ? MUTED : undefined }, truncate(phase.label, 22))));
411
- }
412
- function PhaseDetail({ phase, folder, tape, hasAgent, }) {
413
- return (React.createElement(Box, { flexDirection: "column" },
414
- React.createElement(Box, null,
415
- React.createElement(Text, { bold: true }, chipLabelFor(phase)),
416
- React.createElement(Text, null, " "),
417
- React.createElement(Text, { color: statusColor(phase.status) },
418
- statusGlyph(phase.status),
419
- " ",
420
- statusLabel(phase.status))),
421
- React.createElement(Box, { marginTop: 1 },
422
- React.createElement(Text, null, phase.summary)),
423
- phase.subSteps && phase.subSteps.length > 0 ? (React.createElement(Box, { flexDirection: "column", marginTop: 1 },
424
- React.createElement(SubStepList, { steps: phase.subSteps }))) : (React.createElement(Box, { marginTop: 1 },
425
- React.createElement(Text, { color: MUTED }, phase.detail))),
426
- phase.artifact ? (React.createElement(Box, { flexDirection: "column", marginTop: 1 },
427
- React.createElement(Text, { color: MUTED }, "artifact:"),
428
- React.createElement(Text, { color: MUTED },
429
- " ",
430
- phase.artifact),
431
- React.createElement(ArtifactPreview, { folder: folder, relPath: phase.artifact }))) : null,
432
- phase.id === "assembly" && tape.sources.length > 0 ? (React.createElement(Box, { flexDirection: "column", marginTop: 1 },
433
- React.createElement(Text, { color: MUTED },
434
- "sources on tape (",
435
- tape.sources.length,
436
- "):"),
437
- tape.sources.slice(0, 6).map((s, i) => {
438
- const label = s.type === "local_file" ? s.citation || s.path || "" : s.url;
439
- return (React.createElement(Text, { key: i, color: MUTED },
440
- i + 1,
441
- ". ",
442
- truncate(label, 60)));
443
- }),
444
- tape.sources.length > 6 ? (React.createElement(Text, { color: MUTED },
445
- " \u2026 and ",
446
- tape.sources.length - 6,
447
- " more")) : null)) : null,
448
- phase.id === "assembly" && existsSync(join(folder, TAPE_DRAFT_REL)) ? (React.createElement(Box, { marginTop: 1 },
449
- React.createElement(Text, { color: WARNING, bold: true },
450
- "\u26A0 draft pending \u2014",
451
- " "),
452
- React.createElement(Text, null,
453
- "an agent run wrote",
454
- " ",
455
- React.createElement(Text, { color: STRUCTURE }, TAPE_DRAFT_REL),
456
- ". Press",
457
- " ",
458
- React.createElement(Text, { color: STRUCTURE }, "enter"),
459
- " to review."))) : null,
460
- React.createElement(Box, { marginTop: 1, flexDirection: "column" },
461
- React.createElement(Box, null,
462
- React.createElement(Text, { color: STRUCTURE }, "enter"),
463
- React.createElement(Text, null, " "),
464
- React.createElement(Text, null, primaryActionLabel(phase, hasAgent, folder))),
465
- phase.artifact && phase.id !== "compile" ? (React.createElement(Box, null,
466
- React.createElement(Text, { color: STRUCTURE }, "e "),
467
- React.createElement(Text, null,
468
- " edit by hand (",
469
- phase.artifact,
470
- " in $EDITOR)"))) : null)));
471
- }
472
- function ArtifactPreview({ folder, relPath, }) {
473
- const full = join(folder, relPath);
474
- if (!existsSync(full)) {
475
- return (React.createElement(Box, { marginTop: 1 },
476
- React.createElement(Text, { color: MUTED }, " (file not on disk yet)")));
477
- }
478
- let text;
479
- try {
480
- text = readFileSync(full, "utf8");
481
- }
482
- catch {
483
- return null;
484
- }
485
- const lines = text.split("\n").slice(0, PREVIEW_LINES);
486
- if (lines.length === 0) {
487
- return (React.createElement(Box, { marginTop: 1 },
488
- React.createElement(Text, { color: MUTED }, " (empty)")));
489
- }
490
- return (React.createElement(Box, { flexDirection: "column", marginTop: 1 },
491
- lines.map((line, i) => (React.createElement(Text, { key: i, color: MUTED },
492
- " ",
493
- truncate(line, 72) || " "))),
494
- text.split("\n").length > PREVIEW_LINES ? (React.createElement(Text, { color: MUTED }, " \u2026")) : null));
495
- }
496
- /**
497
- * What Enter does for this phase, expressed as a short human label.
498
- * Designed to read aloud: "Enter: run Phase 1 with Claude" / "Enter: open Gate 1 review".
499
- */
500
- function primaryActionLabel(phase, hasAgent, folder) {
501
- switch (phase.id) {
502
- case "gate0":
503
- return "review the knowledge map";
504
- case "gate1":
505
- return "review the candidate long-list";
506
- case "gate2":
507
- return "review evaluation + quality checks";
508
- case "assembly":
509
- if (existsSync(join(folder, TAPE_DRAFT_REL))) {
510
- return "review the agent's proposed sources";
511
- }
512
- return hasAgent
513
- ? "let the agent populate sources from the keep-list"
514
- : "open the source editor";
515
- case "compile":
516
- if (phase.status === "complete") {
517
- return "view compile result — copy, share, open folder, or retry";
518
- }
519
- return "start compile — fetches sources and writes MIXTAPE.md";
520
- default:
521
- return hasAgent
522
- ? `run Phase ${phase.number} with the agent`
523
- : `open ${phase.artifact ?? "phase"} in $EDITOR`;
524
- }
525
- }
526
- function isCompiledArtifactCurrent(project) {
527
- if (!existsSync(project.mixtapePath))
528
- return false;
529
- try {
530
- const mixtapeMtime = statSync(project.mixtapePath).mtimeMs;
531
- const tapeMtime = existsSync(project.tapePath) ? statSync(project.tapePath).mtimeMs : 0;
532
- return mixtapeMtime >= tapeMtime;
533
- }
534
- catch {
535
- return false;
536
- }
537
- }
538
- function countCompilationNotes(mixtapePath) {
539
- try {
540
- const text = readFileSync(mixtapePath, "utf8");
541
- const notesStart = text.indexOf("\n## Compilation notes");
542
- if (notesStart === -1)
543
- return 0;
544
- return text
545
- .slice(notesStart)
546
- .split("\n")
547
- .filter((line) => line.startsWith("- **"))
548
- .length;
549
- }
550
- catch {
551
- return 0;
552
- }
553
- }
554
- function truncate(s, n) {
555
- return s.length > n ? s.slice(0, n - 1) + "…" : s;
556
- }
557
- //# sourceMappingURL=ProjectHub.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProjectHub.js","sourceRoot":"","sources":["../../src/screens/ProjectHub.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,IAAI,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,cAAc,GAAG,4BAA4B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAa,MAAM,eAAe,CAAC;AACzD,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,WAAW,GAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,WAAW,GAEZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGpG,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EAAE,WAAW,EACjB,MAAM,GAIP;IACC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAO,WAAW,CAAC,CAAC;IACpD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElD,wEAAwE;IACxE,sEAAsE;IACtE,sEAAsE;IACtE,qCAAqC;IACrC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,GAAG,EAAE;QACtD,IAAI,kBAAkB,CAAC,MAAM,CAAC;YAAE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,MAAM,uBAAuB,GAAG,OAAO,CACrC,GAAG,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC,EACxC,CAAC,OAAO,EAAE,WAAW,CAAC,CACvB,CAAC;IACF,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CACH,uBAAuB,IAAI,QAAQ,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC;QACzD,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;QACpC,CAAC,CAAC,QAAQ,EACd,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CACpC,CAAC;IACF,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAChF,CAAC,uBAAuB,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAC5D,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC;IACnD,0EAA0E;IAC1E,+DAA+D;IAC/D,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC,CAC9C,CAAC;IAEF,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEvE,sEAAsE;IACtE,4EAA4E;IAC5E,2CAA2C;IAC3C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEvD,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9D,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,QAAQ,CAAC;IAC9B,MAAM,OAAO,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,KAAK,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC,IAAI,KAAK,WAAW,GAAG,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,SAAS,CAAC;IAE3D,SAAS,OAAO;QACd,oEAAoE;QACpE,kEAAkE;QAClE,kEAAkE;QAClE,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAClC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,SAAS,YAAY,CAAC,OAAe,EAAE,OAA8B,EAAE;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,EAAE,CAAC;YACV,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,WAAW,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;YAC7B,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,GAAG,CAAC,eAAe,CAAC;gBAClB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,oBAAoB,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE;aACpD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,SAAS,UAAU,CAAC,KAAkB;QACpC,QAAQ,KAAK,CAAC,EAAE,EAAE,CAAC;YACjB,KAAK,SAAS,CAAC;YACf,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY,CAAC;YAClB,KAAK,SAAS,CAAC;YACf,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;oBAC7C,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACN,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO;YACT,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC/B,GAAG,CAAC,eAAe,CAAC;wBAClB,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,sDAAsD;qBAChE,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC/B,GAAG,CAAC,eAAe,CAAC;wBAClB,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,qDAAqD;qBAC/D,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC/B,GAAG,CAAC,eAAe,CAAC;wBAClB,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,gDAAgD;qBAC1D,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,GAAG,CAAC,eAAe,CAAC;wBAClB,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,0CAA0C;qBACpD,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,QAAQ,CAAC;oBACX,IAAI,EAAE,SAAS;oBACf,IAAI;oBACJ,MAAM;oBACN,YAAY,EAAE,uBAAuB,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;iBACzE,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,SAAS,kBAAkB,CAAC,KAAkB;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QACD,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,uDAAuD;SACjE,CAAC,CAAC;QACH,SAAS,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,SAAS,SAAS,CAAC,KAAkB;QACnC,IAAI,KAAK,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,SAAS,KAAK,CAAC,MAAM,2BAA2B;SAC1D,CAAC,CAAC;IACL,CAAC;IAED,SAAS,KAAK;QACZ,KAAK,QAAQ,CAAC,MAAM,CAAC;aAClB,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;YACpB,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,WAAW,EAAE,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;YAClB,GAAG,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACP,CAAC;IAED,SAAS,YAAY;QACnB,MAAM,KAAK,GAAG,YAAY,CAAC;QAC3B,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,wEAAwE;QACxE,mEAAmE;QACnE,uEAAuE;QACvE,+BAA+B;QAC/B,IAAI,YAAY,GAAG,YAAY,EAAE,CAAC;YAChC,GAAG,CAAC,eAAe,CAAC;gBAClB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,UAAU,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,mBAAmB,SAAS;aAC/E,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,UAAU,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,OAAO,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACjC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACnC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;QACjB,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,IAAI,YAAY;gBAAE,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,UAAU,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,GAAG,CAAC,eAAe,EAAE,CAAC;YAC3B,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,MAAM,IACL,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,kBAAkB,EACvC,QAAQ,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAC1E;QAEF,oBAAC,SAAS,IACR,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAChC,YAAY,EAAE,mBAAmB,GACjC;QAEF,oBAAC,OAAO,IACN,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,GAClB;QAEF,oBAAC,WAAW,IAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,GAAI;QAE9E,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAClB,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAC7D,GAAG,CAAC,YAAY,CAAC,OAAO,CACpB,CACH,CACP,CAAC,CAAC,CAAC,IAAI;QAIR,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAE,OAAO,IACjB,OAAO;gBACN,CAAC,CAAC,qEAAqE;gBACvE,CAAC,CAAC,cAAc;oBACd,CAAC,CAAC,gEAAgE;oBACpE,CAAC,CAAC,YAAY,GAAG,YAAY;wBAC3B,CAAC,CAAC,iBAAiB,SAAS,QAAQ;wBACpC,CAAC,CAAC,UAAU,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CACjG,CACH;QAEN,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,QAAQ,IACP,KAAK,EAAE;oBACL,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE;oBACpC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,EAAE;oBACpE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE;oBACnC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;oBAC9B,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;oBAC5B,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE;oBAClC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;oBAC7B,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;iBAC5B,GACD,CACE,CACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,8EAA8E;AAE9E,SAAS,SAAS,CAAC,EACjB,OAAO,EACP,UAAU,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,YAAY,GAQb;IACC,qEAAqE;IACrE,4EAA4E;IAC5E,gEAAgE;IAChE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO;QACzC,CAAC,CAAC;YACE,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,GAAG;YACV,IAAI,EACF,YAAY,GAAG,CAAC;gBACd,CAAC,CAAC,uCAAuC;gBACzC,CAAC,CAAC,yBAAyB;YAC/B,GAAG,EAAE,GAAG,WAAW,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,wBACvD,YAAY,GAAG,CAAC;gBACd,CAAC,CAAC,MAAM,YAAY,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;gBAC9D,CAAC,CAAC,EACN,EAAE;SACH;QACH,CAAC,CAAC,cAAc;YACd,CAAC,CAAC;gBACE,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,yCAAyC;gBAC/C,GAAG,EAAE,yBAAyB,WAAW,UAAU,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU;aAC1F;YACL,CAAC,CAAC,UAAU;gBACV,CAAC,CAAC;oBACE,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,GAAG;oBACV,IAAI,EAAE,aAAa;oBACnB,GAAG,EAAE,cAAc,SAAS,EAAE;iBAC/B;gBACH,CAAC,CAAC;oBACE,KAAK,EAAE,OAAO;oBACd,KAAK,EAAE,GAAG;oBACV,IAAI,EAAE,aAAa;oBACnB,GAAG,EAAE,SAAS,SAAS,EAAE;iBAC1B,CAAC;IACR,OAAO,CACL,oBAAC,GAAG,IAAC,YAAY,EAAE,CAAC;QAClB,oBAAC,UAAU,IAAC,KAAK,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK;YACrC,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI;gBACrB,KAAK;;gBAAG,IAAI,CACR;YACP,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,IAAG,GAAG,CAAQ,CACrB,CACT,CACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,EAAE,KAAK,EAA+C;IACzE,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,IACxB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,oBAAC,GAAG,IAAC,GAAG,EAAE,CAAC;QACT,oBAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAC1D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CACjB;QACP,oBAAC,IAAI,IAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAQ;QACpE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACX,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,IAAG,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAQ,CACjD,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAC,CACE,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,0CAA0C;AAC1C,8EAA8E;AAE9E,SAAS,OAAO,CAAC,EACf,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,QAAQ,GAQT;IACC,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,YAAY,EAAE,CAAC;QACnD,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAC,KAAK,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,IAChE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,oBAAC,QAAQ,IACP,GAAG,EAAE,KAAK,CAAC,EAAE,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,KAAK,QAAQ,EACxB,MAAM,EAAE,CAAC,GAAG,YAAY,GACxB,CACH,CAAC,CACE;QACN,oBAAC,GAAG,IAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;YAC1B,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,aAAU,CACxB;QACN,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,IAClD,aAAa,CAAC,CAAC,CAAC,CACf,oBAAC,WAAW,IACV,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC,CAAC,CAAC,IAAI,CACJ,CACF,CACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAE9E,SAAS,WAAW,CAAC,EACnB,MAAM,EACN,YAAY,EACZ,QAAQ,GAKT;IACC,OAAO,CACL,oBAAC,GAAG,IAAC,QAAQ,EAAC,MAAM,EAAC,SAAS,EAAE,CAAC;QAC/B,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,iBAAmB;QACpC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnB,MAAM,SAAS,GAAG,CAAC,KAAK,YAAY,CAAC;YACrC,MAAM,UAAU,GAAG,QAAQ,IAAI,IAAI,IAAI,CAAC,KAAK,QAAQ,CAAC;YACtD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,OAAO,CACL,oBAAC,IAAI,IACH,GAAG,EAAE,CAAC,CAAC,EAAE,EACT,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACnD,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EACnE,IAAI,EAAE,SAAS,IAAI,UAAU;gBAE5B,eAAe,CAAC,CAAC,CAAC;gBAClB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CACjB,CACR,CAAC;QACJ,CAAC,CAAC,CACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB;IACzC,2EAA2E;IAC3E,yEAAyE;IACzE,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAAkB;IACtC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9E,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,KAAK,EACL,QAAQ,EACR,MAAM,GAAG,KAAK,GAMf;IACC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,oBAAC,GAAG;YACF,oBAAC,IAAI,IAAC,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,UACnD,KAAK,CACD;YACP,oBAAC,IAAI,IAAC,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,IAAI;gBAC/D,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,GAAG,CAC1B;YACP,oBAAC,IAAI,IAAC,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,IAC7C,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CACvB;YACP,oBAAC,IAAI,IAAC,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI;gBACnD,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBACzB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACnB,IAAI,CACA,CACH,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,oBAAC,GAAG;QACF,oBAAC,IAAI,QAAE,KAAK,CAAQ;QACpB,oBAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;YACnC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,GAAG,CAC1B;QACP,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,IAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAQ;QACxD,oBAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAQ,CACvE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,KAAK,EACL,MAAM,EACN,IAAI,EACJ,QAAQ,GAMT;IACC,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACzB,oBAAC,GAAG;YACF,oBAAC,IAAI,IAAC,IAAI,UAAE,YAAY,CAAC,KAAK,CAAC,CAAQ;YACvC,oBAAC,IAAI,aAAU;YACf,oBAAC,IAAI,IAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;;gBAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAQ,CAClG;QACN,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,QAAE,KAAK,CAAC,OAAO,CAAQ,CACxB;QACL,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC7C,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC;YACtC,oBAAC,WAAW,IAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAI,CAClC,CACP,CAAC,CAAC,CAAC,CACF,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,IAAG,KAAK,CAAC,MAAM,CAAQ,CACrC,CACP;QAEA,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChB,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC;YACtC,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,gBAAkB;YACpC,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK;;gBAAK,KAAK,CAAC,QAAQ,CAAQ;YAC7C,oBAAC,eAAe,IAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,GAAI,CACxD,CACP,CAAC,CAAC,CAAC,IAAI;QAEP,KAAK,CAAC,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACpD,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC;YACtC,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK;;gBAAoB,IAAI,CAAC,OAAO,CAAC,MAAM;qBAAU;YAClE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACrC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3E,OAAO,CACL,oBAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK;oBACrB,CAAC,GAAG,CAAC;;oBAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1B,CACR,CAAC;YACJ,CAAC,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACzB,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK;;gBAAW,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;wBAAa,CAClE,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAC,CAAC,CAAC,IAAI;QAEP,KAAK,CAAC,EAAE,KAAK,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CACrE,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAE,OAAO,EAAE,IAAI;;gBACN,GAAG,CAChB;YACP,oBAAC,IAAI;;gBACgB,GAAG;gBACtB,oBAAC,IAAI,IAAC,KAAK,EAAE,SAAS,IAAG,cAAc,CAAQ;;gBAAQ,GAAG;gBAC1D,oBAAC,IAAI,IAAC,KAAK,EAAE,SAAS,YAAc;8BAC/B,CACH,CACP,CAAC,CAAC,CAAC,IAAI;QAER,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ;YACvC,oBAAC,GAAG;gBACF,oBAAC,IAAI,IAAC,KAAK,EAAE,SAAS,YAAc;gBACpC,oBAAC,IAAI,aAAU;gBACf,oBAAC,IAAI,QAAE,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAQ,CACtD;YACL,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAC1C,oBAAC,GAAG;gBACF,oBAAC,IAAI,IAAC,KAAK,EAAE,SAAS,YAAc;gBACpC,oBAAC,IAAI;;oBAAkB,KAAK,CAAC,QAAQ;mCAAoB,CACrD,CACP,CAAC,CAAC,CAAC,IAAI,CACJ,CACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EACvB,MAAM,EACN,OAAO,GAIR;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CACL,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,+BAAiC,CAC/C,CACP,CAAC;IACJ,CAAC;IACD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CACL,oBAAC,GAAG,IAAC,SAAS,EAAE,CAAC;YACf,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,gBAAkB,CAChC,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC;QACrC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,oBAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK;YACvB,IAAI;YAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAC3B,CACR,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CACzC,oBAAC,IAAI,IAAC,KAAK,EAAE,KAAK,eAAY,CAC/B,CAAC,CAAC,CAAC,IAAI,CACJ,CACP,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,KAAkB,EAAE,QAAiB,EAAE,MAAc;IAC/E,QAAQ,KAAK,CAAC,EAAE,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,0BAA0B,CAAC;QACpC,KAAK,OAAO;YACV,OAAO,gCAAgC,CAAC;QAC1C,KAAK,OAAO;YACV,OAAO,oCAAoC,CAAC;QAC9C,KAAK,UAAU;YACb,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;gBAC7C,OAAO,qCAAqC,CAAC;YAC/C,CAAC;YACD,OAAO,QAAQ;gBACb,CAAC,CAAC,mDAAmD;gBACrD,CAAC,CAAC,wBAAwB,CAAC;QAC/B,KAAK,SAAS;YACZ,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,0DAA0D,CAAC;YACpE,CAAC;YACD,OAAO,uDAAuD,CAAC;QACjE;YACE,OAAO,QAAQ;gBACb,CAAC,CAAC,aAAa,KAAK,CAAC,MAAM,iBAAiB;gBAC5C,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,IAAI,OAAO,aAAa,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAyC;IAC1E,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;QAC3D,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,OAAO,YAAY,IAAI,SAAS,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAmB;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC1D,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI;aACR,KAAK,CAAC,UAAU,CAAC;aACjB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACzC,MAAM,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}