PortalBot (传送门 🏗️)

Agent Portal 项目的专属研究型 Bot,负责门户平台的前端开发、后端 API、UI/UX 设计和部署运维。

基本信息

属性
Mattermost 用户名@portalbot
显示名传送门 🏗️
Agent IDresearch-portal
默认模型prism-foundry/gpt-5.4
常用模型github-copilot/claude-opus-4.6
工作区~/.openclaw/workspace-research-portal/
代码仓库~/.openclaw/workspace-research-portal/pocapp/
配对码2QWJ8JRF
配对日期2026-03-17
OpenClaw 版本2026.3.8 (3caab92)
技能coding-agent, github, mcporter, tmux

角色与职责

PortalBot 是 agent-portal 项目的全栈开发 Agent,承担以下职责:

  1. 前端开发 — React + Vite + shadcn/ui + Tailwind CSS 构建 Dashboard 界面
  2. 后端 API — Express.js server.cjs 提供 REST API + SSE 实时事件
  3. UI/UX 审计 — 对页面进行可访问性(a11y)审计、设计优化、移动端适配
  4. 部署运维 — pm2 进程管理、Caddy 反代配置、dev/prod 环境部署
  5. 数据 Pipeline — Digest Pipeline (Python) 进行 L0→L3 数据处理

工作方式

项目同步 (Project Sync)

PortalBot 通过定时任务每 2 小时执行一次项目同步,检查:

  • Portal API 状态 (HTTPS 200)
  • 待办任务数量
  • 描述同步状态
  • 如有 pending 任务则通知 Dad

开发流程

  • 直接在服务器上编辑代码文件
  • npm run build 构建前端
  • pm2 restart 部署到 dev 环境
  • 通过 Caddy 反代提供 HTTPS 访问

记忆系统

截至 2026-04-04,PortalBot 在 agent:research-portal 范围下有 13 条记忆,约 2500 字:

  • 6 条 decision 类型(架构决策、部署规则、第一性原理原则等)
  • 7 条 fact 类型(部署架构、目录结构、API 迁移等)

关键事件时间线

日期事件
2026-03-17首次配对上线,开始项目同步
2026-03-18分析 dev 站 v3-shadcn,6 个未推送 commit(Bot/Server Fleet Dashboard)
2026-03-19进行全面 UI/UX 审计,发现 14 个问题并逐轮修复
2026-03-19执行 /harden 工程优先修复:build、a11y、aria-label、focus-visible
2026-03-20执行 /normalize 收敛硬编码颜色到 token
2026-03-28实现移动端时光机(iOS scroll picker + Audio tick 反馈)
2026-03-28实现 Bot 归档功能(localStorage 持久化)
2026-03-29功能总结:Dashboard、Bot Fleet、Server Fleet、时光机、项目管理等
2026-03-30后端迁移到新表结构(AP_bots、AP_daily_reports、AP_daily_insights)
2026-03-30实现实时 Bot 状态:SSE + MM WebSocket(typing/active/idle 圆点)
2026-03-31实现项目看板 Kanban 视图 + 拖拽排序
2026-04-01实现健康监控面板(MonitorPanel)+ Uptime 竖条图
2026-04-03P0-P3 架构优化全部完成(22 个任务)
2026-04-03精简监控:38 项 → 12 项,内置 HTTP 拨测 + 异常告警 DM
2026-04-04记忆整理:14 条 → 13 条,清理过时/噪音记忆

与其他 Bot 的关系

  • Ottor — 服务器代理 Bot,Portal 中服务器聊天的后端目标 (MM user id: ctgkdui9n38idyepmdzaoccgdw)
  • Quokka — 负责服务器的 Bot (MM user id: 3piznyqwiprmurnuke63rkwwmo)
  • Dad (@dora) — 项目所有者和主要需求方,MM user id: 8zzs18ha4fdhf8jt8ybm61eqdw

教训与原则

  1. 第一性原理 — 不糊弄,遇到数据不对要直接修后端接口,不做前端 workaround
  2. 先预览再发版 — 部署前确认效果
  3. 不要只说不做 — Dad 多次催促”干呀别只说啊”,要求直接动手写代码
  4. iOS 特殊处理 — Safari 不支持 navigator.vibrate(),需用 AudioContext 替代;CSS % padding 基于宽度非高度

相关页面