agentaudit 3.9.20 → 3.9.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.mjs +37 -9
- package/package.json +1 -1
package/cli.mjs
CHANGED
|
@@ -58,6 +58,7 @@ function resolveProvider(flagOverride, keys) {
|
|
|
58
58
|
// ── Global flags (set in main before command routing) ────
|
|
59
59
|
let jsonMode = false;
|
|
60
60
|
let quietMode = false;
|
|
61
|
+
let modelOverride = null; // --model flag or AGENTAUDIT_MODEL env or config
|
|
61
62
|
|
|
62
63
|
// ── ANSI Colors (respects NO_COLOR and --no-color) ───────
|
|
63
64
|
|
|
@@ -1486,7 +1487,7 @@ async function auditRepo(url) {
|
|
|
1486
1487
|
'content-type': 'application/json',
|
|
1487
1488
|
},
|
|
1488
1489
|
body: JSON.stringify({
|
|
1489
|
-
model: 'claude-sonnet-4-20250514',
|
|
1490
|
+
model: modelOverride || 'claude-sonnet-4-20250514',
|
|
1490
1491
|
max_tokens: 8192,
|
|
1491
1492
|
system: systemPrompt,
|
|
1492
1493
|
messages: [{ role: 'user', content: userMessage }],
|
|
@@ -1509,22 +1510,22 @@ async function auditRepo(url) {
|
|
|
1509
1510
|
switch (resolvedProvider.id) {
|
|
1510
1511
|
case 'openrouter':
|
|
1511
1512
|
apiUrl = 'https://openrouter.ai/api/v1/chat/completions';
|
|
1512
|
-
modelName = process.env.OPENROUTER_MODEL || 'anthropic/claude-sonnet-4';
|
|
1513
|
+
modelName = modelOverride || process.env.OPENROUTER_MODEL || 'anthropic/claude-sonnet-4';
|
|
1513
1514
|
authHeaders = { 'Authorization': `Bearer ${resolvedProvider.key}`, 'HTTP-Referer': 'https://agentaudit.dev', 'X-Title': 'AgentAudit' };
|
|
1514
1515
|
break;
|
|
1515
1516
|
case 'ollama':
|
|
1516
1517
|
apiUrl = `${resolvedProvider.host}/v1/chat/completions`;
|
|
1517
|
-
modelName = resolvedProvider.model;
|
|
1518
|
+
modelName = modelOverride || resolvedProvider.model;
|
|
1518
1519
|
authHeaders = {};
|
|
1519
1520
|
break;
|
|
1520
1521
|
case 'custom':
|
|
1521
1522
|
apiUrl = resolvedProvider.url.endsWith('/chat/completions') ? resolvedProvider.url : `${resolvedProvider.url.replace(/\/$/, '')}/chat/completions`;
|
|
1522
|
-
modelName = resolvedProvider.model;
|
|
1523
|
+
modelName = modelOverride || resolvedProvider.model;
|
|
1523
1524
|
authHeaders = resolvedProvider.key ? { 'Authorization': `Bearer ${resolvedProvider.key}` } : {};
|
|
1524
1525
|
break;
|
|
1525
1526
|
default: // openai
|
|
1526
1527
|
apiUrl = 'https://api.openai.com/v1/chat/completions';
|
|
1527
|
-
modelName = 'gpt-4o';
|
|
1528
|
+
modelName = modelOverride || 'gpt-4o';
|
|
1528
1529
|
authHeaders = { 'Authorization': `Bearer ${resolvedProvider.key}` };
|
|
1529
1530
|
}
|
|
1530
1531
|
|
|
@@ -1731,9 +1732,25 @@ async function main() {
|
|
|
1731
1732
|
quietMode = rawArgs.includes('--quiet') || rawArgs.includes('-q');
|
|
1732
1733
|
// --no-color already handled at top level for `c` object
|
|
1733
1734
|
|
|
1735
|
+
// --model flag: --model=<name> or --model <name>
|
|
1736
|
+
const modelFlagIdx = rawArgs.findIndex(a => a === '--model');
|
|
1737
|
+
const modelFlagEq = rawArgs.find(a => a.startsWith('--model='));
|
|
1738
|
+
modelOverride = modelFlagEq?.split('=')[1]
|
|
1739
|
+
|| (modelFlagIdx >= 0 ? rawArgs[modelFlagIdx + 1] : null)
|
|
1740
|
+
|| process.env.AGENTAUDIT_MODEL
|
|
1741
|
+
|| loadConfig()?.preferred_model
|
|
1742
|
+
|| null;
|
|
1743
|
+
|
|
1734
1744
|
// Strip global flags from args
|
|
1735
1745
|
const globalFlags = new Set(['--json', '--quiet', '-q', '--no-color']);
|
|
1736
|
-
|
|
1746
|
+
let args = rawArgs.filter(a => !globalFlags.has(a));
|
|
1747
|
+
// Strip --model and its value
|
|
1748
|
+
args = args.filter((a, i, arr) => {
|
|
1749
|
+
if (a.startsWith('--model=')) return false;
|
|
1750
|
+
if (a === '--model') { arr[i + 1] = '__skip__'; return false; }
|
|
1751
|
+
if (a === '__skip__') return false;
|
|
1752
|
+
return true;
|
|
1753
|
+
});
|
|
1737
1754
|
|
|
1738
1755
|
if (args[0] === '-v' || args[0] === '--version') {
|
|
1739
1756
|
console.log(`agentaudit ${getVersion()}`);
|
|
@@ -1764,6 +1781,7 @@ async function main() {
|
|
|
1764
1781
|
console.log(` ${c.dim}--quiet Suppress banner${c.reset}`);
|
|
1765
1782
|
console.log(` ${c.dim}--no-color Disable colors ${c.reset}${c.dim}(also: NO_COLOR=1)${c.reset}`);
|
|
1766
1783
|
console.log(` ${c.dim}--provider <p> Force provider ${c.reset}${c.dim}(anthropic|openai|openrouter|ollama|custom)${c.reset}`);
|
|
1784
|
+
console.log(` ${c.dim}--model <m> Override model ${c.reset}${c.dim}(e.g. gpt-4o-mini, claude-3.5-sonnet)${c.reset}`);
|
|
1767
1785
|
console.log(` ${c.dim}--export Export audit payload to markdown${c.reset}`);
|
|
1768
1786
|
console.log(` ${c.dim}--debug Show raw LLM response on errors${c.reset}`);
|
|
1769
1787
|
console.log();
|
|
@@ -1775,7 +1793,9 @@ async function main() {
|
|
|
1775
1793
|
console.log();
|
|
1776
1794
|
console.log(` ${c.bold}PROVIDERS${c.reset} ${c.dim}(set any one for deep audits)${c.reset}`);
|
|
1777
1795
|
console.log(` ${c.dim}ANTHROPIC_API_KEY · OPENAI_API_KEY · OPENROUTER_API_KEY · OLLAMA_MODEL · LLM_API_URL${c.reset}`);
|
|
1778
|
-
console.log(` ${c.dim}Set default: AGENTAUDIT_PROVIDER=openai
|
|
1796
|
+
console.log(` ${c.dim}Set default: AGENTAUDIT_PROVIDER=openai AGENTAUDIT_MODEL=gpt-4o-mini${c.reset}`);
|
|
1797
|
+
console.log(` ${c.dim}Or persist: agentaudit config set provider openai${c.reset}`);
|
|
1798
|
+
console.log(` ${c.dim} agentaudit config set model gpt-4o-mini${c.reset}`);
|
|
1779
1799
|
console.log(` ${c.dim}Run ${c.cyan}agentaudit status${c.dim} to check configuration.${c.reset}`);
|
|
1780
1800
|
console.log();
|
|
1781
1801
|
process.exitCode = 0; return;
|
|
@@ -1858,9 +1878,11 @@ async function main() {
|
|
|
1858
1878
|
const resolved = resolveProvider(null, keys);
|
|
1859
1879
|
console.log();
|
|
1860
1880
|
if (resolved) {
|
|
1861
|
-
|
|
1862
|
-
console.log(` ${c.
|
|
1881
|
+
const activeModel = modelOverride || process.env.AGENTAUDIT_MODEL || loadConfig()?.preferred_model;
|
|
1882
|
+
console.log(` ${c.bold}Active:${c.reset} ${c.green}${resolved.label}${c.reset}${activeModel ? ` ${c.dim}model: ${activeModel}${c.reset}` : ''}`);
|
|
1883
|
+
console.log(` ${c.dim}Override: --provider=<name> --model=<name>${c.reset}`);
|
|
1863
1884
|
console.log(` ${c.dim}Set default: agentaudit config set provider <name>${c.reset}`);
|
|
1885
|
+
console.log(` ${c.dim} agentaudit config set model <name>${c.reset}`);
|
|
1864
1886
|
} else {
|
|
1865
1887
|
console.log(` ${c.yellow}⚠ No working LLM provider.${c.reset} Deep audits require one.`);
|
|
1866
1888
|
console.log(` ${c.dim}Set a key: export ANTHROPIC_API_KEY=sk-ant-...${c.reset}`);
|
|
@@ -1902,6 +1924,12 @@ async function main() {
|
|
|
1902
1924
|
console.log(` ${c.green}✔${c.reset} Default provider set to: ${c.bold}${val}${c.reset}`);
|
|
1903
1925
|
console.log(` ${c.dim}Override per-command: --provider=<name>${c.reset}`);
|
|
1904
1926
|
console.log(` ${c.dim}Or env: AGENTAUDIT_PROVIDER=<name>${c.reset}`);
|
|
1927
|
+
} else if (subCmd === 'set' && targets[1] === 'model' && targets[2]) {
|
|
1928
|
+
const val = targets[2];
|
|
1929
|
+
saveConfig({ preferred_model: val });
|
|
1930
|
+
console.log(` ${c.green}✔${c.reset} Default model set to: ${c.bold}${val}${c.reset}`);
|
|
1931
|
+
console.log(` ${c.dim}Override per-command: --model=<name>${c.reset}`);
|
|
1932
|
+
console.log(` ${c.dim}Or env: AGENTAUDIT_MODEL=<name>${c.reset}`);
|
|
1905
1933
|
} else if (subCmd === 'get' || !subCmd) {
|
|
1906
1934
|
const cfg = loadConfig();
|
|
1907
1935
|
console.log(` ${c.bold}Config:${c.reset} ${USER_CONFIG_FILE}`);
|