OTel: post-reload resumed turn emits `invoke_agent` root without input messages
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Shell
- Sterne
- 11.2k
- Forks
- 1.9k
- Ø Merge
- 14 Std. 16 Min.
- Gemergte PRs (30 T.)
- 6
Beschreibung
Describe the bug
When a running Copilot CLI turn in VS Code Agent Host is interrupted by a VS Code window reload and then continues after Agent Host reconnects, the new root invoke_agent span can omit gen_ai.input.messages even though message-content capture is enabled.
This is specific to the resumed/continued invocation path, not every turn:
- the ordinary user turn immediately before the reload emitted both
gen_ai.input.messagesandgen_ai.output.messageson itsinvoke_agentroot; - the post-reload continuation emitted
gen_ai.output.messages, but nogen_ai.input.messages, on its newinvoke_agentroot; - ordinary user turns immediately afterward again emitted both input and output.
The exporter was healthy and child chat/tool spans were present. Some later child model spans contained input content, so this was not a transport failure or a global content-capture setting problem.
In LangSmith, gen_ai.input.messages is mapped to the run input. The affected root therefore appears as No data in the trace/Turns UI even though the continued turn did useful work and produced child spans.
Affected version
Observed on 1.0.81-0 (the value recorded in both the root span's service.version and gen_ai.agent.version attributes).
The latest CLI installed locally is now 1.0.82, but I have not yet repeated the active-turn reload sequence on that version, so I cannot claim that version is affected.
Steps to reproduce the behavior
-
In VS Code, enable Agent Host OTel export and content capture:
{ "chat.agentHost.otel.enabled": true, "chat.agentHost.otel.exporterType": "otlp-http", "chat.agentHost.otel.captureContent": true, "chat.agentHost.otel.dbSpanExporter.enabled": true } -
Start a Copilot CLI / Agent Host request that performs enough tool work to remain active.
-
While the turn is still running, reload the VS Code window.
-
Let Agent Host reconnect and continue the existing turn.
-
Inspect the locally exported OTLP spans or the configured backend.
-
Compare the
invoke_agentroot created for the post-reload continuation with ordinary roots before and after it.
Observed result: the continuation root has output and child spans but no gen_ai.input.messages attribute.
Expected behavior
With content capture enabled, an invoke_agent root that continues a user-initiated turn after reconnect/reload should remain self-contained and include the originating user input in gen_ai.input.messages.
If a reconnect intentionally starts a separate continuation trace, it should still carry meaningful continuation input/context (and ideally an explicit link to the original invocation) so OTel backends do not display an input-less root.
Additional context
- VS Code:
1.136.1 - OS: macOS
- Integration: VS Code Agent Host using the Copilot SDK/runtime
- Export: OTLP/HTTP to LangSmith plus the Agent Host local SQLite span exporter
- No OTLP forwarding failures were present after reload.
- The affected root began immediately after the fresh Agent Host process started, before the next user message. Its predecessor ended just before reload, and the next ordinary user-message root had input normally. This is why the evidence points to the reload/resume lifecycle path rather than an intermittent exporter failure.
- The public SDK telemetry E2E test validates the
invoke_agentroot structurally, but currently checks captured input/output content only on childchatspans: https://github.com/github/copilot-sdk/blob/main/nodejs/test/e2e/telemetry.e2e.test.ts
A regression test that reloads/reconnects during an active turn and asserts root-level gen_ai.input.messages would cover this path without relying on a particular OTel backend.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit nodejs/test/e2e/telemetry.e2e.test.ts und verfolge den Reload/Reconnect-Lebenszyklus des aktiven Turns im Agent Host-Telemetriepfad. Reproduziere das Fortsetzungsszenario mit aktivierter Inhaltserfassung und füge anschließend eine Abdeckung hinzu, die prüft, ob der fortgesetzte invoke_agent-Root gen_ai.input.messages enthält, und führe den Telemetrie-E2E-Test aus.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- nodejs
- Bereich
- observability-sre, testing-qa
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Aktiv
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 66/100