@myhpmp/cli 1.6.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 +1 -0
- package/README.md +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/uninstall.d.ts +1 -0
- package/dist/commands/uninstall.js +109 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/package.json +1 -1
package/README.ko.md
CHANGED
package/README.md
CHANGED
|
@@ -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
|
|
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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"}
|
package/package.json
CHANGED