Synced from monorepo
Changes: - Non-blocking coding-data sharing upsell banner - Consolidate remediation in Doctor - Auto mode defers fail-closed gate asks to the classifier - Coalesce marketplace list fetches - Allow removing a marketplace source by name - Contain hung git marketplace sources (timeouts, non-blocking refresh, unbrick modal) - Label failed workspace RPCs with error_kind - Drop redundant explicit tonic/prost deps from xai-grok-shell - Report real exit codes for completed background shells - Narrow the date-rollover reminder to date-bearing templates - Wire toolOverrides through the session and agent - Security: Bash(git:*) allowlist matches whole command chain by prefix - Split prompt-trigger telemetry and record classifier provenance - Raise connectors-manager timeout to 60s - Auto classifier honors recorded approvals for repeat actions - Apply doctor fixes in the TUI - Auto-mode classifier timeouts prompt instead of silently denying - Scope subagent completion drains to the owning session - Add the toolOverrides wire types - Set client_identifier=grok-agent-sdk - Accept both spellings of the workspace-teleport kill switch - Persist one-shot occurrence journal - Stop turns that poll the exact same tool call 16x in a row - Copy compaction checkpoint files when forking sessions - Auto-focus permission prompt from scrollback - Esc cancels the running turn in non-vim and minimal modes - List Ctrl+Z undo and redo in keyboard shortcuts - Out-of-process macOS mic capture - Show active auth mode on session-info - Install the npm binary under $GROK_HOME - Remove hover/click dead zones between dashboard items - Route startup warnings to doctor - Document [feedback.user] author identity config - Extend bang command timeout - Close combine-queued edit-hold race - Integrate relocation recovery - Expose privacy notice rollout flag - Break harness discovery ref cycle so connections can idle-evict - Shift/Alt+Enter inserts newline when editing a queued prompt - Gate project Claude permissions on folder trust - Echo response.create.event_id on response.created - Toast when session creation fails from disk full - Add shared test process lifecycle - Enable dynamic workflows by default - Add relocation transaction state machine - Add shared test sandbox - Surface auth failures on model-switch compact - Persist durable scheduler expiry - Confirm before removing extensions-modal items - Re-run compact and prompt after login when compact hit expired auth - Recap sends hosted tools under backend search
This commit is contained in:
parent
3af4d5d398
commit
a5727c5960
482 changed files with 37627 additions and 13402 deletions
|
|
@ -333,7 +333,7 @@ pub fn spawn_writer_thread() -> (
|
|||
write_payload(&mut writer, &payload, &thread_sync)
|
||||
};
|
||||
if let Err(error) = result {
|
||||
tracing::error!(% error, "terminal output failed");
|
||||
tracing::error!(%error, "terminal output failed");
|
||||
return Err(error);
|
||||
}
|
||||
}
|
||||
|
|
@ -532,10 +532,10 @@ mod tests {
|
|||
write_payload(&mut sink, &payload, &sync).expect("write payload");
|
||||
assert_eq!(sink, b"frame bytes");
|
||||
assert_eq!(sync.written(), sequence);
|
||||
assert!(
|
||||
matches!(events.try_recv(), Ok(WriterEvent::Written(written)) if written ==
|
||||
sequence)
|
||||
);
|
||||
assert!(matches!(
|
||||
events.try_recv(),
|
||||
Ok(WriterEvent::Written(written)) if written == sequence
|
||||
));
|
||||
assert_eq!(
|
||||
sync.wait_drained(Duration::from_secs(1)).unwrap(),
|
||||
WriterDrain::Drained
|
||||
|
|
|
|||
|
|
@ -16,7 +16,11 @@ pub fn pager_toml_path() -> PathBuf {
|
|||
/// Derived from resolved [`grok_home()`] vs `xai_grok_config::default_grok_home()`,
|
||||
/// not from whether `GROK_HOME` is set in the environment.
|
||||
pub fn display_grok_home_prefix() -> String {
|
||||
if grok_home() == xai_grok_config::default_grok_home() {
|
||||
display_grok_home_prefix_for(&grok_home())
|
||||
}
|
||||
|
||||
fn display_grok_home_prefix_for(home: &Path) -> String {
|
||||
if home == xai_grok_config::default_grok_home() {
|
||||
"~/.grok".to_string()
|
||||
} else {
|
||||
"$GROK_HOME".to_string()
|
||||
|
|
@ -25,8 +29,12 @@ pub fn display_grok_home_prefix() -> String {
|
|||
|
||||
/// User-facing path under [`grok_home()`], e.g. ``~/.grok/config.toml``.
|
||||
pub fn display_user_grok_path(relative: impl AsRef<Path>) -> String {
|
||||
display_user_grok_path_for(&grok_home(), relative)
|
||||
}
|
||||
|
||||
fn display_user_grok_path_for(home: &Path, relative: impl AsRef<Path>) -> String {
|
||||
let rel = relative.as_ref();
|
||||
let prefix = display_grok_home_prefix();
|
||||
let prefix = display_grok_home_prefix_for(home);
|
||||
if rel.as_os_str().is_empty() {
|
||||
return prefix;
|
||||
}
|
||||
|
|
@ -431,6 +439,19 @@ mod tests {
|
|||
assert!(path.contains(".grok") || path.contains("$GROK_HOME"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn display_user_grok_path_for_custom_home_uses_override_label() {
|
||||
let custom = std::env::temp_dir().join("grok-home-display-regression");
|
||||
assert_eq!(
|
||||
display_user_grok_path_for(&custom, "config.toml"),
|
||||
"$GROK_HOME/config.toml"
|
||||
);
|
||||
assert_eq!(
|
||||
display_user_grok_path_for(&custom, "sandbox.toml"),
|
||||
"$GROK_HOME/sandbox.toml"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn abbreviate_path_uses_home_when_under_default_grok() {
|
||||
if let Ok(home) = std::env::var("HOME") {
|
||||
|
|
|
|||
Loading…
Reference in a new issue