cba41cb0a613b1a1142c4805d6b0208113ac1173
Co-Authored-By: Paperclip <noreply@paperclip.ing>
Redis GUI Foundation
Redis GUI 的产品基础工程,采用 Rust workspace + Tauri desktop 结构,为后续连接管理、命令执行、键浏览和危险操作防护提供稳定后端边界。
Workspace Layout
apps/desktop: Tauri 桌面入口与 React + Tailwind 工作台壳层。crates/redis-core: 可复用的领域与应用核心,供 desktop、未来 CLI 和自动化入口共享。docs/architecture.md: 当前阶段的边界、持久化策略和演进约束。docs/frontend-workspace-baseline.md: 首版桌面信息架构、UI/UX 范围和验收要点。
Current Backend Scope
- 建立可复用的
redis-corecrate,承载连接模型、连接测试、key 浏览和基础命令执行能力。 - 提供 Redis 常见 value 类型的统一读取抽象:
string、hash、list、set、zset、stream。 - 提供 V1 安全写入边界:仅允许现有 string key 的整值替换,并显式暴露只读类型差异。
- 提供 TTL 读取与修改能力:保留 TTL、设置毫秒级过期、移除 TTL。
- 建立
apps/desktop/src-tauri,使 GUI 通过统一命令面访问后端。 - 明确当前持久化边界:本阶段不落盘连接密钥,不承诺历史数据兼容。
- 对单实例 Redis 提供最小可验证的后端契约:AUTH、DB 选择、
PING、SCAN/TYPE/PTTLkey 元数据浏览,以及基础 RESP2 命令执行。
Prerequisites
- Rust 1.85+
- Node.js 24+
- pnpm 10+
- Docker CLI for the local Redis smoke fixture
- Linux 开发环境需要 Tauri 运行依赖,例如
webkit2gtk和gtk3开发包
Getting Started
pnpm install
cargo test -p redis-core
pnpm --filter @redis-gui/desktop test
pnpm run desktop:dev
pnpm run desktop:build
pnpm run desktop:tauri:dev
pnpm run desktop:tauri:build
pnpm run desktop:tauri:build:all
说明:
- 仓库现在同时补齐了
pnpm-workspace.yaml和根package.json的packageManager,将pnpm作为桌面开发与打包的规范入口。 - 仓库通过
.npmrc固定安装 devDependencies,避免宿主机的NODE_ENV=production破坏桌面构建链路。 cargo test -p redis-core默认验证共享后端核心,包括 mock Redis 握手与命令执行测试,避免在缺少桌面系统库时阻断后端迭代。pnpm --filter @redis-gui/desktop test运行桌面前端的最小单测基线;当前覆盖共享错误映射层,避免后续功能迭代把后端错误码重新退回成零散文案拼接。pnpm run desktop:dev启动浏览器态工作台壳层,用于检查布局、交互和 demo fallback;此模式下没有 Tauri 命令桥,但会在当前会话内保留 mock string 保存和 TTL 调整结果,便于做壳层级交互验收。pnpm run desktop:tauri:dev启动带 Tauri 后端桥的桌面工作台;连接测试和命令执行会调用现有test_redis_connection与execute_redis_command命令,因此需要完整的 Tauri Linux 运行依赖。pnpm run desktop:tauri:build是当前推荐的稳定 Linux 打包入口,只生成已验证可出的.deb与.rpm产物;产物位于仓库根target/release/bundle/。pnpm run desktop:tauri:build:all保留完整 bundle 调查路径;当前会在 AppImage 的linuxdeploy阶段失败,因此不应作为默认 QA 打包命令。- Linux 上进入 Tauri 打包前,可先用
pkg-config --modversion gtk+-3.0 webkit2gtk-4.1 libsoup-3.0做原生依赖预检查;任一缺失都会阻断桌面包产物生成。
Local Redis Smoke Fixture
仓库现在提供一个本地 Redis fixture 约定,用于 QA 和开发共用的 smoke 数据源:
./scripts/redis-fixture/start.sh
./scripts/redis-fixture/seed.sh
pnpm run desktop:tauri:dev
默认连接参数:
- Host:
127.0.0.1 - Port:
6380 - Database:
0 - Password: empty
- TLS: disabled
清理命令:
./scripts/redis-fixture/stop.sh
完整本地 build 与 smoke 步骤见 docs/qa/local-desktop-smoke.md。
Current Frontend Scope
- 首版可见界面现在已接入真实的桌面 browse / inspect / string save / TTL update 路径,但仍保持危险操作和完整产品化流程在后续阶段演进。
- 当前前端消费
backend_bootstrap、test_redis_connection、browse_redis_keys、read_redis_value、create_redis_value、write_redis_value、update_redis_key_ttl和execute_redis_command;浏览器态仍保持明确的 demo fallback。 - 当前仓库还包含一个 string-only 的
Add key可见入口,走create_redis_value合约;该能力已在仓库中实现,并在界面上明确标记为Preview,但阶段验收仍需按docs/redis-gui-v1-product-requirements.md与docs/qa/acceptance-matrix.md单独判断,不应自动算入当前基线签收。 - 当前前端还通过共享错误映射层统一消费
redis-core的稳定错误码,使连接测试、浏览、读取、保存、TTL 和命令执行失败都落到一致的操作提示上。 - 连接区域现在额外暴露一个可见的 session state 卡片,把
ready / testing / demo fallback / retry needed边界和下一步操作提示固定在当前选中 connection / DB 语境里;如果用户在 live test 返回前切换了连接,测试结果只回写被测连接,不会偷偷改掉当前 active DB。 inspect_redis_key与update_redis_key_ttl已在桌面桥可用;当前 UI 已暴露 TTL 设置与移除控制,但删除执行仍保持未开放状态。- 当前 phase 的 string 保存、TTL 设置和 TTL 移除在执行前都会进入 scoped review,重复展示 connection / DB / key 语境与 current-vs-next 变化,并阻止 no-op 提交直接触达 live bridge。
- inspector 现在对
hash/list/set/zset/stream提供结构化只读面板,不再要求操作者从原始 JSON 文本中手动解析 typed value。 - inspector 现在还会明确显示当前 inspect 状态、value surface 语义、下一步操作路径和 key facts,降低 string / structured / missing / demo fallback 场景下的误读成本。
- DB switcher 现在默认覆盖
db0到db15,并会在当前作用域落到更高 DB 时保留对应选项,避免 UI 退回到四个固定 DB 的弱验证面。 - 连接测试、key browse、value inspector 和命令托盘在 Tauri 桌面运行时走真实后端桥;浏览器态
pnpm run desktop:dev会明确回退到 demo 数据,不伪装成真实 Redis 行为。 - 浏览器态现在还会在单次会话内同步 mock string 保存、TTL 设置和 TTL 移除的可见状态,保证壳层演示与 UI 反馈一致,但这仍不构成任何 live Redis 证据。
- utility rail 现在额外提供本地 smoke assist 面板,可直接切换到
127.0.0.1:6380 / db0的 fixture 路径、聚焦smoke:*键,并预填安全 smoke 命令。 - 具体 UI/UX 边界与 QA 验收入口见
docs/frontend-workspace-baseline.md和docs/qa/acceptance-matrix.md。
Description
Languages
TypeScript
52.6%
Rust
44.4%
Shell
1.7%
CSS
1.1%
HTML
0.2%