@panguard-ai/panguard-skill-auditor 1.8.13 → 1.8.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"llm-auto-detect.d.ts","sourceRoot":"","sources":["../../src/checks/llm-auto-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKtD;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA6D3E"}
1
+ {"version":3,"file":"llm-auto-detect.d.ts","sourceRoot":"","sources":["../../src/checks/llm-auto-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAyBtD;;;;;GAKG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA2E3E"}
@@ -11,6 +11,27 @@
11
11
  */
12
12
  /** Cache Ollama availability to avoid repeated HTTP calls that spam error logs */
13
13
  let _ollamaCached;
14
+ /**
15
+ * Ask the local Ollama daemon which models are actually PULLED, and return the
16
+ * first one. The auditor previously hard-coded 'llama3' as the Ollama model and
17
+ * only checked that the Ollama *server* was up (not that the model existed), so
18
+ * any user who pulled a different model (qwen2.5, mistral, phi, …) got a silent
19
+ * 404 "model not found" at analyze time and the AI layer degraded to ATR-only.
20
+ * Returns null if Ollama is unreachable or has no models pulled.
21
+ */
22
+ async function firstInstalledOllamaModel() {
23
+ const host = (process.env['OLLAMA_HOST'] ?? 'http://127.0.0.1:11434').replace(/\/+$/, '');
24
+ try {
25
+ const res = await fetch(`${host}/api/tags`, { signal: AbortSignal.timeout(2000) });
26
+ if (!res.ok)
27
+ return null;
28
+ const data = (await res.json());
29
+ return data.models?.find((m) => typeof m.name === 'string' && m.name.length > 0)?.name ?? null;
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
14
35
  /**
15
36
  * Attempt to auto-detect and create a SkillAnalysisLLM from available providers.
16
37
  *
@@ -22,10 +43,9 @@ export async function autoDetectSkillLLM() {
22
43
  const { createLLM } = await import('@panguard-ai/core');
23
44
  let provider;
24
45
  let apiKey;
25
- const defaultModels = {
46
+ const defaultCloudModels = {
26
47
  claude: 'claude-sonnet-4-20250514',
27
48
  openai: 'gpt-4o',
28
- ollama: 'llama3',
29
49
  };
30
50
  // Check environment variables first (cloud providers), then fall back to Ollama
31
51
  if (process.env['ANTHROPIC_API_KEY']) {
@@ -42,8 +62,24 @@ export async function autoDetectSkillLLM() {
42
62
  if (_ollamaCached !== undefined)
43
63
  return _ollamaCached;
44
64
  }
45
- // Allow override via PANGUARD_LLM_MODEL env var
46
- const model = process.env['PANGUARD_LLM_MODEL'] ?? defaultModels[provider];
65
+ // Resolve the model. An explicit PANGUARD_LLM_MODEL always wins. For Ollama,
66
+ // detect a model that is actually PULLED instead of assuming 'llama3' if
67
+ // none is installed (or Ollama is unreachable), the AI layer is unavailable
68
+ // and we degrade to ATR-only rather than 404 on every analyze() call.
69
+ let model = process.env['PANGUARD_LLM_MODEL'];
70
+ if (!model) {
71
+ if (provider === 'ollama') {
72
+ const detected = await firstInstalledOllamaModel();
73
+ if (!detected) {
74
+ _ollamaCached = null;
75
+ return null;
76
+ }
77
+ model = detected;
78
+ }
79
+ else {
80
+ model = defaultCloudModels[provider];
81
+ }
82
+ }
47
83
  const llmProvider = createLLM({ provider, model, apiKey, lang: 'en' });
48
84
  const available = await llmProvider.isAvailable();
49
85
  if (!available) {
@@ -1 +1 @@
1
- {"version":3,"file":"llm-auto-detect.js","sourceRoot":"","sources":["../../src/checks/llm-auto-detect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,kFAAkF;AAClF,IAAI,aAAkD,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAIxD,IAAI,QAAsB,CAAC;QAC3B,IAAI,MAA0B,CAAC;QAE/B,MAAM,aAAa,GAAiC;YAClD,MAAM,EAAE,0BAA0B;YAClC,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;SACjB,CAAC;QAEF,gFAAgF;QAChF,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACrC,QAAQ,GAAG,QAAQ,CAAC;YACpB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACzC,QAAQ,GAAG,QAAQ,CAAC;YACpB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC;YACpB,sEAAsE;YACtE,IAAI,aAAa,KAAK,SAAS;gBAAE,OAAO,aAAa,CAAC;QACxD,CAAC;QAED,gDAAgD;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE3E,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvE,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,QAAQ,KAAK,QAAQ;gBAAE,aAAa,GAAG,IAAI,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2DAA2D;QAC3D,MAAM,OAAO,GAAqB;YAChC,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAgB;gBAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC1D,OAAO;oBACL,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;iBACxC,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,WAAW;gBACf,OAAO,WAAW,CAAC,WAAW,EAAE,CAAC;YACnC,CAAC;SACF,CAAC;QAEF,IAAI,QAAQ,KAAK,QAAQ;YAAE,aAAa,GAAG,OAAO,CAAC;QACnD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"llm-auto-detect.js","sourceRoot":"","sources":["../../src/checks/llm-auto-detect.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panguard-ai/panguard-skill-auditor",
3
- "version": "1.8.13",
3
+ "version": "1.8.18",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -32,10 +32,10 @@
32
32
  "dependencies": {
33
33
  "agent-threat-rules": "^3.5.8",
34
34
  "js-yaml": "^4.1.0",
35
- "@panguard-ai/core": "1.8.13",
36
- "@panguard-ai/scan-core": "1.8.13",
37
- "@panguard-ai/panguard-scan": "1.8.13",
38
- "@panguard-ai/atr": "1.8.13"
35
+ "@panguard-ai/atr": "1.8.14",
36
+ "@panguard-ai/panguard-scan": "1.8.14",
37
+ "@panguard-ai/core": "1.8.14",
38
+ "@panguard-ai/scan-core": "1.8.14"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/js-yaml": "^4.0.9",