-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Add version control command center #3177
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
Quicksaver
wants to merge
77
commits into
pingdotgg:main
Choose a base branch
from
Quicksaver:split/version-control-panel-work
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
77 commits
Select commit
Hold shift + click to select a range
f0de1f4
Port version control panel work
Quicksaver ee9b701
Detect PR/MR base branches in source control panel
Quicksaver 6a9d7a3
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver aaef573
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 3acf74d
Refactor source control and subagent helpers
Quicksaver c766991
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver e47d853
Port source control workspace scope updates
Quicksaver 48378d5
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 52d2ff9
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 82b1da8
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 4b645ae
Refresh version control panel after upstream merge
Quicksaver e7e89ed
Clarify branch sync upstream handling
Quicksaver bc628e2
Force refresh cached SWR queries in atom runners
Quicksaver 0225340
Show refresh spinner in source control summary
Quicksaver 919eb7d
Fix source control panel merge behavior
Quicksaver 54966aa
Fix source control review cleanup
Quicksaver 7d226ba
Fix source control review edge cases
Quicksaver f624f85
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 4c95466
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 67f4559
Port source control service fixes
Quicksaver b18f677
Port VCS panel runtime labels
Quicksaver 3818a4e
Port source control metadata errors
Quicksaver 9b7e1ac
Harden source control metadata updates
Quicksaver ae654dd
Port source control polling cleanup
Quicksaver 98ec2e8
Restore source control periodic fetch
Quicksaver 5b834f1
Render working tree source rows eagerly
Quicksaver ec19c79
Add source control error cause sanitizer
Quicksaver 942122a
Fix standalone source control branch validation
Quicksaver dc29076
Remove VS Code source control gating
Quicksaver 5f3a26b
Remove obsolete webview bridge and sidebar helpers
Quicksaver b704651
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver ea9bf9b
Document version control upstream merge
Quicksaver 6c431c1
Merge upstream main into version control panel
Quicksaver 429b799
fix(source-control): address panel review feedback
Quicksaver fa3dd00
Show dirty sibling worktrees in source control panel
Quicksaver 35ae2c7
Refresh expanded diffs on explicit local status updates
Quicksaver 819fb9a
Stabilize source control refresh diffs
Quicksaver f797413
fix(source-control): address branch detail review gaps
Quicksaver 1fe01f5
Fix source control review follow-ups
Quicksaver b74eb18
Fix source control review edge cases
Quicksaver 769ce3e
Fix sibling file preview tab state
Quicksaver be1525e
Fix source control worktree edge cases
Quicksaver 4abafaf
Handle renamed file diffs in source control panel
Quicksaver 997467f
Harden source control review follow-ups
Quicksaver d104016
Avoid untracked fallback for rename diffs
Quicksaver b53331f
Add provider-backed commit author avatars
Quicksaver 28f7aea
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 212e625
Move source control routing out of ChatView
Quicksaver d3c1b79
Fix draft source-control metadata updates
Quicksaver 5786c1c
Harden source control metadata routing
Quicksaver 836a188
Ignore stale source control metadata errors
Quicksaver f28c6bd
Harden source control review follow-ups
Quicksaver 1f3e006
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 59621bc
Update source control merge snapshot
Quicksaver 93106c7
Fetch actionable branches on initial cwd change
Quicksaver 8e6897f
Remount source control panel when thread context changes
Quicksaver e25707a
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver a22812f
Refactor source control surface gating
Quicksaver 0e8ec28
Persist source control panel state across sessions
Quicksaver 475d5fb
Document source control panel cache and refresh behavior
Quicksaver a6973ff
Keep right panel surface visible when VCS hides
Quicksaver fb12a32
Fix cached source control panel refresh
Quicksaver 3319d5e
Key stash panel state by stable identity
Quicksaver a49db42
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 933c7bb
Consolidate right-panel add-surface actions
Quicksaver ef3cc00
Harden right panel add-surface actions
Quicksaver ff137ce
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver d3a15c4
Update source control merge snapshot
Quicksaver a619fa3
Remove version control branch pollution
Quicksaver 7a26626
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver ca848a8
Update source control merge snapshot
Quicksaver 0a85ac6
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver d6f86b1
Update source control merge snapshot
Quicksaver 37aa959
Merge remote-tracking branch 'upstream/main' into split/version-contr…
Quicksaver 7141001
Adapt source control panel to upstream metadata
Quicksaver 2ce693c
Merge upstream Android support
Quicksaver 41b4d6c
test(source-control): avoid remote update race
Quicksaver File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
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
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,82 @@ | ||
| const MAX_DIAGNOSTIC_TEXT_LENGTH = 2_000; | ||
|
|
||
| export interface SanitizedErrorCause { | ||
| readonly tag?: string; | ||
| readonly name?: string; | ||
| readonly message?: string; | ||
| readonly detail?: string; | ||
| readonly code?: string; | ||
| readonly exitCode?: number; | ||
| readonly timeoutMs?: number; | ||
| readonly truncated?: boolean; | ||
| } | ||
|
|
||
| type MutableSanitizedErrorCause = { | ||
| -readonly [Key in keyof SanitizedErrorCause]?: SanitizedErrorCause[Key]; | ||
| }; | ||
|
|
||
| function truncateDiagnosticText(value: string): { | ||
| readonly text: string; | ||
| readonly truncated: boolean; | ||
| } { | ||
| if (value.length <= MAX_DIAGNOSTIC_TEXT_LENGTH) { | ||
| return { text: value, truncated: false }; | ||
| } | ||
| return { | ||
| text: `${value.slice(0, MAX_DIAGNOSTIC_TEXT_LENGTH)}\n\n[truncated]`, | ||
| truncated: true, | ||
| }; | ||
| } | ||
|
|
||
| function stringField(record: Record<PropertyKey, unknown>, key: string): string | undefined { | ||
| const value = record[key]; | ||
| return typeof value === "string" && value.length > 0 ? value : undefined; | ||
| } | ||
|
|
||
| function numberField(record: Record<PropertyKey, unknown>, key: string): number | undefined { | ||
| const value = record[key]; | ||
| return typeof value === "number" && Number.isFinite(value) ? value : undefined; | ||
| } | ||
|
|
||
| function addTextField( | ||
| output: MutableSanitizedErrorCause, | ||
| key: "tag" | "name" | "message" | "detail" | "code", | ||
| value: string | undefined, | ||
| ) { | ||
| if (!value) return; | ||
| const truncated = truncateDiagnosticText(value); | ||
| output[key] = truncated.text; | ||
| if (truncated.truncated) output.truncated = true; | ||
| } | ||
|
|
||
| export function sanitizeErrorCause(cause: unknown): SanitizedErrorCause { | ||
| if (typeof cause === "string") { | ||
| const output: MutableSanitizedErrorCause = {}; | ||
| addTextField(output, "message", cause); | ||
| return output; | ||
| } | ||
|
|
||
| if (typeof cause === "object" && cause !== null) { | ||
| const record = cause as Record<PropertyKey, unknown>; | ||
| const output: MutableSanitizedErrorCause = {}; | ||
| addTextField(output, "tag", stringField(record, "_tag")); | ||
| addTextField(output, "name", cause instanceof Error ? cause.name : stringField(record, "name")); | ||
| addTextField( | ||
| output, | ||
| "message", | ||
| cause instanceof Error ? cause.message : stringField(record, "message"), | ||
| ); | ||
| addTextField(output, "detail", stringField(record, "detail")); | ||
| addTextField(output, "code", stringField(record, "code")); | ||
|
|
||
| const exitCode = numberField(record, "exitCode"); | ||
| if (exitCode !== undefined) output.exitCode = exitCode; | ||
|
|
||
| const timeoutMs = numberField(record, "timeoutMs"); | ||
| if (timeoutMs !== undefined) output.timeoutMs = timeoutMs; | ||
|
|
||
| return Object.keys(output).length > 0 ? output : { tag: "Object" }; | ||
| } | ||
|
|
||
| return { message: "Unknown error" }; | ||
| } |
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
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
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.