@myhpmp/cli 1.5.0 → 1.7.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.ko.md CHANGED
@@ -25,7 +25,7 @@ Claude Code에서 모든 기능을 사용할 수 있습니다. Codex CLI는 EXP
25
25
  Claude Code 하단에 항상 표시:
26
26
 
27
27
  ```
28
- ⚔️ 견습 전사 Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7일 | 📂 ~/…/code/my-project
28
+ ⚔️ 토큰 익스플로러 Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7일 | 📂 ~/…/code/my-project
29
29
  ```
30
30
 
31
31
  ## 상세 보기
@@ -33,7 +33,7 @@ Claude Code 하단에 항상 표시:
33
33
  `myhpmp usage`로 전체 대시보드 확인:
34
34
 
35
35
  ```
36
- 🎮 ⚔️ 견습 전사 Lv.9 ★★★ 🔥 연속: 7일
36
+ 🎮 ⚔️ 토큰 익스플로러 Lv.9 ★★★ 🔥 연속: 7일
37
37
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
38
38
  ❤️ HP ████░░░░░░ 43% ⏱️ 2h30m
39
39
  💙 MP ████████░░ 76%
@@ -57,14 +57,14 @@ Claude Code 하단에 항상 표시:
57
57
 
58
58
  | 레벨 | 칭호 | 레벨당 EXP | 누적 EXP |
59
59
  |------|------|-----------|----------|
60
- | 1-5 | 🌱 초보 모험가 | 100 | 500 |
61
- | 6-10 | ⚔️ 견습 전사 | 300 | 2,000 |
62
- | 11-15 | 🛡️ 숙련 기사 | 600 | 5,000 |
63
- | 16-20 | 🧙 마법사 | 1,200 | 11,000 |
64
- | 21-30 | 🔮 대마법사 | 3,500 | 46,000 |
65
- | 31-40 | 👑 아크메이지 | 8,000 | 126,000 |
66
- | 41-50 | 🐉 전설의 코드드래곤 | 15,000 | 276,000 |
67
- | 50+ | ⚡ 초월자 | 25,000 | ∞ |
60
+ | 1-5 | 🌱 프롬프트 뉴비 | 100 | 500 |
61
+ | 6-10 | ⚔️ 토큰 익스플로러 | 300 | 2,000 |
62
+ | 11-15 | 🛠️ 프롬프트 엔지니어 | 600 | 5,000 |
63
+ | 16-20 | 🏗️ 컨텍스트 아키텍트 | 1,200 | 11,000 |
64
+ | 21-30 | 🔮 프롬프트 소서러 | 3,500 | 46,000 |
65
+ | 31-40 | 👑 모델 마스터 | 8,000 | 126,000 |
66
+ | 41-50 | 🐉 컨텍스트 오버로드 | 15,000 | 276,000 |
67
+ | 50+ | ⚡ 신서틱 마인드 | 25,000 | ∞ |
68
68
 
69
69
  초반 레벨은 빠르게 올라갑니다. 후반 티어는 꾸준한 사용이 필요합니다 — ⚡ 초월자까지 약 8개월 소요.
70
70
 
@@ -108,6 +108,7 @@ myhpmp locale
108
108
  | `myhpmp statusline off` | 상태 바 끄기 |
109
109
  | `myhpmp locale` | 표시 언어 변경 (한국어/English) |
110
110
  | `myhpmp init` | 인증 설정 (크로스 디바이스 동기화) |
111
+ | `myhpmp uninstall` | 모든 Hook, 상태 바 제거 및 로컬 데이터 삭제 (선택) |
111
112
 
112
113
  ## 크로스 디바이스 동기화
113
114
 
@@ -148,8 +149,8 @@ myhpmp init
148
149
  한국어와 영어를 지원합니다. `myhpmp locale`로 언어를 설정하거나, 시스템 로캘에서 자동 감지합니다.
149
150
 
150
151
  ```
151
- KO: ⚔️ 견습 전사 Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7일 | 📂 ~/…/code/my-project
152
- EN: ⚔️ Apprentice Warrior Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7d | 📂 ~/…/code/my-project
152
+ KO: ⚔️ 토큰 익스플로러 Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7일 | 📂 ~/…/code/my-project
153
+ EN: ⚔️ Token Explorer Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7d | 📂 ~/…/code/my-project
153
154
  ```
154
155
 
155
156
  ## 작동 방식
package/README.md CHANGED
@@ -25,7 +25,7 @@ Claude Code provides the full experience. Codex CLI supports EXP tracking and le
25
25
  Always visible at the bottom of Claude Code:
26
26
 
27
27
  ```
28
- ⚔️ Apprentice Warrior Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7d | 📂 ~/…/code/my-project
28
+ ⚔️ Token Explorer Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7d | 📂 ~/…/code/my-project
29
29
  ```
30
30
 
31
31
  ## Detail View
@@ -33,7 +33,7 @@ Always visible at the bottom of Claude Code:
33
33
  Run `myhpmp usage` for the full dashboard:
34
34
 
35
35
  ```
36
- 🎮 ⚔️ Apprentice Warrior Lv.9 ★★★ 🔥 Streak: 7d
36
+ 🎮 ⚔️ Token Explorer Lv.9 ★★★ 🔥 Streak: 7d
37
37
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
38
38
  ❤️ HP ████░░░░░░ 43% ⏱️ 2h30m
39
39
  💙 MP ████████░░ 76%
@@ -57,14 +57,14 @@ Run `myhpmp usage` for the full dashboard:
57
57
 
58
58
  | Level | Title | EXP/Level | Cumulative |
59
59
  |-------|-------|-----------|------------|
60
- | 1-5 | 🌱 Novice Adventurer | 100 | 500 |
61
- | 6-10 | ⚔️ Apprentice Warrior | 300 | 2,000 |
62
- | 11-15 | 🛡️ Skilled Knight | 600 | 5,000 |
63
- | 16-20 | 🧙 Mage | 1,200 | 11,000 |
64
- | 21-30 | 🔮 Archmage | 3,500 | 46,000 |
65
- | 31-40 | 👑 Grand Archmage | 8,000 | 126,000 |
66
- | 41-50 | 🐉 Legendary Code Dragon | 15,000 | 276,000 |
67
- | 50+ | ⚡ Transcendent | 25,000 | ∞ |
60
+ | 1-5 | 🌱 Prompt Newbie | 100 | 500 |
61
+ | 6-10 | ⚔️ Token Explorer | 300 | 2,000 |
62
+ | 11-15 | 🛠️ Prompt Engineer | 600 | 5,000 |
63
+ | 16-20 | 🏗️ Context Architect | 1,200 | 11,000 |
64
+ | 21-30 | 🔮 Prompt Sorcerer | 3,500 | 46,000 |
65
+ | 31-40 | 👑 Model Master | 8,000 | 126,000 |
66
+ | 41-50 | 🐉 Context Overlord | 15,000 | 276,000 |
67
+ | 50+ | ⚡ Synthetic Mind | 25,000 | ∞ |
68
68
 
69
69
  Early levels fly by. Late tiers require serious dedication — expect ~8 months of daily use to reach ⚡ Transcendent.
70
70
 
@@ -108,6 +108,7 @@ That's it! EXP tracking starts via hooks. Status line is available for Claude Co
108
108
  | `myhpmp statusline off` | Disable status line |
109
109
  | `myhpmp locale` | Change display language (한국어/English) |
110
110
  | `myhpmp init` | Set up authentication (cross-device sync) |
111
+ | `myhpmp uninstall` | Remove all hooks, status line, and optionally local data |
111
112
 
112
113
  ## Cross-Device Sync
113
114
 
@@ -148,8 +149,8 @@ Data is stored locally at `~/.myhpmp/data.json` and works offline. Cloud sync is
148
149
  Supports Korean and English. Set your language with `myhpmp locale`, or it auto-detects from your system locale.
149
150
 
150
151
  ```
151
- KO: ⚔️ 견습 전사 Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7일 | 📂 ~/…/code/my-project
152
- EN: ⚔️ Apprentice Warrior Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7d | 📂 ~/…/code/my-project
152
+ KO: ⚔️ 토큰 익스플로러 Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7일 | 📂 ~/…/code/my-project
153
+ EN: ⚔️ Token Explorer Lv.9 ★★★ | ❤️ 43% ⏱️2h30m | 💙 76% | 🧠 25% | 🔥7d | 📂 ~/…/code/my-project
153
154
  ```
154
155
 
155
156
  ## How It Works
package/dist/cli.js CHANGED
@@ -25,6 +25,9 @@ async function main() {
25
25
  case 'statusline':
26
26
  await import('./commands/statusline-toggle.js');
27
27
  break;
28
+ case 'uninstall':
29
+ await import('./commands/uninstall.js');
30
+ break;
28
31
  default:
29
32
  console.log('🎮 My HP/MP - Gamified Usage Dashboard\n');
30
33
  console.log('Supported: Claude Code, Codex CLI\n');
@@ -35,6 +38,7 @@ async function main() {
35
38
  console.log(' sync — Manually sync stats to cloud');
36
39
  console.log(' statusline — Toggle status line on/off (Claude Code only)');
37
40
  console.log(' locale — Change display language (한국어/English)');
41
+ console.log(' uninstall — Remove all hooks and settings');
38
42
  console.log('\nQuick start:');
39
43
  console.log(' myhpmp setup # Auto-configure everything');
40
44
  console.log(' myhpmp locale # Set language');
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAEA,kEAAkE;AAClE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,OAAO;YACV,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACrC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,YAAY;YACf,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAChD,MAAM;QACR;YACE,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;YACnF,MAAM;IACV,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAEA,kEAAkE;AAClE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,OAAO;YACV,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACpC,MAAM;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACrC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,YAAY;YACf,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAChD,MAAM;QACR,KAAK,WAAW;YACd,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACxC,MAAM;QACR;YACE,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;YACnF,MAAM;IACV,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Remove all myhpmp hooks, status line config, and optionally local data.
3
+ * Run: myhpmp uninstall
4
+ */
5
+ import fs from 'node:fs/promises';
6
+ import path from 'node:path';
7
+ import os from 'node:os';
8
+ import readline from 'node:readline';
9
+ import { listProviders, getProvider } from '../adapter/index.js';
10
+ const RUNTIME_DIR = path.join(os.homedir(), '.myhpmp');
11
+ function ask(rl, question) {
12
+ return new Promise((resolve) => rl.question(question, resolve));
13
+ }
14
+ async function loadJsonFile(filePath) {
15
+ try {
16
+ const raw = await fs.readFile(filePath, 'utf-8');
17
+ return JSON.parse(raw);
18
+ }
19
+ catch {
20
+ return {};
21
+ }
22
+ }
23
+ async function saveJsonFile(filePath, data) {
24
+ await fs.writeFile(filePath, JSON.stringify(data, null, 2), 'utf-8');
25
+ }
26
+ function removeMyhpmpHooks(hooks) {
27
+ const cleaned = {};
28
+ for (const [event, entries] of Object.entries(hooks)) {
29
+ const filtered = entries.filter((entry) => !JSON.stringify(entry).includes('myhpmp'));
30
+ if (filtered.length > 0) {
31
+ cleaned[event] = filtered;
32
+ }
33
+ }
34
+ return cleaned;
35
+ }
36
+ async function removeProviderConfig(providerName) {
37
+ const provider = getProvider(providerName);
38
+ const config = provider.generateHookConfig('');
39
+ const settingsPath = config.settingsPath;
40
+ try {
41
+ await fs.access(settingsPath);
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ const settings = await loadJsonFile(settingsPath);
47
+ let changed = false;
48
+ // Remove hooks
49
+ if (settings.hooks) {
50
+ const before = JSON.stringify(settings.hooks);
51
+ settings.hooks = removeMyhpmpHooks(settings.hooks);
52
+ if (Object.keys(settings.hooks).length === 0) {
53
+ delete settings.hooks;
54
+ }
55
+ if (JSON.stringify(settings.hooks) !== before)
56
+ changed = true;
57
+ }
58
+ // Remove statusLine
59
+ if (settings.statusLine && JSON.stringify(settings.statusLine).includes('myhpmp')) {
60
+ delete settings.statusLine;
61
+ changed = true;
62
+ }
63
+ if (changed) {
64
+ await saveJsonFile(settingsPath, settings);
65
+ }
66
+ return changed;
67
+ }
68
+ async function main() {
69
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
70
+ console.log('🗑️ My HP/MP Uninstall');
71
+ console.log('━'.repeat(30));
72
+ // Remove hooks from all providers
73
+ for (const providerName of listProviders()) {
74
+ const removed = await removeProviderConfig(providerName);
75
+ if (removed) {
76
+ const provider = getProvider(providerName);
77
+ const hookNames = Object.keys(provider.generateHookConfig('').hooks).join(', ');
78
+ console.log(`\n⚙️ Removing ${providerName} hooks...`);
79
+ console.log(` ✅ Hooks removed (${hookNames})`);
80
+ if (provider.supportsStatusLine) {
81
+ console.log(' ✅ Status line removed');
82
+ }
83
+ }
84
+ }
85
+ // Ask about local data
86
+ try {
87
+ await fs.access(RUNTIME_DIR);
88
+ console.log('');
89
+ const answer = await ask(rl, 'Delete local data (~/.myhpmp)? This will remove all EXP/level data. (y/N) > ');
90
+ if (answer.trim().toLowerCase() === 'y') {
91
+ await fs.rm(RUNTIME_DIR, { recursive: true, force: true });
92
+ console.log(' ✅ Local data deleted');
93
+ }
94
+ else {
95
+ console.log(' ⏭️ Local data preserved');
96
+ }
97
+ }
98
+ catch {
99
+ // ~/.myhpmp doesn't exist
100
+ }
101
+ rl.close();
102
+ console.log('\n🎉 Uninstall complete!');
103
+ console.log(' Run "npm uninstall -g @myhpmp/cli" to remove the package.\n');
104
+ }
105
+ main().catch((err) => {
106
+ console.error('❌ Uninstall failed:', err.message);
107
+ process.exit(1);
108
+ });
109
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export { calcTokenExp, calcSessionExp, calcStreakBonus, calcWeeklyBonus } from '@myhpmp/core';
1
+ export { calcTokenExp, calcSessionExp, calcStreakBonus, calcWeeklyBonus, DAILY_SESSION_CAP } from '@myhpmp/core';
@@ -1,3 +1,3 @@
1
1
  // Re-export from @myhpmp/core (single source of truth)
2
- export { calcTokenExp, calcSessionExp, calcStreakBonus, calcWeeklyBonus } from '@myhpmp/core';
2
+ export { calcTokenExp, calcSessionExp, calcStreakBonus, calcWeeklyBonus, DAILY_SESSION_CAP } from '@myhpmp/core';
3
3
  //# sourceMappingURL=exp-calculator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exp-calculator.js","sourceRoot":"","sources":["../../src/core/exp-calculator.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"exp-calculator.js","sourceRoot":"","sources":["../../src/core/exp-calculator.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -5,6 +5,8 @@ export interface UserStats {
5
5
  streakDays: number;
6
6
  lastActiveDate: string | null;
7
7
  weeklyExpBonusClaimed: boolean;
8
+ dailySessionCount: number;
9
+ dailySessionDate: string | null;
8
10
  updatedAt: string;
9
11
  }
10
12
  export declare class LocalStore {
@@ -7,6 +7,8 @@ const DEFAULT_STATS = {
7
7
  streakDays: 0,
8
8
  lastActiveDate: null,
9
9
  weeklyExpBonusClaimed: false,
10
+ dailySessionCount: 0,
11
+ dailySessionDate: null,
10
12
  updatedAt: new Date().toISOString(),
11
13
  };
12
14
  export class LocalStore {
@@ -1 +1 @@
1
- {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../src/data/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAY7B,MAAM,aAAa,GAAc;IAC/B,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,CAAC;IACb,cAAc,EAAE,IAAI;IACpB,qBAAqB,EAAE,KAAK;IAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACpC,CAAC;AAEF,MAAM,OAAO,UAAU;IACb,QAAQ,CAAS;IAEzB,YAAY,GAAW;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtD,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAgB;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;CACF"}
1
+ {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../src/data/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAc7B,MAAM,aAAa,GAAc;IAC/B,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,CAAC;IACb,cAAc,EAAE,IAAI;IACpB,qBAAqB,EAAE,KAAK;IAC5B,iBAAiB,EAAE,CAAC;IACpB,gBAAgB,EAAE,IAAI;IACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACpC,CAAC;AAEF,MAAM,OAAO,UAAU;IACb,QAAQ,CAAS;IAEzB,YAAY,GAAW;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtD,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAgB;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;CACF"}
@@ -46,6 +46,8 @@ export class SupabaseProvider {
46
46
  streakDays,
47
47
  lastActiveDate: data.last_active_date ? String(data.last_active_date) : null,
48
48
  weeklyExpBonusClaimed: Boolean(data.weekly_exp_bonus_claimed),
49
+ dailySessionCount: 0,
50
+ dailySessionDate: null,
49
51
  updatedAt: data.updated_at ? String(data.updated_at) : new Date().toISOString(),
50
52
  };
51
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../../src/data/providers/supabase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../../src/data/providers/supabase.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,14 @@ const DATA_DIR = path.join(os.homedir(), '.myhpmp');
9
9
  async function main() {
10
10
  const store = new LocalStore(DATA_DIR);
11
11
  const stats = await store.load();
12
- const sessionExp = calcSessionExp();
12
+ // Reset daily session count if date changed
13
+ const today = new Date().toISOString().slice(0, 10);
14
+ if (stats.dailySessionDate !== today) {
15
+ stats.dailySessionCount = 0;
16
+ stats.dailySessionDate = today;
17
+ }
18
+ const sessionExp = calcSessionExp(stats.dailySessionCount);
19
+ stats.dailySessionCount += 1;
13
20
  stats.totalSessions += 1;
14
21
  stats.totalExp += sessionExp;
15
22
  stats.level = getLevelInfo(stats.totalExp).level;
@@ -1 +1 @@
1
- {"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../../src/hooks/claude/session-end.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAEpD,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC;IAC7B,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IACjD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAExB,MAAM,MAAM,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAErE,qCAAqC;IACrC,MAAM,QAAQ,EAAE,CAAC;AACnB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../../src/hooks/claude/session-end.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAEpD,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEjC,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;QACrC,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC5B,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3D,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;IAC7B,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC;IAC7B,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IACjD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAExB,MAAM,MAAM,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAErE,qCAAqC;IACrC,MAAM,QAAQ,EAAE,CAAC;AACnB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -14,8 +14,15 @@ const DATA_DIR = path.join(os.homedir(), '.myhpmp');
14
14
  async function main() {
15
15
  const store = new LocalStore(DATA_DIR);
16
16
  const stats = await store.load();
17
+ // Reset daily session count if date changed
18
+ const today = new Date().toISOString().slice(0, 10);
19
+ if (stats.dailySessionDate !== today) {
20
+ stats.dailySessionCount = 0;
21
+ stats.dailySessionDate = today;
22
+ }
17
23
  // Session EXP
18
- const sessionExp = calcSessionExp();
24
+ const sessionExp = calcSessionExp(stats.dailySessionCount);
25
+ stats.dailySessionCount += 1;
19
26
  stats.totalSessions += 1;
20
27
  stats.totalExp += sessionExp;
21
28
  // Token EXP (parse Codex session JSONL)
@@ -1 +1 @@
1
- {"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../../src/hooks/codex/session-end.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAEpD,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEjC,cAAc;IACd,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC;IAE7B,wCAAwC;IACxC,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IACjD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAExB,qBAAqB;IACrB,MAAM,MAAM,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,iBAAiB;IACjB,MAAM,QAAQ,EAAE,CAAC;AACnB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../../src/hooks/codex/session-end.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAEpD,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEjC,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;QACrC,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC5B,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,cAAc;IACd,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3D,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;IAC7B,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC;IAE7B,wCAAwC;IACxC,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IACjD,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAExB,qBAAqB;IACrB,MAAM,MAAM,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,iBAAiB;IACjB,MAAM,QAAQ,EAAE,CAAC;AACnB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myhpmp/cli",
3
- "version": "1.5.0",
3
+ "version": "1.7.0",
4
4
  "description": "RPG-style gamified usage dashboard for AI coding tools (Claude Code full support, Codex CLI EXP/level only)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -43,7 +43,7 @@
43
43
  "node": ">=18.0.0"
44
44
  },
45
45
  "dependencies": {
46
- "@myhpmp/core": "^1.0.1",
46
+ "@myhpmp/core": "^1.1.0",
47
47
  "@supabase/supabase-js": "^2.49.0",
48
48
  "open": "^10.1.0"
49
49
  },