- Explicit Work Offline toggle (P4V-style): stops server polling, calm offline banner, persisted
- Reconcile Offline Work dialog: preview adds/edits/deletes with per-file checkboxes, opens picked into a changelist
- Make writable (offline edit) context action; backend p4_reconcile_preview/apply + p4_set_writable
- Tooltips (title) on every top-menu item, 5 languages
- Fix .ldr spinner rendering (inline-block + box-sizing) so it's a clean circle everywhere
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- File history button in the preview header opens a per-file revision timeline
(rev, changelist, action, user, date, description) with Diff to previous
- Backend p4 filelog -l; filelogRevs parser
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Tools -> Streams: list server streams, switch the workspace to a stream,
merge down from parent / copy up to parent (into a pending changelist)
- Backend p4 streams, client -s -S, merge/copy -S
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Tools -> Integrate / Merge / Copy: pick op + source/target paths, runs into a
new pending changelist; resolve (if needed) via the Resolve UI and submit
- Backend p4 merge/copy/integrate -c
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Tools -> Labels: list server labels, create/tag a label at current head,
one-click Sync workspace to a label (via Get Revision)
- Backend p4 labels, p4 tag -l
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Actions -> Get Revision... (enter CL number, label, or YYYY/MM/DD)
- History right-click -> Sync workspace to #N
- Backend p4 sync scope@rev with live transfer progress
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Tools -> Exclusive Locks (typemap): view/edit server typemap, one-click add
recommended binary+l rules for UE asset types (.uasset/.umap/.fbx/textures/etc)
- Per-file 'Set exclusive-lock type (+l)' in the Changes context menu
- Backend p4 typemap -o/-i and reopen -t
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Select-All checkbox rendered huge when not-all-selected because its empty-state
modifier class 'empty' collided with the .empty full-panel placeholder rule
(flex:1; padding:30px). Renamed the modifier to 'off'.
- Disable text selection on UI chrome (native-app feel); keep it enabled for
inputs, the code editor/viewer, terminal output, log, blame/diff, AI summary.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add icons to every dropdown menu item (File/Connection/Actions/Window/Tools/Help)
- New File Locks viewer (Window -> File Locks): all open/locked files across the
depot with who holds them (user + workspace), filter, locked-only toggle,
unlock your own locks, refresh
- Remove the purple highlight on the bottom-dock resize handle (cursor only)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Fix critical crash: opening the built-in code editor blanked the whole app
(white screen). The editing early-return sat above the syntax-highlight
useMemo, so entering edit mode changed the hook count and React tore down the
tree (Rules of Hooks violation). Moved all hooks above the early returns.
- Diff-vs-previous button is now shown only for text/code files, not binaries
(p4 diff2 on a .uasset only prints "files differ", which is useless).
- Package renamed to "Exbyte Depot" (productName + mainBinaryName); identifier
unchanged so existing installs upgrade in place.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Built-in code editor: edit working-copy source files in place (Edit → textarea
→ Save) before committing, no external IDE needed. Backend write_depot opens
the file for edit, clears read-only, writes UTF-8; confined to the client root.
- .uasset previews: pull the embedded Unreal thumbnail (PNG) server-side for both
working copy and history; on-demand real 3D via a headless Unreal FBX export
(commandlet mode, no editor window), temp file deleted right after — nothing
cached on disk. Plugin content paths mapped to their mount point.
- New app icon (brand mark on a theme tile) + theme-aware in-app logo.
- Connection pill / Settings show the actual connected server (P4PORT), not the
server's internal self-reported address.
- Fix: the "select all" checkbox no longer renders as a giant empty square when
not everything is selected (size pinned).
- IDE picker chooses which installed editor opens code; AI replies in UI language.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Security and robustness (backend):
- Strict CSP (was null); confine read_file/launch_file/ue_log to the client root
- p4 trust without -f: surface fingerprint CHANGES instead of auto-accepting (MITM)
- stdin=null by default + non-interactive P4EDITOR so terminal commands never hang
- 64 MB read caps on read_depot/read_file/print_depot (no OOM on huge .uasset/.pak)
- Recover from mutex poisoning instead of crashing every later p4 call
- Decode p4 output as UTF-8 then cp1251 (Cyrillic paths no longer corrupt)
- p4_changes never deletes changelists that hold shelved files
- Validate changelist number in p4_undo_change
Bug fixes (frontend):
- Focus-refresh preserves the checkbox selection (never re-checks deselected files)
- Staleness guards on refresh/describe/AI-summary/user-groups (no cross-selection races)
- Real F5/Ctrl+R/G/S/B handlers; match e.code so Ctrl+backquote works on RU layout
- Confirm dialog no longer fires on a stray global Enter
- Panel/dock/history drags end on window blur (no stuck resize)
- Commit draft clears on Submit only if unchanged since committing
- Summary/IDE buttons gated to real source files (not .pak/.dll/binaries)
New features:
- Exclusive lock/unlock plus held-by/locked-by indicators (p4 opened -a)
- Shelve/unshelve/delete-shelf on pending changelists
- Resolve UI (auto-merge / accept yours / accept theirs, per file or all) + banner
- Diff a history revision against the previous one; blame/annotate view
- Depot file search (Tools -> Search depot)
- Move opened files between pending changelists
- New-submit toasts from teammates + offline banner with auto-reconnect
Also: bake OpenRouter key at build time (git-ignored), drop AI settings UI,
IDE picker (detect installed editors), AI replies in the UI language,
persistent code summaries, metadata/CSP polish.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- History: GitHub-style split view of submitted changelists; preview file
contents at their exact revision (code/image/3D/uasset) via `p4 print`
- People & Roles modal: who works on the depot, activity indicators,
group/role assignment (p4 users / groups / group -i)
- AI commit summaries via OpenRouter (sparkle button); key/model in Settings
- Commit-message draft persists until Submit (not cleared on local commit)
- Resizable History file-list column (pointer-capture drag)
- Fix UI-scale leaving a gap at the bottom (compensate zoom in .win height)
- Author avatars on history rows; bump version to 0.2.2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Build Solution now opens a configuration picker (Development Editor,
Development, DebugGame, Shipping) and passes /p:Configuration=<cfg>
/p:Platform=Win64 to MSBuild, which drives UnrealBuildTool for the chosen
config. Streams into the same minimizable build overlay.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The Changes tab now shows committed-but-not-submitted changelists as cards
above the working set: expandable to their files (click to preview), each
with per-CL Submit, plus Edit description / Uncommit (reopen -c default) /
Discard in a ⋯ menu, and a Submit-all button. Backend adds p4_reopen_default
and p4_set_desc; a small text-prompt modal edits descriptions. Preview panel
now shows either the working selection or a clicked pending-CL file.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- build_sln now trusts UnrealBuildTool's "Result: Succeeded" (and absence of
real compile errors) over MSBuild's exit code, which is non-zero for a side
project even when the UE game module built fine.
- Fixed double event-listener registration (async unlisten under StrictMode)
that duplicated every p4-log / p4-transfer / build-log line.
- Build overlay can be minimized to a small floating chip (spinner while
building, ✓/✗ when done), click to expand, × to dismiss.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
find_sln locates a .sln in the working folder; build_sln locates MSBuild
via vswhere and builds the solution's default config (compiles the UE game
module for Unreal projects), streaming output as build-log events. A build
overlay shows the live log with error/warning coloring and a status. Wired
into Tools (Ctrl+B) and the Working-folder right-click menu when a .sln is
found. New strings translated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Right-clicking a file in Changes opens a menu with "Discard changes"
(p4 revert, confirmed, danger) plus Edit in VS Code / Open in Explorer /
Copy path. Operates on the whole multi-selection when the row is part of
it; right-clicking an unselected row selects it first.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rows now support Shift-click (range) and Ctrl-click (toggle) selection on
top of the single primary row used for the preview. Toggling a checkbox
while a multi-selection is active checks/unchecks the whole selection.
Accent bar marks the primary row; text selection disabled on the rows.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Code/text files get a VS Code action in the preview header; a backend
open_in_vscode command resolves the depot file to its local working copy
and launches `code <path>` via the shell.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- New CodeView: syntax-highlighted source (highlight.js, bundled offline)
with line numbers for new files, colored unified diff for edits. Covers
cpp/c/h, cs, py, js/ts, json/uproject, xml, ini, glsl. hljs tokens mapped
to the app palette so it's theme-aware. Replaces the bare DiffView.
- Context-menu items now support icons; the Launch Unreal Engine item shows
the UE mark.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Launch now goes through a backend launch_file command (shell `start`), so
it works for any path — fixes "Not allowed to open path" from the opener
plugin's scoped open-path.
- Removed the toolbar Launch-Unreal button; it's now a right-click item on the
Working folder ("Launch Unreal Engine"), shown only when a .uproject exists.
- Reload History after a successful Submit so the new changelist shows without
a manual F5.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the ugly native <select> on the connect screen with a themed
custom dropdown (Select component). Add a Launch-Unreal button that appears
when the chosen working folder contains a .uproject: backend find_uproject
resolves the scope to disk and searches it (and one level down); the button
opens the project via the opener plugin. Bundled the UE icon (currentColor,
so white-on-dark / black-on-light per theme). New strings translated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
.stfront no longer flex:1 across the bar — it hugs the icon+command text
(max 70%), with an inert spacer filling the rest, so the peek only appears
when hovering the actual text.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Splash: pulsing logo, client->server packet-flow animation, cycling
status steps and a shimmer bar, shown for ~1s while the session restores.
Transfer progress: the backend now streams p4 sync/submit stdout line by
line (throttled ~25fps) and emits p4-transfer events; the frontend shows a
P4V-style progress dialog (op title, current file, file count, animated
bar) that only appears once an operation runs past ~400ms. Replaces the old
submit-only modal. All new strings translated (5 langs).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The empty Changes state (flex:1 with no min-height:0) overflowed .main and
drew over the log panel; add min-height:0/overflow clipping to .empty, .left
and .main so the panel gets its own space. Make the status-bar log-peek use
hover-intent (220ms delay + keep-open while hovering the popover) and sit
flush above the bar so it can be moused into and scrolled.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Backend emits a p4-log event per command (cmd + item count + status).
Frontend adds a bottom Log panel toggled from a new Window menu (Ctrl+L),
an always-on status bar showing the last command, and a hover log-peek
popover over the activity indicator. Settings gains an interface-scale
(zoom) control (50–200%, persisted). All new strings translated (5 langs).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
English is now the default language. Added src/i18n.ts (t() helper +
dictionary) covering all UI strings across App, Updater and ModelViewer,
plus a language selector in Settings for English, Русский, Deutsch,
Français, Español (persisted in localStorage). Backend error strings
translated to English. Also removed the purple highlight on the resize
handles (cursor-only).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Tauri updater + process plugins. Checks Gitea Releases endpoint a few
seconds after launch; on a newer signed version shows a dismissible
bottom-right banner with download progress and auto-relaunch. Public
signing key in tauri.conf.json; release flow documented in RELEASING.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>