Benjamin Christopher Simmonds
90d · built 2026-08-09
90-day totals
- Commits
- 220
- Grow
- 43.0
- Maintenance
- 17.7
- Fixes
- 18.1
- Total ETV
- 78.8
Where this dev ranks
Percentile against the global top-100 leaderboard (all-time totals).
- By commits
- Top 26 %
- By Growth share
- Top 11 %
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).
↓-37.0 %
vs 119 prior
↓-12.2 pp
recent vs prior
↑+35.0 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.2ETVUnify worktree isolation across agents (#324246) * agentHost: unify worktree isolation across Copilot, Codex, and Claude Extract Copilot's git-worktree session isolation into a shared WorktreeIsolation controller (schema contribution, branch completions, worktree creation on materialize, metadata persistence, archive/unarchive cleanup, first-turn announcement live + restore) and wire it into the Codex and Claude agents so all three providers get the same folder/worktree isolation picker and base-branch picker. - Refactor CopilotAgent to delegate to the shared controller. - Wire isolation into CodexAgent (materialize-time worktree resolution, prewarm skip for worktree sessions, worktree sequencer, archive cleanup). - Wire isolation into ClaudeAgent (worktree before SDK cwd lock, watcher + project re-anchor, session-sequencer archive cleanup). - Move the branch-name generator into node/shared as the provider-neutral IAgentBranchNameGenerator / AGENT_BRANCH_PREFIX. - Add WorktreeIsolation unit tests and Codex isolation config coverage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Merge branch 'main' into agents/provider-isolation-picker-unification # Conflicts: # src/vs/platform/agentHost/test/node/copilotAgent.test.ts * fix merge * set project * move a layer up * cleanup * Enhance agent communication by adding working directory support in sendMessage methods and related interfaces * move back to be pull based * Revert "move back to be pull based" This reverts commit 5182107ecaf91120d6c5c1dc7ce3100681972467. * move branch generator into isolation picker * enable tests * also test the terminal tool * make working directory non optional * :lipstick: * Fix agent host worktree E2E replay * :lipstick: * Increase TSEC compile heap * Revert "Increase TSEC compile heap" This reverts commit 9f1c4d16c767e3ad993118e2466231a301025b24. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 7c3cb26c · 2026-07-13
- 3.0ETVAdd annotations support for agent feedback (#321133) * commit phase 1 * phase 2 * phase 3 * phase 4 * phase 5 * :lipstick: * fixes * fix cycle * auto approve tool * attachment fixesgithub.com-microsoft-vscode · b36d3a4c · 2026-06-12
- 2.2ETVSurface sessions requiring input in the agents titlebar (#324203) * sessions requiring input * Dismiss blocked-sessions dropdown + context-specific requires-input messages - Close the dropdown on Escape or an outside click (contextView onDOMEvent) - Show a specific titlebar message when all blocked sessions share one reason (terminal approval, failing CI, question, unresolved comments); fall back to the generic 'N sessions require input' for a mix - Animate the first requires-input appearance (preserve the blink class across redundant re-renders)github.com-microsoft-vscode · d769f0de · 2026-07-03
- 2.1ETVAdd GitHub prompt variation to the V3 onboarding tour (#329629) * Add GitHub prompts to V3 onboarding tour Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address V3 onboarding review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 9b4e2441 · 2026-08-07
- 2.0ETVAdd onboarding spotlight tour for the Agents window (#322468) * Add onboarding spotlight tour for the Agents window Introduce a presentation-agnostic onboarding scenario engine (vs/workbench/contrib/onboarding) with a reusable spotlight presentation (dim overlay, masked highlight, anchored callout) and a first Agents-window tour that highlights running sessions in parallel, the isolation picker and the workspace picker. The new-session tour triggers via an observable for new users after they send a request and the session stays visible, with an onboarding.developerMode setting to bypass usage gating for testing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix leaked onAbort listener in onboarding shutdown test Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR review: dedupe in-flight runScenario, fix focus trap and keyboard advance - runScenario joins an in-flight run instead of scheduling a second one - focus trap handles focus not being on a tracked element (no -1 wrap-around) - advanceOnTargetClick keeps the spotlighted target keyboard-reachable: it joins the focus trap, receives Tab/Esc handling, and gets initial focus so keyboard users can activate it to advance Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix CI: register onboarding i18n namespaces and make focus-trap test deterministic - Add vs/workbench/contrib/onboarding and vs/sessions/contrib/onboardingTours to build/lib/i18n.resources.json (code-translation-remind eslint rule failed CI) - Set keyCode on the synthetic Tab event via Object.defineProperty so StandardKeyboardEvent recognizes it (init-dict keyCode is not honored), fixing the flaky markdown focus-trap assertion Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix CI: use KeyMod.Shift for Shift+Tab in spotlight focus trap The focus trap matched 'KeyCode.Shift | KeyCode.Tab', a meaningless OR of two key codes, so Shift+Tab was never recognized and focus wasn't trapped. Use KeyMod.Shift | KeyCode.Tab. This fixes the failing focus-trap unit test and makes reverse focus navigation work for real keyboard users. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 0862d26f · 2026-06-23
- 2.0ETVShow worktree sessions as pending before the worktree exists (#327812) A worktree-isolated session initially reports the parent repository checkout as its workspace, so the session header rendered it as a folder session and attributed the checkout's dirty state to it, until the agent host reported the created worktree. Model this intermediate state as a new optional ISession.worktreePending observable, sourced from the agent host's isolation session config, and consume it in the workspace pill (worktree icon plus a 'Creating worktree...' hover, with path and branch withheld), the sessionHasChanges context key, the sessions list and the session hover. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · dfb8be24 · 2026-07-28
- 1.9ETVallow adding comments in new session view (#327691) * allow adding comments in new session view * fixes * Move new-session comments fixture into its own file Importing NewChatView into newChatInput.fixture.ts pulled chatWidget.css in earlier through the module graph, flipping it behind newChatInSession.css. Both style .new-chat-bottom-container with equal specificity, so the winning min-height changed from 28px to auto and shifted every input fixture down.github.com-microsoft-vscode · 698be4be · 2026-07-28
- 1.8ETVPills layout and formatting updates (#325983) * pills changes * format * Update component fixture screenshot hashes * Fix chat input persistent content layout Keep the persistent content wrapper from adding a flex gap to editable chat inputs and restore the unaffected component fixture baselines. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · f4ed321c · 2026-07-15
- 1.5ETVsessions: add Session Files section to the Changes view (#323725) * sessions: add Session Files section to the Changes view Add a collapsible/resizable 'Session Files' section to the agents Changes view, modeled on the CI Checks section, listing files created/edited/deleted outside the session workspace folders during the session (these are not committed). Data is parsed from the agent-host chat-state turns (response parts -> tool calls -> FileEdit results/pending edits) and exposed via a new optional 'externalChanges' observable on ISession. Parsing is incremental: completed turns are memoized by id and only the active turn is re-parsed per streamed delta, with equality functions to suppress redundant downstream work. Computation is gated on the active, non-archived session. Click opens created/deleted files normally and edited files as a diff. Adds component-explorer fixtures and unit tests covering delta-only recomputation and reduce semantics. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: register ResourceLabels services in Session Files fixture The Session Files widget fixture failed to render because ResourceLabels depends on IWorkspaceContextService, IDecorationsService, ITextFileService and INotebookDocumentService, which the base fixture services don't provide. Register mock instances the same way the multiDiffEditor fixture does. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: address Session Files review feedback - Add a Changes-view accessibility help dialog (SessionsChangesAccessibilityHelp) with a new verbosity setting, documenting the file tree and the Session Files / Checks sections and how to operate them (collapse/expand, open file vs diff). - Handle touch in the Session Files header via Gesture.addTarget + TouchEventType.Tap so the collapse/expand toggle works on touch platforms. - Use getComparisonKey(uri) instead of uri.toString() for Map keys and sorting in reduceSessionFiles, for safe cross-platform URI identity. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: register IListService in Session Files fixture SessionFilesWidget creates a WorkbenchList, which depends on IListService. Register it in the fixture (as the aiCustomizationListWidget fixture does) so the widget can be instantiated under the component explorer. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 63790479 · 2026-06-30
- 1.5ETVAdd session grouping support to the sessions list (#322554) * Add session grouping support to the sessions list Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix hygiene CSS indentation and address PR review feedback - Use single-line CSS comments to fix bad whitespace indentation - Keep all selected sessions (incl. pinned/Done) when creating a group - Remove unused SessionAddToGroupSubmenuId menu id - Clarify createGroup doc comment (name is required) - Report groupsChanged accurately when empty-group eviction deletes groups Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 20b17526 · 2026-06-23
- 1.4ETVchat: add turn status pills for agent sessions (#324413) * chat: add turn status pills for agent sessions Adds 'changes' and 'preview' pills that surface a turn's file changes and previewable Markdown/HTML files. They float above the chat input while a turn streams and move into the completed response. Agent-host sessions only, gated by the new 'chat.turnStatusPills' object setting (both pills off by default). * fix component fixture typecheck: use invokeFunction to access config service * chat: vertically center the preview pill resource labelgithub.com-microsoft-vscode · e6ab937a · 2026-07-05
- 1.4ETVImprove Agents window sign-in dialog (#329470) * sessions: improve sign-in dialog Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: preserve dialog footer button color Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Dmitriy Vasyura <dmitriv@microsoft.com>github.com-microsoft-vscode · 3ff4448a · 2026-08-07
- 1.4ETVchat: add viewUnreviewedComments agent-host tool with confirmation UI (#321804) * chat: add viewUnreviewedComments agent-host tool with confirmation UI The `listComments` server tool now appends a note when there are pull request or code review comments the user has not accepted yet (still in the `created` state), pointing the agent at a new `viewUnreviewedComments` tool. The note is omitted when there are no such comments. `viewUnreviewedComments` is a confirmation-gated server tool (excluded from auto-approve for both Claude and Copilot). Its custom confirmation renders each unreviewed comment with a checkbox (reveal to the agent or not), the feedback kind badge and file, an action to open the file and reveal the comment, and an action to delete the comment. Accepting moves the checked comments to the Accepted state (revealed to the model and shown in the UI); unchecked comments stay Created. The tool then returns exactly the revealed comments. The chat layer stays decoupled from the sessions feedback model via commands registered by the agent feedback feature. Adds a component explorer fixture for the confirmation UI. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chat: address PR review feedback for viewUnreviewedComments - Make the tool result precise: the confirmation now flags exactly the comments the user chose to reveal (pendingAgentReveal on the shared annotations meta, set via acceptFeedback({ revealToAgent: true })), and the server tool returns only those and clears the flag so later invocations don't re-return previously revealed/accepted comments. - Match requiresConfirmation(toolName) signature in the test fakes. - void the floating _populate() promise in the confirmation sub-part. - createContentElement returns an empty string instead of throwing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · c4125b9e · 2026-06-17
- 1.4ETVsessions: Track multiple pull requests per session (#329149) * sessions: track multiple pull requests Retain a bounded, recency-ordered pull request history for agent-host sessions while preserving the newest pull request as the active projection for existing behavior. Add an accessible session-header dropdown with live PR, CI, and review status, legacy metadata migration, fixtures, and coverage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: address multi-PR review feedback Canonicalize pull request identities, keep open picker rows reactive without replacing focused controls, preserve keyboard activation, and ensure the concurrent metadata regression test is discovered. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: align pull request list titles Use the largest pull request number to size a shared right-aligned number column so every title begins at the same position. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 78ac5ac8 · 2026-08-05
- 1.3ETVFix session PR association for fork branches (#328416) * Fix session PR association for fork branches * Address fork PR association review feedbackgithub.com-microsoft-vscode · 83b6b3d0 · 2026-07-31
- 1.2ETVFix agents window layout and functionality (#318934) * agents window fixes * fix copied file * Reuse session views by position instead of recreating per session (#318938) * Reuse session views by position instead of recreating per session * focus fixes * performance fix * fixes * . --------- Co-authored-by: Sandeep Somavarapu <sasomava@microsoft.com>github.com-microsoft-vscode · 486e5036 · 2026-05-29
- 1.0ETVsessions: attach agent feedback as annotations and resolve PR threads on resolve/delete (#321913) * sessions: attach agent feedback as annotations and resolve PR threads When submitting agent feedback for an agent-host session, attach the just-submitted comments to the chat request so the agent receives them. Each submitted comment is sent as its own MessageAnnotationsAttachment referencing the session's annotations channel + annotation id, so the agent reads content via the listComments tool and acts on exactly those comments (with a simple-attachment fallback when no channel is known). Also resolve the originating GitHub pull request review thread when a PR-review feedback comment is resolved or deleted - whether by the user or by the agent's resolveComments/deleteComments tools - via a single observer on onDidChangeFeedback, reusing ICodeReviewService. The act-on-feedback skill now instructs the agent to act on only the attached comments when any are attached, otherwise all listed comments or whatever the user specified. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: update agent-host attachment tests for feedback attachment behavior Two pre-existing tests asserted that agent feedback variables were dropped from agent-host requests (the old 'feedback lives in the annotations channel' behavior). Now that submitted feedback is attached to the request, update both to expect the simple-attachment fallback that is produced when no annotations channel resource is known. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 98d56618 · 2026-06-18
- 1.0ETVAgent host: track pull requests per branch (#328425) * agent host: track pull requests per branch A pull request always relates to a branch, but the host latched onto the first pull request it found for a session and never looked again. When the agent switched the branch of the working directory, the session kept reporting the previous branch's pull request forever. Record the branch a pull request was found (or created) for and resume looking whenever a git state refresh observes a different branch. The known pull request keeps being reported until one is found for the branch that is currently checked out. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * only look for a pull request on GitHub-backed working copies The branch-change lookup ran for every working copy, including those without a GitHub remote where `attachSessionGitHubPullRequest` can only bail out. Besides the pointless async work, awaiting it delayed the refresh event by a few microtasks and broke `subscribe lazily attaches git state when an existing session has no _meta.git`. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · fe9115c2 · 2026-07-31
- 1.0ETVsessions: add Fix CI row to blocked-sessions list items (#325593) * sessions: add Fix CI row to blocked-sessions list items Blocked sessions whose pull request has failing CI checks now show a per-session Fix CI row in the blocked-sessions dropdown, styled after the chat input's orange CI banner. The row shows 'N checks failed, X pending' and a prominent orange Fix CI button that opens the session and submits the fix-ci prompt. The row is only supplied to the blocked-sessions list, so it never appears in other session lists. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: send Fix CI in the background and hide the session on click Clicking Fix CI in the blocked-sessions list no longer opens the session. It now loads the session's chat model in the background (IChatService.acquireOrLoadSession) and submits the fix-ci prompt via sendRequest, routed with agentIdSilent. The session is optimistically removed from the blocked list for the duration of the submit; by the time it resolves the session is in progress and so is no longer blocked. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: thread ciFixModel test seam through titlebar widget The blocked-sessions indicator now creates a BlockedSessionsCIFixModel (which depends on IGitHubService/IChatService). The sessionsTitleBarWidget component fixture doesn't register those services, so it failed with 'depends on UNKNOWN service sessionsGitHubService'. Add a ciFixModel test seam to the widget (mirroring approvalModel/blockedSessions) and supply a no-op mock in the fixture. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: fix Fix CI row content clipped by inherited list-row line-height The blocked-sessions list row sets line-height to the full row height (e.g. 86px) inline. The .session-ci-row and its label did not override it, so the single-line label's line box grew to ~86px, inflating the row and pushing the label and Fix CI button below the row's overflow:hidden clip, leaving an empty orange box. Set an explicit line-height on .session-ci-row so its content lays out at the intended 32px height. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 3fb3e1b9 · 2026-07-13
- 0.9ETVsessions: experiment with archive action wording (#327316) Unify archive and done terminology across session actions behind a startup experiment setting, including matching confirmation copy and codicons. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 10563237 · 2026-07-24