Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qjclaw-dmg
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
AI-甘富林
qjclaw-dmg
Commits
7da00a3c
Commit
7da00a3c
authored
Apr 22, 2026
by
AI-甘富林
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(settings): add missing preload bridge and styles
parent
80e3ebdb
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
92 additions
and
3 deletions
+92
-3
index.ts
apps/desktop/src/preload/index.ts
+16
-3
styles.css
apps/ui/src/styles.css
+76
-0
No files found.
apps/desktop/src/preload/index.ts
View file @
7da00a3c
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
);
apps/ui/src/styles.css
View file @
7da00a3c
...
...
@@ -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
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment