singularity-forge/scripts/uninstall-pi-global.js
Mikael Hugo d73a73d7f3 chore: node 24 native APIs, import.meta.dirname, parsers rename, dep updates
- Replace fileURLToPath(import.meta.url) with import.meta.dirname across
  scripts and extensions
- Rename parsers-legacy.ts → parsers.ts
- Remove deleted plan/spec docs (cicd-pipeline)
- Update package.json engines and deps across workspace packages
- Update web/package-lock.json

💘 Generated with Crush

Assisted-by: GLM-5.1 via Crush <crush@charm.land>
2026-05-02 06:18:25 +02:00

65 lines
2 KiB
JavaScript

#!/usr/bin/env node
import { existsSync, readFileSync, readdirSync, rmSync, rmdirSync } from 'node:fs'
import os from 'node:os'
import { join, resolve } from 'node:path'
const __dirname = import.meta.dirname
const resourcesDir = resolve(__dirname, '..', 'src', 'resources')
const piRoot = join(os.homedir(), '.pi')
const piAgentDir = join(piRoot, 'agent')
const removed = []
const skipped = []
function safeRemove(path, label) {
if (!existsSync(path)) return
rmSync(path, { recursive: true, force: true })
removed.push(label)
}
function removeResourceEntries(containerName) {
const srcDir = join(resourcesDir, containerName)
const destDir = join(piAgentDir, containerName)
if (!existsSync(srcDir) || !existsSync(destDir)) return
for (const entry of readdirSync(srcDir)) {
safeRemove(join(destDir, entry), `${containerName}/${entry}`)
}
try {
if (readdirSync(destDir).length === 0) {
rmdirSync(destDir)
removed.push(`${containerName}/`)
}
} catch {
// ignore non-empty or missing dirs
}
}
function removeIfContentMatches(targetPath, sourcePath, label) {
if (!existsSync(targetPath) || !existsSync(sourcePath)) return
try {
const target = readFileSync(targetPath, 'utf8')
const source = readFileSync(sourcePath, 'utf8')
if (target === source) {
rmSync(targetPath, { force: true })
removed.push(label)
} else {
skipped.push(`${label} (modified, left in place)`)
}
} catch {
skipped.push(`${label} (could not verify, left in place)`)
}
}
removeResourceEntries('extensions')
removeResourceEntries('skills')
removeResourceEntries('agents')
removeIfContentMatches(join(piAgentDir, 'AGENTS.md'), join(resourcesDir, 'AGENTS.md'), 'agent/AGENTS.md')
removeIfContentMatches(join(piRoot, 'SF-WORKFLOW.md'), join(resourcesDir, 'SF-WORKFLOW.md'), 'SF-WORKFLOW.md')
process.stdout.write(
`Removed SF resources from ${piRoot}\n` +
`Removed: ${removed.length ? removed.join(', ') : '(nothing)'}\n` +
(skipped.length ? `Skipped: ${skipped.join(', ')}\n` : '')
)