@haibun/web-playwright 3.1.3 → 3.3.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.
- package/build/BrowserFactory.d.ts +11 -11
- package/build/BrowserFactory.d.ts.map +1 -1
- package/build/BrowserFactory.js +40 -46
- package/build/BrowserFactory.js.map +1 -1
- package/build/PlaywrightEvents.d.ts +2 -2
- package/build/PlaywrightEvents.d.ts.map +1 -1
- package/build/PlaywrightEvents.js +41 -23
- package/build/PlaywrightEvents.js.map +1 -1
- package/build/cycles.d.ts.map +1 -1
- package/build/cycles.js +82 -36
- package/build/cycles.js.map +1 -1
- package/build/interactionSteps.d.ts +40 -51
- package/build/interactionSteps.d.ts.map +1 -1
- package/build/interactionSteps.js +32 -51
- package/build/interactionSteps.js.map +1 -1
- package/build/rest-playwright.d.ts +25 -22
- package/build/rest-playwright.d.ts.map +1 -1
- package/build/rest-playwright.js +16 -17
- package/build/rest-playwright.js.map +1 -1
- package/build/twin-page.d.ts +1 -1
- package/build/twin-page.d.ts.map +1 -1
- package/build/twin-page.js +4 -8
- package/build/twin-page.js.map +1 -1
- package/build/web-playwright.d.ts +18 -37
- package/build/web-playwright.d.ts.map +1 -1
- package/build/web-playwright.js +60 -79
- package/build/web-playwright.js.map +1 -1
- package/package.json +12 -7
- package/build/monitor/MonitorHandler.d.ts +0 -52
- package/build/monitor/MonitorHandler.d.ts.map +0 -1
- package/build/monitor/MonitorHandler.js +0 -176
- package/build/monitor/MonitorHandler.js.map +0 -1
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.js +0 -27
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.js +0 -17
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.d.ts +0 -8
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.js +0 -26
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.d.ts +0 -13
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.js +0 -47
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.js.map +0 -1
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.js +0 -147
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.d.ts +0 -32
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.js +0 -258
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.js.map +0 -1
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.js +0 -19
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.js +0 -21
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.js +0 -16
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/artifactDisplayBase.d.ts +0 -20
- package/build/monitor/artifactDisplays/artifactDisplayBase.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/artifactDisplayBase.js +0 -40
- package/build/monitor/artifactDisplays/artifactDisplayBase.js.map +0 -1
- package/build/monitor/controls.d.ts +0 -13
- package/build/monitor/controls.d.ts.map +0 -1
- package/build/monitor/controls.js +0 -349
- package/build/monitor/controls.js.map +0 -1
- package/build/monitor/disclosureJson.d.ts +0 -3
- package/build/monitor/disclosureJson.d.ts.map +0 -1
- package/build/monitor/disclosureJson.js +0 -353
- package/build/monitor/disclosureJson.js.map +0 -1
- package/build/monitor/graph/feature-bases.d.ts +0 -5
- package/build/monitor/graph/feature-bases.d.ts.map +0 -1
- package/build/monitor/graph/feature-bases.js +0 -36
- package/build/monitor/graph/feature-bases.js.map +0 -1
- package/build/monitor/graph/generateMermaidGraph.d.ts +0 -11
- package/build/monitor/graph/generateMermaidGraph.d.ts.map +0 -1
- package/build/monitor/graph/generateMermaidGraph.js +0 -314
- package/build/monitor/graph/generateMermaidGraph.js.map +0 -1
- package/build/monitor/graph/graphUtils.d.ts +0 -3
- package/build/monitor/graph/graphUtils.d.ts.map +0 -1
- package/build/monitor/graph/graphUtils.js +0 -26
- package/build/monitor/graph/graphUtils.js.map +0 -1
- package/build/monitor/graph/mermaidGraphLinks.d.ts +0 -3
- package/build/monitor/graph/mermaidGraphLinks.d.ts.map +0 -1
- package/build/monitor/graph/mermaidGraphLinks.js +0 -26
- package/build/monitor/graph/mermaidGraphLinks.js.map +0 -1
- package/build/monitor/messages.d.ts +0 -14
- package/build/monitor/messages.d.ts.map +0 -1
- package/build/monitor/messages.js +0 -359
- package/build/monitor/messages.js.map +0 -1
- package/build/monitor/monitor.d.ts +0 -25
- package/build/monitor/monitor.d.ts.map +0 -1
- package/build/monitor/monitor.js +0 -599
- package/build/monitor/monitor.js.map +0 -1
- package/build/monitor/test-utils.d.ts +0 -9
- package/build/monitor/test-utils.d.ts.map +0 -1
- package/build/monitor/test-utils.js +0 -70
- package/build/monitor/test-utils.js.map +0 -1
- package/web/monitor.html +0 -3715
package/build/monitor/monitor.js
DELETED
|
@@ -1,599 +0,0 @@
|
|
|
1
|
-
import { EExecutionMessageType } from '@haibun/core/monitor';
|
|
2
|
-
import { LogEntry } from './messages.js';
|
|
3
|
-
import { setupControls } from './controls.js';
|
|
4
|
-
window.haibunCapturedMessages = window.haibunCapturedMessages || [];
|
|
5
|
-
console.info('monitor.ts: window.haibunCapturedMessages initialized.');
|
|
6
|
-
// Track the number of messages we've already rendered to avoid duplicates
|
|
7
|
-
let renderedMessageCount = 0;
|
|
8
|
-
// Function exposed to Playwright to receive new logs
|
|
9
|
-
window.receiveLogData = (logEntry) => {
|
|
10
|
-
monitorState.isLive = true;
|
|
11
|
-
console.info(`[receiveLogData] Received log entry:`, logEntry.level, logEntry.message.substring(0, 50));
|
|
12
|
-
window.haibunCapturedMessages.push(logEntry);
|
|
13
|
-
// Update start time if this is the first message or earlier than current start
|
|
14
|
-
if (window.haibunCapturedMessages.length === 1 || logEntry.timestamp < monitorState.startTime) {
|
|
15
|
-
monitorState.startTime = logEntry.timestamp;
|
|
16
|
-
// Sync display time base
|
|
17
|
-
document.body.dataset.startTime = `${monitorState.startTime}`;
|
|
18
|
-
// Force visibility update since start time changed
|
|
19
|
-
recalcVisibility(monitorState.currentTime);
|
|
20
|
-
updateTimelineMarkers();
|
|
21
|
-
}
|
|
22
|
-
if (logEntry.timestamp - monitorState.startTime > monitorState.maxTime) {
|
|
23
|
-
monitorState.maxTime = logEntry.timestamp - monitorState.startTime;
|
|
24
|
-
}
|
|
25
|
-
renderedMessageCount++;
|
|
26
|
-
renderLogEntry(logEntry);
|
|
27
|
-
};
|
|
28
|
-
// Functions for statement input control
|
|
29
|
-
window.showStatementInput = () => {
|
|
30
|
-
const statementInput = document.getElementById('haibun-statement-input');
|
|
31
|
-
if (statementInput) {
|
|
32
|
-
statementInput.style.display = 'inline-block';
|
|
33
|
-
statementInput.focus();
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
window.hideStatementInput = () => {
|
|
37
|
-
const statementInput = document.getElementById('haibun-statement-input');
|
|
38
|
-
if (statementInput) {
|
|
39
|
-
statementInput.style.display = 'none';
|
|
40
|
-
statementInput.value = '';
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
window.submitStatement = (statement) => {
|
|
44
|
-
if (typeof window.haibunSubmitStatement === 'function') {
|
|
45
|
-
window.haibunSubmitStatement(statement);
|
|
46
|
-
}
|
|
47
|
-
window.hideStatementInput();
|
|
48
|
-
};
|
|
49
|
-
export function renderLogEntry(logEntryData) {
|
|
50
|
-
const { level, message, messageContext, timestamp } = logEntryData;
|
|
51
|
-
const container = document.getElementById('haibun-log-display-area');
|
|
52
|
-
const logEntry = new LogEntry(level, timestamp, message, messageContext);
|
|
53
|
-
const logEntryElement = logEntry.element;
|
|
54
|
-
if (messageContext?.incident) {
|
|
55
|
-
logEntryElement.dataset.incident = messageContext.incident;
|
|
56
|
-
}
|
|
57
|
-
container.appendChild(logEntryElement);
|
|
58
|
-
// Update context header
|
|
59
|
-
if (messageContext?.incident === EExecutionMessageType.FEATURE_START) {
|
|
60
|
-
const feature = messageContext.incidentDetails.feature;
|
|
61
|
-
const text = `Feature: ${feature.name || feature.path}`;
|
|
62
|
-
logEntryElement.dataset.contextText = text;
|
|
63
|
-
const contextEl = document.getElementById('haibun-current-context');
|
|
64
|
-
if (contextEl)
|
|
65
|
-
contextEl.textContent = text;
|
|
66
|
-
}
|
|
67
|
-
else if (messageContext?.incident === EExecutionMessageType.SCENARIO_START) {
|
|
68
|
-
const contextEl = document.getElementById('haibun-current-context');
|
|
69
|
-
const scenarioTitle = messageContext.incidentDetails.scenarioTitle || `Scenario ${messageContext.incidentDetails.currentScenario}`;
|
|
70
|
-
logEntryElement.dataset.contextText = scenarioTitle;
|
|
71
|
-
if (contextEl) {
|
|
72
|
-
const current = contextEl.textContent || '';
|
|
73
|
-
if (current.startsWith('Feature: ')) {
|
|
74
|
-
contextEl.textContent = `${current.split(' > ')[0]} > ${scenarioTitle}`;
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
contextEl.textContent = scenarioTitle;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else if (typeof message === 'string') {
|
|
82
|
-
if (message.startsWith('Feature: ')) {
|
|
83
|
-
const contextEl = document.getElementById('haibun-current-context');
|
|
84
|
-
if (contextEl)
|
|
85
|
-
contextEl.textContent = message;
|
|
86
|
-
}
|
|
87
|
-
else if (message.startsWith('Scenario: ')) {
|
|
88
|
-
const contextEl = document.getElementById('haibun-current-context');
|
|
89
|
-
if (contextEl) {
|
|
90
|
-
const current = contextEl.textContent || '';
|
|
91
|
-
if (current.startsWith('Feature: ')) {
|
|
92
|
-
contextEl.textContent = `${current.split(' > ')[0]} > ${message}`;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
contextEl.textContent = message;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
// On STEP_END, find the last active STEP_START entry and handle it
|
|
101
|
-
if (messageContext?.incident === EExecutionMessageType.STEP_END) {
|
|
102
|
-
const activeStepStartEntries = container.querySelectorAll('.haibun-step-start:not(.disappeared)');
|
|
103
|
-
if (activeStepStartEntries.length > 0) {
|
|
104
|
-
const lastActiveEntry = activeStepStartEntries[activeStepStartEntries.length - 1];
|
|
105
|
-
// Just mark as disappeared - don't add failed class to STEP_START
|
|
106
|
-
// The STEP_END entry itself will have the failed class if needed
|
|
107
|
-
lastActiveEntry.classList.add('disappeared');
|
|
108
|
-
lastActiveEntry.dataset.endTime = `${timestamp}`;
|
|
109
|
-
// Check failure
|
|
110
|
-
const incidentDetails = messageContext.incidentDetails;
|
|
111
|
-
const actionResult = incidentDetails?.actionResult;
|
|
112
|
-
if (actionResult?.ok === false) {
|
|
113
|
-
markTimelineError(lastActiveEntry.dataset.time);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
console.warn('Received STEP_END but found no active STEP_START log entry to hide.');
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
// Store seqPath if available
|
|
121
|
-
const incidentDetails = messageContext?.incidentDetails;
|
|
122
|
-
const featureStep = incidentDetails?.featureStep;
|
|
123
|
-
if (featureStep?.seqPath) {
|
|
124
|
-
const val = Array.isArray(featureStep.seqPath) ? featureStep.seqPath.join('.') : featureStep.seqPath;
|
|
125
|
-
logEntryElement.dataset.seqPath = val;
|
|
126
|
-
}
|
|
127
|
-
// On ENSURE_END, find the last active ENSURE_START entry and handle it
|
|
128
|
-
if (messageContext?.incident === EExecutionMessageType.ENSURE_END) {
|
|
129
|
-
const activeEnsureStartEntries = container.querySelectorAll('.haibun-ensure-start:not(.disappeared)');
|
|
130
|
-
if (activeEnsureStartEntries.length > 0) {
|
|
131
|
-
const lastActiveEntry = activeEnsureStartEntries[activeEnsureStartEntries.length - 1];
|
|
132
|
-
// Check if this ensure failed
|
|
133
|
-
const incidentDetails = messageContext.incidentDetails;
|
|
134
|
-
const actionResult = incidentDetails?.actionResult;
|
|
135
|
-
const ensureFailed = actionResult?.ok === false;
|
|
136
|
-
if (ensureFailed) {
|
|
137
|
-
// Mark as failed so it stays visible regardless of log level
|
|
138
|
-
lastActiveEntry.classList.add('haibun-ensure-failed');
|
|
139
|
-
markTimelineError(lastActiveEntry.dataset.time);
|
|
140
|
-
}
|
|
141
|
-
// Hide the ensure-start marker (but failed ensures will remain visible via CSS)
|
|
142
|
-
lastActiveEntry.classList.add('disappeared');
|
|
143
|
-
lastActiveEntry.dataset.endTime = `${timestamp}`;
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
console.warn('Received ENSURE_END but found no active ENSURE_START log entry to hide.');
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// Add timeline marker
|
|
150
|
-
if (messageContext?.incident === EExecutionMessageType.STEP_START || messageContext?.incident === EExecutionMessageType.ENSURE_START) {
|
|
151
|
-
addTimelineMarker(timestamp, messageContext.incident);
|
|
152
|
-
}
|
|
153
|
-
// Move prompt controls to the end
|
|
154
|
-
const promptControls = document.getElementById('haibun-prompt-controls-container');
|
|
155
|
-
if (promptControls) {
|
|
156
|
-
container.appendChild(promptControls);
|
|
157
|
-
}
|
|
158
|
-
// Ensure scrolling happens after DOM update
|
|
159
|
-
// if (monitorState.autoScroll) {
|
|
160
|
-
// setTimeout(() => {
|
|
161
|
-
// container.scrollTop = container.scrollHeight;
|
|
162
|
-
// }, 0);
|
|
163
|
-
// }
|
|
164
|
-
}
|
|
165
|
-
// --- Monitor State & Time Control ---
|
|
166
|
-
const monitorState = {
|
|
167
|
-
isPlaying: true,
|
|
168
|
-
autoScroll: true,
|
|
169
|
-
startTime: 0,
|
|
170
|
-
maxTime: 0,
|
|
171
|
-
currentTime: 0,
|
|
172
|
-
playbackSpeed: 1,
|
|
173
|
-
lastFrameTime: 0,
|
|
174
|
-
lastScrolled: null,
|
|
175
|
-
isLive: false
|
|
176
|
-
};
|
|
177
|
-
function markTimelineError(timestamp) {
|
|
178
|
-
if (!timestamp)
|
|
179
|
-
return;
|
|
180
|
-
const markersContainer = document.getElementById('haibun-timeline-markers');
|
|
181
|
-
if (!markersContainer)
|
|
182
|
-
return;
|
|
183
|
-
const marker = markersContainer.querySelector(`.timeline-marker[data-time="${timestamp}"]`);
|
|
184
|
-
if (marker) {
|
|
185
|
-
marker.classList.add('error');
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
function addTimelineMarker(timestamp, type) {
|
|
189
|
-
const markersContainer = document.getElementById('haibun-timeline-markers');
|
|
190
|
-
if (!markersContainer)
|
|
191
|
-
return;
|
|
192
|
-
const marker = document.createElement('div');
|
|
193
|
-
marker.className = 'timeline-marker';
|
|
194
|
-
if (type === EExecutionMessageType.ENSURE_START) {
|
|
195
|
-
marker.classList.add('ensure');
|
|
196
|
-
}
|
|
197
|
-
// Store absolute timestamp
|
|
198
|
-
marker.dataset.time = `${timestamp}`;
|
|
199
|
-
markersContainer.appendChild(marker);
|
|
200
|
-
updateTimelineMarkers();
|
|
201
|
-
}
|
|
202
|
-
function updateTimelineMarkers() {
|
|
203
|
-
const markersContainer = document.getElementById('haibun-timeline-markers');
|
|
204
|
-
if (!markersContainer || monitorState.maxTime === 0)
|
|
205
|
-
return;
|
|
206
|
-
const markers = markersContainer.children;
|
|
207
|
-
for (let i = 0; i < markers.length; i++) {
|
|
208
|
-
const marker = markers[i];
|
|
209
|
-
const timestamp = parseInt(marker.dataset.time || '0', 10);
|
|
210
|
-
const relativeTime = timestamp - monitorState.startTime;
|
|
211
|
-
const percent = (relativeTime / monitorState.maxTime) * 100;
|
|
212
|
-
marker.style.left = `${percent}%`;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
function updatePlayPauseButton() {
|
|
216
|
-
const btn = document.getElementById('haibun-play-pause');
|
|
217
|
-
if (!btn)
|
|
218
|
-
return;
|
|
219
|
-
if (monitorState.isPlaying) {
|
|
220
|
-
if (monitorState.autoScroll) {
|
|
221
|
-
btn.textContent = '⏸️'; // Pause
|
|
222
|
-
btn.title = "Pause";
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
btn.textContent = '🔦'; // Resume AutoScroll (Guided)
|
|
226
|
-
btn.title = "Resume Auto-Scroll";
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
btn.textContent = '▶️'; // Play
|
|
231
|
-
btn.title = "Play";
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
function setupTimeControls() {
|
|
235
|
-
const slider = document.getElementById('haibun-time-slider');
|
|
236
|
-
const playPauseBtn = document.getElementById('haibun-play-pause');
|
|
237
|
-
const timeDisplay = document.getElementById('haibun-time-display');
|
|
238
|
-
const viewToggle = document.getElementById('haibun-view-toggle');
|
|
239
|
-
const speedSelect = document.getElementById('haibun-playback-speed');
|
|
240
|
-
const container = document.getElementById('haibun-log-display-area');
|
|
241
|
-
// Use the first log entry's timestamp as start time if available, otherwise fallback to body dataset or Date.now()
|
|
242
|
-
if (window.haibunCapturedMessages && window.haibunCapturedMessages.length > 0) {
|
|
243
|
-
monitorState.startTime = window.haibunCapturedMessages.reduce((min, m) => Math.min(min, m.timestamp), window.haibunCapturedMessages[0].timestamp);
|
|
244
|
-
const lastTimestamp = window.haibunCapturedMessages.reduce((max, m) => Math.max(max, m.timestamp), window.haibunCapturedMessages[0].timestamp);
|
|
245
|
-
monitorState.maxTime = lastTimestamp - monitorState.startTime;
|
|
246
|
-
// If we have captured messages, we are likely in replay mode, so start paused
|
|
247
|
-
monitorState.isPlaying = false;
|
|
248
|
-
monitorState.autoScroll = false;
|
|
249
|
-
// Set current time to end
|
|
250
|
-
monitorState.currentTime = monitorState.maxTime;
|
|
251
|
-
// Update slider and display immediately
|
|
252
|
-
if (slider) {
|
|
253
|
-
slider.max = `${monitorState.maxTime}`;
|
|
254
|
-
slider.value = `${monitorState.currentTime}`;
|
|
255
|
-
}
|
|
256
|
-
if (timeDisplay) {
|
|
257
|
-
timeDisplay.textContent = `${(monitorState.currentTime / 1000).toFixed(3)}s`;
|
|
258
|
-
}
|
|
259
|
-
// Force visibility update for the end state
|
|
260
|
-
setTimeout(() => {
|
|
261
|
-
recalcVisibility(monitorState.currentTime, true);
|
|
262
|
-
}, 100);
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
monitorState.startTime = parseInt(document.body.dataset.startTime || `${Date.now()}`, 10);
|
|
266
|
-
}
|
|
267
|
-
// Sync display time base
|
|
268
|
-
document.body.dataset.startTime = `${monitorState.startTime}`;
|
|
269
|
-
const dateEl = document.getElementById('haibun-date');
|
|
270
|
-
if (dateEl) {
|
|
271
|
-
dateEl.textContent = new Date(monitorState.startTime).toISOString();
|
|
272
|
-
}
|
|
273
|
-
monitorState.lastFrameTime = Date.now();
|
|
274
|
-
if (container) {
|
|
275
|
-
const stopAutoScroll = () => {
|
|
276
|
-
if (monitorState.isPlaying && monitorState.autoScroll) {
|
|
277
|
-
monitorState.autoScroll = false;
|
|
278
|
-
updatePlayPauseButton();
|
|
279
|
-
}
|
|
280
|
-
};
|
|
281
|
-
// Rely on explicit user interaction to stop auto-scroll, rather than the generic 'scroll' event
|
|
282
|
-
// which can be triggered by layout shifts or programmatic scrolling in some environments (like Playwright).
|
|
283
|
-
container.addEventListener('wheel', stopAutoScroll, { passive: true });
|
|
284
|
-
container.addEventListener('touchmove', stopAutoScroll, { passive: true });
|
|
285
|
-
container.addEventListener('mousedown', stopAutoScroll);
|
|
286
|
-
container.addEventListener('keydown', stopAutoScroll);
|
|
287
|
-
}
|
|
288
|
-
updatePlayPauseButton();
|
|
289
|
-
playPauseBtn.addEventListener('click', () => {
|
|
290
|
-
if (monitorState.isPlaying && !monitorState.autoScroll) {
|
|
291
|
-
// Resume AutoScroll
|
|
292
|
-
monitorState.autoScroll = true;
|
|
293
|
-
updatePlayPauseButton();
|
|
294
|
-
// Force scroll immediately
|
|
295
|
-
recalcVisibility(monitorState.currentTime, true);
|
|
296
|
-
return;
|
|
297
|
-
}
|
|
298
|
-
// Restart if at end and not live
|
|
299
|
-
if (!monitorState.isPlaying && monitorState.currentTime >= monitorState.maxTime && !monitorState.isLive) {
|
|
300
|
-
monitorState.currentTime = 0;
|
|
301
|
-
// Reset slider and display
|
|
302
|
-
if (slider)
|
|
303
|
-
slider.value = '0';
|
|
304
|
-
if (timeDisplay)
|
|
305
|
-
timeDisplay.textContent = '0.000s';
|
|
306
|
-
recalcVisibility(0, true);
|
|
307
|
-
}
|
|
308
|
-
monitorState.isPlaying = !monitorState.isPlaying;
|
|
309
|
-
if (monitorState.isPlaying) {
|
|
310
|
-
monitorState.autoScroll = true;
|
|
311
|
-
monitorState.lastFrameTime = Date.now();
|
|
312
|
-
updateTimeLoop();
|
|
313
|
-
}
|
|
314
|
-
updatePlayPauseButton();
|
|
315
|
-
});
|
|
316
|
-
if (speedSelect) {
|
|
317
|
-
speedSelect.addEventListener('change', (e) => {
|
|
318
|
-
monitorState.playbackSpeed = parseFloat(e.target.value);
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
slider.addEventListener('input', (e) => {
|
|
322
|
-
monitorState.isPlaying = false;
|
|
323
|
-
monitorState.autoScroll = false;
|
|
324
|
-
updatePlayPauseButton();
|
|
325
|
-
const val = parseInt(e.target.value, 10);
|
|
326
|
-
monitorState.currentTime = val;
|
|
327
|
-
recalcVisibility(val, true);
|
|
328
|
-
timeDisplay.textContent = `${(val / 1000).toFixed(3)}s`;
|
|
329
|
-
});
|
|
330
|
-
if (viewToggle) {
|
|
331
|
-
const initialMode = window.HAIBUN_VIEW_MODE || 'timeline';
|
|
332
|
-
const timeControls = document.getElementById('haibun-time-controls');
|
|
333
|
-
if (initialMode === 'document') {
|
|
334
|
-
document.body.classList.add('view-documentation');
|
|
335
|
-
viewToggle.checked = true;
|
|
336
|
-
if (timeControls)
|
|
337
|
-
timeControls.style.visibility = 'hidden';
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
document.body.classList.remove('view-documentation');
|
|
341
|
-
viewToggle.checked = false;
|
|
342
|
-
if (timeControls)
|
|
343
|
-
timeControls.style.visibility = 'visible';
|
|
344
|
-
}
|
|
345
|
-
viewToggle.addEventListener('change', (e) => {
|
|
346
|
-
if (e.target.checked) {
|
|
347
|
-
document.body.classList.add('view-documentation');
|
|
348
|
-
if (timeControls)
|
|
349
|
-
timeControls.style.visibility = 'hidden';
|
|
350
|
-
}
|
|
351
|
-
else {
|
|
352
|
-
document.body.classList.remove('view-documentation');
|
|
353
|
-
if (timeControls)
|
|
354
|
-
timeControls.style.visibility = 'visible';
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
}
|
|
358
|
-
const statementInput = document.getElementById('haibun-statement-input');
|
|
359
|
-
if (statementInput) {
|
|
360
|
-
statementInput.addEventListener('input', () => {
|
|
361
|
-
monitorState.currentTime = monitorState.maxTime;
|
|
362
|
-
monitorState.autoScroll = true;
|
|
363
|
-
recalcVisibility(monitorState.currentTime);
|
|
364
|
-
const slider = document.getElementById('haibun-time-slider');
|
|
365
|
-
if (slider)
|
|
366
|
-
slider.value = `${monitorState.currentTime}`;
|
|
367
|
-
const timeDisplay = document.getElementById('haibun-time-display');
|
|
368
|
-
if (timeDisplay)
|
|
369
|
-
timeDisplay.textContent = `${(monitorState.currentTime / 1000).toFixed(3)}s`;
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
updateTimeLoop();
|
|
373
|
-
}
|
|
374
|
-
function updateTimeLoop() {
|
|
375
|
-
if (!monitorState.isPlaying)
|
|
376
|
-
return;
|
|
377
|
-
const now = Date.now();
|
|
378
|
-
const delta = now - monitorState.lastFrameTime;
|
|
379
|
-
monitorState.lastFrameTime = now;
|
|
380
|
-
// If we are "live" (maxTime is increasing), we just follow real time
|
|
381
|
-
// But if we are replaying, we use speed.
|
|
382
|
-
// Actually, simpler: always use speed for currentTime advancement.
|
|
383
|
-
// But we need to know if we are at the "head" (live).
|
|
384
|
-
// Calculate "live" elapsed time
|
|
385
|
-
const liveElapsed = now - monitorState.startTime;
|
|
386
|
-
// If we are close to live edge, just sync to live (unless speed != 1)
|
|
387
|
-
// But user asked for slowdown control for replaying.
|
|
388
|
-
if (monitorState.playbackSpeed !== 1 || monitorState.currentTime < monitorState.maxTime - 100) {
|
|
389
|
-
monitorState.currentTime += delta * monitorState.playbackSpeed;
|
|
390
|
-
}
|
|
391
|
-
else {
|
|
392
|
-
// Live mode (speed 1, at head)
|
|
393
|
-
// Ensure we are at least at maxTime to show latest messages immediately (handles client clock lag)
|
|
394
|
-
// monitorState.currentTime = Math.max(liveElapsed, monitorState.maxTime);
|
|
395
|
-
}
|
|
396
|
-
// Update maxTime to be at least liveElapsed (if we are receiving new data)
|
|
397
|
-
// But if we are just viewing a static file, maxTime is fixed?
|
|
398
|
-
// In this monitor, we assume we might be receiving data.
|
|
399
|
-
if (monitorState.isLive && liveElapsed > monitorState.maxTime) {
|
|
400
|
-
monitorState.maxTime = liveElapsed;
|
|
401
|
-
}
|
|
402
|
-
// Cap currentTime at maxTime
|
|
403
|
-
if (monitorState.currentTime > monitorState.maxTime) {
|
|
404
|
-
monitorState.currentTime = monitorState.maxTime;
|
|
405
|
-
// Stop if at end and not live (replay finished)
|
|
406
|
-
if (monitorState.isPlaying && !monitorState.isLive) {
|
|
407
|
-
monitorState.isPlaying = false;
|
|
408
|
-
updatePlayPauseButton();
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
const slider = document.getElementById('haibun-time-slider');
|
|
412
|
-
const timeDisplay = document.getElementById('haibun-time-display');
|
|
413
|
-
if (slider) {
|
|
414
|
-
slider.max = `${monitorState.maxTime}`;
|
|
415
|
-
slider.value = `${monitorState.currentTime}`;
|
|
416
|
-
}
|
|
417
|
-
if (timeDisplay) {
|
|
418
|
-
timeDisplay.textContent = `${(monitorState.currentTime / 1000).toFixed(3)}s`;
|
|
419
|
-
}
|
|
420
|
-
recalcVisibility(monitorState.currentTime);
|
|
421
|
-
updateTimelineMarkers();
|
|
422
|
-
requestAnimationFrame(updateTimeLoop);
|
|
423
|
-
}
|
|
424
|
-
function recalcVisibility(timeMs, forceScroll = false) {
|
|
425
|
-
const container = document.getElementById('haibun-log-display-area');
|
|
426
|
-
if (!container)
|
|
427
|
-
return;
|
|
428
|
-
const entries = container.querySelectorAll('.haibun-log-entry');
|
|
429
|
-
let lastVisible = null;
|
|
430
|
-
let currentFeatureText = '';
|
|
431
|
-
let currentScenarioText = '';
|
|
432
|
-
// Reset highlights
|
|
433
|
-
entries.forEach(e => e.classList.remove('haibun-log-entry-current'));
|
|
434
|
-
for (let i = 0; i < entries.length; i++) {
|
|
435
|
-
const el = entries[i];
|
|
436
|
-
const entryTime = parseInt(el.dataset.time || '0', 10) - monitorState.startTime;
|
|
437
|
-
if (entryTime > timeMs + 250) {
|
|
438
|
-
el.classList.add('invisible-future');
|
|
439
|
-
continue;
|
|
440
|
-
}
|
|
441
|
-
if (el.dataset.incident === 'FEATURE_START') {
|
|
442
|
-
currentFeatureText = el.dataset.contextText || '';
|
|
443
|
-
currentScenarioText = '';
|
|
444
|
-
}
|
|
445
|
-
else if (el.dataset.incident === 'SCENARIO_START') {
|
|
446
|
-
currentScenarioText = el.dataset.contextText || '';
|
|
447
|
-
}
|
|
448
|
-
el.classList.remove('invisible-future');
|
|
449
|
-
if (el.dataset.endTime) {
|
|
450
|
-
const endTime = parseInt(el.dataset.endTime, 10) - monitorState.startTime;
|
|
451
|
-
if (endTime <= timeMs) {
|
|
452
|
-
el.classList.add('disappeared');
|
|
453
|
-
continue;
|
|
454
|
-
}
|
|
455
|
-
else {
|
|
456
|
-
el.classList.remove('disappeared');
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
lastVisible = el;
|
|
460
|
-
}
|
|
461
|
-
// Handle placeholders visibility: hide them if the content they represent is in the future
|
|
462
|
-
const placeholders = container.querySelectorAll('.haibun-log-depth-placeholder');
|
|
463
|
-
placeholders.forEach(p => {
|
|
464
|
-
const el = p;
|
|
465
|
-
const next = el.nextElementSibling;
|
|
466
|
-
// If the next element (the first hidden log entry) is future, hide the placeholder
|
|
467
|
-
if (next && next.classList.contains('invisible-future')) {
|
|
468
|
-
el.classList.add('invisible-future');
|
|
469
|
-
}
|
|
470
|
-
else {
|
|
471
|
-
el.classList.remove('invisible-future');
|
|
472
|
-
}
|
|
473
|
-
});
|
|
474
|
-
const videos = document.querySelectorAll('video');
|
|
475
|
-
if (videos.length > 0) {
|
|
476
|
-
videos.forEach(v => {
|
|
477
|
-
try {
|
|
478
|
-
v.currentTime = timeMs / 1000;
|
|
479
|
-
v.pause();
|
|
480
|
-
}
|
|
481
|
-
catch (e) {
|
|
482
|
-
console.error('Error updating video time:', e);
|
|
483
|
-
}
|
|
484
|
-
});
|
|
485
|
-
}
|
|
486
|
-
const contextEl = document.getElementById('haibun-current-context');
|
|
487
|
-
if (contextEl) {
|
|
488
|
-
if (currentFeatureText && currentScenarioText) {
|
|
489
|
-
contextEl.textContent = `${currentFeatureText} > ${currentScenarioText}`;
|
|
490
|
-
}
|
|
491
|
-
else if (currentFeatureText) {
|
|
492
|
-
contextEl.textContent = currentFeatureText;
|
|
493
|
-
}
|
|
494
|
-
else if (currentScenarioText) {
|
|
495
|
-
contextEl.textContent = currentScenarioText;
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
if (lastVisible) {
|
|
499
|
-
lastVisible.classList.add('haibun-log-entry-current');
|
|
500
|
-
if (forceScroll || (monitorState.autoScroll && lastVisible !== monitorState.lastScrolled)) {
|
|
501
|
-
lastVisible.scrollIntoView({ block: 'center', behavior: 'auto' });
|
|
502
|
-
monitorState.lastScrolled = lastVisible;
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
/**
|
|
507
|
-
* Parses the JSON island and feeds data into the monitor in digestible chunks.
|
|
508
|
-
*/
|
|
509
|
-
function startLazyIngestion() {
|
|
510
|
-
const dataScript = document.getElementById('haibun-log-data');
|
|
511
|
-
// 1. If we are in "Live" mode (no data script), set up controls and return
|
|
512
|
-
if (!dataScript) {
|
|
513
|
-
setupControls(); // Initialize controls for live mode
|
|
514
|
-
if (window.haibunCapturedMessages && window.haibunCapturedMessages.length > 0) {
|
|
515
|
-
renderAllLogsSynchronously(); // Fallback for legacy format
|
|
516
|
-
}
|
|
517
|
-
return;
|
|
518
|
-
}
|
|
519
|
-
// 2. Parse the JSON.
|
|
520
|
-
// This is the only heavy synchronous operation, but it is much faster than JS compilation.
|
|
521
|
-
let allLogs = [];
|
|
522
|
-
try {
|
|
523
|
-
allLogs = JSON.parse(dataScript.textContent || '[]');
|
|
524
|
-
}
|
|
525
|
-
catch (e) {
|
|
526
|
-
console.error("Failed to parse log data:", e);
|
|
527
|
-
return;
|
|
528
|
-
}
|
|
529
|
-
// Populate the global array so other tools can access it
|
|
530
|
-
window.haibunCapturedMessages = allLogs;
|
|
531
|
-
// Initialize start times based on the full dataset
|
|
532
|
-
if (allLogs.length > 0) {
|
|
533
|
-
monitorState.startTime = allLogs.reduce((min, m) => Math.min(min, m.timestamp), allLogs[0].timestamp);
|
|
534
|
-
const lastTimestamp = allLogs.reduce((max, m) => Math.max(max, m.timestamp), allLogs[0].timestamp);
|
|
535
|
-
monitorState.maxTime = lastTimestamp - monitorState.startTime;
|
|
536
|
-
monitorState.currentTime = monitorState.maxTime;
|
|
537
|
-
// Update UI initial state
|
|
538
|
-
const slider = document.getElementById('haibun-time-slider');
|
|
539
|
-
if (slider) {
|
|
540
|
-
slider.max = `${monitorState.maxTime}`;
|
|
541
|
-
slider.value = `${monitorState.currentTime}`;
|
|
542
|
-
}
|
|
543
|
-
const dateEl = document.getElementById('haibun-date');
|
|
544
|
-
if (dateEl) {
|
|
545
|
-
dateEl.textContent = new Date(monitorState.startTime).toISOString();
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
// Initialize controls before rendering (sets up log level filter)
|
|
549
|
-
setupControls();
|
|
550
|
-
// 3. The Chunking Loop
|
|
551
|
-
let currentIndex = 0;
|
|
552
|
-
const CHUNK_SIZE = 100; // Adjust this: Lower = smoother UI, Higher = faster loading
|
|
553
|
-
function processNextChunk() {
|
|
554
|
-
const end = Math.min(currentIndex + CHUNK_SIZE, allLogs.length);
|
|
555
|
-
for (let i = currentIndex; i < end; i++) {
|
|
556
|
-
// We call renderLogEntry directly instead of receiveLogData
|
|
557
|
-
// to avoid re-pushing to the window.haibunCapturedMessages array
|
|
558
|
-
renderLogEntry(allLogs[i]);
|
|
559
|
-
renderedMessageCount++;
|
|
560
|
-
}
|
|
561
|
-
currentIndex += CHUNK_SIZE;
|
|
562
|
-
if (currentIndex < allLogs.length) {
|
|
563
|
-
// Yield control to the browser to keep the UI responsive
|
|
564
|
-
requestAnimationFrame(processNextChunk);
|
|
565
|
-
}
|
|
566
|
-
else {
|
|
567
|
-
console.info(`Finished ingesting ${allLogs.length} logs.`);
|
|
568
|
-
// Finalize UI state
|
|
569
|
-
recalcVisibility(monitorState.currentTime, true);
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
console.info("Starting lazy log ingestion...");
|
|
573
|
-
processNextChunk();
|
|
574
|
-
}
|
|
575
|
-
/**
|
|
576
|
-
* Fallback for legacy format (window.haibunCapturedMessages already populated)
|
|
577
|
-
*/
|
|
578
|
-
function renderAllLogsSynchronously() {
|
|
579
|
-
const container = document.getElementById('haibun-log-display-area');
|
|
580
|
-
if (container) {
|
|
581
|
-
const messagesToRender = window.haibunCapturedMessages.slice(renderedMessageCount);
|
|
582
|
-
console.info(`Rendering ${messagesToRender.length} new log entries (legacy mode)...`);
|
|
583
|
-
messagesToRender.forEach(logEntry => {
|
|
584
|
-
renderLogEntry(logEntry);
|
|
585
|
-
renderedMessageCount++;
|
|
586
|
-
});
|
|
587
|
-
setupControls();
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
591
|
-
if (!document.body.dataset.startTime) {
|
|
592
|
-
document.body.dataset.startTime = `${Date.now()}`;
|
|
593
|
-
}
|
|
594
|
-
setupTimeControls();
|
|
595
|
-
// Replace the old renderAllLogs call with the lazy loader
|
|
596
|
-
startLazyIngestion();
|
|
597
|
-
console.info("Monitor initialized.");
|
|
598
|
-
});
|
|
599
|
-
//# sourceMappingURL=monitor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/monitor/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { THTTPTraceContent } from '@haibun/core/lib/interfaces/logger.js';
|
|
2
|
-
import { TTag } from '@haibun/core/lib/ttag.js';
|
|
3
|
-
export declare function defineGlobalMermaidAndDOMPurify(): void;
|
|
4
|
-
export declare function setupMessagesTestDOM(testStartTime: number): void;
|
|
5
|
-
export declare function cleanupMessagesTestDOM(): void;
|
|
6
|
-
export declare const MOCK_MERMAID_CONTAINER_ID_PREFFIX = "mermaid-container-";
|
|
7
|
-
export declare function createMockTag(): TTag;
|
|
8
|
-
export declare function createMockHTTPTraceArtifact(partialTrace: Partial<THTTPTraceContent>): THTTPTraceContent;
|
|
9
|
-
//# sourceMappingURL=test-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/monitor/test-utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAa,MAAM,0BAA0B,CAAC;AAE3D,wBAAgB,+BAA+B,SAqC9C;AAED,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAMhE;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED,eAAO,MAAM,iCAAiC,uBAAuB,CAAC;AAEtE,wBAAgB,aAAa,IAAI,IAAI,CAQpC;AAED,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAUvG"}
|