Files
aryx/src/shared/contracts/channels.ts
T
David KayaandCopilot 575aca360a feat: batch session archive and delete with multi-select UI
Add multi-select mode to the sidebar session list, enabling users to
archive, restore, or delete multiple sessions at once.

UX:
- Ctrl+Click (Cmd+Click on Mac) any session to enter multi-select mode
- Animated checkboxes stagger-reveal across all visible sessions
- Click to toggle, Shift+Click for range selection
- Running sessions are excluded from selection (safety guard)
- Floating action bar slides up with count pill, Archive, Delete, Cancel
- Batch delete shows a confirmation dialog with hold-to-confirm for 3+
  sessions and a scrollable list of session titles
- Batch archive shows an undo toast with 5-second auto-dismiss
- Escape key or Cancel button exits multi-select mode

Backend:
- batchSetSessionsArchived IPC: single load/mutate/persist cycle for N
  sessions instead of N sequential calls
- batchDeleteSessions IPC: parallel cleanup of scratchpad dirs and SDK
  sessions, then single workspace persist

Accessibility:
- Action bar: role=toolbar, aria-label
- Checkboxes: role=checkbox, aria-checked, keyboard-activatable
- Selection count: aria-live=polite
- Delete dialog: role=alertdialog, aria-modal, focus trap

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-15 07:12:45 +02:00

103 lines
4.7 KiB
TypeScript

export const ipcChannels = {
describeSidecarCapabilities: 'sidecar:describe-capabilities',
refreshSidecarCapabilities: 'sidecar:refresh-capabilities',
loadWorkspace: 'workspace:load',
addProject: 'workspace:add-project',
removeProject: 'workspace:remove-project',
resolveWorkspaceDiscoveredTooling: 'workspace:resolve-discovered-tooling',
refreshProjectGitContext: 'projects:refresh-git-context',
getProjectGitDetails: 'projects:get-git-details',
getProjectGitFilePreview: 'projects:get-git-file-preview',
rescanProjectConfigs: 'project:rescan-configs',
rescanProjectCustomization: 'project:rescan-customization',
resolveProjectDiscoveredTooling: 'project:resolve-discovered-tooling',
setProjectAgentProfileEnabled: 'project:set-agent-profile-enabled',
saveWorkflow: 'workflows:save',
saveWorkflowTemplate: 'workflows:save-template',
deleteWorkflow: 'workflows:delete',
listWorkflowReferences: 'workflows:list-references',
createWorkflowFromTemplate: 'workflows:create-from-template',
exportWorkflow: 'workflows:export',
importWorkflow: 'workflows:import',
createWorkflowSession: 'workflows:create-session',
setTheme: 'settings:set-theme',
setTerminalHeight: 'settings:set-terminal-height',
setNotificationsEnabled: 'settings:set-notifications-enabled',
setMinimizeToTray: 'settings:set-minimize-to-tray',
setGitAutoRefreshEnabled: 'settings:set-git-auto-refresh-enabled',
checkForUpdates: 'app:check-for-updates',
installUpdate: 'app:install-update',
saveMcpServer: 'tooling:mcp:save',
deleteMcpServer: 'tooling:mcp:delete',
saveLspProfile: 'tooling:lsp:save',
deleteLspProfile: 'tooling:lsp:delete',
saveWorkspaceAgent: 'workspace-agents:save',
deleteWorkspaceAgent: 'workspace-agents:delete',
describeTerminal: 'terminal:describe',
createTerminal: 'terminal:create',
restartTerminal: 'terminal:restart',
writeTerminal: 'terminal:write',
resizeTerminal: 'terminal:resize',
killTerminal: 'terminal:kill',
updateSessionTooling: 'sessions:update-tooling',
updateSessionApprovalSettings: 'sessions:update-approval-settings',
createSession: 'sessions:create',
duplicateSession: 'sessions:duplicate',
branchSession: 'sessions:branch',
setSessionMessagePinned: 'sessions:set-message-pinned',
renameSession: 'sessions:rename',
setSessionPinned: 'sessions:set-pinned',
setSessionArchived: 'sessions:set-archived',
deleteSession: 'sessions:delete',
batchSetSessionsArchived: 'sessions:batch-set-archived',
batchDeleteSessions: 'sessions:batch-delete',
regenerateSessionMessage: 'sessions:regenerate-message',
editAndResendSessionMessage: 'sessions:edit-and-resend-message',
sendSessionMessage: 'sessions:send-message',
cancelSessionTurn: 'sessions:cancel-turn',
resolveSessionApproval: 'sessions:resolve-approval',
resolveSessionUserInput: 'sessions:resolve-user-input',
setSessionInteractionMode: 'sessions:set-interaction-mode',
dismissSessionPlanReview: 'sessions:dismiss-plan-review',
dismissSessionMcpAuth: 'sessions:dismiss-mcp-auth',
startSessionMcpAuth: 'sessions:start-mcp-auth',
discardSessionRunGitChanges: 'sessions:discard-run-git-changes',
suggestProjectGitCommitMessage: 'sessions:suggest-git-commit-message',
querySessions: 'sessions:query',
updateSessionModelConfig: 'sessions:update-model-config',
stageProjectGitFiles: 'git:stage-files',
unstageProjectGitFiles: 'git:unstage-files',
commitProjectGitChanges: 'git:commit',
pushProjectGit: 'git:push',
fetchProjectGit: 'git:fetch',
pullProjectGit: 'git:pull',
createProjectGitBranch: 'git:create-branch',
switchProjectGitBranch: 'git:switch-branch',
deleteProjectGitBranch: 'git:delete-branch',
selectProject: 'selection:project',
selectSession: 'selection:session',
openAppDataFolder: 'troubleshooting:open-app-data-folder',
resetLocalWorkspace: 'troubleshooting:reset-local-workspace',
terminalData: 'terminal:data',
terminalExit: 'terminal:exit',
workspaceUpdated: 'workspace:updated',
sessionEvent: 'sessions:event',
updateStatus: 'app:update-status',
getQuota: 'sidecar:get-quota',
trayCreateScratchpad: 'tray:create-scratchpad',
// Quick Prompt
quickPromptSend: 'quick-prompt:send',
quickPromptDiscard: 'quick-prompt:discard',
quickPromptClose: 'quick-prompt:close',
quickPromptContinueInAryx: 'quick-prompt:continue-in-aryx',
quickPromptCancelTurn: 'quick-prompt:cancel-turn',
quickPromptSetSettings: 'quick-prompt:set-settings',
quickPromptGetSettings: 'quick-prompt:get-settings',
quickPromptGetCapabilities: 'quick-prompt:get-capabilities',
quickPromptSessionCreated: 'quick-prompt:session-created',
quickPromptSessionEvent: 'quick-prompt:session-event',
quickPromptShow: 'quick-prompt:show',
quickPromptHide: 'quick-prompt:hide',
} as const;