Skip to content

Tags

Tags give the ability to mark specific points in history as being important
  • v1.3.12
    v1.3.12 WorkBuddy 调用落进后台对话轨迹
    
    复用 turns.jsonl: device=WorkBuddy / groups=["mcp"], 记工具名/入参/耗时/成败,
    失败(含 TOKEN_INVALID、缺 Token)同样记录, 敏感入参打码。后台现有页面直接可见。
  • v1.3.11
    v1.3.11 引导页入口收尾
    
    - 未登录从引导页进入: 意图存 sessionStorage, 登录后接力打开弹窗
    - 仅在真正打开弹窗时才清标记(静默登录被节流时不丢意图)
    - 引导页步骤改写为与实际 UI 一致 + 补手动入口说明
    
    注: v1.3.10 的镜像正在构建中, 为避免重蹈 v1.3.7"移动标签但镜像已建"的覆辙,
    本次改用新标签发布。请直接发 v1.3.11, 忽略 v1.3.10。
  • v1.3.10
    v1.3.10 引导页「前往生成」未登录也能落到生成窗口
    
    未登录时把 open=workbuddy 意图存进 sessionStorage, 跳完 SSO 回来接力打开弹窗;
    引导页步骤改写成与实际 UI 一致, 并补充手动入口说明。
  • v1.3.9
    v1.3.9 授权回调回传新 access_token
    
    修"明明是登录态, 点生成 Token 却报登录已失效": MCP 授权后 SSO 发新会话,
    浏览器里的旧 access_token 陈旧 → 签发请求 401。回调改为一并回传
    access_token/id_token, 前端先覆盖再签发。
  • v1.3.8
    v1.3.8 补上 v1.3.7 漏掉的登出保险
    
    v1.3.7 的镜像是在我移动标签【之前】就已构建的, 故只含 c3281c8,
    缺 90bbab5(just_logged_out 一次性标记)。移动标签不会重建已发布的镜像 ——
    本次改用新标签发布, 不再移动旧标签。
    
    内容: 跳 SSO 登出后回跳落地时, 跳过一次 cookie 自动登录,
    避免 cookie 清除有延迟时仍被就地登回(表现为"点了退出还是登录态")。
  • v1.3.7
    v1.3.7 修授权回调丢凭据 / 退出登录退不掉 / 说明页入口
    
    1. 生成 Token 没反应 + 闪登出: 回调 fragment 被 App.vue 的 onMounted
       无差别 replaceState 抹掉(弹窗是 v-if, 那时还没挂载)。改为优先识别
       mcp_refresh_token, 转存 sessionStorage 并自动开弹窗。
    2. 「前往生成」改为 /#open=workbuddy, 落地即开弹窗。
    3. 退出登录: 原来只清 localStorage, sso_token cookie 还在会被无感登录
       立刻登回。改为跳 SSO /oauth/logout 真正结束会话, 并加一次性标记
       跳过回跳落地时的那一轮 cookie 自动登录。
  • v1.3.6
    v1.3.6 修复生成 Token 没走授权流(v1.3.5 回归)
    
    根因: <button @click="create"> 让 Vue 把 MouseEvent 当第一个实参传入,
    create(opts) 里 `if (!opts)` 永不成立 → 跳过独立授权 → 拿 undefined 当凭据签发。
    结果库里 refresh_token 长度为 0, 用户看到"生成成功"但任何需要身份的工具
    (反应检索/逆合成)一律 TOKEN_INVALID。
    
    - 模板改为 @click="startMcpAuthorize()"
    - create() 显式校验 opts.refreshToken
    - 后端拒绝空 refresh_token(400), 不再静默签发半残 Token
    - 更正易反应客户端注释: 已核实它原生接受 SSO token, 无需兑换层
  • v1.3.5
    v1.3.5 WorkBuddy 走独立授权链
    
    不再借用浏览器会话的 refresh_token:
    - GET /api/auth/mcp-authorize 发起 MCP 专用授权
    - GET /api/auth/mcp-callback 换取专属 refresh_token
    - 前端「生成 Token」改为先授权再签发, 回调后清理地址栏凭据
    
    配合 login v1.0.15 的 is_offline 标记: 浏览器续期与登出都不再影响 WorkBuddy。
    前置已完成: SSO client redirect_uris 已含 mcp-callback。
  • v1.3.4
    v1.3.4 MCP 续期加单飞锁
    
    修"每发一次版就得重新生成 WorkBuddy 连接 Token":
    SSO 的 refresh_token 是一次性的, 而 _cache 是进程内的(pod 重启即空),
    重启后 WorkBuddy 重连的那批并发请求同时拿同一个 refresh_token 去换,
    第 1 个成功并使其作废, 其余全部 400 invalid_grant -> 连接被打死。
    (线上佐证: /oauth/token 200:22 vs 400:138, 同一秒最多 8 次并发。)
    
    - 单飞锁 + 双重检查缓存 + 重读库
    - 区分 invalid_grant 与 SSO 抖动, 前者重读后重试一次(自愈)
    - TOKEN_INVALID 文案改为可操作指引
    
    实测: 并发 8 请求 修前 1/8 成功、7 次被拒 -> 修后 8/8 成功、SSO 只调 1 次、0 被拒。
  • v1.3.3
    v1.3.3 剥掉下游响应外壳
    
    逆合成任务跑完了, fetch_retrosynthesis 却一直返回 status=running,
    WorkBuddy 无休止轮询 —— items 埋在 data 里, 原代码在最外层找, 永远取空。
    
    同类问题一并修: search_reactions(易反应 {code,data:{list}})、
    check_catalog(商城 {isSuccess,data:{skus}}, 之前整个商城侧报价都漏了)。
    统一走 _unwrap_envelope() / _rows_of(), 并返回 total 以区分
    "还没出结果" 与 "确实是 0 条"。
  • v1.3.2
    v1.3.2 修 MCP 化合物接口两处对外问题
    
    1. resolve_compound 对任何 query 都判"没命中"(chem_detail 的
       {"found","data"} 外层取不到 cas_number) -> CAS/名称/SMILES/InChIKey
       现均一次命中。
    2. 对外返回改白名单投影, 不再夹带 source=pubchem-local / pubchem_cid
       与 uploaded_by / uploader_user_id / is_favorite / yid 等内部信息。
  • v1.3.1
    v1.3.1 修 WorkBuddy 连不上:补 GET /mcp(SSE 流)与 DELETE /mcp
    
    Token 本身没问题 —— 库里 14 条 0 过期、全带 refresh_token, 且 last_used_at 晚于
    created_at, 证明请求到过服务端且鉴权已通过。真正断点在日志里的固定三段式:
      POST /mcp -> 200 (initialize)
      POST /mcp -> 202 (notification)
      GET  /mcp -> 404  ★
    MCP Streamable HTTP 要求客户端握手后发 GET /mcp 建立服务端->客户端 SSE 流,
    而 server.py 只注册了 POST /mcp 与 GET /mcp/health。模块 docstring 原本就写着
    '后续要上 SSE/流式再换' —— 当初有意只做了请求-响应那一半, WorkBuddy 严格实现即暴露。
    
    GET /mcp 复用同一套 Bearer 鉴权; 首版工具均同步返回, 故为'保持打开 + 15s 心跳'的
    空闲流, 不伪造事件。心跳必需(链路有 120 nginx 与集群 ingress 两层代理会按空闲超时切断),
    并附 X-Accel-Buffering: no 防 nginx 缓冲把心跳攒住。
    DELETE /mcp 用于客户端主动结束会话, 本服务无会话状态, 返回 204。
    
    回滚点 v1.3.0。需实连验证:GET /mcp 应由 404 变为 200 并保持连接。
  • v1.3.0
    v1.3.0 补齐整改 16/18/21:Token 过期、报价字段规范化、受管制名单接 hazchem
  • v1.2.1
    v1.2.1 加「连接 WorkBuddy」页(Token 自助生成/吊销, 签发带 refresh_token)
  • v1.2.0
    v1.2.0 上线 MCP 服务端(WorkBuddy Expert 依赖的后台能力)
    
    对外 6 个只读/受控计算工具, 一个写操作都不暴露。
    API Token 自助签发(存哈希 + refresh_token 续期)、8 类错误码、
    统一 source/queried_at/trace_id、受管制物质服务端拦截、逆合成限流。
    端点 POST /mcp; Token 说明页 /docs/workbuddy-token。
  • v1.1.6
    v1.1.6 模块面板接住子系统的 open_external_url
    
    修:嵌在面板里的易查询,点「反应搜索」「AI 逆合成」开不出新标签页。
    子系统建完任务后靠 postMessage 通知父窗口代开(它自己开会被浏览器拦,
    因为等接口返回时用户手势已过期),而 copilot 从来没有 message 监听,
    消息发出去没人收 —— 表现为照常提示'正在打开任务页'但标签页不出现。
    
    只加父窗口监听,未改 chembook。origin 与目标 URL 双向白名单校验(只认 *.aiphacas.com)。
  • v1.1.5
    fix: authReady 门彻底消无感登录首屏闪
  • v1.1.4
    fix: 无感登录消除闪一下(首屏即读 sso_token cookie)
  • v1.1.3
    主模型换阿里云百炼 MaaS(qwen3.7-plus 思考型)+ 思考过程折叠展示
  • v1.1.2
    修复加购后购物车浮窗消失: _openCartTab 去掉 hide_float=1(SDK升级后该参数=让整个浮窗失效)