Delete Workspace Contents
Deletes files in skills/sauna and documents
Source Code
import fs from "fs";
import path from "path";
const [skillsPath, documentsPath, excludeSkillId] = process.argv.slice(2);
if (!skillsPath || !documentsPath) {
console.error("Usage: skillsPath documentsPath [excludeSkillId]");
process.exit(1);
}
/**
* Recursively delete a directory
*/
function deleteDir(dir) {
if (!fs.existsSync(dir)) return 0;
let count = 0;
const entries = fs.readdirSync(dir, { withFileTypes: true });
for (const entry of entries) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
count += deleteDir(fullPath);
fs.rmdirSync(fullPath);
} else {
fs.unlinkSync(fullPath);
count++;
}
}
return count;
}
/**
* Check if a directory contains the skill to preserve
*/
function containsPreservedSkill(dir, excludedSkillName) {
if (!excludedSkillName) return false;
if (!fs.existsSync(dir)) return false;
const files = fs.readdirSync(dir);
return files.some((f) => f.includes(excludedSkillName));
}
try {
console.log("Starting workspace reset...\n");
let deletedSkills = 0;
let deletedDocuments = 0;
let preservedSkill = null;
// Extract skill name from ID for matching
const excludedSkillName = excludeSkillId ? excludeSkillId.replace("skill:", "") : null;
// Delete skills/sauna contents
if (fs.existsSync(skillsPath)) {
const skillItems = fs.readdirSync(skillsPath);
for (const item of skillItems) {
const itemPath = path.join(skillsPath, item);
const stats = fs.statSync(itemPath);
if (stats.isDirectory()) {
if (containsPreservedSkill(itemPath, excludedSkillName)) {
preservedSkill = item;
console.log(`✓ Preserved: ${item}`);
continue;
}
const count = deleteDir(itemPath);
fs.rmdirSync(itemPath);
console.log(`✗ Deleted skill: ${item} (${count} files)`);
deletedSkills++;
} else {
fs.unlinkSync(itemPath);
console.log(`✗ Deleted file: ${item}`);
deletedSkills++;
}
}
}
// Delete documents contents
if (fs.existsSync(documentsPath)) {
const docItems = fs.readdirSync(documentsPath);
for (const item of docItems) {
const itemPath = path.join(documentsPath, item);
const stats = fs.statSync(itemPath);
if (stats.isDirectory()) {
const count = deleteDir(itemPath);
fs.rmdirSync(itemPath);
console.log(`✗ Deleted folder: ${item} (${count} files)`);
} else {
fs.unlinkSync(itemPath);
console.log(`✗ Deleted document: ${item}`);
}
deletedDocuments++;
}
}
console.log("\n=== RESET COMPLETE ===");
console.log(`Skills deleted: ${deletedSkills}`);
console.log(`Documents deleted: ${deletedDocuments}`);
if (preservedSkill) {
console.log(`Skill preserved: ${preservedSkill}`);
}
// Output structured data for agent
console.log(
JSON.stringify({
success: true,
deletedSkills,
deletedDocuments,
preservedSkill,
})
);
} catch (error) {
console.error("Error during reset:", error.message);
process.exit(1);
}