@nathanvale/chatline 0.0.1 → 0.0.2-next.1

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 (213) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/bin/index.js +1 -1
  3. package/dist/index.js +1 -1
  4. package/package.json +1 -1
  5. package/dist/cli/commands/clean.d.ts +0 -17
  6. package/dist/cli/commands/clean.d.ts.map +0 -1
  7. package/dist/cli/commands/clean.js +0 -142
  8. package/dist/cli/commands/clean.js.map +0 -1
  9. package/dist/cli/commands/doctor.d.ts +0 -17
  10. package/dist/cli/commands/doctor.d.ts.map +0 -1
  11. package/dist/cli/commands/doctor.js +0 -202
  12. package/dist/cli/commands/doctor.js.map +0 -1
  13. package/dist/cli/commands/enrich-ai.d.ts +0 -17
  14. package/dist/cli/commands/enrich-ai.d.ts.map +0 -1
  15. package/dist/cli/commands/enrich-ai.js +0 -371
  16. package/dist/cli/commands/enrich-ai.js.map +0 -1
  17. package/dist/cli/commands/index.d.ts +0 -16
  18. package/dist/cli/commands/index.d.ts.map +0 -1
  19. package/dist/cli/commands/index.js +0 -16
  20. package/dist/cli/commands/index.js.map +0 -1
  21. package/dist/cli/commands/ingest-csv.d.ts +0 -17
  22. package/dist/cli/commands/ingest-csv.d.ts.map +0 -1
  23. package/dist/cli/commands/ingest-csv.js +0 -138
  24. package/dist/cli/commands/ingest-csv.js.map +0 -1
  25. package/dist/cli/commands/ingest-db.d.ts +0 -17
  26. package/dist/cli/commands/ingest-db.d.ts.map +0 -1
  27. package/dist/cli/commands/ingest-db.js +0 -159
  28. package/dist/cli/commands/ingest-db.js.map +0 -1
  29. package/dist/cli/commands/init.d.ts +0 -17
  30. package/dist/cli/commands/init.d.ts.map +0 -1
  31. package/dist/cli/commands/init.js +0 -110
  32. package/dist/cli/commands/init.js.map +0 -1
  33. package/dist/cli/commands/normalize-link.d.ts +0 -16
  34. package/dist/cli/commands/normalize-link.d.ts.map +0 -1
  35. package/dist/cli/commands/normalize-link.js +0 -144
  36. package/dist/cli/commands/normalize-link.js.map +0 -1
  37. package/dist/cli/commands/render-markdown.d.ts +0 -17
  38. package/dist/cli/commands/render-markdown.d.ts.map +0 -1
  39. package/dist/cli/commands/render-markdown.js +0 -218
  40. package/dist/cli/commands/render-markdown.js.map +0 -1
  41. package/dist/cli/commands/stats.d.ts +0 -17
  42. package/dist/cli/commands/stats.d.ts.map +0 -1
  43. package/dist/cli/commands/stats.js +0 -175
  44. package/dist/cli/commands/stats.js.map +0 -1
  45. package/dist/cli/commands/validate.d.ts +0 -17
  46. package/dist/cli/commands/validate.d.ts.map +0 -1
  47. package/dist/cli/commands/validate.js +0 -152
  48. package/dist/cli/commands/validate.js.map +0 -1
  49. package/dist/cli/index.d.ts +0 -13
  50. package/dist/cli/index.d.ts.map +0 -1
  51. package/dist/cli/index.js +0 -121
  52. package/dist/cli/index.js.map +0 -1
  53. package/dist/cli/types.d.ts +0 -93
  54. package/dist/cli/types.d.ts.map +0 -1
  55. package/dist/cli/types.js +0 -7
  56. package/dist/cli/types.js.map +0 -1
  57. package/dist/cli/utils.d.ts +0 -29
  58. package/dist/cli/utils.d.ts.map +0 -1
  59. package/dist/cli/utils.js +0 -53
  60. package/dist/cli/utils.js.map +0 -1
  61. package/dist/cli.d.ts +0 -9
  62. package/dist/cli.d.ts.map +0 -1
  63. package/dist/cli.js +0 -1805
  64. package/dist/config/generator.d.ts +0 -90
  65. package/dist/config/generator.d.ts.map +0 -1
  66. package/dist/config/generator.js +0 -320
  67. package/dist/config/generator.js.map +0 -1
  68. package/dist/config/loader.d.ts +0 -107
  69. package/dist/config/loader.d.ts.map +0 -1
  70. package/dist/config/loader.js +0 -251
  71. package/dist/config/loader.js.map +0 -1
  72. package/dist/config/schema.d.ts +0 -107
  73. package/dist/config/schema.d.ts.map +0 -1
  74. package/dist/config/schema.js +0 -169
  75. package/dist/config/schema.js.map +0 -1
  76. package/dist/enrich/audio-transcription.d.ts +0 -77
  77. package/dist/enrich/audio-transcription.d.ts.map +0 -1
  78. package/dist/enrich/audio-transcription.js +0 -370
  79. package/dist/enrich/audio-transcription.js.map +0 -1
  80. package/dist/enrich/checkpoint.d.ts +0 -137
  81. package/dist/enrich/checkpoint.d.ts.map +0 -1
  82. package/dist/enrich/checkpoint.js +0 -205
  83. package/dist/enrich/checkpoint.js.map +0 -1
  84. package/dist/enrich/idempotency.d.ts +0 -90
  85. package/dist/enrich/idempotency.d.ts.map +0 -1
  86. package/dist/enrich/idempotency.js +0 -188
  87. package/dist/enrich/idempotency.js.map +0 -1
  88. package/dist/enrich/image-analysis.d.ts +0 -62
  89. package/dist/enrich/image-analysis.d.ts.map +0 -1
  90. package/dist/enrich/image-analysis.js +0 -264
  91. package/dist/enrich/image-analysis.js.map +0 -1
  92. package/dist/enrich/index.d.ts +0 -60
  93. package/dist/enrich/index.d.ts.map +0 -1
  94. package/dist/enrich/index.js +0 -74
  95. package/dist/enrich/index.js.map +0 -1
  96. package/dist/enrich/link-enrichment.d.ts +0 -37
  97. package/dist/enrich/link-enrichment.d.ts.map +0 -1
  98. package/dist/enrich/link-enrichment.js +0 -202
  99. package/dist/enrich/link-enrichment.js.map +0 -1
  100. package/dist/enrich/pdf-video-handling.d.ts +0 -49
  101. package/dist/enrich/pdf-video-handling.d.ts.map +0 -1
  102. package/dist/enrich/pdf-video-handling.js +0 -325
  103. package/dist/enrich/pdf-video-handling.js.map +0 -1
  104. package/dist/enrich/progress-tracker.d.ts +0 -120
  105. package/dist/enrich/progress-tracker.d.ts.map +0 -1
  106. package/dist/enrich/progress-tracker.js +0 -220
  107. package/dist/enrich/progress-tracker.js.map +0 -1
  108. package/dist/enrich/providers/firecrawl.d.ts +0 -18
  109. package/dist/enrich/providers/firecrawl.d.ts.map +0 -1
  110. package/dist/enrich/providers/firecrawl.js +0 -48
  111. package/dist/enrich/providers/firecrawl.js.map +0 -1
  112. package/dist/enrich/providers/generic.d.ts +0 -16
  113. package/dist/enrich/providers/generic.d.ts.map +0 -1
  114. package/dist/enrich/providers/generic.js +0 -36
  115. package/dist/enrich/providers/generic.js.map +0 -1
  116. package/dist/enrich/providers/index.d.ts +0 -14
  117. package/dist/enrich/providers/index.d.ts.map +0 -1
  118. package/dist/enrich/providers/index.js +0 -13
  119. package/dist/enrich/providers/index.js.map +0 -1
  120. package/dist/enrich/providers/instagram.d.ts +0 -16
  121. package/dist/enrich/providers/instagram.d.ts.map +0 -1
  122. package/dist/enrich/providers/instagram.js +0 -43
  123. package/dist/enrich/providers/instagram.js.map +0 -1
  124. package/dist/enrich/providers/spotify.d.ts +0 -16
  125. package/dist/enrich/providers/spotify.d.ts.map +0 -1
  126. package/dist/enrich/providers/spotify.js +0 -45
  127. package/dist/enrich/providers/spotify.js.map +0 -1
  128. package/dist/enrich/providers/twitter.d.ts +0 -16
  129. package/dist/enrich/providers/twitter.d.ts.map +0 -1
  130. package/dist/enrich/providers/twitter.js +0 -43
  131. package/dist/enrich/providers/twitter.js.map +0 -1
  132. package/dist/enrich/providers/types.d.ts +0 -47
  133. package/dist/enrich/providers/types.d.ts.map +0 -1
  134. package/dist/enrich/providers/types.js +0 -15
  135. package/dist/enrich/providers/types.js.map +0 -1
  136. package/dist/enrich/providers/youtube.d.ts +0 -16
  137. package/dist/enrich/providers/youtube.d.ts.map +0 -1
  138. package/dist/enrich/providers/youtube.js +0 -43
  139. package/dist/enrich/providers/youtube.js.map +0 -1
  140. package/dist/enrich/rate-limiting.d.ts +0 -118
  141. package/dist/enrich/rate-limiting.d.ts.map +0 -1
  142. package/dist/enrich/rate-limiting.js +0 -258
  143. package/dist/enrich/rate-limiting.js.map +0 -1
  144. package/dist/index.d.ts.map +0 -1
  145. package/dist/index.js.map +0 -1
  146. package/dist/ingest/dedup-merge.d.ts +0 -82
  147. package/dist/ingest/dedup-merge.d.ts.map +0 -1
  148. package/dist/ingest/dedup-merge.js +0 -262
  149. package/dist/ingest/dedup-merge.js.map +0 -1
  150. package/dist/ingest/ingest-csv.d.ts +0 -62
  151. package/dist/ingest/ingest-csv.d.ts.map +0 -1
  152. package/dist/ingest/ingest-csv.js +0 -300
  153. package/dist/ingest/ingest-csv.js.map +0 -1
  154. package/dist/ingest/ingest-db.d.ts +0 -64
  155. package/dist/ingest/ingest-db.d.ts.map +0 -1
  156. package/dist/ingest/ingest-db.js +0 -172
  157. package/dist/ingest/ingest-db.js.map +0 -1
  158. package/dist/ingest/link-replies-and-tapbacks.d.ts +0 -53
  159. package/dist/ingest/link-replies-and-tapbacks.d.ts.map +0 -1
  160. package/dist/ingest/link-replies-and-tapbacks.js +0 -381
  161. package/dist/ingest/link-replies-and-tapbacks.js.map +0 -1
  162. package/dist/normalize/date-converters.d.ts +0 -45
  163. package/dist/normalize/date-converters.d.ts.map +0 -1
  164. package/dist/normalize/date-converters.js +0 -166
  165. package/dist/normalize/date-converters.js.map +0 -1
  166. package/dist/normalize/path-validator.d.ts +0 -65
  167. package/dist/normalize/path-validator.d.ts.map +0 -1
  168. package/dist/normalize/path-validator.js +0 -221
  169. package/dist/normalize/path-validator.js.map +0 -1
  170. package/dist/normalize/validate-normalized.d.ts +0 -45
  171. package/dist/normalize/validate-normalized.d.ts.map +0 -1
  172. package/dist/normalize/validate-normalized.js +0 -144
  173. package/dist/normalize/validate-normalized.js.map +0 -1
  174. package/dist/render/embeds-blockquotes.d.ts +0 -84
  175. package/dist/render/embeds-blockquotes.d.ts.map +0 -1
  176. package/dist/render/embeds-blockquotes.js +0 -204
  177. package/dist/render/embeds-blockquotes.js.map +0 -1
  178. package/dist/render/grouping.d.ts +0 -78
  179. package/dist/render/grouping.d.ts.map +0 -1
  180. package/dist/render/grouping.js +0 -134
  181. package/dist/render/grouping.js.map +0 -1
  182. package/dist/render/index.d.ts +0 -47
  183. package/dist/render/index.d.ts.map +0 -1
  184. package/dist/render/index.js +0 -245
  185. package/dist/render/index.js.map +0 -1
  186. package/dist/render/reply-rendering.d.ts +0 -88
  187. package/dist/render/reply-rendering.d.ts.map +0 -1
  188. package/dist/render/reply-rendering.js +0 -196
  189. package/dist/render/reply-rendering.js.map +0 -1
  190. package/dist/schema/message.d.ts +0 -125
  191. package/dist/schema/message.d.ts.map +0 -1
  192. package/dist/schema/message.js +0 -331
  193. package/dist/schema/message.js.map +0 -1
  194. package/dist/utils/delta-detection.d.ts +0 -107
  195. package/dist/utils/delta-detection.d.ts.map +0 -1
  196. package/dist/utils/delta-detection.js +0 -199
  197. package/dist/utils/delta-detection.js.map +0 -1
  198. package/dist/utils/enrichment-merge.d.ts +0 -135
  199. package/dist/utils/enrichment-merge.d.ts.map +0 -1
  200. package/dist/utils/enrichment-merge.js +0 -280
  201. package/dist/utils/enrichment-merge.js.map +0 -1
  202. package/dist/utils/human.d.ts +0 -15
  203. package/dist/utils/human.d.ts.map +0 -1
  204. package/dist/utils/human.js +0 -27
  205. package/dist/utils/human.js.map +0 -1
  206. package/dist/utils/incremental-state.d.ts +0 -133
  207. package/dist/utils/incremental-state.d.ts.map +0 -1
  208. package/dist/utils/incremental-state.js +0 -237
  209. package/dist/utils/incremental-state.js.map +0 -1
  210. package/dist/utils/logger.d.ts +0 -40
  211. package/dist/utils/logger.d.ts.map +0 -1
  212. package/dist/utils/logger.js +0 -176
  213. package/dist/utils/logger.js.map +0 -1
@@ -1,220 +0,0 @@
1
- import { ProgressManager } from '../progress/progress-manager';
2
- /**
3
- * Enrichment progress tracker with multi-bar support for concurrent operations
4
- *
5
- * Tracks overall progress, per-type progress, current operation, and ETA based on
6
- * rolling average of recent operation durations.
7
- */
8
- export class EnrichmentProgressManager {
9
- progressManager;
10
- overallBar = null;
11
- typeBars = new Map();
12
- currentBar = null;
13
- totalMessages;
14
- processedMessages = 0;
15
- checkpointInterval;
16
- checkpointCounter = 0;
17
- isCheckpointing = false;
18
- operationStats;
19
- lastOperationStart = 0;
20
- quiet;
21
- constructor(config) {
22
- this.quiet = config.quiet ?? false;
23
- this.totalMessages = config.totalMessages;
24
- this.checkpointInterval = config.checkpointInterval ?? 100;
25
- this.operationStats = {
26
- durations: [],
27
- maxSamples: 10,
28
- };
29
- this.progressManager = new ProgressManager({ quiet: this.quiet });
30
- this.initializeBars();
31
- }
32
- /**
33
- * Initialize all progress bars
34
- * AC01: Overall enrichment progress (total messages)
35
- * AC02: Per-type progress bars (images, audio, PDFs, links)
36
- * AC03: Show current operation description
37
- */
38
- initializeBars() {
39
- if (this.quiet)
40
- return;
41
- // AC01: Overall enrichment progress bar
42
- this.overallBar = this.progressManager.createBar('Overall Enrichment', this.totalMessages);
43
- // AC02: Per-type progress bars for each enrichment type
44
- const enrichmentTypes = ['image', 'audio', 'pdf', 'link'];
45
- for (const type of enrichmentTypes) {
46
- const typeBar = this.progressManager.createBar(`${this.capitalize(type)} Analysis`, 0);
47
- this.typeBars.set(type, typeBar);
48
- }
49
- // AC03: Current operation bar showing what's being processed
50
- this.currentBar = this.progressManager.createBar('Current Operation', 1);
51
- }
52
- /**
53
- * Start tracking an operation
54
- * AC03: Show current operation with filename
55
- */
56
- startOperation(type, currentItem) {
57
- if (this.quiet)
58
- return;
59
- this.lastOperationStart = Date.now();
60
- // Update current operation bar
61
- if (this.currentBar) {
62
- this.progressManager.updateCurrent('Current Operation', `${type}: ${currentItem}`);
63
- this.progressManager.setProgress('Current Operation', 0);
64
- }
65
- }
66
- /**
67
- * Complete an enrichment operation
68
- * AC04: Update ETA based on rolling average of last 10 operations
69
- */
70
- completeOperation(type) {
71
- const duration = Date.now() - this.lastOperationStart;
72
- this.recordOperationDuration(duration);
73
- // Increment overall progress (always track, even in quiet mode)
74
- this.processedMessages++;
75
- this.checkpointCounter++;
76
- // Update UI only if not quiet
77
- if (this.quiet)
78
- return;
79
- // Increment type-specific progress bar
80
- const typeBar = this.typeBars.get(type);
81
- if (typeBar) {
82
- this.progressManager.increment(`${this.capitalize(type)} Analysis`);
83
- }
84
- // Increment overall progress
85
- if (this.overallBar) {
86
- this.progressManager.setProgress('Overall Enrichment', this.processedMessages);
87
- this.updateETADisplay();
88
- }
89
- }
90
- /**
91
- * Record operation duration for ETA calculation
92
- * AC04: Update ETA based on rolling average of last 10 operations
93
- */
94
- recordOperationDuration(durationMs) {
95
- const stats = this.operationStats;
96
- stats.durations.push(durationMs);
97
- // Keep only the last N samples
98
- if (stats.durations.length > stats.maxSamples) {
99
- stats.durations.shift();
100
- }
101
- }
102
- /**
103
- * Update ETA display based on rolling average
104
- * AC04: Update ETA based on rolling average of last 10 operations
105
- */
106
- updateETADisplay() {
107
- if (!this.overallBar || this.operationStats.durations.length === 0)
108
- return;
109
- const remaining = this.totalMessages - this.processedMessages;
110
- const avgDuration = this.getAverageDuration();
111
- const etaMs = remaining * avgDuration;
112
- // Update description with ETA info
113
- const etaSeconds = Math.ceil(etaMs / 1000);
114
- this.progressManager.updateCurrent('Overall Enrichment', `${this.processedMessages}/${this.totalMessages} | ETA: ${etaSeconds}s | Avg: ${Math.round(avgDuration)}ms/msg`);
115
- }
116
- /**
117
- * Get average operation duration in milliseconds
118
- * AC04: Calculate rolling average
119
- */
120
- getAverageDuration() {
121
- const durations = this.operationStats.durations;
122
- if (durations.length === 0)
123
- return 0;
124
- const sum = durations.reduce((a, b) => a + b, 0);
125
- return sum / durations.length;
126
- }
127
- /**
128
- * Show checkpoint pause indicator
129
- * AC05: Checkpoint writes show brief pause in progress
130
- */
131
- startCheckpointWrite() {
132
- if (this.quiet)
133
- return;
134
- this.isCheckpointing = true;
135
- if (this.overallBar) {
136
- this.progressManager.updateCurrent('Overall Enrichment', `💾 Writing checkpoint (${this.processedMessages}/${this.totalMessages})...`);
137
- }
138
- }
139
- /**
140
- * Resume progress after checkpoint write
141
- * AC05: Resume after checkpoint pause
142
- */
143
- completeCheckpointWrite() {
144
- if (this.quiet)
145
- return;
146
- this.isCheckpointing = false;
147
- this.checkpointCounter = 0;
148
- if (this.overallBar) {
149
- this.updateETADisplay();
150
- }
151
- }
152
- /**
153
- * Check if checkpoint should be written
154
- * AC05: Determine checkpoint interval
155
- */
156
- shouldCheckpoint() {
157
- return this.checkpointCounter >= this.checkpointInterval;
158
- }
159
- /**
160
- * Get current progress stats
161
- */
162
- getProgress() {
163
- return {
164
- processed: this.processedMessages,
165
- total: this.totalMessages,
166
- percentage: Math.round((this.processedMessages / this.totalMessages) * 100),
167
- averageDuration: this.getAverageDuration(),
168
- isCheckpointing: this.isCheckpointing,
169
- };
170
- }
171
- /**
172
- * Set total for a specific enrichment type
173
- * AC02: Track per-type totals
174
- */
175
- setTypeTotal(type, total) {
176
- if (this.quiet)
177
- return;
178
- const barName = `${this.capitalize(type)} Analysis`;
179
- // Create bar if it doesn't exist
180
- if (!this.typeBars.has(type)) {
181
- const typeBar = this.progressManager.createBar(barName, total);
182
- this.typeBars.set(type, typeBar);
183
- }
184
- }
185
- /**
186
- * Increment type-specific progress
187
- * AC02: Per-type progress bars
188
- */
189
- incrementType(type, count = 1) {
190
- if (this.quiet)
191
- return;
192
- const barName = `${this.capitalize(type)} Analysis`;
193
- this.progressManager.increment(barName, count);
194
- }
195
- /**
196
- * Stop all progress tracking and cleanup
197
- */
198
- stop() {
199
- this.progressManager.stopAll();
200
- }
201
- /**
202
- * Helper to capitalize type names
203
- */
204
- capitalize(str) {
205
- return str.charAt(0).toUpperCase() + str.slice(1);
206
- }
207
- /**
208
- * Check if progress bars are visible
209
- */
210
- isVisible() {
211
- return !this.quiet && this.progressManager.isVisible();
212
- }
213
- }
214
- /**
215
- * Create an enrichment progress manager instance
216
- */
217
- export function createEnrichmentProgressManager(config) {
218
- return new EnrichmentProgressManager(config);
219
- }
220
- //# sourceMappingURL=progress-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress-tracker.js","sourceRoot":"","sources":["../../src/enrich/progress-tracker.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Firecrawl Provider (ENRICH--T04-AC01)
3
- *
4
- * Primary provider for generic link context extraction.
5
- */
6
- import type { LinkContext, Provider } from './types.js';
7
- /**
8
- * AC01: Firecrawl Provider (primary)
9
- */
10
- export declare class FirecrawlProvider implements Provider {
11
- name: string;
12
- priority: number;
13
- private apiKey;
14
- constructor(apiKey: string);
15
- detect(_url: string): boolean;
16
- extract(url: string): Promise<LinkContext>;
17
- }
18
- //# sourceMappingURL=firecrawl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"firecrawl.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/firecrawl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIvD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,QAAQ;IACjD,IAAI,SAAc;IAClB,QAAQ,SAAI;IACZ,OAAO,CAAC,MAAM,CAAQ;gBAEV,MAAM,EAAE,MAAM;IAI1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA0BhD"}
@@ -1,48 +0,0 @@
1
- /**
2
- * Firecrawl Provider (ENRICH--T04-AC01)
3
- *
4
- * Primary provider for generic link context extraction.
5
- */
6
- import { createLogger } from '#utils/logger';
7
- const logger = createLogger('enrich:firecrawl-provider');
8
- /**
9
- * AC01: Firecrawl Provider (primary)
10
- */
11
- export class FirecrawlProvider {
12
- name = 'firecrawl';
13
- priority = 0;
14
- apiKey;
15
- constructor(apiKey) {
16
- this.apiKey = apiKey;
17
- }
18
- detect(_url) {
19
- // Firecrawl can handle any URL
20
- return true;
21
- }
22
- async extract(url) {
23
- if (!this.apiKey) {
24
- throw new Error('Firecrawl API key not configured');
25
- }
26
- try {
27
- // In production, would use actual Firecrawl SDK
28
- // For now, simulate API response
29
- const response = {
30
- title: `Title for ${url}`,
31
- description: 'Extracted from Firecrawl API',
32
- url,
33
- };
34
- logger.debug(`Firecrawl extracted metadata for ${url}`);
35
- return {
36
- url,
37
- title: response.title,
38
- description: response.description,
39
- provider: 'firecrawl',
40
- };
41
- }
42
- catch (error) {
43
- logger.error(`Firecrawl extraction failed for ${url}`, { error });
44
- throw error;
45
- }
46
- }
47
- }
48
- //# sourceMappingURL=firecrawl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"firecrawl.js","sourceRoot":"","sources":["../../../src/enrich/providers/firecrawl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,MAAM,MAAM,GAAG,YAAY,CAAC,2BAA2B,CAAC,CAAA;AAExD;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC7B,IAAI,GAAG,WAAW,CAAA;IAClB,QAAQ,GAAG,CAAC,CAAA;IACJ,MAAM,CAAQ;IAEtB,YAAY,MAAc;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,IAAY;QAClB,+BAA+B;QAC/B,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;QACpD,CAAC;QAED,IAAI,CAAC;YACJ,gDAAgD;YAChD,iCAAiC;YACjC,MAAM,QAAQ,GAAG;gBAChB,KAAK,EAAE,aAAa,GAAG,EAAE;gBACzB,WAAW,EAAE,8BAA8B;gBAC3C,GAAG;aACH,CAAA;YAED,MAAM,CAAC,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAA;YACvD,OAAO;gBACN,GAAG;gBACH,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,QAAQ,EAAE,WAAW;aACrB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YACjE,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Generic Provider (ENRICH--T04-AC05)
3
- *
4
- * Generic fallback provider when all specialized providers fail.
5
- */
6
- import type { LinkContext, Provider } from './types.js';
7
- /**
8
- * Generic fallback provider
9
- */
10
- export declare class GenericProvider implements Provider {
11
- name: string;
12
- priority: number;
13
- detect(_url: string): boolean;
14
- extract(url: string): Promise<LinkContext>;
15
- }
16
- //# sourceMappingURL=generic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/generic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIvD;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC/C,IAAI,SAAY;IAChB,QAAQ,SAAI;IAEZ,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAkBhD"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Generic Provider (ENRICH--T04-AC05)
3
- *
4
- * Generic fallback provider when all specialized providers fail.
5
- */
6
- import { createLogger } from '#utils/logger';
7
- const logger = createLogger('enrich:generic-provider');
8
- /**
9
- * Generic fallback provider
10
- */
11
- export class GenericProvider {
12
- name = 'generic';
13
- priority = 5;
14
- detect(_url) {
15
- return true;
16
- }
17
- async extract(url) {
18
- try {
19
- // Basic fallback - just use URL as title
20
- const title = new URL(url).hostname;
21
- logger.debug(`Generic provider using fallback for ${url}`);
22
- return {
23
- url,
24
- title,
25
- description: 'Extracted via generic fallback',
26
- provider: 'generic',
27
- usedFallback: true,
28
- };
29
- }
30
- catch (error) {
31
- logger.error(`Generic extraction failed for ${url}`, { error });
32
- throw error;
33
- }
34
- }
35
- }
36
- //# sourceMappingURL=generic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/enrich/providers/generic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAA;AAEtD;;GAEG;AACH,MAAM,OAAO,eAAe;IAC3B,IAAI,GAAG,SAAS,CAAA;IAChB,QAAQ,GAAG,CAAC,CAAA;IAEZ,MAAM,CAAC,IAAY;QAClB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC;YACJ,yCAAyC;YACzC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;YAEnC,MAAM,CAAC,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAA;YAC1D,OAAO;gBACN,GAAG;gBACH,KAAK;gBACL,WAAW,EAAE,gCAAgC;gBAC7C,QAAQ,EAAE,SAAS;gBACnB,YAAY,EAAE,IAAI;aAClB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YAC/D,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Link Enrichment Providers Index
3
- *
4
- * Barrel export for all provider classes.
5
- */
6
- export { FirecrawlProvider } from './firecrawl.js';
7
- export { GenericProvider } from './generic.js';
8
- export { InstagramProvider } from './instagram.js';
9
- export { SpotifyProvider } from './spotify.js';
10
- export { TwitterProvider } from './twitter.js';
11
- export type { LinkContext, LinkEnrichmentConfig, Provider } from './types.js';
12
- export { URL_PATTERNS } from './types.js';
13
- export { YouTubeProvider } from './youtube.js';
14
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Link Enrichment Providers Index
3
- *
4
- * Barrel export for all provider classes.
5
- */
6
- export { FirecrawlProvider } from './firecrawl.js';
7
- export { GenericProvider } from './generic.js';
8
- export { InstagramProvider } from './instagram.js';
9
- export { SpotifyProvider } from './spotify.js';
10
- export { TwitterProvider } from './twitter.js';
11
- export { URL_PATTERNS } from './types.js';
12
- export { YouTubeProvider } from './youtube.js';
13
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/enrich/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Instagram Provider (ENRICH--T04-AC04)
3
- *
4
- * Fallback provider for Instagram post metadata extraction.
5
- */
6
- import type { LinkContext, Provider } from './types.js';
7
- /**
8
- * AC04: Instagram Provider (social media fallback)
9
- */
10
- export declare class InstagramProvider implements Provider {
11
- name: string;
12
- priority: number;
13
- detect(url: string): boolean;
14
- extract(url: string): Promise<LinkContext>;
15
- }
16
- //# sourceMappingURL=instagram.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instagram.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/instagram.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKvD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,QAAQ;IACjD,IAAI,SAAc;IAClB,QAAQ,SAAI;IAEZ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA0BhD"}
@@ -1,43 +0,0 @@
1
- /**
2
- * Instagram Provider (ENRICH--T04-AC04)
3
- *
4
- * Fallback provider for Instagram post metadata extraction.
5
- */
6
- import { createLogger } from '#utils/logger';
7
- import { URL_PATTERNS } from './types.js';
8
- const logger = createLogger('enrich:instagram-provider');
9
- /**
10
- * AC04: Instagram Provider (social media fallback)
11
- */
12
- export class InstagramProvider {
13
- name = 'instagram';
14
- priority = 4;
15
- detect(url) {
16
- return URL_PATTERNS.instagram.test(url);
17
- }
18
- async extract(url) {
19
- try {
20
- // Extract post ID from URL
21
- const postIdMatch = url.match(/\/p\/([A-Za-z0-9_-]+)/);
22
- const postId = postIdMatch?.[1];
23
- if (!postId) {
24
- throw new Error('Could not extract Instagram post ID');
25
- }
26
- // In production, would parse meta tags or use Instagram API
27
- const title = `Instagram Post: ${postId}`;
28
- logger.debug(`Instagram extracted metadata for ${url}`);
29
- return {
30
- url,
31
- title,
32
- description: 'Post from Instagram',
33
- provider: 'instagram',
34
- usedFallback: true,
35
- };
36
- }
37
- catch (error) {
38
- logger.error(`Instagram extraction failed for ${url}`, { error });
39
- throw error;
40
- }
41
- }
42
- }
43
- //# sourceMappingURL=instagram.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instagram.js","sourceRoot":"","sources":["../../../src/enrich/providers/instagram.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,2BAA2B,CAAC,CAAA;AAExD;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC7B,IAAI,GAAG,WAAW,CAAA;IAClB,QAAQ,GAAG,CAAC,CAAA;IAEZ,MAAM,CAAC,GAAW;QACjB,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC;YACJ,2BAA2B;YAC3B,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;YACtD,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;YAE/B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;YACvD,CAAC;YAED,4DAA4D;YAC5D,MAAM,KAAK,GAAG,mBAAmB,MAAM,EAAE,CAAA;YAEzC,MAAM,CAAC,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAA;YACvD,OAAO;gBACN,GAAG;gBACH,KAAK;gBACL,WAAW,EAAE,qBAAqB;gBAClC,QAAQ,EAAE,WAAW;gBACrB,YAAY,EAAE,IAAI;aAClB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YACjE,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Spotify Provider (ENRICH--T04-AC03)
3
- *
4
- * Fallback provider for Spotify track/artist/album metadata extraction.
5
- */
6
- import type { LinkContext, Provider } from './types.js';
7
- /**
8
- * AC03: Spotify Provider (fallback)
9
- */
10
- export declare class SpotifyProvider implements Provider {
11
- name: string;
12
- priority: number;
13
- detect(url: string): boolean;
14
- extract(url: string): Promise<LinkContext>;
15
- }
16
- //# sourceMappingURL=spotify.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spotify.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/spotify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKvD;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC/C,IAAI,SAAY;IAChB,QAAQ,SAAI;IAEZ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA4BhD"}
@@ -1,45 +0,0 @@
1
- /**
2
- * Spotify Provider (ENRICH--T04-AC03)
3
- *
4
- * Fallback provider for Spotify track/artist/album metadata extraction.
5
- */
6
- import { createLogger } from '#utils/logger';
7
- import { URL_PATTERNS } from './types.js';
8
- const logger = createLogger('enrich:spotify-provider');
9
- /**
10
- * AC03: Spotify Provider (fallback)
11
- */
12
- export class SpotifyProvider {
13
- name = 'spotify';
14
- priority = 2;
15
- detect(url) {
16
- return URL_PATTERNS.spotify.test(url);
17
- }
18
- async extract(url) {
19
- try {
20
- // Extract resource ID and type from URL
21
- const typeMatch = url.match(/\/(\w+)\//);
22
- const idMatch = url.match(/\/(\w+)(\?|$)/);
23
- const resourceType = typeMatch?.[1] || 'track';
24
- const resourceId = idMatch?.[1];
25
- if (!resourceId) {
26
- throw new Error('Could not extract Spotify resource ID');
27
- }
28
- // In production, would fetch from Spotify API or parse OpenGraph
29
- const title = `Spotify ${resourceType}: ${resourceId}`;
30
- logger.debug(`Spotify extracted metadata for ${url}`);
31
- return {
32
- url,
33
- title,
34
- description: `Spotify ${resourceType}`,
35
- provider: 'spotify',
36
- usedFallback: true,
37
- };
38
- }
39
- catch (error) {
40
- logger.error(`Spotify extraction failed for ${url}`, { error });
41
- throw error;
42
- }
43
- }
44
- }
45
- //# sourceMappingURL=spotify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spotify.js","sourceRoot":"","sources":["../../../src/enrich/providers/spotify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAA;AAEtD;;GAEG;AACH,MAAM,OAAO,eAAe;IAC3B,IAAI,GAAG,SAAS,CAAA;IAChB,QAAQ,GAAG,CAAC,CAAA;IAEZ,MAAM,CAAC,GAAW;QACjB,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC;YACJ,wCAAwC;YACxC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YACxC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;YAC1C,MAAM,YAAY,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAA;YAC9C,MAAM,UAAU,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;YAE/B,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;YACzD,CAAC;YAED,iEAAiE;YACjE,MAAM,KAAK,GAAG,WAAW,YAAY,KAAK,UAAU,EAAE,CAAA;YAEtD,MAAM,CAAC,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAA;YACrD,OAAO;gBACN,GAAG;gBACH,KAAK;gBACL,WAAW,EAAE,WAAW,YAAY,EAAE;gBACtC,QAAQ,EAAE,SAAS;gBACnB,YAAY,EAAE,IAAI;aAClB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YAC/D,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Twitter Provider (ENRICH--T04-AC04)
3
- *
4
- * Fallback provider for Twitter/X post metadata extraction.
5
- */
6
- import type { LinkContext, Provider } from './types.js';
7
- /**
8
- * AC04: Twitter Provider (social media fallback)
9
- */
10
- export declare class TwitterProvider implements Provider {
11
- name: string;
12
- priority: number;
13
- detect(url: string): boolean;
14
- extract(url: string): Promise<LinkContext>;
15
- }
16
- //# sourceMappingURL=twitter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"twitter.d.ts","sourceRoot":"","sources":["../../../src/enrich/providers/twitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKvD;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC/C,IAAI,SAAY;IAChB,QAAQ,SAAI;IAEZ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA0BhD"}
@@ -1,43 +0,0 @@
1
- /**
2
- * Twitter Provider (ENRICH--T04-AC04)
3
- *
4
- * Fallback provider for Twitter/X post metadata extraction.
5
- */
6
- import { createLogger } from '#utils/logger';
7
- import { URL_PATTERNS } from './types.js';
8
- const logger = createLogger('enrich:twitter-provider');
9
- /**
10
- * AC04: Twitter Provider (social media fallback)
11
- */
12
- export class TwitterProvider {
13
- name = 'twitter';
14
- priority = 3;
15
- detect(url) {
16
- return URL_PATTERNS.twitter.test(url);
17
- }
18
- async extract(url) {
19
- try {
20
- // Extract tweet ID from URL
21
- const tweetIdMatch = url.match(/\/status\/(\d+)/);
22
- const tweetId = tweetIdMatch?.[1];
23
- if (!tweetId) {
24
- throw new Error('Could not extract tweet ID');
25
- }
26
- // In production, would parse meta tags or use Twitter API
27
- const title = `Tweet: ${tweetId}`;
28
- logger.debug(`Twitter extracted metadata for ${url}`);
29
- return {
30
- url,
31
- title,
32
- description: 'Tweet from Twitter/X',
33
- provider: 'twitter',
34
- usedFallback: true,
35
- };
36
- }
37
- catch (error) {
38
- logger.error(`Twitter extraction failed for ${url}`, { error });
39
- throw error;
40
- }
41
- }
42
- }
43
- //# sourceMappingURL=twitter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"twitter.js","sourceRoot":"","sources":["../../../src/enrich/providers/twitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC,CAAA;AAEtD;;GAEG;AACH,MAAM,OAAO,eAAe;IAC3B,IAAI,GAAG,SAAS,CAAA;IAChB,QAAQ,GAAG,CAAC,CAAA;IAEZ,MAAM,CAAC,GAAW;QACjB,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACxB,IAAI,CAAC;YACJ,4BAA4B;YAC5B,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;YACjD,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;YAEjC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;YAC9C,CAAC;YAED,0DAA0D;YAC1D,MAAM,KAAK,GAAG,UAAU,OAAO,EAAE,CAAA;YAEjC,MAAM,CAAC,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAA;YACrD,OAAO;gBACN,GAAG;gBACH,KAAK;gBACL,WAAW,EAAE,sBAAsB;gBACnC,QAAQ,EAAE,SAAS;gBACnB,YAAY,EAAE,IAAI;aAClB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;YAC/D,MAAM,KAAK,CAAA;QACZ,CAAC;IACF,CAAC;CACD"}