Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
198 commits
Select commit Hold shift + click to select a range
07f29d0
feat(opencode): migrate CodeNomad to native V2
pascalandr Aug 12, 2026
9b18a37
feat(server): move session families with worktrees
pascalandr Aug 12, 2026
da63783
feat(ui): organize sessions by worktree
pascalandr Aug 12, 2026
1cceb94
feat(desktop): open worktrees in file manager
pascalandr Aug 12, 2026
c66aac7
fix(opencode): harden the shared V2 runtime
pascalandr Aug 13, 2026
e94d788
fix(restore): migrate legacy OpenCode startup state
pascalandr Aug 14, 2026
a4ccc3a
fix(v2): restore session routing and isolate client state
pascalandr Aug 14, 2026
4b96f46
fix(v2): complete native runtime parity
pascalandr Aug 14, 2026
c025bfc
merge(dev): integrate desktop workspace controls
pascalandr Aug 14, 2026
9a53e2f
fix(v2): isolate runtime defaults
pascalandr Aug 14, 2026
e996196
fix(v2): follow current OpenCode runtime
pascalandr Aug 14, 2026
04cb287
fix(v2): isolate Windows WebView state
pascalandr Aug 15, 2026
d7efb4b
fix(v2): stabilize streaming and startup restore
pascalandr Aug 15, 2026
39d5138
fix(v2): render native response deltas progressively
pascalandr Aug 15, 2026
e4595fb
fix(v2): sustain native response streaming
pascalandr Aug 15, 2026
20de5d2
fix(v2): preserve virtual timeline navigation
pascalandr Aug 16, 2026
37af6c8
Merge branch 'dev' into DEV-v2
pascalandr Aug 17, 2026
485731c
fix(v2): stabilize native restoration and form handling
pascalandr Aug 18, 2026
aca2e4c
fix(ci): make WSL and spawn tests portable
pascalandr Aug 18, 2026
34c1831
fix(settings): preserve migrated database variables
pascalandr Aug 18, 2026
929cc6e
fix(ui): replace duplicate legacy questions with V2 forms
pascalandr Aug 18, 2026
18919e1
feat(ui): show short V2 form choices inline
pascalandr Aug 18, 2026
fd1fd55
fix(native): reconcile cross-host startup markers
pascalandr Aug 18, 2026
61cb41e
fix(ui): apply late native scroll seeds
pascalandr Aug 18, 2026
b0e1714
ci(windows): serialize native lifecycle tests
pascalandr Aug 18, 2026
3c98f45
fix(server): keep timer types portable
pascalandr Aug 18, 2026
59a48f7
fix(ui): keep long native choices compact
pascalandr Aug 18, 2026
db3bfbc
fix(ui): map V2 workspace request selectors
pascalandr Aug 18, 2026
3bfaaaf
perf(ui): target V2 state invalidations
pascalandr Aug 18, 2026
cfb970d
refactor(events): preserve native V2 envelopes
pascalandr Aug 18, 2026
b2a97a8
perf(ui): resync only after reconnects
pascalandr Aug 18, 2026
7e99df9
fix(ui): wait for paginated restore anchors
pascalandr Aug 18, 2026
0cac5ca
fix(ui): release follow on middle-button scroll
pascalandr Aug 18, 2026
d2783ee
fix(ui): render prompts before native admission
pascalandr Aug 18, 2026
ae6a2a8
fix(ui): preserve streaming follow invariants
pascalandr Aug 18, 2026
c4bc08e
fix(settings): restore OpenCode V2 updates
pascalandr Aug 18, 2026
1419821
docs(v2): make runtime handoff procedure explicit
pascalandr Aug 18, 2026
97d4645
fix(ui): stabilize V2 runtime status panels
pascalandr Aug 18, 2026
e4a2bde
fix(server): expose active V2 plugin metadata
pascalandr Aug 18, 2026
68abdc6
fix(i18n): describe active plugin state
pascalandr Aug 18, 2026
a820f80
fix(ui): keep native forms visually stable
pascalandr Aug 18, 2026
775c6c6
refactor(v2): remove dead migration scaffolding
pascalandr Aug 18, 2026
4c65e60
test(v2): remove redundant migration coverage
pascalandr Aug 18, 2026
cee018d
merge(DEV-v2): refresh worktree session families
pascalandr Aug 18, 2026
fe12ff0
ci(v2): authorize stacked migration PRs
pascalandr Aug 18, 2026
bd84b22
Merge branch 'DEV-v2' into refresh/pr649-20260818
pascalandr Aug 18, 2026
4359b4b
fix(v2): align with current OpenCode client contract
pascalandr Aug 18, 2026
0d3bdd1
merge(DEV-v2): refresh PR649 session migration
pascalandr Aug 18, 2026
249a96e
fix(v2): close native integration review gaps
pascalandr Aug 19, 2026
6581ed4
Merge remote-tracking branch 'upstream/DEV-v2' into refresh/pr649-202…
pascalandr Aug 19, 2026
ef70a8b
fix(v2): harden reconciliation and worktree rollback
pascalandr Aug 19, 2026
9124823
Merge remote-tracking branch 'upstream/DEV-v2' into refresh/pr649-202…
pascalandr Aug 19, 2026
af22f58
fix(ui): replace optimistic prompt after native projection
pascalandr Aug 19, 2026
f7573d1
Merge remote-tracking branch 'upstream/DEV-v2' into refresh/pr649-202…
pascalandr Aug 19, 2026
3b5f443
style(ui): remove trailing whitespace
pascalandr Aug 19, 2026
affdb96
fix(v2): keep forms and worktree deletion fail-safe
pascalandr Aug 19, 2026
ca41460
Merge branch 'DEV-v2' into refresh/pr649-20260818
pascalandr Aug 19, 2026
cf5b35e
fix(worktrees): preserve service path and move invariants
pascalandr Aug 19, 2026
0238009
fix(worktrees): close nested and WSL rollback gaps
pascalandr Aug 19, 2026
a2d5df9
fix(forms): allow required custom select values
pascalandr Aug 19, 2026
eeccf02
Merge branch 'DEV-v2' into refresh/pr649-20260818
pascalandr Aug 19, 2026
e1987b9
fix(v2): decouple runtime CLI version
pascalandr Aug 19, 2026
faaa2b3
Merge branch 'DEV-v2' into refresh/pr649-20260818
pascalandr Aug 19, 2026
109a8ee
fix(ui): reconcile prompt admission identity
pascalandr Aug 19, 2026
a2ad7e4
Merge branch 'DEV-v2' into refresh/pr649-20260818
pascalandr Aug 19, 2026
5484f9c
fix(v2): use native shells for background processes
pascalandr Aug 19, 2026
e4699a3
Merge branch 'DEV-v2' into refresh/pr649-20260818
pascalandr Aug 19, 2026
b5f3fc6
feat(v2): unify global service and desktop windows
pascalandr Aug 20, 2026
ec543e3
test(server): support configured TypeScript target
pascalandr Aug 20, 2026
2c9ced6
fix(v2): harden reconnect and desktop state recovery
pascalandr Aug 20, 2026
db0464f
fix(v2): stabilize catalog and transcript loading
pascalandr Aug 20, 2026
52a9589
fix(ui): keep session hydration state accurate
pascalandr Aug 20, 2026
161aebb
fix(workspaces): restore duplicate folder tabs
pascalandr Aug 20, 2026
8fe238f
refactor(workspaces): inline canonical path resolution
pascalandr Aug 20, 2026
a3f7e3b
refactor(electron): remove obsolete single-window lifecycle
pascalandr Aug 20, 2026
f03a17a
docs(v2): document the complete migration scope
pascalandr Aug 20, 2026
3417916
fix(v2): close current desktop parity gaps
pascalandr Aug 20, 2026
6ef68ed
refactor(v2): remove verified dead migration code
pascalandr Aug 20, 2026
ab9b857
docs(v2): record official desktop comparison
pascalandr Aug 20, 2026
290ad3d
fix(v2): harden state authority across reconnects
pascalandr Aug 21, 2026
2a29836
test(server): avoid ES2022 array access
pascalandr Aug 21, 2026
2f08770
fix(ui): restore V2 sessions without blocking first paint
pascalandr Aug 21, 2026
8f5aad8
fix(electron): make failed client-state release retryable
pascalandr Aug 21, 2026
2714fab
fix(electron): block close when renderer state cannot persist
pascalandr Aug 21, 2026
c51e40e
fix(server): harden shared location ownership cleanup
pascalandr Aug 21, 2026
08dd380
fix(v2): preserve shared service and worktree authority
pascalandr Aug 21, 2026
7df0974
fix(desktop): serialize V2 navigation and process shutdown
pascalandr Aug 21, 2026
3445de6
fix(ui): restore shell status and reasoning details
pascalandr Aug 21, 2026
be6cf9f
fix(electron): retain state ownership after failed drain
pascalandr Aug 21, 2026
082ba90
fix(server): fence worktree deletion against session admission
pascalandr Aug 21, 2026
4c702cd
fix(ui): bound retained shell output
pascalandr Aug 21, 2026
7a8d06d
fix(tauri): serialize CLI restart with shutdown
pascalandr Aug 21, 2026
b78697f
fix(server): drain session mutations before worktree deletion
pascalandr Aug 21, 2026
006522f
fix(server): fence deletion through upstream completion
pascalandr Aug 21, 2026
97ebfe5
fix(electron): recover CLI after failed state release
pascalandr Aug 21, 2026
d9b0755
fix(tauri): bound CLI restart shutdown authority
pascalandr Aug 21, 2026
12563d2
fix(ui): preserve shell output truncation boundaries
pascalandr Aug 21, 2026
8ac7453
fix(server): fence worktrees by physical identity
pascalandr Aug 21, 2026
00fcee3
fix(ui): truncate shell output at safe boundaries
pascalandr Aug 21, 2026
73d5480
fix(server): harden shared OpenCode and worktree admission
pascalandr Aug 22, 2026
87417db
fix(ui): stop Solid stale reads from blanking session switches
pascalandr Aug 23, 2026
021dee3
fix(ui): keep settled forms and permissions from coming back
pascalandr Aug 23, 2026
be268f7
fix(ui): replace the resident 200-message window instead of growing it
pascalandr Aug 23, 2026
01f23e2
fix(ui): stop the model picker from inventing a selection
pascalandr Aug 23, 2026
3845064
feat(server): show xAI and OAuth quota without guessing a model
pascalandr Aug 23, 2026
e2b784f
feat(server): sync quota providers with openchamber
pascalandr Aug 23, 2026
af84de3
fix(opencode): follow the latest beta channel
pascalandr Aug 23, 2026
a640081
fix(v2): harden shared OpenCode lifecycle and session recovery
pascalandr Aug 24, 2026
b12166e
fix(ui): keep compaction deltas off the render path
pascalandr Aug 24, 2026
5c367f6
fix(ui): align the model field with sidebar selectors
pascalandr Aug 24, 2026
f54edd4
fix(ui): inherit the model selector background
pascalandr Aug 24, 2026
b541aad
fix(v2): restore workspace and session UI authority
pascalandr Aug 24, 2026
477729c
Merge branch 'dev' into DEV-v2
pascalandr Aug 24, 2026
3c35688
fix(tauri): keep native navigation authoritative
pascalandr Aug 25, 2026
430ed2a
fix(ui): restore model and session authority
pascalandr Aug 25, 2026
5121a3d
ci: add the OpenCode V2 prerelease channel
pascalandr Aug 25, 2026
5062760
fix(desktop): isolate OpenCode V2 prerelease state
pascalandr Aug 25, 2026
9491bce
Merge branch 'dev' into DEV-v2
pascalandr Aug 25, 2026
df5adf7
feat(v2): manage queued prompts and compaction results
pascalandr Aug 25, 2026
7e53fc0
fix(desktop): persist OpenCode selection before shutdown
pascalandr Aug 25, 2026
aef4452
chore(v2): set the official 0.20 prerelease baseline
pascalandr Aug 25, 2026
b2fa1ba
fix(v2): stabilize prompt delivery and reconnect state
pascalandr Aug 25, 2026
36be70a
fix(v2): make queue mutations reconnect-safe
pascalandr Aug 25, 2026
dde642b
fix(v2): keep queued prompts and forms stable
pascalandr Aug 25, 2026
829768b
fix(v2): retain authoritative form updates
pascalandr Aug 25, 2026
75b2259
fix(v2): preserve native pending message appearance
pascalandr Aug 25, 2026
46cc4f9
fix(v2): align prompt menus with delivery state
pascalandr Aug 25, 2026
a2e2037
fix(ui): restore queued message status presentation
pascalandr Aug 25, 2026
7fcfa44
fix(v2): stabilize follow-up delivery and location routing
pascalandr Aug 26, 2026
d3e4274
fix(ui): restore lightweight compaction streaming
pascalandr Aug 26, 2026
897ddaa
refactor(ui): share streaming projection scheduling
pascalandr Aug 26, 2026
b809fba
fix(server): map invalid session lookups to 400
pascalandr Aug 26, 2026
514c5c5
fix(ui): restore immediate streaming and stable composer layout
pascalandr Aug 26, 2026
b459520
feat(ui): clean and group technical response parts
pascalandr Aug 26, 2026
7ff438f
fix(ui): preserve technical part projection integrity
pascalandr Aug 26, 2026
3372059
feat(ui): group technical parts across assistant messages
pascalandr Aug 26, 2026
2ed9e2b
feat(ui): adapt session chrome to available width
pascalandr Aug 27, 2026
1d5cd7e
Merge remote-tracking branch 'origin/dev' into DEV-v2
pascalandr Aug 27, 2026
c0d684d
fix(ui): keep compaction updates responsive
pascalandr Aug 28, 2026
c26a44a
chore(opencode): refresh beta client lock
pascalandr Aug 28, 2026
baf6300
docs(v2): refresh client and workflow baseline
pascalandr Aug 28, 2026
fba4da4
feat(messages): add authoritative technical cleanup
pascalandr Aug 28, 2026
bfa314f
feat(ui): simplify composer and desktop chrome
pascalandr Aug 28, 2026
dd2aef6
fix(ui): preserve scroll anchors during resize
pascalandr Aug 28, 2026
3f79e1a
fix(ui): render native read tool output
pascalandr Aug 28, 2026
878550c
fix(v2): close migration gatekeeper findings
pascalandr Aug 28, 2026
eb65f59
feat(preview): persist composer and rebuild web previews
pascalandr Aug 28, 2026
5e99c5b
docs(v2): add reduction analysis and workspace prototype
pascalandr Aug 28, 2026
29f8539
feat(automation): add guided desktop developer runs
pascalandr Aug 29, 2026
3234871
fix(automation): harden bridge discovery and CDP state
pascalandr Aug 29, 2026
993f324
docs(automation): record global tool visibility
pascalandr Aug 29, 2026
bce40b7
fix(yolo): preserve session list scope across pages
pascalandr Aug 29, 2026
17882cb
feat(ui): add customizable color schemes
pascalandr Aug 29, 2026
d7173fe
docs(skill): allow automatic architecture guide loading
pascalandr Aug 30, 2026
286612a
feat(worktrees): finalize native V2 session families
pascalandr Aug 30, 2026
ab9f5d8
fix(worktrees): keep selector actions accessible
pascalandr Aug 30, 2026
c9d3e25
merge(DEV-v2): refresh worktree session families
pascalandr Aug 30, 2026
c015809
Merge branch 'DEV-v2' into feat/ui-harmonization
pascalandr Aug 31, 2026
9c077dc
fix(worktrees): finalize native V2 session safety
pascalandr Aug 31, 2026
f07e2ea
feat(ui): harmonize desktop surfaces and preferences
pascalandr Aug 31, 2026
52b764a
feat(desktop): add secure standalone preferences windows
pascalandr Aug 31, 2026
be5a165
fix(tauri): avoid blocking preferences window creation
pascalandr Aug 31, 2026
d44d7f6
feat(developer-mode): persist desktop automation across restarts
pascalandr Aug 31, 2026
7bbbdbb
merge(DEV-v2): adopt persistent developer automation
pascalandr Aug 31, 2026
196bb66
docs(developer-mode): align V2 validation workflow
pascalandr Aug 31, 2026
2ea0227
merge: update UI harmonization from DEV-v2
pascalandr Aug 31, 2026
e0d9420
fix(developer-mode): reconnect WSL and disarm failed relaunches
pascalandr Aug 31, 2026
d0b8383
merge(DEV-v2): adopt developer automation reconnect fixes
pascalandr Aug 31, 2026
a0111e6
Merge remote-tracking branch 'origin/DEV-v2' into feat/ui-harmonization
pascalandr Aug 31, 2026
af85add
feat(desktop): restore native menus in the title bar
pascalandr Aug 31, 2026
16fa5fa
fix(ui): refine notification and prompt edge highlights
pascalandr Aug 31, 2026
e66ae98
fix(ui): align status panel semantic colors
pascalandr Aug 31, 2026
3e61bc0
fix(ui): compact background shell cards
pascalandr Aug 31, 2026
39e0ed5
fix(ui): show migrated global sessions in V2 projects
pascalandr Aug 31, 2026
5d593f9
feat(ui): compact providers and add editable palettes
pascalandr Aug 31, 2026
97e0d43
Merge remote-tracking branch 'origin/DEV-v2' into feat/ui-harmonization
pascalandr Aug 31, 2026
b586723
fix(ui): complete desktop harmonization polish
pascalandr Aug 31, 2026
37bf458
fix(desktop): preserve preferences across window lifecycle
pascalandr Sep 1, 2026
8418c7d
fix: stabilize virtual timelines and developer automation
pascalandr Sep 1, 2026
0a4b9d0
chore(opencode): refresh the V2 beta client
pascalandr Sep 2, 2026
8580485
docs(opencode): record the beta 18866 migration audit
pascalandr Sep 2, 2026
4d34d61
docs(opencode): correct the beta 18866 migration record
pascalandr Sep 2, 2026
b77670b
fix(ui): stabilize virtual message timeline
pascalandr Sep 3, 2026
adf12c1
fix(ui): preserve timeline position across tab restores
pascalandr Sep 3, 2026
d308e21
fix(ui): preserve paint across timeline resets
pascalandr Sep 3, 2026
41796ce
Revert "fix(ui): preserve paint across timeline resets"
pascalandr Sep 3, 2026
7c8d9eb
fix(ui): shift capped timeline windows in place
pascalandr Sep 3, 2026
dea2099
fix(ui): pin timeline shifts before paint
pascalandr Sep 3, 2026
44a1816
docs(v2): refresh migration review at timeline head
pascalandr Sep 3, 2026
411f529
merge: integrate latest DEV-v2 into worktree sessions
pascalandr Sep 4, 2026
e41b4cb
docs(v2): align upgrade references with beta-18999
pascalandr Sep 4, 2026
0fbacf6
test(automation): isolate bridge registry on Linux
pascalandr Sep 4, 2026
8777eb7
merge(dev): prepare native V2 migration for dev
pascalandr Sep 4, 2026
ca9d467
merge(dev): adopt the final V2 landing for PR 649
pascalandr Sep 4, 2026
c913657
merge(dev): connect PR 649 to the squashed V2 base
pascalandr Sep 4, 2026
8f60592
merge(dev): reconcile PR #649 with current V2 baseline
pascalandr Sep 6, 2026
3439077
merge(dev): reconcile PR #649 with native session fixes
pascalandr Sep 9, 2026
b118467
merge(dev): refresh worktree sessions branch
pascalandr Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/pr-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ jobs:
packages/ui/src/stores/session-generation-recovery.test.ts
packages/ui/src/stores/session-pagination.test.ts
packages/ui/src/stores/session-pending-state.test.ts
packages/ui/src/stores/session-tree.test.ts
packages/ui/src/stores/session-previews.test.ts
packages/ui/src/stores/workspace-load-readiness.test.ts
packages/ui/src/types/session.test.ts
Expand Down Expand Up @@ -242,6 +243,8 @@ jobs:
packages/ui/src/stores/session-request-authority.test.ts
packages/ui/src/stores/session-send-lifecycle.test.ts
packages/ui/src/stores/session-status.test.ts
packages/ui/src/stores/worktree-ready.test.ts
packages/ui/src/stores/worktrees-delete.test.ts

- name: Test server
run: node --import tsx --test "packages/server/src/**/*.test.ts"
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ Behavior for agents:
- Run them with `npm run test:browser --workspace @codenomad/ui` after `npx playwright install chromium`. `CODENOMAD_BROWSER_PATH` optionally selects an existing Chromium executable; it does not target the installed application or user sessions.

## V2 Runtime Launch
- Launch the release executable from PowerShell with the dedicated WebView2 profile, CDP port, Rust backtraces, and Node source maps described in `MIGRATION_V2.md`.
- Stop the running CodeNomad instance before rebuilding the same release path, then relaunch it from the independent OpenCode TUI.
- Enable **Developer Mode** from the session tab bar and fully restart CodeNomad once; do not configure a fixed CDP port or a manual WebView2 profile.
- Rebuild Electron before calling `codenomad.act({ action: "restart" })`. For Windows Tauri, stop and relaunch the release executable only when the linker cannot replace it; never stop the shared OpenCode daemon.

## Commit Message Guidelines
- When creating commits, use detailed commit messages: a concise conventional-style subject followed by body paragraphs that explain the user-visible behavior change, the implementation approach, important edge cases or platform considerations, and the validation or test coverage added.
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ Then open a pull request on GitHub targeting the `dev` branch.
### OpenCode V2 Boundaries

- Server and UI follow `@opencode-ai/client@beta`. Refresh the client lock before API audits or release validation. The runtime CLI is managed independently, and startup must not reject an otherwise compatible service solely for a different version string. Review current OpenCode documentation, installed declarations, and proxy/API parity whenever the client contract changes.
- Upgrade references: [OpenCode releases](https://github.com/anomalyco/opencode/releases), [OpenCode documentation](https://opencode.ai/docs/), and `node_modules/@opencode-ai/client/dist/promise/`.
- Upgrade references: the published npm `beta` tags, [OpenCode V2 documentation](https://opencode.ai/v2/docs/), [OpenCode V2 HTTP API](https://opencode.ai/v2/docs/api/), and `node_modules/@opencode-ai/client/dist/promise/`. Public GitHub releases may still describe V1 and are not a V2 compatibility authority.
- `packages/server/src/workspaces/opencode-service.ts` uses the selected host or WSL CLI's official `service status`, `service start`, and `service get password` lifecycle to connect to one externally owned global daemon. CodeNomad owns no private port, database, registration, or daemon PID and never stops the daemon on backend shutdown.
- WSL requires Windows localhost forwarding and runs the Linux CLI lifecycle inside the distribution; never inspect or signal Linux PIDs from Windows.
- OpenCode owns the global daemon's standard state and database. Configured allowed environment variables apply only when CodeNomad starts a missing daemon; an existing daemon is unchanged, and legacy `OPENCODE_DB`/`XDG_STATE_HOME` ownership settings are ignored.
Expand Down
17 changes: 14 additions & 3 deletions DESKTOP_V2_COMPARISON.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

This review compares:

- CodeNomad `DEV-v2` at `dea20996` (2026-09-03).
- Official OpenCode Desktop V2 from `anomalyco/opencode` branch `upstream/beta` at `eb1ac54d73` (2026-08-25).
- CodeNomad declares `@opencode-ai/client@beta`; UI and server resolve `beta-18999`, while the runtime CLI version is managed independently.
- CodeNomad `DEV-v2` at `44a1816b` (2026-09-04), merged with the worktree-session changes reviewed here.
- Published OpenCode V2 `beta-18999` at `887f319769c55718e3e64f64b32c9aafb13c5d66`, including an operation-by-operation and generated-declaration comparison from `beta-18684` at `106629aa118086be7def6123241a9bf056ba77b6`.
- CodeNomad declares `@opencode-ai/client@beta`; UI and server resolve `beta-18999`, the independently managed runtime CLI reports `beta-18999`, and the official V2 documentation is rooted at <https://opencode.ai/v2/docs/>.

The official reference is `packages/desktop` for the Electron host, `packages/app` for the shared UI, and the V2 client, protocol, schema, server, and core packages for wire behavior. Older `v2`, `opencode-2-0`, and intermediate `desktop-v2-*` branches are historical, not the current Desktop V2 reference.

Expand All @@ -18,6 +18,17 @@ CodeNomad implements the important V2 architecture rather than emulating the V1

The comparison and subsequent beta-contract audit found concrete CodeNomad defects in pagination, navigation, model projection, inbox delivery, follow behavior, background control, location selectors, and proxy route coverage. Those defects are fixed in the commits accompanying this document. The remaining differences are scoped workflow defects, release hardening, or optional Desktop features. None requires restoring V1 code or replacing native V2 cursors.

## Published Beta 18684 to 18999 Impact

The generated OpenAPI surface grows from 136 to 140 operations. It adds only `plugin.awaitActivation`, `plugin.check`, `plugin.update`, and `rpc.call`; it removes nothing and does not change the session, message, location, worktree, Shell, or PTY operation sets. Session pages retain the `{ data, cursor }` envelope, exclusive opaque cursors, and native ordering semantics.

- **Pagination:** all session continuations now send only the returned cursor. This includes UI inventory, worktree family transactions, proxy validation, and server-side Yolo restoration. Repeated-cursor and bounded-inventory checks remain where destructive worktree operations require a complete snapshot.
- **Locations:** OpenCode's unavailable-location change is official-app recovery UI, not an API change. CodeNomad preserves unavailable restored tabs and native session locations but does not weaken logical-workspace ownership to recover a session whose source is outside every owned root/worktree.
- **Moves:** session-aware execution and chained-move continuation improve the native server. CodeNomad still refuses worktree family moves while any member is active, serializes the project transaction, rechecks before each move, verifies the complete inventory, and rolls back on failure.
- **Events:** the client now isolates cancellation among consumers of its lazy shared stream, which CodeNomad inherits through `OpenCode.make()`. Typed `rpc.*` events require a native location and are routed only to owning logical workspaces. Raw `/api/event`, generic RPC calls, and plugin lifecycle mutations remain blocked by the workspace proxy.
- **PTY and Shell:** socket detach, post-exit drain, and fast-output fixes are runtime-only. CodeNomad inherits them without changing its HTTP proxy or introducing an embedded terminal; owned running PTYs, persistent PTYs, and Shells continue to block unsafe worktree deletion.
- **Generated types:** the new plugin state shape is safe because plugin IDs are narrowed before projection. The config update-policy rename is unused, provider/model canonical fields are additive, and native `SessionInfo.location`, `workspaceID`, and durable JSON `metadata` remain preserved.

## Closed Findings

### Message history pagination
Expand Down
Loading
Loading