Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
ef0c857
chore: bump version to 0.11.9
Jul 24, 2026
76a2559
test: close the teardown-ordering witness gap and fix a soak-caught d…
Yeachan-Heo Jul 25, 2026
c412dd6
test(runtime): deflake concurrent-dispose TERM trap race
Jul 25, 2026
e5ddca2
Merge dev into main for v0.11.10 release
Jul 25, 2026
b0fd6a7
chore: bump version to 0.11.10
Jul 25, 2026
2a7f33d
fix(sdk): join completed-start controller teardown before shutdown re…
Yeachan-Heo Jul 25, 2026
c0c1e0b
Merge main (v0.11.10) back into dev
Jul 25, 2026
c5b3472
test(sdk): scope startup-failure spies to the test's own first call (…
Yeachan-Heo Jul 25, 2026
352a2c1
ci: add offline workflow permission invariant regression (#3139) (#3146)
Yeachan-Heo Jul 25, 2026
2317939
fix(internal-urls): accept cleanup_pending marker in the sync local:/…
nahwan-kim Jul 25, 2026
e108816
docs(session): narrow local:// readiness claims in #3080 to what ship…
nahwan-kim Jul 25, 2026
2d17f32
fix(coding-agent): prevent fallback rotation starvation (#3070)
jaeyunha Jul 25, 2026
77c9a60
fix(ai): cap server-supplied Retry-After in the Claude usage fetch (#…
dmae97 Jul 25, 2026
f14e244
feat(tui): prioritize session mouse scrolling in tmux (#3135)
elppaaa Jul 25, 2026
a11fd9f
perf(coding-agent): skip lock acquisition for already-completed tombs…
Yeachan-Heo Jul 25, 2026
baa4dc7
feat(coding-agent): improve macOS queue shortcut parity (#3073)
twoimo Jul 25, 2026
b58c66a
fix(notifications): make Telegram tool activity opt-in
twoimo Jul 25, 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
6 changes: 6 additions & 0 deletions .github/workflows/dev-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ on:
required: true
type: string

# Least privilege by default: no dev-ci job needs a write-scoped GITHUB_TOKEN.
# Every job only checks out, installs, tests, and exchanges artifacts through the
# Actions artifact API, so a read-scoped token is sufficient.
permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
Expand Down
10 changes: 5 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ exclude = ["crates/brush-core-vendored", "crates/brush-builtins-vendored", "crat
resolver = "3"

[workspace.package]
version = "0.11.8"
version = "0.11.10"
edition = "2024"
license = "MIT"
authors = ["Yeachan-Heo"]
Expand Down
72 changes: 36 additions & 36 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 16 additions & 4 deletions crates/gjc-sdk/src/protocol.rs
Original file line number Diff line number Diff line change
Expand Up @@ -524,7 +524,6 @@ pub enum ToolActivityPhase {
Completed,
Failed,
Cancelled,
Unknown,
}

/// One-time per-session identity header, pinned at thread creation.
Expand Down Expand Up @@ -1217,8 +1216,18 @@ pub mod capabilities {
pub const ASK_CONTROLS_V1: &str = "ask_controls_v1";
/// Correlated, origin-bound `Selected!` acknowledgement requests.
pub const ASK_SELECTED_ACK_V1: &str = "ask_selected_ack_v1";
/// Projected tool activity and finalized reasoning summary frames.
pub const TOOL_ACTIVITY_V1: &str = "tool_activity_v1";
/// Receive-only compatibility token for the original open-ended tool
/// activity contract.
pub const TOOL_ACTIVITY_LEGACY_V1: &str = "tool_activity_v1";
/// Tool activity contract with the closed started/completed/failed/cancelled
/// phase set.
pub const TOOL_ACTIVITY_V2: &str = "tool_activity_v2";
/// Current tool activity admission token used by the native server.
///
/// The identifier is retained to avoid widening this capability-only
/// protocol change across native server call sites; its advertised value is
/// the v2 contract.
pub const TOOL_ACTIVITY_V1: &str = TOOL_ACTIVITY_V2;
/// Ephemeral side-turn request, cancellation, and terminal result frames.
pub const EPHEMERAL_TURN_V1: &str = "ephemeral_turn_v1";
}
Expand Down Expand Up @@ -1582,10 +1591,13 @@ mod tests {
(ToolActivityPhase::Completed, "completed"),
(ToolActivityPhase::Failed, "failed"),
(ToolActivityPhase::Cancelled, "cancelled"),
(ToolActivityPhase::Unknown, "unknown"),
] {
assert_eq!(serde_json::to_string(&phase).unwrap(), format!("\"{expected}\""));
}
assert!(serde_json::from_str::<ToolActivityPhase>("\"unknown\"").is_err());
assert_eq!(capabilities::TOOL_ACTIVITY_LEGACY_V1, "tool_activity_v1");
assert_eq!(capabilities::TOOL_ACTIVITY_V2, "tool_activity_v2");
assert_eq!(capabilities::TOOL_ACTIVITY_V1, capabilities::TOOL_ACTIVITY_V2);
}

#[test]
Expand Down
2 changes: 1 addition & 1 deletion crates/pi-natives/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ use napi_derive::napi;
/// MUST stay in sync with `VERSION_SENTINEL_EXPORT` in
/// `packages/natives/native/index.js` (which derives the name from
/// `package.json#version`).
#[napi(js_name = "__piNativesV0_11_8")]
#[napi(js_name = "__piNativesV0_11_10")]
pub const fn pi_natives_version_sentinel() {}

/// Publish-result wire-contract sentinel.
Expand Down
15 changes: 7 additions & 8 deletions docs/environment-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,19 +236,21 @@ providers:

`gjc --tmux` launches the interactive TUI inside a fresh GJC-managed tmux session. Plain `gjc --tmux` does not auto-attach a scoped managed session from the same project/branch; use `gjc --tmux --continue` or `gjc session attach <session>` when you intend to continue existing tmux context. `gjc --tmux --resume` still reaches the inner GJC session resolver, so value-less resume shows the session picker and `--resume <id>` honors that target instead of reusing a branch tmux session. Older-version sessions are not auto-attached after upgrades. When GJC creates a session it applies a profile that is **scoped to the GJC session only** (it never runs `set -g` / global tmux options), including:

- `mouse on` — enables mouse-wheel scrolling into tmux copy-mode (history/scrollback).
- `mouse on` — enables tmux copy-mode scrolling when GJC mouse support is disabled.
- `set-clipboard on` and a readable copy-mode `mode-style`.
- GJC ownership/identity tags (`@gjc-profile`, version, branch/project markers).

This profile is applied on macOS, Linux, WSL (Linux), and native Windows when a compatible tmux provider is available. It is applied **only to sessions GJC itself creates**. If you start tmux yourself and then run `gjc` inside it, GJC leaves your tmux configuration untouched — add `set -g mouse on` to your own `~/.tmux.conf`, or relaunch with `gjc --tmux` to get the managed profile.
This profile is applied on macOS, Linux, WSL (Linux), and native Windows when a compatible tmux provider is available. It is applied **only to sessions GJC itself creates**. If you start tmux yourself and then run `gjc` inside it, GJC leaves your tmux configuration untouched. GJC's own mouse support is disabled by default, so the host terminal or tmux retains wheel and selection behavior. Add `set -g mouse on` to your own `~/.tmux.conf` when you want tmux copy-mode scrolling.

Set `mouse.enabled: true` to let GJC capture the wheel for virtual session scrolling. When GJC owns mouse input, dragging across rendered text highlights the selection and copies it to the system clipboard on release.

| Variable | Behavior |
| --- | --- |
| `GJC_LAUNCH_POLICY` | Launch policy for `--tmux` startup: `tmux` (default) or `direct` (skip the tmux session) |
| `GJC_TMUX_SESSION` | Explicit tmux session name override for `--tmux` startup. Use a unique value (for example `GJC_TMUX_SESSION=gjc-fresh-$(date +%s) gjc --tmux`) to force a fresh named session. |
| `GJC_TMUX_COMMAND` | tmux binary/name override for every GJC tmux flow (`GJC_TEAM_TMUX_COMMAND` is honored as a team-path alias). This is not a shell command line; include only the executable path/name, not flags. |
| `GJC_TMUX_PROFILE` | Set `0`/`false`/`off` to apply only the required ownership tags and skip the scroll/mouse/clipboard profile |
| `GJC_MOUSE` | Set `0`/`false`/`off` to skip `mouse on`, leaving wheel scrolling to the host terminal instead of tmux copy-mode |
| `GJC_MOUSE` | Set `0`/`false`/`off` to skip the managed profile's tmux `mouse on`; this does not disable GJC's own mouse support |
| `GJC_PSMUX_COMMAND` | Identifies a psmux wrapper for Windows alias resolution. The value must resolve to the same executable identity as the selected `tmux` command; unresolved or conflicting evidence fails closed. |
| `GJC_PSMUX_DETECTION` | Set `0`/`false`/`off` to skip banner-based psmux detection. Executable-name and alias-identity safety checks still apply. |
| `GJC_PSMUX_FORCE_DETECT` | Set `1`/`true`/`on` to re-probe the multiplexer on every call instead of caching the per-process verdict. |
Expand All @@ -269,12 +271,9 @@ GJC does not currently expose a supported `GJC_TMUX_NAMESPACE` runtime knob or p

#### WSL / Windows Terminal scrolling

On WSL with Windows Terminal, scrolling behaves differently depending on whether tmux owns the mouse:

- **With the GJC profile (default):** the mouse wheel enters tmux copy-mode and scrolls the pane's scrollback. Keyboard fallback: `Ctrl-b [` to enter copy-mode, then `PgUp`/arrows; `q` to exit.
- **Without tmux mouse capture (`GJC_MOUSE=off`, or running outside `gjc --tmux`):** Windows Terminal handles the wheel and scrolls its own native scrollback.
GJC's SGR mouse support is disabled by default, so tmux or Windows Terminal retains wheel ownership. In a GJC-managed tmux session, the default profile's `mouse on` enters tmux copy-mode and scrolls pane history.

If the wheel does not scroll inside `gjc --tmux` on WSL, confirm the session is GJC-managed (`gjc session list`) so the `mouse on` profile is actually applied; sessions you launched yourself do not receive it. Set `GJC_MOUSE=off` if you prefer Windows Terminal's native scrollback over tmux copy-mode.
Set `mouse.enabled: true` to make the wheel scroll GJC's virtual session viewport, including inside `gjc --tmux`. Set `GJC_MOUSE=off` as well as leaving GJC mouse support disabled to skip tmux mouse capture and let Windows Terminal handle its native scrollback. Keyboard fallback for tmux copy-mode remains `Ctrl-b [`, followed by `PgUp`/arrows; press `q` to exit.

### Team tmux backend, dry-run, and state paths

Expand Down
Loading