chaimi-keep-mcp 3.1.33-beta.2 → 3.1.33-beta.3
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/package.json +1 -1
- package/server.js +39 -5
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -421,10 +421,43 @@ async function callMcpHub(tool, params, token) {
|
|
|
421
421
|
return await response.json();
|
|
422
422
|
}
|
|
423
423
|
|
|
424
|
-
// Skill
|
|
425
|
-
|
|
424
|
+
// Skill 读取记录文件路径
|
|
425
|
+
const SKILL_READ_LOG_PATH = path.join(os.homedir(), '.chaimi-mcp', 'skill-read.log');
|
|
426
426
|
const SKILL_VALID_DURATION = 5 * 60 * 1000; // 5分钟内有效
|
|
427
427
|
|
|
428
|
+
/**
|
|
429
|
+
* 获取上次读取 Skill 的时间
|
|
430
|
+
*/
|
|
431
|
+
function getLastSkillReadTime() {
|
|
432
|
+
try {
|
|
433
|
+
if (fs.existsSync(SKILL_READ_LOG_PATH)) {
|
|
434
|
+
const data = JSON.parse(fs.readFileSync(SKILL_READ_LOG_PATH, 'utf8'));
|
|
435
|
+
return data.lastReadTime || 0;
|
|
436
|
+
}
|
|
437
|
+
} catch (error) {
|
|
438
|
+
console.error('读取 Skill 记录失败:', error);
|
|
439
|
+
}
|
|
440
|
+
return 0;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* 记录 Skill 读取时间
|
|
445
|
+
*/
|
|
446
|
+
function recordSkillRead() {
|
|
447
|
+
try {
|
|
448
|
+
const logDir = path.dirname(SKILL_READ_LOG_PATH);
|
|
449
|
+
if (!fs.existsSync(logDir)) {
|
|
450
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
451
|
+
}
|
|
452
|
+
fs.writeFileSync(SKILL_READ_LOG_PATH, JSON.stringify({
|
|
453
|
+
lastReadTime: Date.now(),
|
|
454
|
+
readAt: new Date().toISOString()
|
|
455
|
+
}, null, 2));
|
|
456
|
+
} catch (error) {
|
|
457
|
+
console.error('记录 Skill 读取失败:', error);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
428
461
|
// 工具调用处理
|
|
429
462
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
430
463
|
const { name, arguments: args } = request.params;
|
|
@@ -432,7 +465,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
432
465
|
// 强制检查:记账工具必须先调用 get_skill
|
|
433
466
|
if (name === 'save_expense' || name === 'save_receipt' || name === 'save_income') {
|
|
434
467
|
const now = Date.now();
|
|
435
|
-
|
|
468
|
+
const lastReadTime = getLastSkillReadTime();
|
|
469
|
+
if (now - lastReadTime > SKILL_VALID_DURATION) {
|
|
436
470
|
return {
|
|
437
471
|
content: [
|
|
438
472
|
{
|
|
@@ -484,8 +518,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
484
518
|
skillContent = '无法读取 Skill 文件,请检查安装是否完整';
|
|
485
519
|
}
|
|
486
520
|
|
|
487
|
-
//
|
|
488
|
-
|
|
521
|
+
// 更新读取时间(持久化到文件)
|
|
522
|
+
recordSkillRead();
|
|
489
523
|
|
|
490
524
|
result = {
|
|
491
525
|
success: true,
|