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.
- package/.claude-plugin/plugin.json +11 -0
- package/LICENSE +201 -0
- package/README.md +345 -0
- package/README.zh-CN.md +284 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +543 -0
- package/dist/cli.js.map +1 -0
- package/dist/gist/uploader.d.ts +26 -0
- package/dist/gist/uploader.d.ts.map +1 -0
- package/dist/gist/uploader.js +99 -0
- package/dist/gist/uploader.js.map +1 -0
- package/dist/hooks/session-end.js +64 -0
- package/dist/i18n/locales.d.ts +30 -0
- package/dist/i18n/locales.d.ts.map +1 -0
- package/dist/i18n/locales.js +64 -0
- package/dist/i18n/locales.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/config-parser.d.ts +25 -0
- package/dist/parsers/config-parser.d.ts.map +1 -0
- package/dist/parsers/config-parser.js +262 -0
- package/dist/parsers/config-parser.js.map +1 -0
- package/dist/parsers/history-parser.d.ts +13 -0
- package/dist/parsers/history-parser.d.ts.map +1 -0
- package/dist/parsers/history-parser.js +50 -0
- package/dist/parsers/history-parser.js.map +1 -0
- package/dist/parsers/normalizer.d.ts +8 -0
- package/dist/parsers/normalizer.d.ts.map +1 -0
- package/dist/parsers/normalizer.js +105 -0
- package/dist/parsers/normalizer.js.map +1 -0
- package/dist/parsers/transcript-parser.d.ts +23 -0
- package/dist/parsers/transcript-parser.d.ts.map +1 -0
- package/dist/parsers/transcript-parser.js +112 -0
- package/dist/parsers/transcript-parser.js.map +1 -0
- package/dist/renderer/svg.d.ts +10 -0
- package/dist/renderer/svg.d.ts.map +1 -0
- package/dist/renderer/svg.js +209 -0
- package/dist/renderer/svg.js.map +1 -0
- package/dist/scoring/curves.d.ts +34 -0
- package/dist/scoring/curves.d.ts.map +1 -0
- package/dist/scoring/curves.js +60 -0
- package/dist/scoring/curves.js.map +1 -0
- package/dist/scoring/engine.d.ts +16 -0
- package/dist/scoring/engine.d.ts.map +1 -0
- package/dist/scoring/engine.js +137 -0
- package/dist/scoring/engine.js.map +1 -0
- package/dist/scoring/rule-engine.d.ts +30 -0
- package/dist/scoring/rule-engine.d.ts.map +1 -0
- package/dist/scoring/rule-engine.js +151 -0
- package/dist/scoring/rule-engine.js.map +1 -0
- package/dist/scoring/rules.d.ts +32 -0
- package/dist/scoring/rules.d.ts.map +1 -0
- package/dist/scoring/rules.js +443 -0
- package/dist/scoring/rules.js.map +1 -0
- package/dist/scoring/signals.d.ts +7 -0
- package/dist/scoring/signals.d.ts.map +1 -0
- package/dist/scoring/signals.js +245 -0
- package/dist/scoring/signals.js.map +1 -0
- package/dist/store/local-store.d.ts +12 -0
- package/dist/store/local-store.d.ts.map +1 -0
- package/dist/store/local-store.js +107 -0
- package/dist/store/local-store.js.map +1 -0
- package/dist/store/queue.d.ts +24 -0
- package/dist/store/queue.d.ts.map +1 -0
- package/dist/store/queue.js +105 -0
- package/dist/store/queue.js.map +1 -0
- package/dist/types.d.ts +264 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/ci-detect.d.ts +6 -0
- package/dist/utils/ci-detect.d.ts.map +1 -0
- package/dist/utils/ci-detect.js +19 -0
- package/dist/utils/ci-detect.js.map +1 -0
- package/hooks/hooks.json +15 -0
- package/hooks/session-end.ts +71 -0
- package/hooks/tsconfig.json +13 -0
- package/package.json +43 -0
- 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 \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
|
package/dist/cli.js.map
ADDED
|
@@ -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"}
|