Sync Cupcake policies into mission workspaces

This commit is contained in:
2026-01-24 04:12:18 +00:00
parent 0284b10263
commit 1114e12ba0

View File

@@ -1598,6 +1598,17 @@ pub async fn prepare_mission_workspace_with_skills_backend(
)
.await?;
if workspace.workspace_type == WorkspaceType::Host {
if let Err(e) = sync_project_policy_assets(&workspace.path, &dir) {
tracing::warn!(
workspace = %workspace.name,
mission = %mission_id,
error = %e,
"Failed to sync project policy assets to mission workspace"
);
}
}
// Sync skills and tools from workspace to mission directory
if let Some(lib) = library {
let context = format!("mission-{}", mission_id);
@@ -1678,6 +1689,37 @@ pub async fn prepare_mission_workspace_with_skills_backend(
Ok(dir)
}
fn sync_project_policy_assets(workspace_root: &Path, mission_dir: &Path) -> anyhow::Result<()> {
let cupcake_src = workspace_root.join(".cupcake");
if cupcake_src.exists() {
let cupcake_dest = mission_dir.join(".cupcake");
if !cupcake_dest.exists() {
#[cfg(unix)]
{
std::os::unix::fs::symlink(&cupcake_src, &cupcake_dest)?;
}
}
}
let opencode_dir = mission_dir.join(".opencode");
if opencode_dir.exists() {
for plugin_dir in ["plugin", "plugins"] {
let src = workspace_root.join(".opencode").join(plugin_dir);
if src.exists() {
let dest = opencode_dir.join(plugin_dir);
if !dest.exists() {
#[cfg(unix)]
{
std::os::unix::fs::symlink(&src, &dest)?;
}
}
}
}
}
Ok(())
}
/// Prepare a workspace directory for a task and write `opencode.json`.
pub async fn prepare_task_workspace(
config: &Config,