ChainlessChain
无链之链 · 让数据主权回归个人
CHAINLESSCHAIN · 厦门无链之链科技
ChainlessChain chainless·chain
v5.0.3.98 · Evolution Edition CLI v0.162.28 144 命令 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 编排。
个人数据中台 · v5.0.3.78 真机闭环

把散落各处的数字足迹,
汇成一份只属于你的金库。

邮件 · 微信 · 支付宝 · 8 家 AI Chat · 7 大社交平台 · 电商 · 旅行 · Android 系统数据 —— 22+ 数据源端到端拉回本地,谁也拿不走。

"让数据主权回归个人" 不是口号 —— 是 22 个真接通的适配器、5 个内置分析技能、1 份本地加密金库。

📧
邮件 / 账单
  • · IMAP 全协议 邮箱
  • · 支付宝账单 CSV / PDF
  • · 6 模板抽取(账单/订单/出行)
  • · PDF 解密 + 交易明细
🤖
AI Chat 历史
  • · DeepSeek · Kimi · 通义
  • · 智谱 · 混元 · 千帆
  • · 扣子 · Dreamina · 豆包
  • 9 / 9 全接通 · Phase 10.2
💬
社交平台
  • · 微信(SQLCipher · MD5 + Frida 双路径)
  • · QQ · 微博 · B 站
  • · 抖音 · 小红书
  • · Telegram · WhatsApp
  • 微信 8.0+ Frida hook · Phase 12.6 全 land
🛍️
消费 / 出行
  • · 淘宝 · 京东 · 美团
  • · 高德 · 百度地图
  • · 携程 · 12306
  • · 订单/物流/足迹聚合
📱
系统数据
  • · 通讯录 · 通话记录
  • · 短信 · 位置历史
  • · Android ADB 备份
  • · iOS iTunes encrypted
本地金库
SQLCipher AES-256 加密落盘,数据从不上传云端 —— 邮件密码、聊天密钥、账单金额,全在你的设备里。
5 个内置分析技能
消费趋势 · 出行画像 · 沟通频率 · 内容偏好 · 时间分布 —— LLM 直接调,问"我去年在哪三家店花得最多"立刻有答案。
实体归一化(EntityResolver)
"张三" / "Zhang San" / "+86 138-xxxx" 自动认成同一人 —— 跨邮件/微信/通讯录的关系图谱真接得起来。
完整功能介绍 → 架构设计文档 ↗ 67 test files / 1223 tests · 9+ 集成 + 3 E2E 场景 · 9 / 9 AIChat vendor 真接通 · WeChat MD5+Frida 双路径 · 手机端远程入口 Phase 14.2 全 land
CLI · 主入口

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

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

112
CLI 命令
141
内置 Skills
30,000+
测试用例
~/workspace — chainlesschain
$ cc chat
# 进入本地 AI 对话 · Ollama qwen2:7b
总结 ./docs 目录下最近更新的三篇文档
🤔 正在检索本地 RAG 向量库...
✓ web-cowork.md · 10 类任务模板 + 自动依赖安装
✓ cli-agent.md · Claude Code 风格 agent 会话
✓ skills.md · 141 桌面 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 · 141 内置 / 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 级摘要 + 独立消息 — 上下文不污染。
141 内置技能 · 13 组别
141 桌面 + 25 Android REMOTE + 144 CLI
原有技能 15 · 开发工具扩展 15 · 高级技能 10 · AI 会话效率 10 · Office 音视频 10 · 图像数据 10 · 开发系统 10 · 安全设计 10 · 工具增强 10 · 协作工作流 10 · 知识研究 10 · 媒体安全 11 · 社区视频 7
工程基线 · 5 平台统一

一套 AI 引擎,
30,000+ 测试守护

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.97 · 2026-05-27

Android 云 LLM 路由真接通本地 RAG + 联系人电话号码真对 AI 可见 + 6 平台 endpoint hotfix 套件

之前 Android CLOUD_ANDROID 路由只把问题原文打给云模型,AI 真就「无脑闲聊」 — 本机金库里 768 个联系人 / 上千事件全部失联。本轮三件落到位:(1) 新 `cc hub retrieve-context` CLI + LocalCcRunner.retrieveContext Kotlin 桥 + HubLocalViewModel 整合,云路由先拉 hub.retrieveContext(question) 取本机 facts → 拼进系统消息 → 再发云模型,AI 答案真有 citations 引回原始事件;(2) PDH `getHubMinimal()` 工厂跳过 8 个 aichat adapter / kg / bm25 重型 init,retrieve-context 冷启 90s → <5s(真机 2026-05-27 验过 4.2s vs 旧 87s),让云路由问问题在用户感知内可用;(3) summarizePerson 含 identifiers / notes — 之前 strip phone / wechatId / email 让「妈手机号」类查询永远「没有足够信息」,本轮保留 identifiers Map 拼进 person facts 真能命中 + entity-focus routing + searchPersons LIKE 名字搜索让 contacts 不再被 events 挤出 RAG 200 上限。

6 平台 endpoint hotfix 套件:Xhs 3 endpoint path/param 对齐 JsBridge 真路径(/api/sns/web/v1/me → /v2/user/me 等)+ Toutiao extractUid 加 uid_tt / sso_uid_tt / tt_webid fallback 解 passport_uid 长期 null 拒登录 + Weibo /api/favorites 上游下线 graceful skip 不再给假 404 + Douyin 收藏分页 has_more 循环拉全(之前只一页 ~24/N 静默丢)+ Android askQuestion timeout 60s → 240s(MediaPipe cold-start over budget 首问无响应兜底)+ `cc hub` 系列 aichat-health timers 全 unref 让命令秒退(之前被 setInterval 持有 event loop)。工程文档:handbook 加 trap #27 (USR_VERSION sentinel cache miss after PDH/CLI lib refresh — 改 pdh/lib 或 cli/lib 必 bump android USR_VERSION 否则真机走 fast-path 跳解压用旧代码) + trap #28 (workspace dep npm publish stale — 改 pdh/lib 或 cli/lib 必 bump 包 version + npm publish + USR_VERSION 否则 cc-cli.tgz 装旧代码)。版本面:productVersion v5.0.3.96 → v5.0.3.97 / CLI 0.162.26 → 0.162.27 / @chainlesschain/personal-data-hub 0.3.7 → 0.3.9 / Android versionCode 503097 / USR_VERSION 12→17 累计 5 次 bump / iOS CFBundleVersion 97。

阅读设计文档 →
02 · Highlight
v5.0.3.96 · 2026-05-27

桌面检查更新两路兜底 — release-in-progress 友好提示 + 窗口隐藏发系统通知

用户反馈:托盘点「检查更新」没反应;早些时候同一按钮还弹出过红色 dialog 把整段 HttpError 404 stacktrace 糊脸。诊断两个独立但叠在一起的问题:(1) tag 推后 release.yml workflow 还在上传 assets 时 latest*.yml 暂 404,electron-updater 把整段 stacktrace 当 error 发渲染端 + 弹红卡;(2) v5.0.3.44 后更新提示走渲染端 AppUpdateNotifier 卡片(画在 BrowserWindow 内),用户从托盘点检查更新时主窗口仍在托盘 → 卡片画在不可见窗口 → 哑响。

新 `desktop-app-vue/src/main/system/update-error-classifier.js` 把 electron-updater 错按 kind 分类:release-in-progress (Cannot find latest*.yml / 404 拉 latest*.yml) vs generic。auto-updater.js error handler 按 kind 分流:release-in-progress 后台自检完全静默;手动检查弹 info dialog「新版本正在发布中,请稍后几分钟再试」不糊 stacktrace。enhanced-tray-manager.js#triggerCheckForUpdates 触发检查前先 showWindow() 把主窗口拉回前台。auto-updater.js 在 update-downloaded + update-not-available 两个事件加 OS Notification 兜底(窗口隐藏 / 最小化 / destroyed 时发),点击通知亮窗 → 用户随即看到 notifier 卡片 / native dialog。新 update-window-visibility.js 抽 shouldFallbackToOsNotification 纯函数 helper。17 case 单测覆盖(8 case error-classifier 含真实 v5.0.3.95 错误文本 + latest-mac/linux 变体 + 404-only-on-non-yml 反例 + null/undefined 边界 + 9 case window visibility 含 null / destroyed / 不支持 / 可见 / 隐藏 / 最小化 / 防御性兼容)。

阅读设计文档 →
03 · Highlight
v5.0.3.95 · 2026-05-27

legacy-GPU Chromium 130+ 崩溃自动恢复 trap #26 — user 报「installer 闪退」实为 0xc0000602 GPU 进程 fail-fast

用户反馈:`ChainlessChain-Setup-5.0.3-alpha.94.exe` 装一会闪退。诊断结果不是 installer 问题 — NSIS 装成功,但安装完最后那步自动启动 ChainlessChain.exe,Electron 39 / Chromium 130+ 的 GPU 进程在 CoreMessaging.dll 抛 STATUS_FAIL_FAST_EXCEPTION (0xc0000602),因目标机 GPU 驱动太老(确认机型 Intel Iris Pro 5200 + 2016-09 驱动)。任何 ≤2018 GPU 驱动 + 老 Intel HD/Iris 系列机器都会撞这条。

Fix marker file 自动恢复:desktop-app-vue/src/main/index.js setupApp() 启动前写 .launching marker 到 userData;mainWindow.once("ready-to-show") 清掉 marker。下次启动看到残留 marker → 判定上次崩了 → 持久化 .gpu-disabled 文件 + app.disableHardwareAcceleration() + Chromium switches(--disable-gpu / --disable-gpu-compositing / --disable-software-rasterizer)。支持 CHAINLESSCHAIN_DISABLE_GPU=1 env var 手动触发;删 <userData>/.gpu-disabled 可恢复 GPU。同 VS Code / Slack / Cursor / Discord 的 disable-gpu 恢复模式,外部行为驱动不依赖任何 GPU API 状态。诊断快速键:(1) Test-Path "$env:ProgramFiles\ChainlessChain\ChainlessChain.exe" 看 installer 是否真崩;(2) Get-WinEvent 查 0xc0000602 + CoreMessaging.dll → 锁实 trap #26;(3) Get-CimInstance Win32_VideoController 看 GPU 驱动年龄。docs/internal/hidden-risk-traps.md 加 trap #26 完整正文(诊断三步 + SOP/checklist + 反模式 + 快速诊断键),handbook 标题升到 #6-#26。同时打包 chore(ci): PR-advisory sidebar coverage audit for design docs + chore(ci): hard-gate trap #25 partial-index drift in PDH + chore(docs-infra): consolidate sync filename maps to shared JSON + test(android): fix TurnEphemeralRefresherTest CI flake 3s → 10s poll + fix(android-tests): resolve 27 unit test failures across 7 classes + test(android): resolve 17 .kt.broken delete 14 LLM-hallucinated + fix 2 stubs + revive TaskPlanCardTest + chore(android): add release-precheck workflow R8 hotfix-chain prevention。

阅读设计文档 →
04 · Highlight
v5.0.3.91 · 2026-05-26

PDH 社交双通道大收口 — 快手 PC ADB 第 4 路 C 路径 + Toutiao/Bilibili/Weibo/Xhs Mode B 安卓内嵌 root 四家齐落 + Bridge dry-run doctor 提前 5-10 天捕 SDK rotation

社交平台数据本机化两条路同时铺到位。(1) C 路径(桌面 PC ADB pull DB)从 3 家扩到 4 家齐:新增 Kuaishou KuaishouSignBridge(Electron WebContentsView 自驱 NS_sig3 签名)+ social-kuaishou-adb Node collector + CLI/WS/desktop 三入口齐 + web-shell UI + 9 种 reason 中文 banner + Win-first 真机 E2E 文档。至此 Bilibili / Weibo / Xhs / Kuaishou 4 家 PC ADB C 路径全 ship,复用 chromium-cookies-reader 通用模块 + SignProvider 接口(NullSignProvider 默认值 + ApiClient 短路不发未签名 HTTP)。(2) Mode B(Android 内 APK root 直读 DB)新开 4 家:Toutiao Mode B v0.1 scaffold(CredentialsStore + DbExtractor 防御 PRAGMA-based 列选 + DbCollector + 21 JVM tests)→ wire 进 HubLocalViewModel + UI;Bilibili Mode B v0.1(scaffold + wire + Win-first 真机 E2E);Weibo schema 探测文档 + Mode B v0.1(scaffold + wire + 21 JVM tests + 真机 E2E);Xhs Mode B v0.1(scaffold + wire + 21 JVM tests)。Mode B 走 root + su 直读不 attach 进程,绕开 libshield.so / libmsaoaidsec.so 反 frida 检测。(3) Bridge dry-run doctor 在桌面 app 内冷启 3 bridges (Douyin/Toutiao/Kuaishou) 探针 candidate 全局存在性 + warmUp/probe 延迟,SDK rotation 提前 5-10 天预警(anyCandidatePresent=false 是 sentinel)。

Xhs/Douyin in-WebView prefetch 复刻 Bilibili 架构(hidden WebView 跑平台自带 sign JS + JavascriptInterface bridge 回 Kotlin 写 staging JSON),Xhs v6 加 cookie cross-subdomain bridge + v8 isLoginSuccessByCookie 阈值 20→50 拒访客 tracking session + v13 id_token httpOnly cookie decode + profile event push;5 家社交登录改 Mobile Chrome UA + 抖音 cookie-presence 检测(revert v5.0.3.84 错向)。Android 发版工程修:R8 minify 改 systemProp 前缀解 v5.0.3.89 复发的 ConcurrentModificationException,v5.0.3.91 兜底 disable R8。仓库治理:gitee 移出 .husky/post-commit 自动 push 链(本地 .git 1325MB > gitee 1GB quota,每次 commit 都失败堆 WARN,留 orphan-snapshot 手动重建脚本作 emergency 路径)。设计文档 6 篇齐发:PDH_Kuaishou_C_Path_Real_Device_E2E + PDH_Toutiao_C_Path_Real_Device_E2E + PDH_Bilibili_Mode_B_Real_Device_E2E + PDH_Weibo_DB_Schema_Probe + PDH_Weibo_Mode_B_Real_Device_E2E + PDH_Mode_B_Toutiao_Douyin_Real_Device_E2E,全 Win-first 6 场景体例。后续 Phase 8 待扫尾:Toutiao/Bilibili/Weibo/Xhs Mode B 真机 root + magisk + frida-server 实跑(Win dev box 跑不动,需 Mac/Linux + root 设备)。版本面:productVersion v5.0.3.85 → v5.0.3.91。

阅读设计文档 →
05 · Highlight
v5.0.3.85 · 2026-05-24

安卓端 MediaPipe 端侧本机大模型真接通 + 4 档 LLM 路由统一选择器 + Personal Data Hub Vault Browser 双端数据可视化

两大用户可感知突破。(1) 端侧 LLM:MediaPipe tasks-genai pivot 后 prompt-length guard 修 JNI abort SIGABRT 整 app trap #22(predictSync prompt > maxTokens 抛 IllegalStateException 后不 clear pending exception 就调 NewByteArray → CheckJNI JniAbort,Kotlin try/catch 完全够不到)。HubAsk 4 档路由 LOCAL_DEVICE / CLOUD_ANDROID / PC_LOCAL / LAN_OLLAMA 统一镜像到首页 tab 0 + 本机数据 tab 3 + 本机提问 tab 4 三屏 selector,LAN baseUrl 进 EncryptedSharedPreferences 持久。(2) PDH 数据可视化双端 Vault Browser:FTS5 external-content 虚拟表 + trigram tokenizer CJK 子串匹配(比 LIKE 快 10-100×)+ 7 buckets categories taxonomy + 桌面 /personal-data-hub/browser Pinia store(debounce 300ms + race-resolution token) + Android 第 6 tab 数据浏览 + 5 种 category-keyed renderers ChatBubble/OrderTable/Timeline/EmailList/Generic + JSON/NDJSON/CSV 三格客户端导出。

149 测试全绿(36 categories + 13 vault helpers + 27 FTS5 native integration(sandbox) + 4 composable + 10 store + 12 view + 19 desktop renderer + 11 export + 10 android renderer + 7 android VM)。PDH partial-index drift recovery:migration v4 explicit DROP+CREATE 4 表 partial unique index 全带 WHERE source_original_id IS NOT NULL 修 trap #23(CREATE UNIQUE INDEX IF NOT EXISTS 隐藏 schema drift → adapter.sync silent fail / events 卡 0 行 / raw_events 累积 1308 行黄金信号),新 cc hub rederive [--adapter <name>] [--batch-size <n>] 救老 vault 孤儿数据。PDH §2.5 出行 12306(5 卡)+ 内容平台头条 / 快手 v0.1 placeholder 卡 + QQ HubLocal UI wire(接 Phase 13.5 v0.2 已 land collector + 11 单测)。PDH social MockWebServer 集成测试层补齐 4 platform / 33 case(Bilibili 7 + Weibo 9 + Xhs 11 + Douyin 6 covering HTTP 412/401/461/500、anti-bot login redirect、X-S X-T 签名 header gates、buvid3 substitution、containerid 前缀魔法),填补 audit 发现的 0 覆盖层。Bilibili WBI 签名修 silent {code:0,data:list:[]} 空响应。Android Bootstrap @Singleton race 修 → companion Mutex + 自愈 mkdirs trap #24。版本面:productVersion v5.0.3.84 → v5.0.3.85 / CLI 0.162.17 → 0.162.18 / npm @chainlesschain/personal-data-hub 0.2.4。

阅读设计文档 →
06 · Highlight
Phase 17 + 18 · v5.0.3.83+

本机开发者活动 7 个 adapter 落地 — 你的本机操作流也是个人 RAG 语料

Phase 17 五件套(桌面开发者全平台直采)+ Phase 18 两件套(开发者命令链路)。零配置 no-arg adapter — Vault 启动即扫,不需要任何登录 / cookie / API key。git-activity:本机所有 git repo 的 commit / 分支 / merge 历史。shell-history:bash / zsh / pwsh 命令历史去敏感词。vscode:VSCode 最近工作区 + 集成终端历史。win-recent:%APPDATA%/Microsoft/Windows/Recent/*.lnk 跨应用文件打开历史(任何 App 打开过的文件都在)。local-files:Documents / Desktop / Downloads / Pictures / Videos / Music 文件元数据遍历(不读内容,零隐私风险)。browser-history-chrome + browser-history-edge:直读 Default/History SQLite,浏览历史 + 书签全收,Chrome / Edge 安装即扫。

7 个 adapter 全走 category=system bucket,在 Vault Browser 侧栏可单独筛;FTS5 trigram CJK 全文检索同样有效(搜"react"既匹配 git commit message 也匹配 shell history 里的 npm install 也匹配 vscode 工作区路径)。对开发者尤其重要:你 1 天 8 小时敲键盘的操作流(哪个 repo 在哪个分支干啥 / 在 vscode 打开过什么 / 在浏览器查过什么 / 从 Downloads 拖过哪个 zip)全部入 vault 后,AI 跨源问"上周三我在调试什么?"可以同时看 git checkout 日志 + vscode 工作区 + 浏览器 stackoverflow 历史 + shell 命令——单一数据源永远答不全。配套:bs3mc / bs3 ABI dual-load 修 Electron 39 (ABI 140) vs Node 22 (ABI 127) 双路径 require 崩 native binding 的 trap #23(chrome-db-reader / vscode-reader / 后续所有 SQLite reader 必走 dual-load + new Database(":memory:") smoke test)。

阅读设计文档 →
07 · Highlight
v5.0.3.80 · 2026-05-22

Personal Data Hub v0.2 大爆发 — 11 个 placeholder 卡接通 + WeChat / QQ 真采集 + Android 端侧 LLM 骨架

从 Plan A v0.1 (Bilibili 一家) 扩到 v0.2 真接通 11 个平台:社交内容 (微博 / 抖音 / 小红书 / 头条 / 快手) + 购物 (京东 / 美团 / 拼多多 / 淘宝 / 支付宝) + 出行地图 (高德 / 携程 / 百度地图 / 腾讯地图) + AI 助手 9 路 WebView (DeepSeek / Kimi / 通义千问 / 智谱清言 / 腾讯混元 / 文心一言 / 字节扣子 / 即梦 / 豆包) + 邮箱 4 家 IMAP 真接通 (QQ / Gmail / 163 / Outlook via Jakarta Mail)。WeChat Phase 12.10 四子阶 (SQLCipher 真解密 + frida-inject 真注入 + 16.5.9 binary vendored + APK ship 真机) + 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)。

三道锁 UI + 真接通:拒云 / 销毁 / 导出 (cc hub export 真接通)。AI 给出处 citation chip → cc hub event-detail 真链回原始事件。release.yml 拆 publish-deps 前置 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 新单测 (CredentialsStore 14 + DbExtractor 17 + FridaInjector 15 + LocalCollector 10) + QQ Phase 13.5 27 Kotlin 单测。3 stale-assertion 同日修:longtail Douyin uid (constructor 改 dual-mode 优雅) + analysis TOTALS regex case (/i flag) + hub-command snapshot (event-detail / export 漏注册)。版本面: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。

阅读设计文档 →
08 · Highlight
A8 v0.1 · 2026-05-22

Personal Data Hub A8 v0.1 — Android 完全独立社交数据采集(Bilibili 端到端 + 3 平台占位)

Plan A v0.1 "本机数据" tab 从 1 张卡扩展到 5 张。Bilibili 端到端 ship — WebView 登录 + OkHttp 4 端点(观看历史 / 收藏 / 动态 / 关注)+ EncryptedSharedPreferences AES-256-GCM 凭据存储 + 本机 SQLCipher vault。微博 / 抖音 / 小红书占位卡片(v0.2 实施)。全程不依赖桌面在线 — Android 内完成 cookie 抓取 + HTTP 拉取 + JSON 解析 + 加密本地存储 + KG/RAG 派生。

8 文件落地:JS adapter 重构 stateless constructor + _syncViaSnapshot 新模式 + 保留 legacy sqlite-mode / Kotlin 4 文件 SocialCookieWebViewScreen(4 平台共用 generic)+ BilibiliApiClient(OkHttp 4 endpoint)+ BilibiliCredentialsStore(EncryptedSharedPreferences)+ BilibiliLocalCollector(编排器)/ HubLocalScreen 多卡片重构含 WebView overlay + globalSyncingAdapter 互斥 / CLI + Desktop wiring 双 land BilibiliAdapter stateless 自动注册。测试 65+:JS 12 snapshot-mode 单测 + 4 legacy 重写 + 6 integration(真 vault 4-kind end-to-end + idempotency)+ Kotlin 37 单测(BilibiliApiClient 14 / Collector 8 / VM 15)+ Android E2E 8 场景 plan + stub。设计文档 ~600 行(Adapter_Social_Cookie + A8_Bilibili_E2E_Plan)+ 7 forward-looking traps。v0.2 路线 ~5d(微博 1.5d / 抖音 2d msToken-X-Bogus / 小红书 2d X-s)。

阅读设计文档 →
09 · Highlight
v5.0.3.78 · 2026-05-22

Personal Data Hub Plan A v0.1 真机闭环 — Android 本地数据 hub snapshot 模式

Xiaomi 24115RA8EC 真机端到端 1305 entities(通讯录 / 通话 / 短信 / 位置 / 系统)入 vault。npm @chainlesschain/personal-data-hub@0.2.1 + chainlesschain@0.162.14 PDH-first publish ordering(release.yml 先发 PDH 再 CLI 避免 dep chain 404)。新 `cc android` 15 子命令 scaffold + `system-data-android` bridge-direct 模式。Path C — phone-native snapshot writer + 桌面 ingest pipeline(Kotlin ContentResolver + PackageManager 直采 → WS 推桌面 staging → 既有 adapter snapshot 模式入 vault,完全绕开 A6 JNI)。Path Y — desktop 返 RAG context + Android-local LLM 推理(DeepSeek + Doubao 等 9 云 LLM 接通)。Phase 14.1 step 5 ChatBubble 落地 + Phase 14.5 streaming-ask 设计。

3 真机硬化修:originalId required(adapter yield 必含字段否则 invalidCount=rawCount 假象 + 1305 行 audit burst)+ skip-embeddings flag(Plan A 模式无需 vector)+ audit pagination 拆 1305 → 50/page。Android cc subprocess W^X execve via mksh symlink + reader-thread try/catch(Throwable) EOF race + ingestSystemDataAndroid 30→120s timeout。E2EE 7 androidTest 经 X3DHSimulator state-less E2EESession factories 重新启用。bootstrap LLMManager 注册为 singleton + web-shell PDH wiring inject CcLLMAdapter 让 web-shell 也尊重 active LLM provider。AnalysisEngine 读 persons + items 不只 events 阻止幻觉 contact counts + LLM ResponseCache bypass for analysis ask(防供 stale 缓存)。6 真机 trap 全收口 · 工程基础 100% verified · 剩 feature 层 ~7-9d。同期 v5.0.3.77 顺手 iOS .ipa 真机 ship + Phase 14.1 step 5 ChatBubble 全 land。

阅读设计文档 →
10 · Highlight
v5.0.3.75 · 2026-05-21

WeChat Phase 12.6.7-10 — bootstrap 编排层 + IPC/WS + cc hub wechat CLI + Vue UI 向导

一晚把 WeChat 8.0+ frida-dep 路径从零件凑齐到端到端可用全收口。12.6.7 bootstrap.js 把 env-probe → KeyProvider 选择 → WechatAdapter ctor 拼成单入口,IPC/WS/CLI 三 caller 不再各自重发明 wiring(md5/frida/unsupported 决策矩阵 + opts.keyProviderOverride + _probe / _md5Provider / _fridaProvider / _WechatAdapter 全注入 test seam)。12.6.8 — 4 个 IPC 通道 + 4 个 cc ui WS 主题(wechat-env-probe / register-wechat / unregister-wechat / list-wechat-accounts),register/unregister-wechat 加入 ApprovalUI privileged whitelist 防 mobile peer 偷偷往攻击者控制的 dbPath 注册 adapter 或触发 Frida session。12.6.9 — cc hub wechat env-probe / register --uin --db --wechat-data-path [--force-provider] / list / unregister 4 个 verb,--json 全 verb 可机读,脚本与 Plan A 手机内嵌终端可用。12.6.10 — WechatWizard.vue 295 行 3-step drawer(env-probe checklist 动态 Tag 着色 → uin + dbPath + wechatDataPath + forceProvider 表单 → result 结构化错误 + probe.reasons 反馈)+ PersonalDataHub.vue「添加 WeChat」按钮。9 个 hermetic 集成测试覆盖 md5 happy / frida happy / unsupported / 幂等重注册 / 两 uin 共存 / override 语义 — 无 adb 无 Frida 无真设备。Phase 12.9 rooted Android 真机 E2E 已在 runbook §11 落地三套真流(pre-8.0 md5 / 8.0+ frida / 8.0+ unrooted 优雅拒绝)+ 性能基准。

本轮累计:1223 测试 / 67 文件(1068 hub 包 + 183 desktop + 46 CLI + 18 web-panel — composable / VM / IPC / WS / wiring / store / 账户 JSON / privileged whitelist / 集成端到端)。memory 沉淀:wechat_bootstrap_orchestration_layer.md — 当 N 个 sub-phase 产零件但 3 caller(IPC、WS、CLI)都要拼时加 bootstrap.js 编排层的通用模式。同期顺手修了 docs-site 一处 stale 注释:iOS Phase 14.2 UI scaffold 实际已在 3db7b5a73 全部 land(650 LOC PersonalDataHubViews.swift + 3 ViewModel + RemoteDependencies + 1491 LOC tests),而非之前注释里的 "lost-to-race"。剩余:Phase 12.9 rooted Android 真机 E2E 与 Phase 14.4 移动端真机 E2E 均依赖物理硬件不能在 Win dev box 完成。

阅读设计文档 →
11 · Highlight
v5.0.3.72 · 2026-05-20

Personal Data Hub 一晚 13-phase burst — 8/8 AIChat 真厂商接通 + 7 social adapter + .72 iOS keychain hotfix repackage

Personal Data Hub 从 Phase 4 真接通真三方一直推到 Phase 13.7 七 social adapter 全部落地,一晚 15 commits 763047a22 → b2baf4eda。Phase 4.5 Python sidecar bridge + SystemDataAdapter 接 4 个 Android system source(通讯录 / 通话记录 / 短信 / 位置)借 sjqz 项目 17 个真已写 parser 避免重写。Phase 7 Shopping three-pack(Taobao + JD + Meituan)+ Phase 7.5 Mobile Extraction Layer(Android ADB + iOS iTunes encrypted backup)+ Phase 9 Travel four-pack。Phase 10.1+10.2 AIChat 8/8 vendors 全部 live:DeepSeek 官方 API + Kimi 逆 h5 私有 API + 通义千问 + 智谱清言 GLM + Doubao 豆包 + 文心一言 + 讯飞星火 + 腾讯混元,HttpClient infra 接 retry-with-backoff + progress streaming。Phase 11 5 个内置 analysis skill 跨数据源调用。Phase 12 v0.5 WechatAdapter 切 frida-independent slice,T3 风险高→中。Phase 13.3-13.7 五 social adapter 落地(Douyin + Xiaohongshu + QQ + Telegram + WhatsApp)+ 13+ Bilibili + Weibo 借 sjqz parser 一并接通。38 test files / 792 tests 全绿。

v5.0.3.72 同时是 release pipeline 工程复盘。v5.0.3.71 desktop build 全 EUSAGE — root package-lock.json 与 packages/personal-data-hub/package.json 不同步:hub 在 Phase 12/13 滚动期间加了 adm-zip@^0.5.16(解 iTunes encrypted backup zip)+ iconv-lite@^0.6.3(解 GBK 编码 social 历史)两 optional dep,workspace 各自 package.json 已声明但 root package-lock 未 sync 进去,所有 5 个平台 desktop installer 跑到 electron-builder 步全 EUSAGE 退出。5d8ba08b5 fix(deps) sync root lock 后跳过 .71 直接 ship .72 repackage 同样 iOS keychain Logger.swift NSLock 防并发崩溃修(与 .70 同一 commit 625e86819 forward),.72 真出包 18 assets 完整。d03c87d0a 后续把 packages/cli 在 root lock 里也 bump 到 0.162.7 收口避免相同问题再出现。版本面:CLI 0.162.5 → 0.162.8 / productVersion v5.0.3.70 → v5.0.3.72(跳 .71)/ desktop-app-vue 5.0.3-alpha.70 → .72 / iOS CFBundleVersion 70 → 72 / Android versionCode 503070 → 503072. 实际真发布的是 .72,.71 在 GitHub Release 列表里不存在,但 lib/adapters 代码在 main 上 + npm chainlesschain@0.162.7 已发,仅 desktop installer 走 .72 那条 release。

阅读设计文档 →
12 · Highlight
v5.0.3.70 · 2026-05-20

iOS hotfix 三件套 — PIN-unlock crash 修 + AppIcon 真编进包 + SQL bind

三个 iOS 真 bug 一次扫净。iOS 16 PIN 解锁闪退(Logger metadata 字典并发改写 EXC_BAD_ACCESS → NSLock 保护 read/write 路径)+ AuthViewModel.createPrimaryDID SQL 参数没真绑(之前调 execute(_:) 不带 parameters 重载 → 改 execute(_:parameters:) 重载)+ AppIcon 从 v0 起就从未真正编进包(Assets.xcassets 在 pbxproj 被声明为 PBXGroup 不是 PBXFileReference type=folder.assetcatalog,且没加进 PBXResourcesBuildPhase,actool 从未被调用,18 张 AppIcon + 3 张 LaunchIcon 全套素材搁仓里几个月没生效,主屏一直显示 wireframe 占位)。

v5.0.3.70 是个 iOS 工程修补 release,也顺带是个发版流程复盘:(1) v5.0.3.69 出了 Logger NSLock + AuthViewModel SQL bind 两个修复,release workflow 5 平台 build 全绿 + 18 assets 全上传,但 publish-cli 那步在 npm publish chainlesschain@0.162.4 时收到 npm 404 Not Found PUT https://registry.npmjs.org/chainlesschain(CLI 包 token/权限问题),finalize-release 依赖 publish-cli 直接 skipped → v5.0.3.69 release stuck 在 draft 状态 8h+,所有 18 assets 都在但 isDraft=true 即用户拿不到。(2) v5.0.3.70 在 .69 基础上加了 AppIcon wiring 修复(2441b0d8b 改 pbxproj 让 Assets.xcassets 成为 PBXFileReference type=folder.assetcatalog + 进 PBXResourcesBuildPhase,actool 才会真编译 Assets.car 进 ChainlessChain.app),版本号统一推 productVersion / CLI / iOS CFBundleVersion / Android versionCode/versionName 5 处。(3) v5.0.3.70 首次跑同样在 publish-cli 步 404,gh run rerun --failed 重试一次成功,finalize-release 自动 PATCH draft→published,最终 18 assets 全齐成为 Latest(4 Android arm64-v8a/armeabi-v7a/universal/aab + macOS dmg + Linux AppImage/rpm/deb + Windows Setup.exe/Portable + iOS .ipa + 3 latest.yml + blockmaps)。.69 仍 stuck draft 不动 — 删 draft 会 burn tag 24h,所以保留作为版本号占位。从 .69 → .70 用户跳一版没感知。

阅读设计文档 →
13 · Highlight
v5.0.3.67 · 2026-05-19

Android cc Chat — 用自然语言直接问,AI 自动调本机 cc 命令

个人中心 → 「cc Chat (自然语言)」打开后,直接输入"列下我最近的笔记 / 搜下 RAG 相关的 / 我有哪些 skill",AI 自动识别意图、调本机 cc 命令、把命令 + 结果回贴到聊天里。再也不用记 cc 子命令 + flag 怎么拼。OpenAI / Doubao 豆包 / Claude 三家原生 tool-use 接通;其他厂商自动走"防幻觉 fallback"明确告知用户切模型,不会编笔记。

v1 默认只放过 8 个只读子命令(note / search / memory / skill / status / session / mcp / did),即便 AI 收到"帮我把所有笔记删了"也会被白名单当场拦截,返回 exitCode=126 denied。卡片显示完整命令 + exitCode + 耗时 + stdout 折叠展开,长查询有"取消"按钮一键终止。复用 Android 本地终端 Phase 2.5 内置 Node + cc CLI bundle,无配对依赖,离线可用。

阅读设计文档 →
14 · Highlight
v5.0.3.66 · 2026-05-19

iOS .ipa 重发收口 + Android cc CLI bundle 真接通(v5.0.3.65/66 一晚两版打补)

v5.0.3.66 解决 v5.0.3.65 的 build-ios 失败:v5.0.3.65 release 已含 17 assets(Win/macOS/Linux/Android 全套 + npm CLI chainlesschain@0.162.2)但 build-ios 卡在 9 个 "cannot find X in scope" — Phase 6 sprint 加的 13 个 SwiftUI view(RemoteInputView / RemoteDisplayView / SystemToolsView / RemoteMediaView / RemoteBrowserView / RemoteDesktopView / KnowledgeView / AIExtendedView 等)落到磁盘但没接进 ChainlessChain.xcodeproj 的 app target Sources phase。修法是扩 ios-app/scripts/wire_app_sources.rb 的 FILES 列表 + 手动 dispatch ios-wire-app-sources.yml workflow 在 macOS runner 上 17s 跑 ruby 重写 pbxproj 并 commit 回 main。然 GitHub immutable-releases 禁所有 published release 资产改动 → bump v5.0.3.66 reship,build-ios 5min11s 真编译通过出 8.15MB .ipa,最终 release v5.0.3.66 含 18 assets 完整(含 ChainlessChain.ipa)。npm 这边因 publish-cli-precheck 检测 0.162.2 已发自动跳过避免 dist-tag 翻车。v5.0.3.65 同期落 Android cc CLI bundle 真接通:Phase 2.5 Node runtime + cc CLI bundle 41MB tarball entry 入 android-app/feature-local-terminal/src/main/assets/local-terminal/ + wrapper shell scripts 绕 `#!/usr/bin/env node` shebang trap + Termux libc++_shared.so → libtermux_cxx.so AGP 8 命名兼容 + cc CLI wrapper mksh shebang 替 /system/bin/sh — 因 Android W^X untrusted_app pty 域无法 execve shell_exec context 的 /system/bin/sh,prefix/bin/mksh → ../lib/libmksh.so → nativeLibraryDir/libmksh.so 在 lib/<abi>/lib*.so 白名单可 execve。

v5.0.3.66 的实质是 v5.0.3.65 release reship — release 流程层级的工程故障复盘。源头:v5.0.3.65 build-ios 因 Phase 6 新增视图未接进 Xcode 项目而失败,桌面 + Android + npm 全绿但 .ipa 缺位。GitHub release 模型对 v5.0.3.65 immutable-releases 设置生效后 .ipa 已无法补传,只能 cut 新版本号。修复链路:(1) 看 build-ios job log 找出 9 个 "cannot find X in scope" 错(UpdateBannerOverlay + 8 个 RemoteOperateView 引用的 Phase 6 view)→ 验证文件在磁盘但不在 pbxproj;(2) 扩 wire_app_sources.rb FILES 列表加 13 个 .swift 文件路径 + 调用 ios-wire-app-sources.yml workflow_dispatch(dry_run=false)让 ruby xcodeproj gem 在 macOS runner 上写 pbxproj 并 push 回 main(commit 2fe98ef9f);(3) bump 4 个 enforced surface(productVersion / desktop-app-vue version / ios CFBundleVersion / android versionCode+versionName)+ tag v5.0.3.66 + push;(4) release.yml 全 11 job 绿,build-ios 5min11s 出 .ipa,create-release / publish-cli / finalize-release 全通过,最终 18 assets。其中 cli-tests 与 publish-cli 因 0.162.2 已发 npm 自动跳过避免影响 latest dist-tag。Android cc CLI bundle 这边 v5.0.3.65 同期落地:把整个 41MB chainlesschain CLI npm 包(含 Node 22 runtime)放进 Android APK assets/local-terminal/ 目录,配 wrapper shell 脚本绕开 Android 下不可用的 #!/usr/bin/env node shebang trap,Termux libc++_shared.so 换名 libtermux_cxx.so 兼容 AGP 8 stripping 规则,cc CLI wrapper 自己的 shebang 从 /system/bin/sh 换成 prefix/bin/mksh,因为 Android W^X 模型把 /system/bin/sh 关在 shell_exec SELinux domain 内 untrusted_app(pty 域)无法 execve,而 prefix/bin/mksh 实际指向 ../lib/libmksh.so → nativeLibraryDir/libmksh.so,在 Android lib/<abi>/lib*.so 白名单内可 execve。这套组合让 Android app 内运行 cc CLI 直接可用,不依赖 Termux 应用。

阅读设计文档 →
15 · Highlight
v5.0.3.64 · 2026-05-18

iOS 全面成熟 — Phase 1-6 + AI Chat 收口 + 版本号 4 段制 + 真签名 .ipa 已 ship

v5.0.3.61 → .64 一周连发 4 版收紧 iOS 端:.61 真签名 .ipa 出包(Hua Zhang 团队 ad-hoc 配置,7.7MB .ipa 入 release assets),.62 deployment target iOS 17 → iOS 16 覆盖 iPhone 8+ 扩大试用人群 +30%,.63 修 iOS 16 PIN 闪退(AppState.swift MainActor.assumeIsolated 替换为 Task @MainActor 兼容 iOS 13 back-deploy)+ AppIcon 全幅重生(1282×1282 源 + 18 张 AppIcon 全 RGB 无 alpha 通道 App Store 合规),.64 版本号统一 4 段制 + AppConstants 3 个 stale 硬编码(0.32.0 / 32 / com.chainlesschain.ios)改 Bundle.main 动态读 + Settings 关于栏锁死 v5.0.3.64 显示 + 18 unit + 7 integration + 2 UITest 三层覆盖防回归。同期 iOS Phase 5 AI Chat 静态审计找出 4 真实 bug 逐条修:finalizeStreamingPlaceholder 空字符串穿透 nil-coalesce / deleteConversation 失败半回滚 / sendMessage 缺 stream-in-flight guard / selectConversation stale streamId 污染,每条 1 个回归单测 + 4 集成测试覆盖 events fan-out / cancel 顺序 / offline drain / 多对话 stream 隔离 — iOS 总单测 ~313 → ~358。Phase 6 sprint 一晚 19 commits 落地 Knowledge 30 method + AI Extended 25 method 桌面 hybrid + iOS Commands actor wrap + 15 main tab UI + 多模态 v0.3 实时录音 AVAudioRecorder 16kHz mono AAC + Agent streaming runAgentStream + iOS poll loop + Agents UI live。绿基线 1fb947b32,iOS CI 真编译验证通过。

v5.0.3.64 主要做三件事并把 iOS 版本号管理收尾:(A) AppConstants stale 硬编码全清零 — `AppConstants.App.version` 之前硬编码 "0.32.0"(实际几个月没更过常量,与真实版本严重 stale)/ `buildNumber` 硬编码 "32" / `bundleId` 硬编码 "com.chainlesschain.ios"(实际 Info.plist 配的是 com.chainlesschain.ChainlessChain,CodeSign 也基于此)全部改为从 Bundle.main 动态读:新增 `Bundle.appShortVersion` ("5.0.3") / `appBuildNumber` ("64") / `appFullVersion` ("5.0.3.64" 4 段制与 desktop productVersion / Android versionName 对齐) / `appFullVersionTag` ("v5.0.3.64" 带 v 前缀 UI 展示用) / `appDisplayName` 5 个 helper。AIDashboardView.swift 硬编码 "v0.16.0" + PluginManager.swift fallback "1.7.0" 全替换。Settings 「关于」栏显示完整 4 段制 v5.0.3.64 + 加「Bundle ID」一栏便于用户确认安装的是真版本。(B) iOS 17 API 二次全仓审计 — 对全仓 596 个 .swift 文件跑 29 个 pattern(assumeIsolated / @Observable / SwiftData / symbolEffect / ContentUnavailableView / scrollPosition / KeyframeAnimator / visualEffect / sensoryFeedback / Previewable / dialogSeverity / SubscriptionStoreView 等),确认 0 处新增违规:AppState.swift:94-118 v5.0.3.63 修已就位(Task { @MainActor in ... })/ SystemInfoView.swift:65-73 .symbolEffect 在 #available(iOS 17, *) 块内 iOS 16 fallback 静态图标 / ImagePickerView.swift @Previewable 在 @available(iOS 17, *) #Preview {} 内 preview-only 不进生产。(C) 18 unit + 7 integration + 2 UITest 三层覆盖锁版本号显示 + PIN 解锁不崩两类回归 — BundleVersionTests.swift 11 unit 锁版本号 helper + AppConstants 动态字段语义;AppStateNotificationTests.swift 7 integration 验 databaseUnlocked / didAuthenticated post 不崩 + 高频反复 post 稳定性;ChainlessChainUITests testSettingsVersionDisplaysFourSegmentTag + testPINUnlockDoesNotCrashOnFirstLaunch XCUITest 真机回归。同期 iOS Phase 5 AI Chat 静态审计找出 4 真实 bug:(1) finalizeStreamingPlaceholder 空字符串穿透 nil-coalesce — 旧代码 `messageId ?? oldMsg.id`。ChatStreamEnd.parseFromEnvelope 在 server 缺 messageId 字段时填 ""(不是 nil),nil-coalesce 不兜底,"" 直接覆盖本地 local-assistant-<UUID> 占位 id,SwiftUI ForEach(messages, id: \.id) 身份被击穿(多条 row 共享空 id)。修:显式 guard `if let mid = messageId, !mid.isEmpty`。(2) deleteConversation 失败半回滚 — 删除当前对话失败时仅恢复 conversations 列表,currentConversation / messages 留在已清空状态。新增 rollbackDelete 私有方法 + wasCurrent / originalCurrent / originalMessages 快照全量原子回滚。(3) sendMessage 缺防御性 stream-in-flight guard — UI 在流式中切到 cancel button 形态,但 VM 不能假设上层禁掉了 send 入口(programmatic 调用 / 双击竞争 / 上层 bug 都可能绕过)。在 DC gate 前加 `guard currentStreamId == nil`。(4) selectConversation stale streamId 污染 — 切对话时不清 currentStreamId,edge case 新 conv 末条恰为 streaming 占位(前次未 finalize)时 prev stream 的 delta 会越界改新 conv 的 last。修:显式 currentStreamId = nil + isStreamingMessage = false。+ 4 集成测试 Phase5AIChatIntegrationTests 覆盖 events fan-out / cancel 顺序(discardStream → 本地状态收尾 → cancelStream RPC 出站 → late chunk silent drop) / offline drain(DC down 时 ai.createConversation 入 OfflineQueue → DC ready edge → drainer 触发) / 多对话 stream 隔离(conv A 启 stream → 切 conv B → sA 后续 delta+end 不污染 conv B messages)。iOS Phase 6 sprint 一晚 19 commits:桌面 knowledge-handler.js +30 method(folders 5 + tags 3 + alias 1 + versions 4 + star/pin 6 + archive 3 + import-export 4 + 高级 tags 3)+ ai-handler.js +25 method(Conversations 高级 5 + Prompt templates 3 + RAG 5 + Multimodal 4 + Code helpers 4 + Agents 4);iOS KnowledgeCommands actor wrap 31 method(30 桌面 + getNote alias)+ AIExtendedCommands actor wrap 25 method;KnowledgeView + AIExtendedView SwiftUI + 2 VM + 2 新 main tab(→ 15 total);多模态 v0.3 实时录音 AVAudioRecorder 16kHz mono AAC + Agents 2 个新 sub-tab + 5 tab horizontal picker + Agent streaming desktop runAgentStream + iOS poll loop + Agents UI live。绿基线 1fb947b32,iOS CI 真编译验证通过(Win 上唯一 Swift 编译验证路径)。

阅读设计文档 →
16 · Highlight
v5.0.3.57 · 2026-05-17

Android 远程文件 skill 接通 — 浏览 / 上传 / 下载 PC 文件,app 内一键打开

配对桌面后,Android 端 FileTransferScreen 提供完整远程文件管理:浏览 PC 任意目录(~ / C:/ / 项目目录无 sandbox)+ 本机文件上传到 PC Downloads(防覆盖 (1)/(2) 后缀)+ PC 文件下载到手机公共 Download 目录(MediaStore.Downloads,原生文件管理/相册/阅读器直接看到)+ TopAppBar 第 4 个图标「本机下载文件夹」app 内列表点击直接 Intent.ACTION_VIEW(不跳出 app)。复用 Plan C signaling 通道,零新基础设施。一晚扫平 6 互锁雷(P2PClient skip guard 太宽 / Plan C 不调 connect / handleFileCommand 弹 PC 文件夹框 + 缺 listDirectory case / FileTransferHandler sandbox 在 userData / checksum sha256-prefix vs md5 自删下载 / getExternalFilesDir 用户找不到)。34 新单测全绿(PC vitest 30 + Android RemoteCommandClientTest 4)。Xiaomi 24115RA8EC × Win 真机 E2E 8 场景跑通。

Plan C Android↔PC 文件传输落地后的产品化收口。Android 端 FileTransferScreen 现在是 5 个 TopBar 图标:📁 浏览远程目录(输入 ~ / C:/Users/... → 进入,目录在前字母排序,点目录递归,点文件直接下载,↑ 上级 / 🔄 刷新)/ ☁️↑ 上传(系统 GetContent 选本机文件 → 自动 chunk 上传 → Snackbar 弹「PC: C:/Users/longfa/Downloads/<名>」+「复制路径」按钮,PC 端同名文件自动加 (1)/(2) 后缀防覆盖)/ ☁️↓ 输入路径下载(手动输入远程路径 + 文件名 → 开始下载)/ 📱 本机下载文件夹(v5.0.3.57 新增:MediaStore.Downloads.EXTERNAL_CONTENT_URI 查询公共 Downloads 目录所有文件 + DATE_ADDED DESC 排序 + 每行显示文件名/大小/时间 + 点「打开」直接拉系统 viewer)/ 🧹 清理 30 天前历史。PC 端 desktop-app-vue/src/main/remote/handlers/android-file-handler.js 新写 460 行,11 个 action 派发(listDirectory/getFileInfo/exists/delete/createDirectory/requestUpload/uploadChunk/completeUpload/requestDownload/downloadChunk/cancelTransfer/listTransfers),字段对齐 Android FileCommands.kt(type 而非 isDirectory / modifiedTime 而非 modifiedAt / entries 而非 items)。修复 6 个互锁雷:(1) P2PClient.kt:538-542 chainlesschain:* skip guard 太宽 — 旧代码 `if (raw.contains("\"type\":\"chainlesschain:")) return` 把 P2PClient 自己发的命令响应也屏蔽,pendingRequests 永远等不到 complete。修法:缩窄成只 skip `chainlesschain:command:request`。(2) Plan C 路径 P2PClient.connectionState 永远 DISCONNECTED — RemoteOperateScreen → signaling forward 没调 P2PClient.connect(),state 一直 DISCONNECTED,所有 RemoteCommandClient 命令立即失败。修法:RemoteCommandClient.invokeTyped 改 delegate SignalingRpcClient.invoke(pcPeerId),pcPeerId 从 PairedDesktopsStore.devices.firstOrNull() 取。(3) PC handleFileCommand 是简陋 stub — 旧的 switch 只有 case "list" 查 SQL 表 + case "requestUpload" 弹 dialog.showOpenDialog(PC 端弹文件选择框完全错误,应该 Android 端选)。修法:整段替换为 delegate 到新 android-file-handler。(4) FileTransferHandler(remote-gateway 注册的)sandbox 在 userData + 字段不一致 — _resolvePath 强 prefix app.getPath("userData"),C:\Users\... 一律 Access denied。修法:不复用,新写专用 handler 无 sandbox(trusted paired peer)。(5) checksum 算法不匹配 → repository 自删下载文件 — 第一版 requestDownload 返 "sha256-prefix:abc...",但 FileTransferRepository.kt:264-276 期望 "md5:" + 完整 MD5,对不上立刻删本地文件 + 标 FAILED + 抛 Checksum mismatch。修法:返 checksum:null 跳过 Repository 验证。(6) getExternalFilesDir(null) 用户找不到下载的文件 — /sdcard/Android/data/.../files/downloads/ 受 Android 13+ scoped storage 限制,普通用户用文件管理器要点 5 层 + 开"显示隐藏"。修法:API 29+ 用 MediaStore.Downloads.EXTERNAL_CONTENT_URI insert 写公共 Download 目录,返 content:// uri 直接喂 Intent.ACTION_VIEW,无需 WRITE_EXTERNAL_STORAGE 权限。34 新单测 — PC vitest 30 cases(_resolvePath × 5 / listDirectory × 5 / getFileInfo + exists × 3 / createDirectory + delete × 3 / Upload 全流程 × 5 含防覆盖与 metadata.targetDir / Download 全流程 × 3 含 Bug 5 回归 checksum 必须 null / cancelTransfer × 2 / handle() dispatch × 2 / listTransfers × 1)+ Android RemoteCommandClientTest 4 cases(delegate 到 SignalingRpc + Bug 1+2 锁死 coVerify(exactly=0) 不走 p2pClient.sendCommand)。Xiaomi 24115RA8EC × Win desktop 真机 E2E 8 场景全跑通:E1 浏览家目录 / E2 浏览盘根 / E3 进子目录 / E4 小文件上传 + 复制路径 / E5 防覆盖 (1) 后缀 / E6 小文件下载 / E7 「打开」action 拉 viewer / E8 本机下载面板 LazyColumn 列出 Download 目录所有文件。设计文档 docs/design/Android_Remote_File_Skill.md / 用户文档 docs-site/docs/guide/remote-file.md。已知限制:大文件 >10MB 走 signaling 4 跳 base64 chunk 可能 timeout,等 Plan A.1 WebRTC DataChannel 稳后切 DC 路径;API <29 MediaStore.Downloads 不可用,fallback app-private 路径用户找不到,后续如有反馈再加 FileProvider 适配;destructive action (delete / writeFile) 当前无审批 gate,trusted paired peer 自动执行,未来叠 mobileApprovalChannel。

阅读设计文档 →
17 · 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 单测)。

阅读设计文档 →
18 · 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。

阅读设计文档 →
19 · 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。

阅读设计文档 →
20 · 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 与桌面同号原则。

阅读设计文档 →
21 · 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 留后续。

阅读设计文档 →
22 · 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。

阅读设计文档 →
23 · 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。

阅读设计文档 →
24 · 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。

阅读设计文档 →
25 · 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。

阅读设计文档 →
26 · 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 完整移动客户端。

阅读设计文档 →
27 · 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 性能实测。

阅读设计文档 →
28 · 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 个产物。

阅读设计文档 →
29 · 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。

阅读设计文档 →
30 · 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 修复)。

阅读设计文档 →
31 · 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。

阅读设计文档 →
32 · 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)。

阅读设计文档 →
33 · 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})。

阅读设计文档 →
34 · 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 闭环。

阅读设计文档 →
35 · 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。

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

B4 ASAR surgery — Win 安装显著加速

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

Windows 安装显著加速:dev-box (NVMe SSD + Defender OFF) 实测 190.9s vs 1201s 旧 baseline = 6.3× 提速;HDD + Defender ON 默认环境严格 parity 数据未测。重启 asar:true(v5.0.3.4-13 因 walker 漏 4 个 transitive deps 改 asar:false 兜底)。新 afterPack 钩子里跑 surgery:extract → inject 4 个 walker-dropped 包 → repack 保留原始 unpackDir 决策;Win 包装脚本处理 workspace symlinks。

阅读设计文档 →
37 · 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 服务发现。

阅读设计文档 →
38 · 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 顶栏接入语言切换器。

阅读设计文档 →
39 · 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 让渲染层拉新窗口。

阅读设计文档 →
40 · 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。

阅读设计文档 →
41 · 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
  • · 144 命令 · 30,000+ 测试 · 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、桌面、移动端三端体验。

  • ✓ 全部 144 条 CLI 命令 + 141 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.98

CLI · v0.162.28

命令行工具

$ npm i -g chainlesschain

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

DESKTOP · v5.0.3.98

桌面应用

Electron 39 · Vue 3.4 · 141 Skills

MOBILE · Android v5.0.3.97 · GA

Android

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

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

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

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

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