Skip to content

feat(web): 内嵌 Web 管理面板(账号池监控/一键任务/OAuth 登录,go:embed 单容器) - #60

Open
leiyiyan wants to merge 7 commits into
Sliverkiss:masterfrom
leiyiyan:web-integration
Open

leiyiyan wants to merge 7 commits into
Sliverkiss:masterfrom
leiyiyan:web-integration

Conversation

@leiyiyan

Copy link
Copy Markdown

动机

网关缺少网页端管理面板,账号池状态(积分/签到/猫猫旅行/token 健康)只能靠日志与 CLI 观察。

方案

  • internal/web 薄壳:全部 /api/* 接口直接复用网关自身服务(pool/upstream/调度同语义),前端 Vue3 SPA 经 go:embed 内嵌,单容器单端口同时服务 /v1 与面板
  • 顶层 mux 精确匹配 /v1/status/healthzGET / 兜底;/api/*/v1 共用同一把 api_key
  • 调度器零改动;一键任务直接调用上游原语(签到/保活/旅行/活跃/积分),语义与调度器同轨(禁用跳过/12153 计数/活跃 N 条+streak 回读)
  • config.json 新增 web.disabled(缺省 false=启用),可一键关闭

功能

  • 账号池卡片:积分富版(套餐明细/7天到期预警)/签到状态/猫猫旅行状态机/12153 徽标,单账号探测与任务
  • 一键任务 + 全量探测(批量,逐账号结果)
  • Token 与积分统计(请求行 hook 聚合)、请求级日志/stdout 环形缓冲
  • OAuth 设备登录(cmd/login 流程库化),浏览器内完成账号入池
  • 密钥门:localStorage Bearer + 401 弹解锁

触碰面(重基冲突面最小化)

新增 internal/web/web/;仅追加式触碰:main.go(+mux 组合)、server/logging.go(+ChatRow hook)、cmd/server/config.go(+web 段)、upstream/travel.go(TravelState 扩展字段)、Dockerfile(+node 构建阶段)。

测试

  • internal/web/internal/upstream 单测全绿(探测解析/签到回退/套餐聚合/统计)
  • 真实 4 账号冒烟:探测 4/4、chat-test 回环、OAuth 流程、SPA 静态托管均验证通过

- webprobe.go: CheckinStatus(POST 双端点回退)、UserResourceRich(套餐聚合/
  FIELD_FAMILIES 首个正值族/到期键/2位小数)、ParseTsMs 动态时间戳
- weboauth.go: OAuth 设备登录三步(state/poll/account)从 cmd/login 库化,
  业务 code 非 0 归一为 waiting(11217 login ing)
- travel.go: TravelState 扩展 location/buddy_id/depart/arrive/server_now
  (json.RawMessage 动态类型 + ParseTsMs 归一)
- internal/web: /api/* 全部接口(账号/探测/任务/OAuth/网关观测/统计) +
  SPA 静态托管;与 Node 版前端契约逐字对齐(camelCase/错误信封)
- 任务语义与调度器同轨(禁用跳过/12153计数/活跃N条+streak回读),
  直接调用上游原语以捕获逐账号结果;调度器零改动
- server/logging.go: ChatRow hook(完整模型/uid8/原始行),logChatRow 打印后通知
- main.go: 顶层 mux 精确匹配 /v1、/status、/healthz 后 GET / 兜底 web.Handler;
  log.SetOutput MultiWriter 镜像 stderr 入管理台环形缓冲;回环地址归一 127.0.0.1
- config.go: web.disabled(缺省 false=启用)
- pool: Status 增加 SessionDeadFails(12153 徽标预警)
- web/: Vue3 SPA(vite outDir→internal/web/dist);api 密钥门(localStorage
  Bearer + 401 弹出解锁);设置页改为只读网关信息+密钥+主题;自动化页只读
  排程+立即执行+近期事件
- Dockerfile: node:22-alpine webbuild 阶段构建 dist 供 go:embed
- .gitignore/.dockerignore: dist 产物与 node_modules 排除
@github-actions github-actions Bot added the enhancement New feature or request label Sep 13, 2026
@github-actions

Copy link
Copy Markdown

🤖 当前为 dry-run 模式(演练):机器人已分析此 issue,但不会关闭或创建任何 issue。下面是它本应执行的动作。

本应执行:新建 canonical issue(并打标签 canonical,enhancement);规范化标题;正文顶部追加关联块

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant