Skip to content

Bug: web-tools-abort-signal #1106

Description

@Caldalis

What version of Kimi Code is running?

0.19.2

Which open platform/subscription were you using?

Kimi Code OAuth

Which model were you using?

kimi-for-coding

What platform is your computer?

Microsoft Windows NT 10.0.26200.0 x64

What issue are you seeing?

WebSearch 和 FetchURL 这两个工具会忽略每次调用的取消信号。当一次请求正在进行时按 ctrl c 中断本回合,底层的 http 请求不会被取消,会在后台继续跑,遇到慢或挂起的服务器会一直挂到 undici 的默认超时
代码事实:

  • ExecutableToolContext 带有 signal(packages/agent-core/src/loop/types.ts:119)
  • 但 FetchURLTool.execution / WebSearchTool.execution 只解构了 toolCallId,丢了 signal
  • UrlFetcher.fetch / WebSearchProvider.search 的 options 没有 signal 字段
  • LocalFetchURLProvider / MoonshotFetchURLProvider / MoonshotWebSearchProvider
    调 fetch() 时既不传 signal 也没有超时

其它 I/O 工具都把 ctx.signal 透传进实际工作,
这两个网络工具是例外,但是没有注释说明,可能并非有意。

What steps can reproduce the bug?

  1. 让 FetchURL/WebSearch 走本地抓取路径(LocalFetchURLProvider),目标是一个
    会长时间不返回 body 的慢速服务器。
  2. 工具调用进行中按 ctrl c 中断回合。
  3. 观察:底层请求没有被取消,而不是随回合中止立即结束。

单元层面可复现:给 provider.fetch(url, { signal }) 传入一个 AbortController 的
signal,可以发现 signal 没有被转发到底层 fetch()。

What is the expected behavior?

ctrl c 时,正在进行的 WebSearch / FetchURL 的底层 http 请求应当被立即取消,和其它 I/O 工具一致(把 ctx.signal 一路透传到 fetch 的 signal 选项)

Additional information

修复方向:给 UrlFetcher / WebSearchProvider 的 options 增加可选 signal,从工具透传 ctx.signal,在各 provider 把它传给 fetch(url, { signal })。我已准备好相应补丁(改动大概 80多行,含测试)。是否愿意我提 PR?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions