feat(pi): add native catalog and gateway data plane

This commit is contained in:
SaladDay
2026-08-02 22:52:26 +00:00
parent 26a95aeb05
commit 7609ff799e
70 changed files with 10738 additions and 367 deletions
+42 -1
View File
@@ -156,6 +156,26 @@ pub(crate) fn inspect_pi_native_entry(
PiNativeInspectionService::inspect_entry(path, provider_key, managed_claims)
}
/// Compose a database-authoritative managed provider through the same raw and
/// composer layers used by native inspection. Runtime construction must not
/// reimplement inheritance or field semantics.
pub(crate) fn compose_managed_pi_provider(
provider_key: &str,
config: &PiManagedProviderConfig,
) -> Result<PiNativeComposition, AppError> {
validate_pi_managed_provider(config)
.map_err(|error| AppError::InvalidInput(error.to_string()))?;
let value =
serde_json::to_value(config).map_err(|source| AppError::JsonSerialize { source })?;
let raw = evaluate_provider_value(&value);
let provider = raw.valid_provider.as_ref().ok_or_else(|| {
AppError::Config(format!(
"managed Pi provider '{provider_key}' did not pass the pinned raw schema"
))
})?;
Ok(compose_explicit_custom_catalog(provider_key, provider))
}
fn normalize_pi_agent_dir(value: &str, home: &Path) -> Result<PathBuf, AppError> {
if value == "~" {
return Ok(home.to_path_buf());
@@ -180,7 +200,15 @@ fn normalize_pi_agent_dir(value: &str, home: &Path) -> Result<PathBuf, AppError>
Ok(PathBuf::from(value))
}
pub(crate) fn get_pi_agent_dir() -> Result<PathBuf, AppError> {
pub(crate) fn get_pi_agent_dir_for_override(
override_dir: Option<&str>,
) -> Result<PathBuf, AppError> {
if let Some(override_dir) = override_dir
.map(str::trim)
.filter(|value| !value.is_empty())
{
return Ok(crate::settings::resolve_override_path(override_dir));
}
let Some(raw) = std::env::var_os("PI_CODING_AGENT_DIR") else {
return Ok(get_home_dir().join(".pi").join("agent"));
};
@@ -190,6 +218,19 @@ pub(crate) fn get_pi_agent_dir() -> Result<PathBuf, AppError> {
normalize_pi_agent_dir(&raw.to_string_lossy(), &get_home_dir())
}
pub(crate) fn get_pi_agent_dir() -> Result<PathBuf, AppError> {
if let Some(override_dir) = crate::settings::get_pi_override_dir() {
return Ok(override_dir);
}
get_pi_agent_dir_for_override(None)
}
pub(crate) fn get_pi_models_path_for_override(
override_dir: Option<&str>,
) -> Result<PathBuf, AppError> {
Ok(get_pi_agent_dir_for_override(override_dir)?.join("models.json"))
}
pub(crate) fn get_pi_models_path() -> Result<PathBuf, AppError> {
Ok(get_pi_agent_dir()?.join("models.json"))
}