§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:
@@ -23,14 +23,14 @@ use tokio::io::AsyncReadExt;
|
||||
// Marker constants
|
||||
// ============================================================================
|
||||
|
||||
const BASH_STATE_START_MARKER: &str = "__GROK_BASH_STATE_START__";
|
||||
const BASH_STATE_END_MARKER: &str = "__GROK_BASH_STATE_END__";
|
||||
const ZSH_STATE_START_MARKER: &str = "__GROK_ZSH_STATE_START__";
|
||||
const ZSH_STATE_END_MARKER: &str = "__GROK_ZSH_STATE_END__";
|
||||
const BASH_STATE_START_MARKER: &str = "__KIGI_BASH_STATE_START__";
|
||||
const BASH_STATE_END_MARKER: &str = "__KIGI_BASH_STATE_END__";
|
||||
const ZSH_STATE_START_MARKER: &str = "__KIGI_ZSH_STATE_START__";
|
||||
const ZSH_STATE_END_MARKER: &str = "__KIGI_ZSH_STATE_END__";
|
||||
|
||||
/// Marker emitted by the init path to separate login-shell noise (MOTD, etc.)
|
||||
/// from the actual state dump on stdout.
|
||||
const INIT_STATE_MARKER: &str = "__GROK_INIT_STATE_MARKER__";
|
||||
const INIT_STATE_MARKER: &str = "__KIGI_INIT_STATE_MARKER__";
|
||||
|
||||
/// Maximum time to wait for a shell state init (login shell + rc files).
|
||||
const INIT_TIMEOUT: Duration = Duration::from_secs(15);
|
||||
@@ -47,7 +47,7 @@ pub fn shell_env_overrides() -> HashMap<String, String> {
|
||||
("TERM".to_string(), "dumb".to_string()),
|
||||
("NO_COLOR".to_string(), "1".to_string()),
|
||||
("FORCE_COLOR".to_string(), "0".to_string()),
|
||||
// Re-applied last via [`crate::util::apply_grok_agent_marker`] so request
|
||||
// Re-applied last via [`crate::util::apply_kigi_agent_marker`] so request
|
||||
// env cannot clear it.
|
||||
(
|
||||
crate::util::KIGI_AGENT_ENV.to_string(),
|
||||
@@ -88,15 +88,15 @@ dump_bash_state() {
|
||||
local content="$1"
|
||||
local var_name="$2"
|
||||
if [[ -n "$content" ]]; then
|
||||
builtin printf 'grok_snap_%s=$(command base64 -d <<'"'"'KIGI_SNAP_EOF_%s'"'"'\n' "$var_name" "$var_name"
|
||||
builtin printf 'kigi_snap_%s=$(command base64 -d <<'"'"'KIGI_SNAP_EOF_%s'"'"'\n' "$var_name" "$var_name"
|
||||
command base64 <<<"$content" | command tr -d '\n'
|
||||
builtin printf '\nKIGI_SNAP_EOF_%s\n' "$var_name"
|
||||
builtin printf ')\n'
|
||||
builtin printf 'eval "$grok_snap_%s"\n' "$var_name"
|
||||
builtin printf 'eval "$kigi_snap_%s"\n' "$var_name"
|
||||
fi
|
||||
}
|
||||
|
||||
_emit "__GROK_BASH_STATE_START__"
|
||||
_emit "__KIGI_BASH_STATE_START__"
|
||||
|
||||
_emit "$PWD"
|
||||
|
||||
@@ -121,7 +121,7 @@ dump_bash_state() {
|
||||
_emit_encoded "$aliases" "ALIASES_B64"
|
||||
|
||||
_emit "# end of bash state dump"
|
||||
_emit "__GROK_BASH_STATE_END__"
|
||||
_emit "__KIGI_BASH_STATE_END__"
|
||||
}
|
||||
"##;
|
||||
|
||||
@@ -142,15 +142,15 @@ function dump_zsh_state() {
|
||||
local content="$1"
|
||||
local var_name="$2"
|
||||
if [[ -n "$content" ]]; then
|
||||
builtin printf 'grok_snap_%s=$(command base64 -d <<'"'"'KIGI_SNAP_EOF_%s'"'"'\n' "$var_name" "$var_name"
|
||||
builtin printf 'kigi_snap_%s=$(command base64 -d <<'"'"'KIGI_SNAP_EOF_%s'"'"'\n' "$var_name" "$var_name"
|
||||
command base64 <<<"$content" | command tr -d '\n'
|
||||
builtin printf '\nKIGI_SNAP_EOF_%s\n' "$var_name"
|
||||
builtin printf ')\n'
|
||||
builtin printf 'eval "$grok_snap_%s"\n' "$var_name"
|
||||
builtin printf 'eval "$kigi_snap_%s"\n' "$var_name"
|
||||
fi
|
||||
}
|
||||
|
||||
_emit "__GROK_ZSH_STATE_START__"
|
||||
_emit "__KIGI_ZSH_STATE_START__"
|
||||
|
||||
_emit "$PWD"
|
||||
|
||||
@@ -171,7 +171,7 @@ function dump_zsh_state() {
|
||||
_emit_encoded "$aliases" "ALIASES_B64"
|
||||
|
||||
_emit "# end of zsh state dump"
|
||||
_emit "__GROK_ZSH_STATE_END__"
|
||||
_emit "__KIGI_ZSH_STATE_END__"
|
||||
}
|
||||
"##;
|
||||
|
||||
@@ -688,11 +688,11 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn parse_dump_valid_bash() {
|
||||
let raw = "__GROK_BASH_STATE_START__\n\
|
||||
let raw = "__KIGI_BASH_STATE_START__\n\
|
||||
/home/user/project\n\
|
||||
export FOO=bar\n\
|
||||
# end of bash state dump\n\
|
||||
__GROK_BASH_STATE_END__\n";
|
||||
__KIGI_BASH_STATE_END__\n";
|
||||
let (cwd, rest) = parse_dump(ShellKind::Bash, raw).unwrap();
|
||||
assert_eq!(cwd, PathBuf::from("/home/user/project"));
|
||||
assert!(rest.contains("export FOO=bar"));
|
||||
@@ -700,11 +700,11 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn parse_dump_valid_zsh() {
|
||||
let raw = "__GROK_ZSH_STATE_START__\n\
|
||||
let raw = "__KIGI_ZSH_STATE_START__\n\
|
||||
/tmp\n\
|
||||
typeset -x FOO=bar\n\
|
||||
# end of zsh state dump\n\
|
||||
__GROK_ZSH_STATE_END__\n";
|
||||
__KIGI_ZSH_STATE_END__\n";
|
||||
let (cwd, rest) = parse_dump(ShellKind::Zsh, raw).unwrap();
|
||||
assert_eq!(cwd, PathBuf::from("/tmp"));
|
||||
assert!(rest.contains("typeset -x FOO=bar"));
|
||||
@@ -712,28 +712,28 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn parse_dump_missing_start_marker() {
|
||||
let raw = "/home/user\nexport FOO=bar\n__GROK_BASH_STATE_END__\n";
|
||||
let raw = "/home/user\nexport FOO=bar\n__KIGI_BASH_STATE_END__\n";
|
||||
assert!(parse_dump(ShellKind::Bash, raw).is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_dump_missing_end_marker() {
|
||||
let raw = "__GROK_BASH_STATE_START__\n/home/user\nexport FOO=bar\n";
|
||||
let raw = "__KIGI_BASH_STATE_START__\n/home/user\nexport FOO=bar\n";
|
||||
assert!(parse_dump(ShellKind::Bash, raw).is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_dump_wrong_shell_markers() {
|
||||
let raw = "__GROK_ZSH_STATE_START__\n/tmp\nstuff\n__GROK_ZSH_STATE_END__\n";
|
||||
let raw = "__KIGI_ZSH_STATE_START__\n/tmp\nstuff\n__KIGI_ZSH_STATE_END__\n";
|
||||
assert!(parse_dump(ShellKind::Bash, raw).is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_dump_empty_snapshot() {
|
||||
let raw = "__GROK_BASH_STATE_START__\n\
|
||||
let raw = "__KIGI_BASH_STATE_START__\n\
|
||||
/home/user\n\
|
||||
# end of bash state dump\n\
|
||||
__GROK_BASH_STATE_END__\n";
|
||||
__KIGI_BASH_STATE_END__\n";
|
||||
let (cwd, rest) = parse_dump(ShellKind::Bash, raw).unwrap();
|
||||
assert_eq!(cwd, PathBuf::from("/home/user"));
|
||||
assert!(rest.contains("# end of bash state dump"));
|
||||
@@ -741,15 +741,15 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn parse_after_marker_found() {
|
||||
let output = "Welcome to Ubuntu\nMOTD line\n__GROK_INIT_STATE_MARKER__\nactual data\n";
|
||||
let result = parse_after_marker(output, "__GROK_INIT_STATE_MARKER__");
|
||||
let output = "Welcome to Ubuntu\nMOTD line\n__KIGI_INIT_STATE_MARKER__\nactual data\n";
|
||||
let result = parse_after_marker(output, "__KIGI_INIT_STATE_MARKER__");
|
||||
assert_eq!(result, "actual data\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_after_marker_not_found() {
|
||||
let output = "just some output\n";
|
||||
let result = parse_after_marker(output, "__GROK_INIT_STATE_MARKER__");
|
||||
let result = parse_after_marker(output, "__KIGI_INIT_STATE_MARKER__");
|
||||
assert_eq!(result, output);
|
||||
}
|
||||
|
||||
@@ -797,11 +797,11 @@ mod tests {
|
||||
shell: ShellKind::Bash,
|
||||
};
|
||||
|
||||
let dump = "__GROK_BASH_STATE_START__\n\
|
||||
let dump = "__KIGI_BASH_STATE_START__\n\
|
||||
/new/dir\n\
|
||||
export X=1\n\
|
||||
# end of bash state dump\n\
|
||||
__GROK_BASH_STATE_END__\n";
|
||||
__KIGI_BASH_STATE_END__\n";
|
||||
assert!(state.update_from_dump(dump));
|
||||
assert_eq!(state.cwd, PathBuf::from("/new/dir"));
|
||||
assert!(state.snapshot.contains("export X=1"));
|
||||
@@ -832,7 +832,7 @@ mod tests {
|
||||
assert!(state.cwd.is_absolute());
|
||||
// The snapshot should contain at least some env var exports
|
||||
assert!(
|
||||
state.snapshot.contains("grok_snap_") || state.snapshot.is_empty(),
|
||||
state.snapshot.contains("kigi_snap_") || state.snapshot.is_empty(),
|
||||
"snapshot should contain encoded blocks or be empty: {:?}",
|
||||
&state.snapshot[..state.snapshot.len().min(200)]
|
||||
);
|
||||
@@ -995,13 +995,13 @@ mod tests {
|
||||
let cwd = std::env::current_dir().unwrap();
|
||||
let mut state = ShellState::init(ShellKind::Bash, &cwd).await.unwrap();
|
||||
|
||||
let (code, _) = run_command(&mut state, "export GPG_TTY=/grok-sentinel-tty").await;
|
||||
let (code, _) = run_command(&mut state, "export GPG_TTY=/kigi-sentinel-tty").await;
|
||||
assert_eq!(code, 0);
|
||||
|
||||
let (code, stdout) = run_command(&mut state, "echo \"[$GPG_TTY]\"").await;
|
||||
assert_eq!(code, 0);
|
||||
assert!(
|
||||
!stdout.contains("/grok-sentinel-tty"),
|
||||
!stdout.contains("/kigi-sentinel-tty"),
|
||||
"GPG_TTY must not persist across commands via the snapshot, got: {stdout:?}"
|
||||
);
|
||||
}
|
||||
@@ -1015,13 +1015,13 @@ mod tests {
|
||||
let cwd = std::env::current_dir().unwrap();
|
||||
let mut state = ShellState::init(ShellKind::Zsh, &cwd).await.unwrap();
|
||||
|
||||
let (code, _) = run_command(&mut state, "export GPG_TTY=/grok-sentinel-tty").await;
|
||||
let (code, _) = run_command(&mut state, "export GPG_TTY=/kigi-sentinel-tty").await;
|
||||
assert_eq!(code, 0);
|
||||
|
||||
let (code, stdout) = run_command(&mut state, "echo \"[$GPG_TTY]\"").await;
|
||||
assert_eq!(code, 0);
|
||||
assert!(
|
||||
!stdout.contains("/grok-sentinel-tty"),
|
||||
!stdout.contains("/kigi-sentinel-tty"),
|
||||
"GPG_TTY must not persist across commands via the snapshot, got: {stdout:?}"
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user