§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:
2026-07-18 02:48:46 -04:00
parent 86e3724310
commit 6f31415ed6
1056 changed files with 8410 additions and 18307 deletions
@@ -599,10 +599,10 @@ pub fn build_classifier_request(
temperature: Some(0.0),
max_output_tokens: Some(LAZINESS_MAX_OUTPUT_TOKENS),
reasoning_effort: None,
x_grok_conv_id: session_id_str.clone(),
x_grok_req_id: Some(format!("{LAZINESS_REQ_ID_PREFIX}{}", uuid::Uuid::new_v4())),
x_grok_session_id: session_id_str,
x_grok_agent_id: Some(crate::util::agent_id::agent_id()),
x_kigi_conv_id: session_id_str.clone(),
x_kigi_req_id: Some(format!("{LAZINESS_REQ_ID_PREFIX}{}", uuid::Uuid::new_v4())),
x_kigi_session_id: session_id_str,
x_kigi_agent_id: Some(crate::util::agent_id::agent_id()),
..ConversationRequest::default()
}
}
@@ -957,7 +957,7 @@ pub struct RunArgs {
/// override surface for the offline tool — production resolves
/// `LazinessDetectorPerModelConfig::include_reasoning` separately.
pub include_reasoning: Option<bool>,
/// Grok-home directory containing the `auth.json` to consult as
/// Kigi-home directory containing the `auth.json` to consult as
/// the third API-key fallback. Defaults to
/// `kigi_shell::util::kigi_home::kigi_home()` when `None`.
/// Exposed as a CLI flag for testability.
@@ -1053,7 +1053,7 @@ pub async fn resolve_api_key(explicit: Option<&str>, kigi_home: &Path) -> Result
}
Err(anyhow!(
"no API key: pass --api-key, set XAI_API_KEY, or run `kigi login` to populate \
<grok-home>/auth.json. An expired OIDC token is auto-refreshed when a refresh_token \
<kigi-home>/auth.json. An expired OIDC token is auto-refreshed when a refresh_token \
is present; if not, re-login is required."
))
}
@@ -1061,7 +1061,7 @@ pub async fn resolve_api_key(explicit: Option<&str>, kigi_home: &Path) -> Result
/// Build an `AuthManager` for `kigi_home`, install the
/// non-interactive refresher chain, and ask for a usable key. Mirrors
/// the body of [`crate::auth::try_ensure_fresh_auth`] but accepts an
/// explicit `kigi_home` so `--grok-home` overrides work in test
/// explicit `kigi_home` so `--kigi-home` overrides work in test
/// fixtures (the upstream helper hardcodes the global `kigi_home()`
/// path).
///
@@ -1874,9 +1874,9 @@ mod tests {
assert!(req.hosted_tools.is_empty());
assert!(req.tool_choice.is_none());
assert_eq!(req.x_grok_conv_id.as_deref(), Some("sess-x"));
assert_eq!(req.x_grok_session_id.as_deref(), Some("sess-x"));
let req_id = req.x_grok_req_id.as_deref().expect("req id");
assert_eq!(req.x_kigi_conv_id.as_deref(), Some("sess-x"));
assert_eq!(req.x_kigi_session_id.as_deref(), Some("sess-x"));
let req_id = req.x_kigi_req_id.as_deref().expect("req id");
// N3: shared const for the prefix.
let suffix = req_id
.strip_prefix(LAZINESS_REQ_ID_PREFIX)
@@ -1888,7 +1888,7 @@ mod tests {
assert!(!parsed.is_nil());
assert_eq!(
req.x_grok_agent_id.as_deref(),
req.x_kigi_agent_id.as_deref(),
Some(crate::util::agent_id::agent_id().as_str())
);
}