agentaudit 3.9.23 → 3.9.25
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 +35 -5
- package/package.json +1 -1
package/cli.mjs
CHANGED
|
@@ -52,11 +52,18 @@ function resolveProvider(flagOverride, keys) {
|
|
|
52
52
|
return p;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
// Smart inference: if model
|
|
56
|
-
// → auto-select OpenRouter (which uses that format)
|
|
55
|
+
// Smart inference: if model is set, try to match it to a provider
|
|
57
56
|
const activeModel = globalModelOverride || process.env.AGENTAUDIT_MODEL || loadConfig()?.preferred_model;
|
|
58
|
-
if (activeModel
|
|
59
|
-
|
|
57
|
+
if (activeModel) {
|
|
58
|
+
const lm = activeModel.toLowerCase();
|
|
59
|
+
// Direct provider models (no slash = native format)
|
|
60
|
+
if (!lm.includes('/')) {
|
|
61
|
+
if (lm.startsWith('claude') && providers.anthropic) return providers.anthropic;
|
|
62
|
+
if ((lm.startsWith('gpt') || lm.startsWith('o3') || lm.startsWith('o4') || lm.startsWith('o1')) && providers.openai) return providers.openai;
|
|
63
|
+
if (providers.ollama && (process.env.OLLAMA_MODEL || process.env.OLLAMA_HOST)) return providers.ollama;
|
|
64
|
+
}
|
|
65
|
+
// Slash format = OpenRouter convention (provider/model)
|
|
66
|
+
if (lm.includes('/') && providers.openrouter) return providers.openrouter;
|
|
60
67
|
}
|
|
61
68
|
|
|
62
69
|
// Auto-detect priority: Anthropic > OpenAI > OpenRouter > Custom > Ollama (local last — usually weaker)
|
|
@@ -1499,6 +1506,7 @@ async function auditRepo(url) {
|
|
|
1499
1506
|
|
|
1500
1507
|
let report = null;
|
|
1501
1508
|
let _lastLlmText = '';
|
|
1509
|
+
let providerMeta = {}; // Collect provider metadata for attestation
|
|
1502
1510
|
|
|
1503
1511
|
try {
|
|
1504
1512
|
if (resolvedProvider.id === 'anthropic') {
|
|
@@ -1527,6 +1535,12 @@ async function auditRepo(url) {
|
|
|
1527
1535
|
const text = data.content?.[0]?.text || '';
|
|
1528
1536
|
_lastLlmText = text;
|
|
1529
1537
|
report = extractJSON(text);
|
|
1538
|
+
providerMeta = {
|
|
1539
|
+
provider_msg_id: data.id || null,
|
|
1540
|
+
input_tokens: data.usage?.input_tokens || null,
|
|
1541
|
+
output_tokens: data.usage?.output_tokens || null,
|
|
1542
|
+
reported_model: data.model || null,
|
|
1543
|
+
};
|
|
1530
1544
|
} else {
|
|
1531
1545
|
// OpenAI, OpenRouter, Ollama, or Custom (all use OpenAI-compatible chat completions API)
|
|
1532
1546
|
let apiUrl, modelName, authHeaders;
|
|
@@ -1575,6 +1589,13 @@ async function auditRepo(url) {
|
|
|
1575
1589
|
const text = data.choices?.[0]?.message?.content || '';
|
|
1576
1590
|
_lastLlmText = text;
|
|
1577
1591
|
report = extractJSON(text);
|
|
1592
|
+
providerMeta = {
|
|
1593
|
+
provider_msg_id: data.id || null,
|
|
1594
|
+
provider_fingerprint: data.system_fingerprint || null,
|
|
1595
|
+
input_tokens: data.usage?.prompt_tokens || null,
|
|
1596
|
+
output_tokens: data.usage?.completion_tokens || null,
|
|
1597
|
+
reported_model: data.model || null,
|
|
1598
|
+
};
|
|
1578
1599
|
}
|
|
1579
1600
|
|
|
1580
1601
|
console.log(` ${c.green}done${c.reset} ${c.dim}(${elapsed(start)})${c.reset}`);
|
|
@@ -1635,7 +1656,16 @@ async function auditRepo(url) {
|
|
|
1635
1656
|
'Authorization': `Bearer ${creds.api_key}`,
|
|
1636
1657
|
'Content-Type': 'application/json',
|
|
1637
1658
|
},
|
|
1638
|
-
body: JSON.stringify({
|
|
1659
|
+
body: JSON.stringify({
|
|
1660
|
+
...report,
|
|
1661
|
+
audit_model: providerMeta.reported_model || actualModel,
|
|
1662
|
+
audit_provider: resolvedProvider.id,
|
|
1663
|
+
provider_msg_id: providerMeta.provider_msg_id || undefined,
|
|
1664
|
+
provider_fingerprint: providerMeta.provider_fingerprint || undefined,
|
|
1665
|
+
input_tokens: providerMeta.input_tokens || undefined,
|
|
1666
|
+
output_tokens: providerMeta.output_tokens || undefined,
|
|
1667
|
+
audit_duration_ms: Date.now() - start,
|
|
1668
|
+
}),
|
|
1639
1669
|
signal: AbortSignal.timeout(15_000),
|
|
1640
1670
|
});
|
|
1641
1671
|
if (res.ok) {
|