Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

.NET: runtime logs forwarding session.idle, but SDK callback never delivers it

未关闭
#2,008 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
42/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
冷清
技术栈
csharp

调研方向

没有指定具体文件。首先跟踪 .NET 会话订阅和 FIFO 分发路径,然后检查建议的 session.waitForIdle 运行时契约,以及 session.idle 和 GetEventsAsync 的处理方式。完成标准是回归测试能够证明:完成操作会等待所有先前事件、处理被丢弃的 idle 通知、暴露失败,并支持取消。

由索引模型根据 Issue 内容生成。

描述

bug waiting on response

Summary

Visual Studio can remain indefinitely in the running state after the Copilot CLI has completed a response.

The CLI verbose log shows that it forwarded the terminal, ephemeral session.idle event. The .NET SDK subscription receives the preceding events, including the final assistant.turn_end, but never receives SessionIdleEvent.

Because session.idle is ephemeral, it cannot be recovered later through GetEventsAsync(). The client therefore has no authoritative completion signal and continues waiting.

Environment

  • GitHub.Copilot.SDK: 1.0.1
  • Copilot CLI runtime: 1.0.61
  • Windows ARM64
  • Visual Studio Agent and Agent (Preview) modes

The current SDK 1.0.7 still does not expose a durable idle wait or event-dispatch flush API.

Observed behavior

The CLI log ends with:

Forwarding event ... assistant.turn_end
Forwarding event ... session.idle (ephemeral)

The .NET subscriber observes assistant.turn_end, but not session.idle. The operation remains active even though the runtime has finished.

The absence of session.idle from events.jsonl is expected because the event is ephemeral; it does not explain why the live subscriber missed it.

Why assistant.turn_end is insufficient

In multi-turn tool workflows, an intermediate assistant.turn_end can be followed immediately by another assistant.turn_start. Completion also needs to account for sub-agents, attached shells, queued messages, and follow-up notification turns.

Requested fix

Please provide an authoritative completion contract owned by the runtime/SDK, for example:

await session.WaitForIdleAsync(cancellationToken);

It should:

  1. Wait for turns, sub-agents, attached shells, queued work, and follow-up turns to settle.
  2. Resolve only when the runtime is fully idle.
  3. Ensure preceding session events have crossed the .NET SDK FIFO dispatch queue.
  4. Surface session errors and transport failures.
  5. Remain correct if the live session.idle notification is dropped.
  6. Support cancellation without leaving an orphaned waiter.

An equivalent session.waitForIdle runtime RPC combined with an SDK dispatch barrier would also work.

Regression test

Add a .NET test where a multi-turn response completes, the live session.idle notification is deliberately dropped, and the completion wait still resolves only after all preceding assistant and tool events have been delivered.

Related

  • #794 - identifies missing session.idle and silent notification drops, but its proposed fallback did not ship
  • #558 - timeout waiting for session.idle
  • #791 - serialized FIFO event dispatch in the .NET SDK
  • #927 - ephemeral events are intentionally unavailable through replay
  • #1275 - assistant.turn_end alone is not a completion signal
主要语言
Java
星标
10.5k
派生
1.5k
平均合并
1 天 9 小时
30 天内合并 PR
129

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

github/copilot-sdk 的其他 Issue

查看 github/copilot-sdk 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。