Skip to content

Releases

Crepuscule 0.7.2 — fix diary sync regression

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 06 Jul 17:59
d6c0bb3

修复 0.7.1 引入的日记同步断链回归。

Fixed

  • 0.7.1 改用 tempfile.mkstemp 后新建日记文件权限被硬编码为 0600(仅 owner 可读)。日记由另一个用户跑的同步 watcher 读取(插件容器内以 root 写、watcher 以宿主机用户读),0600 致 watcher cp 报 Permission denied、同步静默断链(文件写成功却推不上远端)。现于 os.replace 前显式 os.chmod(tmp, 0o644),恢复 0.7.0(write_text + umask 022)的组/其他可读权限。新增回归测试。日记隐私仍由工具层 owner 门控保障,不依赖文件权限位。

验证

pytest 175 passed(+1 Windows skip);实机五判据全绿(含权限位 644 与 fresh pushed、无 Permission denied)。

Full Changelog: Crepuscule-0.7.1...Crepuscule-0.7.2

Crepuscule 0.7.1 — harden diary write I/O

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 06 Jul 16:47
f73bbff

epk_diary_write 写入内部三项加固,借鉴 devkit 文件栈的经验、落到日记场景。

Changed

  • 编码安全读:追加前读已有日记改用 utf-8-sig(吞 Windows 编辑器常留的 BOM);原文非合法 UTF-8(GBK / UTF-16 等)时拒绝追加并明确告知,绝不用 errors="replace" 静默腐蚀她亲手写的原文。同时修复此前 encoding="utf-8" 硬读抛 UnicodeDecodeError 不被 except OSError 接住、直接打崩工具调用的隐患。
  • 原子写换 tempfile.mkstemp:同目录唯一临时名 + 安全创建,多消除一层并发撞名风险;newline="" 统一只写 \n,跨平台一致。临时名不匹配同步 glob,os.replace 后不残留。

Added

  • 写入审计日志:每次调用记一行 logger.info(正文长度 + 结果),绝不记正文本身。

验证

pytest 175 passed(新增 BOM / GBK-拒绝 / LF 三用例);ruff 干净;实机四判据全绿。

Full Changelog: Crepuscule-0.7.0...Crepuscule-0.7.1

Crepuscule 0.7.0 — epk_diary_write(人格亲手续写日记)

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 06 Jul 15:53
e386be1

Crepuscule 0.7.0

新增:epk_diary_write LLM 工具 —— 让人格亲手续写自己的日记

与 epk_diary(读)对称,补齐「读 + 写」闭环。人格被触动时可经此工具把内容追加进当天日记,而非依赖通用文件工具插件。

从工具层根治两个历史坑(非靠 skill 文字劝导):

  • 写错目录 → 目录写死 diary_dir、文件名机器构造 YYYY-MM-DD.md,模型无法选路径或用后缀名。
  • 覆盖丢内容 → 结构上只追加(create-then-append),不存在覆盖分支;通用 safe_write 曾在「文件已存在」时把 overwrite=true 递给模型、被误选而丢内容。

实现要点: 纯标准库;tempfile + os.replace 原子落盘(临时名不匹配同步 glob);严格 YYYY-MM-DD 校验 + 路径容器校验;可选 ## HH:MM 时间戳分隔小节。

门控: 隐私铁律与 epk_diary 对称(需 diary_dir + diary_owner_id 且为 owner 本人私聊,群聊/非本人拒)+ 独立写开关 diary_enable_write(默认关)。新增 diary_write_timestamp_sep(默认开)。

测试: 11 例新增(创建/追加不覆盖/时间戳分隔/非法日期与空内容拒绝/无临时文件残留/写后可检索);全量 172 通过,ruff 净。

版本号自 0.7.0 起统一为 Crepuscule X.Y.Z 格式。

Crepuscule 0.6.0 — epk_diary 让人格翻查自己的日记

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 05 Jul 18:34
23abd5d

新增

  • epk_diary 工具:让人格翻查自己写过的历史日记(可选生态集成,默认关闭)。与「文件工具插件 + 全局 Skill + 宿主机同步」组合,人格在对话中自主写下的日记可被她主动检索回顾,形成叙事连续性。三种检索模式:传日期回看某天 / 关键词全文搜 / 留空看最近几天。
  • 隐私铁律:需配置 diary_dir + diary_owner_id;仅 owner 本人私聊可读,群聊 / 非本人一律拒绝,杜绝跨用户泄露。新增 4 个配置项。
  • 文档 docs/autonomous-diary.md:可复现的「让人格自主写日记」集成范式(架构 / 同步脚本 / systemd 部署 / 隐私要点),全占位符去敏。

修正

  • 补齐 main.py 落后的注册版本号。

兼容性

纯增量特性,diary_dir 默认空即完全关闭,对现有部署零影响。全量 162 测试通过。

v0.5.2 — overall_impression 改一段话 (synthesis)

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 02 Jul 02:25

Changed

  • 整体印象合成优化:core/synthesis.py 的 overall_impression 从强制一句话
    改为允许一段话(二三句)——之前一句话过于简略抽象,放宽为一段后能更自然地
    抓住性格底色与关系基调,同时保持紧凑(≤80字上限不变)。同步去掉 _clean() 的
    只取首行截断,改为多行合并成段。6 条单测更新通过,插件全量 130 测试无回归。

v0.5.1 — fix group misattribution (user: ownership tag)

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 30 Jun 08:34

Fixes worsening group-chat misattribution (张冠李戴 / 认错人·串记忆).

Root cause (confirmed from a live reasoning trace): the persona's identity-anchoring rule (§11) only accepts injected memory entries tagged user: <id> matching the current speaker; the ReadingSteiner_Memory block carried no user: tag, so the model fell back to guessing ownership — and as §11 grew stricter, the mismatch surfaced more often.

Fix: the plugin only ever injects the current user's own memory (search is scoped to user_id=ident.user_id), so the whole block belongs to the current speaker. It now emits a user: <id> ownership header as the block's first line, which §11 adopts with confidence. Gated by inject_user_attribution (default on); applies to both auto-injection and the epk_recall tool path.

See CHANGELOG.md.

v0.5.0 — EverOS 1.1.0 alignment

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 30 Jun 05:48

EverOS 1.1.0 alignment. All plugin changes are version-tolerant and safe on EverOS 1.0.x (features light up once the server is on 1.1.0).

Added

  • /epk reflect (admin) — trigger EverOS's reflect_episodes strategy to consolidate fragmented episodes / fight over-granularity; soft-archives originals (recoverable). Needs EverOS ≥ 1.1.0; otherwise a friendly 'needs ≥1.1.0' hint.
  • log_archive_success (default on) — INFO logs on successful add/flush, so you can eyeball that memory was stored.

Changed

  • EverOS client is now 1.1.0-aware — parses the typed error.code envelope, distinguishes retryable (503 EXTERNAL_SERVICE_UNAVAILABLE / transport timeout) from permanent errors, and does bounded retry (everos_retry_retryable, default 1). EverOS errors now log a graded WARNING instead of an ERROR stack. Fully backward-compatible with EverOS 1.0.x.

See CHANGELOG.md for details.

v0.4.0 — 记忆遗忘(抑制) + 群聊按发送者隔离

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 28 Jun 10:38

新增

  • 记忆遗忘(抑制):管理员命令 /epk forget,在注入/召回读路径上抑制匹配到的记忆——数据仍在 EverOS、只是不再被注入/召回,可逆。两种粒度:按内容短语 /epk forget <描述> 与整用户 /epk forget all(opt-out);/epk forget clear 撤销。受 EverOS v1 无删除端点所限,这是「遗忘(抑制)」而非磁盘擦除。

修复

  • 群聊跨用户记忆串线:群聊中所有成员此前共用同一引擎会话键,多人对话被合并、按发送者抽取时把他人/助手的内容混入某用户画像(认错人、张冠李戴、把助手人设当成用户)。现群聊会话键按发送者拆分(追加 #<user_id>),每个成员独立会话,从源头杜绝跨用户混合。私聊不受影响。
  • 相关情景记忆注入半句截断:注入的【相关情景记忆】此前可能在句中被截断。现改用完整 content 按句末标点收束(中英双语:中文句末标点 + 后接空白/引号的英文 .!?),完整句注入、绝不留半截。

文档

  • 新增 ROADMAP.md(插件 / EverAlgo / EverOS 三层待办与方向)。
  • 致谢 Amadeus / 牧濑红莉栖;补正 EverOS 仓库链接。

完整变更记录见 CHANGELOG.md。

v0.3.1 — 永恒铭契 + 记忆假死根治

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 22 Jun 13:45

Added

  • 永恒铭契(ETERNAL_COVENANT):新增配置项 eternal_covenant,可为指定用户锁定一段
    人工定调的不变核心设定,作为独立的【永恒铭契】块注入,置于 EverOS 演进画像之上。
    解决 EverOS 每次 flush 用 LLM 重写整个 profile(含 summary)会把人工写定的核心设定
    冲淡的问题——铭契由插件配置锁定,永不被 flush 覆盖;而 summary/显式/隐式信息不受影响、
    继续交由 LLM 演进。含私密内容时群聊默认不注入(受 group_public_only 约束)。

Fixed

  • 记忆功能「假死」(热重载竞态):on_astrbot_loaded 在插件热重载竞态下可能不触发,
    而 client/flush_policy 旧版仅在该钩子中构造,导致其永为 None,注入与归档两个钩子
    双双静默早退——机器人对话正常但完全失忆,且无报错、无自愈。现将二者移入 __init__
    同步构造,确立「实例存在即记忆能力就绪」不变量,该失败模式被结构性消除。

Changed

  • request_timeout 默认值 30→90 秒:flush 触发的提取较慢,避免误判为失败。

Docs

  • 补充项目中文名「记忆探知之魔眼 (ReadingSteiner)」。

v0.3.0 — LLM 记忆工具 + 静默吞错修复

Choose a tag to compare

@LoveS0ph1e LoveS0ph1e released this 21 Jun 23:00

新增

LLM 记忆工具(function-calling) — 让模型在对话中主动读写记忆,与被动的自动注入/归档互补:

  • epk_recall(query):检索当前用户的持久画像与历史情景。
  • epk_remember(content):把一条关于当前用户的事实写入长期记忆。
  • 身份只从消息事件解析(get_sender_id),模型只能传 query/content,绝不能指定 user_id —— 从源头杜绝跨用户记忆串线。
  • 由新配置项 enable_llm_tools 控制(默认关闭,避免与自动注入重复消耗)。

修复

新用户首条消息被静默吞掉 — 工具实现此前在空结果/降级路径返回 None,而 AstrBot 将工具返回 None 视为「已直接回复用户」,会触发 WARN 并可能静默结束本轮,导致新用户的第一条消息得不到任何回复。现在两个工具实现在所有路径都返回非空状态字符串,模型据此正常应答。

测试

新增 tests/test_tools.py(8 例),覆盖身份隔离铁律、空记忆路径与全部降级路径。全量 62 例通过。


完整变更见 CHANGELOG.md。