@myhpmp/cli 1.1.5 → 1.1.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.
@@ -9,17 +9,21 @@ import path from 'node:path';
9
9
  const DATA_DIR = path.join(os.homedir(), '.myhpmp');
10
10
  const MAX_INPUT_SIZE = 1_000_000; // 1MB
11
11
  const LAST_TOKENS_PATH = path.join(DATA_DIR, 'last-tokens.json');
12
- async function getLastTokenCount() {
12
+ async function getTokenState() {
13
13
  try {
14
14
  const raw = await fs.readFile(LAST_TOKENS_PATH, 'utf-8');
15
- return Number(JSON.parse(raw).tokens) || 0;
15
+ const data = JSON.parse(raw);
16
+ return {
17
+ tokens: Number(data.tokens) || 0,
18
+ pendingTokens: Number(data.pendingTokens) || 0,
19
+ };
16
20
  }
17
21
  catch {
18
- return 0;
22
+ return { tokens: 0, pendingTokens: 0 };
19
23
  }
20
24
  }
21
- async function saveLastTokenCount(tokens) {
22
- await fs.writeFile(LAST_TOKENS_PATH, JSON.stringify({ tokens }), 'utf-8');
25
+ async function saveTokenState(state) {
26
+ await fs.writeFile(LAST_TOKENS_PATH, JSON.stringify(state), 'utf-8');
23
27
  }
24
28
  async function main() {
25
29
  let input = '';
@@ -57,24 +61,34 @@ async function main() {
57
61
  }
58
62
  if (currentTotal <= 0)
59
63
  return;
60
- const previousTotal = await getLastTokenCount();
61
- await saveLastTokenCount(currentTotal);
62
- // First call in session — no delta to calculate
63
- if (previousTotal === 0)
64
+ const state = await getTokenState();
65
+ const previousTotal = state.tokens;
66
+ // First call in session — set baseline only
67
+ if (previousTotal === 0) {
68
+ await saveTokenState({ tokens: currentTotal, pendingTokens: 0 });
64
69
  return;
70
+ }
65
71
  const deltaTokens = currentTotal - previousTotal;
66
- if (deltaTokens <= 0)
72
+ if (deltaTokens <= 0) {
73
+ await saveTokenState({ tokens: currentTotal, pendingTokens: state.pendingTokens });
67
74
  return;
68
- const exp = Math.min(calcTokenExp(deltaTokens), 1000);
69
- if (exp <= 0)
75
+ }
76
+ // Accumulate small deltas until they reach the EXP threshold
77
+ const accumulated = state.pendingTokens + deltaTokens;
78
+ const exp = Math.min(calcTokenExp(accumulated), 1000);
79
+ if (exp <= 0) {
80
+ await saveTokenState({ tokens: currentTotal, pendingTokens: accumulated });
70
81
  return;
82
+ }
83
+ // Flush: log EXP and reset pending
84
+ await saveTokenState({ tokens: currentTotal, pendingTokens: 0 });
71
85
  const store = new LocalStore(DATA_DIR);
72
86
  const stats = await store.load();
73
87
  stats.totalExp += exp;
74
88
  stats.level = getLevelInfo(stats.totalExp).level;
75
89
  stats.updatedAt = new Date().toISOString();
76
90
  await store.save(stats);
77
- await logExp(exp, 'token_usage', { tokens: deltaTokens, provider: 'claude' });
91
+ await logExp(exp, 'token_usage', { tokens: accumulated, provider: 'claude' });
78
92
  // Sync every 5 minutes
79
93
  await autoSyncIfDue();
80
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../src/hooks/claude/post-tool-use.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post-tool-use.js","sourceRoot":"","sources":["../../../src/hooks/claude/post-tool-use.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myhpmp/cli",
3
- "version": "1.1.5",
3
+ "version": "1.1.6",
4
4
  "description": "RPG-style gamified usage dashboard for AI coding tools — track your level, HP, MP, streaks, and more",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",