chaimi-keep-mcp 3.3.3-beta.6 → 3.3.3-beta.7
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 +6 -0
- package/SKILL.md +9 -0
- package/package.json +1 -1
- package/references/response-templates.md +67 -6
- package/server.js +14 -6
package/README.md
CHANGED
|
@@ -89,6 +89,12 @@ export MCP_PROMPT_URL="你的Prompt服务地址"
|
|
|
89
89
|
|
|
90
90
|
## Changelog
|
|
91
91
|
|
|
92
|
+
### v3.3.3-beta.7 (2026-04-29)
|
|
93
|
+
- **优化** 回复模板 - 新增"请确认信息"提示,时间移到核心数据区,添加类型变量
|
|
94
|
+
- **优化** 空值处理 - 商家为空时不显示,timeNote 仅异常时显示
|
|
95
|
+
- **修复** save_income - 添加 date 兜底逻辑,不传时间时使用当前时间
|
|
96
|
+
- **修复** save_expense - 优化 timeNote 显示逻辑
|
|
97
|
+
|
|
92
98
|
### v3.3.3-beta.6 (2026-04-29)
|
|
93
99
|
- **优化** 品牌统一 - 所有"柴米记账"改为"柴米AI记账"
|
|
94
100
|
- **优化** 工具描述 - 重写三个记账工具描述,包含完整调用示例和格式要求
|
package/SKILL.md
CHANGED
|
@@ -154,6 +154,11 @@ chaimi-keep-mcp ⭐ 本Skill
|
|
|
154
154
|
- ✅ 返回 `_templateHint` 提示使用哪个模板
|
|
155
155
|
- ✅ 返回 `_templateVariables` 提供模板变量数据
|
|
156
156
|
|
|
157
|
+
**空值处理原则**:
|
|
158
|
+
- 模板变量中,如果某个维度的值为空(null/undefined/空字符串),Agent 应跳过该行不显示
|
|
159
|
+
- 必填字段(金额、类型、商品、分类)必须显示
|
|
160
|
+
- 可选字段(商家、时间、洞察)为空时不显示
|
|
161
|
+
|
|
157
162
|
### 7.2 模板文件位置
|
|
158
163
|
|
|
159
164
|
**主模板文件**: `references/response-templates.md`
|
|
@@ -191,6 +196,8 @@ references/
|
|
|
191
196
|
【第1层:成功标识】✅ 「Agent名称」已帮您记账成功
|
|
192
197
|
【第2层:分隔强调】═══════════════
|
|
193
198
|
【第3层:核心数据】💰 金额:¥xx.xx
|
|
199
|
+
📊 类型:支出/收入
|
|
200
|
+
═══════════════
|
|
194
201
|
【第4层:详细信息】
|
|
195
202
|
📦 商品:xxx
|
|
196
203
|
🏷️ 分类:xxx
|
|
@@ -211,6 +218,7 @@ references/
|
|
|
211
218
|
✅ 「{agentName}」已帮您记账成功
|
|
212
219
|
═══════════════
|
|
213
220
|
💰 金额:¥{金额}
|
|
221
|
+
📊 类型:{类型}
|
|
214
222
|
═══════════════
|
|
215
223
|
|
|
216
224
|
📦 商品:{商品名}
|
|
@@ -234,6 +242,7 @@ references/
|
|
|
234
242
|
| {agentName} | Agent显示名称 | 「你的小可爱」 |
|
|
235
243
|
| {商品名} | 商品或商家名称 | 午餐、麦当劳 |
|
|
236
244
|
| {金额} | 金额(带¥符号) | ¥35.00 |
|
|
245
|
+
| {类型} | 支出/收入类型 | 支出、收入 |
|
|
237
246
|
| {分类} | 消费分类 | 餐饮 |
|
|
238
247
|
| {商家} | 商家名称(可选) | 麦当劳 |
|
|
239
248
|
| {日期时间} | 格式化时间 | 2026-04-24 12:30 |
|
package/package.json
CHANGED
|
@@ -47,6 +47,7 @@ updated: "2026-04-25"
|
|
|
47
47
|
|:-----|:------|:-----|
|
|
48
48
|
| 成功标识 | ✅ | 操作成功 |
|
|
49
49
|
| 金额 | 💰 | 核心数据 |
|
|
50
|
+
| 类型 | 📊 | 支出/收入 |
|
|
50
51
|
| 商品 | 📦 | 物品 |
|
|
51
52
|
| 分类 | 🏷️ | 标签分类 |
|
|
52
53
|
| 商家 | 🏪 | 商店 |
|
|
@@ -54,6 +55,63 @@ updated: "2026-04-25"
|
|
|
54
55
|
| 祝福 | 🎉 | 庆祝 |
|
|
55
56
|
| 警示 | ⚠️ | 需要关注 |
|
|
56
57
|
|
|
58
|
+
### 1.4 空值处理规范(重要)
|
|
59
|
+
|
|
60
|
+
**规则**:详细信息区(第4层)的维度,如果值为空,则不展示该行。
|
|
61
|
+
|
|
62
|
+
**处理逻辑**:
|
|
63
|
+
```
|
|
64
|
+
渲染前检查每个字段:
|
|
65
|
+
- 如果字段值存在且不为空 → 显示该行
|
|
66
|
+
- 如果字段值为空/null/undefined → 跳过该行
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**示例**:
|
|
70
|
+
```markdown
|
|
71
|
+
// 完整数据
|
|
72
|
+
📦 商品:午餐
|
|
73
|
+
🏷️ 分类:餐饮
|
|
74
|
+
🏪 商家:麦当劳
|
|
75
|
+
🕐 时间:2026-04-24 12:30
|
|
76
|
+
|
|
77
|
+
// 商家为空时
|
|
78
|
+
📦 商品:午餐
|
|
79
|
+
🏷️ 分类:餐饮
|
|
80
|
+
🕐 时间:2026-04-24 12:30
|
|
81
|
+
(🏪 商家:这一行不显示)
|
|
82
|
+
|
|
83
|
+
// 只有商品和金额时
|
|
84
|
+
📦 商品:午餐
|
|
85
|
+
(其他维度为空,都不显示)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**必填 vs 可选字段**:
|
|
89
|
+
| 字段 | 是否必填 | 为空时处理 |
|
|
90
|
+
|:-----|:---------|:-----------|
|
|
91
|
+
| 商品名 | ✅ 必填 | 必须显示 |
|
|
92
|
+
| 分类 | ✅ 必填 | 必须显示 |
|
|
93
|
+
| 类型 | ✅ 必填 | 必须显示 |
|
|
94
|
+
| 金额 | ✅ 必填 | 必须显示 |
|
|
95
|
+
| 商家 | ❌ 可选 | 为空不显示 |
|
|
96
|
+
| 时间 | ❌ 可选 | 为空不显示 |
|
|
97
|
+
| 洞察 | ❌ 可选 | 为空不显示 |
|
|
98
|
+
|
|
99
|
+
**规则2:避免重复显示**
|
|
100
|
+
- 如果商品名和分类相同 → 只显示分类行(避免重复)
|
|
101
|
+
- 如果商品名和分类不同 → 两行都显示
|
|
102
|
+
|
|
103
|
+
**示例**:
|
|
104
|
+
```markdown
|
|
105
|
+
// 用户说"交通 12"(商品名=分类)
|
|
106
|
+
🏷️ 分类:交通
|
|
107
|
+
(📦 商品:交通 不显示,避免重复)
|
|
108
|
+
|
|
109
|
+
// 用户说"午餐 35"(商品名=午餐,分类=餐饮)
|
|
110
|
+
📦 商品:午餐
|
|
111
|
+
🏷️ 分类:餐饮
|
|
112
|
+
(两行都显示)
|
|
113
|
+
```
|
|
114
|
+
|
|
57
115
|
---
|
|
58
116
|
|
|
59
117
|
## 二、标准模板
|
|
@@ -65,18 +123,20 @@ updated: "2026-04-25"
|
|
|
65
123
|
```markdown
|
|
66
124
|
✅ 「{agentName}」已帮您记账成功
|
|
67
125
|
═══════════════
|
|
126
|
+
🔴🔴 请确认以下信息是否正确
|
|
68
127
|
💰 金额:¥{金额}
|
|
128
|
+
📊 类型:{类型}
|
|
129
|
+
🕐 时间:{日期时间}
|
|
69
130
|
═══════════════
|
|
70
131
|
|
|
71
132
|
📦 商品:{商品名}
|
|
72
133
|
🏷️ 分类:{分类}
|
|
73
134
|
🏪 商家:{商家}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
💡 消费洞察:{洞察内容}(可选)
|
|
135
|
+
💡 消费洞察:{洞察内容}
|
|
136
|
+
⏰ 时间说明:{timeNote}
|
|
77
137
|
|
|
78
138
|
───────────────
|
|
79
|
-
🎉 {
|
|
139
|
+
🎉 {正能量情绪词}!
|
|
80
140
|
柴米AI记账
|
|
81
141
|
chaimi-keep-mcp v{版本号}
|
|
82
142
|
───────────────
|
|
@@ -87,14 +147,15 @@ updated: "2026-04-25"
|
|
|
87
147
|
```markdown
|
|
88
148
|
✅ 「你的小可爱」已帮您记账成功
|
|
89
149
|
═══════════════
|
|
150
|
+
🔴🔴 请确认以下信息是否正确
|
|
90
151
|
💰 金额:¥35.00
|
|
152
|
+
📊 类型:支出
|
|
153
|
+
🕐 时间:2026-04-24 12:30
|
|
91
154
|
═══════════════
|
|
92
155
|
|
|
93
156
|
📦 商品:午餐
|
|
94
157
|
🏷️ 分类:餐饮
|
|
95
158
|
🏪 商家:麦当劳
|
|
96
|
-
🕐 时间:2026-04-24 12:30
|
|
97
|
-
|
|
98
159
|
💡 消费洞察:本月餐饮支出占比30%,建议控制
|
|
99
160
|
|
|
100
161
|
───────────────
|
package/server.js
CHANGED
|
@@ -1071,15 +1071,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1071
1071
|
result._templateHint = '请使用references/response-templates.md中的2.1标准成功模板渲染回复';
|
|
1072
1072
|
result._templateVariables = {
|
|
1073
1073
|
agentName: await getAgentName(),
|
|
1074
|
+
类型: '支出',
|
|
1074
1075
|
商品名: displayName,
|
|
1075
|
-
商家: displayStore ||
|
|
1076
|
+
商家: displayStore || null,
|
|
1076
1077
|
金额: displayAmount,
|
|
1077
1078
|
分类: result.data?.categoryName || displayCategory,
|
|
1078
|
-
日期: result.data?.date ? new Date(result.data.date).
|
|
1079
|
+
日期: result.data?.date ? new Date(result.data.date).toLocaleString('zh-CN') : new Date().toLocaleString('zh-CN'),
|
|
1079
1080
|
正能量祝福语: friendlyEnding,
|
|
1080
1081
|
insightsText,
|
|
1081
1082
|
achievementsText,
|
|
1082
|
-
timeNote
|
|
1083
|
+
timeNote: timeNote || null
|
|
1083
1084
|
};
|
|
1084
1085
|
}
|
|
1085
1086
|
break;
|
|
@@ -1526,6 +1527,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1526
1527
|
timeNote = getTimeNote(processedArgs.time_description);
|
|
1527
1528
|
console.log(`[save_income] 时间描述解析: ${processedArgs.time_description} → ${parsedDate} (${new Date(parsedDate).toLocaleString('zh-CN')})`);
|
|
1528
1529
|
}
|
|
1530
|
+
// 【新增】兜底:如果既没传 time_description 也没传 date,使用当前时间
|
|
1531
|
+
else if (!processedArgs.date) {
|
|
1532
|
+
processedArgs.date = Date.now();
|
|
1533
|
+
timeNote = '⏰ 时间说明:未指定时间,使用当前时间';
|
|
1534
|
+
console.log(`[save_income] 未传时间参数,使用当前时间: ${processedArgs.date}`);
|
|
1535
|
+
}
|
|
1529
1536
|
|
|
1530
1537
|
// P1: 日期合理性检查
|
|
1531
1538
|
if (processedArgs.date) {
|
|
@@ -1567,13 +1574,14 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1567
1574
|
result._templateHint = '请使用references/response-templates.md中的2.1标准成功模板渲染回复';
|
|
1568
1575
|
result._templateVariables = {
|
|
1569
1576
|
agentName: await getAgentName(),
|
|
1577
|
+
类型: '收入',
|
|
1570
1578
|
商品名: displayName,
|
|
1571
|
-
商家: displayStore,
|
|
1579
|
+
商家: displayStore || null,
|
|
1572
1580
|
金额: displayAmount,
|
|
1573
1581
|
分类: result.data?.categoryName || displayCategory,
|
|
1574
|
-
日期: result.data?.date ? new Date(result.data.date).
|
|
1582
|
+
日期: result.data?.date ? new Date(result.data.date).toLocaleString('zh-CN') : new Date().toLocaleString('zh-CN'),
|
|
1575
1583
|
正能量祝福语: '入账顺利!💰',
|
|
1576
|
-
timeNote
|
|
1584
|
+
timeNote: timeNote || null
|
|
1577
1585
|
};
|
|
1578
1586
|
}
|
|
1579
1587
|
break;
|