agentgui 1.0.274 → 1.0.275
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/CLAUDE.md +280 -280
- package/IPFS_DOWNLOADER.md +277 -277
- package/TASK_2C_COMPLETION.md +334 -334
- package/bin/gmgui.cjs +54 -54
- package/build-portable.js +3 -42
- package/database.js +1422 -1406
- package/lib/claude-runner.js +1130 -1130
- package/lib/ipfs-downloader.js +459 -459
- package/lib/speech.js +152 -152
- package/package.json +1 -1
- package/readme.md +76 -76
- package/server.js +3787 -3794
- package/setup-npm-token.sh +68 -68
- package/static/app.js +773 -773
- package/static/event-rendering-showcase.html +708 -708
- package/static/index.html +3178 -3180
- package/static/js/agent-auth.js +298 -298
- package/static/js/audio-recorder-processor.js +18 -18
- package/static/js/client.js +2656 -2656
- package/static/js/conversations.js +583 -583
- package/static/js/dialogs.js +267 -267
- package/static/js/event-consolidator.js +101 -101
- package/static/js/event-filter.js +311 -311
- package/static/js/event-processor.js +452 -452
- package/static/js/features.js +413 -413
- package/static/js/kalman-filter.js +67 -67
- package/static/js/progress-dialog.js +130 -130
- package/static/js/script-runner.js +219 -219
- package/static/js/streaming-renderer.js +2123 -2120
- package/static/js/syntax-highlighter.js +269 -269
- package/static/js/tts-websocket-handler.js +152 -152
- package/static/js/ui-components.js +431 -431
- package/static/js/voice.js +849 -849
- package/static/js/websocket-manager.js +596 -596
- package/static/templates/INDEX.html +465 -465
- package/static/templates/README.md +190 -190
- package/static/templates/agent-capabilities.html +56 -56
- package/static/templates/agent-metadata-panel.html +44 -44
- package/static/templates/agent-status-badge.html +30 -30
- package/static/templates/code-annotation-panel.html +155 -155
- package/static/templates/code-suggestion-panel.html +184 -184
- package/static/templates/command-header.html +77 -77
- package/static/templates/command-output-scrollable.html +118 -118
- package/static/templates/elapsed-time.html +54 -54
- package/static/templates/error-alert.html +106 -106
- package/static/templates/error-history-timeline.html +160 -160
- package/static/templates/error-recovery-options.html +109 -109
- package/static/templates/error-stack-trace.html +95 -95
- package/static/templates/error-summary.html +80 -80
- package/static/templates/event-counter.html +48 -48
- package/static/templates/execution-actions.html +97 -97
- package/static/templates/execution-progress-bar.html +80 -80
- package/static/templates/execution-stepper.html +120 -120
- package/static/templates/file-breadcrumb.html +118 -118
- package/static/templates/file-diff-viewer.html +121 -121
- package/static/templates/file-metadata.html +133 -133
- package/static/templates/file-read-panel.html +66 -66
- package/static/templates/file-write-panel.html +120 -120
- package/static/templates/git-branch-remote.html +107 -107
- package/static/templates/git-diff-list.html +101 -101
- package/static/templates/git-log-visualization.html +153 -153
- package/static/templates/git-status-panel.html +115 -115
- package/static/templates/quality-metrics-display.html +170 -170
- package/static/templates/terminal-output-panel.html +87 -87
- package/static/templates/test-results-display.html +144 -144
- package/static/theme.js +72 -72
- package/test-download-progress.js +223 -223
- package/test-websocket-broadcast.js +147 -147
- package/tests/ipfs-downloader.test.js +370 -370
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
<!-- Execution Control Buttons -->
|
|
2
|
-
<div class="execution-actions flex gap-2" role="group" aria-label="Execution controls">
|
|
3
|
-
<!-- Cancel Button -->
|
|
4
|
-
<button class="btn btn-secondary"
|
|
5
|
-
data-action="cancel"
|
|
6
|
-
aria-label="Cancel execution"
|
|
7
|
-
title="Stop the current execution">
|
|
8
|
-
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
9
|
-
<path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z"/>
|
|
10
|
-
</svg>
|
|
11
|
-
<span>Cancel</span>
|
|
12
|
-
</button>
|
|
13
|
-
|
|
14
|
-
<!-- Pause Button -->
|
|
15
|
-
<button class="btn btn-secondary"
|
|
16
|
-
data-action="pause"
|
|
17
|
-
aria-label="Pause execution"
|
|
18
|
-
title="Pause the current execution">
|
|
19
|
-
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
20
|
-
<path d="M5 3a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V5a2 2 0 012-2h2zm10 0a2 2 0 012 2v10a2 2 0 01-2 2h-2a2 2 0 01-2-2V5a2 2 0 012-2h2z"/>
|
|
21
|
-
</svg>
|
|
22
|
-
<span>Pause</span>
|
|
23
|
-
</button>
|
|
24
|
-
|
|
25
|
-
<!-- Resume Button (hidden by default) -->
|
|
26
|
-
<button class="btn btn-secondary hidden"
|
|
27
|
-
data-action="resume"
|
|
28
|
-
aria-label="Resume execution"
|
|
29
|
-
title="Resume the paused execution">
|
|
30
|
-
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
31
|
-
<path d="M6.3 2.841A1.5 1.5 0 004 4.11V15.89a1.5 1.5 0 002.3 1.269l9.344-5.89a1.5 1.5 0 000-2.538L6.3 2.84z"/>
|
|
32
|
-
</svg>
|
|
33
|
-
<span>Resume</span>
|
|
34
|
-
</button>
|
|
35
|
-
|
|
36
|
-
<!-- Export Button -->
|
|
37
|
-
<button class="btn btn-tertiary"
|
|
38
|
-
data-action="export"
|
|
39
|
-
aria-label="Export execution results"
|
|
40
|
-
title="Download results as JSON">
|
|
41
|
-
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
42
|
-
<path d="M3 17a1 1 0 011-1h12a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1v-2zm4-6a1 1 0 011-1h2V4a1 1 0 112 0v6h2a1 1 0 110 2h-6a1 1 0 01-1-1z"/>
|
|
43
|
-
</svg>
|
|
44
|
-
<span>Export</span>
|
|
45
|
-
</button>
|
|
46
|
-
</div>
|
|
47
|
-
|
|
48
|
-
<style scoped>
|
|
49
|
-
.execution-actions {
|
|
50
|
-
display: flex;
|
|
51
|
-
gap: 8px;
|
|
52
|
-
flex-wrap: wrap;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.btn {
|
|
56
|
-
display: inline-flex;
|
|
57
|
-
align-items: center;
|
|
58
|
-
gap: 6px;
|
|
59
|
-
padding: 8px 12px;
|
|
60
|
-
border-radius: 4px;
|
|
61
|
-
font-size: 13px;
|
|
62
|
-
font-weight: 500;
|
|
63
|
-
cursor: pointer;
|
|
64
|
-
border: none;
|
|
65
|
-
transition: all 0.2s ease;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.btn:disabled {
|
|
69
|
-
opacity: 0.5;
|
|
70
|
-
cursor: not-allowed;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.btn-secondary {
|
|
74
|
-
background-color: var(--color-bg-secondary);
|
|
75
|
-
color: var(--color-text-primary);
|
|
76
|
-
border: 1px solid var(--color-border);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.btn-secondary:hover:not(:disabled) {
|
|
80
|
-
background-color: var(--color-bg-hover);
|
|
81
|
-
border-color: var(--color-primary);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.btn-tertiary {
|
|
85
|
-
background-color: transparent;
|
|
86
|
-
color: var(--color-primary);
|
|
87
|
-
border: 1px solid var(--color-primary);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.btn-tertiary:hover:not(:disabled) {
|
|
91
|
-
background-color: var(--color-primary-hover);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.hidden {
|
|
95
|
-
display: none;
|
|
96
|
-
}
|
|
97
|
-
</style>
|
|
1
|
+
<!-- Execution Control Buttons -->
|
|
2
|
+
<div class="execution-actions flex gap-2" role="group" aria-label="Execution controls">
|
|
3
|
+
<!-- Cancel Button -->
|
|
4
|
+
<button class="btn btn-secondary"
|
|
5
|
+
data-action="cancel"
|
|
6
|
+
aria-label="Cancel execution"
|
|
7
|
+
title="Stop the current execution">
|
|
8
|
+
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
9
|
+
<path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z"/>
|
|
10
|
+
</svg>
|
|
11
|
+
<span>Cancel</span>
|
|
12
|
+
</button>
|
|
13
|
+
|
|
14
|
+
<!-- Pause Button -->
|
|
15
|
+
<button class="btn btn-secondary"
|
|
16
|
+
data-action="pause"
|
|
17
|
+
aria-label="Pause execution"
|
|
18
|
+
title="Pause the current execution">
|
|
19
|
+
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
20
|
+
<path d="M5 3a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V5a2 2 0 012-2h2zm10 0a2 2 0 012 2v10a2 2 0 01-2 2h-2a2 2 0 01-2-2V5a2 2 0 012-2h2z"/>
|
|
21
|
+
</svg>
|
|
22
|
+
<span>Pause</span>
|
|
23
|
+
</button>
|
|
24
|
+
|
|
25
|
+
<!-- Resume Button (hidden by default) -->
|
|
26
|
+
<button class="btn btn-secondary hidden"
|
|
27
|
+
data-action="resume"
|
|
28
|
+
aria-label="Resume execution"
|
|
29
|
+
title="Resume the paused execution">
|
|
30
|
+
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
31
|
+
<path d="M6.3 2.841A1.5 1.5 0 004 4.11V15.89a1.5 1.5 0 002.3 1.269l9.344-5.89a1.5 1.5 0 000-2.538L6.3 2.84z"/>
|
|
32
|
+
</svg>
|
|
33
|
+
<span>Resume</span>
|
|
34
|
+
</button>
|
|
35
|
+
|
|
36
|
+
<!-- Export Button -->
|
|
37
|
+
<button class="btn btn-tertiary"
|
|
38
|
+
data-action="export"
|
|
39
|
+
aria-label="Export execution results"
|
|
40
|
+
title="Download results as JSON">
|
|
41
|
+
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
42
|
+
<path d="M3 17a1 1 0 011-1h12a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1v-2zm4-6a1 1 0 011-1h2V4a1 1 0 112 0v6h2a1 1 0 110 2h-6a1 1 0 01-1-1z"/>
|
|
43
|
+
</svg>
|
|
44
|
+
<span>Export</span>
|
|
45
|
+
</button>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<style scoped>
|
|
49
|
+
.execution-actions {
|
|
50
|
+
display: flex;
|
|
51
|
+
gap: 8px;
|
|
52
|
+
flex-wrap: wrap;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.btn {
|
|
56
|
+
display: inline-flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
gap: 6px;
|
|
59
|
+
padding: 8px 12px;
|
|
60
|
+
border-radius: 4px;
|
|
61
|
+
font-size: 13px;
|
|
62
|
+
font-weight: 500;
|
|
63
|
+
cursor: pointer;
|
|
64
|
+
border: none;
|
|
65
|
+
transition: all 0.2s ease;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.btn:disabled {
|
|
69
|
+
opacity: 0.5;
|
|
70
|
+
cursor: not-allowed;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.btn-secondary {
|
|
74
|
+
background-color: var(--color-bg-secondary);
|
|
75
|
+
color: var(--color-text-primary);
|
|
76
|
+
border: 1px solid var(--color-border);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.btn-secondary:hover:not(:disabled) {
|
|
80
|
+
background-color: var(--color-bg-hover);
|
|
81
|
+
border-color: var(--color-primary);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.btn-tertiary {
|
|
85
|
+
background-color: transparent;
|
|
86
|
+
color: var(--color-primary);
|
|
87
|
+
border: 1px solid var(--color-primary);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.btn-tertiary:hover:not(:disabled) {
|
|
91
|
+
background-color: var(--color-primary-hover);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.hidden {
|
|
95
|
+
display: none;
|
|
96
|
+
}
|
|
97
|
+
</style>
|
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
<!-- Execution Progress Visualization -->
|
|
2
|
-
<div class="execution-progress card" role="region" aria-label="Execution progress">
|
|
3
|
-
<div class="card-header flex items-center justify-between mb-4">
|
|
4
|
-
<div>
|
|
5
|
-
<h3 class="font-semibold">Execution Progress</h3>
|
|
6
|
-
<p class="text-sm text-secondary">{{ executionStatus }}</p>
|
|
7
|
-
</div>
|
|
8
|
-
<span class="badge" role="status" aria-live="polite">{{ percentage }}%</span>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<!-- Progress Bar -->
|
|
12
|
-
<div class="progress-container mb-4" role="progressbar" aria-valuenow="{{ percentage }}" aria-valuemin="0" aria-valuemax="100" aria-label="Progress: {{ percentage }}%">
|
|
13
|
-
<div class="progress-bar" style="width: {{ percentage }}%">
|
|
14
|
-
<span class="progress-text" aria-hidden="true">{{ percentage }}%</span>
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
|
|
18
|
-
<!-- Progress Details Grid -->
|
|
19
|
-
<div class="grid grid-cols-3 gap-3 text-sm">
|
|
20
|
-
<div class="border-r pr-3">
|
|
21
|
-
<span class="text-secondary">Events</span>
|
|
22
|
-
<p class="font-semibold text-lg">{{ eventCount }}</p>
|
|
23
|
-
</div>
|
|
24
|
-
<div class="border-r pr-3">
|
|
25
|
-
<span class="text-secondary">Elapsed</span>
|
|
26
|
-
<p class="font-mono text-lg">{{ elapsedTime }}</p>
|
|
27
|
-
</div>
|
|
28
|
-
<div>
|
|
29
|
-
<span class="text-secondary">Remaining</span>
|
|
30
|
-
<p class="font-mono text-lg">{{ estimatedRemaining }}</p>
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
|
|
34
|
-
<!-- Status Timeline -->
|
|
35
|
-
<div class="mt-4 pt-4 border-t">
|
|
36
|
-
<div class="flex justify-between text-xs">
|
|
37
|
-
<span class="flex items-center gap-1">
|
|
38
|
-
<span class="w-2 h-2 rounded-full bg-primary" aria-hidden="true"></span>
|
|
39
|
-
Queued
|
|
40
|
-
</span>
|
|
41
|
-
<span class="flex items-center gap-1">
|
|
42
|
-
<span class="w-2 h-2 rounded-full bg-primary" aria-hidden="true"></span>
|
|
43
|
-
Running
|
|
44
|
-
</span>
|
|
45
|
-
<span class="flex items-center gap-1">
|
|
46
|
-
<span class="w-2 h-2 rounded-full bg-primary" aria-hidden="true"></span>
|
|
47
|
-
Processing
|
|
48
|
-
</span>
|
|
49
|
-
<span class="flex items-center gap-1">
|
|
50
|
-
<span class="w-2 h-2 rounded-full bg-secondary" aria-hidden="true"></span>
|
|
51
|
-
Complete
|
|
52
|
-
</span>
|
|
53
|
-
</div>
|
|
54
|
-
</div>
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
<style scoped>
|
|
58
|
-
.progress-container {
|
|
59
|
-
position: relative;
|
|
60
|
-
height: 24px;
|
|
61
|
-
background-color: var(--color-bg-secondary);
|
|
62
|
-
border-radius: 4px;
|
|
63
|
-
overflow: hidden;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.progress-bar {
|
|
67
|
-
height: 100%;
|
|
68
|
-
background-color: var(--color-primary);
|
|
69
|
-
transition: width 0.3s ease;
|
|
70
|
-
display: flex;
|
|
71
|
-
align-items: center;
|
|
72
|
-
justify-content: center;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.progress-text {
|
|
76
|
-
font-size: 11px;
|
|
77
|
-
font-weight: 600;
|
|
78
|
-
color: white;
|
|
79
|
-
}
|
|
80
|
-
</style>
|
|
1
|
+
<!-- Execution Progress Visualization -->
|
|
2
|
+
<div class="execution-progress card" role="region" aria-label="Execution progress">
|
|
3
|
+
<div class="card-header flex items-center justify-between mb-4">
|
|
4
|
+
<div>
|
|
5
|
+
<h3 class="font-semibold">Execution Progress</h3>
|
|
6
|
+
<p class="text-sm text-secondary">{{ executionStatus }}</p>
|
|
7
|
+
</div>
|
|
8
|
+
<span class="badge" role="status" aria-live="polite">{{ percentage }}%</span>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<!-- Progress Bar -->
|
|
12
|
+
<div class="progress-container mb-4" role="progressbar" aria-valuenow="{{ percentage }}" aria-valuemin="0" aria-valuemax="100" aria-label="Progress: {{ percentage }}%">
|
|
13
|
+
<div class="progress-bar" style="width: {{ percentage }}%">
|
|
14
|
+
<span class="progress-text" aria-hidden="true">{{ percentage }}%</span>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<!-- Progress Details Grid -->
|
|
19
|
+
<div class="grid grid-cols-3 gap-3 text-sm">
|
|
20
|
+
<div class="border-r pr-3">
|
|
21
|
+
<span class="text-secondary">Events</span>
|
|
22
|
+
<p class="font-semibold text-lg">{{ eventCount }}</p>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="border-r pr-3">
|
|
25
|
+
<span class="text-secondary">Elapsed</span>
|
|
26
|
+
<p class="font-mono text-lg">{{ elapsedTime }}</p>
|
|
27
|
+
</div>
|
|
28
|
+
<div>
|
|
29
|
+
<span class="text-secondary">Remaining</span>
|
|
30
|
+
<p class="font-mono text-lg">{{ estimatedRemaining }}</p>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<!-- Status Timeline -->
|
|
35
|
+
<div class="mt-4 pt-4 border-t">
|
|
36
|
+
<div class="flex justify-between text-xs">
|
|
37
|
+
<span class="flex items-center gap-1">
|
|
38
|
+
<span class="w-2 h-2 rounded-full bg-primary" aria-hidden="true"></span>
|
|
39
|
+
Queued
|
|
40
|
+
</span>
|
|
41
|
+
<span class="flex items-center gap-1">
|
|
42
|
+
<span class="w-2 h-2 rounded-full bg-primary" aria-hidden="true"></span>
|
|
43
|
+
Running
|
|
44
|
+
</span>
|
|
45
|
+
<span class="flex items-center gap-1">
|
|
46
|
+
<span class="w-2 h-2 rounded-full bg-primary" aria-hidden="true"></span>
|
|
47
|
+
Processing
|
|
48
|
+
</span>
|
|
49
|
+
<span class="flex items-center gap-1">
|
|
50
|
+
<span class="w-2 h-2 rounded-full bg-secondary" aria-hidden="true"></span>
|
|
51
|
+
Complete
|
|
52
|
+
</span>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<style scoped>
|
|
58
|
+
.progress-container {
|
|
59
|
+
position: relative;
|
|
60
|
+
height: 24px;
|
|
61
|
+
background-color: var(--color-bg-secondary);
|
|
62
|
+
border-radius: 4px;
|
|
63
|
+
overflow: hidden;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.progress-bar {
|
|
67
|
+
height: 100%;
|
|
68
|
+
background-color: var(--color-primary);
|
|
69
|
+
transition: width 0.3s ease;
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
justify-content: center;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.progress-text {
|
|
76
|
+
font-size: 11px;
|
|
77
|
+
font-weight: 600;
|
|
78
|
+
color: white;
|
|
79
|
+
}
|
|
80
|
+
</style>
|
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
<!-- Execution Phase Stepper -->
|
|
2
|
-
<div class="execution-stepper" role="region" aria-label="Execution phases">
|
|
3
|
-
<div class="flex justify-between items-center">
|
|
4
|
-
<!-- Phase 1: Queued -->
|
|
5
|
-
<div class="stepper-item" data-phase="queued" data-completed="true" aria-label="Phase: Queued (completed)">
|
|
6
|
-
<div class="stepper-circle">
|
|
7
|
-
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
8
|
-
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"/>
|
|
9
|
-
</svg>
|
|
10
|
-
</div>
|
|
11
|
-
<span class="stepper-label">Queued</span>
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
<div class="stepper-connector"></div>
|
|
15
|
-
|
|
16
|
-
<!-- Phase 2: Running -->
|
|
17
|
-
<div class="stepper-item" data-phase="running" data-completed="true" aria-label="Phase: Running (completed)">
|
|
18
|
-
<div class="stepper-circle">
|
|
19
|
-
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
20
|
-
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"/>
|
|
21
|
-
</svg>
|
|
22
|
-
</div>
|
|
23
|
-
<span class="stepper-label">Running</span>
|
|
24
|
-
</div>
|
|
25
|
-
|
|
26
|
-
<div class="stepper-connector"></div>
|
|
27
|
-
|
|
28
|
-
<!-- Phase 3: Processing -->
|
|
29
|
-
<div class="stepper-item" data-phase="processing" data-active="true" aria-label="Phase: Processing (active)">
|
|
30
|
-
<div class="stepper-circle loading">
|
|
31
|
-
<div class="spinner"></div>
|
|
32
|
-
</div>
|
|
33
|
-
<span class="stepper-label">Processing</span>
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
<div class="stepper-connector"></div>
|
|
37
|
-
|
|
38
|
-
<!-- Phase 4: Complete -->
|
|
39
|
-
<div class="stepper-item" data-phase="complete" aria-label="Phase: Complete (pending)">
|
|
40
|
-
<div class="stepper-circle">4</div>
|
|
41
|
-
<span class="stepper-label">Complete</span>
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
|
|
46
|
-
<style scoped>
|
|
47
|
-
.execution-stepper {
|
|
48
|
-
padding: 20px;
|
|
49
|
-
background: var(--color-bg-primary);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.stepper-item {
|
|
53
|
-
display: flex;
|
|
54
|
-
flex-direction: column;
|
|
55
|
-
align-items: center;
|
|
56
|
-
flex: 1;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.stepper-circle {
|
|
60
|
-
width: 40px;
|
|
61
|
-
height: 40px;
|
|
62
|
-
border-radius: 50%;
|
|
63
|
-
display: flex;
|
|
64
|
-
align-items: center;
|
|
65
|
-
justify-content: center;
|
|
66
|
-
background-color: var(--color-bg-secondary);
|
|
67
|
-
color: var(--color-text-secondary);
|
|
68
|
-
font-weight: 600;
|
|
69
|
-
margin-bottom: 8px;
|
|
70
|
-
border: 2px solid var(--color-border);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.stepper-item[data-completed="true"] .stepper-circle {
|
|
74
|
-
background-color: var(--color-success);
|
|
75
|
-
color: white;
|
|
76
|
-
border-color: var(--color-success);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.stepper-item[data-active="true"] .stepper-circle {
|
|
80
|
-
background-color: var(--color-primary);
|
|
81
|
-
color: white;
|
|
82
|
-
border-color: var(--color-primary);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.stepper-circle.loading {
|
|
86
|
-
position: relative;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.spinner {
|
|
90
|
-
width: 20px;
|
|
91
|
-
height: 20px;
|
|
92
|
-
border: 2px solid transparent;
|
|
93
|
-
border-top-color: white;
|
|
94
|
-
border-right-color: white;
|
|
95
|
-
border-radius: 50%;
|
|
96
|
-
animation: spin 0.8s linear infinite;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
@keyframes spin {
|
|
100
|
-
to { transform: rotate(360deg); }
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.stepper-label {
|
|
104
|
-
font-size: 12px;
|
|
105
|
-
font-weight: 500;
|
|
106
|
-
text-align: center;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
.stepper-connector {
|
|
110
|
-
flex: 1;
|
|
111
|
-
height: 2px;
|
|
112
|
-
background-color: var(--color-border);
|
|
113
|
-
margin: 0 10px;
|
|
114
|
-
margin-top: 20px;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.stepper-item[data-completed="true"] ~ .stepper-connector {
|
|
118
|
-
background-color: var(--color-success);
|
|
119
|
-
}
|
|
120
|
-
</style>
|
|
1
|
+
<!-- Execution Phase Stepper -->
|
|
2
|
+
<div class="execution-stepper" role="region" aria-label="Execution phases">
|
|
3
|
+
<div class="flex justify-between items-center">
|
|
4
|
+
<!-- Phase 1: Queued -->
|
|
5
|
+
<div class="stepper-item" data-phase="queued" data-completed="true" aria-label="Phase: Queued (completed)">
|
|
6
|
+
<div class="stepper-circle">
|
|
7
|
+
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
8
|
+
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"/>
|
|
9
|
+
</svg>
|
|
10
|
+
</div>
|
|
11
|
+
<span class="stepper-label">Queued</span>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
<div class="stepper-connector"></div>
|
|
15
|
+
|
|
16
|
+
<!-- Phase 2: Running -->
|
|
17
|
+
<div class="stepper-item" data-phase="running" data-completed="true" aria-label="Phase: Running (completed)">
|
|
18
|
+
<div class="stepper-circle">
|
|
19
|
+
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
|
|
20
|
+
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z"/>
|
|
21
|
+
</svg>
|
|
22
|
+
</div>
|
|
23
|
+
<span class="stepper-label">Running</span>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<div class="stepper-connector"></div>
|
|
27
|
+
|
|
28
|
+
<!-- Phase 3: Processing -->
|
|
29
|
+
<div class="stepper-item" data-phase="processing" data-active="true" aria-label="Phase: Processing (active)">
|
|
30
|
+
<div class="stepper-circle loading">
|
|
31
|
+
<div class="spinner"></div>
|
|
32
|
+
</div>
|
|
33
|
+
<span class="stepper-label">Processing</span>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<div class="stepper-connector"></div>
|
|
37
|
+
|
|
38
|
+
<!-- Phase 4: Complete -->
|
|
39
|
+
<div class="stepper-item" data-phase="complete" aria-label="Phase: Complete (pending)">
|
|
40
|
+
<div class="stepper-circle">4</div>
|
|
41
|
+
<span class="stepper-label">Complete</span>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<style scoped>
|
|
47
|
+
.execution-stepper {
|
|
48
|
+
padding: 20px;
|
|
49
|
+
background: var(--color-bg-primary);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.stepper-item {
|
|
53
|
+
display: flex;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
align-items: center;
|
|
56
|
+
flex: 1;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.stepper-circle {
|
|
60
|
+
width: 40px;
|
|
61
|
+
height: 40px;
|
|
62
|
+
border-radius: 50%;
|
|
63
|
+
display: flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
justify-content: center;
|
|
66
|
+
background-color: var(--color-bg-secondary);
|
|
67
|
+
color: var(--color-text-secondary);
|
|
68
|
+
font-weight: 600;
|
|
69
|
+
margin-bottom: 8px;
|
|
70
|
+
border: 2px solid var(--color-border);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.stepper-item[data-completed="true"] .stepper-circle {
|
|
74
|
+
background-color: var(--color-success);
|
|
75
|
+
color: white;
|
|
76
|
+
border-color: var(--color-success);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.stepper-item[data-active="true"] .stepper-circle {
|
|
80
|
+
background-color: var(--color-primary);
|
|
81
|
+
color: white;
|
|
82
|
+
border-color: var(--color-primary);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.stepper-circle.loading {
|
|
86
|
+
position: relative;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.spinner {
|
|
90
|
+
width: 20px;
|
|
91
|
+
height: 20px;
|
|
92
|
+
border: 2px solid transparent;
|
|
93
|
+
border-top-color: white;
|
|
94
|
+
border-right-color: white;
|
|
95
|
+
border-radius: 50%;
|
|
96
|
+
animation: spin 0.8s linear infinite;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@keyframes spin {
|
|
100
|
+
to { transform: rotate(360deg); }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.stepper-label {
|
|
104
|
+
font-size: 12px;
|
|
105
|
+
font-weight: 500;
|
|
106
|
+
text-align: center;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.stepper-connector {
|
|
110
|
+
flex: 1;
|
|
111
|
+
height: 2px;
|
|
112
|
+
background-color: var(--color-border);
|
|
113
|
+
margin: 0 10px;
|
|
114
|
+
margin-top: 20px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.stepper-item[data-completed="true"] ~ .stepper-connector {
|
|
118
|
+
background-color: var(--color-success);
|
|
119
|
+
}
|
|
120
|
+
</style>
|