feat(sidebar): replicate WorkBuddy task context menu (TODO 01)

Replace the sidebar delete button with the original task menu: pin/unpin,
rename, open in a separate window, open folder, archive and delete.

Source: REA ev_f5e9d71a676c453daab40928acfb33aeabae68ba57ffda342380cead7f1a1fe2
(WorkBuddy 5.8.3 task menu, open state) supplies the container/item geometry,
the two dividers, danger colour and every item icon.

Verified by scripts/verify-task-menu.cjs: 33 assertions in a real isolated
Electron app (real preload/IPC/filesystem), including menu geometry, anchor
offset, pin/rename/archive persistence, open-folder target and the separate
window query. typecheck, test:conversation and build pass.
This commit is contained in:
xiaohan.yuan committed 2026-10-17 04:43:56 +08:00
1 parent e365e830cf
commit e335588826
15 files changed
+821 -31

No files matched your search

+6 -1
View File
@@ -139,11 +139,16 @@ const api: YCodeApi = {
speech: { transcribe: (payload) => ipcRenderer.invoke('speech:transcribe', payload) },
session: {
list: () => ipcRenderer.invoke('session:list'),
listArchived: () => ipcRenderer.invoke('session:list-archived'),
create: (title, context) => ipcRenderer.invoke('session:create', title, context),
updateContext: (id, context) => ipcRenderer.invoke('session:update-context', id, context),
messages: (sessionId: string) => ipcRenderer.invoke('session:messages', sessionId),
rename: (sessionId: string, title: string) => ipcRenderer.invoke('session:rename', sessionId, title),
remove: (sessionId: string) => ipcRenderer.invoke('session:delete', sessionId)
remove: (sessionId: string) => ipcRenderer.invoke('session:delete', sessionId),
setPinned: (sessionId: string, pinned: boolean) => ipcRenderer.invoke('session:set-pinned', sessionId, pinned),
setArchived: (sessionId: string, archived: boolean) => ipcRenderer.invoke('session:set-archived', sessionId, archived),
openFolder: (sessionId: string) => ipcRenderer.invoke('session:open-folder', sessionId),
openWindow: (sessionId: string) => ipcRenderer.invoke('session:open-window', sessionId)
},
chat: {
revert: (sessionId, userMessageId) => ipcRenderer.invoke('chat:revert', sessionId, userMessageId),