ChainlessChain
无链之链 · 让数据主权回归个人
CHAINLESSCHAIN · 厦门无链之链科技
ChainlessChain chainless·chain
v5.0.3.55 · Evolution Edition CLI v0.162.0 112 命令 Web Shell(默认) Web Panel i18n(中英) MTC v0.11

让数据主权
回归个人
AI 效率触手可及

CLI 驱动的本地 AI × 硬件级加密。 为每一个想掌控自己数据的人而建。

了解硬件加密
🏆 4 项发明专利
🔒 军事级加密
GitHub 10k+ Star
等保三级认证
📋 参编《人工智能 智能体内生安全技术要求》T/ZGCMCA 023—2025
产品定位 · 三大场景

知识 · 社交 · 交易,
以个人为中心,全栈端到端

一套硬件级安全 + 本地化 AI + 完全去中心化的共同基座,三大场景独立可用、互通无界。

📚

知识库管理

Knowledge Base
  • ·笔记 / 文档 / 对话历史 — 个人第二大脑
  • ·混合搜索:BM25 + Qdrant 向量
  • ·层级记忆 2.0:工作 → 短期 → 长期 → 核心
  • ·基于 RAG 的 AI 问答 · 代码知识图谱
🌐

去中心化社交

Decentralized Social
  • ·W3C DID v2 身份 + 可验证凭证
  • ·P2P 端到端加密:Signal + libp2p + WebRTC
  • ·社区 / 频道 gossip 跨机同步(v5.0.3.41+)
  • ·Audit-grade Merkle envelope + 跨机分发 + 外部归档(B4 全套)
  • ·协议融合:ActivityPub · Nostr · Matrix
  • ·反审查:Tor + 域前置 + 卫星消息
💎

数字资产交易

Trading Assistant
  • ·多链钱包:EVM 系 + Solana
  • ·跨链桥:HTLC 原子交换 + 跨链消息
  • ·zk-SNARK / zk-STARK 本地生成
  • ·DAO 治理 v2 · 二次方投票 · 国库管理
隐私至上
端到端加密 · 硬件级安全 · 零知识证明 — 服务方无法访问用户数据。
完全去中心化
本地数据存储(SQLCipher AES-256)· P2P 通信(libp2p)· 自主掌控(DID v2)。
AI 原生
本地大模型(Ollama / LLaMA / Qwen)· 默认不上传 prompt · AI 增强搜索 + Agent 编排。
CLI · 主入口

你的终端,
就是 AI 工作台。

无需启动任何 GUI — chainlesschain 让本地 AI、Agent 编码、多智能体协作全部在终端里完成。

112
CLI 命令
139
内置 Skills
14800+
测试用例
~/workspace — chainlesschain
$ cc chat
# 进入本地 AI 对话 · Ollama qwen2:7b
总结 ./docs 目录下最近更新的三篇文档
🤔 正在检索本地 RAG 向量库...
✓ web-cowork.md · 10 类任务模板 + 自动依赖安装
✓ cli-agent.md · Claude Code 风格 agent 会话
✓ skills.md · 139 桌面 Skills + 9 CLI Skill Packs
$ cc cowork analyze ./src
# 多 Agent 并行审查 · 性能 / 安全 / 可维护性
⧖ spawning 3 sub-runtimes...
├── performance reviewer · claude-opus
├── security reviewer · deepseek-r1
└── maintainability reviewer · qwen2:7b
✓ 12 findings · 3 critical · report.md
$ cc skill run code-review "Review app.js"
# 调用 Skill Pack · 139 内置 / 9 领域包
📦 loaded skill: code-review@1.2.0
🔧 mounted MCP: filesystem, git
⚙ hashline edit · 3 blocks patched
✓ 67 lines reviewed · 4 suggestions written
Agent / Cowork / Skill — 终端里的完整 AI 工作流
普通人 · 零门槛 AI 工具箱

对 AI 说人话,
它替你干活

不用背命令、不用写代码。打开 Web 控制台,告诉它你想做什么 — Agent 自动挑工具、自动装依赖、实时流式回报进度。

📄

文档转换

批量把 Word 转 PDF / Word 转 Markdown

自动安装所需工具,无需手动配置
🎬

媒体处理

视频压缩、提取音频、格式转换

自动安装所需工具,无需手动配置
📊

数据分析

CSV / Excel 分析 + 生成图表

自动安装所需工具,无需手动配置
🖼️

图片处理

批量压缩、OCR 识别文字

自动安装所需工具,无需手动配置
🔎

信息检索

自动搜索 + 整理结果

自动安装所需工具,无需手动配置
🧰

系统管理

磁盘分析、进程排查、网络测试

自动安装所需工具,无需手动配置
Web Cowork 日常协作界面 · 10 个任务模板

运行 chainlesschain ui,浏览器打开 http://localhost:18810/#/cowork

零安装工作流
Agent 自动 winget / choco / pip / npm 装工具,不用你配环境。
安全隔离执行
SubAgentContext 沙箱隔离,每个任务独立上下文,互不污染。
实时进度
WebSocket 流式返回每一步结果,不是"黑盒跑完才告诉你"。
AI 引擎 · Cowork 多智能体编排

5 阶段编排 · Plan Mode ·
本能学习 · 验证循环

不是单 Agent 撞运气。Planner / Architect / Coder / Reviewer / Verify 五角色串联,每步可中断、可审查、可重放。

01
Planner
拆解需求
02
Architect
设计方案
03
Coder
执行落地
04
Reviewer
辩论审查
05
Verify
6 阶段验证
4 编排模板
feature / bugfix / refactor / security-audit — 一键套用。
Plan Mode
先出计划、确认后再执行 — 防 AI 跑偏。
本能学习 Instinct
8 类模式 + 置信度衰减 + 自动注入 — 越用越懂你。
Sub-Agent 隔离
工具白名单 + 3 级摘要 + 独立消息 — 上下文不污染。
139 内置技能 · 13 组别
139 桌面 + 28 Android + 112 CLI
原有技能 15 · 开发工具扩展 15 · 高级技能 10 · AI 会话效率 10 · Office 音视频 10 · 图像数据 10 · 开发系统 10 · 安全设计 10 · 工具增强 10 · 协作工作流 10 · 知识研究 10 · 媒体安全 11 · 社区视频 7
工程基线 · 5 平台统一

一套 AI 引擎,
14,800+ 测试守护

Win / macOS / Linux / Android / iOS / CLI — 同一套引擎跨终端。所有发布前必须六层全绿,单层失败即拦截发版。

Windows
Electron 39 · Win 10/11
macOS
Electron 39 · 12+
Linux
Electron 39 · Ubuntu 20+
Android
Jetpack Compose · Kotlin
iOS
SwiftUI
CLI
npm · Node 22 LTS
14,255
CLI 单元
696
CLI 集成
565
CLI E2E
197
桌面 Coding Agent
84
Phase 5 harness
27
Web Panel

2026-04-19 工程验证回归 · 全绿

安全核心

你的密钥,
握在自己手里

U-Key / SIMKey 硬件芯片 · 私钥永不导出。AES-256 + SQLCipher 全量加密。Signal 协议端到端。Ollama 本地推理 — 数据永不上云。

01 · U-KEY

USB 安全芯片

Windows Koffi FFI 直连 SIMKey SDK。PIN 码保护、多次错误自动锁定、所有关键操作需物理确认。BLE/NFC 无线 U 盾 + 生物识别。

02 · SIMKEY

SIM 卡安全芯片

Android OMAPI / iOS eSIM API。三大运营商 USIM + 5G 超级 SIM 覆盖。指纹 / 面容 ID 替代 PIN。12 大安全增强:eSIM OTA、TEE 集成、量子抗性。

03 · LOCAL AI

本地 Ollama

qwen2 / llama3 / deepseek-r1 本地推理。14+ 云 LLM 可选但绝不强制。敏感数据自动路由本地模型,从根源阻断上云路径。

4
项发明专利
AES-256
SQLCipher 数据库
Signal
E2E 加密协议
等保三级
合规认证
Web Cowork

对 AI 说人话,
工具自动干活

10 个任务模板 · 自动安装依赖 · 实时流式进度。 "把 report.docx 转成 PDF" — Agent 自己去装 pandoc、调工具、回报结果。

doc-convert
文档格式转换
pandoc · LibreOffice
media-process
音视频处理
ffmpeg · yt-dlp
data-analysis
数据分析
pandas · matplotlib
web-research
信息检索与调研
curl · BeautifulSoup
image-process
图片处理
ImageMagick · Tesseract
code-helper
代码辅助
Python · Node.js
system-admin
系统运维
系统命令
file-organize
文件整理
pathlib · 7-Zip
network-tools
网络工具
curl · nslookup
free-mode
自由模式
不选模板,直接描述任务
$ chainlesschain ui → http://localhost:18810/#/cowork
近期重点

把多智能体做成
工程可复制的模式

不是概念演示。每一项都已落地、有测试、写进模式库。完整 changelog 见 设计文档站

01 · Highlight
v5.0.3.55

iOS 端镜像移植 — Phase 1+2+3+4 完整落地(桌面配对 + 远程终端 + 远程操控 framework + 4 typed skill + Notification skill)

Android v1.0 GA 验证后启动 iOS 镜像移植。一日内框架级 4 Phase 全部落地:~313 单测 / 4 设计文档 / 4 trap memory。Phase 1 桌面配对三流(Flow A 桌面扫手机 / Flow B 手机扫桌面 / 手输 6 位 code)+ Phase 2 远程桌面终端(WebRTC DataChannel + xterm.js WKWebView)+ Phase 3 远程操控 framework(RemoteCommandClient 通用 RPC + OfflineQueue + 4 typed skill:Clipboard / File / Screenshot / SystemInfo)+ Phase 4 Notification skill(NotificationCommands actor 11 method + LRU dedup 256 + UN center push + 乐观更新 + offline gate 三分支 + RemoteOperateView 第 6 tab 横滚 picker + Capsule unread badge)。镜像 Android 已 Xiaomi 24115RA8EC 真机 E2E 验证版本,UI 信息架构 1:1 对齐。剩 Phase 1.7 / 2.7 / 3.7 / 4.7 真机 E2E 需 Mac+iPhone+真桌面,已移交用户。同时 #21 P1 主体 5/5 全闭环(A.1 Linux native 配对 + A.2 三端 UI consistency 设计文档 + B.1 web-shell 私钥签字 UI + B.5 跨链桥 m-of-n 多签 + C.1 wear→phone voice forward · ~270 单测)。CLI 0.162.0 minor(cc pair preflight LAN 诊断 + cc pair token generate/list/show/revoke 子命令组 + systemd hardening 模板 + docs/linux/PAIRING.md 9 段用户指南)。

v5.0.3.55 把 Android 平台 1 年多积累的移动端功能(QR 配对 / 远程终端 / 远程操控 framework / Notification skill)镜像到 iOS。所有 4 Phase 都是框架级完整移植 — Phase 1 桌面配对三流 commit c30b415a8(71 单测,Modules/CoreP2P/Pairing 9 swift + Features/Pairing 8 swift + PairingSignalingGate 接口 + PairedDesktopsStore UserDefaults JSON 持久化 + 桌面端 follow-up manual-pair-listener.js 220 LOC pairing-code 别名监听)+ Phase 2 远程桌面终端 commit 7613ea710(163 单测,Modules/CoreP2P/RemoteTerminal 13 swift + Features/RemoteTerminal 6 swift + 4 xterm.js bundle resources + SignalClient.forwardedMessages 多订阅 AsyncStream 补 Phase 1 设计 gap)+ Phase 3 远程操控 framework + 4 typed skill commit 759a1e907(~264 单测,Modules/CoreP2P/RemoteSkills 16 swift + Features/RemoteOperate 6 swift + RemoteCommandClient 单消费者收口到 commandClient 让 TerminalRpcClient 订 events 流)+ Phase 4 Notification skill commits 45b485fdd → 5877b5d84 6 sub-phase 全落地(41 新单测累计 ~313,3 swift CoreP2P + ViewModel 322 LOC + View 517 LOC + 既有 PushNotificationManager 0 改动 / 仅 1 行 conformance 扩展 + DI events fan-out 修 cmdClient.events AsyncStream 单消费者多 skill 订阅 trap + RemoteOperateView 第 6 tab + SkillTabPickerView REWRITE 横滚 + Capsule unread badge per design §7.9 备选 B)。2 个 P0 修:RemoteCommandClient.invoke withThrowingTaskGroup timeout 路径 pendingResponses 泄漏 + RemoteWebRTCClient.waitForAnswer pendingAnswer 清不干净 — 2 regression tests + 1 集成 test 验池清干净。设计文档 4 个 + trap memory 4 个(ios_qr_pairing_three_flows / ios_remote_terminal_phase2 / ios_remote_operate_phase3 / ios_remote_notification_phase4)+ feedback_ios_ui_mirrors_validated_android(UI 信息架构必须照抄已真机验证的 Android Kt screen,HIG 偏离仅 6 项白名单)。同批:#21 P1 主体 5/5 — A.1 Linux native 配对(cc pair preflight 5 项 LAN 诊断 + cc pair token 子命令组 + systemd hardening 模板 + 9 段 docs/linux/PAIRING.md,57 单测)+ A.2 三端 UI consistency 设计文档(4 项必须一致 + 4 项必须不同)+ B.1 web-shell 私钥签字 UI(MultisigSigner + in-process WS topic 绕开 6-10s 冷启 + SignProposalModal + unified-key-manager DID routing,113 单测)+ B.5 跨链桥 outbound × m-of-n 多签 Layer 1+2 共 8 PRs(CLI + cc_bridges provenance 列 + crosschain-mtc helpers + verifyMultiHopBridgeEnvelope auto-runs check)+ C.1 watch face VoiceMode shortcut(phone NavGraph + wear MessageClient forward + trigger_source 锁 WEAR_FORWARD 防伪,33 单测)。

阅读设计文档 →
02 · Highlight
v5.0.3.55 · #21 P1 主体 5/5

Android GA 后续 scope #21 P1 主体 5/5 全闭环 — A.1 + A.2 + B.1 + B.5 + C.1 一日齐落

Android v1.0 GA (v5.0.3.53) 上架后跟进的 5 项主体 scope 一日内全部 land · A.1 桌面 Linux native 配对(cc pair preflight LAN 诊断 + cc pair token 子命令组 + systemd 模板 + 9 段用户指南)· A.2 三端 UI consistency 设计文档 v0.1(4 项必须一致 + 4 项必须不同)· B.1 web-shell 私钥签字 UI(MultisigSigner + in-process WS topic 绕开 6-10s 冷启 + SignProposalModal)· B.5 跨链桥 outbound × m-of-n 多签(Layer 1+2 共 8 PRs:CLI + cc_bridges provenance 列 + crosschain-mtc helpers + verifyMultiHopBridgeEnvelope auto-runs check)· C.1 watch face VoiceMode shortcut(phone NavGraph + wear MessageClient forward + trigger_source 锁 WEAR_FORWARD 防伪)· 累计 ~270 单测全绿 · 最终 sweep 修 2 个 Robolectric 测试漏标 @Config(sdk=[33])

issue #21 GA 后续 scope 在 Android v1.0 GA 上架后开工,按 Triage 分层 P0 前置 / P1 主体 / P2 候选三级。P0 前置 (A.3 ADR review v2.0 + B.2 web-shell multisig 冷启 + B.6 PQC 严格模式) 2026-05-12 已落地。本批 P1 主体 5 项一日内全部闭环:A.1 桌面 Linux native 配对 — audit 反驳设计文档"Linux 需补 mDNS systemd 单元"是误解,@libp2p/mdns + bonjour-service 纯 JS 不依赖 avahi-daemon;实落 3 PR: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 场景预生成 token),dist-tools/systemd/chainlesschain.service hardening 全套模板(NoNewPrivileges / ProtectSystem=strict / ReadWritePaths whitelist / MemoryMax 2G),docs/linux/PAIRING.md 9 段用户指南(3 场景 / 5 blocker 修复 / 诊断包收集),57 单测。A.2 三端 UI consistency 设计文档 v0.1 baseline — 4 项必须一致(语义色 / 高风险红色 hex / DID 短显规则 6+4 字符 / m-of-n 进度展示 m/n + 分隔符)+ 4 项必须不同(手表大按钮 ≥48dp / 桌面侧栏 / 车载 voice-only / 手机 thumb zone)。B.1 web-shell 私钥签字 UI 4 PRs — 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(同 DID 跨 driver 自动路由),113 单测。B.5 跨链桥 outbound × m-of-n 多签 8 PRs(Layer 1+2)— Layer 1:CLI bridge --require-multisig + bridge-consume + web-shell crosschain.bridge.consume in-process topic + Multisig.vue 执行按钮 + 多签设计文档 §6.3;Layer 2:cc_bridges m-of-n provenance 列 + crosschain-mtc attachMultisigProvenance/stripMultisigSigsForCanonical helpers(strip-all-sigs canonical form 镜像 _stripSigsForPublisher 让 producer/verifier 喂同一 JCS bytes)+ 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 + bridge counterparty 选型不计入本 scope。C.1 watch face VoiceMode shortcut 3 PRs — phone-side VoiceLaunchActions + VoiceTriggerSource 4 enum(AUTO_BUTTON / PHONE_SHORTCUT / WEAR_FORWARD / VOICE_TRIGGER)+ NavGraph 路由,CcPhoneVoiceListener Data Layer service(/cc/voice/start MessageClient path),wear VoiceSender + VoiceShortcutTileService standalone Voice tile + VoiceComplicationService(watch face 复杂功能槽位)+ VoiceForwardActivity(intent + 50ms vibration + 3s timeout)。安全约束:trigger_source 字段 wear 侧仅信息用途,phone 侧锁 WEAR_FORWARD 防伪 — 防 wear 端伪造 trigger_source 提权到 AUTO_BUTTON / PHONE_SHORTCUT。Audit reframe:设计文档说"需先抽 generic cc.voice.start IPC"不准 — Auto Phase 1 实际是 in-process VM event 没有公开 IPC,wear 走 Wearable Data Layer MessageClient 直 forward 是更直的路。33 单测。最终 P1 sweep 找到 2 个 Robolectric 测试 bug(同根因):C.1 PR1 VoiceLaunchActionsTest + C.1 PR2 CcPhoneVoiceListenerTest 漏标 @Config(sdk=[33]),Robolectric DefaultSdkPicker 拒收 compileSdk=35(maxSdkVersion=34)— commit f1d283833 统一与 :app 其它 Robolectric 测试一致。P2 候选 4 项 (B.3 DID rotate / B.4 air-gapped QR signing / C.2 LongTask complication / C.3 wear instrumented test) 等 GA Play Store + 真用户反馈复评。Follow-ups gated on GA reflection:A.1 full headless WS signaling listener + IPv6 multicast + WSL2 helper / B.5 Layer 3 真链上锚定(external-blocked Q-COMP-3)/ B.1 F1-F4 encrypted software secret store + CLI --keystore flag + unified radio + UnifiedKeyManager IPC bind-did / C.1 真机 instrumented E2E + 预览 drawables + phone shortcut tile + wear failure toast UX。issue #21 + Android 重新定位 §10 GA 后续 scope。

阅读设计文档 →
03 · Highlight
v5.0.3.54

🎯 Plan A.1 真机 E2E 收口:Android 远程终端从"打不开"到"完整可用"(8 bugs 一次扫净)

v5.0.3.53 远程终端协议链路是通的,但真机 E2E(Xiaomi 24115RA8EC ↔ Windows git-bash)暴露 8 个独立 bug — 从"开不了 session"到"黑屏看不到输出"到"cc/claude 命令找不到"。v5.0.3.54 一次性收口:fix1-5 WebRTC echo loop 真因(sendOffer 误把 target peerId 写进 self currentPeerId 让 WS 重连 auto-re-register 路由回自己)+ 中继 msg.from 注入(之前 desktop 回包 to=undefined 死循环)+ iceServers 12h 节流自动 refresh · fix7 TerminalListViewModel closure shadow 真因(onSuccess 闭包参数 it shadow state.it 让 lastCreatedId 永远不更新)+ LaunchedEffect 自动 navigate · fix11 TerminalWebView LayoutParams MATCH_PARENT × MATCH_PARENT 真因(Compose AndroidView 默认 WRAP_CONTENT + HTML body height:100% 死锁让 WebView 永远 0 高 → xterm.fit() 返回 cols=49 rows=1 → 桌面 PTY 被 resize 成 1 行 → 用户看到的"全黑"其实是底色 #1e1e1e) · fix12 PtyManager login shell + git-bash probe(pty.spawn 无 args 让 bash/wsl 不走 login mode → ~/.bashrc 不加载 → cc/claude 找不到;bash.exe PATH 优先匹配 WSL bash → 进 root 用户无 npm-global PATH。修:bash 走 -l + 优先 probe Program Files/Git/bin/bash.exe) · 手机端真的能在路上敲 cc -v / claude / npm 指挥桌面 · 7 bug commit 8d3c95df6 + PtyManager fix commit f54a6fcd0 · 真机验证:登陆 → 配对桌面 → "+ 新会话" 选 bash → 直接敲 cc -v 输出版本号

v5.0.3.53 那一天 Plan A.1 把信令链路从 4 跳砍到 1 跳 DataChannel 直连,协议层 RTT 200-500ms → 30-80ms 显著改善。但用户拿到 v5.0.3.53 真机测试时反馈 "终端打不开",深挖发现 v5.0.3.53 暴露了 8 个独立的 latent bug,每个都是协议设计正确但 implementation 细节犯错的典型案例 —— 这是 protocol-level success 到 product-level success 之间的距离。bug 链复盘按 root cause 顺序:(1) WebRTC echo loop:sendOffer 把 target peerId 误写进 self 的 currentPeerId,导致 WS 因任何原因断开后 reconnect 自动 re-register 把 mobile 注册成 desktop 的 peerId,中继路由把 mobile 的消息 forward 回 mobile 自己 → DC handshake 永远失败 fallback signaling → 但 signaling 也 stuck 因为 (2) 中继 server.js 的 handleMessage forward 路径只校验 to 不补 from,desktop 回包 to=undefined → 中继 reject "missing to field" → desktop 重试 → 死循环吃中继带宽。修法:sendOffer 完全不动 currentPeerId(currentPeerId 唯一 owner 是 register())+ 中继 server.js handleMessage `if (!msg.from && ws._peerId) msg.from = ws._peerId`。(3) iceServers TTL 24h 到期跨 NAT 完全不通,桌面 ICE 创建好后 24h 不会主动 push 新的 iceServers 给 mobile —— 修法:mobile-bridge.bridgeToLibp2p 每次有 inbound message 时调 maybeRefreshIceForMobile + 12h 节流(半 TTL)防雪崩。(4) TerminalRpcClient stdout dedup gate 写错:`if (lastSeq && seq > lastSeq)` 但首条 stdout 时 lastSeq 是 undefined 短路 → 每条 stdout 被 drop(gate 永远 truthy)—— 修法:移除 gate(xterm.js render duplicate stdout 是 cosmetic harmless)。(5) TerminalListViewModel.createSession.onSuccess 的 closure shadow:`{ created -> _state.update { it.copy(creating = false, lastCreatedId = it.lastCreatedId) } }` —— 内层 update 的 it 是 state(CreatedSession 的参数名 `created` 被外层 `it` shadow 了写法 `it.copy(lastCreatedId = it.lastCreatedId)` 实际是 `state.lastCreatedId = state.lastCreatedId` 永远 no-op)。修法:把 onSuccess 显式 named `created -> ... it.copy(lastCreatedId = created.sessionId)` + List 屏 LaunchedEffect(state.lastCreatedId) 在新 sessionId 出现时自动 navigate 到 SessionScreen + consumeLastCreatedId 清理。(6) TerminalWebView 黑屏真因(最难定位):Compose AndroidView 默认 LayoutParams.WRAP_CONTENT × WRAP_CONTENT。WebView 用 wrap_content 高度时问 HTML body "你多高" → body CSS height:100% → 依赖父级(WebView)高度 → wrap_content = 内容高度 = body 高度 = 0 → 死锁,WebView 永远 0 高。但 fitAddon.fit() 在 0×0 容器返回 cols=49 rows=1 默认垃圾值(>0 绕过任何"cols>0"的 guard),onReady 通知桌面 PTY resize → 桌面 PTY 被 resize 成 1 行 → 所有 stdout 全挤进顶部第 1 行,其余区域是 #1e1e1e 底色 → 用户看到的"全黑"其实是底色。三层定位:fix9 用 ResizeObserver 监听 #term div + setInterval 100ms × 30 兜底;fix10 改用 DOM clientWidth/clientHeight 做 guard 替代 xterm.cols/rows;fix11 真因 — TerminalWebView LayoutParams 强制 MATCH_PARENT × MATCH_PARENT 让 Column.weight(1f) 真的能给 WebView 分配高度。(7) cc / claude / npm 远程终端不可用:PtyManager.pty.spawn(cmd, [], {...}) args 写死 [],bash/wsl 都不走 login mode → ~/.bashrc 不加载 → 用户的 npm-global / cargo / brew 等全局 CLI PATH 完全不在 spawned shell 里。叠加 Windows shell=bash 解析的 PATH 顺序优先匹配 C:\Windows\System32\bash.exe(WSL bash)而不是 git-bash,进 WSL 后又是 root 用户 PATH 一样不含 npm-global。修法:resolveShellCmd 改返回 {cmd, args},bash 加 -l,wsl 加 ["--", "bash", "-l"];shell=bash 优先 probe C:\Program Files\Git\bin\bash.exe 等已知 git-bash 路径,命中用绝对路径,fallback 才用 PATH。Android 端选 bash 创建 session 后 prompt 变成 longfa@DESKTOP-MTMV2RE MINGW64 而不是 root@...,cc -v 直接输出 0.161.12,claude / npm 全部可用。complete fix 链 commit 8d3c95df6 (7 bugs) + commit f54a6fcd0 (PtyManager) + memory 复盘 feedback_currentpeerid_target_vs_self_trap.md + android_webview_xterm_resize_observer.md。手机端真机 e2e 验证:登陆 → 配对桌面(已配对 fb8380b1...)→ "+ 新会话" 选 bash → SessionScreen 立刻显示 git-bash prompt → 敲 cc -v 输出版本号 → 敲 claude 启动 Claude Code CLI → 敲 ls 看完整目录 listing 绿色文件名渲染 → 输入 + stdout 持续双向流通(logcat 看 terminal.stdin / terminal.stdout 不停流动 seq 持续递增)。这一次远程终端从演示走到了能用 —— 手机在路上能指挥桌面执行任意 CLI 命令,是真的"移动遥控器"。分发:桌面 binary v5.0.3.53 → v5.0.3.54 重打;CLI chainlesschain npm 0.161.12 不变(CLI 这次没改);Android versionCode 503053 → 503054 / versionName 5.0.3.53 → 5.0.3.54。

阅读设计文档 →
04 · Highlight
v5.0.3.53

Plan A.1 远程终端 Android↔桌面 WebRTC DataChannel 直连(Phase 1–5 一日全落 7 commits)

Plan A 真机首测暴露 4 跳信令链路 NAT idle 蜂窝运营商间歇杀 TCP 整链路 fragile 的架构性问题 · 把高频高吞吐终端流量切到 WebRTC DataChannel 直连绕开所有中间跳 · signaling 保留兜底 · Phase 1 Trap 1 修 multi-subscribe SharedFlow 替代单 listener 治 ice:config 拦截器被覆盖 + WebRTCClient.dataChannelReady StateFlow derived flag · Phase 2 SignalingRpcClient.invoke 内置 transport selector DC 优先 fallback signaling 两路 listener 同 requestId 同 CompletableDeferred dual delivery 安全 · Phase 3 TerminalListViewModel 异步触发 handshake + UI chip P2P 直连/中继路径 · Phase 4 Android stdout 256-LRU + exit 64-LRU 双订双流 + desktop mobile-bridge 128-LRU/30s-TTL 按 payload.id 去重 · Phase 5 既有 wiring 组合无新代码 · 性能 RTT p50 200-500ms → 30-80ms LAN · p99 1.5-30s → 200-800ms · 稳定性 20s-2min 间歇断 → 数小时持续 · 测试 Android +8 / desktop +14 三套件 11 + 15 + 21 Android + 14 desktop 全绿 + 修 mockk relaxed StateFlow 泛型擦除致 12-test regression · 真机 e2e §5.3 5 场景移交用户 · 设计文档 Android_Remote_Terminal_Plan_A1.md v1.0 · 遥测 path=dc|signaling 上线

v5.0.3.52 Plan A 真机首测 Xiaomi 24115RA8EC × Win desktop dev 暴露了 1 个架构性问题:4 跳信令链路 phone→router→public-relay→desktop-RelayClient 在 NAT idle / 蜂窝运营商间歇杀 TCP 时整链路 fragile 任一跳断即整体失败。Plan A.1 把高频高吞吐终端流量从 signaling 链路切到 WebRTC DataChannel 直连绕开中间所有跳;signaling 路径保留作 fallback。性能预期端到端 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 修 commits d22b7ac8a + bb759bc78 SignalClient.forwardedMessages 迁移多订阅 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 commit a01eeac47 SignalingRpcClient.invoke 内置 transport selector connectionState==READY && preferDataChannel → webRTCClient.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 commit 91e77e489 TerminalListViewModel.init 检测 DC 未 ready 异步触发 RemoteConnectionManager.connect + UI chip 显示 P2P 直连绿 vs 中继路径黄 路径状态用户可见。Phase 4 commit dd9b1227e Android + fc3752360 desktop Android TerminalRpcClient 双订 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 实时映射 dataChannelReady chip。测试 Android TerminalRpcClientTest +3 dedup / SignalingRpcClientTest +4 transport selection / WebRTCClientTest +1 Trap 1 回归 + 修 mockk relaxed StateFlow 泛型擦除致 12-test regression 加 every mockPairedDesktopsStore.devices returns MutableStateFlow emptyList 修;desktop mobile-bridge.test.js 新 14 测覆盖 LRU dedup 5 维 (TTL / capacity eviction / whitelist 之外不去重 / JSON-RPC response 不去重 / missing id 不去重) + sendToMobile DC 优先 vs signaling-relay 双发兜底 5 维 (DC OPEN 单 DC / readyState 多形 / DC missing 双发 / DC closed 双发 / missing relay 不抛) + guard rails 2。三套件全绿 11 + 15 + 21 Android + 14 desktop + 既有未动。真机 e2e §5.3 5 场景矩阵移交用户:LAN 同 WiFi DC 秒级握手 / 蜂窝网 TURN 路径 / 双 NAT 3G symmetric 应 fallback signaling / DC 工作中模拟失效 fallback ≤ 3s / DC 恢复后自动切回。设计文档 docs/design/Android_Remote_Terminal_Plan_A1.md v1.0 含 §1.2 三个 trap 完整分析 (setOnForwardedMessageReceived 单 listener / DC 入向与 signaling forward 两条路径 / P2PClient.sendCommand DC-only 但有自己 envelope 与 TerminalRpc 不兼容) + §3.7 不复用 :core-p2p DataChannelTransport 决策 (terminal envelope JSON vs sync 二进制 P2PMessage 不通) + §5.3 真机 e2e 5 场景验收矩阵。遥测 [SignalingRpc.metric] path=dc|signaling reqId 上线首周观察 fast-path 占比目标 ≥80% 用户基数 ≥10 设备低于 80% 说明 DC 不通比预想多需诊断。分发桌面 binary v5.0.3.52 → v5.0.3.53 重打 CLI chainlesschain npm 0.161.12 不变 Plan A.1 work all under android-app/ + desktop-app-vue/ + docs/ Android versionCode 503052 → 503053 / versionName 5.0.3.52 → 5.0.3.53 按 feedback_android_tag_follows_desktop 与桌面同号原则。

阅读设计文档 →
05 · Highlight
v5.0.3.52

Plan A 远程终端:Android↔桌面 PTY 全链路(Phase 1–4 全部落地 + 162 测试全绿)

桌面 PtyManager 单例同时被 web-shell WS 网关 + cc ui WS 网关 + V6 native IPC 共享 · 8 个 terminal.* WS topics (create/list/stdin/resize/close/history + server-push stdout/exit) · attachTopicHandlers 共享 helper 抽出 ws-cli-loader dispatcher 包装 cc ui 复用 · web-panel useTerminal composable + Terminal.vue route /terminal xterm.js lazy + 多 session 标签 + history 补帧 + dangerous-keyword toast · V6 plugin widget + TerminalPanel modal IPC bridge electronAPI.terminal.* + slash /terminal · Android TerminalRpcClient 复用 SignalingRpcClient envelope pattern + WebView↔Kotlin JS bridge + xterm-shell.html + xterm.js/addon-fit vendored + Compose list/session + softkey toolbar Ctrl/Tab/Esc/方向键/Ctrl+C/D + NavGraph 2 路由 + RemoteOperateScreen 入口 · confirmation-dialog 高危关键字 Electron messageBox + 永久信任 per-cmd cache · mobile-bridge stdout/exit per-peer fanout

用户痛点 "PC 上开了很多终端 能不能在 Android 上看到这些终端的输出并远程输入指令"。硬约束 Windows 上已经在跑的外部终端不能被另一进程 attach (OS 句柄私有)。落地方案 A — ChainlessChain 桌面端用 node-pty 托管新开终端 复用 #21 Remote Operate signaling-relay 通道把 stdin/stdout 流到 Android。Phase 1 桌面主进程 PtyManager (lazy node-pty + 256KB ring buffer + 24h idle kill + shell 白名单 pwsh/cmd/bash/wsl + 8 session 上限) + RingBuffer (byte-aware FIFO 不持久化 安全 > 韧性 — 终端输出常含 API key / git diff 含密钥) + terminal-handlers.js (8 WS topics) + terminal-ipc.js (V6 native IPC bridge) + confirmation-dialog.js (高危关键字 Electron messageBox + 永久信任 per-cmd cache)。startWebShell 接 ptyManager + terminalRequireConfirmation;handleMobileCommand 加 terminal.* namespace + mobile-bridge per-peer stdout/exit subscription fanout。Phase 1.5 cc ui mirror — packages/cli/src/gateways/ws/topic-handler-attachment.js 抽出 ws-cli-loader 的 dispatcher 包装为 ESM helper;cc ui 的 agent-runtime.startUiServer 调一遍 → cc ui 也能 /terminal。Phase 2 三壳 UI — web-panel useTerminal composable (singleton fan-out via module-level sub map base64↔UTF-8 编解码) + Terminal.vue route /terminal (xterm.js lazy import + 多 session 标签 + history 补帧 + ResizeObserver + dangerous-keyword toast) + 侧栏菜单 + i18n;V6 plugin widget plugins-builtin/terminal/plugin.json + shell/widgets/TerminalWidget.vue + shell/TerminalPanel.vue (xterm.js 嵌入 + IPC bridge electronAPI.terminal.*) + slash 命令 /terminal。Phase 3 Android — TerminalRpcClient.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 加 "打开远程终端" 按钮。Phase 4 韧性 — requireConfirmation 接桌面 systray + paired_devices/permission-gate 路径 (已沿用现有 p2p-command-adapter) + mobile-bridge stdout fan-out (per-peer subscription map) + 重连 history 补帧 + 24h idle kill。测试 162 新增全绿 — Desktop main 61 (RingBuffer 7 + PtyManager 15 + terminal-handlers 15 + terminal-ipc 12 + confirmation-dialog 5 + ws-smoke integration 6 + 真 PTY spawn cmd.exe integration 1 测试在 5.08s 完成端到端 stdin 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 (full happy path + flow event fanout)。同时修 pre-existing test drift — widget-registry.test.ts (PREVIEW_WIDGETS 已扩到 7 个 bridge-mtc + federation-governance 此前漏更新) / dashboard-store.test.js (没 mock mcp.list_tools 的 sendRaw 回应 drift since commit d9cc41432) / views-mount-smoke.test.js 5 个尾部视图 (Projects/VideoEditing/P2P/Memory/Git 在 50+ 文件并行套件下撞 Notification + Pinia 跨测试状态污染) / Projects-folder-picker.test.js 删除过时测试。设计文档 docs/design/Android_Remote_Terminal_Plan_A.md + 用户文档 docs-site/docs/guide/remote-terminal.md 双站同步。Future A.1 流量切 WebRTC DataChannel 绕中继带宽瓶颈 / Future B 已开外部终端只读快照 截图 + OCR + Win32 SendInput 留后续。

阅读设计文档 →
06 · Highlight
v5.0.3.51

远程操控 Plan A + B 基础设施落地:WebRTC 透传中继 + STUN/TURN 部署 + iceServers 凭证签发

Plan A: relay server 转发 WebRTC offer/answer/ice-candidate (commit e9f9d6275) · 桌面 RelayClient onMessage 改为 mobileBridge.handleSignalingMessage 统一 dispatch 与 LAN 完全对齐 · Plan B: coturn 4.6 docker compose host network 监听 0.0.0.0:3478 UDP/TCP + 5349 TLS + 49152-65535 UDP relay 范围 · turn.chainlesschain.com Let_s Encrypt acme.sh 续证 · signIceCredentials HMAC-SHA1 24h TTL ephemeral creds 桌面端 CC_TURN_SECRET 强制必填零硬编码 · pushIceServersToMobile pair-ack matched 后双发 LAN signaling + 公网中继 chainlesschain:ice:config (commit af11daa6e) · Android WebRTCClient 注入 PairedDesktopsStore resolveIceServersFor by pcPeerId 过期/缺失 fallback Google STUN · 拦截 ice:config 持久化 iceServers / iceExpiry · SignalingRpcClient 同步备份 race-tolerant · QR payload 移除 iceServers 字段(650 字符 + 280px + error-H 识别率 30s 阻塞实测改信令 push) · backend/signaling-relay-service/ 入仓 · 设计文档 Android_Remote_Operate_Plan_AB.md

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。客户端按场景 fall-through:优先尝试 DataChannel 失败 fallback 信令 forward。Plan A 核心改动:(1) 中继 server.js handleMessage switch 新增 case offer/answer/ice-candidate/ice-candidates/peer-status 与 type=message 同路径 forward + 注入 from 字段(取 ws 已 register 的 peerId 与 LAN signaling-handlers 行为一致 桌面 handleOffer 内部 socket.peerId 或 message.from 取对端 relay 路径必须显式补 from)。(2) 桌面 main startRelayClient.onMessage 简化为统一 dispatch 不再按 type case:pair-ack 仍单独路由 写 sessionState 其余(command:request 或 offer 或 answer 或 ice)交给 mobileBridge.handleSignalingMessage 同款 dispatcher 本来就按 msg.type 分发到 handleOffer 或 handleAnswer 或 handleICECandidate 或 handleP2PMessage —— LAN 路径与 relay 路径完全等价。Plan B 核心改动:(1) coturn 4.6 docker compose host network UDP relay 端口范围 49152-65535 host network 避免 NAT 转换 监听 0.0.0.0:3478 UDP+TCP + 5349 TLS 域名 turn.chainlesschain.com A 记录 47.111.5.128 Let_s Encrypt 证书 acme.sh @gitee 镜像 GitHub 大陆访问受限 鉴权 use-auth-secret time-limited credentials。(2) signIceCredentials(userId) 签发:username = expiry-ts:user-id credential = base64 HMAC-SHA1 TURN_SECRET username iceServers 返回 stun:turn.chainlesschain.com:3478 + turn:3478?transport=udp/tcp + turns:5349 三档优先级 + 凭证。TTL 24h 足够单设备使用过期前用户多半已重新配对。env CC_TURN_SECRET 强制必填源码里没有 fallback 绝不硬编码 secret(任何 fork 也无法签出生效凭证)缺 env 时降级 STUN-only(LAN + 双 NAT 友好场景仍能 WebRTC 跨 NAT 不可用)。(3) 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 给手机 mobileDid。手机端 WebRTCClient.setOnForwardedMessageReceived 拦截该 type persistIceConfigMessage upsert PairedDesktopsStore.iceServersJson 同步加 SignalingRpcClient.handleIceConfigMessage 监听备份 race-tolerant 万一 WebRTCClient 未初始化时 RemoteOperate 路径也能 catch。(4) Android WebRTCClient.createPeerConnection 时 resolveIceServersFor(pcPeerId) 用 stored iceServers 含 turn.chainlesschain.com TURN fallback Google STUN 过期检查 desktop.iceExpiry > 0 且 now > iceExpiry fallback。parseIceServersJson 支持 urls 既可以是 string 也可以是数组。完整 plan A+B 配合数据流:配对阶段 phone scans QR pair-ack desktop persist SQLite + push iceServers phone receives ice:config PairedDesktopsStore upsert;WebRTC 建连阶段 phone opens RemoteControl WebRTCClient.connect(pcPeerId) createPeerConnection 用 stored iceServers 含 TURN createOffer signaling forward LAN or relay desktop handleOffer setRemoteDescription createAnswer forward back ICE candidate exchange via forward STUN/TURN 打通 DataChannel open。命令路径分流:Low-freq SignalingRpcClient relay forward Plan C / Hi-throughput DataChannel direct Plan A / NAT-hard TURN relay Plan B DataChannel through relay。阿里云安全组要求 UDP 3478 / TCP 3478 / TCP 5349 / UDP 49152-65535 全开放给 0.0.0.0/0 未开端口 coturn 容器跑但外部不可达 WebRTC ICE 收集失败 DC 建不起来。已知限制 / 待办:iceServers TTL 24h 过期后 fallback Google STUN 跨 NAT 不通 后续 mobile 检测 expiry 临近经信令请求新凭证;WebRTC P2P 端到端真机跨 NAT 实测待补 v1.4 GA 前做一次 phone 4G + desktop home WiFi 完整 file-transfer 流;Signal Protocol E2EE 待 Plan A DC 通了再考虑 DC 已是直连 TLS 之外加 Signal 收益边际;coturn 凭证管理 API 长期需 backend HMAC 签发 API 鉴权用户身份后才签。设计文档 docs/design/Android_Remote_Operate_Plan_AB.md。

阅读设计文档 →
07 · Highlight
v5.0.3.50 · #21 项目工作流

v1.2 GA 反馈 5+3 项整合: 桌面↔手机项目工作流 P1+P2+P3A + 删除 fix + 日常模板

cc project CLI 4 子命令直写 desktop SQLite WAL · project-management-handler 6 actions 暴露 L3 REMOTE · ProjectSyncWalker + CompositeSyncRepositoryWalker 补反向 sync 缺口 · web-shell Projects.vue 项目管理列表 + 6 in-process WS topics 复用同一 handler 服 web-shell + mobile · 11 日常模板替换 11 IDE 模板 · 删除 UI 修复 · 北极星 手机 AI 项目交互像电脑端那样丝滑 · 80 Android + 51 Desktop tests 全过

v1.2 GA 反馈到位后整合 5+3 项 issue 21 https://github.com/chainlesschain/chainlesschain/issues/21 #2/#3/#4/#5/#7/#8。北极星目标 手机端做 AI 项目的交互要像电脑端那样丝滑。分两阶段。阶段 1 (前期 P0 GA 上架前) A.3 ADR review + B.6 PQC 严格模式 verifier + B.2 削 web-shell multisig cc subprocess 冷启 + AI-3 forward-compat seam + 2 bug fix 已落 commit 348896382 / e24386d00 / b1c7cfd95 / 45a88270e / c0d061328 / 409afddcd。阶段 2 (中期 v1.2 GA 反馈到位) 项目工作流四件套: #2 项目无法删除 fix (commit fc24f9856) EnhancedProjectCard 完全没有 delete UI 旧 ProjectListScreen 的 delete 代码是死代码未连入 NavGraph 加 3-dot 菜单 + AlertDialog 确认 onDeleteClick 调 viewModel.deleteProject DAO softDelete status deleted Room Flow 自动从列表移除。#3 模板改日常 11 个 (commit 99d38bf69) L1+L2+L3 mobile 定位下用户不是程序员原 11 IDE 模板 Android React Spring Flutter 等跟使用场景不符整个 ProjectTemplates 重写为日常生活模板购物清单 旅行计划 读书笔记 灵感收集 健身计划 食谱记录 学习计划 家庭账本 工作日志 会议记录 空白 TemplateCategory 加 5 新类目 DAILY TRAVEL STUDY HEALTH FINANCE。#4/#7 桌面 CLI + REMOTE handler P1 (commit 32ccabdb5) packages/cli/src/lib/project-runtime.js SQLite cascade native better-sqlite3-multiple-ciphers better-sqlite3 sql.js WASM 自动 fallback + Electron userData path resolution Win macOS Linux + cc project init/list/show/delete 4 subcommands 直写 desktop chainlesschain.db WAL 并发安全。desktop-app-vue/src/main/remote/handlers/project-management-handler.js 6 actions list get init delete listFiles getFile 暴露给 Android L3 REMOTE 调用复用 desktop DatabaseManager。CLI 7 integration tests + handler 21 unit tests 全过。#4 Android→Desktop 反向 sync P2 (commit 2646bbb4e) audit 发现桌面→手机 sync 通 mobile-bridge-sync _fetchProjects walker + Android ProjectSyncApplierImpl 反向手机→桌面断 SocialSyncWalker 不含 projects 表。新增 ProjectDao.getProjectsSinceCursor 无 status 过滤让 status=deleted 也 emit + ProjectSyncWalker.kt feature-project 约 120 行 op mapping CREATE/UPDATE/DELETE snake_case JSON 对齐 desktop + CompositeSyncRepositoryWalker.kt :app/sync 聚合 SocialSyncWalker + ProjectSyncWalker + SyncWalkerModule.kt Hilt @Binds 替换 feature-p2p single-walker binding。P2PModule.kt 注释旧 binding。ProjectSyncWalker 12 tests + CompositeSyncRepositoryWalker 7/7 tests 全过。顺手修 5 个 pre-existing feature-project 测试 kotlin.test.* org.junit.Assert.* imports 解锁 :feature-project:compileDebugUnitTestKotlin。#5/#8 web-shell Projects + in-process WS P3 Part A (commit bfdde637d) desktop-app-vue/src/main/web-shell/handlers/project-handlers.js 6 in-process WS topics 包装 P1 ProjectManagementHandler DRY 复用同一 handler 同时服务 web-shell + mobile L3 REMOTE 避免 ws.execute(cc project …) asar:true 子进程冷启 6-10s。packages/web-panel/src/views/Projects.vue 重写为真项目管理页 4 stats + state/name filter + table id/name/type/status/sync_status/updated_at + Detail drawer 含 Descriptions + 文件列表 + Create 模态框 10 types useShellMode.isEmbedded 分发 in-process vs ws.executeJson 兜底。原 Projects.vue 项目 init/setup/templates 内容 cp 过来到 ProjectInit.vue 路由 /project-init 保留 backward 访问。project-handlers 7 unit tests 全过。version 不 bump 等 P3 Part B Android ProjectCommands.kt 落地 + 用户验证 P1+P2+P3A 后与 P1 主体一起 release。

阅读设计文档 →
08 · Highlight
v5.0.3.50 · #21 P0

Android v1.3+ P0 前置三项 GA-independent 收口 + AI-3 forward-compat + 2 bug fix

A.3 ADR Review v2.0 (8 ADR audit 5 keep / 2 amend / 1 revise) · B.6 LandmarkCache.strictPqMode opt-in 拒收 Ed25519 partial sig · B.2 web-shell multisig.* in-process WS topics 冷启 6-10s → ~20ms 60-100× 提升 · AI-3 SkillMetadata.signature forward-compat + NoOpManifestVerifier swap seam · 修 wear test imports + B.6 disk-load gate 2 bug · 测试 11+23+10+57+379 全过 · version 不 bump (v1.2 GA 后随 P1 主体一起 release)

v1.2 GA 上架前的 P0 前置批次。issue 21 https://github.com/chainlesschain/chainlesschain/issues/21 A.3 ADR review + AI-1 amend (commit 348896382):8 ADR 全 audit,5 keep + 2 amend (ADR-7 cc-mobile.json 从未创建实际走 user_settings + mobile.* scope,ADR-8 实际 disk-first + push-based 非 pull) + 1 revise (ADR-2 M2 DID wallet 走软件 Ed25519,blocks B.3 DID rotate)。ADR-2 选项 A/B/C 决策待 v1.2 GA Play Console API level 数据。同 commit 设计文档 §10 v1.3+ scope triage 分层 12 子项 P0/P1/P2 + 5 依赖链。B.6 PQC 严格模式 verifier (commit e24386d00):packages/core-mtc/lib/landmark-cache.js 加 strictPqMode opt-in flag + _assertStrictPqMode landmark-level gate + _assertStrictPqModeForSnapshot per-snap gate + STRICT_PQ_MODE_VIOLATION error code + CLASSICAL_ALGS 常量。Reading A 语义拒收任何 alg === Ed25519 的 partial sig + publisher_signature。与现 heterogeneous federation 数据格式兼容,0 schema 改动,0 producer 改动。B.2 削 cc subprocess 冷启 (commit b1c7cfd95):desktop-app-vue/src/main/web-shell/handlers/multisig-handlers.js 新增 7 个 in-process WS topics 镜像 CLI --json shape (multisig.list/show/policy.show/cancel/finalize/sweep + marketplace.consume)。Topics 调 openMultisigManager() from CLI multisig-runtime.js,dynamic-import 跨 CJS/ESM 边界。Multisig.vue 加 callMultisigTopic() helper 用 useShellMode().isEmbedded 分发;7 处 ws.executeJson 全切。性能 asar:true 子进程冷启 6-10s → in-process ~20ms (SQLite open) + 查询,60-100× 提升,UX 0 改动。AI-3 SkillMetadata.signature forward-compat (commit 45a88270e):Android Kotlin 新增 ManifestSignatureVerifier interface + sealed VerificationResult.{Accepted/Rejected(reason)} + object NoOpManifestVerifier always-accept stub。SkillMetadata 加 signature: String? = null field + init invariant。RemoteSkillRegistry 加 @Volatile manifestVerifier + setManifestVerifier(v) swap seam + updateFromRemote 跑 verifier per-skill (Accepted 合并 Rejected Timber.w warn-log + 跳过)。Marketplace M0 (#21 AI-5) 上线时注入真 Ed25519/SLH-DSA hybrid verifier 即可,调用方 0 改动。Bug fix 1 wear test imports (commit c0d061328):CcPhoneDecisionListenerTest 自 cc08da0b0 v1.2 #20 P0.2 起用 kotlinx.coroutines.GlobalScope.launch 但 imports 缺 launch/delay/GlobalScope/DelicateCoroutinesApi,block 整个 :app:compileDebugUnitTestKotlin,加 4 imports 解锁。Bug fix 2 B.6 disk-load gate (本次 QA sweep test-driven 发现):LandmarkCache.loadFromDisk() 直接调 _validateAndStoreSnapshot bypass ingest 的严格模式 gate;strict mode OFF 写入磁盘的 Ed25519 landmark 下次 strict mode ON 加载时仍接受 silent invariant 违反;修:per-snapshot 严格检查移到 _validateAndStoreSnapshot 头部统一处理,+2 disk-load integration tests 锁回归。测试:B.6 landmark-cache-strict-pq-mode 11/11 (9 原 + 2 disk-load) + B.2 multisig-handlers 23/23 unit tests via runtimeFactory 注入 seam + AI-3 ManifestSignatureVerifier 10/10 + SkillMetadataTest 9/9 + RemoteSkillRegistryTest 38/38 regression + web-shell 379 regression 25 test files 全过。version 不 bump:本批是 v1.2 GA 前置工,待 v1.2 GA 上架反馈到位时与 P1 主体一起 release。

阅读设计文档 →
09 · Highlight
v5.0.3.50

Android Remote Operate Plan C 信令转发 RPC:桌面遥控器真接通

配对完成后手机点 Ping/系统状态/系统信息 → 桌面执行 → 响应返回 (commit f8ec994ef) · SignalingRpcClient 30s withTimeout + LAN→relay 自动 fallback (reset gate + 切 URL + re-register + 重试) · RemoteOperateScreen 3 chip 按钮 + JSON 响应 + NavGraph remote_operate/{peerId} · PairedDesktopsStore SharedPreferences 持久化已配对桌面 idempotent by pcPeerId · Desktop RelayClient outbound 长连 wss://signaling.chainlesschain.com 指数退避自重连 max 60s · mobile-bridge.handlePairAckFromRelay bug fix (?. 静默吞 relay pair-ack 不触发事件 — 补 EventEmitter 通知与 LAN 对称) · MobileBridgeHeaderStatus.vue header 显示已配对 mobile 数量 5s 轮询 + parseJsonOutput 跳过 CLI log 前缀 · 11 i18n 字符串 → values/strings.xml + values-zh-rCN/strings.xml · 3 新单测文件 / 20 测试全绿 (PairedDesktopsStoreTest 7 / SignalingRpcClientTest 7 / RemoteOperateViewModelTest 6) · 设计文档 Android_Remote_Operate_Plan_C.md

配对(v5.0.3.49 W3.7 Flow B QR)完成后下一步:让手机真正"操控"桌面。三条路径:A WebRTC P2P 直连大工程 + B STUN/TURN 穿透中工程 + C 复用配对已通的信令 forward 管道小工程。Plan C 务实先行:pair-ack 已走 forward 路径并打通双向收发,桌面 handleMobileCommand 已接好,只缺手机端 SignalingRpcClient + 简单 UI 屏。A+B 留后续(视频流、实时同步、高频小消息)。(1) SignalingRpcClient 落地 (app/.../remote/client/SignalingRpcClient.kt):构 {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 配对路径同模式。(2) RemoteOperateScreen + ViewModel (app/.../remote/ui/RemoteOperateScreen.kt):极简 UI 3 chip 按钮 Ping/系统状态/系统信息 + 响应 JSON 显示 + 解除配对;首页"已连接桌面"卡片点击 → NavGraph 跳 remote_operate/{peerId}。(3) PairedDesktopsStore (core-p2p/.../pairing/PairedDesktopsStore.kt) SharedPreferences JSON 落已配对桌面列表 (pcPeerId/deviceName/lanSignalingUrl/relayUrl/pairedAt/lastSeenAt);upsert idempotent by pcPeerId;首页改读 store 而非 p2pClient.connectedPeers — Plan C 不建持久 P2P 连接,扫码后信令立刻断 connectedPeers 即空,UX 反直觉的根因。(4) Desktop RelayClient (desktop-app-vue/src/main/p2p/relay-client.js) outbound 长连 wss://signaling.chainlesschain.com,register 桌面 pcPeerId 必须与 mobileBridge.peerId 一致否则外网手机找不到目标 peer,onMessage 路由 pair-ack/一般 mobile command 进 recordPairAck/handleMobileCommand 与 LAN 同一管道;指数退避自重连 max 60s。(5) mobile-bridge.handlePairAckFromRelay bug fix:main/index.js 调 this.mobileBridge?.handlePairAckFromRelay(...) 但方法之前不存在,optional-chain ?. 静默吞掉 relay 路径 pair-ack 不触发任何事件;补 EventEmitter 通知与 LAN 行为对称。(6) MobileBridgeHeaderStatus.vue web-panel header 显示已配对 mobile 数量,5s 轮询 cc p2p devices --type mobile;parseJsonOutput 跳过 CLI log 前缀 [AppConfig]/[DatabaseManager] 等避免 false-positive 匹配为 JSON-array 开头。(7) 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 启动快几个数量级)/ 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)。两个关键技术决策:用 runCurrent() 而非 advanceUntilIdle() — SignalingRpcClient 内部 withTimeout(30000) 用虚拟时间 advanceUntilIdle 会把时间推到 30s 后触发误超时;新增 testImplementation org.json:json:20240303 — Android SDK 自带的 org.json.JSONObject 在 isReturnDefaultValues=true 下方法静默返默认值而非真解析 JSON。ScanDesktopPairingViewModelTest signaling gate failure surfaces Failed 改期望 sendAckCallCount == 2 LAN+relay 双打。Desktop vitest 7600+ 套全绿。Plan C 真机 E2E 入用户出场清单与 Flow B 验证 pattern 一致。约束:信令一跳 + 公网中继多一跳 p99 100-500ms 低频命令可接受;中继 TLS 但服务器看得到 payload 端到端加密需上 Signal Protocol session;中继宕 = Plan C 不可用 LAN 仍工作。路线图:Plan C ✅ 落地 → Plan A.1 DataChannel 复用 → Plan A.2 高吞吐场景真 P2P 直连绕中继带宽 → Plan B STUN/TURN 穿透。设计文档 docs/design/Android_Remote_Operate_Plan_C.md。分发:桌面 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。

阅读设计文档 →
10 · Highlight
v5.0.3.49

M-of-N multisig Phase 1d + Phase 2a marketplace mediator + Phase 2b web-panel Multisig view + Android v1.1 W3.7 Flow B QR pairing 收口 + 测试补丁

@chainlesschain/core-multisig 5 lib + 75 单测 · cc multisig 8 subcommands + 10 集成测试 (Phase 1d) · cc marketplace purchase / consume mediator + 8 E2E + multisig-runtime.js 共享减 130 行 (Phase 2a commit 2755093d0) · web-panel Multisig.vue 视图 6-card stats + 提案列表 + 域策略 + Detail drawer + sidebar 入口 ws.executeJson 走 CLI 子进程 (Phase 2b commit c758492d9) · 总 18 multisig integration test · SQLite native → sql.js WASM 自动 fallback · Flow B (commit c47cbc649) Xiaomi 真机 E2E verified · ScanDesktopPairingViewModel 10 测试 + desktop-pair-handlers 19 测试

本版四条主线。(1) `@chainlesschain/core-multisig` package + `cc multisig` CLI 落地(commit 3c890dcac,v1.2 m-of-n Phase 1d):Phase 1 完整 5 个 lib —— policy.js 域级 {m,n,members[],requirePqc,defaultExpiryMs} validate/normalize;store.js SQLite 3 表 schema (proposals/signatures/policies) + 5 helper;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 审计 log,每态转捕。75 lib 单测(policy 14 + signing 21 + proposals 20 + store 12 + governance-log 8)全过。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,CLI 跨平台开箱即用无须每平台预装 native prebuild。marketplace.purchase / did.rotate / 跨链 bridge 三大典型 domain 由此解锁。测试基础修复 3 项:core-multisig vitest.config.js 设 globals: 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 无后缀)。(2) Phase 2a marketplace.purchase mediator(commit 2755093d0,设计文档 §6.1 落地):cc marketplace purchase <itemId> --amount-fen N --buyer <did> --key <hex> [--threshold-fen N] [--item-name <name>] —— amount < threshold (default LARGE_PURCHASE_THRESHOLD_FEN = 100000 fen = ¥1000) 走 direct path (CLI stub 打印 "purchased");amount ≥ threshold 必须有 marketplace.purchase 域 policy,否则 exit 2 no_policy;有 policy 调 mgr.propose 返 proposalId 让其他签名方加签。cc marketplace consume <proposalId> —— 校验 domain == "marketplace.purchase" + state == "reached" 才执行,finalize 后打印订单 payload + governance log 写 consumed 事件,错域/错态都 exit 2。共享运行时 packages/cli/src/lib/multisig-runtime.js(新文件)抽 Phase 1 commands/multisig.js 内联的 SQLite cascade (better-sqlite3-multiple-ciphers → better-sqlite3 → sql.js) + manager loader + readSecretKey / readJsonArg helpers,让 commands/marketplace.js 复用同一份;commands/multisig.js refactor 替代内联减 130 行 dedup,Phase 1 10/10 integration test 零行为变更。8 新 E2E 测试(packages/cli/__tests__/integration/marketplace-multisig-e2e.test.js)全 green:(a) 大额 ¥1500 2-of-2 全 walkthrough policy set → purchase 创 proposal → 2 签名方加 sign → reached → consume → finalize → governance.log 4 类事件 proposed/signed×2/reached/consumed;(b) 小额 ¥500 走 direct path 不创 proposal;(c) --threshold-fen 覆盖默认;(d) 大额无 policy → exit 2 blocked;(e) consume pending → exit 2 proposal_state_pending;(f) consume 错域 → exit 2 wrong_domain;(g) --help 文本验证;(h) Phase 1 兼容性回归。总 18 multisig integration test 全 green(Phase 1 10 + Phase 2 8)。marketplace.purchase 是第一个真接通业务侧的 mediator。(3) Phase 2b web-panel Multisig 视图落地(commit c758492d9,设计文档 §8.1 落地):web-shell(默认桌面入口)加 M-of-N 多签查看 / 操作面板,Phase 1 CLI 的 cc multisig list/show/cancel + cc marketplace consume 通过 ws.executeJson(...) 走 CLI 子进程。新 packages/web-panel/src/views/Multisig.vue (468 行):6-card 顶部 stats — 总提案 / 待签 pending / 已达阈值 reached / 已执行 consumed / 已取消 cancelled / 已过期 expired,各带 Ant icon + 色彩 token;两个 tab — 提案列表(表格 columns ID/Domain/State/Sigs/Created/Expires/Actions + state 过滤器 pending/reached/consumed/cancelled/expired + domain 过滤;行 actions 详情 / 取消 / 执行购买 marketplace.purchase reached only)+ 域策略(列已知 domain marketplace.purchase / did.rotate / crosschain.outbound 的 policy 详情 + 成员展开);Detail drawer (640px) Descriptions 显 domain / state / threshold / sigs / initiator / timestamps / payload JSON pretty + 签名列表 signer DID + alg + 时间 + 操作按钮 取消 pending|reached / 执行购买 marketplace.purchase reached / finalize 其它 reached + info Alert "web shell 不持私钥,sign 操作走 CLI";顶部操作栏 刷新 + 扫过期 调 cc multisig sweep。AppLayout.vue 在 security/audit 组加 multisig menu item (TeamOutlined icon) + 折叠模式 (右侧) 同步加 multisig 入口 + i18n fallback "M-of-N 多签" — appLayout.items.multisig 未配时显示中文。router/index.js 加 { path: "multisig", name: "Multisig", component } 路由。WS 通信走 ws.executeJson("multisig list --json") 等 CLI 子进程(CLI WS server _executeCommand 路径);第一次冷启动 6-10s asar:true 开销 per mtc-status-handlers.js comment — Phase 2 可接受。同份 SPA 在 desktop web-shell + cc ui 双 surface 自动可用 per memory feedback_cross_shell_feature_pattern。Phase 3 留 follow-up:私钥签名 UI 需 Unified KeyStore 接通 / WS in-process handlers multisig.list/multisig.show/... 削延迟 / 实时推送 现 onMounted 拉取一次无 WS 订阅 / Marketplace.vue 集成入口 purchase modal 直接进 multisig 流程。(4) Android v1.1 W3.7 Flow B QR pairing 落地(commit c47cbc649):desktop 显 QR / phone 摄像头扫桌面屏幕的主流应用通用 UX(微信/支付宝/Discord/WhatsApp Web 同模式)— 手机摄像头扫桌面屏幕 QR 比反向(desktop webcam 扫小手机屏 QR)识别率高得多。Xiaomi 24115RA8EC 真机 E2E verified。跨模块 DI 拆解:PairingSignalingGate.sendAck interface 落 :core-p2p 避免 :feature-p2p 反依赖 :app;WebSocketPairingSignalingGate.sendAck 实现在 :app 内 ensureRegistered + Mutex 串行化;WebRTCClient.SignalClient.sendForwardedMessage(toPeerId, payload) 桥接 mobile 端的 signaling forward。Mobile 端 UI:ScanDesktopPairingScreen + ScanDesktopPairingViewModel 用非-social QRCodeScannerScreen(ZXing 透传);NavGraph + SettingsScreen 加 "扫描桌面 QR" 入口(推荐路径)。Desktop 端 WS topics 三件套 desktop-pair-handlers.js:desktop.pair.generate-qr(6 位 code + payload + pcPeerId 三段 fallback:mobileBridge.peerId → deviceManager.getCurrentDevice → "desktop-unknown")/ desktop.pair.poll-ack(idle/waiting/acked/expired 四态)/ desktop.pair.reset;mobile-bridge.js 加 this.peerId 持久化 + 拦截 type=pair-ack 经 recordPairAck 匹配 + 写 SQLite paired_devices。Vue UI MobileBridge.vue Flow B tab(默认)+ Flow A + 手输 3-tab;antd.js 注册 AQrcode。真机 E2E 链路:Xiaomi 24115RA8EC desktop QR → ML Kit 扫 → signaling pair-ack → desktop mobileBridge 拦截 → recordPairAck 匹配 → CLI pair-from-qr 写 SQLite → Vue 列表刷新。9 项实战坑全排清。(5) 测试补丁:ScanDesktopPairingViewModelTest.kt(新增 10 测试)覆盖 onQrScanned 全部 validation 分支 + happy path + retry + idempotent + malformed JSON,MockK + StandardTestDispatcher + FakeGate 捕获 sendAckCallCount;desktop-pair-handlers.test.js(新增 19 测试)覆盖 3 handler factory + recordPairAck:generate-qr 6 case / poll-ack 4 case 用 vi.useFakeTimers 验 expired / reset 1 case / recordPairAck 4 case。Android :feature-p2p:testDebugUnitTest 41s 全绿(138 actionable tasks);Desktop 3 文件 / 45 测试全绿。分发:桌面 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 完整移动客户端。

阅读设计文档 →
11 · Highlight
v5.0.3.48

Android M3 capture suite (5/5 code) + M4 RemoteSkillRegistry method-level + ApprovalUI 4-category + ProgressViewer + alias 兼容窗口 + M7 Android v1.0.0 GA flip

设计文档 §5.3 五件齐落 VoiceMode/CameraOCR/LocationTagger/SharePayloadFlusher/PushNotifier · §6 M4 D1 method-level 元数据 · §5.4 ApprovalUI 4 类适配 + ProgressViewer task.* reverse-RPC · §8.3 alias 兼容窗口 · Android versionCode 37 → 100 / versionName 0.37.0 → 1.0.0 GA (commit ffe722162) · 187 新单测全绿 / Android 总单测 196+ → 383+

Android v1.0 RFC M3 + M4 收尾批次(7 commit / 187 新单测)+ Android M7 GA flip 一并落地(commit ffe722162,versionCode 37 → 100,versionName 0.37.0 → 1.0.0)。无桌面 / CLI 源码改动,CLI npm 0.161.7 → 0.161.8(force publish 走 release.yml 同步轨道)。(1) M3 capture suite 5/5 全部进代码层:VoiceMode 连续语音串联(commit 47bebed80,ASR → REMOTE chat → TTS pipeline);CameraOCR 拍照入 KB 流水线(commit a69269ced,ai.ocrImage + knowledge.createNote 走完);LocationTagger Play Services FusedLocationProvider + Foreground Service(commit 3f5ac8647,GPS 进 createNote.metadata);SharePayloadFlusher 接 SyncCoordinator → knowledge.createNote(commit 3d1a6e3a8,5 种 SharePayload 转 note 字段,30s push 循环末尾 drain SharedInboxRepository,失败 re-enqueue,19 新单测);PushNotifier 本地通道 + FCM 骨架(commit c0d990c91,4 NotificationChannel Cowork/Marketplace/SystemAlert/ShareInbox + 协议中立 CcPushNotificationService 入口,36 新单测,google-services.json 真接入按 android-app/docs/M3_FCM_SETUP.md 5 步用户出场)。(2) M4 D1 RemoteSkillRegistry method-level 元数据补全(commit 6e49270fd):MethodMetadata (name/paramCount/riskOverride/requiresApprovalOverride) + listMethods/getMethod/requiresApprovalForMethod/riskForMethod accessor;knowledge.* + ai.* 各 10 methods seeded 含 8 riskOverride 演示;其他 21 namespace pending 桌面 mobile-skill-whitelist 下发。16 新单测。(3) M4 收尾两件(commit f4f83cc67):ApprovalUI 4 category 适配 — ApprovalCategory enum {Sign/Cowork/Marketplace/SystemCritical} + fromMethod 推断,AndroidApprovalGate 4-arg overload 透传 category(旧 3-arg 自动 forward),Dialog 按 category 切 icon/tint/title/footer;ProgressViewer 长时任务面板 — LongTaskRegistry @Singleton MutableStateFlow (Pending/Running/Completed/Failed/Cancelled,MAX_TASKS=100 滑窗) + TaskProgressCommandRouter 接 task.* reverse-RPC (update/complete/fail/cancel/remove) + Compose ProgressViewerScreen (StatusChip + Linear/indeterminate Circular + dismiss/clear-terminal)。共 43 新单测 (9 + 15 + 19)。(4) §8.3 alias 兼容窗口(commit 0bc8e2797):SkillMetadata.aliases 字段 + 内部 aliasIndex 反查;get/listMethods/requiresApproval/risk* 全部经 resolveAlias 路径;未来 namespace 改名时旧调用方 1 版内不 break。7 新单测。(5) §8.1 README versionName + 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 。(6) M7 Android v1.0.0 GA flip (commit ffe722162):android-app/app/build.gradle.kts versionCode 37 → 100、versionName 0.37.0 → 1.0.0;android-app/CHANGELOG.md 加 [1.0.0] - 2026-05-12 GA entry 汇总 9 commits + 4 项已知限制;android-app/README.md 标题切 "🎉 v1.0.0 — GA"。下一步 tag v1.0.0 在 ffe722162 推 gitee+github。v1.0 GA 仍待用户出场 4 项:M3 真机 E2E / M4 D2 真机 / FCM 凭证 / M6 性能实测。

阅读设计文档 →
12 · Highlight
v5.0.3.47

Verification release:build-android keystore fix VERIFIED + density splits 14→4 用户侧首落 + outstanding `../` 全扫净

release.yml run #25632845952 全 11 jobs 绿 · build-android keystore 修复确认 · 4 Android assets 入 Release · keystore.properties.template / KEYSTORE_SETUP.md / orphan workflow 三处 `../` 扫尽

验证型发版。无桌面 / CLI / Android 源码改动,只把 v5.0.3.46 后陆续落的 3 个 release-pipeline 修复在 CI 实跑证明 green。(1) build-android keystore 修复 VERIFIED (commit f9a7ba716):49f1440ca 把 android-app/app/build.gradle.kts:79 从 file(...) 切到 rootProject.file(...) 让 release.storeFile 路径解析基准从 :app 模块改成 rootProject (android-app/),workflow 写的 `release.storeFile=../debug-ci.keystore` 在新基准下错位到 repo root,v5.0.3.46 build-android 因此挂在 :app:validateSigningRelease。f9a7ba716 在 workflow 端去掉 `../`,让 rootProject.file("debug-ci.keystore") 直接解到 android-app/debug-ci.keystore(正是 keytool 输出位置)。v5.0.3.47 release.yml run #25632845952 build-android 真绿 verified,4 Android assets(app-{arm64-v8a,armeabi-v7a,universal}-release.apk + app-release.aab)正确入 Release。(2) Density APK splits 用户侧首落(commit 9865c5c08):v5.0.3.46 已合但因 build-android 挂没产出 release assets,本轮首次以 release 形态用户可见:每 density × ABI splits 在 Android 5.0+ runtime resource selection 加持下意义不大,移除后 release asset count 14 → 4(3 APK + 1 AAB),AAB 上 Play Store 继续走 bundle{} 块的 density delivery 不影响用户。(3) 剩余 `../` 三处扫净(commit 5a06421cd):f9a7ba716 只修 workflow;keystore.properties.template / docs/guides/KEYSTORE_SETUP.md / orphan android-app/.github/workflows/android-release.yml 同病的 `../` 这次一并扫掉。约定全 repo 统一:release.storeFile=keystore/<name>.keystore(无 `../`),物理 keystore 落 android-app/keystore/<name>.keystore。KEYSTORE_SETUP.md 的 CI 例子顺手加 `working-directory: android-app` 保 keystore 落对位置。orphan workflow 加头注释说明 `.github/workflows/` 嵌套层级 GitHub Actions 不会执行。桌面 binary 重打 v5.0.3.46 → v5.0.3.47 二进制内容等价,auto-updater 比对 `5.0.3-alpha.47 > 5.0.3-alpha.46` 让 v5.0.3.46 用户重启拿到新 build。`chainlesschain` npm 维持 0.161.7。Android versionCode/Name 不变但 APK 因 density splits 关闭从 14 → 4 个产物。

阅读设计文档 →
13 · Highlight
v5.0.3.46

Phase 3d 桌面 ↔ Android 双向同步全套 + Android 0.37.0 七件套 + e2e CI 静默回归洞收口

Mobile-bridge-sync M2 → v1.2 · gate 1-4 全部 Ed25519 · Volcengine 语音 / APK 自更新 / Splash 重做 / Coral 主题 / i18n 三地区 / 生物识别 / DID Key

三条主线一次 ship。(1) Phase 3d 桌面 ↔ Android 双向同步(12 commit):M2 桌面 sync engine 落地(5 ResourceType walker:note / conversation / did / community / channel + tombstones + IPC wire-up + 52 测试,过程中找出修 3 prod bug);M3 Android 侧用 dagger.Lazy 解 4 处 Hilt 循环 + Room 持久化 SyncRemoteCursor + sync.* JSON-RPC handlers + transport wiring;M4 桌面 SyncMobile 设置页 + DeviceManager + 手动 pairing 表单;v1.1 SocialSyncWalker 真填 handlePullRpc + DID auth 验证 + SyncCoordinator socket 连上自动 trigger;v1.2 真 @noble/ed25519 签名 + Android gate 4 验签,gate 1-4 全部 strict-verify。(2) Android 0.37.0(commit 1348636ad,7 件用户可见):Volcengine SeedASR 语音(16kHz mono PCM + 800ms poll + AsrSettingsScreen + Recording/Transcribing dialogs);APK 自更新 issue #21(GitHub Releases android-v tag arm64-v8a + DownloadManager + REQUEST_INSTALL_PACKAGES + Settings 检查更新入口);Splash 紫色渐变旋转环 + TT logo + 修 splash race;Claude coral 主题 #D97757 primary + dynamicColor=false 保品牌色;i18n issue #16 三地区 zh-rCN/rTW/rHK 显式 qualifier + AppCompatDelegate locales;生物识别 toggle 接 AuthVM;KeyManagementScreen DID + public key hex + trusted devices + reset;顺手修 OpenAIAdapter 主线程 12s 阻塞 + 256 个 rs_* string stub。(3) e2e CI 静默回归洞收口(commit e807d576c):drop e2e-tests workflow JOB 级 continue-on-error: true —— 之前让 3/3 OS 失败显示 success,"No team IPC interface found" 沉了几周;同期加 Playwright browsers cache + npm cache,单 OS 时间 ~14m → ~6-8m。

阅读设计文档 →
14 · Highlight
v5.0.3.45

cc ui llm.chat parity + 意图理解 opt-in 开关 + 真流式 + Vue Proxy 修复

QuickAsk 不再 60s timeout · 项目模式秒发不卡"理解中…" · chatStream queue+waiter · 占位卡 reactivity 修复

四条联动收口。(1) cc ui llm.chat 路由(f41c4b4e2):桌面 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 第一行短路:if (mode === "global" || !intentEnabled.value) { sendMessage; return }。桌面壳同享 SPA bundle,跟 cc ui 行为一致。(3) chatStream 真流式(35f6e60ea):packages/cli/src/lib/chat-core.js 的 chatStream 原本是 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 修复)。

阅读设计文档 →
15 · Highlight
v5.0.3.44

LLM OCR + audit-ipc 覆盖 + chat-intent 90s 兜底

截图三态 OCR · 18 channel × 23 用例首测 · 慢 LLM dribble 兜底

一条 user-visible feature + 三条质量收口。(1) 截图 OCR LLM 引擎(39b16e29f):Tesseract.js 中文准确度差,新增 engine 参数 auto/llm/tesseract 三态。auto 默认走火山豆包视觉(已配置),LLM 出错带 fallbackFrom / fallbackReason 标签自动降级回 Tesseract;llm 强制视觉 LLM(doubao-1.5-vision-pro,userBudget=medium);tesseract 强制本地。Provider 白名单 Set(["volcengine"]),扩展到 gemini / openai / anthropic 只需在各自 LLMManager 暴露 chatWithImage* 后加一项。V5/V6 共享 dialog + web-panel dialog 各加 `<a-select>` engine 选择 + 蓝/灰/橙三色 tag。(2) chat intent understand 90s wall-clock 兜底(6cbd04c50):sendStream 自带的 60s idle timer 在每个 chunk 上 rearm,慢 LLM dribble token 但永远不出 final frame 时占位卡无限转——AbortController + setTimeout(90s) 兜底。(3) compliance-ipc 死 handler 清理(29006decf):typo 前缀 compliance-classify:* 无人调用,背后还接的是不同 service,直接删 + 同步删 IPC_CHANNELS。(4) audit-ipc.js 首次单测覆盖(b092673be):之前零覆盖盲点拽出来 — 18 channel + DI 改造 + 23 用例。回归全绿:desktop 1477/1477 + CLI 17,455/17,455。

阅读设计文档 →
16 · Highlight
v5.0.3.43

MTC publisher_signature M-of-N 修正 + 安全硬化级联

HIGH 44→0 · MOD 4→0 · LOW 45→0 · publisher_signature strip-all-sigs 对称化

两条主线一次 ship。(1) MTC `landmark.publisher_signature` 修正:producer 与 verifier 对称 strip 全部 per-member sig(不只是 publisher_signature.sig)后再喂 JCS——否则篡改 M-of-N 联邦中任何一个成员 sig 都会炸 publisher_signature,直接绕过 M-of-N 阈值的存在意义。Helper 抽到 `@chainlesschain/core-mtc/publisher-signing` 子路径,三处调用点(batch.js 单签 + 联邦、landmark-cache.js 验证、桌面 governance-multisig.js)。`LandmarkCache` 默认 opt-in `verifyPublisherSignature:true`,real-verifier callers 全线启用。常量 BAD_PUBLISHER_SIG → BAD_LANDMARK_SIG(匹配 spec §11)。(2) 一周内 8 次 npm audit 清空:override `serialize-javascript`/`tar`/`semver`/`undici`/`make-fetch-happen`/`tmp`/`ip-address`/`dompurify`,drop 无人维护的 `speedtest-net`(改 native fetch)+ `werift` + `hdkey`,拆 hardhat-stack 到独立 contracts/ workspace,channel-manager DDL 加固,wrtc-compat 修补 CVE-2024-29415——HIGH 44→0 / MOD 4→0 / LOW 45→0。Bonus:updater 渲染端进度通知(notifier-only flow)。

阅读设计文档 →
17 · Highlight
v5.0.3.41

chat-panel-v5 三壳对齐 + B4 social 滚动收口

V5 / V6 / web-shell 聊天严格对等 · 私钥 / 密码均不过线

productVersion .40 → .41,正式 ship 前 4 个 5.0.3.40 续滚动条目(cred-persist + auto-archive、mofn-sign v2 + webpanel UI、merkle envelope finality、跨机同步 Phase A + Web Shell Phase 3c.7)以及两条新增:(A) V6 默认壳 AIChatPanel 反向对齐 V5 ChatPanel 4 件核心特性(流式响应 + 历史会话切换 + 上下文记忆引用 + 工具调用面板,Phase E commit b33527d31);(B) web-shell ChatPanel v5 端口 v1+v1.1(commit 72b13388a)port V5 全部 router 协议 / autoSendMessage 信号 / virtual list / 5 intent / 6 IPC 走 WS topic。从此 V5 / V6 / web-shell 三壳聊天体验严格对等,Phase 1.6 默认 web-shell 用户不再缺任何 V5 聊天能力。同时修:web-panel views-mount-smoke 在 63 文件并行套件 first-import 撞 30s timeout 走 file-level vi.setConfig({testTimeout:60_000})。

阅读设计文档 →
18 · Highlight
v5.0.3.40 续

P2P 社交全栈 audit-grade 闭环(§2.2.10 → §2.2.24)

15 节 14+1 commits · 私钥 / 密码均不过线

从"消息能跨机"到"全套审计闭环"15 个 sub-phase 一次性收口:跨机同步(Phase A 修 7 底层 bug) → MTC 联邦双轨(B v1) → DID 签名 + 自动 peer 桥接(B4) → Merkle 批 envelope finality(B4-merkle) → envelope gossipsub 跨机分发 + on-demand pull(B4-cross) → trust filter 按 community 成员校验(B4-cross-trust) → 桌面 viewer 按钮 + Modal(B4-ui) → 外部归档 filesystem + WebDAV(B4-archive) → M-of-N 多签 governance(B4-mofn) → 跨联邦信任锚扩展 trust filter(B4-crossfed) → 13 WS topic 给默认 web-shell(B4-webshell) → 4 composable + MtcAudit.vue UI(B4-webpanel) → sign-as-self v2 渲染端只发 ID(B4-mofn-sign v2 + 修一个潜伏 ~1 个月的 IPC bag 漏 12 manager bug) → WebDAV 凭据走 secure-config.enc(safeStorage / AES-256-GCM 双层加密 + 修一个潜伏 ~1 个月的字段名 baseUrl/remoteRoot vs url/remotePath bug)→ 主进程定时归档 cron(min 5min / per-community try/catch / runOnce 不重入 / lastRun* 自动持久化)。私钥 / 密码均不离开主进程,UI 默认壳全套可见,audit-grade 闭环。

阅读设计文档 →
19 · Highlight
v5.0.3.40

MTC 视图 in-process 提速 + CI 三发解锁

4 fix · 绕过 asar 冷启动 · 12224 测试

主修:v5.0.3.39 切到 `asar:true` 后 `cc` 子进程冷启动 6-10s,`Mtc.vue` `onMounted` 三发并发必爆 8s/6s timeout("状态加载失败 / 加载桥 MTC 状态失败")。新增 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` 双路径分叉。同时打包三发 CI 修复:macOS `realpathSync` 把 `/var → /private/var` 当 symlink → POSIX 改 `lstat`;rules-validator 把测试 fixture `TestDbManager.exec(sql)` 报红 → 排除 `__tests__`;CLI subprocess Win cold-start 超 10/15s execSync timeout → 统一 60s。

阅读设计文档 →
20 · Highlight
v5.0.3.39

B4 ASAR surgery — Win 安装 20m → ~5m

issue #8 · 23 单元 + 集成测试

Windows 安装时间从 ~20 分钟回到 ~5 分钟。重启 asar:true(v5.0.3.4-13 因 walker 漏 4 个 transitive deps 改 asar:false 兜底,代价是 ~110k loose files 入 NSIS = ~20 分钟安装地板)。新 afterPack 钩子里跑 surgery:extract → inject 4 个 walker-dropped 包 → repack 保留原始 unpackDir 决策;Win 包装脚本处理 workspace symlinks。

阅读设计文档 →
21 · Highlight
v5.0.3.5

MTC v0.11 — 跨联邦信任锚 + 离线审计

Phase 0–4 全套 · 476 测试六层覆盖

基于 Merkle 树的去中心化证书体系,跨联邦信任锚 + 第三方审计器 + 多跳路由 + Gas 感知关批 + SLA 监控仪表板。Federation MTCA M-of-N 多签 + 异构 Ed25519/SLH-DSA 联邦 + filesystem/libp2p 双 transport 服务发现。

阅读设计文档 →
22 · Highlight
v5.0.3.4

Web Panel 中英双语 M3

~25 视图国际化 · vue-i18n 字典

web-panel 主要视图全量改用 vue-i18n(SpeechSettings / Analytics / Cron / Security / Audit / MCP / Backup / Tokens / MTC / WebAuthn / Community / Wallet / Inference / Organization / Federation 等),中英双语贯通,硬编码字符串清零。V6 Preview 顶栏接入语言切换器。

阅读设计文档 →
23 · Highlight
v5.0.3.1

Web Shell 默认化 + 多窗口架构

Electron 内嵌 web-panel · WindowRegistry

桌面端从"原生 Vue 渲染器"切到"Electron 主进程内嵌 ws-server + 加载 web-panel dist",三端同源。多窗口骨架(role-based hash route + per-role geometry 持久化),window.open WS topic 让渲染层拉新窗口。

阅读设计文档 →
24 · Highlight
v5.0.2.34

V6 Chat-First Shell 硬翻

13 内置 Pack · 7 类 UI 扩展点

桌面端默认进 V6 Chat-First Shell(三区布局 + 5 类企业 Provider + 分发器与 Widget 注册表 + Ctrl+Shift+A 管理控制台)。.ccprofile + MDM 推送三路径企业定制。Top-10 V5 路由全部有 V6 widget probe。

阅读设计文档 →
25 · Highlight
v5.0.2.10

CLI V2 治理表面 220+

4-state 成熟度 × 5-state 生命周期

从 a2apgov 到 pmodegov,136 个 lib-level V2 治理表面(双维度上限 + auto-flip + autoStaleIdle + autoFailStuck)+ 5,984 V2 测试,与同模块旧表面通过 nest-blocker 共存。

阅读设计文档 →
📋 RFC 评审中 2026-05-11 (v0.2)

Android v1.0 重新定位 — L1 钥匙 / L2 捕获 / L3 REMOTE

桌面 = AI 工作站 · 手机 = 钥匙 + 捕获器 + 遥控器。停止以 skill 数量对标桌面,转 StrongBox 硬件签名 + Voice/Camera OCR + 桌面 skill REMOTE 三层架构。11 天 7 里程碑落地路线 · 258+ 单测 · 12 E2E。 阅读 RFC →

为谁而建

两类用户,一个底座。

FOR INDIVIDUALS

"我想要一个
真正隐私的 AI 助理。"

  • · 本地加密,数据永不上云
  • · 零配置,装完即用
  • · 中文界面友好
  • · 医生、律师、研究员常备
下载桌面版 →
FOR DEVELOPERS

"我想在终端里
用 Agent 编码。"

  • · CLI Agent · Claude Code 风格
  • · Cowork 多 Agent 并行审查
  • · MCP 工具生态 + 9 Skill Packs
  • · 112 命令 · 14800+ 测试 · V2 规范层 220+ 治理表面
行业落地案例

不止 Demo,
已在工厂里跑起来了

从供应链 Excel 协作到 AI 报数,真实工厂部署验证。

CASE · 01 · 制造业 已交付

链厂数据管家 · 工厂供应链 AI 协作

把 Excel 搬进浏览器,把 AI 装进工厂 — OnlyOffice 实时协作 · AI Text-to-SQL · OCR 单据录入 · Git 版本管理。

01 · COLLAB

Excel 在线协作

OnlyOffice 内嵌浏览器,多人实时编辑同一份 Excel,Git 自动版本管理,改错能回滚。Socket.IO 实时同步单元格。

02 · TEXT-TO-SQL

AI 自然语言报数

业务员直接中文问:"本月万节公斤销量多少?"AI 自动生成 SQL 查 SQLite 运营数据库,秒级返回结果与图表。

03 · OCR

单据自动录入

手机拍物料单据上传,AI 识别 + 结构化入库,从此告别手工 Excel 抄单。Drizzle ORM 规范化存储。

适用场景
供应链 · 物料管理 · 生产计划 · 成本核算 · 质检追溯
CASE · 02 · 医疗

医院病历 AI 检索

本地 Ollama 推理,病历数据不出院。RAG 检索 + 医嘱生成辅助。

CASE · 03 · 法律

律所知识库 & 合同审阅

U-Key 硬件加密保护卷宗,Cowork 多角色审阅合同条款。

CASE · 04 · 政企

内网 AI 办公平台

私有化部署 · SSO / SCIM / RBAC · 等保三级合规 · 审计日志。

版本选择

个人,还是企业?

个人版

免费开源

适合个人用户 & 独立开发者。完整的 CLI、桌面、移动端三端体验。

  • ✓ 全部 112 条 CLI 命令 + 139 Skills
  • ✓ U-Key / SIMKey 硬件加密
  • ✓ 本地 Ollama + 10 LLM Providers
  • ✓ Cowork 多智能体协作
  • ✓ Windows / macOS / Linux / Android

企业版

按需定制

适合金融、医疗、法律、政企等对合规与私有化有严格要求的组织。

  • ✓ 私有化部署 + UI 品牌化
  • ✓ SSO / SCIM / RBAC / 审计合规
  • ✓ 行业定制 Skills(医疗 / 法律 / 科研)
  • ✓ U-Key 批量签发 + DLP + SIEM
  • ✓ 专属技术支持
下载

三端同源 · v5.0.3.55

CLI · v0.162.0

命令行工具

$ npm i -g chainlesschain

支持 npm / yarn / pnpm / bun · 约 2MB

DESKTOP · v5.0.3.55

桌面应用

Electron 39 · Vue 3.4 · 139 Skills

MOBILE · Android v5.0.3.55 · GA

Android

L1 DID 钱包 · L2 移动捕获 · L3 REMOTE 遥控 · 28 Skills · 383+ 单测

查看移动版详情 →
厦门无链之链科技有限公司

有企业定制需求?
直接拨打 400。

我们为医疗、法律、科研、政企客户提供从 POC 到交付运维的全流程定制服务。免费需求沟通 · 90 天 POC 保障。

地址自由贸易试验区象屿路93号厦门国际航运中心C栋4层431单元H