§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:
@@ -657,13 +657,13 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_openai_format_uses_id_field() {
|
||||
let value = serde_json::json!(
|
||||
{ "id" : "grok-3", "object" : "model", "owned_by" : "xai", "context_window" :
|
||||
{ "id" : "kigi-3", "object" : "model", "owned_by" : "xai", "context_window" :
|
||||
131072 }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://api.x.ai/v1").unwrap();
|
||||
assert_eq!(result.model, "grok-3");
|
||||
assert_eq!(result.base_url, "https://api.x.ai/v1");
|
||||
assert_eq!(result.name.as_deref(), Some("grok-3"));
|
||||
let result = parse_remote_model_value(&value, "https://byok.example/v1").unwrap();
|
||||
assert_eq!(result.model, "kigi-3");
|
||||
assert_eq!(result.base_url, "https://byok.example/v1");
|
||||
assert_eq!(result.name.as_deref(), Some("kigi-3"));
|
||||
}
|
||||
#[test]
|
||||
fn parse_model_field_takes_priority_over_id() {
|
||||
@@ -753,14 +753,14 @@ mod tests {
|
||||
fn parse_reads_reasoning_effort_fields() {
|
||||
use kigi_sampling_types::ReasoningEffort;
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4.5", "context_window" : 1_000_000,
|
||||
{ "model" : "kigi-4.5", "context_window" : 1_000_000,
|
||||
"supports_reasoning_effort" : true, "reasoning_effort" : "high" }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
assert!(result.supports_reasoning_effort);
|
||||
assert_eq!(result.reasoning_effort, Some(ReasoningEffort::High));
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4.5", "contextWindow" : 1_000_000,
|
||||
{ "model" : "kigi-4.5", "contextWindow" : 1_000_000,
|
||||
"supportsReasoningEffort" : true, "reasoningEffort" : "xhigh" }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
@@ -775,7 +775,7 @@ mod tests {
|
||||
fn parse_reads_reasoning_efforts_list() {
|
||||
use kigi_sampling_types::ReasoningEffort;
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4.5", "context_window" : 1_000_000, "reasoning_efforts" :
|
||||
{ "model" : "kigi-4.5", "context_window" : 1_000_000, "reasoning_efforts" :
|
||||
[{ "id" : "deep", "value" : "xhigh", "label" : "Deep" }, { "value" :
|
||||
"quantum" }, "low",] }
|
||||
);
|
||||
@@ -819,7 +819,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_no_laziness_detector_block_yields_default() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, }
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
assert_eq!(
|
||||
@@ -830,7 +830,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_parses_camelcase_key() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
"enabled" : true, "max_nudges_per_session" : 2, "idle_threshold_ms" : 12_000,
|
||||
"min_confidence" : 0.75, }, }
|
||||
);
|
||||
@@ -847,7 +847,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_parses_snake_case_laziness_detector() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "laziness_detector" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "laziness_detector" : {
|
||||
"enabled" : true, "max_nudges_per_session" : 3, "idle_threshold_ms" : 8_000,
|
||||
"min_confidence" : 0.6, }, }
|
||||
);
|
||||
@@ -864,7 +864,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_parses_meta_laziness_detector() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "_meta" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "_meta" : {
|
||||
"lazinessDetector" : { "enabled" : true, "max_nudges_per_session" : 1,
|
||||
"idle_threshold_ms" : 15_000, "min_confidence" : 0.9, }, }, }
|
||||
);
|
||||
@@ -881,7 +881,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_partial_block_uses_field_defaults() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
"enabled" : true, }, }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
@@ -897,7 +897,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_malformed_block_falls_back_to_default() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
"enabled" : true, "max_nudges_per_session" : "abc", }, }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
@@ -909,7 +909,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_non_object_value_falls_back_to_default() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "lazinessDetector" :
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "lazinessDetector" :
|
||||
"not-an-object", }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
@@ -921,7 +921,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_top_level_camelcase_wins_over_snake_case() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
"enabled" : true, "max_nudges_per_session" : 7, }, "laziness_detector" : {
|
||||
"enabled" : false, "max_nudges_per_session" : 99, }, }
|
||||
);
|
||||
@@ -942,7 +942,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_parses_include_reasoning_under_camelcase_wrapper() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
"enabled" : true, "include_reasoning" : false, }, }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
@@ -951,7 +951,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_parses_include_reasoning_under_snake_case_wrapper() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "laziness_detector" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "laziness_detector" : {
|
||||
"enabled" : true, "include_reasoning" : true, }, }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
@@ -960,7 +960,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_omitted_include_reasoning_defaults_to_none() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
"enabled" : true, "max_nudges_per_session" : 2, }, }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
@@ -972,7 +972,7 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_remote_model_value_top_level_wins_over_meta() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
{ "model" : "kigi-4", "context_window" : 256_000, "lazinessDetector" : {
|
||||
"enabled" : true, "max_nudges_per_session" : 5, }, "_meta" : {
|
||||
"lazinessDetector" : { "enabled" : false, "max_nudges_per_session" : 99, },
|
||||
}, }
|
||||
@@ -990,19 +990,19 @@ mod tests {
|
||||
#[test]
|
||||
fn parse_reads_show_model_fingerprint_field() {
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-build", "context_window" : 256_000,
|
||||
{ "model" : "kigi", "context_window" : 256_000,
|
||||
"show_model_fingerprint" : true }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
assert!(result.show_model_fingerprint);
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-build", "contextWindow" : 256_000, "showModelFingerprint" :
|
||||
{ "model" : "kigi", "contextWindow" : 256_000, "showModelFingerprint" :
|
||||
true }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
assert!(result.show_model_fingerprint);
|
||||
let value = serde_json::json!(
|
||||
{ "model" : "grok-build", "context_window" : 256_000, "_meta" : {
|
||||
{ "model" : "kigi", "context_window" : 256_000, "_meta" : {
|
||||
"showModelFingerprint" : true } }
|
||||
);
|
||||
let result = parse_remote_model_value(&value, "https://default.url").unwrap();
|
||||
@@ -1087,10 +1087,13 @@ mod tests {
|
||||
fn list_url_derived_from_base_url() {
|
||||
let ep = endpoints(
|
||||
"https://proxy.kigi.com/v1",
|
||||
Some("https://api.x.ai/v1"),
|
||||
Some("https://byok.example/v1"),
|
||||
None,
|
||||
);
|
||||
assert_eq!(ep.resolve_models_list_url(), "https://api.x.ai/v1/models");
|
||||
assert_eq!(
|
||||
ep.resolve_models_list_url(),
|
||||
"https://byok.example/v1/models"
|
||||
);
|
||||
}
|
||||
#[test]
|
||||
fn list_url_explicit_overrides_derivation() {
|
||||
|
||||
Reference in New Issue
Block a user