feat(desktop-shell): restore the brand builder skill for the Tauri shell - #10165
feat(desktop-shell): restore the brand builder skill for the Tauri shell#10165yiliang114 wants to merge 1 commit into
Conversation
The Electron-era desktop-brand-builder skill was removed with packages/desktop in #9085, leaving the Tauri shell without a white-label customization path. Restore it against the new branding hooks: tauri.conf.json, the icon set, and the bootstrap UI. The bundled script is dependency-free Node, regenerates icons via tauri icon, and empties updater endpoints so branded builds never touch the official feed.
|
Thanks for the PR! Before the gate notes: this PR is a byte-for-byte duplicate of #10164 — same branch, same head SHA, same two files, created in the same second. Please close one of the pair so review doesn't run twice on the same commit.
Moving on to code review. 🔍 中文说明感谢贡献!先说一件事:本 PR 与 #10164 完全重复——同分支、同 head SHA、同样两个文件、同一秒创建。请关闭其中一个,避免对同一个 commit 重复评审。
进入代码审查。🔍 — Qwen Code · qwen3.8-max Reviewed at |
Code reviewReviewed against Findings, most severe first: 1. CI is red on this PR's own code — lint fails. 2. The SKILL.md workflow can't actually finish a brand build as written. It installs only 3. Windows icon generation will silently degrade. 4. Known-limitation question, not a blocker: native surfaces keep the Qwen brand — 5. Minor: CI test evidenceFrom the PR's own CI on the reviewed commit, via the API — no PR code was executed in this run. The two duplicate PRs (#10164 and this one) share this head SHA, so two Final CI results for
One row per check name (latest run); skipped checks omitted; failures sort first. / 每个检查名一行(取最新一次运行),省略 skipped,失败项排在最前。 Bot orchestration checks (triage, review-pr, verify, tmux-testing, …) are skipped or in flight and don't gate the PR. What was not verifiedThe script's patching flow was not executed here — unattended runs never run PR code. The "Local run output" in the PR body is the author's claim (macOS only), not independent evidence; in particular the full 中文说明代码审查(基于 按严重程度列出的问题:
CI 证据来自该 commit 的 API 数据,本运行未执行任何 PR 代码。两个重复 PR 共享同一 head SHA,触发了两次运行,其中一组作业被去重取消;上表失败属于活跃运行,且由本 PR 直接导致(错误就在其新增文件内)。 未验证项:脚本的补丁流程未在此执行;PR 正文中的本地输出是作者的自述(仅 macOS),不是独立证据,完整打包路径目前无人跑通(见问题 2)。可用 — Qwen Code · qwen3.8-max Reviewed at |
|
Confidence: 2/5 — right direction, minimal faithful design, but CI is red on the PR's own lint errors and the documented packaging flow can't complete as written. Stepping back: this is a genuinely well-conceived PR. The instinct to restore the white-label entry point as a zero-footprint build-time skill — rather than adding branding hooks to the shipped Tauri shell — is exactly the minimal path, and the contract faithfully carries over the old skill's promise (two inputs in, branded package out). The empty-updater-endpoints default is a thoughtful safety detail. If I had to maintain this in six months, I'd thank the author. But I can't approve what CI just rejected. The lint failure is squarely in the new file — the @yiliang114, two housekeeping items too: this PR is a duplicate of #10164 (same branch and SHA) — please close one of the pair; and the template's Requesting changes on the lint failure; the rest is in the review comment above. The direction itself has my full support. 🙏 中文说明置信度:2/5 —— 方向正确、设计极简且忠实还原,但 CI 因本 PR 自身的 lint 错误而红,且文档中的打包流程按现状走不完。 退一步看:这是一个构思良好的 PR。把白标入口恢复为零侵入的构建时技能、而不是在出货的 Tauri shell 里加品牌化钩子——正是最小路径;契约忠实继承了旧技能的承诺(两个输入,产出品牌包)。默认清空 updater endpoints 是个细心的安全细节。半年后维护这段代码,只会感谢作者。 但 CI 刚刚拒绝了它,我不能批准。lint 失败就出在新增文件上—— @yiliang114,另有两件事务性事项:本 PR 与 #10164 重复(同分支同 SHA),请关闭其一;模板的 就 lint 失败请求修改;其余见上方审查评论。方向本身完全支持。🙏 — Qwen Code · qwen3.8-max Reviewed at |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
CI lint is failing on the new file itself (7 no-undef errors), and the SKILL.md packaging steps can't complete without a root install — details in my review comment above. Both are quick fixes; the direction has my full support. 🙏
What this PR does
Restores the desktop brand builder skill for the Tauri shell at
packages/desktop-shell/.agents/skills/desktop-brand-builder/, replacing the Electron-era skill that was removed together withpackages/desktopin #9085. The skill keeps the original contract — a branded desktop package from a minimalbrandId+logo— but targets the Tauri shell's branding hooks instead of the Electron build tree:src-tauri/tauri.conf.json(productName, identifier, shortDescription, updater endpoints), thesrc-tauri/icons/set, and thebootstrap/startup UI. The bundledbrand-create.mjsis dependency-free plain Node (desktop-shell uses npm, not bun), regenerates the full icon set viatauri icon, and empties the updater endpoints by default so a branded build can never poll the official feed or be updated by it.Why it's needed
The Electron removal in #9085 deleted the only white-label customization path (
desktop-brand-builder+ multi-brand support from #4581). The Tauri shell currently serves a single brand, and any downstream that wants a custom desktop client (the way OpenWork used the old skill before forking) has no entry point and would have to rediscover the branding hooks by hand. This restores that capability on the new architecture before the knowledge of what needs patching fades. Follow-up to the direction set in #8092.Reviewer Test Plan
How to verify
Confirm: summary JSON reports
appName: "Acme AI",appId: "ai.acme.desktop";/tmp/ds-test/src-tauri/tauri.conf.jsonhas the new productName/identifier and empty updater endpoints;grep -c "Qwen Code" /tmp/ds-test/bootstrap/index.html /tmp/ds-test/bootstrap/bootstrap.jsreturns 0 for both; icons under/tmp/ds-test/src-tauri/icons/are regenerated. Invalid input is rejected: abrandIdofBad_IDexits 1 with the regex message.Evidence (Before & After)
N/A (agent skill + build script, no user-visible UI change). Local run output:
Tested on