Synced from monorepo
Synced from monorepo Changes: - grok-shell: send an expired external-provider credential to the sign-in flow, not a 401 loop - pager: clickable ▲ jumps to the top of the response being read - grok-shell: keep a large task log from making the completion message too long - Plan viewer scrollbar: widen grab zone to the border column; fix striped thumb in Terminal.app - pager: poll the tmux probe teardown grace instead of sleeping it - security: vendor-compat MCP kill switch is now actually enforced when reported as on - grok-shell: restore session eviction when a leader client disconnects - Bump rust-toolchain to 1.93.0 - workspace: lexical-normalize permission path patterns before glob matching - pager: reject garbage Enter in the /resume picker - pager: show Mermaid affordances in plan mode preview - pager: drop manage-account link from /session-info - workspace: auto-approve read-only git queries; defer write floor to auto classifier - Add free-form pattern editor to the "Always allow" command prompt - grok-shell: fix /btw caching - pager: Tab walks answers in the ask_user_question card - External-provider auth refresh: single 7s attempt instead of 3×5s - pager: don't resurrect finished background tasks as Running when completion arrives first - pager: report tmux truecolor clamping in Doctor - Fix plan viewer scrollbar click+drag hijacked by comment gutter - pager/shell: stop double Recap after the same last turn - sampler: preserve x-should-retry through stream collection - pager: clear plan-mode indicator immediately when the user approves a plan - pager: tmux does not re-read its config on reattach Source-Revision: 64c4de99cc822b25ce9c54ab5a4f372093d0885d
This commit is contained in:
parent
a422116582
commit
780d1388ff
323 changed files with 12258 additions and 7226 deletions
|
|
@ -20,6 +20,17 @@ use crate::views::picker::{PickerEntry, PickerField, PickerRow, PickerState};
|
|||
/// they don't collide with fuzzy-entry indices.
|
||||
pub const CONTENT_EXPAND_OFFSET: usize = 100_000;
|
||||
|
||||
/// Session id for free-text Enter (`SubmitQuery` with no selectable rows).
|
||||
///
|
||||
/// Only a trimmed UUID is loadable — pasted garbage must not call
|
||||
/// `LoadSession` (that left the TUI stuck mid-load).
|
||||
pub fn session_id_for_direct_load(query: &str) -> Option<&str> {
|
||||
let q = query.trim();
|
||||
// `Uuid::try_parse` rejects empty, multi-line, and non-UUID text.
|
||||
uuid::Uuid::try_parse(q).ok()?;
|
||||
Some(q)
|
||||
}
|
||||
|
||||
/// Derive a short repo display name from a CWD path.
|
||||
///
|
||||
/// Uses the last 2 normal path components joined by `-`. For paths with
|
||||
|
|
@ -1730,4 +1741,16 @@ mod tests {
|
|||
Some(PickerItem::Fuzzy { original_index: 0 })
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn session_id_for_direct_load_accepts_uuid_only() {
|
||||
let sid = "019fb61a-85a5-7ba0-a4ec-24647dca1893";
|
||||
assert_eq!(session_id_for_direct_load(sid), Some(sid));
|
||||
assert_eq!(session_id_for_direct_load(&format!(" {sid} ")), Some(sid));
|
||||
assert_eq!(session_id_for_direct_load("not-a-uuid"), None);
|
||||
assert_eq!(session_id_for_direct_load(""), None);
|
||||
assert_eq!(session_id_for_direct_load("pasted garbage!!!"), None);
|
||||
assert_eq!(session_id_for_direct_load("hello\nworld"), None);
|
||||
assert_eq!(session_id_for_direct_load(&format!("{sid}\nextra")), None);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue