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.
51 lines
1.4 KiB
Rust
51 lines
1.4 KiB
Rust
//! # kigi-hooks
|
|
//!
|
|
//! Runtime hook system for Kigi — file-based discovery, command execution,
|
|
//! and policy enforcement.
|
|
//!
|
|
//! ## Overview
|
|
//!
|
|
//! This crate provides a minimal hooks system for Kigi. Hooks are discovered
|
|
//! from dedicated directories (`~/.kigi/hooks/` and `<git-worktree-root>/.kigi/hooks/`),
|
|
//! defined in JSON files (compatible settings format), and executed as child processes.
|
|
//!
|
|
//! ## v0 scope
|
|
//!
|
|
//! - Four event types: `session_start`, `pre_tool_use`, `post_tool_use`, `session_end`
|
|
//! - Command-backed hooks only
|
|
//! - `pre_tool_use` hooks can deny/allow (blocking); all others are non-blocking
|
|
//! - Fail-open by default: hook failures do not block normal operation
|
|
//!
|
|
//! ## Quick start
|
|
//!
|
|
//! ```rust,no_run
|
|
//! use std::path::Path;
|
|
//! use kigi_hooks::discovery::load_hooks;
|
|
//! use kigi_hooks::event::HookEventName;
|
|
//!
|
|
//! let (registry, errors) = load_hooks(
|
|
//! Some(Path::new("/home/user/.kigi/hooks")),
|
|
//! Some(Path::new("/project/.kigi/hooks")),
|
|
//! );
|
|
//!
|
|
//! for err in &errors {
|
|
//! eprintln!("hook load warning: {err}");
|
|
//! }
|
|
//!
|
|
//! let pre_hooks = registry.hooks_for(HookEventName::PreToolUse);
|
|
//! println!("loaded {} pre_tool_use hooks", pre_hooks.len());
|
|
//! ```
|
|
|
|
pub mod config;
|
|
pub mod discovery;
|
|
pub mod dispatcher;
|
|
mod env_expand;
|
|
pub mod error;
|
|
pub mod event;
|
|
pub mod matcher;
|
|
pub mod result;
|
|
pub mod runner;
|
|
#[cfg(test)]
|
|
mod test_support;
|
|
pub mod trust;
|