merge: isolate agent cwd in .ideai/run/<id> (convention-file collision fix, §14.1)
This commit is contained in:
@ -80,16 +80,23 @@ impl CliAgentRuntime {
|
||||
})
|
||||
}
|
||||
|
||||
/// Resolves the profile's `cwd_template` against the project root.
|
||||
/// Resolves the profile's `cwd_template` against the supplied `base` cwd.
|
||||
///
|
||||
/// The only recognised placeholder is `{projectRoot}` (CONTEXT §9). An empty
|
||||
/// template defaults to the project root itself.
|
||||
fn resolve_cwd(profile: &AgentProfile, root: &ProjectPath) -> Result<ProjectPath, RuntimeError> {
|
||||
/// The base is the agent's **run directory** (`.ideai/run/<agent-id>/`),
|
||||
/// already computed (and created) by `LaunchAgent` and passed as the `cwd`
|
||||
/// argument of [`prepare_invocation`](AgentRuntime::prepare_invocation). The
|
||||
/// recognised placeholder is `{agentRunDir}` (ARCHITECTURE §14.1); the legacy
|
||||
/// `{projectRoot}` is still substituted with the same base for backwards
|
||||
/// compatibility (the caller always passes the run dir now). An empty template
|
||||
/// defaults to the base itself.
|
||||
fn resolve_cwd(profile: &AgentProfile, base: &ProjectPath) -> Result<ProjectPath, RuntimeError> {
|
||||
let template = profile.cwd_template.trim();
|
||||
if template.is_empty() {
|
||||
return Ok(root.clone());
|
||||
return Ok(base.clone());
|
||||
}
|
||||
let resolved = template.replace("{projectRoot}", root.as_str());
|
||||
let resolved = template
|
||||
.replace("{agentRunDir}", base.as_str())
|
||||
.replace("{projectRoot}", base.as_str());
|
||||
ProjectPath::new(resolved).map_err(|e| RuntimeError::Invocation(e.to_string()))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user