Synced from monorepo

Changes:
- Gate session-lifecycle heap steady state with a dhat soak
- Unbreak merge lifecycle e2e after default model → grok-4.5
- Scan home-scope rules dirs at <root>/rules
- Complete text-input paste and terminal parity
- Gate project roles and personas
- Use canonical editing in dialogs
- Use canonical editing in search bars
- Reject ambiguous MCP tool IDs
- Harden Git operands for plugins
- Simplify queue drain API
- Pass RFC 9207 iss through MCP OAuth token exchange
- Show leader roster when local agents map is empty
- Use canonical editing in Persona views
- Remove marketplace default-skills auto-install and purge old installs
- Use canonical editing in extension forms
- Add canonical dashboard text editing
- Use canonical editing in settings
- Add /summarize as a /recap alias
- Restore previous agent when exiting dashboard
- Use tool_choice auto for compaction
- Settings toggle for snap-prompt-to-top on send
- Update default models to grok-4.5
- Source login shell once for local bash (env + alias/function snapshot)
- Template hardcoded param names in server-native tool descriptions
- Fix System-Reminder XML tag injection in CLAUDE.md via agents_md
- Fix remote workspace-server hardcoding LSP trust (repo code execution risk)
- Clear orphaned tool-call updates at turn end
- Suppress task wake after cancel
- Send x-grok-client-identifier on direct API tool calls
- Harden dashboard peek lease transitions
- Host /btw side panel in live region (minimal mode)
- Bound scroll presentation latency
- Highlight multi-line constructs correctly in diffs and the file viewer
- Block web_fetch non-public IPs; local opt-in is explicit-host only
- Seed coding_data_retention_opt_out=false for OAuth e2es in pty-harness
- Follow up clipboard delivery feedback
- Use canonical editing in pickers
- Route TextArea through canonical editor
- Persistent "watching" status row; quieter turn markers
- Gate sensitive edit targets
- Expose agent registry counts and gate session churn on them
- Default coding data sharing to opt-out until server preference applies
- Wire chat attachment ids through gateway prompts
- On auth refresh failure, issue retry
- Forward preview provenance and computer lifecycle state
- Document independent privacy controls and scope /privacy output
- Strip SamplingError Display prefix on rate-limit UI copy
- Stop dumping Cloudflare HTML into Retry failed
- Disable in-place prompt edit (scroll jank on enter)
- Strip forced ANSI color from gh pr view JSON
- Plumb bash tool description onto ToolUsageCard wire
This commit is contained in:
grokkybara[bot] 2026-07-18 19:48:28 +01:00
commit 7cfcb20d2b
292 changed files with 23315 additions and 9209 deletions

View file

@ -249,7 +249,8 @@ pub struct PagerLocalSnapshot {
pub available_models: Vec<(String, acp::ModelId)>,
/// Whether the user has opted OUT of coding data sharing.
/// Lives in auth metadata (no `UiConfig` field). Inverted mapping:
/// `opt_out == false` → canonical "opt-in".
/// `opt_out == false` → canonical "opt-in". Snapshot default is
/// `true` (opted out) to match the safer consumer default.
pub coding_data_sharing_opt_out: bool,
/// Whether plan mode is active. Uses effective state
/// (`pending.unwrap_or(active)`) so rapid toggles don't double-send.
@ -289,7 +290,7 @@ impl Default for PagerLocalSnapshot {
auto_mode: false,
current_model_name: None,
available_models: Vec::new(),
coding_data_sharing_opt_out: false,
coding_data_sharing_opt_out: true,
plan_mode_active: false,
show_tips: None,
auto_update: None,
@ -484,6 +485,10 @@ pub fn current_value_for(
"compact_mode" => Some(SettingValue::Bool(ui.compact_mode)),
"show_timestamps" => Some(SettingValue::Bool(ui.show_timestamps.unwrap_or(true))),
"show_timeline" => Some(SettingValue::Bool(ui.show_timeline_enabled())),
// Cache is the send-path source of truth (same pattern as group_tool_verbs).
"page_flip_on_send" => Some(SettingValue::Bool(
crate::appearance::cache::load_page_flip_on_send(),
)),
"simple_mode" => Some(SettingValue::Bool(ui.simple_mode.unwrap_or(true))),
// Per-tip contextual hints — `None` (inherit) reads as the default ON.
"contextual_hints.undo" => {
@ -780,6 +785,13 @@ mod tests {
"show_timeline default drifts from UiConfig::default()"
);
}
("page_flip_on_send", SettingKind::Bool { default }) => {
assert_eq!(
*default,
ui.page_flip_on_send_enabled(),
"page_flip_on_send default drifts from UiConfig::default()"
);
}
("simple_mode", SettingKind::Bool { default }) => {
assert_eq!(
*default,
@ -865,14 +877,15 @@ mod tests {
);
}
// coding_data_sharing: no UiConfig field; default pinned
// against auth metadata (opt_out=false → "opt-in").
// against auth metadata (opt_out=true → "opt-out").
("coding_data_sharing", SettingKind::Enum { default, .. }) => {
let expected = "opt-in";
let expected = "opt-out";
assert_eq!(
*default, expected,
"coding_data_sharing registry default must be 'opt-in' — \
"coding_data_sharing registry default must be 'opt-out' — \
the on-disk source of truth is `AuthEntry::coding_data_retention_opt_out: \
bool` (defaults to `false`, i.e. user has NOT opted out)",
bool` (defaults to `true`, i.e. user has opted out until they \
explicitly share or the server opts them in)",
);
}
// CLI batch: fields live on CliConfig, not UiConfig.