Commit 7da00a3c authored by AI-甘富林's avatar AI-甘富林

fix(settings): add missing preload bridge and styles

parent 80e3ebdb
import { contextBridge, ipcRenderer } from "electron";
import {
IPC_CHANNELS,
type ChatAttachment,
type ChatStreamListener,
type DesktopApi,
type RuntimeCloudFetchAction,
......@@ -13,6 +14,11 @@ const desktopApi: DesktopApi = {
getSummary: () => ipcRenderer.invoke(IPC_CHANNELS.workspaceGetSummary),
warmup: () => ipcRenderer.invoke(IPC_CHANNELS.workspaceWarmup)
},
window: {
minimize: () => ipcRenderer.invoke(IPC_CHANNELS.windowMinimize),
maximize: () => ipcRenderer.invoke(IPC_CHANNELS.windowMaximize),
close: () => ipcRenderer.invoke(IPC_CHANNELS.windowClose)
},
gateway: {
status: () => ipcRenderer.invoke(IPC_CHANNELS.gatewayStatus),
connect: () => ipcRenderer.invoke(IPC_CHANNELS.gatewayConnect),
......@@ -38,11 +44,13 @@ const desktopApi: DesktopApi = {
},
config: {
load: () => ipcRenderer.invoke(IPC_CHANNELS.configLoad),
pickWorkspaceDirectory: (currentPath?: string) => ipcRenderer.invoke(IPC_CHANNELS.configPickWorkspaceDirectory, currentPath),
save: (input: SaveConfigInput) => ipcRenderer.invoke(IPC_CHANNELS.configSave, input)
},
projects: {
list: () => ipcRenderer.invoke(IPC_CHANNELS.projectsList),
setActive: (projectId: string) => ipcRenderer.invoke(IPC_CHANNELS.projectsSetActive, projectId)
setActive: (projectId: string) => ipcRenderer.invoke(IPC_CHANNELS.projectsSetActive, projectId),
resolveIntent: (prompt: string, currentProjectId?: string) => ipcRenderer.invoke(IPC_CHANNELS.projectsResolveIntent, prompt, currentProjectId)
},
skillCatalog: {
list: () => ipcRenderer.invoke(IPC_CHANNELS.skillCatalogList)
......@@ -61,6 +69,9 @@ const desktopApi: DesktopApi = {
skills: {
list: () => ipcRenderer.invoke(IPC_CHANNELS.skillsList)
},
experts: {
list: () => ipcRenderer.invoke(IPC_CHANNELS.expertsList)
},
modelConfig: {
getSummary: () => ipcRenderer.invoke(IPC_CHANNELS.modelConfigGetSummary)
},
......@@ -74,8 +85,9 @@ const desktopApi: DesktopApi = {
createSessionForProject: (projectId: string, title?: string) => ipcRenderer.invoke(IPC_CHANNELS.chatCreateSessionForProject, projectId, title),
closeSession: (sessionId: string) => ipcRenderer.invoke(IPC_CHANNELS.chatCloseSession, sessionId),
listMessages: (sessionId: string) => ipcRenderer.invoke(IPC_CHANNELS.chatListMessages, sessionId),
sendPrompt: (sessionId: string, prompt: string, skillId?: string) => ipcRenderer.invoke(IPC_CHANNELS.chatSendPrompt, sessionId, prompt, skillId),
streamPrompt: (sessionId: string, prompt: string, skillId?: string) => ipcRenderer.invoke(IPC_CHANNELS.chatStreamPrompt, sessionId, prompt, skillId),
pickImageAttachment: () => ipcRenderer.invoke(IPC_CHANNELS.chatPickImageAttachment),
sendPrompt: (sessionId: string, prompt: string, skillId?: string, attachments?: ChatAttachment[]) => ipcRenderer.invoke(IPC_CHANNELS.chatSendPrompt, sessionId, prompt, skillId, attachments),
streamPrompt: (sessionId: string, prompt: string, skillId?: string, attachments?: ChatAttachment[]) => ipcRenderer.invoke(IPC_CHANNELS.chatStreamPrompt, sessionId, prompt, skillId, attachments),
onStreamEvent: (listener: ChatStreamListener) => {
const wrapped = (_event: Electron.IpcRendererEvent, payload: Parameters<ChatStreamListener>[0]) => {
listener(payload);
......@@ -96,3 +108,4 @@ const smokeEnabled = process.argv.includes("--qjc-smoke");
contextBridge.exposeInMainWorld("qjcDesktop", desktopApi);
contextBridge.exposeInMainWorld("qjcSmokeEnabled", smokeEnabled);
......@@ -669,6 +669,75 @@ strong { font-weight: 600; }
color: #972f2f;
}
.settings-actions { justify-content: flex-start; }
.workspace-directory-card {
display: grid;
gap: 12px;
}
.workspace-directory-panel {
display: grid;
gap: 10px;
padding: 16px 18px;
border-radius: 18px;
border: 1px solid #d8e1ef;
background: linear-gradient(180deg, #ffffff, #f4f8ff);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.78), 0 12px 28px rgba(35, 52, 82, 0.05);
}
.workspace-directory-eyebrow {
font-size: 11px;
font-weight: 700;
letter-spacing: 0.12em;
text-transform: uppercase;
color: #60728c;
}
.workspace-directory-path {
color: #1f2f49;
font-size: 14px;
line-height: 1.7;
word-break: break-word;
}
.workspace-directory-hint {
color: #667794;
font-size: 13px;
line-height: 1.6;
}
.workspace-directory-draft-row,
.workspace-directory-inline-actions,
.workspace-directory-actions {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.workspace-directory-draft-row {
justify-content: space-between;
}
.workspace-directory-draft-badge {
display: inline-flex;
align-items: center;
min-height: 28px;
padding: 0 10px;
border-radius: 999px;
background: rgba(15, 123, 255, 0.08);
color: #0f67de;
font-size: 12px;
font-weight: 700;
}
.workspace-directory-inline-actions button {
min-height: 36px;
padding: 8px 14px;
}
.workspace-directory-inline-button {
box-shadow: inset 0 0 0 1px #d8e1ef;
}
.field-label { color: #53637f; font-size: 13px; }
.message-list,
......@@ -1183,6 +1252,13 @@ strong { font-weight: 600; }
.chat-panel { padding: 16px; }
}
@media (max-width: 860px) {
.workspace-directory-draft-row {
align-items: stretch;
flex-direction: column;
}
}
@media (prefers-reduced-motion: reduce) {
.startup-overlay-panel,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment