feat: add history session resume UI and API

Add GET /api/history/sessions endpoint that scans Claude conversation
files for resume. Add welcome overlay UI with clickable history items.
Path decoding validates existence via fs.access with HOME fallback.
This commit is contained in:
zhouyuan
2026-03-10 02:23:02 +08:00
parent 63f86807ad
commit 6d7efc13e6
3 changed files with 132 additions and 0 deletions
+4
View File
@@ -256,6 +256,10 @@
<div class="welcome-qr-inner" id="welcomeQrInner"></div>
<div class="welcome-qr-url" id="welcomeQrUrl"></div>
</div>
<div class="history-sessions" id="historySessions" style="display:none">
<h3 class="history-title">Resume Conversation</h3>
<div class="history-list" id="historyList"></div>
</div>
<p class="welcome-hint">Or press <kbd>Ctrl</kbd>+<kbd>Enter</kbd> to start</p>
<button class="welcome-ralph-link" onclick="app.showRalphWizard()">Start Ralph Loop &rarr;</button>
</div>
+64
View File
@@ -2080,6 +2080,70 @@ body {
text-align: center;
}
/* History sessions panel */
.history-sessions {
margin-top: 1.5rem;
width: 100%;
max-width: 560px;
}
.history-title {
font-size: 0.85rem;
color: var(--text-dim);
margin-bottom: 0.5rem;
font-weight: 500;
text-align: left;
}
.history-list {
display: flex;
flex-direction: column;
gap: 0.35rem;
max-height: 240px;
overflow-y: auto;
}
.history-item {
display: flex;
align-items: center;
gap: 0.75rem;
padding: 0.5rem 0.75rem;
background: var(--bg-input);
border: 1px solid var(--border);
border-radius: 6px;
cursor: pointer;
transition: border-color 0.15s, background 0.15s;
text-align: left;
}
.history-item:hover {
border-color: var(--accent);
background: var(--bg-hover);
}
.history-item-dir {
flex: 1;
font-size: 0.8rem;
color: var(--text);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.history-item-meta {
font-size: 0.7rem;
color: var(--text-muted);
white-space: nowrap;
}
.history-item-size {
font-size: 0.7rem;
color: var(--text-dim);
white-space: nowrap;
min-width: 45px;
text-align: right;
}
.welcome-hint {
color: var(--text-muted);
font-size: 0.8rem;