@pwddd/skills-scanner 1.2.0 → 1.2.4

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.

Potentially problematic release.


This version of @pwddd/skills-scanner might be problematic. Click here for more details.

package/index.ts CHANGED
@@ -30,7 +30,8 @@ import { promisify } from "util";
30
30
 
31
31
  const execAsync = promisify(exec);
32
32
 
33
- const PLUGIN_ROOT = __dirname;
33
+ // 使用绝对路径,避免 __dirname 的问题
34
+ const PLUGIN_ROOT = process.env.OPENCLAW_PLUGIN_ROOT || __dirname;
34
35
  const SKILL_DIR = join(PLUGIN_ROOT, "skills", "skills-scanner");
35
36
  const VENV_PYTHON = join(SKILL_DIR, ".venv", "bin", "python");
36
37
  const SCAN_SCRIPT = join(SKILL_DIR, "scan.py");
@@ -198,10 +199,31 @@ async function runScan(
198
199
  if (opts.jsonOut) args.push("--json", opts.jsonOut);
199
200
 
200
201
  const cmd = `"${VENV_PYTHON}" "${SCAN_SCRIPT}" ${args.map(a => `"${a}"`).join(" ")}`;
202
+
203
+ // 调试日志
204
+ console.log(`[skills-scanner] 执行命令: ${cmd}`);
205
+ console.log(`[skills-scanner] VENV_PYTHON: ${VENV_PYTHON}`);
206
+ console.log(`[skills-scanner] SCAN_SCRIPT: ${SCAN_SCRIPT}`);
207
+ console.log(`[skills-scanner] Python 存在: ${existsSync(VENV_PYTHON)}`);
208
+ console.log(`[skills-scanner] Script 存在: ${existsSync(SCAN_SCRIPT)}`);
209
+
201
210
  try {
202
- const { stdout, stderr } = await execAsync(cmd, { timeout: 180_000 });
211
+ // 清除代理环境变量,避免 LiteLLM 加载时出错
212
+ const env = { ...process.env };
213
+ delete env.http_proxy;
214
+ delete env.https_proxy;
215
+ delete env.HTTP_PROXY;
216
+ delete env.HTTPS_PROXY;
217
+ delete env.all_proxy;
218
+ delete env.ALL_PROXY;
219
+
220
+ const { stdout, stderr } = await execAsync(cmd, {
221
+ timeout: 180_000,
222
+ env
223
+ });
203
224
  return { exitCode: 0, output: (stdout + stderr).trim() };
204
225
  } catch (err: any) {
226
+ console.error(`[skills-scanner] 命令执行失败: ${err.message}`);
205
227
  return { exitCode: err.code ?? 1, output: (err.stdout + err.stderr || "").trim() || err.message };
206
228
  }
207
229
  }
@@ -364,8 +386,11 @@ export default function register(api: any) {
364
386
 
365
387
  api.logger.info("[skills-scanner] ═══════════════════════════════════════");
366
388
  api.logger.info("[skills-scanner] Plugin 正在加载...");
389
+ api.logger.info(`[skills-scanner] PLUGIN_ROOT: ${PLUGIN_ROOT}`);
390
+ api.logger.info(`[skills-scanner] SKILL_DIR: ${SKILL_DIR}`);
391
+ api.logger.info(`[skills-scanner] VENV_PYTHON: ${VENV_PYTHON}`);
392
+ api.logger.info(`[skills-scanner] SCAN_SCRIPT: ${SCAN_SCRIPT}`);
367
393
  api.logger.info(`[skills-scanner] 扫描目录: ${scanDirs.join(", ")}`);
368
- api.logger.info(`[skills-scanner] Python venv 路径: ${VENV_PYTHON}`);
369
394
  api.logger.info(`[skills-scanner] Python 依赖状态: ${isVenvReady() ? "✅ 已就绪" : "❌ 未安装"}`);
370
395
 
371
396
  // 立即尝试安装依赖(不等待 service start)
@@ -463,7 +488,18 @@ export default function register(api: any) {
463
488
  handler: async (ctx: any) => {
464
489
  const raw = (ctx.args ?? "").trim();
465
490
  if (!raw) return { text: "用法:`/scan-skill <路径> [--detailed] [--behavioral]`" };
466
- if (!isVenvReady()) return { text: "⏳ Python 依赖尚未就绪,请稍后重试" };
491
+
492
+ // 先检查依赖
493
+ if (!isVenvReady()) {
494
+ return { text: "⏳ Python 依赖尚未就绪,请稍后重试或查看日志" };
495
+ }
496
+
497
+ // 测试 Python 能否导入
498
+ try {
499
+ execSync(`"${VENV_PYTHON}" -c "import skill_scanner; print('Import OK')"`, { encoding: 'utf-8' });
500
+ } catch (err: any) {
501
+ return { text: `❌ Python 导入测试失败:\n\`\`\`\n${err.message}\n\`\`\`` };
502
+ }
467
503
 
468
504
  const parts = raw.split(/\s+/);
469
505
  const skillPath = expandPath(parts.find(p => !p.startsWith("--")) ?? "");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pwddd/skills-scanner",
3
- "version": "1.2.0",
3
+ "version": "1.2.4",
4
4
  "description": "OpenClaw Plugin:Skills 安全扫描、安装前拦截、安全日报",
5
5
  "main": "index.ts",
6
6
  "files": [
@@ -24,9 +24,23 @@ try:
24
24
  BehavioralAnalyzer,
25
25
  PipelineAnalyzer,
26
26
  )
27
- except ImportError:
27
+ except ImportError as e:
28
28
  print("❌ cisco-ai-skill-scanner 未安装。")
29
+ print(f" 导入错误: {e}")
29
30
  print(" 请运行: uv pip install cisco-ai-skill-scanner")
31
+ print(f" Python 路径: {sys.executable}")
32
+ print(f" Python 版本: {sys.version}")
33
+
34
+ # 尝试显示 sys.path
35
+ print(" sys.path:")
36
+ for p in sys.path:
37
+ print(f" - {p}")
38
+
39
+ sys.exit(1)
40
+ except Exception as e:
41
+ print(f"❌ 导入时发生未知错误: {type(e).__name__}: {e}")
42
+ import traceback
43
+ traceback.print_exc()
30
44
  sys.exit(1)
31
45
 
32
46