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:
parent
98c3b2438a
commit
7cfcb20d2b
292 changed files with 23315 additions and 9209 deletions
|
|
@ -30,6 +30,7 @@ const TIMESTAMPS_DEFAULT: bool = true;
|
|||
/// [`UiConfig::SHOW_TIMELINE_DEFAULT`]; aliased here for the `Cell::new`
|
||||
/// const context and the effective-config fallback read.
|
||||
const TIMELINE_DEFAULT: bool = UiConfig::SHOW_TIMELINE_DEFAULT;
|
||||
const PAGE_FLIP_ON_SEND_DEFAULT: bool = UiConfig::PAGE_FLIP_ON_SEND_DEFAULT;
|
||||
const SIMPLE_MODE_DEFAULT: bool = true;
|
||||
/// Vim-mode scrollback default — matches the previous on-disk default.
|
||||
const VIM_MODE_DEFAULT: bool = false;
|
||||
|
|
@ -135,6 +136,34 @@ pub fn set_show_timeline(enabled: bool) {
|
|||
TIMELINE_LOADED.with(|l| l.set(true));
|
||||
}
|
||||
|
||||
// -- Page-flip on send ---------------------------------------------------------
|
||||
|
||||
thread_local! {
|
||||
static PAGE_FLIP_ON_SEND_CURRENT: Cell<bool> = const { Cell::new(PAGE_FLIP_ON_SEND_DEFAULT) };
|
||||
static PAGE_FLIP_ON_SEND_LOADED: Cell<bool> = const { Cell::new(false) };
|
||||
}
|
||||
|
||||
/// Cached `page_flip_on_send`, seeding from `[ui]` on first call.
|
||||
pub fn load_page_flip_on_send() -> bool {
|
||||
PAGE_FLIP_ON_SEND_LOADED.with(|loaded| {
|
||||
if !loaded.get() {
|
||||
PAGE_FLIP_ON_SEND_CURRENT.with(|c| {
|
||||
c.set(load_bool_from_effective_config(
|
||||
"page_flip_on_send",
|
||||
PAGE_FLIP_ON_SEND_DEFAULT,
|
||||
))
|
||||
});
|
||||
loaded.set(true);
|
||||
}
|
||||
});
|
||||
PAGE_FLIP_ON_SEND_CURRENT.with(|c| c.get())
|
||||
}
|
||||
|
||||
pub fn set_page_flip_on_send(enabled: bool) {
|
||||
PAGE_FLIP_ON_SEND_CURRENT.with(|c| c.set(enabled));
|
||||
PAGE_FLIP_ON_SEND_LOADED.with(|l| l.set(true));
|
||||
}
|
||||
|
||||
// -- Simple mode --------------------------------------------------------------
|
||||
|
||||
thread_local! {
|
||||
|
|
@ -545,6 +574,7 @@ pub fn prime(ui: &UiConfig) {
|
|||
set(ui.compact_mode);
|
||||
set_timestamps(ui.show_timestamps.unwrap_or(TIMESTAMPS_DEFAULT));
|
||||
set_show_timeline(ui.show_timeline_enabled());
|
||||
set_page_flip_on_send(ui.page_flip_on_send_enabled());
|
||||
set_simple_mode(ui.simple_mode.unwrap_or(SIMPLE_MODE_DEFAULT));
|
||||
set_keep_text_selection(text_selection_from_ui(ui));
|
||||
// Layered-config keys (not the `UiConfig` arg) — seed so the first frame
|
||||
|
|
@ -656,6 +686,7 @@ mod tests {
|
|||
assert_eq!(COMPACT_DEFAULT, ui.compact_mode);
|
||||
assert_eq!(TIMESTAMPS_DEFAULT, ui.show_timestamps.unwrap_or(true));
|
||||
assert_eq!(TIMELINE_DEFAULT, ui.show_timeline_enabled());
|
||||
assert_eq!(PAGE_FLIP_ON_SEND_DEFAULT, ui.page_flip_on_send_enabled());
|
||||
assert_eq!(SIMPLE_MODE_DEFAULT, ui.simple_mode.unwrap_or(true));
|
||||
assert_eq!(VIM_MODE_DEFAULT, ui.vim_mode.unwrap_or(false));
|
||||
assert_eq!(
|
||||
|
|
@ -726,6 +757,18 @@ mod tests {
|
|||
.unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn set_then_load_round_trips_page_flip_on_send() {
|
||||
std::thread::spawn(|| {
|
||||
set_page_flip_on_send(true);
|
||||
assert!(load_page_flip_on_send());
|
||||
set_page_flip_on_send(false);
|
||||
assert!(!load_page_flip_on_send());
|
||||
})
|
||||
.join()
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn set_then_load_round_trips_simple_mode() {
|
||||
std::thread::spawn(|| {
|
||||
|
|
|
|||
Loading…
Reference in a new issue