Commit Graph

2780 Commits

Author SHA1 Message Date
Mohamed Boudra
f79af3ffbf chore(release): cut 0.1.63-beta.3 v0.1.63-beta.3 2026-04-26 17:11:13 +07:00
Mohamed Boudra
f27598af98 fix(desktop): bundle @getpaseo/cli in packaged app
The CLI module was dropped from desktop deps in ba9ed8b9 (Knip
false-positive — runtime resolves it via createRequire, which static
analysis can't see). electron-builder then shipped 0.1.63-beta.{1,2}
without app.asar/node_modules/@getpaseo/cli, breaking every daemon
status check from the desktop wrapper. Splash startup never saw the
daemon as ready and retries collided with the live pid lock.

Re-declare the dep, and switch private-workspace internal @getpaseo/*
deps to "*" so npm always resolves the workspace sibling and never
falls back to the registry. Publishable workspaces (cli, server) keep
the root-version pin so their npm tarballs reference real ranges.

Update sync-workspace-versions.mjs to preserve that shape on release
bumps, and add a packaging assertion in desktop-packaging.test.ts that
fails fast if a runtime-required workspace dep is removed again.
2026-04-26 17:10:21 +07:00
github-actions[bot]
b7ee28659f fix: update lockfile signatures and Nix hash 2026-04-26 09:18:54 +00:00
Mohamed Boudra
c69b42ac10 chore(release): cut 0.1.63-beta.2 v0.1.63-beta.2 2026-04-26 16:17:44 +07:00
Mohamed Boudra
151a2c513a docs: update 0.1.63-beta.2 changelog entry 2026-04-26 16:16:14 +07:00
Mohamed Boudra
01f89c7c36 refactor: strip useUnistyles in favor of withUnistyles + StyleSheet
Replaces broad useUnistyles() subscriptions in composer, workspace, and
related components with withUnistyles wrappers and StyleSheet.create so
re-renders stay scoped to the tokens actually consumed. Lifts the design
scales (spacing, iconSize, fontSize, etc.) to top-level exports in
theme.ts so component literals share a single source of truth with the
unistyles theme.
2026-04-26 16:12:09 +07:00
Mohamed Boudra
941b4fb760 fix: keep mainRepoRoot optional for backward-compat with old daemons
Newer clients were rejecting checkout_status_response and
project-checkout-lite payloads from older daemons that don't yet send
mainRepoRoot. Make the field optional with a null default so the schema
stays forward-compatible.
2026-04-26 13:44:23 +07:00
Mohamed Boudra
a6b89bfdf7 perf: unblock open_project from gh pr status fetch
Placement only ever needed local git data; fetching GitHub PR status
was incidental coupling through getSnapshot, blocking the response
~5s with no feedback in the desktop app. Split it: getCheckout for
placement (local only), getSnapshot for the watch path. classify is
now a pure function over a checkout. The observer emits the full
gitRuntime/githubRuntime via workspace_update when the background
snapshot lands.
2026-04-26 13:39:08 +07:00
Mohamed Boudra
291a124663 refactor: split sidebar callout from generic Alert primitive
Rename CalloutCard to SidebarCallout (it was always sidebar-specific) and
add a shadcn-style Alert primitive with info/success/warning/error variants
for inline use in screens. Replace the misused SidebarCallout in project
settings with Alert and surface the underlying RPC error message instead
of generic copy. Tune destructive color per theme to a calm tinted red.
2026-04-26 13:16:24 +07:00
Mohamed Boudra
88ea88162c feat: prompt to configure worktree.setup when missing
Replaces the daemon version mismatch sidebar callout with a Set up
worktree scripts callout that watches the active git workspace and
points the user at the project's settings when paseo.json is missing
worktree.setup. Dismissals are sticky per project; read failures are
silent.
2026-04-26 13:06:35 +07:00
Mohamed Boudra
35de4b26e8 chore: gitignore vitest browser failure screenshots 2026-04-26 13:05:10 +07:00
Mohamed Boudra
feeb6c2aa6 fix: answer terminal protocol queries on the daemon, never the browser
Browser xterm.js auto-replies to DA1/DA2/DA3 traveled back over the
websocket and arrived at the PTY after the foreground app had exited,
so the response bytes (\x1b[?62;4;9;22c) landed on the shell prompt as
visible garbage. Move all replies to the daemon's headless xterm where
they reach the PTY synchronously, and suppress every query class on
the browser side. The image addon also registers a {final:"c"} handler
inside the post-mount raf, so re-register suppression after addons
load to stay last in xterm's LIFO dispatch.

Replaces the previous printf-injection test with a real foreground
helper that queries DA1 and asserts the reply lands on stdin, plus a
browser table covering DA1/DA2/DA3 + DSR/CPR/DECRQM.
2026-04-26 12:47:50 +07:00
Mohamed Boudra
7f2592041b Merge branch 'research/paseo-json-rpc' 2026-04-26 11:56:13 +07:00
Mohamed Boudra
712cb8fc86 fix: surface Claude Grep results in search detail body
The Claude SDK delivers Grep tool_result content as a plain string, which
claude-agent.ts wraps as { output: <string> } for unrecognized tools. The
canonical ToolGrepOutputSchema requires structured fields, so parsing fell
through to an unknown detail and the UI rendered only the redundant query.
2026-04-26 11:56:01 +07:00
Mohamed Boudra
219050a7ab feat: project settings page with paseo.json editor
Adds a Projects settings flow for inspecting and editing per-project
paseo.json (worktree setup/teardown, scripts, terminals) directly from the
app. Reads/writes go through new daemon RPCs with revision-based optimistic
concurrency, and the screen always keeps its header and host picker visible
so a hung host doesn't trap the user.
2026-04-26 11:37:47 +07:00
Mohamed Boudra
18903bcecb refactor: simplify startup splash screen to logo with shimmer
Replace text-heavy splash ("Welcome to Paseo", "Starting local
server...", "Connecting...") with just the logo centered with a
shimmer sweep effect. Error state preserved as-is.
2026-04-26 11:30:07 +07:00
Mohamed Boudra
a2c68cc689 feat: restore last workspace on cold start
Persist the user's last active workspace and navigate directly to it
on cold start instead of always landing on the open-project screen.

- Unified bootstrap into one cross-platform wait step after
  platform-specific connection setup
- Store-level wait with workspace preference: preferred host online
  resolves immediately, grace period if a different host connects
  first, bounded 5s timeout for unreachable hosts
- index.tsx is fully declarative — reads resolved target from context,
  no useEffect/promises/refs/timers
2026-04-26 11:28:46 +07:00
Mohamed Boudra
843d9234bd refactor: tighten tool call badge hover affordances
Move the open-file button inline after the summary text so the click
target sits next to what it acts on, and replace the tool icon with the
chevron on hover instead of showing a separate chevron at the row's end.
Hovering the icon slot keeps the tool icon visible for predictability.
2026-04-26 11:11:42 +07:00
Mohamed Boudra
5b47b6594f refactor: replace settings buttons with switches and simplify provider sheet
Swap daemon management and keep-running-after-quit buttons for Switch
toggles. Remove the restart/start daemon control. Simplify the provider
diagnostic sheet to reuse shared settings styles and SettingsSection.
Drop the unused "sm" size variant from the Switch component. Remove
trailing periods from hint text for consistency.
2026-04-26 08:15:28 +07:00
Mohamed Boudra
521944f19b feat: add open-file button to tool call badges
Show a file-symlink icon on hover that opens the file referenced by read,
edit, write, and simple shell commands (cat, head, tail, etc). Extracts
the file path from tool call details via a new utility with tests.
2026-04-26 08:15:16 +07:00
Mohamed Boudra
1ec448d2b9 fix: prevent bootstrap phase regression when an existing host comes online first
When a saved host reconnects before bootstrapDesktop finishes, the phase
was regressed from "online" back to "connecting". Track the race settlement
and skip the setPhase("connecting") call if anyOnline already won. Also
extract getEarliestOnlineHostServerId into HostRuntimeStore and use it to
initialize the bootstrap phase, avoiding a flash of the starting screen.
2026-04-26 08:15:06 +07:00
Mohamed Boudra
b7310b9e90 feat(desktop): simplify quit lifecycle with sync PID check and shutdown dialog
Replace the async daemon status resolution during quit with a synchronous
PID file check, avoiding races when the event loop is shutting down. Show
a blocking dialog so users know the daemon is stopping. Add --kill-timeout
to the CLI stop command for the desktop app to control SIGKILL wait time.
2026-04-26 08:14:55 +07:00
Mohamed Boudra
f9fcd6e032 Merge branch 'feature/desktop-daemon-settings' 2026-04-25 14:08:46 +07:00
Mohamed Boudra
cfc27f2576 Merge branch 'main' of github.com:getpaseo/paseo 2026-04-25 14:07:13 +07:00
Mohamed Boudra
4dd3b0006b Accept string form for worktree setup/teardown
Lifecycle config now takes either a multiline shell script string or an
array of commands, making it friendlier to edit in a textarea. Schema
parsing moved to Zod so coercion stays in one place.
2026-04-25 14:06:56 +07:00
github-actions[bot]
a8ffbc8003 fix: update lockfile signatures and Nix hash 2026-04-25 07:04:36 +00:00
Mohamed Boudra
4b3603604a feat: enable/disable providers from settings
Adds a per-provider toggle in Settings → Providers, persisted via daemon
config, so users can turn off providers they don't have installed (or
don't want to use) without removing them from the registry.

Disabled providers stay visible everywhere — settings, `paseo provider
ls`, MCP `list_providers`, model/mode lists — marked as disabled rather
than silently filtered. Availability probes are skipped for them, and
attempts to launch an agent or fetch models/modes from a disabled
provider return a clear "Provider '<id>' is disabled" error.

Schema additions (`enabled` on `ProviderSnapshotEntry`, MCP provider
summary) are backward-compatible: optional with a default of true so
older clients continue to parse new daemon messages.

CLI: `paseo provider ls` gains an ENABLED column; JSON output includes
the new field.
2026-04-25 14:00:38 +07:00
Mohamed Boudra
ae3e88e7e1 feat(desktop): split daemon and release settings to main process
Move daemon management and release channel settings out of the renderer's
AsyncStorage and into a desktop-owned settings store persisted by the main
process. Adds a "Keep daemon running after quit" option, a daemon lifecycle
section in settings, and a one-time migration of legacy renderer-owned
desktop settings.
2026-04-25 13:59:07 +07:00
Mohamed Boudra
de42858213 fix: reopen worktrees under the right project 2026-04-24 21:43:23 +07:00
Mohamed Boudra
db8934c53e fix: keep unavailable provider agents in history 2026-04-24 21:43:09 +07:00
Mohamed Boudra
4b7199f53b feat: improve provider settings and model selection 2026-04-24 21:42:47 +07:00
Mohamed Boudra
d3f9655e33 fix: require providers for new CLI agents 2026-04-24 21:40:59 +07:00
Mohamed Boudra
2b37276577 Fix initial terminal resize for nvim 2026-04-24 15:57:13 +07:00
Mohamed Boudra
83689ef0c5 fix(app): restore assistant link color 2026-04-24 14:03:49 +07:00
Mohamed Boudra
9a4528129f fix: suppress terminal query response leaks 2026-04-24 13:58:53 +07:00
Mohamed Boudra
231ebdcfb1 fix: preserve zsh prompt in packaged desktop (#544) 2026-04-24 13:54:20 +07:00
Mohamed Boudra
ef418d5292 Fix git diff header truncation 2026-04-24 13:27:11 +07:00
github-actions[bot]
d0f7d93fc4 fix: update lockfile signatures and Nix hash 2026-04-24 06:13:24 +00:00
Mohamed Boudra
32d9147499 chore(release): cut 0.1.63-beta.1 v0.1.63-beta.1 2026-04-24 13:12:14 +07:00
Mohamed Boudra
ad0e754cc1 docs: add 0.1.63-beta.1 changelog entry 2026-04-24 13:11:20 +07:00
Mohamed Boudra
d152b4f055 Improve terminal renderer recovery 2026-04-24 13:05:58 +07:00
Mohamed Boudra
c92e4e46d2 Stabilize git diff list heights 2026-04-24 12:26:36 +07:00
Mohamed Boudra
691e2ee7e6 Preserve live stream head during timeline catch-up 2026-04-24 12:01:33 +07:00
Mohamed Boudra
6b84c8963d Scope pre-commit lint and format to staged files 2026-04-24 12:00:26 +07:00
Mohamed Boudra
0c3d15ffb9 Stabilize web timeline height estimates 2026-04-24 11:55:43 +07:00
Mohamed Boudra
480b18c500 Document targeted npm lint and format scripts 2026-04-24 11:52:42 +07:00
Mohamed Boudra
f9e18424e9 Require lint after changes 2026-04-24 11:49:16 +07:00
Mohamed Boudra
52eb307e8c Stop logging ACP non-JSON stdout previews 2026-04-24 11:42:59 +07:00
Mohamed Boudra
50a12e2140 Reduce assistant file link parser complexity 2026-04-24 11:34:37 +07:00
Mohamed Boudra
d118e2349e Fix assistant file links with line suffixes 2026-04-24 11:32:16 +07:00