Zhichao Li
90d · built 2026-08-09
90-day totals
- Commits
- 80
- Grow
- 9.6
- Maintenance
- 3.1
- Fixes
- 1.6
- Total ETV
- 14.2
30-day trajectory
Last 30 days vs. the 30 days before. Up arrows on Growth and ETV mean improvement; up arrow on Fixes share means more time on fixes (worse).
↑+20.8 %
vs 24 prior
↑+45.1 pp
recent vs prior
↓-8.6 pp
recent vs prior
Daily performance
Daily ETV, stacked by Growth, Maintenance and Fixes.
Work-mix over time
Share of Growth / Maintenance / Fixes over a rolling 7-day window. Reads as 'where is effort flowing right now'.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 20 by ETV in the 90-day window.
- 2.2ETVagent host: native-SDK OTel + local SQLite eval sink Wire the agent host into the native OTel telemetry config exposed by @github/copilot-sdk and add an optional loopback OTLP receiver that persists agent spans to a local SQLite store. The store is opt-in via chat.agentHost.otel.dbSpanExporter.enabled and lives at <userData>/agent-host/otel/agent-host-traces.db. Pass-through mode forwards the user's chat.agentHost.otel.* settings (or OTEL_* env vars) directly to the SDK. DB mode runs an in-process OTLP HTTP receiver on 127.0.0.1, decodes spans, writes them to SQLite, and optionally forwards to a user-configured outer exporter so external endpoints / files keep receiving traces. Six settings (chat.agentHost.otel.{enabled, exporterType, otlpEndpoint, captureContent, outfile, dbSpanExporter.enabled}) are registered, gated to non-stable builds, and translated to env vars by buildAgentHostOTelEnv with env winning over settings. The workbench.action.chat.agentHost.otel.exportAgentTracesDB command lets users save a copy of the SQLite DB. Tests: 9 new agentHostOTelService integration cases plus 27 OTLP JSON / receiver / forwarder / SQLite store unit tests; existing copilotAgent suite updated to inject the new dependency. Refs PR 313921.github.com-microsoft-vscode · b75d8e6d · 2026-05-13
- 2.2ETVfeat(agentHost): emit restricted repository info telemetry Capture immutable begin/end repository snapshots for root Copilot turns and emit the legacy request.repoInfo schema to enhanced GitHub and internal Microsoft telemetry. Reuse Agent Host Git baselines and tree snapshots so committed, working-tree, rename, delete, and untracked changes are represented without mutating the user's index. Bind every event to the session launch token's immutable telemetry context, suppress source diffs when content exclusion may be enabled, and detect account, abort, and mid-capture tree changes before sending. Match the legacy safety and payload limits, multiplex large diffs, support GitHub/GHE/Azure DevOps remotes, and forward the existing repo-info debug kill switch into Agent Host config. Refs microsoft/vscode-internalbacklog#8247github.com-microsoft-vscode · 011a0bba · 2026-07-18
- 1.9ETVagentHost: forward restricted model telemetrygithub.com-microsoft-vscode · eef8a649 · 2026-07-13
- 0.6ETVfix: harden agent host OTLP protocol handlinggithub.com-microsoft-vscode · a1b22228 · 2026-08-03
- 0.4ETVfix(agentHost): gate enhanced GH telemetry on the token rt=1 opt-in The enhanced request.options.tools event was sent for every USAGE-level user. Route the enhanced GH send path through the Copilot token's rt claim so only opted-in (internal) users emit it, matching the Copilot extension. copilotAgent pushes the authoritative, refresh-aware rt gate and copilot_trackingId (tid) to the telemetry service; enhanced telemetry defaults off until an authenticated rt=1 token confirms the opt-in.github.com-microsoft-vscode · da062131 · 2026-07-02
- 0.4ETVfeat(agentHost): source restricted telemetry endpoint from CAPI token Align with the Copilot extension and CLI, which target the user's CAPI endpoints.telemetry (dotcom, GHE, or proxy) rather than a hardcoded host. copilotApiService now exposes the discovered telemetry endpoint; copilotAgent resolves it for rt=1 users and pushes it (with the /telemetry path) to the restricted sender, falling back to the dotcom default until it resolves.github.com-microsoft-vscode · bbf01149 · 2026-07-02
- 0.3ETVagentHost: filter repo telemetry through content exclusiongithub.com-microsoft-vscode · d49890b8 · 2026-08-03
- 0.3ETVfix: normalize Agent Host OTel resource identitygithub.com-microsoft-vscode · 30359238 · 2026-08-02
- 0.3ETVotel: address PR review feedback on session-id correlation - Rewrite BYOK session-id tests to exercise the real Anthropic/Gemini providers with a capturing OTel service and a correlated CapturingToken, instead of reproducing the attribute spread (which could not catch a production regression). Removes the synthetic tests from byokProviderSpans.spec.ts. - agent_monitoring.md: add copilot_chat.session_id rows to the foreground execute_tool, Claude execute_tool and execute_hook span tables (the code emits it); mark chat-span gen_ai.conversation.id as conditional rather than required. - agent_monitoring_arch.md: narrow the Session Correlation claim — the bridge only enriches the debug-panel copy, not the SDK's own OTLP export; document that CLI SDK-native OTLP correlation depends on the runtime (execute_tool covered once copilot-agent-runtime#12383 lands). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · a4a3e6c1 · 2026-07-09
- 0.3ETVfeat(agentHost): emit enhanced GH request.options.tools per model call Bring agent-host restricted telemetry to parity with the Copilot extension's request.options.tools event. Emitted per assistant.message (the per-model-call boundary): headerRequestId carries the call's x-copilot-service-request-id (the runtime does not surface the client x-request-id), conversationId is the session id, and the tool definitions ride in messagesJson (routed to the code-snippet table like the extension). Each event gets a fresh unique_id, and copilot_trackingId (the token tid claim) is set as a restricted-telemetry common property.github.com-microsoft-vscode · 5026c10a · 2026-07-01
- 0.3ETVfeat: add native agent trace routing contextgithub.com-microsoft-vscode · 48914bcd · 2026-07-31
- 0.3ETVEmit gen_ai streaming OTel signals for chat responses Adds GenAI semantic-convention streaming signals alongside the legacy copilot_chat.time_to_first_token, tagged with gen_ai.response.model for per-model slicing (microsoft/vscode#320651): - gen_ai.request.stream (span attr, bool) - gen_ai.response.time_to_first_chunk (span attr, seconds) - gen_ai.client.operation.time_to_first_chunk (histogram metric) - gen_ai.client.operation.time_per_output_chunk (histogram metric) The main GitHub streaming path (chatMLFetcher) carries the full set including per-output-chunk latency, computed from inter-chunk gaps in FetchStreamRecorder. BYOK providers (Anthropic, Gemini) emit the stream attr + time_to_first_chunk only, as they lack per-chunk arrival timing. The Claude agent path inherits all signals via the shared chatMLFetcher proxy; the Copilot CLI path emits them natively from the runtime. Updates agent_monitoring.md and adds unit tests.github.com-microsoft-vscode · 136b39f3 · 2026-06-10
- 0.3ETVrefactor(otel): share BYOK OTel capture, harden chatMLFetcher system collection - Add buildOTelInputFromChatMessages helper consumed by Anthropic and Gemini BYOK providers, removing duplicated role mapping + parts construction. - Add collectSystemTextsFromRequestBody used by chatMLFetcher; prefer messages-level system entries over top-level system/instructions to avoid double-emitting the prompt when a request carries both shapes. - Tighten JSDoc on OTel formatter helpers and add unit tests.github.com-microsoft-vscode · 5760dcd7 · 2026-05-21
- 0.3ETVfix: filter Codex auth polling trace noisegithub.com-microsoft-vscode · c27204f1 · 2026-08-02
- 0.2ETVfeat(agentHost): enforce rt gate at the restricted telemetry sender (defense in depth) The sole writer to the restricted table now refuses to emit enhanced GH telemetry unless the token opted in (rt=1), independent of the service-level gate — matching the Copilot extension, which only creates the restricted reporter for opted-in users. Makes fetch injectable to unit-test the gate without a live POST. Adds tests: sender drops enhanced until rt=1 (then routes to the enhanced iKey), and enhanced stays suppressed below USAGE even with rt=1.github.com-microsoft-vscode · bc8fda61 · 2026-07-02
- 0.2ETVfeat: route Codex native telemetry from Agent Hostgithub.com-microsoft-vscode · 8b53fdd6 · 2026-08-01
- 0.2ETVotel: normalize gen_ai.response.model to match request format Anthropic responses echo the same logical model with a different separator (e.g. request 'claude-opus-4.6' resolves to 'claude-opus-4-6'), causing GROUP BY / DISTINCT on gen_ai.response.model to produce duplicate rows. Add normalizeResponseModel(requestModel, responseModel) that echoes the request value when the two strings only differ in '.' vs '-', and returns the resolved value unchanged when it adds real specificity (e.g. 'gpt-5.4-mini' -> 'gpt-5.4-mini-2026-03-17'). Wire into the three call sites that set gen_ai.response.model: chatMLFetcher (chat spans), toolCallingLoop (foreground invoke_agent), and claudeOTelTracker (Claude invoke_agent). Fixes #318805github.com-microsoft-vscode · a09e44ba · 2026-05-28
- 0.2ETVfeat: propagate Agent Host context to Copilot SDKgithub.com-microsoft-vscode · 0e198351 · 2026-08-01
- 0.2ETVfeat: route Claude native telemetry from Agent Hostgithub.com-microsoft-vscode · 9bf25de7 · 2026-07-31
- 0.2ETVResponses API: translate terminal events into typed completions When CAPI ends a stream with `response.incomplete` or `response.failed`, the parser previously returned undefined and the downstream chatMLFetcher saw zero completions and fell to `ChatFetchResponseType.Unknown` ("Sorry, no response was returned."). Map terminal events into ChatCompletions with the right FinishedCompletionReason so the existing chatMLFetcher switch handles them: - response.incomplete + content_filter -> ContentFilter (+ FilterReason from CAPI content_filters labels, e.g. TextCopyright -> Copyright) - response.incomplete + max_output_tokens -> Length - response.failed -> ServerErrorgithub.com-microsoft-vscode · 10a499bf · 2026-05-11