Skip to content

Releases: SelectXn00b/HermesApp

v20250504-0830: Skill 生成保留 UI 元素定位信息

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 10:47

Update 90: SkillSummarizer prompt 修复

问题

录制的 Skill 生成后,AI Agent 无法执行。原因是 AI 总结器的 prompt 指导 LLM 生成"人类可读的操作教程",丢失了 UI 元素的具体定位信息(text、resourceId、className 等),Agent 面对复杂的无障碍树无法精确找到操作目标。

修复

  • 修改 SkillSummarizer 的 system prompt,明确要求 AI 保留:
    • text — 元素显示文字
    • contentDescription — 无障碍描述
    • className — 元素类型(Button/TextView 等)
    • resourceId — Android 资源 ID
    • ActivitypackageName — 每步所在页面
  • 生成格式改为 Agent 可直接执行的指令,如 点击 text="房态房量" 的 [TextView] 元素
  • 不再允许 AI 将具体操作概括为模糊的自然语言
  • Fallback 生成器也同步改进,包含元素选择器和 Activity 上下文

v20250504-0820: Skill 构建器 + StateFlow 修复

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 08:54

Update 89: Skill 录制器 → 分步构建器

新功能

  • 将 Skill 录制器重构为分步构建器
  • 每个步骤可独立选择"录制"(从设备捕获操作)或"思考"(手写推理逻辑)
  • 新流程:IDLE → BUILDING → STEP_RECORDING → BUILDING → SUMMARIZING → REVIEW
  • 步骤支持上下移动、删除、编辑(思考步骤)
  • AI 总结器支持混合步骤类型的 prompt

Bug 修复

  • 修复 MutableStateFlow 去重导致步骤不显示的问题
    • 原因:先修改原 session 的 steps 列表再 copy,导致新旧值 equals() 相等,StateFlow 不发射
    • 修复:创建全新的 steps 列表再赋值给 StateFlow

Dev Build 20250504-2230: 飞书插话功能 + 429 重试

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 15:16

新功能:飞书插话(Interrupt + Inject)

飞书/Gateway 窗口现在支持在 agent 处理消息时发送新消息,自动中断当前任务并处理新消息。

工作流程:

  1. 用户发消息 A → agent 开始处理
  2. 用户在处理中发消息 B → 系统发 "⚡ 正在中断..." ack → 中断当前 agent → 处理消息 B
  3. 支持连续插话(最多 3 层深度)

改动文件:

  • Run.kt — 新增 _pendingEvents + _interruptFlags,busy 分支改为存储 pending + 信号中断,新增 pending-event 循环
  • HermesGatewayController.kt — 等待循环增加中断检测(500ms polling),检测到中断时调用 core.cancelMessage() 取消 agent,返回 INTERRUPTED_SENTINEL

Bug 修复:429 Rate Limit 重试

修复 429 (rate limit / model cooldown) 被当作不可重试的 4xx 客户端错误的问题。

  • OpenAIProvider / GeminiProvider / ClaudeProvider: 429 状态码改为可重试 IOException

Dev Build 20250504-2150: 429 rate limit 重试修复

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 13:47

修复 429 (rate limit / model cooldown) 错误被当作不可重试的 4xx 客户端错误处理的问题。

改动:

  • OpenAIProvider / GeminiProvider / ClaudeProvider: 429 状态码从 NonRetriableException 中排除,改为可重试的 IOException
  • 之前:429 → NonRetriableException → 立即失败 → 飞书收到空回复
  • 之后:429 → IOException → 自动重试(带退避策略)→ 等 cooldown 结束后重新请求

Dev Build 20250504-2130: 飞书自动总结 + Skill 直接创建

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 13:33

变更

  • 启用飞书/Gateway 窗口的自动上下文总结(token 超阈值时自动压缩历史 + 续写)
  • skill_recorder 工具新增 create action,agent 可直接创建 skill 不需要录制会话

Dev Build 20250504-2042: 飞书窗口自动总结

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 12:43

变更

  • 启用飞书/Gateway 窗口的自动上下文总结
    • 当 token 用量超过阈值时,自动压缩历史 + 续写
    • Pre-send 总结检查仍由 Gateway 路径跳过(agent 通过 mid-stream 回调处理)

v20260504-0710

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 07:12

Update 88b: Fix save-then-navigate-back by resetting to IDLE state before going back, preventing re-navigation loop.

v20260504-0700

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 06:37

Update 88: Auto-navigate back after skill save with Snackbar confirmation showing skill name.

v20260504-0640

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 06:23

Update 87: Fix duplicate skill name error when saving recorded skills. Sync SKILL.md frontmatter name field with user-chosen directory name to prevent SkillManager duplicate detection conflicts.

Update 86: Skill recorder draft feature

Choose a tag to compare

@xiaomochn xiaomochn released this 04 May 05:20
  • Added optional draft text field in the skill recorder IDLE screen
  • Users can describe their intended operation before recording (e.g., "Open WeChat, search for John, send Hello")
  • AI summarization now receives both the draft (user intent) and recorded frames (actual operations)
  • Draft is shown read-only on the review screen for reference
  • When draft is provided, system prompt instructs AI to prioritize user intent for generating accurate skill name, description, and steps
  • Fallback SKILL.md generation also uses draft text for the description field