Commit Graph

2461 Commits

Author SHA1 Message Date
Mohamed Boudra
e6044264e2 refactor: transition to opaque workspace identifiers 2026-04-15 17:59:09 +07:00
github-actions[bot]
beeb315c8d fix: update lockfile signatures and Nix hash 2026-04-15 09:08:50 +00:00
Mohamed Boudra
e635c6beca merge: integrate main into dev
Resolve 9 merge conflicts preserving both sides' intent:
- nix hash, bootstrap hostnames rename, websocket-server wiring
- session.ts handler dedup, snapshot fallback, worktree registration
- worktree-session git service + script/setup features
- sidebar-workspace-list setup navigation, session-context cleanup
- workspace-registry-bootstrap test kept (code still exists)
- checkout-git test additions from both sides

Post-merge fixes: isPaneFocused prop rename, server type rebuild.
2026-04-15 16:07:39 +07:00
Li Mu Zhi
918949c7fa fix: file preview shows stale content when re-opening a file (#411)
* fix: file preview shows stale content when re-opening a file

The file content query inherits `refetchOnMount: false` and
`gcTime: Infinity` from the global QueryClient defaults, so
re-opening a previously viewed file never re-fetches its content.

Set `staleTime: 0` and `refetchOnMount: true` on the file preview
query so it always fetches the latest content when the component
mounts.

Fixes #351

* fix: keep original staleTime, only add refetchOnMount

staleTime: 5_000 is reasonable — avoids redundant fetches when
quickly toggling the same file. The actual fix only needs
refetchOnMount: true to override the global default of false.

---------

Co-authored-by: muzhi1991 <muzhi1991@limuzhideMac-mini-2.local>
2026-04-15 13:24:14 +08:00
José Albornoz
c1df523a77 fix: update lockfile signatures and Nix hash (#412)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-15 13:14:47 +08:00
Mohamed Boudra
60cc73f87e fix: thread allowEmptySubmit through composer submit path
The Create button on the new workspace screen was visible but clicking
it did nothing — submitAgentInput() still rejected empty payloads as
"noop". Thread allowEmptySubmit through Composer into submitAgentInput
so the callback fires and workspace creation + redirect completes.

Adds regression test for the empty-submit path.
2026-04-15 11:53:05 +07:00
Mohamed Boudra
7a8f65805d refactor: rename allowedHosts to hostnames (#413)
* refactor: rename allowedHosts to hostnames for DNS rebinding config

The old name confused users who thought it was related to CORS.
"hostnames" communicates that you're declaring the daemon's own
hostnames, not granting access to external parties.

Backward compatible: old config files (daemon.allowedHosts), env var
(PASEO_ALLOWED_HOSTS), CLI flag (--allowed-hosts), and Nix option
(allowedHosts) all still work as deprecated aliases.

* fix(nix): update npmDepsHash to match current package-lock.json
2026-04-15 12:47:49 +08:00
Mohamed Boudra
43bec954ea fix: resolve e2e test failures for terminal creation and new workspace
Terminal tests (launcher-tab, terminal-performance):
- Terminal creation no longer silently no-ops when workspace metadata
  hasn't hydrated. Early clicks are queued and flushed once the workspace
  directory is ready, with toast feedback.
- Terminal button is disabled while waiting on workspace readiness.
- Removed isFocused gate from ?open= intent consumption in workspace
  layout so deep-linked terminals open reliably on cold startup.

New workspace test:
- New workspace screen now shows a visible Create button even when the
  composer is empty, via new allowEmptySubmit and
  submitButtonAccessibilityLabel props threaded through Composer and
  MessageInput.
2026-04-15 11:42:18 +07:00
Mohamed Boudra
751a1df682 chore: clean up debug logging, temp files, and restore changelog 2026-04-15 11:15:50 +07:00
Mohamed Boudra
79ddf6980a fix: format message-input.tsx 2026-04-15 11:10:14 +07:00
Mohamed Boudra
9d30b7e85a fix: sync dev branch with main timeline/schema changes and remove stale providers
Forward-port main's timeline epoch tracking, projected window selection,
and schema updates into dev. Remove aider/amp/gemini providers and
provider-history-compatibility layers that are no longer needed.
2026-04-15 10:52:28 +07:00
Mohamed Boudra
89b87c0235 docs: add local test suite execution rules 2026-04-15 10:40:24 +07:00
Mohamed Boudra
fc96b260d1 refactor: rename isInputActive to isPaneFocused for clarity
The prop represents whether the pane/panel is focused, not whether the
text input is focused. Rename across all 5 files to match the caller
names and reduce confusion.
2026-04-15 10:36:36 +07:00
Mohamed Boudra
3fe79535cc fix: only show ⌘L focus hint when agent panel is active 2026-04-15 10:33:42 +07:00
Mohamed Boudra
d40e4b6f0d feat: add ⌘L shortcut to focus message input with hint
Show a muted "⌘L to focus" hint in the top-right of the message input
when unfocused and empty on web. Registers Cmd+L (Mac) / Ctrl+L
(non-Mac) bindings for the existing message-input.focus action.
2026-04-15 09:57:05 +07:00
Aaron Florey
8f04e65cf1 fix(opencode): Wait for SSE after slash command timeouts (#407)
Treat OpenCode slash-command header timeouts as recoverable transport failures so Paseo waits for the SSE terminal event instead of failing the turn immediately.

Add a regression test for the timeout path to keep slash commands aligned with the existing event-stream completion flow.
2026-04-15 10:52:58 +08:00
Aaron Florey
c5295a4ab3 fix(server): archive OpenCode sessions on close (#408)
Reconcile OpenCode provider state when Paseo closes or archives an agent so upstream sessions do not remain active after local teardown.

Keep the close path idempotent by attempting an abort first and then marking the upstream session archived even when the run is already idle or missing.

Fixes #400

Co-authored-by: OpenCode <noreply@openai.com>
2026-04-15 10:52:15 +08:00
Mohamed Boudra
f59af4c810 fix: catch unhandled timeout rejection in attention clear
clearAgentAttention returns a promise that was never caught,
causing uncaught rejection errors on daemon timeout.
2026-04-15 09:16:09 +07:00
Mohamed Boudra
e012c8f52e feat: return agent snapshots from cancel and clear-attention RPCs
Convert cancel_agent_request and clear_agent_attention from
fire-and-forget to request/response RPCs that return the authoritative
agent snapshot. This enables client-side self-healing when agent_update
messages are missed (e.g. agent appears stuck running when it isn't).
2026-04-14 23:21:37 +07:00
Mohamed Boudra
312a6e22fe fix: flush head before applying canonical catch-up entries on mobile
On mobile, the server drops live stream events for backgrounded or
unfocused agents.  When the user returns, a seq gap triggers a
catch-up fetch whose canonical entries are appended to the tail —
but the head was never flushed.  Stale live items from before the
gap stayed in the head and rendered after the newer catch-up entries,
breaking chronological order.  Worse, subsequent live events of the
same kind (e.g. assistant_message) would append to the stale head
item, garbling message content.

Now the incremental path in processTimelineResponse flushes head →
tail before reducing canonical entries, keeping the timeline ordered
and the head clean for new live events.
2026-04-14 23:03:23 +07:00
Mohamed Boudra
7f92f7f51d fix: stabilize branch switcher layout on mobile
Always render the GitBranch icon regardless of branch availability so
the layout doesn't shift when the branch name loads. Only the chevron
remains dynamic. Also removes vertical padding on mobile to tighten
the gap between the branch row and project subtitle.
2026-04-14 22:27:06 +07:00
Mohamed Boudra
200453f032 docs: add 0.1.56 changelog 2026-04-14 21:17:12 +07:00
Mohamed Boudra
d4a4015804 chore(release): cut 0.1.56 v0.1.56 2026-04-14 21:15:53 +07:00
github-actions[bot]
32b68cbcf4 fix: update lockfile signatures and Nix hash 2026-04-14 13:57:52 +00:00
Mohamed Boudra
c8cafbabff chore(release): cut 0.1.56-rc.1 v0.1.56-rc.1 2026-04-14 20:56:11 +07:00
Mohamed Boudra
f0ac632732 fix: isolate git snapshot errors per workspace in fetch_workspaces
A single workspace failing to load git data (e.g. empty repo, corrupt
git state) was crashing the entire fetch_workspaces response, leaving
all users with an unusable app. Now errors are caught per-workspace
and logged as warnings, returning the workspace without git data.
2026-04-14 20:54:11 +07:00
Mohamed Boudra
25fd93d7e2 fix: handle repos with no commits in getCurrentBranch
git rev-parse --abbrev-ref HEAD fails with exit code 128 on freshly
initialized repos with no commits. This error bubbled up through
workspace listing and showed a toast error on every app launch for
users with empty git repos.
2026-04-14 20:49:54 +07:00
github-actions[bot]
2090d685ed fix: update lockfile signatures and Nix hash 2026-04-14 13:16:33 +00:00
Mohamed Boudra
c70277f445 chore(release): cut 0.1.55 v0.1.55 2026-04-14 20:15:14 +07:00
Mohamed Boudra
649eddeea8 docs: add 0.1.55 changelog 2026-04-14 20:12:12 +07:00
Mohamed Boudra
30c7729a7a docs: add custom provider configuration guide
Covers Z.AI (Zhipu), Alibaba Cloud (Qwen) coding plans, ACP providers
(Gemini CLI, Hermes), multiple profiles, custom binaries, and disabling
providers. All examples backed by official provider documentation.
2026-04-14 20:10:42 +07:00
Mohamed Boudra
8651c334c7 fix: keep worktree creation spinner visible while loading
The new-worktree button spinner was hidden when the cursor left the
project row. Force visibility when the mutation is pending so users
see the loading state throughout creation.
2026-04-14 19:43:08 +07:00
Mohamed Boudra
d1702e8a40 fix: defer worktree git watch subscription until after worktree exists
registerPendingWorktreeWorkspace was subscribing the WorkspaceGitService
before the worktree directory existed on disk, caching a stale isGit:false
snapshot. When background reconciliation ran, it consumed the stale cache,
overwrote the correct workspace record with a wrong projectId, and briefly
showed the worktree as a standalone project in the sidebar.

Move syncWorkspaceGitWatchTarget from registerPendingWorktreeWorkspace into
handleCreatePaseoWorktreeRequest, called after createAgentWorktree, so the
first snapshot sees the real worktree — one subscribe, one load, no stale
cache to race against.
2026-04-14 19:38:47 +07:00
Mohamed Boudra
80eb5dbe83 fix: make workspace-git-service tests platform-aware for Linux CI
The requestWorkingTreeWatch tests assumed macOS/Windows behavior where
recursive fs.watch is attempted. On Linux, the service uses per-directory
watchers instead, so recursive is never tried.
2026-04-14 19:20:59 +07:00
Mohamed Boudra
380c9927d7 fix: stop logging pairing offer during daemon startup 2026-04-14 19:13:50 +07:00
Mohamed Boudra
345729c588 refactor: eliminate getCheckoutStatusLite, use WorkspaceGitService
Route all git checkout queries through WorkspaceGitService instead of
shelling out to git on every call. This makes fetch_agents_request
instant when warm (cached in-memory snapshots) and deduplicates
concurrent cold-start refreshes via ensureWorkspaceTarget.

- buildProjectPlacementForCwd now uses workspaceGitService.getSnapshot()
- worktree-session call sites use WorkspaceGitService
- Deleted getCheckoutStatusLite and its 4 return types from checkout-git
- Fixed cold-start thundering herd: getSnapshot deduplicates via
  ensureWorkspaceTarget instead of spawning parallel git processes
- Extracted checkout-diff logic into WorkspaceGitService
2026-04-14 19:05:36 +07:00
Mohamed Boudra
3cdadd362c chore: remove noisy WorkspaceFetch debug logs 2026-04-14 19:05:36 +07:00
Qiao Wang
5a836eb170 Allow dev on windows machine (#357) 2026-04-14 19:26:47 +08:00
Mohamed Boudra
61c36b4e22 fix: use cached snapshot for checkout_pr_status_request
The handler was calling refresh() before every getSnapshot(), forcing
a full git + gh subprocess reload (~1.2s). The filesystem watcher
already keeps the snapshot current, so just read the cache directly.
2026-04-14 17:46:21 +07:00
Mohamed Boudra
326dad93e4 fix: remove hasSelectedAgent gate from Cmd+E and focus mode shortcuts
The hasSelectedAgent condition was redundantly gating Cmd+E (toggle right
sidebar) and Cmd+Shift+F (toggle focus mode) behind a pathname check that
Cmd+B and Cmd+. didn't require. The action handler already guards against
invalid states, making the when-clause check unnecessary and broken on the
dev branch's navigation flow.
2026-04-14 17:34:51 +07:00
Mohamed Boudra
c80d7a8165 fix: require content to create workspace — no more empty submissions
Replace allowEmptySubmit/emptySubmitLabel with hasExternalContent prop
that treats GitHub items the same as text and images in submit gating.
2026-04-14 17:28:31 +07:00
Mohamed Boudra
89db6d3187 fix(app): restore combobox flash prevention condition
The `referenceAtOrigin` check in `hasResolvedDesktopPosition` was
accidentally inverted during the provider profiles refactor (6f280276).
`!referenceAtOrigin` made the condition trivially true for all normal
triggers, letting the dropdown show at (0,0) before floating-ui resolved
the real position — visible as a left-side flash on the very first open.
2026-04-14 17:27:23 +07:00
Mohamed Boudra
df0ce60a35 Fix formatting in synced loader components 2026-04-14 17:10:54 +07:00
Mohamed Boudra
f21f861653 Fix CLI test import for resolveProviderAndModel
The function moved to utils/provider-model.ts but the test still
imported from commands/agent/run.ts.
2026-04-14 17:08:16 +07:00
Mohamed Boudra
d55209b81e fix: stabilize workspace e2e routing and cli helper export 2026-04-14 17:01:38 +07:00
Mohamed Boudra
0f0efa1707 fix: format providers snapshot hook 2026-04-14 16:41:35 +07:00
Mohamed Boudra
fb24029c69 chore: retrigger PR workflows on latest head 2026-04-14 16:33:42 +07:00
github-actions[bot]
7cba6cf414 fix: update lockfile signatures and Nix hash 2026-04-14 09:03:39 +00:00
Mohamed Boudra
16386ba6d7 Merge branch 'main' into dev 2026-04-14 16:02:23 +07:00
Mohamed Boudra
9c90657d60 fix: simplify workspace route navigation 2026-04-14 15:41:49 +07:00