Connor Peet
90d · built 2026-07-24
90-day totals
- Commits
- 98
- Grow
- 18.1
- Maintenance
- 17.4
- Fixes
- 6.3
- Total ETV
- 41.8
Where this dev ranks
Percentile against the global top-100 leaderboard (all-time totals).
- By commits
- Top 35 %
- By Growth share
- Top 12 %
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).
↑+47.6 %
vs 21 prior
↑+23.6 pp
recent vs prior
↓-2.9 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.
- 3.2ETVagentHost: fix orphaned client tool calls after window reload - A window reload reconnects with a new clientId but an identical tool list. The cached SDK session was reused with the dead window's clientId baked in, so every later client tool call was stamped with that dead id, routed to passive render, and hung forever with nobody to invoke it. - Introduces a live, shared ActiveClientState so the owning clientId is read at tool-call stamp time instead of being frozen at session creation, and makes the staleness check restart only on structural tool/plugin changes — a clientId-only change no longer needlessly restarts (Copilot) or yield-rebinds (Claude) the session. - Adds a server-side safety net so a client tool call stamped for a client that is not connected (including one that disconnected before the call was even issued) fails after a grace window rather than hanging, with the grace measured from when that client was last seen. - Lets a completion that races ahead of the SDK tool handler resolve via a buffered result, preserving the previous out-of-order tolerance. Fixes #319641 (Commit message generated by Copilot)github.com-microsoft-vscode · 216f88de · 2026-06-09
- 2.9ETVagentHost: support multiple active clients per session Adopt the agent host protocol update that moves from a single active client per session to multiple active clients, and make the agent implementations model and merge them correctly. Protocol + UI/server: - SessionState.activeClient? -> activeClients[]; session/activeClientChanged is split into session/activeClientSet (upsert by clientId) and session/activeClientRemoved; session/activeClientToolsChanged carries a clientId. - The UI adds itself via session/activeClientSet and never removes itself. - The server removes a client from activeClients (and cancels its in-flight client tool calls) on unsubscribe, and on reconnect when the client does not resubscribe to a session where it was still active. Disconnect keeps the client active during the grace window; the grace timeout removes it and fails its pending tool calls if it never returns. IAgent implementations: - Replace setClientTools/setClientCustomizations with a per-client handle API: getOrCreateActiveClient(session, {clientId, displayName}) -> IActiveClient (mutable readonly-array tools/customizations accessors) and removeActiveClient(session, clientId). - Add shared node infra ActiveClientToolSet (per-session, clientId-keyed tool registry with merge-by-name + ownerOf) and adopt it in Copilot, Claude and Codex so multiple active clients' tools/customizations are stored, merged (deduped, first-inserted client wins) for the SDK, and tool calls are stamped to the owning client. - Guard teardown races: Copilot invalidates an in-flight customization sync on removeClient; Claude removes tools synchronously and serializes customization removal through the session sequencer, and prunes cached handles on session disposal. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · e719715c · 2026-06-24
- 2.4ETVagentHost: adopt new customization protocol shape Brings the platform and workbench code in line with the reorganized AHP customization types: containers (PluginCustomization, DirectoryCustomization) carry the children (agents, skills, prompts, rules, hooks, MCP servers) discovered inside them. - Replaces CustomizationRef/SessionCustomization/CustomizationAgentRef with the new Customization tree, plus ClientPluginCustomization for client-published plugins. Adds a customizationId(uri, range?) helper for minting session-unique ids that disambiguate inline manifest declarations. - Updates IAgent and IAgentPluginManager: getCustomizations/getSessionCustomizations return Customization[]; setClientCustomizations/syncCustomizations take ClientPluginCustomization[]; setCustomizationEnabled now takes the opaque id. - Reworks copilotAgent's PluginController + SessionDiscoveredEntry around the flat Customization shape with the CustomizationLoadStatus enum and a children array; SessionCustomizationUpdated dispatches the whole entry. - Restores the legacy plugin-only agentHostCustomizationConfigSchema so existing agent-host-config.json files keep working; entries are lifted into the new Customization container shape at read time by getAgentHostConfiguredCustomizations / toContainerCustomization. - Renames toCustomizationAgentRefs to toAgentCustomizations; drops the redundant enabled flag on ChildCustomization (children inherit their container's enablement). customAgents.getEffectiveAgents now walks children filtered by CustomizationType.Agent. - Updates the workbench item provider, active-client service, harnesses, custom-agent pickers, and the remote harness to the new types; toStatusString/toStatusMessage drive UI status off CustomizationLoadStatus. - Adapts all consumer tests (reducers, agentPluginManager, agentSideEffects, copilotAgent, mockAgent, syncedCustomizationBundler, resolveCustomizationRefs, localAgentHostSessionsProvider, remoteAgentHostCustomizationHarness, agentHostAgents/AgentPicker) to the new shapes. - Cleans up a stale URI auto-generated import in channels-session/actions.ts. (Commit message generated by Copilot)github.com-microsoft-vscode · 150d40b6 · 2026-05-27
- 2.1ETVwip: connection unificationgithub.com-microsoft-vscode · 0f960d26 · 2026-05-12
- 2.0ETVagentHost: enable @ file completions in new and existing sessionsgithub.com-microsoft-vscode · 5788cd3e · 2026-05-07
- 1.6ETVagentHost: implement plan and native autopilot modesgithub.com-microsoft-vscode · 75ec86b0 · 2026-04-29
- 1.5ETVAgent host: persist chat drafts Store chat drafts in the per-session database and restore draft text, attachments, model, and agent selection into the chat input. Rebuild restored Copilot turns with best-effort model and attachment metadata while avoiding unresolved subagent names as agent URIs. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 4b8cddfa · 2026-06-26
- 1.4ETVAdd AHP MCP server lifecycle controls Wire AHP-backed MCP server start and stop through agent host sessions, surface session-aware controls in MCP UI, and update MCP editor affordances to reflect active agent-host state. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 01924f84 · 2026-07-08
- 1.3ETVcli: implement client AHP control functionalitygithub.com-microsoft-vscode · 2c36ddb5 · 2026-04-27
- 1.3ETVAH: MCP server inventory + sampling + ListMcpServer integration * Wire MCP servers and sampling from agent-host sessions over the Agent Host Protocol. CopilotAgentSession advertises the standard MCP app capabilities (sampling + resources) and routes notifications by channel scheme. Seeds the inventory from `rpc.mcp.list` at subscription time so restored sessions and eagerly-configured servers populate without waiting for live events. * Expose MCP servers through a new `getMcpServers` method on `IAgentHostCustomizationService` (workbench layer) and `IAgentHostSessionsProvider` (sessions layer). Returns rich `IAgentHostMcpServer` objects that encapsulate the `SessionCustomizationToggled` dispatch so callers don't depend on the low-level action protocol. * Extend `MCP: List Servers` to default to the agent-host session's servers when an agent-host chat is focused, with a "Show locally configured servers..." back entry to switch to the local picker. Adds a per-server detail picker with an enable/disable toggle, registered as `workbench.mcp.agentHostServerOptions`. * Move the active-client claim from session-open paths to the first turn so that opening a session doesn't dispossess another client that's mid-turn elsewhere. Update affected tests to assert the new "claim on first turn" semantics. * Rework agent plugin caching to use per-nonce subdirectories so multiple revisions of the same plugin can coexist on disk. A long-running session can keep referencing an older nonce while a newer one is materialized; stale nonces are evicted opportunistically once they're no longer locked. Includes tests for the new layout and the locked-directory retry path. * Include MCP-only plugins (no prompt files) in the customization refs so their servers are still synced to the harness. Compute plugin nonces from `fileService.stat` mtime to keep the client-side fingerprint stable across syncs. * Refresh `SessionCustomizationDiscovery` non-recursive watchers to use `e.contains` so they fire on the watched URI itself. Adds tests for: MCP seeding (success + failure), per-nonce plugin materialization and eviction, MCP-only plugin inclusion, and the new active-client claim timing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 4bf1f54d · 2026-06-10
- 1.3ETVagentHost: support running tasks in remote workspaces Adds a pluggable task-runner registry (ISessionTaskRunnerRegistry) so the agents window can dispatch session tasks through different runtimes: - WorkbenchSessionTaskRunner (priority 0) preserves today's ITaskService path for local file workspaces. - AgentHostSessionTaskRunner (priority 100) opens an agent-host terminal via IAgentHostTerminalService and sendText's the resolved command, so tasks now work in remote agent-host sessions where there's no extension host. Also adds a WorktreeCreatedTaskDispatcher contribution that runs `runOptions.runOn === 'worktreeCreated'` tasks once per session; the cloud-agent provider opts out via a new ISessionCapabilities.runsWorktreeCreatedTasks flag because its server-side host already runs those during provisioning. resolveTaskCommand handles command/args (with POSIX shell quoting honoring strong/weak/escape CommandString metadata), OS overrides, npm scripts, and dependsOn chains (sequence -> '&&', parallel -> backgrounded subshells with trailing wait). Fixes #312052 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 85c156cc · 2026-05-18
- 1.3ETVagentHost: adopt AHP protocol updates Syncs the agent-host-protocol types to upstream 740f6cf and adopts the breaking changes from PR 188, while reverting PR 191 (Changeset/ChangesSummary rename) which we are not ready to adopt yet. - Replaces `toolClientId` on tool-call actions with `contributor: { kind, clientId }` so the renderer/server can distinguish client vs MCP-provided tools - Plumbs the new `ChangesetOperationStatus` field through commit-operation provider, tests, and reducer fixtures - Adds the required `enabled`/`state` fields to McpServerCustomization stubs across tests and pluginParsers - Narrows `ISyncedCustomization.customization` and related helpers to `PluginCustomization` so per-plugin `children`/`load` access is type-safe - Reverts PR 191 changes in the synced protocol files: keeps `ChangesetSummary` (with `additions`/`deletions`/`files`) and drops `ChangesSummary` from `SessionSummary` (Commit message generated by Copilot)github.com-microsoft-vscode · cdfa5a26 · 2026-06-04
- 1.3ETVmcp: add persistent server enablement scopes Persist profile and workspace enablement for agent-host-only MCP servers while keeping session overrides independent. Apply durable changes immediately before turns and group profile, workspace, and session actions consistently. Fixes #326167 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · c0b4921e · 2026-07-17
- 1.3ETVSoft reconnect for remote agent host protocol client Persist the protocol client across transport drops. On WebSocket close or watchdog timeout, install a fresh transport via an optional constructor-supplied factory and issue a `reconnect` RPC with the existing clientId, last-seen server seq, and active subscription URIs; server replies with a replay buffer or fresh snapshots. Outgoing requests and buffered notifications gate on a DeferredPromise until the handshake completes, then drain (with dedup of optimistic actions the server already echoed). State is modeled as a discriminated union so reconnect-only fields can't leak into other states. Service-layer surfaces Reconnecting as `connecting` so the UI doesn't flicker.github.com-microsoft-vscode · ca28b206 · 2026-05-15
- 1.2ETVwip: connection unification renderer sidegithub.com-microsoft-vscode · c9baf38e · 2026-05-13
- 1.1ETVagent host: lenient protocol negotiation + CLI-driven server upgrades Replaces the exact-match version check in `ProtocolServerHandler._handleInitialize` with a semver-caret negotiator (`negotiateProtocolVersion`) that picks the highest offered version compatible with the server. When negotiation still fails and the agent host was spawned by a managing VS Code CLI (signalled by the new `VSCODE_AGENT_HOST_MANAGEMENT_SOCKET` env var), the `UnsupportedProtocolVersion` error advertises a `_meta.vscodeUpgradeMethod = "_vscodeUpgrade"` hint. The client can then invoke that method on the same transport (callable pre-`initialize`) to request a server upgrade. The CLI runs a hyper-based HTTP control server on a unix socket / named pipe. `POST /upgrade` synchronously downloads the latest release, returns a serde-derived response (`{ok, upgradeNeeded, upgradeStarted, runningCommit, latestCommit, restartDelayMs, error}`), and then schedules a kill+respawn after a 3 s drain delay so the response can hop back through the proxy before the transport drops. Single-flight via `upgrade_in_progress: AtomicBool`; the listener is started lazily from `AgentHostManager::start_server`. UI: - `RemoteAgentHostConnectionStatus.incompatible` carries `vscodeUpgradeMethod` (read from `_meta`). - A `watchForIncompatibleNotifications` autorun on each provider raises a one-shot warning notification on transition into `incompatible`, with "Update Server" (when the host advertised it) and "Show Options" primary actions. - `runServerUpgrade` is shared between the notification action and the per-host quickpick. It drives a progress notification with a per-second "Restarting in Ns..." countdown and observes `connectionStatus` so it bails out if some other code path is already reconnecting.github.com-microsoft-vscode · 56fe5495 · 2026-05-16
- 1.1ETVmake it workgithub.com-microsoft-vscode · 5794a86f · 2026-05-13
- 1.0ETVagentHost: support image and blob user-message attachments Adopts the agent-host protocol's MessageAttachment surface so user-attached images, file references, selections, paste, prompt text, and prompt files round-trip through the agent host and into the underlying agent SDK. - Expand `_convertVariableToAttachment` in the chat-side handler to cover image, symbol, paste, promptText, promptFile, and selection variants in addition to file/directory. - On the agent host, snapshot inline `EmbeddedResource` payloads and remote `Resource` attachments to disk under `<sessionDataDir>/attachments/<uuid>/<basename>` and rewrite the action to reference them via local `file:` URIs, keeping large blobs out of the in-memory state tree. - Read remote attachment bytes through `toAgentClientUri` so the existing `vscode-agent-client` filesystem provider routes the request to the originating client. - Auto-approve `read` permission requests for any path under the session's `attachments` directory in the Copilot agent's `handlePermissionRequest`. - Translate protocol attachments back to chat-layer `IChatRequestVariableEntry`s when building history (`turnsToHistory`), the active turn synthesis, the server-initiated turn (`startServerRequest`), and the pending/queued message sync, so attachments survive history replay and pending message round-trips. - Restore SDK-side attachments in `mapSessionEvents`'s `user.message` handling so resumed sessions retain their attachments. - Forward attachments from the workbench to the SDK in `_toSdkAttachment`, mapping Resource selections to `selection`, directories to `directory`, files to `file`, and `EmbeddedResource` blobs to `blob`. Fixes https://github.com/microsoft/vscode/issues/315137 (Commit message generated by Copilot)github.com-microsoft-vscode · 152ffe54 · 2026-05-08
- 0.9ETVAgent host: align tests with chat channels Fix client-tool completion routing to resolve providers by parent session while preserving the originating chat channel for provider callbacks. Update agent host unit and protocol fixtures to dispatch chat actions on explicit AHP chat channels and keep subagent chat state separated from parent sessions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · eb76ea01 · 2026-06-27
- 0.8ETVAgent host: require chat URI for sends Make agent sendMessage receive both the parent session URI and the owning chat URI explicitly. This keeps default-chat sends from being mistaken for base64 session IDs and preserves the strict chat-channel invariant. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 1620b636 · 2026-06-27