Dev v0.3.5.46 - #55
Merged
Merged
Conversation
…e containment Replaced the previous prefix-style patch path check with path.relative containment plus realpath resolution of the workspace and nearest existing target path, blocking sibling-prefix and symlink escapes. Made patch application more transactional: it validates all targets before writing, captures original file states, creates parent directories, rolls back already-written files after an apply failure, and keeps originals for a later revert. Implemented safer revert behavior through the persistent PatchApplier, including workspace-safe path validation and trash-based removal for files that were newly created by an applied patch. Wired changed-file diff actions to the existing DiffService, which now opens a real vscode.diff preview only after workspace-safe path validation. Added a registered gitpilot.executeApprovedPlan command instead of leaving the UI path dependent on an unregistered command. Declared limited Workspace Trust support and blocked terminal execution/file modification when the workspace is untrusted, with trust checks failing closed if trust state cannot be read. Restricted webview localResourceRoots to runtime output/resources and forwarded INIT to the extension-level bootstrap handler after state sync so initialization has one active path. Committed the follow-up changes on the current branch: 24b00e3 Address VS Code extension safety gaps. Created PR metadata with title: Address VS Code extension safety gaps.
What this patch reproduces This patch reproduces the left GitPilot sidebar from the generated design: Compact repository header Animated connection state Orange GitPilot avatar Animated empty state Four suggested tasks Full-height chat Animated streaming and thinking Sticky composer Ask, Plan, and Auto modes Approval, plan, test, and activity cards The generated screenshot also contains a full editor-area GitPilot Workspace and right-side Inspector. Those areas require a separate implementation involving: src/panels/workspaceCopilotPanel.ts src/extension.ts src/core/types.ts src/core/stateStore.ts The uploaded patch does not modify those runtime components, so claiming that this sidebar patch alone reproduces the entire center-and-right layout would be inaccurate. The next UI patch should convert WorkspaceCopilotPanel into the three-column Chat / Workspace / Inspector interface while sharing the same state and animations.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What the corrected patch does
The corrected CSS starts from the complete original stylesheet rather than replacing it.
This preserves:
Message entrance animation
Animated thinking dots
Thinking-card light sweep
Thinking-card collapse
Streaming cursor blink
Success flash
Error shake
Tool activity fade
Loading spinner
Code-copy transitions
Approval and results styling
Reduced-motion accessibility
The compact layout is added as an override section at the bottom, so the existing component system remains intact.
The patch adds restrained animations matching the orange GitPilot design:
Connection indicator
The connection dot now reflects actual state:
Connected green glow and expanding ring
Degraded orange pulse
Disconnected red static indicator
The JavaScript updates its class, label, and tooltip from the backend connection state.
GitPilot avatar
The empty-state GP avatar has:
A subtle breathing glow
Two slowly rotating orbital rings
A small illuminated orbit point
GitPilot orange accents
The effect remains understated enough for continuous use in VS Code.
Thinking state
The existing thinking animation is enhanced with:
Orange animated dots
A brighter but subtle sweep
A pulsing phase icon
Elapsed-time display
Phase-dependent labels such as:
Analyzing your request
Writing response
Reviewing changes
Applying changes
Plan progress
Active plans now use:
Smooth progress-width transitions
A moving highlight across the progress track
A glowing progress endpoint
A scan animation across the active plan step
A pulsing active-step marker
Composer
The composer adds:
Orange focus glow
Animated send-button sheen on hover
Subtle send-button pulse during work
Animated Stop state
Smooth mode selection activation
Dynamic cards
The following now animate into view rather than appearing abruptly:
Task status
Approval request
Tool activity
Test results
Diagnostic results
Files and changes sections
3. Implements the proper three-zone sidebar
The sidebar now uses:
grid-template-rows: auto minmax(0, 1fr) auto;
This produces:
Compact header
Scrollable conversation
Fixed composer
The composer no longer disappears below the viewport. The header and input remain visible while only the conversation scrolls.
The old:
.chat-list {
max-height: 380px;
overflow: auto;
}
is overridden. This removes the small chat box and nested scrollbar.
The corrected patch retains:
--gp-accent: #D95C3D;
--gp-accent-bright: #ff7a3c;
--gp-accent-hover: #C44F32;
GitPilot orange is used for:
Active modes
Send actions
Plan progress
Active plan steps
Avatar details
Focus indicators
Hover highlights
Streaming cursor
Green remains reserved for success states, including:
Connected
Completed steps
Passed tests
Successful operations
Red remains reserved for failures and deletions.
VS Code theme variables still control the underlying background, text, inputs, and borders, so the extension remains compatible with dark, light, and high-contrast themes.
The simplified template has been expanded enough to retain the compact layout while restoring the classes required by the existing rendering system.
This includes proper structures for:
Task status and progress
Plan disclosure
Plan approval
Files in scope
Changed files
Approval requests
Tool activity
Terminal output
Tests and diagnostics
Task controls
This is important because the JavaScript dynamically generates classes such as:
chat-item
thinking-row
plan-item
plan-marker
activity-item
approval-risk
test-badge
diag-badge
Those classes now have their complete styling again.
The broken attribute was changed from:
data-prompt="Find potential bugs in the codebase"
to:
data-suggestion="Find potential bugs in the codebase"
It now matches the existing JavaScript listener.
Instead of replacing the compact send control with large text reading Send or Stop, the corrected script uses icon states:
➤ Send
■ Stop generation
The accessible name and tooltip are updated:
btn.setAttribute(
"aria-label",
busy ? "Stop generation" : "Send message"
);
The button retains its compact size while remaining keyboard- and screen-reader-friendly.
The webview now toggles:
body.gp-is-busy
during active work.
This allows the CSS to coordinate:
Composer border state
Send/stop animation
Task status dot
Thinking card
Working label
The compatibility busy overlay remains hidden because the animated chat thinking card is the primary status indicator. This avoids covering the interface with a blocking overlay.
All new animations are disabled when the user has requested reduced motion:
@media (prefers-reduced-motion: reduce) {
/* animation disabled */
}
The original reduced-motion behavior is also preserved.