agent-nuvira 3.1.3 → 3.2.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 (146) hide show
  1. package/dist/agents/agents/reasoner.d.ts +8 -0
  2. package/dist/agents/agents/reasoner.d.ts.map +1 -1
  3. package/dist/agents/agents/reasoner.js +53 -2
  4. package/dist/agents/agents/reasoner.js.map +1 -1
  5. package/dist/agents/agents/writer.d.ts +24 -0
  6. package/dist/agents/agents/writer.d.ts.map +1 -1
  7. package/dist/agents/agents/writer.js +194 -0
  8. package/dist/agents/agents/writer.js.map +1 -1
  9. package/dist/agents/composite-plan.d.ts +143 -0
  10. package/dist/agents/composite-plan.d.ts.map +1 -0
  11. package/dist/agents/composite-plan.js +399 -0
  12. package/dist/agents/composite-plan.js.map +1 -0
  13. package/dist/agents/long-form-plan.d.ts +156 -0
  14. package/dist/agents/long-form-plan.d.ts.map +1 -0
  15. package/dist/agents/long-form-plan.js +274 -0
  16. package/dist/agents/long-form-plan.js.map +1 -0
  17. package/dist/agents/orchestrator.d.ts +107 -0
  18. package/dist/agents/orchestrator.d.ts.map +1 -1
  19. package/dist/agents/orchestrator.js +501 -35
  20. package/dist/agents/orchestrator.js.map +1 -1
  21. package/dist/agents/prompt-assembly.d.ts +8 -0
  22. package/dist/agents/prompt-assembly.d.ts.map +1 -1
  23. package/dist/agents/prompt-assembly.js +17 -0
  24. package/dist/agents/prompt-assembly.js.map +1 -1
  25. package/dist/cli/chat.d.ts +27 -0
  26. package/dist/cli/chat.d.ts.map +1 -1
  27. package/dist/cli/chat.js +116 -6
  28. package/dist/cli/chat.js.map +1 -1
  29. package/dist/cli/execute.d.ts +12 -0
  30. package/dist/cli/execute.d.ts.map +1 -1
  31. package/dist/cli/execute.js +105 -2
  32. package/dist/cli/execute.js.map +1 -1
  33. package/dist/cli/models.d.ts.map +1 -1
  34. package/dist/cli/models.js +10 -0
  35. package/dist/cli/models.js.map +1 -1
  36. package/dist/cli/trace.d.ts.map +1 -1
  37. package/dist/cli/trace.js +27 -0
  38. package/dist/cli/trace.js.map +1 -1
  39. package/dist/gateway/registry.d.ts +31 -0
  40. package/dist/gateway/registry.d.ts.map +1 -1
  41. package/dist/gateway/registry.js +143 -13
  42. package/dist/gateway/registry.js.map +1 -1
  43. package/dist/inference/model-entitlement.d.ts +46 -0
  44. package/dist/inference/model-entitlement.d.ts.map +1 -0
  45. package/dist/inference/model-entitlement.js +98 -0
  46. package/dist/inference/model-entitlement.js.map +1 -0
  47. package/dist/learning/autonomy-policy.d.ts +334 -0
  48. package/dist/learning/autonomy-policy.d.ts.map +1 -0
  49. package/dist/learning/autonomy-policy.js +500 -0
  50. package/dist/learning/autonomy-policy.js.map +1 -0
  51. package/dist/learning/credential-fingerprint.d.ts +58 -0
  52. package/dist/learning/credential-fingerprint.d.ts.map +1 -0
  53. package/dist/learning/credential-fingerprint.js +126 -0
  54. package/dist/learning/credential-fingerprint.js.map +1 -0
  55. package/dist/learning/deliverable-class.d.ts +130 -0
  56. package/dist/learning/deliverable-class.d.ts.map +1 -0
  57. package/dist/learning/deliverable-class.js +432 -0
  58. package/dist/learning/deliverable-class.js.map +1 -0
  59. package/dist/learning/long-form.d.ts +252 -0
  60. package/dist/learning/long-form.d.ts.map +1 -0
  61. package/dist/learning/long-form.js +510 -0
  62. package/dist/learning/long-form.js.map +1 -0
  63. package/dist/learning/model-first-router.d.ts +17 -0
  64. package/dist/learning/model-first-router.d.ts.map +1 -1
  65. package/dist/learning/model-first-router.js +27 -0
  66. package/dist/learning/model-first-router.js.map +1 -1
  67. package/dist/learning/model-registry.d.ts +66 -4
  68. package/dist/learning/model-registry.d.ts.map +1 -1
  69. package/dist/learning/model-registry.js +67 -6
  70. package/dist/learning/model-registry.js.map +1 -1
  71. package/dist/learning/model-warmup.d.ts +97 -2
  72. package/dist/learning/model-warmup.d.ts.map +1 -1
  73. package/dist/learning/model-warmup.js +165 -60
  74. package/dist/learning/model-warmup.js.map +1 -1
  75. package/dist/learning/prompt-layers.d.ts +61 -0
  76. package/dist/learning/prompt-layers.d.ts.map +1 -0
  77. package/dist/learning/prompt-layers.js +140 -0
  78. package/dist/learning/prompt-layers.js.map +1 -0
  79. package/dist/learning/provider-limits.d.ts +66 -0
  80. package/dist/learning/provider-limits.d.ts.map +1 -0
  81. package/dist/learning/provider-limits.js +184 -0
  82. package/dist/learning/provider-limits.js.map +1 -0
  83. package/dist/learning/reasoning-trace.d.ts +36 -1
  84. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  85. package/dist/learning/reasoning-trace.js +36 -2
  86. package/dist/learning/reasoning-trace.js.map +1 -1
  87. package/dist/learning/resilient-call.d.ts +36 -1
  88. package/dist/learning/resilient-call.d.ts.map +1 -1
  89. package/dist/learning/resilient-call.js +80 -5
  90. package/dist/learning/resilient-call.js.map +1 -1
  91. package/dist/learning/unattended-job.d.ts +293 -0
  92. package/dist/learning/unattended-job.d.ts.map +1 -0
  93. package/dist/learning/unattended-job.js +544 -0
  94. package/dist/learning/unattended-job.js.map +1 -0
  95. package/dist/learning/unattended-progress.d.ts +95 -0
  96. package/dist/learning/unattended-progress.d.ts.map +1 -0
  97. package/dist/learning/unattended-progress.js +147 -0
  98. package/dist/learning/unattended-progress.js.map +1 -0
  99. package/dist/learning/working-state.d.ts +109 -0
  100. package/dist/learning/working-state.d.ts.map +1 -0
  101. package/dist/learning/working-state.js +244 -0
  102. package/dist/learning/working-state.js.map +1 -0
  103. package/dist/nlu/conversation-gate.d.ts +24 -0
  104. package/dist/nlu/conversation-gate.d.ts.map +1 -1
  105. package/dist/nlu/conversation-gate.js +47 -3
  106. package/dist/nlu/conversation-gate.js.map +1 -1
  107. package/dist/tools/coding-tools.d.ts.map +1 -1
  108. package/dist/tools/coding-tools.js +95 -19
  109. package/dist/tools/coding-tools.js.map +1 -1
  110. package/dist/tools/edit-verification.d.ts +125 -0
  111. package/dist/tools/edit-verification.d.ts.map +1 -0
  112. package/dist/tools/edit-verification.js +237 -0
  113. package/dist/tools/edit-verification.js.map +1 -0
  114. package/dist/tools/git-tool.d.ts.map +1 -1
  115. package/dist/tools/git-tool.js +37 -4
  116. package/dist/tools/git-tool.js.map +1 -1
  117. package/dist/tools/registry.d.ts +30 -2
  118. package/dist/tools/registry.d.ts.map +1 -1
  119. package/dist/tools/registry.js +40 -11
  120. package/dist/tools/registry.js.map +1 -1
  121. package/dist/tools/run-cli.d.ts.map +1 -1
  122. package/dist/tools/run-cli.js +40 -13
  123. package/dist/tools/run-cli.js.map +1 -1
  124. package/dist/tools/run-terminal.d.ts +6 -1
  125. package/dist/tools/run-terminal.d.ts.map +1 -1
  126. package/dist/tools/run-terminal.js +158 -18
  127. package/dist/tools/run-terminal.js.map +1 -1
  128. package/dist/tools/tool-loop.d.ts +35 -0
  129. package/dist/tools/tool-loop.d.ts.map +1 -1
  130. package/dist/tools/tool-loop.js +141 -1
  131. package/dist/tools/tool-loop.js.map +1 -1
  132. package/dist/web-dashboard/chat-console.d.ts +6 -0
  133. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  134. package/dist/web-dashboard/chat-console.js.map +1 -1
  135. package/dist/web-dashboard/chat-retry.d.ts.map +1 -1
  136. package/dist/web-dashboard/chat-retry.js +10 -2
  137. package/dist/web-dashboard/chat-retry.js.map +1 -1
  138. package/dist/web-dashboard/server.d.ts.map +1 -1
  139. package/dist/web-dashboard/server.js +80 -8
  140. package/dist/web-dashboard/server.js.map +1 -1
  141. package/dist/web-dashboard/src/types.d.ts +81 -4
  142. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  143. package/package.json +1 -1
  144. package/src/web-dashboard/public/assets/{index-Co7Hk2FT.js → index-kCUkORm7.js} +2 -2
  145. package/src/web-dashboard/public/assets/{index-Co7Hk2FT.js.map → index-kCUkORm7.js.map} +1 -1
  146. package/src/web-dashboard/public/index.html +1 -1
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Long-form execution — bounded units + a progress ledger for deliverables
3
+ * that are larger than one LLM generation (enterprise-grade hardening, G8).
4
+ *
5
+ * WHY THIS EXISTS (the WhatsApp story audit):
6
+ * The user asked for a 100-page story. Two facts made that ask IMPOSSIBLE for
7
+ * any of the 507 eligible models, independently of the model-shortage myth the
8
+ * failure message told:
9
+ *
10
+ * 1. The code writer generates with `maxTokens: 2048` — about 1,500 words,
11
+ * roughly 4–5 pages. A 100-page book is ~35,000 words, i.e. 25–40 times
12
+ * the largest artifact the pipeline could ever emit.
13
+ * 2. Nothing in the pipeline decomposed the ask. The plan was 4 steps, none
14
+ * of which produced prose, and no component counted words or pages, so
15
+ * there was no notion of "partially done" and nothing to resume.
16
+ *
17
+ * So the fix is structural, not a bigger prompt: split the work into bounded
18
+ * units that fit one generation, persist progress per unit, and report honest
19
+ * completion ("chapter 7 of 39"). This module owns the arithmetic and the
20
+ * ledger; the writer owns one unit at a time.
21
+ *
22
+ * WHY UNIT FILES, NOT APPENDS TO ONE FILE:
23
+ * The obvious design — append each chapter to `Mahagatha.md` — requires the
24
+ * writer to rewrite the whole file every unit (the FileChange contract is a
25
+ * full-content write). By chapter 35 that is ~35k words of input tokens per
26
+ * generation, which does not fit the context window it was going to be
27
+ * generated from. One file per unit keeps every generation bounded and makes
28
+ * the work genuinely resumable. The single document the user asked for is
29
+ * ASSEMBLED deterministically (pure string concatenation, no LLM, no cost)
30
+ * once the units are done.
31
+ *
32
+ * Storage: `~/.nuvira/memory/long-form.json`, keyed by project + document.
33
+ * Honours `NUVIRA_MEMORY_DIR` / `BUFF_MEMORY_DIR` like the other ledgers.
34
+ * Every write is best-effort — the ledger must NEVER break a turn.
35
+ */
36
+ /**
37
+ * Words per printed page. 350 is the standard estimate for a 12pt manuscript
38
+ * page (double-spaced manuscript convention is ~250; a typeset book page is
39
+ * ~350–400). Erring low keeps the plan honest: a "100-page" target that lands
40
+ * at 35,000 words is comfortably 100 pages, never short of it.
41
+ */
42
+ export declare const WORDS_PER_PAGE = 350;
43
+ /**
44
+ * Words per generation unit. Sized to land inside a raised output cap with
45
+ * headroom for the model to finish a sentence: 900 words ≈ 1,400 tokens,
46
+ * comfortably under a 2,048-token floor and well within a 4k–8k cap. Larger
47
+ * units risk truncation, which is exactly how the original writer failed
48
+ * ("no parseable output" on a truncated response).
49
+ */
50
+ export declare const WORDS_PER_GENERATION = 900;
51
+ /** Words per chapter when the user counts chapters instead of pages. */
52
+ export declare const WORDS_PER_CHAPTER = 2500;
53
+ /**
54
+ * Units planned per turn. A 100-page book is ~39 units; planning all of them
55
+ * as orchestrator steps would build a plan the run could never finish, and a
56
+ * single-run attempt is precisely the "bigger ask" the agent kept losing.
57
+ * Bounded batches let each turn end with CONCRETE delivered text and a
58
+ * recorded progress line, and the next turn resumes where it stopped.
59
+ */
60
+ export declare const MAX_UNITS_PER_RUN = 4;
61
+ /** The unit the user counted in. */
62
+ export type LongFormUnit = 'pages' | 'words' | 'chapters' | 'sections';
63
+ /** A parsed long-form target derived from the goal. */
64
+ export interface LongFormTarget {
65
+ /** What the user counted in ("100 pages"). */
66
+ unit: LongFormUnit;
67
+ /** How many of `unit` they asked for. */
68
+ amount: number;
69
+ /** Total words the finished deliverable should reach. */
70
+ wordsTarget: number;
71
+ /** How the work is split into generations. */
72
+ unitCount: number;
73
+ /** Where the number came from, for auditability. */
74
+ source: string;
75
+ }
76
+ /** One bounded unit of work (a chapter/section). */
77
+ export interface SectionProgress {
78
+ /** 1-based position. */
79
+ index: number;
80
+ /** Display title ("Chapter 3"). */
81
+ title: string;
82
+ /** Path of this unit's file, relative to the project root. */
83
+ path: string;
84
+ /** Words this unit should aim for. */
85
+ targetWords: number;
86
+ status: 'pending' | 'done' | 'failed';
87
+ /** Words actually produced (measured from the file when present). */
88
+ words: number;
89
+ /** Generation attempts spent on this unit. */
90
+ attempts: number;
91
+ lastError?: string;
92
+ }
93
+ /** The persisted job: everything needed to resume the work in a later turn. */
94
+ export interface LongFormJob {
95
+ /** Ledger key: project path + document path. */
96
+ key: string;
97
+ /** The original goal, so a resumed turn re-states intent faithfully. */
98
+ goal: string;
99
+ /** Absolute project root. */
100
+ projectPath: string;
101
+ /** The document the user actually asked for (assembled at the end). */
102
+ docPath: string;
103
+ /** 'creative' | 'document' — drives titling and the writer's prompt. */
104
+ deliverableClass: 'creative' | 'document';
105
+ target: LongFormTarget;
106
+ sections: SectionProgress[];
107
+ /** Words across every DONE unit. */
108
+ words: number;
109
+ status: 'in_progress' | 'done';
110
+ createdAt: number;
111
+ updatedAt: number;
112
+ }
113
+ /**
114
+ * Extract the long-form target from a goal, or `null` when the goal does not
115
+ * name a magnitude (in which case the ask fits one generation and this module
116
+ * stays out of the way).
117
+ *
118
+ * Understands the shapes users actually type — "a 100 page story", "100-page
119
+ * book", "in 12 chapters", "about 5000 words", "10 पेज", "एक उपन्यास जिसमें 8
120
+ * अध्याय हों" — and prefers the most specific unit named.
121
+ */
122
+ export declare function parseLongFormTarget(goal: string): LongFormTarget | null;
123
+ /** Default display title for a unit, by class. */
124
+ export declare function sectionTitle(cls: 'creative' | 'document', index: number): string;
125
+ /**
126
+ * Build the unit list for a target. Word targets are distributed evenly with
127
+ * the remainder spread over the first units, so the SUM of unit targets always
128
+ * equals the overall word target — the plan cannot silently undershoot the ask.
129
+ */
130
+ export declare function planSections(target: LongFormTarget, cls: 'creative' | 'document', dir?: string): SectionProgress[];
131
+ /** Pages implied by a word count (for progress reporting). */
132
+ export declare function estimatePages(words: number): number;
133
+ /** Stable key for a (project, document) pair. */
134
+ export declare function longFormKey(projectPath: string, docPath: string): string;
135
+ /** Both `chapters/03-chapter-3.md` (relative) and absolute path forms. */
136
+ export declare function sectionAbsolutePath(projectPath: string, sectionPath: string): string;
137
+ /**
138
+ * Start a job, or RESUME an existing one for the same document.
139
+ *
140
+ * Resuming is the whole point: the failing session re-derived the same plan
141
+ * six times and lost every partial result. A resumed job keeps its existing
142
+ * units, their statuses and their word counts, so the caller can ask for the
143
+ * next pending batch and make real forward progress per turn.
144
+ */
145
+ export declare function startOrResumeJob(input: {
146
+ projectPath: string;
147
+ docPath: string;
148
+ goal: string;
149
+ target: LongFormTarget;
150
+ deliverableClass: 'creative' | 'document';
151
+ dir?: string;
152
+ }): {
153
+ job: LongFormJob;
154
+ resumed: boolean;
155
+ };
156
+ /** Read a job without creating one. */
157
+ export declare function getJob(projectPath: string, docPath: string): LongFormJob | null;
158
+ /**
159
+ * The most recently updated job for a project REGARDLESS of status, or null.
160
+ *
161
+ * The unattended runner needs this: after the last batch completes the job it
162
+ * must be able to read the FINISHED record to confirm the document exists, and
163
+ * `findInProgressJob` (correctly) hides those.
164
+ */
165
+ export declare function findLatestJob(projectPath: string): LongFormJob | null;
166
+ /**
167
+ * The most recently updated UNFINISHED job for a project, or null.
168
+ *
169
+ * WHY: a follow-up turn says "continue" — which names no document, no length,
170
+ * and no class. Re-deriving the job from that text would land on the default
171
+ * filename and start a SECOND book from scratch, which is the "agent goes in a
172
+ * loop and never delivers" behaviour this ledger exists to end. The in-flight
173
+ * job for this project is the correct target for a continuation.
174
+ */
175
+ export declare function findInProgressJob(projectPath: string): LongFormJob | null;
176
+ /** Number of words in a body of text (whitespace-delimited). */
177
+ export declare function countWords(text: string): number;
178
+ /**
179
+ * Record the outcome of ONE unit.
180
+ *
181
+ * `ok` requires actual content: a unit whose file is missing or empty is a
182
+ * FAILURE even if the writer reported success. That is the G10 principle
183
+ * applied to long-form work — "the step ran" is not "the work exists".
184
+ */
185
+ export declare function recordSectionOutcome(job: LongFormJob, index: number, outcome: {
186
+ ok: boolean;
187
+ words?: number;
188
+ error?: string;
189
+ }): LongFormJob;
190
+ /**
191
+ * Persist a job that the caller has already mutated (e.g. after writing unit
192
+ * files). Kept separate from `recordSectionOutcome` so batch callers write
193
+ * once instead of once per unit.
194
+ */
195
+ export declare function saveJob(job: LongFormJob): void;
196
+ /**
197
+ * The next pending units to execute — bounded per run so a turn always ends
198
+ * with delivered text rather than an unfinished marathon.
199
+ */
200
+ export declare function nextPendingSections(job: LongFormJob, limit?: number): SectionProgress[];
201
+ /** Progress snapshot for reporting. */
202
+ export interface LongFormProgress {
203
+ done: number;
204
+ total: number;
205
+ words: number;
206
+ wordsTarget: number;
207
+ pages: number;
208
+ pagesTarget: number;
209
+ percent: number;
210
+ complete: boolean;
211
+ }
212
+ export declare function jobProgress(job: LongFormJob): LongFormProgress;
213
+ /**
214
+ * The honest progress line — reported to the user every turn.
215
+ *
216
+ * Deliberately quotes BOTH the unit count and the words, because the user
217
+ * asked in pages and a word count alone would look like a dodge. This is the
218
+ * sentence the original session could never produce: it had no idea how much
219
+ * of the book existed.
220
+ */
221
+ export declare function formatProgress(job: LongFormJob): string;
222
+ /** The next `limit` units as a plan the writer can execute one at a time. */
223
+ export declare function nextUnitBrief(job: LongFormJob, limit?: number): Array<{
224
+ index: number;
225
+ title: string;
226
+ path: string;
227
+ targetWords: number;
228
+ /** Continuity: the previous unit's tail, so the prose joins up. */
229
+ previousTail: string;
230
+ }>;
231
+ /** Last `chars` of a file, or '' when it does not exist. */
232
+ export declare function readTail(absolutePath: string, chars: number): string;
233
+ export interface AssemblyResult {
234
+ path: string;
235
+ files: number;
236
+ words: number;
237
+ pages: number;
238
+ }
239
+ /**
240
+ * Deterministically assemble the finished document from its unit files.
241
+ *
242
+ * Pure concatenation — no LLM, no cost, no drift. Runs only when every unit is
243
+ * done, so the assembled document is never a half-book presented as complete.
244
+ * Returns null when the job is not finished (the caller must not claim
245
+ * completion, and must keep reporting progress instead).
246
+ */
247
+ export declare function assembleDocument(job: LongFormJob): AssemblyResult | null;
248
+ /** Relative path display, for a concise log line. */
249
+ export declare function displayPath(projectPath: string, absolute: string): string;
250
+ /** Test/reset hook: forget every job. */
251
+ export declare function clearLongFormJobs(): void;
252
+ //# sourceMappingURL=long-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"long-form.d.ts","sourceRoot":"","sources":["../../src/learning/long-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAQH;;;;;GAKG;AACH,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AAEvC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAUnC,oCAAoC;AACpC,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAEvE,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,IAAI,EAAE,YAAY,CAAC;IACnB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtC,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,+EAA+E;AAC/E,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,gBAAgB,EAAE,UAAU,GAAG,UAAU,CAAC;IAC1C,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAiCvE;AAgDD,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,UAAU,GAAG,UAAU,EAC5B,GAAG,SAAa,GACf,eAAe,EAAE,CAkBnB;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AA6DD,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpF;AAID;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,gBAAgB,EAAE,UAAU,GAAG,UAAU,CAAC;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA0CzC;AAED,uCAAuC;AACvC,wBAAgB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAG/E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAOrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAOzE;AAED,gEAAgE;AAChE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,WAAW,CAmBb;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAO9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,SAAoB,GAAG,eAAe,EAAE,CAElG;AAED,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,gBAAgB,CAiB9D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAIvD;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,SAAoB,GAAG,KAAK,CAAC;IAChF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAYD;AAQD,4DAA4D;AAC5D,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpE;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CA2BxE;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMzE;AAED,yCAAyC;AACzC,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}