agent-orchestrator/frontend
Harshit Singh Bhandari cfe505eb4d
feat: Global Settings (migration + update channel) + ao start download progress (#2235)
* feat(settings): IPC bridge for global update settings (get/set)

Expose readUpdateSettings/writeUpdateSettings to the renderer via
updateSettings:get/set so the Global Settings page can read and persist
the auto-update channel choice. Refs #2207.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(cli): show ao start download + install progress

The fetch path streamed a hundreds-of-MB asset and ran a silent install
with zero output, so a slow download looked like a hang. Print a start
line (asset, ~size, repo), stream a TTY-aware progress reader (live \r
percentage on a terminal, start+done lines off a TTY), and announce the
otherwise-silent unpack/install step. stderr only, so --json stdout stays
clean; no new dependency. Closes #2234.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(settings): Updates (channel) + Migration sections in Global Settings

- UpdatesSection: pick Stable vs Nightly auto-update channel, persisted to
  ~/.ao/update-settings.json via the new IPC bridge. Closes #2207.
- MigrationSection: drop-in card showing migration status + last report/error
  and a Run/Re-run button hitting the idempotent POST /api/v1/import; works
  even after Don't Migrate. Closes #2205.
- Wire both into the (previously blank) GlobalSettingsForm; cover both with tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: format with prettier [skip ci]

* fix(browser): re-measure preview bounds after layout transitions

The native WebContentsView preview is positioned from a renderer-measured
rect, re-measured on ResizeObserver + window resize/scroll. But a
ResizeObserver fires on size changes only, so a position-only layout shift
(entering/leaving pop-out moves the slot to another panel; opening the
inspector, which ao preview does, reflows its x) left the overlay at stale
bounds, visibly spilling over the sidebar/terminal until an unrelated resize
fixed it. Drive a settle re-measure on mount and on active/pop-out
transitions (immediate frame + once the ~240ms panel transition settles) so
the final geometry always wins.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(backend): gofmt + goimports pre-existing files (fix red CI)

config.go, project_test.go, importer_test.go and spawn_windows.go were
committed unformatted earlier and fail go.yml's gofmt check and golangci's
goimports formatter on main. Apply `golangci-lint fmt`; formatting only, no
logic change. Unblocks this PR's lint/build-test jobs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(settings): manual Check for updates + Update button

Auto-update only checked at launch, so users with auto-updates off (or who
just want it now) had no way to update from the app. Add an on-demand flow:
checkForUpdatesNow/downloadUpdateNow/quitAndInstallUpdate in auto-updater
(works regardless of the opt-in; not-packaged dev surfaces 'unsupported'),
forwarded to the renderer as a live UpdateStatus over updates:status. The
Updates section gains a Check for updates button and an Update button that
downloads then installs (Restart & install), with checking/available/
downloading%/downloaded/error status. Refs #2207.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: format with prettier [skip ci]

* fix(sidebar): always offer Global settings in the footer menu

The footer Settings menu showed either Project settings (with a project
selected) or Global settings (with none), so global settings was
unreachable while inside a project. Always list Global settings; add
Project settings above it when a project is active. Refs #2205.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(settings): show current app version in Updates section

Surface app.getVersion() as a 'Current version vX.Y.Z' line above the
update controls so users can see what they're running. Refs #2207.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: format with prettier [skip ci]

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-27 23:08:55 +05:30
..
assets fix(desktop): green the tag desktop build on Linux/Windows and add app icon (#348) 2026-06-20 21:53:11 +05:30
docs fix(desktop): package Windows via NSIS instead of Squirrel (#403) 2026-06-23 20:44:30 +05:30
e2e test(e2e): guard sidebar brand vs macOS titlebar cluster (#366) (#374) 2026-06-22 13:14:01 +05:30
makers feat(cli): ao start fetch/open for Windows and Linux (T6/T7) (#2204) 2026-06-26 20:50:30 +05:30
scripts feat: electron-updater feed publishing + macOS signing (#2220) (#2226) 2026-06-27 18:10:20 +05:30
src feat: Global Settings (migration + update channel) + ao start download progress (#2235) 2026-06-27 23:08:55 +05:30
.npmrc feat(renderer): clone agent-orchestrator shell and inspector 2026-06-11 16:45:00 +05:30
components.json feat(renderer): clone agent-orchestrator shell and inspector 2026-06-11 16:45:00 +05:30
forge.config.ts feat: electron-updater feed publishing + macOS signing (#2220) (#2226) 2026-06-27 18:10:20 +05:30
index.html feat(frontend): scaffold for frontend with complimentary backend changes (#168) 2026-06-10 11:40:17 +05:30
package-lock.json feat(update): channel-aware auto-update runtime + nightly pipeline (#2221) 2026-06-27 02:26:56 +05:30
package.json feat(update): channel-aware auto-update runtime + nightly pipeline (#2221) 2026-06-27 02:26:56 +05:30
playwright.config.ts feat(frontend): scaffold for frontend with complimentary backend changes (#168) 2026-06-10 11:40:17 +05:30
pnpm-lock.yaml Zellij to tmux + ConPTY runtime, session save/restore, crash-proof reconcile (port #404) (#2183) 2026-06-25 15:05:41 +05:30
pnpm-workspace.yaml feat(renderer): clone agent-orchestrator shell and inspector 2026-06-11 16:45:00 +05:30
tsconfig.json fix(desktop): package Windows via NSIS instead of Squirrel (#403) 2026-06-23 20:44:30 +05:30
vite.main.config.ts feat(frontend): scaffold for frontend with complimentary backend changes (#168) 2026-06-10 11:40:17 +05:30
vite.preload.config.ts feat(frontend): scaffold for frontend with complimentary backend changes (#168) 2026-06-10 11:40:17 +05:30
vite.renderer.config.ts feat(frontend): add live browser panel (#375) 2026-06-22 04:14:18 +05:30
vitest.config.ts fix(spawn): stop sending branch on spawn, render API errors, wire worker name (#171) 2026-06-11 12:13:30 +05:30