IsolaPurr USB Hub
IsolaPurr USB Hub 是带 USB-C 上行、USB-C 下行和 USB-A 下行的有源 USB 集线器/供电模块。README.md 记录 CH334P、URB2405S、CH224Q、TPS55288、SW2303/IP6557、DC5025 输入和理想二极管 OR-ing 等硬件方案,说明这是硬件/固件/Web/文档一体的 device mono-repo。
- Device mono-repo
- Progressive web app
- Application icon
- Web demo
- ESP32 firmware
- Embedded device control plane
- GitHub Actions scheduling
目录
技术栈
运行与交付
- CI 工作流
- ci.yml
- dependency-review.yml
- desktop.yml
- firmware.yml
- lint-pr-title.yml
- pages.yml
- 能力标记
- bun_lock
- cargo_toml
- github_actions
- package_json
依赖与工具
- package.json
- 开发依赖
- @commitlint/cli
- @commitlint/config-conventional
- commitlint-plugin-function-rules
- 项目脚本
- commitlint
配置与质量
- 配置文件
- .gitignore
- Cargo.toml
- lefthook.yml
- mcu-agentd.toml
- package.json
- rust-toolchain.toml
其他信息
- Cargo
- Deps main
- allocator-api2
- critical-section
- defmt
- embassy-executor
{
"cargo": {
"deps_main": [
"allocator-api2",
"critical-section",
"defmt",
"embassy-executor",
"embassy-futures",
"embassy-net",
"embassy-sync",
"embassy-time",
"embedded-graphics-core",
"embedded-hal",
"embedded-hal-async",
"esp-alloc",
"esp-backtrace",
"esp-bootloader-esp-idf",
"esp-hal",
"esp-println",
"esp-radio",
"esp-rtos",
"gc9307-async",
"heapless"
]
},
"ci_workflows": [
"ci.yml",
"dependency-review.yml",
"desktop.yml",
"firmware.yml",
"lint-pr-title.yml",
"pages.yml"
],
"configs_root": [
".gitignore",
"Cargo.toml",
"lefthook.yml",
"mcu-agentd.toml",
"package.json",
"rust-toolchain.toml"
],
"markers_present": [
"bun_lock",
"cargo_toml",
"github_actions",
"package_json"
],
"package_json": {
"deps_dev": [
"@commitlint/cli",
"@commitlint/config-conventional",
"commitlint-plugin-function-rules"
],
"scripts": [
"commitlint"
]
}
}Purpose
IsolaPurr USB Hub 是带 USB-C 上行、USB-C 下行和 USB-A 下行的有源 USB 集线器/供电模块。README.md 记录 CH334P、URB2405S、CH224Q、TPS55288、SW2303/IP6557、DC5025 输入和理想二极管 OR-ing 等硬件方案,说明这是硬件/固件/Web/文档一体的 device mono-repo。
Taxonomy
- Tags: Device mono-repo, Progressive web app, Application icon, Web demo, ESP32 firmware, Embedded device control plane, GitHub Actions scheduling
Repository map
hardware/、docs/hardware-variants.md和vendor/保存硬件资料。src/是 ESP32-S3 firmware,Cargo.toml使用esp-hal、gc9307-async、ina226等 embedded/display/current-sense 依赖。web/是 React/Vite UI,包含 PWA manifest/service worker、Storybook、Playwright e2e 和 unit tests。mcu-agentd.toml声明usb_hubespflash target。
Runtime and delivery
固件通过 Cargo/espflash 构建烧录;web dev 默认 45173,preview 45175,Storybook 46006,test-storybook 静态服务 46106。.github/workflows/pages.yml、web/README.md 与 docs/web-ui-interaction-spec.md 还把 GitHub Pages、PNA/CORS、Base URL、installable PWA app shell、prompt 型 service worker 更新,以及 install icon 的内容哈希版本后缀写成正式运行 contract,说明这个前端不仅是本地工具,也承担 owner-facing / public-facing 的正式演示与安装 surface。这些端口属于项目脚本默认,不代表当前 Codex 预览可直接复用。
Architecture notes
架构由电源路径和 USB data path 决定:上行供电/数据、隔离 DC/DC、下行 PD 可调输出和双电源 OR-ing 必须保持文档/固件/UI 对齐。ESP32-S3 firmware 负责显示、测量、控制或状态上报,Web UI 是开发/展示辅助面。
证据锚点:README.md。
Workflow and quality gates
.github/workflows/ci.yml、dependency-review.yml、desktop.yml、firmware.yml、pages.yml、lint-pr-title.yml 拆分 firmware/web/docs/desktop/依赖审查。根 package.json 负责 commitlint,web 子项目负责前端质量。
.github/workflows/pages.yml 同时响应 PR、merge_group 和 workflow_dispatch,却使用全局 pages concurrency group 且允许取消在途运行;PR build、merge-queue gate 和手工 backfill 不应互相抢占。这个跨事件调度风险由 GitHub Actions scheduling 记录,Quality gates 负责保留可见的交付门禁。
Reusable decisions
- 硬件 variant 写进 docs,而不是只靠 README 列表。
- mcu-agentd 配置固定 ESP32-S3 flashing,方便多 Agent 操作。
- Web UI 端口脚本明确,但预览必须遵守全局端口租约。
- Web demo 直接复用正式 dashboard/device routes,再通过 Pages 托管与 Base URL / PNA 接入保持真实产品体验,不把演示面退化成文档页或组件画廊。
- PWA install metadata 视为 runtime contract,而不是纯视觉资源:
manifest、theme-color、favicon、apple-touch-icon、offline app shell 与更新提示都需要和真实路由、真实部署入口一起维护;install icon 变更时必须让 URL 一起变化,避免 Chrome/macOS 已安装 surface 长期复用旧缓存。 - regular 与 maskable install icon 分别生成并拥有内容版本 URL;产品 mark 的视觉几何、maskable 安全区和 Apple 派生物由
Application iconTopic 约束,PWA 运行时只消费这些明确角色的资产。
Risks and open questions
- 硬件方案存在多 variant,Topic 不能只说“USB hub”。
- PD/PPS/AVS 能力由具体芯片侧控制,不能从标签自动推断实现完整。
- Storybook component QA 不等于硬件验证。
Evidence index
README.mdCargo.tomlhardware/docs/hardware-variants.mdmcu-agentd.tomlweb/package.jsonweb/vite.config.tsweb/src/pwa/sw.tsweb/scripts/check-pwa-assets.pyweb/public/manifest.webmanifestweb/README.mddocs/web-ui-interaction-spec.mdweb/.storybook/main.ts.github/workflows/firmware.yml.github/workflows/pages.yml.github/workflows/ci.yml
相关内容
Application icon
主题Application icon 记录的是一个产品在安装、主屏、任务栏、Dock 或浏览器应用窗口里被识别时所使用的图标 contract。它区分产品的原始 mark、给普通上下文使用的 regular any icon、可被平台裁切的 maskable icon、Apple touch icon,以及原生 app bundle 图标;它不把这些角色混成一张“看起来像应用图标”的 PNG。
Device mono-repo
主题Device mono-repo 表示一个仓库同时承载硬件资料、固件、Web/desktop UI、docs/specs、测试工具或发布流程。它强调边界协调:硬件、firmware、UI 和文档互相影响,不应把仓库当作单一应用。 这个 Topic 的核心是设备级知识不能被某一个技术栈吞掉。
Embedded device control plane
主题Embedded device control plane 表示设备把 ESP32-S3 作为正式控制面 MCU,并依赖其板载 USB 与 Wi‑Fi 同时承载本地与局域网控制入口。这里的主语不是“某一种传输协议”,而是 devd、CLI、Web App、可选 desktop/local agent、Web Serial 与 native USB 如何围绕同一设备事实、安全边界、发现机制、连接 ownership 和运行态协议协作。
ESP32 firmware
主题ESP32 firmware 表示项目把 ESP32 家族 MCU 作为正式固件目标来维护,并围绕 toolchain、烧录、板级职责、连接能力和与其他 MCU/上位机的分工建立了稳定约定。这里的重点不是“芯片型号”,而是 ESP32 在系统里承担什么角色。 这个 Topic 往往不只是单片机源码。
GitHub Actions scheduling
主题GitHub Actions scheduling 表示仓库把 workflow 触发事件、并发 namespace、cancel-in-progress 和 required check 可见性组织成可审计的运行调度合同。目标不是让每个事件只跑一次,而是让当前 PR head 获得正确且可观察的 gate,同时不让无关 PR、main、deploy 或手工任务被同一个并发键误取消。
Progressive web app
主题Progressive web app 在这套 playbook 里不是“网页顺手带个 manifest”的统称,而是“把一个 Web surface 当成可安装应用去维护”的工程模式。
Web demo
主题Web demo 表示仓库刻意提供一个可直接给 owner、评审者或潜在用户体验的 Web 演示面,而且这个演示面复用正式产品前端与正式路由,而不是单独做一套只用于截图的 demo 页面。它允许用 mock backend、simulation device、read-only seed data 或等价安全输入来稳定复现产品行为,但默认不要求接入真实生产登录、真实后端写路径或真实硬件危险写操作。