feat: Stream consumer groups UI

- stream.ts: streamGroups, streamConsumers, streamGroupCreate, streamGroupDestroy, streamAck
- IPC: redis:streamGroups, streamConsumers, streamGroupCreate, streamGroupDestroy, streamAck
- Preload bridge + types for all new methods
- StreamEditor.vue: collapsible consumer groups panel
  - XINFO GROUPS table with name/consumers/pending/last-delivered-id
  - Click group to expand XINFO CONSUMERS
  - Create group dialog (name, start ID, MKSTREAM)
  - Destroy group with confirm
- i18n keys (zh-CN + en)
- P1 complete!
This commit is contained in:
2026-07-07 21:22:12 +08:00
parent 00c11d4dfe
commit cdadfbe5e4
8 changed files with 379 additions and 4 deletions
+17
View File
@@ -232,6 +232,23 @@ export function registerIpcHandlers(): void {
return redis.streamDel(id, key, ...ids)
}))
// Redis - Stream Consumer Groups
ipcMain.handle('redis:streamGroups', async (_e, id: string, key: string) => {
return redis.streamGroups(id, key)
})
ipcMain.handle('redis:streamConsumers', async (_e, id: string, key: string, group: string) => {
return redis.streamConsumers(id, key, group)
})
ipcMain.handle('redis:streamGroupCreate', withLog('XGROUP CREATE', async (_e, id: string, key: string, group: string, startId: string, mkstream: boolean) => {
return redis.streamGroupCreate(id, key, group, startId, mkstream)
}))
ipcMain.handle('redis:streamGroupDestroy', withLog('XGROUP DESTROY', async (_e, id: string, key: string, group: string) => {
return redis.streamGroupDestroy(id, key, group)
}))
ipcMain.handle('redis:streamAck', withLog('XACK', async (_e, id: string, key: string, group: string, ids: string[]) => {
return redis.streamAck(id, key, group, ...ids)
}))
// Command Log
ipcMain.handle('redis:getCommandLog', () => {
return redis.getLog()