Skip to content

feat: 完善 hook runtime - #154

Open
lyfmt wants to merge 23 commits into
devfrom
feature/hook-runtime
Open

feat: 完善 hook runtime#154
lyfmt wants to merge 23 commits into
devfrom
feature/hook-runtime

Conversation

@lyfmt

@lyfmt lyfmt commented Jun 21, 2026

Copy link
Copy Markdown
Owner

背景

参考 pi 的 beforeToolCall / afterToolCall 语义,为 ly-pi 补充第一阶段低侵入 hook 能力,并在工具 hook 基础上补齐本批 turn 生命周期接点。

实现

  • lypi-contracts 新增 ToolHook / ToolHookRuntime、before/after context/result 与默认顺序调度实现。
  • hook context 会对工具输入做不可变快照,并保持 context.input()context.request().input() 一致;覆盖嵌套 Map / List / Set 和 null 值。
  • lypi-tool 新增 ToolHookExecutionInterceptor,复用现有 ToolExecutionInterceptor 切点实现 before 阻断和 after 结果替换。
  • lypi-boot 收集 Spring ToolHook bean,按 Spring order 接入默认工具 runtime;hook 在每次 runtime 创建时解析。
  • 新增 TurnHook / TurnHookRuntime、before/after turn context/result 与默认顺序调度实现。
  • DefaultTurnExecutor 接入 turn hook:beforeTurn 位于 TurnStartEvent 之后、unsafe continuation 和用户消息追加之前;afterTurn 位于最终 TurnState 形成之后、TurnEndEvent 发布之前。
  • afterTurn 只观察最终状态,不替换 TurnState;hook 失败会转 failed turn 并追加错误消息,但 TurnEndEvent.leafEntryId 保持真实执行结果的稳定 fork point。
  • 在默认 AgentCorePortAgentCoreFactoryPort 中自动收集 Spring TurnHook bean,无 hook 时保持 no-op。

边界

  • 工具 before hook 当前复用现有工具拦截器切点,因此发生在 schema/input 校验与权限流程之后、真实工具执行之前;这是本阶段保持低侵入和不改变权限语义的刻意边界。若后续需要权限前策略 hook,应另起设计。
  • 本 PR 不实现 JS/TS extension runtime、provider payload hook、resource discovery hook 或 Bash spawn hook。
  • 本 PR 不新增 turn hook 生命周期审计事件;如需要 turn_hook_start / turn_hook_end,另起事件契约设计。

验证

  • mvn -q -pl lypi-contracts,lypi-agent-core,lypi-boot -am test
  • mvn -q test
  • rg -n "import cn\\.lypi\\.(tool|boot|transport|ai)" lypi-contracts/src/main/java(无匹配)
  • rg -n "import cn\\.lypi\\.transport|import cn\\.lypi\\.boot|import cn\\.lypi\\.tool\." lypi-agent-core/src/main/java(无匹配)
  • rg -n "AfterTurnHookResult\\.replace|Optional<TurnState>|状态处理决定|替换 turn 状态|返回可选的最终替换状态" lypi-contracts/src/main/java/cn/lypi/contracts/hook lypi-agent-core/src/main/java lypi-contracts/src/test/java/cn/lypi/contracts/hook lypi-agent-core/src/test/java/cn/lypi/agent(无匹配)

审查

  • 工具 hook contracts / adapter / boot 接线已完成并通过前序审查。
  • TurnHook 最终审查发现 afterTurn 失败路径会漂移 TurnEndEvent.leafEntryId;已通过 0535797 修复并补回归测试。

@lyfmt
lyfmt marked this pull request as ready for review June 21, 2026 15:39
@lyfmt lyfmt changed the title feat: 补充工具 hook runtime feat: 完善 hook runtime Jun 22, 2026
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