§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:
ZacharyZhang-NY committed 2026-07-18 02:48:46 -04:00
1 parent 86e3724310
commit 6f31415ed6
1056 files changed
+8410 -18307

No files matched your search

@@ -1,11 +1,11 @@
//! Client-registered hooks for [`SessionActor`].
//!
//! Hooks registered at `session/new` (`_meta["x.ai/hooks"]`) come in two flavors,
//! Hooks registered at `session/new` (`_meta["kigi/hooks"]`) come in two flavors,
//! both matched by the agent ([`kigi_hooks::matcher::HookMatcher`], shared with
//! file hooks):
//! - **`PreToolUse` gate**: an awaited reverse *request* `x.ai/hooks/run`; a `deny`
//! - **`PreToolUse` gate**: an awaited reverse *request* `kigi/hooks/run`; a `deny`
//! blocks the tool.
//! - **All other events**: fire-and-forget *notifications* `x.ai/hooks/event`,
//! - **All other events**: fire-and-forget *notifications* `kigi/hooks/event`,
//! observe-only (the callback's return is ignored). Sent per matching callback.
use std::sync::Arc;
@@ -23,10 +23,10 @@ use crate::extensions::hooks::{
};
use crate::sampling::types::ToolCallResponse;
const HOOK_EVENT_METHOD: &str = "x.ai/hooks/event";
const HOOK_RUN_METHOD: &str = "x.ai/hooks/run";
const HOOK_EVENT_METHOD: &str = "kigi/hooks/event";
const HOOK_RUN_METHOD: &str = "kigi/hooks/run";
/// Default per-callback bound for a client's `x.ai/hooks/run` reply; on timeout the gate
/// Default per-callback bound for a client's `kigi/hooks/run` reply; on timeout the gate
/// fails open (the tool proceeds).
///
/// Some external hosts default to 600s per hook; we default to 30s because our gate sits
@@ -47,7 +47,7 @@ enum ClientHookGateOutcome {
UnknownDecision,
}
/// Outcome of the `x.ai/hooks/run` reverse request, before interpreting it as a
/// Outcome of the `kigi/hooks/run` reverse request, before interpreting it as a
/// decision. Separate so [`classify`] stays pure and unit-testable.
enum ReverseOutcome {
Responded(Arc<RawValue>),
@@ -68,7 +68,7 @@ fn classify(outcome: ReverseOutcome) -> (ClientHookResponse, ClientHookGateOutco
ClientHookDecision::Deny => ClientHookGateOutcome::Denied,
ClientHookDecision::Other => {
tracing::warn!(
"x.ai/hooks/run returned an unknown decision value; failing open"
"kigi/hooks/run returned an unknown decision value; failing open"
);
ClientHookGateOutcome::UnknownDecision
}
@@ -77,7 +77,7 @@ fn classify(outcome: ReverseOutcome) -> (ClientHookResponse, ClientHookGateOutco
(resp, label)
}
Err(err) => {
tracing::warn!(%err, "malformed x.ai/hooks/run response; failing open");
tracing::warn!(%err, "malformed kigi/hooks/run response; failing open");
(
ClientHookResponse::default(),
ClientHookGateOutcome::Malformed,
@@ -86,14 +86,14 @@ fn classify(outcome: ReverseOutcome) -> (ClientHookResponse, ClientHookGateOutco
}
}
ReverseOutcome::Transport(err) => {
tracing::warn!(%err, "x.ai/hooks/run transport error (no client wired?); failing open");
tracing::warn!(%err, "kigi/hooks/run transport error (no client wired?); failing open");
(
ClientHookResponse::default(),
ClientHookGateOutcome::TransportError,
)
}
ReverseOutcome::Timeout => {
tracing::warn!("x.ai/hooks/run timed out; failing open");
tracing::warn!("kigi/hooks/run timed out; failing open");
(
ClientHookResponse::default(),
ClientHookGateOutcome::TimedOut,
@@ -206,7 +206,7 @@ impl SessionActor {
}
/// Run the client-registered `PreToolUse` hooks for `call`, firing
/// `x.ai/hooks/run` once per matching callback with the shared `envelope` (the
/// `kigi/hooks/run` once per matching callback with the shared `envelope` (the
/// same payload file hooks and observe events receive).
///
/// Returns `Some(ToolLoop::HookDenied)` on the first deny, else `None`.
@@ -285,7 +285,7 @@ impl SessionActor {
Ok(None)
}
/// Issue one `x.ai/hooks/run` reverse request, bounded by a per-callback `timeout`.
/// Issue one `kigi/hooks/run` reverse request, bounded by a per-callback `timeout`.
async fn send_hook_run(
&self,
dispatch: &ClientHookDispatch<'_>,
@@ -305,7 +305,7 @@ impl SessionActor {
}
/// Fire observe-only client hooks for `envelope`'s event: send an
/// `x.ai/hooks/event` notification to each matching registered callback.
/// `kigi/hooks/event` notification to each matching registered callback.
/// Fire-and-forget (no decision is consumed); independent of file hooks, so it
/// runs even when no on-disk hook registry exists. No-op when nothing is registered.
pub(super) fn notify_client_hooks(&self, envelope: &HookEventEnvelope) {