为稳定切换到 v2 请求链路并提升多账号可控性,统一代理/并发治理与管理台配置体验#6
Merged
Merged
Conversation
本次提交围绕两个核心目标展开:第一,后端从旧浏览器脚本路径收敛到更稳定的 node-wreq / Rust FFI 方向,并补齐按账号代理、Resin 粘性代理、并发配额等生产能力;第二,前端管理台进行系统化视觉与交互重构,使新增配置在 UI 可配置、可观察、可验证。 后端与构建链路变更(逐文件): - .gitignore:新增 wreq-ffi 构建产物忽略规则(target、生成头文件、Cargo.lock 等),避免 FFI 编译中间产物污染仓库。 - Dockerfile:重构为前端 + Rust + Go 多阶段构建;新增 rust-builder 产出 libwreq_ffi.a / wreq_ffi.h;在 go-builder 阶段注入 wreq_ffi 构建标签并增加跨架构产物校验(amd64/arm64),提升镜像可重复性和错误可诊断性。 - README.md:更新本地运行/构建说明(标准化 go run / go build);补充代理模式、环境变量优先级、Resin 粘性代理语义、部署与使用建议,文档与新配置保持一致。 - cmd/notion2api/main.go:启动时打印当前 wreq backend 版本标识,便于快速判断运行链路(linked/unlinked)。 - config.example.json:补齐 proxy_mode/proxy_url/proxy_http_url/proxy_https_url/resin_* 与示例账号级配置(含 sticky_proxy_account、max_concurrency),同步新版默认端口与字段语义。 - docker-compose.yml:增加镜像、容器名、端口、重启策略、Dockerfile 的环境变量化入口,支持更灵活部署参数注入。 后端核心逻辑(逐文件): - internal/app/config.go: - NotionAccount 新增 max_concurrency 与账号级代理/Resin字段; - AppConfig 新增全局代理/Resin字段; - 新增 proxy mode 规范化、N2A_* 环境变量解析、按协议代理变量优先级解析、配置归一化与 CLI 参数接入; - 使配置来源(文件/CLI/环境)合流后可稳定落地。 - internal/app/proxy_policy.go(新增): - 定义 ProxyPolicy/ResinPolicy; - 实现全局策略与账号覆盖的合并规则; - 统一 resin_forward 与普通代理模式的策略出口。 - internal/app/proxy_resolver.go(新增): - 实现按请求 URL + 账号解析代理地址; - 在 resin_forward 下生成带平台/账号语义的代理认证信息及附加头; - 统一返回 proxy URL + extra headers,供登录链路与推理链路复用。 - internal/app/main.go: - 在 ServerState 新增账号并发槽位状态(in-flight / max); - 新增 TryAcquire/Release/Remaining/Available 等配额函数; - 配置热更新时重建并发槽位; - 为上游错误映射新增并发容量类错误出口。 - internal/app/request_dispatch.go: - 新增 dispatch capacity exceeded 错误类型; - 账号池调度时加入并发槽位获取/释放; - 无可用并发时返回明确容量错误,避免请求无界堆积; - 流式与非流式路径均接入同一配额控制。 - internal/app/account_pool.go: - runPromptWithSession / runPromptWithSessionWithSink 增加 accountEmail 透传; - 使下游 client 能按账号解析代理与附加头。 - internal/app/notion_client.go: - NotionAIClient 新增 AccountEmail 与 ProxyResolver; - client 构造函数改为接收 accountEmail; - 请求发送前按 URL + 账号解析代理,并注入 extra headers(如 Resin 账号头); - 增加基于 http.Header 的调试抓取辅助函数。 - internal/app/login_helper.go: - 将旧 newNotionLoginHTTPClient 收敛为 newNotionLoginSession(包含 ProxyResolver、账号信息); - 登录相关 API 调用函数统一改为接收 loginHTTPSession; - 让登录流程与推理流程共享同一代理解析策略,减少链路分叉。 - internal/app/session_refresh.go: - 刷新会话时改用 login session + resolver; - cookie 恢复、bootstrap、登录验证阶段全部对齐新会话结构。 - internal/app/account_discovery.go: - 元数据探测流程改用 loginHTTPSession; - discoverImportedAccountMetadata 增加 accountEmail 入参,支持按账号代理策略进行探测。 - internal/app/conversations.go: - notionClientForAccount 创建客户端时传入账号邮箱,确保会话查询链路可使用账号级代理策略。 - internal/app/admin_accounts.go: - 管理台账号摘要新增 max_concurrency 输出; - 编辑接口支持 max_concurrency 解析与校验; - 账号测试、导入登录、验证码登录流程透传 accountEmail 到统一链路。 - internal/app/admin.go: - 更新欢迎页样式与文案,品牌视觉升级并与新管理台主题统一。 - internal/app/notion_client_browser_transport.go: - 大幅删减旧 Playwright 脚本嵌入逻辑; - 收敛为 node-wreq helper 运行主路径,统一 helper 子进程执行函数; - 请求结构新增 proxy/browser profile 等字段; - 与 ProxyResolver 打通,支持账号级代理透传。 - internal/app/notion_client_wreq_transport.go(新增): - 内置 node-wreq 执行脚本模板; - 包含常规推理与登录辅助脚本,实现 cookie 同步、超时、代理透传、NDJSON 读取等能力。 - internal/app/notion_client_login_transport.go(新增): - 定义登录 helper 的请求/响应结构; - 封装登录请求构建、set-cookie 回写、header 归一化; - 登录 helper 与主推理 helper 在协议层保持一致。 - internal/wreq/doc.go(新增):wreq 包入口占位,明确后续扩展边界。 - internal/wreq/wreq_cgo.go(新增): - 增加 `//go:build wreq_ffi`; - 增加 cgo preamble(头文件与静态库链接); - 封装 Go -> C ABI 请求与响应编解码、资源释放与版本读取。 - internal/wreq/wreq_stub.go(新增): - 增加 `//go:build !wreq_ffi`; - 在未链接 FFI 时提供 ErrNotLinked stub,保证默认构建可运行且可降级。 - wreq-ffi/Cargo.toml(新增):声明 staticlib crate、运行时/序列化依赖与 release 配置。 - wreq-ffi/src/lib.rs(新增): - 实现 WreqClient C ABI(new/free/request/string_free/version); - 使用 tokio runtime + wreq 执行请求; - 统一 JSON 协议与错误信封格式; - 包含 base64 编解码与 panic 防护。 - wreq-ffi/build.rs(新增):构建时自动生成 C 头文件,保证 ABI 同步。 - wreq-ffi/cbindgen.toml(新增):定义头文件导出规范与 include guard。 - wreq-ffi/README.md(新增):说明 ABI 面、内存归属、JSON 协议、构建方式。 - wreq-ffi/.gitignore(新增):忽略 Rust 构建产物与生成头文件。 - internal/app/notion_client_browser_transport_test.go(删除):移除与旧 Playwright 路径强耦合的测试,避免与新 helper 架构冲突。 测试与回归(逐文件): - internal/app/notion_client_protocol_test.go: - 适配新客户端构造签名; - 新增 Resin 账号头注入行为测试,验证代理附加头逻辑。 - internal/app/main_fresh_thread_test.go: - 新增 max_concurrency 默认值归一化测试; - 新增 dispatch capacity 错误映射与全槽位占用测试,覆盖并发治理关键路径。 - internal/app/notion_client_best_effort_test.go: - 适配 newNotionAIClient 新签名(增加 accountEmail 传参)。 前端管理台重构(逐文件): - frontend/package.json:移除 @radix-ui/themes 依赖,收敛到当前 UI 栈。 - frontend/app/layout.tsx:接入 Plus Jakarta Sans / JetBrains Mono 并注入 CSS 变量;移除旧主题样式耦合。 - frontend/app/globals.css:重建全局设计令牌(字体、圆角、色彩、层次、渐变、容器宽度等),统一后台页面视觉基线。 - frontend/components/layout/theme-provider.tsx:去除 Radix Theme 包装依赖,精简主题提供逻辑,保留 accent 管理。 - frontend/components/admin/shared.tsx:重写通用组件(PanelHeader/InfoCard/MetaTile/Subsection/JsonPreview 等),统一卡片、标题、信息栅格和复制交互。 - frontend/components/admin/admin-console.tsx:重整控制台骨架、顶部控制区、错误/加载态展示与 tab 内容组织。 - frontend/components/admin/admin-sidebar.tsx:重构侧边栏信息架构(workbench/config 分组)与视觉态,优化移动端/桌面端切换表现。 - frontend/components/admin/dashboard-panel.tsx:强化状态指标与开关展示(badge/icon),提高配置可读性。 - frontend/components/admin/settings-panel.tsx:大幅扩展设置面板分区与字段展示,接入新增代理/Resin/请求相关配置,增强提示与预览能力。 - frontend/components/admin/accounts-panel.tsx: - 新增/接入账号 max_concurrency 编辑展示; - 优化详情布局、编辑区、探测区与状态片显示; - 与后端字段语义保持一致。 - frontend/components/admin/models-panel.tsx:优化模型列表卡片态与详情展示层次。 - frontend/components/admin/conversations-panel.tsx:优化会话项样式、选择摘要、流状态显示与批量操作区域。 - frontend/components/admin/tester-panel.tsx:增强功能开关卡片、文件附件展示、结果预览区与操作反馈。 - frontend/components/admin/login-overlay.tsx:重构登录浮层视觉(背景光斑、层次、提示)与交互细节。 - frontend/components/ui/badge.tsx:更新 badge 视觉规格(字号、圆角、focus ring、色板)。 - frontend/components/ui/button.tsx:重设按钮尺寸、层次、hover/active/focus 反馈。 - frontend/components/ui/card.tsx:统一 card 边框、阴影、间距与标题描述样式。 - frontend/components/ui/dialog.tsx:调整遮罩/弹层动画与视觉参数。 - frontend/components/ui/input.tsx:统一输入框高度、padding、状态反馈与禁用态。 - frontend/components/ui/scroll-area.tsx:微调滚动条样式与边框一致性。 - frontend/components/ui/select.tsx:统一 trigger/content/item 的视觉与交互状态。 - frontend/components/ui/switch.tsx:调整开关尺寸、轨道、thumb 动效与状态色。 - frontend/components/ui/table.tsx:优化表头、行 hover、边框与选中态反馈。 - frontend/components/ui/tabs.tsx:重设 tabs 容器与激活态视觉层次。 - frontend/components/ui/textarea.tsx:统一文本域排版、选择态与边框/阴影反馈。 - frontend/lib/services/admin/types.ts:AccountItem 新增 max_concurrency 可选字段,匹配后端返回结构。 Constraint: 提交必须排除并且不描述 .omx 路径内容;同时保持 OpenAI 兼容 API 行为不回退 Rejected: 继续保留 Playwright 浏览器抓取主链路 | 维护成本高且与账号级代理/并发治理耦合不清 Confidence: medium Scope-risk: broad Directive: 后续若调整代理策略或登录链路,必须同步更新 ProxyResolver、login session、request dispatch 与 admin types,避免字段漂移 Tested: go test ./...;go build ./cmd/notion2api Not-tested: 前端构建与端到端 UI 回归未在本次提交中执行;本地未验证 -tags wreq_ffi 全链路产物生成
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
本次提交围绕两个核心目标展开:第一,后端从旧浏览器脚本路径收敛到更稳定的 node-wreq / Rust FFI 方向,并补齐按账号代理、Resin 粘性代理、并发配额等生产能力;第二,前端管理台进行系统化视觉与交互重构,使新增配置在 UI 可配置、可观察、可验证。
后端与构建链路变更(逐文件):
后端核心逻辑(逐文件):
//go:build wreq_ffi;//go:build !wreq_ffi;测试与回归(逐文件):
前端管理台重构(逐文件):
Constraint: 保持 OpenAI 兼容 API 行为不回退
Rejected: 继续保留 Playwright 浏览器抓取主链路 | 维护成本高且与账号级代理/并发治理耦合不清
Confidence: medium
Scope-risk: broad
Directive: 后续若调整代理策略或登录链路,必须同步更新 ProxyResolver、login session、request dispatch 与 admin types,避免字段漂移
Tested: go test ./...;go build ./cmd/notion2api
Not-tested: 前端构建与端到端 UI 回归未在本次提交中执行;本地未验证 -tags wreq_ffi 全链路产物生成