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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions