Skip to content

feat(remy)!: add proactive agents, desktop companion and voice - #724

Open
jinliyl wants to merge 20 commits into
agentscope-ai:mainfrom
jinliyl:feat/remy-desktop-client
Open

jinliyl wants to merge 20 commits into
agentscope-ai:mainfrom
jinliyl:feat/remy-desktop-client

Conversation

@jinliyl

@jinliyl jinliyl commented Nov 6, 2026 •

Copy link
Copy Markdown
Member

Summary

本 PR 将 Remy 的对话、主动关注、任务执行、桌面呈现和语音交互接成完整流程:主人通过对话表达需求,任务 Agent 按独立 cron 收集资料并发布累计摘要,主动 Agent 消费结果并判断是否提醒,桌面端负责聊天、语音和提醒展示;Studio 则使用独立的普通聊天入口。

以下说明覆盖本分支相对 main 的全部 9 个提交、319 个文件变更,基于当前提交 c3082dd7,包含桌面端、后端重构、独立 Cron 调度、提醒规则、Studio 普通聊天、资源工具、评测和 CI 修复。

按主题说明改动

1. 三 Agent 职责与 Prompt 拆分

Agent 实现 职责
对话 Agent pa_chat.py / pa_chat.yaml 处理即时请求,维护个人记忆,编辑任务和主动配置,转达主人的反馈。
主动 Agent proactive_agent.py / proactive_agent.yaml 周期唤醒,综合已有信息和任务结果,决定是否提醒并生成下一轮交接摘要。
任务 Agent task_agent.py / task_agent.yaml 接收具体目标 query,调用截图、财经及原生工具,展开返回路径并解读资料。
  • 三个 Agent 对用户统一称为 Remy;Prompt 通过 PromptHandler 管理,提供中英文版本,公共记忆默认值放在 base_pa_step.yaml。
  • 主动 Agent 每轮创建新的原生会话,在同一会话内最多执行六个阶段:读取长期记忆 → 消费反馈和近期对话 → 阅读未读任务摘要并分析价值 → 检查提醒历史并提交发送决定 → 按需调整唤醒配置 → 生成交接摘要。活动窗口结束或晚间收尾后提前停止,保留阶段恢复记录。
  • 任务 query 描述目标,例如“通过截屏看看主人在干啥”“看看有什么主人喜欢的财经新闻”;工具返回的文字和路径供 Agent 自主阅读、分析。
  • 工具列表由 YAML 配置,删除 Python 中重复维护的默认列表;任务执行与主动唤醒解耦,由独立 CronJob 触发,并通过 PaRuntime 的 TaskFiles 管理文件和状态。

2. PA 状态统一归属与文件持久化

  • PaRuntime 直接持有选中会话、会话锁和单个有类型的 ProactiveRound,统一负责会话创建、切换、释放及恢复。
  • 删除 PA 的 metadata 状态兜底和多套提交路径;内部由 _pa_tasks.py、_pa_reminders.py、_pa_hints.py 分别管理任务文件与累计摘要、提醒投递和可选提示采样。
  • 将 PA 文件集中到 {workspace_dir}/{metadata_dir}/pa/。启动时仅创建缺失文件,保留已有配置、空任务列表和文本内容;无效配置显式报错。
文件 保存内容与更新方式
session_ids.json 最近最多 100 个对话会话及读取游标,最新选中的会话位于末尾;选择和游标更新原子落盘。
proactive.json 主动活动时间、唤醒间隔及可选提示配置,运行时重新读取用户编辑。
tasks.json 包含必填稳定 ID、cron、query、enabled 和可选创建时间的用户定义;加载只校验,不改写已有定义。
task_runs.jsonl 追加任务开始/结束事件、执行状态、原生会话 ID、摘要结果路径或错误;正文由 Markdown 保存。
proactive_inbox.txt 对话 Agent 追加的带时间反馈,消费前先保存恢复记录,再清空。
reminders.jsonl 追加提醒状态事件,按提醒 ID 还原最新状态。
handoff.txt 上一轮完成后生成的交接摘要,原子替换。
proactive_context.jsonl 已消费输入和阶段进展的恢复记录;失败时保留,成功保存交接后清空。
hint_state.json 按需创建,记录每日各时段的提示采样结果和最近变体。

任务正文另存于 {daily_dir}/YYYY-MM-DD/cron/{task_id}/HHMMSS.md。累计摘要带 task_id、run_id、created_at 及 unread/read/superseded frontmatter,完整结果不再内嵌在任务执行 JSONL 中。

  • 个人记忆统一使用 {workspace_dir}/{daily_dir}/personal/MEMORY.md,默认即 daily/personal/MEMORY.md。只初始化缺失文件,已有文件不被默认内容覆盖。
  • 默认记忆包含财经、AI 和 ReMe 关注方向,并要求主动提醒提供价值、避免重复打扰。Prompt 指导读取最新文件后合并更新、记录时间、执行遗忘且不转存或从旧上下文恢复。
  • 选中会话从 session_ids.json 最后一条恢复,原生对话历史继续由 Codex 管理;旧 pa.json 的自动迁移代码已移除。

3. 独立 Cron 调度、累计摘要与主动唤醒

  • task_schedule 是独立后台 Job,每秒检查 tasks.json 的文件版本,为每个启用任务创建应用生命周期内的原生 ReMe CronJob。
  • 有效编辑会新增、替换或关闭对应 Job,替换前先关闭旧 Job;无效编辑记录错误并保留已有有效调度。同一任务串行执行,不补跑错过的 cron 触发。
  • 默认截图解读每 5 分钟一次,财经新闻改为每小时整点一次。YAML 只初始化缺失的 tasks.json,不会覆盖已有工作区任务。
  • task_agent 改为私有 Job,参数由单独的 query 改为完整 task 对象。每次任务开启新会话:q1 执行 query;q2 继续同一会话,读取该任务最近 1–2 篇已完成记录(可跨日期),合并本轮发现,生成完整累计 Markdown 摘要。
  • Agent 先写暂存文件,由代码校验正文非空、补充身份/时间/未读状态后独占发布到 {daily_dir}/YYYY-MM-DD/cron/{task_id}/HHMMSS.md,不覆盖旧记录,不发布失败或中断的半成品。
  • read_task_results(limit=3) 只消费已完成结果,不触发任务。每个仍在配置中的任务分别返回最多 3 篇最新未读摘要路径,包含暂停任务和此前日期;删除配置项后不再扫描对应目录,但文件保留。
  • 选中文档的完整内容先 checkpoint,再将返回的版本标为 read,被累计摘要覆盖的更旧未读版本标为 superseded;并发编辑过的文档留待下轮处理。已读指主动 Agent 已消费,不表示主人已读或已收到提醒。
  • 主动唤醒仍按 0900–2300、轮次结束后间隔 5 分钟运行,最多每 30 秒重新检查配置。任务调度与主动唤醒相互独立,原 run_due_tasks Job、Step 和轮次内调度器已删除。
  • tasks_follow_active_hours 默认 true,任务 Agent 每次模型调用使用相同活动窗口,窗口外直接跳过,执行中的查询在窗口截止时取消;设为 false 可全天按 cron 执行。晚间收尾只关闭主动交流,独立任务仍遵循自己的活动时段设置。
  • 主动 Agent 阅读结果后仍可调用截图和原生 web_search 补充证据,相关性、是否有新价值及是否提醒由 Agent 判断。
  • 可选早/中/晚提示概率分别为 1.0/0.5/0.5,每个适用时段每天最多采样一次,未命中也持久化,重启不会重新抽取;18 条方向提供问候、关怀和生活小彩蛋灵感,Agent 可以忽略,不强制发送。

4. 反馈、增量对话读取与提醒投递

工具 当前行为
send_to_proactive(message) 追加主人反馈到持久化 inbox,不直接启动主动轮次。
get_proactive_messages() 返回反馈文字,先 checkpoint 再清空 inbox。
read_conversation(...) 跨最近 100 个会话消费未读、已完成的对话轮次,返回带时间、会话 ID 和角色的字符串。
read_task_results(limit=3) 每个配置任务返回最多 3 篇最新未读累计摘要路径;先保存完整恢复输入,再更新文档消费状态。
send_reminder(content, kind) 为当前有效主动轮次提交一个带类型的决定,执行活动窗口、问候次数和收尾校验,返回发送、等待或跳过状态。
get_reminder(limit=10, offset=0) 只读分页获取每条提醒的最新状态,按创建时间从新到旧排列。
check_json(path) 解析完整 JSON 文件,返回解析值或结构化错误。
  • read_conversation 默认读取最近最多 20 轮,保留用户输入与对应回复,排除工具调用和主动消息;默认每条消息最多 2000 字符、总量 20000 字符。读取游标保存到会话注册表,消费前先写恢复记录。
  • 提醒提交统一在 Runtime 校验轮次绑定、内容、重复决定和幂等。每轮最多提交一个决定,内容最多 200 字符;kind 必填,取值为 normal/morning/midday/evening。空内容使用 normal,表示不发送,并可撤回同会话的待发提醒。
  • 对话空闲时尝试立即注入;忙碌时由独立投递 worker 等待连续空闲 10 秒,新活动会重置等待。工具不等待这段空闲计时完成。
  • 新的非空决定通过策略校验后替换此前待发内容;晚间收尾决定不能被随后普通提醒覆盖。会话变化、活动时间结束或过期会废弃旧提醒,有效期取一个唤醒间隔与活动窗口结束时间中的较早者。历史记录包括 pending、sent、discarded、failed,以及创建、更新、发送、过期时间和原因。
  • sent 表示已注入对应原生会话;桌面是否展示、主人是否已读,由展示确认和已读回执分别记录。

5. 活动时段、每日问候与通知窗口的强制规则

  • 在每个主动模型查询之前检查活动时段和本窗口是否已经收尾;窗口外或晚间收尾后不再开始后续查询。每次后台模型调用带当前活动窗口截止时间,截止时取消原生执行并保留恢复上下文,轮询和策略检查不消耗模型 token。
  • morning/midday/evening 分别要求本轮实际抽中对应 hint,每个本地日期各只能接受一次非空决定;一旦写入提醒日志,即使后来投递失败或废弃,也不能通过重启或切换会话重新占用该问候名额。空决定不占名额。
  • 新信息使用 normal。内置问候词检查要求早安、午安、晚安等明确词语匹配特殊 kind,防止通过普通提醒绕过问候类型限制。
  • 接受并持久化 evening 决定就关闭本活动窗口的后续主动交流;收尾消息自身仍允许等待空闲后投递。状态从 reminders.jsonl 重建,无需另存一套安静状态文件。
  • PaEvent 的快照和状态事件增加 notifications:绝对 starts_at/ends_at 和可选 closing_message_id。桌面气泡与主动系统通知在排队、展示确认及存续期间复核窗口;收尾后仅允许收尾消息,窗口结束关闭通知,旧消息次日不补弹,聊天历史保留。
  • 新增 scripts/migrate_pa_reminder_kinds.py,在停服后显式校验并迁移旧提醒日志,保留 .bak,按已保存 hint 的轮次补类型,其余旧记录设为 normal。运行时不再兼容缺少 kind 的旧记录或旧工具参数。

6. 资源采集契约与过期清理

  • BaseConnectorStep 统一返回 {context: str, paths: list[str]}:文字说明结果和阅读方式,路径指向可逐步展开的工作区文件或目录。
  • 截图按显示器分别保存原始尺寸 PNG:resource/screen_capture/{timestamp}_screen_{index}.png,包含采集时间、显示器数量和解释提示,不拼图、不缩放。
  • 财经采集获取财联社最近 24 小时新闻,分页覆盖时间窗口,以新闻 ID 结合已落盘 JSONL 去重,返回新增内容的文件路径供 Agent 阅读。
  • 采集在私有临时目录完成后发布;保留工作区路径保护、权限检查、取消收尾和失败回滚。删除旧资源包 metadata.json 契约与相关 schema。
  • proactive 流程删除资源 catalog 发现/确认链路,改为每天应用时区 03:00 独立扫描 resource_dir,按文件 mtime 清理满 7 天的数据,再删除空目录。
  • 清理跳过符号链接;不支持安全文件操作的平台显式失败。永久资料应保存在资源目录之外。默认 Auto Resource 索引流程仍使用其自己的 catalog。
  • check_json 支持完整解析、编码识别、读取大小和路径权限限制;失败保留路径、行列和真实解析原因,不修改原文件。

7. Agent 执行状态与 SSE 同步

  • 新增 AgentActivity 和 ActivityTracker,将原生执行事件归一为思考、工具执行、记忆读取、回答、等待确认及终态。
  • 按工具调用 ID 追踪未完成操作,处理乱序和重复结果,避免一个工具的完成事件提前结束其他工具的工作状态。
  • PaEvent 增加按 chat / proactive 区分的 activities,通过现有快照和状态事件同步;主动临时会话的执行状态可以关联到选中的 PA 对话,由桌面消费。Studio 的普通聊天不再绑定 PA 选中会话。
  • 补充通用 session_status_step,支持不排队等待生成结束的状态查询。
  • 修复重复发布未变化的空闲状态导致快照不断重试的问题,保证历史恢复能完成;覆盖取消、会话切换、断线、慢读者和旧 cursor 恢复场景。

8. 桌面客户端、动画与提醒呈现

  • 新增独立 reme_desktop/ Electron + React + TypeScript 客户端,提供透明角色窗口和对话窗口。主进程管理 HTTP/SSE、重连、窗口和本地状态,渲染层通过 sandboxed preload bridge 操作。
  • 支持点击开聊、拖动和跨屏定位、托盘/右键菜单、快捷键、大小调整、隐藏恢复、安静模式、停止回复和消息跳转。
  • 主进程集中决定动画与呈现优先级,根据真实执行状态、语音、拖动、提醒、结果反馈和环境空闲选择动作;播放 ID 用于拒绝过期回调,资源加载失败可恢复。
  • 提醒采用举牌、保持、放下的分段动画;前台工作可以抢占,隐藏或中断后保留剩余展示时间。环境动作不调用模型。
  • 气泡绘制确认或系统通知 show 事件发生后才开始展示时长与限流计数;默认普通气泡冷却 10 分钟、每小时最多 3 次。已读由聚焦对话中实际可见的提醒标题确认。
  • 系统通知默认关闭,开启后可承载角色隐藏时的提醒、长任务完成、错误和待确认状态;尊重焦点、安静模式及原会话边界。
  • 使用带 revision 的 IPC 增量更新,角色窗口不接收完整聊天历史;桌面设置和展示/已读/稍后提醒回执存于 Electron user-data,不建立第二套对话数据库。
  • 桌面安静模式控制呈现;后台任务与活动时间通过 PA 配置独立管理。

9. Studio 恢复为独立普通聊天

  • 删除 Chat/Proactive Chat 双入口、PA 模式类型和可用性分支,以及 Studio 的 pa_session/pa_new_session/pa_chat 客户端封装;统一通过 /chat 创建或恢复每个聊天标签自己的会话。
  • 聊天标签从流事件绑定 session_id,通过 session_read 同步对应原生历史;保留轮次和最后消息检查,避免迟到快照覆盖当前消息。
  • 保持原本的 workspace 持久化 key,保留普通聊天、文件/图谱标签和未保存文件草稿。恢复时过滤旧 PA 标签,而不删除后端原生会话文件。
  • 导航和欢迎页改为直接开聊,移除模式卡片和额外会话状态条;同时迁移 demo、文案、样式、文档及 store/持久化/同步测试。
  • Studio 聊天依赖后端提供 /chat Job;Remy 桌面使用 /pa_*,两者不再共享 PA 选择和控制入口。

10. ASR/TTS 组件与默认语音对话流程

  • 新增 BaseASR、BaseTTS、DashScope 后端及共享语音结果 schema,提供 asr_demo、tts_demo 和 TTS → ASR 的 speech_demo Job。
  • 使用原生异步 HTTP 接口和生命周期内客户端,TTS 拼接流式音频并要求完成事件;凭据在调用时检查,服务端错误保留可诊断原因。
  • 默认流程为按住话筒说话 → 松开识别 → 将识别内容插入当前草稿并自动提交 → 回复完成后自动朗读。可关闭 voiceAutoSend,只保留可编辑文字。
  • 默认开启回复朗读,主动提醒朗读默认关闭;支持单条手动朗读、停止、音量和安静模式。自动朗读最多 600 字符,手动朗读支持全文分段,并省略代码块和链接 URL。
  • 录音使用 16 kHz 单声道 WAV,最长 24 秒;过短或静音片段在本地丢弃。麦克风权限只允许对话窗口在明确录音请求期间使用。
  • 两个窗口共用一个音频播放宿主;实际录音/播放状态驱动聆听和说话动画。切换会话/服务、断线、隐藏聊天或取消操作时,丢弃过期权限、识别和合成结果。
  • 语音由服务端 DASHSCOPE_API_KEY 配置。默认 ASR 为 qwen-audio-3.1-asr-flash,TTS 为 qwen-audio-3.1-tts-plus,使用 longanhuan_v3.1 配置甜美、轻盈、软萌的女声风格。
  • 桌面音频只在内存中处理,合成缓存有大小和 5 分钟有效期限制;服务配置变化会使缓存失效。录音会发送给连接的 ReMe 服务及其 ASR 提供方。

11. 中英文界面与角色资源

  • 新增成对的中英文文案目录、类型化 key、插值和可序列化 IPC 错误,覆盖聊天、菜单、气泡、状态、动画标签、语音、通知和设置。
  • 默认中文,可从原生菜单切换语言;保存偏好后再发布界面变化,保持当前会话、草稿、订阅和播放状态。模型内容和原始服务错误不自动翻译。
  • 加入 Remy 原创角色资料、生成提示词、原始图集和构建脚本,包含 10 个动作、80 张运行帧及 v2 动画 manifest。
  • 桌面包仅复制 manifest 和运行帧;保留可重建的源图集与时间配置,区分美术元数据与运行时行为规则。

12. 模型配置与旧方案清理

  • proactive 默认模型统一为 qwen3.8-max-0902,保留 kimi-k3.1-pro 注释;review、子 Agent、原生记忆提取与整合使用同一可覆盖模型配置。
  • 统一 xhigh 推理配置,并在通用 OAuth Codex 配置中补齐相应默认值。
  • proactive 的客户端上下文预算调整为 65536 token,自动压缩阈值为 56000;这两个数值描述客户端设置,不代表提供方的最大上下文能力。
  • 对应用绑定的 MCP Jobs 显式配置工具授权,与原生文件访问策略分开;proactive 默认启用原生 web_search="live",可用性仍受提供方能力约束。
  • 删除 FindInterestStep、PushInterestStep、旧 PA 模块和 Prompt、资源发现/确认工具、set_next_wakeup 等旧路径;反馈工具合并至 feedback.py,提醒工具合并至 reminders.py。
  • 移除资源 catalog 的专用 TTL/changes/processed 清理接口,迁移相关测试;新运行方案不保留旧内部导入兼容层。共享路径锁统一下沉至 reme/utils/file_utils.py,由普通文件写入、任务摘要发布、采集清理和记忆演化共同复用。

13. 评测、文档和 CI

  • 新增当前三 Agent 流程的评测入口、合成案例、行为评分和提醒质量场景,覆盖记忆更新/遗忘、增量对话、任务结果、重复提醒、正确静默及事实边界。
  • 使用真实 Job 编排和可控时钟/会话/资料:先执行任务 Agent 两轮 query、发布累计摘要,再消费结果并运行主动流程;定时触发在评测中模拟,独立 Cron 调度由隔离单元测试覆盖。保留输入、工具事件、执行结果、投递记录、工作区变化及 token 使用。缺少必要流程或工具出错不能因没有发送而得到正确静默评分。
  • 评测输出要求位于仓库外;manifest 固定代码、Prompt 和案例哈希;模型名生成安全且唯一的输出路径,支持同版本结果继续处理和单独重新分析。
  • 更新中英文资源、服务、配置文档及 README 中的桌面入口。
  • 新增 macOS 桌面 CI,串联格式、单测、Electron E2E、开发启动、打包和打包后验证。
  • 修复全局测试夹具提前导入运行依赖导致轻量包检查失败的问题;JSON 错误断言按当前解释器验证实际行列,兼容 Python 3.13/3.14;补齐格式、lint、文档字符串及测试辅助代码。

Contract and data impact

  • No public configuration, schema, CLI, endpoint, streaming, or workspace-layout contract changes
  • No existing user-owned memory files are automatically deleted or overwritten by initialization
  • Derived indexes, catalogs, graphs and caches remain rebuildable

本 PR 包含有意的配置、工具和文件布局迁移:

原方案 当前方案 / 升级注意事项
{digest_dir}/personal/REME_MEMORY.md 三 Agent 统一读取 {daily_dir}/personal/MEMORY.md;旧记忆需要显式迁移,不自动复制或覆盖。
{session_dir}/pa.json 选中会话和读取游标位于 {metadata_dir}/pa/session_ids.json;旧指针自动迁移已移除,升级旧工作区需要显式迁移选择记录。原生聊天文件不被删除。
interest 收集/推送及 resource discovery/ack 工具链 三 Agent、tasks.json、采集工具的 context/paths 和独立提醒投递;自定义 Job/内部导入需同步修改。
set_next_wakeup 和运行时覆盖状态 编辑 proactive.json 的活动时间与间隔,并用 check_json 检查语法。
资源包日期目录及 metadata.json TTL 基于 resource_dir 实际文件 mtime 的独立清理任务。
task_agent(query) / run_due_tasks() 私有 task_agent(task)、独立 task_schedule 和只消费结果的 read_task_results(limit=3);任务 ID 必填,已有任务定义不会自动补写,旧执行 JSONL 不代替新的 Markdown 摘要。
send_reminder(content) 和缺少 kind 的旧 JSONL send_reminder(content, kind),类型与日志都要求显式迁移;停服后执行 scripts/migrate_pa_reminder_kinds.py,保留备份。
Studio PA 标签及 /pa_* 调用 Studio 仅使用 /chat 与对应会话历史;恢复时移除旧 PA 标签,保留普通聊天及文件草稿。使用 Studio 聊天需在服务配置中提供 /chat。
单一 hint_probability 配置 使用 hint_probabilities.morning/midday/evening,存在旧字段时需显式转换。

PA 会话和聊天接口服务于 Remy 桌面;Studio 普通聊天单独使用 /chat。新的桌面需要服务端 activities 与 notifications 契约,后端和桌面应配套更新;缺少有效通知窗口时不会展示主动提醒。check_json 检查 JSON 解析,任务 cron、字段和业务状态由相应 schema/Runtime 校验。

迁移旧提醒日志时先停止持有该工作区的服务,再执行:

python scripts/migrate_pa_reminder_kinds.py /path/to/workspace/reme_metadata/pa/reminders.jsonl

Validation

基于 c3082dd7,GitHub Actions 的全部 9 类工作流已通过。本次为 PR 描述更新,不重新运行代码测试;下列结果来自最新提交对应的 CI 日志。

检查 最新提交的结果
Python 完整测试矩阵 Python 3.11、3.12、3.13、3.14 全部通过;3.12 的仓库及插件测试为 4673 passed、56 skipped。
Python 质量 完整 pre-commit 与工作流检查通过。
Python 发行包 包测试、sdist/wheel 构建、Twine、隔离安装和 Home 插件发行验证通过。
Remy 桌面 62 项单测、30 个 Electron E2E 测试节点通过;格式、类型、开发启动、macOS 打包和打包后验证通过。
ReMe Studio 95 项测试、3 项 npm 发行验证、18 项 Python 包验证通过;格式、lint 和构建/发行检查通过。
文档 文档检查和构建通过。
其余 CI Windows CLI、Docker amd64/arm64、CodeQL 全部通过。

桌面自动化使用临时 user-data 和模拟 ReMe/ASR/TTS 边界,系统通知事件也由测试模拟。评测案例中的资料和测试数字是合成输入,不作为真实模型成绩;真实模型评测为显式启用的付费入口,本次未运行。当前提交未验证真实麦克风、实时语音提供方、实际 OS 通知授权/投递、物理多显示器/Spaces/全屏行为、Windows/Linux 原生桌面、安装包签名及长期性能;这些也不由 CI 通过结果推导。

Checklist

  • Reviewed the complete branch diff and excluded unrelated local changes and sensitive data.
  • Covered intentional behavior changes with focused and regression tests.
  • Updated implementations, registration imports, schemas, defaults and documentation together.
  • Kept clients, workers, locks and native resources within application/component lifecycles.
  • Kept native conversation history authoritative and separated delivery, presentation and read state.
  • Verified current-head CI results after the final push.

@jinliyl jinliyl changed the title feat(desktop): add Remy companion for proactive chat feat(desktop): add Remy companion with agent-driven animations Nov 6, 2026
Replace legacy interest/catalog processing with chat, task and proactive agents,
durable PA metadata, cron-slot scheduling and asynchronous reminder delivery.
Add ASR/TTS, configurable voice auto-send/narration, Qwen model defaults and
current-workflow benchmarks. Fix snapshot starvation, provider error details,
voice cache invalidation and outdated or nondeterministic regression fixtures.

Validation: Python unit suite (3546 passed, 46 skipped), benchmark regression
(11 passed), desktop unit (59 passed), Electron E2E (30 passed), development
startup, typecheck, documentation tests (20 passed) and documentation build.
Live provider and physical microphone integration were not run.
Load PA runtime dependencies only when its fixture is requested so package
metadata checks run without application dependencies. Check JSON error
locations against the active interpreter, including trailing-comma and
invalid-value inputs on Python 3.13 and 3.14.

Apply the configured Python and desktop formatters, document public helpers,
and keep intentional private fixture/owner access scoped to its modules.

Validated full pre-commit, 3548 unit tests, isolated Python 3.11 packaging
checks, 25 focused tests on each of Python 3.13/3.14, distribution build and
wheel installation, and the complete desktop CI sequence through macOS
packaging and packaged-app validation.
@jinliyl jinliyl changed the title feat(desktop): add Remy companion with agent-driven animations feat(remy): add proactive agents, desktop companion and voice Nov 8, 2026
@jinliyl
jinliyl requested review from imrewce, ployts and xyf2020 November 8, 2026 03:17
Require explicit reminder kinds, reserve one daily greeting per period, and stop
proactive rounds after an evening closing decision. Derive notification windows
from the reminder journal and apply them to queued bubbles and native notices.

Task agents follow proactive active hours by default and cancel model work at
the closing deadline. Migrate callers, prompts, schemas, tests and bilingual
documentation; provide an explicit offline journal migration with backups.

Validation: 3609 unit tests passed, 46 skipped; 62 desktop tests passed;
20 documentation tests and build passed; typecheck and scoped pre-commit passed.
@jinliyl jinliyl changed the title feat(remy): add proactive agents, desktop companion and voice feat(remy)!: add proactive agents, desktop companion and voice Nov 8, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant