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
|
|
@ -8,6 +8,33 @@ pub mod hooks;
|
|||
// unchanged.
|
||||
pub use xai_grok_shell_base::util::*;
|
||||
|
||||
pub(crate) fn is_user_instruction_path(
|
||||
path: &std::path::Path,
|
||||
grok_home: &std::path::Path,
|
||||
vendor_homes: &[(std::path::PathBuf, bool)],
|
||||
workspace_root: Option<&std::path::Path>,
|
||||
) -> bool {
|
||||
let parent = path.parent();
|
||||
let grok_rules = grok_home.join("rules");
|
||||
let is_exact_home_surface = parent
|
||||
.is_some_and(|parent| parent == grok_home || parent == grok_rules)
|
||||
|| vendor_homes.iter().any(|(vendor_home, named_enabled)| {
|
||||
parent.is_some_and(|parent| {
|
||||
(*named_enabled && parent == vendor_home) || parent == vendor_home.join("rules")
|
||||
})
|
||||
});
|
||||
if is_exact_home_surface {
|
||||
return true;
|
||||
}
|
||||
if workspace_root.is_some_and(|root| path.starts_with(root)) {
|
||||
return false;
|
||||
}
|
||||
path.starts_with(grok_home)
|
||||
|| vendor_homes
|
||||
.iter()
|
||||
.any(|(vendor_home, _)| path.starts_with(vendor_home))
|
||||
}
|
||||
|
||||
/// Aborts the wrapped tokio task when dropped.
|
||||
///
|
||||
/// Use to tie a spawned helper task's lifetime to an async scope so that
|
||||
|
|
@ -22,3 +49,35 @@ impl Drop for AbortOnDrop {
|
|||
self.0.abort();
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod is_user_instruction_path_tests {
|
||||
use super::is_user_instruction_path;
|
||||
use std::path::Path;
|
||||
|
||||
#[test]
|
||||
fn grok_home_named_file_nested_in_workspace_is_user_scoped() {
|
||||
assert!(is_user_instruction_path(
|
||||
Path::new("/repo/config/AGENTS.md"),
|
||||
Path::new("/repo/config"),
|
||||
&[],
|
||||
Some(Path::new("/repo")),
|
||||
));
|
||||
assert!(!is_user_instruction_path(
|
||||
Path::new("/repo/config/src/AGENTS.md"),
|
||||
Path::new("/repo/config"),
|
||||
&[],
|
||||
Some(Path::new("/repo")),
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn workspace_descendants_under_grok_home_stay_project_scoped() {
|
||||
assert!(!is_user_instruction_path(
|
||||
Path::new("/custom/grok/worktrees/repo/src/AGENTS.md"),
|
||||
Path::new("/custom/grok"),
|
||||
&[],
|
||||
Some(Path::new("/custom/grok/worktrees/repo")),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue