cc-code-status 1.0.0 → 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.
package/README.md CHANGED
@@ -67,6 +67,9 @@ npm uninstall -g cc-code-status
67
67
  - `cc-code-status` - 运行状态栏插件(由 Claude Code 调用)
68
68
  - `cc-code-status setup` - 配置 Claude Code
69
69
  - `cc-code-status uninstall` - 移除配置
70
+ - `cc-code-status sync-enable` - 启用数据上报功能
71
+ - `cc-code-status sync-disable` - 禁用数据上报功能
72
+ - `cc-code-status sync-status` - 查看数据上报状态
70
73
  - `cc-code-status help` - 显示帮助
71
74
 
72
75
  ## 技术实现
package/dist/cli.js CHANGED
@@ -48,6 +48,22 @@ else if (command === 'uninstall') {
48
48
  // 运行卸载
49
49
  uninstall();
50
50
  }
51
+ else if (command === 'sync-enable') {
52
+ // 启用数据上报
53
+ setSyncEnabled(true);
54
+ }
55
+ else if (command === 'sync-disable') {
56
+ // 禁用数据上报
57
+ setSyncEnabled(false);
58
+ }
59
+ else if (command === 'sync-status') {
60
+ // 查看数据上报状态
61
+ showSyncStatus();
62
+ }
63
+ else if (command === 'week') {
64
+ // 显示本周统计
65
+ showWeekStats();
66
+ }
51
67
  else if (command === 'help' || command === '--help' || command === '-h') {
52
68
  // 显示帮助
53
69
  showHelp();
@@ -130,18 +146,322 @@ function uninstall() {
130
146
  console.log('完成卸载请运行:');
131
147
  console.log(' npm uninstall -g cc-code-status');
132
148
  }
149
+ function setSyncEnabled(enabled) {
150
+ const configDir = path.join(os.homedir(), '.cc-code-status');
151
+ const configFile = path.join(configDir, 'config.json');
152
+ // 确保目录存在
153
+ if (!fs.existsSync(configDir)) {
154
+ fs.mkdirSync(configDir, { recursive: true });
155
+ }
156
+ // 读取现有配置
157
+ let config = {
158
+ apiUrl: 'http://10.40.0.70:8087/api/cloudcode-ai/batch-receive',
159
+ syncInterval: 1800000,
160
+ enabled: false
161
+ };
162
+ if (fs.existsSync(configFile)) {
163
+ try {
164
+ const content = fs.readFileSync(configFile, 'utf8');
165
+ config = JSON.parse(content);
166
+ }
167
+ catch (error) {
168
+ console.error('⚠️ 读取配置文件失败,使用默认配置');
169
+ }
170
+ }
171
+ // 更新 enabled 状态
172
+ config.enabled = enabled;
173
+ // 写入配置
174
+ try {
175
+ fs.writeFileSync(configFile, JSON.stringify(config, null, 2));
176
+ console.log('');
177
+ if (enabled) {
178
+ console.log('✅ 数据上报功能已启用');
179
+ console.log('');
180
+ console.log(`📡 API 地址: ${config.apiUrl}`);
181
+ console.log(`⏱️ 同步间隔: ${config.syncInterval / 1000 / 60} 分钟`);
182
+ }
183
+ else {
184
+ console.log('✅ 数据上报功能已禁用');
185
+ }
186
+ console.log('');
187
+ console.log(`配置文件: ${configFile}`);
188
+ console.log('');
189
+ }
190
+ catch (error) {
191
+ console.error('❌ 写入配置文件失败:', error);
192
+ }
193
+ }
194
+ function showSyncStatus() {
195
+ const configFile = path.join(os.homedir(), '.cc-code-status', 'config.json');
196
+ if (!fs.existsSync(configFile)) {
197
+ console.log('');
198
+ console.log('⚠️ 配置文件不存在');
199
+ console.log('');
200
+ console.log('运行以下命令启用数据上报:');
201
+ console.log(' cc-code-status sync-enable');
202
+ console.log('');
203
+ return;
204
+ }
205
+ try {
206
+ const content = fs.readFileSync(configFile, 'utf8');
207
+ const config = JSON.parse(content);
208
+ console.log('');
209
+ console.log('========================================');
210
+ console.log(' 数据上报状态');
211
+ console.log('========================================');
212
+ console.log('');
213
+ console.log(`状态: ${config.enabled ? '✅ 已启用' : '❌ 已禁用'}`);
214
+ console.log(`API 地址: ${config.apiUrl || '(未配置)'}`);
215
+ console.log(`同步间隔: ${(config.syncInterval || 1800000) / 1000 / 60} 分钟`);
216
+ console.log('');
217
+ console.log(`配置文件: ${configFile}`);
218
+ console.log('');
219
+ if (config.enabled) {
220
+ console.log('要禁用数据上报,运行:');
221
+ console.log(' cc-code-status sync-disable');
222
+ }
223
+ else {
224
+ console.log('要启用数据上报,运行:');
225
+ console.log(' cc-code-status sync-enable');
226
+ }
227
+ console.log('');
228
+ }
229
+ catch (error) {
230
+ console.error('❌ 读取配置失败:', error);
231
+ }
232
+ }
133
233
  function showHelp() {
134
234
  console.log('CC Code Status Plugin - Claude Code git 用户信息显示');
135
235
  console.log('');
136
236
  console.log('用法:');
137
- console.log(' cc-code-status 作为状态栏插件运行(由 Claude Code 使用)');
138
- console.log(' cc-code-status setup 配置 Claude Code 使用此插件');
139
- console.log(' cc-code-status uninstall 从 Claude Code 中移除插件配置');
140
- console.log(' cc-code-status help 显示此帮助信息');
237
+ console.log(' cc-code-status 作为状态栏插件运行(由 Claude Code 使用)');
238
+ console.log(' cc-code-status setup 配置 Claude Code 使用此插件');
239
+ console.log(' cc-code-status uninstall 从 Claude Code 中移除插件配置');
240
+ console.log(' cc-code-status sync-enable 启用数据上报功能');
241
+ console.log(' cc-code-status sync-disable 禁用数据上报功能');
242
+ console.log(' cc-code-status sync-status 查看数据上报状态');
243
+ console.log(' cc-code-status week 显示本周统计(对话次数/轮数、代码行数)');
244
+ console.log(' cc-code-status help 显示此帮助信息');
141
245
  console.log('');
142
246
  console.log('安装:');
143
247
  console.log(' npm install -g cc-code-status');
144
248
  console.log('');
145
249
  console.log('安装后插件会自动配置。');
146
250
  }
251
+ function showWeekStats() {
252
+ const { execSync } = require('child_process');
253
+ try {
254
+ // 获取 git 用户名
255
+ let username = 'Unknown';
256
+ try {
257
+ username = execSync('git config user.name', {
258
+ encoding: 'utf8',
259
+ stdio: ['pipe', 'pipe', 'ignore']
260
+ }).trim();
261
+ }
262
+ catch {
263
+ // 忽略错误
264
+ }
265
+ // 计算本周的日期范围(周一到周日)
266
+ const today = new Date();
267
+ const dayOfWeek = today.getDay(); // 0=周日, 1=周一, ..., 6=周六
268
+ const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // 到本周一的天数
269
+ const weekStart = new Date(today);
270
+ weekStart.setDate(today.getDate() - daysToMonday);
271
+ weekStart.setHours(0, 0, 0, 0);
272
+ const weekEnd = new Date(weekStart);
273
+ weekEnd.setDate(weekStart.getDate() + 6);
274
+ weekEnd.setHours(23, 59, 59, 999);
275
+ // 收集本周每一天的数据
276
+ const dailyStats = [];
277
+ let totalConversations = 0;
278
+ let totalRounds = 0;
279
+ let totalAdded = 0;
280
+ let totalDeleted = 0;
281
+ const dayNames = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
282
+ for (let i = 0; i < 7; i++) {
283
+ const currentDay = new Date(weekStart);
284
+ currentDay.setDate(weekStart.getDate() + i);
285
+ const dayStart = new Date(currentDay);
286
+ dayStart.setHours(0, 0, 0, 0);
287
+ const dayEnd = new Date(currentDay);
288
+ dayEnd.setHours(23, 59, 59, 999);
289
+ const conversations = countConversations(dayStart, dayEnd);
290
+ const rounds = countRounds(dayStart, dayEnd);
291
+ const codeStats = countCodeChanges(dayStart, dayEnd);
292
+ totalConversations += conversations;
293
+ totalRounds += rounds;
294
+ totalAdded += codeStats.added;
295
+ totalDeleted += codeStats.deleted;
296
+ dailyStats.push({
297
+ date: formatDate(currentDay),
298
+ dayName: dayNames[currentDay.getDay()],
299
+ conversations,
300
+ rounds,
301
+ codeAdded: codeStats.added,
302
+ codeDeleted: codeStats.deleted
303
+ });
304
+ }
305
+ // 输出结果
306
+ console.log('');
307
+ console.log('========================================');
308
+ console.log(` 本周统计 (${formatDate(weekStart)} 至 ${formatDate(weekEnd)})`);
309
+ console.log('========================================');
310
+ console.log('');
311
+ console.log(`总计: ${totalConversations}次/${totalRounds}轮 | +${totalAdded}/-${totalDeleted} 行`);
312
+ console.log('');
313
+ console.log('每日明细:');
314
+ console.log('');
315
+ for (const day of dailyStats) {
316
+ const dateStr = `${day.dayName} (${day.date})`;
317
+ const statsStr = `${day.conversations}次/${day.rounds}轮 | +${day.codeAdded}/-${day.codeDeleted} 行`;
318
+ console.log(` ${dateStr.padEnd(20)} ${statsStr}`);
319
+ }
320
+ console.log('');
321
+ }
322
+ catch (error) {
323
+ console.error('❌ 统计失败:', error);
324
+ }
325
+ }
326
+ // ========== 辅助函数 ==========
327
+ function formatDate(date) {
328
+ const year = date.getFullYear();
329
+ const month = String(date.getMonth() + 1).padStart(2, '0');
330
+ const day = String(date.getDate()).padStart(2, '0');
331
+ return `${year}-${month}-${day}`;
332
+ }
333
+ function countConversations(dayStart, dayEnd) {
334
+ try {
335
+ const projectsDir = path.join(os.homedir(), '.claude', 'projects');
336
+ if (!fs.existsSync(projectsDir)) {
337
+ return 0;
338
+ }
339
+ const sessionIds = new Set();
340
+ const projectDirs = fs.readdirSync(projectsDir);
341
+ for (const dir of projectDirs) {
342
+ const dirPath = path.join(projectsDir, dir);
343
+ if (!fs.statSync(dirPath).isDirectory())
344
+ continue;
345
+ const files = fs.readdirSync(dirPath).filter(f => f.endsWith('.jsonl') && !f.startsWith('agent-'));
346
+ for (const file of files) {
347
+ const filePath = path.join(dirPath, file);
348
+ const content = fs.readFileSync(filePath, 'utf8');
349
+ const lines = content.trim().split('\n');
350
+ if (lines.length === 0)
351
+ continue;
352
+ for (const line of lines) {
353
+ try {
354
+ const record = JSON.parse(line);
355
+ if (record.sessionId && record.timestamp) {
356
+ const timestamp = new Date(record.timestamp);
357
+ if (timestamp >= dayStart && timestamp <= dayEnd) {
358
+ sessionIds.add(record.sessionId);
359
+ }
360
+ break;
361
+ }
362
+ }
363
+ catch {
364
+ // 忽略解析错误
365
+ }
366
+ }
367
+ }
368
+ }
369
+ return sessionIds.size;
370
+ }
371
+ catch {
372
+ return 0;
373
+ }
374
+ }
375
+ function countRounds(dayStart, dayEnd) {
376
+ try {
377
+ const historyPath = path.join(os.homedir(), '.claude', 'history.jsonl');
378
+ if (!fs.existsSync(historyPath)) {
379
+ return 0;
380
+ }
381
+ let count = 0;
382
+ const content = fs.readFileSync(historyPath, 'utf8');
383
+ const lines = content.trim().split('\n').filter(line => line.trim());
384
+ for (const line of lines) {
385
+ try {
386
+ const entry = JSON.parse(line);
387
+ const display = entry.display?.trim() || '';
388
+ if (!display || display.startsWith('/')) {
389
+ continue;
390
+ }
391
+ const timestamp = new Date(entry.timestamp || entry.createdAt || 0);
392
+ if (timestamp >= dayStart && timestamp <= dayEnd) {
393
+ count++;
394
+ }
395
+ }
396
+ catch {
397
+ // 忽略解析错误
398
+ }
399
+ }
400
+ return count;
401
+ }
402
+ catch {
403
+ return 0;
404
+ }
405
+ }
406
+ function countCodeChanges(dayStart, dayEnd) {
407
+ try {
408
+ const projectsDir = path.join(os.homedir(), '.claude', 'projects');
409
+ if (!fs.existsSync(projectsDir)) {
410
+ return { added: 0, deleted: 0 };
411
+ }
412
+ let added = 0;
413
+ let deleted = 0;
414
+ const projectDirs = fs.readdirSync(projectsDir);
415
+ for (const dir of projectDirs) {
416
+ const dirPath = path.join(projectsDir, dir);
417
+ if (!fs.statSync(dirPath).isDirectory())
418
+ continue;
419
+ const files = fs.readdirSync(dirPath).filter(f => f.endsWith('.jsonl'));
420
+ for (const file of files) {
421
+ const filePath = path.join(dirPath, file);
422
+ const content = fs.readFileSync(filePath, 'utf8');
423
+ const lines = content.trim().split('\n');
424
+ for (const line of lines) {
425
+ try {
426
+ const record = JSON.parse(line);
427
+ if (!record.timestamp)
428
+ continue;
429
+ const timestamp = new Date(record.timestamp);
430
+ if (timestamp < dayStart || timestamp > dayEnd) {
431
+ continue;
432
+ }
433
+ if (record.type === 'assistant' && record.message?.content) {
434
+ for (const item of record.message.content) {
435
+ if (item.type === 'tool_use' && item.input) {
436
+ const { name, input } = item;
437
+ if (name === 'Edit') {
438
+ const oldLines = (input.old_string || '').split('\n').length;
439
+ const newLines = (input.new_string || '').split('\n').length;
440
+ if (newLines > oldLines) {
441
+ added += newLines - oldLines;
442
+ }
443
+ else {
444
+ deleted += oldLines - newLines;
445
+ }
446
+ }
447
+ else if (name === 'Write') {
448
+ const lineCount = (input.content || '').split('\n').length;
449
+ added += lineCount;
450
+ }
451
+ }
452
+ }
453
+ }
454
+ }
455
+ catch {
456
+ // 忽略解析错误
457
+ }
458
+ }
459
+ }
460
+ }
461
+ return { added, deleted };
462
+ }
463
+ catch {
464
+ return { added: 0, deleted: 0 };
465
+ }
466
+ }
147
467
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,0BAA0B;AAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;IACjD,OAAO;IACP,KAAK,EAAE,CAAC;AACV,CAAC;KAAM,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;IACnC,OAAO;IACP,SAAS,EAAE,CAAC;AACd,CAAC;KAAM,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;IAC1E,OAAO;IACP,QAAQ,EAAE,CAAC;AACb,CAAC;KAAM,CAAC;IACN,+BAA+B;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;IAEzE,sBAAsB;IACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,WAAW;IACX,MAAM,WAAW,GAAG,gBAAgB,CAAC;IAErC,sBAAsB;IACtB,IAAI,QAAQ,GAAQ,EAAE,CAAC;IAEvB,IAAI,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,SAAS;QACT,MAAM,UAAU,GAAG,GAAG,kBAAkB,SAAS,CAAC;QAClD,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YACpE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvC,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAED,mBAAmB;IACnB,QAAQ,CAAC,UAAU,GAAG;QACpB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,WAAW;KACrB,CAAC;IAEF,WAAW;IACX,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAE/E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,OAAO,QAAQ,CAAC,UAAU,CAAC;YAC3B,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}