@skillfm/local 2.7.4 → 2.7.6

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.
Files changed (54) hide show
  1. package/dist/agent-forcing/forcing-rules.d.ts +27 -0
  2. package/dist/agent-forcing/forcing-rules.d.ts.map +1 -0
  3. package/dist/agent-forcing/forcing-rules.js +98 -0
  4. package/dist/agent-forcing/forcing-rules.js.map +1 -0
  5. package/dist/agent-forcing/index.d.ts +5 -0
  6. package/dist/agent-forcing/index.d.ts.map +1 -0
  7. package/dist/agent-forcing/index.js +6 -0
  8. package/dist/agent-forcing/index.js.map +1 -0
  9. package/dist/agent-forcing/injectors.d.ts +29 -0
  10. package/dist/agent-forcing/injectors.d.ts.map +1 -0
  11. package/dist/agent-forcing/injectors.js +255 -0
  12. package/dist/agent-forcing/injectors.js.map +1 -0
  13. package/dist/agent-forcing/types.d.ts +26 -0
  14. package/dist/agent-forcing/types.d.ts.map +1 -0
  15. package/dist/agent-forcing/types.js +21 -0
  16. package/dist/agent-forcing/types.js.map +1 -0
  17. package/dist/checkup/dimension-3-files.d.ts +15 -2
  18. package/dist/checkup/dimension-3-files.d.ts.map +1 -1
  19. package/dist/checkup/dimension-3-files.js +134 -23
  20. package/dist/checkup/dimension-3-files.js.map +1 -1
  21. package/dist/checkup/report.d.ts +7 -2
  22. package/dist/checkup/report.d.ts.map +1 -1
  23. package/dist/checkup/report.js +69 -29
  24. package/dist/checkup/report.js.map +1 -1
  25. package/dist/checkup-cli.d.ts +2 -0
  26. package/dist/checkup-cli.d.ts.map +1 -0
  27. package/dist/checkup-cli.js +46 -0
  28. package/dist/checkup-cli.js.map +1 -0
  29. package/dist/forcing-cli.d.ts +2 -0
  30. package/dist/forcing-cli.d.ts.map +1 -0
  31. package/dist/forcing-cli.js +53 -0
  32. package/dist/forcing-cli.js.map +1 -0
  33. package/dist/index.js +41 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/mcp/tools/index.d.ts.map +1 -1
  36. package/dist/mcp/tools/index.js +24 -3
  37. package/dist/mcp/tools/index.js.map +1 -1
  38. package/dist/mcp/tools/setup-agent-forcing.d.ts +19 -0
  39. package/dist/mcp/tools/setup-agent-forcing.d.ts.map +1 -0
  40. package/dist/mcp/tools/setup-agent-forcing.js +86 -0
  41. package/dist/mcp/tools/setup-agent-forcing.js.map +1 -0
  42. package/dist/usage-local/index.d.ts +3 -1
  43. package/dist/usage-local/index.d.ts.map +1 -1
  44. package/dist/usage-local/index.js +1 -0
  45. package/dist/usage-local/index.js.map +1 -1
  46. package/dist/usage-local/model-pricing.d.ts +11 -7
  47. package/dist/usage-local/model-pricing.d.ts.map +1 -1
  48. package/dist/usage-local/model-pricing.js +109 -86
  49. package/dist/usage-local/model-pricing.js.map +1 -1
  50. package/dist/usage-local/plan.d.ts +58 -0
  51. package/dist/usage-local/plan.d.ts.map +1 -0
  52. package/dist/usage-local/plan.js +84 -0
  53. package/dist/usage-local/plan.js.map +1 -0
  54. package/package.json +1 -1
@@ -14,24 +14,60 @@ import * as fs from 'node:fs';
14
14
  import * as path from 'node:path';
15
15
  import { homedir } from 'node:os';
16
16
  const SCAN_TARGETS = [
17
- {
18
- label: '旧 OpenClaw trajectory (>7d)',
17
+ // ── Agent trace files ──
18
+ { label: '旧 OpenClaw trajectory (>7d)',
19
19
  base: path.join(homedir(), '.openclaw', 'agents'),
20
- matcher: (_, name) => name.endsWith('.trajectory.jsonl'),
21
- min_age_days: 7,
22
- },
23
- {
24
- label: 'OpenClaw debug logs (>7d)',
20
+ matcher: (_, name) => name.endsWith('.trajectory.jsonl'), min_age_days: 7 },
21
+ { label: 'OpenClaw debug logs (>7d)',
25
22
  base: '/tmp/openclaw',
26
- matcher: (_, name) => name.endsWith('.log'),
27
- min_age_days: 7,
28
- },
29
- {
30
- label: '.DS_Store 系统文件',
23
+ matcher: (_, name) => name.endsWith('.log'), min_age_days: 7 },
24
+ { label: '旧 Claude Code session jsonl (>30d)',
25
+ base: path.join(homedir(), '.claude', 'projects'),
26
+ matcher: (_, name) => name.endsWith('.jsonl'), min_age_days: 30 },
27
+ // ── 系统垃圾 ──
28
+ { label: '.DS_Store 系统文件',
31
29
  base: homedir(),
32
- matcher: (_, name) => name === '.DS_Store',
33
- min_age_days: 0,
34
- },
30
+ matcher: (_, name) => name === '.DS_Store', min_age_days: 0 },
31
+ { label: '.AppleDouble',
32
+ base: homedir(),
33
+ matcher: (_, name) => name.startsWith('._'), min_age_days: 30 },
34
+ { label: 'Thumbs.db (Windows)',
35
+ base: homedir(),
36
+ matcher: (_, name) => name === 'Thumbs.db', min_age_days: 0 },
37
+ // ── npm / node cache 旧 ──
38
+ { label: 'npm _cacache (>30d)',
39
+ base: path.join(homedir(), '.npm', '_cacache'),
40
+ matcher: (_, name) => true, min_age_days: 30 },
41
+ { label: 'npm _logs',
42
+ base: path.join(homedir(), '.npm', '_logs'),
43
+ matcher: (_, name) => name.endsWith('.log'), min_age_days: 7 },
44
+ { label: 'npx 旧 cache',
45
+ base: path.join(homedir(), '.npm', '_npx'),
46
+ matcher: (_, name) => true, min_age_days: 30 },
47
+ // ── pip / cargo / 编译 cache ──
48
+ { label: 'pip cache 旧',
49
+ base: path.join(homedir(), '.cache', 'pip'),
50
+ matcher: (_, name) => true, min_age_days: 30 },
51
+ // ── macOS Caches 旧 ──
52
+ { label: 'macOS user Caches 旧 (>60d)',
53
+ base: path.join(homedir(), 'Library', 'Caches'),
54
+ matcher: (_, name) => name.endsWith('.cache') || name.endsWith('.tmp') || name.endsWith('.log'),
55
+ min_age_days: 60 },
56
+ // ── Downloads 旧 ──
57
+ { label: 'Downloads 旧 (>180d)',
58
+ base: path.join(homedir(), 'Downloads'),
59
+ matcher: (_, name) => true, min_age_days: 180 },
60
+ // ── /tmp 旧 ──
61
+ { label: '/tmp 旧文件 (>14d)',
62
+ base: '/tmp',
63
+ matcher: (_, name) => true, min_age_days: 14 },
64
+ // ── 各 IDE temp ──
65
+ { label: 'Cursor 旧 cache',
66
+ base: path.join(homedir(), 'Library', 'Application Support', 'Cursor', 'CachedExtensionVSIXs'),
67
+ matcher: (_, name) => true, min_age_days: 60 },
68
+ { label: 'VS Code 旧 logs',
69
+ base: path.join(homedir(), 'Library', 'Application Support', 'Code', 'logs'),
70
+ matcher: (_, name) => true, min_age_days: 30 },
35
71
  ];
36
72
  /**
37
73
  * 主扫描入口 — recursive 但限深度 (4)
@@ -80,7 +116,55 @@ async function scanGroup(base, matcher, min_age_days, maxDepth = 4) {
80
116
  return group;
81
117
  }
82
118
  /**
83
- * 跑一次 file 体检 DimensionStatus + group 详情
119
+ * 累计 cleanup historyV1.4 (Eric Q3: 0 MB 不能死气, 用累计激发感知)
120
+ */
121
+ const CLEANUP_HISTORY_PATH = path.join(homedir(), '.skillfm', 'cleanup-history.jsonl');
122
+ async function loadCleanupTotalThisMonth() {
123
+ if (!fs.existsSync(CLEANUP_HISTORY_PATH))
124
+ return { bytes: 0, files: 0 };
125
+ try {
126
+ const text = await fs.promises.readFile(CLEANUP_HISTORY_PATH, 'utf-8');
127
+ const monthStart = new Date();
128
+ monthStart.setDate(1);
129
+ monthStart.setHours(0, 0, 0, 0);
130
+ let bytes = 0, files = 0;
131
+ for (const line of text.split('\n')) {
132
+ const t = line.trim();
133
+ if (!t.startsWith('{'))
134
+ continue;
135
+ try {
136
+ const entry = JSON.parse(t);
137
+ if (Date.parse(entry.timestamp) >= monthStart.getTime()) {
138
+ bytes += entry.bytes_freed;
139
+ files += entry.files_moved;
140
+ }
141
+ }
142
+ catch { }
143
+ }
144
+ return { bytes, files };
145
+ }
146
+ catch {
147
+ return { bytes: 0, files: 0 };
148
+ }
149
+ }
150
+ async function appendCleanupHistory(entry) {
151
+ const dir = path.dirname(CLEANUP_HISTORY_PATH);
152
+ if (!fs.existsSync(dir)) {
153
+ await fs.promises.mkdir(dir, { recursive: true, mode: 0o700 });
154
+ }
155
+ await fs.promises.appendFile(CLEANUP_HISTORY_PATH, JSON.stringify(entry) + '\n', { mode: 0o600 });
156
+ }
157
+ function formatBytes(bytes) {
158
+ if (bytes >= 1024 ** 3)
159
+ return (bytes / (1024 ** 3)).toFixed(1) + ' GB';
160
+ if (bytes >= 1024 ** 2)
161
+ return (bytes / (1024 ** 2)).toFixed(0) + ' MB';
162
+ if (bytes >= 1024)
163
+ return (bytes / 1024).toFixed(0) + ' KB';
164
+ return bytes + ' B';
165
+ }
166
+ /**
167
+ * 跑一次 file 体检 — 返 DimensionStatus + 各 group 详情 + 累计 history
84
168
  */
85
169
  export async function checkDimensionFiles() {
86
170
  const groups = [];
@@ -92,31 +176,34 @@ export async function checkDimensionFiles() {
92
176
  }
93
177
  const total_bytes = groups.reduce((s, g) => s + g.total_bytes, 0);
94
178
  const total_gb = total_bytes / (1024 ** 3);
179
+ const cumulative = await loadCleanupTotalThisMonth();
95
180
  const findings = [];
96
181
  let severity = 'healthy';
97
182
  if (total_gb > 10) {
98
183
  findings.push({
99
- headline: `${total_gb.toFixed(1)} GB 中间文件可清`,
184
+ headline: `${formatBytes(total_bytes)} 中间文件可清 (扫了 ${groups.length} 类)`,
100
185
  severity: 'critical',
101
186
  score_deduction: 15,
102
- fix_label: '一键清 (基础安全 path)',
187
+ fix_label: '一键清 (基础安全 path, 可恢复)',
103
188
  fix_free_allowed: true,
189
+ estimated_savings: { description: `释放 ${formatBytes(total_bytes)} 磁盘` },
104
190
  });
105
191
  severity = 'critical';
106
192
  }
107
193
  else if (total_gb > 3) {
108
194
  findings.push({
109
- headline: `${total_gb.toFixed(1)} GB 中间文件可清`,
195
+ headline: `${formatBytes(total_bytes)} 中间文件可清`,
110
196
  severity: 'warning',
111
197
  score_deduction: 8,
112
198
  fix_label: '一键清',
113
199
  fix_free_allowed: true,
200
+ estimated_savings: { description: `释放 ${formatBytes(total_bytes)} 磁盘` },
114
201
  });
115
202
  severity = 'warning';
116
203
  }
117
204
  else if (total_bytes > 100 * 1024 * 1024) { // 100MB+
118
205
  findings.push({
119
- headline: `${(total_bytes / (1024 ** 2)).toFixed(0)} MB 中间文件可清`,
206
+ headline: `${formatBytes(total_bytes)} 中间文件可清`,
120
207
  severity: 'info',
121
208
  score_deduction: 3,
122
209
  fix_label: '一键清',
@@ -124,9 +211,20 @@ export async function checkDimensionFiles() {
124
211
  });
125
212
  severity = 'info';
126
213
  }
127
- const headline = total_bytes > 0
128
- ? `${total_gb >= 0.1 ? total_gb.toFixed(1) + ' GB' : (total_bytes / 1024 / 1024).toFixed(0) + ' MB'} 可清`
129
- : '无中间文件可清';
214
+ // V1.4 0 MB 时正向 UX (累计 history 激发感知)
215
+ let headline;
216
+ if (total_bytes === 0) {
217
+ if (cumulative.bytes > 0) {
218
+ headline = `✨ 干净! 本月已帮你清 ${formatBytes(cumulative.bytes)}`;
219
+ }
220
+ else {
221
+ headline = `✨ 干净! 文件保持得很好`;
222
+ }
223
+ }
224
+ else {
225
+ const cumulativeStr = cumulative.bytes > 0 ? ` (本月已清 ${formatBytes(cumulative.bytes)})` : '';
226
+ headline = `${formatBytes(total_bytes)} 可清${cumulativeStr}`;
227
+ }
130
228
  return {
131
229
  dimension: 'files',
132
230
  severity,
@@ -134,8 +232,13 @@ export async function checkDimensionFiles() {
134
232
  findings,
135
233
  pro_locked: false,
136
234
  groups,
235
+ cumulative_this_month: cumulative,
137
236
  };
138
237
  }
238
+ /**
239
+ * Export for cleanup execution to record history
240
+ */
241
+ export { appendCleanupHistory };
139
242
  /**
140
243
  * 一键清 — 删 group 列出的文件 (移到 ~/.skillfm/cleanup-archive/<timestamp>/ 不真删, 7 天后真清)
141
244
  * 返 删了多少 bytes + 多少 file
@@ -160,6 +263,14 @@ export async function executeFileCleanup(groups) {
160
263
  }
161
264
  }
162
265
  }
266
+ // V1.4: append history (for next checkup show "本月已清 X GB")
267
+ if (bytes_freed > 0) {
268
+ await appendCleanupHistory({
269
+ timestamp: new Date().toISOString(),
270
+ bytes_freed,
271
+ files_moved,
272
+ }).catch(() => { });
273
+ }
163
274
  return { bytes_freed, files_moved };
164
275
  }
165
276
  //# sourceMappingURL=dimension-3-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dimension-3-files.js","sourceRoot":"","sources":["../../src/checkup/dimension-3-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dimension-3-files.js","sourceRoot":"","sources":["../../src/checkup/dimension-3-files.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,13 @@ export interface CheckupDeps {
14
14
  */
15
15
  export declare function runCheckup(deps: CheckupDeps): Promise<CheckupReport>;
16
16
  /**
17
- * 主入口 UX 渲染 — 把 CheckupReport 渲染成 < 300 字的中文文本块
18
- * (PRD §3.1 极简主入口)
17
+ * 主入口 UX 渲染 — 把 CheckupReport 渲染成 < 300 字的中文文本块.
18
+ * V1.4 乔布斯级打磨 (Eric 真测反馈):
19
+ * - 健康度配形容词 (96 ✨ 优秀 / 67 ⚠ 需关注)
20
+ * - 维度 emoji 一致 + Pro 维度折叠成 1 行不重复
21
+ * - "今日 #1" 用 actionable 文案 (含真数字)
22
+ * - 0 MB 文件正向反馈
23
+ * - action button 收到 2-3 个最关键
19
24
  */
20
25
  export declare function renderMainEntry(report: CheckupReport): string;
21
26
  //# sourceMappingURL=report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/checkup/report.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAWjE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,CAAC;IACvB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAgE1E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAgD7D"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/checkup/report.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAWjE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,CAAC;IACvB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAgE1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA0D7D"}
@@ -61,62 +61,102 @@ export async function runCheckup(deps) {
61
61
  return report;
62
62
  }
63
63
  /**
64
- * 主入口 UX 渲染 — 把 CheckupReport 渲染成 < 300 字的中文文本块
65
- * (PRD §3.1 极简主入口)
64
+ * 主入口 UX 渲染 — 把 CheckupReport 渲染成 < 300 字的中文文本块.
65
+ * V1.4 乔布斯级打磨 (Eric 真测反馈):
66
+ * - 健康度配形容词 (96 ✨ 优秀 / 67 ⚠ 需关注)
67
+ * - 维度 emoji 一致 + Pro 维度折叠成 1 行不重复
68
+ * - "今日 #1" 用 actionable 文案 (含真数字)
69
+ * - 0 MB 文件正向反馈
70
+ * - action button 收到 2-3 个最关键
66
71
  */
67
72
  export function renderMainEntry(report) {
68
73
  const lines = [];
69
- const trendStr = report.health_trend != null
70
- ? (report.health_trend > 0 ? ` (上次 ${report.health_score - report.health_trend}, ↑${report.health_trend})` : ` (上次 ${report.health_score - report.health_trend}, ↓${-report.health_trend})`)
71
- : '';
72
- const overall_emoji = report.health_score >= 90 ? '✨' : report.health_score >= 70 ? '✅' : report.health_score >= 50 ? '⚠️' : '🔴';
73
- lines.push(`🧬 你家 AI · 健康度 ${report.health_score}/100 ${overall_emoji}${trendStr}`);
74
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━');
74
+ // ── 健康度: score + 形容词 + trend ──
75
+ const overall = scoreLabel(report.health_score);
76
+ const trendStr = formatTrend(report.health_trend);
77
+ lines.push(`🧬 你家 AI · ${report.health_score} 健康度 ${overall.emoji} ${overall.label}${trendStr}`);
78
+ lines.push('━━━━━━━━━━━━━━━━━━━');
75
79
  lines.push('');
76
- // 维度行
77
- for (const dim of report.dimensions) {
80
+ // ── Free 维度 (用量 / 文件 / 上下文) ──
81
+ const freeDimensions = report.dimensions.filter((d) => !d.pro_locked);
82
+ for (const dim of freeDimensions) {
78
83
  const sevEmoji = severityEmoji(dim.severity);
79
- const lockTag = dim.pro_locked ? ' [Pro 解锁]' : '';
80
84
  const dimLabel = labelOf(dim.dimension);
81
- lines.push(`${dimLabel}${sevEmoji} ${dim.headline}${lockTag}`);
85
+ lines.push(`${dimLabel} ${sevEmoji} ${dim.headline}`);
82
86
  }
83
- // 用量子行 (对账 surface, 主入口灵魂位置)
87
+ // ── 用量子行 (对账 surface — SkillFM 灵魂位置) ──
84
88
  if (report.usage_summary_lines.length > 0) {
85
- lines.push('');
86
89
  for (const sl of report.usage_summary_lines) {
87
- lines.push(` ${sl}`);
90
+ lines.push(` · ${sl}`);
88
91
  }
89
92
  }
90
- // Today's #1
93
+ // ── Pro 维度 (折成 1 行, 不重复 5 次"Pro 解锁") ──
94
+ const proDimensions = report.dimensions.filter((d) => d.pro_locked);
95
+ if (proDimensions.length > 0) {
96
+ const proLabels = proDimensions.map((d) => labelOf(d.dimension).trim()).join(' + ');
97
+ lines.push(`🔒 ${proLabels} (Pro 解锁深度优化)`);
98
+ }
91
99
  lines.push('');
92
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━');
100
+ lines.push('━━━━━━━━━━━━━━━━━━━');
101
+ // ── Today's #1 (or 无问题 fallback) ──
93
102
  if (report.all_healthy) {
94
- lines.push(`✨ 今日: 你家 AI 高效如初. 保持!`);
103
+ lines.push(`✨ 你家 AI 今日高效如初, 继续保持!`);
95
104
  }
96
105
  else if (report.top_focus) {
97
- lines.push(`今日 #1: ${report.top_focus.headline}`);
106
+ lines.push(`今日重点:`);
107
+ lines.push(` ${report.top_focus.headline}`);
98
108
  if (report.top_focus.fix_label) {
99
- lines.push(` ${report.top_focus.fix_label}`);
109
+ lines.push(`${report.top_focus.fix_label}`);
100
110
  }
101
111
  }
102
- // Action buttons
112
+ // ── Action buttons (收到 2-3 个最关键, 不堆 4 个) ──
103
113
  lines.push('');
104
- if (report.top_focus?.fix_free_allowed) {
105
- lines.push('[🛠 修这一个] [📊 看全部] [⏰ 设每日] [✨ Pro]');
114
+ if (report.top_focus?.fix_free_allowed && report.top_focus.fix_label) {
115
+ // CTA = 修这一个; = 看全部; tertiary = Pro
116
+ lines.push('[🛠 修这一个] [📊 看全部] [✨ Pro]');
117
+ }
118
+ else if (report.all_healthy) {
119
+ lines.push('[📊 看历史] [📤 分享战绩] [✨ Pro]');
106
120
  }
107
121
  else {
108
- lines.push('[📊 看全部] [⏰ 设每日] [✨ Pro 解锁自动 fix]');
122
+ lines.push('[📊 看全部] [✨ Pro 解锁自动 fix]');
109
123
  }
110
124
  return lines.join('\n');
111
125
  }
126
+ /**
127
+ * 健康度 score → 形容词 + emoji (类 iPhone Battery Health 真分级)
128
+ */
129
+ function scoreLabel(score) {
130
+ if (score >= 95)
131
+ return { emoji: '✨', label: '优秀' };
132
+ if (score >= 85)
133
+ return { emoji: '✅', label: '良好' };
134
+ if (score >= 70)
135
+ return { emoji: '🙂', label: '尚可' };
136
+ if (score >= 50)
137
+ return { emoji: '⚠️', label: '需关注' };
138
+ return { emoji: '🔴', label: '需立刻处理' };
139
+ }
140
+ /**
141
+ * Trend 文案: ↑8 / ↓11 / 无变化
142
+ */
143
+ function formatTrend(trend) {
144
+ if (trend == null)
145
+ return '';
146
+ if (trend === 0)
147
+ return ' (vs 上次, 持平)';
148
+ if (trend > 0)
149
+ return ` (vs 上次, ↑${trend})`;
150
+ return ` (vs 上次, ↓${-trend})`;
151
+ }
112
152
  function severityEmoji(s) {
113
153
  switch (s) {
114
- case 'critical': return ' 🔴';
115
- case 'warning': return ' 🟠';
116
- case 'info': return ' 🟡';
117
- case 'healthy': return ' ✅';
154
+ case 'critical': return '🔴';
155
+ case 'warning': return '🟠';
156
+ case 'info': return '🟡';
157
+ case 'healthy': return '✅';
118
158
  case 'pro_locked': return '';
119
- case 'no_data': return ' ❓';
159
+ case 'no_data': return '❓';
120
160
  default: return '';
121
161
  }
122
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/checkup/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/checkup/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdCheckup(): Promise<void>;
2
+ //# sourceMappingURL=checkup-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkup-cli.d.ts","sourceRoot":"","sources":["../src/checkup-cli.ts"],"names":[],"mappings":"AAsBA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA+BhD"}
@@ -0,0 +1,46 @@
1
+ // sdk/skillfm-local/src/checkup-cli.ts
2
+ //
3
+ // CLI fallback (V1.4): npx @skillfm/local checkup
4
+ // 用户终端直接看主入口 UX, 完全 bypass agent.
5
+ //
6
+ // 真用法:
7
+ // npx -y @skillfm/local@latest checkup # today
8
+ // npx -y @skillfm/local@latest checkup --week # 本周
9
+ // npx -y @skillfm/local@latest checkup --json # raw JSON
10
+ //
11
+ // 这是解决 agent 弱问题的 0 摩擦兜底 — 即使 agent 抽风, 用户能直接看.
12
+ import { startUsageLocal } from './usage-local/index.js';
13
+ import { ReconciliationEngine } from './reconciliation/index.js';
14
+ import { AnthropicConnector, OpenAIConnector, DeepSeekConnector, KimiConnector, QwenConnector, DoubaoConnector, } from './connectors/index.js';
15
+ import { Vault } from './vault/index.js';
16
+ import { runCheckup, renderMainEntry } from './checkup/index.js';
17
+ export async function cmdCheckup() {
18
+ const args = process.argv.slice(3);
19
+ const jsonMode = args.includes('--json');
20
+ // 启动 L0 watcher (warm scan), 等真聚合数据
21
+ const usage = await startUsageLocal({ verbose: false });
22
+ const vault = new Vault();
23
+ const connectors = {
24
+ anthropic: new AnthropicConnector(),
25
+ openai: new OpenAIConnector(),
26
+ deepseek: new DeepSeekConnector(),
27
+ kimi: new KimiConnector(),
28
+ qwen: new QwenConnector(),
29
+ doubao: new DoubaoConnector(),
30
+ };
31
+ const recEngine = new ReconciliationEngine({ vault, connectors, store: usage.store });
32
+ const report = await runCheckup({
33
+ store: usage.store,
34
+ reconciliationEngine: recEngine,
35
+ is_pro: false, // CLI 模式 default Free; 后续可加 --pro flag
36
+ });
37
+ if (jsonMode) {
38
+ console.log(JSON.stringify(report, null, 2));
39
+ }
40
+ else {
41
+ console.log(renderMainEntry(report));
42
+ }
43
+ usage.stop();
44
+ process.exit(0);
45
+ }
46
+ //# sourceMappingURL=checkup-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkup-cli.js","sourceRoot":"","sources":["../src/checkup-cli.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,kDAAkD;AAClD,kCAAkC;AAClC,EAAE;AACF,OAAO;AACP,2DAA2D;AAC3D,wDAAwD;AACxD,8DAA8D;AAC9D,EAAE;AACF,gDAAgD;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EACtD,aAAa,EAAE,aAAa,EAAE,eAAe,GAC9C,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzC,oCAAoC;IACpC,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,UAAU,GAA8B;QAC5C,SAAS,EAAE,IAAI,kBAAkB,EAAE;QACnC,MAAM,EAAE,IAAI,eAAe,EAAE;QAC7B,QAAQ,EAAE,IAAI,iBAAiB,EAAE;QACjC,IAAI,EAAE,IAAI,aAAa,EAAE;QACzB,IAAI,EAAE,IAAI,aAAa,EAAE;QACzB,MAAM,EAAE,IAAI,eAAe,EAAE;KAC9B,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAEtF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;QAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,oBAAoB,EAAE,SAAS;QAC/B,MAAM,EAAE,KAAK,EAAE,uCAAuC;KACvD,CAAC,CAAC;IAEH,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,IAAI,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function cmdForcing(): Promise<void>;
2
+ //# sourceMappingURL=forcing-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forcing-cli.d.ts","sourceRoot":"","sources":["../src/forcing-cli.ts"],"names":[],"mappings":"AAeA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAsChD"}
@@ -0,0 +1,53 @@
1
+ // sdk/skillfm-local/src/forcing-cli.ts
2
+ //
3
+ // CLI: npx @skillfm/local forcing <subcommand>
4
+ // detect — 仅检测各 harness, 不真改
5
+ // inject — 真注入 SKILLFM-AGENT-GUIDE block 到检测到的 harness
6
+ // uninstall — 移除已注入的 block
7
+ //
8
+ // 这是用户手动控制 agent forcing 的 CLI fallback (sidecar 启动时也会自动跑 inject).
9
+ import { detectAllHarnesses, injectAllDetected, removeAllInjections, } from './agent-forcing/index.js';
10
+ export async function cmdForcing() {
11
+ const sub = process.argv[3] ?? 'detect';
12
+ if (sub === 'detect') {
13
+ const detections = await detectAllHarnesses();
14
+ console.log('🤖 SkillFM Agent Forcing — Detection');
15
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━');
16
+ for (const d of detections) {
17
+ const status = !d.detected ? '❌ 未装'
18
+ : d.already_injected ? '✅ 已注入'
19
+ : '⚠️ 未注入';
20
+ console.log(` ${d.harness}: ${status}${d.inject_path ? ` (${d.inject_path})` : ''}`);
21
+ }
22
+ }
23
+ else if (sub === 'inject') {
24
+ const results = await injectAllDetected({});
25
+ console.log('🤖 SkillFM Agent Forcing — Inject');
26
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━');
27
+ for (const r of results) {
28
+ if (r.applied) {
29
+ console.log(` ✅ ${r.harness}: 注入 ${r.bytes_injected} 字节 → ${r.inject_path}`);
30
+ if (r.revert_command)
31
+ console.log(` 回滚: ${r.revert_command}`);
32
+ }
33
+ else {
34
+ console.log(` ⚠️ ${r.harness}: ${r.error ?? 'skip'}`);
35
+ }
36
+ }
37
+ }
38
+ else if (sub === 'uninstall') {
39
+ const results = await removeAllInjections();
40
+ console.log('🗑 SkillFM Agent Forcing — Uninstall');
41
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━');
42
+ for (const r of results) {
43
+ console.log(r.applied ? ` ✅ ${r.harness}: 移除完成` : ` ⚠️ ${r.harness}: ${r.error ?? 'no block'}`);
44
+ }
45
+ }
46
+ else {
47
+ console.error(`Unknown forcing subcommand: ${sub}`);
48
+ console.error('Usage: skillfm-local forcing <detect|inject|uninstall>');
49
+ process.exit(1);
50
+ }
51
+ process.exit(0);
52
+ }
53
+ //# sourceMappingURL=forcing-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forcing-cli.js","sourceRoot":"","sources":["../src/forcing-cli.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,+CAA+C;AAC/C,qCAAqC;AACrC,+DAA+D;AAC/D,gCAAgC;AAChC,EAAE;AACF,mEAAmE;AAEnE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAExC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;gBACjC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO;oBAC9B,CAAC,CAAC,QAAQ,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,cAAc,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC9E,IAAI,CAAC,CAAC,cAAc;oBAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
package/dist/index.js CHANGED
@@ -1371,6 +1371,33 @@ async function cmdStart() {
1371
1371
  }));
1372
1372
  });
1373
1373
  }
1374
+ // V1.4 — Agent Forcing auto-inject (Eric 反馈: install 时就该写 forcing block)
1375
+ // 解决 agent (尤其 MiniMax 类弱 instruction following) 不调 SkillFM MCP tool 的核心问题
1376
+ // 检测各 harness workspace files + 写 SKILLFM-AGENT-GUIDE marker block
1377
+ // 已注入的会 detect + skip / 升级时 replace block
1378
+ // fire-and-forget; 失败不阻塞 sidecar
1379
+ void (async () => {
1380
+ try {
1381
+ const { injectAllDetected } = await import('./agent-forcing/index.js');
1382
+ const results = await injectAllDetected({
1383
+ sidecar_url: url,
1384
+ version: PKG_VERSION,
1385
+ });
1386
+ const applied = results.filter((r) => r.applied);
1387
+ if (applied.length > 0) {
1388
+ console.error(JSON.stringify({
1389
+ ok: true,
1390
+ agent_forcing_injected: applied.map((r) => ({ harness: r.harness, path: r.inject_path })),
1391
+ }));
1392
+ }
1393
+ }
1394
+ catch (err) {
1395
+ console.error(JSON.stringify({
1396
+ ok: false,
1397
+ agent_forcing_failed: err.message,
1398
+ }));
1399
+ }
1400
+ })();
1374
1401
  const shutdown = () => {
1375
1402
  deleteLocalSettings();
1376
1403
  server.close(() => process.exit(0));
@@ -1516,6 +1543,20 @@ const main = async () => {
1516
1543
  await startServer();
1517
1544
  break;
1518
1545
  }
1546
+ case 'checkup': {
1547
+ // V1.4 — CLI fallback (bypass agent). 用户终端直接看主入口 UX.
1548
+ // 即使 agent 抽风不调 MCP, 用户也能 npx skillfm-local checkup 看真数据.
1549
+ const { cmdCheckup } = await import('./checkup-cli.js');
1550
+ await cmdCheckup();
1551
+ break;
1552
+ }
1553
+ case 'forcing': {
1554
+ // V1.4 — Agent forcing 一键配 (CLI fallback)
1555
+ // 用户可手动 `npx skillfm-local forcing inject` / `forcing detect` / `forcing uninstall`
1556
+ const { cmdForcing } = await import('./forcing-cli.js');
1557
+ await cmdForcing();
1558
+ break;
1559
+ }
1519
1560
  case 'skill': {
1520
1561
  // Alias for run-skill, kept for the npx subcommand router
1521
1562
  // (`npx -y @skillfm/local skill <slug>`).