feat: full plugin integration + cross-agent rules

This commit is contained in:
Emeriko
2026-06-12 03:25:15 +02:00
parent 2c8c175b4f
commit 7a3475c0f4
18 changed files with 673 additions and 14 deletions
+57
View File
@@ -0,0 +1,57 @@
#!/usr/bin/env node
// ponytail — shared configuration resolver
//
// Resolution order for default mode:
// 1. PONYTAIL_DEFAULT_MODE environment variable
// 2. Config file defaultMode field:
// - $XDG_CONFIG_HOME/ponytail/config.json (any platform, if set)
// - ~/.config/ponytail/config.json (macOS / Linux fallback)
// - %APPDATA%\ponytail\config.json (Windows fallback)
// 3. 'full'
const fs = require('fs');
const path = require('path');
const os = require('os');
const VALID_MODES = ['off', 'lite', 'full', 'ultra', 'review'];
function getConfigDir() {
if (process.env.XDG_CONFIG_HOME) {
return path.join(process.env.XDG_CONFIG_HOME, 'ponytail');
}
if (process.platform === 'win32') {
return path.join(
process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Roaming'),
'ponytail'
);
}
return path.join(os.homedir(), '.config', 'ponytail');
}
function getConfigPath() {
return path.join(getConfigDir(), 'config.json');
}
function getDefaultMode() {
// 1. Environment variable (highest priority)
const envMode = process.env.PONYTAIL_DEFAULT_MODE;
if (envMode && VALID_MODES.includes(envMode.toLowerCase())) {
return envMode.toLowerCase();
}
// 2. Config file
try {
const configPath = getConfigPath();
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
if (config.defaultMode && VALID_MODES.includes(config.defaultMode.toLowerCase())) {
return config.defaultMode.toLowerCase();
}
} catch (e) {
// Config file doesn't exist or is invalid — fall through
}
// 3. Default
return 'full';
}
module.exports = { getDefaultMode, getConfigDir, getConfigPath, VALID_MODES };