@pwddd/skills-scanner 1.0.8 → 1.1.0
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 +44 -8
- package/package.json +1 -1
package/index.ts
CHANGED
|
@@ -73,7 +73,15 @@ function hasUv(): boolean {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
function isVenvReady(): boolean {
|
|
76
|
-
|
|
76
|
+
if (!existsSync(VENV_PYTHON)) return false;
|
|
77
|
+
|
|
78
|
+
// 检查 cisco-ai-skill-scanner 是否真的安装
|
|
79
|
+
try {
|
|
80
|
+
execSync(`"${VENV_PYTHON}" -c "import skill_scanner"`, { stdio: 'ignore' });
|
|
81
|
+
return true;
|
|
82
|
+
} catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
77
85
|
}
|
|
78
86
|
|
|
79
87
|
function expandPath(p: string): string {
|
|
@@ -106,21 +114,36 @@ function saveState(s: ScanState) {
|
|
|
106
114
|
|
|
107
115
|
async function ensureDeps(logger: any): Promise<boolean> {
|
|
108
116
|
if (isVenvReady()) {
|
|
109
|
-
logger.info("[skills-scanner] Python
|
|
117
|
+
logger.info("[skills-scanner] Python 依赖已就绪(cisco-ai-skill-scanner 已安装)");
|
|
110
118
|
return true;
|
|
111
119
|
}
|
|
120
|
+
|
|
112
121
|
if (!hasUv()) {
|
|
113
122
|
logger.warn("[skills-scanner] uv 未安装:brew install uv 或 curl -LsSf https://astral.sh/uv/install.sh | sh");
|
|
114
123
|
return false;
|
|
115
124
|
}
|
|
116
|
-
|
|
125
|
+
|
|
126
|
+
logger.info("[skills-scanner] 正在安装 cisco-ai-skill-scanner...");
|
|
127
|
+
|
|
117
128
|
try {
|
|
118
|
-
// 创建 venv
|
|
119
|
-
|
|
120
|
-
|
|
129
|
+
// 创建 venv(如果不存在)
|
|
130
|
+
if (!existsSync(VENV_PYTHON)) {
|
|
131
|
+
logger.info("[skills-scanner] 创建 Python 虚拟环境...");
|
|
132
|
+
await execAsync(`uv venv "${join(SKILL_DIR, ".venv")}" --python 3.10`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// 安装包
|
|
136
|
+
logger.info("[skills-scanner] 安装 cisco-ai-skill-scanner 包...");
|
|
121
137
|
await execAsync(`uv pip install --python "${VENV_PYTHON}" cisco-ai-skill-scanner`);
|
|
122
|
-
|
|
123
|
-
|
|
138
|
+
|
|
139
|
+
// 验证安装
|
|
140
|
+
if (isVenvReady()) {
|
|
141
|
+
logger.info("[skills-scanner] ✅ 依赖安装完成并验证成功");
|
|
142
|
+
return true;
|
|
143
|
+
} else {
|
|
144
|
+
logger.error("[skills-scanner] ❌ 安装完成但验证失败,包可能未正确安装");
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
124
147
|
} catch (err: any) {
|
|
125
148
|
logger.error(`[skills-scanner] ⚠️ 依赖安装失败: ${err.message}`);
|
|
126
149
|
logger.error(`[skills-scanner] 请手动运行: uv pip install --python "${VENV_PYTHON}" cisco-ai-skill-scanner`);
|
|
@@ -310,6 +333,18 @@ export default function register(api: any) {
|
|
|
310
333
|
api.logger.info(`[skills-scanner] Python venv 路径: ${VENV_PYTHON}`);
|
|
311
334
|
api.logger.info(`[skills-scanner] Python 依赖状态: ${isVenvReady() ? "✅ 已就绪" : "❌ 未安装"}`);
|
|
312
335
|
|
|
336
|
+
// 立即尝试安装依赖(不等待 service start)
|
|
337
|
+
if (!isVenvReady()) {
|
|
338
|
+
api.logger.info("[skills-scanner] 开始安装 Python 依赖...");
|
|
339
|
+
ensureDeps(api.logger).then(success => {
|
|
340
|
+
if (success) {
|
|
341
|
+
api.logger.info("[skills-scanner] ✅ 依赖安装成功(在 plugin 加载时)");
|
|
342
|
+
}
|
|
343
|
+
}).catch(err => {
|
|
344
|
+
api.logger.error(`[skills-scanner] 依赖安装失败: ${err.message}`);
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
|
|
313
348
|
// 向聊天发消息的辅助(用于 watcher 通知)
|
|
314
349
|
function persistWatcherAlert(msg: string) {
|
|
315
350
|
const state = loadState();
|
|
@@ -328,6 +363,7 @@ export default function register(api: any) {
|
|
|
328
363
|
api.logger.info("[skills-scanner] ─────────────────────────────────────");
|
|
329
364
|
api.logger.info("[skills-scanner] 🚀 后台服务启动中...");
|
|
330
365
|
|
|
366
|
+
// 再次检查并安装依赖(防止 plugin 加载时安装失败)
|
|
331
367
|
const depsReady = await ensureDeps(api.logger);
|
|
332
368
|
|
|
333
369
|
if (!depsReady) {
|