Proxy Broker
Proxy Broker 是 standalone Rust service,用于加载 mihomo subscriptions,按 IP 构建带 probe/geo metadata 的代理池,按选择的 IP 开关本地 proxy listener sessions,并从同一 binary 提供 Bun-built operator web console。README.
- Rust web service
- Embedded admin UI
- React app
- shadcn/ui
- SQLite
- Storybook accessibility
- Storybook component QA
- Playwright e2e
- Dockerized dev
- Service ports
- PR label release
- GitHub Actions scheduling
- Release failure notification
目录
技术栈
运行与交付
- CI 工作流
- ci-main.yml
- ci-pr.yml
- label-gate.yml
- notify-release-failure.yml
- release.yml
- 能力标记
- cargo_toml
- dockerfile
- github_actions
配置与质量
- 配置文件
- .dockerignore
- .gitignore
- Cargo.toml
其他信息
- Cargo
- 开发依赖
- tower
- Deps main
- anyhow
- async-stream
- async-trait
- axum
{
"cargo": {
"deps_dev": [
"tower"
],
"deps_main": [
"anyhow",
"async-stream",
"async-trait",
"axum",
"base64",
"clap",
"flate2",
"futures-util",
"maxminddb",
"mime_guess",
"nanoid",
"reqwest",
"serde",
"serde_json",
"serde_yaml",
"sha2",
"sqlx",
"thiserror",
"tokio",
"tracing"
]
},
"ci_workflows": [
"ci-main.yml",
"ci-pr.yml",
"label-gate.yml",
"notify-release-failure.yml",
"release.yml"
],
"configs_root": [
".dockerignore",
".gitignore",
"Cargo.toml"
],
"markers_present": [
"cargo_toml",
"dockerfile",
"github_actions"
]
}Purpose
Proxy Broker 是 standalone Rust service,用于加载 mihomo subscriptions,按 IP 构建带 probe/geo metadata 的代理池,按选择的 IP 开关本地 proxy listener sessions,并从同一 binary 提供 Bun-built operator web console。README.md 明确它默认绑定 loopback,保护 API 需要 Forward Auth identity headers 和 owner-scoped API keys。
Taxonomy
- Tags: Rust web service, Embedded admin UI, React app, shadcn/ui, SQLite, Storybook accessibility, Storybook component QA, Playwright e2e, Dockerized dev, Service ports, PR label release, GitHub Actions scheduling, Release failure notification
- Why / evidence: 这些 tags 来自 checked-out repo 和 catalog record。主要证据包括
README.md、Cargo.toml、build.rs、Dockerfile、web/package.json、web/components.json、web/.storybook/main.ts、web/playwright.config.ts。Topic token 的大小写以对应技术/工作流的官方写法为准;slug 只作为稳定 ID,不直接充当项目标题。
Repository map
Cargo.toml是 Rust service manifest,build.rs和web/dist嵌入把前端打包进后端 binary。web/是 React/Vite/shadcn/ui 控制台,web/components.json、@storybook/addon-a11y、Playwright config 和 verify-stories 脚本都在这里。Dockerfile与.dockerignore是 container delivery 证据。docs/和deploy/保存部署/运维配置。
Runtime and delivery
服务默认 host/session listener 都在 loopback;Web dev 明确端口 38181/38182/38183,Storybook/preview/e2e 均有 strict local ports。SQLite 用于 session/config/audit 类低运维持久层。Dockerfile 支撑单 artifact 部署。
Architecture notes
核心边界是“subscription ingestion -> IP pool/probe metadata -> listener session -> embedded admin console”。Forward Auth 和 owner API key 是 human admin access 的安全层;React UI 不能绕过后端授权。shadcn/ui 组件层服务于 operator console,不是独立设计系统。
证据锚点:README.md。
Workflow and quality gates
ci-main.yml、ci-pr.yml、label-gate.yml、release.yml、notify-release-failure.yml 构成 release path。Web 子项目还要求 verify:stories、test-storybook、Playwright e2e 和 Biome/typecheck。Storybook a11y 证据来自 @storybook/addon-a11y 和 .storybook/main.ts。
.github/workflows/ci-pr.yml 的 edited metadata 重验复用可取消的 per-PR concurrency group;它属于 GitHub Actions scheduling 的后续同步对象,当前 snapshot 只记录证据,不预设修复 YAML。
Reusable decisions
- 本地安全默认值用 loopback binding,公开部署交给反向代理/Forward Auth。
- 嵌入式 admin UI 与 Rust binary 一起发布,减少部署组件数量。
- Storybook 既做组件覆盖,也做 a11y sweep,适合 shadcn/ui 操作台。
Risks and open questions
- 代理 listener 暴露地址是安全边界,修改 default bind 必须谨慎。
- subscription/probe metadata 可能包含敏感信息,日志和 UI 展示要审查。
- Docker + embedded UI release 需要同时验证前端 build 与 Rust build。
Evidence index
README.mdCargo.tomlbuild.rsDockerfileweb/package.jsonweb/components.jsonweb/.storybook/main.tsweb/playwright.config.tsweb/scripts/verify-stories.tsdocs/deploy/.github/workflows/label-gate.yml.github/workflows/release.yml.github/workflows/notify-release-failure.yml
相关内容
Dockerized dev
主题Dockerized dev 标记 Dockerfile、Compose 或 container build 是本地开发、集成验证或部署交付的一等路径。它不表示“仓库里偶然有 Dockerfile”,而是 Docker 影响运行环境、数据卷、端口、build args、嵌入式前端产物或 release artifact。
Embedded admin UI
主题Embedded admin UI 表示 operator/admin UI 不是独立部署的前端产品,而是主服务交付物的一部分,通常由同一个 release binary、同一个镜像或同一个部署单元一起提供。这里的重点是交付和边界耦合,而不是框架选型。 这个 Topic 用来回答“控制台为什么要随服务一起发、一起验、一起部署”。
GitHub Actions scheduling
主题GitHub Actions scheduling 表示仓库把 workflow 触发事件、并发 namespace、cancel-in-progress 和 required check 可见性组织成可审计的运行调度合同。目标不是让每个事件只跑一次,而是让当前 PR head 获得正确且可观察的 gate,同时不让无关 PR、main、deploy 或手工任务被同一个并发键误取消。
Playwright e2e
主题Playwright e2e 指仓库把真实浏览器里的关键用户流程当成正式质量门禁,而不是“顺手写了几条页面脚本”。它强调的是产品行为验证:路由、认证、交互链路、浏览器 API、嵌入式控制台或多 runtime 页面组合,必须在接近真实使用路径的浏览器环境里被证明可用(projects/blog-26.md、projects/proxy-broker.md、projects/octo-rill.
PR label release
主题PR label release 是逐 PR 的产品发布协议:PR labels 只提供经过 gate 验证的发布操作与发布阶段;最高的合格 final vX.Y.Z Git release tag 是唯一数字版本基线,VERSION 只锁定 trusted preparation 已决定的精确产品版本。label 不能计算、覆盖或为版本提供 fallback。
Quality gates
主题Quality gates 表示仓库把“什么叫可以合并、什么叫可以发布”写成了显式、可审计的契约,并通过本地脚本、CI workflows、review/signature policy、GitHub required checks 或同类机制把它执行出来。它关注的是 gate contract,而不是某一门具体技术。 这个 Topic 用来回答“仓库怎样防止低质量或不完整的改动穿过默认分支”。
React app
主题React app 标记 React 是主要用户界面、管理台、控制台或嵌入式操作面 runtime。这里关心的是 route、component tree、client state、表单流、dashboard 交互和前端构建后的真实运行边界,而不是“项目依赖里有 React”。 这个 Topic 用来回答“用户实际操作的是不是一个 React runtime,以及它在系统里承担什么职责”。
Release failure notification
主题Release failure notification 指一个仓库为所有“预期成功但最终以 failure 结束”的交付 workflow 建立显式、可审查的告警路径。范围包括 release、deploy、CI、Docs Pages 和 required gate,但必须由 checked-in allowlist 声明;成功、skipped、cancelled 和通知 workflow 自身不属于通知条件。
Rust web service
主题Rust web service 表示 Rust binary 承担长期运行的服务职责:提供 HTTP API、proxy、SSE、docs/data service、admin backend 或 ops daemon,并对外暴露稳定的网络、存储和部署边界。这里的关键词不是“Rust”,而是“服务进程”。 这个 Topic 不只是“语言是 Rust”。
Service ports
主题Service ports 表示端口号、bind 地址、dev/prod 暴露方式和多组件端口分工本身就是仓库的稳定 contract。它不是“服务都会有端口”这种空泛事实,而是说端口设计会直接影响本地预览、反向代理、权限边界、自动化脚本和故障排查。 这个 Topic 关注的是端口作为系统边界的那一面。
shadcn/ui
主题shadcn/ui 表示项目采用官方 shadcn/ui 风格的 checked-in component layer:components.json、@/components/ui aliases、Radix primitives、Tailwind utilities、class-variance-authority、tailwind-merge、clsx 和 Lucide icons 共同构成组件约定。
SQLite
主题SQLite 表示项目把 SQLite 作为默认持久层、ledger、audit log、content/settings store 或低运维 embedded database,并围绕它建立路径、schema、迁移、volume、备份和运行时 ownership 约定。它不是“依赖树里有 sqlite”这么宽,而是数据库文件本身已经成为系统 contract 的一部分。
Storybook accessibility
主题Storybook accessibility 表示 Storybook 不只是组件展示,还明确引入 a11y audit 能力,通常是 @storybook/addon-a11y 或等价的 browser-backed Axe sweep。它关注 story-level 可访问性信号,例如对比度、ARIA 基础错误、表单语义和交互状态,而不是泛化的 Storybook 文档能力。
Storybook component QA
主题Storybook component QA 表示仓库把 Storybook 当作组件级文档、状态枚举、视觉检查或 interaction smoke 的稳定入口。它不等同于 Storybook accessibility:只有项目明确引入 a11y addon 或等价 Axe sweep 时,才同时打 accessibility Topic。这个拆分用于避免“只要有 Storybook 就叫 a11y”的误判。
TypeScript web
主题TypeScript web 表示项目把 TypeScript 作为一个或多个 Web surface 的主语言,并围绕它建立 workspace scripts、typecheck、bundler、lint/format、env contract 和前端构建门禁。这里的主语不是“仓库里出现了 .ts 文件”,而是 TypeScript 已经决定了维护者怎样启动、构建、校验和交付实际 Web surface。