@pwddd/skills-scanner 1.0.5 → 1.0.8
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 +28 -25
- package/package.json +1 -1
package/index.ts
CHANGED
|
@@ -117,13 +117,13 @@ async function ensureDeps(logger: any): Promise<boolean> {
|
|
|
117
117
|
try {
|
|
118
118
|
// 创建 venv
|
|
119
119
|
await execAsync(`uv venv "${join(SKILL_DIR, ".venv")}" --python 3.10`);
|
|
120
|
-
//
|
|
121
|
-
await execAsync(`"${VENV_PYTHON}"
|
|
120
|
+
// 使用 uv pip 安装(不需要激活 venv)
|
|
121
|
+
await execAsync(`uv pip install --python "${VENV_PYTHON}" cisco-ai-skill-scanner`);
|
|
122
122
|
logger.info("[skills-scanner] ✅ 依赖安装完成");
|
|
123
123
|
return true;
|
|
124
124
|
} catch (err: any) {
|
|
125
125
|
logger.error(`[skills-scanner] ⚠️ 依赖安装失败: ${err.message}`);
|
|
126
|
-
logger.error(`[skills-scanner] 请手动运行: uv pip install cisco-ai-skill-scanner`);
|
|
126
|
+
logger.error(`[skills-scanner] 请手动运行: uv pip install --python "${VENV_PYTHON}" cisco-ai-skill-scanner`);
|
|
127
127
|
return false;
|
|
128
128
|
}
|
|
129
129
|
}
|
|
@@ -304,11 +304,13 @@ export default function register(api: any) {
|
|
|
304
304
|
const preInstallScan = cfg.preInstallScan ?? "on";
|
|
305
305
|
const onUnsafe = cfg.onUnsafe ?? "quarantine";
|
|
306
306
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
307
|
+
api.logger.info("[skills-scanner] ═══════════════════════════════════════");
|
|
308
|
+
api.logger.info("[skills-scanner] Plugin 正在加载...");
|
|
309
|
+
api.logger.info(`[skills-scanner] 扫描目录: ${scanDirs.join(", ")}`);
|
|
310
|
+
api.logger.info(`[skills-scanner] Python venv 路径: ${VENV_PYTHON}`);
|
|
311
|
+
api.logger.info(`[skills-scanner] Python 依赖状态: ${isVenvReady() ? "✅ 已就绪" : "❌ 未安装"}`);
|
|
312
|
+
|
|
313
|
+
// 向聊天发消息的辅助(用于 watcher 通知)
|
|
312
314
|
function persistWatcherAlert(msg: string) {
|
|
313
315
|
const state = loadState();
|
|
314
316
|
const alerts: string[] = (state as any).pendingAlerts ?? [];
|
|
@@ -323,40 +325,41 @@ export default function register(api: any) {
|
|
|
323
325
|
api.registerService({
|
|
324
326
|
id: "skills-scanner-setup",
|
|
325
327
|
start: async () => {
|
|
326
|
-
api.logger.info("[skills-scanner]
|
|
328
|
+
api.logger.info("[skills-scanner] ─────────────────────────────────────");
|
|
329
|
+
api.logger.info("[skills-scanner] 🚀 后台服务启动中...");
|
|
330
|
+
|
|
327
331
|
const depsReady = await ensureDeps(api.logger);
|
|
328
332
|
|
|
329
333
|
if (!depsReady) {
|
|
330
334
|
api.logger.error("[skills-scanner] ❌ 依赖安装失败,服务无法启动");
|
|
335
|
+
api.logger.error("[skills-scanner] 请手动运行: uv pip install --python \"" + VENV_PYTHON + "\" cisco-ai-skill-scanner");
|
|
331
336
|
return;
|
|
332
337
|
}
|
|
333
338
|
|
|
334
339
|
if (preInstallScan === "on" && scanDirs.length > 0) {
|
|
340
|
+
api.logger.info(`[skills-scanner] 📁 启动文件监控: ${scanDirs.length} 个目录`);
|
|
335
341
|
stopWatcher = startWatcher(scanDirs, onUnsafe, behavioral, persistWatcherAlert, api.logger);
|
|
342
|
+
api.logger.info("[skills-scanner] ✅ 文件监控已启动");
|
|
343
|
+
} else {
|
|
344
|
+
api.logger.info("[skills-scanner] ⏭️ 安装前扫描已禁用");
|
|
336
345
|
}
|
|
346
|
+
|
|
347
|
+
api.logger.info("[skills-scanner] ─────────────────────────────────────");
|
|
348
|
+
},
|
|
349
|
+
stop: () => {
|
|
350
|
+
api.logger.info("[skills-scanner] 🛑 后台服务停止中...");
|
|
351
|
+
stopWatcher?.();
|
|
352
|
+
stopWatcher = null;
|
|
337
353
|
},
|
|
338
|
-
stop: () => { stopWatcher?.(); stopWatcher = null; },
|
|
339
354
|
});
|
|
340
355
|
|
|
341
|
-
// ── 2.
|
|
342
|
-
// 在 Gateway 启动时输出配置提示
|
|
343
|
-
api.logger.info("[skills-scanner] Plugin 已加载");
|
|
344
|
-
api.logger.info(`[skills-scanner] 安装前扫描:${preInstallScan === "on" ? `✅ 监听 ${scanDirs.length} 个目录` : "❌ 已禁用"}`);
|
|
345
|
-
|
|
346
|
-
// 立即检查并安装依赖(不等待 service start)
|
|
347
|
-
if (!isVenvReady()) {
|
|
348
|
-
api.logger.info("[skills-scanner] 检测到 Python 依赖未安装,开始安装...");
|
|
349
|
-
ensureDeps(api.logger).catch(err => {
|
|
350
|
-
api.logger.error(`[skills-scanner] 依赖安装异常: ${err.message}`);
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
// 检查是否需要注册 Cron Job
|
|
356
|
+
// ── 2. 启动日志和 Cron 提示 ───────────────────────────────────────────────
|
|
355
357
|
const state = loadState() as any;
|
|
356
358
|
if (!state.cronJobId) {
|
|
357
359
|
api.logger.warn("[skills-scanner] ⚠️ 未检测到日报 Cron Job,请手动注册一次:");
|
|
358
360
|
api.logger.info('[skills-scanner] openclaw cron add --name "skills-daily-report" --cron "0 8 * * *" --tz "Asia/Shanghai" --session isolated --message "请执行 /scan-report 并把结果发送到此渠道" --announce');
|
|
359
361
|
}
|
|
362
|
+
api.logger.info("[skills-scanner] ═══════════════════════════════════════");
|
|
360
363
|
|
|
361
364
|
// ── 3. /scan-skill ────────────────────────────────────────────────────────
|
|
362
365
|
api.registerCommand({
|
|
@@ -508,5 +511,5 @@ export default function register(api: any) {
|
|
|
508
511
|
});
|
|
509
512
|
}, { commands: ["skills-scan"] });
|
|
510
513
|
|
|
511
|
-
api.logger.info("[skills-scanner] Plugin
|
|
514
|
+
api.logger.info("[skills-scanner] ✅ Plugin 注册完成");
|
|
512
515
|
}
|