Integrate clean-slate pi assembly into agent startup
change rvswzunrtroxzqnptqwrwmkskoyyuwxx
commit d89fbffe0278ecb7dfab6b5f33d7a3ca15a6be2e
author Alpha Chen <alpha@kejadlen.dev>
date
parent uooomxsr
diff --git a/src/main.rs b/src/main.rs
index 7748498..a97395e 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -89,25 +89,6 @@ impl Ramekin {
             .create_config_directory("agent")
             .wrap_err("failed to create agent config directory")?;
 
-        for file in ["settings.json", "keybindings.json"] {
-            let path = agent_dir.join(file);
-            if !path.is_file() {
-                fs_err::write(&path, "{}")?;
-            }
-        }
-        let agents_md = agent_dir.join("AGENTS.md");
-        if !agents_md.exists() {
-            fs_err::write(&agents_md, "")?;
-        }
-
-        let extensions_dir = xdg
-            .create_config_directory("agent/extensions")
-            .wrap_err("failed to create extensions directory")?;
-        fs_err::write(extensions_dir.join("ramekin.ts"), RAMEKIN_EXTENSION)?;
-
-        xdg.create_config_directory("agent/skills")
-            .wrap_err("failed to create skills directory")?;
-
         let pi_data_dir = xdg
             .create_data_directory("")
             .wrap_err("failed to create pi data directory")?;
@@ -145,6 +126,18 @@ impl Ramekin {
         let config = config::Config::load(&workspace, builtin_mounts)
             .wrap_err("failed to load ramekin configuration")?;
 
+        // Clear and reassemble the agent dir from pi config.
+        config::clear_agent_dir(&agent_dir).wrap_err("failed to clear agent directory")?;
+
+        let resolved_pi: Vec<config::ResolvedPiEntry> =
+            config.merged_pi().iter().map(|e| e.resolve()).collect();
+        config::assemble_pi(&agent_dir, &resolved_pi).wrap_err("failed to assemble pi config")?;
+
+        // Always write ramekin.ts after assembly.
+        let extensions_dir = agent_dir.join("extensions");
+        fs_err::create_dir_all(&extensions_dir)?;
+        fs_err::write(extensions_dir.join("ramekin.ts"), RAMEKIN_EXTENSION)?;
+
         Ok(Self {
             workspace,
             agent_dir,