Skip to content

FNOS-005 CodeBuddy 成长任务移植与仓库内 DSH 开发环境

项目内容
需求编号FNOS-005
提出日期2026-09-14
需求状态已完成
关联计划PLAN-FNOS-005 CodeBuddy 成长任务移植与仓库内 DSH 开发环境
移植来源workbuddy2api-panel~/workspace/fork-pj/workbuddy2api-panel

需求背景与目标

workbuddy2api-panel 已实现 CodeBuddy/WorkBuddy「成长计划」的纯 API 自动化:internal/upstream/tasks.go 封装了成长任务的列表(GET /v2/activity/growth/tasks)、报名(POST .../accept)与领奖(POST /activity/growth/tasks/<code>/claim),internal/panel/taskcenter.go 提供「任务中心」——全账号扫描 + 执行队列(账号内串行、账号间并发)。18 个成长任务中 17 个可纯 API 完成,仅 Expert_Philanthropy 需真实捐款、不可自动化。

本需求把上述能力移植到本仓库的 CodeBuddy 插件(plugins/dsh-codebuddy-plugin):在插件内复用 CodeBuddy 既有账号凭据与上报链路,提供成长任务列表、单任务/一键自动完成 + 自动领奖,以及任务中心的全账号扫描与执行队列。开学季活动(school.go/开学季独立视图)不在本轮范围,另立需求。

本地 DSH 开发环境

插件的调试依赖本机运行的 DSH Web。此前开发者必须自行用全局 dsh 启动,并手工决定 DSH_HOME:全局安装的版本未必等于仓库锁定版本,profile 又会落在 $HOME/.dsh,与仓库的插件版本、工作区和文档脱节,既无法复现 FPK 里的运行时基线,也容易污染个人 DSH 数据。

本需求同时把 DSH 开发环境纳入仓库:根依赖声明与 FPK 相同的 @deepseek-ai/dsh@0.1.5-rc.2fn-apps-cli start 增加「DSH Web」启动目标,并以仓库根 .dsh 作为该实例的 DSH_HOME,让 profile、凭据、会话和本地插件调试数据都留在检出目录内。

移植依据

  • 来源仓库:~/workspace/fork-pj/workbuddy2api-panel(Go,面板 + 上游客户端)。
  • 关键源码:
    • internal/upstream/tasks.go:成长任务列表/报名/领奖端点与字段口径。
    • internal/panel/taskcenter.gotasksScanAll(只读扫描)、tasksRunQueue/runQueueItems(执行队列)、acceptPendingTasks(批量报名)、runGrowthQueued(单任务推进 + 自动领奖)。
    • internal/upstream/desktop.gointernal/upstream/streak.go:不同任务所需的行为事件指纹(CLI / 桌面 / web / 小程序),是进度判据的关键。
  • 计分语义:任务进度由 /v2/report 行为上报点亮,不同任务认不同客户端指纹;上报 200 不等于计分,需轮询进度达标后再领奖;上报按天幂等,重复执行不重复扣资源。

需求目标

  • 在本仓库 CodeBuddy 插件内复用现有账号凭据、上报通道与互斥锁,实现成长任务的列表查询、报名、进度回读、自动领奖。
  • 提供「任务中心」视图:一键扫描全账号未完成的成长任务(可自动化项),按账号分组执行(账号内串行、账号间可配并发),实时更新每条目状态。
  • 对不可自动化的任务(如 Expert_Philanthropy)只展示操作指引,不进入自动执行队列。
  • 移植后保持幂等:已领取/达标的任务自动跳过,重复执行不产生副作用或重复扣资源。
  • 与插件既有面板、账号切换、额度/Token 统计面板共用同一前端框架与登录态,不引入独立后端进程。
  • 「自动签到」「自动旅行」两个开关只保留在管理面板(运营周期的唯一入口);设置页不再渲染它们(设置页偏好区只保留自动切换、切换阈值、显示额度余量)。 本需求不新增、不复制这两个配置项;管理面板的开关负责启停 Host 运营周期,拨动即时同步 Host。 (演变过程见变更记录:曾两处都展示、也曾两处都删除。)
  • 自动签到是「定时间隔」而不是定时钟点:Host 用 setInterval30 分钟跑一轮, 并在启动时立即先跑一轮(不等第一个间隔);不是「每天 09:00 / 21:00 各一次」那种时刻排程。 对每个账号先查签到状态,已签到直接跳过(already),因此多跑几轮是无副作用且幂等的。 该节奏与参考实现 workbuddy-switchCHECKIN_RECOVERY_INTERVAL30 * 60 秒)一致。 连续 3 轮全部账号都失败才进入退避(冷却 30 分钟起、按 2 倍递增、上限 8 倍), 冷却期满自动恢复,不设永久停止。
  • 其余运营周期同样按固定间隔:旅行派发 30 分钟、旅行领奖 15 分钟、自动切换 1 分钟。
  • 签到与派猫猫旅行并入「完成任务」:点击后对每个账号先按依赖序执行成长任务(领养前置),再签到、再推进旅行;已签到、旅行在途或今日已旅行的一律跳过,不重复执行。动作区不再单设「一键签到」按钮(手动单账号签到仍在账号卡片菜单)。
  • 管理后台增加「一键完成成长任务」按钮:触发全账号可自动化成长任务执行队列,并展示执行状态与结果。
  • 仓库根目录通过 pnpm install 安装与 FPK 运行时基线一致的 dsh CLI,插件调试不再依赖全局安装。
  • fn-apps-cli start 提供「启动 DSH Web」目标,并以仓库根 .dsh 作为该实例的 DSH_HOME;profile、凭据、会话和本地状态不写入开发者的 $HOME/.dsh
  • 启动本地 DSH Web 时自动把本仓库的插件链接进该 profile,使新克隆的检出目录无需手工安装插件即可调试;@tnnevol/dsh-fnos 属于 FPK 专用集成,不进入本地 profile。

涉及范围

模块目录或入口职责
上游任务接口plugins/dsh-codebuddy-plugin/src/host(新增 growth tasks 客户端)移植列表/报名/领奖端点与字段口径,复用现有 AccessToken 与上报签名
成长任务执行plugins/dsh-codebuddy-plugin/src/host单任务推进(行为事件上报 → 轮询进度 → 自动领奖),与现有 per-account 锁互斥
任务中心plugins/dsh-codebuddy-plugin/src/client + host全账号扫描、执行队列状态机、实时进度
面板 UIplugins/dsh-codebuddy-plugin/src/client成长任务列表、执行队列、不可自动化项指引;自动签到/自动旅行开关保留在管理面板
运营周期开关边界plugins/dsh-codebuddy-plugin/src/client/uisrc/components两个开关只在管理面板;设置页不渲染它们,避免同一件事两个入口
管理后台操作区plugins/dsh-codebuddy-plugin/src/client + host RPC提供「完成任务」按钮:串起成长任务(领养前置)、签到与旅行;分别跳过已完成项
测试与文档plugins/dsh-codebuddy-plugin/testsdocs/development移植差异、测试与验收记录
根依赖清单package.jsonpnpm-lock.yaml声明并锁定仓库级 @deepseek-ai/dsh 版本
依赖安装策略pnpm-workspace.yaml明确 DSH 原生依赖使用预编译产物,安装脚本拒绝策略显式化,保持 pnpm install 非交互
任务入口 CLItooling/fn-os-apps-cli/src/commands/start.tssrc/core/turbo.tssrc/core/process.tssrc/config/paths.tssrc/ui/prompts.tsDSH Web 启动目标、本地 CLI 解析、DSH_HOME 注入与子进程环境构造
本地 DSH_HOME仓库根 .dsh/(不提交)保存本地 profile、凭据、会话和插件调试状态
本地 profile 内置tooling/fn-os-apps-cli/src/core/local-profile.ts启动前构建并链接仓库插件进 .dsh profile,排除 FNOS 专用插件
忽略规则.gitignore排除 .dsh/

功能列表

编号优先级功能用户行为状态
FNOS-005-01P1成长任务列表与状态在 CodeBuddy 面板选择账号后,展示其成长任务、进度、奖励、是否可自动化与是否已领取已完成
FNOS-005-02P1单任务/一键自动完成 + 自动领奖对可自动化任务执行上报推进并轮询,进度达标后自动领奖;不可自动化任务只展示指引已完成
FNOS-005-03P1任务中心(全账号扫描 + 执行队列)一键扫描所有账号未完成成长任务,按账号排队执行,实时更新每条目状态,可配账号间并发已完成
FNOS-005-04P2不可自动化任务指引Expert_Philanthropy 等需真实操作的任务只展示操作说明,不进入自动队列已完成
FNOS-005-05P1运营周期开关收拢到管理面板「自动签到」「自动旅行」开关只在管理面板(控制 Host 任务启停);设置页不再渲染这两个开关已完成
FNOS-005-06P1签到并入「完成任务」点击「完成任务」时逐账号签到,已签到账号跳过;不再单设一键签到按钮已完成
FNOS-005-07P1管理后台「完成任务」按钮位于「添加账号」右侧(间距 10px);点击进入 loading 并触发全账号可自动化任务队列,完成后解除已完成
FNOS-005-08P1个人成长任务收拢到账号信息弹框成长任务作为账号信息弹框「用量信息」之后的新 Tab,仅展示该账号;弹框尺寸加大一档;刷新按钮在 Tab 内部已完成
FNOS-005-09P1执行状态持久化执行中状态写入宿主,刷新页面后按钮仍保持 loading,直到宿主报告结束已完成
FNOS-005-10P1任务执行日志抽屉点「完成任务」或单项「完成」都展开底部抽屉(占下半屏、上半屏磨砂),用终端风格逐条展示日志;点下即显示该任务日志;全量执行时单项按钮禁用已完成
FNOS-005-11P1仓库内安装 DSH CLI在仓库根执行 pnpm install 后,node_modules/.bin/dsh --version 输出与根依赖一致的版本,无需全局安装已完成
FNOS-005-12P1start 增加本地 DSH Web 启动目标执行 pnpm run start 可在交互多选中选择「DSH Web」,或用 pnpm run start -- --web 直接启动;本地端口固定 8070已完成
FNOS-005-13P1本地 DSH_HOME 指向仓库根 .dsh启动后的 profile、凭据和会话位于 <仓库根>/.dsh$HOME/.dsh 不被本次启动写入已完成
FNOS-005-14P1仓库插件内置进本地 profile启动本地 DSH Web 时自动把仓库插件链接进 .dsh profile,无需手工 dsh plugin add@tnnevol/dsh-fnos 不内置已完成
FNOS-005-15P1单账号「一键完成」与跨账号执行互斥账号信息弹框「成长任务」Tab 的刷新按钮旁新增「一键完成」,只跑该账号全部可自动化任务;该账号在跑时账号管理页的「完成任务」(全账号)按钮禁用,其他账号的单项「完成」与本按钮保持可点已完成
FNOS-005-16P1风控指纹对齐与「跑完但没完成」修复出站请求对齐来源的客户端指纹头族与节流节奏;专家类任务改用服务端真实 chat requestId 判据;执行结束后按账号回读真实任务状态并如实汇报未完成项,不再只看「任务跑完」已完成

交互和行为约束

  • 移植只复用 CodeBuddy 既有账号 AccessToken、上报指纹构造与 per-account 锁;不引入 workbuddy2api-panel 的账号池/面板进程。
  • 成长任务计分依赖行为上报,不同任务所需客户端指纹(CLI/桌面/web/小程序)必须与来源保持一致;上报返回 200 不视为计分成功,必须轮询 current/target 达标后再领奖。
  • 报名(accept)只针对 accept_statusaccepted/completed 且未锁定的任务;领奖仅在 claimable(进度达标且未领取)时调用,重复领奖按幂等处理(上游 already_claimed 视为成功、无新增奖励)。
  • 执行队列:账号内串行(复用 per-account 锁,与单任务/一键完成互斥),账号间受并发信号量约束(默认 1,范围 1–4);队列运行中再次触发返回冲突,不覆盖正在进行的进度。
  • 队列每次启动递增 seq,前端只渲染自己启动的那一轮;执行结束后的残留条目不得覆盖后续扫描结果。
  • 不可自动化任务(需真实捐款/真实小程序沙箱对话等)显式排除在执行队列之外,仅在列表中标注原因与操作指引。
  • 全账号扫描为只读操作,不触发任何上报或领奖;执行队列开始前先「批量报名未接受任务」以保证后续上报计数有效(来源已确认漏此步会导致进度一直 not_accepted、无法领奖)。
  • 重复执行幂等:已领取/达标任务自动跳过,不重复扣资源;上报按天幂等。
  • 既有「自动签到」「自动旅行」开关保持原位置(管理面板动作区、设置页偏好区)与原行为;本需求不新增、不复制、也不隐藏它们。
  • 签到并入「完成任务」后逐账号判断状态:已签到的直接跳过(记 already),企业账号跳过,状态探测失败的账号不得重复提交。
  • 派猫猫旅行同样并入:traveling(在途)与「今日已旅行」跳过不重复派发;arrived 领取奖励;企业账号无成长中心直接跳过。
  • 领养(first_buddy)必须是第一个执行的任务:它产出的 Buddy 是旅行派发的前提,没有猫猫时派发会被服务端拒(no active buddy)。该任务自带活跃上报步骤,因此不依赖 chat_5 先跑。上游 API 返回顺序不含依赖保证,执行顺序由本插件显式指定。
  • 旅行自带领养前置:自动旅行与「完成任务」两条路径在派发前都会先查猫猫档案(buddy/info),无猫时先走领养链(活跃上报 → 同意协议 → buddy/first),领养完成后再继续旅行。这样从没领养过的账号不会每轮都拿 no active buddy 空转。
  • 一键完成成长任务只触发可自动化任务队列,不把不可自动化任务或仅展示指引的任务加入执行;按钮运行中防重复触发,完成后刷新真实任务状态。
  • 「完成任务」按钮放在「添加账号」右侧、两者间距 10px,按钮文案为「完成任务」;点击后按钮进入 loading(不是直接禁用),任务完成后解除 loading。
  • 成长任务的个人详情收拢进账号信息弹框:在「用量信息」Tab 之后新增「成长任务」Tab,只展示当前账号的任务;弹框尺寸在原档位上加大一档。
  • 成长任务的刷新按钮位于「成长任务」Tab 内部,不再由页面区块头提供。
  • 「成长任务」Tab 内部再分「未完成 / 已完成」两栏(button 型二级 Tab,与「用量信息」下的资源状态 Tab 同形态),默认停在未完成;两栏各自显示数量与空态。
  • 未完成 / 已完成的分组只看 claimed:进度达标但尚未领奖(claimable)仍属未完成,因为还需要用户点「完成」去领奖;放进已完成会让该入口消失。
  • 执行中状态必须落盘宿主:刷新页面后按钮仍显示 loading,直到宿主报告本轮结束;不得因为组件 state 重置就让按钮变回可点击。
  • 单个任务行的按钮状态必须相互独立:某个任务在执行时只点亮该行按钮,不得让同账号其他任务或其它账号的任务按钮变为不可用。
  • 执行类按钮(成长任务刷新、单个任务「完成」、页面刷新、「完成任务」、一键签到)在动作进行中一律用 loading 表达;disabled 只保留给真实不可用状态(无可操作账号、全部已签到、无任务等),不得用禁用代替 loading。
  • loadingdisabled两个独立属性、可以并存,各表达一件不同的事:loading 表示动作正在进行,disabled 表示此刻确实不可提交。不得把两者当成互斥的二选一,也不得用同一个条件同时喂给两者。
  • Semi Button 的 disabled 优先级高于 loading(两者同真时只渲染禁用态、不渲染转圈),因此「正在执行」这一态不得叠加 disabled;由于 loading 本身不拦截点击,执行中按钮的重复触发必须由处理函数内的重入判断挡住。
  • 移植行为只在已登录且持有有效 AccessToken 的账号上执行;凭据缺失或刷新失败时明确报错,不静默跳过。
  • 单账号「一键完成」在弹框内,不是页面级按钮:「成长任务」Tab 的刷新按钮左侧新增「一键完成」;它只跑当前账号的全部可自动化任务(含报名 → 行为上报 → 进度回读 → 自动领奖),不触碰其他账号。
  • 运行中的禁用范围以账号为界:某账号正在执行成长任务(单项或一键完成)时,账号管理页的「完成任务」(全账号)按钮禁用;该账号自身的单项「完成」按钮也禁用。其他账号的单项「完成」按钮与弹框「一键完成」按钮不得因此变灰——它们可以真实执行,而不是点了被宿主拒绝。宿主因此必须按账号加锁,而不是只有一个全局队列。
  • 账号管理页「完成任务」的禁用依据是宿主运行状态:任一账号有成长任务在跑(含刷新页面后从宿主采纳的状态)即禁用;不得只依据本页组件 state,否则刷新页面后会出现「实际在跑却可点」。
  • 宿主对同一账号的成长任务执行互斥(单项与一键完成共用一把账号锁);不同账号之间可并行,互不阻塞。
  • 出站行为上报与任务动作,凡有来源实测口径可对齐的,必须对齐:客户端指纹头族(User-AgentX-ProductX-DomainX-User-IdX-CodeBuddy-Request、按账号稳定派生的 X-Machine-ID / X-Session-ID)、连续上报的间隔(对齐来源的 1.05s 口径)、专家召唤链之间的间隔、以及账号之间的限速。
  • 判据必须与来源一致:专家类任务(expert_5Expert_team_use_3Expert_lighthouse)的 expert_actual_use 必须 JOIN 一次真实对话返回的服务端 requestId,自造 requestId 不计数;桌面链事件载荷按来源的完整字段集发送,不用最小字段集。
  • 「跑完」不等于「完成」:任务动作返回成功(HTTP 200)只说明上报被受理,上游计分是异步的。执行结束后必须按账号回读真实任务状态,把仍未达标(current < target)的任务如实写成 pending 并计入结果,不得把「动作已发送」汇报成「任务已完成」。宿主日志必须让人能分辨「没开始做」「做了一半」「已完成」。
  • 报告失败的账号要给出可见原因(凭据过期、任务不存在、动作未移植、上游报错、未达标分别不同),不静默吞掉。

本地 DSH 开发环境

  • 根依赖版本必须与 FPK 运行时基线一致(当前 0.1.5-rc.2);基线升级时两者同步修改,不允许本地开发环境长期偏离 FPK。
  • DSH Web 与「Harness 插件」「项目文档」并列显示在同一个启动多选提示中;选择被取消时不启动任何目标。
  • DSH Web 与「Harness 插件」「项目文档」可以任意组合同时启动,并始终保留 Turbo 的 TUI:三者由 start 交给同一个 turbo watch,DSH Web 作为仓库根任务 //#dev:webdev 并列显示在同一个 TUI 中。不得为了让两者共存而关闭 TUI,也不得在 Turbo 之外另起第二个前台进程。
  • 启动命令必须在子进程环境中注入 DSH_HOME=<仓库根>/.dsh,并清除从调用者继承的 DSH 会话身份(DSH_SESSION_IDDSH_SHELLDSH_WEB_URL),使本地实例是独立进程而不是当前会话的嵌套视图。
  • HOME 不做改写:系统级工具缓存(npm、pnpm、编辑器等)继续使用开发者账号的默认位置,只有 DSH 自有状态被收敛到仓库内。
  • 本地 DSH Web 固定使用 8070 端口,与 FPK 网关固定的 127.0.0.1:3080 区分;两者可以在同一台开发机上同时运行。
  • 启动使用仓库 node_modules/.bin/dsh,不依赖全局 dsh;本地 CLI 缺失时报可诊断错误并提示先执行 pnpm install
  • 未选择 DSH Web 时的行为不变:插件与文档仍由 turbo watch dev 统一调度,文档端口仍为 8876。
  • .dsh/ 只保存本地运行状态,不提交到版本库;其中的凭据权限由 DSH 自身维护。
  • DSH 的原生依赖(node-pty、koffi)在仓库安装中使用包内预编译产物,因此 pnpm-workspace.yaml 显式拒绝其安装脚本,pnpm install 保持非交互且不要求本机编译工具链。
  • 本地 DSH 开发环境只涉及仓库开发工具链,不修改 FPK 应用、网关、插件运行时行为,也不改变 FPK 中 dsh CLI 的私有安装策略。
  • 本地 profile 内置是幂等的:已链接且已列入 dsh.profile.bundles 的插件不重复安装;链接必须经 DSH CLI 完成,因为只有 CLI 会把新插件同步进 bundle 列表、使其成为一层 patch layer。
  • 链接前必须先构建插件:profile 通过包 exports 解析入口,入口指向 git 忽略的 lib/,缺少产物时链入的是无法加载的包。
  • @tnnevol/dsh-fnos 不进入本地 profile:它注册 fnOS 设置命名空间、fnOS JS SDK 桥与网关前缀路由,脱离 fnOS 宿主没有可提供的能力。
  • 本地内置只影响 .dsh profile,不改变 FPK 的插件清单、内置归档与安装策略。

不在本次范围内

  • 开学季活动(school.go 及其独立状态卡/全账号闭环/抽奖):能力来自同一来源但属独立活动,另立需求实施。
  • workbuddy2api-panel 的账号池轮转、Web 面板、Redis 镜像、定时签到/旅行/保活等与本功能无关的能力。
  • 对来源未覆盖任务的逆向(如 Expert_Philanthropy 真实捐款回执),本需求不尝试绕过。
  • 不修改 DSH 官方源码、profile 组合或 DSH CLI 自身的启动参数语义。
  • 不为本地 DSH Web 提供守护、开机启动、进程管理或端口冲突自动切换。
  • 不把仓库 .dsh profile 打包进 FPK,也不在 FPK 中复用本地的 profile 与凭据。

验收条件与完成状态

FNOS-005-01 验收条件

  • FNOS-005-01-AC-01:选择账号后,面板展示其成长任务列表,字段含 task_codetitle、进度 current/target、奖励积分/能量、是否可自动化、claimed 状态,与来源 upstream.Task 口径一致。
  • FNOS-005-01-AC-02:列表只读拉取,不触发任何上报或领奖;失败账号在列表中标注错误而非中断整体扫描。
  • FNOS-005-01-AC-03:不可自动化任务(如 Expert_Philanthropy)在列表中明确标注「不可自动化」及原因。

FNOS-005-02 验收条件

  • FNOS-005-02-AC-01:对可自动化任务执行后,进度按来源判据推进;达标后自动调用领奖接口,界面显示到账积分/能量。
  • FNOS-005-02-AC-02:已领取/达标任务再次执行自动跳过,无重复领奖、无重复扣资源(幂等)。
  • FNOS-005-02-AC-03:未报名任务执行前先报名(accept),避免上报不计数;报名失败不阻塞行为上报但记录日志。
  • FNOS-005-02-AC-04:凭据缺失或 AccessToken 刷新失败时明确报错,不静默跳过。

FNOS-005-03 验收条件

  • FNOS-005-03-AC-01:任务中心一键扫描全账号未完成的成长任务(可自动化项),列表按账号聚合,显示每账号待办数。
  • FNOS-005-03-AC-02:执行队列账号内串行、账号间按配置并发(1–4);运行中再次触发返回冲突,不覆盖进度。
  • FNOS-005-03-AC-03:队列每条目状态(pending/running/done/skipped/error)实时可查;每次启动 seq 递增,前端只渲染本轮。
  • FNOS-005-03-AC-04:不可自动化任务不进入队列;某账号被其它任务动作占用时该账号队列项标 skipped
  • FNOS-005-03-AC-05:队列执行结果与来源语义一致(单任务推进 + 自动领奖 + 进度文本),插件 typecheck、单元测试和构建通过。

FNOS-005-04 验收条件

  • FNOS-005-04-AC-01:不可自动化任务在面板展示操作说明与排除原因,不进入自动执行路径。

FNOS-005-05 验收条件

  • FNOS-005-05-AC-01:管理面板动作区提供「自动签到」「自动旅行」开关,拨动即时同步 Host 并启停对应运营周期。
  • FNOS-005-05-AC-02:设置页偏好区不渲染这两个开关,只保留自动切换、切换阈值、显示额度余量;同一配置项不出现两个入口。
  • FNOS-005-05-AC-03:自动签到按固定间隔执行——开启后立即执行一轮,之后每 30 分钟一轮(setInterval),不是每日定时钟点。已签到账号查状态后跳过,不重复提交。
  • FNOS-005-05-AC-04:连续 3 轮「全部账号都失败」才进入退避;退避只放慢重试(冷却 30 分钟起、指数递增、上限 8 倍),冷却期满自动恢复,不得永久停止周期。其余周期间隔为:旅行派发 30 分钟、旅行领奖 15 分钟、自动切换 1 分钟。

FNOS-005-06 验收条件

  • FNOS-005-06-AC-01:点击「完成任务」时逐账号执行签到;已签到账号返回 already 并跳过,不做重复提交。
  • FNOS-005-06-AC-02:企业账号与状态探测失败的账号被跳过并在执行日志中说明原因。
  • FNOS-005-06-AC-03:动作区不再有独立的「一键签到」按钮;手动单账号签到仍可从账号卡片菜单触发。
  • FNOS-005-06-AC-04:派猫猫旅行同样并入「完成任务」:traveling 与「今日已旅行」跳过不重复派发,arrived 领取奖励,企业账号跳过。
  • FNOS-005-06-AC-05:执行顺序为「领养(first_buddy)→ 其余成长任务 → 签到 → 旅行」;领养必须是第一个任务,不依赖上游返回顺序,由插件显式排序保证。
  • FNOS-005-06-AC-06:自动旅行与「完成任务」的旅行步骤在派发前先确认猫猫档案;无猫时先领养、领养成功后再派发。判定必须用 buddy/infodata.buddy(显式 null 才算无猫;字段缺失或查询失败视为无法判定、不领养),不得travel/statusbuddy_id(未派发时恒为 0,会把从未派发的账号永久拦住)。
  • FNOS-005-06-AC-07:领养门槛未达标(HTTP 400 first_buddy task not completed yet)时记「今日已试」并跳过,同日不再重试;该状态不算失败。

FNOS-005-07 验收条件

  • FNOS-005-07-AC-01:管理后台展示「一键完成成长任务」按钮,点击后触发全账号可自动化成长任务队列。
  • FNOS-005-07-AC-02:不可自动化任务不进入队列;运行中按钮防重复触发,展示执行中/完成/失败结果。
  • FNOS-005-07-AC-03:执行结束后重新拉取成长任务真实状态,展示完成进度与自动领奖结果。
  • FNOS-005-07-AC-04:「完成任务」按钮位于「添加账号」右侧且间距 10px;点击后按钮进入 loading 而非直接禁用,任务完成后解除 loading。

FNOS-005-08 验收条件

  • FNOS-005-08-AC-01:账号信息弹框在「用量信息」之后新增「成长任务」Tab,只展示该账号的成长任务。
  • FNOS-005-08-AC-02:弹框尺寸在原档位上加大一档,窄屏仍受视口约束不溢出。
  • FNOS-005-08-AC-03:成长任务刷新按钮位于该 Tab 内部;页面级区块头不再提供成长任务刷新入口,也不再有页面级成长任务区块。
  • FNOS-005-08-AC-04:成长任务列表有固定高度上限,超出时列表内部出现滚动条,与「用量信息」资源列表同一高度口径;工具栏不随列表滚动。
  • FNOS-005-08-AC-05:成长任务列表分为「未完成」与「已完成」两栏,默认停在未完成;两栏各自显示任务数量与空态文案。
  • FNOS-005-08-AC-06:分组按 claimed 判定——达标未领奖的任务留在未完成栏,仅已领奖的进入已完成栏。

FNOS-005-09 验收条件

  • FNOS-005-09-AC-01:执行中状态写入宿主持久化文件;刷新页面后客户端从宿主采纳状态,按钮仍显示 loading。
  • FNOS-005-09-AC-02:宿主报告本轮结束后按钮解除 loading;宿主重启留下的孤儿 running 状态会被判定为已结束,按钮不会永久卡在 loading。
  • FNOS-005-09-AC-03:单个任务执行时只点亮该任务行按钮;同账号其它任务与其它账号任务的按钮保持可点,不因该任务在跑而被禁用。
  • FNOS-005-09-AC-04:所有执行类按钮在进行中显示 loading 而非禁用;disabled 只出现在真实不可用状态(无账号/无任务/全部已签到)。
  • FNOS-005-09-AC-05loadingdisabled 并存而不是二选一——「完成任务」同时具备 loading={队列在跑}disabled={无账号};一键签到按状态分别给出 loading 与 disabled;不得用同一条件同时喂给两个属性。

FNOS-005-10 验收条件

  • FNOS-005-10-AC-01:点击「完成任务」自动展开底部日志抽屉;动作区另有常驻的「查看日志」按钮,任何时候都可点开查看上一轮或正在执行的日志;在账号信息弹框的「成长任务」tab 里点单个任务的「完成」同样自动展开该抽屉,复用同一份日志(同一份宿主落盘状态),而不是另开一份。
  • FNOS-005-10-AC-02:抽屉用终端风格展示逐条日志:深色底、亮色等宽字,每行含时间、账号、任务 code、状态与说明;code 列按最长者补齐以便纵向扫读,时间与账号使用不同颜色。
  • FNOS-005-10-AC-03:宿主每条任务处理完即追加日志并落盘(appendGrowthRunLog);一轮开始时先落「开始」、每个账号开始时落「读取任务列表…」、结束时落「结束」,因此从点击到首个结果之间也有具体日志,不出现长时间空态。
  • FNOS-005-10-AC-04:日志写入串行化(多账号并发处理时「读-改-写」不得互相覆盖);日志条数设上限,超出丢弃最早的。
  • FNOS-005-10-AC-05:抽屉只在「展开且执行中」轮询宿主,收起或跑完即停止;展开时立即拉取一次,不干等首个轮询周期;新一轮开始时清空上一轮日志。
  • FNOS-005-10-AC-06:抽屉占视口下半部分(50vh),上半部分为半透明磨砂蒙层(DSH 的 --dsw-alias-bg-mask-1 + backdrop-filter: blur),被遮住的账号卡片仍可辨认。
  • FNOS-005-10-AC-07:日志区固定高度并在内部滚动;抽屉的标题与状态行常驻,长日志不把标题顶出视口;内容未超出高度时不得出现滚动条(内容区 box-sizing: border-box,Semi 的 .semi-sidesheet-body 自带 overflow: auto,按 content-box 算会被 padding 顶出假滚动条)。
  • FNOS-005-10-AC-09:滚动条与其底色处于同一视觉面板(深色终端外壳),不复用「外层滚动 + 内层 pre 变色」的分离结构——否则滚动条会落在另一种背景上、看起来像溢出。
  • FNOS-005-10-AC-11:抽屉内容与下边缘留 15px 间距(.semi-sidesheet-bodypadding-bottom,作用域限定在本组件);该间距不得造成内容溢出或裁切。
  • FNOS-005-10-AC-12:日志足够丰富——每条任务在「开始执行」、动作完成、等待上游计分、未达标、领奖各阶段都有记录;签到与旅行各自先记「查询…」再记结果,长请求期间不出现静默段。
  • FNOS-005-10-AC-13:仍在进行的那一行有等待动效(呼吸 + 跳动小点),且只作用于最后一行;遵循 prefers-reduced-motion,该偏好下不播放动画。
  • FNOS-005-10-AC-17:日志列表使用虚拟滚动(Semi Tablevirtualized,底层 react-window),只渲染可视区间;行高固定为常量,滚动位置与内容不得错位。Semi 的 List / ScrollList 不提供虚拟化,因此不采用。
  • FNOS-005-10-AC-18:宿主日志缓存只保留「本次 + 上次」两轮,更早的整轮直接丢弃;不得按条数裁剪(按条裁剪会静默丢掉早期账号的日志)。抽屉提供本次/上次两个页签,没有上一轮时不显示页签。
  • FNOS-005-10-AC-14:抽屉的层级必须高于 Semi Modal 的默认 zIndex: 1000(弹框内触发的执行不能被弹框盖住);抽屉在发起单项执行 RPC 之前打开,以便看到执行过程而非只有结果。
  • FNOS-005-10-AC-15:点单项「完成」后抽屉立刻显示该任务的具体日志(本地先落一条「开始执行…」),不得停留在空态或上一轮内容;宿主一旦写出本轮日志,本地记录即让位,不重复显示。
  • FNOS-005-10-AC-16:点击「完成任务」进入全量执行期间,成长任务列表中的所有单项「完成」按钮一律禁用(宿主只有一个执行队列,点单项只会被拒);单项执行之间互相禁用。禁用与 loading 不得同时出现(Semi 的 disabled 会吃掉 spinner)。
  • FNOS-005-10-AC-10:日志状态按结局着色——未完成为红(零进度,或执行失败)、完成或跳过为绿(已领奖、今日已签到/已旅行、不支持自动化)、完成一半为黄(有进度未达标、旅行在途)、进行中为蓝(过程标记,不算结局);未登记状态回落为中性色。
  • FNOS-005-10-AC-08:「查看日志」按钮不带 loading / disabled,随时可点。

FNOS-005-11 验收条件

  • FNOS-005-11-AC-01:仓库根 pnpm installnode_modules/.bin/dsh --version 输出 0.1.5-rc.2,与 FPK 运行时基线一致。
  • FNOS-005-11-AC-02pnpm install 在无编译器、无交互的机器上完成,不因 DSH 原生依赖安装脚本中断。

FNOS-005-12 验收条件

  • FNOS-005-12-AC-01pnpm run start 的启动多选包含「DSH Web」,选择后 DSH Web 在本机可访问。
  • FNOS-005-12-AC-02pnpm run start -- --web 直接启动 DSH Web,输出的访问地址端口为 8070。
  • FNOS-005-12-AC-03:同时选择 DSH Web 与「Harness 插件」/「项目文档」时三者一起启动,并显示在同一个 Turbo TUI 中(各占一行);DSH Web 与文档服务分别可访问。
  • FNOS-005-12-AC-04:未选择 DSH Web 时,插件 watch 与文档服务仍按原路径由 turbo watch dev 启动,文档端口保持 8876。

FNOS-005-13 验收条件

  • FNOS-005-13-AC-01:DSH Web 启动后,profile 与运行状态出现在 <仓库根>/.dsh 下。
  • FNOS-005-13-AC-02$HOME/.dsh 下 profile、凭据和会话不因本次启动被创建或改写。
  • FNOS-005-13-AC-03git status 不显示 .dsh/,仓库根 .dsh 不进入版本库。
  • FNOS-005-13-AC-04:启动使用仓库 node_modules/.bin/dsh;本地 CLI 缺失时报可诊断错误并提示先执行 pnpm install,不落回全局 dsh

FNOS-005-14 验收条件

  • FNOS-005-14-AC-01:删除仓库 .dsh 后执行 pnpm run start -- --web,CLI 先构建并链接仓库插件,DSH Web 启动后这些插件均已加载。
  • FNOS-005-14-AC-02:链接经 DSH CLI 完成,dsh --profile web --dump-config 中每个内置插件各成一行 patch layer。
  • FNOS-005-14-AC-03:重复启动不重复安装,已链接且已在 bundle 列表中的插件被跳过。
  • FNOS-005-14-AC-04:本地 profile 的依赖与 dsh.profile.bundles 均不含 @tnnevol/dsh-fnos

FNOS-005-15 验收条件

  • FNOS-005-15-AC-01:账号信息弹框「成长任务」Tab 的工具栏里,「一键完成」按钮位于刷新按钮左侧(先一键完成、后刷新),文案可辨识。
  • FNOS-005-15-AC-02:点「一键完成」只对当前账号执行全部可自动化任务(报名 → 行为上报 → 进度回读 → 自动领奖),不读取也不触碰其他账号;执行前打开同一份日志抽屉。
  • FNOS-005-15-AC-03:某账号正在执行成长任务时,账号管理页的「完成任务」(全账号)按钮处于禁用态;禁用依据是宿主运行状态,刷新页面后仍然禁用,直到宿主报告结束。
  • FNOS-005-15-AC-04:该账号自身的单项「完成」按钮在同一轮执行期间禁用(它已有任务在跑);其他账号的单项「完成」按钮与弹框「一键完成」按钮保持可点,不被误禁。
  • FNOS-005-15-AC-05:宿主按账号互斥——同账号的单项执行与一键完成互斥(重复触发返回冲突),不同账号可并行执行且互不阻塞。
  • FNOS-005-15-AC-06:「一键完成」按钮用 loading 表达本账号执行中(disabled 只保留给真实不可用状态),且重入由处理函数内的判断挡住(Semi 的 loading 不拦截点击)。
  • FNOS-005-15-AC-07:单账号执行结束后按宿主状态收尾,按钮不永久停在 loading;宿主重启留下的孤儿 running 同样被判为已结束。

FNOS-005-16 验收条件

  • FNOS-005-16-AC-01:行为上报与任务动作的出站请求对齐来源指纹头族:桌面链带 User-Agent(WorkBuddy 三段式)、X-Product: SaaSX-DomainX-User-Id;billing/growth 域补齐 X-CodeBuddy-Request: 1 与按 uid 稳定派生的 X-Machine-ID / X-Session-ID(跨重启恒定、账号间互异)。
  • FNOS-005-16-AC-02:连续上报(chat_5 补报、模板链、夜间补足)的条间间隔对齐来源的 1.05s 口径;专家召唤链复用来源的 6s 间隔;账号之间在批量执行时有限速,避免瞬时并发打满上游。
  • FNOS-005-16-AC-03expert_5 / Expert_team_use_3 / Expert_lighthouseexpert_actual_use 使用真实对话返回的服务端 requestIdcmb- 前缀 32 hex 或裸 32 hex);对话未返回该 id 时该专家计入失败而不是用自造 id 充数;Expert_lighthouse 使用 mode: "LOCAL"type 为空、cost: 0 的判据形态。
  • FNOS-005-16-AC-04:桌面链事件载荷使用来源的完整字段集(agent_task_createdhas_repo/has_connector/has_template/has_expert/has_skill 等、chat_message_response 的 token 与 finishReasonchat_request_response 的成功态),不用最小字段集;skill_1chat_message_response.finishReasontool_calls 以表达技能加载语义。
  • FNOS-005-16-AC-05Library_read 的 web 事件带来源口径的 pageURLelementId/elementName 与浏览器 UA;template_5 发送 5 组不同模板的事件;Hp_Appearance 先调 appearance/set 再上报 appearance_skin_apply
  • FNOS-005-16-AC-06执行结束后按账号回读真实任务状态:仍 current < target 的任务写为 pending 并带进度(current/target),日志区分「零进度=没开始」与「有进度=做了一半」;「动作已发送」不得汇报为「已完成」。
  • FNOS-005-16-AC-07:全账号与单账号执行的结果都按账号给出可见结论(已领奖 / 已达标未领奖 / 未达标 / 动作未移植 / 上游报错 / 凭据过期),并统计未完成数;任一账号失败不阻断其他账号。
  • FNOS-005-16-AC-08:移植后插件 typecheck、单元测试与构建全部通过;新增/修订的测试覆盖账号级互斥、禁用范围、指纹头、节流间隔与「未达标如实汇报」。

状态看板

阶段状态当前范围下一步
成长任务列表与状态已完成移植列表/报名/领奖端点,复用账号凭据与上报指纹已完成;实现、测试和构建通过
单任务/一键完成 + 自动领奖已完成行为事件上报、轮询进度、Web 域领奖、幂等已完成;实现、测试和构建通过
任务中心扫描与队列已完成全账号扫描 + 执行队列状态机 + 实时进度已完成;实现、测试和构建通过
不可自动化任务指引已完成排除 Expert_Philanthropy 等并展示说明已完成;实现、测试和构建通过
运营周期开关收拢到管理面板已完成两个开关只在管理面板可操作;设置页不渲染,避免重复入口已完成;实现、测试和构建通过
签到与旅行并入「完成任务」已完成逐账号签到 + 推进旅行,已签到/在途/今日已旅行跳过;领养前置已完成;实现、测试和构建通过
管理后台「完成任务」按钮已完成紧贴「添加账号」右侧、loading 交互、触发可自动化任务队列并回读真实结果已完成;实现、测试和构建通过
个人成长任务收拢到弹框已完成账号信息弹框成长任务 Tab、弹框加大、刷新入 Tab、未完成/已完成分栏已完成;实现、测试和构建通过
执行状态持久化已完成运行态落盘宿主,刷新后恢复 loading已完成;实现、测试和构建通过
任务执行日志抽屉已完成底部 SideSheet(50vh、上半屏磨砂)+ 终端风格日志(深底亮字、分字段着色);日志区内部滚动;含「查看日志」按钮已完成;实现、测试和通过构建
仓库内安装 DSH CLI已完成根依赖声明与 FPK 同版本的 @deepseek-ai/dsh,补声明 pnpm 布局下不可解析的 dsh-llm-pi-ai,原生依赖安装脚本显式拒绝已完成;本机安装、启动与版本核对通过
start 增加本地 DSH Web 启动目标已完成--web 与交互多选新增「DSH Web」,固定 8070 端口,与 Turbo watch 目标互斥已完成;本机启动、端口与组合拒绝均实测通过
本地 DSH_HOME 指向仓库根 .dsh已完成子进程注入 DSH_HOME=<仓库根>/.dsh,清除继承的 DSH 会话身份,.dsh/ 加入忽略规则已完成;profile 落点与忽略规则实测通过
仓库插件内置进本地 profile已完成启动前用 Turbo 构建并经 DSH CLI 链接;已在 bundle 中的跳过;排除 @tnnevol/dsh-fnos已完成;清空 .dsh 后全流程实测通过,二次启动幂等
单账号「一键完成」与跨账号互斥已完成弹框内刷新左侧新增「一键完成」;宿主改按账号加锁,运行中禁用全账号按钮与该账号单项按钮,其他账号不受影响已完成;实现与构建通过,账号级互斥与禁用范围由单测守住
风控指纹对齐与「跑完但没完成」修复已完成对齐来源指纹头族与节流间隔;专家类任务改用真实 chat requestId;桌面链补全事件载荷;执行后按账号回读并如实汇报未达标项已完成;实现与构建通过,动作契约与汇报语义由单测守住

变更记录

日期变更说明
2026-09-14新增 FNOS-005记录把 workbuddy2api-panel 的 CodeBuddy 成长任务与任务中心移植到本仓库 CodeBuddy 插件的需求;开学季活动另立需求,不在本轮范围
2026-09-14补充运营周期配置边界明确成长任务移植不新增、不复制「自动签到」「自动旅行」配置项(当时的落点是隐藏两处入口)
2026-09-14新增管理后台快捷操作增加一键签到(仅处理未签到账号、全已签到时禁用)与一键完成成长任务按钮及验收条件
2026-09-14FNOS-005 完成实现与自验成长任务 API、动作执行、单/全账号队列、管理后台按钮与配置边界已实现;插件 56 个测试文件/670 条测试、构建、根全量检查及当前 2 个 WorkBuddy + 2 个 CodeBuddy CLI 账号接口实测通过
2026-09-14调整成长任务 UI 与执行状态个人成长任务收拢到账号信息弹框新增的「成长任务」Tab(弹框加大一档、刷新入 Tab);「一键完成成长任务」改名「完成任务」并移到「添加账号」右侧(间距 10px);点击改为 loading;执行状态落盘宿主,刷新后保持 loading
2026-09-14成长任务列表限定高度并可滚动列表容器与「用量信息」资源列表同口径(min(52vh, 620px) + overflow-y: auto),超出时列表内滚动;「完成任务」按钮配色对齐「添加账号」(solid + primary)
2026-09-14修正 loading 与 disabled 的用法两者改为并存、各表达一件事(loading=进行中,disabled=不可提交),不再二选一;单项任务按钮状态互不影响;因 Semi 的 disabled 优先级高于 loading,执行态不叠 disabled,重入改由处理函数内的 ref 判断挡住
2026-09-14成长任务列表分未完成 / 已完成两栏「成长任务」Tab 内新增二级 button Tab(未完成/已完成),默认停在未完成;分组只看 claimed,达标未领奖仍属未完成;两栏各自带数量与空态
2026-09-15补充签到节奏说明明确自动签到是「开启即跑一轮 + 每 30 分钟一轮」的定时间隔(对齐 workbuddy-switch 的 CHECKIN_RECOVERY_INTERVAL),并记录退避阈值与其余周期间隔;新增 AC-03/AC-04(当时实现已如此,本次只是把既有行为写进规格)
2026-09-14撤销隐藏运营周期开关实施中曾把两个开关从管理面板与设置页一并移除,导致开关不可见、Host 周期默认仍开启却由历史 localStorage 隐式决定;先恢复两处
2026-09-14最终定位:开关只在管理面板「自动签到」「自动旅行」保留在管理面板(唯一入口,控制 Host 任务启停),设置页不再渲染;FNOS-005-05 与两条验收条件按此改写
2026-09-14新增任务执行日志抽屉FNOS-005-10:点「完成任务」自动展开底部 SideSheet,用 CodeHighlight 逐条展示日志;宿主每条处理完即追加落盘(串行、有上限),抽屉在执行中轮询追更
2026-09-14去掉动作区的日志按钮原在动作区加过手动「执行日志」入口,用户要求移除:抽屉改为只由「完成任务」唤起,避免动作区控件过多
2026-09-14签到与旅行并入「完成任务」动作区去掉独立「一键签到」按钮;点击「完成任务」按「领养 → 其余任务 → 签到 → 旅行」执行,已签到/在途/今日已旅行跳过;执行顺序由插件显式指定(上游返回顺序无依赖保证)
2026-09-14日志抽屉观感与入口调整抽屉改为占半屏(50vh)且上半屏用 DSH mask token 做半透明磨砂;日志区固定高度内部滚动;去掉「准备中」空态改为具体起始日志(开始/读取任务列表/结束);恢复常驻「查看日志」按钮且不带 loading/disabled
2026-09-14修掉日志抽屉的假滚动条内容区补 box-sizing: border-box + overflow: hidden:无全局 border-box 重置时,height:100% 加 8px padding 会比容器高 8px,导致日志很短也出现滚动条
2026-09-14日志改用终端风格弃用 CodeHighlight(只接收纯字符串、Semi 未加载任何 Prism 语言词法,无法分段着色)改为自渲染逐行;深色底与滚动条同在一层,修掉「滚动条落在另一种背景上像溢出」;时间/账号/状态分别着色
2026-09-14抽屉底部留白 15px.semi-sidesheet-bodypadding-bottom: 15px(限本组件作用域,保留 Semi 的左右 24px);已用浏览器实测不产生溢出或裁切
2026-09-14领养前置为第一 + 日志着色与等待动效first_buddy 提到执行顺序首位(它自带上报,无需 chat_5 先跑);日志按结局着色(未完成红/完成跳过绿/一半黄/进行中蓝);补齐开始执行、等待计分、签到与旅行的查询日志,并给最后一行加等待动效
2026-09-14旅行增加领养前置自动旅行与「完成任务」在派发前先查 buddy/info,无猫则先领养再旅行;用「显式 null」判定无猫以免误触发;门槛未达标记当日不再重试
2026-09-14单项任务复用日志抽屉弹框内单项「完成」也在发起 RPC 前打开同一抽屉(同一份宿主日志);抽屉 zIndex 提到 1010 以避免被 Modal 盖住
2026-09-15日志改虚拟滚动 + 缓存两轮日志列表改用 Semi Table 虚拟化(行高固定、实测宽高);宿主缓存从「200 条上限丢最早」改为「仅保留本次与上次两轮」,消除早期账号日志被静默裁掉的问题
2026-09-14单项日志立刻可见 + 全量执行禁用单项点单项「完成」时本地先落一条「开始执行…」(宿主落盘后自动让位),抽屉不再显示空态;「完成任务」期间禁用全部单项按钮;收尾顺序改为先解 loading、再以宿主为准、最后清乐观记录
2026-09-15并入本地 DSH 开发环境需求主题扩展为「CodeBuddy 成长任务移植与仓库内 DSH 开发环境」(文档与计划文件同步改名),新增 FNOS-005-11/12/13:仓库内安装固定版本 dsh CLI、start 增加本地 DSH Web 目标、以仓库根 .dsh 作为 DSH_HOME
2026-09-15明确端口与组合约束本地 DSH Web 固定 3150,避免与 FPK 网关的 3080 冲突;起初约束 DSH Web 不能与插件 watch/文档服务同时启动
2026-09-15允许 DSH Web 与其他目标同时启动原「必须单独选择」的约束被用户使用反馈证伪,改为可与插件/文档并行;FNOS-005-12-AC-03 同步改写
2026-09-15改回保留 TUI 的实现首次修复用 --ui=stream 关掉 TUI 换取并行,属错误修法(用户要求保留 TUI 多任务形态)。改为把 DSH Web 做成 Turbo 根任务 //#dev:web,与 dev 交给同一个 turbo watch,TUI 保留且各占一行;因 Turbo 严格模式会剥掉未声明的 DSH_HOME,该任务声明 passThroughEnv
2026-09-15补齐依赖安装策略记录 DSH 原生依赖使用预编译产物、allowBuilds 显式拒绝安装脚本的原因,避免 pnpm install 因被忽略的构建脚本失败;补声明 pnpm 隔离布局下不可解析的 @deepseek-ai/dsh-llm-pi-ai
2026-09-15新增 FNOS-005-14本地 DSH Web 启动时自动把仓库插件内置进 .dsh profile(先 Turbo 构建,再经 dsh plugin --profile web add 链接);按用户要求排除 FPK 专用的 @tnnevol/dsh-fnos
2026-09-16FNOS-005 验收完成FNOS-005-01 至 FNOS-005-14 全部功能均已验证通过,需求状态与验收记录确认完成
2026-09-17新增 FNOS-005-15弹框「成长任务」Tab 的刷新左侧新增单账号「一键完成」;宿主由全局单队列改为按账号互斥,使「该账号在跑时禁用全账号按钮、其他账号不受影响」可真实成立(否则其他账号可点但会被宿主拒绝)
2026-09-17新增 FNOS-005-16逐条比对来源 workbuddy2api-panel 后补齐风控与判据差异:指纹头族(X-CodeBuddy-Request/X-Machine-ID/X-Session-ID/桌面 UA)、上报与召唤链节流、expert_actual_use 必须 JOIN 真实 chat requestId、桌面链完整事件载荷;并明确「按账号回读真实状态、未达标如实汇报」的语义
2026-09-18本地 DSH Web 端口改为 8070原 3150 与开发者本机其它常用服务冲突概率高,按用户要求固定为 8070;FPK 网关的 127.0.0.1:3080 区分关系不变。文档服务端口仍为 9876
2026-09-18文档服务端口改为 8876按用户要求把 VitePress 开发端口从 9876 改为 8876;与 DSH Web 的 8070、FPK 网关的 3080 均不冲突

基于 VitePress 构建