diff --git a/README.md b/README.md index bcaf92d..bc80d31 100644 --- a/README.md +++ b/README.md @@ -115,8 +115,10 @@ Then open **http://127.0.0.1:8787**, log in, and: server machine (the agent's workspace). 2. **+** on the project → draft a new thread. No Codex thread is created until the first message is sent, so choose the **Plan/Build** mode, **permission preset**, and **model** first if needed. - A draft on a Git project also picks its **Git checkout**: shared with the project, or a **Git - worktree** of its own, so its file changes never touch the project's checkout. The choice is + A draft on a Git project also picks its **Git checkout** from the dropdown on the **Git status + row** above the composer: shared with the project, or a **Git worktree** of its own, so its file + changes never touch the project's checkout. Choosing a worktree while the project has uncommitted + work prints how much of it stays behind. The choice is available only on the draft — the workspace is fixed once the thread exists. Isolation changes where the thread works, not what it is allowed to do: its permission preset still applies unchanged. See [Per-thread Git worktrees](docs/git-worktrees.md) for what does and does not come across, branch diff --git a/crates/giskard-server/static/app.css b/crates/giskard-server/static/app.css index 8aa3df1..51cfd72 100644 --- a/crates/giskard-server/static/app.css +++ b/crates/giskard-server/static/app.css @@ -530,6 +530,20 @@ .git-act:hover { border-color:var(--border); background:var(--panel2); color:var(--fg); } .git-act[hidden] { display:none; } .git-act-icon { display:inline-flex; align-items:center; padding:3px 5px; } + /* The draft's checkout choice, sized to sit among this row's actions rather than to look like a + form field: the row is 27px tall and every other control on it is a small muted chip. */ + .git-strategy { + flex:none; max-width:9.5em; padding:1px 4px; border-radius:5px; + border:1px solid var(--border); background:var(--panel2); color:var(--muted); + font:inherit; font-size:11px; line-height:1.5; + } + .git-strategy:hover, .git-strategy:focus { color:var(--fg); border-color:var(--accent); } + /* Aligned under the row's text, not its caret, so it reads as a note on the row rather than as a + caption to the dropdown at the far end of it. */ + .git-strategy-warning { + margin:0; padding:0 12px 5px 30px; color:var(--muted); font-size:11px; line-height:1.35; + } + .git-strategy-warning[hidden] { display:none; } .git-line-body { max-height:min(40vh, 320px); overflow-y:auto; padding:2px 12px 8px; @@ -654,9 +668,6 @@ .mp-field[hidden] { display:none; } /* the grid display above would otherwise defeat [hidden] */ .mp-field > label, .mp-field > span { color:var(--muted); font-size:11px; } .mp-field select { width:100%; } - /* The Git strategy choice and its explanation need the full width: the hint is a sentence, not a - label, and wrapping it into a column would make it unreadable at the popover's width. */ - .mp-git-strategy { grid-column:1 / -1; } .mp-hint { color:var(--muted); font-size:11px; line-height:1.35; } .mp-hint:empty { display:none; } /* A confirmation that names what it destroys, so the warning reads as part of the question diff --git a/crates/giskard-server/static/app.js b/crates/giskard-server/static/app.js index a1276c6..f31903d 100644 --- a/crates/giskard-server/static/app.js +++ b/crates/giskard-server/static/app.js @@ -3271,12 +3271,11 @@ function resetTranscriptForAuthoritativeSnapshot() { else setTurnActive(false); } const MODE_LABELS = { build:"Build", plan:"Plan" }; -/* The `git_strategy` values `threads/start` accepts, and what each adds to the closed turn chip. - The default says nothing there — a chip that named the ordinary case on every thread would stop - being a signal. Keyed by wire value so this doubles as the set the UI will send: a strategy the - server does not know must not reach it. */ +/* The `git_strategy` values `threads/start` accepts. This is the set the UI will send, so a strategy + the server does not know must not reach it; the names the user reads are the row's own `