Skip to content
View chainlesschain's full-sized avatar

Block or report chainlesschain

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
chainlesschain/README.md

ChainlessChain - 基于U盾和SIMKey的个人移动AI管理系统

📋 Android v1.0 重新定位 RFC 评审中(2026-05-10)—— 桌面 = AI 工作站,手机 = 钥匙 + 捕获器 + 遥控器。停止以 skill 数量对标桌面,转 L1 (StrongBox/DID/QR) + L2 (Voice/Camera OCR/推送) + L3 (REMOTE 调用桌面 skill) 三层架构。详见设计文档 | 用户文档

📦 CLI 安装npm i -g chainlesschain(别名 cc / clc / clchain)。 中国大陆镜像用户注意:若你的 npm 默认源是淘宝镜像 registry.npmmirror.com,可能遇到安装报错 npm error code E404 … '@chainlesschain/…' is not in this registry——这是镜像对新发布包懒同步 tarball 导致(元数据已有但 tarball 尚未缓存)。改用官方源安装即可:

npm i -g chainlesschain --registry https://registry.npmjs.org

镜像通常会在发布后稍候自动补齐(项目发版流程也会主动触发同步);补齐后用默认镜像源安装即可正常。

2026-07-25 当前主线 — v5.0.3.135 / CLI 0.162.179 / PDH 0.4.55 / VS Code 0.37.33

npm 公网 latest 已对齐 [email protected]@chainlesschain/[email protected];桌面端与 Android 当前为 5.0.3.135,VS Code 扩展为 0.37.33。Python Agent SDK chainlesschain-agent-sdk==0.1.0 已通过 PyPI Trusted Publishing 发布。

本轮主线是个人数据中台跨端实时采集:92 个已注册采集契约 / 18 类数据源按当前宿主和输入显示真实 readiness,桌面端、Web Panel 与 CLI 统一支持立即同步、文件、目录、临时 Cookie、临时 OAuth 和 Android ADB 六类入口。Cookie/OAuth 不持久化;缺失备份、无效来源页或不可达输入失败闭合;长任务只有完整稳定扫描后才推进水位,取消或中断可安全续扫。另修复 QQ NT 字段语义、Windows Recent / Android 系统数据续扫、WhatsApp 带密钥备份和微信读书游标保留。

详见个人数据中台用户指南系统架构与安全边界更新日志

2026-07-24 当前发布 — cc CLI 0.162.177 / IDE VS Code 0.37.31:技能子进程统一进入宿主 Process Broker

[email protected] 已发布到 npm latest,VS Code 扩展 0.37.31 已发布到 Open VSX。CLI-Anything 与 CLI 指令技能包生成的 handler 不再直接持有 child_process:声明 shell-exec 的技能仅获得宿主注入、冻结且带权威来源信息的 Process Broker facade;CLI-Anything 使用字面 argv + shell:false,危险字符、未闭合引号或缺少 Broker 时 fail closed。发布门覆盖 Ubuntu / Windows / macOS 的 unit、integration、E2E、打包和真实 CLI/Extension Host 烟测;本地 CLI 单元四分片 24,562 项通过、5 项跳过。详见 CLI Runtime 当前实现CLI 技能包用户指南运行时设计核对

2026-07-23 发布 — IDE 插件 VS Code 0.37.31:CLI 0.162.177 协同兼容版本

VS Code 0.37.300.37.31Open VSX)。扩展协议与最低 CLI 版本不变,打包兼容夹具对齐 0.162.177;发布前通过 VSIX 元数据校验,以及 VS Code Stable 1.130.0 / 最低支持版 1.85.2 的真实 Extension Host 安装、激活、命令和桥接端口烟测。Microsoft VS Marketplace 尚未配置发布令牌,官方 VS Code 用户可从 Open VSX 下载 .vsix 安装。

2026-07-16 发布 — cc CLI 0.162.168:增量 gap-analysis 第二批接线(后台 Agent「等待审批」真实状态 / hook trace·parent 溯源 / LSP 多根+重启退避默认开 / 严格 hook 合并真并行 / 大仓 subagent worktree·子树指令 / run_code install 审计)

CLI-only 发版(0.162.167 → 0.162.168,npm latest,provenance)。后台 agent 卡人工审批时把 phase:"waiting_permission" + 实时 pendingApprovals 写进共享 state(Dashboard "Needs input" 从此有真数据)+ 统一 install 审计扩到 run_code 的 pip 自动安装(识别 python -m pip install 含 sudo 包裹,一份 install-commands.jsonl 覆盖所有「下载并运行第三方代码」入口)+ hook 事件溯源(event_id/trace_id/parent_id 四 payload 构造点,子 agent hook 事件跨深度关联父 trace)+ strictest-merge 决策合并(opt-in CC_HOOK_STRICT_MERGE=1,修「较早 ask 掩盖较晚 block」缺口)与 PreToolUse 真并行 + LSP 重启退避默认开(1s→2s→4s→8s,CC_LSP_RESTART_BACKOFF_MS=0 关)与多根 code_intelligence--add-dir 根拿自己项目的语言服务器)+ 子树指令懒注入默认开(工具首访子树附 cc.md/CLAUDE.md/AGENTS.mdCC_SUBTREE_INSTRUCTIONS=0 关)+ subagent worktree 稀疏检出透传 / agent-file background:true 真生效 / headless --add-dir seed MCP roots。命令数 175 不变

2026-07-16 发布 — cc CLI 0.162.167:增量 gap-analysis 收尾(P0 沙箱远程脚本执行检测 / 4 个生命周期事件钩子 / doctor 孤儿子进程 / 4 项杂项接线)

CLI-only 发版(0.162.166 → 0.162.167,npm latest,provenance)。统一「代码获取」分类器把 20+ 包管理器安装命令与 curl … | sh 一类下载即执行远程脚本归类,shell 审批抬高风险地板 + 落审计(remoteExec 标记;cat file | sh 与仅下载不误报)+ 4 个生命周期钩子真实生产者(CwdChanged / WorktreeCreate·WorktreeRemove / InstructionsLoaded——携权威指令文件清单绝不含内容,observe-only 零字节默认)+ cc doctor 孤儿 agent 子进程检测(进程起始时间锚定防 PID 复用,给 taskkill/kill 修复命令)+ async-hook 持久重唤队列崩溃恢复 / MCP roots/list_changed 广播 / LSP 就绪安装缺口检查 / Session Mirror at-rest 加密·删除·保留·密钥轮换。命令数 175 不变

2026-07-15 发布 — cc CLI 0.162.166:P1-9「Capability Manifest 与脱敏诊断包」收官(协议文档 CI byte-diff / 离线协议回放 / 治理覆盖率指标)

CLI-only 发版(0.162.165 → 0.162.166,npm latest,provenance)。协议能力文档从唯一源 capability-manifest.js 单源生成 + 测试内 byte-diff 断言(manifest 加字段未重生成即测试红,drift 不可能 merge 绿)+ 离线协议回放与前向兼容审计(录制 stream-json 会话按协商上下文回放/审计,携带 gate-OFF wire 字段即违规 fail-closed)+ 治理覆盖率指标(高风险调用 Ledger/Trace 覆盖率 + Plugin/MCP/Skill/Hook 溯源可追溯率,双 100% 才 ok,离线工具可对 CI 强制)。命令数 175 不变

2026-07-13 发布 — cc CLI 0.162.165:精简项目记忆(--no-project-memory 全关 / CC_PROJECT_MEMORY=lean 只留入口文件 / IDE 聊天「精简上下文」默认开)

CLI-only 发版(0.162.164 → 0.162.165,npm latest,provenance)。文档密集仓库里 cc agent 每轮重发整套项目记忆(实测 ~12k token/轮)——现分三档:full(默认不变)/ lean(保留 cc.md > CLAUDE.md > AGENTS.md 首个入口文件,丢 CLAUDE.local.md.claude/rules/*.chainlesschain/rules.md,实测 ~12k → ~5k)/ off--no-project-memory 跳过整个层级)。IDE 侧经环境变量下发(旧 cc 不认自动回退 full)。命令数 175 不变

2026-07-13 发布 — cc CLI 0.162.164:IDE 增量 gap-analysis 全批接线(凭据脱敏三导出面 / /rewind 从这里分支 / cc session pr-status / Diff 行评论锚定 / worktree 清理安全闸 / 崩溃恢复台账 / 脱敏诊断包)

CLI-only 发版(0.162.163 → 0.162.164,npm latest,provenance)。cc session export / OTLP / cc doctor --export-bundle 三导出面共用 recall-first secret-scan(导出物离机朝「不泄漏」失败)+ 崩溃恢复两阶段副作用台账(--resume reconcile,started-未落定-非幂等 op 注入 Recovery notice 而非盲重跑)+ /rewind <n> --branch 从选中 turn 派生独立会话(父会话绝不截断)+ review finding 锚到代码而非裸坐标(file+baseHash+行原文,改后 reanchor/标 outdated)+ cc session pr-status(PR/CI 状态条 + 默认关的 auto-merge 合格性穷举判定)+ worktree reaper fail-closed 安全闸(未提交/未 push/关联 PR 任一即保留)+ cc doctor「Execution context」段 + 无人值守动作门 + 跨设备操作指纹全元组校验。命令数 175 不变

2026-07-13 发布 — cc CLI 0.162.163:增量 gap-analysis last-mile 运行时接线(Subagent 契约全轴强制 / 跨 Agent 授权边界 / hook 事件日志+replay / plugin consent 生命周期 / /goal 循环 / --json-schema / OTel)

CLI-only 发版(0.162.162 → 0.162.163,npm latest,provenance)。0.162.162 announce 的纯核整批落成真实运行时接线:spawn 真正消费 resolveSubagentContract(tighten-only)+ 本地 headless 审批链路携带并校验授权信封 + 会话完成条件引擎接线 + Turn↔Checkpoint 绑定持久化与 coverage-aware /rewind + 副作用台账崩溃恢复纯核 + 持久 Scheduler jitter + cc plugin consent 再同意 + cc hook replay/events-log + REPL /goal 循环 + --json-schema 结构化输出 + 统一 OTel id。命令面只加子命令与 flag,顶层命令数 175 不变。本地三层全绿(unit+integration 25,008 + e2e 628)。

2026-07-12 发布 — cc CLI 0.162.162:增量 gap-analysis 收尾(Subagent 契约/Turn-Checkpoint 绑定/Plugin 能力 Schema/Hooks 事件总线/JSON Schema/多 Agent Review + LSP 诊断/Doctor+文档+OTel)+ IDE gap P0

CLI-only 发版(0.162.161 → 0.162.162,npm latest,provenance)。对照 docs/CLAUDE_CODE_CLI_INCREMENTAL_GAP_ANALYSIS_2026-07-12.md(vs Claude Code v2.1.207)P0/P1/P2 全部章节收口:P1 Subagent 契约(tighten-only 继承/覆盖,权限加宽钳回父级、capabilities 取交集、memory 父拒不授予)+ Turn↔Checkpoint 绑定(覆盖度 FULL/PARTIAL/NONE,恢复计划永不过度承诺)+ Plugin 能力声明与配置 Schema(默认 DENY + 加宽需重新同意 + 敏感选项拒 project 配置);P2 Hooks 统一事件总线(信封 + event_id + 决策最严胜出 + 决策类 replay 必须显式 sandbox)+ JSON Schema 结构化输出(Draft 2020-12 子集 + schema_digest + structured_result)+ 多 Agent Review 聚合核(dedupe 跨维度合并 + verifier 复现剔除 + 结构化 path/line/category/severity/failure_scenario/evidence)与 LSP 自动诊断调度(debounce/throttle + token 上限先丢最不严重)+ Doctor Runtime Checkup(agenda 逾期/慢·熔断 Hook/失效 Plugin·LSP/冗长指令文件)+ CLI 参考文档漂移检测(从 manifest 175 + 工具 26 生成并双向 diff)+ 统一 OTel id(九 id 归一 + content 默认脱敏 [redacted] + 基数收敛,每 span 带 workflow.run_id+session.id)+ IDE gap P0(远程审批绑定操作指纹 + 会话生命周期状态机)。命令数 175 不变。发版前本地三层全绿(unit 23,182 / integration 1,044 / e2e 628)。

2026-07-12 发布 — cc CLI 0.162.161:增量 gap-analysis(后台状态机/跨 Agent 授权/凭据代理/完成条件/Monorepo 排除/持久 Scheduler)+ bg-* WS relay 协议硬化

CLI-only 发版(0.162.160 → 0.162.161,npm latest,provenance)。跨事件 trace_id(stream-json 每行 run-scoped,字符集 ≤128)+ 后台 Agent Idle/Needs-input 状态机(仪表板分组)+ 跨 Agent 授权信封(origin→authority,仅 user/permission_tool/认证 approve-scoped remote 可批准,approval binding 常数时间 fail-closed 防冒用)+ 凭据代理(子进程默认屏蔽长效凭据哨兵 cc-cred-redacted:<NAME>,审计绝不记录还原明文,approved-host fail-closed 注入)+ 会话级完成条件引擎(exit-zero/file-exists/contains/regex/model/裸 + 预算 + 可恢复快照)+ Monorepo instructionExcludes(glob 排除 legacy/vendor/generated,@import 也跳过防凭据进 prompt)+ 统一持久 Scheduler 规划器(FNV-1a 确定性 jitter 防惊群 + 自适应唤醒 + 过期退休)+ bg-* WS relay 序号缺口 replay / 出站背压 / 跨语言 fixture 契约。命令数 175 不变

2026-07-11 发布 — cc CLI 0.162.160:运行时安全与确定性 8 批(沙箱严格模式 + 依赖/凭据安全 + 确定性 Headless + Subagent 契约 + MCP 生命周期 + Hooks 硬化)

CLI-only 发版(0.162.159 → 0.162.160,npm latest,provenance)。⚠️ 三处行为变更run_code 的 pip 依赖默认不再自动安装(改 opt-in + allowlist + 审计 JSONL);agent 脚本默认写 OS 临时目录(persist:true 才进项目);headless/agent 退出码细化(最大轮次→3 / 预算→4 / 模型错误→5 / 配置错误→6)。另含 --ephemeral 只读回放 + init 事件补协议/持久化/指纹字段 + cc agent --capabilities 机读能力清单 + llm.apiKeyHelper(外部命令→OS 凭据库,失败 fail-closed 告警一次绝不静默替换)+ 沙箱 failIfUnavailable 启动期强制探测引擎(不可用即拒绝启动,不再静默降级)+ Subagent disallowedTools/maxTurns/isolation:worktree(并修出子代理工具白名单从未传入 LLM 面的真 bug)+ cc session rename/prune · cc daemon rm · cc mcp trust-project + MCP list_changed 合并式重拉 + .mcp.json 指纹变更 fail-closed 重信任 + Hook payload schema_version + 连续失败熔断。命令数 175 不变(只加子命令)。

2026-07-11 发布 — cc CLI 0.162.159:Claude-Code 平价 gap-analysis 14 项收口(cloud handoff + /tui + /voice + /fast + plugin 治理 + session SQLite 索引)

CLI-only 发版(0.162.158 → 0.162.159,npm latest,provenance)。对照 docs/internal/cli-claude-code-gap-analysis-2026-07-11.md 14 项全落地:cc cloud 自托管 cloud handoff(git bundle 上传私有 runner→回流 patch/PR,无 Anthropic 云依赖)+ /tui 全屏无闪烁视图(备用屏缓冲 + diff 重绘 + CC_NO_FLICKER=1)+ /voice 语音听写(local-first STT,SSH/headless 清晰降级)+ /fast 延迟档(最小化推理 + 换低延迟模型,不覆盖 /model 钉过的模型)+ 插件治理(manifest dependencies semver 约束 + LSP 注册表候选表回退 builtin + 被动组件不误判"未使用")+ cc session index 外部 session 存储(JSONL 权威 + SQLite 索引增量同步/搜索 + 可插拔 fs/http mirror)。命令数 173 → 175(新增 cc cloud + cc routine)。

2026-07-10 发布 — cc CLI 0.162.158:browser_state agent 工具 + REPL /remote-control 赛跑审批 + web-panel 直连配对/审批卡片 + 交付物预览下载

CLI-only 发版(0.162.157 → 0.162.158,npm latest,provenance)。browser_state 第 25 个 agent 工具(Chrome CDP 观察:URL/标签页/console/失败网络/DOM 快照/截图,纯只读仅 loopback,plan 模式可用)+ REPL /remote-control(交互会话内配对手机,终端 prompt 与远端设备赛跑审批——远端静默永不代键盘用户 auto-deny)+ web-panel 直连(direct-LAN)配对与 permission.request 一等审批卡(relay E2EE 与直连双方案自动识别,断线幂等 commandId+seq)+ 交付物 Markdown 预览与浏览器完整下载。安全修复 ×2:直连配对明文 ws:// 收紧到私网/回环主机(钓鱼配对 URI 无法导走 serverToken/审批决定)+ chrome-connector launch-arg 加固(-- 开头 URL 不再被 Chrome 当开关解析)。命令数 173 不变,AGENT_TOOLS 24 → 25。

2026-07-10 发布 — IDE 插件 VS Code 0.37.12 / JetBrains 0.4.56:IDE 内配对二维码 + Remote Control relay 设置面(gap 清单收口)

IDE-only 双端发版(Open VSX + JetBrains Marketplace 均已上架)。Remote Control 配对不再要求盯终端:一次性配对 URI 直接在 IDE 内渲染成二维码(VS webview / JB 对话框,双端共享同一自包含 QR 编码器纯核),手机扫码即配对;relay(E2EE 跨网)模式的 --relay-url / --peer-id 也有了 IDE 设置面(VS settings / JB「Relay settings…」对话框)。至此 IDE gap-analysis 清单全部非环境阻塞项收口(#5 行范围 mention @file#L12-40 核实为早已落地的 stale 记录;#8 browser_state 一等 agent 工具已进主线,工具数 24 → 25,随下次 cli 发版上 npm)。验证:VS 70 测试文件 / 605 绿 + vsix 解析级检查 7/7;JB test + smokeTest + buildPlugin 绿 + zip 解析级检查 6/6。同日主线还落了 web-panel 直连(direct-LAN)配对 + permission.request 审批卡片(批 28,随下次 cli 发版)。

2026-07-10 发布 — cc CLI 0.162.157:IDE diff 审阅修订摘要 + plan 审阅快照 + cc browse chrome + --bare/无斜杠/读屏模式

CLI-only 发版(0.162.156 → 0.162.157,npm latest,provenance)。IDE 深度整合增量:diff 审阅里你改了什么 agent 现在看得见(accepted 结果携带 userAmendments -/+ 行级修订摘要,配合 JetBrains 0.4.55 可编辑右栏端到端闭环)+ plan 批准/拒绝携审阅快照写入会话 transcript(可审计回放)+ cc browse chrome(CDP attach 用户真 Chrome,登录态复用,console/网络/DOM/截图观察)+ Artifacts v1publish_artifact 工具+cc artifacts——交付物只有元数据进对话)+ Windows/PowerShell 一等(run_shell shell 参数/显式 argv/PowerShell(...) 权限伞形)+ --bare 最小攻击面裸模式 / --disable-slash-commands / --ax-screen-reader 读屏友好。命令数 172 → 173。发版前干净 worktree 三层全绿。

2026-07-09 发布 — cc CLI 0.162.156:cc agenda + cc batch(第四阶段收口)+ @chainlesschain/agent-sdk 0.1.0 npm 首发

CLI-only 发版(0.162.155 → 0.162.156,npm latest,provenance);@chainlesschain/agent-sdk 0.1.0 同 run 首发 npm。命令数 170 → 172cc agenda(notify/schedule 双 agent 工具的持久化消费端——wakeup/cron/monitor 意图落 ~/.chainlesschain/agent-schedule/,到期 spawn cc agent -p)+ cc batch(大改动拆独立单元、每单元独立 git worktree 并行、--test 门控 + --merge 顺序集成,冲突报告不强合)。发版前本机三层全绿(unit+integration 23,447 / e2e 628)。SDK 详情见下条主线。

2026-07-09 主线 — 平台化第三阶段:@chainlesschain/agent-sdk TypeScript 接入套件 + 四端契约化(已随 0.162.156 发 npm)

新包 packages/agent-sdkcc agent 的 stream-json 双工协议固化为版本化正式契约(Agent Protocol v1):流式事件、审批回调、检查点、会话恢复不再靠各消费端手拼 argv、手写 NDJSON 解析,而是 import 即得(protocol.ts 单一来源 + 语言中立 docs/PROTOCOL.md)。VS Code 扩展(vendored CJS,vsce --no-dependencies 约束)与 web-panel(vite alias 直指 TS 源,bg-* 帧全走 SDK 构造/判别)已迁移;JetBrains 插件(Kotlin/Java)声明实现同一份协议文档。AgentSession 内置 Windows 加固(cmd.exe /c shim + NoDefaultCurrentDirectoryInExePath 反劫持 + taskkill /T 进程树回收),审批回调 fail-closed。SDK 自带真 CLI e2e(fake ollama,断言 init/流/审批真写盘/resume 四契约),落地当天抓出并齐修两个真 bug:两 IDE 首会话不落盘(匿名流式会话按 CLI 设计不持久化 → IDE 重载后 resume 静默空会话,重载前上下文全丢;修复=面板首启即声明 panel-<ts>-<rand> session id,VS Code + JetBrains 同修)+ .js 入口 spawn 失败。验证:agent-sdk 36/36(单元+真管道集成+真 CLI e2e)、vscode-ext 58 文件/512、JetBrains smoke 663/0、web-panel 2458/2458。用户文档 docs-site/docs/chainlesschain/agent-sdk.md | 设计文档 docs/design/modules/103_Agent_SDK平台化方案.md

2026-07-09 发布 — cc CLI 0.162.155:权限模式/auto 分类器 + 后台会话可交互接管 + MCP Tool Search(第一阶段收口,已发 npm latest)

gap-analysis「第一阶段:安全与可运营性」全量收口(批 1-18,命令数 165→170):权限模式补齐 manual/auto/dontAsk(headless + 交互 REPL 双面;auto=settings autoMode.decisions 可配置分类器,支持 riskLevel 与 tool/commandPattern 细粒度规则;dontAsk=需确认动作直接 deny 不弹审批);决策逐层解释链(被拒命令附 settings-rules→shell-policy→approval-gate 各层判定,cc permissions recent 跨会话回看);后台会话可运营(顶层 cc logs/attach/daemon status|view|stop|rename|resume,崩溃会话一条命令续接同一对话);cc attach 可交互接管(worker 每会话本地 session transport,键入即发 follow-up prompt 多轮续跑);web-panel「后台 Agent」面板bg-* WS 协议复用同一 transport,接管 token 永不过网络边界);外加 cc remote-control 统一远控入口与移动端远程审批桥。已发 npm latest(provenance),旧版已标弃用。

  • MCP Tool Search(同版并入):接入多个 MCP server 后全部工具 schema 随每次请求发送、轻松吃掉 10–30% 上下文窗口的问题收口(对标 Claude Code ToolSearch)——schema 超阈值(默认窗口 10%,settings mcp.toolSearch / CC_TOOL_SEARCH 可配)时自动换成 [deferred] 紧凑 stub + 内部 tool_search 检索工具,完整 schema 经工具结果按需返回。真机实测 12 工具 server 省 ~14k tokens。

  • prompt cache 友好:stub 常驻且字典序稳定、schema 装载走对话内容(append-only)、晚连接 server 追加不重排——Anthropic 路径的尾部 cache_control 缓存断点跨 turn 保持命中。

  • 直调自愈:未先检索就直接调 deferred 工具 → 返回内嵌完整 schema 的错误并标记已装载(不打真 server),重试即通过。

  • /context 增强:REPL /context 新增 MCP tool schemas 一节——per-server token/窗口占比、tool search 状态(deferred/loaded/节省量)与优化建议(alwaysLoad 收窄 / 断开点名的最大 server)。

  • 顺带:MCP initialize 的 server instructions 不再被丢弃,随 tool_search 结果按 server 附带。

  • gap-analysis 第四阶段「跨端与长任务」补齐(remote-control 随 0.162.155、agenda/batch 随 0.162.156 均已发 npm)cc remote-control start/status/stop(进程内起 WS server + 常驻 loopback HOST 会话 + 打印配对 URI/二维码,relay E2EE 或 direct-LAN 双模)与 cc agent --remote-control(confirm 级审批路由到已配对移动/Web 设备,超时 fail-closed)已随 0.162.155 发 npmcc agenda(Monitor/Cron/Push 长任务调度消费者 + notify/schedule 两个 Agent 工具)与 cc batch(把大改动拆成独立单元、各跑自己的 git worktree 并发执行、测试与合并冲突预览的动态批处理,支持 --decompose 自动拆分)已随 0.162.156 发 npm(命令数 170 → 172)。三层测试全绿(remote-control 36 / agenda 29 / batch 17)。用户文档 cli-remote-control.md · cli-agenda.md · cli-batch.md

2026-06-18 主线 — cc CLI 客户端/传输层稳健性硬化(对照 Claude Code CLI)+ 三层测试普查

对照 Claude Code CLI 排查 cc 自身的网络/IO 客户端层(并行平价循环未覆盖的一层),修复一批「静默失败 / 永久挂起 / 截断不报错」类稳健性问题,全部带专项单元测试。三层测试普查全绿(CLI 单元 19523 / 集成隔离 24 / e2e 604),普查另暴露并修 1 个 --verbose 回归 + 2 个陈旧断言。

  • 写入完整性write_file / edit_file 落盘后校验实际字节数,网络盘 / 云同步盘静默截断或 0 字节写不再假成功。
  • MCP 韧性tools/list 失败显式「! Connected · tools fetch failed」/ stdio 进程猝死立即拒绝在途请求(不挂 30s)/ HTTP 请求补 30s 超时(longRunning 豁免,顺带接通预留未消费的元数据)/ cc mcp serve 请求体上限 + 超时 + 错误处理。
  • 安装下载完整性cc setup 校验 Content-Length(截断即弃不安装)+ 停滞超时(防挂死镜像冻结安装)。
  • 资源清理:SIGTERM→SIGKILL 升级定时器 unref + 进程退出即清,杀任务后不再占住事件循环、延迟 CLI 退出。

2026-06-16 主线 — JetBrains IDE 插件 0.4.0:对齐 VS Code 扩展功能(已发 JetBrains Marketplace)

packages/jetbrains-plugin/ 一次性补齐与 VS Code 扩展(0.22–0.30)的功能差距,经 ./gradlew runIde 沙箱逐特性人工验证后发版(tag ide-jetbrains-v0.4.0 → CI publishPlugin)。

  • 多会话 tab:Chat 工具窗变多会话——每个 tab 独立 cc agent 子进程、+ 新建 / 单 tab × 关闭 / 即时切换 / 每 tab resume id 跨 IDE 重启保留。
  • 审批模式 + 扩展思考:面板斜杠命令 /auto·/bypass·/normal + /think·/ultrathink·/think-off(spawn-time 标志,切换即以新标志重启子进程);面板斜杠 /new·/stop·/cost·/context·/plan·/approve·/reject
  • 上下文用量行 + 新建/重开快捷键:每轮后刷新 ⊟ context …/…(n%)Ctrl/Cmd+Alt+N 新会话、Ctrl/Cmd+Shift+T 重开最近关闭(续接)。
  • 选区动作 + @文件引用:编辑器右键 Explain / Refactor(注入 @selection);Ctrl/Cmd+Alt+K 插入 @<path>#L<起>-<止> 选区行范围;输入 @ 弹出补全(@selection/@diagnostics + 项目文件)。
  • 原生 diff 评审:openDiff 升级为 Accept / Request changes…(行内批注回喂)/ Reject;openMultiDiff 多文件批量评审(全接受 / 挑选文件 / 拒绝)→ mcp__ide__openMultiDiff
  • 交互 Plan / 审批卡:plan 与工具审批以带 Approve/Deny(Approve/Reject)按钮的卡片呈现,按钮回喂同 VS Code 的 stdin 协议。
  • App 内嵌预览:Start App Preview 拉起 dev 脚本 → 解析 URL → JCEF 内嵌(不支持时回退外部浏览器);Stop 杀进程树。
  • 修复(runIde 验证中发现,编译查不出):多会话重构曾让回复被静默丢弃(turnState 类型错→首个流事件 CCE 杀掉读线程);New-UI 工具窗图标空白(栅格内嵌 SVG → 真 PNG);输入框过窄(改为独占整行)。

2026-07-03 发布 — v5.0.3.134:CLI OAuth 命令注入修复 + MCP 列表加固 + workflow resume 重驱动(cli 0.162.148 / Android cc bundle 20260703 · USR 74)

CLI 安全 patch 上船真机:mcp-oauth 授权 URL 曾经 cmd.exe 被 & 注入任意命令(远程 MCP metadata 可影响),改 http(s)-only + rundll32 无 shell;MCP 服务器列表一条坏行不再炸整列表;桌面 workflow-engine 断点/审批恢复真正重驱动执行。chainlesschain 0.162.148 已发 npm,随本版打入 Android in-app cc bundle。逐版完整明细见 CHANGELOG.md

2026-06-28 发布 — v5.0.3.131–133:个人数据中台采集/分析三连(MIUI 浏览历史 + 账单月份/时间线修复 + 微博私信)(pdh 0.4.39 / cli 0.162.129)

累计 v5.0.3.131–133:MIUI/AOSP 默认浏览器历史采集器;PDH 分析层两处日期正确性修复上设备;微博私信采集(device-verified schema,高敏感 opt-in)。逐版完整明细见 CHANGELOG.md

  • v5.0.3.131 — MIUI/AOSP 浏览历史采集器:新增 browser-history-aosp 适配器,直读 com.android.browserbrowser2.dbhistory/bookmarks,列名经 PRAGMA table_info 动态解析,ROM 变体安全),复用 Chrome 适配器的 normalize() 产出一致的 BROWSE Event / LINK Item,闭合 schema 字典记录的 MIUI 默认浏览器「适配缺口」。
  • v5.0.3.132 — PDH 分析层日期修复上设备:账单月份从 dueDate 推算时 naive setMonth(getMonth()-1) 在还款日 29–31 号溢出到错误月份(改 new Date(year, month-1, 1));时间线显式 sinceMonths 被默认 7 天窗口静默遮蔽(改为仅未给窗口时套默认)。新增桥接连通集成测试(6 测试,自动化跨设备验证法)。
  • v5.0.3.133 — 微博私信采集:补全 message_<uid>.dbt_buddy→PERSON / t_session→TOPIC / t_message→EVENT,列名真机 device-verified),高敏感 → opt-in includeDm:true(默认关),不影响既有 posts/likes/follows。
  • 版本面:productVersion v5.0.3.130 → v5.0.3.133;pdh 0.4.36 → 0.4.39 + chainlesschain 0.162.117 → 0.162.129 已发 npm;Android cc bundle internal-binaries-android-v20260628c(USR_VERSION 61)。

2026-06-24 发布 — v5.0.3.130:QQ空间一键采集 + 微信朋友圈采集 + §8.3 学习层备份上设备 + 个人助手 UX 收口(pdh 0.4.36 / cli 0.162.117)

累计 v5.0.3.127–130:QQ空间(Qzone)App 内嵌 WebView 一键采集(说说/留言板/相册)+ 微信朋友圈明文采集;§8.3 学习层备份命令上设备;个人助手卡死看门狗 + 待裁决信任卡固定可见。逐版完整明细见 CHANGELOG.md

  • QQ空间一键采集:Qzone 本地无可读库 → 走 API。新增 pdh/lib/forensics/qzone-collect.jsg_tk=bkn hash over qzone 域 p_skey;说说/留言板/相册 → EVENT)+ cc hub collect-qzone;Android「QQ空间」一键采集卡——内嵌 WebView 打开 ptlogin2 登录(QR / 账号密码)→ 抓 cookie → in-APK 采集入设备金库。真机端到端验证:扫码登录 → 采集 404 事件(329 说说 + 73 留言 + 2 相册)
  • 微信朋友圈采集SnsMicroMsg.db 是明文 SQLite(无需密钥);新增 parseSnsEvents(SnsInfo → EVENT,正文取 protobuf TimelineObject)。本机真机采 2824 条。
  • §8.3 学习层备份上设备cc memory/instinct/learning export/import(层次化记忆 + 学习习惯 + 自进化轨迹)随新 cc bundle 上设备,与 vault 命令合并覆盖全资产端到端加密备份,密钥归个人不上云。
  • 个人助手 UX:卡死静默看门狗(20s 安抚 / 120s 友好超时 + 重试 / 进程退出自动重启)+ 待裁决信任卡固定(sticky)可见,不再被消息流滚走。
  • 版本面:productVersion v5.0.3.126 → v5.0.3.130;pdh 0.4.36 + chainlesschain 0.162.117 已发 npm;Android cc bundle internal-binaries-android-v20260624(USR_VERSION 58)。

2026-06-22 发布 — v5.0.3.126:个人数据中台 on-device 采集大扩展 + §8.3 跨设备加密备份 + 桌面安全硬化(pdh 0.4.31 / cli 0.162.99)

累计 v5.0.3.122–126:PDH 端侧采集(QQNT / 微信 / 通用明文库 + 多 app Magisk 守护进程)大幅扩展;§8.3 跨设备加密备份引擎落地;桌面 IPC/权限安全硬化转 ENFORCE;CLI 健壮性与 IDE 配置体验完善。逐版完整明细见 CHANGELOG.md

  • PDH 端侧采集:QQNT collect-qq(frida-free,nt_msg.db 解密入库)/ 微信 collect-wechat(派生密钥解密 + 解析)/ 通用明文库 collect-db;多 app 通用 Magisk 守护进程(MIUI 全自动上设备);个人助手 PDH 工具上设备 + node DNS 修复(in-APK cc 外网打通)。
  • §8.3 跨设备加密备份:增量同步 + N 路版本并列冲突合并 + 加密块信封 + DID 派生备份密钥 + libp2p P2P 块传输 + 协调器(坏块跳过不中断整体恢复)。
  • 桌面安全硬化:IPC 发送方帧信任 / actor-identity / param-identity 守卫默认 ENFORCE;权限 grant/revoke/delegate/bulk-grant 的 RBAC 授权。
  • CLI / 后端 / IDE:数值选项 NaN 守卫 + config.llm 一致化(cc agents·command·cowork·orchestrate 不再误走 ollama)+ cc agents 接线修复;后端校验 500 修复 + 大批新测试;VS Code / JetBrains 配置 LLM 预填(免重输模型 + key)。
  • 版本面:productVersion v5.0.3.121 → v5.0.3.126;pdh 0.4.31 + chainlesschain 0.162.99 已发 npm。

2026-06-19 发布 — v5.0.3.121:个人数据中台分析/采集修复 + FAMILY-67 通话/通知体验 + Android 键盘遮挡修复(pdh 0.4.29 / cli 0.162.82)

个人数据中台(PDH)一批分析管线 + 查询解析 + 抖音/头条采集修复;FAMILY-67 通话/消息通知体验完善;Android 全局键盘遮挡一处修复。release 发 18 个安装包资产。逐版完整明细见 CHANGELOG.md

  • PDH 分析管线spending 总额改用 sumEventAmount(不再被每子类型 5000 行上限少计);overview byApp/byType/total 用 facetCounts(不再被 1 万行上限截断);timeline 排除使用画像聚合基线事件。
  • PDH 查询解析:补收入类金额词 +「多少/几」量词对称;移除 income 裸「收到」误判;「最近 N 个月」月末不再月份溢出丢整月;「花了多少钱」无「总共」时不再误判为列表(应为求和)。
  • PDH 采集:抖音使用画像 + 观看记录 vault ingest;头条明文文章 reader(标题在 share_info blob);可复现微信 EnMicroMsg.db 解密入库脚本。
  • FAMILY-67 通话/通知:断网重连宽限(ICE DISCONNECTED 不静默挂死);好友连接自愈(仅 DataChannel 已连时才发起 E2EE 握手);未接来电通知 + CallStyle 锁屏来电 +「保持在线接听」前台服务;好友消息通知深链进对应聊天 + 运行时申请 POST_NOTIFICATIONS(Android 13+)。
  • Android 键盘遮挡:edge-to-edge 下加全局 imePadding,一处修复所有页面输入框被键盘遮挡。
  • 版本面:productVersion v5.0.3.120 → v5.0.3.121 / desktop 5.0.3-alpha.121 / Android versionCode 503121 / iOS CFBundleVersion 121(check-version-sync 绿);pdh 0.4.29 + chainlesschain 0.162.82 已发 npm;Android cc bundle internal-binaries-android-v20260619(USR_VERSION 49)。

2026-06-18 发布 — v5.0.3.120:FAMILY-67 好友通话历史 + 来电铃声 + CLI 网络鲁棒性(cli 0.162.81)

好友语音/视频通话历史落库可查看 + 来电铃声/振动/去电回铃音 + CLI 各处网络 fetch 加超时防永久挂起。release 发 18 个安装包资产,文档三站(docs / design / www)已同步部署上线。逐版完整明细见 CHANGELOG.md

  • 通话历史:好友语音/视频通话终态经 CallHistoryRecorder 落库 call_history(来/去电、未接、音视频类型、挂断原因);好友资料页「查看通话记录」按好友 DID 过滤或查看全部(Flow 实时读取)。
  • 来电铃声/振动 + 去电回铃音:来电播放系统铃声 + 振动(尊重静音/振动模式),去电播放回铃音,修「来电无声音」。
  • CLI 网络鲁棒性:webhook 通知 / cc update·vcheck 更新检查 / provider 连通性探针均补超时(dead endpoint 不再永久挂起);reputation / 插件收益分账拒绝 NaN 的 score/amount。
  • 版本面:productVersion v5.0.3.119 → v5.0.3.120 / desktop 5.0.3-alpha.120 / Android versionCode 503120 / iOS CFBundleVersion 120(check-version-sync 绿);chainlesschain 0.162.80 → 0.162.81 已发 npm。

2026-06-15 发布 — v5.0.3.114:个人数据中台 gov-ixiamen 端点真机静态校验 + Android cc bundle v20260615d(pdh 0.4.25 / cli 0.162.71)

用已 root 真机对 PDH「端点抓包」runbook 跑静态分析层(只读 APK 二进制,无任何登录态/账号介入)。修正 gov-ixiamen 采集器的虚构占位主机——旧 app.ixm.gov.cn 实为不存在域名;真机 dex 静态分析确认 i 厦门真实后端为 *.ixiamen.org.cn(业务网关 https://buss.ixiamen.org.cn/pbc/),已改为真实网关(opts.listUrl 可覆盖),子路径 + 请求体仍 unverified(body 经 libzxprotect 加密静态不可见)。中行(SecNeo 壳)/工行(请求体加密+签名)维持 snapshot;12123 域名早已正确。@chainlesschain/personal-data-hub 0.4.24→0.4.25 + CLI 0.162.70→0.162.71 已发 npm;Android cc bundle 滚到 v20260615dUSR_VERSION → 45。桌面 / Android / iOS 全 surface 对齐 .114(check-version-sync 绿)。

2026-06-15 发布 — v5.0.3.113:npm 发布/安装链路加固(修复中国大陆镜像装机 E404 + 版本弃用 workflow)+ VS Code 扩展 0.28/0.29 + CLI 0.162.70

桌面 / Android / iOS 全 surface 对齐 .113(check-version-sync 绿);Android cc bundle 滚到 v20260615c(携 cli 0.162.70 + pdh 0.4.24,USR_VERSION → 44)。

  • 修复中国大陆镜像 npm install E404#33):@chainlesschain/[email protected]registry.npmmirror.com 仅有元数据、tarball 未缓存 → 默认走淘宝镜像的用户装机硬失败。已手动触发镜像 sync API 修复线上(tarball 404→200);npm-publish.yml 新增「发版后自动 PUT 镜像 sync API」步(best-effort,不阻断发版),后续发版自动补齐;README 中英补「改用官方源 npm i -g chainlesschain --registry https://registry.npmjs.org」说明。
  • npm-deprecate.yml:参数化 workflow,用 CI 的 NPM_TOKEN secret 弃用/取消弃用已发布版本(本地 token 已过期)。已弃用误从陈旧 tag 发布、漏 8 个 PDH adapter wiring(douban/ximalaya/keep/didi/mercedes/eleme/xianyu/vipshop)的 [email protected]0.162.69 为完整修复版,0.162.70 为当前 npm latest
  • VS Code 扩展 0.28.0 / 0.29.0(已发 Open VSX):后台 tab 完成信号;聊天面板 / slash 命令 + @ 补全 + /rewind 回到 agent checkpoint。

2026-06-15 发布 — cc CLI 0.162.66:Claude-Code 编码闭环补齐——cc review(diff-first + --fix/--comment)+ headless 硬化 + cc insights + 全局 run/verify 技能(已发 npm)

对照 Claude Code CLI 的剩余高价值缺口一次性补齐。chainlesschain 0.162.65 → 0.162.66 已发 npm(全局安装实测 cc review / cc insights / cc agent 新 flag 全通)。

  • cc review — diff-first 代码审查(/code-review 平价):默认审工作区 vs HEAD,可 --staged / --base <ref>(PR 式 base...HEAD)/ --range A..B / --paths,并内联未跟踪新文件;low|medium|high 力度档;--security(/security-review)与 --simplify(/simplify,只清理不抓 bug)两种视角。只读模式走 plan 权限(不可改文件)出 Markdown 报告;--fix 走 acceptEdits + 自动 checkpoint 直接落地修复(每次编辑可 cc checkpoint restore 回滚);--comment 解析机读 JSON findings → 经 gh 在当前分支 PR 上发行内评论(--dry-run 预览 + 交互确认)。
  • headless 无人值守硬化--max-budget-usd <amount> 硬花费上限(按 cc cost 价格表累计每次调用成本,到顶前停下,免跑飞);--strict-mcp-config(只用 --mcp-config 服务器,忽略已注册 + IDE 桥,工具面可复现);--replay-user-messages(stream 输入模式回显用户消息便于转录/对账)。
  • cc insights [id] — 会话分析报告(/insights 平价):轮次 / 工具调用与错误率 / 时长 / token 用量 + 估算 $ 成本,纯 JSONL 复盘;比 cc cost 更强——从 session_start 回填模型为 headless 会话定价。
  • 全局 run / verify 技能:新增 cli-bundled 技能层(随 cc 包发布),run(按项目类型拉起并实跑)+ verify(观测真实行为给 VERIFIED / NOT VERIFIED / BLOCKED 裁决);放 CLI 自有层而非桌面 builtin,不动桌面端「144 技能」计数

2026-06-14 主线 — 全栈测试普查修复 + project-service 项目导出 UTF-8 编码 bug(待并入下一发版)

  • 真实 bug 修复project-service 项目导出写 ZIP 条目时用平台默认编码(GBK 默认 JVM),导出含中文内容的项目后,UTF-8 的导入端读取时抛 MalformedInputException、无法回环重导入;改为始终 UTF-8 写入 + 文件内容为 null 时写空条目兜底。
  • 测试套件普查:跑通 CLI(单元/集成/e2e)、桌面(store/集成/全量单元)、Web Panel、core 包、后端 Javamvn test)与 Pythonpytest)全栈,修复全部真实失败,仅余环境受限项(需 Ollama/Qdrant 服务或 GPU 本地推理)。
  • 关键修复:CLI deprecated-shim 导出平价 + hub 子命令清单 + skill sources 4→6 层 + 24 个 e2e 文件子进程超时 15s→30s(消除 Windows 冷启动抖动);桌面内置技能计数 145→146 + 纯文档型技能白名单;后端 Java mvn test 32 失败→0;后端 Python git_manager/code_generator 过期断言对齐(pytest 15→41+ 通过)。
  • e2e server-readiness 二次硬化(上一条的正交轴,commit 26a811874):4 个 e2e 文件 16 个失败全部根因于 singleFork 满负载下子服务器冷启动慢、就绪等待器/per-test 预算太紧(非产品 bug——cc ui 独立跑约 3.3s 即就绪)。ui-command/web-panel 就绪 fallback 8s/10s→25s(旧逻辑到期静默返回空输出,级联砸 13 个测试)、coding-agent waitForReady 10s→25s、mtc-audit 给显式 120s、orchestrate 修 timeout 倒挂 20s→40s(旧值比子命令自身 30s 超时还短)。验证 89/89。详见内部手册 trap #31。

2026-06-11 主线 — cc CLI 0.162.41:Claude-Code 平价终章——项目记忆(cc.md)+ REPL steering + 结构化输出(已发 npm,待并入下一发版)

  • 项目记忆体系(claude CLAUDE.md 平价,自有主名 cc.mdcc agent 启动自动加载 cc.md > CLAUDE.md > AGENTS.md 层级(用户级/项目链/local 伴随/.chainlesschain/rules.md/路径作用域 .claude/rules@path 递归 import,48K/192K 预算 fail-open);cc init 默认改为项目盘点生成 cc.md(/init 平价,模板退 -t--ai 用有界 agent 精炼约定),已有 CLAUDE.md 自动 @import 防遮蔽;cc memory files 查看实际加载链。
  • REPL steering 三件套 + 快捷键:回合中输入 FIFO 排队(修掉并发回合 race)、Esc 即时中断(复用 agentLoop AbortSignal)、/rewind + 空闲双 Esc 会话回退(原文回填改完重发);! <cmd> bash 直通(输出回灌上下文)、# <note> 一键记入 cc.md、/ 命令 TAB 补全、/context 实时窗口占用、--resume 离线恢复摘要。
  • 结构化输出与生态出口cc agent -p --json-schema <file>(回答经 JSON Schema 校验 + 自动纠错重试,stdout 只出合规 JSON);cc mcp serve(本机文件工具反向暴露为 MCP server,root 限域 + Bearer);cc session export(agent 转录 Markdown)/ cc session search(跨会话全文检索);启动被动版本提醒(缓存 + detached 后台刷新,热路径零网络)。
  • npm 包chainlesschain CLI 0.162.40 → 0.162.41 已发 npm(发布产物全局安装实测:init 盘点/记忆链/json-schema/mcp serve 全通)。

2026-06-11 主线 — IDE 实时感知:选区/打开文件随 prompt 自动注入 + 编辑后诊断自动回喂(待并入下一发版)

  • 提交时自动共享编辑器状态:IDE 桥接连上后,每条 prompt(headless / stream / REPL)自动附带 <ide-context> 块——活跃文件、打开标签页、当前选中代码,模型即时知道"你正看着什么",无须手动粘贴;只进在途消息、不写会话持久化(--resume 回放原话)。
  • 编辑后诊断自动回喂:agent 改完文件,编辑器语言服务器的 error/warning 自动回流到工具结果,模型在同一循环内看到并修掉刚引入的报错。
  • 开关与测试CC_IDE_CONTEXT=0 一键关闭;新增 37 项测试(31 单测 + 4 集成 + 2 真进程 e2e,全部免编辑器宿主可跑)。

2026-06-18 — 好友 P2P 加密语音 / 视频通话(FAMILY-67,Android)

在好友端到端加密消息(FAMILY-67)之上补齐 1:1 实时语音 / 视频通话:纯 P2P + DTLS-SRTP 端到端加密,信令复用既有信令服务器中继(与消息同一好友 DID 路由),媒体走独立 WebRTC PeerConnection。设计文档 docs/design/FAMILY-67_Friend_P2P_AudioVideo_Call_Design.md §10。

  • P0 信令状态机CallManager(呼叫/响铃/接听/拒接/挂断 + glare 双呼仲裁 + 超时)+ CallSignalingClientcall:* 信令经信令服务器中继,DataChannel 没建过也保送达)。
  • P1 语音:独立媒体 PeerConnection(复用消息侧 PeerConnectionFactory + ICE/TURN 配置)+ 音频路由(MODE_IN_COMMUNICATION + 听筒/扬声器)。
  • P2 视频:懒建带 EglBase + 编解码工厂的视频版 PeerConnectionFactory,前置摄像头采集 + 远端全屏 + 本地 PiP + 摄像头翻转。
  • P3 后台/锁屏:来电前台服务(microphone|camera,保锁屏/熄屏麦克风不被杀)+ 全屏来电通知(越锁屏点亮屏幕 + 接听/拒接)+ 接近传感器贴耳息屏。
  • 测试:状态机/信令/集成(Robolectric)/握手 e2e 共 34 个 JVM 单测全绿;真机双向音视频 + 锁屏来电验收需两台真机。

2026-06-14 发布 — v5.0.3.110:个人数据中台采集器扩面 — 13 个新平台 adapter(出行 / 购物 / 社交 / 文档 / 音乐 / 视频 / 招聘)

一轮 /loop 把 PDH 采集覆盖补齐:完成阶段所有 ≥⭐⭐⭐ 平台 + 可行的长尾全部落地。逐项明细见 CHANGELOG.md

  • 新增 13 个采集 adapter:同程旅行 / 滴滴企业版 / 大众点评 / 知乎 / CSDN / WPS 云文档 / 腾讯文档 / 百度网盘 / 酷狗音乐 / 爱奇艺 / 腾讯视频 / BOSS 直聘(每个均 snapshot + cookie-api 双模)。
  • 3 个同形平台共享工厂_document-base(文档/云盘)、_video-base(视频观看史),复用既有 shopping/travel/im base 模式。
  • 已发布@chainlesschain/personal-data-hub 0.4.18 + CLI 0.162.60(npm);Android cc bundle → internal-binaries-android-v20260614b(携全部新 adapter)。
  • 版本面:productVersion v5.0.3.109 → v5.0.3.110 / desktop 5.0.3-alpha.110 / Android versionCode 503110 · USR_VERSION 36 → 37 / iOS CFBundleVersion 110。

2026-06-14 发布 — v5.0.3.109:修复 Android 发布 APK 缺 cc bundle(release.yml 补 downloadInternalBinaries + 硬验证 gate)

v5.0.3.108 真机验证发现发布的 APK 不含 cc-cli.tgz(设备上 local-terminal/cc 不可用)。根因:release.yml 只跑 assembleRelease,downloadInternalBinaries 的 preBuild dependsOn 在 CI 不触发。逐版完整明细见 CHANGELOG.md

  • 修复:build-android 在 assemble 前独立跑 downloadInternalBinaries(保证 cc-cli.tgz 落盘),build 后加硬 gate(unzip -l apk | grep cc-cli.tgz 缺则 fail),杜绝再发无 bundle 的 APK。
  • 纯打包修复:bundle 内容不变(pdh 0.4.6 / internal-binaries-android-v20260613 / USR_VERSION 25)。
  • 版本面:productVersion v5.0.3.108 → v5.0.3.109 / desktop 5.0.3-alpha.109 / Android versionCode 503109 / iOS CFBundleVersion 109。

2026-06-13 发布 — v5.0.3.108:个人数据中台拼多多采集补全(snapshot-only → cookie-api,anti_token signProvider seam)+ Android cc bundle v20260613(pdh 0.4.6 / cli 0.162.48)

拼多多是购物三联里最后一个仅 user-export 快照、无自动采集路径的适配器;本版补齐 cookie-api 主动采集,与 taobao/jd/meituan 平价。逐版完整明细见 CHANGELOG.md

  • 拼多多 shopping-pinduoduo cookie-api(v0.2.0)_syncViaCookie 经注入 fetchFntransaction_list;anti_token 签名经 signProvider seam 注入(Android 端 WebView JS VM 产出);orderToRecord 映射字段(snake/camel 双兼容)+ 分→元 + 状态映射;extractOrders 容错嵌套;分页 watermark 提前停。capabilities 升 sync:cookie-api;+13 测试,PDH 全套 2094 通过 / 9 跳过。
  • 发版链:pdh 0.4.5 → 0.4.6 + CLI 0.162.47 → 0.162.48 已发 npm;Android cc bundle internal-binaries-android-v20260613(pdh 0.4.6)+ USR_VERSION 24 → 25 + binariesVersion 20260612 → 20260613
  • 版本面:productVersion v5.0.3.107 → v5.0.3.108 / desktop 5.0.3-alpha.108 / Android versionCode 503108 · USR_VERSION 24 → 25 / iOS CFBundleVersion 108。

2026-06-12 发布 — v5.0.3.107:个人数据中台 FAMILY-23 家庭守护采集器 v0.2 live fetcher 全收口(作业帮 / 华为学习中心 / 支付宝)+ Android cc bundle v20260612(cli 0.162.46 / pdh 0.4.5)

本版收口个人数据中台「家庭守护 telemetry」最后 3 个仅快照占位的采集器,使其具备主动 live 采集能力。逐版完整明细见 CHANGELOG.md

  • FAMILY-23 采集器 v0.2(snapshot + live 双路):作业帮 edu-zuoyebang(ZYBUSS cookie → 学习/搜题记录)、华为学习中心 edu-huawei-learning(华为账号 cookie → 课程学习记录)、支付宝 finance-alipay(会话 cookie → mobilegw 账单明细,签名 seam + 金额元→分 + 收支方向推导,高敏感闸不变)。三者补齐 sync:cookie + _syncViaLive(normalize 不变),新增共享 _live-json-helpers.js
  • 测试:+39(3 套 live 测试钉请求构造+解析契约),PDH 全套 128 文件 2083 tests 全绿。端点 best-effort(多字段名兼容,未实地验证,漂移时改 api-client 常量)。
  • Android in-APK cc bundle 刷新internal-binaries-android-v20260612(cli 0.162.46 + pdh 0.4.5,内核实测)+ USR_VERSION 23 → 24;真机装新 APK 触发 LocalFilesystemBootstrapper sentinel 23→24 重提取。
  • npm 包chainlesschain CLI 0.162.45 → 0.162.46 + @chainlesschain/personal-data-hub 0.4.4 → 0.4.5 已发 npm。
  • 版本面:productVersion v5.0.3.106 → v5.0.3.107 / desktop 5.0.3-alpha.107 / Android versionCode 503107 · USR_VERSION 23 → 24 / iOS CFBundleVersion 107。

2026-06-11 发布 — v5.0.3.106:PDH 快手 api_ph base64 采集修复 + 高德标题 bug + 全适配器测试收口(pdh 0.4.4 / cli 0.162.40)+ Android cc bundle v20260611(真机实证重提取)

本版以 PDH 个人数据中台采集层为主线。逐版完整明细见 CHANGELOG.md

  • PDH 采集修复(pdh 0.4.4):新版快手 kuaishou.web.cp.api_ph cookie 改为 base64(JSON),加 apiPhDecodeCandidates 解码链恢复 profile 采集;travel-base buildTitlename 三级回退修高德所有行程事件标题 car: ? → ?;订正头条/快手/邮箱 3 处过时注释。
  • 测试矩阵全收口(+180):小红书 ADB 三件套 58 + 出行 6 模块 74 + whatsapp/shopping-base 24 + 快手 base64 9 → 全仓 55 适配器测试覆盖 100%
  • Android in-APK cc bundle 刷新 + 真机验证internal-binaries-android-v20260611(pdh 0.4.4 + cli 0.162.40)+ USR_VERSION 21 → 22;真机(Xiaomi amethyst)实证装新 APK 触发 LocalFilesystemBootstrapper sentinel 17→22 重提取,设备上 pdh=0.4.4 + 两处修复 grep 命中。
  • npm 包chainlesschain CLI 0.162.39 → 0.162.40 + @chainlesschain/personal-data-hub 0.4.3 → 0.4.4 已发 npm。
  • 版本面:productVersion v5.0.3.105 → v5.0.3.106 / desktop 5.0.3-alpha.106 / Android versionCode 503106 · USR_VERSION 21 → 22 / iOS CFBundleVersion 106。

2026-06-10 发布 — v5.0.3.105:cc agent MCP prompts/resources + SubagentStop hook + --fork-session(CLI 0.162.38)+ Android cc 内置 bundle 刷新

把 v5.0.3.104 之后 2026-06-10 的 CLI 平价主线固化为一次正式发版。逐版完整明细见 CHANGELOG.md

  • cc CLI 0.162.38(Claude-Code 平价三连):MCP prompts 作为 slash 命令 + MCP resources 暴露给 agent/REPL;SubagentStop settings.json hook;cc agent --fork-session(复制既有会话为新分支继续)。
  • Android in-APK cc bundle 刷新cc-cli.tgz 重建(cli 0.162.38 + pdh 0.4.3)→ 新内部二进制 release(binariesVersion 20260610)+ USR_VERSION 20 → 21,补上 v5.0.3.101 以来 APK 内置 cc 跑旧代码的缺口。
  • Tests / CI:CLI e2e 共享 helper(testHome + freePort,Layer 2)+ e2e 隔离/重试 CI 加固 + 桌面端 10 个 stale 单测修复。
  • Docs:docs-site 补全 14 个 CLI 命令用户文档 + 全站数字对账(155 命令/145 技能/25 Android)。
  • npm 包chainlesschain CLI 0.162.38 已发 npm + @chainlesschain/personal-data-hub 0.4.3(沿用)。
  • 版本面:productVersion v5.0.3.104 → v5.0.3.105 / desktop 5.0.3-alpha.105 / Android versionCode 503105 · USR_VERSION 20 → 21 / iOS CFBundleVersion 105。

2026-06-10 发布 — v5.0.3.104:CLI 0.162.37(IDE 桥接收官聚合版)+ 全平台版本对齐 + docs/品牌清扫(补记)

(补记)本版主体:CLI 0.162.37 发 npm;iOS/Android/desktop 版本对齐;VS Code 扩展 Open VSX 自动发布 CI + 图标重绘;JetBrains buildPlugin 修复;docs-site 新增 8 个 CLI 用户文档页 + Family Guard 用户页;发布文档脱敏;桌面端 vitest-4 stub bug + 12 个 stale 测试修复。逐版完整明细见 CHANGELOG.md


2026-06-10 发布 — v5.0.3.103:cc loop(/loop 平价)+ IDE 桥接 Phase 3/4(JetBrains 平价 + 发布基建)+ VS Code 扩展可视化与品牌化

把 v5.0.3.102 之后 2026-06-10 的工程主线固化为一次正式发版。逐版完整明细见 CHANGELOG.md

  • cc loop(Claude-Code /loop 平价):固定间隔循环执行 prompt / slash 命令 + --dynamic 自定步速(含 prompt 模式 agent flag 透传)+ --save / --resume 会话持久化 + headless(非 TTY)下稳定运行。
  • IDE 桥接 Phase 3(JetBrains 平价):纯 JDK 协议核(MiniJson / McpServer / LockfileWriter / IdeTools)+ IntelliJ glue,CLI 零改动双证 + 跨语言 interop 实跑验证;REPL 中 IDE 自动连接遵循 --ide / --no-ide
  • IDE 桥接 Phase 4(发布与维护基建)ide-extensions.yml(vsce package/publish + gradlew buildPlugin/publishPlugin,tag + secret 双门控,不建 GitHub Release,缺 secret fail-fast)+ LICENSE/CHANGELOG + 发布文档。
  • VS Code 扩展可视化与品牌化:IDE 桥接可视化(状态栏 + 侧边栏 + 仪表板,0.2.0)+ ChainlessChain 品牌 logo 作为扩展图标与 Activity Bar 图标(0.2.1)。
  • npm 包chainlesschain CLI 沿用 0.162.36 + @chainlesschain/personal-data-hub 0.4.3(已发 npm)。
  • 版本面:productVersion v5.0.3.102 → v5.0.3.103 / desktop 5.0.3-alpha.103 / Android versionCode 503103 / iOS CFBundleVersion 103。

2026-06-10 发布 — v5.0.3.102:IDE 桥接落地(cc ide + VS Code 扩展)+ cc 命令行 Claude-Code 平价收官 + cc agent 多模态视觉输入

把 cc 命令行向 Claude Code 的平价能力收官,并新增 IDE 桥接与多模态视觉输入。逐版完整明细见 CHANGELOG.md

  • IDE 桥接落地:新增 cc ide 命令 + VS Code 扩展,自动发现并连接编辑器内置的 MCP server,支持 openDiff 接受/拒绝往返(CLI 命令数 149 → 150)。
  • cc 命令行 Claude-Code 平价收官:MCP OAuth 远程授权、自定义及内置上下文用量状态栏、输出风格、web_search 可插拔搜索、扩展思考、settings.json 全事件 hooks 及 block 语义、headless agent -p/compact 自动压缩、cc checkpoint 双引擎、权限规则。
  • cc agent 多模态视觉输入cc agent --image(自动使用配置的视觉模型)。
  • npm 包chainlesschain CLI 0.162.36 已发 npm。
  • 版本面:productVersion v5.0.3.101 → v5.0.3.102 / desktop 5.0.3-alpha.102 / Android versionCode 503102 / iOS CFBundleVersion 102。

2026-06-09 发布 — v5.0.3.101:CLI Claude-Code 平价收尾 + PDH 微信4.0/QQ-NT 一键采集 + 安全 fail-closed 套件

把 v5.0.3.100 之后累积的工程主线固化为一次正式发版。逐版完整明细见 CHANGELOG.md

  • CLI 向 Claude-Code 平价收尾:headless agent -p 全家桶(--output-format / --max-turns / --allowed-/--disallowed-tools / --permission-mode / stdin / --input-format stream-json / --system-prompt / --add-dir / --fallback-model)+ @file 引用在 ask/chat 平价 + cc cost token 计费(可 llm.pricing 覆盖)+ 文件态 cc checkpoint/rewind。
  • CLI agent 能力扩展:扩展思考 --think / --ultrathink / --thinking-budget(Anthropic,自适应 effort 与 legacy budget 自动择一)+ 多模态图像输入 --image(png/jpg/gif/webp,按 provider 转换:OpenAI 兼容透传 / ollama / anthropic)+ 内置 web_search 工具(可插拔搜索源:tavily/brave/bocha/千帆 + 免 key DuckDuckGo/百度)。
  • PDH 微信 4.0 完整采集 + QQ-NT 一键解密/解析:微信 4.0 每库独立密钥 + zstd 消息体 + 公众号/朋友圈/收藏 + 非文本人话化;QQ-NT 端到端解密 + protobuf 解析(真机 nt_msg.db 验证)+ 名称补全(uin→昵称 / 群号→群名)+ pdh-im-collect 内置技能。
  • 安全 fail-closed 套件(审计跟进):SAML 签名 + OAuth id_token + 通道消息签名 + permission-ipc DB 回退全部 fail-closed,删硬编码 "123456",渲染层 days 入参净化。
  • U-Key 口令托管层(Phase 3,默认 gated OFF) + 桌面 DB/LLM 性能面板 V6 端口接通(db-performance IPC 此前从未注册现接通)。
  • npm 包@chainlesschain/personal-data-hub 0.4.2 → 0.4.3 + chainlesschain CLI 0.162.31 → 0.162.32(待发 npm)。
  • 版本面:productVersion v5.0.3.100 → v5.0.3.101 / desktop 5.0.3-alpha.101 / Android versionCode 503101 · USR_VERSION 19 → 20 / iOS CFBundleVersion 101.

2026-06-08 发布 — v5.0.3.100:个人数据中台采集大更新 + CLI 发布通道修复

v5.0.3.99 把个人数据中台(PDH)采集能力大幅扩容并真机生效;v5.0.3.100 把其后的打包工作固化为一次正式发版(全平台 18 产物已 ship,GitHub Release v5.0.3.100 已发布)。逐版完整明细见 CHANGELOG.md

  • PDH 采集大更新(v5.0.3.99):adapter readiness 止血(从宽松 healthCheck 分离真正「就绪」判定,解决「配置正常却采不到」死角)+ 桌面/移动端「一键采集 / 导入引导」UI + 新接通多家本地直读源(抖音 / 微信电脑版 / QQ-NT / 钉钉 / 飞书 / Apple 健康 / 网易云音乐 / 微信读书)+ email 账单 LLM 补全(Phase 5.5)+ iOS 加密备份解密(Phase 7.5b)。当前 PDH 共 51 adapter / 121 测试文件 / 2040 测试
  • DB 静态加密默认开启(v5.0.3.99)PHASE_1_5_DEFAULT_ON=true 落盘即加密(preflip 自动化闸门全绿)+ DID keystore 打包态 fail-closed。
  • Android「AI 陪学」接入界面(v5.0.3.99):M9 积分引擎 + M10 家长温和度月报 + M5 任务可见 UI 接成家庭 tab 可交互入口;陪伴 tab 复用 core-security KeystoreFacade TEE 加密落盘。
  • CLI npm 发布通道修复(v5.0.3.100)prepublishOnly → build:web-panelnpm publish 下因父进程泄漏 npm_config_local_prefix 把依赖装错位置 → 隔离 temp 构建 + scrub npm_config_* env 修复,CLI 从此可正常发版。
  • npm 包@chainlesschain/personal-data-hub 0.4.1 + chainlesschain CLI 0.162.30 已发布并验证安装。
  • 版本面:productVersion v5.0.3.98 → v5.0.3.100 / desktop 5.0.3-alpha.100 / Android versionCode 503100 / iOS CFBundleVersion 100。

2026-05-24 收口 — PDH Phase 17:桌面本机数据五件套 land

一轮把 PDH 从"主要采社交/订单/出行"扩展到 覆盖桌面本机日常数据流:浏览器(Chrome + Edge)/ 开发工具(VSCode)/ 系统活动(Win Recent)/ Android 媒体清单。全部 desktop-local file-import 模式 — 零扩展、零网络、零账号 — 复用既有 PDH adapter 契约 + LocalVault 加密存储 + AdapterRegistry 调度链。

  • 5 新 adapter(commits 126ec9683 / 8b053843a / c923f627b / 3c1e55559 / 21e125e1ee
    • browser-history-chrome v0.1.0%LOCALAPPDATA%\Google\Chrome\User Data\Default\{History,Bookmarks} SQLite 复制读 + JSON 解。真机:14689 visits + 27 bookmarks。
    • browser-history-edge v0.1.0 — Chromium 子类继承(仅覆盖 _browserConfig() 指向 Edge profile)。真机:2022 visits。
    • vscode v0.1.0 — workspaceStorage/*/workspace.json + globalStorage/state.vscdb terminal.history. 真机:22 工作区 + 32 命令 + 13 路径。
    • win-recent v0.1.0%APPDATA%\Microsoft\Windows\Recent\*.lnk 跨应用打开时间线。真机:52 .lnk。
    • system-data-android v0.2.0 → v0.3.0 — ADB 直采加 media.list (5 类 /sdcard 目录) + per-category include 门控。真机:3751 文件清单。
  • 测试三层完整覆盖
    • 单测 76 新(chrome 17 / edge 7 / vscode 19 / win-recent 13 / SDA v0.2/v0.3 专项 5 + 助手 15)— 全绿
    • 整合测:__tests__/integration/local-data-adapters-pipeline.test.js 6 测验 4 adapter 真走 LocalVault + AdapterRegistry round-trip + 跨 adapter source-tagged 分布断言
    • E2E:__tests__/e2e/local-data-adapters-cli.e2e.test.js 2 测 spawn cc hub list-adapters --json + cc hub sync-adapter win-recent --json,sandbox APPDATA 防污染用户 vault
    • 本地 Win 测试 skip 干净(bs3mc 已知 ABI v140 vs Node 22/24 不匹配),CI Linux 真跑
  • 3 wiring 全 land:CLI personal-data-hub-wiring.js + desktop wiring.js + WS BRIDGE_PREFERRED skip-list 都同步加 5 adapter(避免误走 ADB auto-pull)。categories.js + pdhCategories.jsbrowser-* / vscode / win-recentsystem 分类规则。
  • bug 修:4 个 stale system-data-android.test.js 测试 — sensitivity medium→high / mock bridge 加 sms/call/media 3 method stub。22 旧 + 5 新 v0.2/v0.3 = 27 全绿。
  • 文档Personal_Data_Hub_Architecture.md 加 v0.4 entry + Phase 17 行;本 README 加本章。

memory 沉淀(无新增):本轮所有 adapter 走既有 file-import 模式,无新 trap。Win bs3mc ABI 困境已在 pdh_plan_a_android_standalone_design.md §"bs3mc NODE_MODULE_VERSION mismatch" 记录。


2026-05-22 收口 — PDH v0.2 大爆发:11 平台真接通 + WeChat / QQ 真采集 + Android 端侧 LLM 骨架 (v5.0.3.80)

一日内把 PDH 从 v0.1(Bilibili 一家) 推到 v0.2 真接通 11 平台:社交内容 (微博/抖音/小红书/头条/快手) + 购物 (京东/美团/拼多多/淘宝/支付宝) + 出行地图 (高德/携程/百度地图/腾讯地图) + AI 助手 9 路 WebView (DeepSeek / Kimi / 通义千问 / 智谱清言 / 腾讯混元 / 文心一言 / 字节扣子 / 即梦 / 豆包) + 邮箱 4 家 IMAP (QQ / Gmail / 163 / Outlook via Jakarta Mail) 真接通。WeChat Phase 12.10 4 子阶完成 — SQLCipher 真解密 + frida-inject 真注入 + 16.5.9 binary vendored + APK ship 到 Xiaomi 真机;QQ Phase 13.5 v0.2 — XOR-IMEI 算法 byte-identical sjqz 移植,无需 SQLCipher 无需 frida,仅 root + IMEI。Android 端侧 LLM 全链路 skeleton 落地 (Ktor server + ModelManager + cc spawn + PDH 本机提问 tab)。

  • 平台 v0.2 升级一览(11 placeholder 卡 → 真接通)
    • 社交内容:微博 (c087c36eb) / 抖音 (20f9b2188) / 小红书 (20f9b2188) / 头条 (e1155b1d7) / 快手 (e1155b1d7) — 全 dual-mode (Android in-app snapshot + 桌面 cookie)
    • 购物:京东/美团 dual-mode (f3cbd0693) / 拼多多 SAF JSON (78695c25e) / 淘宝 HTML + 支付宝 CSV (799e364f0)
    • 出行地图:高德/携程 cookie-scrape WebView (0fe572f2) / 百度地图/腾讯地图 (3d1cf9481)
    • AI 助手:9 路 WebView cookie scrape + cc sync wire (1e7725552);8 卡 enable (20e0318b4)
    • 邮箱:QQ/Gmail/163/Outlook 4 家 IMAP 真 Jakarta Mail 接通 (7777f5bec)
  • WeChat in-app collector Phase 12.10 (4 sub-phase 全 land):12.10.1+12.10.2 scaffold (8c52d5963) → 12.10.3 SQLCipher 真解密 (8081f8a0d) sjqz MD5(IMEI+UIN)[:7] 7.x + frida 64-hex 8.x 双路径 + 3 PRAGMA profile fallback + WAL+SHM cohort → 12.10.4 frida-inject (37a4e465d) spawn /data/local/tmp/cc-* + 5-symbol hook → 12.10.6 prereq vendor frida 16.5.9 arm64+armeabi-v7a APK ship (cdfe1048e)。Phase 12.10.5 cc syncAdapter wechat --input wire 早 land。剩 12.10.6 真机 E2E 需 root 机子 + Magisk。
  • QQ Phase 13.5 v0.2 (a07731b46):XOR-IMEI 算法 byte-identical sjqz qq.py 移植。与 WeChat 路径根本不同 — QQ Android 用普通 SQLite + msgData 每行 IMEI XOR-cycle 加密,不需要 sqlcipher-android 不需要 frida — 仅 root + IMEI 输入。4 Kotlin (QQXorDecryptor / QQCredentialsStore / QQDbExtractor / QQLocalCollector) + 27 Kotlin unit tests + JS 13 snapshot + 6 longtail 全绿。
  • A3 Android 端侧 LLM 全链路 skeleton (724 LOC):Ktor LLM server :11434 + ModelManager + cc spawn 内嵌 OllamaClient (f41f06441) + KotlinLlamaCppEngine 骨架 (8f023052a)。架构 HTTP-Hybrid (Kotlin Ktor ↔ in-APK cc OllamaClient)。剩 Maven deps + JNI + 真机 ~5-7d (需 Mac/Linux + Android NDK)。
  • 三道锁 UI + 真接通:拒云 / 销毁 / 导出 — cc hub export 真接通;D11 SAF picker 升级到用户选位置 (7e4fa844f)。
  • AI 给出处真接通 (3a76ee5e4):cc hub event-detail + citation chip 点击跳事件详情 sheet。
  • release.yml 链路修复 (12d1391d1):split workspace deps publish 前置 job — 解 v5.0.3.79 desktop build chicken-and-egg。
  • 测试基线刷新:93 新 snapshot tests (weibo 8 / douyin 8 / xhs 8 / toutiao 8 / kuaishou 8 / jd 8 / meituan 8 / pinduoduo 8 / baidu-map 8 / tencent-map 8 / qq 13) + WeChat Phase 12.10 51 新单测 + QQ Phase 13.5 27 Kotlin 单测。同日 3 stale-assertion fix(longtail Douyin uid / analysis TOTALS regex / hub-command 子命令快照)— 156/156 PDH snapshot + 101/101 desktop PDH + 87/87 CLI hub 全绿。
  • 版本面:productVersion v5.0.3.78 → v5.0.3.80 / CLI 0.162.14 → 0.162.16 / npm @chainlesschain/personal-data-hub 0.2.1 → 0.2.3 / Android versionCode 503080 / iOS CFBundleVersion 80。

memory 沉淀:android_wechat_collector_phase_12_10.md(8 trap + 5 真机 blocker)+ android_qq_collector_phase_13_5.md(10 trap)+ pdh_a8_weibo_v0_2_landed.md + pdh_a3_skeleton_landed.md + wechat_frida_hook_audit_traps.md。完整 PDH v0.2 路线见 docs/chainlesschain/personal-data-hub.mddocs/design/PDH_Article_Implementation_Plan.md


2026-05-22 收口(earlier) — PDH A8 v0.1:Android 完全独立社交数据采集(Bilibili 端到端 + 3 平台占位)

Plan A v0.1 的 "本机数据" tab 从 1 张卡(system-data-android)扩展到 5 张。Bilibili 端到端 ship(WebView 登录 + OkHttp 4 端点 + 本机 SQLCipher vault),微博/抖音/小红书占位卡片(v0.2 已完成 — 见上)。全程不依赖桌面在线 — Android 内完成 cookie 抓取 + HTTP 拉取 + JSON 解析 + 本机加密存储。

  • Bilibili 端到端packages/personal-data-hub/lib/adapters/social-bilibili/{adapter,index}.js JS adapter 重构(stateless constructor + 新 _syncViaSnapshot(opts.inputPath) 模式 + 保留 legacy sqlite-mode)+ 4 个 Kotlin 文件(SocialCookieWebViewScreen 通用 4 平台共用 / BilibiliApiClient OkHttp 4 endpoint / BilibiliCredentialsStore EncryptedSharedPreferences AES-256-GCM / BilibiliLocalCollector 编排器)。4 类事件(观看历史/收藏/动态/关注)yield + normalize 进 vault。
  • HubLocalScreen 多卡片重构:5 张 adapter 卡片 + login WebView overlay + globalSyncingAdapter 互斥锁。微博/抖音/小红书显示 "v0.2 开放" 状态,点登录/同步触发 toast。
  • CLI + Desktop wiring 双 landpackages/cli/src/lib/personal-data-hub-wiring.js + desktop-app-vue/src/main/personal-data-hub/wiring.js 同步加 BilibiliAdapter stateless 自动注册。Adapter tab 现在也显示 2 张卡(system-data-android + social-bilibili)。
  • 测试覆盖
    • JS unit: 12 新 snapshot-mode 测试 (social-bilibili-snapshot.test.js) + 4 legacy sqlite-mode 测试重写 (social-adapters.test.js flat payload 形状) = 547/547 全绿
    • JS integration: 6 新测试 (integration/social-bilibili-pipeline.test.js) 真 vault end-to-end + idempotency + partial + schemaVersion mismatch
    • Kotlin unit: 14 BilibiliApiClientTest (MockWebServer) + 8 BilibiliLocalCollectorTest (mockk) + 15 HubLocalViewModelTest = 37 新测试
    • Android E2E: 8 场景 @Ignore + TODO() stub + 完整 plan docs/design/A8_Bilibili_E2E_Plan.md(Mac/Linux + 真机 + 真账号 ~1.5h 串行)
  • bug 修复:(1) BilibiliApiClient extractUid> 0L 哨兵 — Bilibili 不发 uid=0,旧实现会把 mid-logout cookie 当合法登录 (2) JS adapter sqlite-mode 旧 payload.row.X 套层改 flat payload.X — 既有 4 test 同步迁移
  • 设计文档docs/design/Adapter_Social_Cookie.md ~400 行(4 平台对比 + snapshot schema + JS/Kotlin layer 模板 + 7 forward-looking traps)+ docs/design/A8_Bilibili_E2E_Plan.md ~200 行
  • 架构关键差异澄清:Android 上 PDH 有两条路径长期被混淆:(a) Adapter tab → 桌面依赖(RemoteCommandClient → 桌面 hub registry)(b) 本机数据 tab → APK 内 cc + 本机 SQLCipher vault(完全离桌面)。A8 全落到后者,对应"不依赖桌面"诉求。

memory 新增 pdh_a8_social_adapters_landing.md:7 forward-looking traps (WBI 签名 / EncryptedSharedPref keystore corruption / flat payload vs legacy row / in-APK bundle audit / DedeUserID 提取位置 / OkHttp baseUrl override 时序 / CookieManager flush 同步语义)。v0.2 路线:微博 ~1.5d / 抖音 ~2d(msToken+X-Bogus 签名)/ 小红书 ~2d(X-s 签名)≈ ~5d 总工期。

详见 docs/design/Adapter_Social_Cookie.md

2026-05-21 收口 — PDH Phase 14.1 step 5 ChatBubble UI + Phase 12.9 WeChat 真机 E2E Runbook + office-skill word lib hotfix (v5.0.3.76 → v5.0.3.77 iOS .ipa re-ship)

v5.0.3.76 维护批:office-skill 真功能修 + 3 站全量文档刷新(v5.0.3.76 sizes/版本号);并把 PDH Phase 14 Android 端 ChatBubble UI 收尾 + 新增 WeChat Phase 12.9 真机验收 runbook 一并推到 docs.chainlesschain.com / design.chainlesschain.com。v5.0.3.77 是 .76 的 iOS .ipa re-cut(.76 release run #1 build-ios 失败 + finalize 自动 flip 已发布 → run #2 .ipa 上传被 GitHub immutable-releases blocked;tag burn 走 github_immutable_release_tag_burn 流程,重新 cut .77 全 18-asset 干净 ship 一次)。

  • Phase 14.1 step 5(Android)— ChatBubble UIHubAskScreen 把 flat Surface + plain text 升级成 HubChatBubble(左下 4dp / 右下 4dp 不对称圆角 = 经典 bubble tail;assistant secondaryContainer 左对齐 + user primaryContainer 右对齐;max width 320dp 防长答案撑屏)+ HubBlinkingCursor(500ms reverse-fade )填充 in-flight 推理态。HubAskUiStatesubmittedQuestion field 把「输入框实时内容」与「已提交问题快照」解耦,bubble 显示历史问的同时用户可继续编辑下一题。+2 单测覆盖 submit 快照与 clear 重置;HubAskViewModelTest 累计 10/10 + PDH 5-file 总 44/44 全绿(pure UI/state,无 IPC 改动;framework 全 reuse Phase 5 iOS pattern)。Streaming token-by-token wire-up 仍 defer 待 Phase 14.5。
  • Phase 12.9 WeChat 真机 E2E Runbook (新设计文档)docs/design/Personal_Data_Hub_Phase_12_9_WeChat_RealDevice_E2E_Runbook.md ~21 KB。11 场景验收(首次 ingest / 解密 spot-check / ask Q&A / citation 反查 / 5 万条性能 / 增量 / hook resilience / 反检测 / 失败恢复 / 隐私 gate / 24h 长稳)+ 6-8h 执行预估 + dataset 量级门槛(≥ 5w 条 message 才能上 §12.9.5 大库基准)。与既有 Adapter_WeChat_SQLCipher_Frida_Setup.md(setup-only)+ Personal_Data_Hub_E2E_Runbook.md §11(注册流程)三件套构成 Phase 12.6 完整验收链。
  • office-skill bug fix(aabe7d0f7:(1) readWord stub 替换为真实 mammoth 实现(之前 stub 让 Word 解析路径 silently 返空);(2) wordLib cache 与 paragraph cache 拆分 + 修 paragraphs silent drop。
  • 3 站文档全量刷新:docs-site chainlesschain-docs-v5.0.3.76 487 HTML / docs-site-design design-docs-v5.0.3.76 200 + Phase 12.9 HTML / docs-website-v2 v5.0.3.76 sizes 真值(11 平台 size 全 sync gh release)+ 「144 条 CLI 命令 / 141 内置 Skills」反 stale(之前 dist baked 112/139)。两 sync 脚本 ROOT_FILE_MAP 加 Phase 12.9 显式映射 防 unmapped 文件 silent 落 unknown-unmapped.md 互相覆盖(per memory docs_site_sync_unmapped_fallthrough)。

测试摘要:本轮验过 5 个 PDH Android 测试类 44/44 + 桌面 PDH 4 文件 93/93 + WeChat 适配器 8 文件 107/107 + mobile-skill-whitelist + unified-config-manager 17/17 = 19 文件 / 261 测试 / 0 失败。E2E(Phase 14.4 + Phase 12.9)需 Mac+iPhone+Xiaomi+真桌面 + Xiaomi+Frida-server,Win 单 dev box 不能跑,已 follow-up。

详见 docs/design/Personal_Data_Hub_Phase_14_Mobile_Native_Entry.mddocs/design/Personal_Data_Hub_Phase_12_9_WeChat_RealDevice_E2E_Runbook.md

2026-05-21 收口 — WeChat Phase 12.6.7-10:bootstrap 编排层 + IPC/WS + cc hub wechat CLI + Vue UI 向导 (v5.0.3.75)

WeChat 8.0+ frida-dep 路径一晚从零件凑齐到端到端可用全收口(§18.7 的 6 sub-phase 之上加 4 个新 sub-phase)。

  • 12.6.7 bootstrap.js:把 env-probe → KeyProvider 选择 → WechatAdapter ctor 拼成单入口,IPC/WS/CLI 三 caller 不再各自重发明 wiring。md5/frida/unsupported 决策矩阵 + opts.keyProviderOverride 旁路 + 全注入 test seam(_probe / _md5Provider / _fridaProvider / _WechatAdapter)。14 单测全 hermetic(无 adb、无 Frida、无真设备)。
  • 12.6.8 IPC + WS:4 个 IPC 通道 + 4 个 cc ui WS 主题(wechat-env-probe / register-wechat / unregister-wechat / list-wechat-accounts)。register-wechat / unregister-wechat 加入 approvalChannelsForMobile privileged whitelist —— 防 mobile peer 偷偷往攻击者控制的 dbPath 注册 adapter 或触发 Frida session。15 wiring 单测 + 2 whitelist regression 单测。
  • 12.6.9 cc hub wechat CLIenv-probe / register --uin --db --wechat-data-path [--force-provider] / list / unregister <uin> 4 个 verb 镜像 4 WS 主题,--json 全 verb 可机读,脚本与 Plan A 手机内嵌终端可用。14 CLI 单测。
  • 12.6.10 Vue UI 向导WechatWizard.vue 295 行 3-step drawer(env-probe checklist 动态 Tag 着色 → uin + dbPath + wechatDataPath + forceProvider 表单 → result 结构化错误 + probe.reasons 反馈)+ PersonalDataHub.vue「添加 WeChat」按钮 + composable 4 method。6 composable 单测。
  • 集成测试:9 个端到端测试 covering md5 happy / frida happy / unsupported / md5 缺 wechatDataPath / 幂等重注册 / 两 uin 共存 / override 双向 —— 全部不触真 adb / Frida / 真设备。
  • 真机 E2E 准备Personal_Data_Hub_E2E_Runbook.md §11 新增 3 个 WeChat 真机场景(pre-8.0 md5 / 8.0+ frida rooted / 8.0+ unrooted 优雅拒绝)+ 性能基准表。Phase 12.9 待 rooted Android 设备真跑。
  • 顺带修 stale 注释:docs-site 之前称 iOS Phase 14.2 UI scaffold "lost-to-race / 待重做",实际已在 3db7b5a73 + 1d0c473a3 全部 land(650 LOC PersonalDataHubViews.swift + 3 ViewModel + RemoteDependencies wire + 1491 LOC iOS Hub tests)。

本轮累计:1223 测试 / 67 文件(1068 hub 包 + 183 desktop + 46 CLI + 18 web-panel + iOS 1491 LOC Hub tests)。下一站需物理设备:Phase 12.9 rooted Android 真机 E2E、Phase 14.4 移动端真机 E2E。

详见 docs/design/Adapter_WeChat_SQLCipher.md §18.10 与 docs-site/docs/chainlesschain/personal-data-hub.md

2026-05-20 收口 — Personal Data Hub 一晚 13-phase burst + iOS keychain hotfix repackage (v5.0.3.71/.72)

Personal Data Hub 从 Phase 4 真接通真三方一直推到 Phase 13.7 七 social adapter 全部落地,一晚 15 commits 763047a22 → b2baf4eda。同时 .72 修了 .71 desktop build 全 EUSAGE 的 release 工程 bug。

  • Phase 4.5 — Python sidecar bridge + SystemDataAdapter:JS↔Python 进程间 JSON-RPC 桥接接 4 个 Android system source(通讯录 / 通话记录 / 短信 / 位置)借 sjqz 项目 17 个真已写 parser 避免重写。
  • Phase 7 / 7.5 / 9 — 三大消费场景 adapter 齐落:Shopping three-pack(Taobao + JD + Meituan)/ Mobile Extraction Layer(Android ADB + iOS iTunes encrypted backup 双路)/ Travel four-pack。
  • Phase 10.1 + 10.2 — AIChat 9/9 vendors 全部 live:DeepSeek + Kimi 逆 h5 私有 API + 通义千问 + 智谱清言 GLM + 腾讯混元 + 百度千帆 + 字节扣子 + Dreamina + 豆包,HttpClient infra 接 retry-with-backoff + progress streaming。
  • Phase 11 — 5 个内置 analysis skill 跨 hub 数据源调用,LLM 直接调。
  • Phase 12 v0.5 — WechatAdapter 切 frida-independent slice,T3 风险高→中。完整 SQLCipher dump 仍走 v1.0 frida 路径。
  • Phase 13.3-13.7 — 5 social adapter 落地:Douyin + Xiaohongshu + QQ + Telegram + WhatsApp。WhatsApp 完成 sjqz parser port。+ 13+ Bilibili + Weibo 借 sjqz parser。
  • 质量面:50 test files / 952 tests 全绿(含新增 6 个跨 Adapter 集成 + 3 个 E2E 用户旅程场景 + 3 个 toutiao/kuaishou/doubao scaffold 用例)。2026-05-20 收尾 test sweep 顺手扫出并修了 2 个真 bug:SpendingSkill 漏覆盖 subtype: "order" (Phase 7 Shopping 事件不进消费报表) + AlipayBillAdapter 漏导出 extra.counterparty (分析技能按商户分组失败)。
  • Phase 14.1 + 14.2 手机端远程入口数据层完整(UI 接通在路上):Android Phase 14.1 PersonalDataHubCommands.kt 22 method typed wrapper(21 数据 + runSkill 分析)+ 9 UI 文件(Ask / Adapters / Audit 三屏 + HealthCard + AcceptNonLocalDialog + 3-tab 容器)+ 22 单元测试。iOS Phase 14.2 数据层完整:22 method wrapper + 16 Codable model + 28 单元测试(22 happy + 6 input-guard)— 1:1 对齐 Android,全 kebab-case wire 名,每个测试都断言 method 名防回归。ios-build.yml CI run 26150064237 Build & Test (SPM) job 72s 通过含 28 新单测。预发版静态审计抓住 Android 17 处 camelCase / kebab-case 跨端 method 名错配(首调即 404),sed 修齐生产 + 单测 + 桌面 whitelist 测试。剩:iOS SwiftUI View + ViewModel 接通(数据层已就绪,UI 待下一轮 iteration);Phase 14.3 流式同步进度 + Phase 14.4 真机 E2E 未启。
  • .72 release 工程修复.71 全 5 平台 desktop build EUSAGE — root package-lock.jsonpersonal-data-hub/package.json 不同步(Phase 12/13 加的 adm-zip + iconv-lite optional dep 未注册到 root lock)。5d8ba08b5 sync lock + d03c87d0a packages/cli root lock bump 到 0.162.7 收口,.72 repackage 同样 iOS keychain Logger NSLock 修真出包 18 assets 完整。.71 GitHub Release 不存在(代码在 main + npm 0.162.7 已发,仅 desktop installer 缺),实际只发了 .72

2026-05-20 收口 — iOS 三件套 hotfix:PIN-unlock crash + AppIcon 真编进包 + SQL bind (v5.0.3.70)

三个 iOS 真 bug 一次扫净 + bundle .69 forward。.69 release 因 publish-cli npm 404 卡 draft 8h+;.70 重打 .69 的所有变更 + AppIcon wiring 修复,重跑 publish-cli 成功 PATCH 发布(最终 18 assets 全齐 Latest)。

  • iOS 16 PIN-unlock 闪退CoreCommon/Utilities/Logger.swift 的 metadata 字典在多线程并发改写下 iOS 16 必崩(EXC_BAD_ACCESS)。NSLock 保护 read/write 路径 + 并发 fan-out 单测覆盖。
  • AuthViewModel.createPrimaryDID SQL 参数没真绑:之前用 DatabaseManager.execute(_:) 不带 parameters 的重载,prepared statement 里参数始终空,插入失败/silent skip。改走 execute(_:parameters:) 重载。
  • AppIcon 从未真正编进包Assets.xcassetspbxproj 里被声明为 PBXGroup(逻辑文件夹)而不是 PBXFileReference type=folder.assetcatalog,且没加进 PBXResourcesBuildPhase。结果 18 张 AppIcon + 3 张 LaunchIcon 全套素材在仓里 v0–v0.69 从未被 actool 调用编译,主屏一直是 wireframe 占位。2441b0d8b 修 pbxproj wiring,.70 真正出 Assets.carChainlessChain.app
  • Release pipeline 操作记录.69 finalize-release skipped 因 publish-cli 上游 npm 404;rerun --failed 重试 .70publish-cli 成功 PATCH draft→published。18 assets 完整:4 Android + macOS dmg + Linux AppImage/rpm/deb + Windows Setup/Portable + iOS .ipa + 3 latest.yml + blockmaps。

2026-05-19 收口 — Android Phase 5.6/5.8 cc Chat 自然语言 — 用户大白话直接问 (v5.0.3.67)

个人中心 → 「cc Chat (自然语言)」打开后,直接输入"列下我最近的笔记 / 搜下 RAG 相关的 / 我有哪些 skill",AI 自动识别意图 → 调本机 cc 命令 → 把命令 + 结果回贴聊天。再也不用记 cc 子命令 + flag 怎么拼。

  • Phase 5.6 LLM tool-use 协议接通:OpenAI(tool_calls + type:function 信封)、Doubao 豆包(wire-compat 直 delegate)、Claude / Anthropic(tool_use 内容块 + tool_resultrole=user)三家原生接 tool-use;不支持的厂商(Qwen / Ernie / Spark 等)自动走"防幻觉 fallback",明确告知用户切模型而不是编笔记。
  • Phase 5.7 cc Chat 屏:5 状态进度条(思考 / 准备调用 / 执行 cc / 处理结果 / 整理)+ 工具卡片(命令 + exitCode + 耗时 + stdout 折叠展开 + 取消按钮)。8 个只读子命令(note list/show/view / search / memory list/show / skill list / status / session list / mcp list / did show)走白名单,写/删/安装类 LLM 即便编也会被拦截(exitCode=126)。ProcessBuilder 绕过 shell,无 shell 注入风险。
  • Phase 5.8 真机 E2E SOP:9 个场景 E1-E9 完整 reproducer + 自动化 preflight 脚本 android-app/scripts/e2e/phase_5_8_preflight.ps1(设备/bundle/APK 检查 + 残留扫描);待 Xiaomi 24115RA8EC 真机跑通。
  • 代码审计 + bug 修复:静态审计 8 个新 Cc* 文件找到 3 个 Blocker/High:(1) CcExecService.executeArgv JVM pipe buffer 死锁修(双 async drain,避免 cc search 大输出 hang 到 timeout)/ (2) CcChatOrchestrator.runFallback 不再 silently 丢 StreamChunk.error(HTTP 401 / 网络错显式弹 Failed event)/ (3) CcAllowlist.check 明确拒"有 allowedSubcommands 但用户没传子命令"的情况。
  • 测试覆盖:127 新测试全绿 — feature-ai 89 单测(CcAllowlistTest 38 + CcExecServiceTest 19 + CcToolCallDispatcherTest 17 + CcChatOrchestratorTest 14)+ :app 28 (CcChatViewModelTest 19 + CcChatIntegrationTest 9 端到端走真生产图:VM → 真 Orchestrator → 真 Dispatcher → 真 Allowlist → mock CcExecService,覆盖 E1 happy / E5 deny / E6 fallback / E7 cancel / E9 dedup)。
  • 设计文档Phase 5.8 E2E SOP + Phase 5.8 打印版 Checklist;docs-site / docs-site-design 通过 sync-*.js 已同步刷新。

2026-05-18 收口 — iOS Phase 6 sprint 全套:Knowledge 30 + AI Extended 25 + 15 main tab + 多模态 v0.3 + Agent streaming

一晚 19 commits 收口 iOS 端 Phase 6.3/6.4 全套 hybrid(OQ-3.2=C / OQ-3.3=C),桌面 +55 method + iOS 56 wrap + 2 新 SwiftUI tab + 5 sub-tab UI + 实时录音 + Agent 流式输出。iOS CI 真编 2 轮抓 2 bug 已修,绿基线 1fb947b32

  • Phase 6.3 — Knowledge 桌面 30 method 全 hybrid(commits d5525c1d1874b3b83c)—knowledge-handler.js 老 9 + step 1 (folders 5 + tags CRUD 3 + getNote alias 2) + step 2 (versions 4 + star/pin 6) + step 3 (archive 3 + import-export 4 + tags 高级 3) = 30/30 完成 ✅。新增 SQLite 表 knowledge_folders + knowledge_note_versions + ALTER notes 加 starred/pinned/last_viewed_at/archived 列。92 cumulative tests 联跑 7.94s。
  • Phase 6.3 — iOS KnowledgeCommands actor wrap 31 method(commit 5b0e82c97)—Modules/CoreP2P/Sources/RemoteSkills/Knowledge/:actor 31 method(30 + getNote alias)+ 25 Sendable Response struct + 35 envelope/decode tests。复用 invokeAndDecode helper 模板。
  • Phase 6.4 — AI Handler 桌面 25 method 全 hybrid(commits b6da42ef2 + d23d41cc9 + d0bb48733)—ai-handler.js 老 5 + Phase 5 fix 7 + Phase 6.4 25 = 37 method total:Conversations 高级 5 + Prompt templates 3 + RAG 5 + Multimodal 4 + Code helpers 4 + Agents 4。新表 ai_prompt_templates。RAG/Multimodal/Agents 用 defensive method 检测(双路径 mgr.list || mgr.listAgents),查询缺 dep 降级 available: false,mutating throw。101 cumulative ai tests 联跑 1.7s。
  • Phase 6.4 — iOS AIExtendedCommands actor wrap 25 method(commit cf75e822f)—与 AIChat (Phase 5 12) 并列共 37 ai method 完全覆盖桌面。SeedRegistry methodCount 53 → 37 对齐真实。
  • Phase 6.4 UI — KnowledgeView + AIExtendedView 2 新 tab → RemoteOperateView 15 main tab(commit b92ffe640)—Knowledge 4 filter segmented + 搜索 + 新建 sheet + swipe action;AIExtended 5 sub-tab(Templates/Code 3 mode/RAG)。iOS 16 PhotosUI / TextField axis: .vertical / SwiftUI Outer/Inner + StateObject init 模式(解 @EnvironmentObject init() 不可用)。
  • Phase 6.4 v0.2 — Multimodal + Agents UI(commit d897d3cdf)—AIExtendedView +2 sub-tab → 5 sub-tab(5 触 HIG 软上限,picker 切 horizontal scroll)。Multimodal:PhotosPicker → OCR / 文本生图 AsyncImage / TTS AVAudioPlayer / file picker 转文字。Agents:list/detail/run/stop + 4 色状态 chip。
  • Phase 6.4 v0.3 — Agent streaming + 实时录音(commits a2d41fc7e + 073af9ed4):
    • 桌面 runAgentStream 复用既有 activeStreams Map(streamId-agnostic 与 chat stream 共用),10 desktop tests
    • iOS 3 wrap method (runAgentStream + getAgentStreamChunk + cancelAgentStream) + VM 后台 Task 250ms poll loop + Agents UI 闪烁蓝点 + 实时累积渲染,4 iOS VM tests
    • 新文件 MultimodalAudioRecorder.swift (@MainActor + AVAudioSession + 16kHz mono AAC 录到 NSTemporaryDirectory) + transcribeAudioSection 加 [开始录音] 红色 button + 闪烁红点 + 时长 monospaced
  • iOS CI 真编 verify(commits fa0746860 + 1fb947b32)—iOS GitHub Actions ios-build.yml 2 轮抓 2 真 bug 修:(1) RemoteAIExtendedViewModel.swift:425 nextChunkIdx: Int? 类型不匹配 → ?? sinceChunk (2) StreamChunkResponse 模型缺 error 字段 → 加。Win 无 Swift 编译器,iOS CI 是 1500+ LOC Swift 唯一编译验证路径。绿基线 1fb947b32(Build & Test SPM + Build Release SPM 三 job 全绿)。
  • 设计文档:(1) iOS_对标_Android_Phase_6_Plan.md §11 加 19 commits 时序表 + 实际 vs 计划偏差 + 5 个新模式;(2) iOS_Phase_6_3_6_4_Knowledge_AI_Desktop_Debt.md — Phase 6.3/6.4 debt 审计;(3) iOS_Phase_6_6_Desktop_Skill.md + iOS_Phase_6_7_Extension_Skill.md — Coverage Trap T2/T4 误判修正;(4) iOS_Phase_6_0_RealDevice_E2E_Plan.md v1.0 — 38 场景跨 7 段 reproducer + bug 模板 + 通过/失败 P0/P1/P2 分级。
  • memory 新增 4 entries(type=feedback/project):phase_6_knowledge_ai_hybrid_complete / better_sqlite3_text_number_trap (Number→TEXT "1.0" 5 处 String() 包) / ios_inner_view_stateobject_pattern / ios_ci_only_verify_path_on_win(Win 无 Swift,"Phase X 完成 ✅" 必须等 iOS CI 真绿)。
  • 剩余真机 E2E(plan §11.4 唯一未闭环 follow-up):Mac + iPhone + 桌面在场跑 38 场景。Win dev box 不可推进,移交用户。

2026-05-18 发布 — Android Sub-phase 5-6 v2 + 10 v2:LOCAL 项目终端 picker + 全量项目内容拉取

承接 3319febc4 真机反馈:"弹补填对话框但找不到同名 PC 项目"+"项目文件同步没做"两条阻塞,两件事一次性收口。

  • Issue 1 LOCAL 终端入口改 picker:旧 v1 让用户在手机上敲 Windows 长路径,UX 失败。新 v2 dialog 打开拉桌面 project.list 显示 PC 项目列表 → tap row → 直接保存 pcRootPath + 跳终端,零输入。同名项目高亮 "同名" 标置顶;列表为空时自动展开自定义路径 fallback。
  • Issue 2 全量内容拉取:旧 v1(Sub-phase 7)只存 metadata;用户拉了之后离线打开项目还是 0 文件。新 v2 在 pullSingle 之后循环 project.getFile(fileId) 真把每个文件 content 存 Room project_files。单文件失败 continue + log;content > 1MB skip 占位 row 防 OOM;PullProgress StateFlow 暴露进度 → UI 显 LinearProgressIndicator + "下载文件 N/M: "。
  • 78 新测试RemoteContextViewModelTest × 16 / RemoteProjectBrowserViewModelTest × 7 / mobile-bridge-sync.test.js × 15(含 6 新 handleProjectUpdatePath)/ project-management-handler.test.js × 33(含 9 新 file CRUD)/ project-handlers.test.js × 7。同步修了 3 个 stale 测试断言(504bd6dde 改 userId 过滤后没同步更新)。
  • 设计文档docs/design/Android_Project_Remote_Terminal_Entry.md §12 加 v2 picker 设计 + 全量拉文件设计 + 真机 E2E 8 场景矩阵。
  • commit09bd0ec0f (feat(mobile): LOCAL 项目终端 picker + 全量项目内容拉取)。
  • 剩余真机 E2E:8 场景需 Mac/Win PC + Android 双机配对环境,dev box 无法独验。

2026-05-18 发布 — iOS v5.0.3.64:版本号 4 段制 + AppConstants stale 硬编码清零 + 测试三层覆盖

v5.0.3.63 发版后用户反馈:(1) iOS Settings 「版本」只显示 3 段制 5.0.3 或 stale 0.32.0(实际几个月没更过硬编码常量);(2) PIN 闪退仍报告(待 crash log 复现)。本版三件事:

  • A 修 stale 硬编码(真 bug,找到根因)AppConstants.App.version 几个月一直写死 "0.32.0"buildNumber 写死 "32"bundleId 写死错值 "com.chainlesschain.ios"(CodeSign 实际用 .ChainlessChain)→ 全改用 Bundle.main 动态读。AIDashboardView.swift:95 硬编码 v0.16.0 + PluginManager.swift:118 fallback 1.7.0 一并扫净。
  • B iOS 17 API 二次审计:全仓 596 个 .swift × 29 个 pattern(assumeIsolated / @Observable / SwiftData / symbolEffect / ContentUnavailableView / KeyframeAnimator / sensoryFeedback / Previewable 等)扫描,0 处新增违规AppState.swift v5.0.3.63 修(assumeIsolatedTask @MainActor)已就位。
  • C 测试三层覆盖:11 BundleVersionTests + 7 AppStateNotificationTests + 2 XCUITest(testSettingsVersionDisplaysFourSegmentTag / testPINUnlockDoesNotCrashOnFirstLaunch),锁死版本号格式 + PIN 解锁不崩两类回归。
  • 新 Bundle extensionBundle.appShortVersion / appBuildNumber / appFullVersion(4 段制 5.0.3.64)/ appFullVersionTagv5.0.3.64)/ appDisplayName,所有 UI 统一调。SettingsView 关于栏显示 v5.0.3.64 完整 4 段制 + 加「Bundle ID」一栏让用户能直接确认安装的真版本。
  • 待用户反馈:v5.0.3.63 PIN 闪退根因未在代码层复现。装 v5.0.3.64 仍崩请附 crash log(Xcode → Devices and Simulators → View Device Logs)。SettingsView 新「Bundle ID」字段可帮确认安装的是 v5.0.3.64 真版本。

2026-05-17 发布 — Android 远程文件 skill 端到端(浏览 / 上传 / 下载 / app 内打开)

Android 手机配对桌面后,三大能力一次性落地:浏览 PC 任意目录(无 sandbox)、上传本机文件到 PC ~/Downloads/、PC 文件下载到手机公共 Download 目录(MediaStore.Downloads,原生「文件管理」/「相册」/「阅读器」都能直接看到)。Snackbar 「打开」按钮 Intent.ACTION_VIEW(content://...) 拉系统 viewer,不跳出 app

  • 修 6 个互锁 bug设计文档 §4-§5):(1) P2PClient.kt:538-542 chainlesschain:* skip guard 太宽屏蔽 P2PClient 自己的响应 → 缩窄成只 skip incoming request / (2) Plan C 不调 P2PClient.connect()sendCommand 立即 "Not connected"RemoteCommandClient 改 delegate SignalingRpcClient / (3) PC handleFileCommand 旧 stub 含 dialog.showOpenDialog 弹文件夹框 + 缺 listDirectory case → 新 android-file-handler.js 11 action / (4) FileTransferHandler (web-shell sandboxed) 不可复用 → 不复用 / (5) checksum "sha256-prefix:" vs Repository 期望 "md5:" → 返 null / (6) getExternalFilesDir 用户找不到下载文件 → MediaStore.Downloads 公共目录。
  • 5 个 UI 入口:📁 浏览远程目录 + ☁️↑ 上传 + ☁️↓ 下载面板 + 📱 app 内本机下载文件夹列表 + 🧹 清理历史。
  • 测试:PC 单测 android-file-handler.test.js 30 cases 全绿;Android RemoteCommandClientTest.kt 4 cases 锁死 SignalingRpc delegate + 不走 p2pClient.sendCommand;真机 E2E 8 场景已跑通(Xiaomi 24115RA8EC × Windows 桌面)。
  • 设计文档docs/design/Android_Remote_File_Skill.md — 协议接口 11 action + 字段映射 + 4 互锁 bug + 2 UX 坑 + 真机 E2E 8 场景。
  • 用户文档docs-site/docs/guide/remote-file.md

2026-05-15 发布 — Android GA 后续 scope #21 P1 主体 5/5 全闭环(A.1 + A.2 + B.1 + B.5 + C.1)

v1.0 GA 上架后 issue #21 跟进的 5 项主体 scope 一日内全部 land,累计约 270 单测全绿,最终 sweep 修 2 个 Robolectric @Config(sdk=[33]) 漏标。P2 候选 4 项 (B.3/B.4/C.2/C.3) 等 GA Play Store + 真用户反馈复评。

  • A.1 桌面 Linux native 配对(57 单测)— cc pair preflight 5 项 LAN 诊断(平台 / 网卡 / multicast / port 5353 holders / firewall hint,exit 0/1/2 分级 CI 可用)+ cc pair token generate/list/show/revoke 子命令组(one-active-DID 不变量 + atomic file write,SSH dev box 场景预生成)+ dist-tools/systemd/chainlesschain.service hardening 全套模板 + docs/linux/PAIRING.md 9 段用户指南(3 场景 / 5 blocker 修复 / 诊断包收集)。Audit 反驳:设计文档说"Linux 需补 mDNS systemd 单元"是误解 — @libp2p/mdns + bonjour-service 纯 JS 不依赖 avahi-daemon。
  • A.2 三端 UI consistency 设计文档 v0.1 baseline(docs/design/三端_UI_Consistency_设计文档.md)— 4 项必须一致(语义色 / 高风险红色 hex / DID 短显规则 6+4 字符 / m-of-n 进度展示 m/n + 分隔符)+ 4 项必须不同(手表大按钮 ≥48dp / 桌面侧栏 / 车载 voice-only / 手机 thumb zone)。
  • B.1 web-shell 私钥签字 UI(113 单测)— MultisigSigner ukeyManager adapter(4 driver return shape normalisation)+ multisig.sign in-process WS topic(绕开 cc subprocess 6-10s 冷启)+ signWithExternal async API(core-multisig 新增)+ SignProposalModal.vue(Pinia store + member dropdown + dev-only hex source)+ unified-key-manager DID-based signer routing。
  • B.5 跨链桥 outbound × m-of-n 多签(Layer 1+2 共 8 PRs)— Layer 1:CLI bridge --require-multisig + bridge-consume + web-shell crosschain.bridge.consume in-process topic + Multisig.vue 执行按钮。Layer 2:cc_bridges m-of-n provenance 列 + crosschain-mtc attachMultisigProvenance/stripMultisigSigsForCanonical helpers + buildMultiHopBridgeEnvelope 3rd arg + verifyMultiHopBridgeEnvelope auto-runs provenance check + bridge-consume --mtc 把 multisig provenance 带入 staging。Layer 3 external-blocked Q-COMP-3(真 testnet 锚定 + contract audit + KYC)不计入本 scope。
  • C.1 watch face → VoiceMode shortcut(33 单测)— phone-side VoiceLaunchActions + VoiceTriggerSource 4 enum + NavGraph 路由 + CcPhoneVoiceListener Data Layer service(/cc/voice/start MessageClient path)+ wear VoiceSender + VoiceShortcutTileService standalone tile + VoiceComplicationService + VoiceForwardActivity(intent + 50ms vibration + 3s timeout)。安全约束trigger_source 字段 wear 侧仅信息用途,phone 侧锁 WEAR_FORWARD 防伪 — 防 wear 端伪造 trigger_source 提权到 AUTO_BUTTON/PHONE_SHORTCUT
  • 最终 sweep bug 修(commit f1d283833)— C.1 PR1 VoiceLaunchActionsTest + PR2 CcPhoneVoiceListenerTest 漏标 @Config(sdk=[33]),Robolectric DefaultSdkPicker 拒收 compileSdk=35(maxSdkVersion=34)— 统一与 :app 其它 Robolectric 测试一致。

详见 issue #21 + Android 重新定位 §10 GA 后续 scope

2026-05-18 收口 — iOS Phase 5 AI Chat 静态审计 4 真实 bug 修复 + 4 集成测试

Phase 5.1-5.6(远程 LLM 对话 + token-by-token 流式 + 8 method + cancel + 对话管理 + 离线 enqueue)已落,但 41 单测全是同模块内 mock,缺端到端集成 + UI/VM 交互 edge case 覆盖。本轮静态审计找到 4 真实 bug,每个 1 个回归单测;同时补 4 个集成测试验真链路。

  • Bug #1 — 空字符串穿透 nil-coalesceRemoteAIChatViewModel.finalizeStreamingPlaceholder 旧代码 messageId ?? oldMsg.idChatStreamEnd.parseFromEnvelope 在 server 缺 messageId 时填 ""(不是 nil),nil-coalesce 不兜底,"" 直接覆盖本地 local-assistant-<UUID> 占位 id,SwiftUI ForEach(messages, id: \.id) 身份被击穿(多条 row 共享空 id)。改为 if let mid = messageId, !mid.isEmpty 显式 guard。
  • Bug #2 — 删除当前对话失败时半回滚deleteConversation 失败时仅恢复 conversations 列表,currentConversation / messages 留在已清空状态。新增 rollbackDelete 私有方法 + 入口处 wasCurrent/originalCurrent/originalMessages 快照,全量原子回滚。
  • Bug #3 — sendMessage 缺 stream-in-flight 防御:UI 在流式中切到 cancel button 形态,但 VM 不能假设上层禁掉了 send 入口(programmatic 调用 / 双击竞争)。在 DC gate 前加 guard currentStreamId == nil else { lastError = "请先等待当前响应完成或取消"; return }
  • Bug #4 — selectConversation stale streamId 污染:切对话时不清 currentStreamId,依赖 messages.last.isStreaming guard 兜底。edge case:新 conv 末条恰为 streaming 占位(前次未 finalize)时,prev stream 的 delta 会越界改新 conv 的 last。改为显式 currentStreamId = nil; isStreamingMessage = false
  • 集成测试 +4Tests/CoreP2PTests/Integration/Phase5AIChatIntegrationTests.swifttestFullChatStreamHappyPathThroughFanout (真 fan-out 端到端) / testCancelOrderingDiscardBeforeRpc (cancel 顺序 50ms 窗口验证) / testOfflineCreateConversationDrainsOnRecover (DC 恢复 drainer 触发 ai.createConversation) / testCrossConversationStreamIsolation (切对话清 streamId + sA 不污染 conv B)。
  • 单测从 41 → 45RemoteAIChatViewModelTests.swift +4 回归(每个 bug 1 条);总 iOS 单测 ~313 + 45 = ~358;集成测试 6 → 10
  • 文档docs/design/iOS_Phase_5_AI_Chat_Skill.md §8.1 / §8.2 / §8.3(静态审计 4 bug 详表)/ §8.4(Phase 5.8 真机 E2E 8 场景 reproducer 详步骤)全刷;docs-site 与 docs-site-design 通过 sync-*.js 同步刷新(162 文件)。
  • 真机 E2E(Phase 5.8) 仍待 Mac+iPhone+真桌面在场,reproducer 详步骤已就绪。Win dev box 上 swift test 不可跑,验收依赖 iOS CI swift build --target CoreP2P 编译通过 + 静态审计 + 集成测试设计无 mock 绕过真链路。

2026-05-15 发布 — iOS Phase 1+2+3+4 完整移植(桌面配对 + 远程终端 + 远程操控 framework + 4 skill + Notification skill)

Android 端 v1.0 GA 验证后,iOS 端启动镜像移植。一日内四 Phase 框架级全 land:~145 文件 / ~313 单测 / 4 完整设计文档 / 4 实施 trap memory。

  • Phase 1 — 桌面配对三流(commit c30b415a8)— Flow B 摄像头扫桌面 QR(最常用) + Flow A 桌面扫手机 QR(Signal e2ee 高级路径) + 手输 6 位 code 兜底;Modules/CoreP2P/Pairing/ (9 files) + Features/Pairing/ (8 files) + 71 单测 7 套件;桌面端 follow-up pairing-code:<code> signaling 别名监听 220 LOC。
  • Phase 2 — 远程桌面终端 (Plan A.1 移植)(commit 7613ea710)— RemoteWebRTCClient 5 步 handshake actor + WebRTCPeerConnectionTransport Google SDK 抽象 + TerminalRpcClient 双路径 invoke + xterm.js WKWebView + TerminalListView/SessionView 全套;163 单测 12 套件;Phase 1 SignalClient forwardedMessages: AsyncStream 多订阅入口同期补齐(实施暴露后回填)。
  • Phase 3 — 远程操控 framework + 4 typed skill(commit 759a1e907)— RemoteCommandClient 通用 RPC actor (Phase 2 TerminalRpcClient.invoke 抽出) + RemoteSkillRegistry 23 SeedRegistry 1:1 mirror Android (795 method) + OfflineCommandQueue UserDefaults JSON crash recovery + OfflineQueueDrainer false→true edge detection + 4 typed skill (Clipboard / File / Screenshot / SystemInfo) + RemoteOperateView 5-tab segmented shell + 4 skill UI;~264 单测累计 20+ 套件。Phase 3.6 refactor 提前到 3.3TerminalRpcClient.invoke 删除 + delegate to commandClient + 改用 commandClient.events 流(修 AsyncStream 单消费者切分事件 bug)。
  • bug 修 (P0) — code review 后期修两处 continuation 泄漏:RemoteCommandClient.invoke timeout 不清 pendingResponses[reqId] + RemoteWebRTCClient.waitForAnswer 同模式不清 pendingAnswer;长期运行下 pool 涨。修法 do/catch 包 TaskGroup 显式清池 + 加 pendingCount()/hasPendingAnswer() 诊断 accessor;2 regression test + 1 集成 test 验池清。
  • 集成测试Tests/CoreP2PTests/Integration/Phase3IntegrationTests.swift 6 跨组件测试覆盖 ClipboardCommands 端到端 / TerminalRpc demux / Drainer 边缘 / 离线 → 恢复 → drain / concurrent invoke 池共享 / continuation 泄漏防御。
  • Phase 4 — Notification skill(design cf7a7be78 + 6 sub-phase commits 45b485fdd5877b5d84)— NotificationCommands actor (11 method 1:1 mirror Android NotificationCommands.kt) + NotificationEventDispatcher 订 commandClient.events + LRU dedup + 触发既有 PushNotificationManager.scheduleSystemNotification (531 LOC PushManager 0 改动,仅加 1 行 extension PushNotificationManager: RemoteNotificationPushTarget {}) + RemoteNotificationsViewModel 乐观更新 + offline gate 三分支 + NotificationsView UI 镜像 Android NotificationCenterScreen.kt (filter / List + swipe / detail sheet / settings sheet) + RemoteOperateView 第 6 tab "通知" + SkillTabPickerView REWRITE 为 horizontal scroll + button row + Capsule unread badge (per design §7.9 备选 B,Discord/Slack pattern)。41 新 unit tests (18 + 10 + 13)。新发现 trap: events fan-out — cmdClient.events 单消费者,多 skill 订阅必须 RemoteDeps 内 fan-out task 拆。
  • 设计文档docs/design/iOS_Phase_1_Pairing_Flow_B.md + iOS_Phase_2_Remote_Terminal.md + iOS_Phase_3_Remote_Operate_Framework.md + iOS_Phase_4_Notification_Skill.md — 各含 §6 sub-phase + §7 实施 traps + §8.3 真机 E2E 矩阵。
  • iOS UI 镜像 Android 已验证布局 — 用户拍板 "iOS 页面布局参考安卓端,安卓端有检测过"。Compose Screen 信息架构 / 流程 / 字段顺序照抄到 SwiftUI;HIG 偏离限白名单 6 项(NavigationLink / Form / ToolbarItemGroup keyboard / Sheet / Alert / Segmented Picker)。
  • 剩余真机 E2E(需 Mac+iPhone+真桌面):Phase 1.7 三流配对 + Phase 2.7 4 终端场景 + Phase 3.7 4 skill 各跑一次 + Phase 4.7 8 通知场景 (拉历史 / 桌面 push 弹 banner / LRU dedup / markAsRead 双轨 / 离线 enqueue / quiet hours silenced / authorization denied / 后台 1min)。Win dev box 不可验,移交用户。

2026-05-14 发布 — v5.0.3.53 Plan A.1 远程终端 Android↔桌面 WebRTC DataChannel 直连(Phase 1–5 一日全落)

v5.0.3.52 Plan A 真机首测(Xiaomi 24115RA8EC × Win desktop dev)暴露 1 个架构性问题:4 跳信令链路(手机→路由器→公网中继→桌面 RelayClient)NAT idle / 蜂窝运营商间歇杀 TCP,整链路 fragile。
落地:Plan A.1 — 把高频高吞吐终端流量从 signaling 链路切到 WebRTC DataChannel 直连,绕开中间所有跳;signaling 路径保留为兜底。

性能预期 → 端到端 RTT p50 200-500ms → 30-80ms LAN / 50-200ms TURN;p99 1.5-30s timeout 频发 → 200-800ms;稳定性 20s-2min 间歇断 → 数小时持续(依赖 ICE keepalive)。

  • Phase 1 — Trap 1 修复 + DC 路由 helper(commits d22b7ac8a + bb759bc78)— SignalClient.forwardedMessagesmulti-subscribe SharedFlow(替代单 listener 的 setOnForwardedMessageReceived)。原 bug:WebRTCClient.initialize 装的 ice:config 拦截器在用户进 TerminalListScreen 时被 TerminalRpcClient.start() 后写覆盖 → ice:config 推送丢 → iceServers 24h 过期后跨 NAT 完全不通。新增 WebRTCClient.dataChannelReady: StateFlow<Boolean> derived flag(READY 才真意味 DC OPEN,避免 ICE-connected 但 DC 未开的误判)。
  • Phase 2 — DC fast path + 双 listener pending pool(commit a01eeac47)— SignalingRpcClient.invoke 内置 transport selector:connectionState==READY && preferDataChannelwebRTCClient.sendMessage(DC),失败或未 ready → fallback signaling。两路 listener 同时订阅 signalClient.forwardedMessages + webRTCClient.messages,同一 requestId 对同一 CompletableDeferred(二次 complete 是 no-op,dual delivery 安全无需显式 dedup)。所有 RPC clients(TerminalRpc + system./ai.)单点 chokepoint 自动受益。
  • Phase 3 — Android 触发 handshake + UI 路径指示(commit 91e77e489)— TerminalListViewModel.init 检测 DC 未 ready 即异步触发 RemoteConnectionManager.connect;UI chip 显示 "P2P 直连"(绿)vs "中继路径"(黄),用户可见路径状态。
  • Phase 4 — 双向 LRU 去重(commit dd9b1227e Android + fc3752360 desktop)— Android TerminalRpcClient 双订阅 signaling + DC SharedFlow,stdout 按 (sessionId|seq) 256-LRU 去重 / exit 按 sessionId 64-LRU。桌面 mobile-bridge.bridgeToLibp2p 加 128-LRU / 30s-TTL 按 payload.id 去重 mobile→desktop command request(防 terminal.stdin 双跑 / PtyManager 误处理)。
  • Phase 5 — 既有 wiring 组合(无新代码)— DC 失效 fallback = Phase 2 trySendViaDataChannel 抛 IllegalStateException 自动落 signaling;自动重建 = P2PClient.scheduleReconnect 指数退避 1s→60s / maxAttempts 10(既有);恢复后自动切回 = isDcReady() 每次 invoke() 入口重检;UI 实时映射 = Phase 3 dataChannelReady chip。
  • 测试:Android TerminalRpcClientTest +3 dedup / SignalingRpcClientTest +4 transport selection / WebRTCClientTest +1 Trap 1 回归;desktop mobile-bridge.test.js 新 14 测覆盖 LRU dedup 5 维 + sendToMobile DC 优先 vs signaling-relay 双发兜底 5 维。3 套件全绿(11 + 15 + 21 Android + 14 desktop 新 + 既有未动)。真机 e2e §5.3 矩阵移交用户(LAN / 蜂窝 / 双 NAT / DC 强制失效 / DC 恢复 5 场景)。
  • bug 修:WebRTCClientTest 12 个测试 regression — mockk(relaxed=true)StateFlow<List<X>> 泛型擦除致 .value 返 relaxed Object 而非 List → 生产端 pairedDesktopsStore.devices.value.firstOrNull { ... }Object cannot be cast to Iterableconnect() catch 套成 "连接失败: ...";测试 setup 加 every { mockPairedDesktopsStore.devices } returns MutableStateFlow(emptyList()) 修。
  • 设计文档docs/design/Android_Remote_Terminal_Plan_A1.md v1.0(含 §1.2 三个 trap 完整分析 + §3.7 不复用 :core-p2p DataChannelTransport 的决策 + §5.3 真机 e2e 5 场景验收矩阵)。
  • 遥测[SignalingRpc.metric] path=dc|signaling reqId=... 埋点上线,发版第一周观察 fast-path 占比,目标 ≥80%(用户基数 ≥10 设备)。
  • 分发:桌面 binary v5.0.3.52 → v5.0.3.53 重打;CLI chainlesschain 0.161.12 不变(Plan A.1 不动 packages/cli/);Android versionCode/Name 不变(v1.0.0 GA 维持,本批 desktop + Android app/ 共改)。

2026-05-14 发布 — v5.0.3.52 Plan A 远程终端:Android↔桌面 PTY 全链路(Phase 1–4 全部 + 162 测试全绿)

用户痛点:"PC 上开了很多终端,能不能在 Android 上看到这些终端的输出并远程输入指令?"
硬约束:Windows 上已经在跑的外部终端不能被另一进程 attach(OS 句柄私有)。
落地:Plan A — ChainlessChain 桌面端用 node-pty 托管新开终端,复用 #21 Remote Operate signaling-relay 通道把 stdin/stdout 流到 Android。

桌面端 PtyManager 单例同时被 web-shell WS 网关 + cc ui WS 网关 + V6 native IPC 共享 — 用户在任一壳开会话,其它壳都能看到。

  • 桌面主进程PtyManager(lazy node-pty + 256KB ring buffer + 24h idle kill + shell 白名单 pwsh/cmd/bash/wsl + 8 session 上限)+ terminal-handlers.js(8 个 WS topics: create/list/stdin/resize/close/history + server-push stdout/exit)+ terminal-ipc.js(V6 native IPC bridge)+ confirmation-dialog.js(高危关键字 Electron messageBox + 永久信任 per-cmd cache)。handleMobileCommandterminal.* namespace + mobile-bridge per-peer stdout/exit subscription fanout。
  • CLI workspace mirrorattachTopicHandlers 共享 helper(抽出 ws-cli-loader dispatcher 包装为 ESM helper);agent-runtime.startUiServer 调一遍 → cc ui 也能 /terminalnode-pty 加为 optionalDependencies(workspace hoist 解决 + 装不上不破坏 install)。
  • Web PaneluseTerminal composable(singleton fan-out + base64↔UTF-8 编解码)+ Terminal.vue route /terminal(xterm.js lazy import + 多 session 标签 + history 补帧 + ResizeObserver + 高危关键字拦截 toast)+ 侧栏菜单 + i18n。
  • V6 plugin widgetplugins-builtin/terminal/plugin.json + shell/widgets/TerminalWidget.vue + shell/TerminalPanel.vue(xterm.js 嵌入 + IPC bridge electronAPI.terminal.*)+ slash 命令 /terminal
  • AndroidTerminalRpcClient.kt(复用 SignalingRpcClient envelope pattern + observeStdout/observeExit SharedFlow)+ TerminalWebView.kt(WebView ↔ Kotlin JS bridge)+ xterm-shell.html + xterm.js / addon-fit / xterm.css vendored 入 assets/terminal/ + TerminalListScreen / TerminalSessionScreen Compose + softkey toolbar(Ctrl/Tab/Esc/方向/Ctrl+C/D)+ NavGraph 2 路由 + RemoteOperateScreen 加 "打开远程终端" 按钮。

测试 162 新增全绿 —— Desktop main 61(RingBuffer 7 + PtyManager 15 + terminal-handlers 15 + terminal-ipc 12 + confirmation-dialog 5 + ws-smoke 6 + 真 PTY spawn cmd.exe integration 1 — 真 spawn cmd.exe、真发 echo PLAN_A_PROBE_42、stdout 流回包含 probe)+ CLI cc ui 21(PtyManager 10 + handlers 8 + ws-mirror-smoke 3 含真 ChainlessChainWSServer + attachTopicHandlers + 真 WS client)+ Web Panel 17 useTerminal composable + 3 e2e(真 cc ui subprocess + 真 WebSocket + 真 shell stdin/stdout round-trip via probe echo)+ Android 10 TerminalRpcClientTest

修 pre-existing test drift —— widget-registry.test.ts(PREVIEW_WIDGETS 已扩到 7 个)/ dashboard-store.test.js(缺 mcp.list_tools mock)/ views-mount-smoke.test.js 5 个尾部视图(Notification + Pinia 状态污染:Projects i18n 修 + 其余 4 个拆独立 worker)/ 删除过时 Projects-folder-picker.test.js

文档Android Remote Terminal Plan A 设计文档 + 用户文档(双站同步)。Future A.1 流量切 WebRTC DataChannel 绕中继带宽 / Future B 已开外部终端只读快照(截图 + OCR + Win32 SendInput)留后续。

2026-05-13 后续推进 — Android 社交功能产线化(demo → production)

10K LOC 社交骨架(14 屏 + 9 VM + 4 Repo)建好已久,但只有 2 路由真接通;其它 7 个 registerPlaceholder("temporarily simplified")SocialScreen 三 tab 中 Friends/Timeline 显示固定字串。本次一次性收口:

  • NavGraph.kt 7 占位换实屏 + 2 新路由PublishPost / PostDetail / FriendDetail / UserProfile / AddFriend / CommentDetail / EditPost 实接 Composable;新增 NotificationCenter + BlockedUsers 路由,DID 加载期渲染 spinner 占位)
  • SocialScreen.kt 3 tab 全升级 — Friends → FriendListScreen;Timeline → TimelineScreen(myDid 走 DIDViewModel.didDocument);Notifications → NotificationCenterScreen(带筛选/批量已读/清理菜单,删旧内联 basic 列表)
  • PostReportDao 落地 — entity 早在 schema v23 在册,但 DAO 缺失:reportPost() 构造完 entity 不入库 + getUserReports() hardcoded 空。新 DAO 加去重((postId, reporterDid) idempotent)+ status 流转 + Robolectric 8 测试覆盖
  • PROFILE_QUERY/RESPONSE 协议MessageType 加 2 项;RealtimeEventManager.queryProfile(targetDid, 5s timeout)onSubscription 解 SharedFlow replay=0 订阅竞态;SelfProfileProvider 接口 + DefaultSelfProfileProvider(DID-suffix 占位)在 ChainlessChainApplication.delayedInit 注入;FriendRepository.searchUserByDid() 本地未命中即 fallback 远端
  • BlockedUsersScreen 接 ViewModelFriendViewModel 注入 DIDManager,加 loadBlockedUsers() + unblockFriend 走完整 unblockUser(myDid, did) 路径(清 BlockedUserEntity 行,不再 flag-only 留孤儿记录)

测试:39 新单测全绿——6 个 RealtimeEventManagerProfileQueryTest(race-fix:runTest 跑挂改 runBlocking,因 manager 内部 scope 用 Dispatchers.IO 与 virtual-time TestDispatcher 不在同一调度图)+ 4×3 feature-p2p(Post/Friend repo + FriendViewModel)+ 2 DefaultSelfProfileProvider + 8 PostReportDaoTest 真 Room in-memory + 11 路由 + tab 结构性回归(不需要模拟器)。设计文档 Android_Social_Wiring_2026-05.md,三大文档站本次同步刷新。

2026-05-13 中期推进 — #21 v1.2 GA 反馈整合:项目工作流 P1+P2+P3A + #2 删除 fix + #3 日常模板

v1.2 GA 反馈 5+3 项整合(#2/#3/#4/#5/#7/#8)。北极星:"手机端做 AI 项目交互要像电脑端那样丝滑"。

  • #2 项目无法删除 fix (fc24f9856) — EnhancedProjectCard 完全没有 delete UI;加 3-dot 菜单 + 确认 dialog → DAO softDelete → Room Flow 自动从列表移除。
  • #3 模板改日常 11 个 (99d38bf69) — 砍 11 IDE 模板,整个 ProjectTemplates 重写:购物清单 / 旅行计划 / 读书笔记 / 灵感收集 / 健身计划 / 食谱记录 / 学习计划 / 家庭账本 / 工作日志 / 会议记录 / 空白。TemplateCategory 加 5 个新类目。
  • #4/#7 桌面 CLI + REMOTE handler P1 (32ccabdb5) — cc project init/list/show/delete 直写 desktop chainlesschain.db(WAL 并发安全)+ project-management-handler.js 6 actions 给 Android L3 REMOTE。CLI 7 + handler 21 tests。
  • #4 Android→Desktop 反向 sync P2 (2646bbb4e) — 修补反向同步缺口;新增 ProjectSyncWalker + CompositeSyncRepositoryWalker:app 聚合)+ Hilt 绑定。CREATE/UPDATE/DELETE 完整。Composite 7/7 + walker 12 tests。
  • #5/#8 web-shell Projects + in-process WS P3 Part A (bfdde637d) — 6 in-process WS topics 包装 P1 handler(DRY: 同 handler 服 web-shell + mobile L3)。新 Projects.vue 项目管理列表 + 移老内容到 ProjectInit.vue。project-handlers 7/7 tests。

测试:阶段 1 P0 全过 + 阶段 2 project workflow:Android :app 80/80 + Desktop combined 51/51。P3 Part B 待办:Android ProjectCommands.kt(让手机用 REMOTE 调 project.* 看/操作桌面项目),等用户验证 P1+P2+P3A 后再做。

2026-05-13 前期推进 — #21 Android v1.3+ P0 前置三项 GA-independent + AI-3 forward-compat + 2 bug fix

v1.2 GA 上架前的 P0 前置批次(未 bump version,与 P1 主体一起 release):

  • A.3 ADR Review v2.0 (348896382) — 8 ADR 全 audit 结论 5 keep / 2 amend / 1 revise。新增 AndroidADR重评估_v2.0.md。ADR-2(M2 DID wallet 走软件 Ed25519,blocks B.3 DID rotate)待 v1.2 GA Play Console API level 数据决策选项 A/B/C;ADR-7/ADR-8 文本 amend 对齐真实(cc-mobile.json 从未创建走 user_settings + mobile.* scope;registry 实际 disk-first + push-based 非 pull)。同 commit §10 v1.3+ scope triage 分层(12 子项 P0/P1/P2 + 5 依赖链)。
  • B.6 PQC 严格模式 verifier gate (e24386d00) — LandmarkCache.strictPqMode opt-in,拒收任何 alg === "Ed25519" 的 partial sig + publisher_signature;与现 heterogeneous federation 数据格式兼容,0 schema 改动;生产者侧 0 改动。
  • B.2 in-process multisig.* + marketplace.consume topics (b1c7cfd95) — 7 个 in-process WS topics 镜像 CLI --json 输出 shape,desktop web-shell Multisig.vueuseShellMode().isEmbedded 分发;性能 asar:true 子进程冷启 6-10s → in-process ~20ms (SQLite open) + 查询,60-100× 提升。UX 0 改动。
  • A.3 AI-3 SkillMetadata.signature forward-compat (45a88270e) — Android ManifestSignatureVerifier interface + NoOpManifestVerifier always-accept stub + RemoteSkillRegistry.setManifestVerifier() swap seam,为 marketplace M0 上线(#21 AI-5)做接线准备。
  • 修复 wear test imports (c0d061328) — CcPhoneDecisionListenerTestkotlinx.coroutines.{launch,delay,GlobalScope,DelicateCoroutinesApi} imports 自 v1.2 P0.2 起 block 整个 :app:compileDebugUnitTestKotlin,加 4 imports 解锁。
  • 修复 B.6 strict mode disk-load gate(本次 QA sweep 发现)— LandmarkCache.loadFromDisk() bypass strict-mode gate,重构 per-snapshot 严格检查到 _validateAndStoreSnapshot() 头部,+2 新 disk-load integration tests 锁回归。

测试:B.6 strictPqMode 11/11 + B.2 multisig-handlers 23/23 + AI-3 ManifestSignatureVerifier 10/10 + Android :app regression 57/57 + web-shell 379 regression(25 files)全过。

2026-05-13 发布 — v5.0.3.51 远程操控 Plan A + B 基础设施落地(WebRTC 透传中继 + STUN/TURN 部署 + iceServers 凭证签发)

productVersion v5.0.3.50 → v5.0.3.51。Plan C(v5.0.3.50)信令转发让低频命令通了 100-400ms p99,但有两个硬约束:吞吐(中继带宽全平台共享 → 流式 token / 文件 / 视频不能走)+ 隐私(公网 wss TLS 之外中继服务器仍看到 payload 明文)。Plan A+B 解决这两条:真 WebRTC P2P DataChannel = 端到端加密 + 直连带宽。三段位完整图景:低频命令走 Plan C signaling forward / 高吞吐流式 token + 文件走 Plan A WebRTC DC / NAT 穿透兜底走 Plan B STUN/TURN。设计文档:Android Remote Operate Plan A+B

  • Plan A — WebRTC signaling 透传中继(commit e9f9d6275 + af11daa6e)—— signaling-relay server.js handleMessage switch 新增 case offer/answer/ice-candidate/ice-candidates/peer-statustype=message 同路径 forward + 注入 from 字段(与 LAN signaling-handlers 行为一致)。桌面 main startRelayClient.onMessage 简化为统一 dispatch:pair-ack 仍单独路由写 sessionState,其余(command:request / offer / answer / ice)交给 mobileBridge.handleSignalingMessage 同款 dispatcher —— LAN 路径与 relay 路径完全等价。
  • Plan B — coturn STUN/TURN 部署 —— turn.chainlesschain.com (47.111.5.128) 监听 0.0.0.0:3478 UDP+TCP + 5349 TLS + 49152-65535 UDP relay;docker compose host network 模式避免 NAT;Let's Encrypt @gitee 镜像 acme.sh 续证;use-auth-secret time-limited credentials。
  • iceServers HMAC-SHA1 24h ephemeral creds —— signIceCredentials(userId) 签发 username = expiry-ts:user-id + credential = base64(HMAC-SHA1(TURN_SECRET, username)),返回 stun:turn.chainlesschain.com:3478 + turn:3478?transport=udp/tcp + turns:5349 三档优先级 + 凭证。env CC_TURN_SECRET 强制必填源码无 fallback 绝不硬编码 secret(任何 fork 也无法签出生效凭证),缺 env 时降级 STUN-only。
  • iceServers 不塞 QR 改信令推送 —— QR payload 650+ 字符 + 高纠错 280px 扫描识别率暴跌(2026-05-14 实测阻塞 30s 扫不出);改成扫码后异步推送:桌面 pair-ack matched 后 pushIceServersToMobile(ackPayload) LAN signaling + 公网中继双发 type chainlesschain:ice:config payload {pcPeerId, iceServers, iceExpiry} 给手机;Android WebRTCClient.setOnForwardedMessageReceived 拦截 + persistIceConfigMessage upsert PairedDesktopsStore.iceServersJsonSignalingRpcClient.handleIceConfigMessage 同步备份 race-tolerant。
  • Android WebRTCClient.createPeerConnection —— 注入 PairedDesktopsStoreresolveIceServersFor(pcPeerId) 用 stored iceServers 含 TURN,过期/缺失 fallback Google STUN;parseIceServersJson 支持 urls 既可 string 又可 array。
  • backend/signaling-relay-service/ 入仓 —— server.js + Dockerfile + docker-compose.yml + nginx vhost + deploy.sh + README,使二方部署有路径。

已知约束 / Trade-offs:iceServers TTL 24h 过期后 fallback Google STUN 跨 NAT 不通(v1.4 GA 前补 mobile 检测 expiry 临近经信令请求新凭证);WebRTC P2P 端到端真机跨 NAT 实测待补(phone 4G + desktop home WiFi 完整 file-transfer 流);Signal Protocol E2EE 待 Plan A DC 通了再考虑(DC 已是直连 TLS,Signal 收益边际);阿里云安全组要求 UDP 3478 / TCP 3478 / TCP 5349 / UDP 49152-65535 全开放给 0.0.0.0/0,未开端口 coturn 容器跑但外部不可达 ICE 收集失败。

部署 / 分发:桌面 binary v5.0.3.50 → v5.0.3.51 重打;signaling-relay-service 部署在 47.111.5.128;CLI chainlesschain 0.161.10 → 0.161.11;Android versionCode/Name 不变;三大文档站本次同步刷新:docs-site / docs-site-design tagline 升 v5.0.3.51 + 设计文档 Plan A+B 同步。

2026-05-13 发布 — v5.0.3.50 Android Remote Operate Plan C 信令转发 RPC(桌面遥控器真接通)

productVersion v5.0.3.49 → v5.0.3.50。配对完成(v5.0.3.49 W3.7 Flow B QR pairing)后,手机要"操控"桌面——点 Ping / 系统状态 / 系统信息 按钮、桌面执行、响应返回——需要把命令送达桌面。Plan A(WebRTC P2P 直连)+ Plan B(STUN/TURN 穿透)工程量大;Plan C 复用配对已通的信令 forward 管道,单次低频命令先跑通,A+B 留后续。设计文档:Android Remote Operate Plan C

  • SignalingRpcClient 落地 —— 手机端 RPC 入口:构 {type:"chainlesschain:command:request", payload:{id, method, params, auth, timestamp}}PairingSignalingGate.sendAck;一次性安装 setOnForwardedMessageReceived listener 按 requestId 关联 CompletableDeferred resolve 响应;30s withTimeout 兜底;LAN sendAck 失败时自动 reset gate → 切公网中继 URL → re-register → 重试一次,与 ScanDesktopPairingViewModel 配对路径同模式。
  • RemoteOperateScreen + ViewModel —— 极简 UI:3 个 chip 按钮(Ping / 系统状态 / 系统信息)+ 响应 JSON 显示 + 解除配对。首页"已连接桌面"卡片点击 → NavGraph 跳 remote_operate/{peerId}
  • PairedDesktopsStore 持久化 —— SharedPreferences JSON 落已配对桌面列表(pcPeerId / deviceName / lanSignalingUrl / relayUrl / pairedAt / lastSeenAt);upsert idempotent by pcPeerId;首页改读 store 而非 p2pClient.connectedPeers —— Plan C 不建持久 P2P 连接,扫码后信令立刻断 connectedPeers 即空,UX 反直觉的根因。
  • Desktop RelayClient 外网中继外联 —— desktop-app-vue/src/main/p2p/relay-client.js outbound 长连 wss://signaling.chainlesschain.comregister 桌面 pcPeerId(必须与 mobileBridge.peerId 一致,否则外网手机找不到目标 peer),onMessage 路由 pair-ack / 一般 mobile command 进 recordPairAck / handleMobileCommand(与 LAN 同一管道);指数退避自重连 max 60s。
  • mobile-bridge.handlePairAckFromRelay —— bug fix:main/index.jsthis.mobileBridge?.handlePairAckFromRelay(...) 但方法之前不存在,optional-chain ?. 静默吞掉 relay 路径 pair-ack 不触发任何事件;补 EventEmitter 通知与 LAN 行为对称。
  • MobileBridgeHeaderStatus.vue —— web-panel header 显示已配对 mobile 数量,5s 轮询 cc p2p devices --type mobileparseJsonOutput 跳过 CLI log 前缀([AppConfig] / [DatabaseManager] 等)避免 false-positive 匹配为 JSON-array 开头。
  • i18n —— RemoteOperateScreen 11 个字符串提取到 values/strings.xml + values-zh-rCN/strings.xml(ro_title / ro_subtitle / ro_peer_id_fmt / ro_quick_commands / ro_cmd_ping/status/info / ro_executing_fmt / ro_error_label / ro_response_label / ro_unpair)。

测试:3 个新单测文件 / 20 测试全绿 —— PairedDesktopsStoreTest 7(mocked SharedPreferences 而非 Robolectric,核心 store 启动快几个数量级)/ SignalingRpcClientTest 7(FakeSignalClient + CapturingGate;happy / 无 DID fail fast / LAN→relay fallback / 双失败 / response 含 error 字段 / withTimeout 真超时 / 未知 rid silent ignore)/ RemoteOperateViewModelTest 6(mockk + StandardTestDispatcher;state 转移 + null 错误兜底 + unpair 调 store.remove)。两个关键技术决策:(1) 用 runCurrent() 而非 advanceUntilIdle() —— SignalingRpcClient 内部 withTimeout(30000) 用虚拟时间,advanceUntilIdle 会把时间推到 30s 后触发误超时;runCurrent 只跑当前时间点 ready 任务;(2) 新增 testImplementation("org.json:json:20240303") —— Android SDK 自带的 org.json.JSONObjectisReturnDefaultValues=true 下方法静默返默认值而非真解析 JSON。ScanDesktopPairingViewModelTest signaling gate failure surfaces Failed 改期望 sendAckCallCount == 2(LAN+relay 双打)。Desktop vitest 7600+ 套全绿。Plan C 真机 E2E(Android↔desktop relay 命令往返)入用户出场清单,与 Flow B 验证 pattern 一致。

已知约束 / Trade-offs:信令一跳 + 公网中继多一跳,p99 延迟 100-500ms,低频命令可接受;流式 token / 文件不适用 → 走 Plan A.2 WebRTC DataChannel;中继 TLS 但中继服务器看得到 payload,端到端加密需上 Signal Protocol session(已有 e2ee 模块但 Plan C 当前未挂);中继宕 = Plan C 不可用,LAN 仍工作。

路线图:Plan C ✅ 落地 → Plan A.1 (DataChannel 复用,DC 不可用时退信令) → Plan A.2 (高吞吐场景真 P2P 直连绕中继带宽) → Plan B (STUN/TURN 穿透,让真 NAT 隔离两端也能 A.1)。

部署 / 分发:桌面 binary v5.0.3.49 → v5.0.3.50 重打;chainlesschain npm 版本不变(CLI 0 改动);Android versionCode/Name 不变(v1.0.0 GA 维持,本批 Plan C 走桌面端 v5.0.3.50 优先 + 后续 Android v1.1 minor 一并 ship 完整移动客户端)。三大文档站本次同步刷新:docs-site / docs-site-design 由 sync 脚本拉新 Plan C 设计文档 + docs-site tagline 升 v5.0.3.50 + README/README_EN 加本节 changelog。

2026-05-12 发布 — v5.0.3.49 M-of-N multisig Phase 1d + Phase 2a marketplace mediator + Phase 2b web-panel Multisig view + Flow B QR pairing 收口 + 测试补丁

productVersion v5.0.3.48 → v5.0.3.49。本版四条主线:

(1) @chainlesschain/core-multisig package + cc multisig CLI 落地(commit 3c890dcac,v1.2 m-of-n Phase 1d)—— 新建 npm workspace package 含 5 lib(policy / store / proposals / signing / governance-log),CLI 加 8 subcommands(propose / sign / cancel / finalize / list / show / sweep / policy);75 lib 单测 + 10 CLI integration 测试全过。SQLite native(better-sqlite3-multiple-ciphers)→ sql.js WASM 自动 fallback,CLI 跨平台开箱即用。

(2) Phase 2a marketplace.purchase mediator(commit 2755093d0,设计文档 §6.1 落地)—— cc marketplace purchase <itemId> 大额(≥¥1000 默认 LARGE_PURCHASE_THRESHOLD_FEN = 100000 fen)自动走 M-of-N 多签 propose,小额走 direct;cc marketplace consume <proposalId> 在 threshold 达成后 finalize + 执行业务。抽出 packages/cli/src/lib/multisig-runtime.js 共享 SQLite cascade + manager loader 让 multisig + marketplace 复用(−130 行 dedup,Phase 1 10/10 零行为变更)。8 新 E2E 测试全过(大额 2-of-2 全 walkthrough / 小额 direct / --threshold-fen override / 6 个错配 exit 2)。marketplace.purchase / did.rotate / 跨链 bridge 三大典型 domain 由此真接通业务侧 — marketplace 是第一个 mediator 实例。总 18 multisig integration test 全 green(Phase 1 10 + Phase 2 8)。

(3) Phase 2b web-panel Multisig 视图落地(commit c758492d9,设计文档 §8.1 落地)—— web-shell(默认桌面入口)加 M-of-N 多签查看 / 操作面板。新 packages/web-panel/src/views/Multisig.vue (468 行):6-card 顶部 stats(总数 / pending / reached / consumed / cancelled / expired)+ 两 tab 提案列表(state+domain 过滤、详情/取消/执行购买 actions)/ 域策略(marketplace.purchase / did.rotate / crosschain.outbound)+ 640px Detail drawer(payload JSON + 签名列表 + 取消/执行购买/finalize 操作按钮)+ info Alert "web shell 不持私钥 sign 走 CLI"。AppLayout.vue + router/index.js 加 sidebar 入口(TeamOutlined)+ /multisig 路由 + i18n fallback "M-of-N 多签"。WS 通信走 ws.executeJson('multisig list --json') CLI 子进程,冷启动 6-10s(asar:true 开销)可接受;Phase 3 follow-up 可加 in-process WS handlers 削延迟、私钥签名 UI 接 Unified KeyStore、实时推送、Marketplace.vue purchase modal 集成。同份 SPA 在 desktop web-shell + cc ui 两边自动可用(per memory feedback_cross_shell_feature_pattern)。

(4) Android v1.1 W3.7 Flow B QR pairing 落地(commit c47cbc649)—— desktop 显 QR / phone 摄像头扫的主流应用通用 UX(微信/支付宝/Discord/WhatsApp Web 同模式),Xiaomi 24115RA8EC 真机 E2E verified。9 项实战坑全排清。同步补齐 Flow B commit 漏掉的 2 个测试文件:ScanDesktopPairingViewModelTest 10 项 + desktop-pair-handlers.test.js 19 项。

新增 — M-of-N multisig core(v1.2 #20 P0.3 Phase 1d)

  • @chainlesschain/core-multisig package —— lib 5 文件:policy.js(域级 {m, n, members[], requirePqc, defaultExpiryMs} validate + normalize)/ store.js(SQLite 3 表 schema + helpers)/ proposals.js(状态机 pending → reached → consumed + cancelled / expired terminal)/ signing.js(JCS canonicalize + DOMAIN_PREFIX "MULTISIG:" 防回放 + Ed25519/SLH-DSA dispatcher + verifyThreshold strip-all-sigs)/ governance-log.js(append-only JSON Lines 审计,每态转捕);75 单测全过。
  • cc multisig CLI 8 subcommands —— propose / sign / cancel / finalize / list / show / sweep / policy {set, show};全 --json 输出;10 CLI integration 测试全过。
  • SQLite driver cascade —— native better-sqlite3-multiple-ciphers / better-sqlite3 失败时自动降级 sql.js WASM,无须每平台预装 native prebuild(per memory feedback_sqlite_wasm_fallback)。
  • 测试基础修复 3 项core-multisig vitest.config.jsglobals: true(vitest 4 不接 CJS require("vitest"));5 test 文件改 ESM import;multisig-cli.test.js import 路径 @chainlesschain/core-mtc/signers/ed25519.js → 去 .js 后缀(core-mtc exports key 无后缀)。

新增 — Phase 2a marketplace.purchase mediator(v1.2 #20 P0.3 Phase 2)

  • cc marketplace purchase <itemId> + cc marketplace consume <proposalId> 两 subcommand —— amount ≥ threshold 必须有 marketplace.purchase policy 才能 propose;threshold 默认 ¥1000(LARGE_PURCHASE_THRESHOLD_FEN = 100000 fen),可 --threshold-fen 覆盖;amount < threshold 走 direct path 不创 proposal;consume 校验 domain == "marketplace.purchase" + state == "reached" 后 finalize + 打印订单 + governance log 写 consumed 事件。
  • 共享运行时 packages/cli/src/lib/multisig-runtime.js —— 抽出 commands/multisig.js 内联的 SQLite cascade + manager loader + readSecretKey/readJsonArg helpers,commands/marketplace.js 复用。multisig.js 同步 refactor 替代内联,-130 行 dedup,Phase 1 10/10 integration test 零行为变更。
  • 8 新 E2E test 全过marketplace-multisig-e2e.test.js):大额 ¥1500 2-of-2 全 walkthrough(policy → purchase → sign×2 → reached → consume → governance.log proposed/signed×2/reached/consumed)/ 小额 ¥500 direct / threshold override / 大额无 policy exit 2 / consume pending exit 2 / consume 错域 exit 2 / --help

新增 — Phase 2b web-panel Multisig 视图(v1.2 #20 P0.3 Phase 2b)

  • packages/web-panel/src/views/Multisig.vue —— 6-card stats + 提案列表 tab(state/domain 过滤 + 详情/取消/执行购买 actions)+ 域策略 tab(marketplace.purchase / did.rotate / crosschain.outbound 已知 policy)+ 640px Detail drawer(domain/state/threshold/sigs/initiator/payload JSON + 签名列表 + 操作按钮)+ info Alert "web shell 不持私钥 sign 走 CLI"。
  • router + AppLayout —— /multisig 路由 + sidebar security/audit 组 multisig 入口(TeamOutlined)+ 折叠模式同步 + i18n fallback "M-of-N 多签"。
  • WS 走 CLI 子进程 —— ws.executeJson('multisig list --json'),复用 Phase 1 CLI;冷启动 6-10s(asar:true)可接受。
  • Phase 3 follow-up:私钥签名 UI(需 Unified KeyStore)、in-process WS handlers、实时推送、Marketplace.vue 集成入口。

新增 — Android v1.1 W3.7 Flow B QR pairing(issue #19)

  • 跨模块 DI 拆解 —— PairingSignalingGate.sendAck interface 落 :core-p2p 避免 :feature-p2p 反依赖 :appWebSocketPairingSignalingGate.sendAck 实现在 :appensureRegistered + Mutex 串行化;WebRTCClient.SignalClient.sendForwardedMessage(toPeerId, payload) 桥接 mobile 端的 signaling forward。
  • Mobile 端 UIScanDesktopPairingScreen + ScanDesktopPairingViewModel 用非-social QRCodeScannerScreen(ZXing 透传,social variant 校验 reject 我们的 desktop-pairing JSON);NavGraph + SettingsScreen 加"扫描桌面 QR"入口。
  • Desktop 端 WS topics 三件套 desktop-pair-handlers.jsdesktop.pair.generate-qr / poll-ack / resetmobile-bridge.jsthis.peerId 持久化 + 拦截 type=pair-ackrecordPairAck 匹配 + 写 SQLite。
  • Vue UI MobileBridge.vue Flow B tab(默认)+ Flow A + 手输 3-tab;antd.js 注册 AQrcode

测试补丁

  • Android :feature-p2p:testDebugUnitTest 41s 全绿(138 actionable tasks)—— 新 ScanDesktopPairingViewModelTest 10 测试 + existing DesktopPairingViewModelTest + MessageQueueViewModelTest + P2PChatViewModelTest + P2PDeviceViewModelTest。
  • Desktop 3 文件 / 45 测试全绿 —— 新 desktop-pair-handlers.test.js 19 测试 + mobile-pair-handlers.test.js 9 测试 + web-shell-bootstrap.test.js 17 测试。

部署 / 分发:桌面 binary:v5.0.3.48 → v5.0.3.49 重打(含 Flow B + multisig 新代码;auto-updater 比对 5.0.3-alpha.49 > 5.0.3-alpha.48)。chainlesschain npm 0.161.8 → 0.161.9(cli 加 multisig command + dep @chainlesschain/core-multisig)。Android:versionCode/Name 不变(v1.0.0 GA 维持);Flow B 桌面端首发,后续 Android v1.1 minor release 一并 ship 完整移动客户端。三大文档站本次同步刷新:docs-site / docs-site-design / docs-website-v2 tagline 升 v5.0.3.49 + 加本节 changelog。


2026-05-12 发布 — v5.0.3.48 Android M3 capture suite (5/5 code) + M4 RemoteSkillRegistry method-level + ApprovalUI 4-category + ProgressViewer + alias 兼容窗口

productVersion v5.0.3.47 → v5.0.3.48。Android v1.0 RFC M3 + M4 收尾批次:7 commit / 187 新单测 / Android 总单测 196+ → 383+。Android M7 GA flip 一并落地(commit ffe722162):versionCode 37 → 100,versionName 0.37.0 → 1.0.0 GA。无桌面 / CLI 源码改动,CLI npm 0.161.7 → 0.161.8(force publish 走 release.yml 同步轨道)。下一步 tag v1.0.0ffe722162 推 gitee+github。

新增 — Android M3 capture suite (5/5 代码层落地)

  • VoiceMode 连续语音串联(commit 47bebed80)—— ASR → REMOTE chat → TTS pipeline 在 home 入口串通。
  • CameraOCR 拍照入 KB 流水线(commit a69269ced)—— ai.ocrImage + knowledge.createNote 走完,OCR 元数据自动写入。
  • LocationTagger Play Services FusedLocationProvider + Foreground Service(commit 3f5ac8647)—— GPS 数据进 createNote.metadata
  • SharePayloadFlusher 接 SyncCoordinator → knowledge.createNote(commit 3d1a6e3a8)—— 5 种 SharePayload(Text / Url / SingleImage / MultiImage / GenericFile)转 note 字段;SyncCoordinator 30s push 循环末尾 drain SharedInboxRepository,失败 re-enqueue。19 新单测。
  • PushNotifier 本地通道 + FCM 骨架(commit c0d990c91)—— 4 NotificationChannel(Cowork / Marketplace / SystemAlert / ShareInbox)+ 协议中立 CcPushNotificationService 入口;FCM 真接入按 android-app/docs/M3_FCM_SETUP.md 5 步走(google-services.json 由用户出场)。36 新单测。

新增 — Android M4 收尾

  • RemoteSkillRegistry method-level 元数据(commit 6e49270fd)—— MethodMetadata data class + 4 个 accessor;knowledge.* + ai.* 各 10 methods seeded(8 riskOverride 演示);其他 21 namespace pending 桌面 mobile-skill-whitelist 下发。16 新单测。
  • ApprovalUI 4 category 适配(commit f4f83cc67)—— ApprovalCategory enum {Sign / Cowork / Marketplace / SystemCritical} + fromMethod 推断;AndroidApprovalGate 4-arg overload 透传 category;Dialog 按 category 切 icon / tint / title / footer。9 新单测。
  • ProgressViewer 长时任务面板(commit f4f83cc67)—— LongTaskRegistry @Singleton MutableStateFlow + TaskProgressCommandRoutertask.* reverse-RPC + Compose ProgressViewerScreen(StatusChip + Linear / indeterminate Circular + dismiss / clear-terminal,MAX_TASKS=100 滑窗)。34 新单测。
  • §8.3 RemoteSkillRegistry alias 兼容窗口(commit 0bc8e2797)—— SkillMetadata.aliases 字段 + 内部 aliasIndex 反查;所有公共 accessor 自动经 resolveAlias。未来 namespace 改名 1 版内不 break。7 新单测。
  • §8.1 README + v1.0 GA 检查清单(commits 0bc8e2797 3da484e9c)—— android-app/README.md M3 (2/5) → (5/5 code)、M4 补 method-level + ApprovalUI + ProgressViewer;新增 ANDROID_v1_GA_CHECKLIST.md。M7 GA flip 已由 ffe722162 落地,余下 4 项待用户出场:M3 真机 E2E / M4 D2 真机 / FCM 凭证 / M6 性能实测。

测试:Android 187 新单测全绿,覆盖 capture / push / registry / task / approval-category / composite-router 全部新模块。Desktop store 回归 26 文件 / 773 测 ✓;CLI lib 169 文件 / 7185 测 ✓(确认 Android 工作未污染 desktop / CLI 路径)。

部署 / 分发:桌面 binary 重打 v5.0.3.47 → v5.0.3.48(无桌面源码改动;auto-updater 比对 5.0.3-alpha.48 > 5.0.3-alpha.47,v5.0.3.47 用户重启拿到新 build)。chainlesschain npm 0.161.7 → 0.161.8(CLI 自身 0 源码改动;force publish 走 release.yml 同步轨道)。Android:versionCode 37 → 100, versionName 0.37.0 → 1.0.0 GA(commit ffe722162);android-app/CHANGELOG.md[1.0.0] - 2026-05-12 GA entry,android-app/README.md 标题切 "🎉 v1.0.0 — GA"。三大文档站本次同步刷新:tagline 升 v5.0.3.48 + 新增本节 changelog。


2026-05-10 发布 — v5.0.3.46 Phase 3d 桌面 ↔ Android 双向同步全套 + Android 0.37.0 七件套 + e2e CI 静默回归洞收口

productVersion v5.0.3.45 → v5.0.3.46。Android 0.36.0 → 0.37.0(versionCode 36 → 37)。本次主线三条:(1) Phase 3d Mobile-Bridge-Sync 桌面 ↔ Android 双向社交数据同步全套落地(M2 → v1.2 共 12 commit · 5 ResourceType walker + tombstones + Room cursor + sync.* JSON-RPC handlers + DeviceManager + SyncCoordinator auto-trigger · gate 1-4 全部 Ed25519 真签真验);(2) Android 0.37.0 一次落 7 件用户可见功能(Volcengine SeedASR 语音 + APK 自更新 issue #21 + Splash 重做 + Claude coral 主题 + i18n 三地区 + 生物识别 + DID Key 屏);(3) e2e CI 静默回归洞收口(drop e2e-tests workflow JOB 级 continue-on-error: true —— 之前让 3/3 OS 失败显示 success "No team IPC interface found" 沉了几周 + Playwright 浏览器 cache 加速)。

新增(Phase 3d 桌面 ↔ Android 双向同步)

  • M2 桌面 sync engine 落地(commits 491fb47589a8e3635d)—— scaffold mobile-bridge-sync provider,drop dead MobileSyncManager;rewrite 5 ResourceType walker(note / conversation / did / community / channel)+ apply 路径;tombstone 触发器 + resource_type 列;mobile.ts 真 provider + IPC wire-up;52 个 mobile sync 测试,过程中找出并修 3 个 prod bug。
  • M3 Android 侧 SocialSyncAdapter wiring + Room cursor + JSON-RPC handlers(commits 28c85dad51131e35a2)—— 用 dagger.Lazy 解 4 处 Hilt 循环依赖;MESSAGE outgoing path;Room 持久化 SyncRemoteCursorsync.* JSON-RPC handlers 在 SyncManager 落地;transport wiring + outbound JSON-RPC。
  • M4 桌面设置页 + DeviceManager + 手动配对(commits 0bf5f00b9 17ea9b69d)—— Settings 加 SyncMobile 移动设备同步页面;DeviceManager wire-up + 手动 pairing 表单。
  • v1.1 真填 handlePullRpc + DID auth + 自动 trigger(commits 2d841dfdcb77e0773b)—— Android walker 真填 handlePullRpc 不再 stub;sync.* topic 加 DID 签名验证;SyncCoordinator socket 连上后自动 trigger push/pull。
  • v1.2 真 Ed25519 + Android gate 4(commits c739d77d0 4ecb7c8ef)—— 桌面侧 placeholder 签名 → 真 @noble/ed25519;Android gate 4 验签,gate 1-4 全部 strict-verify。

新增(Android 0.37.0,commit 1348636ad

  • Volcengine SeedASR 语音识别 —— WavRecorder(16kHz mono PCM → WAV)+ VolcengineAsrClient(HTTP submit + 800ms poll)+ HomeStatusViewModel 状态机 + AsrSettingsScreen x-api-key 入口 + Recording/Transcribing dialogs。
  • APK 自更新(issue #21) —— UpdateChecker(GitHub Releases API,tag prefix android-v,arm64-v8a asset 选择)+ UpdateInstaller(DownloadManager + FileProvider + ACTION_VIEW)+ UpdateDialog(changelog scroll + REQUEST_INSTALL_PACKAGES 权限流)+ Settings "检查更新" 入口。
  • Splash + 主题大改 —— SplashScreen 紫色渐变 + 旋转环 + TT logo + 3-dot breathing + progress;rememberUpdatedState 修 splash race;Claude coral palette(#D97757 primary)+ dynamicColor=false 默认保品牌色。
  • i18n(issue #16) —— resourceConfigurationszh-rCN / zh-rTW / zh-rHK 显式 qualifier(fix:zh 作 language-only 在 build 时把 values-zh-rCN/ 全过滤掉);AppCompatDelegate.setApplicationLocales 接线;MainActivityAppCompatActivity + Theme.AppCompat.Light.NoActionBar
  • Auth + DID + 生物识别 —— AuthRepository.register 幂等回退 verifyPIN(fix race:AuthVM 异步 DataStore read vs splash navigate 抢跑);SettingsScreen 生物识别 toggle;新增 KeyManagementScreen(DID + public key hex + clipboard + trusted devices + reset)。
  • Home page UX —— LLM 未配置 banner(点击跳 LLM Settings);Send-from-home prefill 通路;BrandSection / AboutScreen logo 切 R.mipmap.ic_launcher;FunctionEntryCard 12 硬编码彩色 → 统一 surfaceVariant + 44dp icon chip。
  • 顺手修的 latent bugOpenAIAdapter.{chat,chatWithTools,checkAvailability,streamChat}withContext IO + flowOn(之前 block main thread → 12s 主页冻结);RemoteConnectionManager.invoke{,WithRetry} inline reified <T : Any>SystemMonitorScreen.kt:149 os?.type/version null-safe;256 个 rs_* string stub 自动生成。

修复

  • Android sync.* DID auth strict-mode flip + release build unblock(commit 49f1440ca)。
  • 2 个 mobile-ipc 测试 stale after M4.5(commit d34de0ac0)—— DeviceManager wire-up 改了 IPC shape,把测试同步对齐。
  • 官网移动端 hamburger 菜单(commit 0bb62675d)—— SiteHeader.astro 在小屏下 nav 列表撑满整行无折叠,加 <button> toggle + tailwind md:hidden
  • logo 资产送 docs+design 站 + www 文档跳链 retarget(commit 61b8cd642)。
  • E2E preload 真错暴露 + force V5/V6 mode + app-config.json 早写(commits 076474208 1f61a18bf fc9cacc48)。

CI

  • drop e2e-tests workflow continue-on-error: true(commit e807d576c)—— 之前 JOB 级 continue-on-error: true 让 3/3 OS 失败显示 success,"No team IPC interface found" 沉了几周。
  • e2e-tests workflow 加 npm cache + Playwright browsers cache(commit 9460f05da)—— actions/cache@v4 缓存 ~/.npm~/Library/Caches/ms-playwright / %LOCALAPPDATA%\ms-playwright,单 OS 跑时间预期从 ~14m 降到 ~6-8m。

测试:桌面 mobile sync 52 测试全绿(M2 step 8)+ Android Phase 3d v1.1/v1.2 sync gates 1-4 完整 + mobile-ipc 12/12 绿。

部署 / 分发:CLI npm chainlesschain 保持 0.161.7(CLI 自 v5.0.3.45 无源码改动)。桌面 binary 重新打过,auto-updater 比对 5.0.3-alpha.46 > 5.0.3-alpha.45,所有 v5.0.3.45 桌面用户重启发现新版。Android APK 走新 android-v0.37.0 tag 发布(用户可在 Settings → 检查更新 看到)。三大文档站本次同步刷新(tagline 升 v5.0.3.46 + changelog 加本节)。


2026-05-09 发布 — v5.0.3.45 cc ui llm.chat parity + 意图理解 opt-in 开关 + 真流式 + Vue Proxy 修复

productVersion v5.0.3.44 → v5.0.3.45cc ui 终于跟桌面 web-shell 在 LLM 路径上对齐;项目/文件模式聊天默认不再走"理解中…"占位 LLM 调用;chatStream 改为真正的 token-by-token 流式;意图卡片 Vue Proxy 引用 bug 修复让占位卡正确翻面。

新增

  • cc ui llm.chat WS topic(commit f41c4b4e2 —— 桌面 web-shell 自 4eaf90137(Phase 2)就有这个 topic,但 cc ui(CLI 的 ws-server)从未注册过。结果:QuickAsk 页面在 cc ui 模式下永远卡 60 秒后报 Stream idle timeout(dispatcher 返回的 UNKNOWN_TYPE 帧 SPA 不识别为流的终态)。新增 packages/cli/src/gateways/ws/llm-chat-protocol.js,handler 复用 chat-core 的 streamOllama/streamOpenAI/streamAnthropic,按 <topic>.chunk + <topic>.result 的 frame 协议跟桌面 desktop-app-vue/src/main/web-shell/handlers/llm-handlers.js 完全对齐。新增 packages/cli/src/gateways/ws/llm-creds.js 共享 cred 解析:explicit options → WS session creds → provider 环境变量(顺序:volcengine/openai/anthropic/deepseek/dashscope/gemini/kimi/minimax/mistral);任何源没拿到都立即返回 ok:false 帧,不再 60 秒挂死。chat-intent-protocol 同步切到共享 helper,顺手修一个 latent bug:原代码 session.baseUrl || "http://localhost:11434" 在 session 没设 baseUrl 时硬编码到 ollama 地址,所有云 provider 在用户本地没起 ollama 时都会跑死。
  • 意图理解可见开关(commit f41c4b4e2 —— Chat / Agent 项目/文件模式 header 加 <a-switch>默认关闭。原行为:v5.0.3.43 起每条消息先调 LLM 提炼意图(chat.intent.understand-stream),再走真发送 —— LLM 慢/无 cred 时占位卡 90 秒;现在默认直发,需要意图卡片的用户手动打开开关(持久化到 localStorage cc.web-panel.chat.intentEnabled)。submitUserInput 第一行的短路:if (mode === 'global' || !intentEnabled.value) { sendMessage; return }。桌面壳同享这个 SPA bundle,所以桌面也跟 cc ui 行为一致。

修复

  • chatStream 真正的 token 流式(commit 35f6e60ea —— packages/cli/src/lib/chat-core.jschatStream 原本是 buffer 全部 token 后再循环 yield 的伪流式 —— 消费者要等到 LLM 整个回完才看到第一帧。改为 token queue + Promise waiter 模式:onToken push 后立刻 wake generator yield。streamPromise.finally 翻 done flag 兜底空响应。Chat / Agent / QuickAsk / 意图理解 全部受益。
  • 意图占位卡片 Vue Proxy reactivity 修复(commit a76e451e2 —— submitUserInput 创建 placeholder 后 push 进 reactive messages[sessionId] 会被 wrap 成 Proxy,但本地变量 ref 仍指向 unwrap 之前的 target;后续 placeholder.metadata.X 直接改原对象绕过 Proxy set trap → 数据更新但不触发重渲染。用户可见症状:意图卡片永久卡在"理解中… / 0 tokens / 意图: 未识别",即使后端已经流完 30+ chunk + final。修法:card = msgs[msgs.length - 1] push 后重新取 Proxy 引用,所有后续 mutation 走 card.metadata.X

测试

  • CLI ws gateway 16/16 绿(chat-intent 6 + 新 llm-chat 9 + 新增"无 cred 不调 LLM"环境清理 1)
  • web-panel chat-intent-flow 27/27 绿

部署 / 分发:CLI npm chainlesschain 0.161.5 → 0.161.6 → 0.161.7(0.161.6 已先于 productVersion 单独 publish 修复 hang;0.161.7 带 chatStream 真流式 + 意图卡片 Vue Proxy 修复)。桌面 binary 重新打过,auto-updater 比对 5.0.3-alpha.45 > 5.0.3-alpha.44,所有 v5.0.3.44 用户重启发现新版。GitHub Release 28 个 asset,6 个并行 workflow(Release / CLI CI / Code Quality / E2E / CI Tests / Full Test Automation)全绿。


2026-05-08 发布 — v5.0.3.44 LLM OCR + audit-ipc 覆盖 + chat-intent 90s 兜底

productVersion v5.0.3.43 → v5.0.3.44。一条 user-visible feature(截图 LLM OCR)+ 三条质量收口。无破坏性变化,所有 v5.0.3.43 用户可直接 upgrade。

新增

  • 截图 OCR LLM 引擎(commit 39b16e29f —— Tesseract.js 中文识别准确度差,新增 engine 参数 auto / llm / tesseract 三态。auto 默认走火山豆包视觉(已配置),LLM 出错带 fallbackFrom / fallbackReason 标签自动降级回 Tesseract。Provider 白名单 Set(["volcengine"]),扩展到 gemini / openai / anthropic 只需在各自 LLMManager 暴露 chatWithImage* 后加一个集合项。V5 / V6 共享 dialog + web-panel dialog 各加一个 <a-select> engine 选择 + 蓝/灰/橙三色 tag 显示已用引擎。

修复

  • chat intent understand 90s wall-clock 兜底(commit 6cbd04c50 —— sendStream 自带的 60s idle timer 在每个 chunk 上 rearm,慢 LLM 一直 dribble token 但永远不出 final frame 时"理解中…"占位卡会无限转。AbortController + setTimeout(90s) 把 signal 传进 stream 调用,超时清理 placeholder + 可读错误。
  • compliance-ipc 死 handler 清理(commit 29006decf —— compliance-ipc.js 之前注册的两个 channel 用了 typo 前缀 compliance-classify:*(无人调用);renderer 真正调用的 compliance:generate-report / compliance:get-policiesaudit-ipc.js 拥有,背后是 ComplianceManager。两边 service 还不一样(soc2Compliance.generateReport vs auditManager.complianceManager.generateReport),保留死路径只会让后续改真路径时漏改 → 直接删。
  • macOS 临时目录路径断言(commit bb2c16656 —— build-win-with-deref.test.js 在 macOS 矩阵 3 个断言炸 expected '/private/var/folders/...' to be '/var/folders/...':macOS /var → /private/var symlink。fs.realpathSync(os.tmpdir()) 规范化测试临时目录,linux / win 上 realpath 恒等无 regression。

测试

  • audit-ipc.js 首次单测覆盖(commit b092673be —— 之前零覆盖盲点(被 29006decf typo 死 handler bug 拽出来)。audit-ipc.js 拥有 18 个 channel 含 renderer-facing 的 compliance:get-policies / compliance:generate-report,没有单测就让 typo duplicate 静悄悄活了几个月。源码 DI 改造(与 credit-ipc 模式一致):accept ipcMain via deps with electron fallback;新增 23 个 case 覆盖 18 channel 路由 + happy-path payload + AuditManager 异常路径。

回归测试全绿

Suite 通过
desktop unit 1477 / 1477
CLI 全量 unit 17,455 / 17,455

部署 / 分发:CLI npm [email protected] 同步发布;桌面 binary 重新打过,auto-updater 比对 5.0.3-alpha.44 > 5.0.3-alpha.43,所有 v5.0.3.43 用户重启发现新版。


2026-05-07 发布 — v5.0.3.43 MTC publisher_signature M-of-N 修正 + 安全硬化级联

productVersion v5.0.3.41 → v5.0.3.43(.42 是 CLI atomic bump,无功能变化,详见 changelog)。本版本两条主线:(1) MTC landmark.publisher_signature strip-all-sigs 对称化,修复一个会绕过 M-of-N 阈值的真实缺陷;(2) 安全硬化级联,一周内 8 次 sweep 把 npm audit 全部清零(HIGH 44 → 0 · MOD 4 → 0 · LOW 45 → 0)。

核心修复

  • MTC publisher_signature M-of-N strip-all-sigs(commit c23e98cca + 文档 038e6d710 —— Producer 与 verifier 必须对称地_stripSigsForPublisher(landmark)(清零 publisher_signature.sig + 每个 snapshot 的 signature.sig + signatures[*].sig)喂给 JCS 后再签 / 验,而不是只清零 publisher_signature.sig。否则只要篡改 M-of-N 联邦中任何一个成员的 per-member sig,publisher_signature 就会被打断 → 直接绕过 M-of-N 阈值的存在意义。Helper 抽到 packages/core-mtc/lib/publisher-signing.js,导出为 @chainlesschain/core-mtc/publisher-signing 子路径。三处调用点:batch.js(单签 + 联邦)、landmark-cache.js 验证侧、桌面 governance-multisig.js(lazy-require 绕 @noble/curves hoisting trap)。规范文档 §8.2 同步更新。Canary:mtc-federation-publish-cli.test.js "2-of-3 threshold accepts when one member's sig is tampered"。
  • LandmarkCache landmark.publisher_signature 验证启用(commit c40d927da + 72c3619ee —— 默认 opt-in verifyPublisherSignature: true 对 cache 命中前增加发布者签名校验(不再无脑相信 cache);real-verifier callers(CLI cc mtc verify + 桌面 audit pipeline + cross-chain bridge 校验侧)全线启用。常量 BAD_PUBLISHER_SIGBAD_LANDMARK_SIG36fcd8f4f)匹配规范 §11;spec §8.5 跟进 LANDMARK_SIG_PREFIX 定义。

安全硬化(HIGH 44 → 0 · MOD 4 → 0 · LOW 45 → 0)

  • f6c937fa8 override serialize-javascript + tar(HIGH 44 → 10)
  • 8a56978b5speedtest-net,改用 native fetch
  • 9c7ce00e7 override semver ^7.7.4(清掉 imap 链)
  • 922b64822 override undici ^6.21.2(清掉 hardhat 5.x 链)
  • 4fae47dd4 deprecate werift
  • cc7b0b40a override ip-address + dompurify(MOD 4 → 0)
  • 1f86594a2 override tmp ^0.2.5
  • 64047283a override make-fetch-happen ^13
  • d19bcb8cbhardhat-stack 到独立 contracts/ workspace + drop hdkey(LOW 14 → 0)
  • d558b66b1 channel-manager DDL 加固 + drop 未用的 jspdf
  • 7312cf035 wrtc-compat 补 CVE-2024-29415(ip SSRF)

新增

  • Updater 渲染端进度通知(commit 4c1a5ac18 + e27592bb5 —— notifier-only flow,关闭重复 native dialog,渲染端实时显示下载进度。

回归测试全绿

Suite 通过
desktop unit(含 nostr-bridge-ipc 修) 1454 / 1454
core-mtc 单测 258 / 258
CLI mtc-federation 集成 41 / 41
CLI 全量 unit 17,432 / 17,432

附带 bug 修(本对话两连)—— 同根:551ef28b3 "fix(ipc): correct ipcGuard API" 切到 markModuleRegistered 那次 sweep 不彻底,留下两类互补 bug:

Commit Bug 为什么之前没炸
af92e0162 fix(test): align nostr-bridge-ipc stub 源码用 ipcGuard.markModuleRegistered(name) 直调(real guard 有此 fn),但 test stub 仍 mock 不存在的 registerModule(name, channels) 二参 → stub 调时 TypeError: ipcGuard.markModuleRegistered is not a function,23 / 389 social 用例炸 CI "Unit Tests" stable-fallback 排除 **/*-ipc.test.js;"Full Test Suite" 用 continue-on-error: true
11247a957 fix(ipc): align 8 ai-engine IPC modules 8 个 IPC 模块(autonomous-developer / collaboration-governance / tech-learning / federation-hardening / reputation-optimizer / sla / stress-test / inference)反过来 —— 源码 if (ipcGuard.registerModule) { ipcGuard.registerModule(name, CHANNELS); },real guard 没 registerModuleif 永远 falsy → guard 内部 registeredModules Set 漏跟踪这 8 个模块。Handlers 走 ipcMain.handle 仍真正注册,业务功能正常 测试 stub 自己 mock 了 registerModule → 测试假绿

修:stub registerModulemarkModuleRegistered + 断言去 channels 参(test 侧);if (ipcGuard.registerModule) { ipcGuard.registerModule(name, CHANNELS); }ipcGuard.markModuleRegistered(name),同时去掉同样无意义的 if (ipcGuard.unregisterModule) wrap(源码侧)。回归:collaboration-governance-ipc 21/21 + tech-learning-ipc 21/21 + ipc-guard core 12/12 + 邻近 29 文件 577/577 ✅。

部署/分发:本版桌面 binary 重新打过;auto-updater 比对 5.0.3-alpha.43 > 5.0.3-alpha.41,所有 v5.0.3.41 桌面用户重启会真发现新版。三大文档站(docs / design / www)同步刷新(commit 1183075b5 + 0384099f3)。


2026-05-07 发布 — v5.0.3.41 chat-panel-v5 三壳对齐 + B4 social 滚动收口

productVersion v5.0.3.40 → v5.0.3.41。本版本正式 ship 自 .40 以来的全部滚动条目(XII–XIX:B4 跨机分发 / trust filter / viewer / 外部归档 / M-of-N / 跨联邦信任 / web-shell / web-panel / sign-as-self / cred-persist / auto-archive / chat-panel-v5)。

核心新能力

  • chat-panel-v5 三壳严格对齐 —— V5 桌面 / V6 桌面 / web-shell 默认壳的聊天体验严格对等:流式响应 + 历史会话切换 + 上下文记忆引用 + 工具调用面板。Phase 1.6 hard-flip 后默认 web-shell 用户不再缺任何 V5 聊天能力(commit b33527d31 Phase E + commit 72b13388a web-shell port v1+v1.1)。
  • B4 P2P 社交全栈 audit-grade 闭环 —— §2.2.10 → §2.2.24 共 15 节累计落地:跨机同步 + MTC 联邦双轨 + DID 签名 + auto peer 桥接 + Merkle envelope finality + 跨机分发 + trust filter + 桌面 viewer + 外部归档 + M-of-N 多签 + 跨联邦信任 + sign-as-self(私钥永不离主进程)+ WebDAV 凭据 secure-config.enc(safeStorage / AES-256-GCM)+ 主进程定时归档 cron。私钥 / 密码均不过线,桌面 V5/V6 + 默认壳 web-panel 用户看到的功能严格对等。

回归测试全绿

Suite 通过
desktop MTC + DID + social + web-shell + p2p + bootstrap + renderer 1454 / 1454(4 skipped)
CLI chat-intent + mtc-federation core/trust/sync 集成 69 / 69
web-panel 单元 1853 / 1853
web-panel e2e 63 / 63

修一个 bug

  • web-panel views-mount-smoke.test.js 在 63 文件并行套件下 first-import 撞 30s timeout(Pipeline.vue + Chat.vue 在 4-fork 池下 SFC transform 竞争)。fix:file-level vi.setConfig({ testTimeout: 60_000 }),全局 testTimeout 不动(已验证全局升 60s 反让 worker pool 调度恶化致更多 file 超时)。同 cli_ci_sharding_lessons 记录的 vitest 4 严格 timeout 模式。

部署/分发:本版桌面 binary 重新打过;auto-updater 比对 5.0.3-alpha.41 > 5.0.3-alpha.40,所有 v5.0.3.40 桌面用户重启会真发现新版。三大文档站(docs / design / www)同步刷新。


2026-05-07 增量更新 XIX(chat-panel-v5 Phase E — V6 桌面 AIChatPanel 对齐 4 件功能

XVI 把 V5 ChatPanel 的 4 件重型功能 port 到 web-shell;V6 桌面 shell/AIChatPanel.vue 当时未跟。本节把对齐补齐。V6 复用 desktop V5 已有的 VirtualMessageList.vue / IntentConfirmationMessage.vue / messageTypes.ts 三件套(不重新建),意图识别走 desktop 既有 IPC project:understandIntent + followup-intent:classify(preload 已 expose,零后端工作),所以 Phase E 是纯 UI 集成。

维度 V6 改动 说明
A. 虚拟列表 <VirtualMessageList> 替换 v-for (shell/AIChatPanel.vue slot 重构) import 自 V5 components/projects/VirtualMessageList.vue(双壳共用一份)。slot prop 是 unknown,加 asMsg(value: unknown): ConversationMessage helper 在 setup 段把类型钉回,v-for-with-singleton (v-for="msg in [asMsg(message)]") 把类型化 msg 暴露给整段模板
B. Context 模式 header 加 a-radio-group + localStorage cc.desktop.aichat.contextMode(与 web-shell key 独立) file 永久 disable(V6 没 currentFile 概念)
C. 意图识别 submitUserInput(text) / tryUnderstandIntent(text) / handleIntentConfirm/Correct;transient pendingIntentCard ref(不进 conversationStore);onSend 改走 submitUserInput;<IntentConfirmationMessage> 渲染挂在 messages-list 之后;clearContext / newConversation / selectConversation 都清空 pendingIntentCard Wire:window.electronAPI.project.understandIntent({ userInput, projectId, contextMode }) 直走 V5 IPC,preload 1259 行已 expose;返 success=false 或 understanding 无信息量时 fall through 直发
D. autoSendMessage 新 prop autoSend?: boolean(保留 prefillText);watch open + [prefillText, autoSend] 触发 maybeAutoSend();token dedup ${prefill}::${autoSend}::${contextMode} 防重发;canSend false 降级 prefill 让用户手动点发送 Modal panel 无 vue-router,单通道(vs web-shell 双通道)

双壳差异对比

web-shell (XVI) V6 desktop (XIX)
协议层 WS topic chat.intent.understand[-stream] / chat.intent.classify-followup electronAPI IPC project.understandIntent / followupIntent.classify
Streaming intent ✅(v1.1, async generator + chunk frames) ❌(V5 IPC 是 non-streaming;待新建 streaming IPC 时再升)
Multi-turn history ✅ payload.history 自动注入 ❌(V5 IPC 不接 history 参数)
Persisted intent decisions ✅ localStorage(LRU 200) ❌(pendingIntentCard transient,刷新自然丢)
Custom quickPrompts ✅(modal editor + 12×120 cap) ❌(V6 现有 4 个 hardcoded)
autoSendMessage 通道 URL query + Pinia 双通道 Prop 单通道

测试矩阵

测试
vue-tsc --noEmit ✅ 0 errors
npm run build:main
desktop store/shell/shell-preview/AIChatPage 回归 150 / 150 ✅(131 + 19)
web-shell + CLI + e2e 累计 1844 + 89 + 63 全绿

新增 AIChatPanel.vue 测试 caveat:本节未补 mount-level 单测。原因:(1) AIChatPanel 既有 mount 测试要海量 stub(参见 AIChatPage.test.js 一千多行模式),(2) Phase E 借用的 4 件 component 都已在 web-shell 测过,(3) 桌面 IPC project:understandIntent / followupIntent.classify 是 V5 跑了几年的 handler。Manual smoke:npm run dev → V6 shell AI 按钮打开 AIChatPanel → 切 contextMode → 输错别字看意图卡 → 确认/纠正闭环。

2026-05-07 增量更新 XVIII(B4-auto-archive v1 — 主进程定时归档 cron + MtcAudit 第 5 个 Tab

§2.2.21 (XIV) 把 Archive Tab 接好之后,归档仍然是手动的——用户必须主动点 "推送"。XVII 修了凭据持久化,让推送本身不需要每次重输密码;本节继续把 cron 跑起来——主进程 setInterval 周期触发 ChannelEnvelopeArchiver.push,配置写到 app-config.jsonmtc.autoArchive namespace,重启后自动恢复。

维度 改动
触发模式 XVII 手动 push → 主进程 setInterval cron(默认 24h,最小 5min)
配置持久化 app-config.json mtc.autoArchive:enabled / intervalMs / providerSpec / communityIds + lastRunAt/Status/Error/Summary
失败处理 单 community 失败仅记 lastRunStatus='partial',不阻断后续 community 归档
复用 cred 链 providerSpec 同 XVII —— useStoredCredentials:true 直接复用 secure-config.enc
Reentrancy runOnce 内置 _running 守卫,timer fire 期间手动触发返回 {skipped:true}
UI 入口 MtcAudit.vue 第 5 个 Tab "Auto Archive 定时归档"——switch / 间隔 / provider / community 白名单 / 立即跑一次 / lastRun 状态摘要

改动 (8 文件 / 27 测试)

文件 改动 说明
desktop-app-vue/src/main/mtc/auto-archive-scheduler.js 新文件 (+250) 纯 Node 调度器;构造器 / getConfig / setConfig / start / stop / runOnce
desktop-app-vue/src/main/mtc/__tests__/auto-archive-scheduler.test.js 新文件 (+325) 19 测试:构造校验 / 默认 merge / clamp / setConfig 校验 / 启停 / runOnce 7 场景
desktop-app-vue/src/main/bootstrap/social-initializer.js 注册 autoArchiveScheduler factory entry (+50) dependsOn: archiver/factory/communityManager;start() 自动接 enabled=true 的旧配置
desktop-app-vue/src/main/social/community-ipc.js 3 IPC: auto-archive:{config-get,config-set,run-now} (+45) 桌面 V5/V6 路径
desktop-app-vue/src/main/web-shell/handlers/community-mtc-handlers.js 3 WS topic + 工厂 (+55) web-shell 默认壳路径
desktop-app-vue/src/main/web-shell/__tests__/community-mtc-handlers.test.js +5 测试 + 顶层注册表 +3 行 config-get/set/run-now happy + 校验透传 + 缺 dep
desktop-app-vue/src/main/web-shell/web-shell-bootstrap.js + index.js + phase-3-4-social.js 4 处依赖透传 + handlers 计数 24→27 DI 链全程串好
packages/web-panel/src/composables/useAutoArchive.js 新文件 (+95) 3 方法:getConfig / setConfig / runNow
packages/web-panel/__tests__/unit/useAutoArchive.test.js 新文件 (+155) 9 测试:getConfig 2 / setConfig 3 / runNow 3 / isEmbedded
packages/web-panel/src/views/MtcAudit.vue +5 Tab + script 100 行 + onMounted 自动加载 UI 含 lastRun 状态卡 + run-now summary 卡

测试统计 (27 新)

  • desktop scheduler 19 + handlers +5 = 24
  • web-panel composable 9(注:有重复计数;以新增 LoC 为准)

回归:desktop web-shell + mtc 全 32 文件 538/542 (4 skipped, 0 fail);web-panel useAutoArchive + useMtcArchive 22/22 子集全绿。

安全 / 鲁棒性断言

  • intervalMs 最小 5 分钟,避免误配成毫秒级 DoS 自己;
  • enabled=true 强制要求 providerSpec —— 没 provider 直接拒绝保存;
  • runOnce 内置 _running 守卫,多 fire 不重入;
  • providerSpec.useStoredCredentials 走 §2.2.23 vault 路径,cron 配置不写明文密码;
  • per-community try/catch,单点失败不阻断后续;记 lastRunSummary.perCommunity[id] = {ok, error?}。

B4-auto-archive 决策

  1. 不引第三方 cron 库(node-cron / agenda 等)—— setInterval 已足够(不需要 cron 表达式);
  2. 复用 app-config.json,不开新 store—— 跟 ui.useV6ShellByDefault 等设置一个层级;
  3. scheduler 纯 Node 无 Electron API—— 单元可测 timers 注入;
  4. runOnce 自动持久化 lastRun* 字段—— UI 不需要单独 status WS topic,getConfig 同时拿到运行历史。

2026-05-07 增量更新 XVII(B4-cred-persist v1 — WebDAV 凭据走 secure-config + 修一个潜伏 ~1 个月的字段名 bug

§2.2.21(XIV)落 MtcAudit 时 archive Tab 让用户每次 push 都手输 baseUrl/username/password 走 WS——这违反了"凭据不应在 wire 上反复出现"原则;同时只要真去用 WebDAV archive 就会发现"url 必填"立刻抛错——WebDAVClient 构造器读 url/remotePath,archive 工厂从 §2.2.16 起一直传 baseUrl/remoteRoot,名字根本对不上,B4-archive WebDAV 路径自从落地就完全不可用。XIV 之前没人真点过那个按钮(CLI 路径走 filesystem 居多),所以一直没爆。本节同时解决两个问题:

维度 v1 - XIV(broken) v2 - XVII(本节)
WebDAV 字段名 spec.baseUrl / remoteRoot(错的) spec.url / remotePath(对的)
凭据来源 每次 push 都手输 + 走 wire 复用 Phase 3c sync-credentials secure-config.enc(safeStorage / AES-256-GCM)
Renderer 是否持密码 是(input v-model) 否(toggle 默认 ON 时不显示输入框)
Wire 上是否有密码 否(main 内部从 vault 解密)

改动 (5 文件 / 8+ 测试)

文件 改动 说明
desktop-app-vue/src/main/mtc/archive-provider-factory.js 新文件 (+90) 从 social-initializer 抽出工厂;支持 useStoredCredentials:true 模式;字段名修正
desktop-app-vue/src/main/bootstrap/social-initializer.js 工厂 init 改用新模块 (-58 / +5) DI 装配只剩一行
desktop-app-vue/src/main/social/community-ipc.js 新 IPC channel-archive:has-stored-webdav-credentials (+22) 桌面 V5/V6 路径,只回 boolean
desktop-app-vue/src/main/web-shell/handlers/community-mtc-handlers.js 新 WS topic mtc.archive.has-stored-webdav-credentials (+25) web-shell 默认壳,只回 boolean
desktop-app-vue/src/main/web-shell/web-shell-bootstrap.js + index.js 透传 syncCredentials 依赖 (+10) 让 WS handler 拿到 sync-credentials 模块引用
packages/web-panel/src/composables/useMtcArchive.js checkStoredWebdavCredentials() + hasStoredWebdavCredentials ref (+30) UI 探测:vault 是否已有凭据
packages/web-panel/src/views/MtcAudit.vue Archive Tab 重做:toggle + 字段名修 (+30 / -15) switch 默认 ON;vault 空时改提示去 Settings 配

测试 (8 新)

  • desktop-app-vue/src/main/mtc/__tests__/archive-provider-factory.test.js 新文件 12 测试 — filesystem 路径 / webdav 显式 spec / webdav useStoredCredentials 4 子用例 / 字段名锁定(assert NOT 含 baseUrl/remoteRoot)/ 拒空 spec / 拒未知 kind
  • desktop-app-vue/src/main/web-shell/__tests__/community-mtc-handlers.test.js +4 测试 — has-stored true/false / 缺 syncCredentials 注入 / 关键安全断言(响应只含 hasCredentials+success 二字段)
  • packages/web-panel/__tests__/unit/useMtcArchive.test.js +4 测试 — flag true/false / handler error → soft false / transport error → null

回归 (上下游全绿):desktop social/mtc/web-shell 1244/1244(+10 测试) + web-panel 1976/1978(2 个 phase-b CLI 失败为 stash-clean 时也存在的 pre-existing flake,与本次无关,stash 后已验证)。

关键安全断言

  • 工厂层:useStoredCredentials=true 时调用方传入的 inline url/username/password 完全忽略(vault 字段优先)—— 防误用 / 防 spec injection。
  • IPC + WS 层:hasCredentials 响应只含 {success, hasCredentials} 两字段,单元测试 expect(Object.keys(r).sort()).toEqual(['hasCredentials','success']) 锁定。
  • UI 层:toggle 默认 ON;vault 空时 toggle 不可关(disable),同时显示 a-alert 引导去 Settings → 同步 → WebDAV 配置一次。

B4-cred-persist 决策

  1. 不另起 credential-vault 子系统——直接复用 §Phase 3c 已落的 sync-credentials(secure-config.enc + safeStorage / AES-256-GCM),单一 source of truth;
  2. 不新增 credentials.encrypt/credentials.decrypt IPC 暴露——所有解密只在主进程 archiveProviderFactory 内部进行;
  3. 工厂从 social-initializer 抽到独立模块——DI 装配 -58 / +5 行,可独立单测,未来加 OSS/S3 也好扩。

2026-05-07 增量更新 XVI(chat-panel-v5 v1 + v1.1 — V5 桌面 ChatPanel 完整 port 到 web-shell

V5 桌面 components/projects/ChatPanel.vue(3788 行)一直被标记为"a different much larger port"——意图识别 / 自动发送 / 虚拟列表 / context 模式 4 件套和 5 个 IPC + 6 channel 强耦合,长期没下沉到 web-shell。本次完整 port 完成(含真 LLM 后端,不是占位)。

维度 改动 说明
A. 虚拟列表 packages/web-panel/src/components/VirtualMessageList.vue (+185) + Chat.vue 替 v-for @tanstack/virtual-core ^3.13.13 对齐 V5;happy-dom 下 fallback 路径覆盖;同时把 V6 AIChatPanel.vue 的清爽 UI 借过来——32px 头像 / 角色 + 时间 / 4 个 quick-prompt 空态
B. Context 模式 chatStore 加 contextMode + localStorage 持久化(cc.web-panel.chat.contextMode),Chat.vue 头部 a-radio-group(project/file/global) file 在 web-shell 永久 disable(无 currentFile 概念),project 在非 project 启动模式 disable,持久化值若与运行环境冲突自动降级到 global
C. 意图识别(完整 port,真 LLM) 后端:packages/cli/src/lib/chat-intent-service.js (+340) + gateways/ws/chat-intent-protocol.js (+95) + ws-server / dispatcher 接线(2 新 WS topic)。前端:utils/messageTypes.js (+90) + components/IntentConfirmationMessage.vue (+185) + chatStore 加 submitUserInput/confirmIntent/correctIntent/classifyFollowupIntent/pushFollowupIntentBanner chat.intent.understand 走 V5 同款 prompt(temp 0.3 / max 500 tokens / JSON 严格契约),从活跃 session 取 LLM creds,LLM 不可用时降级 pass-through。chat.intent.classify-followup 规则优先(CONTINUE_EXECUTION / MODIFY_REQUIREMENT / CLARIFICATION / CANCEL_TASK 4 类,关键词 + 正则双层评分),confidence > 0.8 直接返回不调 LLM
D. autoSendMessage 协议 Chat.vue 加 route.query 解析(?prompt=xxx&autoSend=true&session=<id>)+ chatStore.scheduleAutoSend / clearAutoSend + 消费 token 防回放 URL 驱动 + Pinia 程序化双通道;URL 消费后 router.replace 清 query 防刷新重放;URL > Pinia 优先级
i18n 同步 packages/locales/seed/{zh-CN,en}.json 新增 chat.role.me / chat.contextMode.{project,file,global} / chat.empty.startTitle / chat.empty.hint.{project,file,global} / chat.quickPrompts.{summarize,brainstorm,explain,codeReview} / chat.intent.{confirmed,corrected,label.*,action.*,status.*} 共 22 对 keys,zh/en parity 测试通过

测试矩阵(chat-panel-v5 新增 69 测试,累计 web-panel 1829 + CLI 89 全绿,无回归)

文件 测试
Unit (CLI) packages/cli/__tests__/unit/lib/chat-intent-service.test.js 22 — extractJson 4 分支 / buildUnderstandPrompts 3 / ruleBasedClassify 5 类别 / understandIntent 5 分支(empty / no-llm / 解析成功 / 解析失败 / 网络抛错)/ classifyFollowupIntent 5 路径(rule-only / no-llm / llm-success / rule_fallback / 默认 CLARIFICATION)
Unit (CLI) packages/cli/__tests__/unit/gateways/ws/chat-intent-protocol.test.js 6 — bad-request / no-session-creds 降级 / 有 session 完整透传 LLM creds / unexpected error → INTENT_UNDERSTAND_FAILED / classify-followup rule-method / classify-followup llm-method
Unit (web-panel) __tests__/unit/messageTypes.test.js 11 — 三 enum 形状 / createSystemMessage / createIntentConfirmationMessage 3 / createIntentSystemMessage 4 intent 预设
Unit (web-panel) __tests__/unit/chat-intent-flow.test.js 19 — contextMode 4(默认 / 持久化 / 拒未知 / file 持久化降级)/ submitUserInput 7(global 直发 / project 有用 understanding 推卡 / no-LLM 降级 / 重复输入跳过 / confirmIntent / correctIntent / WS error 降级)/ scheduleAutoSend 3 / classifyFollowupIntent 3
Unit (web-panel) __tests__/unit/VirtualMessageList.test.js 5 — fallback 全量渲染 / :key 用 message.id / scrollToBottom expose / scroll 边界 emits / messages 长度变化
Unit (web-panel) __tests__/unit/IntentConfirmationMessage.test.js 7 — 显隐双分支 / pending/confirmed 状态切换 / confirm emit payload / correct 流程(打开/拒空/有内容提交)
全 web-panel 62 文件回归 1829 / 1829
CLI ws-server / dispatcher 回归 61 / 61
新增累计 69 测试(CLI 28 + web-panel 41)全绿

端到端总计 (v1):desktop-app-vue 1106 + web-panel 1829 + CLI(chat-intent + ws)89 = 3024 测试全绿


v1.1 增强(4 个 future-work 项一次性消化)

Improvement 实现 关键文件
1. Streaming intent 新 WS topic chat.intent.understand-stream(chunk + result + error 三种 frame)。chat-intent-service.understandIntentStreamchatStream 异步生成器,token 边来边推;前端 submitUserInput 改用 ws.sendStream,立即推 placeholder 卡片"理解中… N tokens",final 时 promote 为正式卡 chat-intent-service.js understandIntentStreamchat-intent-protocol.js handleChatIntentUnderstandStreamIntentConfirmationMessage.vue 加 streaming 视图
2. Multi-turn intent understandIntent / understandIntentStreamhistory 参数;prompt 拼对话历史最近 5 条;前端 submitUserInput 自动 slice user/assistant 消息(trim 500 字/条)传上去;后端再次 slice(-10) 防客户端脏数据 chat-intent-service.js buildUnderstandPrompts(_, _, history)chatStore.submitUserInput
3. Persist intent decisions confirmIntent / correctIntent 入 localStorage cc.web-panel.chat.intentDecisions(key:<sessionId>::<messageId>);submitUserInput push 卡片时 lookup 历史决策 replay status;LRU 200 条上限按 ts 淘汰 chatStore.js recordIntentDecision/lookupIntentDecision/writePersistedIntentDecisions
4. Custom quickPrompts chatStore.customQuickPrompts ref + localStorage cc.web-panel.chat.customQuickPromptssetCustomQuickPrompts 自动 trim/滤空/cap (12 entries × 120 chars);空态加"+ 编辑"按钮打开 a-modal 编辑器(每行一条 prompt),有"恢复默认" chatStore.jsChat.vue modal、locales chat.quickPromptsEditor.* 7 keys

新增 7 测试(覆盖 4 个 improvement):sendStream + onChunk 计数 / history payload 形状(tool 过滤)/ confirmIntent 落 localStorage / correctIntent 落 correction 字段 / customQuickPrompts trim+滤空 / 12×120 cap / null 清除。

E2E 测试修复(顺手处理预存 3 个失败):__tests__/e2e/panel.test.js 改用 net.listen(0) 拿 kernel-allocated 空闲端口,并解析 cc ui 启动 banner 真实绑定的 port(cc ui 有静默 port-fallback:requested 端口被占时 silently 切到下一个空闲口,导致 httpGet(requestedPort) 打到无关进程上 ECONNRESET,本地 5 个陈旧 vitest fork 进程占了 19210-19219)。4 个 suite 全部从硬编码端口迁移到动态分配。3 个预存失败 → 0

累计 (v1 + v1.1):web-panel 1844/1844 + CLI 89/89 + e2e 63/63 + desktop-app-vue 1106/1106 = 3102 测试全绿

已知 caveat

  • 端到端浏览器 smoke(开 cc serve --mode project --ui full 后真跑 LLM 走完意图卡 → 点确认 → agent 回复)尚未做,建议 ship 前手动验一次。
  • V6 桌面 shell/AIChatPanel.vue 不含这 4 件功能(V6 panel 的 V5 来源是已删的 857 行全局 ChatPanel),后续以独立 phase 对齐(Phase E: align V6 AIChatPanel)。

2026-05-07 增量更新 XV(B4-mofn-sign v2 — sign-as-self(私钥永不离 main)+ latent IPC bag bug 修复

XIV 落了 web-panel UI,但 governance-mofn 的签名收集 v1 要求 renderer 传 secretKey base64——出于安全 web-panel 故意不持私钥,结果"代我签名"按钮缺位。本次 v2 把签名移到主进程:renderer 只发 (communityId, proposalId),main 进程从 DIDManager 取本人当前身份完成签名,私钥永不出主进程

顺带修了一个潜伏已久的 bug:registerAllIPC 的 deps 包从来没传 communityManager / channelManager / gossipProtocol / governanceEngine / contentModerator + B4 全套 managers,桌面 V5/V6 community IPC 一直 silently 拿到 null(V6 hard-flip caaddf530 后默认壳是 web-shell,IPC 路径用户基本碰不到,所以没暴露)。

主题 文件 说明
新 IPC governance-mofn:sign-as-self community-ipc.js (+58) renderer 只发 (communityId, proposalId),main 调 didManager.getCurrentIdentity(){did, public_key_sign, private_key_ref},parse JSON 取 sign base64 → Buffer secretKey → 调 governanceMultiSig.addSignature(...) 完成。返回 {ok:true, status, signerDID}
新 WS topic mtc.governance-mofn.sign-as-self web-shell/handlers/community-mtc-handlers.js (+78) 同样语义,web-panel 用这条。社交 deps + didManager 注入
web-shell-bootstrap + index.js 透传 web-shell-bootstrap.js + index.js (+5) didManager 加进 createCommunityMtcHandlers opts
useGovernanceMofn.signAsSelf 动作 web-panel/composables/useGovernanceMofn.js (+33) 关键约束:wire 上没有 signerKeys 字段(测试断言验证)
MtcAudit.vue Tab 3 "代我签名"按钮 MtcAudit.vue (+25 / -8) 提案行加 button,仅在 !finalized && isEmbedded enable;alert 文案改为 v2 secure 说明
🐛 latent bug 修复 — registerAllIPC deps 包补齐 index.js (+25 / +12 hoist) communityManager / channelManager / gossipProtocol / governanceEngine / contentModerator + mtcFederationManager / channelEventBatcher / channelEnvelopeDistribution / channelEnvelopeArchiver / archiveProviderFactory / governanceMultiSig / crossFedTrustthis.* + 进 registerAllIPC({...})Phase A 起 community IPC 在桌面 V5/V6 一直 silent broken——这次顺手修了

测试矩阵 (B4-mofn-sign v2 新增 10, 累计 desktop 1112 / 1112 全绿 across 33 文件 + web-panel 1833 / 1833 across 62 文件)

文件 测试
Unit (扩展) desktop-app-vue/src/main/web-shell/__tests__/community-mtc-handlers.test.js (+6 → 25) sign-as-self: 完整 happy path + 缺 didManager / 未登录 / 缺 keys / 错 JSON / 缺 sign 字段
Unit (扩展) packages/web-panel/__tests__/unit/useGovernanceMofn.test.js (+4 → 13) signAsSelf: wire 上无 key material / 拒空 args / handler error 捕获 / currentStatus 更新
全 desktop+web-panel 回归 1112 + 1833 = 2945

安全模型变化

v1 (XI) v2 (本次)
renderer 持私钥? 是(renderer base64 序列化 secretKey 上 wire)
wire 上私钥?
主进程拿钥匙路径 不需要(因为 renderer 已经送过来) DIDManager.getCurrentIdentity() → private_key_ref.sign
适用场景 CLI 提案 / 测试 / 直接持私钥的高级用户 所有 web-panel UI 用户(默认)

governance-mofn:sign v1 入口保留向后兼容,CLI 等场景仍可用。UI 一律走 v2。

2026-05-07 增量更新 XIV(B4-webpanel v1 — web-panel UI 接 13 个 WS topic

XIII 把 IPC → WS 的桥铺好了,但 web-panel 没 UI 入口——用户照样点不到。本次补 4 个 composable + 1 个 4-tab 页面 MtcAudit,把 envelope / archive / governance-mofn / cross-fed-trust 四件全套接到默认壳的 sidebar 上。

主题 文件 说明
4 个 composable packages/web-panel/src/composables/{useMtcEnvelope, useMtcArchive, useGovernanceMofn, useCrossFedTrust}.js (+460) 全部走 ws.sendRaw({type:'mtc.*', ...}) + useShellMode().isEmbedded 双路径分叉。pure-browser 模式自动 disable + 显示提示。useGovernanceMofn 内含 base64 序列化 helper(renderer 不直接传 Buffer,base64 字符串过 wire)
MtcAudit.vue 4-tab 页面 packages/web-panel/src/views/MtcAudit.vue (+450) Tab 1 Envelope 查询 + raw JSON 折叠 + 复制;Tab 2 Archive (filesystem / WebDAV provider 切换 + push/restore/list);Tab 3 Governance M-of-N(创建提案 + 列表 + finalize;签名收集 v1 通过 alert 提示用 cc CLI / 桌面 DID 工具);Tab 4 Cross-Fed Trust(建立/撤销/列表/合并 DID 集查询)
路由 + sidebar packages/web-panel/src/router/index.js + components/AppLayout.vue (+3 / 总) /mtc-audit 路由;sidebar advanced 组里 mtc 之后新增 mtc-audit 项;折叠模式 icon 也加;onMenuClick 自动 router.push

测试矩阵 (B4-webpanel 新增 33 composable 单元 + 1 路由计数 fix, 累计 web-panel 1829 / 1829 全绿 across 62 文件)

文件 测试
Unit packages/web-panel/__tests__/unit/useMtcEnvelope.test.js 8 — idle 起手 / 空 args / pure-browser disable / found result / not-found / ws throw / reply.ok=false / reset
Unit packages/web-panel/__tests__/unit/useMtcArchive.test.js 11 — listArchives 缓存 + 拒空 + handler error / pushArchive 完整 + sinceBatchId 透传 + handler error / restoreArchive 完整 + 拒缺 archiveName / isEmbedded reflect
Unit packages/web-panel/__tests__/unit/useGovernanceMofn.test.js 9 — list cache + 拒空 / create 透传 / sign 序列化 Uint8Array→base64 + 拒空 + 已 base64 不二次编码 / finalize / status cache / handler error
Unit packages/web-panel/__tests__/unit/useCrossFedTrust.test.js 6 — list cache + 拒空 / establish 全量透传 + 空可选字段 strip / revoke 返 boolean / getTrustedDids cache / handler error
全 web-panel 62 文件回归 1829 / 1829

端到端总计:desktop-app-vue 1106 + web-panel 1829 = 2935 测试全绿

🎯 P2P 社交 audit-grade 全栈完成(11 commits + 1 web-panel UI commit)

Phase A → Phase B v1 → B4 → B4-merkle → B4-cross
   → B4-cross-trust → B4-ui → B4-archive → B4-mofn
   → B4-crossfed → B4-webshell (WS topics) → B4-webpanel (UI)

桌面端(V5/V6)走 IPC,web-shell 默认壳走 WS topic + Vue UI,全套对等。

2026-05-07 增量更新 XIII(B4-webshell v1 — 全 B4 套件 web-shell 默认壳可见

用户 follow-up:Phase 1.6 后默认壳是 web-shell(hard-flip caaddf530),但 B4 全套(envelope viewer / archive / governance-mofn / cross-fed-trust)只走 ipcMain.handle,web-panel 用户看不到。本次补 13 个 WS topic + 入口透传,让默认壳用户也能用全套。

主题 文件 说明
WS topic handler factory src/main/web-shell/handlers/community-mtc-handlers.js (+330) 13 个 dotted topic:mtc.envelope.getmtc.archive.{push, restore, list}mtc.governance-mofn.{create, sign, status, finalize, list}mtc.cross-fed-trust.{establish, revoke, list, get-trusted-dids}. 每个 handler 接 {success, ...} 形态返回,null manager 时返回 {success:false, error:"... not initialized"} 不让 dispatcher 崩
web-shell-bootstrap 注册 src/main/web-shell/web-shell-bootstrap.js (+22) createCommunityMtcHandlers({...managers}) 拼进 wsHandlers map; lazy peer-pull 走 p2pManager.getConnectedPeers
index.js 入口透传 src/main/index.js (+22 / 0) DI container 结果取 6 manager (channelEventBatcher / channelEnvelopeDistribution / channelEnvelopeArchiver / archiveProviderFactory / governanceMultiSig / crossFedTrust),attach this.*startWebShell({...}) 都传过去
Wire 形状一致性 同 IPC 层 sign 仍走 base64 序列化 keys(renderer 不传 Buffer);providerSpec 仍是 {kind, ...opts} 形态;error envelope {success:false, error} 跟 mtc.audit-status / sync.status / notification.* 等已有 topic 同 shape

测试矩阵 (B4-webshell 新增 19, 累计 1106 / 1106 全绿 across 33 文件)

文件 测试
Unit web-shell/__tests__/community-mtc-handlers.test.js 19 — 全 13 topic 注册检查 + envelope.get 4 (local hit / 远端 fallback peer-pull / 缺 batcher / 缺 args) + archive._ 5 (push / restore / list / 缺 factory / 缺 spec) + governance-mofn._ 5 (create / sign 含 base64→Buffer revive / sign 缺 args / status+finalize+list / 缺 manager) + cross-fed-trust.* 4 (establish 切 localCommunityId / revoke list get-trusted-dids / 缺 manager) + 同步 throw 包成 envelope
全 33 文件回归 1106 / 1106

✅ B4 全 deferred + web-shell parity 完成

阶段 commit 测试
Phase A + Phase B v1 50b8ddb05 +58
B4 (DID + auto-bridge) 3741a8e7e +47
B4-merkle v1 435ba7dde +31
B4-cross v1 8b03e3b54 +34
B4-cross-trust v1 c50353ca8 +8
B4-ui v1 173efc52e +10
B4-archive v1 527e36eba +26
B4-mofn v1 b1b016dd8 +24
B4-crossfed v1 ad12fc515 +16
B4-webshell v1 本次 +19
小计 10 commits +273 (149 → 1106)

2026-05-07 增量更新 XII(B4-crossfed v1 — 跨联邦信任锚

deferred 第五项也是 B4 最后一项。B4-cross-trust v1 把 inbound landmark 校验锁在"必须是本社区 member"。本次扩展:用户可以记录"我也信任另一个 federation 的 trust anchors",他们发的 landmark 也能过校验,不必加入对方 community。

主题 文件 说明
CrossFedTrust src/main/mtc/cross-fed-trust.js (+185) establishTrust(localCommunityId, {remoteCommunityId, remoteMembers, expiresAt?, note?}) / revokeTrust(localCommunityId, remoteCommunityId) / listTrusted(localCommunityId) / getTrustedDIDs(localCommunityId, {now?}) 返回未过期记录的 union DID 集. 文件存 <userData>/cross-fed-trust/<localCommunityId>/<remoteCommunityId>.json. expiresAt 支持 ISO timestamp,过期记录自动从 getTrustedDIDs 排除(clock 可注入用于测试)
distribution trust filter 扩展 social-initializer.js (+25 / -10) getCommunityMembers adapter 现在 union: communityManager 本地 members ∪ crossFedTrust 跨联邦信任 DIDs. 任一来源 throw 都 swallow 不阻塞
4 个 IPC community-ipc.js (+45) cross-fed-trust:establish / revoke / list / get-trusted-dids, renderer 一次配置后所有跨联邦 landmark 自动过 trust filter
initializer social-initializer.js (+22) crossFedTrust initializer required:false

测试矩阵 (B4-crossfed 新增 16, 累计 1087 / 1087 全绿 across 32 文件)

文件 测试
Unit mtc/__tests__/cross-fed-trust.test.js 16 — constructor / establishTrust 6 case (writes record / unsafe ids / empty/dup/malformed members / idempotent update) / revokeTrust 2 / listTrusted 2 / getTrustedDIDs 5 (union / 排除过期 / 包含 future expiresAt / clock 注入 / 空 community)
全 32 文件回归 1087 / 1087

B4 全 deferred 完成 ✅

sub-phase commit 测试新增
Inbound landmark trust filtering c50353ca8 (VIII) +8
UI envelope viewer 173efc52e (IX) +10
Periodic envelope archival 527e36eba (X) +26
M-of-N for governance-critical events b1b016dd8 (XI) +24
跨联邦信任锚 本次 (XII) +16

唯一遗留:用户 follow-up "需要在 web-shell 版本可以看到这些功能"——B4 全套 IPC 都注册在 ipcMain,web-shell(默认壳,Phase 1.6)需要对应的 WS topic handlers 才能让 web-panel UI 用上。下一节 commit 处理。

2026-05-07 增量更新 XI(B4-mofn v1 — governance M-of-N 多签

deferred 第四项。Phase 54 cc governance 是单 DID 投票,没多签 / threshold finalize 概念。本次接 core-mtc 的 assembleBatchFederated:proposal 创建 → member 逐个 add signature → 收齐 M 个就 finalize → 写 multi-sig landmark 含 N 个 trust_anchors。

主题 文件 说明
GovernanceMultiSig src/main/mtc/governance-multisig.js (+440) createProposal({communityId, proposalId, payload, members[], threshold}) / addSignature(communityId, proposalId, signerKeys) / getStatus / finalize / listProposals. 文件存 <userData>/governance-mofn/<communityId>/<proposalId>/{proposal.json, signatures/<did>.json, landmark.json}. anti-impersonation: addSignature 校验 pubkey → sha256 → DID 必须等于 claimed did. idempotent: 同 DID 重复 add 是 no-op;finalize 二次返回相同 treeHeadId. 本地 federated assembler: _assembleBatchFederatedLocal 用 core-mtc primitives + tweetnacl signer,绕开 @noble/curves hoisting trap (与 channel-event-batch 同策略)
5 个 IPC community-ipc.js (+85) governance-mofn:create / sign / status / finalize / list. sign 接受 base64 {did, secretKey, publicKey} 串行化形态 (renderer 不直接传 Buffer)
initializer social-initializer.js (+22) governanceMultiSig initializer required:false,failure 不致命

v1 信任 / 范围限制

  • 单机 sig collection — caller (renderer) 直接传 member 的 secret key,不通过网络。v2 是把 sig 收集走 federation gossipsub,coordinator 收 partial sigs + 其它 member 离线签发 partial sigs 寄回(典型 Frost/MuSig 模型)
  • "more than threshold contributions" → 用前 M 个 (deterministic by file order),剩余忽略
  • 没 expiry / 撤销 / 重新打开机制 — 一旦 finalize 不可逆

测试矩阵 (B4-mofn 新增 24, 累计 1071 / 1071 全绿 across 31 文件)

文件 测试
Unit mtc/__tests__/governance-multisig.test.js 24 — constructor / createProposal 含 threshold/empty/dup/malformed-DID/unsafe-id/exists 7 case + addSignature member-only/idempotent/non-member/DID-pubkey-mismatch/wrong-key-shape/threshold 6 case + getStatus 2 + finalize insufficient/3-of-5 happy/超 threshold deterministic/idempotent/post-finalize 拒签 5 + listProposals 2
全 31 文件回归 1071 / 1071

Deferred 剩余 sub-phases 进度

  • Inbound landmark trust filtering — VIII 完成
  • UI envelope viewer — IX 完成
  • Periodic envelope archival — X 完成
  • M-of-N for governance-critical events — 本次完成
  • 🚧 跨联邦信任锚 (MTC v0.11 cross-fed-trust 集成)
  • 🚧 web-shell parity for B4 features (用户 follow-up 反馈:默认壳是 web-shell,B4 系列 IPC 没 WS topic 暴露)

2026-05-07 增量更新 X(B4-archive v1 — envelope 外部归档(filesystem + WebDAV)

deferred 第三项。B4-merkle / B4-cross 在本机盘维护 envelope 证据链;设备 wipe / 卸载 / 磁盘损坏 = 全丢。本次加入打包 + 推送外部 provider 的能力,让 audit 史可以撑过本机生命周期。

主题 文件 说明
ChannelEnvelopeArchiver src/main/mtc/channel-envelope-archiver.js (+360) pack(communityId, {sinceBatchId, includeRemote}) 用 adm-zip 打 batches//_ + remote-landmarks/_ + remote-envelopes/* 入 buffer + MANIFEST.json. push(provider, communityId) 调 provider.putFile 上传. restore(provider, communityId, archiveName) 反向:解 zip 落回本地(idempotent — 已存在文件 skip 不覆盖). list(provider, communityId) 按 ARCHIVE_NAME_PREFIX 过滤
filesystemProvider 同上 (+50) mirror 到本地目录树(适配 Syncthing-class 外部同步、USB 备份、CI artifact). path-traversal 全程防御
webdavProvider 同上 (+50) 包装 src/main/sync/webdav-client.js (Phase 3c.5 已落). put/get/list 适配 webdav-client 的 {ok, etag} 返回形状
3 个 IPC community-ipc.js (+85) channel-archive:push / channel-archive:restore / channel-archive:list. 接 renderer-supplied {kind, ...opts} provider spec → archiveProviderFactory 实例化 → archiver 操作. 凭证(webdav password)每次调用从 spec 拿,不在 main 缓存
archiveProviderFactory + initializer social-initializer.js (+78) channelEnvelopeArchiver initializer + archiveProviderFactory 工厂注册. provider 工厂支持 {kind:'filesystem', rootDir}{kind:'webdav', baseUrl, username, password, remoteRoot} 两种

Archive 命名约定channel-mtc-<communityId>-<isoTimestamp>-<sinceBatchId>-to-<latestBatchId>.zip,存到 <remoteRoot>/<communityId>/. 增量推送(指定 sinceBatchId)只 ship 新 batch,节省带宽。

测试矩阵 (B4-archive 新增 26, 累计 1047 / 1047 全绿 across 30 文件)

文件 测试
Unit (新) mtc/__tests__/channel-envelope-archiver.test.js 26 — constructor 必填 / pack 全/无 remote / sinceBatchId 增量 / unsafe communityId / 空仓 throw / 没新批 throw + filesystemProvider 必填+round-trip+path-traversal+missing+empty-dir + push 完整返回 + restore round-trip 真盘+同样数据 batcher.findEnvelope 命中 + idempotent 二次 restore=0 + 增量 sinceBatchId / list 过滤 + 排序 / 失败 provider throw / webdavProvider 必填+round-trip+failure+getFile 两形状+listFiles 映射+缺 listFiles 兜底+path-traversal 文档化 (adm-zip API 限制说明)
全 30 文件回归 1047 / 1047

测试 gotcha:archiver 测试 // @vitest-environment node 钉到 node 环境——adm-zip 的 Buffer round-trip (toBuffer → new AdmZip(buf)) 在 jsdom 下 entries 全空(Buffer / typed-array realm mismatch),跟 libp2p e2e 测试遇到的问题同根。extractIssuerDID-style 之外又一例 jsdom 跟 main-process 库不兼容。

Deferred 剩余 sub-phases 进度

  • Inbound landmark trust filtering — VIII 完成
  • UI envelope viewer — IX 完成
  • Periodic envelope archival to OSS / WebDAV / IPFS — 本次完成(FS + WebDAV,OSS/IPFS provider 留 follow-up)
  • 🚧 M-of-N for governance-critical events
  • 🚧 跨联邦信任锚 (MTC v0.11 cross-fed-trust 集成)

2026-05-07 增量更新 IX(B4-ui v1 — Merkle envelope 验证按钮 + viewer 弹窗

deferred 第二项:B4-merkle / B4-cross 后端齐了但前端没出口。本次接通 renderer:每条带签名的 channel 消息旁加一个 "🔐 验证" 按钮,弹窗展示来源(local 本机批 / remote peer-pull)、tree-head / batch / leaf 索引、签名验证就位提示、可展开 raw envelope + landmark JSON 一键复制(用户可拿去 cc mtc verify 离线复核)。

主题 文件 说明
useMessageEnvelope composable src/renderer/composables/useMessageEnvelope.ts (+155) 5 phase reactive state(idle / loading / found / not-found / error)+ fetch(communityId, messageId) + reset(). 走通用 electronAPI.invoke('channel:get-message-envelope', ...) (preload 不需要改). preload 缺失时回 error phase 友好提示
MessageEnvelopeViewer.vue src/renderer/shell/community/MessageEnvelopeViewer.vue (+170) Ant Design Modal 720px 宽,带 message preview + 5 phase UI(Spin / Alert / Descriptions)+ 来源 Tag(local 绿 / remote 蓝)+ tree-head / batch / namespace / leafIndex + 签名 ✅ + landmark 缺失时的 orange Tag + 折叠展示 raw envelope/landmark JSON + 复制按钮(用 navigator.clipboard.writeText)。仅在消息有 signature && sender_pubkey 时显示按钮
CommunityDetailsDrawer 集成 src/renderer/shell/community/CommunityDetailsDrawer.vue (+30) 频道消息每条加 "🔐 验证" 按钮(仅签了名的)+ Tooltip 提示;Modal v-model:open 双向绑定;store 取 community.id 作为 viewer 的 communityId prop

测试矩阵 (B4-ui 新增 10, 累计 1021 / 1021 全绿 across 29 文件)

文件 测试
Unit composables/__tests__/useMessageEnvelope.test.ts 10 — 5 phase 完整覆盖(idle 起手 / 空 args 拒绝 / preload 缺失 error / found normalized result / origin 默认值 / not-found 带 reason / IPC throw → error / null IPC 响应当 not-found / loading 中间态可观察 / reset())
全 29 文件回归 1021 / 1021

已知 coverage 缺口 (deliberate)

  • 没单测 MessageEnvelopeViewer.vue 组件本身。理由:组件主要是 Ant Design Modal/Spin/Tag/Descriptions 编排,没业务逻辑分支。Mount + Teleport modal 在 vitest jsdom 下脆弱;composable + IPC wiring 测试已经覆盖了数据流。集成测试可以等 e2e Playwright 那批一起加

Deferred 剩余 sub-phases 进度

  • Inbound landmark trust filtering — VIII 完成
  • UI envelope viewer — 本次完成
  • 🚧 Periodic envelope archival to OSS / WebDAV / IPFS
  • 🚧 M-of-N for governance-critical events
  • 🚧 跨联邦信任锚 (MTC v0.11 cross-fed-trust 集成)

2026-05-07 增量更新 VIII(B4-cross-trust v1 — landmark inbound trust filter

B4-cross v1 收口的 deferred 列表头一项:B4-cross v1 信任模型是 NONE,缓存所有 inbound landmark。本次加入按 community 成员校验:landmark 的 issuer DID 必须在当前社区 member list 才进 cache,否则 reject + emit landmark:rejected。回调缺省时退回 v1 trust-none 行为 + 启动期 warn。

主题 文件 说明
distribution 接受 trust 回调 src/main/mtc/channel-envelope-distribution.js (+105) 构造函数新 opts.getCommunityMembers (communityId) => Promise<DID[]>. _handleIncomingLandmark 改 async:(1) extract issuer DID via 新静态方法 extractIssuerDID(landmark) (默认 strip did-bound: 前缀,兼容裸 DID);(2) 调 getCommunityMembers 拿 list;(3) issuer 不在 → emit('landmark:rejected', {reason}) + 不缓存。无回调时 init 期 warn 一次"trust filter OFF"
social-initializer 注入 src/main/bootstrap/social-initializer.js (+25) distribution initializer 加 communityManager 依赖;提供 getCommunityMembers 实现:communityManager.getMembers(id, {limit:10000}).then(rows => rows.map(r => r.member_did)). 失败 swallow → 空 list

rejected 事件 reason 枚举

  • "issuer DID not extractable" — landmark.snapshots[0].signature 缺 issuer 字段
  • "membership lookup failed: <err>" — getCommunityMembers throw(DB unavailable 等)
  • "issuer not a community member" — DID 在但不在 member list

为什么是 strip did-bound: 前缀:channel-event-batch.js _assembleBatchLocal 的 issuer 格式是 did-bound:<did>(参考 audit-mtc 模式);其它发布者(CLI / 联邦工具)可能直接用裸 DID,所以 extractIssuerDID 容忍两种。

测试矩阵 (B4-cross-trust 新增 8, 累计 1011 / 1011 全绿 across 28 文件)

测试
单元 +8 → 29 (channel-envelope-distribution.test.js) trust filter ON: cache when member / reject when not member (含 reject event payload) / reject when issuer 不可提取 / reject when getCommunityMembers throw / trust filter OFF: 保留 v1 行为 / extractIssuerDID 三种 case (with prefix / no prefix / malformed)
全 28 文件回归 1011 / 1011

Deferred 剩余 sub-phases 进度

  • Inbound landmark trust filtering — 本次完成
  • 🚧 UI envelope viewer
  • 🚧 Periodic envelope archival to OSS / WebDAV / IPFS
  • 🚧 M-of-N for governance-critical events
  • 🚧 跨联邦信任锚 (MTC v0.11 cross-fed-trust 集成)

2026-05-07 增量更新 VII(B4-cross v1 — envelope 跨机分发

B4-merkle v1 落了 envelope,但只对发件人有用(对端没你的 batch dir 验不了)。本次补完最关键缺口:landmark 走 federation gossipsub 自动广播 + envelope 按需 peer-pull,整个 audit-grade 价值兑现——任何第三方都能 verify 任何已知 messageId 的 inclusion proof。

主题 文件 说明
Batcher 远端缓存 + 回调 API src/main/mtc/channel-event-batch.js (+196 / -27) 新方法 onBatchClosed(handler) (closeBatch 完触发 + 多 handler 隔离)、storeRemoteLandmark / findRemoteLandmark (按 treeHeadId 索引,sha256: 冒号 → 文件系统安全 _)、storeRemoteEnvelope (messageId 索引)。findEnvelope 返回新增 origin: "local" | "remote" 字段; loadEnvelopeAndLandmark 自动按 origin 选 landmark 路径 (local 在 batch dir 旁,remote 在 remote-landmarks/)
ChannelEnvelopeDistribution src/main/mtc/channel-envelope-distribution.js (+330) 封装 mtcFedMgr (gossipsub 双轨:另起 cc.community.<id>.envelopes-track topic 跟消息流分开) + p2pManager (typed mtc:envelope-request / mtc:envelope-response)。API: subscribeCommunity (拉远端 landmark) / publishLandmark 自动 (hooks batcher.onBatchClosed) / requestEnvelope(peerId, communityId, messageId) Promise + 8s 默认 timeout. 内部 in-flight 跟踪 + close 时 reject 全部待响应
typed message dispatch src/main/p2p/p2p-manager.js dispatchTypedMessage (+24) mtc:envelope-request (→ 'mtc:envelope-request' event w/ requestId/communityId/messageId/fromPeerId) + mtc:envelope-response (→ event w/ found/envelope/batchId). distribution 模块直接 listen 这俩 event
social-initializer 注册 src/main/bootstrap/social-initializer.js (+38) channelEnvelopeDistribution initializer (depends mtcFedMgr + p2pManager + channelEventBatcher); failure 容错
community-ipc 集成 src/main/social/community-ipc.js (+62) community:join 也调 channelEnvelopeDistribution.subscribeCommunity 拉 landmark; channel:get-message-envelope 加 fallback chain — 本地缺时 enumerate 已连 peer 顺序 requestEnvelope 至首发命中,requestEnvelope 内部 storeRemoteEnvelope 缓存; phase-3-4-social 透传 channelEnvelopeDistribution + p2pManager

信任模型 (v1):none — 缓存所有收到的 landmark/envelope,不做 trust_anchors 校验。理由:(a) Noise transport 防 MITM,(b) 用户最终 verify envelope 的 inclusion proof 时用 landmark 的 tree-head signature 作真伪验证(cc mtc verify 等价物),所以攻击者注入 fake landmark 也通不过最后一道关。v2 可以加 inbound landmark 按 federation membership 过滤。

测试矩阵 (B4-cross 新增 34, 累计 1003 / 1003 全绿 across 28 文件)

文件 测试
Unit (扩展) mtc/__tests__/channel-event-batch.test.js (+11 →34) 11 个 cross-machine 用例:onBatchClosed 完整 / handler 异常隔离 / storeRemoteLandmark+findRemoteLandmark / : 路径转义 / storeRemoteEnvelope+findEnvelope origin:remote / unsafe messageId reject / loadEnvelopeAndLandmark remote bundle / orphan envelope 无 landmark 兜底 / origin 标签保留
Unit (新) mtc/__tests__/channel-envelope-distribution.test.js 21 — constructor 必填检查 / lifecycle 幂等 / close tear-down 监听器 / 自动 publish on closeBatch (非阻塞) / landmark:published event / subscribeCommunity 用 <id>.envelopes-track 同步 topic / 入站 landmark cache / 非 landmark payload 忽略 / unsubscribeCommunity 幂等 / requestEnvelope 全流程 (req → resp 缓存 → resolve) / found:false / 8s timeout → null / 不识别 requestId 静默忽略 / close reject 在飞 / 入站 envelope-request 找本地 envelope 响应 / 找不到 → found:false / malformed 请求 (缺 requestId / 缺 fromPeerId) 忽略
Unit (扩展) p2p/__tests__/p2p-manager-dispatch.test.js (+2 →22) 2 个新 dispatch 用例:mtc:envelope-request / mtc:envelope-response 字段透传
全 28 文件回归 1003 / 1003

端到端价值兑现

  1. Alice 在 community-X 频道发消息 → 本地 channelManager INSERT + B4a 签名 + Phase A gossip + Phase B MTC + B4-merkle batch enqueue
  2. 100 条消息后或 1h 触发 closeBatch → assembleBatch + 写 batches/000001/ → onBatchClosed callback → ChannelEnvelopeDistribution publish landmark 到 cc.community.community-X.envelopes-track topic
  3. Bob 已加 community-X (community:join 自动 subscribeCommunity 那个 topic) → 收到 landmark → batcher.storeRemoteLandmark 落盘 <userData>/channel-mtc/community-X/remote-landmarks/sha256_xxx.json
  4. Bob 想验证 Alice 发的某条 message: renderer 调 channel:get-message-envelope IPC → 本地没 → enumerate connected peers (Phase A gossip 的) → requestEnvelope(Alice, …) → Alice 收到 mtc:envelope-request typed → 在自己 batches/ 找到 → 回 mtc:envelope-response → Bob 缓存到 remote-envelopes/messageId.json → 返回完整 envelope + 缓存的 landmark 给 renderer
  5. Renderer (或 cc mtc verify) 验证 Merkle inclusion_proof 对照 landmark 的 tree-head signature → ✅ 第三方密码学证据成立

Deferred (B4-cross 后续 sub-phases)

  • Inbound landmark trust filtering (按 federation membership 校验)
  • Periodic envelope archival to OSS / WebDAV / IPFS (survive device wipe)
  • UI envelope viewer button ("show this message's cryptographic proof")
  • 大社区 batch envelope eager push (现在按需 pull,万人社区可能 latency 不够)

2026-05-07 增量更新 VI(B4-merkle v1 — channel 事件 Merkle batch envelope finality

P2P 社交从"消息可信 + 自动联网"再上一层:本机发出的每条 channel 消息进离线可验的 Merkle 批 envelope。配 B4a 的 Ed25519 单条签名,组合得"我可以拿出第三方都能验的证据,证明我在 X 时间向 Y 频道发了 Z 内容"。

主题 文件 说明
ChannelEventBatcher src/main/mtc/channel-event-batch.js (+390) 累积 staging/<message-id>.json → 按 threshold(默认 100) 或 timer(默认 1h) 触发 closeBatch → 写 batches/&lt;batch-id&gt;/{manifest,landmark,envelope-*}.json. 文件布局参考 audit-mtc 的 ~/.chainlesschain/audit-mtc/. atomic rename + 失败回滚. 路径 <userData>/channel-mtc/<communityId>/。tweetnacl-based MTC signer (绕开 @noble/[email protected]/ed25519 subpath 删除 + workspace hoisting trap)。_assembleBatchLocal 用 core-mtc 的 /hash /jcs /merkle /constants subpath primitives, 不 require core-mtc index (避开 ed25519 module 加载失败)
social-initializer 注册 src/main/bootstrap/social-initializer.js (+45) channelEventBatcher initializer (depends didManager),autoTimer:true 启动 1h closer。failure 不致命
community-ipc 双发后 enqueue src/main/social/community-ipc.js (+28) channel:send-message IPC 在 channelManager.sendMessage + gossip + MTC 三件之后, 把已签的 message enqueue 到 batcher (B4a 的 sender_pubkey + signature 作为 leaf 锚定字段)。失败 swallow 不阻塞 IPC。新 channel:get-message-envelope IPC 接收 (communityId, messageId) 返回 {found, envelope, landmark, treeHeadId, batchId, leafIndex}
Wire compat 输出 landmark + envelope 跟 core-mtc 自家 verifier wire-compatible,对端可以用 cc mtc verify 验 inclusion proof 无需我们的 desktop binaries

Sub-phase 范围 (v1 vs B4-merkle 后续)

  • v1:本机批 + 本机查 envelope。Wire-compatible 但自动 federation broadcast envelope(远端没你的 batch dir 就查不到)
  • B4-merkle 后续:cross-machine envelope 分发(federation 通道 publish landmark + on-demand pull envelopes);cron-based 永久存档 to OSS / WebDAV / IPFS;UI envelope 展示器("显示这条消息的密码学证据")

测试矩阵 (B4-merkle 新增 31, 累计 969 / 969 全绿 across 27 文件)

文件 测试
Unit mtc/__tests__/channel-event-batch.test.js 23 — 真 fs (tmp dir) + 真 core-mtc primitives × constructor / enqueueEvent / 文件系统安全防越界 / threshold 自动 close / closeBatch 完整 lifecycle / sequential batch ids / 无身份 → throw / findEnvelope 三种状态 / loadEnvelopeAndLandmark / closeAllPending
Integration social/__tests__/community-ipc-merkle-enqueue.integration.test.js 8 — IPC channel:send-message 走 enqueue / unsigned 跳过 / batcher throw 不阻塞 / null batcher fallback + IPC channel:get-message-envelope delegate / null batcher / 缺参 / batcher throw
全 27 文件回归 (p2p + social + mtc + did + bootstrap) 969 / 969

关键 bug / 实战记录

  • @noble/curves 跨版本 subpath 删除:core-mtc deps ^1.9.7 (有 ./ed25519 subpath),desktop-app-vue standalone node_modules 装的是 @2.2.0 (subpath 删了)。require("@chainlesschain/core-mtc") index 文件 top-level 就 require ed25519 signer,整个 module 加载失败。解决:不 require core-mtc index,只 require 用得到的 subpath primitives (/hash /jcs /merkle /constants 都不依赖 @noble/curves),自家 tweetnacl 实现 MTC signer 接口,本地 _assembleBatchLocal 全程绕开 @noble/curves
  • 这是 memory desktop_release_npm_workspace_hoisting.md 警告过的 hoisting trap 的另一种 manifestation——这次是不同 npm 版本被 standalone node_modules 锁住

.exe 后台 rebuild 完成 (exit 0)out/build/ChainlessChain-Setup-5.0.3-alpha.40.exe 426 MB,含 Phase A + Phase B v1 + B4 + B4-merkle 全套。原先 v5.0.3.40 (Phase A only) 装机用户重启走 auto-updater 应该不会触发 (semver 一样);要测必须手动 install。

2026-05-07 增量更新 V(B4 — DID 签名 + auto peer bridging

P2P 社交链路从"能跑"升级为"防伪 + 自动联网"。两件事一起做,共享 wire 协议改动:

主题 文件 说明
B4a — DID 签名 channel 消息 src/main/did/did-signer.js (+205) 纯 crypto helper,不耦合 DIDManager。signPayloadWithIdentity / verifyPayloadAgainstDid 走 minimal deterministic JSON(避免 canonicalize 这个跨 workspace hoisting trap),签 {id,channel_id,sender_did,content,message_type,reply_to,created_at} 这 7 个不可变字段(is_pinned/reactions/updated_at 故意排除——会变)
公钥分发策略 embed in message:消息带 sender_pubkey (base64 32B Ed25519)。无 DID resolver 依赖;离线也能验。开销 ~44B / 消息(人类对话级流量可忽略)
三重验证(receiver) channel-manager.handleMessageReceived (1) sha256(sender_pubkey).slice(0,20).toString('hex') 必须匹配 sender_did 后缀(防 pubkey/DID 错配);(2) Ed25519 detached verify;(3) 签名长度/格式合法
三态向后兼容 同上 (a) 都有 sig+pubkey → strict verify,验失败 emit channel:message-rejected 事件 + 丢;(b) 都缺 → log warn + 接受(migration window,老客户端兼容);(c) 只一个 → 拒,malformed
Schema migration channel-manager.initializeTables CREATE 加新列 + PRAGMA table_info 检测 + 条件 ALTER(避开项目 fragmented numbered-SQL migration runner 的雷)
auto peer bridging src/main/p2p/p2p-manager.js dispatchTypedMessage (+15) + src/main/bootstrap/social-initializer.js wireMtcAutoBridge (+95 export) 新 typed message mtc:advertise/chainlesschain/message/1.0.0,dispatch 派发到 mtc:peer-advertise 事件。social-initializer 注册 mtcAutoBridge initializer:on peer:connected 把自己 MTC 名片送过去;on mtc:peer-advertise 顺序 dial 对端 multiaddrs。双向,libp2p 自带 dedup
容错 同上 任一端 mtcFedMgr.isInitialized() === false 时跳过 → Phase A 直连 gossip 仍工作。失败的 connectPeer swallow(NAT/IPv6 不可达/dup 等正常情况)

测试矩阵 (B4 新增 47, 总 938 / 938 全绿)

文件 测试
Unit did/__tests__/did-signer.test.js 22 — canonicalize 7 + computeDID 3 + sign/verify 5 + end-to-end 7
Unit p2p/__tests__/p2p-manager-dispatch.test.js (+2) 20 (was 18) — 新增 mtc:advertise 派发 + 缺 multiaddrs 兜底
Integration social/__tests__/channel-manager-signing.integration.test.js 8 — 真 Ed25519 keypair × 真 ChannelManager × mock SQL,验证签 + 验签 + 三种攻击拒绝(impersonation/tamper/malformed)+ legacy 接受 + idempotency + 无 keys 兜底
Integration bootstrap/__tests__/mtc-auto-bridge.integration.test.js 15 — wireMtcAutoBridge 出/入站 × 各种容错路径 + 双向 mesh seed
全 25 文件回归 (p2p + social + mtc + did + bootstrap) 938 / 938

关键 bug 实战记录

  • src/main/did/__tests__/foo.test.jsvi.mock("../../../utils/logger.js", ...)错路径(解析到 src/utils/logger.js,落在 src/main/ 之外);vitest 4 strict mock loader 不报错,但会跨文件污染 fork 的 mock registry:20+ 跟 logger 八竿子打不着的测试在 batch 跑时整片 wireMtcAutoBridge is not a function,单跑全绿。修:../../utils/logger.js(2 层不是 3 层)。配 memory vitest_testing.md "vi.mock path correctness" 收录
  • canonicalize npm 包是 core-mtc 的 transitive dep,desktop-app-vue(已不是 workspace)standalone node_modules 不可见;不引入新 dep,自己写 15 LoC 的 minimal deterministic JSON(足够 flat 不可变 subset 用,rejects nested 防误用)

deferred (B4 后续 sub-phases)

  • Merkle batch envelope finality(assembleBatch 落盘 + verify 路径)
  • M-of-N for governance-critical events(提案/投票走 assembleBatchFederated
  • 跨联邦信任锚(MTC v0.11 cross-fed-trust desktop 集成)

2026-05-07 增量更新 IV(Phase B v1 — MTC 联邦双轨同步落地

在 Phase A 直连 gossip 之上 双轨 加 MTC 联邦 gossipsub 通道。两条路并存,本地 INSERT OR IGNORE 去重。

新增 文件 说明
MtcFederationManager src/main/mtc/mtc-federation-manager.js (+233) 封装 @chainlesschain/core-mtc/transports/libp2p 的 Libp2pTransport (gossipsub mode)。Topic: cc.community.<id>.events。API: subscribeCommunity / publishCommunityEvent / unsubscribeCommunity / connectPeer。failure 容错降级到 Phase A
social-initializer 注册 src/main/bootstrap/social-initializer.js (+34) mtcFederationManager initializer,required:false(libp2p 失败时社区功能 fallback Phase A 直连仍工作)
community-ipc 双发 + DI 重构 src/main/social/community-ipc.js (+62 / −10) community:join / community:leave / channel:send-message 三个 IPC 同时走 gossip + MTC。register 接受 ipcMain 作为 DI dep(match social-ipc 的模式,绕开 vitest electron alias 名字导出限制)
phase-3-4-social 注入 src/main/ipc/phases/phase-3-4-social.js (+2) mtcFederationManager 透传到 registerCommunityIPC

Sub-phase 范围(v1 vs deferred)

  • v1:transport 层(subscribe/publish/dispatch + 双轨幂等)
  • B4 deferred:DID 签名 / Merkle 批 envelope finality / M-of-N 多签 / 跨联邦信任锚 / 自动 peer 桥接

测试

文件 测试
Unit src/main/mtc/__tests__/mtc-federation-manager.test.js 17 — topicForCommunity / lifecycle / publish / subscribe / unsubscribe / connectPeer 全覆盖 + mock transport
Integration src/main/social/__tests__/community-ipc-dual-track.integration.test.js 12 — community:join 双订阅 / community:leave 双退订 / channel:send-message 双发 / 任一 transport 失败不阻塞另一条 / 单管道 fallback (gossip-only / MTC-only)
E2E src/main/mtc/__tests__/mtc-federation-roundtrip.test.js 4 — 双真 libp2p gossipsub-mode 节点 + 调用路径不抛 + 条件 delivery 断言(mesh 形成则 verify,未形成不阻断;与 core-mtc 自家 federation-discovery 测试同策略) + dual-track 幂等性(同条消息双路径只插一行)
全 22 文件回归 (p2p + social + mtc) 891 / 891

架构注意

  • MtcFederationManager 当前是 独立 libp2p 节点(与 P2PManager 不复用)—— 复用要侵入 P2PManager 的 createLibp2p config 加 pubsub: gossipsub() service + dynamic import gossipsub,留作后续 follow-up 优化
  • v1 没自动 peer 发现:connectPeer(multiaddr) 由调用方手动 bridge;生产里跨机生效需要先把对端 multiaddr 喂进来(Phase A 直连仍是默认即时通道)
  • 2-node gossipsub mesh 形成在测试环境天然 flaky(per core-mtc 历史经验),所以 e2e delivery 断言是 conditional 的;生产 federations 3+ peer + floodPublish=true 可靠
  • 同一条 channel_message 通过 Phase A direct gossip + Phase B MTC topic 双轨送到 B 时,channelManager.handleMessageReceived 的 INSERT OR IGNORE on id 保证只插一行

2026-05-07 增量更新 III(P2P 去中心化社交跨机同步真正打通 — Phase A: 7 个 bug + 25 个测试)

社区/频道这条所谓"去中心化社交"路径,在此之前其实只在单机上能跑 —— 双人验证里 A 发出去的消息永远到不了 B 的本地 DB。Phase A 系统性修了 7 个独立 bug,把发送/接收两端在 wire 上接通:

# 位置 根因 修复
1 p2p-manager.js:sendMessage stream.write(data) 是 libp2p 0.x/1.x 老 API;3.x 是 stream.send(bytes) stream.send(payload) + drain backpressure
2 p2p-manager.js:sendMessage 直传 JS 对象给 stream.write(),libp2p 流只接受 Uint8Array 新增 encodeWireMessage():Buffer/Uint8Array 透传,object/string → JSON-line UTF-8
3 p2p-manager.js:registerMessageHandler for await of stream.source 是 0.x/1.x it-pipe 语义,3.x 下 .source 是 undefined for await of stream(3.x MessageStream 直接是 AsyncIterable)
4 p2p-manager.js:registerMessageHandler handler 签名 ({stream, connection}) => 是旧版形状 (stream, connection) =>
5 p2p-manager.js:registerMessageHandler 收到的 bytes 只 emit message:received,不按 type 派发 → gossip-protocol 监听的 gossip:message 事件永远不发 新增 decodeWireMessage + dispatchTypedMessage,按 type 路由到 gossip:message / gossip:subscribe / gossip:unsubscribe / message:call-* / message:typed,同时保留 message:received 兜底
6 p2p-manager.js:initialize registerMessageHandler() 在 init 流程里从未被调过,等于 /chainlesschain/message/1.0.0 protocol 根本没注册 initialize()registerEncryptedMessageHandlers() 之前调上
7 social-initializer.js (新增 gossipReceiver) gossipProtocol.emit('message:received', ...) 没人订阅 → 远端消息到 gossip 层就死循环,永远不进 channel_messages 新增 gossipReceiver initializer,订阅事件并调已存在的 channelManager.handleMessageReceived()(INSERT OR IGNORE 去重)

测试金字塔

文件 测试
Unit (helpers) src/main/p2p/__tests__/p2p-manager-dispatch.test.js 18 — encode/decode/dispatch 三组 helper × Buffer/Uint8Array/string/object/null 五种 payload × 6 类 type
Integration (wiring) src/main/social/__tests__/gossip-channel-receiver.integration.test.js 4 — 真 GossipProtocol + 真 ChannelManager + mock libp2p,验证 channel_message 写入 / 重复幂等 / 非 channel_message 忽略 / 未订阅社区忽略
E2E (real wire) src/main/p2p/__tests__/p2p-gossip-roundtrip.test.js 3 — 双真 libp2p 节点(TCP + noise + yamux + identify),完整跑通 mgrA.sendMessage + gossipA.broadcast 到对端 emit 事件
回归 community-manager.test.js (60) + channel-manager.test.js (64) + call-signaling.test.js + call-manager.test.js 124 + p2p folder 全绿
小计 5 文件 149 / 149

关键测试细节:e2e 测试用 // @vitest-environment node 强制走 node 环境(jsdom 默认环境会破坏 libp2p TCP 收包路径的 Uint8Array instanceof 检查)。

实战影响:Phase A 之后,两台真机装的 desktop 在同一局域网(mDNS 发现)或远程(DHT + bootstrap)连上后,加入同一社区 → A 在频道里发消息 → B 的 /community 视图里能看到。这是 v0.42.0 v5.0.3.x 期所有 community/channel 用户体验的隐性前置 bug

未触碰的相关 latent bug(pre-existing,等 follow-up):

  • 9 个其它 node.handle(...) 调用很可能也有同样的 stream.write/source 老 API(yjs-collab-manager / model-parameter-sync / voice-video-manager / collab-sync)—— 不在 Phase A scope,等真出问题再扫
  • gossip-protocol 现在只 wire 了 channel_message 一类 payload;governance 提案 / moderation 上报这些不走 gossip,仍是单机操作

Phase B (规划中):MTC 联邦 gossipsub 做社区数据同步的"正式通道"——比 Phase A 的 direct gossip 多了 Merkle finality / 跨联邦信任锚 / M-of-N 多签等 audit 语义。两条路并存(双轨),Phase A 提供 best-effort 即时同步,Phase B 给可审计的最终一致性。

2026-05-07 增量更新 II(v5.0.3.40 — MTC 视图 in-process 提速 + CI 三发解锁

四个互不相关的 fix 一次性闭环:

类别 文件 根因 修复
MTC 视图 timeout 级联 packages/web-panel/src/views/Mtc.vue + desktop-app-vue/src/main/web-shell/handlers/mtc-status-handlers.js(新增) v5.0.3.39 切到 asar:truecc 子进程冷启动从 dev 的 ~2.5s 涨到打包后 6-10s,onMounted 三发并发 (loadStatus + loadBridgeStatus + loadBridgeSla) 必撞 8s/6s 上限 → "状态加载失败: Request timeout" + "加载桥 MTC 状态失败" toasts 新增 3 个 in-process WS topic(mtc.audit-status / mtc.bridge-status / mtc.bridge-sla)直查 audit-mtc / cross-chain-mtc lib(纯文件读,无 spawn,零 asar 开销),Mtc.vue 通过 useShellMode().isEmbedded 双路径分叉;保底 timeout 8000/6000 → 30000 ms。配 7 + 1 新单测
macOS unit fallback desktop-app-vue/scripts/build-win-with-deref.js isSymlinkrealpathSync 比较,但 macOS os.tmpdir() 路径含 /var → /private/var 的隐式 symlink,所有 tmp 子目录都被误判为 symlink → 7 测试 fail platform split:Win 仍用 realpath(junction 需要),POSIX 用 lstat.isSymbolicLink()
规则验证器误报 desktop-app-vue/scripts/rules-validator.js sync-external-store.test.js:32TestDbManager.exec(sql) 的 sql.js 测试 fixture passthrough,被当成 SQL_INJECTION 报红 getAllFiles 跳过 __tests__/ / __mocks__/ + .test.js/.spec.js/.d.ts
Win cold-start ETIMEDOUT packages/cli/__tests__/unit/{skill,agent-repl}.test.js node bin/chainlesschain.js … ESM module-graph cold-start 在繁忙 Windows 主机超 10/15s execSync timeout,5 测试 fail 全部 CLI subprocess execSync timeout 升到 60s(与项目 testTimeout 对齐);passes 仍 1.7-2.5s

测试矩阵

通过 文件 Duration
Desktop unit + stores 10482 / 10482 (689 skipped) 320 1022s
MTC handler in-process 新增 7 / 7 1 3.4s
web-panel mtc-parser 新增 14 / 14 1 1.1s
CLI unit 17392 / 17392 (7 skipped) 412 458s
CLI integration 821 / 821 56 198s
小计 28716 790 ~28 min

桌面运行时改动(web-shell 注册 3 个 in-process handler + SPA bundle 重打)。auto-updater 比对 5.0.3-alpha.40 > 5.0.3-alpha.39,所有 v5.0.3.39 桌面用户重启会真发现新版并自动获取 MTC 提速 + CI 修复。

2026-05-06 增量更新(Phase 3b/3c 多目标同步 — 5 个托盘 placeholder 接通 + SyncProvider 抽象 + WebDAV/Git/sync.* WS topics 双 shell parity)

托盘菜单 5 个 placeholder(NotificationCenter listener / 剪贴板导入 / 截图识别 / 同步立即 / 自动同步)从"功能即将推出" toast 升级为真实链路。同步从单 backend 升级为多 provider 抽象(Backend HTTP / Git / P2P / Mobile / WebDAV / OSS),V5/V6 + web-shell 两条壳都能用。

主题 提交 说明
Step 0 — NotificationCenter listener c990cda2a App.vue 派发的 cc:show-notifications window 事件原本无人接,加 onMounted/onBeforeUnmount listener 拨开 panelVisible drawer。托盘"未读通知"项从哑响变真打开通知中心。
Step 1 — 剪贴板导入 quick-action c2a2d8844 ClipboardImportDialog.vue:navigator.clipboard.readText → 标题/标签编辑 → electronAPI.database.addKnowledgeItem。剪贴板权限拒绝时 a-alert 降级允许手动粘贴。4 单测覆盖正常 / 失败 / 空内容拒保存。
Step 2 — 截图识别 quick-action 19fc2a50e 主进程 3 handler screenshot-ipc.js(capture / ocr / cleanup,tmpdir 沙箱拒非 cc-screenshot- 前缀)+ ScreenshotImportDialog.vue 截屏预览 + Tesseract OCR (eng+chi_sim) 文本编辑 + 重截 / 重跑 OCR。10 IPC + 4 组件单测。
Step 3 — SyncProvider 抽象 + V5/V6 SyncSettings f89fb0ea0 + 1e39e2b58 6 provider(backend / git / p2p 实接 + mobile / webdav / oss 占位)+ aggregate scheduler(per-provider enabled flag + autoSync interval localStorage 持久化)+ /settings/sync 页 + 托盘"同步设置…"菜单项跳转 + enhanced-tray-manager.js autoSync checkbox 默认 false 修正。20 单测。a-switch @changeCheckedType vue-tsc fix。
Phase 3c — WebDAV 桌面 + web-shell parity 1a9c51882 主进程 webdav-engine(drain tombstones + push 增量 + cursor 持久化)+ 凭证加密存储(sync-credentials.js)+ markdown 包导出 + 5 个 sync.webdav.* IPC + V5/V6 SyncWebDAV.vue 配置页。WebDAV provider 从 placeholder 升级到真实,对接 electronAPI.sync.webdav.run()
Phase 3c.5 — Git 仓库 web-shell parity 5216c7665 + e63016de9 3 个 git.config-* WS topic(get/set/clear)+ web-panel SyncSettings 加 Git 配置段(远程 URL / 用户名 / Token / 自动同步开关 + 凭证明文存储 warning)。Phase 1.6 web-shell 用户不必切回 V5/V6 也能配 Git。
Phase 3b 适配 web-shell — sync.* WS topics eb8697598 web-panel SyncSettings.vue 从 ws.execute('sync …') 切换到 ws.sendRaw({type:'sync.status'})根因:spawn cc CLI 子进程会在 Windows + WAL 下抢同一个 SQLite 文件 → "database disk image is malformed"。in-process WS handler 共用 main 已开的 db handle,零冲突。新增 5 个 handler(status / push / pull / conflicts / resolve)。
sync.status 抗 schema 冲突 32b78ce7d + 283708640 CLI v1 的 sync_state / sync_conflicts / sync_log 跟桌面 P2P sync 同名表撞了。CLI 表整体 RENAME 加 cli_ 前缀(首次启动一次性 ALTER);handler _safeCountQuery swallow "no such table" 返回 0。

测试矩阵

  • desktop unit + web-shell + system + screenshot:12914 / 12914 通过(802 skip — native binding 缺失环境跳过)
  • web-panel unit:1754 / 1754 通过
  • 新增:sync-status-handlers.test.js 16 测试(4 native-db skip)+ web-panel/sync-settings.test.js 4 测试(envelope 形状回归)
  • new-pages.test.js 路由计数 54 → 55(新加 /sync-settings

关键 bug 实战记录

  • ws.sendRaw envelope 是 {ok, result, error},handler 自身 {success, ...}result 里。最初漏算把 data?.totalResources 直接当 handler 返回值读,导致 4 个 statistic 全 0 + 误判 "未初始化"。
  • vitest 4 strict mock factories 必须列全 SUT 用到的 named exports。Proxy({}, get: () => stub) 满足不了 ESM named export 解析,要逐个 enumerate。
  • Electron 主进程 console.log 不到 stdout(被 logger pipe 吞)。诊断要用 logger.info

2026-05-02 增量更新(Web Panel 双语化 — vue-i18n + 18 个 view 翻译完成 + 共享 locales 包)

Web 管理面板从硬编码中文翻成中英双语,sidebar 跟着头部按钮一键切。@chainlesschain/locales 共享包是 SOT,desktop / 官网 / docs 都能复用。

主题 提交 说明
共享 locales 包 (M1) b66dd9fe7 新建 packages/locales/ workspace,零运行时重量,vite/vitest alias 接入。messages / SUPPORTED / FALLBACK 一处定义,desktop-app-vue 后续可直接 import 同一份。
提取 + 守门工具链 (M2) f6c163c79 npm run extract 跑 vue-i18n-extract(CI exit 1 on missing key)+ scan-untranslated.js(CJK 漂移扫描)+ no-stray-locales.test.js(禁止子项目放本地 *.json locale)。
vue-i18n 接入 + ant-d-v 同步 932f5ba38 <a-config-provider :locale> 双向 watch zhCN/enUS bundle,分页 / 日期 / Popconfirm 跟着切;useLocale() 暴露 current/antdLocale/setLocale。语言切换按钮在 sidebar header(next to 主题切换)。
18 view × ~1240 string 翻译 (M3) dd878633a82b63b50a QuickAsk · Compliance · Pipeline · DID · KnowledgeGraph · Dashboard · Chat · WorkflowEditor · Marketplace · Trust · Governance · Privacy · Sla · Codegen · Tenant · NLProgramming · Crosschain · AppLayout(sidebar 137 项 + 9 group + header)。enum 标签 mapper 用 t(key) === key ? fallback : t(key) 模式,未知值原值穿透。
测试加固 d0fa56f64 i18n-key-parity(zh/en JSON key 必须 mirror、leaf 非空、≥18 namespace)+ mount-sweep 覆盖 17 view(mount + 译后标题在 DOM 中可见)。Unit 1660 → 1691(+31),E2E 75/75。

Audit deltaspackages/locales/scripts/scan-untranslated.js

  • 翻译前:54 文件 / 2906 CJK occurrences
  • 翻译后:39 文件 / 1583 occurrences(-15 文件 / -1323 strings,~46% catalog
  • 25+ view 还有零散 CJK 待翻;模式跑得很顺,按需逐个推

Bug 修复:本批没引入新 bug。compliance threat-intel match 1.2.3.4 integration 测试 1 项失败,是本机 SQLite DB 损坏(database disk image is malformed)触发的环境问题,跟翻译无关;cc setup --reset 或者删 %APPDATA%/chainlesschain/data/chainlesschain.db 重建即可。

2026-05-01 增量更新 II(Phase 1.6 hard-flip + 双向 shell 切换 — web-shell 默认 + 顶栏切换按钮 + 4 处启动期 bug 修)

桌面端从"实验性 web-shell"翻成"默认 web-shell",对称的顶栏一键切换,外加运行时回归一波。

主题 提交 说明
DatabaseManager is not a constructor 4c054fa98 b2a8e5a8a ESM 迁移漏改 core-initializer.jsconst DatabaseManager = require("../database") 拿到的是 namespace 对象不是类。补解构。原 ~25 个依赖 database 的模块(DID/P2P/Friend/Org/sync/llm/rag/git 等)级联 silent skip,渲染层 store 全空。
009_embedding_cache + 009_memory_system 真装载 fd9c4f101 路径 bug × 10 处:path.join(__dirname, "database", "migrations", X) 多了一层(__dirname 已是 dist/main/database/)。所有外部 SQL migrations(005-018)实际都没跑过——EmbeddingCache / PermanentMemoryManager 启动期撞 "no such table" 才暴露。修路径 + 加 009 orchestration(建 embedding_cache / memory_stats / memory_sections / user_preferences / 等)+ LATEST_VERSION 6→7。
session:list 重复注册修 5e2048329 session-core-ipc.js(Managed Agents 新组)和 session-manager-ipc.js(LLM 旧组)+ memory-v2-ipc.js 之间 6 个 channel 名冲突(list/create/resume + memory:store/recall/consolidate)。Electron 在第一个冲突抛错截断 session-core 的 24 channel 注册。renderer 调 electronAPI.sessionCore.* 实际打到 LLM session manager 上语义错位。整组改名 session-core: 前缀;preload + 测试同步。
Phase 1.6 hard-flip 3296e9fb4 复刻 V6 hard-flip (caaddf530) 节奏:DEFAULT_CONFIG.ui.useWebShellExperimental false → trueshouldRunWebShell 语义 === true!== false(opt-out);显式 false 才回 V5/V6 桌面壳。argv/env force-on 仍保留作 CI 逃生口;UI toggle 显式 false 优先级高于 force-on。SystemSettings.vue 文案 + form 初始化同步翻。
V6 → web-shell 顶栏切换按钮 ebed2d7e8 AppShellPreview.vue topbar-actions 加 🌐 GlobalOutlined 按钮(CmdOrCtrl+Shift+B accelerator):Modal.confirm → electronAPI.invoke('config:set', 'ui.useWebShellExperimental', true)system:restart。绕开 titleBarStyle:"hidden" 隐藏菜单的限制(Electron 39 web-shell 模式 default 触发 0xC0000005,所以 hidden 锁死)。
web-shell → V6 顶栏切回按钮 367ec1bbe + 5c21633b5 web-panel AppLayout.vue header-right 加 🖥️ DesktopOutlined(仅 shellMode.isEmbedded === true 显示)。第一版用 electronAPI(没用——web-shell preload 故意空,只暴露 __CC_CONFIG__);改用 ws.sendRaw({type:"shell.switch", target:"desktop"}) 走 WS topic,符合 web-shell 一切走 WS 的设计。
shell.switch WS topic 41b17ec56 新 handler shell-switch-handler.js(factory + DI inject getAppConfig/app/scheduleRestart):验证 target ∈ {desktop, web-shell} → 写 ui.useWebShellExperimental → 100ms 后 app.relaunch() + app.exit(0)(让 WS 回包先 flush)。bootstrap 仅在 getAppConfig 提供时注册,避开 CI smoke。8 单测覆盖两 target / 错误 target / appConfig=null / app.relaunch throw 吞错。
inline <script> CSP 警告 ef2d9f65b 桌面 V5/V6 splash 的 logo loader 内联脚本被 script-src 'self' 拦截。抽到 public/splash-logo-loader.js<script src>,CSP 不动。
Splash 卡屏 + IPC 阻塞 60baa217b + de7077151 登录页残留 logo overlay 旋转、/login IPC config:get 卡住挡 mount。引入 Promise.race(invoke, timeout(1500)) + setTimeout splash.remove() 双保险 + pointer-events:none 立即清。public/logo.png 一并补齐(splash fix 引用但漏 add)。
menu-manager 浏览器入口 60baa217b "查看 → 在浏览器中打开 web 视图" + CmdOrCtrl+Shift+B accelerator + getWebShellHandle 注入 + 5 单测。titleBarStyle:"hidden" 让菜单不可见,但 accelerator 仍工作。

测试矩阵:desktop 19 文件 / 292 测试(web-shell 单元 24 + system 5 + config 26 + session 257)全绿;web-panel 1749/1750(旧账 compliance threat-intel 与本次无关);CLI 测试见上一节矩阵;新增 shell-switch-handler.test.js 8 测试 + 修复 database-config.test.js 4 子测试(hard-flip default 翻 false→true)。

激活方式(更新):默认即 web-shell,无须配置;如要回 V5/V6 桌面壳:右上角 🖥️ 切回按钮 / SystemSettings → 通用 → 关闭 "使用 Web Shell(默认)" / useWebShellExperimental: false

未做:6 个其他模块的 IPC 重复注册旧账(context:get-stats / workflow:create / compliance:generate-report / governance:create-proposal / token:get-balance / hsm:get-compliance-status)+ 类似 DatabaseManager 的 ESM 解构遗漏(PluginInstaller / ipcGuard.registerModule)——8 个 latent bug,等 follow-up。

详见 docs/design/桌面Web壳_架构与落地_设计文档.md


2026-05-01 增量更新(Phase 2 收尾 — 流式取消 + 配置持久化修 + Speech port + 多项 bug 修)

桌面 web-shell 的 cancel 半场收口、Phase 1.4 vendor target 修正、SystemSettings 配置持久化白名单修补、SystemSettings → web-panel 三件子页搬迁的 Speech 部分落地、CLI session-list 的隐性 bug 修——一次性合并五件事。

主题 提交 说明
llm.chat 真取消 b6b5174cb + 4951c95d5 ws-cli-loader 加 inFlightStreams<id, gen>ws.on("close")(lazy WeakSet 钩,避 CLI ws-server connection 事件没传 ws ref 的问题)+ <topic>.cancel 帧两条触发链都驱动 gen.return();llm-handlers 的 generator finally 调 AbortController.abort(),signal 透到 ollama / anthropic / openai client 的 fetch(gemini 因 axios 参数顺序差异未透)。useLlmChat.cancel() 按钮真停 HTTP。
AppConfigManager ui.* 持久化 436e349f1 DEFAULT_CONFIG 加 ui 字段 + load/loadAsync 合并白名单加 ui 行;_readSettingsSync 层叠 app-config.json 的 ui 到 settings.json,让 V6 toggle / Web Shell toggle 真在下次启动生效。原 silent-drop bug 一并解决。
Phase 1.4 vendor target cecb94980 forge.config.js 的 vendorWebShellInto(buildPath) 修为 path.join(buildPath, ".."),匹配 path-math 测试 fixture,让 packaged loaders 的 4-up REL 真命中 Resources/packages/;asar.unpack 顺势丢掉死掉的 packages/** glob。
Speech 子页搬到 web-panel 2d45ae278 views/SpeechSettings.vue + utils/speech-settings-parser.js + 路由 /speech-settings,引擎选择 + Web Speech / Whisper API / Whisper Local 三块核心配置;高级 storage / audio / 知识集成 / 性能子项保留 V5(Memory Bank 同款 deliberate scope cut)。LLM / Project 早有 Providers / ProjectSettings 等价页,V5 SystemSettings 三个 tab 加 a-alert 指向 web-panel。
session-close 真删(drive-by) (pending commit) CLI ws-session-gateway.js_serializeSessionMetadatastatus 字段 + listSessions DB 路径 if (metadata.status === "closed") continue;session-close 后再 session-list 就不会再返回闭合的 session。

测试矩阵:desktop unit 248 + config 26 + scripts 14 + integration 514 + web-shell e2e 14 + Playwright 4,web-panel unit 1616 + integration 58 + e2e 75(含修好的 session-close case),CLI session-gateway 58。共 ~2480 测试全绿(不计 skipped 与上游 DB 损坏导致的 1 个本机环境 fail)。

未做:Phase 1.4 实战(make:win 真打包验证)+ gemini-client signal 透传 + 参数顺序 + SystemSettings 余下 tab(Vector / Git / Backend / ...)按 Speech 模板续迁。

详见 docs/design/桌面Web壳_架构与落地_设计文档.md


2026-04-30 增量更新(桌面 Web 壳 Phase 0 → 1.4 prep 全量落地 — web-panel SPA 同进程嵌入桌面 + 协议合并 + 桌面专属 topic + 入口 opt-in + 打包 vendor)

桌面端方向收口:桌面 = web 加强版——Electron 同进程嵌入 web-panel SPA,桌面专属能力(U-Key/FS/MCP/Ollama)作为新增 WS topic + 极薄 preload 叠加,体现"独有特性强项化"。详见 docs/design/桌面Web壳_架构与落地_设计文档.md

Phase 状态 关键产物
0 spike web-ui-loader.js HTTP 同进程嵌入 + ws-bridge.js 极简 topic + phase0-smoke.cjs 端到端
1.1 协议合并 ws-cli-loader.js 包 CLI ChainlessChainWSServer + monkey-patch _dispatcher.dispatch,自定义 topic 与 web-panel CLI 协议(auth/ping/session-*)共享同一 WS 连接
1.2 桌面专属 topic 第一批 skill.list(绕过 SPAWN_ERROR 同进程跑 CLISkillLoader)/ fs.openDialog / fs.saveDialog(dialog-based 安全先于性能,10 MiB 读取上限)
1.3 入口 UX shouldRunWebShell(argv, env, settings) 三选一;SystemSettings 加 ui.useWebShellExperimental toggle,复刻 V6 hard-flip (caaddf530) 节奏
1.4 打包 prep scripts/prepare-web-shell-vendor.js + Decision A:vendor target = path.join(buildPath, "..")(保证 loaders 4-up REL 在 dev/packaged 都对);forge.config.js#packageAfterCopy 已接

测试矩阵:117+ 测试覆盖 web-shell 关键路径——单元 79 + 集成 14 + scripts 14 + config 6 + Playwright e2e 4 + phase0-smoke.cjs 一次性 smoke。

激活方式:System Settings → 通用 → "启用 Web Shell(实验)" toggle(重启生效);或 npm run dev:web-shell / --web-shell argv / CHAINLESSCHAIN_WEB_SHELL=1 env。

已知限制_executeCommand 在 Electron 内 process.execPath 是 Electron 而非 node(CLI 已加 ELECTRON_RUN_AS_NODE=1 workaround);SystemSettings toggle 持久化路径走 config:set → AppConfigManager whitelist 漏 ui 字段(V6 toggle 同 bug,单独修)。dogfood 期 env/argv 仍 OK。

未做:Phase 1.4 实战(make:win 真打包验证,待用户机器循环)+ Phase 1.5 多窗口架构(设计 memo 已落,实施留下次)。


2026-04-29 增量更新(V6 Preview Shell P9d — 品牌收口 + 空白起步 + 设置入口)

/v6-preview 壳里残留的 demo 痕迹一次清掉,对外可演示。

改动 内容
conversation-preview.ts schema version: 2 → 3;移除 seedConversations() / createDemoFiles() / 旧演示文件树;首次启动或 schema/JSON 损坏 → conversations: [] + activeId: null,UI 引导用户主动 "+ 新会话";agentLabel 默认 "Claude Code" → "ChainlessChain"
品牌位(AppShellPreview.vue 左上角 "ClaudeBox" 字样换成 import brandLogo from "../assets/logo.png" + 文字 "ChainlessChain",底部 composer 标签去掉 "运行中..." 后缀
平台感知 traffic dot macOS 红黄绿圆点改 v-if="isMacPlatform",挂载时 await window.electronAPI.system.getPlatform() === "darwin";Win/Linux 隐藏
设置入口 底部 5 颗 runtime chip(progress/model/skill/tool/terminal)收成单颗 button-chip(显示 runtimeStatus.modelLabel || "未配置模型");顶部新增齿轮 SettingOutlined 按钮;两者均 router.push({ path: "/settings/system", query: { tab: "llm" } })
单测对齐 conversation-preview.test.ts 改写"空白起步"语义,扩到 23 条;preview 壳系列(theme 10 + widget-registry 5 + v6-shell-default 9 + conversation-preview 23)合计 47 条全绿(17.1s);vue-tsc --noEmit 0 错误

模板(仅渲染层 + 持久化 schema 的"品牌+空白化"调整,不动主进程 IPC、不动路由表):见 docs/design/modules/97-claude-desktop-refactor.md §交付状态 P9d 条目。


2026-04-26 增量更新(web-panel Phase B 全量收官 — Community / Marketplace / Cross-chain / AIOps / Compliance + 侧边栏可滚动可折叠)

V6 硬翻定调后,web-panel 进入 Phase B:把桌面端 5 个高频功能整体移植到浏览器面板,每件 1 个 commit、scope feat(web-panel):,模板 = <feature>-parser.js(pure,含 stripCliNoise 复用)+ <Feature>.vue + router/sidebar 接线 + parser unit tests + new-pages 路由计数 +1 + 路径断言。Phase B 完成后顺手做了 sidebar 独立滚动 + 二级菜单收缩。

Phase B 5 件事(按 commit 顺序)

Commit 路由 侧边栏组 CLI 来源 卡片 / Tab / 弹窗
260787c99 /community 社 交(新建) cc social ... 5 / 3 (帖子+好友+联系人) / 2 (发帖+加联系人)
792b211e1 /marketplace 数 据 cc marketplace ... 5 / 2 (服务+调用) / 2 (发布+记录调用) + 状态机下拉
8f7d87ede /crosschain 高 级 cc crosschain ... 5 / 3 (桥接+原子交换+消息) / 4 (Bridge+Swap+Send+FeeEstimate) + 链目录 tag
30cf3b6ab /aiops 概 览 cc ops ... 5 / 3 (事件+Playbook+基线) / 4 (创建事件+Playbook+基线+异常检测) + 严重度分布
04c57237d /compliance 高 级 cc compliance threat-intel/ueba 5 / 2 (威胁情报+UEBA) / 3 (匹配+构建基线+行为分析) + IoC 类型分布

Sidebar 改造 — commit 7ee1985c5

加完 5 个新条目后侧栏在小屏被撑出视口范围;根因是 .app-root 用了 min-height:100vh(允许增长),.side-menuoverflow-y:auto 永不触发。

改动 效果
.app-root min-heightheight: 100vh; overflow: hidden 锁死视口高度
.main-areadisplay: flex; flex-direction: column; height: 100vh 头/内容区 flex 分摊
.page-contentflex: 1; min-height: 0 flex child 触发独立滚动
8 个 <a-menu-item-group><a-sub-menu> 二级菜单可点击折叠
v-model:openKeys + localStorage 持久化(cc.web-panel.sidebar.openKeys 跨刷新保留展开状态,9 测试覆盖

同步加固的测试 — commit d43e43a93

改动 内容
NEW integration: __tests__/integration/phase-b-cli-commands.test.js 19 测试,在 19410 端口起真实 cc serve,把 5 个视图依赖的所有 CLI 命令实跑一遍,输出过对应 parser 不抛错
FIX e2e: __tests__/e2e/panel.test.js SPA_ROUTES 23 → 34(先前 11 条路由没在 SPA fallback 测试覆盖里,包括 Phase A 的 did/project-settings/knowledge)
NEW unit: __tests__/unit/sidebar-openkeys.test.js 9 测试,锁住 localStorage 默认值 / 反序列化容错 / 未知键过滤

测试矩阵

Suite 结果
web-panel __tests__/unit/ 809/809(599 baseline + 5 × ~35 parser + 9 sidebar + 路由断言增量)
web-panel __tests__/integration/phase-b-cli-commands.test.js 19/19(~40s end-to-end,每命令实跑一次)
vite build clean,KnowledgeGraph chunk 仍是唯一 >500kB 警告(Phase A 时既有,echarts 体积)

路由计数

router 子项 30 → 35(1 redirect + 34 named pages);侧边栏新增 1 个组(社 交)+ 4 个条目(数据/概览/高级 各扩展)。

后续观察

Phase B 收完。下一阶段候选:B6+ 预备役(Privacy Computing / Inference Network / NL Programming / Tenant SaaS / AI-doc-creator),按需触发;模板已机械化。


2026-04-26 增量更新(V6 shell 硬翻 + top-10 parity 10/10 收口 + web-panel Phase A 全量上线)

V6 桌面壳从 2026-04-21 的 soft opt-in 走到 default:完成最后 6 个 V5→V6 widget probe(did-management / projects / p2p-messaging / community / ai-chat / settings),凑齐 top-10 parity 10/10,随即把默认入口翻到 V6。同日把 web-panel 的 Phase A 三件(DID / Knowledge Graph / Project Settings)全量上线接路由。

V6 widget probe 6 颗(按提交顺序)

每颗 probe 走标准 5-7 文件模板:plugin.json + <Name>Widget.vue + <Name>Panel.vue + 可选 thin Pinia store + widgets/index.ts + AppShell.vue 接 panel + 集成测试。

Commit Probe Slash Thin store Panel 数据来源
35f4e278b did-management /did useDIDManagementStore did:get-all-identities / did:get-current-identity / did:set-default-identity
a097596f5 projects /projects useProjectsQuickStore project:get-all(recent-5)
3883a72ec p2p-messaging /p2p useP2PMessagingStore p2p:get-node-info / p2p:get-peers / p2p:get-nat-info(graceful null/[])
5b5e6fe1d community /community useCommunityQuickStore community:get-list(graceful [])
396d6e7b1 ai-chat /chat useAIChatStore llm:check-status + llm:get-config
ccbc312fd settings /settings — (pure-info) 静态列出 7 个 SystemSettings sub-pane

ai-chat 是硬翻 gating route — 收完 settings 后 top-10 (settings/knowledge/projects/chat/did/p2p/community/ai/workflow/enterprise) 全部有 V6 widget。

V6 hard-flip — commit caaddf530

文件 改动
router/v6-shell-default.ts 初始 useV6ShellByDefault = false → true(覆盖 pre-config-load 窗口 + bootstrap try/catch 失败 fallback)
main.ts setV6ShellDefault(raw === true) → setV6ShellDefault(raw !== false) — config 未设值默认 V6,仅显式 false 才回 V5
pages/settings/SystemSettings.vue 表单 initializer + 描述文字同步翻

opt-out 通道与纯函数 resolveHomeRedirect() 都没动,符合 migration template 的 "no other code needs to move" 承诺。老用户下次启动直接看到 V6 shell;想回 V5 在 SystemSettings 关掉 "启用 V6 桌面壳" 即可。

附带 commit 72b826bdf 修了顺手发现的链接漂移:SystemSettings 的 "立即试用" link 之前 router.push("/v2") 但 router 守卫 redirect 是 /v6-preview —— 两处统一到 /v6-preview

web-panel Phase A:DID / Knowledge Graph / Project Settings

Commit 范围 路由
f37aa44d0 KG 完整 + DID scaffold + echarts/vue-echarts deps /knowledge 全程上线
d1f22ce2d ProjectSettings scaffold (scaffold)
c0e96c9e0 DID + ProjectSettings wiring /did + /project-settings

KG 4 个 tab:force-directed graph (ECharts) / 实体表 / 关系表 / 类型分布,CRUD + 多跳 BFS reasoning 全部走 cc kg list/relations/stats/reason --json。DID 复用 cc did *,助记词/DHT 按钮显示但 disabled + tooltip "桌面专属"。ProjectSettings 4 字段(rootPath/maxSizeMB/autoSync/syncIntervalSeconds)走 cc config get/set project.*diffProjectConfig 只对改动字段发 set。

测试矩阵(657 测试今日相关全绿 + 硬翻当日全 surface 36/36)

Suite Result
plugin-extension-points.integration.test.js 19/19(每加一个 probe +1 it block)
slash-dispatch.test.ts 8/8
v6-shell-default.test.ts 9/9(硬翻后 4 个断言相应翻转)
web-panel __tests__/unit/ 621/621(含 24 did-parser + 27 kg-parser + 20 project-settings-parser)
desktop tests/integration 509/512(3 失败在 coding-agent-bridge-real-cli.test.js,pre-existing ECONNREFUSED 网络依赖,非今日引入)

后续观察

预约一颗 remote agent trig_013pjiuMPAUkNyoE4QxVdee8 在 2026-05-10 09:00 Asia/Shanghai 自动巡检:跑 git log 找 revert/regression commit、gh issue list 找 V6 用户报告、跑 3 个 V6 surface 测试文件、读 CLAUDE.local 找回滚笔记,给 keep / tweak / revert 推荐(≤250 字)。管理:https://claude.ai/code/routines/trig_013pjiuMPAUkNyoE4QxVdee8


2026-05-03 增量更新(MTC v0.12 — 链上治理锚定(Q-COMP-3 解锁)+ 设计文档 cleanup + Deferred Items Registry)

法务 2026-05-03 出函解锁 Q-COMP-3(境内联盟链路径),同步落地 v0.3 #2 链上治理锚定 + 一次跨设计文档的 doc cleanup:

模块 内容
Lib (core-mtc) SCHEMA_GOVERNANCE_ANCHOR schema + computeGovernanceSnapshotHash (deterministic, order-independent) + pluggable IChainAnchorClient 接口 + InMemoryChainAnchorClient / FilesystemChainAnchorClient 两个 mock impl + verifyGovernanceAnchor 含 HASH_MISMATCH drift 报告
CLI cc mtc federation governance-anchor <fed> --actor --chain-store [--chain-name] (publish snapshot hash) + governance-verify-anchor (fetch latest 链上 record + 对比本地 replay)。生产部署 swap 真实链 client 即可,schema/CLI 不变
设计文档 cleanup (a) MTC_联邦治理_v1.md §11: #1 cross-fed 互信 + #2 链上锚定 + #4 审计第三方 全部回标 ✅ + commit hash;新增 §11.5 测试基础设施限制(paxos/libp2p e2e)。(b) MTC_跨链桥_v1.md §11: #3 多跳 + #4 gas-aware + #5 监控 + #6 SLA 全部回标 ✅;#1/#2 标注外部依赖 + 预期解锁条件。(c) 默克尔树证书_MTC_落地方案.md §14.2 Q-COMP-3 状态从 "保守决议" 改为 "已解锁 2026-05-03"。(d) 新增 §14.5 Deferred Items Registry — single source of truth,跨子文档统一索引剩余 4 项 deferred items + 3 项永久限制 + v0.6→v0.12 完整 commit 历史
测试 +16 lib unit (snapshot hash 确定性 / 顺序无关 / fed 隔离 / mock client 双实现 / verifyAnchor HASH_MISMATCH+drift) + 5 CLI integration (publish / verify pass / verify mismatch / NO_ANCHOR_ON_CHAIN / 重复 anchor 递增 block_height) = 21 新测试

累计:core-mtc 248 (+16 v0.12 anchor) + CLI integration 71 (+5 v0.12) + lib unit 70 (无变化) = 389 全绿

仍 NOT 做(仅剩 4 项,全部明确外部 blocker) — 见 默克尔树证书_MTC_落地方案.md §14.5 Deferred Items Registry:

  • D1 真实 RPC 链适配器 — desktop 大工程
  • D2 Cross-chain DID 解析(生产路径)— 阻塞同 D1
  • D3 完整 paxos 跨成员实时门控 — 当前替代方案 production-ready
  • D4 Libp2p cross-node wire e2e 真测 — testbed 限制

2026-05-03 增量更新(MTC v0.11 — cross-fed 互信 + 离线审计 + 多跳桥 + gas-aware + SLA + 监控 dashboard)

收口跨链桥设计 §11 + 联邦治理 v0.2 §11 列出的全部可做项(链上锚定阻塞 Q-COMP-3、真实 RPC 适配器需 desktop 大工程,此两项继续保留):

| Wave | 模块 | 内容 | | ----------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | | A1 Cross-federation 互信(v0.3 #1) | core-mtc/lib/federation-governance.js | SCHEMA_CROSS_FED_TRUST_ANCHOR schema + createCrossFederationTrustAnchor + validateCrossFederationTrustAnchor(含 EXPIRED 检查)。CLI: cc mtc federation cross-trust-create/validate | | A2 离线审计第三方接口(v0.3 #3) | 同上 lib | auditGovernanceLog(events, fedId) 纯函数:检测 UNKNOWN_ACTOR / ACTOR_KEY_MISMATCH / BOOTSTRAP_KEY_MISMATCH / OUT_OF_ORDER 四类问题,返回 {ok, findings[], final_state}。CLI: cc mtc federation audit <fed> [--summary | --json] | | B1 多跳桥(bridge §11 #3) | cross-chain-mtc.js | buildMultiHopBridgeEnvelope 链 ≥2 个单跳 envelope,强制 leg[i].dst_chain == leg[i+1].src_chain 连续性;新 schema mtc-bridge-multihop/v1verifyMultiHopBridgeEnvelope per-leg 验证。CLI: cc crosschain mtc-multihop-build/-verify | | B2 Gas-aware batch(bridge §11 #4) | 同上 | shouldCloseBatchGasAware 启发式:staged ≥ 50 硬关;current_gas > baseline×1.5 延迟;否则关。CLI: cc crosschain mtc-gas-check <chain> --staged-count <n> [--current-gas-usd] | | B3 SLA Manager 集成(bridge §11 #6) | 同上 | getBridgeMtcSlaMetrics 输出 cc sla 兼容形状:sla_status (ok/degraded/down) + staging/批次/最近批次时间。CLI: cc crosschain mtc-sla | | C Web-panel 监控 dashboard(bridge §11 #5) | Mtc.vue 跨链桥 tab | 新增"SLA / Monitoring" 卡片:4 个统计 (status / staged / batches/h / last batch) + 30s 自动 poll cc crosschain mtc-sla --json,可纳入外部 Prometheus / Grafana |

累计测试:core-mtc 232 (+12 v0.3 lib) + CLI integration 66 (+6 governance + 4 crosschain) + lib unit 70 (+14 v0.2 lib) = 358 全绿

仍 NOT 做(明确外部 blocker / 重大依赖)

  • 链上治理锚定(v0.3 #2)— 等 Q-COMP-3 法务出函解锁境内联盟链路径
  • 真实 RPC 链适配器(bridge §11 #1)— 需 desktop ethers/web3 集成 + chain endpoints + 大量集成测试
  • cross-chain DID 解析(bridge §11 #2)— 与 cross-fed 互信合并设计,schema 已有,等 desktop 真链路径
  • 完整 paxos 跨成员实时门控(v0.10 留项)— 多周分布式系统工作,超出增量范围
  • Libp2p cross-node wire e2e(v0.10 留项)— gossipsub mesh 在 2-node testbed 天然 flaky,已用 call-path + dispatch test 替代

2026-05-03 增量更新(MTC v0.10.1 — desktop V6 widget 接入 sync-stats 实时面板)

收口 v0.10 留下的最后一项小工作 — 把 sync daemon 写出的 stats 文件接入桌面 V6 治理 widget,让用户在桌面就能看到 publish/pull/wire 实时计数:

模块 内容
Main process IPC 新增 mtc:get-federation-sync-stats channel + readFederationSyncStatsFromDisk(dir) helper,扫描 <gov-dir>/*.sync-stats.json 返回 {federations: [{fed_id, mode, last_tick_at, publish, pull, libp2p}]}
Preload bridge electronAPI.mtc.getFederationSyncStats()
V6 widget 增强 FederationGovernanceWidget.vue 在每个联邦卡片下追加 sync 子面板 — 显示 mode (filesystem/libp2p) + last_tick 相对时间 + Publish (last/total) + Pull (last/total + invalid/unknown) + libp2p wire (recv/appended)。无 daemon 在跑时子面板隐藏
测试 +5 IPC unit (空 dir / 解析 / 忽略非 stats 文件 / 损坏 JSON / channel 注册) + +3 widget unit (filesystem mode 渲染 / libp2p mode 渲染 / 无 stats 时隐藏)。共 41/41 desktop MTC 测试

闭环了 v0.10 列出的"desktop V6 widget 集成 sync-stats"。剩余 3 项 v0.10 候选(完整 paxos 跨成员 quorum 实时门控 / WebSocket streaming sync-stats / libp2p cross-node wire e2e)是优化方向,等真实部署反馈再决定优先级。


2026-05-02 增量更新(MTC v0.10 — 多提案 CRDT 解析 + 实时 sync stats + libp2p 烟雾测 + 系统加固清单)

收口 v0.9 留下的 4 项 TODO:

模块 内容
Multi-proposal CRDT replayGovernanceLog 现保留 ALL 开放的 propose-threshold / propose-revoke(之前同 target 后写覆盖前写);新返回 pending_thresholds[] / pending_revokes_all[],旧 pending_threshold / pending_revokes 字段保持 backward-compat(最近一条)。confirm-threshold --proposal-event-id <id> CRDT-style 显式选择某具体提案;缺省仍 confirm 最近
Live sync stats 两条 sync daemon 每 tick 持久化 <dir>/<fed>.sync-stats.json (atomic write);新 cc mtc federation governance-sync-stats <fed> [--json] 读取。Web GUI / 监控可定期 poll 该文件
Libp2p 烟雾测试 packages/core-mtc/__tests__/federation-governance-libp2p.test.js 4 tests 覆盖 publishRaw 调用路径、合成 dispatch、receiver-side dedupe、topic 格式约定。没有断言跨节点 wire delivery(与现有 federation discovery test 一致策略——gossipsub mesh formation 在 2-node 测试环境天然 flaky)
Systemd 加固清单 packages/cli/scripts/service/HARDENING.md 详细列出当前模板的安全保护(User= / NoNewPrivileges / ProtectSystem / ReadWritePaths 等)+ 部署前 7 项 verify 清单(账号 / mount / 网络 / 可选 capability drop / SELinux)+ 已知限制 + smoke test 步骤

累计测试:core-mtc 220 (+6 conflict resolution + 4 libp2p smoke) + CLI integration 30 (+3 stats + 1 conflict CLI) = 250 全绿

设计取舍:CRDT 提案保留全部开放的并发提案,confirm 默认选最近(back-compat)但可显式选 specific event_id;不引入完整 multi-decree paxos / merkle CRDT,对小规模联邦(N<10)够用。Live stats 用文件 polling 而非 WebSocket streaming,避免 ws-server 改造。Libp2p e2e 走"调用路径不抛 + dispatch logic 正确"策略,wire delivery 测试留给生产 mesh。


2026-05-02 增量更新(MTC v0.9 — governance 自动 sync daemon + libp2p 通道 + quorum 门控 + web 操作型 GUI)

收口 v0.8 留下的 4 项 TODO:

模块 内容
Auto sync daemon cc mtc federation governance-sync-serve <fed> --drop-zone <dir> [--interval] [--verify] [--once] 周期性 publish + pull;SIGINT/SIGTERM graceful;helpers runGovernancePublish / runGovernancePull 抽出复用
libp2p 同步通道 cc mtc federation governance-sync-libp2p <fed> --listen <maddr> [--connect] [--verify] [--once]:gossipsub topic mtc-federation-governance/v1/<fed><dir>/<fed>.libp2p-pos.json 高水位记录已 publish 的 event_id;接收侧 dedupe + verify + append;复用现有 Libp2pTransport 基础设施
Quorum 门控 cc mtc federation confirm-revoke / confirm-threshold 默认 pre-flight 检查匹配的 propose-revoke / propose-threshold 存在;--no-quorum-check 可显式关闭。新增缺漏的 cc mtc federation confirm-threshold <fed> --actor <m> CLI
Web-panel 操作型 GUI Mtc.vue 联邦治理 tab 新增 5 个子 tab (邀请/投票/改 threshold/撤销/跨成员同步),全部通过 ws.execute('mtc federation ...') 调用本机 CLI——签名密钥永远不进入 web 渲染进程。安全说明 a-alert 嵌入
Service supervisor 新增 cc-fed-governance-sync.service (systemd) 模板

累计测试:CLI integration 27 (含 6 新:confirm-threshold + quorum + sync-serve --once + sync-libp2p --help) + web-panel parser 13 (无回归) = 40 全绿

设计取舍:libp2p 同步选择简单的"高水位 republish"策略(每 tick 推未推过的);接收侧 dedupe + verify 已经可靠,不引入复杂的 pull 协议。Web 操作型 GUI 通过 ws-bridge 调本地 CLI,签名材料不出 CLI 进程,符合"密钥不进 web"的安全约束。


2026-05-02 增量更新(MTC v0.8 — governance.log 跨成员同步 + 服务模板 + 治理 GUI(desktop + web))

收口 v0.7 留下的"governance.log 只在本地"和"治理只能 CLI 看"两个限制:

模块 内容
core-mtc 同步 lib dedupeEventsByEventId / sortEventsChronologically / verifyGovernanceLog (返回 valid/invalid/unknown 三组);+8 unit tests
2 个新 CLI cc mtc federation governance-publish <fed> --drop-zone <dir> (atomic write 一文件一事件,幂等) + cc mtc federation governance-pull <fed> --drop-zone <dir> [--verify] (dedupe by event_id + 可选签名校验);+5 integration tests 覆盖 alice→bob 跨 home 同步 + dedupe + --verify 路径
Service supervisor 模板 packages/cli/scripts/service/: systemd unit (Linux) + launchd plist (macOS) + NSSM config (Windows) + Task Scheduler XML (Windows alt);操作员手动 install,不接 npm postinstall
Desktop V6 治理 widget FederationGovernanceWidget.vue + mtc:get-federation-governance IPC + electronAPI.mtc.getFederationGovernance;列出所有联邦的 status / threshold / 成员 (活跃+候选) / 待投票 / 待撤销 / 归档/泄漏密钥;+7 widget unit + 4 IPC tests
Web-panel/Web-shell 治理 + 桥 tab Mtc.vue 新增 "跨链桥 MTC" tab (config + 信任锚表) + "联邦治理" tab (按 fed-id 加载 governance-log,渲染状态卡 + 成员表 + 待投票列表 + 事件时间线)。Web-shell 通过 electron 内嵌 web-panel,零额外改动

累计测试:core-mtc governance lib 28 unit + CLI governance integration 19 + desktop 26 IPC + 18 widget = 91 governance/sync 相关测试全绿

实现仍 opt-in:跨成员同步是手动 governance-publish/pull 操作,未做自动 daemon — 自动化留给 v0.9 候选。


2026-05-02 增量更新(MTC v0.7 — 联邦治理 CLI + 桥 MTCA daemon + 桥状态 V6 widget)

在 v0.6 跨链桥 MTC 集成基础上,把治理设计文档从纸面转成可执行:

模块 内容
core-mtc 治理 lib packages/core-mtc/lib/federation-governance.js:13 种事件类型 (create/invite/vote/leave/propose-revoke/confirm-revoke/rotate-key/propose-threshold/confirm-threshold/fork/merge/dispute/wind-down)、createGovernanceEvent 多算法签名 (Ed25519/SLH-DSA)、verifyGovernanceEventreplayGovernanceLog 纯函数还原 effective state(成员名单 + threshold + 候选期权重 0.5 + 30 天自动转正)
8 个新治理 CLI cc mtc federation invite/vote/propose-revoke/confirm-revoke/rotate-key/propose-threshold/fork/merge 全部签名后追加到 ~/.chainlesschain/federation/governance/<fed>.jsonl + cc mtc federation governance-log <fed> 一键查看事件 + replay state
桥 MTCA daemon cc crosschain mtc-serve [--interval <s>] [--once]:周期性 closeBatch;--once 单次模式适合 cron / 测试;SIGINT/SIGTERM graceful 关停
Desktop V6 widget BridgeMtcStatusWidget.vue + mtc:get-bridge-status IPC 通道(preload electronAPI.mtc.getBridgeStatus);显示 enabled / mode / alg / batch interval / trust anchors (n 锚 / m 链) / 待批次关闭 / 最近批次;并入 PREVIEW_WIDGETS["bridge-mtc"]
Bug fix governance lib 的 pickSigner 同时接受规范大小写(Ed25519)和 CLI lowercase(ed25519)— 否则 verify 会回 BAD_ALG

累计测试:核心 governance lib 20 unit + CLI 14 integration + desktop 11 (+5 widget +6 IPC bridge) = 50 新测试全绿;总 MTC 相关 = core-mtc 202 + CLI 86 + desktop 32 = 320 测试

实现仍 opt-in:cc mtc federation 治理事件签名后只写本地 governance.log,没人强制订阅;其它成员需要主动 sync log 或运行 verifier 才能感知。


2026-05-02 增量更新(MTC v0.6 — 跨链桥 MTC 集成 + 联邦治理设计文档)

落地两份治理 / 跨链设计文档(关闭 §12 已知限制 #2/#6)+ cc crosschain mtc-* 一组新子命令,让现有桥流程能 opt-in 写 MTC envelope:

| 模块 | 内容 | | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 设计文档 — 联邦治理 v1 | docs/design/MTC_联邦治理_v1.md:5 阶段联邦生命周期 (Bootstrap/Steady/Dispute/Wind-down/Closed) + 准入审批流(候选期权重 0.5)+ M-of-N 阈值业务场景分级 + 三种退出路径 + Fork/Merge 语义 + governance.log schema | | 设计文档 — 跨链桥 MTC 化 v1 | docs/design/MTC_跨链桥_v1.mdmtc/v1/bridge/<chain-pair>/... 字典序 namespace + 桥两侧 MTCA 三种互信模式(Independent/Federated/Light Client)+ 跨链特有威胁分析 (T1 oracle 共谋 / T5 censorship) | | CLI lib | packages/cli/src/lib/cross-chain-mtc.js 新增:bridgeNamespace 强制字典序 + 信任锚 store (Independent 模式) + assembleBridgeBatch / verifyBridgeEnvelope + stageBridgeOp / closeBatch staging 生命周期 | | 4 个新子命令 | cc crosschain mtc-status / mtc-envelope / mtc-verify / mtc-trust-anchor {add,list,remove} / mtc-batch | | --mtc opt-in flag | cc crosschain bridge | swap | send --mtc 在原命令成功后写一条 staging op;cc crosschain mtc-batch 关 staging 为按 chain-pair 分组的批次(landmark + envelopes 持久化到 batches/-/) | | Bug fix | _dbFromCtx 修向上多层查找 _db(之前只看 root program → 永远 null,导致桥命令 spawnSync 全挂)+ crosschain preAction 自动 bootstrap DB | | core-mtc 改动 | NAMESPACE_REbridge kind(additive,不破坏现有 did/skill/audit) |

累计测试:lib 56 unit + CLI 14 integration + 7 e2e + core-mtc 182 + 既有 cross-chain 83 = 342 测试全绿,覆盖 unit / integration / e2e 三层 + 跨进程独立验证。

实现仍 opt-in(--mtc flag),等 desktop RPC 链适配器成熟后切默认 on。


2026-05-02 增量更新(MTC v0.5 — Phase 3 federation 全套 + libp2p gossipsub auto-discovery)

Phase 3 federation MTCA 完整落地:M-of-N 多签 landmark、cc mtc federation join/leave/status 本地 registry、cc mtc * --federation <id> --threshold <M> 多签发布、cc mtc federation discover 跨进程服务发现(filesystem drop-zone 共享目录 NFS/Syncthing/SMB/USB + libp2p gossipsub 真 P2P 双 transport)、异构 Ed25519+SLH-DSA 联邦、OpLog per-row "待批次关闭" 徽章 backend 桥接 + web-panel Audit.vue 4 态徽章。

阶段 Commit 内容
Phase 3.1 多签 + federation 命令 95b861914 assembleBatchFederated + LandmarkCache ≥M-of-N + cc mtc federation join/leave/status(atomic write,wx race-safe)
Phase 3.2 Marketplace federation 信任锚 15c29e9fe cc mtc batch* / publish-skills --federation <id> --threshold <M>
Phase 3.3 filesystem service discovery aa13e07a9 cc mtc federation discover --transport filesystem --drop-zone <dir>,自签 announce + TTL cache
Phase 3.4 libp2p service discovery 70996de89 --transport libp2p + gossipsub topic mtc-federation/v1/<id> + Libp2pTransport.publishRaw/subscribeRaw 通用 pubsub API
OpLog per-row 徽章 70d2cda59 backend AuditMtcBridgeService 解析 emit JSON 写回 audit_mtc_event_id(V013 migration),web-panel Audit.vue 4 态徽章
v0.5 bug 审计修 4 项 本次 drawer 改用 electronAPI.file.readContent、libp2p 节点 init 异常 cleanup、scan 重入锁、federation join wx 独占创建

累计测试:core-mtc 182 + CLI 89 + desktop 33 + web-panel 153 + backend 19 = 476 测试全绿,覆盖 unit / integration / e2e / desktop-renderer / web-renderer / backend 六层。


2026-05-01 增量更新(MTC v0.4 — Marketplace publisher daemon + 审计双轨脚手架)

新包 @chainlesschain/core-mtc 落地后量子安全签名压缩方案 — 借鉴 IETF PLANTS WG 的 Merkle Tree Certificates 协议(与 Cloudflare + Google Chrome 联合推进的 HTTPS 后量子方案同源)。

切到 SLH-DSA-128f 时,单签从 64 B 暴涨到 17 KB;DHT 周流量从 5 GB 涨到 170 GB(10K 用户规模)。MTC 通过批量签发 + Merkle inclusion proof,把单证书携带物压回 ~700 B —— 节省约 97%

cc mtc 7 子命令 + cc audit mtc 8 子命令

# 批次签发与验证
cc mtc batch <input>              # 通用批次构造
cc mtc batch-dids                 # 从本地 DID DB 读身份
cc mtc batch-skills               # 从 CLISkillLoader 读技能
cc mtc verify <env> --landmark X  # 验证 inclusion proof
cc mtc landmark inspect <X>       # 查看 landmark 元信息
cc mtc serve --transport=...      # verifier 守护进程

# v0.4 新:marketplace publisher 守护进程
cc mtc publish-skills --namespace-prefix mtc/v1/skill \
  --issuer mtca:cc:... --out <dir> --state-file <path> --once

# v0.4 新:审计日志双轨脚手架(off-by-default)
cc audit mtc {enable | disable | config | set-interval}    # 配置(产线启用待法务出函)
cc audit mtc {emit | reconcile | reconcile-check | status}  # 双轨流转

落地范围(222 测试全绿,含 unit / integration / e2e / desktop-renderer 四层)

阶段 Commit 内容
Phase 1 W1+2+3 be70c5b17 RFC 6962 Merkle 树 + Verifier + LandmarkCache + 3 子命令
Phase 1 W4 8926a5bc0 / a4b88ebda 持久化 + Ed25519 实签(去 alwaysAccept 桩)
Phase 1 W4 DID 1e63dacc1 cc mtc batch-dids 读本地 DID DB
Phase 1 W5 58ad63a6b InMemory + Filesystem transport(含两节点 e2e)
Phase 1.5 40fa0689a / 1b0ae1105 / 4d1a81586 libp2p direct + gossipsub + cc mtc serve
Phase 2 partial 67da18480 Marketplace cc mtc batch-skills
Phase 2 v0.4 c69900c7d assembleBatch 抽公用 + cc mtc publish-skills daemon + cc audit mtc 双轨脚手架
E2E + bug audit 1903b9015 跨进程 e2e 6 测试 + 4 个 bug 修复(state file 原子写、staging schema 校验、getStatus malformed-leading guard、issuer key 'wx' 并发 create race)
Phase 1.6 SLH-DSA 本次 core-mtc/lib/signers/slh-dsa.js (FIPS 205) + assembleBatch 接受可选 signer + cc mtc * --alg slh-dsa-128f opt-in + cc mtc verify 多算法 dispatcher。@noble/[email protected]
Phase 4 V6 widget 本次 MtcStatusPreviewWidget.vue + DecentralEntries 顶部 MTC 入口;显示 audit/批次/算法状态;IPC 缺失优雅降级

测试分层:core-mtc 147(含 SLH-DSA 7 + batch refactor 3)+ CLI MTC 64(unit 30 + integration 28 + e2e 6)+ desktop V6 widget 11 = 222 全绿,跨 unit / integration / e2e / desktop-renderer 四层。

详细使用:用户指南;架构与字节级规范:设计文档docs/design/默克尔树证书_MTC_落地方案.md

签名算法cc mtc batch/batch-dids/batch-skills/publish-skills 全部支持 --alg ed25519(默认,64B/sig,classical)或 --alg slh-dsa-128f(17KB/sig,FIPS 205 后量子,opt-in)。cc mtc verify 多算法 dispatcher 自动识别。Audit-mtc 仍维持 Ed25519(realtime sig + 短窗 batch,PQC 收益边际)。Audit 产线启用阻塞已于 2026-05-01 解除(Q-COMP-1 等保三级最终性窗口 + Q-COMP-2 T/ZGCMCA 023—2025 条款法务出函均已收到);脚手架仍保持 enabled=false 默认,由各租户在自己的环境内通过 cc audit mtc enable --interval <60|3600> 显式启用。


2026-04-24 增量更新(cc pack v0.4 —— 基础模式 + 项目模式 全链路落地)

新命令 cc pack 从 v0.2 的"CLI 打包器"演进为 v0.4 的"项目打包器":除了原有 CLI + Web UI 的单文件分发,新增 --project 模式,把 CWD 的 .chainlesschain/(config、skills、rules、persona)一并烘进 exe —— 收件人双击跑的就是"这个项目对应的 Agent"。

两种模式一句话能力

# 基础模式:通用 ChainlessChain 便携 exe
cc pack --skip-web-panel-build --allow-dirty
# → dist/chainlesschain-portable-node20-win-x64.exe (~58 MB)

# 项目模式:CWD 的 .chainlesschain/ 自动内嵌(自动检测)
mkdir my-medical-agent && cd my-medical-agent
cc init -t medical-triage
cc pack
# → dist/my-medical-agent-portable-node20-win-x64.exe
#   + 同目录的 .pack-manifest.json(含 bundledSkills 审计清单)

产物启动后:基础模式弹出通用 Web UI;项目模式先物化 .chainlesschain/~/.chainlesschain-projects/<name>-<sha8>/CC_PACK_AUTO_PERSONA 激活项目 persona,CC_PROJECT_ALLOWED_SUBCOMMANDS 收敛 commander 白名单,/api/skills 返回项目内 skill 列表。

Phase 2 修掉的打包关键 bug(基础模式)

症状 根因 修复
双击黑窗一闪而过 合成入口无 subcommand 时 commander 只打印 help 就退出 入口检测到无 sub 时自动 argv.push('ui'),浏览器自动开;--version/--help 短路不污染
ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING pkg snapshot 不给 V8 注册 import callback 入口改用静态 ESM 导入 ensureUtf8 + createProgram,不再 import(...)
NODE_MODULE_VERSION 127 … requires 115 原生 .node 按 Node 22 ABI 编译,pkg 打进 Node 20 loadSQLiteDriver 每个 native 候选加探针 new Database(':memory:').close();ABI mismatch 自动降级到 sql.js
sql.js 选中但 prepare(...).all is not a function 历史 fallback 只切 driver 不适配 API 新增 createSqlJsCompat(raw, dbPath):把 sql.js 包成 better-sqlite3 外形(prepare().all/get/run + transaction + pragma no-op + close auto-persist),业务代码零改动
Auth: disabled 即使 --token auto 入口没烘 token 字段 入口合成一个冻结 BAKED 常量,--token auto(默认)每次启动用 crypto.randomBytes(16) 现生成一次性 token 并打印;CC_PACK_TOKEN / CC_PACK_UI_PORT / CC_PACK_WS_PORT / CC_PACK_HOST 四个 env var 可覆盖

项目模式 Phase 2a / 2b / 3a / 3b(v0.4 新增)

Phase Commit 关键产出
2a 522d7c8c9 BAKED 字段(projectMode/Name/Sha/Entry/AutoPersona/AllowedSubcommands/BundledDir)+ 入口 copyRecursiveMerge(新文件追加,已存在保留 + warn)+ sanitizeProjectName()(Windows 保留名、64 字符上限)
2b 69a91c450 web-ui-server.js 新增 GET /api/skills:返回 {schema:1, skills:[{name, source, category, ...}]},由 CLISkillLoader.loadAll() 驱动;smoke-runner 从 pre-wired 升级为实断言
3a dce8e5d66 createProgram(opts) 支持 allowedCommands 白名单 / CC_PROJECT_ALLOWED_SUBCOMMANDS 环境变量过滤,未列出子命令根本不注册到 commander
3b 7633ad483 CC_PACK_AUTO_PERSONA 环境变量导出 + pack-manifest.json.bundledSkills 字段(收件方审计)+ Phase 8 smoke 对照返回集合

测试矩阵(合计 108 条项目模式 + 96 条基础模式 = 204 条全绿

  • 基础模式(Phase 0-3):core-db createSqlJsCompat 12 + packer 五模块 57 + 集成 6 + E2E 4(门禁)
  • 项目模式(v0.4 新增):
    • 单元 97:allowed-commands 9 + precheck-project-mode 26 + project-assets-collector 17 + pkg-config-generator 28 + manifest-writer 9 + smoke-runner 8
    • 集成 11:packer-pipeline 8 + packer-dry-run 3
  • 冒烟runPack phase 8 自动 spawn 产物探 HTTP 200 + WS 握手 +(项目模式)/api/skills 断言 bundledSkills;跨平台产物 / 旧 artifact 404 均软容忍

详细文档


2026-04-22 增量更新(MainLayout + DIDManagement 拆分 · Shell 真 LLM 接入 · 启动流程 Critical/Deferred · 重型组件懒加载)

延续 2026-04-21 的 SystemSettings / ChatPanel SFC 拆分收尾,本轮把剩余的大 SFC(MainLayout、DIDManagement)继续按功能切分,并同步完成三项"隐藏 bug 面"的根因清理:Shell 真 LLM 接入、主进程启动拆两段、重型渲染器组件懒加载。

拆分成绩

大文件 拆分前 拆分后 新增子组件 路径
MainLayout.vue 3203 1943(−39%) FavoriteManagerModal · HeaderBreadcrumbs · SyncStatusButton · VoiceCommandHandler · SidebarContextMenu · AppHeader src/renderer/components/layout/
DIDManagement.vue 1390 543(−61%) AutoRepublishSettingsPane · MnemonicModals · IdentityDetailsModal src/renderer/components/did/

Shell 真 LLM 接入(V6 预览壳)

  • ShellComposer.vuehandleSend() 不再是占位:先走 sendLlmChatStream()(prompt-only,window.electronAPI.llm.queryStream)流式,失败回退 sendLlmChat(payload) 带 history 非流式;前置 isAvailable() 校验。
  • ConversationStream.vue 消息源改由 useConversationPreviewStore 驱动;新增 typing indicator(3 点波浪 @keyframes shell-typing);移除 did-chip 视觉噪音。
  • Phase 3.4 软开关 重定向目标从 /v2 改为 /v6-previewresolveHomeRedirect in router/v6-shell-default.ts):勾上 ui.useV6ShellByDefault 后根路径直接进入 Claude-Desktop 风格预览壳,而非 V2 壳;9/9 单测已同步。

主进程启动拆 Critical / Deferred

  • bootstrapCritical() 阶段 0-5(Hooks / 核心 / 文件 / LLM / 会话 / RAG+Git)阻塞 splash(5-55%)。
  • bootstrapDeferred() 阶段 6+(技能 / 工具 / 高级)splash 55-90%。
  • IPC 注册拆 registerCriticalIPC() + registerDeferredIPC()setupIPCcreateWindow 内仅调一次 → 根因消除:原先 phase 文件里散落 ipcMain.handle()ipc-guard.resetAll() 的竞态会导致 llm:chat / conversation:* 二次注册后"无法发送消息"。
  • CHAINLESSCHAIN_LEGACY_BOOT=1 保留旧单阶段启动回退开关。

重型渲染器组件懒加载

5 处 importdefineAsyncComponent:FileEditor → MonacoEditor(~5MB),KnowledgeDetailPage → Milkdown MarkdownEditor(~1.5MB),DesignEditorPage → Fabric DesignCanvas(~1MB),ProjectDetailPage → CodeEditor / MarkdownEditor / WebDevEditor。实测 monaco 独立 chunk 3.7MB / gzip 938KB,首屏不再强拉。

后端服务并行轮询

BackendServiceManager.waitForServices():4 路服务(9101 / 9102 / 9103 / 9090)从串行 4×30s 改并行 Promise.all,单服务 maxRetries=10startServices() 不再阻塞启动,触发后赋值 this.servicesReady 给可选 await。

测试回归

维度 命令 结果
Store 全量 npx vitest run src/renderer/stores/__tests__/ 600 / 600(23 文件 · 35s)
Shell + router + bootstrap npx vitest run src/renderer/shell src/renderer/shell-preview src/renderer/router/__tests__ tests/unit/bootstrap 76 / 76(5 文件)
Skill-handlers + ipc-guard + bootstrap npx vitest run tests/unit/ai-engine/skill-handlers.test.js tests/unit/core/ipc-guard.test.js tests/unit/bootstrap/initializer-factory.test.js 285 / 285
Vue 组件 npx vitest run tests/unit/components tests/unit/core/core-components.test.ts 124 / 125(1 skip)
AI + core + multi-agent npx vitest run tests/unit/ai/skill-tool-ipc.test.js tests/unit/core tests/unit/ai-engine/multi-agent 411 / 413(2 skip)
Database + enterprise + did + knowledge npx vitest run tests/unit/database tests/unit/enterprise tests/unit/did tests/unit/knowledge 1456 / 1464(8 skip · 3 stderr 错误为预存测试脚手架问题)
shell-preview(组件 / 服务 / widgets) npx vitest run src/renderer/shell-preview 51 / 51
集成测试(mcp / canonical / coding-agent / planning-ipc / code-execution / file-ops 等 9 文件) npx vitest run tests/integration/... 98 / 104(6 skip)
Smoke build npm run build:renderer && npm run build:main ✅ 两端构建成功(renderer 6m28s)
Lint(含改动文件) npx eslint src/renderer/components/layout src/renderer/shell ... 0 errors(237 style warnings,全部 vue/max-attributes-per-line 类)
E2E 枚举 npx playwright test --list Playwright 枚举 1017 测试 / 163 文件;环境健康 80%

🟢 无回归 bug 溢出;详见 用户文档 changelog设计文档附录 C


2026-04-21 增量更新(Phase 3.3c 闭环 + Phase 3.4 软开关 + 回归扩面)

延续 2026-04-20 的 V6 预览壳 P9c 与 8 颗 V5→V6 探针,本轮把 Phase 3.3c 的 5 个 thin store 补齐单元测试、把 Phase 3.4 软开关//v2 opt-in)并入、并顺带修掉两个回归面暴露的遗留 bug。

环节 命令 结果
新增 store 单测(rag / wallet / git-hooks / workflow-designer / analytics-dashboard) npx vitest run src/renderer/stores/__tests__/{rag,wallet,git-hooks,workflow-designer,analytics-dashboard}.test.ts 83 例全绿(rag 12 · wallet 13 · git-hooks 14 · analytics 20 · workflow 24)
Store 全量回归 npx vitest run src/renderer/stores/__tests__/ 600 / 600 全绿 · 23 个文件 · 约 42s
插件扩展点集成测 npx vitest run tests/integration/plugin-extension-points.integration.test.js 13 / 13 全绿(5 原 MDM override + 8 Phase 3.2 探针)
Phase 3.4 路由守卫单测 npx vitest run src/renderer/router/__tests__/v6-shell-default.test.ts 9 / 9 全绿
类型检查 npx vue-tsc --noEmit 0 错误(修掉一个历史 electronAPI.config 未定义 drift)
E2E 结构健康检查 npm run test:e2e:check 66 / 66 结构正确 · 10 模块分组
E2E Playwright 全量 本轮未执行(需 Electron runtime 常驻进程,超出非 UI 回归范围)

本轮 bug 修复

  1. src/renderer/utils/logger.ts:121 — 用 Promise.resolve(result).catch(...) 包裹 IPC 返回,防御 invoke() 返回 undefined 时的 Cannot read properties of undefined (reading 'catch') 抛错。
  2. src/renderer/types/electron.d.ts — 补齐 ConfigAPI 类型定义,与 preload/index.js:367 早已暴露的 config.{get,set,update,...} 对齐,解决 main.ts:69 的 TS2339 drift。

Phase 3.3c 新增 store 索引(已在 commit 11b69d / 461d42 / c86bf4 / 4cf49ef / 8aec26 landed):

Store 对应 Panel 触发 IPC 前缀
stores/rag.ts shell/KnowledgeGraphPanel.vue rag:get-stats · rag:rebuild-index
stores/wallet.ts shell/WalletPanel.vue wallet:get-all · wallet:set-default
stores/git-hooks.ts shell/GitHooksPanel.vue git-hooks:run-pre-commit · run-impact · run-auto-fix · get-config · set-config · get-history · get-stats
stores/workflow-designer.ts shell/WorkflowDesignerPanel.vue workflow:list · workflow:create · workflow:get · workflow:save · workflow:execute · workflow:step:* 事件流
stores/analytics-dashboard.ts shell/AnalyticsDashboardPanel.vue analytics:get-dashboard-summary · get-time-series · get-top-n · export-{csv,json} · realtime-update 事件流

🟢 单测、集成、类型检查三关无 bug 溢出;两处遗留 drift 已修复;E2E 全量留待 UI 走查与手测阶段。详见 用户文档 §18.8设计文档 v0.6


2026-04-20 增量更新(桌面版 V6 · 发布前测试回归闭环)

在 P0–P9b 实现全部落地后,对 V6 Shell + /v6-preview 预览壳做了一轮完整回归,均在 Windows + Node 环境:

环节 命令 结果
单元测试(Shell + Preview + Stores) npx vitest run tests/unit/renderer/shell src/renderer/shell/__tests__ src/renderer/shell-preview/**/__tests__ src/renderer/stores/__tests__/theme-preview.test.ts src/renderer/stores/__tests__/conversation-preview.test.ts 92 / 92 全绿 · 9 个文件 · 25.97s
集成测试(扩展点 × MDM 覆盖) npx vitest run tests/integration/plugin-extension-points.integration.test.js 5 / 5 全绿 · 104ms
类型检查 npx vue-tsc --noEmit 0 错误
渲染进程构建 npx vite build 成功 · dist/renderer/index.html 已产出
E2Etests/e2e/v6-shell/admin-console.e2e.test.ts 跟随既有 describe.skip 约定(等 login() helper 预置 admin 权限后再开启)

🟢 单测、集成、类型、构建四关无 bug 溢出;本轮回归未触发任何代码修复。详见 用户文档 §18.7设计文档 v0.5


2026-04-20 增量更新(桌面版 V6 · P7 Claude-Desktop 风格外观预览)

在 P0–P6 基础上新增 /v6-preview 预览路由(与 /v2 并存,不替换),把桌面版外观向 Claude Desktop 对齐,并固化 4 颗差异化入口:

  • 4 主题src/renderer/shell-preview/themes.css 提供 dark / light / blue / green(从 web-panel theme.js 移植),通过 [data-theme-preview] 切换 + localStorage 持久化;store:src/renderer/stores/theme-preview.ts
  • 4 颗去中心化入口(左栏底部固化) — P2P 协作 / 去中心化交易 / 去中心化社交 / U-Key 安全,绑定到 P6 slash-dispatch 的 4 个 builtin:open* handler。
  • 三区骨架 — 左栏 ConversationList 会话历史 + DecentralEntries + 主题切换;中区留白气泡 + 极简 composer(Ctrl/Cmd+Enter 发送);右侧 ArtifactDrawer 从右滑入。
  • 测试stores/__tests__/theme-preview.test.ts(11 例)+ shell/__tests__/slash-dispatch.test.ts(8 例),共 19 例全部通过。
  • P8 接入(同日晚):4 颗入口点击不再是占位 toast,而是在右抽屉中挂载 shell-preview/widgets/{P2p,Trade,Social,UKey}PreviewWidget.vue 轻量预览卡,每卡含概览 + 2–3 按钮 router.push 到既有 /main/* 完整页(P2P 去 P2PMessaging / Trade 去 TradingHub / Social 去 Chat / UKey 去 ThresholdSecurity)。widget-registry.test.ts 新增 5 例。
  • P9a 持久化(同日晚):新增 stores/conversation-preview.ts Pinia store,把会话列表 + 消息 + 活跃 id 持久化到 localStorage(key cc.preview.conversations,带 version: 1 schema + 损坏/版本不匹配自动 re-seed);AppShellPreview.vue 完全由 store 驱动,重启壳自动恢复上次对话。13 条 store 单测全部通过,合计 37 例全绿
  • 详细计划docs/design/modules/97_桌面版UI_ClaudeDesktop重构计划.md

2026-04-20 增量更新(桌面版 V6 Chat-First Shell · P0–P6 完成)

Electron 桌面端 /v2 路由上线对话优先 + 插件化平台新壳,完整取代旧 dashboard,阶段 P0–P6 全部落地:

  • 三区布局 — 左 ShellSidebar(空间切换)/ 中 ConversationStream + ShellComposer/ 命令 + @ 引用)/ 右 ArtifactPanel + 底 ShellStatusBar
  • 扩展点 7 类 + 企业能力 5 类plugin.jsoncontributes.ui.* / contributes.provider.* 贡献,通过 ExtensionPointRegistry 按 priority 降序选出胜出者。
  • P6 分发器(本轮核心)— slash-dispatch.ts + widget-registry.ts 把 plugin 声明的 handler / component 字符串接上运行时行为,内置 builtin:openAdminConsole + builtin:AdminShortcut
  • AdminConsoleCtrl+Shift+A / /admin / 状态栏齿轮三路径都能打开(4 标签页:概览 / UI 扩展点 / 企业能力 / 调试),仅 admin 权限账户可见。
  • 企业定制三路径 — 私有 Registry(trustedPublicKeys 验签)/ .ccprofile(ed25519 + per-plugin sha256 签名包,一键换肤换能力)/ MDM 推送(启动时校验解包,高 priority 胜出)。
  • 13 个内置 first-party 插件chat-core / notes / spaces-personal / cowork-runner / brand-default / ai-ollama-default / auth-local / data-sqlite-default / crypto-ukey-default / compliance-default / admin-console / chain-gateway / did-core

测试:22 例单元+集成全部通过(slash-dispatch 7 / widget-registry 5 / AdminShortcut 2 / plugin-extension-points 5 / AppShell interaction 3);3 例 Playwright E2E 以 describe.skip 等 admin 权限 helper。渲染器 build 4m 52s 绿。

文档docs-site/docs/guide/desktop-v6-shell.md(用户指南) · docs/design/桌面版UI重构_设计文档.md(设计 v0.3 P0–P6 完成)


2026-04-19 增量更新(CLI 0.156.0 · V2 iter22-iter28 · 再推 72 个 lib 级治理表面)

在 iter16-iter21 的 64 个 lib 表面基础上再连续推 7 轮(iter22 → iter28),再下沉 72 个 lib 级治理表面,CLI 包升级到 0.156.0。iter22-iter26 各 8 个表面、iter27 与 iter28 各 16 个表面;全部严格沿用 4-state profile maturity × 5-state record lifecycle 双状态机骨架(auto-stale/suspend/pause/degrade/mute-idle + auto-fail-stuck),与 legacy 路径零耦合,并与既有 *-v2 前缀通过 preAction 钩子避让嵌套。

迭代 覆盖子系统(lib) 新 V2 测试 命令前缀
iter22 automation-engine / cowork-share / did-v2-manager / knowledge-exporter / knowledge-importer / llm-providers / pqc-manager / social-manager 8×44=352 cc automation augov-*-v2 cc cowork shgov-*-v2 cc did-v2 dv2gov-*-v2 cc export kexpgov-*-v2 cc import kimpgov-*-v2 cc llm llmgov-*-v2 cc pqc pqcgov-*-v2 cc social smgov-*-v2
iter23 response-cache / tech-learning-engine / universal-runtime / note-versioning / permanent-memory / protocol-fusion / dbevo / decentral-infra 8×44=352 cc rcache rcgov-*-v2 cc tech techgov-*-v2 cc runtime rtgov-*-v2 cc note ntgov-*-v2 cc permmem pmgov-*-v2 cc fusion pfgov-*-v2 cc dbevo dbevogov-*-v2 cc infra digov-*-v2
iter24 content-recommendation / mcp-registry / plugin-ecosystem / skill-loader / token-tracker / autonomous-developer / threat-intel / ueba 8×44=352 cc recommend rcmdgov-*-v2 cc mcp mcpgov-*-v2 cc ecosystem ecogov-*-v2 cc skill sklgov-*-v2 cc tokens toktgov-*-v2 cc dev devgov-*-v2 cc compliance tigov-*-v2 cc compliance uebgov-*-v2
iter25 cowork-task-templates / cowork-template-marketplace / cli-anything-bridge / agent-router / sub-agent-registry / todo-manager / execution-backend / evomap-federation 8×44=352 cc cowork cttgov-*-v2 cc cowork ctmgov-*-v2 cc cli-anything clibgov-*-v2 cc orchestrate argov-*-v2 cc agent saregov-*-v2 cc agent todogov-*-v2 cc agent ebgov-*-v2 cc evomap evfedgov-*-v2
iter26 interactive-planner / cli-context-engineering / sub-agent-context / interaction-adapter / workflow-expr / plugin-autodiscovery / hashline / web-ui-server 8×44=352 cc planmode plannergov-*-v2 cc cli-anything ctxenggov-*-v2 cc agent sactxgov-*-v2 cc chat iagov-*-v2 cc workflow wfexgov-*-v2 cc plugin padgov-*-v2 cc memory hlgov-*-v2 cc ui webuigov-*-v2
iter27 downloader / skill-mcp / cowork-mcp-tools / stix-parser / sub-agent-profiles / cowork-observe / process-manager / ws-chat-handler / evomap-client / provider-options / session-core-singletons / service-manager / cowork-evomap-adapter / provider-stream / cowork-observe-html / cowork-adapter 16×44=704 cc setup dlgov-*-v2 cc skill smcpgov-*-v2 cc cowork cmcpgov-*-v2 cc compliance stixgov-*-v2 cc agent sapgov-*-v2 cc cowork cobsgov-*-v2 cc start pmgrgov-*-v2 cc chat wscgov-*-v2 cc evomap evcligov-*-v2 cc llm poptgov-*-v2 cc config scsgov-*-v2 cc services smgrgov-*-v2 cc cowork ceadgov-*-v2 cc stream pstrmgov-*-v2 cc cowork cohtgov-*-v2 cc cowork cadpgov-*-v2
iter28 a2a-protocol / agent-coordinator / agent-economy / autonomous-agent / chat-core / compliance-manager / cross-chain / crypto-manager / dao-governance / evolution-system / evomap-manager / hierarchical-memory / inference-network / knowledge-graph / pipeline-orchestrator / plan-mode 16×44=704 cc a2a a2apgov-*-v2 cc orchestrate acrdgov-*-v2 cc economy aecogov-*-v2 cc agent autagov-*-v2 cc chat ccoregov-*-v2 cc compliance cmpmgov-*-v2 cc crosschain crchgov-*-v2 cc encrypt crygov-*-v2 cc dao daomgov-*-v2 cc evolution esysgov-*-v2 cc evomap emgrgov-*-v2 cc hmemory hmemgov-*-v2 cc inference infnetgov-*-v2 cc kg kggov-*-v2 cc pipeline pipogov-*-v2 cc planmode pmodegov-*-v2

iter22-iter28 累计:5 轮 × 8 + 2 轮 × 16 = 72 个 lib 级治理表面,共 72 × 44 = 3,168 新 V2 单测。与 iter16-iter21 合计 136 个表面 / ~5,984 V2 单测,全栈 V2 治理表面从 156+ → 228+

回归测试(2026-04-19, post iter28)

文件数 用例数 备注
CLI 单元 (iter28 新增) 16 704 / 704 a2a-protocol / agent-coordinator 等 16 个新 V2 表面
CLI 集成 40 696 / 696 与 0.151.0 持平
CLI E2E 38 565 / 565 与 0.151.0 持平
合计 (新增 + 复跑) 94 1,965 / 1,965 零回归

npmnpm i -g [email protected](别名 cc / clc / clchain

详情见 docs/design/modules/96_V2规范层governance.md §iter22-iter28。


2026-04-19 增量更新(CLI 0.151.0 · V2 iter16-iter21 · 64 个 lib 级治理表面)

继 0.142.0 的第九 / 第十批之后,CLI V2 规范层再连续推 6 轮(iter16-iter21),共下沉 64 个新 lib 级治理表面,CLI 包升级到 0.151.0(Tag v5.0.2.34)。所有表面统一遵循 4-state profile maturity × 5-state record lifecycle 双状态机骨架,配套 per-owner active cap、per-entity pending cap、auto-suspend-idle、auto-fail-stuck,与 legacy 路径零耦合

迭代 覆盖子系统(lib) 新 V2 测试 命令前缀
iter16 audit-logger / knowledge-graph / sandbox-v2 / sla-manager / stress-tester / terraform-manager / reputation-optimizer / skill-marketplace 8×44=352 cc audit aud-gov-*-v2 cc kg kgov-*-v2 cc sandbox sbox-gov-*-v2 cc sla slagov-*-v2 cc stress strgov-*-v2 cc terraform tfgov-*-v2 cc reputation repgov-*-v2 cc marketplace mktgov-*-v2
iter17 chat-core / claude-code-bridge / compliance-manager / cowork-learning / cowork-workflow / privacy-computing / token-incentive / hardening-manager 8×44=352 cc chat chatgov-*-v2 cc orchestrate ccbgov-*-v2 cc compliance cmgr-*-v2 cc cowork learn-*-v2 cc cowork cwwf-*-v2 cc privacy pcgov-*-v2 cc incentive incgov-*-v2 cc hardening hardgov-*-v2
iter18 aiops / multimodal / instinct-manager / tenant-saas / quantization / trust-security / nl-programming / perception 8×44=352 cc ops aiopsgov-*-v2 cc multimodal mmgov-*-v2 cc instinct instgov-*-v2 cc tenant tnsgov-*-v2 cc quantize qntgov-*-v2 cc trust trustgov-*-v2 cc nlprog nlpgov-*-v2 cc perception percgov-*-v2
iter19 code-agent / collaboration-governance / community-governance / did-manager / sso-manager / org-manager / scim-manager / sync-manager 8×44=352 cc codegen cdagov-*-v2 cc collab cogov-*-v2 cc governance commgov-*-v2 cc did didgov-*-v2 cc sso ssogov-*-v2 cc org orggov-*-v2 cc scim scimgov-*-v2 cc sync syncgov-*-v2
iter20 agent-network / browser-automation / dlp-engine / evomap-governance / federation-hardening / ipfs-storage / p2p-manager / wallet-manager 8×44=352 cc agent-network anetgov-*-v2 cc browse bagov-*-v2 cc dlp dlpgov-*-v2 cc evomap evgov-*-v2 cc federation fedgov-*-v2 cc ipfs ipfsgov-*-v2 cc p2p p2pgov-*-v2 cc wallet walgov-*-v2
iter21 activitypub-bridge / matrix-bridge / nostr-bridge / bi-engine / memory-manager / session-manager / hook-manager / workflow-engine 8×44=352 cc activitypub apgov-*-v2 cc matrix matgov-*-v2 cc nostr nosgov-*-v2 cc bi bigov-*-v2 cc memory memgov-*-v2 cc session sesgov-*-v2 cc hook hookgov-*-v2 cc workflow wfgov-*-v2

iter16-iter21 累计:6 轮 × 8 lib × 44 V2 测试 = 2,112 新 V2 单测(实际 2,816+,含 iter17-21 全 440),全栈 V2 治理表面从 92+ → 156+

回归测试(2026-04-19, post iter21)

文件数 用例数 备注
CLI 单元 332 14,255 / 14,255 含 92 个 *-v2.test.js(iter16-iter21 共 32 文件 × 44 = 1,408 新覆盖)
CLI 集成 40 696 / 696 与 0.142.0 持平
CLI E2E 38 565 / 565 与 0.142.0 持平
合计 410 15,516 / 15,516 零回归

npmnpm i -g [email protected](别名 cc / clc / clchain

详情见 docs/design/modules/96_V2规范层governance.md §iter16-iter21。


2026-04-19 增量更新(CLI 0.142.0 · V2 第九 + 第十批 · 30 个 lib 级治理表面)

在第八批 12 个 lib surface 基础上再推两批 V2 规范层:第九批收敛 session / 上下文 / 权限 / DI / 社交图谱 子系统(14 个 lib),第十批收敛 编排 / 自治 / 经济 / 进化 / 合规框架 / SIEM / 推理网络 / 低代码 子系统(16 个 lib)。CLI 包从 0.136.0 → 0.142.0(Tag v5.0.2.34)。所有 30 个表面严格沿用 4-state 成熟度 × 5-state 记录生命周期双状态机骨架,与 legacy 路径(SQLite 表 / 内存单例 / 传输层 / 协议层)零耦合。

30 个 V2 规范表面 — 第九批 14 个(全新 top-level 分派避让已有命令),第十批 16 个(多数 top-level,少数挂到现有命令加前缀):

批次 覆盖子系统(lib) 新 V2 测试 代表命令
第九批 slot-filler / web-fetch / memory-injection / session-search / session-tail / session-usage / session-hooks / mcp-scaffold / plan-mode / permission-engine / user-profile / social-graph / service-container / task-model-selector 521(10×37 + 39 + 38 + 2×37) cc slotfill cc webfetch cc meminj cc seshsearch cc seshtail cc seshu cc seshhook cc mcpscaf cc planmode cc perm cc uprof cc social sg-*-v2 cc svccont cc tms
第十批 orchestrator / perf-tuning / topic-classifier / iteration-budget / git-integration / cowork-task-runner / inference-network / content-recommender / app-builder / siem-exporter / autonomous-agent / compliance-framework-reporter / agent-economy / pipeline-orchestrator / evolution-system / hierarchical-memory 704(12×45 + 4×41) cc orchgov cc perf *-v2 cc topiccls cc itbudget cc git cc cowork runner-*-v2 cc inference cc recommend cr-*-v2 cc lowcode cc siem cc autoagent cc compliance fwrep-*-v2 cc economy cc pipeline cc evolution cc hmemory

每个表面均遵循 V2 统一骨架:双状态机 + per-owner active cap(pending→active 仅)+ per-entity pending cap(创建记录时强制)+ stamp-once activatedAt / startedAt + auto*V2 批处理 + _resetState*V2(测试隔离)。所有 V2 action 以 -v2 后缀分派,preAction hook 通过 actionCommand.name().endsWith("-v2") bypass legacy 引导。多个 top-level 以重名规避前缀(cc seshhook vs cc hookcc mcpscaf vs cc mcpcc autoagent vs cc agentcc runner-*-v2 vs Agent Coordinator、cc cr-*-v2 vs content-recommendation、cc sg-*-v2 vs social-manager、cc fwrep-*-v2 vs compliance V2)。

回归测试(2026-04-19)

文件数 用例数 耗时
CLI 单元 274 11718 / 11718 125s
CLI 集成 40 696 / 696 40s
CLI E2E 38 565 / 565 360s
合计 352 12979 / 12979 零回归

第九 + 第十批相较 0.136.0 累计新增 1225 个 V2 单元测试(521 + 704),总计 V2 治理表面从 62+ → 92+

npmnpm i -g [email protected](别名 cc / clc / clchain

详情见 docs/design/modules/96_V2规范层governance.md更新日志


2026-04-18 增量更新(CLI 0.136.0 · V2 第八批 · 12 个 lib 级治理表面)

第八批在 V2 governance 收口向 lib 模块(a2a-protocol / activitypub-bridge / bi-engine / browser-automation / cross-chain / dao-governance / dlp-engine / evomap-manager / matrix-bridge / nostr-bridge / session-consolidator / zkp-engine),同样沿用 4-state 成熟度 × 5-state 记录生命周期的双状态机骨架,独立于 Phase 88 / Phase 92 / Phase 95 等既有协议实现。CLI 包从 0.130.0 → 0.136.0(Tag v5.0.2.34)。

12 个 V2 规范表面(严格增量、纯内存 governance、与协议层零冲突):

lib 模块 Maturity / Record enum per-owner cap per-entity cap 自动批处理 V2 测试
a2a-protocol A2A_AGENT_MATURITY_V2 + A2A_MESSAGE_LIFECYCLE_V2 agent pending message autoRetireIdle + autoFailStuck 40
activitypub-bridge AP_ACTOR_MATURITY_V2 + AP_ACTIVITY_LIFECYCLE_V2 actor pending activity autoRetireIdle + autoFailStuck 39
bi-engine BI_DATASET_MATURITY_V2 + BI_QUERY_LIFECYCLE_V2 dataset pending query autoArchiveIdle + autoFailStuck 39
browser-automation BROWSE_SESSION_MATURITY_V2 + BROWSE_STEP_LIFECYCLE_V2 session pending step autoArchiveIdle + autoFailStuck 37
cross-chain CC_BRIDGE_MATURITY_V2 + CC_TRANSFER_LIFECYCLE_V2 bridge pending transfer autoDegradeIdle + autoFailStuck 40
dao-governance DAO_REALM_MATURITY_V2 + DAO_PROPOSAL_LIFECYCLE_V2 realm open proposal autoArchiveIdle + autoFailStuck 41
dlp-engine DLP_POLICY_MATURITY_V2 + DLP_INCIDENT_LIFECYCLE_V2 policy open incident autoDeprecateIdle + autoCloseStale 40
evomap-manager EVOMAP_HUB_MATURITY_V2 + EVOMAP_SUBMISSION_LIFECYCLE_V2 hub pending submission autoArchiveIdle + autoFailStuck 39
matrix-bridge MX_ROOM_MATURITY_V2 + MX_EVENT_LIFECYCLE_V2 room pending event autoArchiveIdle + autoFailStuck 37
nostr-bridge NOSTR_RELAY_MATURITY_V2 + NOSTR_EVENT_LIFECYCLE_V2 relay pending event autoDegradeIdle + autoFailStuck 39
session-consolidator CONSOL_PROFILE_MATURITY_V2 + CONSOL_JOB_LIFECYCLE_V2 profile pending job autoArchiveIdle + autoFailStuck 38
zkp-engine ZKP_CIRCUIT_MATURITY_V2 + ZKP_PROOF_LIFECYCLE_V2 circuit pending proof autoArchiveIdle + autoFailStuck 41

每个表面均遵循 V2 统一骨架:双状态机 + per-owner active cap(pending→active 仅)+ per-entity pending cap(创建记录时强制)+ stamp-once activatedAt / startedAt + auto*V2 批处理 + _resetState*V2(测试隔离)。所有 V2 action 以 -v2 后缀分派,preAction hook 通过 actionCommand.name().endsWith("-v2") bypass legacy 数据库引导。

回归测试(2026-04-18 晚)

文件数 用例数 耗时
CLI 单元 244 10493 / 10493 124s
CLI 集成 40 696 / 696 40s
CLI E2E 38 565 / 565 352s
合计 322 11754 / 11754 零回归

本批相较 0.130.0 累计新增 470 个 V2 单元测试(12 个 lib 模块之和)。

npmnpm i -g [email protected](别名 cc / clc / clchain

详情见 docs/design/modules/96_V2规范层governance.md更新日志


2026-04-18 增量更新(CLI 0.130.0 · V2 第七批 · 9 个编排管家)

在第六批 13 个运行时管家的基础上,把 V2 规范层推进到 9 个编排层模块:SSO / Workflow / Router / Hook / MCP / Coord / Sub-Agent / ExecBE / Todo。CLI 包从 0.123.0 → 0.130.0(Tag v5.0.2.34)。每个表面严格独立于 legacy SQLite / 传输层,保持 preAction bypass、双状态机、per-owner + per-entity caps 三层骨架。累计新增 345 个 V2 单元测试


2026-04-18 增量更新(CLI 0.130.0 · V2 第六批 · 13 个运行时管家)

第五批(0.106.0,collab + UEBA + threat-intel)当天晚些时候再推一轮,把 13 个运行时管家模块全部拉通 V2 规范表面。CLI 包从 0.106.0 → 0.130.0(Tag v5.0.2.10)。

13 个 V2 规范表面(严格增量、向后兼容,全部基于内存 governance 层,与遗留 SQLite/ 文件态独立):

模块 Maturity / Work-unit enum 人均 active cap 人均 pending cap 自动批处理
cc automation V2 AUTOMATION_MATURITY_V2 + EXECUTION_LIFECYCLE_V2 per-owner 20 per-flow 30 autoPause + autoCancel
cc instinct V2 PROFILE_MATURITY_V2 + OBSERVATION_LIFECYCLE_V2 per-user 5 per-profile 100 autoDormant + autoDiscard
cc memory V2 ENTRY_MATURITY_V2 + CONSOLIDATION_LIFECYCLE_V2 per-owner 200 per-owner 20 autoStale + autoSupersede
cc note V2 NOTE_MATURITY_V2 + REVISION_LIFECYCLE_V2 per-author 100 per-note 50 autoStale + autoDiscard
cc org V2 ORG_MATURITY_V2 + MEMBER_LIFECYCLE_V2 per-owner 10 per-org 500 autoSuspend + autoExpire
cc permmem V2(新命令组) PIN_MATURITY_V2 + RETENTION_JOB_LIFECYCLE_V2 per-owner 100 per-pin 10 autoDormant + autoCancel
cc rcache V2(新命令组) PROFILE_MATURITY_V2 + REFRESH_JOB_LIFECYCLE_V2 per-owner 25 per-profile 4 autoSuspend + autoFail
cc scim V2 IDENTITY_LIFECYCLE_V2 + SYNC_JOB_V2 per-tenant 5000 per-idp 50 autoSuspend + autoFail
cc session V2 CONVERSATION_MATURITY_V2 + TURN_LIFECYCLE_V2 per-user 20 per-session 100 autoIdle + autoFail
cc social V2 RELATIONSHIP_MATURITY_V2 + THREAD_LIFECYCLE_V2 per-user 1000 per-user 500 autoMute + autoArchive
cc sync V2 RESOURCE_MATURITY_V2 + SYNC_RUN_V2 per-owner 50 per-resource 20 autoPause + autoFail
cc tokens V2 BUDGET_MATURITY_V2 + USAGE_RECORD_LIFECYCLE_V2 per-owner 10 per-budget 10000 autoExhaust + autoCommit
cc wallet V2 WALLET_MATURITY_V2 + TX_LIFECYCLE_V2 per-user 10 per-wallet 100 autoFreeze + autoCancel

每个模块都遵循同一骨架:register*V2 / get*V2 / list*V2 / set*StatusV2 + 状态快捷设置器、per-owner active cap + per-container pending cap、stamp-once activatedAt / lifecycle 时间戳、auto* 批处理方法、get*StatsV2_resetState*V2(测试隔离)。cc rcache 与 legacy LRU cc tokens cache 并存不冲突。

回归测试(2026-04-18 晚)

文件数 用例数 耗时
CLI 单元 232 9219/9229(10 skipped) ~130s
CLI 集成 40 696/696 38s
CLI E2E 38 565/565 427s
Desktop 单元(core+database) 15 836/846(10 skipped) 141s
Desktop 单元(renderer stores) 16 486/486 25s
Desktop 单元(ai-engine sample) 3 265/346(81 skipped) 28s

本批相较 0.106.0 累计新增 560 个 V2 单元测试(automation 46 + instinct 48 + memory 47 + note 49 + org 43 + permanent-memory 46 + response-cache 46 + scim 39 + session 33 + social 34 + sync 39 + token-tracker 49 + wallet 41),零回归。

npmnpm i -g [email protected](别名 cc / clc / clchain


2026-04-18 增量更新(CLI 0.106.0 · V2 第五批 · collab + UEBA + threat-intel)

紧接昨日 0.104.0 的第四批 V2 增量,今日推进第五批:cc collab + cc compliance ueba + cc compliance threat-intel 三条命令族叠加 V2 规范表面。CLI 包从 0.104.0 → 0.106.0(Tag v5.0.2.10)。

3 个 V2 规范表面(严格增量、向后兼容):

  • cc collab V2:4-state Agent 成熟度 (provisional/active/suspended/retiredsuspended→active 恢复) + 5-state 提案生命周期 (draft/voting/approved/rejected/withdrawn,3 终态),per-realm active-agent cap = 10、per-proposer voting-proposal cap = 3,autoRetireIdleAgentsCgV2 + autoWithdrawStuckProposalsV2
  • cc compliance ueba V2:4-state baseline 成熟度 (draft/active/stale/archivedstale→active 恢复) + 5-state investigation 生命周期 (open/investigating/closed/dismissed/escalated,3 终态),per-owner active-baseline cap = 20、per-analyst open-investigation cap = 10(在 openInvestigationV2 创建时强制),autoMarkStaleBaselinesV2 + autoEscalateStuckInvestigationsV2
  • cc compliance threat-intel V2:4-state Feed 成熟度 (pending/trusted/deprecated/retireddeprecated→trusted 恢复) + 5-state Indicator 生命周期 (pending/active/expired/revoked/superseded,3 终态),per-owner active-feed cap = 15、per-feed active-indicator cap = 500,autoDeprecateIdleFeedsV2 + autoExpireStaleIndicatorsV2。V2 层叠加在 SQLite IoC catalog 之上,与遗留 importStixBundle/matchObservable 完全独立。

本批相较 0.104.0 累计新增 107 个 V2 单元测试(collab 37 + ueba 29 + threat-intel 41),零回归。


2026-04-17 增量更新(CLI 0.66.0 · 7 新 + 8 强化)

同日晚再推一轮,把并行会话落地的 7 个全新 CLI 命令组8 个现有命令的 V2 强化 合并发布到 [email protected](tag v5.0.2.34)。

7 个新命令组agent-network(Phase 24)· automation(Phase 96)· didv2(Phase 55)· perf(Phase 22)· pipeline(Phase 26)· ecosystem(Phase 64)· sso(Phase 14)· social graph(Phase 42 新增分析子命令)

8 个 V2 强化(严格增量,向后兼容):dao(Phase 92 二次投票 + 防环委托 + 时锁)· economy(Phase 85 状态通道 + NFT)· evolution(Phase 100 6 维能力 + 4 级诊断)· hmemory(Phase 83 4 层 + 概念语义搜索)· sandbox(Phase 87 5 级风险 + 自动隔离)· workflow(Phase 82 检查点 + 正则安全断点)· zkp(Phase 88 3 方案参数化证明)

回归测试(2026-04-17 晚)

文件数 用例数 耗时
CLI 单元 232 7618/7618 129s
CLI 集成 40 696/696 46s
CLI E2E 38 565/565 427s

本批相较 0.51.0 新增 536 个单元测试,全部通过;集成 / E2E 零回归。

npmnpm i -g [email protected](别名 cc / clc / clchain


2026-04-17 增量更新(npm 发布批次 · CLI 0.51.0)

延续本日早些时候的 CLI 端口批次,把 Phase 17 / 20 / 27 / 28 / 63 五个 Phase 合并到同一轮 npm 发布。

  • Phase 17 IPFS 去中心化存储cc ipfs node-start/add/get/pin/gc/set-quota/attach-knowledge,确定性 bafy CID + AES-256-GCM + 配额/GC + 知识库附件,64 tests
  • Phase 20 模型量化cc quantize,GGUF 14 级 + GPTQ 目录 + 作业生命周期(pending→running→completed/failed/cancelled)+ 进度追踪,48 tests
  • Phase 27 多模态协作cc mm session/stream/track/snapshot,CRDT 风格会话状态 + 5 模态/7 文档格式/6 输出格式参考目录,68 tests
  • Phase 28 自然语言编程cc nlprog classify/extract/detect-stack/translate/refine/convention-add/conventions/stats,启发式双语意图/实体/技术栈识别 + 翻译/惯例 CRUD,62 tests
  • Phase 63 统一应用运行时cc runtime,OS/容器/云环境能力检测 + 自适应资源分配策略 + 运行时统计,60 tests

npm 发布v5.0.2.31 / 0.48.0v5.0.2.32 / 0.49.0v5.0.2.33 / 0.51.0(三次独立 publish)。 npm i -g [email protected] 即可拿到本批全部能力。

回归测试(2026-04-17 本批)

文件数 用例数 耗时
CLI 单元 232 7082/7082 210s
CLI 集成 40 696/696 76s
CLI E2E 38 565/565 459s

用户文档:cli-ipfs · cli-quantize · cli-mm · cli-nlprog · cli-runtime 设计文档:17 IPFS 去中心化存储 · 27 多模态协作 · 63 统一应用运行时


2026-04-17 增量更新(CLI 端口收官 + 文档重构)

本轮聚焦 CLI 侧五大 Phase 的收口、测试回归和文档重构:

  • Phase 25 AIOpscc ops 异常检测 (Z-Score/IQR) + 事件生命周期 + playbook + postmortem,48 tests
  • Phase 58 联邦硬化cc federation 熔断器状态机 (closed/open/half_open) + 健康检查 + 连接池,59 tests
  • Phase 80 数据库演进cc dbevo 迁移 CRUD + 慢查询分析 + 索引建议,47 tests
  • Phase 84 多模态感知cc perception 记录/索引/跨模态查询 + 语音会话状态机,47 tests
  • Phase 86 代码生成 Agent 2.0cc codegen 生成追踪 + 5 条启发式安全规则 + 脚手架记录,38 tests

文档重构docs/CLI_COMMANDS_REFERENCE.md 由 54.8k → 4.4k 精简索引;完整命令清单拆到 docs/cli/ 6 个子文件 (core-phases / managed-agents / blockchain-enterprise / observability / platform / video),命令注释全量中文化 (~371 条)。新增 docs-site 页面 cli-federation.md / cli-perception.md + VitePress 侧栏。

回归测试结果 (2026-04-17)

文件数 用例数 耗时
CLI 单元 219 6010/6010 114s
CLI 集成 40 696/696 36s
CLI E2E 38 565/565 495s

E2E 运行期间 vitest-worker 触发一次 Timeout calling "onTaskUpdate" RPC 超时告警(vitest 长跑套件已知问题),不影响任何用例结论。

用户文档:docs-site/docs/chainlesschain/cli-federation · cli-perception · cli-codegen · cli-dbevo · cli-ops 设计文档:30 联邦强化 · 25 自治运维 · 45 数据库演进 · 49 多模态感知 · 51 代码生成 Agent 2.0


2026-04-16 增量更新(Managed Agents Phase A–J + J+ 全部完成 + Deep Agents Deploy Phase 1–5 全部完成)

对 Anthropic Claude Managed Agents + Deep Agents Deploy 做本地优先版本的运行时对标。新增共享包 @chainlesschain/session-core,把 Session / Trace / Team-Subagent / Scoped Memory / Approval Policy / Beta Flags / Stream Router / Service Envelope / MCP Policy / Sandbox Policy / Agent Bundle 抽到 CLI 与 Desktop 可共用的一层。

关键交付

  • session-core 21 个测试文件,452/452 tests — 涵盖 SessionHandle、SessionManager、MemoryStore、MemoryConsolidator、ApprovalGate、BetaFlags、StreamRouter、TraceStore、SharedTaskList、ServiceEnvelope、MCPPolicy、SandboxPolicy、AgentBundle、QualityGate
  • Hosted Session APIcc serve WS 网关 17 req/resp + 2 streaming 路由(stream.run + sessions.subscribe),统一 <type>.response 信封
  • CLI session/usage 命令cc session tail/usage/lifecycle/park/unpark/end、三端 (Ollama/OpenAI/Anthropic) 自动 token 记账
  • Desktop IPC 收口 — 21 IPC channels(session lifecycle + memory + beta + usage + subscribe),Pinia store + SessionCorePage Usage tab
  • Phase J — Hosted Tool ApprovalGate 合流_executeHostedToolevaluateToolCallWithApprovalGatecloseSession fire-and-forget _autoConsolidate(trace → MemoryStore),不破坏现有 Permission Gate / Plan Mode 行为
  • Phase J+ — Renderer/CLI 对称提示 + 防御latestApprovalDeniedEvent Pinia getter(按 payload.source === "approval-gate" 过滤)、AIChatPage.vue sticky alert + toast、policy=strict 时引导用户放宽 session policy;新增 Round 4 regression guard 锁定事件类型碰撞修复
  • Permission Gate × ApprovalGate ADR — 两层正交(capability vs policy)共存,91_Managed_Agents对标计划 第四节末已记录"完全替换 Permission Gate"决定为 won't-do
  • Desktop/CLI 对称持久化 — 共用 parked-sessions.json / memory-store.json / beta-flags.json / approval-policies.json
范围 通过
共享包 @chainlesschain/session-core (21 files) 452/452
CLI 单元 ws-session-core (25) + agent-core (95) + chat-core-usage (10) + session-* (22) + singletons (10) + agent-repl (41 + ApprovalGate hint) 203/203
CLI 集成 managed-agents + parity + shims + doc-creator 696/696
CLI E2E managed-agents + full e2e suite 562/562
Desktop session-core-ipc (23) + coding-agent-session-service (38) + tool-adapter (8) + sandbox-v2 (41) + coding-agent store (30) 140/140

用户文档:docs-site/docs/chainlesschain/managed-agents-parity 设计文档:docs/design/modules/91_Managed_Agents对标计划 | 92_Deep_Agents_Deploy


2026-04-15 增量更新(Open-Agents 对标补齐 — Phase 1–5 全部落地 + 140 测试)

packages/cli Agent Runtime 做 vercel-labs/open-agents(2025-12)的系统性对标补齐。既有优势(edit_file_hashed / git 工具 / FTS5 搜索 / 138 skills / sub-runtime-pool / 4 层记忆 / Hooks 三件套)保持不动,只补齐五个维度的空白:

  • Phase 1 — 3 个 agent 工具web_fetch(SSRF 默认拒绝私网 + markdown 输出)、todo_write(会话级存储 + 单 in_progress 约束)、ask_user_question(结构化提问暂停 agent)。AGENT_TOOLS 从 13 扩到 16
  • Phase 2 — Skill $ARGUMENTS:SKILL.md body 支持 $ARGUMENTS / $1..$N 占位符 + Skill directory: <abs> 自动前置
  • Phase 3 — Sub-agent Profiles:声明式 explorer / executor / design registry,spawn_sub_agent 契约新增 profile 字段,profile 提供 toolAllowlist + systemPrompt + maxIterations 默认
  • Phase 4 — prepareCall turn-scoped context:agent-core 每轮 LLM 调用前注入 transient system suffix(cwd/git branch@sha+dirty/sessionId/iteration),不污染持久化历史
  • Phase 5 — Provider-options 三层深合并mergeProviderOptions(provider, modelId, callOverrides) — defaults ← modelId 推断 ← callOverrides;undefined 显式擦除字段语义
范围 通过
单元 sub-agent-profiles / turn-context / provider-options / agent-core-prepare-call / todo-manager / web-fetch / skill-loader-arguments 95/95
集成 parity-open-agents-loop.test.js(chatFn mock + 每轮 suffix + todo/web_fetch 端到端) 4/4
E2E parity-open-agents.test.js(spawn CLI 真二进制 + 模块导入检查) 9/9
小计 3 层 108/108 新增,217/217 累计,0 回归

用户文档:docs-site/docs/design/modules/88-open-agents-parity 设计文档:docs/design/modules/88_OpenAgents对标补齐方案


2026-04-15 增量更新(Cowork Evolution v0.46.0 — F1–F9 九项演进全部落地 + 83 测试)

packages/cli 的 Cowork 多智能体协作系统做一轮端到端演进,把 2026-04-14 规划的 F1–F9 九项特性全部实现:

  • F3 模板市场 (cowork-template-marketplace.js) — 本地模板层(内置 10 + 用户自建),cowork template search|install|list|remove|publish
  • F4 定时调度 (cowork-cron.js) — 5 字段 POSIX cron,JSONL 持久化,cowork cron list|add|remove|enable|disable|run
  • F5 Android 远程技能 — 新增 pc-cowork-daily / pc-cowork-workflow REMOTE SKILL,手机通过 P2P 调用桌面,无需本地 LLM
  • F6 MCP 工具挂载 — 模板 mcpServers 字段声明式挂载 MCP,会话期间 mount/unmount
  • F7 Workflow DAG (cowork-workflow.js) — 依赖解析 + Kahn 拓扑排序 + 批次并行 + 占位符替换 + continueOnError 降级
  • F8 P2P 分享 (cowork-share.js) — canonical-JSON + SHA-256 校验包,模板/结果包导出导入
  • F9 历史学习 (cowork-learning.js) — token 重叠 × successRate 无 ML 推荐,失败归因
  • F1 Orchestrator 并行 + F2 Debate 评审 — 运行器扩展路径

新命令树:cowork {debate|compare|analyze|template|cron|workflow|share|learning|status}。全部 headless,_deps 注入模式保证可测,统一持久化到 .chainlesschain/cowork/*.jsonl

范围 通过
单元 cowork-learning.test.js / cowork-workflow.test.js / cowork-share.test.js 57/57
集成 cowork-evolution-workflow.test.js(mkdtemp 真 fs,覆盖 marketplace↔registry / share 往返 / learning 真 JSONL / workflow e2e / cron) 12/12
E2E cowork-evolution-commands.test.js(spawn CLI 真二进制,learning/workflow/share 全子命令 + 错误路径) 14/14
小计 3 个新模块 + 2 个测试文件 83/83

累计 cowork 测试 168(既有 template-marketplace 17 + cron 31 + task-runner 63 + 本次新增 57)。版本号 packages/cli/package.json 升到 0.46.0

用户文档:docs-site/docs/chainlesschain/cli-cowork 设计文档:docs-site/docs/design/modules/86-web-cowork(末尾「2026-04-15 Cowork Evolution」实施记录 + 「十一、未来演进」N1–N7 新规划)


2026-04-12 增量更新(文档-代码差距补全 — 7 项全部完成 + 166 测试)

对 84 个设计文档与实际代码进行全面比对,补全 7 处文档-代码差距,所有功能从 mock/占位符升级为真实实现:

  • Nostr WebSocket 真实连接: 替换 mock 对象为真实 ws WebSocket,完整 NIP-01 消息处理(EVENT/EOSE/OK/NOTICE),指数退避自动重连(1s→60s)
  • Low-Code Deploy 命令: 实现静态站点生成(index.html + app.js + style.css),支持 --output 指定输出目录,应用状态自动更新为 deployed
  • ZKP 真实证明逻辑: BN254 有限域(256-bit)上的 R1CS 约束系统 + Fiat-Shamir 启发式证明,替换 mock-a-/mock-b-/mock-c- 占位符,verifyProof() 实现真实验证
  • 隐私计算真实算法: FedAvg 加权梯度聚合 + Shamir 秘密共享(128-bit 素数域 + Lagrange 插值)+ Laplace 噪声差分隐私
  • 协作引擎好友可见性: 查询 friends 表检查双向好友关系,替换邀请检查 fallback
  • Filecoin 存储证明: PoRep/PoSt 证明验证 + SHA-256 承诺检查 + 交易续约 + 条件查询
  • TTS 模型自动下载: HTTPS 下载 + 重定向跟随 + 事件进度通知 + 断点检测
范围 通过
单元 zkp-engine / privacy-computing / filecoin-storage / nostr-bridge-ws / local-tts-client / app-builder / collab-engine 139/139
集成 crypto-privacy / filecoin-nostr / lowcode-deploy 17/17
E2E gap-fill-commands(CLI 端到端) 10/10
小计 10 文件 166/166

修改 9 个源文件,新增 10 个测试文件。同步更新用户文档(docs-site)和设计文档。

详细设计:docs/design/modules/85_文档代码差距补全.md

2026-04-12 增量更新(Hermes Agent 对标 — 6 Phase 全部落地)

对标 Nous Research Hermes Agent,系统性补齐 CLI Agent 的 6 项高影响力差距,全部向后兼容,纯 CLI 侧实现:

  • Phase 1 迭代预算IterationBudget 共享引用替换硬编码 MAX_ITERATIONS=15,默认 50,父子 Agent 共享同一实例,70%/90%/100% 三级渐进警告,CC_ITERATION_BUDGET 环境变量可配
  • Phase 2 跨会话 FTS 搜索:SQLite FTS5 虚拟表 session_fts/search <query> REPL 命令,search_sessions Agent 工具,SessionEnd 钩子自动索引,reindexAll() 回填
  • Phase 3 USER.md + 冻结提示词~/.chainlesschain/USER.md 持久用户画像(2000 字符上限 + AI 凝练),注入上下文工程 instinct/memory 之间,系统提示词会话级冻结不可变,/profile REPL 命令
  • Phase 4 零摩擦插件加载:扫描 ~/.chainlesschain/plugins/*.js,自动注入 tools/hooks/commands,DB 注册插件优先覆盖同名文件插件
  • Phase 5 Docker/SSH 执行后端ExecutionBackend 抽象层 + createBackend() 工厂,Local/Docker(exec+run)/SSH 三种后端,run_shell/run_code 透明路由
  • Phase 6 消息网关GatewayBase 会话管理 + 限流 + 响应分片,Telegram MarkdownV2 formatter,Discord 2000 字符分割 + codeBlock/quoteBlock 辅助

本轮测试矩阵:

范围 通过
单元 iteration-budget / session-search / user-profile / plugin-autodiscovery / execution-backend / gateway-base 206/206
集成 hermes-parity-workflow(6 Phase 跨模块协作) 25/25
E2E hermes-parity-commands(CLI 端到端全链路) 22/22
小计 8 文件 253/253

新增 8 个源文件(~1400 行),修改 9 个现有文件,新增 REPL 命令 /search/profile

详细设计:docs/design/modules/85_Hermes_Agent对标实施方案.md / 用户文档 / 英文设计文档

2026-04-09 增量更新(CLI Runtime 收口闭环 — Phase 7 Parity Harness)

CLI Runtime 收口路线图(docs/design/modules/82_CLI_Runtime收口路线图.md)Phase 0–7 全部落地,统一 Coding Agent envelope 协议 v1.0 在 CLI / Desktop / Web UI 三端达成字节级对齐:

  • 8 步 parity 测试矩阵全绿(91 tests):envelope 契约 / sequence tracker / legacy↔unified 双向映射 / WS server 透传 / JSONL session store / SubAgentContext worktree 隔离 / mock LLM provider / desktop bridge envelope parity
  • shim 明确标注src/lib/agent-core.js(26L) / src/lib/ws-server.js(16L) / src/lib/ws-agent-handler.js(12L) 全部降级为 @deprecated 薄 shim,canonical 实现收归 src/runtime/src/gateways/ws/
  • 新增测试packages/cli/__tests__/integration/parity-envelope-bridge.test.js(58 tests)覆盖 createCodingAgentEvent / CodingAgentSequenceTracker / wrapLegacyMessage / unwrapEnvelope 全路径
  • 收口完成定义 5 项准则全部达成:单一入口 · envelope 协议统一 · parity harness 全绿 · shim 迁移窗口标注 · 文档同步

详情见 82 路线图 §8 完成定义与 CHANGELOG.md Unreleased 段。

2026-04-09 增量更新(ADR Phase E — Canonical Workflow 智能路由收口)

继规范工作流 Phase A–D 之后,本轮把 ADR LIGHTWEIGHT_MULTI_AGENT_ORCHESTRATIONPhase E 智能路由 主线一次性落地:

  • Intake classifier (纯函数): desktop-app-vue/src/main/ai-engine/code-agent/intake-classifier.js — 输入 { request, scopePaths, fileHints, sessionId },输出 { decision: "ralph"|"team", confidence, complexity, scopeCount, boundaries, testHeavy, signals, reason, recommendedConcurrency, suggestedRoles }。支持 monorepo 边界检测 (desktop-app-vue/src/main / src/renderer / packages/cli / backend/* 等);多作用域 → $team,单作用域 → $ralph非强制门控 — 仅作为 routingHint 建议。
  • 持久化到 mode.json: SessionStateManager.setRoutingHint() 通过 _updateMode merge-write, $deep-interview 写入 intent.md 后自动落盘;hint 跨阶段存活 (ralplanapproveralph/team 都能读到)。classifier 抛错不会阻塞 happy path,routingHint 降级为 null
  • IPC 只读通道: workflow-session:classify-intake — Renderer 可在已有 session 上二次触发 classifier,自动从 tasks.jsonscopePaths 聚合作用域。
  • Renderer 可视化: CanonicalWorkflowPanel.vue 展示 routingHint (decision tag / complexity / confidence / scopeCount / recommendedConcurrency / reason / suggestedRoles); Pinia store useWorkflowSessionStore 新增 classifyIntake() action 和 lastClassification state。

本轮回归:

范围 通过
Main 单元 (classifier) intake-classifier.test.js 20/20
Main 单元 (IPC) workflow-session-ipc.test.js (含 classify-intake) 18/18
Main 单元 (handler) workflow-skills.test.js (含 routingHint 持久化 / 容错) 55/55
Renderer store 单元 workflow-session.test.ts (含 classifyIntake 3 用例) 13/13
Main 集成 coding-workflow.integration.test.js Phase E describe 10/10
E2E 集成 (handler → store) canonical-workflow-phase-e.integration.test.js 7/7
小计 6 套 123/123

关键设计:classifier 以 routingHint 非门控字段存在,_updateMode merge-write 让 hint 自动 跨阶段存活,loadFullState 直接返回完整 mode,IPC/Renderer 零改动即可消费。

详细设计:docs/design/modules/80_规范工作流系统.md / 81_轻量多Agent编排系统.md §10 Phase E / docs-site 镜像 / ADR: LIGHTWEIGHT_MULTI_AGENT_ORCHESTRATION_ADR.md

2026-04-08 增量更新 #2(Phase 5 持久化任务图 + 编排器)

继最小 Harness 之后,本轮把 Coding Agent 推进到 Phase 5 持久化任务图 + 编排器 主线,三层贯穿全部落地:

  • CLI runtimeagent-core 内置任务图模型(DAG 节点 + 状态机 + 拓扑序),session-protocol 新增 5 条消息 task-graph-create / task-graph-add-node / task-graph-update-node / task-graph-advance / task-graph-state,全部以统一信封返回;新增自动完成 / 失败传播 / becameReady 语义。
  • Desktop mainCodingAgentBridge 暴露 createTaskGraph / addTaskNode / updateTaskNode / advanceTaskGraph / getTaskGraph 5 个方法(自动拆封 9 类 task-graph.* 事件),CodingAgentSessionService 暴露领域 API,coding-agent-ipc-v3 新增 5 条 IPC 通道。
  • Rendererstores/coding-agent.ts 新增 taskGraphs: Record<sessionId, CodingAgentTaskGraph> 状态、currentSessionTaskGraph / currentSessionReadyTaskNodes getters、5 个 actions、9 类 lifecycle 事件订阅;TypeScript 严格模式下完全可用。

本轮回归(按层):

范围 通过
CLI 单元 agent-core / ws-agent-handler 109/109
CLI 集成 ws-session-workflow 52/52
CLI E2E coding-agent-envelope-roundtrip(含任务图全链路) 10/10
Desktop main 单元 coding-agent-bridge / coding-agent-ipc-v3 / coding-agent-session-service 96/96
Desktop 集成 coding-agent-lifecycle 24/24
Desktop E2E coding-agent-bridge-real-cli(真实 chainlesschain serve 子进程) 3/3
Renderer 单元 coding-agent store / AIChatPage 91/91
小计 7 套 385/385

修复的 bug:tests/integration/coding-agent-bridge-real-cli.test.jssession-created / session-list-result / result 三处类型断言为 v1.0 信封落地前的旧值,已对齐为 session.started / session.list / command.response

详细设计、协议、测试矩阵:docs/design/modules/79_Coding_Agent系统.md §12.5 / docs-site 镜像

2026-04-08 增量更新(Phase 5 最小 Harness + 真实 Interrupt)

在 v1.0 统一信封落地后,本轮把 Coding Agent 的 Phase 5 最小 Harness真实 interrupt 语义 主线收口:

  • 真实中断coding-agent:interrupt 不再是 close-session 别名。新增共享 packages/cli/src/lib/abort-utils.jsAbortError / throwIfAborted / isAbortError),CLI ws-agent-handler 在每个 turn 建立 AbortControlleragent-core / interaction-adapter 感知到 abort 后会立即释放 pending 审批 / 工具调用、发出 session.interrupted,session 本身仍保留可继续使用。
  • 最小 Harness 主线CodingAgentSessionService.getHarnessStatus() 聚合 sessions / worktrees / backgroundTasks,新增 list-background-tasks / get-background-task / get-background-task-history / stop-background-task 四条 IPC,Desktop main → bridge → IPC v3 → preload → renderer store → AIChatPage 全链路补齐。
  • Desktop Harness 面板AIChatPage.vue 新增 Coding Agent Harness 面板,展示会话 / worktree / 后台任务概览,支持 Refresh、View Details(详情 + 历史)、Stop Task。
  • AIChatPage 点分小写事件迁移:页面兼容共享 dot-case 事件协议,tool.call.* / assistant.final / approval.* 全部打通。

本轮定向回归结果:

  • interrupt 主线(CLI agent-core / ws-agent-handler / interaction-adapter / abort-utils):6 files, 175 passed
  • Phase 5 最小 harness(Desktop session-service / bridge / IPC v3 / renderer store / 集成):5 files, 84 passed
  • AIChatPage harness 面板 + dot-case 事件页面回归:tests/unit/pages/AIChatPage.test.js 69/69
  • CLI coding-agent-envelope-roundtrip E2E:7/7
  • CLI ws-session-workflow 集成:20/20

2026-04-08 文档对齐回归(修改文件全量定向)

类型 范围 通过
CLI 单元 agent-core / sub-agent-registry / ws-agent-handler 126/126
Desktop main 单元 coding-agent-bridge / coding-agent-ipc-v3 / coding-agent-session-service 77/77
Renderer 单元 coding-agent store / AIChatPage 81/81
CLI 集成 ws-session-workflow 32/32
Desktop 集成 coding-agent-lifecycle 18/18
CLI E2E coding-agent-envelope-roundtrip(真实 spawn chainlesschain serve + WS) 7/7
小计 6 套 341/341

无 bug 修复,全部测试一次通过。详细设计与 IPC 列表:docs/design/modules/79_Coding_Agent系统.md / 用户文档 docs-site/docs/chainlesschain/coding-agent.md

2026-04-08 文档补齐(Phase 5 扩展能力):用户文档 + 设计文档此前只覆盖最小 harness,本轮补齐 子代理委派 / review mode / patch preview / diff 总结 / 持久化任务图与编排器 四类 Phase 5 CLI 扩展能力的协议、事件、WS 消息与数据结构说明。详见 coding-agent.md "Phase 5 — 高阶 Harness"设计模块 79 §Phase 5 扩展能力详细设计

2026-04-06 增量更新

这轮不是只做版本号和测试数字同步,而是把前面几次落地的 Agent Runtime、Web Panel、协议与文档重新收束成一致状态,并补回被压短的入口说明。

本次已经完成并在代码中可用的能力包括:

  • Coding Agent 统一事件信封 v1.0 已在 CLI runtime / Desktop main / Web UI 三端落地:所有 WebSocket / IPC 响应共享 { version, eventId, type (点分小写), requestId, sessionId, source, payload } 外壳;Desktop CodingAgentBridge 实现拆封 + 双 awaitTypes 灰度迁移,Web UI 通过 web-ui-envelope.js 提供 31 条 UNIFIED_TO_LEGACY 映射 + 浏览器内联兼容。详见 docs/design/modules/79_Coding_Agent系统.md §5.7
  • 后台任务支持分页历史检索、任务详情摘要、重启恢复和多节点恢复策略基础能力。
  • Worktree 冲突处理支持文件级摘要、自动化解决候选项和 diff 预览入口。
  • 压缩观测支持时间窗口筛选,以及按 provider / model 维度切片统计。
  • 会话迁移支持目录级 dry-run 报告、迁移后抽样校验和失败重试。
  • JSONL_SESSION 已默认启用。
  • 后台任务完成后会通过 task:notification 实时通知 Web Panel。
  • Worktree 合并助手已支持 diff 预览和一键合并协议。
  • 压缩策略 A/B 测试已通过 featureVariant() 接入。

本轮与当前代码对齐的验证结果:

  • CLI 定向单元测试:130/130
  • CLI 定向集成测试:19/19
  • CLI ws-session-workflow 集成:19/19
  • CLI ws-runtime-events 单元(envelope v1.0 发射):16/16
  • CLI web-ui-envelope 单元(UNIFIED_TO_LEGACY + 浏览器内联源):28/28
  • CLI coding-agent-envelope-roundtrip E2E(真实 spawn chainlesschain serve + WebSocket):7/7
  • Web Panel 单元测试:523/523(含 v1.0 envelope 兼容 + 23 页面解析逻辑)
  • Web Panel 集成测试:40/40(web-ui-server + CLI 命令集成)
  • Web Panel E2E:12/12(WS 协议兼容)+ 46 SPA 路由 + 资源文件测试
  • Desktop Coding Agent 桥接全链路:94/94(含 9 个 v1.0 信封拆封新增用例)
  • Coding Agent 统一信封 v1.0 三端总测试:408/408
  • Web Panel 构建:通过
  • Docs Site 构建:通过

如果你是第一次进入仓库,建议按这个顺序阅读:

  1. 根 README 当前页,先了解整体能力、安装方式和版本演进。
  2. docs/design/README.md,看设计区入口和当前重构重点。
  3. docs/design/modules/77_Agent架构优化系统.md,看这轮能力扩展本身。
  4. docs/design/modules/78_CLI_Agent_Runtime重构实施计划.md,看 CLI Agent Runtime 分层重构进度。
  5. docs-site/docs/index.md,看面向用户的文档站入口。

如果你关心这轮最核心的实现主线,建议再重点看这 4 份:

这 4 份文档现在分别覆盖:

  • WS Gateway 与协议边界
  • chainlesschain ui 的启动链路与运行模式
  • Web Panel 的页面能力、store 和统一事件模型
  • CLI Agent Runtime 的阶段性重构计划、退出条件与风险控制

Version License Progress Node Electron Tests Skills Commands CLI npm

去中心化 · 隐私优先 · AI原生

一个完全去中心化的个人AI助手平台,整合知识库管理、社交网络和交易辅助三大核心功能。

English | 设计文档 | 详细功能


⭐ 历史快照 — v5.0.3.48 Evolution Edition (2026-05-12, snapshot 25 versions ago)

当前最新见文件顶部 [2026-05-20 收口] 章节 — Personal Data Hub Phase 4.5→13.7 + iOS keychain hotfix (v5.0.3.71/.72) + 后续 v5.0.3.73 Phase 10.2 集成/E2E 测试 + 1 AIChat registry-contract bug fix。Hub 测试 47/927 → 50/952 全绿。CLI 0.162.9 / Android 5.0.3.72 versionCode 503072.

下方 banner 与"最新更新"系列均为历史归档(按时间倒序,每条对应当时版本的具体内容),不代表当前状态。

历史归档 — v5.0.3.48 Evolution Edition (2026-05-12 · CLI 0.161.8 · Android 1.0.0 GA · 141 桌面技能 + 28 Android 技能 · 14,987+ 测试 · v5.0.3.48 Android M3 capture suite (5/5 code) + M4 收尾 + M7 GA flip(VoiceMode + CameraOCR + LocationTagger + SharePayloadFlusher + PushNotifier 五件齐落 · RemoteSkillRegistry method-level 元数据 · ApprovalUI 4-category 适配 · ProgressViewer 长时任务面板 · §8.3 alias 兼容窗口 · Android versionCode 37 → 100 / versionName 0.37.0 → 1.0.0 GA by commit ffe722162 · 187 新单测全绿 / Android 总单测 196+ → 383+ · v1.0 GA 仍待用户出场 4 项 M3 真机 / M4 D2 真机 / FCM 凭证 / M6 性能)· v5.0.3.47 verification release(build-android keystore fix VERIFIED at release.yml run #25632845952 · density splits 14→4 用户侧首落 · 4 Android assets 入 Release · outstanding ../ 全扫净)· Phase 3d 桌面 ↔ Android 双向同步全套(M2 → v1.2 共 12 commit · 5 ResourceType walker + tombstones + Room cursor + sync.* JSON-RPC handlers + DeviceManager + SyncCoordinator auto-trigger · gate 1-4 全部 Ed25519 真签真验)· Android 0.37.0 七件套(Volcengine SeedASR 语音 + APK 自更新 issue #21 + Splash 重做 + Claude coral 主题 + i18n 三地区 + 生物识别 + DID Key 屏)· e2e CI 静默回归洞收口(drop e2e-tests workflow JOB 级 continue-on-error: true)· V6 Chat-First 壳全量 + chat-panel-v5 Phase E 反向对齐 · MTC v0.11 联邦 + publisher_signature M-of-N strip-all-sigs 修正 · V2 规范层 220+ 治理表面 · B4 ASAR surgery Win 安装显著加速 (dev-box 190.9s 实测, NVMe + Defender OFF; HDD parity 未测) · B4 P2P 社交 audit-grade 闭环 §2.2.10–§2.2.24 15 节 · 安全硬化级联 HIGH 44→0 / MOD 4→0 / LOW 45→0 · cc ui llm.chat parity · 意图理解 opt-in 开关 · chatStream 真流式 · 意图卡片 Vue Proxy reactivity 修复)

最新更新 - cc ui llm.chat parity + 意图理解 opt-in 开关 + 真流式 + Vue Proxy 修复 (v5.0.3.45, 2026-05-09)

四条联动收口:(1) cc ui llm.chat WS topicf41c4b4e2)—— 桌面 web-shell 自 4eaf90137 就有 llm.chat,cc ui 从未注册过 → QuickAsk 60s 卡 Stream idle timeout。新增 packages/cli/src/gateways/ws/llm-chat-protocol.js,frame 协议跟桌面 llm-handlers.js 完全对齐;新增 llm-creds.js 共享解析(explicit options → session creds → VOLCENGINE_API_KEY 等环境变量),任何源没拿到都立即 ok:false 帧不再 60s 挂死;chat-intent-protocol 同步切到这个 helper,顺手修一个 latent bug:原代码 session.baseUrl || "http://localhost:11434" 在 session 没设 baseUrl 时硬编码到 ollama 地址,所有云 provider 在用户本地没起 ollama 时都会跑死。(2) 意图理解 opt-in 开关f41c4b4e2)—— Chat / Agent 项目/文件模式 header 加 <a-switch>默认关闭。原行为是 v5.0.3.43 起每条消息先调 LLM 提炼意图再走真发送 — LLM 慢/无 cred 时占位卡 90 秒;现在默认直发,需要意图卡片的用户手动打开开关(持久化到 localStorage cc.web-panel.chat.intentEnabled)。submitUserInput 第一行短路。桌面壳同享 SPA bundle,跟 cc ui 行为一致。(3) chatStream 真流式35f6e60ea)—— packages/cli/src/lib/chat-core.jschatStream 原本是 buffer 全部 token 后再循环 yield 的伪流式,消费者要等 LLM 整个回完才看到第一帧。改为 token queue + Promise waiter 模式:onToken push 后立刻 wake generator yield。Chat / Agent / QuickAsk / 意图理解 全部受益。(4) 意图占位卡片 Vue Proxy reactivity 修复a76e451e2)—— placeholder push 进 reactive messages[sessionId] 后被 wrap 成 Proxy,但本地 ref 仍指向 unwrap 之前 target → 后续 placeholder.metadata.X 直接改原对象绕过 Proxy set trap → 数据更新但不触发重渲染。修法:card = msgs[msgs.length - 1] push 后重新取 Proxy 引用。NPM: chainlesschain 0.161.5 → 0.161.6 → 0.161.7(0.161.6 已先于 productVersion 单独 publish 修复 hang;0.161.7 带 chatStream 真流式 + Vue Proxy 修复)。回归:CLI ws gateway 16/16 + chat-core 10/10 + web-panel chat-intent-flow 27/27。

最新更新 - LLM OCR + audit-ipc 覆盖 + chat-intent 90s 兜底 (v5.0.3.44, 2026-05-08)

一条 user-visible feature + 三条质量收口:(1) 截图 OCR LLM 引擎39b16e29f)—— Tesseract.js 中文识别准确度差,新增 engine 参数 auto/llm/tesseract 三态,auto 默认走火山豆包视觉,LLM 失败带标签自动降级 Tesseract;V5/V6 共享 dialog + web-panel dialog 各加 <a-select> + 三色 tag。(2) chat intent 90s wall-clock 兜底6cbd04c50)—— 慢 LLM dribble token 但不出 final frame 时占位卡无限转,AbortController + 90s 兜底。(3) compliance-ipc 死 handler 清理29006decf)—— typo 前缀 compliance-classify:* 无人调用,背后 service 还跟真路径不一样,直接删;同步暴露 (4) audit-ipc.js 首次单测覆盖b092673be)—— 18 channel + DI + 23 用例。回归:desktop 1477/1477 + CLI 17,455/17,455。

最新更新 - MTC publisher_signature M-of-N 修正 + 安全硬化级联 (v5.0.3.43, 2026-05-07)

修复一个会绕过 M-of-N 阈值的真实缺陷:producer + verifier 必须对称地把 _stripSigsForPublisher(landmark) 喂给 JCS(清零 publisher_signature.sig + 每个 snapshot 的 signature.sig + signatures[*].sig),仅清零 publisher_signature.sig 不够 — 否则篡改 M-of-N 中任一成员 sig 都会绕过阈值校验。Helper 抽到 @chainlesschain/core-mtc/publisher-signing 子路径,三处调用点(batch.js / landmark-cache.js / desktop governance-multisig.js)全部对齐。同步发版安全硬化级联(npm audit HIGH 44→0、MOD 4→0、LOW 45→0),8 次 sweep 干掉 hdkey + werift + speedtest-net,override serialize-javascript / tar / semver / undici / tmp / ip-address / dompurify / make-fetch-happen 等 transitive 漏洞,channel-manager DDL 加固,wrtc-compat 补 CVE-2024-29415。Updater 切到 notifier-only flow(4c1a5ac18 + e27592bb5),渲染端实时进度。回归全绿:desktop 1454/1454 + core-mtc 258/258 + CLI 17432/17432 + mtc-federation 集成 41/41。

最新更新 - B4 post-pack ASAR surgery (v5.0.3.39, 2026-05-07, issue #8)

Windows 安装显著加速。dev-box (NVMe SSD + Defender OFF) 实测 190.9s vs 1201s 旧 baseline (issue #6) = 6.3× 提速;HDD + Defender ON 默认环境严格 parity 数据未测issue #8 close comment 详述 methodology caveats)。v5.0.3.4-13 因 electron-builder 的 prod-dep walker 漏掉 call-bind-apply-helpers / side-channel-{list,map,weakmap} 4 个 transitive deps 改成 asar: false 兜底,代价是 NSIS 内 ~110k loose files × ~10ms = 旧 baseline 上 ~20 分钟安装地板。本版本(B4 plan,commit e11b46913)走第三条路:

  • scripts/asar-surgery.js:在 electron-builder afterPack 钩子里 extract → inject 4 个 walker-dropped 包到 staging top-level → @electron/asar.createPackageWithOptions 重打包,并保留 electron-builder 原始 unpackDir 决策。Build-time verification gate 检查 4 个包确实落在 top-level,缺一抛错。
  • scripts/build-win-with-deref.js:Win 包装 electron-builder --win,临时把 @chainlesschain/{core-mtc,session-core} workspace symlinks 替换成 verbatim 拷贝(asar packer 拒绝跨 app-root 符号链接),finally 用 'junction' 还原(Win 非 admin 不能创建 'dir' symlink)。
  • tests/unit/scripts/asar-surgery.test.js + build-win-with-deref.test.js:23 个单元 + 集成测试(真 fs + 真 @electron/asar 跑 fixture),过程中暴露并修掉一个真 bug:@electron/asar 有 module-level filesystemCache keyed by archive path,extractAll 后必须 asar.uncache(asarPath) 才能让 listPackage 读到 fresh header。

预期 Windows 安装数分钟(dev-box 190.9s 已验,HDD parity 未验)、安装包 ~300 MB 减重。Mac/Linux 通过 afterPack 同一路径自动获益。Refuted(不要再走):asarUnpack glob(issue #6)、extraResources to app.asar.unpacked/(v5.0.3.12)、4 包提为直接 dep(v5.0.3.6)。

最新更新 - 托盘"关于"产品版本 "—" 修复 (v5.0.3.33, 2026-05-06)

紧贴 v5.0.3.32 收尾后用户复测发现一处只在 packaged install 才暴露的边角小问题:

  • 托盘"关于"对话框产品版本永远显示 "—"(commit 461edf060):用户在 v5.0.3.32 安装版反馈托盘 → 关于显示 产品版本:—。根因 enhanced-tray-manager.js:317require("../../../../package.json") 读 monorepo 根的 productVersion,但 packaged install 里 enhanced-tray-manager.js 位于 app.asar/dist/main/system/,相对路径 ../../../.. 走出 app.asar 抵达 <install>/resources/,那里没有 package.json → require 必失败 → 永远 catch 走 "—"。dev 模式路径在 repo 内有效所以本机看不出来,是 v5.0.3.31 / v5.0.3.32 共有的历史遗留 packaging 路径问题。修复:build 时把 productVersion + appVersion 烧进 dist/main/build-info.jsonscripts/build-main.jscopyDir 完成后写入),showAboutDialog 优先读这个常量文件,老相对路径保留作为直接 import src 跑测试时的 fallback。

最新更新 - 桌面托盘修复收口 (v5.0.3.32, 2026-05-06)

紧贴 v5.0.3.31 解决托盘菜单主链路(tray:action 统一通道 + renderer listener)后,再修两处只在 packaged install 才暴露的边角:

  1. 托盘"检查更新"在打包版误报开发模式(commit 7e6605006)— enhanced-tray-manager.js:365 守的是 process.env.NODE_ENV === "production",但 Electron 打包后 NODE_ENV 默认 undefined,packaged install 走 fallback 分支并因此从未真正调用过 autoUpdater.checkForUpdates()。改判 (process.env.NODE_ENV === "production" || app.isPackaged)
  2. 首次启动未设密码状态下托盘菜单事件被丢弃(commit 2532774f5)— App.vue onMountedinitial-setup:get-status 返回 { completed: false } 时 early-return,跳过下方三个 IPC listener 注册。结果首次启动用户点托盘菜单,主进程把窗口 show + focus 后通过 IPC 派发,但 renderer 没人接。修复:把这三个 listener 提到早返之前。

最新更新 - vitest 4 升级 + 自动更新链路修复 (v5.0.3.31, 2026-05-05)

  • 桌面自动更新 + 托盘菜单全量修复(commit bc2e476bf):v5.0.3.30 用户反馈三个 packaged-install 问题同源——(1) 自动更新功能不工作、(2) 托盘"检查更新"点击无反应、(3) 托盘菜单大部分项点击无反应。修复:所有菜单项重新走 dispatchTrayAction 统一入口;auto-updater.js 实际接入 packaged 启动自检 + 4h 周期检查。
  • vitest 3.x → 4.1.5 全量升级(7 commits 57bb519fe..8ad5fb7e9):v3 时代两个 workaround 同时退役——issue #5 的 Windows Unit Tests continue-on-error + issue #4 的 mtc-federation-governance-cli poolMatchGlobs → threads:singleThread 路由。vitest 4 上游修了 birpc 60s onTaskUpdate 心跳硬编码;CLI testTimeout: 30s → 60s 给 subprocess-heavy 联邦治理 + 审计 e2e 场景留余量。最终 5/5 CI workflow 全绿。

最新更新 - 桌面图标 + 系统托盘 + 安装恢复力 (v5.0.3.30, 2026-05-05)

  • 桌面应用图标视觉占用率不足(commit f2c8fc22f):assets/icon.png master 圆形 logo 在 2451×2451 画布占比 ~52%。tools/regen-app-icon.js(sharp + png-to-ico)自动 trim 透明边、重建 7 层 .ico;新 master 1282×1282,水平占比 100% / 垂直 89%。BrowserWindow + setAppUserModelId + tray getIconPath() 候选路径同步接线。
  • 桌面主窗口最小化到系统托盘(commit d57759dc9):关闭按钮触发 hide() 而非 quit(),托盘图标常驻;右键菜单 Show / Quit。
  • 桌面 installer 瘦身 357 MB / 14k 文件(commit b2e1ff27d):electron-builder afterPack hook 过滤掉打不进生产的 devDep / 测试目录 / .bak 等无用文件。

最新更新 - Workspace 结构性重构 + ASAR 终战 (v5.0.3.22, 2026-05-04)

  • Workspace 重构:移除 desktop-app-vue from root workspaces(commit ad3e7d403):根本性修复 npm workspaces hoisting 陷阱 — 此前每次发版都因 call-bind-apply-helpers 等 transitive deps hoist 到根 node_modules/ 而触发 ASAR 缺包问题。这次直接把 desktop-app-vue 从 workspace 拆出,让它有独立 node_modules/,根治第二天发版翻车的可能性。
  • CLI 测试 sharding 替代 glob 批处理(commits 1c9db161b / 21a60f714 / b52c2f427):vitest --shard=k/n matrix 替代易翻车的 [a-m]/[n-z] glob 批处理;9 个 push/PR workflows 加 concurrency: cancel-in-progress
  • 删除 6 个 V5 死页面(commit 5066a718d):V6 Chat-First Shell 全量 port 完毕后清理 V5 残留;-8283 lines / +10 lines

完整更新日志见 docs-site/docs/changelog.md(涵盖 v5.0.3.1 → v5.0.3.32 全部条目)。


历史更新 - 合规与威胁情报补齐 (STIX 2.1 · UEBA · Framework Reporter, 2026-04-16)

基于设计文档 19_合规分类系统.md(v1.2)一次性补齐三项之前标记 "未完成" 的企业合规能力:

  • STIX 2.1 威胁情报:新模块 packages/cli/src/lib/stix-parser.js + threat-intel.js 解析标准 STIX 2.1 bundle,支持 9 种 observable 类型(ipv4-addr/domain-name/url/file:hashes.'SHA-256' 等),IoC 去重 + 持久化;CLI 新增 cc compliance threat-intel import|list|match|stats|remove(match 命中时 exit code = 2,便于 pipeline 使用)。
  • 自动合规报告compliance-framework-reporter.js 提供 SOC2 / ISO27001 / GDPR 模板化报告生成;CLI 新增 cc compliance frameworkscc compliance report <framework> --format md|html|json --output file
  • UEBA 行为分析ueba.js 实现基线学习 + Z-score 异常检测 + 实体画像 + 告警聚合;CLI 新增 cc compliance ueba baseline|detect|score|profile|alerts

测试(全部绿灯):stix-parser.test.js 22 + threat-intel.test.js 26 + compliance-framework-reporter.test.js 32 + ueba.test.js 30 = 110 新测试。

👉 用户指南:docs/guides/COMPLIANCE_THREAT_INTEL_GUIDE.md(含 STIX 导入、UEBA 基线、框架报告完整示例)。

最新更新 - 社交协议生态补齐 (Nostr NIP-04/09/25 · Matrix Threads/Spaces · ActivityPub C2S · Social Graph · Topic Classifier, 2026-04-16) 🆕

基于设计文档 95_社交协议生态补齐方案.md 一次性补齐 5 个去中心化社交协议模块,统一走 @chainlesschain/session-core/nostr-crypto(BIP-340 schnorr + bech32 真实实现):

  • Nostr 扩展 NIP 支持:NIP-04 加密 DM(x-only ECDH + AES-256-CBC + 每消息随机 IV)、NIP-09 删除请求(kind 5 + ["e", <id>] 墓碑)、NIP-25 反应(kind 7 + p tag)。CLI 新增 cc nostr dm|dm-decrypt|delete|react;Desktop main 同步落地 nostr-bridge.js / nostr-identity.js / nostr-bridge-ipc.js
  • Matrix Threads + Spacesm.thread(MSC3440)和 m.space/m.space.child 全新落地,CLI 新增 cc matrix thread send|list|rootscc matrix space create|add-child|children|listmatrix_threads / matrix_spaces / matrix_space_children 索引表。
  • ActivityPub C2S:新模块 activitypub-bridge.js 实现 Create/Follow/Accept/Undo/Like/Announce(W3C ActivityStreams 2.0),inbox 轮询 + outbox 队列化投递;CLI 新增 cc activitypub actor|publish|follow|accept|unfollow|like|announce|outbox|inbox|deliver|followers|followingap 别名)。
  • 社交图谱social-graph.js 内存态类型化有向图(follow/friend/like/mention/block),SQLite social_graph_edges 持久化 + 启动时重放,EventEmitter 实时流;CLI 新增 cc social graph add-edge|remove-edge|neighbors|snapshot|watchwatch 输出 NDJSON)。
  • 多语言话题分类topic-classifier.js zh/ja/en Unicode 语言检测 + 8 大话题词典(tech/finance/sports/food/travel/music/politics/health),CJK 字符级分词支持子串匹配;CLI 新增 cc social analyze|detect-lang

测试(全部绿灯):Desktop 侧 389(nostr-identity 21 + nostr-bridge-nips 345 + nostr-bridge-ipc 23)+ CLI 侧 126(social-graph 36 + topic-classifier 32 + activitypub-bridge 58)+ session-core nostr-crypto 21 + CLI 旧测回归 90 + 视频端到端烟雾 3 = 629 新/回归测试全绿

👉 用户指南:docs/guides/SOCIAL_PROTOCOLS_GUIDE.md(含密钥生成、NIP-04 DM、Matrix 线程、ActivityPub 投递、图谱事件流、话题分析完整示例)。

最新更新 - Managed Agents 对标 · CLI 持久化收口 (2026-04-16)

@chainlesschain/session-core 的 MemoryStore / ApprovalGate / BetaFlags 三条基础能力现已通过 CLI 全链路跨进程持久化(Phase D2/E1/E2 集成收口):

新命令

chainlesschain memory store "..." --scope global|session|agent [--scope-id ID]
chainlesschain memory recall "query" --scope ... --tags ... --json
chainlesschain session policy <id> [--set strict|trusted|autopilot] [--json]
chainlesschain config beta list|enable|disable <feature>-<YYYY-MM-DD>

Bug 修复:ApprovalGate 原本仅保留进程内 per-session policy,CLI session policy --set 设置后进程退出即丢失。新增 createApprovalGateFileAdapter 桥接 ~/.chainlesschain/approval-policies.json,跨进程可恢复。

持久化文件~/.chainlesschain/memory-store.json / beta-flags.json / approval-policies.json(原子写入 + 损坏文件自动回退空对象)。

测试:session-core 293 tests (+9)、CLI Managed Agents 19 tests(5 unit + 8 integration + 6 e2e)全绿。详见 命令文档 / 总览文档设计文档 v1.9。

最新更新 - v5.0.2.9 Polish Round (2026-04-15)

本轮联合落地 6 项优化,新增 145 测试(unit 131 + integration 11 + e2e 3)全绿,全部向后兼容:

  1. 会话钩子第四事件 AssistantResponse + UserPromptSubmit rewrite/abort — 钩子 stdout 返回 JSON {rewrittenPrompt} 改写当轮 prompt,或 {abort, reason} 跳过 LLM 调用
  2. Skill-Embedded MCP 上下文过滤buildOptimizedPrompt({ activeMcpServers }) 只把激活技能挂载的 MCP 服务器工具暴露给 LLM
  3. UnifiedToolRegistry 冷启动优化initialize({ deferSkills: true }) 立即返回,138 技能解析延迟到首次读 API 或 setImmediate 后台执行
  4. Vitest maxForks=2 OOM 防御 — 6 个核心包 vitest.config.js 统一限制并行度
  5. MCPClient.disconnect(name) 单服务器别名 — 配合 Skill-Embedded MCP mount/unmount 流程
  6. Category Routing 扩展 EMBEDDING / AUDIO — embedding 默认 ollama 优先(本地、免费),audio 默认 openai 优先(whisper/tts)

详见 docs/design/modules/89_v5.0.2.9_六项优化_设计说明.md更新日志

最新更新 - Agent 架构优化 (5 模块 + 4 增强 + 334 测试) ⭐

v5.0.2.9 借鉴 Claude Code 12 层渐进式 harness 架构,为 CLI Agent 新增 5 个核心优化模块 + 4 项增强集成:

5 个新模块

  • Feature Flags (feature-flags.js) — 6 个特性标志位,env > config > default 三级优先级,百分比灰度 A/B 分流
  • Prompt Compressor (prompt-compressor.js) — 5 策略上下文压缩流水线(去重/截断/摘要/SnipCompact/ContextCollapse),CJK token 估算
  • JSONL Session Store (jsonl-session-store.js) — 追加式会话持久化,崩溃恢复,会话分叉,compact 快照重建
  • Background Task Manager (background-task-manager.js) — 子进程 fork + IPC 心跳监控,并发限制,任务持久化
  • Worktree Isolator (worktree-isolator.js) — Git Worktree 隔离执行,agent/* 分支自动管理,崩溃后清理

4 项增强集成 (v5.0.2.9)

  • JSONL_SESSION 全面替换agent-repl.jssession.js 完整集成,创建/保存/恢复/列表均支持 JSONL 模式
  • Background Tasks UI — Web Panel 新增「后台任务」监控页面(Pinia store + Vue3 组件 + WS 协议)
  • Worktree + Sub-AgentSubAgentContext 集成 isolateTask(),子 Agent 自动在隔离 worktree 中执行
  • Context Compression 自适应 — 30+ 模型 context window 注册表 + adaptiveThresholds() + adaptToModel() 动态切换

新 CLI 命令

chainlesschain config features list              # 列出 6 个 Feature Flag 状态
chainlesschain config features enable CONTEXT_SNIP  # 启用特性
chainlesschain config features disable CONTEXT_SNIP # 禁用特性

Canonical Tool Descriptor 收口 (v5.0.2.9) ⭐:CLI runtime ↔ Desktop Main ↔ Renderer ↔ MCP 全链路使用同一份 inputSchema 为真源的工具描述 shape。parameters 退化为只读镜像,riskLevel / isReadOnly / availableInPlanMode 等权限字段成为 Permission Gate 与 Plan Mode 的唯一输入。详见 docs/design/modules/83_工具描述规范统一.md用户文档

技能域工具过滤 (v5.0.2.9)UnifiedToolRegistry.getToolsForLLM({ activeSkillNames, alwaysAvailable }) 支持按激活技能过滤暴露给 LLM 的工具集,缓解 138+ 技能导致的工具爆炸。向后完全兼容(旧调用无参数即保留全量行为)。详见 模块 83 第 14 节

CLAUDE.md 优化:从 32KB/724 行精简至 4.3KB/117 行,提取 6 个 path-scoped .claude/rules/ 规则文件 + @include 指令。

Bug 修复PromptCompressor.compress(null) 崩溃 → 安全返回空数组。

测试覆盖:334 个测试(255 单元 + 42 集成 + 37 E2E),12 个测试文件,全部通过。

技术债清理 - M2 启动期 IO 异步化 + IPC Registry 收官 (v0.45.55~61, 2026-04-08)

M2 任务收官:将启动关键路径上的同步 IO 全部转为 fs.promises,避免阻塞 Electron 主进程事件循环。共改造 11 个模块(unified-config-manager / ai-engine-config / tool-skill-mapper-config / mcp-config-loader / database-config / logger / git-auto-commit / project-config + 3 个 ai-engine-manager 变体),全部使用 _deps 注入模式以保持单元测试可 mock。同步 API 作为运行时快路径保留,启动路径调用 loadAsync() / prewarmXxx() / getXxxAsync()

IPC Registry 收官(v0.45.59~60):

  • 修复隐藏 ReferenceErroripc-registry.js 的 Phase 5 / Phase 9-15 deps 构造曾用 { mcpClientManager, mcpToolAdapter } 简写但顶部从未解构这两个标识符。一旦相关 phase 命中且 dependencies 缺失任一字段,整个 IPC 注册就会抛 ReferenceError。由于 ...dependencies 已经覆盖了它们,删除两处冗余引用,行为不变。
  • 清理死解构块:主文件顶部 30+ 行的 destructure(绝大多数项只解构出来又通过 ...dependencies 转发)压缩到只剩 5 个本文件直接引用的 manager (app / database / mainWindow / llmManager / aiEngineManager),其余通过 ...dependencies 透传。
  • 效果ipc-registry.js 由 495 行减至 446 行(−49 行),职责收敛到 "协调注册顺序 + 工具函数 + 全局守卫"。

关键 Bug 修复(v0.45.61):project-export-ipc.jsproject:import-file 处理器有 v0.45.13 引入的 copy-paste 死代码块,引用了 projectPathnormalizedProjectPath 两个未在该作用域定义的变量;只要进入该 handler 就抛 ReferenceError。彻底删除死块,改用 getActiveDatabase() 路径(与 export-file handler 一致)。同时补全 project-export-ipc.test.js 中 mockDatabase 的 getProjectById / getProjectFiles / db.get / db.run 接口,把原本静默失败的 3 个文件操作测试还原为真实断言。

测试覆盖:本轮全面回归通过 — IPC 模块 89/89、Git 192/192、Project 212/212(修复了 3 个 pre-existing 失败)、AI Engine 1987/1987、CLI 单元 3053/3053。

技术债清理 - H3 database.js 拆分 (v0.45.31~33, 2026-04-07)

desktop-app-vue/src/main/database.js(原 9470 行的巨型 DatabaseManager 类)按职责切分到 src/main/database/ 子目录。

文件 行数 说明
database/database-schema.js 4026 纯函数 createTables,全部建表 DDL(v0.45.31)
database/database-migrations.js 1389 8 个迁移/重建方法(v0.45.32)
database/database-settings.js 531 7 个 settings 表 CRUD 方法(v0.45.32)
database/database-knowledge.js 330 15 个 knowledge_items + tags + statistics 方法(v0.45.33)
database/database-soft-delete.js 212 7 个 soft-delete 与定期清理方法(v0.45.33)
database/database-graph.js 465 9 个知识图谱关系方法(v0.45.33)
database/database-projects.js 591 10 个 projects + project_files 方法(v0.45.33)
database/database-conversations.js 416 12 个 conversations + messages 方法(v0.45.33)
合计 (8 个子模块) 7960 69 个方法抽出

做法: 每个抽出的方法保持为纯函数 fn(dbManager, logger, ...args) 形式,通过 dbManager.db 访问连接、用 dbManager.X() 回调其他方法;DatabaseManager 中保留薄委托方法(return _fn(this, logger, ...)),保证公共 API 字节级不变。

效果: database.js 由 9470 行减至 2052 行−7418,−78.3%),剩余主要是 init/teardown、查询基元(run/get/all/exec/prepare/transaction)、备份/切库等核心机制。127 个数据库单元测试全部通过(database.test.js 22 + database-edge-cases.test.js 37 + database-migration.test.js 68)。

详见 docs/design/modules/43_IPC域分割与懒加载系统.md 第九节(H2 上下文)。

技术债清理 - H2 IPC Registry 拆分 (v0.45.30, 2026-04-07)

desktop-app-vue/src/main/ipc/ipc-registry.js 后半段独立的 Phase 注册块抽出到 src/main/ipc/phases/ 子目录,按版本/批次分组。

文件 行数 Phase 数 涵盖内容
phases/phase-1-ai.js 393 1 LLM, PermanentMemory, Hooks, Plan/Skills, Context Eng, Token/Stream, Team Task, Permission, RAG, Browser (22 regs)
phases/phase-2-core.js 135 1 U-Key, Database, Git + critical early IPC (MCP basic config, System early, Notification early) — 6 regs
phases/phase-6-7-content.js 197 2 File, Office, Template, Knowledge, Prompt Template, Image (Phase 6) + Speech, Video, PDF, Document (Phase 7)
phases/phase-8-9-extras.js 357 2 Blockchain (lazy), Code/Review, Collaboration/Automation, KG/Credit, Plugin (lazy), Import, Sync/Pref/Conv, FileSync, Config, Category, Workflow
phases/phase-3-4-social.js 306 2 DID, P2P, Social (8 sub-modules), VC, Identity Context, Org, Dashboard
phases/phase-5-project.js 170 1 Project Core/AI/Export/RAG/Git (5 sub-modules, 91 handlers)
phases/phase-9-15-core.js 259 7 Cowork, Workflow Optimizations, Audit, Marketplace, Agents, SSO, UnifiedTools
phases/phase-16-20-skill-evo.js 494 5 Skill Pipeline/Workflow, Instinct, Cowork v2 Cross-device, ML Sched/LB/CICD/Docs, Self-Evolution
phases/phase-21-30-enterprise.js 295 10 Enterprise Org, IPFS, Analytics, Autonomous, AutoTuner, Multimodal, Skill Marketplace, Trading, DeFi, Crypto
phases/phase-31-ai-models.js 261 7 Benchmark, MemAug, DualModel, Quant, FineTune, Whisper, FedLearn
phases/phase-33-40-collab-ops.js 553 8 Git P2P, Yjs Collab, Pipeline, Anomaly, NL Spec, Multimodal, Wire-up, Decentralized Network
phases/phase-41-evomap-gep.js 102 1 EvoMap GEP Protocol
phases/phase-42-50-v1-1.js 450 9 Social/AP, Compliance, SCIM, U-Key/FIDO2, BLE, Nostr, DLP
phases/phase-51-57-v1-1.js 268 7 SIEM, PQC, Firmware OTA, Governance, Matrix, Terraform, Hardening
phases/phase-58-77-v2-v3.js 757 20 Federation, Reputation, Inference, Trust Root, Storage, EvoMap
phases/phase-q1-2027.js 89 5 WebAuthn, ZKP, FL, IPFS Cluster, GraphQL

效果ipc-registry.js 由 4925 行减至 493 行(−4432,−90.0%),共抽出 16 个 Phase 模块、88 个 Phase。phase-modules.test.js 累计 48 个契约测试全部通过。

详见 docs/design/modules/43_IPC域分割与懒加载系统.md 第九节。

历史更新 - Web 管理面板 15 模块 + v1.0 协议修复 (v5.0.2.11)

v5.0.2.11 将 Web 管理面板从 10 个模块扩展到 15 个模块,修复 v1.0 Coding Agent Envelope 协议兼容性问题,并新增从 Desktop 迁移的 4 个高级管理页面:

v1.0 Envelope 协议修复

  • ws.jsrequestId 优先关联 + flattenEnvelope() payload 合并 + normalizeRuntimeEvent() dot-case 支持
  • chat.jsDOT_TO_LEGACY_TYPE 映射(assistant.deltaresponse-token 等)
  • agent-runtime.jsstartServer() 加载 config 传给 sessionManager

新增 5 个功能页面

  • 🔒 安全中心 (Security) — DID 身份管理、文件加解密、审计日志
  • 📡 P2P 网络 (P2P) — 设备列表、配对、消息发送、同步状态
  • 🔀 Git 与数据 (Git) — 仓库状态、自动提交、导入导出
  • 📁 项目管理 (Projects) — 6 模板初始化、状态卡片、环境诊断
  • 后台任务 (Tasks) — 任务列表/详情/历史/通知

Providers 增强:新增 LLM 参数设置面板(provider/model/apiKey/baseUrl/temperature/maxTokens)

测试覆盖:Web Panel 测试总数达 266+(218 单元 + 12 集成 + 12 E2E + SPA 路由测试)

历史更新 - Web Panel 23 模块企业扩展 (v5.0.2.12)

v5.0.2.12 将 Web Panel 从 15 个模块扩展到 23 个模块,新增企业级与扩展功能:

批次一(企业)

  • 💰 钱包管理 (Wallet) — 钱包列表/资产管理/转账历史
  • 🏢 组织管理 (Organization) — 组织列表/成员管理/团队/审批
  • 📊 使用分析 (Analytics) — Token 用量/成本统计/缓存状态
  • 📋 模板中心 (Templates) — 9 项目模板/BI 模板/Prompt 模板

批次二(扩展)

  • 🔐 权限管理 (Permissions) — RBAC 角色/权限检查/审计日志
  • 📰 RSS 订阅 (RssFeed) — 订阅源管理/文章阅读/统计
  • 💾 备份恢复 (Backup) — 备份管理/数据同步/IPFS 存储
  • 🔑 身份认证 (WebAuthn) — WebAuthn 凭证/SSO 配置/双因素认证

侧边栏:从 4 组扩展到 7 组(概览/配置/数据/高级/企业/扩展)

测试覆盖:Web Panel 测试总数达 621(523 单元 + 40 集成 + 58 E2E)

历史更新 - Web 管理面板 10 模块 + 4 主题

v5.0.2.8 对 Vue3 Web 管理面板进行全面扩展,新增 6 个功能模块并引入 4 种颜色主题:

新增 6 个功能页面

  • 🐳 服务状态 (Services) — Docker 服务启停、端口状态监控
  • 📋 运行日志 (Logs) — 多色行分类实时日志,支持关键字过滤
  • 📝 笔记管理 (Notes) — 笔记列表、搜索、新建、删除
  • 🔧 MCP 工具 (McpTools) — MCP 服务器与工具列表
  • 🧠 记忆系统 (Memory) — 三层记忆统计与条目浏览
  • 定时任务 (Cron) — 定时任务列表与启用/禁用控制

4 种颜色主题(顶栏右上角一键切换,localStorage 持久化):

🌑 深色 (默认) ☀️ 浅色 🌊 海蓝 🌿 绿野
深灰背景 白色背景 深蓝背景 深绿背景

关键 Bug 修复

  • 技能列表始终显示 0:WS 服务端发 stdout 字段,客户端读 output(undefined)→ 已修复
  • Provider 列表不含火山引擎等国产模型 → 按 CLI 实际键名重写为 10 个 Provider
  • 5 处中文字符 U+FFFD 乱码 → 全部修复

测试:新增 29 个 Web Panel 单元测试(theme.test.js 17 个 + ws-store.test.js 12 个),Web Panel 测试总数达 157 个。

chainlesschain ui                              # 启动面板(内置,无需构建)
chainlesschain ui --port 9000 --ws-port 9001  # 自定义端口
chainlesschain ui --web-panel-dir /custom/dist # 指定 dist 目录

v5.0.2.7 更新(Skill Creator v1.2.0):查看详情

历史更新 - Skill Creator v1.2.0:LLM 驱动描述优化循环

v5.0.2.7 升级内置 skill-creator 至 v1.2.0,新增 LLM 驱动的技能描述优化功能:

optimize-description 动作

  • LLM 自动生成 20 条 eval 查询(10 个应触发 / 10 个不应触发)
  • 60/40 train/test 分割,防止描述过拟合
  • 迭代优化:评估训练集失败项 → LLM 改写描述 → 测试集评分 → 取最优
  • 自动写回 SKILL.md(仅在有改进时),并保存完整结果到 .opt-workspace/results.json
  • LLM 不可用时优雅降级,返回带提示信息的错误响应
# LLM 驱动优化(需要 chainlesschain ask 可用)
chainlesschain skill run skill-creator "optimize-description code-review"
chainlesschain skill run skill-creator "optimize-description code-review --iterations 3"

# 等效的 --advanced 标志
chainlesschain skill run skill-creator "optimize code-review --advanced"

测试覆盖:76 个测试(50 单元 + 12 集成 + 14 E2E),全部通过。

v5.0.2.6 更新(Vue3 管理面板 npm 打包 + Bug 修复):

v5.0.2.6 对 Web 管理面板进行了两项关键改进:

1. npm 安装用户无需手动构建

  • prepublishOnly 钩子在发布前自动构建并打包 Vue3 面板到 src/assets/web-panel/
  • findWebPanelDist() 三路查找:自定义目录 → 源码树 dist/ → npm 包内置
  • npm 安装用户直接运行 chainlesschain ui,无需执行任何构建命令

2. $ 特殊字符 Bug 修复

  • projectRoot="/path/$HOME" 等含 $&/$'/$$ 的路径不再损坏注入的 config JSON
  • 根因:String.prototype.replace(str, replacement)$& 解释为"匹配的字符串";改用函数形式 replace(str, () => val) 修复

v5.0.2.5 新增功能(Vue3 管理面板首发):

  • 仪表板 — 服务状态卡片(WebSocket / 活跃 LLM / 技能数量 / 会话数)
  • AI 对话 — Chat/Agent 双模式,流式 Markdown 渲染,工具调用可视化,交互式问答
  • 技能管理 — 138+ 技能分类浏览、搜索过滤、一键运行
  • LLM 配置 — 10 个 Provider 管理,一键切换,连接测试,Ollama 本地模型列表
  • 项目/全局双模式区分 — 项目级会话绑定项目路径,视觉上清晰区分(蓝色 vs 紫色横幅)
  • 自动降级 — dist/ 不存在时自动回退到内嵌经典 HTML
  • 147 个测试 — 66 单元 + 51 集成 + 30 E2E,全部通过
# npm 安装用户(无需构建,开箱即用)
npm install -g chainlesschain
chainlesschain ui   # 直接使用内置 Vue3 面板

# 源码用户(首次使用或代码更新后)
npm run build:web-panel

# 项目级面板(在含 .chainlesschain/ 的目录下运行)
cd /your/project && chainlesschain ui

# 全局面板
chainlesschain ui

# 自定义选项
chainlesschain ui --port 9000 --ws-port 9001
chainlesschain ui --token mysecret
chainlesschain ui --web-panel-dir /custom/dist   # 指定 dist 目录

# 热更新开发模式
npm run dev:web-panel

访问 http://127.0.0.1:18810 打开管理面板。


历史更新 - AI 编排层系统 ⭐

cc orchestrate 让 ChainlessChain 成为编排层,Claude Code / Codex 作为并行执行代理:

  • LLM 任务分解 — 一个高级任务自动拆分为多个并行子任务
  • 多路 Agent 路由 — 同时支持 claude/codex/gemini/openai/ollama 后端,5 种路由策略(round-robin / primary / parallel-all / by-type / 加权轮询)
  • CI/CD 自动验证 — Agent 执行完成后自动运行 CI,失败则携带错误上下文重试
  • 多渠道通知 — Telegram、企业微信、钉钉、飞书、WebSocket 同时推送任务进度
  • 接收 IM 指令 — 通过 --webhook 模式从企业微信/钉钉/飞书接收指令触发编排
  • WebSocket 集成 — 通过 WS 触发任务,进度事件实时推送回同一 WS 客户端
  • 106 个测试 — 72 单元 + 15 集成 + 19 E2E,全部通过
cc orchestrate "Fix the auth bug in login.ts"                      # 自动检测 AI 工具并执行
cc orchestrate "Refactor payment" --backends claude,gemini --strategy parallel-all
cc orchestrate "Add tests" --ci "npm run test:unit" --retries 5   # 自定义 CI + 重试
cc orchestrate --status --json                                     # 查看状态(JSON)
cc orchestrate detect                                               # 检测已安装的 AI CLI
cc orchestrate --webhook --webhook-port 18820                      # 启动 IM 指令接收服务器

历史更新 - Web 管理界面协议修复 ⭐

chainlesschain ui 一条命令启动本地 Web 管理页面,支持项目专属模式和全局管理模式:

  • 项目模式 — 从含 .chainlesschain/ 的目录运行,AI 自动携带项目上下文
  • 全局模式 — 从任意目录运行,打开全局管理面板
  • 流式 Markdown 输出 — AI 回复实时 token 流式渲染(response-token),代码块语法高亮
  • Agent 工具可见性 — Agent 调用工具时实时显示工具名和参数(tool-executing 事件)
  • 会话管理 — 侧边栏会话列表,支持新建/切换/历史记录,Agent/Chat 模式 Tab 切换
  • 交互式问答 — Agent slot-filling 提问时弹出对话框
  • WebSocket 复用 — 自动启动内置 WS 服务器,浏览器直连,支持 token 认证
  • 103 个测试 — 47 单元 + 32 集成 + 24 E2E,全部通过
  • 🐛 修复 5 处 WS 协议不匹配 — 对话/认证/会话列表/流式输出均可正常工作
cd /your/project && chainlesschain ui         # 项目模式(自动检测)
chainlesschain ui                              # 全局模式(非项目目录)
chainlesschain ui --port 9000 --ws-port 9001  # 自定义端口
chainlesschain ui --token mysecret            # 启用认证
chainlesschain ui --no-open                   # 仅启动服务器

访问 http://127.0.0.1:18810 即可开始对话。


历史更新 - AI 文档创作模板 ⭐

cc init --template ai-doc-creator 一条命令配置完整的 AI 文档创作工作区,自动生成 3 个文档技能:

  • AI 文档生成 (doc-generate) — AI 生成结构化文档(报告/方案/说明书/README),4 种风格,支持 md/html/docx/pdf 多格式输出,pandoc/LibreOffice 双路径转换
  • LibreOffice 格式转换 (libre-convert) — 无头模式格式转换(docx/pdf/html/odt/pptx 等),自动检测 PATH 和 Windows 默认安装路径
  • AI 文档修改 (doc-edit) — AI修改现有文档,保留公式/图表/样式,三种操作模式(edit/summarize/translate),输出 _edited 文件不覆盖原文件
  • Persona 配置 — "AI文档助手"角色,擅长规划文档结构、批量生成和格式转换工作流
  • cli-anything 集成边界rules.md 明确说明:LibreOffice 同时适合 workspace 技能(日常转换)和 cli-anything register soffice(高级宏/模板功能)
  • 168 个新增测试 — 70 单元 + 47 集成 + 51 E2E,全部通过
chainlesschain init --template ai-doc-creator --yes
winget install pandoc                                             # DOCX 输出(可选)
chainlesschain skill run doc-generate "2026年AI技术趋势分析报告"  # 生成报告
chainlesschain skill run doc-generate "产品方案" --args '{"format":"docx","style":"proposal"}'
chainlesschain skill run libre-convert "report.docx"              # 转换为 PDF
chainlesschain skill run doc-edit --args '{"input_file":"report.md","instruction":"优化摘要"}'
chainlesschain cli-anything register soffice                      # 注册 LibreOffice 高级功能

最新更新 - AI 视频生成 (Volcengine Seedance)

桌面端接入火山方舟 Seedance 文生视频 API,通过 window.api.video.generate({prompt, outputPath, ratio, duration, imageUrl}) 生成真实 AI 视频:

  • Seedance 全模型支持doubao-seedance-1.0-lite / 1.5-pro / pixeldance,支持文生视频与首帧图驱动
  • 流式进度事件video:generate:progress 上报 task-created / status-update / downloading / complete
  • 轮询容错 — 5s 间隔、10 分钟超时,自动区分 queued / running / succeeded / failed
  • 15 测试全绿 — 9 单元 + 4 集成 + 2 全链路,全部使用 mock 避免真实计费
  • 📖 使用文档 docs-site/docs/chainlesschain/ai-video-generation.md
  • 📖 架构设计 docs/design/modules/90_AI视频生成_Volcengine_Seedance.md

历史更新 - AI 音视频创作模板

cc init --template ai-media-creator 一条命令配置完整的 AI 音视频创作工作区,自动生成 3 个媒体技能:

  • ComfyUI 图像生成 (comfyui-image) — 直接调用本地 ComfyUI REST API,支持文生图/图生图,内置默认 SD 工作流,支持自定义 workflow JSON
  • ComfyUI 视频生成 (comfyui-video) — 通过 AnimateDiff 节点生成动画视频,支持加载用户保存的工作流文件
  • AI 语音合成 (audio-gen) — 4 后端自动降级链:edge-tts(免费)→ piper-tts(离线)→ ElevenLabs API → OpenAI TTS
  • Persona 配置 — "AI创作助手"角色,熟悉 Stable Diffusion 提示词工程和 AnimateDiff 参数调优
  • cli-anything 集成边界rules.md 明确说明:ComfyUI(REST API)用 workspace 技能,FFmpeg/yt-dlp(CLI)用 cli-anything register
  • 114 个新增测试 — 40 单元 + 33 集成 + 41 E2E,全部通过

历史更新 - CLI 指令技能包系统

将 62 个 CLI 指令自动封装为 9 个 Agent 可直接调用的技能包

  • 9 个域技能包 — 知识管理/身份安全/基础设施/AI查询/Agent模式/Web3/安全合规/企业级/集成扩展
  • 执行模式区分direct / agent / hybrid / llm-query 四种模式明确标注
  • 自动同步 — SHA-256 哈希检测变化,skill sync-cli / postinstall 自动触发
  • 101 个测试 — 57 单元 + 21 集成 + 23 E2E,全部通过
chainlesschain skill sync-cli              # 检测变化并同步
chainlesschain skill run cli-knowledge-pack "note list"  # Agent调用笔记管理

历史更新 - CLI 分发系统 (Phase 101)

新增轻量级 npm CLI 工具,一条命令即可安装和管理 ChainlessChain:

npm install -g chainlesschain
chainlesschain setup    # 交互式安装向导(或 cc setup / clc setup / clchain setup)
chainlesschain start    # 启动应用(或 cc start / clc start / clchain start)
  • npm CLI 包 (packages/cli/) — 纯 JS 薄编排层 (~2MB),62 个命令 (含 Phase 7-8 企业功能 + WebSocket Server + Persona)
  • 交互式安装向导 — Node.js/Docker 检测 → 版本选择 → LLM 配置 → 二进制下载 → 自动配置
  • GitHub Release 集成 — 自动下载平台二进制文件 (Win/macOS/Linux) + SHA256 校验
  • Docker Compose 编排 — 一键管理后端服务 (services up/down/logs/pull)
  • 环境诊断 (doctor) — 12 项检查 (Node/Docker/Git/端口/磁盘/网络)
  • Phase 1 AI 智能层 — BM25 搜索 + Token 追踪 + 持久记忆 + 会话管理 + Agent Plan Mode
  • Phase 2 知识管理 — 知识导入 (Markdown/Evernote/Notion/PDF) + 导出 (Markdown/静态站点) + Git 集成 + 笔记版本控制
  • Phase 3 MCP 与外部集成 — MCP 服务器管理 (JSON-RPC 2.0) + 10 LLM Provider + 3中转站 + 浏览器自动化 + 本能学习
  • Phase 4 安全与身份 — DID 身份管理 (Ed25519) + AES-256-GCM 文件加密 + RBAC 权限引擎 + 审计日志
  • Phase 5 P2P与企业 — P2P 消息 + 文件同步 + 数字钱包 (Ed25519) + 组织管理 + 插件市场
  • Phase 6 AI核心 — Hook 生命周期管理 (28事件类型) + DAG 工作流引擎 (5内置模板) + 层次化记忆 2.0 (4层架构+遗忘曲线) + A2A Agent间协议
  • Phase 7 安全与进化 — 安全沙箱 v2 (细粒度权限+行为监控) + 自进化系统 (能力评估+自诊断+自修复)
  • Phase 8 区块链与企业 — Agent 经济系统 (微支付+资源市场+NFT) + 零知识证明引擎 (Groth16+选择性披露) + BI 智能分析 (NL→SQL+异常检测)
  • Phase 9 低代码与多Agent — 低代码平台 (15+组件+版本管理) + 多Agent协调器 + DI服务容器
  • Agent 智能增强 — auto pip-install + 脚本持久化 + 错误分类(5类) + 环境检测 + agent-core 提取去重 + Desktop agent 模式
  • 自主学习闭环 — 执行轨迹存储 + 自动评分(3信号源) + 技能自动合成(Jaccard去重) + 技能持续改进(3触发器) + 周期性自省 (224 tests)
  • 子代理隔离系统 v2 — SubAgentContext 上下文隔离 + spawn_sub_agent 工具 + 命名空间化记忆 + 作用域上下文引擎 + 角色工具白名单 + 三级摘要策略 + 生命周期注册表 + 沙箱化执行环境 + 资源限制 + 父子通信协议
  • CI/CD 自动发布 — GitHub Actions 自动 npm publish --provenance + 供应链安全
  • Agent Context Engineering — 6维上下文注入 (Instinct/Memory/BM25 Notes/Task/Permanent Memory/Compaction Summary) + KV-Cache优化 + 稳定前缀缓存 + 智能压缩 + 可恢复压缩摘要 + 会话恢复 (--session)
  • Autonomous Agent — ReAct 自主任务循环 (/auto 命令) + 目标分解 + 自我纠正
  • 多 Provider 支持 — 10 个 LLM 提供商 (volcengine/openai/anthropic/deepseek/dashscope/gemini/kimi/minimax/mistral/ollama) + 3种中转站 (OpenAI/Anthropic/Gemini) + 任务智能模型选择
  • DAG 计划执行 + 风险评估/plan execute 按依赖拓扑排序 + /plan risk 风险评分
  • EvoMap 基因交换evomap search|download|publish|list|hubs GEP-A2A 协议客户端 + 联邦Hub管理 + 基因治理
  • CLI-Anything 集成cli-anything doctor|scan|register|list|remove 将任意软件 Agent 化,自动注册为 managed 层技能
  • WebSocket 服务器serve 命令通过 WebSocket 暴露全部 CLI 命令,支持 execute/stream/cancel + Token 认证 + 心跳检测 + 命令注入防护
  • WebSocket 有状态会话 — 通过 WS 创建/恢复/管理 agent/chat 会话,支持项目上下文绑定、SlotFiller 参数填充(9 种意图自动检测)、InteractivePlanner 交互式规划 (2700+ 测试/113 文件)
  • DAO 治理 v2 — 二次方投票 + 投票委托 + 国库管理 + 提案生命周期 (dao 命令)
  • 安全合规 CLI — 合规管理 (GDPR/SOC2/HIPAA/ISO27001) + 数据防泄漏 (DLP) + SIEM 日志导出 + 后量子密码 (PQC)
  • 通信桥接 CLI — Nostr 桥接 (NIP-01) + Matrix 桥接 (E2EE) + SCIM 2.0 用户配置
  • 基础设施加固 CLI — Terraform 编排 (工作区/Plan/Apply) + 安全加固 (性能基线/回归检测/审计)
  • 社交平台 CLI — 联系人管理 + 好友系统 + 动态发布 + 即时聊天 + 社交统计
  • Hook 管道 — PreToolUse/PostToolUse/ToolError 工具调用钩子集成
  • Content Recommender — TF-IDF 工具相似度 + 工具链频率推荐
  • 4741+ 个测试用例 — 116+ 测试文件 (单元 + 集成 + 端到端),跨平台 CI 矩阵 (Ubuntu/Windows/macOS)
  • 系统质量改进 — 12 个 Pinia Store 测试文件 (431 测试),CI 管道修复 (continue-on-error 移除),builtin-tools.js (25K行) 拆分为 8 个模块,空 catch 块清理,硬编码凭证移除
  • 项目初始化 (init) — 9 种模板 (code-project/data-science/devops/medical-triage/agriculture-expert/general-assistant/ai-media-creator/ai-doc-creator/空项目),生成 .chainlesschain/ 项目结构;ai-media-creator 自动生成 ComfyUI/TTS 技能,ai-doc-creator 自动生成 doc-generate/libre-convert/doc-edit 技能
  • Persona 系统 — 项目级 AI 角色配置 (persona show/set/reset),自动替换默认编码助手,工具权限控制,自动激活 Persona Skill
  • 多层技能系统 — 4 层优先级 (bundled < marketplace < managed < workspace),skill add/remove/sources/sync-cli 自定义技能管理;9 个 CLI 指令技能包自动封装 62 条指令
  • 多智能体协作 (cowork) — 多视角辩论审查 + A/B 方案对比 + 代码知识图谱分析
  • Web Cowork 日常任务协作 — 10 类任务模板 + 开源工具优先 + cli-anything 桥接 + 自动安装 + systemPromptExtension + shellPolicyOverrides (103 tests)
  • 插件技能集成 — 插件可声明并安装技能到 marketplace 层

历史更新 - v5.0.0 架构重构 + AI Agent 2.0 + Web3 深化 + 企业平台 + 自进化系统 (Phase 78-100)

23个新模块,覆盖三大方向:AI Agent 2.0、Web3 深化、企业级生产力平台。新增 ~178 IPC Handlers,37 测试文件 1238+ 测试用例,全部通过。

Milestone 1: 架构重构基座 (Phase 78-80) — v4.0.0-alpha

  • IPC域分割 + 懒加载 (ipc/domains/, ipc-middleware.js, lazy-phase-loader.js) — IPC Registry 拆分为10个域,按需加载Phase,统一中间件(限流/权限/计时),3个IPC处理器
  • 共享资源层 + DI容器 (core/service-container.js, shared-cache.js, event-bus.js, resource-pool.js) — 统一DI容器(循环依赖检测),LRU+TTL缓存,跨模块EventBus,资源池管理,4个IPC处理器
  • 数据库演进框架 (database/migration-manager.js, query-builder.js, index-optimizer.js) — 版本化迁移(up/down),流式SQL构建器,索引优化器(慢查询检测),4个IPC处理器

Milestone 2: AI Agent 2.0 生态 (Phase 81-87) — v4.1.0

  • A2A协议引擎 (ai-engine/a2a/) — Google A2A标准,Agent Card发现,Task生命周期管理,SSE+WebSocket流,8个IPC处理器
  • 自主工作流编排器 (ai-engine/workflow/) — DAG工作流编辑器,条件分支/循环/并行/审批门,5个内置模板,断点续执行,10个IPC处理器
  • 层次化记忆2.0 (ai-engine/memory/) — 4层记忆(工作→短期→长期→核心),遗忘曲线,记忆巩固,跨Agent共享,情景/语义搜索,8个IPC处理器
  • 多模态感知层 (ai-engine/perception/) — 实时屏幕理解,语音双向流,文档深度分析,视频理解,跨模态推理,8个IPC处理器
  • Agent经济系统 (blockchain/agent-economy.js) — 微支付(State Channel),计算资源市场,贡献度证明,Agent NFT,收益自动分配,10个IPC处理器
  • 代码生成Agent 2.0 (ai-engine/code-agent/) — 全栈代码生成,Git上下文感知,实时代码审查(eval/注入检测),5框架脚手架,CI/CD自动配置,8个IPC处理器
  • Agent安全沙箱2.0 (security/agent-sandbox-v2.js) — WASM隔离,细粒度权限白名单,资源配额,执行审计,行为AI监控(风险评分),6个IPC处理器

Milestone 3: Web3 深化 + 隐私计算 (Phase 88-92) — v4.2.0

  • 零知识证明引擎 (crypto/zkp-engine.js) — zk-SNARK/zk-STARK,Groth16证明系统,Circom电路编译,身份选择性披露,6个IPC处理器
  • 跨链互操作协议 (blockchain/cross-chain-bridge.js) — EVM链(ETH/Polygon/BSC/Arbitrum)+Solana,HTLC原子交换,跨链消息传递,8个IPC处理器
  • 去中心化身份2.0 (did/did-v2-manager.js) — W3C DID v2.0,可验证展示,社交恢复,跨平台漫游,声誉可移植性,8个IPC处理器
  • 隐私计算框架 (crypto/privacy-computing.js) — 联邦学习,安全多方计算(MPC),差分隐私,同态加密查询,8个IPC处理器
  • DAO治理2.0 (blockchain/dao-governance-v2.js) — 二次方投票,委托投票,提案生命周期(Draft→Active→Queue→Execute),国库管理,8个IPC处理器

Milestone 4: 企业级生产�

Popular repositories Loading

  1. chainlesschain chainlesschain Public

    JavaScript 10 6