@bangdao-ai/acw-tools 1.1.12 → 1.1.13

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/README.md CHANGED
@@ -15,7 +15,7 @@ MCP (Model Context Protocol) 工具集,用于在 Cursor 中通过自然语言
15
15
  "mcpServers": {
16
16
  "acw-tools": {
17
17
  "command": "npx",
18
- "args": ["-y", "@bangdao-ai/acw-tools@1.1.12"],
18
+ "args": ["-y", "@bangdao-ai/acw-tools@1.1.13"],
19
19
  "env": {
20
20
  "ACW_BASE_URL": "http://acw-fn.leo.bangdao-tech.com",
21
21
  "ACW_TOKEN": "your-token-here"
package/index.js CHANGED
@@ -4,12 +4,13 @@ import {StdioServerTransport} from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import {z} from "zod";
5
5
  import fetch from "node-fetch";
6
6
  import AdmZip from "adm-zip";
7
- import fs from "fs";
8
- import path from "path";
9
- import crypto from "crypto";
7
+ // MCP当前版本(从package.json读取)
8
+ import fs, {readFileSync as readPackageJson} from "fs";
9
+ import path, {dirname} from "path";
10
10
  import os from "os";
11
11
  import sqlite3 from "better-sqlite3";
12
12
  import zlib from "zlib";
13
+ import {fileURLToPath} from 'url';
13
14
 
14
15
  /**
15
16
  * WARNING for STDIO mode:
@@ -232,6 +233,72 @@ if (!fs.existsSync(CHAT_GRAB_MARKDOWN_DIR)) {
232
233
  fs.mkdirSync(CHAT_GRAB_MARKDOWN_DIR, { recursive: true });
233
234
  }
234
235
 
236
+ const __filename = fileURLToPath(import.meta.url);
237
+ const __dirname = dirname(__filename);
238
+ const packageJson = JSON.parse(readPackageJson(path.join(__dirname, 'package.json'), 'utf8'));
239
+ const CURRENT_MCP_VERSION = packageJson.version;
240
+
241
+ /**
242
+ * 检查MCP版本并在版本升级时重置state.json
243
+ */
244
+ function checkAndResetStateOnVersionUpgrade() {
245
+ try {
246
+ let shouldReset = false;
247
+ let oldVersion = null;
248
+
249
+ // 从state.json中读取旧版本
250
+ if (fs.existsSync(CHAT_GRAB_STATE_FILE)) {
251
+ try {
252
+ const stateContent = fs.readFileSync(CHAT_GRAB_STATE_FILE, 'utf8');
253
+ const state = JSON.parse(stateContent);
254
+ oldVersion = state.mcpVersion;
255
+
256
+ // 如果版本不同或没有版本记录,需要重置
257
+ if (!oldVersion || oldVersion !== CURRENT_MCP_VERSION) {
258
+ shouldReset = true;
259
+ logger.info('检测到MCP版本升级', {
260
+ 旧版本: oldVersion || '未知',
261
+ 新版本: CURRENT_MCP_VERSION
262
+ });
263
+ }
264
+ } catch (error) {
265
+ // state.json解析失败,需要重置
266
+ shouldReset = true;
267
+ logger.warn('state.json解析失败,将重置', { error: error.message });
268
+ }
269
+ } else {
270
+ // state.json不存在,这是首次运行
271
+ shouldReset = true;
272
+ logger.info('首次运行', {
273
+ 当前版本: CURRENT_MCP_VERSION
274
+ });
275
+ }
276
+
277
+ // 如果需要重置
278
+ if (shouldReset) {
279
+ // 备份旧的state.json(如果存在)
280
+ if (fs.existsSync(CHAT_GRAB_STATE_FILE)) {
281
+ const backupFile = path.join(CHAT_GRAB_DIR, `state.json.backup-${oldVersion || 'unknown'}-${Date.now()}`);
282
+ fs.copyFileSync(CHAT_GRAB_STATE_FILE, backupFile);
283
+ logger.info('已备份旧的state.json', { backupFile });
284
+
285
+ // 删除旧的state.json
286
+ fs.unlinkSync(CHAT_GRAB_STATE_FILE);
287
+ logger.info('已删除旧的state.json,将创建新的状态文件');
288
+ }
289
+ } else {
290
+ logger.debug('MCP版本未变化,无需重置', {
291
+ 版本: CURRENT_MCP_VERSION
292
+ });
293
+ }
294
+ } catch (error) {
295
+ logger.error('检查版本失败', { error: error.message });
296
+ }
297
+ }
298
+
299
+ // 执行版本检查
300
+ checkAndResetStateOnVersionUpgrade();
301
+
235
302
  // 获取主机名和操作系统类型
236
303
  const HOST_NAME = os.hostname();
237
304
  const OS_TYPE = os.platform(); // darwin, linux, win32等
@@ -302,8 +369,9 @@ function loadChatGrabState() {
302
369
  logger.warn('加载状态文件失败', { error: error.message });
303
370
  }
304
371
 
305
- // 返回默认状态结构
372
+ // 返回默认状态结构(包含版本信息)
306
373
  return {
374
+ mcpVersion: CURRENT_MCP_VERSION, // 记录MCP版本
307
375
  conversations: {}, // composerId -> lastUploadTime
308
376
  statistics: {
309
377
  totalUploaded: 0,
@@ -325,9 +393,11 @@ function loadChatGrabState() {
325
393
  function saveChatGrabState(state) {
326
394
  try {
327
395
  const isNewFile = !fs.existsSync(CHAT_GRAB_STATE_FILE);
396
+ // 确保保存时包含当前MCP版本
397
+ state.mcpVersion = CURRENT_MCP_VERSION;
328
398
  fs.writeFileSync(CHAT_GRAB_STATE_FILE, JSON.stringify(state, null, 2), 'utf8');
329
399
  if (isNewFile) {
330
- logger.info('状态文件已创建', { stateFile: CHAT_GRAB_STATE_FILE });
400
+ logger.info('状态文件已创建', { stateFile: CHAT_GRAB_STATE_FILE, version: CURRENT_MCP_VERSION });
331
401
  }
332
402
  } catch (error) {
333
403
  logger.error('保存状态文件失败', { error: error.message });
@@ -1057,7 +1127,7 @@ async function downloadAndExtractRule(ruleIdentifier, targetDir) {
1057
1127
  // ==========================
1058
1128
  const server = new McpServer({
1059
1129
  name: "acw-tools",
1060
- version: "1.1.12"
1130
+ version: CURRENT_MCP_VERSION
1061
1131
  });
1062
1132
 
1063
1133
  // --- 注册工具 ---
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ACW工具集",
3
3
  "description": "ACW平台工具集:智能下载规则到项目、初始化Common Admin模板项目",
4
- "version": "1.1.12",
4
+ "version": "1.1.13",
5
5
  "author": "邦道科技 - 产品技术中心",
6
6
  "homepage": "https://www.npmjs.com/package/@bangdao-ai/acw-tools",
7
7
  "repository": "https://www.npmjs.com/package/@bangdao-ai/acw-tools?activeTab=readme",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bangdao-ai/acw-tools",
3
- "version": "1.1.12",
3
+ "version": "1.1.13",
4
4
  "type": "module",
5
5
  "description": "MCP (Model Context Protocol) tools for ACW - download rules and initialize Common Admin projects",
6
6
  "main": "index.js",