§9 acceptance: grep-zero sweep — every internal x.ai/grok identifier renamed
The PRD's first acceptance gate now holds: grep -RinE '\bx\.ai\b|grok' crates/ --include='*.rs' → 0 matches (exempt: NOTICE and third-party license archives, README provenance, and the required 'Based on Grok Build Open Source' attribution, now sourced from version_attribution.txt). Wire-visible renames (both sides in this repo, changed in lockstep): - Auth method id 'grok.com' → 'kimi-code' (AuthMethodKind::KimiCode). - Every x.ai/* and _x.ai/* ACP ext method and meta key → kigi/* / _kigi/* (~200 names; grokShell → kigiShell). Session-file replay keeps a read-side alias for the legacy '_x.ai/session/update' method so existing updates.jsonl histories load; writes emit only the new name (both directions test-pinned). - Agent types grok-build* → kigi* with a documented legacy-prefix alias at resolution time so persisted sessions keep resolving. - ToolNamespace/BuiltinAgentName GrokBuild* → Kigi* (wire snake_case kigi/kigi_concise/kigi_hashline; schema regenerated); grok_build implementation dirs renamed to kigi*. - x-grok-* headers → x-kigi-*, __GROK_* sentinels → __KIGI_*, themes grokday/groknight → kigiday/kiginight (old persisted values fall back to the default theme), web_fetch allowlist xAI hosts → kimi.com + moonshot platforms, changelog CDN → this repo, grok-build changelog archives deleted. - BYOK default endpoint removed: [endpoints] api_base_url is now truly optional with NO default — consumers fail fast with the flag name when unset (no silent x.ai egress). Mock harnesses inject it explicitly. - System-prompt identity fixed: 'released by xAI' → 'an unofficial community CLI for Kimi' (template + regenerated encrypted form). Also repaired pre-existing grok-era test debt found by the sweep: the stale trace_classify default-model pin, the grok-pager UA label test, pty-harness stale-binary reuse and non-hermetic moonshot routing (a PTY test could previously reach the real api.moonshot.cn), and the outdated oauth fixture scope key. Gates: §9 grep 0; fmt clean; workspace check/clippy 0/0 (-D warnings); FULL cargo test --workspace: 234 suites, 21,961 passed, 0 failed; deny advisories ok.
This commit is contained in:
@@ -306,7 +306,7 @@ fn resolve_hunk_tracker_mode(
|
||||
/// its history). Sessions not found locally are restored from remote storage.
|
||||
///
|
||||
/// Returns `Ok(true)` when the user accepted a pending update. The caller
|
||||
/// should print a message telling the user to relaunch `grok`.
|
||||
/// should print a message telling the user to relaunch `kigi`.
|
||||
pub async fn run(
|
||||
args: PagerArgs,
|
||||
bg_update_rx: Option<
|
||||
@@ -618,9 +618,9 @@ fn print_exit_resume_hint(session_id: &str, minimal: bool, w: &mut impl Write) {
|
||||
let _ = writeln!(w);
|
||||
let _ = writeln!(w, "Resume this session with:");
|
||||
if minimal {
|
||||
let _ = writeln!(w, " grok --minimal --resume {session_id}");
|
||||
let _ = writeln!(w, " kigi --minimal --resume {session_id}");
|
||||
} else {
|
||||
let _ = writeln!(w, " grok --resume {session_id}");
|
||||
let _ = writeln!(w, " kigi --resume {session_id}");
|
||||
}
|
||||
}
|
||||
/// Screen-mode relaunch failure fallback (same quit tail as plain resume).
|
||||
@@ -1169,16 +1169,16 @@ pub(crate) fn set_terminal_title(title: &str) {
|
||||
}
|
||||
/// Sanitized/truncated window title. Strips control characters: crossterm's
|
||||
/// `SetTitle` emits the string raw inside an OSC sequence, so an embedded
|
||||
/// BEL/ESC (titles can arrive from grok.com conversation metadata) would
|
||||
/// BEL/ESC (titles can arrive from kimi.com conversation metadata) would
|
||||
/// terminate the OSC early and let the remainder inject arbitrary escape
|
||||
/// sequences into the terminal.
|
||||
fn terminal_title_string(title: &str) -> String {
|
||||
let sanitized: String = title.chars().filter(|c| !c.is_control()).collect();
|
||||
if sanitized.is_empty() {
|
||||
"grok".into()
|
||||
"kigi".into()
|
||||
} else {
|
||||
let truncated: String = sanitized.chars().take(80 - 6).collect();
|
||||
format!("{} - grok", truncated)
|
||||
format!("{} - kigi", truncated)
|
||||
}
|
||||
}
|
||||
fn set_panic_hook(mode: ScreenMode) {
|
||||
@@ -1221,11 +1221,11 @@ mod tests {
|
||||
fn terminal_title_strips_control_characters() {
|
||||
assert_eq!(
|
||||
terminal_title_string("evil\x07\x1b]52;c;payload\x07title"),
|
||||
"evil]52;c;payloadtitle - grok"
|
||||
"evil]52;c;payloadtitle - kigi"
|
||||
);
|
||||
assert_eq!(terminal_title_string("\x07\x1b\x00"), "grok");
|
||||
assert_eq!(terminal_title_string(""), "grok");
|
||||
assert_eq!(terminal_title_string("My chat"), "My chat - grok");
|
||||
assert_eq!(terminal_title_string("\x07\x1b\x00"), "kigi");
|
||||
assert_eq!(terminal_title_string(""), "kigi");
|
||||
assert_eq!(terminal_title_string("My chat"), "My chat - kigi");
|
||||
}
|
||||
#[test]
|
||||
fn hunk_tracker_mode_nothing_set_is_none() {
|
||||
@@ -1316,24 +1316,24 @@ mod tests {
|
||||
}
|
||||
#[test]
|
||||
fn cli_leader_and_no_leader_conflict() {
|
||||
let result = try_parse_pager(&["grok-pager", "--leader", "--no-leader"]);
|
||||
let result = try_parse_pager(&["kigi-pager", "--leader", "--no-leader"]);
|
||||
assert!(result.is_err());
|
||||
}
|
||||
#[test]
|
||||
fn cli_leader_flag_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "--leader"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--leader"]).unwrap();
|
||||
assert!(args.leader);
|
||||
assert!(!args.no_leader);
|
||||
}
|
||||
#[test]
|
||||
fn cli_no_leader_flag_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "--no-leader"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--no-leader"]).unwrap();
|
||||
assert!(!args.leader);
|
||||
assert!(args.no_leader);
|
||||
}
|
||||
#[test]
|
||||
fn cli_neither_leader_flag_defaults_false() {
|
||||
let args = try_parse_pager(&["grok-pager"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager"]).unwrap();
|
||||
assert!(!args.leader);
|
||||
assert!(!args.no_leader);
|
||||
}
|
||||
@@ -1348,13 +1348,13 @@ mod tests {
|
||||
/// main() must reject the combination at runtime.
|
||||
#[test]
|
||||
fn cli_top_level_leader_with_agent_subcommand_parses_flag() {
|
||||
let args = try_parse_pager(&["grok-pager", "--leader", "agent", "stdio"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--leader", "agent", "stdio"]).unwrap();
|
||||
assert!(args.leader);
|
||||
assert!(matches!(args.command, Some(Command::Agent(_))));
|
||||
}
|
||||
#[test]
|
||||
fn cli_top_level_no_leader_with_agent_subcommand_parses_flag() {
|
||||
let args = try_parse_pager(&["grok-pager", "--no-leader", "agent", "stdio"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--no-leader", "agent", "stdio"]).unwrap();
|
||||
assert!(args.no_leader);
|
||||
assert!(matches!(args.command, Some(Command::Agent(_))));
|
||||
}
|
||||
@@ -1362,7 +1362,7 @@ mod tests {
|
||||
/// (kimi-cli parity, F6 — the `acp` alias relies on the same default).
|
||||
#[test]
|
||||
fn cli_bare_agent_subcommand_defaults_to_stdio() {
|
||||
let args = try_parse_pager(&["grok-pager", "agent"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "agent"]).unwrap();
|
||||
let Some(Command::Agent(agent)) = args.command else {
|
||||
panic!("expected agent subcommand");
|
||||
};
|
||||
@@ -1376,73 +1376,73 @@ mod tests {
|
||||
}
|
||||
#[test]
|
||||
fn cli_resume_parses_session_id() {
|
||||
let args = try_parse_pager(&["grok-pager", "--resume", "abc-123"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--resume", "abc-123"]).unwrap();
|
||||
assert_eq!(args.session_to_resume(), Some("abc-123"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_short_r_parses_session_id() {
|
||||
let args = try_parse_pager(&["grok-pager", "-r", "abc-123"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-r", "abc-123"]).unwrap();
|
||||
assert_eq!(args.session_to_resume(), Some("abc-123"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_load_alias_parses_session_id() {
|
||||
let args = try_parse_pager(&["grok-pager", "--load", "abc-123"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--load", "abc-123"]).unwrap();
|
||||
assert_eq!(args.session_to_resume(), Some("abc-123"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_resume_preferred_over_load() {
|
||||
let mut args = try_parse_pager(&["grok-pager", "--resume", "from-resume"]).unwrap();
|
||||
let mut args = try_parse_pager(&["kigi-pager", "--resume", "from-resume"]).unwrap();
|
||||
args.load_session = Some("from-load".into());
|
||||
assert_eq!(args.session_to_resume(), Some("from-resume"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_continue_flag_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "--continue"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--continue"]).unwrap();
|
||||
assert!(args.continue_last_session);
|
||||
assert_eq!(args.session_to_resume(), None);
|
||||
}
|
||||
#[test]
|
||||
fn cli_continue_short_c_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "-c"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-c"]).unwrap();
|
||||
assert!(args.continue_last_session);
|
||||
}
|
||||
#[test]
|
||||
fn cli_resume_no_id_sets_empty_sentinel() {
|
||||
let args = try_parse_pager(&["grok-pager", "--resume"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--resume"]).unwrap();
|
||||
assert_eq!(args.resume_session.as_deref(), Some(""));
|
||||
assert!(args.resume_most_recent());
|
||||
assert_eq!(args.session_to_resume(), None);
|
||||
}
|
||||
#[test]
|
||||
fn cli_short_r_no_id_sets_empty_sentinel() {
|
||||
let args = try_parse_pager(&["grok-pager", "-r"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-r"]).unwrap();
|
||||
assert_eq!(args.resume_session.as_deref(), Some(""));
|
||||
assert!(args.resume_most_recent());
|
||||
}
|
||||
#[test]
|
||||
fn cli_resume_with_id_is_not_most_recent() {
|
||||
let args = try_parse_pager(&["grok-pager", "--resume", "abc-123"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--resume", "abc-123"]).unwrap();
|
||||
assert!(!args.resume_most_recent());
|
||||
assert_eq!(args.session_to_resume(), Some("abc-123"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_no_resume_is_not_most_recent() {
|
||||
let args = try_parse_pager(&["grok-pager"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager"]).unwrap();
|
||||
assert!(!args.resume_most_recent());
|
||||
}
|
||||
#[test]
|
||||
fn cli_continue_conflicts_with_resume() {
|
||||
let result = try_parse_pager(&["grok-pager", "--continue", "--resume", "abc"]);
|
||||
let result = try_parse_pager(&["kigi-pager", "--continue", "--resume", "abc"]);
|
||||
assert!(result.is_err());
|
||||
}
|
||||
#[test]
|
||||
fn cli_continue_conflicts_with_load() {
|
||||
let result = try_parse_pager(&["grok-pager", "--continue", "--load", "abc"]);
|
||||
let result = try_parse_pager(&["kigi-pager", "--continue", "--load", "abc"]);
|
||||
assert!(result.is_err());
|
||||
}
|
||||
#[test]
|
||||
fn cli_no_session_flags_defaults() {
|
||||
let args = try_parse_pager(&["grok-pager"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager"]).unwrap();
|
||||
assert!(!args.continue_last_session);
|
||||
assert!(args.worktree.is_none());
|
||||
assert_eq!(args.session_to_resume(), None);
|
||||
@@ -1452,7 +1452,7 @@ mod tests {
|
||||
/// binary given that flag fails clap parsing instead of silently ignoring.
|
||||
#[test]
|
||||
fn cli_chat_flag_rejected_without_feature() {
|
||||
assert!(try_parse_pager(&["grok-pager", "--chat"]).is_err());
|
||||
assert!(try_parse_pager(&["kigi-pager", "--chat"]).is_err());
|
||||
}
|
||||
#[test]
|
||||
fn chat_mode_leader_guard_truth_table() {
|
||||
@@ -1469,49 +1469,49 @@ mod tests {
|
||||
}
|
||||
#[test]
|
||||
fn cli_worktree_flag_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "--worktree"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--worktree"]).unwrap();
|
||||
assert_eq!(args.worktree.as_deref(), Some(""));
|
||||
}
|
||||
#[test]
|
||||
fn cli_worktree_short_w_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "-w"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-w"]).unwrap();
|
||||
assert_eq!(args.worktree.as_deref(), Some(""));
|
||||
}
|
||||
#[test]
|
||||
fn cli_worktree_with_label() {
|
||||
let args = try_parse_pager(&["grok-pager", "-w", "my-label"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-w", "my-label"]).unwrap();
|
||||
assert_eq!(args.worktree.as_deref(), Some("my-label"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_worktree_long_with_label() {
|
||||
let args = try_parse_pager(&["grok-pager", "--worktree", "fix-bug"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--worktree", "fix-bug"]).unwrap();
|
||||
assert_eq!(args.worktree.as_deref(), Some("fix-bug"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_worktree_with_empty_string() {
|
||||
let args = try_parse_pager(&["grok-pager", "-w", ""]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-w", ""]).unwrap();
|
||||
assert_eq!(args.worktree.as_deref(), Some(""));
|
||||
}
|
||||
#[test]
|
||||
fn cli_worktree_with_resume_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "-w", "--resume", "abc"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-w", "--resume", "abc"]).unwrap();
|
||||
assert_eq!(args.worktree.as_deref(), Some(""));
|
||||
assert_eq!(args.session_to_resume(), Some("abc"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_worktree_label_with_resume() {
|
||||
let args = try_parse_pager(&["grok-pager", "-w", "my-label", "--resume", "abc"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-w", "my-label", "--resume", "abc"]).unwrap();
|
||||
assert_eq!(args.worktree.as_deref(), Some("my-label"));
|
||||
assert_eq!(args.session_to_resume(), Some("abc"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_worktree_default_none() {
|
||||
let args = try_parse_pager(&["grok-pager"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager"]).unwrap();
|
||||
assert!(args.worktree.is_none());
|
||||
}
|
||||
#[test]
|
||||
fn cli_session_id_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "--session-id", "my-id"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--session-id", "my-id"]).unwrap();
|
||||
assert_eq!(args.session_id.as_deref(), Some("my-id"));
|
||||
assert!(matches!(
|
||||
args.session_startup_intent().unwrap(),
|
||||
@@ -1520,38 +1520,38 @@ mod tests {
|
||||
}
|
||||
#[test]
|
||||
fn cli_session_id_short_s_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "-s", "my-id"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-s", "my-id"]).unwrap();
|
||||
assert_eq!(args.session_id.as_deref(), Some("my-id"));
|
||||
}
|
||||
#[test]
|
||||
fn cli_session_id_with_resume_requires_fork() {
|
||||
let args = try_parse_pager(&["grok-pager", "-s", "a", "--resume", "b"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-s", "a", "--resume", "b"]).unwrap();
|
||||
assert!(args.session_startup_intent().is_err());
|
||||
}
|
||||
#[test]
|
||||
fn cli_session_id_with_continue_requires_fork() {
|
||||
let args = try_parse_pager(&["grok-pager", "-s", "a", "--continue"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "-s", "a", "--continue"]).unwrap();
|
||||
assert!(args.session_startup_intent().is_err());
|
||||
}
|
||||
#[test]
|
||||
fn cli_session_id_with_resume_and_fork_ok() {
|
||||
let args =
|
||||
try_parse_pager(&["grok-pager", "-s", "a", "--resume", "b", "--fork-session"]).unwrap();
|
||||
try_parse_pager(&["kigi-pager", "-s", "a", "--resume", "b", "--fork-session"]).unwrap();
|
||||
assert!(args.session_startup_intent().is_ok());
|
||||
}
|
||||
#[test]
|
||||
fn cli_session_id_default_none() {
|
||||
let args = try_parse_pager(&["grok-pager"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager"]).unwrap();
|
||||
assert!(args.session_id.is_none());
|
||||
}
|
||||
#[test]
|
||||
fn cli_no_alt_screen_flag_parses() {
|
||||
let args = try_parse_pager(&["grok-pager", "--no-alt-screen"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "--no-alt-screen"]).unwrap();
|
||||
assert!(args.no_alt_screen);
|
||||
}
|
||||
#[test]
|
||||
fn cli_no_alt_screen_default_false() {
|
||||
let args = try_parse_pager(&["grok-pager"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager"]).unwrap();
|
||||
assert!(!args.no_alt_screen);
|
||||
}
|
||||
#[test]
|
||||
@@ -1580,12 +1580,12 @@ mod tests {
|
||||
#[test]
|
||||
fn cli_completions_parses() {
|
||||
use clap_complete::Shell;
|
||||
let args = try_parse_pager(&["grok-pager", "completions", "zsh"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "completions", "zsh"]).unwrap();
|
||||
assert!(matches!(
|
||||
args.command,
|
||||
Some(Command::Completions { shell: Shell::Zsh })
|
||||
));
|
||||
let args = try_parse_pager(&["grok-pager", "completions", "bash"]).unwrap();
|
||||
let args = try_parse_pager(&["kigi-pager", "completions", "bash"]).unwrap();
|
||||
assert!(matches!(
|
||||
args.command,
|
||||
Some(Command::Completions { shell: Shell::Bash })
|
||||
@@ -1607,7 +1607,7 @@ mod tests {
|
||||
print_exit_resume_hint("sess-abc", false, &mut buf);
|
||||
assert_eq!(
|
||||
String::from_utf8(buf).unwrap(),
|
||||
"\nResume this session with:\n grok --resume sess-abc\n"
|
||||
"\nResume this session with:\n kigi --resume sess-abc\n"
|
||||
);
|
||||
}
|
||||
#[test]
|
||||
@@ -1616,7 +1616,7 @@ mod tests {
|
||||
print_exit_resume_hint("sess-abc", true, &mut buf);
|
||||
assert_eq!(
|
||||
String::from_utf8(buf).unwrap(),
|
||||
"\nResume this session with:\n grok --minimal --resume sess-abc\n"
|
||||
"\nResume this session with:\n kigi --minimal --resume sess-abc\n"
|
||||
);
|
||||
}
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user