Commit Graph
4960 Commits
Author SHA1 Message Date
Mohamed Boudra bf3910bdc0 test(workspaces): keep launch fixture alive 2026-08-15 12:30:17 +00:00
Mohamed Boudra b607bed49c test(workspaces): isolate runtime observation routing 2026-08-15 11:25:15 +00:00
Mohamed Boudra ec12c5c35c fix(workspaces): resolve runtime Git observation command 2026-08-15 11:01:11 +00:00
Mohamed Boudra 1daccc4414 test(workspaces): isolate runtime observation routing 2026-08-15 10:25:55 +00:00
Mohamed Boudra af140997a3 fix(workspaces): invalidate watches after helper writes 2026-08-15 10:03:14 +00:00
Mohamed Boudra 98bf569448 test(workspaces): focus runtime observation isolation 2026-08-15 09:35:32 +00:00
Mohamed Boudra bdfa718c83 test(workspaces): budget command runtime observation 2026-08-15 09:13:03 +00:00
Mohamed Boudra 791939081b fix(workspaces): await Git watcher teardown 2026-08-15 08:48:58 +00:00
Mohamed Boudra 18ec41670f test(workspaces): bound runtime Git integration waits 2026-08-15 08:19:28 +00:00
Mohamed Boudra add858f3e8 test(workspaces): isolate command runtime Git contracts 2026-08-15 07:54:55 +00:00
Mohamed Boudra 92a1e3fa66 fix(workspaces): release runtime resources on shutdown 2026-08-15 07:22:01 +00:00
Mohamed Boudra 91f76c9494 test(workspaces): isolate host Git observer seam 2026-08-15 00:51:17 +02:00
Mohamed Boudra d58230404b test(workspaces): expect helper protocol framing 2026-08-15 00:40:51 +02:00
Mohamed Boudra 692d4777c6 style(workspaces): format Windows helper test 2026-08-15 00:34:42 +02:00
Mohamed Boudra 3a8824ed99 fix(workspaces): keep helper executable standalone 2026-08-15 00:31:22 +02:00
Mohamed Boudra 6d16961d58 fix(workspaces): resolve Windows runtime commands 2026-08-15 00:24:34 +02:00
Mohamed Boudra 16e0967408 test(workspaces): make Git isolation deterministic 2026-08-14 23:58:52 +02:00
Mohamed Boudra 697a0002d9 test(workspaces): isolate sibling Git fanout 2026-08-14 23:43:21 +02:00
Mohamed Boudra 1518eb09a9 test(workspaces): isolate Git watcher readiness 2026-08-14 23:26:28 +02:00
Mohamed Boudra 3175a5ff10 chore: merge main into workspace runtime branch 2026-08-14 23:10:24 +02:00
Mohamed Boudra eafa5f2b5c fix(workspaces): resolve runtime Git portably 2026-08-14 22:54:59 +02:00
Mohamed Boudra 4748aad103 Reload daemon configuration without restarting (#3365)
* feat(daemon): reload configuration without restarting

Keep config validation, reloadability classification, override handling, and atomic runtime application inside the daemon so local and remote clients share one authoritative workflow.

* fix(daemon): preserve reload resource ownership

Keep every materialized provider client under daemon-lifetime ownership and classify speech overrides from resolved providers. Restore the complete WebSocket config-store test contract exposed by CI.
2026-08-14 22:46:32 +02:00
Mohamed Boudra 12c1a68956 test(workspaces): await runtime teardown 2026-08-14 22:23:22 +02:00
Mohamed Boudra cd354158f5 test(desktop): combine dev prerequisite build states 2026-08-14 21:59:24 +02:00
Mohamed Boudra cf4d702a8e fix(workspaces): release archived runtime backing 2026-08-14 21:44:48 +02:00
Mohamed Boudra e5f3b3dc02 fix(workspaces): preserve portable runtime readiness 2026-08-14 20:13:04 +02:00
Mohamed Boudra b500809229 test: assert worktree backing release 2026-08-14 19:31:04 +02:00
Mohamed Boudra 642c303859 test: remove provider descriptor clock race 2026-08-14 19:12:40 +02:00
Mohamed Boudra a67381795b test: include plugin in isolated build fixtures 2026-08-14 19:01:33 +02:00
Mohamed Boudra 8a37f2f5d3 fix: update Nix dependency hash 2026-08-14 18:49:40 +02:00
Mohamed Boudra 54f0e636b9 Merge remote-tracking branch 'origin/main' into workspace-runtime-poc
# Conflicts:
#	nix/npm-deps.hash
#	package.json
#	packages/client/src/daemon-client.ts
#	packages/server/src/server/bootstrap.ts
#	packages/server/src/server/websocket-server.ts
2026-08-14 18:43:58 +02:00
Mohamed Boudra cd429339a0 fix(workspaces): preserve runtime lifecycle boundaries 2026-08-14 18:35:07 +02:00
Mohamed Boudra 75bbca4a1b Archive finished subagents across the whole track (#3368)
* feat(app): archive finished subagents together

Make the track action clean up finished managed and provider-owned children as one operation while preserving running work. Managed archives remain sequential and provider-owned dismissal stays client-local.

* test(app): clarify subagent archive assertions
2026-08-14 18:16:22 +02:00
Mohamed Boudra 23853a1515 Add managed local plugin lifecycle (#3222)
* feat(plugins): add local plugin surfaces and RPCs

Keep plugin execution scoped to its daemon while allowing one local TypeScript entry point to contribute validated RPCs and native client surfaces. Paseo owns host selection, navigation chrome, and per-installation query caches.

* feat(plugins): add Linear attachment source

* fix(nix): refresh npm dependency hash

* test(server): exclude internal sessions from Hub counts

* test(server): distinguish Hub execution sessions

* feat(plugins): make local plugins explicitly opt-in

Keep plugin loading dormant until configuration enables it, and collect unsupported examples under one directory.

* refactor(plugins): establish host boundaries

* fix(nix): refresh plugin dependency hash

* fix(plugins): complete packaging and startup rollback

* feat(plugins): add managed local lifecycle

Make trusted local plugins recoverable and authorable through daemon-owned lifecycle operations, host settings, and a capability-gated CLI. Reloads fully stop the previous plugin before starting new code, while generated projects provide strict TSX checking without changing runtime dependency ownership.

* fix(nix): refresh plugin dependency hash
2026-08-14 17:12:49 +02:00
Mohamed Boudra 51193e7a92 fix(workspaces): stabilize runtime CI paths 2026-08-14 16:49:05 +02:00
Mohamed Boudra d35c10a8b5 test(workspaces): invoke npm portably on Windows 2026-08-14 14:34:04 +02:00
Mohamed Boudra ff83ca4bdc fix(workspaces): restore clean runtime test paths 2026-08-14 14:11:12 +02:00
Mohamed Boudra accd2d7587 fix(build): update Nix dependency hash 2026-08-14 13:44:12 +02:00
Mohamed Boudra 2501a46f3e fix(build): restore package lock metadata 2026-08-14 13:39:02 +02:00
Mohamed Boudra e2ac23da70 chore(merge): integrate main into workspace runtimes 2026-08-14 13:28:32 +02:00
Mohamed Boudra f0bd2c8483 Resume cached timelines without replaying their tail (#3329)
* perf(timeline): resume cached history from its exact range

Warm launches were repainting cached history and then downloading the same bounded tail to rediscover that nothing changed. Persist synchronization authority only when the complete current canonical window can be encoded losslessly; otherwise retain the existing display-only fallback.

* test(timeline): hide replica setup behind E2E helper

* fix(timeline): bound persisted resume overflow

* test(timeline): cover workspace eviction catch-up order

* test(timeline): read persisted range from IndexedDB
2026-08-14 12:57:44 +02:00
Mohamed Boudra 7c32fcda98 refactor(workspaces): finalize runtime package boundaries
Keep the daemon dependent only on the public runtime contract and helper, while optional runtime implementations remain external command registrations. Workspace setup continues asynchronously through the bound runtime without coupling production packages to an implementation.
2026-08-14 12:48:35 +02:00
Mohamed BoudraandJimmy Lee 30195d3bd1 fix(app): make composer input IME-safe and paste-aware (#3343)
* fix(app): preserve native composer input semantics

Native text was round-tripped through application state on every keystroke, which could overwrite an input method's in-flight edits. Keep native text ownership inside the input and reserve application-driven replacement for explicit draft mutations.\n\nRoute native clipboard images through the existing persisted attachment pipeline so keyboard and system paste actions behave like other image sources.

* fix(nix): refresh dependency hash

The native composer dependency changes the fixed npm dependency closure used by desktop builds.

* fix(app): keep composer locked across image pastes

Count concurrent native image persistence operations so submit remains disabled until every pasted image is attached.

* fix(app): replace composer text through the DOM on web

Web TextInput refs are DOM elements, so application-driven draft replacement must update their value and selection without native setNativeProps.

* fix(app): preserve web IME composition

Carry the Chinese IME fix from #2990 into the web composer input boundary.

Co-authored-by: Jimmy Lee <jimersylee+github@gmail.com>

---------

Co-authored-by: Jimmy Lee <jimersylee+github@gmail.com>
2026-08-14 11:52:24 +02:00
770b87a15c fix(desktop): keep element selectors available on loaded pages (#3187)
* fix(desktop): keep element selectors available on loaded pages

Annotate element and Screenshot element returned early when a cached load signal said the guest was not ready, even if the current document was complete and executable. Let executeJavaScript own the readiness boundary and keep selector cleanup available in the same stale-signal state.

Extend the real Electron browser regression to reproduce the complete-document/stale-signal mismatch through both toolbar actions.

* test(desktop): await browser selector injection

Poll the guest selector state through the browser bridge instead of assuming injection completes within 250 ms. This keeps the Electron regression deterministic on slower CI hosts.

* Harden browser selector session lifecycle

* Keep selector E2E fixtures independent

* fix(desktop): harden selector and annotation lifecycle

* fix(desktop): keep selector PR focused

* refactor(desktop): own element selector lifecycle

---------

Co-authored-by: Daniel G. Kang <180234654+dgk-dev@users.noreply.github.com>
Co-authored-by: Mohamed Boudra <boudra.moha@gmail.com>
2026-08-14 15:51:42 +08:00
Mohamed Boudra b03dc804eb feat(app): make pinned workspaces sortable (#3341)
Reuse the existing workspace drag interaction for pinned rows and persist their local order across grouping modes. Keep pressed and dragged row scrims aligned with the active backdrop, and preserve memoized row rendering on web.
2026-08-13 23:48:01 +02:00
Mohamed Boudra 373a98c64d Restore host directories instantly before reconnect (#3259)
* feat(sync): restore host directories before reconnect

Persist complete project, workspace, and active-agent replicas so every registered host can paint immediately, including offline hosts. Reconcile those replicas through monotonic per-entity cursors on the existing directory RPCs without retaining an event journal.

* fix(sync): preserve active turn identity during catch-up

Own Agent-to-wire projection beside the existing snapshot normalizer so replica persistence does not reach through directory-sync internals. This also keeps identified active turns intact when unchanged agents are folded into an incremental directory response.

* test(e2e): inspect the real IndexedDB replica

Keep cache setup, reload, and hydration coverage on the production browser storage backend after the replica moved off localStorage. Measure writes at the actual IndexedDB put boundary as well.

* fix warm reconnect cache paths

* feat(sync): persist project icons and deepen directory sync

* fix(sync): preserve project update order

* fix(cache): preserve validated replica persistence

* fix(sync): retain cached agents during catch-up
2026-08-13 23:10:44 +02:00
Mohamed Boudra 599846650c Stabilize live relay status coverage (#3337)
* test(cli): stabilize live relay status coverage

The regression fixture deleted the supervisor's active PID lock to model a reachable daemon without local process state. Under CI load, worker readiness could race that deletion and make the supervisor tear down the daemon while status and pairing were probing it.\n\nLaunch the real worker directly so the no-PID state exists naturally, then wait on the CLI-visible live relay state before asserting behavior.

* test(cli): wait for complete relay probe state

Status readiness alone does not guarantee the next pairing RPC or the foreign-home identity probe will finish inside the CLI's per-call timeout under CI contention. Retry each exact observable outcome within the fixture deadline and resolve the real worker entry through the server package.

* test(cli): name retry mechanics once

Keep the relay scenarios expressed as CLI probes and exact outcomes while one file-local helper owns the shared deadline, worker-liveness check, and retry cadence.
2026-08-13 23:10:28 +02:00
Mohamed Boudra 36d8464068 refactor(workspaces): make Docker a generic runtime
The server build, typecheck, and dry-run package pass with the Docker implementation deleted from the tree. paseo-workspace-helper remains a mandatory generic runtime contract requirement.
2026-08-13 21:59:13 +02:00
paseo-ai[bot] b5610928a5 fix: update lockfile signatures and Nix hash [skip ci] 2026-08-13 19:41:15 +00:00
Mohamed Boudra b44bb63cf4 chore(release): cut 0.4.0 v0.4.0 2026-08-13 21:31:47 +02:00