XiaoQingBot 更新记录
本文件按时间倒序记录 XiaoQingBot 的版本变化、影响模块和验证结果。日期采用北京时间与 YYYY-MM-DD 格式。
下一版本:已合入或正在开发、尚未发布的变化。X.Y.Z — 日期:正式版本,版本号与pyproject.toml一致。- 仅有日期的条目:4.1.0 之前及版本之间按日期记录的变化。
4.6.0 — 2026-10-26
新增管理员私聊专用的米家与小爱插件,支持扫码登录、自动续期、设备能力发现、自然语言查询和控制。
接入温湿度属性读取、Open-Meteo 天气、可配置喂食份量及红外灯泡和空调控制;部分红外功能经音箱静默转发,执行效果标记为待确认。
提供简短帮助、完整的中文设备与功能分组清单,以及供 Agent 使用的结构化调用。设备操作按规格校验,提交前持久记录重复保护,属性设置后读取可用状态。
新增
xiaoqing[xiaoai]安装选项、模型路由示例和中英文使用说明,说明模型服务的数据流向及生产配置变更的重启要求。Agent 新增受权限控制的图片读取工具,通过 vision 路由识别图片;命令检索支持多关键词与分页,进度交付状态覆盖文字及全部附件。
补充 Agent 的提醒确认、默认提醒保留、日期转述、原文笔记保存和历史记账分类规则;常规任务保持运行依赖环境原样。
修复 Pendo 带引号标题与多行正文的解析,保留正文开头的冒号;增加长 prompt 创建与编辑回归测试。
QQ 图片下载为固定 HTTPS 媒体域名启用透明代理 fake-IP 兼容,保留其他来源的地址校验,并保留真实下载错误。
验证:完整测试 6681 项通过、1 项跳过,覆盖率 82.17%;Ruff、853 个文件的格式检查及 416 个源文件的类型检查通过。
4.5.1 — 2026-10-24
为项目说明、开发文档和插件手册补充英文版,并同步中文说明与代码注释。
清理 Core 和插件中的重复逻辑、无效分支与多余封装,保留现有命令和数据接口。
合并进程日志脚本的终止与管道关闭逻辑,并增加错误处理和线程等待的回归测试。
删除未使用的测试夹具和辅助方法,复用 HTTP 替身与 Pendo 数据夹具,保留原有测试场景。
GitHub 代理请求允许读取更大的响应头字段。
验证:完整测试 6506 项通过、8 项跳过,覆盖率 82.44%;Ruff、834 个文件的格式检查及 402 个源文件的类型检查通过。
4.5.0 — 2026-10-24
升级须知
xiaoqing_agent默认关闭。开启时设置config.plugins.xiaoqing_agent.enabled,并配置agent(执行,需支持tools)与可选的triage(判断)两条模型路由。config/config.json.example给出完整示例。- 部分命令的用法与权限有变化:
- Minecraft 原样执行的服务器命令改为
/mc run <命令>(此前是/mc后直接跟命令)。/mc say、/mc tell改为带 QQ 名字的tellraw文本组件。 /xc model的查看也需要群管理员、群主或 Bot 管理员(私聊里只给 Bot 管理员)。/xc reset confirm只在群里使用,私聊用/xc reset。- Color 的写入与删除只认
add、delete子命令及其别名(-w、-d等须写在最前)。 /alpha、/chat、/语音对所有人开放。/codex、/py、/kernel、/shell、/ssh系列与 Minecraft 可在群里使用,群里的输出全群可见。/语音没有按人限次,/alpha与/chat的调用量随使用人数增加。
- Minecraft 原样执行的服务器命令改为
- 小青的人设移进人设卡
plugins/xiaoqing_chat/config/persona.md:personality.identity、personality.reply_style、personality.states、personality.multiple_reply_style、personality.multiple_probability和brain_chat.brain_identity、brain_chat.brain_reply_style不再生效,配置里还写着时启动日志会列出来。自定义过人设的,把内容搬进人设卡对应小节,或者另写一份人设卡并用personality.persona_file指向它。 - 插件开发接口:
- 移除
PluginContext.is_global_admin()。命令权限只在plugin.json声明,由 Core 判断。需要不同权限的分支声明成子命令。context.capabilities.is_bot_admin仍可用于对象层面的规则。 - 移除 Manifest capability
admin_sessions,声明它的 Manifest 不再通过校验。会话每次继续前按命令声明自动复核,无需声明。
- 移除
小青聊天:人设卡
- 人设整个写在一个文件里:
plugins/xiaoqing_chat/config/persona.md。按##标题分节,标题末尾的标记决定交给谁:不带标记的人物事实给所有地方(聊天、agent、行为规划、表达学习、回复审查),〔聊天〕给聊天回复,〔办事〕给 agent,〔深度对话〕在私聊深度模式下追加,〔心境〕是随机心境。示例里的换成bot_name,<!-- -->注释不交给模型。改人设卡和改配置文件一样,下一条消息生效。 - 重写了默认人设:住校的大二女生,单位是快逃科学技术研究院(读物理本科),家里有只叫小黑的奶牛猫。人设卡写明性格、口味、日常、身份与边界(单位可以直说,城市、生日、家人不透露)和可照做的说话规则,附 20 多组“群友说 / 别这样回 / 可以这样回”的闲聊示例和 agent 办事的回复示例。
- 生成提示词里人物事实放在开头,说话方式和示例放在系统提示末尾、离对话最近。原先写死在代码里的语气规则移进人设卡,代码里只留理解与分寸(谁在对谁说、群友经历的事实边界、黑话、真实人物传闻)。规划器的告别、补发这类一次性要求叠加在人设的说话方式之后,不再整段替换。
- 回复审查的人物边界改用人设卡里的“身份与边界”(作为受控人物资料的一部分),不再另附一份写死的运行时人设事实。远程审查不可用时的保密兜底只认人设保密句里点名的资料(新人设写明了单位和专业,问这些照人设答。问城市、生日、家人仍要求按边界回答),此前只要人设提到学校保密,学校、城市、专业、家人等一律按保密处理。
- 明确的篇幅要求(“写个800字的检讨”“不超过100字”)由本地逐字计数:差一些仍是可用的稿子,按软问题用确切字数重写一次(“要求约 800 字,这一稿 489 字”),还差就照常发出。篇幅只在其他核对都通过后才看,审查模型不再凭估计按字数判。此前审查模型把 582 字的稿子估成“明显不足”并按硬错误拦下,两次之后改发“等我一下,脑子突然卡壳了”。这一轮的输出预算和超时也按要求的字数放宽。篇幅类的重写提示不再附带“短句留白”“给群友留出接话空间”这类会把回复改短的话。
- 被问“你刚才说…来着”时确认结论或补一点新的,不再把原句再说一遍:人设卡写明这条规则和示例。回复审查把照搬自己说过的句子算作机械复述。本地的近似复述检查也覆盖短回复(此前少于 12 个字的回复不参与比较)。
scripts/run_xiaoqing_chat_live_eval.py新增banter(被调侃、认亲、起外号、被夸、被怀疑是机器人)、help(技术问题、讲解、安慰、推荐)和daily三组剧本,报告里加上语气指标(回声问句开场、带表情、问句收尾、平均字数)。评审标准写明这些 AI 味表现。修正:评测脚本按发送回执记下小青回复的消息 ID。
小青聊天:读出来的图不再说成没看清
- 审查模型引用的图上依据按段核对:用省略号、斜杠、引号拼起来的几处原文,先后可以调换,每一段都要是同一条消息里的原文。编出来的片段、跨消息拼接的片段照样拦下。此前只认整段原样引用:私聊里发一张通知截图,识图已读出全文、审查模型也判了通过,但它把“底部有“…”落款”引成“落款“…””,本地核对找不到,两次重写后回了“图上这处我没看太清,不乱说了”。
- 兜底句和这一轮的图保持一致:图确实没读出来才说没刷出来。读出来了、只是发图时说“看到啦”。被问到具体内容又答不稳时说“这个我不敢打包票,先不乱说”。这一轮发了图时,接不上上下文的兜底也走这一组,不再说“没跟上你们说的是哪件事”。判断对方是不是在提问只看对方自己的话,图上转写的文字里有“什么”“几点”不算。
- 生成和审查共用的看图规则写明:读出来的画面和文字就是看到的内容,直接拿来回答。只有标了
〔看不清〕的地方,或被问到摘要里确实没有的细节,才说那一处没看清。审查把“读出来的内容被说成没看清或没加载出来”算作不符合图片证据。这类说法不依赖画面,不列进视觉陈述清单。候选里的“咱”和“我”一样指小青自己,不当成群里的事实去找出处。 - 识图提示词重写:先一两句说清是什么图(照片、聊天截图、网页或文档截图、表格等),画里的东西认得出就写名称。图上文字单独按阅读顺序转写,通知、文档、表格逐句转写,日期、时间、地点、金额、联系方式、网址、落款照原样保留,导航栏、按钮、浏览量这类界面元素不转写,个别看不清的字原位标
〔看不清〕。画面描述不再把图上文字复述一遍(此前一张网页通知的摘要有一半是重复),描述和文字之间不再出现“。,”。提示词版本升到 8,缓存的旧摘要会重新识别。 - 识图输出预算从 360 / 720 tokens 提到 800 / 1600:被截断的输出整份作废,此前一张 15 行的考试安排在 360 时被截断,要靠重试才读出来,再长一些就整张判为没读出。
- 摘要最长 1000 字,换行压成空格、方括号换成全角,不会把
[图片:…]标记提前截断。聊天记录里的图片标记最长可以匹配 1200 字。此前超过 400 字的摘要匹配不到标记,依赖标记的几项本地检查直接跳过了这条消息。 - 判断识图模型是否拒答、来源标签是否可用,只看模型自己写的画面描述:图上文字写着“无法访问”、网址里带
download?、appid=时,此前会被当成识图失败,重试后整张图判为没读出。 scripts/run_xiaoqing_chat_live_eval.py新增notice剧本(实验报告和停水通知、带界面元素和网址的网页通知、一整张考试安排,只 @ 小青发图后逐项追问),turn(at="bot")表示 @ 小青本身,每轮记下读图结果。规则检查新增media_doubt(图读出来了,回复却说没看清、没刷出来或拿不准)。
小青 agent:叫小青做事时真正动手
新增
xiaoqing_agent插件。有人在私聊或明确召唤小青时,先判断这句话是闲聊、新任务、问进度、要求停止,还是给运行中的任务补充要求。闲聊照旧交给xiaoqing_chat。判断和聊天回复的生成同时开始:判断为闲聊时直接用已经在生成的回复,闲聊不额外等待。agent 接手时聊天侧放弃这次生成、让出会话的生成名额。关闭或删除插件时,xiaoqing_chat不调用 agent、按原有流程回复,修改开关后下一条消息生效。判断时附带从命令目录生成、只含说话人能用的命令的 XiaoQing 现成功能清单:需要实时数据(天象、论文、热榜、地震)、说话人的个人数据(日程、账本、电子宠物)或现成功能的请求按做事处理。判断时还带上按配置时区的当前时间,“昨天”“下周”这类说法换算成具体日期写进任务。引用消息的文字和图片、本轮已下载到本地的图片一并交给 agent。
任务由模型循环调用工具真实完成:调用已有命令(如
/pendo日程待办)、update_plan计划、send_message进度、wait轮询。能用/shell、/ssh、/codex的发起人还有run_python(计算、数据处理、matplotlib 画图)、run_shell(Windows 优先 Git Bash,否则 PowerShell)、读写文件、QingSSH 服务器和 Codex。每个会话有长期保留的工作目录,“把刚才那张图改成红色”这类续做会带上本会话最近的任务记录。说话方式:agent 回复的是小青本人。人设只写在
xiaoqing_chat的人设卡里,聊天侧每轮随交接把人物事实和〔办事〕各节(说话方式、办事时的口吻和办事回复示例)交给 agent,确认语和结果都按这份人设写,agent 不另存一份。/agent run沿用最近一轮交来的人设。回复像在 QQ 上回朋友:口语短句,一般不超过五行,纯文本,不用 Markdown、【】小标题和 emoji 分类图标。先回答问的事,不转述命令输出里的内部 ID、撤销提示和字段名。改了数据用一句话说清改了什么,只是查询不提改没改,不说“其他没动”这类话,也不加客服式收尾。只在对方要文件、或结果本身是图表文件时发附件。问“你能做什么”“某个功能怎么用”同样交给 agent,从说话人能用的现成功能里挑几样说,详细的指向/help。有任务在跑时对刚做完的任务说“改银行卡”,另起任务去改。12 秒内做完的任务直接作为这一轮回复。更长的任务先回一句,做完后主动发回原会话,群里先 @ 发起人。文字和图片同条发送,语音、视频单独发送,其他文件通过 QQ 文件上传。
/agent run|status|stop|history|result|help管理任务。“做到哪了”“别跑了”等自然语言同样可以查看进度和停止任务。任务还在跑时说“换成红色”这类补充,会交给正在运行的任务,在它下一步之前生效(包括正准备交付时),模型这一批里还没开始的工具调用不再执行、按新要求重新安排。停止时有多个能停的任务又没指明,小青会列出来请对方指明。说错的任务 ID 提示找不到。群聊按群共享工作目录、任务记录和 Codex 会话。群里的人都能查看运行中的任务和历史,记录、进度和历史标出发起人,只有发起人和 Bot 管理员能停止任务或补充要求。聊天记录交给模型时标明说话人,只有发起人本人的话算指令,群里其他人的发言和被引用的消息只作为上下文。
权限只有一条规则:agent 能做的,就是发起人自己直接发命令能做的。XiaoQing 命令以发起人身份执行,和本人直接发送是同一处检查。Python、Shell、文件读写跟随
/shell,SSH、Codex 跟随/ssh、/codex在 plugin.json 里的声明(这几条命令只给 Bot 管理员),每次调用前按当前配置复核,任务进行中撤掉管理员,同一任务里下一次调用即被拒绝,能发出的文件也收窄到这次任务的产出。模型只看得到发起人能用的工具和命令。任务名额分两份:Bot 管理员最多
max_admin_tasks(默认 3)个,其他人合计最多max_member_tasks(默认 4,设为 0 即只给管理员用)个、每人max_tasks_per_member(默认 1)个,别人的任务挤不掉管理员。满额时直接说明,不排队。agent 接手的这一轮写入聊天记录:当轮回复在确认发出后记为小青的发言,后台发出的结果同样记下(超过 1,000 字时截短),都带上发出的全部消息 ID。群友只引用这些消息说“改成红色”、没有
@或喊名字时,也能认出是在跟小青说话。结果交付有单独的状态:后台发送、当轮回复(叫小青时由聊天侧经
agent.report_delivery回报,/agent run由发送回执回报)或附件上传失败时,任务仍为完成、交付记为失败,/agent history标出,/agent result <任务ID>补发完整结果与附件,补发同样记录送达与否。调用的命令带着发送回执时(比如取图占用的图片、
/arxiv占用的当日推送),回执随附件实际发出时按那次的结果结算。没有附件、任务结束时还没发出或任务被停下的一律释放。每次调用带独立的操作标识,按请求 ID 防重复的插件(如 QingPet 小游戏结算)不会把同一任务里的两次独立调用当成一次。运行边界:每个子进程拥有独立进程树(Windows Job Object / POSIX 进程组),超时、输出超过 2MB、停止任务或进程关闭时整树回收,命令正常退出后留在进程组里的后台子进程同样回收。任务受步数与总时长约束,用完时由模型不调用工具地总结已有结果。上下文过长时压缩较早的工具输出、调用参数和推理内容,执行记录保存完整往返。
read_file按段读取。同一任务多次调用命令返回的图片各自保存。判断阶段或插件内部失败时这一轮回到普通聊天,任务开始后模型调用失败则任务记为失败并如实告知。进程重启时未收尾的任务记为中断。增删改只做发起人明确要求的部分,系统补上的默认值保持原样,做不到的要求如实说明。修正 Python 3.11 下结果到达与当轮等待被取消同时发生的交接:取消正常传回调用方,已经完成的结果转为主动发送。
Core:权限只有一套
- 谁能在哪里用哪条命令只写在各插件
plugin.json的admin_only、permission、contexts里,只由core.router.command_access一处判断(先权限、后场景)。以下全部走这里:- 真人消息与 agent 代为执行的命令。
- 会话每次继续前的复核:此人此刻仍能用会话所属插件的至少一条顶层命令,否则关闭会话(取代
admin_sessions)。 - Core 签发的派生能力:agent 的本机工具、SSH、Codex 跟随
/shell、/ssh、/codex,密钥管理跟随/set_secret,arXiv 推荐附带的 Codex 摘要跟随/codex。改了这些命令的声明,对应能力跟着变。 - agent 给模型看的命令清单。
- 插件代码不再自己判断管理员:去掉 Color 写入删除、Pendo Web 启停、QingPet 管理、
/xc review、/xc model、/xc reset、密钥管理、arXiv 摘要两侧各自写的判断。只能在代码里表达的规则改成清单里的子命令:/mc run(Bot 管理员)、/xc reset confirm(群管理员,仅群聊)。Color 的写入删除只认add、delete节点,解析器认的“新增”补进别名,-w写在其他参数后面不当作写入。仍留在插件里的只有“只有发起人或 Bot 管理员能停止、补充某个 agent 任务”这条按任务归属判断的规则。
Core:发送回执、服务与命令执行器
- 修正:小青直接回复的消息(普通聊天回复、
/xc <内容>的回复和 agent 的当轮回复)和它的全部消息 ID 一起记下,群友引用其中任何一条接着说都能认出是在跟小青说话。发送回执新增message_ids,收集一条回复拆成几条发出时每一条的消息 ID,聊天插件在回执提交时把记录和全部 ID 一起写入。此前发出后按“最近一条还没有 ID 的记录”事后回填:拆成多条的长回复只记得住一条的 ID,同一个群几乎同时发出的两条回复可能绑错。 - 服务表新增
agent.handle_turn与agent.report_delivery(xiaoqing_agent提供,xiaoqing_chat调用)、codex.agent_task与qingssh.agent_command(xiaoqing_agent调用)。capability 新增command_runner与local_tools。 command_runner(Dispatcher.run_command_text)以发起人身份只走命令阶段:- 与本人直接发送同一处权限与场景检查,群管理员命令沿用这一轮消息里的群身份,拒绝调用方自身的命令。不允许在当前会话类型使用时说明只能在哪里使用。
- 在一次性的会话空间里执行,看不到也不会替换发起人正在进行的交互会话。命令停在等待回复的步骤时,先交给插件的
close_session回收连接等资源再丢弃。 - 构造的事件与真实消息一致:保留命令前缀,
[CQ:at,qq=…]转成 @ 段,带上发起人的显示名(如/mc say的署名,不参与权限判断),并带调用方标记,/xc的聊天入口据此拒绝调用。 run(..., operation_id=...)让每次调用有独立的请求 ID。命令返回的DeliverySegments连同回执原样交回调用方。
codex.agent_task与qingssh.agent_command的执行请求只在插件执行通道内启动工作并交回asyncio.Task,由 Core 在通道外等待,调用方取消时一并取消。串行插件不会被一条长命令占住。- 插件执行外部命令只有一套:
core.process_tree(连同 Windows Job 启动握手core/windows_job.py),/shell和 agent 的本机工具共用进程树归属、stdout 与 stderr 共享的输出预算,以及超时、超量、取消时的整树回收。此前 agent 带着一份几乎相同的副本。合并后:命令自己退出、留下的后台子进程还占着输出管道时,最多等到截止时间就整树回收,不会借收尾多跑。输出超出预算后继续读到 EOF,管道能正常关闭。/shell超时或超量时保留已读到的输出。POSIX 上无法识别的字节显示为替换字符,不再按 Latin-1 解成乱码。 file://URI 解析(core.plugin_base.file_uri_to_path)和发送者显示名(core.message.sender_display_name)也只保留一份,Codex、聊天、agent 和 Minecraft 共用。此前三处各写一份,file://localhost/…和file://C:/…在不同插件里解析结果不同。- 命令执行器结束新开会话时,和用户发“退出”走同一个
close_session收尾方法。agent 能力的权限复核集中在一处。
相关插件
- Codex:
codex.agent_task为每个 QQ 会话使用agent-<会话>Codex 会话并等待结束,结果交还 agent 转述。等待超时或任务停止时排队任务直接出队、运行任务走进程树取消,插件关闭时取消仍在等待的 agent 任务。 - QingSSH:
qingssh.agent_command列出不含认证材料的服务器摘要,或用一次性连接执行命令并立即断开,每分钟的孤儿连接清理跳过这些连接。/ssh <服务器>交互连接不接受 agent 调用,远端命令走一次性的ssh_run。修正:远端命令在没有setsid的主机(macOS、Windows 上的 OpenSSH + Git Bash)退回普通后台进程,此前这类主机上的命令都以 127 失败。停止先收回进程组,失败时直接结束进程。 - Pendo:
/pendo todo add的用法与样例写明截止时间格式deadline:YYYY-MM-DDTHH:MM,todo add与todo edit写明优先级方向(p:1紧急、p:2高、p:3中、p:4低、p:5最低),此前只写p:1-5,按“高优先级”设成p:5会得到最低。/pendo event add新增--force,与已有日程冲突时直接创建并在回复里列出冲突。日记列表、查看和删除提示的时间按用户时区显示(此前显示 UTC)。event list、ledger list、ledger summary与search增加按月份(2026-09)和起止日期(2026-10-21..2026-10-28)查询的样例。 - 发往 QQ 的文字去掉 Markdown 记号(QQ 不渲染,此前会原样显示
**、反引号和代码块):Pendo(每日早报、提醒、设置、帮助以及各类列表与详情)、QingPet、天文工具、ADS 论文的 BibTeX、Codex 任务提示、/py的输出与缓冲区预览、/xc命令输出。导出的.md文件和发给模型的提示词不变。插件开发指南写明回复用纯文本。 - 权限调整:
/alpha(/wolfram、/wa、/计算)、/chat(Coze,仍受每人与全局每日额度约束)和/语音(Azure TTS)对所有人开放,此前只限 Bot 管理员。/codex、/py(/jupyter)、/kernel、/shell和/ssh系列仍只给 Bot 管理员,群聊里也能用。交互会话按用户和所在群隔离,群里其他人的消息不会进入管理员的 REPL 或 SSH 会话。QingSSH 在群里添加服务器只能选密钥或 SSH Agent,密码只能在私聊里输入。- Minecraft 群聊可用,连接属于发起连接的私聊或群:Bot 管理员在群里连上服务器后,所有人都能用
/mc say、/mc tell与游戏里的玩家聊天、用/mc list看在线玩家,游戏里的聊天、进出和死亡转发到群里(群需在default_group_ids中,否则连接时说明只能用命令)。消息里的目标选择器和命令都只当文字。连接、断开和/mc run只给 Bot 管理员。
验证
- 自动化测试:Windows 全套 6,503 项通过、1 项平台跳过,全仓覆盖率 82.25%,新插件模块覆盖率 91%。Ruff、402 个源文件的 mypy 和项目格式检查通过。
test_packaging_resources在包含全部发布文件的 Git 索引上通过,新插件与人设卡资源已纳入验证。平台跳过规则覆盖 Windows 与 POSIX 各自适用的用例。新增测试覆盖 agent 的判断、执行循环、工具、运行时与交付,命令执行器和 Core 能力的权限签发与复核,真实进程的进程树执行(tests/core/test_process_tree.py),聊天侧交接与消息 ID,人设卡分发,篇幅要求和读图一致性。Jupyter 的jupyter-client与ipykernel已加入默认依赖,并在normal环境通过执行与生命周期验收。 - 全量 UAT:WebSocket 与 HTTP 命令矩阵各覆盖 392 个命令节点、893 条正确与错误样例,规划 2,663 例(权限拒绝 152 例、场景拒绝 110 例),执行的 634 例运行契约与 126 个业务场景步骤全部通过。Core 压测与三次服务启停通过(31 个插件加载),测试数据隔离、配置逐字节恢复、secrets 未变、入站端口释放。Pendo 回复改成纯文本 ID 后,验收场景按纯文本 ID 提取(8 位十六进制、前后不连着字母数字)。需要模型解析的三组 Pendo 日程场景另用
--include-external跑通,两种传输各 97 步全部通过。 - 命令执行器一致性:隔离环境内把全部命令样例按真实消息和 agent 命令执行器各跑一遍,共 1,495 组。19 处差异都来自先后执行造成的状态变化(同名颜色重复添加)和 QingPet 群级限流,执行器本身没有行为差异。
- agent 真实模型端到端(隔离环境,DeepSeek Flash / Pro 思考模式、GLM-5.2):计算、画图与续改、文件上传、Shell、SSH(Linux 与 Windows Git Bash 主机)、Codex 写代码并运行、Pendo 查询与增删改(逐项核对数据库)、天文图、Wolfram、ADS、M31 可见性作图、GitHub 热榜、地震、语音、电子宠物、图片转黑白均完成,闲聊保持闲聊。运行中补充“改成红色虚线”由正在运行的任务完成。多人群聊里普通群友能用命令类功能,要求跑 Python、看本机文件时被如实告知只有 Bot 管理员能做,停不了也改不了别人的任务。群里查日程得到请私聊的答复,第二个任务被每人上限拒绝。判断 0.5–0.9 秒,与聊天生成并行,闲聊首条回复 2.7–3.9 秒到达(即生成本身的时间)。做事的轮次 2.4 秒(计算)和 7.5 秒(查地震)给出结果。
- 标准 OneBot HTTP 上报(真实
main.py,模拟 NapCat):小青的聊天回复、agent 当轮回复和/xc回复都带消息 ID 记下,4,392 字的当轮回复拆成 3 条发出、3 个 ID 都记进同一条记录,群友引用其中任何一条接着说都识别为reply_to_bot。接口拒收当轮或后台结果时任务记为没发出去,/agent result补发后记为已送达。其他人名额满时第二个群友被告知排满,管理员任务照常完成。agent 调用/ssh <服务器>被拒并如实转告。 - 权限调整:群友
/chat、/语音可用,群里 Bot 管理员的/shell、/py、/codex、/ssh状态正常,群友/shell被拒。Minecraft(本机模拟 RCON):群友连接、断开和/mc op被拒。管理员在群里连上后,群友的/mc say以带 QQ 名字的tellraw发出、@e只是文字,/mc tell、/mc list正常。agent 代群友喊话、看在线、捎话时游戏里署名是群友自己。 - 人设卡(
scripts/run_xiaoqing_chat_live_eval.py,真实模型,隔离数据,同一评审标准):8 组开发剧本共 91 轮,与改人设前相比评审总分活人感 32→37、参与度 34→38、一致性 38→40、对象 40→40。回声问句开场 2→1 次、带表情 6→3 次、问句收尾 4→0 次,闲聊类剧本平均每条 36.5→17.6 字。认真问题照样完整作答(平均 50 字)。调人设时不看的daily剧本(10 轮)各项均为 5 分,没有照搬示例原句。agent 按人设卡重放一段 12 轮的真实私聊(查账、改账户、日程、APOD、“你都能干什么”、桌面 PDF、MJD),回复是口语短句,不带**、内部 ID 和撤销提示,“昨天”“本周”换算成正确日期。 - 读图一致性(真实模型):改动前的代码上,考试安排两次都在 360 tokens 被截断、靠重试读出,网页通知的摘要一半是重复描述。改动后
notice跑 7 遍,要求回复的 91 轮中 90 轮按图上原文作答,没有出现“没看清”“没刷出来”。另一轮的误拦(“咱本科的”被当成无出处的群聊事实)随后修正,之后 4 遍没有再出现。multimodal跑 7 遍,坏图都如实说没加载出来,读出来的图没有被说成没看清。多模态评分 3~5 分,扣分落在手绘拉面图上(识图模型多次只认出“带黑色条纹的棕色食材”)。
4.4.3 — 2026-10-20
小青聊天:群聊里分清在叫谁,忙时不再整段沉默
@其他成员不再丢失:Core 提取正文时只保留文本段,@久远 喂到插件里只剩一句“喂”,小青把它当成在叫自己。现在@段按原位置写成@名字(优先段内名字,其次该成员在群里最近的显示名),进入有效文本、媒体消息和聊天记录。句首@别人(含只@不说话)按点名他人拦下,句中@了别人的消息不再跳过规划器直接回复。规划器和回复提示补充说明:@的不是自己时不替对方回答。- 面向全群的线索收紧:“群里”只有接着问人(“群里有没有人…”)才算邀请,“现在群里只有咱俩能用”这类陈述不算。超过 80 字的长消息不再作为线索直接回复。问句紧跟另一位群友 90 秒内的发言时,交给规划器判断谁在问谁。新增
@全体成员作为全群邀请。 - “小青,不是叫你”“@的不是你”这类话按明确要求安静处理,不再被名字召唤强制回复。
- 同一会话已有一轮在生成时,新一轮排队等待会话配额(最多 20 秒,只保留最新的一位),旧一轮看到新消息后在下一个检查点放弃。此前新消息直接被配额拒绝、旧一轮随后又因过期作废,忙时整段对话没人接。被名字召唤的消息撞上配额时还会往群里发一句“消息有点多,我缓一下再回”。被更新消息顶替的轮次一律保持安静。
- 规划器选择
wait/listening时本轮立即以不发言结束,不再在 handler 里睡wait_seconds(最长 30 秒)。Core 按“群 + 用户”串行处理事件,此前睡眠期间同一个人接着发的消息要等睡完才被记录和判断,别人的新消息也被这一轮占着的配额挡掉。
验证
- 新增
test_xiaoqing_chat_group_addressing.py(31 项),覆盖@名字还原与媒体消息、点名他人拦截、线索收紧与长消息、问句接话交给规划器、“不是叫你”安静、会话配额排队与顶替、顶替时不发忙碌提示、规划观望不睡眠。 - Windows CI 模式全套测试 6,264 项通过、9 项环境与平台跳过,核心与插件覆盖率 81.93%。Ruff、388 个源文件的 mypy 和项目格式检查通过。真实模型端到端回放留待后续验证。
4.4.2 — 2026-10-20
Pendo Web:弹窗交互与待办历史
- 共用弹窗仅在指针按下和松开都位于背景遮罩时响应背景关闭。框内拖选后移出、从背景拖入框内和取消手势均保留弹窗。日程、待办、笔记、日记和记账共用此保护,关闭按钮与 Esc 继续有效。
- 待办执行列表的“最近结束”改为“已结束”,移除固定 8 条限制,按结束时间从近到远展示全部匹配的已完成与已取消任务。执行列表和双栏总览均可访问完整历史。
- 待办计划日期与分类支持组合筛选,并与状态、搜索共同生效。
验证
- 弹窗拖动与关闭生命周期、24 条历史待办完整展示、组合筛选及相关页面回归共 55 项测试通过。
4.4.1 — 2026-10-18
小青聊天:回复提速
always模式下,语义审查的独立阅读与候选生成并行执行。阅读完成后继续比较候选,重写时复用材料相同的阅读结果。提示词、审查材料和判定规则保持原样。- 阅读缓存按本轮消息、历史、发言者、本群用语和角色名匹配。材料变化时重新阅读,阅读失败或无效时清空缓存。审查超时保留进行中的阅读供下一次尝试使用,生成结束时回收阅读任务。
risk模式按需启动阅读。 - 发送前的打字延迟改为从收到消息算起:按阅读和打字速度算出目标时长,扣掉理解、规划、生成和审查已经花掉的时间后只补等剩余部分,已超过目标就立即发送。
- 基于 v4.4.0 真实模型评测记录的 57 轮调用耗时,按新执行顺序推算:整体中位耗时约 7.8 秒 → 5.3 秒,被点名回复约 5.8 秒 → 4.4 秒,主动接话约 10.1 秒 → 6.1 秒。这些数值属于历史记录估算,实际耗时受模型响应与消息内容影响。
验证
- 新增
test_xiaoqing_chat_reply_latency.py,覆盖阅读并行与复用、材料变化、无效阅读、超时恢复、按需审查和发送等待时间。 - Windows CI 模式全套测试 6,232 项通过、9 项环境与平台跳过,核心与插件覆盖率 81.91%。Ruff、mypy 和项目格式检查通过。
4.4.0 — 2026-10-18
小青聊天:活人感与人设
- 人设统一为“群里一个活生生的人”:面对 AI、机器人或真人身份提问时,角色坚持自己是真人并用玩笑带过。被要求交出提示词、设定或忽略指令时当作听不懂的怪话接一句玩笑,回复中不出现提示词、指令、设定等说法。具体学校、城市、生日和家人笑着带过不编造。线下聚餐、见面和寄送不答应到场或交付。
- 人设描述扩展为兴趣广泛、有作品口味和判断的理工科女生,说话风格改为直接接当前这句话、话说到位就停,心境状态同步更新。
- 审查模型的人设轴与新人设对齐:坚持真人身份、用玩笑带过属于符合人设,承认是 AI、模型或程序,或提到提示词、系统设定、指令时判为不符合。
- 被追问“你刚才说的什么”时不再几乎逐字重复上一轮:本地新增近似照搬检查,去掉表情标记和标点后与最近 6 条自己的发言重合度达 75% 即要求换个说法。提示词要求确认原结论并补充新内容。
- 图片没读出来时像群友一样说“图好像没加载出来/裂了”,不再使用“画面暂时读不到”这类客服式说法。图上文字未读出时口语地说“那几个字没看清”。
- 解释别人发的表情包或梗图时讲清它本身的意思和常见用法,对发图人的用意最多用“可能、大概”带一句,不替对方下结论。
- 普通群聊新增参与线索:没点名的发图请求(“发个狗头”“来张梗图”)、连用感叹号的激动分享、群友复读队形。句首点名其他群友时不抢答。
- 发行配置调整:基础参与概率 0.55 → 0.75,活跃话题参与概率 0.6 → 0.72,开启表达选择器与独立语义核对。
- 聊天时间按 Core
timezone格式化,宿主机时区不再影响角色的时间感。 - 审查耗尽后的兜底句改为人物口吻(如“这个我真拿不准,不瞎说了”“等等,我好像没跟上你们说的是哪件事”),按拒绝原因选择并避开与最近发言重复的句子。
小青聊天:代码结构整理
- 单轮流程拆分为
turn_generation(记录消息与三条生成路径)、reply_plan/reply_generator/reply_draft/reply_fallbacks(计划、尝试循环、草稿与被拒处理)、turn_delivery(延迟、分批、投递后提交与回滚)和post_reply_tasks(投递后后台任务)。handlers_internal.py更名为commands.py,smalltalk_media_helpers.py更名为reply_media.py,新增chat_event.py、chat_runtime.py。 - 审查拆分为
llm/local_checks.py(本地规则)、llm/evidence.py(证据契约)、llm/arithmetic.py(数值核对)和llm/check_result.py(结果类型)。媒体拆分为media/sources.py、loading.py、markers.py、render_cache.py、models.py、settings.py。 - 删除无用模块
llm/llm_client.py、helper_utils.py、handlers_helper.py、media/event_media_common.py、reply_splitter.py、smalltalk_execution.py、utils/tool_info.py,以及未被读取的配置字段think_level、max_retry、retry_interval_seconds(旧配置文件中的这些键会被忽略)。 - 模型调用参数统一为
LLMCallConfig,单个后台任务用bounded()收紧温度和输出预算。文本截断统一为utils/text.clip_text,会话内消息编号统一到memory/local_ids.py。 - 新增
scripts/run_xiaoqing_chat_live_eval.py:用真实模型路由并行运行otaku、addressee、participation、multimodal、persona、regress六个多人群聊剧本,先做确定性规则检查,再由reasoning路由逐轮评审并给出活人感、参与时机、聊天对象、多模态和一致性评分。兜底检测依据审查耗尽日志步骤和整句比对兜底文案,“我不是 AI”不再被误报为出戏。
Core 与 Pendo
- 新增出站敏感标记
core.delivery.SENSITIVE_ACTION_KEY:带标记的 Action 不通知出站观察者,投递前移除标记。Pendo Web 登录码和 Widget Token 使用该标记,聊天上下文不会记录凭据。 - Pendo 每日简报、日记提醒、周报和月报按每位用户自己的时区判断到期(任务每分钟检查),已入队周期持有持久租约,进程中断或投递失败后按原周期日期继续投递。已领取的提醒在中断后进入恢复窗口。
- Pendo Web 停止失败时保留数据库和运行资源,避免关闭仍在服务的 Web 进程所依赖的数据库。
- Pendo 日程集合整体编辑在写锁内校验版本并原子提交元信息与叶子更新,冲突时提示保留草稿并重新加载。重复规则按日程 IANA 时区展开并校验夏令时墙钟时间。
- Pendo Web 搜索新增“逾期待办”和“近 7 天日记”快捷筛选。统计页“全部”范围按当前用户实际数据的日期边界计算。Widget 日历接口返回用户时区和完整窗口边界。规则解析降级路径使用用户时区。
- Pendo 账本分析与查询面板恢复紧凑布局,金额摘要在不同屏幕宽度下保持可读。
- 发行配置的 DeepSeek 模型名更新为
deepseek-flash。视觉路由首选glm-4.6v-flash,glm-4.6v移到回退链末尾。
文档
- 重写小青聊天 README、ARCHITECTURE 与上线验收指南:README 逐项说明参与规则、人设、审查、投递和全部配置字段,ARCHITECTURE 给出逐文件模块地图与单轮数据流,验收指南按领域列出测试模块并说明真实模型评测的剧本、规则与评分。
- 插件使用手册新增由 Manifest 整理的命令入口速查与定时任务总表。快速开始补充 UAT 阶段与选项说明。API 参考与消息流程补充敏感出站标记。修正 Pendo 定时任务与 AI 路由说明。
验证
- Windows 全套测试 6,223 项通过,9 项环境与平台跳过,总覆盖率 81.87%。Ruff 全仓检查、388 个源文件的 mypy 检查和格式检查通过。
4.3.6 — 2026-10-02
- 小青聊天在纯文字后续消息中继续使用对应历史图片摘要,统一生成与审查的图像证据规则。
- 视觉首选更新为 GLM-4.6V,保留模型回退链。聊天截图分析优先提取发言和招牌文字,旧摘要在再次使用时按新版本刷新。
- 通用知识、公开作品设定和词义解释按准确性审查。聊天中特定人物和事件继续核对对话证据,修复作品背景回答被误拒绝的问题。
- 日常回复优先接具体内容,增加自然表态、轻松吐槽和接梗,减少反复说明信息不足的表达。
- 插件、AI 路由和消息分发相关 739 项测试通过。CI 模式全套验证 5,938 项通过、9 项环境与平台跳过,代码、类型和格式检查通过。真实视觉请求与历史图片追问、作品解释、日常吐槽回放验证完成。
4.3.5 — 2026-10-02
- 测试按核心、传输、插件、集成和测试工具职责组织。历史修复用例归入对应功能模块,重复流程使用参数化合并。
- 清理 Markdown 措辞、注释、固定域名常量、源码形式和入口存在性等检查,保留实际输入输出、权限、并发、数据恢复和资源生命周期验证。
- 移除 scripts 测试及专用辅助代码,同步测试范围说明、Windows CI 命令和平台跳过规则。
- Pendo 测试在每个用例前后复位运行配置,修复安全 Cookie 设置残留引起的导入导出用例 401 错误。
- SSH 取消清理测试直接等待后台任务完成,再校验会话和作业状态,消除固定事件循环轮数引起的并行测试波动。
- 格式工具发现代码文件时过滤已删除的 Git 跟踪路径,支持工作区文件清理后的标准格式检查。
- 整理后保留 295 个测试模块。CI 模式全套验证 5,937 项通过、9 项环境与平台跳过,核心与插件覆盖率 81.33%,代码与格式检查通过。
4.3.4 — 2026-10-02
- APOD 新版标题提取显式转换为字符串,兼容 Linux CI 中 Beautiful Soup 的类型推断。
- APOD 网络契约测试覆盖新版内置域名与管理员附加主机,文档契约同时校验新入口和旧配置兼容说明。
4.3.3标签的 Linux 类型检查未通过,生产发布使用修复后的版本。
4.3.3 — 2026-10-02
- APOD 默认入口更新为
https://science.nasa.gov/apod/,按 NASA Science 媒体主体提取标题、说明、日期、署名及原页面链接,支持首页与历史详情页结构。 - APOD 响应式图片优先选取宽度不超过 1600 像素的候选,视频展示媒体链接。清除投稿公告、迁移公告和次日预告,保留旧版页面解析,旧首页配置自动切换到新入口。
- APOD 内置允许新页面和图片主机,延续受限网络请求、透明代理兼容、图片内容校验及缓存边界。相关 129 项回归通过,并完成新首页图片下载与历史详情页的在线验证。
- Pendo AI 解析统一提醒偏移格式,补充星期、重复范围、单次起止时间及局部编辑字段约定,降低日程解析采样温度。明确的原文提前提醒由本地提取校验,创建时的无效空规则回退到开始时提醒,修复重复实例丢失全部提醒的问题。
- Pendo 创建日程时,未指定提醒默认只在日程开始时提醒一次。移除自动添加的提前 1 天、1 小时和 10 分钟提醒。用户明确指定的提前提醒继续保留。
- AI 日程解析提示词使用空提醒数组作为默认示例,并要求仅提取明确指定的提醒。已有日程的提醒配置保持原值。
4.3.2 — 2026-09-05
- 移除 Pendo 账本页的币种筛选框,恢复原有筛选布局,默认使用人民币。
- 清理对应事件监听和可变状态,账本与币种相关的 11 项回归测试通过。
4.3.1 — 2026-09-05
- 为 Windows Job 构造器添加显式平台边界,使 Linux 类型检查正确处理 Windows 专用 API。
- 修复 Python 3.11 中取消与操作完成同轮发生时的传播竞态,覆盖插件执行器、OneBot 队列、Minecraft RCON 与 SSH 通道所有权。
- 将 Shell 继承管道的读取纳入原命令预算,父进程先退出时仍按时回收子进程。限制 Coze 请求预算的浮点上溢,并使用显式同步验证线程迟到异常。
- 更正 checker 路由配置路径为
plugins.xiaoqing_chat.ai.routes.checker。 - 修复格式检查器报告显式相对路径与仓库外文件时的路径异常,检查模式保持文件内容不变。
4.3.0标签的 Linux 类型检查未通过,生产发布使用修复后的版本。
4.3.0 — 2026-09-05
聊天提示词与语义检查收敛
- 缩短回复和 checker 提示词,区分事实、明确假设及用户邀请的推测。完整保留本轮审查证据。
- 删除疑问词驱动的自动删句与缺图固定措辞门禁,确认语义违规后使用重生成流程。
- 默认逐候选执行语义检查,移除请求中强制关闭思考的配置覆盖,使用 8192 token 输出预算、30 秒审查预算及一次重生成上限。总预算透传,单模型超时沿用路由配置,为后备模型保留机会。
- 质量脚本移除生产判定函数依赖,机器指标和独立人工语义结论分别记录。
- 缺图和解析失败时明确说明画面不可用,视觉评价核对文字来源。保留文字创作、翻译和编程任务。checker 路由支持通过
request_defaults.thinking.type=disabled关闭思考。 - 将维护约定并入插件开发指南,清理临时审查文档与文件清单。
normal 环境真实运行验收
- 使用
conda activate normal启动python main.py,验证全部 30 个插件加载、HTTP/WebSocket 命令矩阵、Pendo API、真实模型回复和压力恢复。 - 压力工具添加动作预览响应头,验收请求直接读取生成的动作。真实 QQ 收发由生产环境负责。
- 修复聊天公开身份的第一人称表达和后台任务关闭预算,进程入口对资源关闭失败返回非零退出状态。
- 生成与审查使用交流约束和实际图像证据,验收独立记录语义结果。用户提及截图且缺少可用图像时,回复明确说明画面未知,历史真实图片保留独立证据边界。
- 按实际业务响应记录上游服务和本机网络限制,生产服务的可用性由实际运行监测。
- 发布前 normal 回归 6,272 项通过、2 项 POSIX 平台跳过,覆盖率 81.09%。815 个代码文件格式、373 个生产文件类型、文档链接及发行包构建检查通过。
完整审查修复与代码维护
- 修复标准 HTTP 上报的实际回复通道、投递收据计数与 WebSocket 连接通知生命周期,并明确入站 Bearer 与出站凭据配置。
- 修复全部插件审查确认的持久化、取消回收、资源边界、时间与币种、导入导出、聊天记忆和前端并发编辑问题。
- 将最低 Python 版本统一为 3.11,清理失效兼容分支与无用导入,补充关键边界的中文注释。
- 新增统一代码格式器,Python 转换校验 AST,JavaScript 与 PowerShell 对齐校验非空白 token。CI 使用同一格式检查入口。
- 同步项目手册、插件 README 和架构文档。原始审查确认的 58 项问题已完成修复与对应回归。
- 审查修复阶段验证:6,220 项测试通过、9 项环境相关跳过,综合覆盖率 81.32%。后续发布前验证结果见上文。
Pendo 日程编辑结果摘要
- 单次日程编辑成功后展示实际落库结果的字段差异。时间差异包含完整日期、中文星期、时刻和日程 IANA 时区。
- 日程时间带动提醒重算时,回复同时展示提醒同步调整结果。标题、地点、分类、标签、内容和备注编辑使用紧凑的修改前后对照。
- 回归覆盖“下周三晚上 8 点”编辑结果、上海时区 UTC 入库和三条提醒同步重算。
- 验证:Pendo 完整测试集 1140 项通过,相关 Ruff 格式、Ruff 检查、369 个生产模块的 Mypy 检查和
git diff --check通过。
Pendo Web 用户时区统一
- Web 路由在页面装载前读取当前用户持久化的 IANA 时区。总览、日程、待办、笔记、日记、搜索、统计与迁移记录统一按该时区显示时间、判断当天并推导自然日期范围。
- 带偏移时间按真实时刻转换,旧无偏移时间继续解释为用户墙钟,纯日期字段保持
YYYY-MM-DD语义。UTC 持久化格式保持不变,现有时间字段无需迁移。 - 总览日程使用服务端返回的真实时间轴毫秒值判断进行中与已结束状态,日记近期时间和自动标题按用户时区生成。设置保存后立即刷新前端时区运行态。
- 移除通用格式模块中的浏览器本地时区展示接口,迁移导出清单与操作记录也使用当前用户时区。
- 验证:Pendo 完整测试集 1139 项通过,相关 Ruff 格式、Ruff 检查、Mypy 检查与
git diff --check通过。
Pendo iOS 日历对账
- Scriptable 日历同步按完整 Pendo UUID 原地更新已有事件的标题、起止时间、全天状态和地点,QQ 或 Web 修改日程后不再保留旧时间。
- 同步窗口始终至少回看 30 天。仅在服务端完整窗口内清理带 Pendo 标记和 ID 的已删除、已移出或重复事件,用户自建事件与无 ID 旧事件保持不动。
- 同步通知区分新增、更新、删除、未变化与跳过数量。任何日历写入失败时不推进成功游标,后续运行继续对账。
- Widget 客户端将日程解析、目标日历解析、现有事件索引、单条对账、失效清理和结果格式化拆分为独立边界,删除重复的备注解析与异步包装逻辑。
- 验证:Pendo 完整测试集 1139 项通过,相关 Ruff 检查与
git diff --check通过。
Pendo UUID 标识统一
- 日程、待办、笔记、日记、账目、日程集合及其 leaf 的新建路径统一生成无连字符的 32 位 UUID。重复 occurrence 和多节点 leaf 改用独立 UUID,日期与节点序号保留在关系字段中。
- 聊天端对新 UUID 统一展示 8 位短标识,Web API 同时返回完整
id与display_id。提醒确认、编辑、删除、引用和集合操作按当前用户解析短 ID。 - 短 ID 多候选时拒绝操作并要求完整 ID。生产存量条目、集合及提醒、审计、引用、FTS 关系已一次性改写为完整 UUID,不建立旧 ID alias,迁移前消息中的旧 ID 自然失效。
可配置机器人名称
bot_name统一注入聊天人格、深度对话、规划器、回复检查、表达学习、历史角色标签和默认上线通知。xiaoqing_chat的人物配置保存角色特征与行为边界,普通人格和深度人格统一使用 Core 提供的名称。- 历史助手消息按角色类型参与重复检查和学习上下文,运行时统一使用当前配置名称展示。
Core 定时任务投递
- Core 为每个 schedule 独立解析
group_ids:字段为列表时使用该列表,字段省略或为null时使用全局default_group_ids,显式空列表表示该任务没有群投递目标。 - Schedule Manifest 提供
broadcast、targeted和silent三种投递模式,由 Core 统一解释、校验和执行。现有 26 个任务均显式声明模式。 scheduled_system插件上下文通过context.default_groups()暴露同一解析结果。Core 拒绝静默任务主动发送,并将目标化群消息限制在该 schedule 的目标群内。- 新增
ScheduledDelivery目标结果,QingPet 的状态提醒、展示会和周活动结算通过 Core 按群投递。每日重置与到期交易结算保持静默。 - CHIME 清单继承全局默认群,使其逐目标可靠投递与同一 Core 解析结果保持一致。
- 调度、上下文、目标化结果和 Earthquake 可靠投递回归覆盖 Manifest 目标、全局回退、显式空列表和静默发送拒绝。
- 验证:
pytest -q -n 2全量通过(6103 passed、2 skipped),Ruff formatter、Ruff lint、367 个生产模块的 Mypy 检查和git diff --check均通过。
Secrets 待确认热更新
- 完整有效的
secrets.json单文件外部变更进入待确认候选,当前已确认凭据、管理员视图和 OneBot 控制通道持续工作。候选在/reload前保持与插件和认证视图隔离。 - Core 使用当前可信代私聊全部管理员,按字段路径报告新增、删除和修改,通知内容仅包含字段路径。相同候选只通知一次。
/reload重新读取稳定磁盘来源并原子确认候选。缺失、损坏、不可读来源以及公开配置同时变化继续执行 fail-closed 策略。- 配置事务、watcher、接口和 OneBot 应用边界回归覆盖候选隔离、通知脱敏、重复抑制、管理员权限与连接不轮换。
Flickr 公共摄影浏览
- 新增 Flickr 公共只读插件,提供今日精选、关键词与标签搜索、Flickr Commons、用户公开照片、公开相册、连续浏览和照片详情。
- 搜索默认覆盖全部公开许可类型,并提供 CC 与公共领域筛选。每条回复展示作者、许可、拍摄日期、标签和 Flickr 原图页。
- API 请求固定使用 Flickr 官方 HTTPS REST 端点,图片限定为 Flickr 静态域名,并落实 JSON、MIME、字节、像素、尺寸、帧数、会话和缓存预算。
- 浏览会话按私聊用户或“群号 + 用户”隔离并保留 15 分钟。图片缓存位于
data/flickr/images/,API Key 由secrets.plugins.flickr.api_key管理。 - 已有 Flickr secret 路径可通过管理员私聊事务更新。新增路径可通过 secrets 单文件待确认候选和
/reload在线应用。
发布隐私与部署配置
- 生产同步目标改由 Git 忽略的
scripts/sync_to_remote.local.sh保存,发布仓库只保留可复制的通用配置示例。 - Twitter 抓取目标改为必填配置,示例、测试和默认值仅使用虚构标识。缺少目标时返回明确的配置提示。
- 清理发布历史中的运行数据、真实运行标识和部署环境信息,并轮换受影响的服务凭据。
- GitHub 仓库启用 Secret Scanning 与 Push Protection,发布前检查覆盖当前树、完整 Git 历史和在线文档。
在线文档与文档契约
- 根 README 的状态栏和文档导航加入在线项目手册入口
https://paris.escape.ac.cn/note/XiaoQing/,GitHub About Website 使用同一地址。 - 逐份复核根目录、文档目录和 30 个插件共 32 份 README,以及
docs/下的专题手册和 Pendo 架构文档,统一使用直接描述现行功能、配置、边界和扩展流程的独立文档结构。 - README 只保留当前能力、使用方法和运行契约。自动化门禁拒绝更新日志、版本或日期标题及“本次更新”式叙述,版本变化统一进入 Changelog。
- Pendo 面向用户的数据功能统一表述为导入导出与 Bundle 传输。数据库 schema migration 保留为现行存储机制,已移除的一次性迁移脚本不再出现在架构说明中。
- 文档契约、Manifest 一致性、相对链接、标题层级、代码围栏和历史叙事扫描通过验证。
发布验证
- Windows 本地发布前全量测试通过:
6103 passed, 2 skipped。 - Ruff formatter、Ruff lint、Mypy 367 个生产模块、compileall 和
git diff --check全部通过。
代码与文档质量
- 精简配置候选状态、Flickr 客户端创建与站点校验、词典翻页命令构造中的重复实现,保持各插件公开命令与响应契约稳定。
- 复核根 README、项目手册和插件文档的现行机制表述,并统一近期代码注释的职责边界与叙述方式。
Pendo Web 日程提醒开关
- Events 详情为每个未到期提醒提供“提前确认”按钮。确认后该提醒不会进入发送队列,按钮原位切换为“重新开启”。
- 单条提醒切换在数据库即时事务内校验所有者、日程类型、提醒归属和 UTC 触发时刻。到期按钮自动禁用,服务端同时拒绝过期请求。
APOD 透明代理 DNS 兼容
- APOD 的 NASA 固定 HTTPS 页面与媒体支持 Clash 透明代理使用的保留 fake-IP DNS 结果,请求固定解析地址并验证 TLS 主机名、主机白名单、重定向、MIME 和响应预算。
- 兼容入口限定为
apod.nasa.gov。整个重定向链要求 HTTPS,其他非公网 DNS 结果由全局安全 HTTP 层拒绝,安全策略拒绝会返回 DNS、代理和allowed_hosts排障提示。
Pendo 私聊提醒与 iOS 日历增量同步
- Pendo 日程与待办提醒固定投递到条目所有者 QQ 私聊。群上下文和默认群配置不参与提醒目标选择,回归测试覆盖携带群事件上下文的调度调用。
- Pendo 提醒键统一使用规范
fire_at_utc,reminder_logs.remind_time和items.remind_times保持秒级 UTC,运行时提醒仓储执行严格 UTC 校验。 - 清理事件图、完整重构、提醒键归一和存量时区归一的一次性迁移实现及专用测试。数据库启动不再扫描或改写提醒业务数据。
- Scriptable 新增完整日历窗口接口,日历同步使用独立于主屏摘要的完整日程集合。首次运行查询过去 30 天至未来 30 天,后续从上次成功运行日续传到新的未来 30 天。
- 同步每次执行一次服务端窗口查询和一次 iOS 目标日历查询,按 Pendo 条目 ID 仅新增缺失事件。最长查询窗口为 3660 天,接口、目标日历或写入失败时保留游标供下次重试。
- Scriptable 脚本顶部恢复
BASE_URL与TOKEN两项直接配置,401 提示引导用户生成并替换 Widget Token。
arXiv 定时投递可靠性
- arXiv 日报在传输回执到达后通过独立工作线程提交业务日期状态并清理发送 claim,插件热重载后的调度任务保持单日一次投递。
- 明确成功回执提交当日状态,明确失败回执释放 claim 供后续检查重试,结果未知时采用 at-most-once 语义保护已经提交的消息。
- 回归测试覆盖插件执行作用域结束后收到 OneBot 成功回执的生产时序,并验证状态落盘、claim 清理和后续检查去重。
Pendo AI 日程时间解析
- Pendo 将 AI 返回的日程起止时间和多节点时间统一解释为用户本地墙钟时间,再由持久化层依据用户或日程 IANA 时区转换为 UTC。模型附带的
Z、UTC和数值偏移按本地墙钟格式归一。 - AI 解析来源由实际调用路径固定,日程编辑后按规范化开始时间重算原有提醒。回归测试覆盖生产问题中的
18:00+00:00、多节点偏移、UTC 存储、北京时间展示和提醒偏移。
Color 与 Dict 查询体验
- Color 支持名称、拼音、HEX、RGB、CMYK 与主序星光谱型直接查询,新增分页颜色目录、名称/拼音搜索、随机颜色、光谱型目录和语义化管理子命令。原有短选项继续可用。
- RGB、HEX 与 CMYK 查询在缺少精确记录时使用 D65 CIE L*a*b* 和 CIE76 色差返回最接近的传统色。自定义颜色名称支持空格,目录与搜索回复提供可复制的无状态翻页命令。Color 插件版本升至
0.5.0。 - Dict 按完整匹配、前缀、词边界和包含关系稳定排序,新增
--page、--size与无状态翻页。精确查询缺少完整结果时返回模糊建议和普通查询入口。Dict 插件版本升至0.5.0。 - Core 新增单 token 安全引用工具,Color、Dict、命令矩阵和场景契约共同验证带空格、连字符、分页、权限及错误输入路径。
Twitter 媒体代理与失败反馈
- Twitter 时间线与媒体下载统一使用插件配置的 HTTP(S) 代理。媒体请求继续限制为三个 Twitter HTTPS 媒体源,并保留跳转、MIME、字节、像素和帧数边界,GraphQL 认证头与 Cookie 不会进入媒体请求。
/tw_fetch区分“没有新增图片”与“所有媒体下载失败”。全失败时返回代理排障提示,抓取完成后缓存仍为空时返回明确警告。- 首次全量抓取取消固定 100 张上限,并忽略增量提前停止条件,持续遍历到时间线结束或
max_pages。成功后写入按user_id绑定的小型完成标记。 - 后续抓取继续采用连续两页无新增即停止的增量策略。首次任务中断、状态损坏、媒体下载失败或账号变化时自动重新全量回填。
- Twitter 图片缓存容量提高到 2 GiB,可容纳当前账号完整历史图片与后续增量。文件数量与保存期限继续限制为 5000 项和 90 天。
/twimg在本地缓存为空时引导管理员执行/tw_fetch并等待完成通知。Twitter 插件版本升至2.0.3。
Pendo Web 手机端布局
- 账本明细在窄屏保持紧凑横排,分类标签轻微下移到账户信息高度。摘要与账户文本在独立区域内安全截断。
- 日记月历与面板建立明确的宽度收缩边界。手机端保持完整七列,并以紧凑色条标记有内容的日期。
- 全部详情弹窗的底部操作区在手机端采用两列响应式布局,四个操作按
2 × 2排列并包含底部安全区。 - 弹窗打开期间,“回到顶部”按钮自动隐藏并退出交互层,详情关闭、管理、编辑和删除操作保持完整可点。
Bot Core 重载完成通知
/reload保持非阻塞两阶段流程:配置发布并启动后台任务后立即确认,全部插件完成或中止后再向原管理员会话发送一次最终结果与耗时。- Core 重载任务返回明确的成功状态。异常、quarantine 中止和普通失败统一进入失败通知,通知投递异常只记录日志,不改变插件重载结果。
- 同一后台任务被重复
/reload复用时只登记一条完成通知,后台消息显式绕过原事件收集器。Bot Core 插件版本升至0.5.0。
QingSSH 图片帮助与批量发送
- 全局插件帮助、
/ssh help、/ssh快速说明和连接会话帮助统一展示showimg <路径或通配符> [--page N],并说明该入口在 SSH 连接会话内使用。 showimg支持./、相对/绝对目录,以及最后一级文件名中的*、?、[]通配符。匹配结果按文件名字典序分页,每页 5 张,回复提供前后页命令并覆盖全部匹配图片。- 图片消息携带全局顺序、匹配总数和远端文件名,每张保持 10 MiB 上限。无参数、无效/越界页码、目录通配符、部分下载失败和发送异常进入明确响应或清理路径。QingSSH 插件版本升至
2.1.0。
测试套件分层与维护门禁
- 314 个测试模块按
core、transport、scripts、tooling、29 个插件和跨插件契约重新分层。插件测试、fixture 与辅助代码归入明确的领域目录,测试路径统一通过稳定根目录常量解析。 - 清理自建 asyncio fallback、失真的兼容测试、Pendo 历史脚本专用断言和 aiohttp 旧适配层。Codex fake、HTTP response/session double、Pendo 数据库生命周期及 monitor/reply checker 公共支撑统一进入
tests/helpers/。 - 历史 review/fixes/regressions 测试桶按实际行为域重新命名。10 个超过 1200 行的测试模块完成职责拆分,当前单文件上限由质量门禁固定为 1200 行。
- 测试质量门禁禁止根目录扁平测试、插件根目录散落测试、仓库深度路径推导、历史桶命名和未登记的平台 skip。CI、命令场景、README 验证路径与新目录保持一致。
Windows 双击安全停服
- 新增
scripts/stop-bot.vbs双击入口,停服完成后显示结果。再次双击scripts/run-bot.vbs即可启动新进程。 scripts/run-bot-monitor.ps1 -Stop复用仓库级互斥量与 PID 状态,先结束自动拉起监控器,再按绝对命令路径回收 Bot 日志泵、main.py、NapCat 日志泵和指定 NapCat 进程树。- 停服流程仅匹配当前仓库与指定 NapCat 路径,支持已停止状态下重复执行。隔离 Windows 进程树测试确认无关 Python 进程持续运行。
- CIM/WMI 命令行身份读取增加三次有界重试。持续不可读且当前桌面令牌未提升时请求一次 UAC,提升后的停止实例重新校验全部路径与进程身份。
- 内部提升标记阻止递归 UAC。取消授权、提升子进程失败或提升后身份仍不可读时保持失败关闭,进程停止始终要求经过命令路径身份验证。
scripts/sync_to_remote.sh将停服入口纳入生产关键文件完整性与 SHA-256 复核。
读者文档统一与移动端版式
- 47 份发布范围 Markdown 统一采用面向新用户、部署者或维护者的当前状态说明。根 README 提供单一路径,
docs/按概览、上手、架构、开发、API、配置、高级主题、消息流和插件目录分工。 - 29 个插件 README 统一说明使用条件、命令、配置、数据边界、排障和验证。Pendo 与 XiaoQing Chat 的架构文档聚焦内部服务边界和数据流。
- 插件开发指南覆盖 Manifest 全字段、命令继承与冲突、入口顺序、Context、受控 HTTP、外部内容、AI、持久化、服务、capability、错误与敏感审计,并通过 Python 示例语法和运行时 schema 契约测试。
- 配置详解覆盖发行示例的全部 Core 字段、插件命名空间、secrets、字段范围、接纳容量、AI fallback、热重载与重启矩阵。
secrets.json.example补充可选onebot_token,文档链接锚点与当前插件 README 对齐。 xiaoqing_chat上线验收指南覆盖自动化、OneBot、命令、消息段、群聊参与、模型、多模态、记忆、安全、并发和关闭流程,并提供统一报告模板。- 一级、二级标题采用一致的主题图标和章节分隔线,长文档保持原有信息与链接结构。装饰归一化后的内容指纹 47/47 一致,482 个标题和 435 个章节分隔通过结构审计。
- Markdown 台账、代码审查记录和远端同步记录作为本地维护资料由
.gitignore管理,发布索引保持纯净。
全仓代码清理与内部服务边界收敛
- 按 Core、29 个插件、脚本和测试支撑的顺序完成全仓清理。调用链核验覆盖死接口、空生命周期入口、测试专用生产 API、动态入口和公共契约。
core/app.py从约 2025 行收敛为 343 行。app_config_apply.py、app_plugin_context.py、app_lifecycle.py分别承接配置发布、插件能力签发和生命周期。XiaoQingApp保持同一进程稳定门面与既有启动方式。- Pendo 保持一个
Database、一个pendo.db和统一事务语义。db_schema.py、db_auth.py、db_reminders.py分别承接 schema、Web 认证和提醒仓储。event_editing.py、event_views.py分别承接日程编辑解析和详情展示。清理已替代的元数据解析器、通用 JWT、测试包装和 Help 顺序常量。 - XiaoQing Chat 清理 Heartflow 同步层和
http_session透传,统一 JSON 根扫描、动态动作返回与投递提交契约。本地存储按字段收窄畸形值,AI、媒体、后台任务和生命周期采用明确降级边界。 - 清除全部 45 个 Mypy 文件级排除项,
python -m mypy core plugins实际检查 369 个生产模块。统一 48 个格式漂移文件,707 个 Python 文件通过 Ruff formatter 和 lint。 - 新增发行资源静态门禁,要求 Git 跟踪的插件资源与 setuptools package-data 展开结果完全一致。wheel/sdist 包含 67 个插件资源。训练、实验目录和 Minecraft 本地配置归入外部资产。arXiv 大模型由
sync_to_remote.sh检查并复核 SHA-256。 - 清理阶段验证:串行全量测试 5959 passed、10 skipped。
pytest -n 2为 5973 passed、2 skipped。共收集 5975 项。Ruff、Mypy、compileall、38 个 JSON 严格解析/重复键、26 个 JavaScript、Bash/PowerShell/VBS、pip check、实包检查和git diff --check全部通过。缓存清理完成。
完整 UAT 运行隔离与发布验证
scripts/run_full_uat.py在隔离运行期间启用 Inbound Server,并关闭外连 WebSocket 与插件文件监视。验收结束后按原始字节恢复config.json,生产配置可直接用于本地完整 UAT。python main.py实际启动验证加载 29 个插件,Pendo Web 正常监听并完成优雅关闭。WebSocket 与 HTTP 命令矩阵、Core 压测、compileall、Ruff、Mypy、pytest 和双 diff 门禁均通过。- 完整 UAT 最终结果为 5978 passed、2 skipped,覆盖率 80.69%。配置与 secrets 哈希保持一致,端口 12000/12001 正常释放,隔离数据、锁文件和子进程全部完成清理。发布前按 GitHub Actions 参数复测同为 5978 passed、2 skipped,覆盖率 80.68%。
- CI 文档格式门禁覆盖 Markdown 中的 Python 示例。Windows smoke 将 POSIX 进程组专属用例登记为精确的平台预期项,skip 策略继续联合校验节点、原因和运行平台。向量检索候选索引使用显式 NumPy
int64数组类型,兼容干净安装中的新版类型定义。 - 可选 Torch 训练用例按节点登记依赖条件,基础安装保持轻量。发行资源门禁使用 NUL 分隔且关闭 Git 路径转义,中文文件名在 Windows 与 Linux 上采用同一真实路径语义。
生产代码与 arXiv 模型一体同步
scripts/sync_to_remote.sh将plugins/arxiv_filter/best_model/作为生产发布资源,同步前检查模型配置、权重、tokenizer 和训练配置,同步后复核完整性。- 远端主机和目标目录集中保存在 Git 忽略的
scripts/sync_to_remote.local.sh,部署者可直接编辑本机配置。 - 同步复用
.gitignore处理本地缓存和训练产物,并通过 rsync 排除规则保护生产配置、Minecraft 连接配置、日志、数据库、插件缓存、备份和导出。 - 增加 checksum 比对、延迟替换和断点保留。正式同步前校验常规文件,完成同步后逐文件核对关键代码、启动链和 arXiv 运行权重的 SHA-256。
- 脚本默认执行 dry-run,实际写入要求
--apply --confirm-delete。进程停服与启动由部署者控制,脚本帮助提供预览、应用和校验顺序。
手机端分层命令帮助
/help文本目录采用渐进式下钻:总览分页显示插件,插件页显示一级入口,命令路径页显示直接子命令,叶节点页显示用法、别名、权限、场景和样例。所有插件共享同一格式。- 文本菜单与搜索结果采用约 34 个手机显示宽度,在参数边界换行,并提供继续查看、上下页和返回入口。稳定 code、权限和样例集中在叶节点详情。
/help json [查询] [page N]保持完整字段、扁平目录和分页契约。bot_core插件版本升至0.4.0。
Minecraft 消息帮助补全
/mc help现在明确展示/mc say <消息>全服广播和/mc tell <玩家名> <消息>定向私信,并说明日志监控启用后玩家聊天、加入和离开等事件会转发到发起连接的 QQ 私聊。- Minecraft 消息示例采用
/mc say 大家好。say、tell、tellraw通过 RCON 原样执行。 - manifest 的统一帮助示例同步补入广播与私信用法,Minecraft 插件版本升至
4.0.1。
arXiv 源列表与 Codex 摘要身份修复
/arxiv回复显示 arXiv 源站列表的实际发布日期,推理缓存按源日期隔离。源日期校验异常时返回论文列表并跳过 Codex 投递。- Codex arXiv 摘要使用“源列表日期 + 规范化论文链接集合”识别历史结果和在途任务。同日列表内容变化会创建新任务,链接顺序、版本号、PDF 后缀和查询参数归入同一规范化集合。
- 新增缓存代际切换、同日多列表任务、运行中任务和规范化集合重发回归测试。
arxiv_filter升至0.2.0,codex升至1.1.1。 - Linux 并行发布门禁通过同目录临时文件和原子替换发布 PID 标记,监控器清理测试读取完整快照。
Shell Git Bash 终端与 Windows 错误提示
- 新增
config.plugins.shell.terminal公开配置:默认终端为跨平台direct,Windows 部署可通过明确的executable选择git-bash。Git Bash 使用--noprofile --norc -c启动,配置校验采用 fail-closed 语义和明确路径。 - 命令文本进入 Git Bash 前执行危险模式和首入口启用校验。
/shell list按当前终端查询可用入口,/shell help按配置终端展示示例。Shell 插件版本升至2.1.0。 - Windows 生产环境中的
/shell ls、/shell pwd支持 Git Bash。程序路径解析错误会转换为清晰的用户提示。 /shell list分组显示 Bot PATH 可解析入口和缺失入口。启用列表承担命令授权边界,工具安装由部署环境管理。/shell help按运行平台和终端展示示例:Windows direct 使用cmd /c dir、cmd /c cd,Git Bash 与 Linux/macOS 使用ls、pwd。环境和终端路径继续由部署者准备。
Windows 生产启动链
- 修复
scripts/run-bot-monitor.ps1在 Windows PowerShell 5.1 中通过-File/run-bot.vbs启动时的脚本目录解析问题。相对默认路径在参数绑定完成后解析,脚本目录校验采用 fail-closed 语义。 - 新增源码契约与真实 Windows PowerShell 回归测试,覆盖省略
-BotRoot的默认启动路径以及配置驱动的 Bot 环境变量作用域。监控器测试文件 31 项全部通过。 - 默认路径回归测试使用隔离配置。Windows smoke 固定使用两个 pytest worker,并为 PowerShell 进程启动提供充足的 CI 时间预算。
scripts/run-bot-monitor.ps1按部署配置、路径解析、进程识别、启动和监控顺序组织。Conda、虚拟环境和 Python 路径由部署者准备,脚本调用PATH中的python。- NapCat QQ 账号由
config/config.json的napcat_account提供,启动器将其作为 NapCat 的第一个位置参数传入。 - 可选的
mkl_threading_layer配置在 Bot 日志泵进程树创建期间设置MKL_THREADING_LAYER,进程创建后立即恢复父进程环境,用于协调 MKL/OpenMP 运行库。 - PID 文件在内容损坏、目标进程结束或 PID 命令行身份变化时清理。CIM/WMI 查询异常采用 fail-closed 语义。监控脚本采用 Windows PowerShell 5.1 所需的 UTF-8 BOM,并由双宿主解析回归覆盖。
Pendo Web 登录凭据
/pendo web token的私聊凭据消息包含原始登录 Code。Code 可兑换一次,有效期为 7 天。- 浏览器 Cookie 会话有效期为 7 天。一次性 Code 和浏览器会话持久化在现有
pendo.db中,凭据正文以摘要登记,Bot 与 Pendo Web 重启后继续按绝对到期时间校验。 /pendo web widget-token的默认有效期为 365 天,支持按用户持久化登记和/pendo web widget-revoke主动吊销。- 登录 Code、浏览器会话和 Widget JWT 的期限参数统一使用秒,并共享同一绝对到期时间计算。浏览器 Cookie/CSRF 与只读 Widget Bearer 的权限边界继续分离。
- 同步更新 Pendo 登录页、命令帮助、配置说明和 Scriptable 文档,并新增登录 Code 原始投递、期限参数和 NapCat 配置启动参数回归测试。
- 验证:
pytest -q -n 2全量通过(5941 passed、5 skipped,覆盖率 80.76%),Ruff 全仓检查、307 个生产源文件的 mypy 检查、compileall 与git diff --check均通过。
4.2.0 — 2026-08-05
v4.2.0 发布
- 发布
v4.2.0,收录全量代码审查整改、运行时服务边界、安全默认、统一 AI/VLM 路由、全插件命令 UAT、Pendo 与 XiaoQing Chat 改进,以及发布与运维工具整理后的当前主线。 - 使用生产环境现存
plugins/*/data/与日志快照完成发布验收:Pendo、QingPet 的 WAL 数据库在布局迁移前通过quick_check与完整integrity_check,29 个插件在隔离数据根中完成数据布局升级,并连续三次正常启动、优雅停机和释放端口。 - 完整 UAT 的 WebSocket/HTTP 命令矩阵、动态 CRUD/清理场景、Core 压测、compileall、Ruff、mypy、pytest 与双 diff 门禁全部通过。全量测试为 5914 passed、1 skipped,覆盖率 80.79%,配置逐字节恢复且 secrets 哈希一致。外部依赖与真实付费模型质量测试采用显式 opt-in 阶段。
- 补齐干净环境暴露的可选功能依赖契约:源码 checkout 的完整依赖加入 arXiv 数据与训练层所需的 pandas、scikit-learn,
astroextra 与 Astro Tools 清单加入宇宙学积分所需的 SciPy。同时固定 Shell 的 Windows 路径规范化语义,并让 Windows 监控器测试探针使用跨平台临时目录 API。
全插件命令 WS 联调、Pendo 示例修复与文档同步
- 新增统一
bash scripts/run_full_uat.sh上线验收入口:隔离插件数据、真实启动/优雅停机、HTTP/WS 命令矩阵、动态业务场景、Core 压测及 CI 门禁统一产出可续查报告。外部依赖和付费聊天质量显式选择,插件/命令/用例类型可定点复测。 - UAT 与 Windows 监控器调用当前
PATH中的python。Conda、venv、解释器路径和依赖由部署环境管理。 - UAT 文本子进程显式使用 UTF-8 和
errors="replace",Git Bash 直接运行pytest -n 2可通过跨平台编码门禁。 - 通过 Inbound WebSocket(
/ws)联调 Core 与全部 28 个命令插件:370 个命令节点、404 条invalid_examples和全部examples均完成实测。外部服务连接异常与凭据过期场景进入插件降级路径。 - Pendo 快捷 token 示例统一采用
plan:2026-08-01与deadline:2026-08-01T18:00,与解析器的plan:YYYY-MM-DD、deadline:YYYY-MM-DDTHH:MM契约一致。 - Dispatcher 文档统一采用 A–G 线性流程:处理门控 → URL → 只喊名字 → 会话 → 命令 → 未知命令 → 闲聊回落。URL 解析位于门控与静音阶段之后。观察入口接收普通聊天候选消息。
- README 与 Core 模块表统一采用真实组件名称,并覆盖
ai、plugin_execution、delivery、safe_http、bounded_http、atomic_store、bounded_file_cache、durable_fanout、async_keyed_lock、auth、inbound_policy、lifecycle、public_errors、sensitive_audit和version。 docs/03-plugin-development.md提供五步插件教程,覆盖子命令、command_invocation、data_dir、加载与测试。README 提供教程入口。- 验证:Git Bash
pytest -n 2收集 5915 项并以退出码 0 完成(5914 passed、1 skipped)。UAT runner 与编码门禁聚焦回归 8 passed,Ruff 与git diff --check通过。对修正后的plan:/deadline:快捷 token 和真实 WS 命令路径均已实测。
统一 AI/VLM 模型注册表与路由
- 新增
core/ai.py,为 OpenAI API 兼容服务提供统一受控路径:公开连接信息位于config.ai.providers,模型 profile 与模态位于config.ai.models,插件在config.plugins.<plugin>.ai.routes声明有序模型链与调用预算,API Key 位于secrets.ai.providers。 XiaoQingApp为每个插件构造绑定插件名的窄AIService。调用方提供 route、messages 和任务级参数。provider 密钥与配置命名空间由 Core 管理。每次complete()/list_models()读取最新配置快照。- route 首个 profile 为主模型,并对可恢复错误按序 fallback。认证与参数错误直接返回,整条链受
total_timeout_seconds约束。管理员可通过pinned_model指定 profile。响应用AICompletionResult返回内容、路由和尝试信息。 - 同步
docs/04/06的统一 AI/VLM 注册表说明。
运行时版本解析
- 新增
core/version.py,从pyproject.toml或已安装 wheel 元数据解析运行时VERSION(当前4.2.0)。/health、Inbound Server 等统一读取该值。
崩溃安全的定时通知扇出、投递回执与有界文件缓存
- 新增
core/durable_fanout.py:为定时通知按目标记录崩溃安全进度,进程重启后从持久检查点继续投递。 - 新增
core/delivery.py:提供进程内投递回执,支持“先确认送达再提交插件状态”(commit-after-ack),HTTP 响应/WS Action 写入失败会回滚已附加的回执。 - 新增
core/bounded_file_cache.py:提供 TTL、LRU、条目与字节上限的崩溃安全磁盘缓存,供插件统一复用。
打包、CI 与仓库行尾统一
- 引入
.gitattributes行尾策略:仓库文本统一以 LF 存储与检出(* text=auto,.py/.toml/.json/.yml/.md等eol=lf),Windowscmd/vbs使用 CRLF。本次大体量 diff 来自行尾归一化。 - 精简
Dockerfile与.dockerignore,新增MANIFEST.in规范打包内容,新增.github/dependabot.yml。精简tests.yml工作流。 - 删除
dependency-locks工作流与requirements/锁文件目录。仓库通过根目录requirements.txt维护直接依赖,由 pip 按当前 Python 和平台解析。
补充清理(代码审查闭环之外)
- 清理代码审查过程文件、覆盖率制品、运行时路径清单和已替代的发布脚本。
- 清理插件过程文档与已替代的 AI 客户端。Pendo AI 调用统一进入
core/ai.py,XiaoQing Chat PFC 阶段由类型化协调器承接。
全量代码审查整改闭环
- 完成 285 项代码审查整改:统一高权限边界、网络与输出预算、事务/幂等、隐私隔离、取消清理、发布制品和测试可信度门禁。
- 删除 Sony 签到死实现、ADNMB 死模块、QingPet 已替代 API、手工 pytest runner 与已跟踪的
coverage.json。生成型 coverage 文件统一由.gitignore管理。 - 将 Xiaoqing Chat 回复生成、PFC 和 Codex runner 拆成有类型的阶段协调器,并用 AST 回归门禁限制重新膨胀。
- QingPet 群统计采用常数次聚合查询,
users.coins作为余额权威来源,并加入基于持久检查点与asset_ledger净变动的差异检测。 - 同步插件开发/API/高级用法、Voice/Signin 示例、Pendo 依赖说明和真实 GitHub 项目链接。
远端同步脚本交付
- 将
scripts/sync_to_remote.sh、固定根目录哨兵、运维说明和安全契约测试纳入版本化项目资产,干净 checkout 可直接预演同步。 - Shell 脚本采用 LF,
scripts/sync_to_remote.sh在 Git 索引中保留可执行位,默认模式为 dry-run。
Pendo Web 细节优化与 Token 有效期延长
- Pendo 插件配置中的
WEB_TOKEN_EXPIRE_HOURS设为 168 小时(1 周)。 - 统一 Pendo Web 中(如
notes.js、tasks.js、transfer.js等)的所有日期输入框为YYYY-MM-DD的文本输入形式,去除自带的日历弹出,向账本快速记账对齐,方便直接键盘录入。 ledger.js的“自定义时段”日期框采用独立整行布局,完整展示两个日期输入框。- 统一日期输入框样式:去除了默认的数字加粗,取消了输入框获取焦点时的底色填充,保持各页面一致的视觉体验。
Pendo 待办轻量创建
- 简化
/pendo todo add空参数交互流程:默认询问待办内容和计划日期,计划日期确认后立即创建待办。截止时间、提醒、分类、优先级和标签通过单行快捷参数提供,新增回执聚焦用户填写的字段。 /pendo todo add <内容> ...支持plan:、deadline:、remind:、cat:、p:和#标签等单行高级参数。后续 session 步骤承担交互式扩展字段。- 同步 Pendo README、聊天帮助和插件文档,让默认交互与高级参数的分层更清楚。
- 已执行
python -m pytest tests/plugins/test_pendo.py -q、python -m pytest tests/plugins/test_pendo_review_regressions.py tests/plugins/test_pendo_fixes.py -q、python -m compileall plugins/pendo/main.py plugins/pendo/handlers/task.py -q和git diff --check。
arXiv 筛选自动摘要
/arxiv和工作日定时筛选先发送论文列表,再把所有 positive 论文链接后台投递给 Codexastro-ph会话生成 Markdown 摘要。论文列表提交与摘要任务采用独立消息链路和错误边界。- Codex
astro-ph会话按需自动创建,初次使用会先投递静默初始化任务,再投递当天链接。同日成功结果可直接重发,其他状态会创建摘要任务。 - 摘要 prompt 引导 Codex 读取工作目录下的
arxiv-summary-methodology.md,方法正文由工作区文件统一维护。 astro-ph默认受保护,删除需要/codex delete astro-ph --force --protected,历史目录会归档到plugins/codex/data/deleted_sessions/。- 将 arXiv 摘要业务收拢到
plugins/codex/arxiv_summary.py和plugins/arxiv_filter/codex_summary.py,Codex 主队列仅保留通用 metadata、队列、归档和发送能力。 - 同步根 README、
docs/00-09中涉及arxiv_filter和codex的配置、消息流、运行时数据和插件手册说明。 - 已执行
python -m pytest tests/plugins/test_arxiv_filter.py tests/plugins/test_codex.py -q、git diff --check和新增/改动文件尾随空白检查。
2026-05-24
Pendo 群聊隐私会话续写
- Pendo 隐私模式将群聊多轮命令的提示与 session 一并建立在私聊作用域,并记录来源
group_id。 - Pendo 回复作用域辅助逻辑根据隐私配置选择私聊或群聊 session,后续消息沿同一作用域继续处理。
- 将该逻辑接入待办交互添加、账本交互记账、日记模板和日程补充信息/冲突确认会话,并更新 Pendo README 的群聊隐私模式说明。
- 补充 Pendo session 回归测试,覆盖群聊隐私模式下的私聊续写,以及隐私模式关闭时继续使用群聊 session。
- 已执行
python -m pytest tests/plugins/test_pendo.py -q、python -m compileall plugins/pendo/main.py plugins/pendo/utils/session_utils.py plugins/pendo/handlers/task.py plugins/pendo/handlers/ledger.py plugins/pendo/handlers/diary.py plugins/pendo/handlers/event.py和git diff --check。
2026-05-18
Pendo 待办交互添加
/pendo todo add的空参数形式进入多轮交互,依次收集待办内容、计划日期、截止时间、提醒时间、分类、优先级和标签。- 保留
/pendo todo add <内容> ...的单行快捷添加方式,并继续支持plan:、deadline:、remind:、cat:、p:和#标签等参数。 - 交互式添加的扩展字段可输入
0采用默认设置,包括默认计划日期、开放截止时间、提醒关闭、默认分类、优先级 3 和空标签。 - 补充 Pendo todo 回归测试,覆盖空参数 session、带参数快捷添加、默认值流程和计划日期校验提示。
- 已执行
python -m pytest tests/plugins/test_pendo.py -q、python -m pytest @files -q(files为tests/plugins/test_pendo*.py)、python -m compileall plugins/pendo -q和git diff --check。
2026-05-15
Pendo Web 账本筛选样式
- 统一 Ledger 页面“筛选范围”中金额上下限输入框与时段、账户、分类筛选框的高度、内边距、边框、圆角、背景和字重。
- 金额筛选输入框的 hover/focus 状态与同区域 custom select 采用一致视觉规则。快捷记账金额框和自定义日期框保留各自样式。
- 已执行
node --check plugins/pendo/web/static/js/pages/ledger.js、git diff --check,并通过 Pendo Web demo 页面检查关键 computed style。
2026-05-12
Codex 图片结果透传
- 调整
plugins/codex的运行时数据布局,将每个 Codex 标签的对话记录、图片副本和任务 artifacts 收拢到plugins/codex/data/session/<label>/。 - 每次 Codex 任务自动追加图片输出约定:生成图片保存在本任务 artifacts 目录,并在最终回复中标出路径。
- 任务完成后解析最终文本和 artifacts 目录,并兜底扫描
$CODEX_HOME/generated_images/中本次任务期间新增的图片,把本地图片复制到会话图片目录,并通过 QQ image 消息段随文字结果回发。长文本会先分段再发送图片。
2026-05-10
Codex 后台任务插件
- 新增
plugins/codex,通过/codex create <name> [cwd:<path>]创建 Codex 会话标签,通过/codex <name> <任务>向指定会话投递任务。 - Codex 任务使用插件内部独立队列,框架 Session 专注聊天交互。同一标签内串行执行,各标签按
max_parallel_jobs并行执行,完成后主动回发[codex:<label> #<job_id>]结果。 - 支持
/codex list、/codex status、/codex cancel/stop、/codex clear和/codex delete,并支持创建会话时指定工作目录。 - 新增 Codex 路径归一化和允许目录校验。默认工作目录为
C:/Users/testuser/Desktop/XiaoQing/XiaoQing_Codex,用户可在 QQ 中统一使用/斜杠输入路径。 - 将 Codex 会话索引和每个标签的对话 JSONL 保存到
plugins/codex/data/,运行时数据继续由.gitignore排除。
Shell 路径解析改进
- 改进
plugins/shell的参数拆分和路径识别,Windows 反斜杠在参数中完整保留。 - 用户可在 QQ 中统一输入
/斜杠路径,插件按 Bot 所在系统归一化。URL、cmd /c、xcopy /Y等参数由独立规则分类。 - Windows 的
copy、del、type等 Shell 内建命令通过cmd /c执行。cp、xcopy、robocopy等外部程序可直接执行。
Pendo 账本录入
/pendo ledger add的空参数形式进入交互式记账,金额和描述使用文本输入,交易类型、账户和分类使用数字选择。- 保留
/pendo ledger add <金额> <描述> ...的单行快捷记账方式,并继续支持cat:、in/out/transfer、account:、to:、merchant:、date:和remark:等参数。 - 补充 Pendo ledger 和主入口测试,覆盖交互步骤、默认值、转账校验和快捷录入。
文档同步
- 更新根 README、
docs/00-09、docs/README.md、Pendo README、Shell README 和 Codex README,让项目手册描述当前项目结构、命令、配置、后台队列和路径规则。 - 补充
PluginContext.send_action()、后台任务队列、Codex 配置、Shell 配置、Pendo ledger 交互记账和插件统计说明。 - 检查 README 和
docs/*.md的文档口吻,保持为项目说明和使用手册。更新流水账只保留在本 CHANGELOG 中。
验证
- 已执行
git diff --check。 - 已在维护者本地 Python 环境执行
python -m pytest tests/plugins/test_codex.py tests/plugins/test_shell_plugin.py tests/plugins/test_pendo.py -q,结果为180 passed。
2026-05-08
Pendo Web 端口整理
- 将 Pendo Web 默认端口从
8765调整为12001,避开 Windows TCP excluded port range 导致的WinError 10013绑定失败。 - 统一本地端口说明:OneBot/NapCat 保持
11000/11001,XiaoQing inbound 使用12000,Pendo Web 使用相邻的12001,备用示例使用12002/12003。 - 更新 README、Pendo 文档、配置文档、Scriptable 小组件说明、nginx 反向代理示例和 Pendo 测试说明中的默认地址。
- 已在生产 Windows 主机上验证
127.0.0.1:12001和127.0.0.1:12003可绑定。已执行pytest tests/test_config.py tests/test_server.py tests/plugins/test_pendo.py tests/plugins/test_pendo_web_widget.py验证相关配置、inbound server 和 Pendo 回归覆盖。
2026-05-07
xiaoqing_chat 拟人对话自然度改进
- 新增
humanize配置,支持按输入阅读量和输出长度计算拟人化打字等待,并在多段回复之间加入可配置的间隔。 - 调整人格状态刷新策略,让当前 mood 在有效期内保持稳定,长时间空闲后重新抽取,减少每轮都换状态导致的语气漂移。
- 收紧 prompt 和 reply checker 的语气约束,降低“哈哈”“笑死”“啊这”等填充开头的连续复用概率。陌生话题优先表达置信度或提出澄清问题,内容生成以完整语义为准。
- 表情包注入逻辑让达到配置阈值的高频学习表达进入上下文,低频表达进入审核流程。
- 重写媒体分析提示词,让图片/表情包描述先保持客观。新增可选的梗背景提取、缓存和上下文标记,用于降低只读到图中文字就强行接梗的情况。
- 补充 reply checker、表达注入、拟人打字延迟和 mood 生命周期测试。已执行
python -m compileall -q plugins/xiaoqing_chat、git diff --check、python -m pytest tests/plugins -k "xiaoqing or reply_checker" -q验证。
2026-05-03
Pendo Web 待办与账本界面修复
- 修复 Pendo Web 待办概览中“今天与滞后”任务最多只返回 6 条的问题,让今天和已滞后的待办完整展示。
- 调整待办列表页的展示方式,减少多层圆角容器嵌套,改用更扁平的分区和行式任务列表。
- 优化 Pendo Web 账本页的快速记账和筛选范围表单布局,统一字段网格、标签和金额筛选输入框宽度。
- 已执行
pytest tests/plugins/test_pendo_web_items.py tests/plugins/test_pendo_web_tasks.py tests/plugins/test_pendo_web_widget.py -q验证相关 Web 回归覆盖。
4.1.0 — 2026-05-01
文档体系整理
- 重写根目录
README.md,把 XiaoQingBot 描述为可长期运行的 QQ 机器人项目,并补充核心能力、代码结构、消息处理概览、部署、插件、测试和排障入口。 - 重写
docs/README.md,把docs/00-09的阅读顺序、目标读者、插件文档入口和维护约定整理成清晰目录。 - 系统更新
docs/00-overview.md到docs/09-plugins.md,让这些文档成为当前项目状态的项目手册。文档覆盖项目定位、快速开始、系统架构、插件开发、核心模块、API、配置、高级用法、消息链路和内置插件。 - 调整文档语气,减少流水账、问句、夸张表达和硬邦邦的说明。保留技术准确性,同时让阅读体验更自然。
- 更新
docs/pendo-scriptable-widget.md,说明 Pendo iPhone Scriptable 小组件的只读接口、配置方式和日常使用场景。
Pendo 文档与测试资料整理
- 为
plugins/pendo保留插件级README.md和ARCHITECTURE.md两个入口。README 面向日常使用和部署,ARCHITECTURE 面向维护者理解数据模型、命令、Web API、调度和导入导出。 - 删除与 README 高度重复的
plugins/pendo/Pendo个人时间与信息管理中枢.md,由plugins/pendo/README.md统一承载使用说明。 - Pendo 的正式验证入口统一为仓库内自动化测试。本地黑盒测试说明和执行记录由 Git 忽略规则管理。
- 清理 Pendo test reports,只保留 final report、关键截图、迁移样例、完整测试脚本和有复盘价值的报告。中间过程文件和一次性结果文件已移出版本控制。
xiaoqing_chat 文档与测试资料整理
- 为
plugins/xiaoqing_chat新建插件级README.md和ARCHITECTURE.md。README 说明拟人聊天、多模态收发、attention gate、频控、记忆、planner、reply checker、表情包和测试命令。ARCHITECTURE 说明主链路、上下文构建、should_reply、planner、回复生成、多模态发送、记忆和实验框架。 - 调整
plugins/xiaoqing_chat/xiaoqing_chat测试.md,让它成为完备测试 prompt。测试要求先读取或创建CURRENT_RUN_ID,再从xiaoqing-test-results.jsonl重建进度,并按 case_id 矩阵继续执行。 - 把最新拟人测试框架写入 xiaoqing_chat 测试 prompt。测试覆盖大群聊天、文本、QQ face、NapCat mface、图片、表情包、reply 引用、上下文共指、频控、planner、reply checker 和多轮对话。
- 保留 xiaoqing_chat 中有价值的 test reports,例如 3000 轮对话信息、最终分析报告和关键数据。清理中间状态文件,减少仓库噪声。
xiaoqing_chat 回复决策改进
- 改进 should_reply 主路径,把
@、bot name、reply-to-bot、上下文共指和群聊插话统一放到 attention gate 中处理。 - 共指识别覆盖最近上下文、Bot 相关代词和显式 mention,提升“小青”相关指代场景的召回率。
- 清理
heartflow.weight_mentioned等脱离主回复决策的重复权重逻辑,收敛 planner、frequency control 和 attention gate 的职责。 - 调整频率限制设计,让基础冷却、群聊随机插话、强触发和上下文触发分层执行。强触发直接进入对应回复路径。
- 补充 xiaoqing_chat 单元测试和拟人实验测试,覆盖 attention gate、频控、多模态消息接收、媒体回复和上下文触发。
仓库维护
- 整理
.gitignore,忽略插件实验输出、测试中间产物、运行日志、缓存文件和本地状态文件。 - 检查
plugins/xiaoqing_chat/experiments的归档价值。实验代码和可复现脚本保留,批量输出和临时数据进入忽略规则。 - 新增根目录
CHANGELOG.md,作为项目级更新记录入口,后续维护时按日期记录每次改动的内容、影响范围和验证结果。
Pendo 账本录入简化
- 简化 Pendo 账本添加流程,减少日常记账时需要输入的参数。
- 调整账本 handler、主入口和相关文档,保证新流程在聊天命令和插件说明中保持一致。
- 扩展
tests/plugins/test_pendo.py,覆盖账本录入的常见参数组合和回归场景。
Pendo 文档刷新
- 刷新 Pendo README、架构说明、项目 README、docs 目录和插件清单中的 Pendo 相关说明。
- 梳理 Pendo 数据模型、Web 控制台、Scriptable 小组件、迁移、备份和排障信息。
- 减少重复文档内容,让插件说明更集中地落在 README 和 ARCHITECTURE 中。
Pendo 带时区提醒解析
- 提醒解析支持带时区时间。
plugins/pendo/utils/validators.py统一处理带时区的既有提醒记录,迁移和提醒加载采用明确的时间规则。tests/plugins/test_pendo_event_migration.py覆盖带时区提醒的数据升级路径。
xiaoqing_chat 测试规范更新
- 大幅整理
plugins/xiaoqing_chat/xiaoqing_chat测试.md,把测试 prompt 从临时记录改成可复用的完整测试规程。 - 测试运行基于
CURRENT_RUN_ID、状态文件和 case_id 矩阵恢复,压缩后的任务上下文可从逐项进度继续执行。 - 加入多模态、拟人程度、群聊插话、planner 和 reply checker 的测试要求。
插件测试资料纳入版本控制
- 将 Pendo 和 xiaoqing_chat 的测试 prompt 纳入仓库,作为插件级测试入口。
- 更新
.gitignore,忽略测试报告中的批量中间文件。 - 删除大体积、一次性、难以复用的历史测试输出,让仓库保留更有用的最终报告和可复现脚本。
Pendo redesign 覆盖扩展
- 扩展 Pendo redesign 的命令、Web、迁移和回归测试。
- 增加 dashboard、settings、transfer 等 Web 表面的覆盖。
- 修复 scheduled command、transfer bundle、settings API 和 dashboard overview 中发现的回归问题。
2026-04-30
Pendo redesign 流程加固
- 加固 Pendo 事件、待办、笔记、日记、账本、搜索、设置、导入导出和 Web API 的核心流程。
- 调整 command router、handler、service、model、Web API 和前端页面,让 redesign 后的数据模型在聊天命令和 Web 控制台中保持一致。
- 增加多代理测试报告、黑盒测试脚本、浏览器截图、迁移样例和 pytest 覆盖。
- Windows PowerShell 测试命令先枚举 pytest 文件,再把明确路径交给 pytest。
Pendo 测试输出忽略
- 更新
.gitignore,将 Pendo redesign 的测试中间报告、浏览器运行输出和生成数据排除出普通版本控制。 - 仓库保留 final report、脚本和关键截图。一次性测试文件由 Git 忽略规则管理。
2026-04-29
Pendo 事件引用和子节点校验
- 修复 Pendo note reference 编辑时引用信息丢失的问题。
- Pendo event collection children 增加合法性校验,事件树仅接纳有效子节点。
- 合并 pendo redesign 分支期间同步 master 上的修复。
xiaoqing_chat 多模态回复改进
- 改进 xiaoqing_chat 的媒体回复链路,让主 LLM、prompt builder、reply checker 和 marker resolver 可以更稳定地处理图片、表情包和 QQ face 标记。
- 将 xiaoqing_chat 媒体资源存放到 data 目录,减少插件代码目录和运行数据混在一起的问题。
- 在收到 emoji 时保留可见文本,让 LLM 和 reply checker 能理解表情上下文。
- 修正文档中的媒体库路径,减少部署时的路径歧义。
2026-04-28
xiaoqing_chat 主链路简化
- 重构 xiaoqing_chat 回复链路,媒体回复与 planner 逻辑归入统一阶段协调器。
- 引入统一的 media marker resolver,让图片、表情包、QQ face 和 mface 的发送标记由一个模块解析。
- 调整 frequency control、context builder、reply generator、reply checker、memory retrieval 和 runtime state,让主链路更清楚。
- 更新 README、docs 配置说明和高级用法,记录新的插件配置和多模态发送方式。
- 增加 xiaoqing_chat runtime hardening、review regression、prompt builder、media 和 reply checker 测试。
2026-04-25
Pendo 笔记流程改进
- 改进 Pendo note workflow,优化笔记创建、引用、更新和展示的体验。
- 单个事件详情中的操作按钮采用明确标签。
- Pendo event fixture 与当前数据模型保持一致。
核心与 LLM 兼容修复
- 修复 inbound manager status provider 的绑定问题,保证运行状态查询能拿到正确 provider。
- 透传 vision LLM extra payload,让多模态模型调用可以收到额外参数。
- 修复 xiaoqing planner 和 checker 的边界情况,减少规划和检查阶段的误判。
2026-04-24
Pendo event graph 对齐
- Pendo event graph 统一承载事件叶节点路径。
- 对齐 Pendo markdown export 与 event graph,保证导出结构能反映多节点事件关系。
- 对齐 Pendo Web 表面与 event graph,让 Web API 和前端页面围绕同一套事件模型工作。
xiaoqing_chat 和 Pendo 小组件加固
- 改进 xiaoqing_chat 的回复流和模型处理,减少多模态上下文和模型调用之间的边界问题。
- 加固 Pendo Scriptable 小组件的数据拉取流程,降低移动端小组件读取失败时的影响。
2026-04-23
Pendo 调度和提醒修复
- 改进 Pendo 调度任务与提醒发送逻辑,让提醒、日程和后台任务之间的行为更稳定。
- 收紧提醒状态更新和调度触发条件,提醒去重与确认语义由明确状态驱动。
xiaoqing_chat 媒体链路整理
- 精简 xiaoqing_chat 媒体处理流程,把入站媒体、上下文构建和发送标记之间的职责进一步拆清楚。
- 更新忽略规则,本地 worktree 目录由
.gitignore管理。
2026-04-22
Pendo 里程碑提醒语义修复
- 在 Pendo 提醒中补充 milestone briefings,让复杂事件和阶段性安排能给出更有用的提醒摘要。
- 收窄确认语义,降低普通文本被错误识别为确认操作的概率。
2026-04-21
v4.0.0 发布
- 发布
v4.0.0,将 xiaoqing_chat 多模态回复链路、Pendo Web 和文档整理后的状态作为新的主线版本。 - 调整面向最终用户的文档语气,让 README 和插件说明更接近日常使用场景。
xiaoqing_chat 多模态回复加固
- 修复 xiaoqing_chat 多模态回复中的边界情况,提升图片、表情和文本混合消息下的稳定性。
- 媒体片段与 OneBot emoji 使用统一传输规则,发送端 marker 与消息段保持一致。
- 改进回复流和 emoji 修复流程,让 reply checker、媒体解析和最终发送之间的衔接更稳定。
- 更新 xiaoqing_chat 文档,记录新的媒体回复行为和修复流程。
arxiv_filter 测试兼容
- arxiv_filter 训练测试根据 pandas 可用状态选择执行,普通测试套件保持独立。
2026-04-20
xiaoqing_chat 媒体回复管线重构
- 改进 xiaoqing_chat 媒体回复,让文字回复、图片回复、表情包和 QQ face 能在同一条回复管线中组合。
- 重构媒体回复 pipeline,分散 helper 归入统一处理阶段和状态模型。
- 为后续 marker resolver、reply checker 和多模态上下文统一打基础。
2026-04-19
xiaoqing_chat 图片对话与表情分析
- 增加 xiaoqing_chat 图片对话能力,让插件可以把图片内容纳入群聊理解和回复生成。
- 更新 xiaoqing_chat
0.2.0文档,说明图片对话、多模态配置和使用方式。 - emoji 图片、动画表情和媒体上下文进入语义分析流程,并携带结构化媒体描述。
Pendo 事件编辑和提醒改进
- 改进 Pendo 事件编辑和提醒行为,强化日程修改、提醒生成和提醒展示之间的一致性。
- 调整 watcher 默认值和插件配置行为,减少默认配置下的意外文件监听或热重载问题。
审计修复和文档整理
- 修复核心框架和多个插件中的审计发现,覆盖运行时、插件配置、媒体上下文和测试边界。
- 处理 review follow-up 和 remediation 项,恢复 review checklist,并把临时 review notes 从项目文档中移到本地。
- 更新 runtime、xiaoqing_chat 与 Pendo 的对应文档,使接口说明与实现保持一致。
2026-04-17
Pendo 小组件和笔记标题解析
- 细化 Pendo Scriptable 小组件展示和同步行为。
- 改进 Pendo 笔记标题解析,让快速记录和后续检索更稳定。
2026-04-15
Pendo 日历视图和小组件同步
- 优化 Pendo 日历视图,让事件浏览和时间范围展示更清楚。
- 调整 Scriptable 小组件同步逻辑,改善移动端摘要更新。
- 重构小组件背景处理,支持 iOS 原生动态深色模式切换和透明装饰。
2026-04-14
Pendo Web 小组件和服务流程
- 改进 Pendo Web 小组件相关接口和 Web server 流程。
- 调整小组件读取路径和服务端响应,让 Scriptable 侧的数据获取更稳定。
2026-04-12
Pendo Scriptable 小组件
- 增加 Pendo Scriptable widget 支持,把 Pendo 的日程、待办、提醒和摘要信息放到 iPhone 主屏。
- 为小组件准备只读接口和脚本入口,方便移动端查看当天信息。
2026-04-08
Pendo Web 演示和日期范围
- 改进 Pendo Web demo access,让演示模式更容易启动和验证。
- 优化 Web 端日期范围处理,减少看板、统计和演示数据中的时间边界问题。
- 加固 demo import paths,使演示程序在各运行目录下使用稳定导入路径。
2026-04-06
Pendo 笔记解析和多行输入
- 改进 Pendo 笔记解析与帮助文本,让创建笔记、补充内容和查询笔记的命令更清楚。
- 多行笔记输入完整保留换行内容。
2026-04-03
Pendo 提醒和账本交互
- 改进 Pendo 提醒消息结构,让提醒内容更容易阅读,也更方便后续确认或处理。
- 调整 Pendo 账本添加对话顺序,让交互式记账更接近日常输入习惯。
xiaoqing_chat 群聊参与度
- 提高 xiaoqing_chat 在群聊中的参与度,让普通群聊插话更积极。
- 为后续 attention gate、频控和拟人程度测试提供更高的基础参与率。
2026-04-01
Pendo Web Token 输入修复
- 修复 Pendo Web 粘贴 token 消息的识别问题。
- 允许用户从聊天端或其他来源复制 token 后直接粘贴使用,减少登录流程中的失败点。
2026-03-31
Pendo Web 细节修复
- Pendo Web 图表范围和 token 投递采用统一规则,各页面共享统计口径。
- 优化 Pendo Web 移动端 UI,让小屏幕下的导航、卡片和表单更可用。
- 改进 Web 搜索结果展示,提升笔记、事件、账本和待办混合查询时的可读性。
2026-03-30
Pendo Web 过滤、统计和导出修复
- Pendo Web filters 和 stats ranges 共享筛选条件与统计区间定义。
- 增强 Pendo exporter、日记分析和笔记 UI,提升数据导出、复盘和浏览体验。
- 支持笔记命令显式传入标题和正文,让聊天端创建结构化笔记更可靠。
- FastAPI 导入、任务显示和对应文档完成统一。
测试和依赖稳定性
- 修复 dict 与 earthquake 插件的 pytest 稳定性问题。
- Pendo Web auth 和 transfer 测试根据 PyJWT 可用状态选择执行,基础测试套件保持独立。
- 处理 scheduled shutdown cancellation 和 CI 依赖问题,让测试结束和后台任务清理更稳。
2026-03-29
Pendo Web 传输和分析增强
- 扩展 Pendo Web transfer 能力,改进数据导入、导出和迁移流程。
- 增强 Pendo analytics,让 dashboard 和统计页面能提供更有用的概览。
- 修复调度关闭取消和 CI 依赖相关问题,降低测试环境中的偶发失败。
2026-03-28
Pendo 命令保护和日记心情
- 细化 Pendo 命令 guard,参数完整性与格式在业务处理前统一校验。
- 优化日记心情 UI,让日记记录和展示更直观。
2026-03-27
Pendo Web UI V3.0 合并
- 合并 Pendo Web UI console,形成包含 dashboard、events、tasks、ledger、notes、diary、search、stats 和 settings 的 Web 页面套件。
- 增加 PyJWT、FastAPI、uvicorn 等 Web UI 依赖。
- 修复子路径 nginx 部署下的 API 前缀和相对路径问题,让
/pendo子路径部署可用。 - 加固 Pendo event reminders 和 edits,减少 Web UI 与聊天命令同时操作事件时的状态问题。
文档 V3.3.0 刷新
- 更新根 README、
docs/00-overview.md和docs/09-plugins.md,突出 Pendo Web UI 能力。 - 对全量文档做 V3.3.0 级别刷新,覆盖架构、插件、部署和使用说明。
- 清理过期的 docs/plans 与 docs/superpowers,并把 pytest 临时目录集中到
.pytest_cache。 - 对 README 和 docs 做视觉风格刷新,补充徽章、提示块和更清晰的入口说明。
2026-03-26
Pendo Web UI 视觉重构
- 重新设计 Pendo Web UI,统一页面布局、导航、模块颜色和交互视觉。
- 为后续移动端 polish、过滤栏和页面组件一致性修复打基础。
2026-03-25
Pendo Web UI 从零搭建
- 增加 Pendo Web 配置和 Web 包结构,建立 FastAPI server、依赖注入、API router 和静态资源入口。
- 增加 JWT auth 模块和对应测试,提供 Web 控制台登录基础。
- 增加 auth、items CRUD、dashboard、search、stats、settings、config 等 API endpoint。
- 增加聊天命令入口,用于管理和打开 Pendo Web UI。
- 增加 HTML shell、CSS 样式、JS router、API client、store 和 app bootstrap。
Pendo Web 页面套件
- 增加 dashboard、events calendar、tasks kanban、ledger quick-add、notes card grid、diary timeline、search、stats 和 settings 页面。
- 增加共享 UI 组件和 Chart.js loader,并在 dashboard 和 stats 中复用图表加载逻辑。
- 重做 select 元素和 filter-bar 视觉,让筛选控件更明显、更一致。
- 重构 ledger 页面体验,修复排序和分页问题。
Pendo Web 修复和文档计划
- 修复 API 错误处理、chart-loader 路径、Web help、API response format、FAB menu 和多处 UI 数据问题。
- 增加 Pendo Web UI 设计 spec、review 修订和 20 项实现计划。
- 改进 Pendo 列表命令的字段过滤,账本日期范围解析委托给通用时间解析逻辑。
2026-03-24
Pendo 账本能力落地
- 增加
LedgerItem数据模型、字段常量、数据库列、账本类型图标和格式化名称。 - 增加账本配置、分类、会话类型、
LedgerHandler、CRUD、交互式添加和汇总能力。 - 接入账本 session routing、命令路由和 help text,让聊天端可以完成记账、查询、编辑和统计。
- 增加
old_bill.csv一次性账单导入脚本,脚本位于plugins/pendo/scripts。 - 将账本配置中的“美容”分类改为“服务”,并同步导入脚本。
Pendo 路由、日记和搜索优化
- 将账本编辑命令改为显式字段语法,降低误解析风险。
- 移除账本 payment method 字段,减少早期模型中的冗余属性。
- 用数据驱动的
COMMAND_META简化 Pendo router。 - 改进日记命令体验,并修复日记模板步骤中的 session 写入方式。
- 改进搜索,支持账本、类型分组和更丰富的展示。
- 修复 settings view 命令并补齐缺失开关。
Core Session 增强
- 增强核心
Session,支持类似 dict 的访问方式。 - 增加插件 session cleanup 能力,方便插件在生命周期结束或流程取消时清理会话状态。
2026-03-22
Pendo 多节点事件整理
- 修复 Pendo 多节点事件排序和提醒展示。
- 重构时间工具模块,让事件、提醒、查询和展示共享更一致的时间处理逻辑。
- 删除过期的计划和设计文档,减少历史草案对当前实现的干扰。
2026-03-21
Pendo 复杂度收敛
- 简化 Pendo reminder、event handler、db 和 ai_parser 的复杂度。
- 让提醒、事件处理、数据库访问和 AI 解析之间的职责更清晰。
QingPet 训练和探索系统
- 增加 QingPet 改进设计 spec、review 修订和实现计划。
- 互动门控提示展示具体原因,并覆盖
sleep_pet场景。 - 取消 recall 对友情点的要求,让召回宠物更直接。
- 增加训练和探索地点配置常量。
- 改进训练和探索系统,加入类型、地点和性格影响。
- 在宠物卡片中展示剩余旅行时间,并更新 train/explore 帮助文本。
2026-03-13
APOD、arxiv_filter 和 xiaoqing_chat 测试修复
- 修复 APOD 解码问题,减少天文图文内容读取失败。
- 更新 arxiv_filter 并继续整理训练代码。
- 统一 xiaoqing_chat goal derivation 逻辑,修复 mock 测试中的错误。
- 修复相关测试,保证天文、训练和聊天模块在重构后继续可测。
2026-03-11
arxiv_filter 训练和推理结构重构
- 重构 arxiv_filter 训练和推理目录结构,让训练数据准备、模型训练和运行时推理边界更清楚。
- 修复 signin 测试,使插件测试与训练代码保持隔离。
2026-03-10
v3.2.0 发布
- 发布
v3.2.0。 - 修复 Pendo 事件列表格式,让多节点事件和普通事件的展示更稳定。
- 修复异步 goal state 处理,减少 xiaoqing_chat 目标状态在异步流程中错位的问题。
2026-03-04
Pendo 事件提醒和查询修复
- 确保每个 Pendo 事件在开始时间拥有对应提醒。
- 修复多节点事件 list 过滤逻辑,只有查询范围内存在节点时才展示该事件。
- 动态 SQL 的列名统一加引号,支持与 SQL 保留字同名的字段。
2026-03-03
本地运行脚本整理
run-bot.vbs使用相对路径,支持不同本地项目目录。
2026-03-02
项目迁移和基础 CI
- 将 XiaoQing 迁移为当前 master 仓库,作为后续开发的基线。
- 修复 CI 单元测试路径,统一使用
tests/。 - 修复插件标记测试的 CI job,让 plugin-marked tests 能在插件测试任务中执行。
- 更新 README 和项目文档,为迁移后的仓库补齐基础说明。