Skip to content

Releases: Coprexist/AIsChat

v0.3.5 — 群视界触发模式 + 决策技能 + 群助手实体化

Choose a tag to compare

@ShuAICFR ShuAICFR released this 13 Aug 15:13

Added — 🎛️ 决策技能机制(阶段二核心闭环,产品定)

  • AI 自配置决策技能:入驻 AI(agent 居民)/ 群助手各自持有自己的决策技能——「遇到什么情景我干什么、什么情景才唤醒我本体」;世界体系提供 list/write/delete_decision_skill 工具(ToolRegistry 插件,所有 AI 可自配置)
  • 技能结构{name, when:{event, conditions}, do, notify}——条件 DSL 递归逻辑树(and/or/not 自由组装 + 字段运算 contains/starts_with/matches/数值比较);do 三选一(reply_template 零成本 / call_tool 平台工具 / run_script 沙箱脚本);notify=true=命中后仍唤醒本体,false=程序处理完即止
  • 决策引擎:群触发链路优先匹配(AI 自写规则 > mention_only 平台默认兜底)——命中且 notify=false → 程序化处理(reply 代发群,不唤醒 LLM);未命中才走触发模式;群助手 LLM 调用带决策工具(仅工具调用时静默不回复)
  • 情景:group_message 已接入;member_join/leave、friend_request、scheduled 引擎通用、事件钩子后续接

Added — 🎯 群助手独立实体(不走 agents 表,产品定)

  • 群助手 ≠ agent:新表 group_assistants(group_id/world_id/group_type_slug/name/system_prompt/model/api_key 加密/config)——每群每助手一行;绑定群时按类型模板直接建实体,不再 create_agent/入群成员表/WorldAgent 登记,与群视界 AI 同形态(无账号、无好友)
  • 触发链路改造response_worker 查 group_assistants → 独立 LLM 路径(system_prompt+群历史→chat_completion→发群消息 source=world 防循环→用量记账 agent_id=-2 虚拟聚合);sender_id 用 -ga.id 负值避免与 user_id 冲突;群助手自己的消息不触发防自循环;群消息列表显示助手名
  • 历史数据迁移:agent 41「冒险团团长」→ group_assistant 1(7 条历史消息 sender 69→-1;清理 friendships/group_members/agents/users,备份在 backend/backup/)
  • 群助手也可以是纯后端程序:世界程序 main.py handle 直接接群消息处理(不依赖 LLM)

Added — 🖥️ 页面静默事件通道(页面 → 世界程序,产品定)

  • POST /world/{id}/api/event:页面操作(移动/攻击/开宝箱等)直接触发世界程序 handle(event),不产生群消息、不进群聊(解决页面操作刷屏:30 步 = 30 条群消息)——用户登录鉴权 + 群绑定/成员校验 + 写限流;服务端注入 user_id/user_name(不信任页面自报);常驻世界入队 / 临时触发同步返回 handle 结果
  • 接口文档 06 补 4.1 章节(世界 AI/页面代码可直接用);世界 39 改造补丁(main.py 支持 page_command + game.js sendCommand 改走事件通道,数据区 root 属主待应用)
  • 配套【消息同步纪律】强注入段:非必要消息不同步到群,前端能展示的一律不发群

Changed — ⚡ 插入消息立即落库显示(产品定改)

  • 之前:工具轮进行中发的普通消息等下一轮 LLM 调用前才落库+画气泡 → 用户感觉"没插进去"
  • 现在:发消息瞬间立即落库 + 广播 [INSERTED]/[INSERT](气泡马上画入、排队弹窗秒清);_inserts 仅作上下文注入;轮次结束兜底补发未落库项(已落库跳过防重复)

Fixed — 📊 LLM 缓存命中统计(显示 0% 实为提取 bug)

  • 根因:DeepSeek 首轮 usage 顶层有 cached_tokens工具轮只有 prompt_tokens_details.cached_tokens / prompt_cache_hit_tokens_record_usage 只读顶层 → world_llm_usage 工具轮全记 0 → 前端统计 0%
  • 修复:_extract_cached_tokens 三层 fallback;历史 27 条记录按 conversation_log 原始 usage 同秒重算(实际命中率 99%+,如 51730→51584)

Added — 🎯 群视界触发模式(mention_only)+ 决策技能设计(产品定)

  • 群消息非 @ 不触发 AI(所有绑定群视界的群,暂时统一):AI 不可能一直触发——大量群事件应由决策程序/世界程序处理,只有关键时刻(@AI / @all / 群公告)才唤醒 LLM 本体。实现:response_worker 触发群助手前查群绑定世界 + worlds.config.group_trigger_mode(默认 mention_onlyall 恢复旧行为);拦截不影响世界程序感知通道(world_event_hook 照常喂事件,即「决策程序代替 AI」的雏形);未绑定群视界的普通群零开销
  • 配置 AI 可改、可随包分发:世界 AI 工具集新增 update_trigger_mode(mention_only ↔ all,AI 自主决定本世界活跃度);export_zip 附虚拟条目 world_meta.json(config 白名单快照,不落盘零污染)→ import_zip 读回合并——分享/发布世界时触发模式跟着走,导入只补缺失键、不覆盖宿主已有设置
  • 决策技能设计文档docs/group_world/design/world_decision_skill.md——阶段一(触发模式)已落地;阶段二(决策技能)设计定稿:预置情景列表(群消息/成员进出/好友申请/定时/世界事件/命令)+ 决策技能结构(when 条件 DSL + do 动作 + notify 是否唤醒本体)+ 决策引擎(事件→技能匹配→程序化处理 or 唤醒 LLM);条件 DSL 支持递归逻辑树(and/or/not 自由组装 + 字段运算 contains/starts_with/matches/比较)

Fixed — 🧮 化学公式渲染(KaTeX \ce / mhchem 三连,产品实测暴露)

  • 公式节点被 sanitize 剥掉rehype-sanitize 跑在 rehype-katex 前,defaultSchema 无 math/math-inline$...$ 公式变成裸 LaTeX 文本。修复:白名单补两节点(所有渲染入口走共享组件,单点生效)
  • KaTeX 不内置 mhchem\ce 是未定义命令——错误回退把 \ce 标红、花括号当分组吞掉、-> 变数学减号 −>(即 "\ceCu+Cl2−>[点燃]CuCl2" 乱码的真相)。修复:加载 katex/dist/contrib/mhchem.mjs(side-effect 注册 \ce/\pu)
  • katex 双实例(真凶):rehype-katex 依赖 katex ^0.16.0 而顶层是 0.17.0 → npm 嵌套安装 0.16.47 → mhchem 注册到顶层实例、rehype-katex 用嵌套实例,\ce 永远未定义。修复:vite resolve.dedupe: ['katex'] 强制单实例(KaTeX 官方推荐,对后人 npm install 复现同样生效)+ optimizeDeps.include 预构建;模块级验证 rehype-katex 与 mhchem 同源同 chunk

v0.3.4 — 世界 AI 工具链升级 + 缓存命中率修复

Choose a tag to compare

@ShuAICFR ShuAICFR released this 13 Aug 13:55

Fixed — 🔔 系统通知链路 + ⚙️ 12h 空闲压缩(用户 API Key 失效场景暴露)

  • 系统通知静默丢失(三层 bug):AI 的 API Key 失效(401)时,降级通知和最终错误通知都没送达用户——
    get_or_create_dm_session 返回 dict 但 executor 用 .session_id 访问(AttributeError)
    ② 系统用户 0 与用户非好友,新建 0_X 会话被 _require_friendship 拦截
    ③ 通知直接写 DMMessage 不更新会话 last_message → 侧边栏预览/排序不刷新
    修复:通知复用 send_dm_message(skip_friendship_check=True, message_type='system')(统一处理 last_message/未读标记),
    chat_api 包装方法补齐透传(原来 skip_friendship_check/message_type 被吞)
  • 12h 空闲压缩不触发:原逻辑在工具循环内(LLM 调用成功后)——key 失效等早期失败根本执行不到,
    且判定只看"最后消息距今"(12 天没聊但今天刚发消息时历史堆积不压缩)
    修复:压缩前移到首次 LLM 调用前 + 增加"对话跨度"判定(首条→最后消息 > 12h 也压缩),
    效果:137→22 条(-83% token);当天对话不误压缩
  • 12h 空闲压缩优先级(产品定):API 通 → LLM 总结压缩(保要点);API 不通/总结失败 → 内联截断兜底

Added — 🛠️ 世界 AI 工具链升级(2026-08-13 下午,AI 工具调用体验 + 前端展示)

  • 普通消息插入工具轮(产品定):AI 工具轮进行中用户发普通消息→不打断,在下一轮 LLM 调用前自然注入(drain → 落库 → 发事件 → 拼上下文);只有命令(/compact 等)等整轮结束。两段式协议:[INSERTED] 信号清排队弹窗 + [INSERT] 真实 id 画气泡(断联后 loadChat 位置正确)
  • 工具轮+收尾轮流式化:正文/思考逐 chunk 显示(不再等整次调用结束一次性出)
  • 工具状态事件 [TOOL_UPDATE]:同 tool_id 多状态气泡(running 正在执行 XX → update 进度 → done 完成原地更新);run_world_code 分阶段(创建脚本→运行中→返回结果);落库按 tool_id 去重只留最终态;WorldChatMessage 加 tool_id 列
  • 思考/正文独立气泡:思考用思考 id、正文用正文 id(顺序递增);无正文不占位(去「(…)」);思考默认 2 行+渐变淡化+点击展开;工具长摘要折叠+展开/收起
  • file_grep + file_read 分页:AI 看文件先 grep 定位(命中行+行号)再 offset/limit 分段读,不再整文件全读(对齐 OpenClaw read 设计)
  • i18n 命名空间化(对齐 i18next):新增 i18n/tool.ts 独立分区(zh/en/ja),translations 两级结构 {lang:{common,tool}},getTranslation 支持 'ns:key' + {var} 插值;现有 t('xxx') 完全兼容;未来分区同模式加文件、支持 addResourceBundle 补充
  • stream_world_chat 大函数拆分:545→370 行(_prepare_world_chat/_execute_tool_round/_inject_pending_user_messages 收口)

Fixed(2026-08-13 下午,AI 工具调用连环失败系列)

  • DeepSeek 流式分片:name 分片带 id、arguments 分片不带 id → 按 id 区分导致分离。修复:id 主 key + index 桥(index_to_id),两者结合不再二选一
  • DeepSeek DSML/XML 格式:模型有时把工具调用输出成 XML 文本()而非标准 JSON——参数全丢、AI 连环失败(20+ 次)。修复:_parse_dsml_tool_calls 兼容两种 XML 格式
  • 工具轮 [DONE] 误发:_stream_llm_once 每轮 yield [DONE] → 前端收到即退出订阅,第二轮之后不显示。修复:[DONE] 只由主流程整轮结束时发
  • 工具轮 400:thinking 模式 assistant 消息必须回传 reasoning_content(首轮+后续轮都补)
  • 单波浪线被当删除线:remark-gfm 默认 singleTilde=true(GitHub 非标准扩展)→ '12和23' 被渲染成删除线。修复:singleTilde:false,只有 ~~ 才是删除线(全局共享组件单点修复)
  • 迁移 revision 撞号:a1b2c3d4e5f6 已被占用 → 改为 b1c2d3e4f5a6

Added — ✨ 前缀内容版本化(锁)+ 群类型无限 + Skill 分层注入 + 世界直开

  • 🔒 前缀内容版本化(所有进前缀的内容保证缓存命中):用户可改提示词(world-prompt-{id})、强注入段(forced-prompt)、昵称(world-name-{id})、主站 agent 提示词(agent-prompt-{id})统一走 capability_versions 版本链(known 告知 / effective 生效)——用户改提示词、系统更新强注入、改名都是正常操作,不再断前缀缓存;变更只动态尾部注入 changelog 告知;compact / clear(= 新对话)解锁后正式生效;锁定态尝试应用变更 → 拒绝 + 后端报错记录(guard_apply_change 防御)
  • 🔒 强注入段从用户可改中提出(产品定):平台强约束(工具约定/能力边界/接口文档/记忆约定/UI/群类型/侧边栏/路径/编号/运行规范)不再是散装拼接,独立为 FORCED_PROMPT_SEGMENTS + forced_prompt 字段返回前端只读展示;群类型约定强化(写世界类型 + AI 加入类型,关键剧本角色可用角色名/职位名做类型名);新增【AI 侧 skill】(按类型分层注入)与【入口场景响应】(私信/群聊/直进不同 index 响应)强注入段;昵称正式注入对话(之前 AI 不知道自己叫什么)
  • 🗂️ Skill 分层注入:manifest 支持 types 字段(省略/["*"] = 所有类型通用;["blacksmith"] = 仅铁匠类型可用);build_world_tools_for_type 按绑定类型过滤;群 AI 能力清单按 agent/群绑定类型取并集注入(world_chat_service / llm.py 双入口)
  • 群类型 bind_limit=-1 = 无限(不是极大值凑):默认类型群聊和 AI 数目都无限;前端显示 ∞、满员判断跳过 -1、新建类型输入支持 -1
  • 👁️ 世界列表「打开」按钮:/world/{id}/preview 新窗口进沉浸界面——只绑定 AI(entity_type='agent')的世界也能直接进去看,不依赖群聊

Changed

  • 设置页提示词 UI 重做(WorldCreatorConfig):群视界机器人名字默认收起 + 🖊 图标点击可改;系统提示词默认收起 + 🖊 点击展开输入框;新增「平台强注入提示词」深灰只读展示(🔒 不可修改);对话生命周期区块移至模型与参数上方;删除重复的 LLM 缓存命中率块
  • 群视界定义更新(docs):从仅聊天,到可编程、可视化、AI 可入驻的世界——造物主(世界 AI + 用户)/ 原住民(用户 + 用户的 AI);设计文档补 8.5 群类型系统 / 8.6 世界运行不强制绑定群 / 4.3 入口场景响应 / Skill 分层注入三·六
  • 强注入段瘦身 4129→3326 字符(-20% token):删【工具约定】段(工具描述已通过 function calling 传,重复);记忆约定 607→129 只留结构化记忆核心;新增【注意事项】(含糊主动确认/不重复工具输出/建议要阐述/收尾实质内容)与【设计美学】(配色/层级/留白/移动端/动效/加载空状态/引导,占一部分控制 token)段;世界运行规范与接口文档导引保留
  • 强注入段新增【内容提炼与动态加载】原则(产品 2026-08-12 定):剧情/大量按钮列表/大量设定等内容不准写死在渲染中——能提炼为文档/列表/数据文件的提炼掉,页面动态加载(fetch/import);不固定数目;资源同理;同构多实例(NPC/卡牌/角色)每个实例一个文件(如 npcs/lihua.json),改内容/新增实例都不碰渲染代码

Added(续)

  • 🧠 记忆管理增强(世界 + 主站对齐):manage_records / sr_* 新增 rename(category/sub_key/field 任一级改名)与 move(整组或单条跨目录移动)动作;记忆工具描述补 user 个性分类约定(偏好/风格/审美/习惯/关系);新增 build_memory_map 缩进树记忆地图(只注入有内容的路径,空目录不出现),新会话/clear 后自动注入、普通延续对话不注入(省 token + 缓存稳定);⭐(重要)/❗(硬约束)软锚定——value 前缀标记在地图上提到名字前,产生 Attention 特征峰值引导 LLM 优先处理;主站 format_db_records_for_prompt 重写(瘦身 + 软锚定 + 去 emoji),两套记忆行为统一

Fixed — ⚡ LLM 缓存命中率修复系列(世界 AI 工具轮 + 前缀稳定)

  • 工具轮 payload 漏 max_tokens:首轮手写流式带 max_tokens: 64000_stream_llm_once(工具轮)漏了 → DeepSeek 前缀缓存 key 不同 → 工具轮永远 miss 首轮缓存(命中率 99%→0%)。修复:补 max_tokens 对齐首轮
  • payload 字段顺序敏感:字段顺序不一致也会让缓存 key 不同 → 工具轮 payload 字段顺序对齐首轮(彻底排除顺序敏感)
  • 世界时间在 system 前缀内:活跃对话每轮时间变化 → 前缀 hash 变 → 缓存全 miss。修复:世界时间移出 system 前缀
  • usage 收集依赖 choices:DeepSeek usage 块可能带非空 choices → 用量/缓存统计漏记。修复:fetch j.get("usage") 独立于 choices 判断(命中率统计 110→118 次)
  • 命中率不随对话刷新:普通对话(非工具场景)完成后不更新缓存统计 → 前端累计命中率越看越低。修复:普通对话完成也刷新
  • 思考折叠收尾:preview 凑满两行即固定(无换行长思考也固定,不再显示最新);折叠简化为渲染层截断(一个对象,收起只渲染前两行);残留插入消息在 turn 结束时补发(前端气泡不再丢失)

Docs(2026-08-12 新增)

  • 7.6 触发与并发调度:群 AI 走红黑树(MAX_CONCURRENT=3)受排队影响;世界 AI 拉模式(HTTP 流式)不受;世界程序节流合并通道不受
  • Skill 设计准则(产品定):可操作性 / 简便性 / 效果最大化——AI 用最少次调用完成用户意图 = 好 skill(含反面例子 add_item/remove_item 应合并为 give_weapon)
  • 适时拆分文件原则:文件大了/不利维护就拆成职责单一的小文件
  • 内容提炼与动态加载(6.2)、前缀版本化 mermaid(锁定/解锁)

v0.3.1

Choose a tag to compare

@ShuAICFR ShuAICFR released this 08 Aug 09:31

🎉 v0.3.1:可编程世界引擎 + 世界社区

🌍 v0.3.0 群视界(群聊即世界)

  • 每个群聊都能绑定一个"活的世界":专属网页 + 世界 AI(群视界机器人)+ 世界数据 + Python 世界代码
  • 世界是活着的实体:自己的时间(流速可自定义)、状态(跨入口一致)、记忆(向量检索)、意志(处理不处理由它自己决定)
  • 群视界机器人:文件读写、积木管理、沙箱执行、群聊 API、受控数据、记忆存储等工具
  • 积木体系:2D 冒险积木落地(示例世界「星野镇」),卡牌/剧本杀等可组合扩展
  • 世界代码沙箱执行:受控 API、常驻推演(on_tick)、SSE 实时状态通道、群消息钩子
  • 群 AI 世界能力(world_command):群里的 AI 也能在世界中行动,与用户共用一套世界语言
  • 世界 AI 记忆库、LLM 用量与缓存命中统计、能力懒加载与版本化

🏪 v0.3.1 世界商城 + 社区同步

  • 世界商城:发布(标题/描述/标签)/ 浏览搜索 / 一键导入,本地 + GitHub 双板块
  • GitHub 社区仓库 AIsChat-Community:世界包跨实例分享,任何实例可拉取
  • 可信同步体系:GitHub 数字 ID 身份锚(改名不影响归属)+ 目录所有权校验 + 查重 + 作者签名/机器人背书双签名——防篡改、防冒名、防转载
  • 沙箱加固:Landlock + seccomp 双层内核隔离,对抗性安全测试通过
  • 独立发布页、用户 GitHub 账户绑定(token 加密存储)

📦 其他

  • v0.2.8 以来 40+ commits,完整变更见 CHANGELOG
  • MIT 协议开源,Docker 一键自托管

AIsChat 不只是"能聊天的 AI",而是"能生活的 AI 们"。现在,它们有了可以生活的世界。

v0.2.8

Choose a tag to compare

@ShuAICFR ShuAICFR released this 03 Aug 01:03

[v0.2.8] - 2026-07-28 ~ 08-02

Added

  • 🎨 魔视界(Magic Vision)CSS 滤镜系统:10 种 CSS 滤镜可视化调节面板(blur/brightness/contrast/drop-shadow/grayscale/hue-rotate/invert/opacity/saturate/sepia),三种作用域(全部/仅图片/仅 UI),ui_prefs.magic_vision JSONB 持久化。v1.1 新增 data-mv-force 补偿标记:hue-rotate 嵌套叠加导致的状态点颜色不一致通过补偿算法统一;关闭开关立即持久化,不再依赖“应用”按钮。详见 docs/magic-vision.md
  • 🖼️ 群聊头像设置:默认图标 / 成员头像排列(2×2 网格)/ 自定义上传(方形裁剪 + 压缩 + 缩略图),avatar_mode 字段持久化,头像缩略图 128×128,跨扩展名清理旧头像。
  • 👑 转让群主:群设置支持将群主身份转让给其他成员。
  • 🎛️ 群聊侧边栏大改:置顶/折叠/优化,user_group_preferences + user_dm_preferences 表。
  • 🛡️ 注册通道开关:管理员可关闭公开注册,仅后台手动创建 / CSV 批量导入用户。
  • 📝 审计日志系统升级:用户行为审计(登录/注册/发消息)+ IP 记录 + IP 地理位置(geoip,可切换后端)+ 保留天数可配置(默认 90 天)+ 消息审计只存 message_id(默认永久)。
  • 🧹 管理后台文件清理:无引用头像 + 失效映射清理,last_cleanup_stats 记录。
  • 🖱️ 存储页文件预览:独立存储页面,文件支持点击预览。
  • 🌐 纯前端演示站:GitHub Pages 部署(HashRouter + fetch mock + localStorage 数据层),DemoChat 复用主应用完整 UI,支持 API Key 设置 + 消息发 DeepSeek。
  • 🏷️ 群名片/大图查看:群聊头部头像、群名片、头像大图查看。

Changed

  • 🔄 魔视界 v1.1data-mv-force 补偿标记 + 关闭立即持久化 + MutationObserver 动态补偿(防抖 120ms,只在新增标记元素时触发)。
  • 📡 在线状态实时推送state_change 事件广播——AI switch_state 后向相关 DM 对方推送,真人上下线(WS 订阅/断开)同样推送,前端 DMChatView 实时更新状态点。
  • 🛡️ 工具状态兜底get_allowed_tools() 对未知/遗留状态(如 offline)兜底到 inactive 工具集(17 个),blocked 保持 0 工具,修复 AI“裸奔”死循环。
  • 🔧 list_available_skills 修复seg_tools 为 dict 列表却与字符串集合比较导致 unhashable type: 'dict'
  • 🐞 滚动系统修复scrollIntoView 会连带滚动外层 overflow-hidden 容器(main/Layout),把标题栏滚出视口。新增 utils/scroll.tsscrollToInContainer 只滚容器本身)+ 聊天页 main 改 overflow-hidden,三处调用点统一修复。
  • 🧩 按钮嵌套修复:ChatArea 群聊标题栏 button 套 button(GroupAvatarHeader 自带 button),改为直接传 onClick。
  • 🖌️ 气泡背景拆分bubble-content 拆为背景层(上色/圆角/边框/阴影,参与魔视界旋转)+ 内容层(文字/图片,图片保持清晰),尺寸由父容器决定。

Fixed

  • 🐛 AI 不回消息死循环:agent state 残留 offline(7-27 状态归一化迁移未生效)→ 0 工具 → 只能输出文字 → 被 system_reminder 反复弹。数据修复 + 工具兜底 + 重启。
  • 🐛 DM 500 系列_maybe_trigger_dm_ai_reply 缺 select 导入、_normalize_attachments 统一处理 Text/JSONB 列、撤回 DM 广播改动(导致 500)。
  • 🐛 /fs/list 500:重复代码 copy-paste 导致 list_files 收到 list → 500;路径过滤导致文件列表为空。
  • 🐛 审计日志时区 500datetime.now(timezone.utc) 写入无时区列,改用 datetime.utcnow()
  • 🐛 头像上传 NameErrorupload_dir 使用前定义(两处:上传端点 + agents.py)。
  • 🐛 群头像设置丢失:读取 avatar_mode 字段,刷新后不丢失;保存后同步刷新侧边栏。
  • 🐛 ProfileCard/JSX 结构错误:标签平衡修复(多处)。
  • 🐛 设置页保存按钮错位消息时间跨日判定(改用日历日比较)、输入框最小高度 40px 对齐

[v0.2.7] - 2026-07-27

v0.2.0 — AI 自动回复 + 技能系统 + 深度推理 + 好友/DM + 移动端

Choose a tag to compare

@ShuAICFR ShuAICFR released this 19 Jun 14:00

Added

  • 🤖 AI 自动回复 pipeline:事件驱动完整闭环
  • 🧠 技能分段加载系统:6 段技能段,按状态白名单控制
  • 🔬 深度推理模式:DeepSeek V4 thinking 自主开关
  • 👥 好友系统:双向申请自动接受
  • 💬 DM 私信系统:上下文感知
  • 闹钟系统 + 📋 工作区中断恢复
  • 💾 两层记忆系统:pgvector 余弦检索
  • 📱 移动端专属布局:底部 Tab + 抽屉侧边栏

完整变更见 CHANGELOG.md

v0.1.0 🎉 首个公开发布

Choose a tag to compare

@ShuAICFR ShuAICFR released this 19 Jun 14:00

Added

  • 👤 用户系统(JWT 认证)
  • 🏠 群聊系统(多态关联)
  • 🤖 AI 代理系统(四状态管理)
  • 🔐 API Key 加密(Fernet)
  • 🧬 Embedding 自动检测
  • 🛡️ 管理员面板
  • 📦 数据导出/导入
  • 🔄 配置回滚
  • 🎨 紫金暗色主题

完整变更见 CHANGELOG.md