M2 Max 本地部署 MOSS-Transcribe-Diarize:离线多说话人音频转写 Web 应用完整实战

基于 OpenMOSS/MOSS-Transcribe-Diarize 的本地部署,并构建了一个 Web 应用:用户上传音频/视频,模型自动完成 转写 + 说话人分离(Diarization)+ 时间戳 + 声学事件感知,返回带说话人标签的结构化字幕。

mindmap
  root((MOSS-Transcribe-Diarize<br>本地部署与Web应用))
    模型与能力
      端到端音频理解(0.9B)
      联合ASR与说话人分离
      输出Sxx标签与时间戳
      声学事件感知
      支持50+语言
    部署环境
      Apple Silicon M2 Max
      Python 3.12 + venv
      PyTorch 2.11 + Transformers 5.10
      HF镜像下载
      FastAPI后端 + 静态前端
    长音频处理策略
      自动分块(默认300秒)
      块间重叠(15秒)
      绝对时间偏移与去重
      逐块释放MPS缓存
      跨块标签不对齐(需外部聚类)
    Web应用功能
      拖拽上传音视频
      异步任务轮询
      彩色说话人标签与时间轴
      点击段落定位播放
      导出SRT/JSON/TXT
      一键复制全文
    性能与边界
      RTF小于1(MPS加速)
      单块小于等于300秒稳定
      需注意MPS OOM风险
      支持环境变量调参

一、项目能力研究

定位

MOSS-Transcribe-Diarize 是 OpenMOSS 团队开源的 端到端(end-to-end)音频理解模型,当前版本 0.9B(2026-07-09 开源)。它一次性联合完成「语音识别 + 说话人分离」,而非传统 pipeline(ASR + 独立的 speaker diarization 再对齐)。

  • 2026-07-14 获 INTERSPEECH 2026 第二届 MLC-SLM 挑战赛第一名(覆盖 14 种语言)。
  • 更强版本 MOSS-Transcribe-Diarize Pro 即将以 API 形式提供。

核心能力

能力 说明
长音频多说话人转写 面向会议、电话、播客、访谈、讲座、视频等杂乱多说话人录音
说话人分离(Diarization) 输出一致的说话人标签 [S01] [S02]
时间戳 秒级对齐,格式 [start][Sxx]text[end]
声学事件感知 可选输出,标注非语音声学事件
多语言 支持 50+ 种语言

考试助手(exam-helper)是一个单文件 HTML 应用,用于本地加载 Excel/CSV 题库并快速检索、查看答案。它无需服务器、无需联网,打开即用。

核心特性

  • 单文件离线使用:构建产物只有一个 exam-helper.html,双击即可在浏览器中运行。
  • 自动递归加载目录:选择包含题库文件的文件夹后,自动读取 .xls.xlsx.csv 及子目录中的文件。
  • 多种检索方式
    • 中文关键字
    • 全拼,如 anquan
    • 拼音首字母,如 aq
    • 英文缩写(大写),如 GDW
    • 空格分隔表示“且”关系
  • 自适应展示:响应式网格布局,宽屏一行多个卡片;每页固定 10 行,根据列数自动计算题数。
  • 答案高亮:单选题、多选题的正确选项自动标绿,判断题、简答题直接显示答案。
  • 备注醒目:备注信息以红色加粗显示,重要提示一目了然。

快速开始

npm install
npm run build

构建完成后,用浏览器打开生成的 exam-helper.html,点击「选择题库目录」并选中题库文件夹,即可在搜索框中实时检索题目。

首次使用必须手动选择一次目录,后续打开会自动使用浏览器缓存的题库数据。

题库格式

题库文件使用 Excel 工作表,第一行为表头,必须包含以下列:

WorkBuddy Prompt 模板文件

本文件研究了 /Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked/resources/templates 目录下的全部 *.tpl 模板(12个文件),每个文件作为独立章节,原文(含 Jinja 占位符与 XML 标签)原样保留在代码块中。 基于你提供的 WorkBuddy Prompt 模板文件,以下是其整体架构与各模板关系的思维导图(Mermaid 格式):

mindmap
  root((WorkBuddy Prompt 模板))
    分类与概览
      共12个模板
      分类:模式提醒 / 系统提醒 / 身份上下文 / 主Prompt
      主Prompt分4个场景:Ask·编码 / Ask·通用 / Craft·编码 / Craft·设计 / 专家·编码 / 专家·通用 / 通用Craft
    模式提醒片段
      ask-mode-reminder
        Ask模式硬性规则:只读·不编辑·不运行命令
        建议切换至Craft
      craft-mode-reminder
        Craft模式能力激活:可自由编辑与创建文件
        直接执行任务
    系统提醒片段
      system-reminder
        占位标签
        运行时由系统注入提醒
    身份上下文模板
      user-context-expert-identity
        专家模式身份注入
        含BOOTSTRAP.md / USER.md
        聚焦产品身份与语气占位
      user-context-identity
        通用身份注入
        含SOUL.md / IDENTITY.md / USER.md
        用户自定义指令与语气风格覆盖
    主Prompt·Ask模式
      workbuddy-ask-prompt
        纯对话场景
        只读工具·不可编辑
        可视化工具(read_me / show_widget)
        MCP配置引导
      workbuddy-ask-coding-prompt
        Ask + 编码场景
        与ask-prompt同源
        强调代码库上下文与只读分析
    主Prompt·Craft模式
      workbuddy-prompt
        通用Craft默认主提示
        能力总览·Agent循环·结果呈现
        自动化任务与技能管理
      workbuddy-craft-coding-prompt
        Craft + 编码场景
        Agent循环·任务管理工具
        技能积累与反思(SkillManage)
        自动化(automation_update)
        可视化与多模态生成
      workbuddy-craft-design-prompt
        Craft + 设计场景
        智能设计助手角色
        画布三段式回复格式
        文生UI·截图验证
        目标节点优先原则
    主Prompt·专家模式
      workbuddy-expert-prompt
        专家模式通用(AGENTIC)
        角色覆盖·产物概览
        松弛自然沟通风格
        多模态生成与技能积累
      workbuddy-expert-coding-prompt
        专家 + 编码场景
        与expert-prompt同源
        聚焦编码任务与产物交付

该图清晰呈现了:

  • 4 大类模板(模式提醒、系统提醒、身份上下文、主 Prompt)
  • 7 种主 Prompt 场景(Ask 通用、Ask 编码、Craft 通用、Craft 编码、Craft 设计、专家通用、专家编码)
  • 各模板的核心定位与关键约束(只读/可编辑、身份注入、可视化、自动化、技能管理等)

模板概览

Hallmark 使用指南

mindmap
  root((Hallmark))
    是什么
      反 AI 味的设计技能
      让 AI 生成的网页像人做的
      Together AI 出品 · MIT 开源
    给谁用
      Claude Code
      Cursor
      Codex
    核心功能 · 四个动词
      默认 · 新建设计
        预检扫描现有项目
        设计三问 · 受众/用途/基调
        先预览后写码
      audit · 体检
        给旧代码查 AI 味
        只出清单不改代码
      redesign · 重构
        留文案和品牌
        推翻视觉重做
      study · 提取 DNA
        从截图或 URL 学设计
        拒绝像素级抄袭
    凭什么不像 AI
      21 种页面结构
      20 个主题 · 4 流派
      58 道俗套检测门
      六维交付自评
    关键机制
      log.json 强制每次不重样
      tokens.css 设计系统可移植
      design.md 锁定整站风格
    怎么用
      npx skills add nutlope/hallmark

项目地址:https://github.com/Nutlope/hallmark 在线演示:https://www.usehallmark.com 许可证:MIT

一、这是什么

Hallmark 是一个面向 AI 编程助手(Claude Code、Cursor、Codex)的设计技能(Skill),由 Together AI 出品。它解决的问题很具体:大模型生成的网页 UI 总有股"一眼 AI"的味道——居中大标题、紫蓝渐变、三列等宽卡片、Inter 字体……Hallmark 用一套强制规则把这些"默认审美"全部禁掉。

它的核心理念是结构多样性优先于视觉多样性:两个不同需求(brief)生成的页面,不应该只是同一模板换了配色,而应该像两个真正不同的网站。为此它内置了:

  • 21 种宏观结构(macrostructure)——页面的整体骨架,如 Bento Grid、Long Document、Manifesto、Marquee Hero、Stat-Led 等
  • 20 个命名主题(theme)——分属四个流派(genre),外加一个"自定义主题"隐藏分支
  • 50 个组件原型——9 种 Hero、14 种导航、8 种页脚、5 种节标题等
  • 58 道"防俗套检测门"(slop test)+ 交付前六维自评——任何一项不达标就打回重做

open-ai-eco 接入本地 Agent:ACP 协议开发实践与架构总结

本文记录 AI 生态工作台(open-ai-eco)通过 ACP(Agent Client Protocol) 接入本地 Agent 的完整实践:选型理由、架构设计、关键实现、踩坑经验与验证方法。

1. 背景与目标

工作台是组内的 Astro 站点,用于展示 AI 研究成果。日常工作中沉淀了一批 Agent 技能(Skill):

  • 研究 AI 项目:给一个 GitHub 地址,自动研究并把结构化信息写入项目 Excel;
  • AI 周报:每周一生成结构化行业周报 Markdown;
  • 后续还会有更多同类技能。

这些技能原本只能在终端里通过 Claude Code / Kimi CLI 使用。目标是:在工作台网页里加一个交互入口,直接在页面上对话、调用技能、审批文件操作,把"打开终端敲命令"变成"打开网页点一下"。

约束条件:主要自用、部署在内网 Node 常驻服务上、本地同时装有 Claude Code 与 Kimi CLI 两个 Agent。

2. 为什么选 ACP

中国象棋是什么

中国象棋是一款在浏览器中直接运行的纯前端人机对弈游戏,无需安装、无需后端,打开网页即可与电脑 AI 对弈。游戏完整实现象棋规则,棋盘采用 HTML5 Canvas 绘制木质风格界面,支持桌面与移动端触屏操作。

核心功能

  • 人机对弈:玩家可选择执红先行或执黑后手,AI 即时应招。
  • 三档 AI 难度:入门、业余、高手,对应搜索深度 2 / 3 / 4 层。
  • Minimax + Alpha-Beta 引擎:AI 基于 Minimax 搜索与 Alpha-Beta 剪枝,结合棋子价值与位置评估表决策。
  • 完整规则判定:马蹩腿、象塞眼、炮隔子吃、兵卒过河、九宫限制、将帅照面(飞将)等规则全部实现。
  • 终局判定:自动识别将军、将死与困毙(无棋可走),并弹出结算提示。
  • 走法提示:点选棋子后高亮显示所有合法落点,可吃子目标以红圈标出。
  • 中文棋谱:自动以「炮二平五」式中文记谱法记录双方着法,吃子附带标注。
  • 悔棋 / 认输 / 提示:支持悔棋(回退一回合两步)、一键认输,以及让 AI 推荐当前最佳走法。
  • 对局信息:实时显示当前回合、双方用时与总步数。
  • 本地音效合成:使用 Web Audio API 实时合成走子与吃子音效,可随时开关。
  • 响应式布局:桌面端棋盘居中、左右信息栏;窄屏自动堆叠,手机触屏也能流畅对弈。

使用方式

  1. 打开 中国象棋
  2. 在「设置」中选择执子方(执红先行 / 执黑后手)与 AI 难度。
  3. 点击己方棋子查看合法走法,再点击目标位置落子。
  4. 需要时使用「悔棋」「提示」按钮,或对局结束后点击「再来一局」。

用单文件 HTML 写一个能对弈的中国象棋 AI——从规则引擎到 Alpha-Beta 剪枝

一次「中国象棋 + 纯前端 + 自写搜索算法」的完整实践。零依赖、零构建,双击即玩。本文记录规则引擎、AI 搜索、Canvas 渲染的设计思路,以及布局调试中踩过的几个值得记住的坑。

WorkBuddy + GLM-5.2 开发的,花了 200 积分。开发出来第一个版本并没有花多少钱,问题是反复修改一些小问题,积分用量就上来了,感觉缓存并没有起作用。

一、需求与技术选型

需求很朴素:一款可以人机对弈的中国象棋 Web 应用

权衡后定的方案:

维度 选择 理由
形态 单文件 index.html 双击即可运行,无需构建、无需服务器,便于分享
技术栈 原生 HTML5 + CSS3 + ES6 零依赖,引擎/AI/UI 全在一个文件里也能保持清晰
棋盘渲染 Canvas 棋盘线条、楚河汉界、九宫斜线用 Canvas 绘制最直接
AI 算法 Minimax + Alpha-Beta 剪枝 经典、可控、纯前端可跑,难度由搜索深度决定

架构上坚持一点:引擎层(棋盘状态 + 走子规则 + AI)与 UI 层(渲染 + 交互)彻底解耦。引擎函数只操作棋盘数组,不碰 DOM,方便单独测试和替换。

二、棋盘数据结构

中国象棋是 10 行 9 列的交叉点棋盘。用一个二维数组表示:

CodeBuddy 官方插件市场 · 四大领域插件

数据来源:codebuddy-plugins-official 市场 manifest(共 207 个插件,2026-07-16) 整理口径:从 207 个插件中筛出 软件开发生命周期、安全、办公、设计 四个领域;一个插件只归入一个主领域,跨领域插件在说明中以「兼属 ××」标注;其余 32 个插件列入文末「未归入」。

一、软件开发生命周期(134)

1.1 需求、规划与项目管理(8)

插件名 来源 说明
requirements-driven-workflow 官方 需求驱动开发工作流,含 90% 质量门控的功能实现流程
interview 外部 访谈式命令,用于细化大型功能计划与规格
conductor 外部 上下文驱动开发:上下文 → 规格与计划 → 实施的结构化工作流
agent-team-agile-workflow 官方 BMAD 敏捷工作流,含 PO、架构师、SM、开发、QA 角色代理与交互式审批
taskmaster 外部 基于 AI 的任务管理系统,提供命令、代理和 MCP 集成
commands-project-setup 外部 项目初始化与搭建命令
commands-project-task-management 外部 任务管理与项目跟踪命令
feature-dev 官方 全面功能开发工作流,含代码库探索、架构设计与质量审查智能体

1.2 架构与设计(软件架构)(7)

坦克大战(HTML5)开发教程

本教程基于本工作区已实现的「坦克大战」源码(HTML5 Canvas 复刻红白机 Battle City)逐模块讲解。 读完后你将能独立从零搭建一个 60fps、数据驱动、可扩展 的俯视角坦克射击游戏,并理解其中每个模块的设计取舍。

配套源码入口:index.html,核心逻辑在 js/ 下 6 个文件,单元测试在 tests/tank.test.js

GitHub 源代码https://github.com/wang-junjian/tank-battle

1. 项目简介与技术栈

「坦克大战」是一款经典俯视角坦克射击游戏:玩家操控己方坦克在 13×13 的迷宫战场中移动、射击,摧毁敌方坦克并保护己方基地(老鹰)。

技术栈(零依赖、零构建步骤):

技术 用途
HTML5 Canvas 2D 全部战场渲染
原生 JavaScript(ES6 class) 游戏逻辑,不依赖任何框架
Web Audio API 实时合成音效与 BGM(无音频素材文件)
localStorage 最高分与配置持久化
node:test 引擎逻辑的单元测试(无需浏览器)

为什么选这套栈: 无打包、无依赖,双击即可运行;逻辑与渲染分离后,核心玩法甚至能在 Node 里跑测试。这对"快速做出可玩原型"极其友好。

2. 运行、调试与测试

2.1 本地运行

直接用浏览器打开 index.

坦克大战是什么

坦克大战是一款在浏览器中直接运行的纯前端俯视角坦克射击游戏,复刻经典街机玩法,无需安装、无需后端,打开网页即可开战。玩家操控坦克在 13×13 的战场上移动射击,目标是消灭全部敌军并保护基地(老鹰),支持键盘与触屏两种操作方式。

核心功能

  • 经典俯视角射击:方向键控制坦克移动,朝向即开火方向,空格 / J 发射子弹。
  • 3 个关卡:每关地图、敌军总数、刷新频率与敌人类型权重各不相同,难度逐关提升。
  • 四种敌军类型:普通、快速、装甲、智能坦克,智能坦克会追踪玩家位置。
  • 六种战场道具:火力升级、无敌护盾、强化基地、冻结敌军、全屏清除、奖励生命。
  • 火力成长系统:拾取星形道具可提升火力等级,最高等级可破坏钢墙。
  • 触屏虚拟按键:移动设备自动显示方向键与圆形射击按钮,手机也能玩。
  • 本地音频合成:使用 Web Audio API 实时合成 BGM、射击、爆炸、道具等音效,无外部资源。
  • 可自定义按键:支持在设置中重映射移动、射击、暂停、确认、重开等按键。
  • 画质与音量调节:提供低 / 中 / 高三档画质,独立开关音乐与音效,音量 0% ~ 100% 可调。
  • 本地进度保存:使用 localStorage 记录最高分与已解锁关卡,下次打开继续挑战。
  • 响应式 HUD:桌面端右侧信息栏显示关卡、剩余敌军、生命、得分与增益状态;窄屏自动堆叠。

使用方式

  1. 打开 坦克大战
  2. 在主菜单选择已解锁的关卡,点击「开始游戏」。
  3. 使用方向键移动坦克,空格 / J 射击;触屏设备使用屏幕上的虚拟按键。
  4. 消灭全部敌军即可过关;保护基地不被击毁,生命耗尽或基地失守则游戏结束。

CodeBuddy 官方插件市场 · 插件分类清单

数据来源:codebuddy-plugins-official 市场 manifest(共 207 个插件)

分类方式:基于插件 name / description 关键词的中文功能聚类(官方 category 字段缺失较多,故采用描述推断)。

分类概览:腾讯安全实验室:7 | 语言服务器 LSP:11 | 文档与办公:11 | 前端与 UI 设计:37 | 游戏开发:5 | 腾讯生态与 MCP 集成:16 | 工作流与生产力:77 | 内容创作与写作:7 | 系统与脚本开发:5 | 外部领域合集:31

腾讯安全实验室(7)

拆解 WorkBuddy:系统提示词如何拼装,模型清单如何定义

研究对象是 WorkBuddy 桌面客户端的安装包——更准确地说,是它解包后的 resources/cli/ 两个目录。我们想知道两件事:

(1)对话时「我」到底由什么拼成? (2)「我」能调用哪些模型、这些模型又从哪来?

答案出人意料地干净:它们分别落在两套声明式配置文件里——提示词模板库与产品配置文件。你此刻正在阅读的「我」,本质上就是这两套文件在运行时的一次实例化。

0. 为什么值得写

平时我们用 AI 助手,关注的是「它能不能帮我干活」。但如果你想知道「它是怎么被造出来的」,安装包本身就是最好的教材:没有编译混淆、没有黑盒,所有「性格」「能力边界」「可用武器」都白纸黑字写在那里。

这次我们顺着两条主线往下挖:

  • 主线 A —— 大脑(提示词模板)resources/templates/ 下的 19 个文件(约 2400 行),决定了「我是谁、能做什么、如何行动」。
  • 主线 B —— 武器库(模型配置)cli/product*.json 下的 5 个文件,声明了「我能调用哪些模型、怎么路由、怎么计费」。

一、主线 A:提示词模板体系("我"的大脑)

1.1 三层结构

resources/templates 不是一堆散落的提示词,而是一套以「角色」为主轴、以「模式」为运行时约束的模板工程体系,基于 Jinja2 风格语法({{ var }} 占位符 + {% if

WorkBuddy:iOA 渠道模型完整对照表

数据来源:cli/product.ioa.json(iOA 部署渠道覆盖层)
82 个模型条目,按路由代号(vendor)分组。

一、概览

  • 模型总数:82
  • 支持工具调用 (toolCall):67 / 82
  • 支持图像 (images):67 / 82
  • 支持推理 (reasoning):50 / 82
  • 仅推理 (onlyReasoning):44 / 82
  • 默认模型 (isDefault):1

路由代号(vendor)分布

路由代号 数量 说明
e 33 外部聚合(多为国内厂商模型)
f 22 首方/海外聚合
tencent 7 TACO 代码补全/轻量子模型通道(非对话模型,能力字段为 None)
j 7 特定海外模型
i 2 iOA 专属条目
None 11 未标注(auto/default 等特殊聚合项)

注意:vendor 是后端路由代号,并非明文厂商名;同一逻辑模型在不同渠道 vendor 可能不同(例如 minimax-m2.5 在基座是 f、在 cloudhosted 是 e)。下表「推测来源」列按模型 id 名称推断,仅供参考,非配置字段。

推理档位(reasoning.effort)分布

effort 档位 数量
medium 25
(无effort字段) 17
high 8

计费倍率(credits)分布

空值 = 未显式声明(按渠道默认计费,多为 x1.00)。

WorkBuddy 模型定义与配置研究

研究对象:/Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked/(WorkBuddy 应用解包目录) 核心结论:可用模型不是硬编码在程序里,而是由 cli/ 目录下一组声明式产品配置文件(product*.json 定义。机制为「一个基座 + 四个部署覆盖层」,运行时由环境变量选择渠道并合并生成最终模型清单。

一、模型定义的落点

模型定义全部集中在 cli/ 目录下的 5 个产品配置文件里,resources/ 目录中没有模型定义(那里是提示词模板、技能、插件)。

Agent 系统设计的核心思想

一套面向 Agent 应用设计者的系统化设计原则、架构模式与实战指南。

基于对 WorkBuddy(CodeBuddy Code)工作空间源码、系统提示词、文档与架构的深度分析提炼而成。

目录

  1. 概述:从 Chatbot 到 Agent 的范式跃迁
  2. 原则一:闭环执行架构
  3. 原则二:人格化身份体系
  4. 原则三:分层记忆系统
  5. 原则四:纵深防御安全模型
  6. 原则五:渐进式能力扩展
  7. 原则六:多模态工作模式
  8. 原则七:上下文精细管理
  9. 原则八:可组合的工具哲学
  10. 系统架构全景图
  11. 可复用的设计模式清单
  12. 设计决策框架
  13. 常见反模式

1. 概述:从 Chatbot 到 Agent 的范式跃迁

1.1 Chatbot 和 Agent 的本质区别

维度 Chatbot Agent
核心能力 理解并回答 理解、计划、执行、验证
与环境的交互 被动接收文本 主动感知文件系统、网络、工具
输出的性质 文本回答 实际行动(文件变更、API 调用、部署)
正确性保障 依赖训练数据 通过执行测试、编译、对比等方式自我验证
会话生命周期 一问一答,无持续性 跨多轮持久化,可中断恢复
用户角色 提问者 协作者/监督者

设计 Agent 系统,首先要完成这个认知跃迁:Agent 不是"更强的 Chatbot",而是一种全新的交互范式。

1.2 Agent 设计的核心张力

在设计 Agent 系统时,始终面临以下四对核心张力:

WorkBuddy 实战案例:设计创意

WorkBuddy 介绍

全场景智能体工作搭子

开启 AI Agent 办公新范式

AI 专家团 全场景办公

WorkBuddy 是全能 AI 工作台,一人指挥,全行业专家执行,从策略到交付一站搞定

免部署·安装即用 | 多专家·多模型协同 | 全平台·桌面 / 主流 IM / 小程序

100+ 领域专家组成你的虚拟团队,运营、设计、数据、开发等全角色场景覆盖

一句话指令自主规划并交付完整结果

多专家并行协作,一个人顶一支团队

MCP 生态 + 自定义 Skills,能力无限扩展

设计系统(Design System)

  • 场景设计系统
  • 模型Deepseek-V4-Flash

输入(宫崎骏的太空之城风格设计系统)

帮我建立一套完整的 Design System,包含颜色体系、字体层级、间距规则和基础组件规范文档,风格为宫崎骏的太空之城

输出

WorkBuddy 核心设计架构

基于 /Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked 逆向分析 WorkBuddy Desktop v5.2.5 + CodeBuddy CLI v2.106.4 | 腾讯出品

一、整体架构概览

graph TB
    subgraph "操作系统层"
        OS["macOS / Windows<br/>Darwin / Win32"]
        FSE["FSEvents API<br/>(macOS 文件监听)"]
        PTY["Pseudoterminal API<br/>(openpty / ConPTY)"]
        SQLITE["SQLite Engine<br/>(C++ 绑定)"]
    end

    subgraph "Electron 应用外壳 (WorkBuddy Desktop v5.2.5)"
        ELECTRON["Electron Main Process<br/>Node.js + Chromium"]
        RENDER["Renderer Process<br/>React/Vue UI + WebView"]
        DEVTOOLS["DevTools Panel<br/>Ghostty WASM Terminal"]
        PRELOAD["Preload Scripts<br/>IPC 安全桥接"]
    end

    subgraph "CLI 核心宿主 (CodeBuddy CLI v2.106.4)"
        CLI["cli/bin/codebuddy<br/>Node.js 启动器"]
        TUI["TUI Mode<br/>Ink + React 19<br/>~16MB Bundle"]
        DAEMON["Daemon Mode<br/>HTTP Server<br/>Port 51862+"]
        HEADLESS["Headless Mode<br/>-p / --print<br/>CI/CD 管道"]
        WEBUI["Web UI<br/>Workers / Logs / Metrics"]
    end

    subgraph "原生模块层 (app.asar.unpacked)"
        NATIVE_MOD["node_modules/"]
        BETTER_SQL["better-sqlite3<br/>v12.8.0 (MIT)"]
        NODE_PTY["node-pty<br/>v1.1.0 (Microsoft)"]
        LYDELL_PTY["@lydell/node-pty-darwin-arm64<br/>v1.2.0-beta.12"]
        DOCS_ENGINE["@tencent/docs-engine<br/>v0.0.1-beta.9"]
        FSE_MOD["fsevents<br/>(nunjucks 嵌套依赖)"]
    end

    subgraph "资源与扩展层 (resources/)"
        RES["resources/"]
        BUILT_PLUGINS["builtin-plugins/"]
        BUILT_SKILLS["builtin-skills/<br/>15 个内置技能"]
        BUILT_MCP["builtin-mcp-apps/"]
        TEMPLATES["templates/<br/>Nunjucks 提示词模板"]
        DEVTERM["devtools-terminal/<br/>Chrome Extension v3"]
        BRANDING["channel-branding/<br/>OEM 品牌资源"]
    end

    subgraph "AI 推理后端"
        BACKEND["copilot.tencent.com<br/>AI 推理集群"]
        MCP_PROXY["MCP Connector Proxy<br/>Port 61047"]
    end

    subgraph "用户数据层 (~/.workbuddy/)"
        USER_DATA["~/.workbuddy/"]
        DB["workbuddy.db<br/>(SQLite + WAL)"]
        SOUL["SOUL.md<br/>AI 灵魂"]
        IDENTITY["IDENTITY.md<br/>智能体身份"]
        MEMORY["memory/<br/>项目级记忆"]
        SESSIONS["sessions/<br/>会话 JSON"]
        TRACES["traces/<br/>运行追踪"]
    end

    OS --> ELECTRON
    ELECTRON --> RENDER
    ELECTRON --> PRELOAD
    RENDER --> DEVTOOLS

    ELECTRON -->|spawn| CLI
    CLI --> TUI
    CLI --> DAEMON
    CLI --> HEADLESS
    DAEMON --> WEBUI

    NATIVE_MOD --> BETTER_SQL
    NATIVE_MOD --> NODE_PTY
    NATIVE_MOD --> LYDELL_PTY
    NATIVE_MOD --> DOCS_ENGINE
    NATIVE_MOD --> FSE_MOD

    CLI --> NATIVE_MOD
    CLI --> RES

    RES --> BUILT_PLUGINS
    RES --> BUILT_SKILLS
    RES --> BUILT_MCP
    RES --> TEMPLATES
    RES --> DEVTERM
    RES --> BRANDING

    TUI -->|HTTP/WebSocket| BACKEND
    DAEMON -->|HTTP API| BACKEND
    HEADLESS -->|HTTP API| BACKEND
    BACKEND -->|MCP STDIO/SSE/HTTP| MCP_PROXY

    CLI -->|读写| USER_DATA
    DAEMON -->|读写| DB
    TUI -->|读取| SOUL
    TUI -->|读取| IDENTITY
    TUI -->|读取| MEMORY
    TUI -->|写入| SESSIONS
    TUI -->|写入| TRACES

    FSE -->|API 调用| FSE_MOD
    PTY -->|API 调用| NODE_PTY
    PTY -->|API 调用| LYDELL_PTY
    SQLITE -->|C++ 绑定| BETTER_SQL

    DOCS_ENGINE -->|"FFI 加载:libeditor_sdk_ffi.dylib (172 MB)"| EXT1
    DOCS_ENGINE -->|"HTTP Server:127.0.0.1:39099 本地文档预览"| EXT2
    DEVTERM -->|"WASM 执行:ghostty-vt.wasm 终端仿真"| EXT3
    EXT1 & EXT2 & EXT3:::dummy
    classDef dummy fill:none,stroke:none

    style ELECTRON fill:#e1f5fe
    style CLI fill:#fff3e0
    style BACKEND fill:#e8f5e9
    style USER_DATA fill:#fce4ec
    style NATIVE_MOD fill:#f3e5f5
    style RES fill:#e0f2f1

二、Electron 主进程与 CLI 双层架构

flowchart LR
    subgraph "Electron 主进程"
        direction TB
        EP1["app-instance.ts<br/>多实例检测"]
        EP2["auth.ts<br/>腾讯云 OAuth"]
        EP3["daemon-app-server-*.ts<br/>守护进程服务"]
        EP4["desktop-monitor-service.ts<br/>桌面监控"]
        EP5["helpers.ts<br/>工具函数集"]
        EP6["file-authentication-storage.ts<br/>文件认证存储"]
    end

    subgraph "CLI 进程 (Node.js 子进程)"
        direction TB
        C1["bin/codebuddy<br/>入口启动器"]
        C2["V8 Compile Cache<br/>~37% 启动加速"]
        C3["Node >= 18.20.8<br/>版本检查"]
        C4["Headless 路由<br/>--print / daemon / -p"]
        C5["TUI Bundle<br/>codebuddy.js<br/>Ink + React 19<br/>~16MB"]
        C6["Headless Bundle<br/>codebuddy-headless.js"]
    end

    subgraph "通信层"
        COM1["stdio<br/>标准输入输出"]
        COM2["HTTP<br/>Web UI / API"]
        COM3["WebSocket<br/>实时消息"]
        COM4["IPC<br/>Electron 内部"]
    end

    EP1 -->|"spawn('node', ['bin/codebuddy'])"| C1
    EP3 -->|HTTP 端口| COM2

    C1 --> C2
    C1 --> C3
    C1 --> C4
    C4 -->|TUI 模式| C5
    C4 -->|无头模式| C6

    C5 -->|stdio| COM1
    C5 -->|WebSocket| COM3
    C6 -->|HTTP| COM2
    EP1 -->|IPC| COM4
    RENDER["Renderer Process<br/>(UI 渲染)"] -->|IPC| COM4

    style EP1 fill:#e3f2fd
    style EP2 fill:#e3f2fd
    style EP3 fill:#e3f2fd
    style C1 fill:#fff8e1
    style C5 fill:#fff8e1
    style C6 fill:#fff8e1

关键设计决策

  • Desktop 与 CLI 版本分离:WorkBuddy Desktop v5.2.5 是 Electron 外壳,CodeBuddy CLI v2.106.4 是独立 Node.js 进程,两者版本独立演进
  • 双 Bundle 策略:TUI 模式用 ink + React 19 提供交互终端,Headless 模式剔除 UI 依赖,显著减小启动开销
  • V8 Compile Cache:通过 enableCompileCache() 将 ~16MB bundle 的加载时间从 ~400ms 降到 ~254ms
  • --version 快速路径:直接返回版本号,跳过 DI 容器初始化和网络请求

三、原生模块与资源分层

graph LR
    subgraph "app.asar.unpacked 目录"
        direction TB
        subgraph "cli/ 目录"
            CLI_DIR["cli/"]
            CLI_BIN["bin/codebuddy<br/>入口脚本"]
            CLI_DIST["dist/<br/>codebuddy.js / codebuddy-headless.js"]
            CLI_WASM["dist/wasm/<br/>tree-sitter.wasm<br/>tree-sitter-bash.wasm"]
            CLI_WEBUI["dist/web-ui/<br/>docs/ (200+ 篇)"]
            CLI_VENDOR["vendor/<br/>sandbox / ripgrep / genie-trash"]
            CLI_PKG["package.json<br/>@genie/agent-cli"]
        end
        
        subgraph "node_modules/ 目录"
            NODE_DIR["node_modules/"]
            BETTER["better-sqlite3<br/>v12.8.0<br/>SQLite 数据库绑定"]
            NODE_PTY["node-pty<br/>v1.1.0<br/>Microsoft 伪终端"]
            LYDELL["@lydell/<br/>node-pty-darwin-arm64<br/>v1.2.0-beta.12"]
            TENCENT["@tencent/<br/>docs-engine<br/>v0.0.1-beta.9"]
            NJ["nunjucks<br/>+ fsevents<br/>模板引擎"]
        end
        
        subgraph "resources/ 目录"
            RES_DIR["resources/"]
            PLUGINS["builtin-plugins/<br/>weixinpay (MCP)"]
            SKILLS["builtin-skills/<br/>15 个技能"]
            MCP_APPS["builtin-mcp-apps/<br/>Ardot / Agently"]
            TEMPLATES["templates/<br/>8 模板 + 7 风格"]
            DEVT["devtools-terminal/<br/>Ghostty WASM"]
            BRAND["channel-branding/<br/>OEM 品牌"]
            PRELOADS["*-preload.js<br/>IPC 预加载脚本"]
        end
    end

    CLI_DIR --> CLI_BIN
    CLI_DIR --> CLI_DIST
    CLI_DIR --> CLI_WASM
    CLI_DIR --> CLI_WEBUI
    CLI_DIR --> CLI_VENDOR
    CLI_DIR --> CLI_PKG

    NODE_DIR --> BETTER
    NODE_DIR --> NODE_PTY
    NODE_DIR --> LYDELL
    NODE_DIR --> TENCENT
    NODE_DIR --> NJ

    RES_DIR --> PLUGINS
    RES_DIR --> SKILLS
    RES_DIR --> MCP_APPS
    RES_DIR --> TEMPLATES
    RES_DIR --> DEVT
    RES_DIR --> BRAND
    RES_DIR --> PRELOADS

    style BETTER fill:#ffebee
    style NODE_PTY fill:#ffebee
    style LYDELL fill:#ffebee
    style TENCENT fill:#ffebee
    style PLUGINS fill:#e8f5e9
    style SKILLS fill:#e8f5e9
    style MCP_APPS fill:#e8f5e9

为什么需要 app.asar.unpacked

WorkBuddy 实战案例:代码开发

WorkBuddy 介绍

全场景智能体工作搭子

开启 AI Agent 办公新范式

AI 专家团 全场景办公

WorkBuddy 是全能 AI 工作台,一人指挥,全行业专家执行,从策略到交付一站搞定

免部署·安装即用 | 多专家·多模型协同 | 全平台·桌面 / 主流 IM / 小程序

100+ 领域专家组成你的虚拟团队,运营、设计、数据、开发等全角色场景覆盖

一句话指令自主规划并交付完整结果

多专家并行协作,一个人顶一支团队

MCP 生态 + 自定义 Skills,能力无限扩展

绘制架构图和流程图

输入

@file:open-ai-eco 研究这个项目,绘制架构图和流程图。

输出

WorkBuddy 实战案例:日常办公

WorkBuddy 介绍

全场景智能体工作搭子

开启 AI Agent 办公新范式

AI 专家团 全场景办公

WorkBuddy 是全能 AI 工作台,一人指挥,全行业专家执行,从策略到交付一站搞定

免部署·安装即用 | 多专家·多模型协同 | 全平台·桌面 / 主流 IM / 小程序

100+ 领域专家组成你的虚拟团队,运营、设计、数据、开发等全角色场景覆盖

一句话指令自主规划并交付完整结果

多专家并行协作,一个人顶一支团队

MCP 生态 + 自定义 Skills,能力无限扩展

截图重命名与分类

输入

把 截图 目录中的图像根据图像的内容进行重命名及文件夹分类。

输出

我先看看截图文件夹里有哪些图像,然后分析每张图的内容来重命名和分类。
截图文件夹有 11 张 PNG 图像。我需要逐一查看每张图的内容来判断如何命名和分类。我先读取这些图像。

我已经看完了全部 11 张截图,根据内容可以把它们分成三类。分类方案如下:

1. AI-概念图/

  • Claude-Code-上下文工程.png(Claude Code 的上下文工程结构图)
  • RAG-检索增强生成.png(ChatGPT / RAG 流程图)
  • Multi-Agent-ChatDev工作流.png(ChatDev 多智能体开发流程)
  1. Claude-Agent-SDK/ Claude-Agent-SDK-封面.