Tuya 仓库工作台
VS Code 的 Tuya 应用/SDK 多仓库工作台。支持本地和工作区扩展宿主,入口在底部状态栏的 Tuya 按钮。前端使用 Vue 3 和 Ant Design Vue SVG 图标,默认固定浅色;整体布局参考 GitLab 社区版 MR Changes 页。
首版状态
首版基线为 0.4.0;当前版本 0.5.1 增加外部反馈入口并更新发布者与源码仓库信息,同时保留 0.5.0 的 Git 操作弹窗、实时 MR 目标分支和仓库网页入口。首版重点是应用/SDK 工程识别、组件总览、代码比较、Git 提交/推送、MR 网页入口,以及文件树快捷暂存和文本冲突处理。
CDE 提交功能留待后续完善:代码中已有查询、创建版本和依赖传播原型,但尚未完成真实服务写操作联调,不作为首版已验收能力。后续优先完善项目/分支关联、版本提交表单、依赖更新及失败恢复;仍不包含产物编译。
使用与限制见本文,设计见 DESIGN.md,项目协作约定见 AGENTS.md,当前交接状态及下一步任务见 HANDOFF.md。
安装与使用
使用 VS Code 的“从 VSIX 安装”安装本目录生成的 tuya-repository-workbench-0.5.1.vsix。Remote SSH、Dev Containers、WSL 场景需要安装到工程所在的环境。
- 打开包含
cluster.yaml 或 make.yaml 的工程,或它的上层目录。
- 点击状态栏 Tuya,在 Webview 中选择工程/应用。
- 在组件总览筛选修改,点击组件查看连续 Diff;默认左侧文件树、右侧连续 Diff;工具栏可以切换上下统一、左右并排,保留文件折叠及已查看状态。
- 点击白色“提交 / 推送”打开弹窗,分别填写标题、正文。底部固定五个按钮:提交、推送、提交并推送、推送设置、创建MR。
- 推送设置默认使用完整本地分支名,可修改远端和目标分支名,按仓库及本地分支自动保存。提交并推送若仅提交成功,会明确提示推送失败,可单独重试推送。
- 点击白色“创建MR”打开独立弹窗;提交弹窗内的创建MR按钮会切换到它,保留提交草稿。目标分支通过 Git 实时查询远端,可搜索、选择及刷新;不再填写项目网页地址。最终仍由用户在 GitLab 网页完成创建,无需 GitLab API Token。
- 蓝色“查看仓库”从 Git 远端 URL 推导仓库网页。在 VS Code 中调用默认浏览器,在 localhost 调试模式中打开浏览器新标签。
比较栏提供当前仓库的 Tag、本地分支和远端分支下拉选择,支持名称搜索与键盘选择;选择后自动比较。两个版本对比时两边都可选择。同名分支与 Tag 使用完整引用区分,远端分支基于本地 Fetch 记录。
总览“操作”位于最后一列,其前一列“当前变更”显示相对 HEAD 的未提交净行数 +新增 / −删除,包含暂存、未暂存和未跟踪文本文件;同一文件不会重复累计,二进制文件单独显示数量。
Git 使用工作区的 Git 安装与现有认证。推送分支默认是本地分支名,不会把 CDE 分支名解析出的 MR 目标分支直接当成推送目标。原 Fetch/仅快进 Pull 后端能力保留,新提交弹窗仅展示上述五个按钮。
文件树快捷操作
本地比较时,文件树按“冲突、已暂存、未暂存”分组。悬停文件行可使用 + 暂存、− 取消暂存;组标题按钮批量操作当前搜索结果中的文件。部分暂存的文件分别显示在两组,点击后切换到对应 Diff。取消暂存保留工作区内容,冲突不会被普通批量暂存一并处理。
冲突文件可在 Webview/浏览器中查看基线、当前版本和传入版本,编辑合并结果后“保存结果”或“保存并标记已解决”。标记解决前检查冲突标记;工作区或索引已被其他工具修改时要求重新加载。当前编辑器支持 2 MiB 以内的常规 UTF-8 文本,二进制、符号链接等特殊冲突需使用 Git 工具处理。
CDE 版本管理(原型,后续完善)
以下说明当前原型的入口和设计约束,不表示已经完成真实 CDE 发版验收。普通 Git 提交/推送已包含在首版中,CDE 版本写入与依赖传播是后续工作。
需要在工程所在环境安装并登录 embcli,能够执行 embcli cdetoken;项目与 Git 仓库访问权限仍需具备。tuyaWorkbench.cdeHost 可配置 API 地址;使用系统 TLS 信任,不关闭证书校验。
版本管理页提供项目、分支、版本与依赖查询。输入源分支 ID,以及可选的目标 SDK/应用分支 ID,生成只读计划。多个源分支使用逗号分隔。
执行前逐项填写版本号、描述和真实项目类型,确认完整计划。单项目留空传播目标;多层传播会逐层更新依赖、创建版本,在指定目标停止。同一父项目合并更新后只创建一个版本。
仅支持版本与 Tag,不编译产物。依赖要求新产物 ID 时停止并提示。远端分支代码是版本来源,本地修改不会自动提交或上传。
缓存位于 <工程根目录>/.vscode/tuya-workbench/cache/,版本记录位于同目录的 operations/。查询缓存有效期一分钟;版本写操作直接核实远端状态。失败或断线后从记录中选择计划并核实结果,不会重新触发已经提交的版本任务。清空缓存保留操作记录。
版本任务按工程加锁;同宿主已退出的进程锁会在下次执行时核实并清理。未知宿主或活动进程的锁不会自动接管。
开发与验证
localhost 浏览器调试
在插件源码目录执行:
npm run dev -- --workspace /home/kio/wk/7inch-px30-avs --workspace /home/kio/wk/tuyaos-gw-integrated --cache-dir /tmp/tuya-workbench-dev-cache
打开 http://localhost:4318。页面和 Git/CDE 后端与插件共用,不是静态演示。支持浏览器开发者工具、双模式 Diff、Git 表单与版本管理;源码在页面内只读预览,MR 在浏览器新标签打开或复制链接。
--workspace 可重复指定;不指定时使用启动命令所在目录。
--port 4321 可更换端口,仅监听 127.0.0.1。
--cache-dir 将调试缓存和版本记录隔离保存;不指定时仍使用工程的 .vscode/tuya-workbench/。
--cde-host https://... 可指定 CDE API。Git、embcli 和网络都使用启动服务的机器环境。
- 修改代码后运行
npm run build;前端修改刷新网页即可,后端修改需重启 npm run dev。终端 Ctrl+C 停止服务。
- 调试页面拥有启动时指定工作区的实际 Git/CDE 操作能力。各浏览器页面独立选择工程,进行中的操作完成前避免刷新或关闭页面。
- 服务在远端机器时,将该机器的 4318 端口转发到本机后访问;它不监听公网地址。
构建与测试
npm ci
npm run check
npm run build
npm test
npm run package
测试使用临时仓库、模拟 CDE API 和 DOM 环境,不对真实工程提交或推送。
npm run test:layout 使用隔离 Chromium 实测行号与代码对齐、跨文件滚动、并排横向同步及图标 CSP。默认使用 /usr/bin/google-chrome,可用 WORKBENCH_CHROMIUM 指定其他 Chromium 可执行文件;不会连接个人浏览器配置。
当前限制:
- CDE API 与多层执行已通过模拟验证,尚未对真实 CDE 执行写操作;接口与权限仍需在指定测试项目联调。
- Remote 架构已接入工作区宿主,Remote SSH/容器/WSL 尚未逐环境实测。
- 当前 Git 状态在工作台可见时每 15 秒刷新,操作后立即刷新;文件监听与更精细的增量调度后续优化。
- CDE 查询结果暂以结构化详情展示,尚未实现交互式版本选择器、已有版本直接传播和描述自动草稿。
- Diff 暂不支持动态展开更多上下文和完整语法高亮;超大 Diff 会提示缩小范围,不截断冒充完整结果。
详细范围与后续设计见源码目录中的 DESIGN.md。