@workflow/web-shared 4.1.0-beta.52 → 4.1.0-beta.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/error-boundary.d.ts +15 -20
- package/dist/components/error-boundary.d.ts.map +1 -1
- package/dist/components/error-boundary.js +17 -31
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/event-list-view.d.ts +7 -6
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +492 -109
- package/dist/components/event-list-view.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/run-trace-view.d.ts +2 -1
- package/dist/components/run-trace-view.d.ts.map +1 -1
- package/dist/components/run-trace-view.js +2 -2
- package/dist/components/run-trace-view.js.map +1 -1
- package/dist/components/sidebar/attribute-panel.d.ts +2 -1
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +53 -142
- package/dist/components/sidebar/attribute-panel.js.map +1 -1
- package/dist/components/sidebar/conversation-view.d.ts.map +1 -1
- package/dist/components/sidebar/conversation-view.js +3 -17
- package/dist/components/sidebar/conversation-view.js.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.d.ts +3 -1
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +63 -10
- package/dist/components/sidebar/entity-detail-panel.js.map +1 -1
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +4 -8
- package/dist/components/sidebar/events-list.js.map +1 -1
- package/dist/components/sidebar/resolve-hook-modal.d.ts +3 -0
- package/dist/components/sidebar/resolve-hook-modal.d.ts.map +1 -1
- package/dist/components/sidebar/resolve-hook-modal.js +152 -3
- package/dist/components/sidebar/resolve-hook-modal.js.map +1 -1
- package/dist/components/stream-viewer.d.ts +7 -5
- package/dist/components/stream-viewer.d.ts.map +1 -1
- package/dist/components/stream-viewer.js +54 -22
- package/dist/components/stream-viewer.js.map +1 -1
- package/dist/components/trace-viewer/components/markers.d.ts +2 -1
- package/dist/components/trace-viewer/components/markers.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/markers.js +59 -20
- package/dist/components/trace-viewer/components/markers.js.map +1 -1
- package/dist/components/trace-viewer/components/node.d.ts +5 -1
- package/dist/components/trace-viewer/components/node.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/node.js +250 -68
- package/dist/components/trace-viewer/components/node.js.map +1 -1
- package/dist/components/trace-viewer/components/span-content.d.ts +19 -0
- package/dist/components/trace-viewer/components/span-content.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/span-content.js +137 -0
- package/dist/components/trace-viewer/components/span-content.js.map +1 -0
- package/dist/components/trace-viewer/components/span-detail-panel.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js +3 -2
- package/dist/components/trace-viewer/components/span-detail-panel.js.map +1 -1
- package/dist/components/trace-viewer/components/span-segments.d.ts +50 -0
- package/dist/components/trace-viewer/components/span-segments.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/span-segments.js +392 -0
- package/dist/components/trace-viewer/components/span-segments.js.map +1 -0
- package/dist/components/trace-viewer/components/span-strategies.d.ts +46 -0
- package/dist/components/trace-viewer/components/span-strategies.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/span-strategies.js +108 -0
- package/dist/components/trace-viewer/components/span-strategies.js.map +1 -0
- package/dist/components/trace-viewer/context.d.ts +7 -6
- package/dist/components/trace-viewer/context.d.ts.map +1 -1
- package/dist/components/trace-viewer/context.js +47 -18
- package/dist/components/trace-viewer/context.js.map +1 -1
- package/dist/components/trace-viewer/trace-viewer.d.ts +5 -1
- package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +87 -11
- package/dist/components/trace-viewer/trace-viewer.js.map +1 -1
- package/dist/components/trace-viewer/trace-viewer.module.css +179 -6
- package/dist/components/trace-viewer/util/timing.d.ts +5 -0
- package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
- package/dist/components/trace-viewer/util/timing.js +12 -0
- package/dist/components/trace-viewer/util/timing.js.map +1 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts +1 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.d.ts.map +1 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js +29 -17
- package/dist/components/trace-viewer/util/use-streaming-spans.js.map +1 -1
- package/dist/components/trace-viewer/worker.js +3 -1
- package/dist/components/trace-viewer/worker.js.map +1 -1
- package/dist/components/ui/alert.js +3 -3
- package/dist/components/ui/alert.js.map +1 -1
- package/dist/components/ui/card.d.ts.map +1 -1
- package/dist/components/ui/card.js +2 -2
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/data-inspector.d.ts +17 -0
- package/dist/components/ui/data-inspector.d.ts.map +1 -0
- package/dist/components/ui/data-inspector.js +184 -0
- package/dist/components/ui/data-inspector.js.map +1 -0
- package/dist/components/ui/error-card.d.ts.map +1 -1
- package/dist/components/ui/error-card.js +4 -1
- package/dist/components/ui/error-card.js.map +1 -1
- package/dist/components/ui/inspector-theme.d.ts +39 -24
- package/dist/components/ui/inspector-theme.d.ts.map +1 -1
- package/dist/components/ui/inspector-theme.js +90 -38
- package/dist/components/ui/inspector-theme.js.map +1 -1
- package/dist/components/ui/skeleton.d.ts +1 -1
- package/dist/components/ui/skeleton.d.ts.map +1 -1
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/skeleton.js.map +1 -1
- package/dist/components/workflow-trace-view.d.ts +3 -1
- package/dist/components/workflow-trace-view.d.ts.map +1 -1
- package/dist/components/workflow-trace-view.js +435 -21
- package/dist/components/workflow-trace-view.js.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts +1 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +2 -2
- package/dist/components/workflow-traces/trace-span-construction.js.map +1 -1
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +17 -3
- package/dist/lib/hydration.js.map +1 -1
- package/dist/styles.css +186 -0
- package/package.json +8 -7
- package/src/components/error-boundary.tsx +29 -40
- package/src/components/event-list-view.tsx +1000 -287
- package/src/components/index.ts +1 -0
- package/src/components/run-trace-view.tsx +3 -0
- package/src/components/sidebar/attribute-panel.tsx +58 -258
- package/src/components/sidebar/conversation-view.tsx +30 -27
- package/src/components/sidebar/entity-detail-panel.tsx +86 -20
- package/src/components/sidebar/events-list.tsx +4 -11
- package/src/components/sidebar/resolve-hook-modal.tsx +206 -47
- package/src/components/stream-viewer.tsx +138 -61
- package/src/components/trace-viewer/components/markers.tsx +69 -21
- package/src/components/trace-viewer/components/node.tsx +346 -100
- package/src/components/trace-viewer/components/span-content.tsx +247 -0
- package/src/components/trace-viewer/components/span-detail-panel.tsx +7 -2
- package/src/components/trace-viewer/components/span-segments.ts +516 -0
- package/src/components/trace-viewer/components/span-strategies.ts +205 -0
- package/src/components/trace-viewer/context.tsx +92 -40
- package/src/components/trace-viewer/trace-viewer.module.css +179 -6
- package/src/components/trace-viewer/trace-viewer.tsx +115 -11
- package/src/components/trace-viewer/util/timing.ts +13 -0
- package/src/components/trace-viewer/util/use-streaming-spans.ts +28 -17
- package/src/components/trace-viewer/worker.ts +4 -1
- package/src/components/ui/alert.tsx +3 -3
- package/src/components/ui/card.tsx +3 -5
- package/src/components/ui/data-inspector.tsx +318 -0
- package/src/components/ui/error-card.tsx +17 -6
- package/src/components/ui/inspector-theme.ts +127 -39
- package/src/components/ui/skeleton.tsx +3 -1
- package/src/components/workflow-trace-view.tsx +625 -26
- package/src/components/workflow-traces/trace-span-construction.ts +3 -2
- package/src/lib/hydration.ts +17 -8
- package/src/styles.css +186 -0
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// CSS class mapping (segment status → module CSS class name)
|
|
3
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
4
|
+
/**
|
|
5
|
+
* Maps a SegmentStatus to the CSS module class name to use.
|
|
6
|
+
* These class names must exist in trace-viewer.module.css.
|
|
7
|
+
*/
|
|
8
|
+
export const SEGMENT_CLASS_MAP = {
|
|
9
|
+
queued: 'segQueued',
|
|
10
|
+
running: 'segRunning',
|
|
11
|
+
failed: 'segFailed',
|
|
12
|
+
retrying: 'segRetrying',
|
|
13
|
+
succeeded: 'segSucceeded',
|
|
14
|
+
waiting: 'segWaiting',
|
|
15
|
+
sleeping: 'segSleeping',
|
|
16
|
+
received: 'segReceived',
|
|
17
|
+
};
|
|
18
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
19
|
+
// Helpers
|
|
20
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
21
|
+
function clampFraction(value) {
|
|
22
|
+
return Math.max(0, Math.min(1, value));
|
|
23
|
+
}
|
|
24
|
+
function timeToFraction(time, spanStart, spanDuration) {
|
|
25
|
+
if (spanDuration <= 0)
|
|
26
|
+
return 0;
|
|
27
|
+
return clampFraction((time - spanStart) / spanDuration);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Sort events by timestamp ascending.
|
|
31
|
+
*/
|
|
32
|
+
function sortedEvents(events) {
|
|
33
|
+
return [...events].sort((a, b) => a.timestamp - b.timestamp);
|
|
34
|
+
}
|
|
35
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
36
|
+
// Step segments
|
|
37
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Compute segments for a step span.
|
|
40
|
+
*
|
|
41
|
+
* Timeline: [queued] → [attempt₁ (fail)] → [retry wait] → [attempt₂ (fail)] → ... → [attemptₙ (success)]
|
|
42
|
+
*
|
|
43
|
+
* Events used: step_started, step_retrying, step_failed, step_completed
|
|
44
|
+
* The final segment is 'succeeded' if no trailing step_retrying/step_failed.
|
|
45
|
+
*/
|
|
46
|
+
function computeStepSegments(node) {
|
|
47
|
+
const events = node.events ? sortedEvents(node.events) : [];
|
|
48
|
+
const { startTime, duration } = node;
|
|
49
|
+
const segments = [];
|
|
50
|
+
if (duration <= 0)
|
|
51
|
+
return segments;
|
|
52
|
+
const marks = events
|
|
53
|
+
.filter((e) => [
|
|
54
|
+
'step_started',
|
|
55
|
+
'step_retrying',
|
|
56
|
+
'step_failed',
|
|
57
|
+
'step_completed',
|
|
58
|
+
].includes(e.event.name))
|
|
59
|
+
.map((e) => ({ time: e.timestamp, type: e.event.name }));
|
|
60
|
+
if (marks.length === 0) {
|
|
61
|
+
// No events — show entire span as running
|
|
62
|
+
segments.push({ startFraction: 0, endFraction: 1, status: 'running' });
|
|
63
|
+
return segments;
|
|
64
|
+
}
|
|
65
|
+
// Queued period: from span start to first event
|
|
66
|
+
const firstMark = marks[0];
|
|
67
|
+
const firstFraction = timeToFraction(firstMark.time, startTime, duration);
|
|
68
|
+
if (firstFraction > 0.001) {
|
|
69
|
+
segments.push({
|
|
70
|
+
startFraction: 0,
|
|
71
|
+
endFraction: firstFraction,
|
|
72
|
+
status: 'queued',
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Walk through events to build attempt/retry segments
|
|
76
|
+
for (let i = 0; i < marks.length; i++) {
|
|
77
|
+
const mark = marks[i];
|
|
78
|
+
const markFraction = timeToFraction(mark.time, startTime, duration);
|
|
79
|
+
const nextMark = marks[i + 1];
|
|
80
|
+
const nextFraction = nextMark
|
|
81
|
+
? timeToFraction(nextMark.time, startTime, duration)
|
|
82
|
+
: 1;
|
|
83
|
+
if (mark.type === 'step_started') {
|
|
84
|
+
// This is the start of an execution attempt.
|
|
85
|
+
// It runs until the next event (step_retrying or step_failed) or end of span.
|
|
86
|
+
const isLastMark = i === marks.length - 1;
|
|
87
|
+
if (isLastMark) {
|
|
88
|
+
// Last event is step_started — this attempt is either still running or succeeded
|
|
89
|
+
segments.push({
|
|
90
|
+
startFraction: markFraction,
|
|
91
|
+
endFraction: 1,
|
|
92
|
+
status: 'succeeded',
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// Attempt runs until the next event
|
|
97
|
+
const nextType = nextMark.type;
|
|
98
|
+
const attemptStatus = nextType === 'step_retrying' || nextType === 'step_failed'
|
|
99
|
+
? 'failed'
|
|
100
|
+
: nextType === 'step_completed'
|
|
101
|
+
? 'succeeded'
|
|
102
|
+
: 'running';
|
|
103
|
+
segments.push({
|
|
104
|
+
startFraction: markFraction,
|
|
105
|
+
endFraction: nextFraction,
|
|
106
|
+
status: attemptStatus,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else if (mark.type === 'step_retrying') {
|
|
111
|
+
// Retry wait: from this event to the next step_started (or end)
|
|
112
|
+
segments.push({
|
|
113
|
+
startFraction: markFraction,
|
|
114
|
+
endFraction: nextFraction,
|
|
115
|
+
status: 'retrying',
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else if (mark.type === 'step_failed') {
|
|
119
|
+
// Terminal failure: from this event to the end
|
|
120
|
+
if (markFraction < 0.999) {
|
|
121
|
+
segments.push({
|
|
122
|
+
startFraction: markFraction,
|
|
123
|
+
endFraction: 1,
|
|
124
|
+
status: 'failed',
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else if (mark.type === 'step_completed') {
|
|
129
|
+
// Terminal success: do nothing here since the preceding step_started
|
|
130
|
+
// segment already terminates at this marker.
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return segments;
|
|
134
|
+
}
|
|
135
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
136
|
+
// Hook segments
|
|
137
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
138
|
+
/**
|
|
139
|
+
* Compute segments for a hook span.
|
|
140
|
+
*
|
|
141
|
+
* Timeline: [waiting] → [received] → [disposed]
|
|
142
|
+
*/
|
|
143
|
+
function computeHookSegments(node) {
|
|
144
|
+
const events = node.events ? sortedEvents(node.events) : [];
|
|
145
|
+
const { startTime, duration } = node;
|
|
146
|
+
const segments = [];
|
|
147
|
+
if (duration <= 0)
|
|
148
|
+
return segments;
|
|
149
|
+
const receivedEvent = events.find((e) => e.event.name === 'hook_received');
|
|
150
|
+
const disposedEvent = events.find((e) => e.event.name === 'hook_disposed');
|
|
151
|
+
if (!receivedEvent && !disposedEvent) {
|
|
152
|
+
// Still waiting
|
|
153
|
+
segments.push({ startFraction: 0, endFraction: 1, status: 'waiting' });
|
|
154
|
+
return segments;
|
|
155
|
+
}
|
|
156
|
+
const receivedFraction = receivedEvent
|
|
157
|
+
? timeToFraction(receivedEvent.timestamp, startTime, duration)
|
|
158
|
+
: null;
|
|
159
|
+
const disposedFraction = disposedEvent
|
|
160
|
+
? timeToFraction(disposedEvent.timestamp, startTime, duration)
|
|
161
|
+
: null;
|
|
162
|
+
// Waiting period (before received)
|
|
163
|
+
if (receivedFraction !== null && receivedFraction > 0.001) {
|
|
164
|
+
segments.push({
|
|
165
|
+
startFraction: 0,
|
|
166
|
+
endFraction: receivedFraction,
|
|
167
|
+
status: 'waiting',
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
else if (receivedFraction === null && disposedFraction !== null) {
|
|
171
|
+
// Disposed without receiving — waiting the whole time
|
|
172
|
+
segments.push({
|
|
173
|
+
startFraction: 0,
|
|
174
|
+
endFraction: disposedFraction,
|
|
175
|
+
status: 'waiting',
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
// Received period
|
|
179
|
+
if (receivedFraction !== null) {
|
|
180
|
+
const end = disposedFraction ?? 1;
|
|
181
|
+
segments.push({
|
|
182
|
+
startFraction: receivedFraction,
|
|
183
|
+
endFraction: end,
|
|
184
|
+
status: 'received',
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// Post-disposed (if there's remaining span after disposal)
|
|
188
|
+
if (disposedFraction !== null && disposedFraction < 0.999) {
|
|
189
|
+
segments.push({
|
|
190
|
+
startFraction: disposedFraction,
|
|
191
|
+
endFraction: 1,
|
|
192
|
+
status: 'succeeded',
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
return segments;
|
|
196
|
+
}
|
|
197
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
198
|
+
// Sleep segments
|
|
199
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
200
|
+
/**
|
|
201
|
+
* Compute segments for a sleep span.
|
|
202
|
+
*
|
|
203
|
+
* Timeline: [sleeping] → [completed]
|
|
204
|
+
*/
|
|
205
|
+
function computeSleepSegments(node) {
|
|
206
|
+
const events = node.events ? sortedEvents(node.events) : [];
|
|
207
|
+
const { startTime, duration } = node;
|
|
208
|
+
const segments = [];
|
|
209
|
+
if (duration <= 0)
|
|
210
|
+
return segments;
|
|
211
|
+
const completedEvent = events.find((e) => e.event.name === 'wait_completed');
|
|
212
|
+
if (!completedEvent) {
|
|
213
|
+
// Still sleeping
|
|
214
|
+
segments.push({ startFraction: 0, endFraction: 1, status: 'sleeping' });
|
|
215
|
+
return segments;
|
|
216
|
+
}
|
|
217
|
+
const completedFraction = timeToFraction(completedEvent.timestamp, startTime, duration);
|
|
218
|
+
if (completedFraction > 0.001) {
|
|
219
|
+
segments.push({
|
|
220
|
+
startFraction: 0,
|
|
221
|
+
endFraction: completedFraction,
|
|
222
|
+
status: 'sleeping',
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
segments.push({
|
|
226
|
+
startFraction: completedFraction,
|
|
227
|
+
endFraction: 1,
|
|
228
|
+
status: 'succeeded',
|
|
229
|
+
});
|
|
230
|
+
return segments;
|
|
231
|
+
}
|
|
232
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
233
|
+
// Run segments
|
|
234
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
235
|
+
/**
|
|
236
|
+
* Compute segments for a run span.
|
|
237
|
+
*
|
|
238
|
+
* Timeline: [queued] → [running] → [completed/failed]
|
|
239
|
+
*
|
|
240
|
+
* The queued period is derived from activeStartTime (run.startedAt).
|
|
241
|
+
* A synthetic run_started event is injected at that timestamp so
|
|
242
|
+
* the boundary is hoverable in the trace viewer.
|
|
243
|
+
*/
|
|
244
|
+
function computeRunSegments(node) {
|
|
245
|
+
const events = node.events ? sortedEvents(node.events) : [];
|
|
246
|
+
const { startTime, duration, activeStartTime } = node;
|
|
247
|
+
const segments = [];
|
|
248
|
+
if (duration <= 0)
|
|
249
|
+
return segments;
|
|
250
|
+
const failedEvent = events.find((e) => e.event.name === 'run_failed');
|
|
251
|
+
const completedEvent = events.find((e) => e.event.name === 'run_completed');
|
|
252
|
+
// Queued period (from span start to activeStartTime)
|
|
253
|
+
let cursor = 0;
|
|
254
|
+
if (activeStartTime && activeStartTime > startTime) {
|
|
255
|
+
const queuedFraction = timeToFraction(activeStartTime, startTime, duration);
|
|
256
|
+
if (queuedFraction > 0.001) {
|
|
257
|
+
segments.push({
|
|
258
|
+
startFraction: 0,
|
|
259
|
+
endFraction: queuedFraction,
|
|
260
|
+
status: 'queued',
|
|
261
|
+
});
|
|
262
|
+
cursor = queuedFraction;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
if (failedEvent) {
|
|
266
|
+
const failedFraction = timeToFraction(failedEvent.timestamp, startTime, duration);
|
|
267
|
+
// Running until failure
|
|
268
|
+
if (failedFraction > cursor + 0.001) {
|
|
269
|
+
segments.push({
|
|
270
|
+
startFraction: cursor,
|
|
271
|
+
endFraction: failedFraction,
|
|
272
|
+
status: 'running',
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
segments.push({
|
|
276
|
+
startFraction: failedFraction,
|
|
277
|
+
endFraction: 1,
|
|
278
|
+
status: 'failed',
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
else if (completedEvent) {
|
|
282
|
+
const completedFraction = timeToFraction(completedEvent.timestamp, startTime, duration);
|
|
283
|
+
if (completedFraction > cursor + 0.001) {
|
|
284
|
+
segments.push({
|
|
285
|
+
startFraction: cursor,
|
|
286
|
+
endFraction: completedFraction,
|
|
287
|
+
status: 'running',
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
segments.push({
|
|
291
|
+
startFraction: completedFraction,
|
|
292
|
+
endFraction: 1,
|
|
293
|
+
status: 'succeeded',
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
// Running to completion
|
|
298
|
+
segments.push({
|
|
299
|
+
startFraction: cursor,
|
|
300
|
+
endFraction: 1,
|
|
301
|
+
status: 'running',
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
return segments;
|
|
305
|
+
}
|
|
306
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
307
|
+
// Boundary computation
|
|
308
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
309
|
+
/** Event names to human-readable labels */
|
|
310
|
+
const EVENT_LABELS = {
|
|
311
|
+
step_started: 'Started',
|
|
312
|
+
step_retrying: 'Retrying',
|
|
313
|
+
step_failed: 'Failed',
|
|
314
|
+
hook_created: 'Created',
|
|
315
|
+
hook_received: 'Received',
|
|
316
|
+
hook_disposed: 'Resolved',
|
|
317
|
+
wait_created: 'Sleep started',
|
|
318
|
+
wait_completed: 'Sleep completed',
|
|
319
|
+
run_completed: 'Completed',
|
|
320
|
+
run_failed: 'Run failed',
|
|
321
|
+
step_completed: 'Completed',
|
|
322
|
+
};
|
|
323
|
+
/**
|
|
324
|
+
* Extract boundaries from a span's events. Each boundary sits at the
|
|
325
|
+
* fractional position of a relevant event within the span duration.
|
|
326
|
+
* Only includes events that are used as segment boundaries (not at the
|
|
327
|
+
* very start or very end of the span, to avoid edge clutter).
|
|
328
|
+
*/
|
|
329
|
+
function computeBoundaries(node, relevantEventNames) {
|
|
330
|
+
const events = node.events ? sortedEvents(node.events) : [];
|
|
331
|
+
const { startTime, duration } = node;
|
|
332
|
+
if (duration <= 0)
|
|
333
|
+
return [];
|
|
334
|
+
const boundaries = [];
|
|
335
|
+
for (const e of events) {
|
|
336
|
+
if (!relevantEventNames.includes(e.event.name))
|
|
337
|
+
continue;
|
|
338
|
+
const fraction = timeToFraction(e.timestamp, startTime, duration);
|
|
339
|
+
// Skip boundaries at the very edges (< 1% or > 99%) to avoid clutter
|
|
340
|
+
if (fraction < 0.01 || fraction > 0.99)
|
|
341
|
+
continue;
|
|
342
|
+
boundaries.push({
|
|
343
|
+
fraction,
|
|
344
|
+
label: EVENT_LABELS[e.event.name] ?? e.event.name,
|
|
345
|
+
offsetMs: e.timestamp - startTime,
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
return boundaries;
|
|
349
|
+
}
|
|
350
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
351
|
+
// Dispatcher
|
|
352
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
353
|
+
/**
|
|
354
|
+
* Compute the event-based segments and boundaries for a span based on its resource type.
|
|
355
|
+
* Returns empty arrays for 'default' (generic OTEL) spans.
|
|
356
|
+
*/
|
|
357
|
+
export function computeSegments(resourceType, node) {
|
|
358
|
+
switch (resourceType) {
|
|
359
|
+
case 'step':
|
|
360
|
+
return {
|
|
361
|
+
segments: computeStepSegments(node),
|
|
362
|
+
boundaries: computeBoundaries(node, [
|
|
363
|
+
'step_started',
|
|
364
|
+
'step_retrying',
|
|
365
|
+
'step_failed',
|
|
366
|
+
'step_completed',
|
|
367
|
+
]),
|
|
368
|
+
};
|
|
369
|
+
case 'hook':
|
|
370
|
+
return {
|
|
371
|
+
segments: computeHookSegments(node),
|
|
372
|
+
boundaries: computeBoundaries(node, [
|
|
373
|
+
'hook_created',
|
|
374
|
+
'hook_received',
|
|
375
|
+
'hook_disposed',
|
|
376
|
+
]),
|
|
377
|
+
};
|
|
378
|
+
case 'sleep':
|
|
379
|
+
return {
|
|
380
|
+
segments: computeSleepSegments(node),
|
|
381
|
+
boundaries: computeBoundaries(node, ['wait_created', 'wait_completed']),
|
|
382
|
+
};
|
|
383
|
+
case 'run':
|
|
384
|
+
return {
|
|
385
|
+
segments: computeRunSegments(node),
|
|
386
|
+
boundaries: computeBoundaries(node, ['run_completed', 'run_failed']),
|
|
387
|
+
};
|
|
388
|
+
default:
|
|
389
|
+
return { segments: [], boundaries: [] };
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=span-segments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-segments.js","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/span-segments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
import type { RootNode, ScrollSnapshot, VisibleSpan } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* The resource type of a workflow span, read from span.attributes.resource.
|
|
5
|
+
* Falls back to 'default' for non-workflow (generic OTEL) spans.
|
|
6
|
+
*/
|
|
7
|
+
export type ResourceType = 'run' | 'step' | 'hook' | 'sleep' | 'default';
|
|
8
|
+
/**
|
|
9
|
+
* Layout result computed by a span strategy. Controls how the span
|
|
10
|
+
* is sized and positioned in the timeline.
|
|
11
|
+
*/
|
|
12
|
+
export interface SpanLayout {
|
|
13
|
+
/** The rendered width in pixels */
|
|
14
|
+
width: number;
|
|
15
|
+
/** The actual duration-based width (before min-width clamping) */
|
|
16
|
+
actualWidth: number;
|
|
17
|
+
/** The rendered height in pixels */
|
|
18
|
+
height: number;
|
|
19
|
+
/** The y position in pixels */
|
|
20
|
+
top: number;
|
|
21
|
+
/** The x position in pixels (from left) */
|
|
22
|
+
left: number;
|
|
23
|
+
/** Whether the span is considered "small" (< 64px actual width) */
|
|
24
|
+
isSmall: boolean;
|
|
25
|
+
/** Whether the span is considered "huge" (>= 500px actual width) */
|
|
26
|
+
isHuge: boolean;
|
|
27
|
+
/** Whether the span is currently hovered (with hover eligibility) */
|
|
28
|
+
isHovered: boolean;
|
|
29
|
+
/** Whether the span is expanded (hovered or selected) — controls sizing */
|
|
30
|
+
isExpanded: boolean;
|
|
31
|
+
/** Whether the span is near the right side of the visible area */
|
|
32
|
+
isNearRightSide: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Reads the resource type from a span's attributes.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getResourceType(node: VisibleSpan): ResourceType;
|
|
38
|
+
export declare function getRunLayout(node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
|
|
39
|
+
export declare function getStepLayout(node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
|
|
40
|
+
export declare function getHookLayout(node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
|
|
41
|
+
export declare function getSleepLayout(node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
|
|
42
|
+
/**
|
|
43
|
+
* Computes the layout for a span based on its resource type.
|
|
44
|
+
*/
|
|
45
|
+
export declare function getSpanLayout(resourceType: ResourceType, node: VisibleSpan, root: RootNode, scale: number, scrollSnapshotRef: RefObject<ScrollSnapshot | undefined>): SpanLayout;
|
|
46
|
+
//# sourceMappingURL=span-strategies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-strategies.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/span-strategies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGtE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAKzE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,MAAM,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,UAAU,EAAE,OAAO,CAAC;IACpB,kEAAkE;IAClE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAW/D;AAwFD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAEZ;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAEZ;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAEZ;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAEZ;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,GACvD,UAAU,CAaZ"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { MARKER_HEIGHT, ROW_HEIGHT, ROW_PADDING } from '../util/constants';
|
|
2
|
+
/** Minimum rendered width so very short spans are always visible */
|
|
3
|
+
const MIN_SPAN_WIDTH = 4;
|
|
4
|
+
/**
|
|
5
|
+
* Reads the resource type from a span's attributes.
|
|
6
|
+
*/
|
|
7
|
+
export function getResourceType(node) {
|
|
8
|
+
const resource = node.span.attributes?.resource;
|
|
9
|
+
if (resource === 'run' ||
|
|
10
|
+
resource === 'step' ||
|
|
11
|
+
resource === 'hook' ||
|
|
12
|
+
resource === 'sleep') {
|
|
13
|
+
return resource;
|
|
14
|
+
}
|
|
15
|
+
return 'default';
|
|
16
|
+
}
|
|
17
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
18
|
+
// Shared helpers
|
|
19
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
20
|
+
function computeIsSmall(actualWidth) {
|
|
21
|
+
return actualWidth < 64;
|
|
22
|
+
}
|
|
23
|
+
function computeIsHuge(actualWidth) {
|
|
24
|
+
return actualWidth >= 500;
|
|
25
|
+
}
|
|
26
|
+
function computeIsHovered(node, isHuge) {
|
|
27
|
+
return node.isHovered && !isHuge && node.isHighlighted !== false;
|
|
28
|
+
}
|
|
29
|
+
function computeIsNearRightSide(node, root, scrollSnapshotRef, isHovered) {
|
|
30
|
+
if (!isHovered)
|
|
31
|
+
return false;
|
|
32
|
+
let visibleDuration = root.duration;
|
|
33
|
+
let visibleEndTime = root.endTime;
|
|
34
|
+
const snapshot = scrollSnapshotRef.current;
|
|
35
|
+
if (snapshot) {
|
|
36
|
+
visibleDuration = snapshot.endTime - snapshot.startTime;
|
|
37
|
+
visibleEndTime = snapshot.endTime;
|
|
38
|
+
}
|
|
39
|
+
return visibleEndTime - node.startTime < 0.25 * visibleDuration;
|
|
40
|
+
}
|
|
41
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
42
|
+
// Default layout (used by step, hook, run, default — all behave the same today)
|
|
43
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
44
|
+
function computeDefaultLayout(node, root, scale, scrollSnapshotRef) {
|
|
45
|
+
const left = (node.startTime - root.startTime) * scale;
|
|
46
|
+
let top = MARKER_HEIGHT + (ROW_HEIGHT + ROW_PADDING) * node.row;
|
|
47
|
+
const actualWidth = node.duration * scale;
|
|
48
|
+
const width = Math.max(actualWidth, MIN_SPAN_WIDTH);
|
|
49
|
+
let height = ROW_HEIGHT;
|
|
50
|
+
const isHuge = computeIsHuge(actualWidth);
|
|
51
|
+
const isSmall = computeIsSmall(actualWidth);
|
|
52
|
+
const isHovered = computeIsHovered(node, isHuge);
|
|
53
|
+
const isExpanded = isHovered || Boolean(node.isSelected);
|
|
54
|
+
if (isSmall && !isExpanded) {
|
|
55
|
+
height *= 0.4;
|
|
56
|
+
top += (ROW_HEIGHT - height) * 0.5;
|
|
57
|
+
}
|
|
58
|
+
const isNearRightSide = computeIsNearRightSide(node, root, scrollSnapshotRef, isExpanded);
|
|
59
|
+
return {
|
|
60
|
+
width,
|
|
61
|
+
actualWidth,
|
|
62
|
+
height,
|
|
63
|
+
top,
|
|
64
|
+
left,
|
|
65
|
+
isSmall,
|
|
66
|
+
isHuge,
|
|
67
|
+
isHovered,
|
|
68
|
+
isExpanded,
|
|
69
|
+
isNearRightSide,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
73
|
+
// Per-type layout functions
|
|
74
|
+
// Each returns the same result today but provides a clear extension point.
|
|
75
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
76
|
+
export function getRunLayout(node, root, scale, scrollSnapshotRef) {
|
|
77
|
+
return computeDefaultLayout(node, root, scale, scrollSnapshotRef);
|
|
78
|
+
}
|
|
79
|
+
export function getStepLayout(node, root, scale, scrollSnapshotRef) {
|
|
80
|
+
return computeDefaultLayout(node, root, scale, scrollSnapshotRef);
|
|
81
|
+
}
|
|
82
|
+
export function getHookLayout(node, root, scale, scrollSnapshotRef) {
|
|
83
|
+
return computeDefaultLayout(node, root, scale, scrollSnapshotRef);
|
|
84
|
+
}
|
|
85
|
+
export function getSleepLayout(node, root, scale, scrollSnapshotRef) {
|
|
86
|
+
return computeDefaultLayout(node, root, scale, scrollSnapshotRef);
|
|
87
|
+
}
|
|
88
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
89
|
+
// Dispatcher
|
|
90
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
91
|
+
/**
|
|
92
|
+
* Computes the layout for a span based on its resource type.
|
|
93
|
+
*/
|
|
94
|
+
export function getSpanLayout(resourceType, node, root, scale, scrollSnapshotRef) {
|
|
95
|
+
switch (resourceType) {
|
|
96
|
+
case 'run':
|
|
97
|
+
return getRunLayout(node, root, scale, scrollSnapshotRef);
|
|
98
|
+
case 'step':
|
|
99
|
+
return getStepLayout(node, root, scale, scrollSnapshotRef);
|
|
100
|
+
case 'hook':
|
|
101
|
+
return getHookLayout(node, root, scale, scrollSnapshotRef);
|
|
102
|
+
case 'sleep':
|
|
103
|
+
return getSleepLayout(node, root, scale, scrollSnapshotRef);
|
|
104
|
+
default:
|
|
105
|
+
return computeDefaultLayout(node, root, scale, scrollSnapshotRef);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=span-strategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-strategies.js","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/span-strategies.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,12 +86,6 @@ export interface TraceViewerState {
|
|
|
86
86
|
* Whether the trace viewer is small enough that it should be in mobile mode
|
|
87
87
|
*/
|
|
88
88
|
isMobile: boolean;
|
|
89
|
-
/**
|
|
90
|
-
* @deprecated Panel rendering has been moved outside the context.
|
|
91
|
-
* This field is kept for backwards compatibility but is no longer
|
|
92
|
-
* used by the workflow trace viewer.
|
|
93
|
-
*/
|
|
94
|
-
customPanelComponent: ReactNode | null;
|
|
95
89
|
/**
|
|
96
90
|
* A function to provide custom class names for spans.
|
|
97
91
|
*/
|
|
@@ -165,6 +159,12 @@ export type TraceViewerAction = {
|
|
|
165
159
|
withPanel: boolean;
|
|
166
160
|
} | {
|
|
167
161
|
type: 'forceRender';
|
|
162
|
+
} | {
|
|
163
|
+
/** Like setRoot but preserves scroll position and memo cache (for incremental data updates) */
|
|
164
|
+
type: 'updateRoot';
|
|
165
|
+
root: RootNode;
|
|
166
|
+
spanMap: Record<string, SpanNode>;
|
|
167
|
+
resources: Resource[];
|
|
168
168
|
};
|
|
169
169
|
export interface TraceViewerContextProps {
|
|
170
170
|
state: TraceViewerState;
|
|
@@ -181,4 +181,5 @@ export declare function TraceViewerContextProvider({ getQuickLinks, withPanel, c
|
|
|
181
181
|
customPanelComponent?: ReactNode;
|
|
182
182
|
}): ReactNode;
|
|
183
183
|
export declare const useTraceViewer: () => TraceViewerContextProps;
|
|
184
|
+
export declare const useCustomPanelComponent: () => ReactNode | null;
|
|
184
185
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/components/trace-viewer/context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAW,MAAM,OAAO,CAAC;AAS5E,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EAGT,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAYjB,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACpD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,WAAW,EAAE,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD;;OAEG;IACH,iBAAiB,EAAE,gBAAgB,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAChE;;;OAGG;IACH,YAAY,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/components/trace-viewer/context.tsx"],"names":[],"mappings":"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"}
|