cc-proficiency 0.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.
Files changed (82) hide show
  1. package/.claude-plugin/plugin.json +11 -0
  2. package/LICENSE +201 -0
  3. package/README.md +345 -0
  4. package/README.zh-CN.md +284 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +543 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/gist/uploader.d.ts +26 -0
  10. package/dist/gist/uploader.d.ts.map +1 -0
  11. package/dist/gist/uploader.js +99 -0
  12. package/dist/gist/uploader.js.map +1 -0
  13. package/dist/hooks/session-end.js +64 -0
  14. package/dist/i18n/locales.d.ts +30 -0
  15. package/dist/i18n/locales.d.ts.map +1 -0
  16. package/dist/i18n/locales.js +64 -0
  17. package/dist/i18n/locales.js.map +1 -0
  18. package/dist/index.d.ts +12 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +38 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/parsers/config-parser.d.ts +25 -0
  23. package/dist/parsers/config-parser.d.ts.map +1 -0
  24. package/dist/parsers/config-parser.js +262 -0
  25. package/dist/parsers/config-parser.js.map +1 -0
  26. package/dist/parsers/history-parser.d.ts +13 -0
  27. package/dist/parsers/history-parser.d.ts.map +1 -0
  28. package/dist/parsers/history-parser.js +50 -0
  29. package/dist/parsers/history-parser.js.map +1 -0
  30. package/dist/parsers/normalizer.d.ts +8 -0
  31. package/dist/parsers/normalizer.d.ts.map +1 -0
  32. package/dist/parsers/normalizer.js +105 -0
  33. package/dist/parsers/normalizer.js.map +1 -0
  34. package/dist/parsers/transcript-parser.d.ts +23 -0
  35. package/dist/parsers/transcript-parser.d.ts.map +1 -0
  36. package/dist/parsers/transcript-parser.js +112 -0
  37. package/dist/parsers/transcript-parser.js.map +1 -0
  38. package/dist/renderer/svg.d.ts +10 -0
  39. package/dist/renderer/svg.d.ts.map +1 -0
  40. package/dist/renderer/svg.js +209 -0
  41. package/dist/renderer/svg.js.map +1 -0
  42. package/dist/scoring/curves.d.ts +34 -0
  43. package/dist/scoring/curves.d.ts.map +1 -0
  44. package/dist/scoring/curves.js +60 -0
  45. package/dist/scoring/curves.js.map +1 -0
  46. package/dist/scoring/engine.d.ts +16 -0
  47. package/dist/scoring/engine.d.ts.map +1 -0
  48. package/dist/scoring/engine.js +137 -0
  49. package/dist/scoring/engine.js.map +1 -0
  50. package/dist/scoring/rule-engine.d.ts +30 -0
  51. package/dist/scoring/rule-engine.d.ts.map +1 -0
  52. package/dist/scoring/rule-engine.js +151 -0
  53. package/dist/scoring/rule-engine.js.map +1 -0
  54. package/dist/scoring/rules.d.ts +32 -0
  55. package/dist/scoring/rules.d.ts.map +1 -0
  56. package/dist/scoring/rules.js +443 -0
  57. package/dist/scoring/rules.js.map +1 -0
  58. package/dist/scoring/signals.d.ts +7 -0
  59. package/dist/scoring/signals.d.ts.map +1 -0
  60. package/dist/scoring/signals.js +245 -0
  61. package/dist/scoring/signals.js.map +1 -0
  62. package/dist/store/local-store.d.ts +12 -0
  63. package/dist/store/local-store.d.ts.map +1 -0
  64. package/dist/store/local-store.js +107 -0
  65. package/dist/store/local-store.js.map +1 -0
  66. package/dist/store/queue.d.ts +24 -0
  67. package/dist/store/queue.d.ts.map +1 -0
  68. package/dist/store/queue.js +105 -0
  69. package/dist/store/queue.js.map +1 -0
  70. package/dist/types.d.ts +264 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +4 -0
  73. package/dist/types.js.map +1 -0
  74. package/dist/utils/ci-detect.d.ts +6 -0
  75. package/dist/utils/ci-detect.d.ts.map +1 -0
  76. package/dist/utils/ci-detect.js +19 -0
  77. package/dist/utils/ci-detect.js.map +1 -0
  78. package/hooks/hooks.json +15 -0
  79. package/hooks/session-end.ts +71 -0
  80. package/hooks/tsconfig.json +13 -0
  81. package/package.json +43 -0
  82. package/skills/proficiency/SKILL.md +15 -0
package/dist/cli.js ADDED
@@ -0,0 +1,543 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const node_os_1 = require("node:os");
7
+ const transcript_parser_js_1 = require("./parsers/transcript-parser.js");
8
+ const config_parser_js_1 = require("./parsers/config-parser.js");
9
+ const engine_js_1 = require("./scoring/engine.js");
10
+ const svg_js_1 = require("./renderer/svg.js");
11
+ const locales_js_1 = require("./i18n/locales.js");
12
+ const local_store_js_1 = require("./store/local-store.js");
13
+ const queue_js_1 = require("./store/queue.js");
14
+ const uploader_js_1 = require("./gist/uploader.js");
15
+ const CLAUDE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".claude");
16
+ function getConfigLocale() {
17
+ const config = (0, local_store_js_1.loadConfig)();
18
+ if (config.locale === "zh-CN")
19
+ return "zh-CN";
20
+ if (config.locale === "en")
21
+ return "en";
22
+ return (0, locales_js_1.detectLocale)();
23
+ }
24
+ async function main() {
25
+ const args = process.argv.slice(2);
26
+ const command = args[0];
27
+ switch (command) {
28
+ case "init":
29
+ return cmdInit();
30
+ case "analyze":
31
+ return cmdAnalyze(args);
32
+ case "process":
33
+ return cmdProcess();
34
+ case "badge":
35
+ return cmdBadge(args);
36
+ case "push":
37
+ return cmdPush();
38
+ case "explain":
39
+ return cmdExplain();
40
+ case "config":
41
+ return cmdConfig(args.slice(1));
42
+ case "uninstall":
43
+ return cmdUninstall();
44
+ case "version":
45
+ console.log(`cc-proficiency v${getVersion()} (scoring ${engine_js_1.SCORING_VERSION})`);
46
+ return;
47
+ default:
48
+ printUsage();
49
+ return;
50
+ }
51
+ }
52
+ function getVersion() {
53
+ try {
54
+ const pkg = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, "..", "package.json"), "utf-8"));
55
+ return pkg.version ?? "0.1.0";
56
+ }
57
+ catch {
58
+ return "0.1.0";
59
+ }
60
+ }
61
+ function printUsage() {
62
+ console.log(`
63
+ cc-proficiency — Claude Code Proficiency Badge Generator
64
+
65
+ Commands:
66
+ init Set up configuration and hooks
67
+ analyze [--full] Analyze sessions and compute scores
68
+ process Process queued sessions from hook
69
+ badge [--output <f>] Generate SVG badge
70
+ push Upload badge to GitHub Gist
71
+ explain Show score drivers and improvement tips
72
+ config [key] [value] View or set configuration
73
+ uninstall Remove hooks and clean up
74
+ version Show version info
75
+
76
+ Examples:
77
+ cc-proficiency init
78
+ cc-proficiency analyze --full
79
+ cc-proficiency badge --output badge.svg
80
+ cc-proficiency explain
81
+ `);
82
+ }
83
+ // ── Init ──
84
+ function cmdInit() {
85
+ console.log("Initializing cc-proficiency...\n");
86
+ (0, queue_js_1.ensureStoreDir)();
87
+ const config = (0, local_store_js_1.loadConfig)();
88
+ // Detect GitHub user
89
+ if ((0, uploader_js_1.isGhAuthenticated)()) {
90
+ const username = (0, uploader_js_1.getGhUsername)();
91
+ if (username) {
92
+ config.username = username;
93
+ console.log(` GitHub user: @${username}`);
94
+ }
95
+ }
96
+ else {
97
+ console.log(" ⚠ GitHub CLI not authenticated.");
98
+ console.log(" Badge will be saved locally to: " + (0, local_store_js_1.getBadgePath)());
99
+ console.log(" To enable auto-upload: gh auth login && cc-proficiency init\n");
100
+ }
101
+ // Inject hook into settings.json
102
+ injectHook();
103
+ // Create Gist if authenticated and no existing gist
104
+ if (config.username && (0, uploader_js_1.isGhAuthenticated)() && !config.gistId) {
105
+ console.log(" Creating private Gist...");
106
+ const result = (0, uploader_js_1.createGist)('<svg xmlns="http://www.w3.org/2000/svg"><text>Initializing...</text></svg>', config.public);
107
+ if (result.success && result.url) {
108
+ config.gistId = result.url;
109
+ console.log(` Gist created: ${result.url}`);
110
+ if (config.username) {
111
+ const rawUrl = (0, uploader_js_1.getGistRawUrl)(config.username, result.url);
112
+ console.log(`\n Add to your README:\n ![CC Proficiency](${rawUrl})\n`);
113
+ }
114
+ }
115
+ else {
116
+ console.log(` ⚠ Could not create Gist: ${result.error}`);
117
+ }
118
+ }
119
+ (0, local_store_js_1.saveConfig)(config);
120
+ console.log("\n ✓ Configuration saved to " + (0, local_store_js_1.getStoreDir)());
121
+ console.log(" ✓ Hook injected into ~/.claude/settings.json");
122
+ console.log("\n Run 'cc-proficiency analyze' to compute your first scores.");
123
+ }
124
+ function injectHook() {
125
+ const settingsPath = (0, node_path_1.join)(CLAUDE_DIR, "settings.json");
126
+ let settings = {};
127
+ if ((0, node_fs_1.existsSync)(settingsPath)) {
128
+ try {
129
+ settings = JSON.parse((0, node_fs_1.readFileSync)(settingsPath, "utf-8"));
130
+ }
131
+ catch {
132
+ console.log(" ⚠ Could not parse settings.json, creating new hooks section");
133
+ }
134
+ }
135
+ // Check for existing cc-proficiency hook (idempotent)
136
+ const hooks = (settings.hooks ?? {});
137
+ const stopHooks = (hooks.Stop ?? []);
138
+ const alreadyInstalled = stopHooks.some((group) => group.hooks?.some((h) => h.command?.includes("cc-proficiency")));
139
+ if (alreadyInstalled) {
140
+ console.log(" Hook already installed (skipping)");
141
+ return;
142
+ }
143
+ // Ensure ~/.claude/ exists before writing settings.json
144
+ if (!(0, node_fs_1.existsSync)(CLAUDE_DIR)) {
145
+ const { mkdirSync } = require("node:fs");
146
+ mkdirSync(CLAUDE_DIR, { recursive: true });
147
+ }
148
+ // Find the installed path of this package
149
+ // When compiled: dist/cli.js → dist/hooks/session-end.js
150
+ const hookScript = (0, node_path_1.join)(__dirname, "hooks", "session-end.js");
151
+ const hookCommand = `node "${hookScript}"`;
152
+ stopHooks.push({
153
+ hooks: [
154
+ {
155
+ type: "command",
156
+ command: hookCommand,
157
+ timeout: 5,
158
+ },
159
+ ],
160
+ });
161
+ hooks.Stop = stopHooks;
162
+ settings.hooks = hooks;
163
+ (0, node_fs_1.writeFileSync)(settingsPath, JSON.stringify(settings, null, 2), "utf-8");
164
+ }
165
+ // ── Analyze ──
166
+ async function cmdAnalyze(args) {
167
+ const full = args.includes("--full");
168
+ console.log(full ? "Running full analysis..." : "Running incremental analysis...\n");
169
+ const { sessions, config } = await gatherData(full);
170
+ if (sessions.length === 0) {
171
+ console.log("No sessions found. Use Claude Code first, then run analyze again.");
172
+ return;
173
+ }
174
+ const setupChecklist = (0, config_parser_js_1.buildSetupChecklist)(config);
175
+ const userConfig = (0, local_store_js_1.loadConfig)();
176
+ const result = (0, engine_js_1.computeProficiency)(sessions, config, userConfig.username ?? "unknown", setupChecklist);
177
+ // Update store with processed session IDs
178
+ const store = (0, local_store_js_1.loadStore)();
179
+ store.lastResult = result;
180
+ for (const s of sessions) {
181
+ if (!store.processedSessionIds.includes(s.sessionId)) {
182
+ store.processedSessionIds.push(s.sessionId);
183
+ }
184
+ }
185
+ (0, local_store_js_1.saveStore)(store);
186
+ // Display
187
+ printResult(result);
188
+ }
189
+ async function gatherData(full) {
190
+ const config = (0, config_parser_js_1.parseClaudeConfig)();
191
+ const sessions = [];
192
+ const store = full ? { processedSessionIds: [] } : (0, local_store_js_1.loadStore)();
193
+ const projectsDir = (0, node_path_1.join)(CLAUDE_DIR, "projects");
194
+ if (!(0, node_fs_1.existsSync)(projectsDir))
195
+ return { sessions, config };
196
+ const projects = (0, node_fs_1.readdirSync)(projectsDir);
197
+ for (const proj of projects) {
198
+ const projDir = (0, node_path_1.join)(projectsDir, proj);
199
+ try {
200
+ const files = (0, node_fs_1.readdirSync)(projDir).filter((f) => f.endsWith(".jsonl"));
201
+ for (const file of files) {
202
+ const sessionId = file.replace(".jsonl", "");
203
+ if (!full && (0, local_store_js_1.isSessionProcessed)(store, sessionId)) {
204
+ continue;
205
+ }
206
+ try {
207
+ const session = await (0, transcript_parser_js_1.parseTranscript)((0, node_path_1.join)(projDir, file));
208
+ if (session.events.length > 0) {
209
+ sessions.push(session);
210
+ }
211
+ }
212
+ catch {
213
+ // skip unreadable files
214
+ }
215
+ }
216
+ }
217
+ catch {
218
+ // skip unreadable project dirs
219
+ }
220
+ }
221
+ return { sessions, config };
222
+ }
223
+ function printResult(result) {
224
+ console.log(` Claude Code Proficiency — @${result.username}`);
225
+ console.log(" " + "─".repeat(40));
226
+ if (result.phase === "calibrating") {
227
+ const needed = Math.max(0, 3 - result.sessionCount);
228
+ console.log(` ⏳ Calibrating... (${result.sessionCount} sessions, need ${needed} more)`);
229
+ console.log("");
230
+ printSetupChecklist(result.setupChecklist);
231
+ return;
232
+ }
233
+ for (const d of result.domains) {
234
+ const bar = progressBar(d.score, 20);
235
+ const conf = d.confidence === "high" ? "●" : d.confidence === "medium" ? "◐" : "○";
236
+ console.log(` ${d.label.padEnd(14)} ${bar} ${String(d.score).padStart(3)} ${conf}`);
237
+ }
238
+ console.log(" " + "─".repeat(40));
239
+ // Feature inventory
240
+ const f = result.features;
241
+ if (f.hooks.length > 0) {
242
+ const shown = f.hooks.slice(0, 3).map((h) => `${h.name} (${h.count}x)`).join(", ");
243
+ const more = f.hooks.length > 3 ? ` +${f.hooks.length - 3}` : "";
244
+ console.log(` Hooks ${shown}${more}`);
245
+ }
246
+ if (f.skills.length > 0) {
247
+ const shown = f.skills.slice(0, 3).map((s) => `${s.name} (${s.count}x)`).join(", ");
248
+ const more = f.skills.length > 3 ? ` +${f.skills.length - 3}` : "";
249
+ console.log(` Skills ${shown}${more}`);
250
+ }
251
+ if (f.mcpServers.length > 0) {
252
+ console.log(` MCP ${f.mcpServers.join(", ")}`);
253
+ }
254
+ const toolSummary = f.topTools.slice(0, 4).map((t) => `${t.name} ${t.count}`).join(" · ");
255
+ console.log(` Tools ${toolSummary} (+${f.uniqueToolCount - Math.min(4, f.topTools.length)} more)`);
256
+ console.log(" " + "─".repeat(40));
257
+ console.log(` ${result.sessionCount} sessions · ${result.projectCount} projects`);
258
+ if (result.phase === "early") {
259
+ console.log(` (early results — stabilizes at 10 sessions)`);
260
+ }
261
+ }
262
+ function progressBar(score, width) {
263
+ const filled = Math.round((score / 100) * width);
264
+ const empty = width - filled;
265
+ return "█".repeat(filled) + "░".repeat(empty);
266
+ }
267
+ function printSetupChecklist(cl) {
268
+ const items = [
269
+ ["CLAUDE.md", cl.hasClaudeMd],
270
+ ["Hooks", cl.hasHooks],
271
+ ["Plugins", cl.hasPlugins],
272
+ ["MCP Servers", cl.hasMcpServers],
273
+ ["Memory", cl.hasMemory],
274
+ ["Rules", cl.hasRules],
275
+ ];
276
+ console.log(" Setup:");
277
+ for (const [label, ok] of items) {
278
+ console.log(` ${ok ? "✓" : "✗"} ${label}`);
279
+ }
280
+ }
281
+ // ── Process ──
282
+ async function cmdProcess() {
283
+ if (!(0, queue_js_1.acquireLock)()) {
284
+ console.log("Another process is running. Skipping.");
285
+ return;
286
+ }
287
+ try {
288
+ const queue = (0, queue_js_1.readQueue)();
289
+ if (queue.length === 0) {
290
+ console.log("Queue empty. Nothing to process.");
291
+ return;
292
+ }
293
+ const store = (0, local_store_js_1.loadStore)();
294
+ const newSessions = [];
295
+ const processed = [];
296
+ for (const entry of queue) {
297
+ if ((0, local_store_js_1.isSessionProcessed)(store, entry.sessionId)) {
298
+ processed.push(entry.sessionId);
299
+ continue;
300
+ }
301
+ if (!(0, node_fs_1.existsSync)(entry.transcriptPath)) {
302
+ (0, local_store_js_1.logError)(`Transcript not found: ${entry.transcriptPath}`);
303
+ processed.push(entry.sessionId);
304
+ continue;
305
+ }
306
+ try {
307
+ const session = await (0, transcript_parser_js_1.parseTranscript)(entry.transcriptPath);
308
+ if (session.events.length > 0) {
309
+ newSessions.push(session);
310
+ store.processedSessionIds.push(entry.sessionId);
311
+ }
312
+ processed.push(entry.sessionId);
313
+ }
314
+ catch (err) {
315
+ (0, local_store_js_1.logError)(`Failed to parse ${entry.sessionId}: ${err}`);
316
+ processed.push(entry.sessionId);
317
+ }
318
+ }
319
+ // Recompute overall scores from all snapshots
320
+ if (newSessions.length > 0) {
321
+ const config = (0, config_parser_js_1.parseClaudeConfig)();
322
+ const allSessions = await gatherAllProcessedSessions(store);
323
+ const sessionsToScore = allSessions.length > 0 ? allSessions : newSessions;
324
+ const setupChecklist = (0, config_parser_js_1.buildSetupChecklist)(config);
325
+ const userConfig = (0, local_store_js_1.loadConfig)();
326
+ const result = (0, engine_js_1.computeProficiency)(sessionsToScore, config, userConfig.username ?? "unknown", setupChecklist);
327
+ store.lastResult = result;
328
+ // Generate and save badge
329
+ const svg = (0, svg_js_1.renderBadge)(result, getConfigLocale());
330
+ const badgePath = (0, local_store_js_1.saveBadge)(svg);
331
+ // Push to gist if configured and autoUpload enabled
332
+ if (userConfig.autoUpload && userConfig.gistId && (0, uploader_js_1.isGhAuthenticated)()) {
333
+ const gistResult = (0, uploader_js_1.updateGist)(userConfig.gistId, svg);
334
+ if (!gistResult.success) {
335
+ (0, local_store_js_1.logError)(`Gist push failed: ${gistResult.error}`);
336
+ }
337
+ }
338
+ console.log(`Processed ${newSessions.length} session(s). Badge saved to ${badgePath}`);
339
+ }
340
+ // Remove processed entries from queue (re-reads to avoid race with hook appends)
341
+ (0, queue_js_1.writeQueue)(new Set(processed));
342
+ (0, local_store_js_1.saveStore)(store);
343
+ }
344
+ finally {
345
+ (0, queue_js_1.releaseLock)();
346
+ }
347
+ }
348
+ async function gatherAllProcessedSessions(store) {
349
+ // Re-parse transcripts for all stored session IDs that still have files
350
+ const sessions = [];
351
+ const projectsDir = (0, node_path_1.join)(CLAUDE_DIR, "projects");
352
+ if (!(0, node_fs_1.existsSync)(projectsDir))
353
+ return sessions;
354
+ const projects = (0, node_fs_1.readdirSync)(projectsDir);
355
+ for (const proj of projects) {
356
+ const projDir = (0, node_path_1.join)(projectsDir, proj);
357
+ try {
358
+ const files = (0, node_fs_1.readdirSync)(projDir).filter((f) => f.endsWith(".jsonl"));
359
+ for (const file of files) {
360
+ const sessionId = file.replace(".jsonl", "");
361
+ if (store.processedSessionIds.includes(sessionId)) {
362
+ try {
363
+ const session = await (0, transcript_parser_js_1.parseTranscript)((0, node_path_1.join)(projDir, file));
364
+ if (session.events.length > 0)
365
+ sessions.push(session);
366
+ }
367
+ catch { /* skip */ }
368
+ }
369
+ }
370
+ }
371
+ catch { /* skip */ }
372
+ }
373
+ return sessions;
374
+ }
375
+ // ── Badge ──
376
+ async function cmdBadge(args) {
377
+ const store = (0, local_store_js_1.loadStore)();
378
+ if (!store.lastResult) {
379
+ console.log("No analysis data. Run 'cc-proficiency analyze' first.");
380
+ return;
381
+ }
382
+ const svg = (0, svg_js_1.renderBadge)(store.lastResult, getConfigLocale());
383
+ const outputIdx = args.indexOf("--output");
384
+ if (outputIdx !== -1 && args[outputIdx + 1]) {
385
+ (0, node_fs_1.writeFileSync)(args[outputIdx + 1], svg, "utf-8");
386
+ console.log(`Badge written to ${args[outputIdx + 1]}`);
387
+ }
388
+ else {
389
+ const path = (0, local_store_js_1.saveBadge)(svg);
390
+ console.log(`Badge saved to ${path}`);
391
+ }
392
+ }
393
+ // ── Push ──
394
+ function cmdPush() {
395
+ const config = (0, local_store_js_1.loadConfig)();
396
+ const store = (0, local_store_js_1.loadStore)();
397
+ if (!store.lastResult) {
398
+ console.log("No analysis data. Run 'cc-proficiency analyze' first.");
399
+ return;
400
+ }
401
+ if (!(0, uploader_js_1.isGhAuthenticated)()) {
402
+ console.log("⚠ GitHub CLI not authenticated.");
403
+ console.log("Badge saved locally to: " + (0, local_store_js_1.getBadgePath)());
404
+ console.log("To enable: gh auth login && cc-proficiency init");
405
+ return;
406
+ }
407
+ const svg = (0, svg_js_1.renderBadge)(store.lastResult, getConfigLocale());
408
+ if (!config.gistId) {
409
+ console.log("No Gist configured. Run 'cc-proficiency init' first.");
410
+ return;
411
+ }
412
+ const result = (0, uploader_js_1.updateGist)(config.gistId, svg);
413
+ if (result.success) {
414
+ const rawUrl = (0, uploader_js_1.getGistRawUrl)(config.username ?? "", config.gistId);
415
+ console.log("✓ Badge pushed to Gist");
416
+ console.log(` ${rawUrl}`);
417
+ }
418
+ else {
419
+ console.log(`✗ Push failed: ${result.error}`);
420
+ }
421
+ }
422
+ // ── Explain ──
423
+ function cmdExplain() {
424
+ const store = (0, local_store_js_1.loadStore)();
425
+ if (!store.lastResult) {
426
+ console.log("No analysis data. Run 'cc-proficiency analyze' first.");
427
+ return;
428
+ }
429
+ const result = store.lastResult;
430
+ const sorted = [...result.domains].sort((a, b) => b.score - a.score);
431
+ const weakest = [...result.domains].sort((a, b) => a.score - b.score);
432
+ console.log(`\n Claude Code Proficiency — @${result.username}\n`);
433
+ console.log(" Strengths:");
434
+ for (const d of sorted) {
435
+ console.log(` ${d.label.padEnd(14)} ${d.score}/100`);
436
+ }
437
+ const tips = {
438
+ "cc-mastery": "Enhance CLAUDE.md with imports, add hooks with matchers, create rules files, use plan mode",
439
+ "tool-mcp": "Chain tools deliberately (Grep→Read→Edit), set up MCP servers, use LSP integration",
440
+ "agentic": "Use subagents with different types (Explore, Plan), try parallel agents and worktrees",
441
+ "prompt-craft": "Structure prompts with markdown lists, provide code blocks and file references",
442
+ "context-mgmt": "Use cross-session memory files, work across multiple projects, update CLAUDE.md",
443
+ };
444
+ console.log("\n Areas to Improve:");
445
+ for (let i = 0; i < Math.min(2, weakest.length); i++) {
446
+ const d = weakest[i];
447
+ console.log(` ${d.label} (${d.score}/100)`);
448
+ console.log(` → ${tips[d.id] ?? "Practice using this feature area"}`);
449
+ }
450
+ // Feature inventory detail
451
+ const f = result.features;
452
+ console.log("\n Feature Usage:");
453
+ if (f.hooks.length > 0)
454
+ console.log(` Hooks: ${f.hooks.map((h) => `${h.name} (${h.count}x)`).join(", ")}`);
455
+ if (f.skills.length > 0)
456
+ console.log(` Skills: ${f.skills.map((s) => `${s.name} (${s.count}x)`).join(", ")}`);
457
+ if (f.mcpServers.length > 0)
458
+ console.log(` MCP: ${f.mcpServers.join(", ")}`);
459
+ console.log(` Tools: ${f.topTools.map((t) => `${t.name} (${t.count})`).join(", ")} +${f.uniqueToolCount - f.topTools.length} more`);
460
+ console.log(` Flags: ${f.usedPlanMode ? "✓ Plan" : "✗ Plan"} ${f.hasMemory ? "✓ Memory" : "✗ Memory"} ${f.hasRules ? "✓ Rules" : "✗ Rules"}`);
461
+ console.log(`\n ${result.sessionCount} sessions · ${result.projectCount} projects\n`);
462
+ }
463
+ // ── Config ──
464
+ function cmdConfig(args) {
465
+ const config = (0, local_store_js_1.loadConfig)();
466
+ if (args.length === 0) {
467
+ console.log(JSON.stringify(config, null, 2));
468
+ return;
469
+ }
470
+ if (args.length === 1) {
471
+ const key = args[0];
472
+ if (key in config) {
473
+ console.log(`${key}: ${JSON.stringify(config[key])}`);
474
+ }
475
+ else {
476
+ console.log(`Unknown key: ${key}`);
477
+ }
478
+ return;
479
+ }
480
+ const [key, value] = args;
481
+ if (key === "username")
482
+ config.username = value;
483
+ else if (key === "gistId")
484
+ config.gistId = value;
485
+ else if (key === "autoUpload")
486
+ config.autoUpload = value === "true";
487
+ else if (key === "public")
488
+ config.public = value === "true";
489
+ else if (key === "locale")
490
+ config.locale = value;
491
+ else {
492
+ console.log(`Unknown key: ${key}`);
493
+ return;
494
+ }
495
+ (0, local_store_js_1.saveConfig)(config);
496
+ console.log(`Set ${key} = ${value}`);
497
+ }
498
+ // ── Uninstall ──
499
+ function cmdUninstall() {
500
+ console.log("Uninstalling cc-proficiency...\n");
501
+ // Remove hook from settings.json
502
+ const settingsPath = (0, node_path_1.join)(CLAUDE_DIR, "settings.json");
503
+ if ((0, node_fs_1.existsSync)(settingsPath)) {
504
+ try {
505
+ const settings = JSON.parse((0, node_fs_1.readFileSync)(settingsPath, "utf-8"));
506
+ if (settings.hooks?.Stop) {
507
+ settings.hooks.Stop = settings.hooks.Stop.filter((group) => !group.hooks?.some((h) => h.command?.includes("cc-proficiency")));
508
+ if (settings.hooks.Stop.length === 0) {
509
+ delete settings.hooks.Stop;
510
+ }
511
+ if (Object.keys(settings.hooks).length === 0) {
512
+ delete settings.hooks;
513
+ }
514
+ (0, node_fs_1.writeFileSync)(settingsPath, JSON.stringify(settings, null, 2), "utf-8");
515
+ console.log(" ✓ Hook removed from settings.json");
516
+ }
517
+ }
518
+ catch {
519
+ console.log(" ⚠ Could not update settings.json");
520
+ }
521
+ }
522
+ // Remove local data
523
+ const storeDir = (0, local_store_js_1.getStoreDir)();
524
+ if ((0, node_fs_1.existsSync)(storeDir)) {
525
+ try {
526
+ const files = (0, node_fs_1.readdirSync)(storeDir);
527
+ for (const f of files) {
528
+ (0, node_fs_1.unlinkSync)((0, node_path_1.join)(storeDir, f));
529
+ }
530
+ (0, node_fs_1.rmdirSync)(storeDir);
531
+ console.log(" ✓ Local data removed");
532
+ }
533
+ catch {
534
+ console.log(" ⚠ Could not fully remove " + storeDir);
535
+ }
536
+ }
537
+ console.log("\n cc-proficiency uninstalled. Run 'npm uninstall -g cc-proficiency' to remove the package.");
538
+ }
539
+ main().catch((err) => {
540
+ console.error("Error:", err);
541
+ process.exit(1);
542
+ });
543
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface GistResult {
2
+ success: boolean;
3
+ url?: string;
4
+ error?: string;
5
+ }
6
+ /**
7
+ * Check if gh CLI is installed and authenticated.
8
+ */
9
+ export declare function isGhAuthenticated(): boolean;
10
+ /**
11
+ * Get GitHub username from gh CLI.
12
+ */
13
+ export declare function getGhUsername(): string | undefined;
14
+ /**
15
+ * Create a new Gist with the SVG badge.
16
+ */
17
+ export declare function createGist(svgContent: string, isPublic: boolean): GistResult;
18
+ /**
19
+ * Update an existing Gist with new SVG content.
20
+ */
21
+ export declare function updateGist(gistId: string, svgContent: string, filename?: string): GistResult;
22
+ /**
23
+ * Get the raw URL for a gist file.
24
+ */
25
+ export declare function getGistRawUrl(username: string, gistId: string, filename?: string): string;
26
+ //# sourceMappingURL=uploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/gist/uploader.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAWlD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,UAAU,CAmB5E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA6B,GAAG,UAAU,CAelH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA6B,GAAG,MAAM,CAE/G"}