diff --git a/CMakeLists.txt b/CMakeLists.txt index 62ce7d89..e7e077b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ if(CMAKE_HOST_WIN32 AND DEFINED CMAKE_TOOLCHAIN_FILE AND CMAKE_TOOLCHAIN_FILE MA set(VCPKG_TARGET_TRIPLET "x64-windows-static" CACHE STRING "Vcpkg target triplet" FORCE) endif() -project(acecode VERSION 0.9.31 LANGUAGES C CXX) +project(acecode VERSION 0.9.32 LANGUAGES C CXX) include(${CMAKE_SOURCE_DIR}/cmake/acecode_source_guards.cmake) diff --git a/docs/releases/v0.9.31.md b/docs/releases/v0.9.31.md index 8da17d04..fb711e68 100644 --- a/docs/releases/v0.9.31.md +++ b/docs/releases/v0.9.31.md @@ -1,4 +1,6 @@ -# ACECode 0.9.31 +# ACECode 0.9.31(未发布) + +macOS 两种架构的编译被文件时间类型兼容问题阻断,未生成正式 Release。保留原标签,修复及以下更新由 v0.9.32 接续发布。 - 记忆统一为一套实现:TUI、桌面 / 网页后台与 `acecode -p` 都提供 `memory_read` / `memory_write`,注入规则、`/memory` 命令输出一致。 - 记忆分为全局与工作区两层,工作区按现有工作区标识区分;条目记录创建 / 更新时间与来源,写入前对密钥、令牌、密码脱敏。 diff --git a/docs/releases/v0.9.32.md b/docs/releases/v0.9.32.md new file mode 100644 index 00000000..f29993e4 --- /dev/null +++ b/docs/releases/v0.9.32.md @@ -0,0 +1,19 @@ +# ACECode 0.9.32 + +- 记忆统一为一套实现:TUI、桌面 / 网页后台与 `acecode -p` 都提供 `memory_read` / `memory_write`,注入规则、`/memory` 命令输出一致。 +- 记忆分为全局与工作区两层,工作区按现有工作区标识区分;条目记录创建 / 更新时间与来源,写入前对密钥、令牌、密码脱敏。 +- 记忆注入改为会话快照:会话中途写入的记忆不再改变本会话的请求前缀,压缩上下文后重建;条目标注距今天数。 +- 记忆注入预算 `memory.max_index_bytes` 默认值由 32 KiB 改为每层 8 KiB,超出的条目以一行省略说明代替,仍可经 `memory_read` 查看。 +- 新增「设置 > 个性化 > 记忆」:使用记忆开关、记忆摘要(默认关闭,可选摘要模型)、按层浏览 / 编辑 / 删除条目与重置。 +- 新增记忆摘要:会话闲置后提炼经验、攒批整合为记忆,`/memory flush` 立即整理;永久删除会话会撤回只来源于它的自动记忆。 +- 长会话超出上下文时,先清理旧工具输出、再把旧回合精简为用户消息、摘要和最终回复,最后才整轮删除,并保留最近一次压缩摘要,减少模型遗忘原始任务和用户纠正。 +- 回复中夹带工具参数模板标记(`` / ``)时丢弃该步并自动重试一次,不再执行参数错乱的工具调用。 +- 升级时新版本自检的等待时间由 5 秒放宽到 120 秒,避免安全软件首次扫描新程序导致升级被回滚。 + +- 加快长会话打开与侧栏刷新:先显示最近消息,按需加载更早历史;搜索与时间轴跳转保持连续历史和准确定位。 +- 修复模型重复返回工具调用 ID 时历史丢失、结果串用及旧输出被覆盖的问题,保留每次调用与真实结果的对应关系。 +- 侧边对话可使用受权限约束的只读工具查询文件与上下文,显示工具进度,并与主会话的读取状态隔离。 +- 改善文件拖放、图片附件展示及会话导航体验。 +- 增加 Windows MSIX 打包工具和商店安装身份识别;商店身份下由 Microsoft Store 管理更新,反馈上传要求 HTTPS。商店正式上架仍在准备中。 + +- 修复 macOS 原生文件时间类型兼容问题,恢复 Apple Silicon 与 Intel 安装包构建;配置修改时间仍按完整精度比较。 diff --git a/openspec/changes/unify-memory-system/verification.md b/openspec/changes/unify-memory-system/verification.md index 09c93d7f..d668b1b3 100644 --- a/openspec/changes/unify-memory-system/verification.md +++ b/openspec/changes/unify-memory-system/verification.md @@ -51,3 +51,7 @@ TUI 的 `/memory` 与网页内置命令都调用 `dispatch_memory_command`;`TuiM ## 验证边界 端到端走的是桌面版所用的 daemon 与嵌入网页,在浏览器里操作;没有启动 `acecode-desktop` 窗口本身,也没有在 macOS / Linux 上验证(按仓库约定留待多平台补验)。 + +## 2026-10-02 发布补验 + +v0.9.31 的最终 master CI 已通过,但 macOS arm64 / x64 打包均在 `memory_scheduler.cpp` 编译失败:libc++ 的文件时钟计数类型使 `std::to_string` 重载不明确。缓存改为 `std::optional`,直接比较原生修改时间,不降低精度、不依赖时钟纪元。修复通过 v0.9.32 接续发布;Windows CLI / Desktop / 单测增量构建通过,CLI 输出 `acecode v0.9.32`;记忆调度、摘要、运行时与守护测试共 37 项通过,0 失败。分层、所有权、OpenSpec 严格验证及 `git diff --check` 通过。最终 macOS 构建及签名、公证以 [v0.9.32 发布流水线](https://github.com/tmoonlight/acecode/actions?query=branch%3Av0.9.32) 的结果为准。 diff --git a/src/host/session_host/memory_scheduler.cpp b/src/host/session_host/memory_scheduler.cpp index d9f9286b..43af5223 100644 --- a/src/host/session_host/memory_scheduler.cpp +++ b/src/host/session_host/memory_scheduler.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -133,7 +134,7 @@ struct MemorySummaryScheduler::State { bool stopping = false; std::deque> flush_queue; std::atomic abort{false}; - std::string config_stamp; + std::optional config_stamp; std::map budget_divisor; // PA 上下文超限后按会话把预算减半 std::mutex work_mu; // 同一时刻最多一个提炼 / 整合 JoiningThread thread; @@ -163,9 +164,8 @@ void reload_config_if_changed(State& state) { std::error_code ec; const auto stamp_time = fs::last_write_time(path, ec); if (ec) return; - const std::string stamp = std::to_string(stamp_time.time_since_epoch().count()); - if (stamp == state.config_stamp) return; - state.config_stamp = stamp; + if (state.config_stamp && stamp_time == *state.config_stamp) return; + state.config_stamp = stamp_time; try { const auto j = nlohmann::json::parse(read_text(path)); MemoryConfig fresh; diff --git a/vcpkg.json b/vcpkg.json index 3b803e24..4aeff3ba 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "acecode", - "version-semver": "0.9.31", + "version-semver": "0.9.32", "dependencies": [ "cpr", "crow",