feat(session): 实现会话保存和加载功能

- 在 AcpConnection 和 AcpSessionManager 中添加会话保存方法
- 在 QwenAgentManager 中实现通过 ACP 和直接保存会话的功能
- 在前端添加保存会话对话框和相关交互逻辑
- 新增 QwenSessionManager 用于直接操作文件系统保存和加载会话
This commit is contained in:
yiliang114
2025-11-21 23:51:48 +08:00
parent e2beecb9c4
commit ce07fb2b3f
13 changed files with 1379 additions and 59 deletions

View File

@@ -0,0 +1,167 @@
/* Save Session Dialog Styles */
.dialog-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.dialog-content {
background: var(--app-menu-background);
border: 1px solid var(--app-menu-border);
border-radius: var(--corner-radius-small);
min-width: 400px;
max-width: 500px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
font-size: var(--vscode-chat-font-size, 13px);
font-family: var(--vscode-chat-font-family);
}
.dialog-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px;
border-bottom: 1px solid var(--app-menu-border);
}
.dialog-header h3 {
margin: 0;
font-weight: 600;
color: var(--app-primary-foreground);
}
.dialog-close {
background: transparent;
border: none;
cursor: pointer;
padding: 4px;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
}
.dialog-close:hover {
background: var(--app-ghost-button-hover-background);
}
.dialog-body {
padding: 16px;
}
.form-group {
margin-bottom: 16px;
}
.form-group label {
display: block;
margin-bottom: 8px;
font-weight: 500;
color: var(--app-primary-foreground);
}
.form-group input {
width: 100%;
padding: 8px 12px;
border: 1px solid var(--app-primary-border-color);
border-radius: 4px;
background: var(--vscode-input-background);
color: var(--vscode-input-foreground);
font-size: var(--vscode-chat-font-size, 13px);
font-family: var(--vscode-chat-font-family);
box-sizing: border-box;
}
.form-group input:focus {
outline: none;
border-color: var(--vscode-focusBorder);
}
.form-group input.error {
border-color: var(--vscode-inputValidation-errorBorder);
}
.form-help {
margin-top: 6px;
font-size: 0.9em;
color: var(--app-secondary-foreground);
opacity: 0.7;
}
.error-message {
margin-top: 6px;
font-size: 0.9em;
color: var(--vscode-inputValidation-errorForeground);
}
.dialog-footer {
display: flex;
justify-content: flex-end;
gap: 8px;
padding: 16px;
border-top: 1px solid var(--app-menu-border);
}
.primary-button,
.secondary-button {
padding: 6px 12px;
border-radius: 4px;
border: none;
font-size: var(--vscode-chat-font-size, 13px);
font-family: var(--vscode-chat-font-family);
cursor: pointer;
display: flex;
align-items: center;
gap: 6px;
}
.primary-button {
background: var(--vscode-button-background);
color: var(--vscode-button-foreground);
}
.primary-button:hover {
background: var(--vscode-button-hoverBackground);
}
.secondary-button {
background: var(--vscode-button-secondaryBackground);
color: var(--vscode-button-secondaryForeground);
}
.secondary-button:hover {
background: var(--vscode-button-secondaryHoverBackground);
}
/* Save Session Header Button */
.save-session-header-button {
display: flex;
align-items: center;
justify-content: center;
padding: 0;
background: transparent;
border: 1px solid transparent;
border-radius: 4px;
cursor: pointer;
outline: none;
width: 28px;
height: 28px;
margin-right: 4px;
}
.save-session-header-button:hover {
background: var(--app-ghost-button-hover-background);
}
.save-session-header-button svg {
width: 16px;
height: 16px;
color: var(--app-primary-foreground);
}