mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-08-04 11:43:57 +08:00
feat(pi): add native catalog and gateway data plane
This commit is contained in:
@@ -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"))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user