Skip to content

feat: workspaces/worktrees UX + Environments settings + response-required notifications#339

Merged
Dimillian merged 23 commits intoDimillian:mainfrom
ishanray:main
Feb 5, 2026
Merged

feat: workspaces/worktrees UX + Environments settings + response-required notifications#339
Dimillian merged 23 commits intoDimillian:mainfrom
ishanray:main

Conversation

@ishanray
Copy link
Contributor

@ishanray ishanray commented Feb 5, 2026

Summary

A bundle of workspace/worktree quality-of-life improvements plus a few UX/polish fixes across threads/messages, collaboration modes, notifications, settings, and the local git diff viewer.

A lot of the things which brings it to feature parity with the Codex app.

Let me know if it is too big and I can break it up into smaller chunks @Dimillian

Key changes

Workspaces / Worktrees

  • Copy AGENTS.md from the parent repo into newly-created worktrees (when present).
  • Add an option to skip copying AGENTS.md during worktree creation (default remains on).
  • Worktree creation prompt: add a branch suggestions dropdown + improved modal styling.
  • Composer: enable shortcuts on the workspace home textarea.

Settings

  • Add Settings → Environments for per-project setup scripts (stored on the workspace settings).

Environment setup script flow

  • Worktree prompt surfaces the setup script (configured in Settings → Environments) and runs it once after worktree creation.

Notifications

  • Add “response required” system notifications for agents and wire into the app modal/controller flow.

Collaboration modes / app-server

  • Include experimentalApi capability during initialize.
  • Accept alternate collaboration mode responses, improve debug logging, and display collaboration modes verbatim.
  • Remove unused collaboration mode label formatter utility.

Git diff viewer

  • Add per-file discard action in the local diff viewer.
  • Improve image diff card support and related diff viewer styling.

Threads / Messages

  • Fix: keep streamed plan output visible when completion is empty.
  • Refine thread item normalization + add/extend tests around turn events and normalization.

Implementation notes

  • Worktree AGENTS.md copy is best-effort: if the parent repo does not have AGENTS.md, creation proceeds normally.
  • Skip-copy toggle is plumbed end-to-end (frontend → IPC → app backend → daemon) so remote mode stays consistent.

Test plan

  • npm run test
  • npm run typecheck
  • npm run lint
  • cd src-tauri && cargo check

(Manual) Worktree creation:

  • Create a worktree with default settings: verify AGENTS.md is copied when present.
  • Create a worktree with “Copy AGENTS.md” unchecked: verify it is not copied.
image image image

@Dimillian
Copy link
Owner

Nice! Look like a lot of QoL! Thanks!

@Dimillian
Copy link
Owner

@codex review

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7d7f7b3760

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 31 to 34
let destination_path = worktree_root.join(AGENTS_MD_FILE_NAME);
let temp_path = worktree_root.join(format!("{AGENTS_MD_FILE_NAME}.tmp"));

std::fs::copy(&source_path, &temp_path).map_err(|err| {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Skip copying when worktree already has AGENTS.md

This copy path always writes the parent repo’s AGENTS.md into the new worktree without checking whether the checked-out branch already contains its own AGENTS.md. For existing branches, that overwrites branch-specific instructions and immediately leaves the worktree dirty, which can change agent behavior and surprise users right after creation.

Useful? React with 👍 / 👎.

Comment on lines 515 to 517
output:
incomingOutput.length >= existingOutput.length ? incomingOutput : existingOutput,
changes: hasIncomingChanges ? item.changes : existing.changes,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Prefer incoming tool output unless it is truly empty

Using output length as the merge rule causes stale content to win whenever the server sends a shorter final update for the same tool item (for example, replacing verbose streamed text with a concise final result or error). In those cases the UI keeps the old longer text and never shows the authoritative completion payload.

Useful? React with 👍 / 👎.

@Dimillian
Copy link
Owner

Why did you added a manual agents.md copy? New worktree will already have it since they're based on the parent repo, no? Am I missing something?

@Dimillian Dimillian changed the title Workspaces/worktrees UX + Environments settings + response-required notifications feat: workspaces/worktrees UX + Environments settings + response-required notifications Feb 5, 2026
@Dimillian Dimillian merged commit 7cf1eca into Dimillian:main Feb 5, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants