feat: add multi-device concurrency, server lifecycle CLI, and unified execution stream

- Implement DevicePool and DeviceExecutionLock concurrency modes (per-device FIFO vs global serialization)
- Extend ArtemisClient SDK and CLI with explicit device targeting and concurrency strategy configuration
- Add server lifecycle management (artemis restart, stop, status) with cross-platform PID discovery
- Update MCP server tools to support multi-device dispatch, trace tagging, and per-device execution
- Enhance Showcase UI with step-by-step visual replay, playback speed controls, and device serial badges
- Add comprehensive unit test coverage and edge-case verification scripts
This commit is contained in:
somew1nd committed 2026-08-26 15:53:14 -07:00
1 parent a36a66ce6d
commit c2c90a6378
84 files changed
+5612 -645

No files matched your search

@@ -296,7 +296,8 @@ $text-muted: #a1a1aa;
box-shadow: 0 3px 8px rgba(148, 163, 184, 0.08);
.task-card-header .task-card-header-actions {
&:has(.btn-delete-card) .task-time {
&:has(.btn-delete-card) .task-time,
&:has(.btn-delete-card) .task-time-divider {
opacity: 0;
}
@@ -327,8 +328,11 @@ $text-muted: #a1a1aa;
display: flex;
justify-content: space-between;
align-items: center;
gap: 8px;
min-width: 0;
.task-badge {
flex-shrink: 0;
display: inline-flex;
align-items: center;
font-size: 10.5px;
@@ -405,11 +409,67 @@ $text-muted: #a1a1aa;
.task-card-header-actions {
display: flex;
align-items: center;
gap: 4px;
position: relative;
min-width: 0;
flex-shrink: 1;
justify-content: flex-end;
.task-device {
display: inline-flex;
align-items: center;
gap: 2.5px;
min-width: 0;
flex-shrink: 1;
font-size: 11px;
color: #94a3b8;
line-height: 1;
cursor: default;
transition: color 0.15s ease, opacity 0.15s ease;
.device-icon {
font-size: 12.5px;
width: 12.5px;
height: 12.5px;
line-height: 12.5px;
color: #94a3b8;
opacity: 0.75;
flex-shrink: 0;
}
.device-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
min-width: 0;
font-family: inherit;
letter-spacing: -0.15px;
}
&:hover {
color: #64748b;
.device-icon {
color: #64748b;
opacity: 1;
}
}
}
.task-time-divider {
font-size: 10px;
color: #cbd5e1;
line-height: 1;
user-select: none;
flex-shrink: 0;
transition: opacity 0.15s ease;
}
.task-time {
font-size: 11.5px;
color: #94a3b8;
white-space: nowrap;
flex-shrink: 0;
line-height: 1;
transition: opacity 0.15s ease;
}