cc-proficiency 0.2.3 → 0.2.5
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.md +23 -0
- package/dist/cli/commands/achievements.d.ts +2 -0
- package/dist/cli/commands/achievements.d.ts.map +1 -0
- package/dist/cli/commands/achievements.js +52 -0
- package/dist/cli/commands/achievements.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +2 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +32 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/badge.d.ts +2 -0
- package/dist/cli/commands/badge.d.ts.map +1 -0
- package/dist/cli/commands/badge.js +25 -0
- package/dist/cli/commands/badge.js.map +1 -0
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +43 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/explain.d.ts +2 -0
- package/dist/cli/commands/explain.d.ts.map +1 -0
- package/dist/cli/commands/explain.js +44 -0
- package/dist/cli/commands/explain.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +69 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/leaderboard.d.ts +2 -0
- package/dist/cli/commands/leaderboard.d.ts.map +1 -0
- package/dist/cli/commands/leaderboard.js +58 -0
- package/dist/cli/commands/leaderboard.js.map +1 -0
- package/dist/cli/commands/process.d.ts +2 -0
- package/dist/cli/commands/process.d.ts.map +1 -0
- package/dist/cli/commands/process.js +84 -0
- package/dist/cli/commands/process.js.map +1 -0
- package/dist/cli/commands/push.d.ts +2 -0
- package/dist/cli/commands/push.d.ts.map +1 -0
- package/dist/cli/commands/push.js +8 -0
- package/dist/cli/commands/push.js.map +1 -0
- package/dist/cli/commands/share.d.ts +2 -0
- package/dist/cli/commands/share.d.ts.map +1 -0
- package/dist/cli/commands/share.js +129 -0
- package/dist/cli/commands/share.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +54 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +2 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +27 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +108 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/services/hooks.d.ts +3 -0
- package/dist/cli/services/hooks.d.ts.map +1 -0
- package/dist/cli/services/hooks.js +68 -0
- package/dist/cli/services/hooks.js.map +1 -0
- package/dist/cli/services/leaderboard.d.ts +11 -0
- package/dist/cli/services/leaderboard.d.ts.map +1 -0
- package/dist/cli/services/leaderboard.js +120 -0
- package/dist/cli/services/leaderboard.js.map +1 -0
- package/dist/cli/services/publishing.d.ts +18 -0
- package/dist/cli/services/publishing.d.ts.map +1 -0
- package/dist/cli/services/publishing.js +112 -0
- package/dist/cli/services/publishing.js.map +1 -0
- package/dist/cli/services/sessions.d.ts +11 -0
- package/dist/cli/services/sessions.d.ts.map +1 -0
- package/dist/cli/services/sessions.js +80 -0
- package/dist/cli/services/sessions.js.map +1 -0
- package/dist/cli/utils/formatting.d.ts +5 -0
- package/dist/cli/utils/formatting.d.ts.map +1 -0
- package/dist/cli/utils/formatting.js +66 -0
- package/dist/cli/utils/formatting.js.map +1 -0
- package/dist/cli/utils/locale.d.ts +3 -0
- package/dist/cli/utils/locale.d.ts.map +1 -0
- package/dist/cli/utils/locale.js +14 -0
- package/dist/cli/utils/locale.js.map +1 -0
- package/dist/cli/utils/update-check.d.ts +7 -0
- package/dist/cli/utils/update-check.d.ts.map +1 -0
- package/dist/cli/utils/update-check.js +122 -0
- package/dist/cli/utils/update-check.js.map +1 -0
- package/dist/gist/registry.d.ts +26 -0
- package/dist/gist/registry.d.ts.map +1 -0
- package/dist/gist/registry.js +101 -0
- package/dist/gist/registry.js.map +1 -0
- package/dist/gist/uploader.d.ts +9 -1
- package/dist/gist/uploader.d.ts.map +1 -1
- package/dist/gist/uploader.js +47 -1
- package/dist/gist/uploader.js.map +1 -1
- package/dist/hooks/session-end.js +3 -2
- package/dist/i18n/locales.d.ts.map +1 -1
- package/dist/i18n/locales.js +2 -1
- package/dist/i18n/locales.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/parsers/config-detectors.d.ts +29 -0
- package/dist/parsers/config-detectors.d.ts.map +1 -0
- package/dist/parsers/config-detectors.js +367 -0
- package/dist/parsers/config-detectors.js.map +1 -0
- package/dist/parsers/config-parser.d.ts +7 -2
- package/dist/parsers/config-parser.d.ts.map +1 -1
- package/dist/parsers/config-parser.js +36 -228
- package/dist/parsers/config-parser.js.map +1 -1
- package/dist/renderer/svg.d.ts.map +1 -1
- package/dist/renderer/svg.js +3 -1
- package/dist/renderer/svg.js.map +1 -1
- package/dist/scoring/engine.d.ts +1 -1
- package/dist/scoring/engine.d.ts.map +1 -1
- package/dist/scoring/engine.js +30 -8
- package/dist/scoring/engine.js.map +1 -1
- package/dist/scoring/feature-scores.d.ts +27 -0
- package/dist/scoring/feature-scores.d.ts.map +1 -0
- package/dist/scoring/feature-scores.js +63 -0
- package/dist/scoring/feature-scores.js.map +1 -0
- package/dist/scoring/rule-engine.d.ts.map +1 -1
- package/dist/scoring/rule-engine.js.map +1 -1
- package/dist/scoring/rules.d.ts.map +1 -1
- package/dist/scoring/rules.js +12 -0
- package/dist/scoring/rules.js.map +1 -1
- package/dist/scoring/signals.js +4 -2
- package/dist/scoring/signals.js.map +1 -1
- package/dist/store/achievements.d.ts.map +1 -1
- package/dist/store/achievements.js +8 -0
- package/dist/store/achievements.js.map +1 -1
- package/dist/store/local-store.d.ts +3 -1
- package/dist/store/local-store.d.ts.map +1 -1
- package/dist/store/local-store.js +21 -3
- package/dist/store/local-store.js.map +1 -1
- package/dist/store/public-profile.d.ts +12 -0
- package/dist/store/public-profile.d.ts.map +1 -0
- package/dist/store/public-profile.js +50 -0
- package/dist/store/public-profile.js.map +1 -0
- package/dist/store/queue.js +1 -1
- package/dist/store/queue.js.map +1 -1
- package/dist/store/remote-store.d.ts.map +1 -1
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -1
- package/hooks/session-end.ts +4 -3
- package/package.json +8 -3
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -722
- package/dist/cli.js.map +0 -1
- package/skills/proficiency/SKILL.md +0 -15
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdShare = cmdShare;
|
|
4
|
+
const uploader_js_1 = require("../../gist/uploader.js");
|
|
5
|
+
const registry_js_1 = require("../../gist/registry.js");
|
|
6
|
+
const local_store_js_1 = require("../../store/local-store.js");
|
|
7
|
+
const public_profile_js_1 = require("../../store/public-profile.js");
|
|
8
|
+
const publishing_js_1 = require("../services/publishing.js");
|
|
9
|
+
function cmdShare(args) {
|
|
10
|
+
if (args.includes("--remove")) {
|
|
11
|
+
return doLeave();
|
|
12
|
+
}
|
|
13
|
+
return doJoin();
|
|
14
|
+
}
|
|
15
|
+
function doJoin() {
|
|
16
|
+
const config = (0, local_store_js_1.loadConfig)();
|
|
17
|
+
const store = (0, local_store_js_1.loadStore)();
|
|
18
|
+
// Prerequisites
|
|
19
|
+
if (!(0, uploader_js_1.isGhAuthenticated)()) {
|
|
20
|
+
console.log("\u26A0 GitHub CLI not authenticated. Run: gh auth login");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (!config.gistId) {
|
|
24
|
+
console.log("No Gist configured. Run: cc-proficiency init");
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!store.lastResult) {
|
|
28
|
+
console.log("No analysis data. Run: cc-proficiency analyze");
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Idempotent check
|
|
32
|
+
if (config.leaderboard && config.publicGistId) {
|
|
33
|
+
console.log("Already on the leaderboard. Profile auto-updates on push.");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Privacy notice
|
|
37
|
+
console.log(" Joining the cc-proficiency leaderboard...\n");
|
|
38
|
+
console.log(" This will share publicly:");
|
|
39
|
+
console.log(" - GitHub username, domain scores, streak, achievement count");
|
|
40
|
+
console.log(" - Total sessions and hours, member since date\n");
|
|
41
|
+
console.log(" NOT shared: session details, project names, file paths, tools\n");
|
|
42
|
+
// Ensure fresh data via mergeAndPush
|
|
43
|
+
const pushResult = (0, publishing_js_1.mergeAndPush)(store, store.lastResult, config.gistId, config.username ?? "unknown", false);
|
|
44
|
+
if (!pushResult.success) {
|
|
45
|
+
console.log(`\u2717 Failed to sync data: ${pushResult.error}`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Build public profile from merged data
|
|
49
|
+
if (!pushResult.merged) {
|
|
50
|
+
console.log("\u2717 Failed to build public profile — no merged data");
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const publicProfile = (0, public_profile_js_1.buildPublicProfile)(pushResult.merged);
|
|
54
|
+
const profileJson = JSON.stringify(publicProfile, null, 2);
|
|
55
|
+
// Create or reuse public gist
|
|
56
|
+
let publicGistId = config.publicGistId;
|
|
57
|
+
let newlyCreated = false;
|
|
58
|
+
if (!publicGistId) {
|
|
59
|
+
console.log(" Creating public profile gist...");
|
|
60
|
+
const gistResult = (0, uploader_js_1.createPublicGist)(profileJson);
|
|
61
|
+
if (!gistResult.success || !gistResult.url) {
|
|
62
|
+
console.log(`\u2717 Failed to create public gist: ${gistResult.error}`);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
publicGistId = gistResult.url;
|
|
66
|
+
newlyCreated = true;
|
|
67
|
+
console.log(` \u2713 Public gist created: ${publicGistId}`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Update existing public gist
|
|
71
|
+
const updateResult = (0, uploader_js_1.pushGistFiles)(publicGistId, {
|
|
72
|
+
"cc-proficiency-public.json": profileJson,
|
|
73
|
+
});
|
|
74
|
+
if (!updateResult.success) {
|
|
75
|
+
console.log(`\u2717 Failed to update public gist: ${updateResult.error}`);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
console.log(` \u2713 Public gist updated: ${publicGistId}`);
|
|
79
|
+
}
|
|
80
|
+
// Open registration issue
|
|
81
|
+
console.log(" Registering on leaderboard...");
|
|
82
|
+
const issueResult = (0, registry_js_1.openJoinIssue)(config.username ?? "unknown", publicGistId);
|
|
83
|
+
if (!issueResult.success) {
|
|
84
|
+
// Rollback: delete newly created gist to prevent orphans
|
|
85
|
+
if (newlyCreated) {
|
|
86
|
+
(0, uploader_js_1.deleteGist)(publicGistId);
|
|
87
|
+
}
|
|
88
|
+
console.log(`\u2717 Failed to register: ${issueResult.error}`);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Save config on success only
|
|
92
|
+
config.leaderboard = true;
|
|
93
|
+
config.publicGistId = publicGistId;
|
|
94
|
+
(0, local_store_js_1.saveConfig)(config);
|
|
95
|
+
console.log(` \u2713 Registration issue created`);
|
|
96
|
+
console.log(` ${issueResult.issueUrl}`);
|
|
97
|
+
console.log("\n Your profile will appear once the issue is processed.");
|
|
98
|
+
}
|
|
99
|
+
function doLeave() {
|
|
100
|
+
const config = (0, local_store_js_1.loadConfig)();
|
|
101
|
+
if (!(0, uploader_js_1.isGhAuthenticated)()) {
|
|
102
|
+
console.log("\u26A0 GitHub CLI not authenticated. Run: gh auth login");
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.log(" Leaving the cc-proficiency leaderboard...\n");
|
|
106
|
+
// Open removal issue FIRST — don't delete gist until issue is confirmed
|
|
107
|
+
const issueResult = (0, registry_js_1.openLeaveIssue)(config.username ?? "unknown");
|
|
108
|
+
if (!issueResult.success) {
|
|
109
|
+
console.log(`\u2717 Could not create removal issue: ${issueResult.error}`);
|
|
110
|
+
console.log(" Your leaderboard entry and public gist are unchanged.");
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
console.log(` \u2713 Removal issue created: ${issueResult.issueUrl}`);
|
|
114
|
+
// Only delete gist + clear config after issue is confirmed
|
|
115
|
+
if (config.publicGistId) {
|
|
116
|
+
const delResult = (0, uploader_js_1.deleteGist)(config.publicGistId);
|
|
117
|
+
if (delResult.success) {
|
|
118
|
+
console.log(" \u2713 Public profile gist deleted");
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.log(` \u26A0 Could not delete public gist: ${delResult.error}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
config.leaderboard = false;
|
|
125
|
+
config.publicGistId = undefined;
|
|
126
|
+
(0, local_store_js_1.saveConfig)(config);
|
|
127
|
+
console.log("\n Removed from leaderboard.");
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=share.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share.js","sourceRoot":"","sources":["../../../src/cli/commands/share.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,IAAI,IAAI,CAkDhC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdStatus = cmdStatus;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const local_store_js_1 = require("../../store/local-store.js");
|
|
7
|
+
const queue_js_1 = require("../../store/queue.js");
|
|
8
|
+
function cmdStatus() {
|
|
9
|
+
const hookLogPath = (0, node_path_1.join)((0, local_store_js_1.getStoreDir)(), "hook.log");
|
|
10
|
+
const store = (0, local_store_js_1.loadStore)();
|
|
11
|
+
const config = (0, local_store_js_1.loadConfig)();
|
|
12
|
+
console.log("\n cc-proficiency status\n");
|
|
13
|
+
console.log(` Username: ${config.username ?? "(not set)"}`);
|
|
14
|
+
console.log(` Gist ID: ${config.gistId ?? "(not set)"}`);
|
|
15
|
+
console.log(` Auto-upload: ${config.autoUpload}`);
|
|
16
|
+
console.log(` Locale: ${config.locale ?? "en"}`);
|
|
17
|
+
console.log(` Leaderboard: ${config.leaderboard ? `joined (${config.publicGistId ?? "pending"})` : "not joined"}`);
|
|
18
|
+
console.log(`\n Sessions processed: ${store.processedSessionIds.length}`);
|
|
19
|
+
console.log(` Last updated: ${store.lastUpdated ?? "never"}`);
|
|
20
|
+
const queue = (0, queue_js_1.readQueue)();
|
|
21
|
+
console.log(` Queue pending: ${queue.length}`);
|
|
22
|
+
if ((0, node_fs_1.existsSync)(hookLogPath)) {
|
|
23
|
+
const log = (0, node_fs_1.readFileSync)(hookLogPath, "utf-8").trim().split("\n");
|
|
24
|
+
const recent = log.slice(-10);
|
|
25
|
+
console.log(`\n Hook log (last ${recent.length} entries):`);
|
|
26
|
+
for (const line of recent) {
|
|
27
|
+
console.log(` ${line}`);
|
|
28
|
+
}
|
|
29
|
+
const lastQueued = log.filter((l) => l.includes("QUEUED")).pop();
|
|
30
|
+
if (lastQueued) {
|
|
31
|
+
const match = lastQueued.match(/\[(.*?)\]/);
|
|
32
|
+
console.log(`\n Last hook fired: ${match ? match[1] : "unknown"}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log("\n Hook log: no entries yet (hook hasn't fired)");
|
|
37
|
+
}
|
|
38
|
+
const lockPath = (0, node_path_1.join)((0, local_store_js_1.getStoreDir)(), "queue.lock");
|
|
39
|
+
if ((0, node_fs_1.existsSync)(lockPath)) {
|
|
40
|
+
try {
|
|
41
|
+
const lockTime = parseInt((0, node_fs_1.readFileSync)(lockPath, "utf-8"), 10);
|
|
42
|
+
const age = Math.round((Date.now() - lockTime) / 1000);
|
|
43
|
+
console.log(` Queue lock: held (${age}s ago)${age > 60 ? " \u2190 STALE" : ""}`);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
console.log(" Queue lock: present (unknown age)");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(" Queue lock: none");
|
|
51
|
+
}
|
|
52
|
+
console.log("");
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,IAAI,IAAI,CAoBnC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdUninstall = cmdUninstall;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const local_store_js_1 = require("../../store/local-store.js");
|
|
7
|
+
const hooks_js_1 = require("../services/hooks.js");
|
|
8
|
+
function cmdUninstall() {
|
|
9
|
+
console.log("Uninstalling cc-proficiency...\n");
|
|
10
|
+
(0, hooks_js_1.removeHook)();
|
|
11
|
+
const storeDir = (0, local_store_js_1.getStoreDir)();
|
|
12
|
+
if ((0, node_fs_1.existsSync)(storeDir)) {
|
|
13
|
+
try {
|
|
14
|
+
const files = (0, node_fs_1.readdirSync)(storeDir);
|
|
15
|
+
for (const f of files) {
|
|
16
|
+
(0, node_fs_1.unlinkSync)((0, node_path_1.join)(storeDir, f));
|
|
17
|
+
}
|
|
18
|
+
(0, node_fs_1.rmdirSync)(storeDir);
|
|
19
|
+
console.log(" \u2713 Local data removed");
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
console.log(" \u26A0 Could not fully remove " + storeDir);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
console.log("\n cc-proficiency uninstalled. Run 'npm uninstall -g cc-proficiency' to remove the package.");
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/cli/commands/uninstall.ts"],"names":[],"mappings":";;AAKA,oCAoBC;AAzBD,qCAAyE;AACzE,yCAAiC;AACjC,+DAAyD;AACzD,mDAAkD;AAElD,SAAgB,YAAY;IAC1B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,IAAA,qBAAU,GAAE,CAAC;IAEb,MAAM,QAAQ,GAAG,IAAA,4BAAW,GAAE,CAAC;IAC/B,IAAI,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAA,qBAAW,EAAC,QAAQ,CAAC,CAAC;YACpC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC;YACD,IAAA,mBAAS,EAAC,QAAQ,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,QAAQ,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8FAA8F,CAAC,CAAC;AAC9G,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,108 @@
|
|
|
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 engine_js_1 = require("../scoring/engine.js");
|
|
7
|
+
const init_js_1 = require("./commands/init.js");
|
|
8
|
+
const analyze_js_1 = require("./commands/analyze.js");
|
|
9
|
+
const process_js_1 = require("./commands/process.js");
|
|
10
|
+
const badge_js_1 = require("./commands/badge.js");
|
|
11
|
+
const push_js_1 = require("./commands/push.js");
|
|
12
|
+
const explain_js_1 = require("./commands/explain.js");
|
|
13
|
+
const achievements_js_1 = require("./commands/achievements.js");
|
|
14
|
+
const status_js_1 = require("./commands/status.js");
|
|
15
|
+
const config_js_1 = require("./commands/config.js");
|
|
16
|
+
const uninstall_js_1 = require("./commands/uninstall.js");
|
|
17
|
+
const share_js_1 = require("./commands/share.js");
|
|
18
|
+
const leaderboard_js_1 = require("./commands/leaderboard.js");
|
|
19
|
+
const update_check_js_1 = require("./utils/update-check.js");
|
|
20
|
+
function getVersion() {
|
|
21
|
+
try {
|
|
22
|
+
// dist/cli/index.js -> ../../package.json
|
|
23
|
+
const pkg = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, "..", "..", "package.json"), "utf-8"));
|
|
24
|
+
return pkg.version ?? "0.1.0";
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return "0.1.0";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function printUsage() {
|
|
31
|
+
console.log(`
|
|
32
|
+
cc-proficiency \u2014 Claude Code Proficiency Badge Generator
|
|
33
|
+
|
|
34
|
+
Commands:
|
|
35
|
+
init Set up configuration and hooks
|
|
36
|
+
analyze [--full] Analyze sessions and compute scores
|
|
37
|
+
process Process queued sessions from hook
|
|
38
|
+
badge [--output <f>] Generate SVG badge
|
|
39
|
+
push Upload badge to GitHub Gist
|
|
40
|
+
explain Show score drivers and improvement tips
|
|
41
|
+
status Show hook activity, queue, and config
|
|
42
|
+
config [key] [value] View or set configuration
|
|
43
|
+
share [--remove] Join or leave the community leaderboard
|
|
44
|
+
leaderboard View community rankings
|
|
45
|
+
uninstall Remove hooks and clean up
|
|
46
|
+
version Show version info
|
|
47
|
+
|
|
48
|
+
Examples:
|
|
49
|
+
cc-proficiency init
|
|
50
|
+
cc-proficiency analyze --full
|
|
51
|
+
cc-proficiency badge --output badge.svg
|
|
52
|
+
cc-proficiency explain
|
|
53
|
+
`);
|
|
54
|
+
}
|
|
55
|
+
// Commands that should check for updates (interactive, not hook-spawned)
|
|
56
|
+
const UPDATE_CHECK_COMMANDS = new Set([
|
|
57
|
+
"analyze", "explain", "badge", "status", "version", "achievements", "leaderboard",
|
|
58
|
+
]);
|
|
59
|
+
async function main() {
|
|
60
|
+
const args = process.argv.slice(2);
|
|
61
|
+
const command = args[0];
|
|
62
|
+
switch (command) {
|
|
63
|
+
case "init":
|
|
64
|
+
return await (0, init_js_1.cmdInit)();
|
|
65
|
+
case "analyze":
|
|
66
|
+
await (0, analyze_js_1.cmdAnalyze)(args);
|
|
67
|
+
break;
|
|
68
|
+
case "process":
|
|
69
|
+
return (0, process_js_1.cmdProcess)();
|
|
70
|
+
case "badge":
|
|
71
|
+
await (0, badge_js_1.cmdBadge)(args);
|
|
72
|
+
break;
|
|
73
|
+
case "push":
|
|
74
|
+
return (0, push_js_1.cmdPush)();
|
|
75
|
+
case "explain":
|
|
76
|
+
await (0, explain_js_1.cmdExplain)();
|
|
77
|
+
break;
|
|
78
|
+
case "achievements":
|
|
79
|
+
await (0, achievements_js_1.cmdAchievements)();
|
|
80
|
+
break;
|
|
81
|
+
case "status":
|
|
82
|
+
await (0, status_js_1.cmdStatus)();
|
|
83
|
+
break;
|
|
84
|
+
case "config":
|
|
85
|
+
return (0, config_js_1.cmdConfig)(args.slice(1));
|
|
86
|
+
case "share":
|
|
87
|
+
return (0, share_js_1.cmdShare)(args);
|
|
88
|
+
case "leaderboard":
|
|
89
|
+
await (0, leaderboard_js_1.cmdLeaderboard)(args);
|
|
90
|
+
break;
|
|
91
|
+
case "uninstall":
|
|
92
|
+
return (0, uninstall_js_1.cmdUninstall)();
|
|
93
|
+
case "version":
|
|
94
|
+
console.log(`cc-proficiency v${getVersion()} (scoring ${engine_js_1.SCORING_VERSION})`);
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
printUsage();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (command && UPDATE_CHECK_COMMANDS.has(command)) {
|
|
101
|
+
await (0, update_check_js_1.checkForUpdates)(getVersion()).catch(() => { });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
main().catch((err) => {
|
|
105
|
+
console.error("Error:", err);
|
|
106
|
+
process.exit(1);
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/services/hooks.ts"],"names":[],"mappings":"AAMA,wBAAgB,UAAU,IAAI,IAAI,CA8CjC;AAED,wBAAgB,UAAU,IAAI,IAAI,CAsBjC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.injectHook = injectHook;
|
|
4
|
+
exports.removeHook = removeHook;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const node_os_1 = require("node:os");
|
|
8
|
+
const CLAUDE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".claude");
|
|
9
|
+
function injectHook() {
|
|
10
|
+
const settingsPath = (0, node_path_1.join)(CLAUDE_DIR, "settings.json");
|
|
11
|
+
let settings = {};
|
|
12
|
+
if ((0, node_fs_1.existsSync)(settingsPath)) {
|
|
13
|
+
try {
|
|
14
|
+
settings = JSON.parse((0, node_fs_1.readFileSync)(settingsPath, "utf-8"));
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
console.log(" \u26A0 Could not parse settings.json, creating new hooks section");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const hooks = (settings.hooks ?? {});
|
|
21
|
+
const stopHooks = (hooks.Stop ?? []);
|
|
22
|
+
const alreadyInstalled = stopHooks.some((group) => group.hooks?.some((h) => h.command?.includes("cc-proficiency")));
|
|
23
|
+
if (alreadyInstalled) {
|
|
24
|
+
console.log(" Hook already installed (skipping)");
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!(0, node_fs_1.existsSync)(CLAUDE_DIR)) {
|
|
28
|
+
(0, node_fs_1.mkdirSync)(CLAUDE_DIR, { recursive: true });
|
|
29
|
+
}
|
|
30
|
+
// When compiled: dist/cli/services/hooks.js -> dist/hooks/session-end.js
|
|
31
|
+
const hookScript = (0, node_path_1.join)(__dirname, "..", "..", "hooks", "session-end.js");
|
|
32
|
+
const hookCommand = `node "${hookScript}"`;
|
|
33
|
+
stopHooks.push({
|
|
34
|
+
hooks: [
|
|
35
|
+
{
|
|
36
|
+
type: "command",
|
|
37
|
+
command: hookCommand,
|
|
38
|
+
timeout: 5,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
});
|
|
42
|
+
hooks.Stop = stopHooks;
|
|
43
|
+
settings.hooks = hooks;
|
|
44
|
+
(0, node_fs_1.writeFileSync)(settingsPath, JSON.stringify(settings, null, 2), "utf-8");
|
|
45
|
+
}
|
|
46
|
+
function removeHook() {
|
|
47
|
+
const settingsPath = (0, node_path_1.join)(CLAUDE_DIR, "settings.json");
|
|
48
|
+
if (!(0, node_fs_1.existsSync)(settingsPath))
|
|
49
|
+
return;
|
|
50
|
+
try {
|
|
51
|
+
const settings = JSON.parse((0, node_fs_1.readFileSync)(settingsPath, "utf-8"));
|
|
52
|
+
if (settings.hooks?.Stop) {
|
|
53
|
+
settings.hooks.Stop = settings.hooks.Stop.filter((group) => !group.hooks?.some((h) => h.command?.includes("cc-proficiency")));
|
|
54
|
+
if (settings.hooks.Stop.length === 0) {
|
|
55
|
+
delete settings.hooks.Stop;
|
|
56
|
+
}
|
|
57
|
+
if (Object.keys(settings.hooks).length === 0) {
|
|
58
|
+
delete settings.hooks;
|
|
59
|
+
}
|
|
60
|
+
(0, node_fs_1.writeFileSync)(settingsPath, JSON.stringify(settings, null, 2), "utf-8");
|
|
61
|
+
console.log(" \u2713 Hook removed from settings.json");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
console.log(" \u26A0 Could not update settings.json");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/cli/services/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LeaderboardEntry } from "../../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Fetch leaderboard from registry gist + individual public profiles.
|
|
4
|
+
* Falls back to cache if offline.
|
|
5
|
+
*/
|
|
6
|
+
export declare function fetchLeaderboard(sortBy?: string, limit?: number): {
|
|
7
|
+
entries: LeaderboardEntry[];
|
|
8
|
+
fromCache: boolean;
|
|
9
|
+
skipped: number;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=leaderboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaderboard.d.ts","sourceRoot":"","sources":["../../../src/cli/services/leaderboard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,gBAAgB,CAAC;AAkCzE;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,GAAE,MAAc,EACtB,KAAK,GAAE,MAAW,GACjB;IAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAwDtE"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchLeaderboard = fetchLeaderboard;
|
|
4
|
+
const registry_js_1 = require("../../gist/registry.js");
|
|
5
|
+
const local_store_js_1 = require("../../store/local-store.js");
|
|
6
|
+
const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
7
|
+
function shouldRefreshCache(cache) {
|
|
8
|
+
const age = Date.now() - new Date(cache.fetchedAt).getTime();
|
|
9
|
+
return isNaN(age) || age > CACHE_TTL_MS;
|
|
10
|
+
}
|
|
11
|
+
function profileToEntry(username, profile) {
|
|
12
|
+
try {
|
|
13
|
+
const domains = Array.isArray(profile.domains) ? profile.domains : [];
|
|
14
|
+
const streak = typeof profile.streak === "object" && profile.streak !== null ? profile.streak : { current: 0 };
|
|
15
|
+
const scores = domains.map((d) => typeof d.score === "number" ? d.score : 0);
|
|
16
|
+
const avg = scores.length > 0 ? Math.round(scores.reduce((s, v) => s + v, 0) / scores.length) : 0;
|
|
17
|
+
return {
|
|
18
|
+
username,
|
|
19
|
+
domains,
|
|
20
|
+
averageScore: avg,
|
|
21
|
+
streak: typeof streak.current === "number" ? streak.current : 0,
|
|
22
|
+
achievementCount: typeof profile.achievementCount === "number" ? profile.achievementCount : 0,
|
|
23
|
+
totalSessions: typeof profile.totalSessions === "number" ? profile.totalSessions : 0,
|
|
24
|
+
totalHours: typeof profile.totalHours === "number" ? profile.totalHours : 0,
|
|
25
|
+
memberSince: typeof profile.memberSince === "string" ? profile.memberSince : "",
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Fetch leaderboard from registry gist + individual public profiles.
|
|
34
|
+
* Falls back to cache if offline.
|
|
35
|
+
*/
|
|
36
|
+
function fetchLeaderboard(sortBy = "avg", limit = 20) {
|
|
37
|
+
// Try cache first
|
|
38
|
+
const cache = (0, local_store_js_1.loadLeaderboardCache)();
|
|
39
|
+
const useCache = cache && !shouldRefreshCache(cache);
|
|
40
|
+
if (useCache) {
|
|
41
|
+
return {
|
|
42
|
+
entries: sortEntries(cache.entries, sortBy).slice(0, limit),
|
|
43
|
+
fromCache: true,
|
|
44
|
+
skipped: 0,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Fetch fresh data
|
|
48
|
+
const registry = (0, registry_js_1.readRegistry)();
|
|
49
|
+
if (!registry) {
|
|
50
|
+
// Offline or unavailable — fall back to cache
|
|
51
|
+
if (cache) {
|
|
52
|
+
return {
|
|
53
|
+
entries: sortEntries(cache.entries, sortBy).slice(0, limit),
|
|
54
|
+
fromCache: true,
|
|
55
|
+
skipped: 0,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return { entries: [], fromCache: false, skipped: 0 };
|
|
59
|
+
}
|
|
60
|
+
const entries = [];
|
|
61
|
+
let skipped = 0;
|
|
62
|
+
for (const entry of registry.entries) {
|
|
63
|
+
const profile = (0, registry_js_1.readPublicProfileFromGist)(entry.publicGistId);
|
|
64
|
+
if (!profile) {
|
|
65
|
+
skipped++;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const leaderboardEntry = profileToEntry(entry.username, profile);
|
|
69
|
+
if (leaderboardEntry) {
|
|
70
|
+
entries.push(leaderboardEntry);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
skipped++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Save to cache
|
|
77
|
+
const newCache = {
|
|
78
|
+
fetchedAt: new Date().toISOString(),
|
|
79
|
+
entries,
|
|
80
|
+
};
|
|
81
|
+
(0, local_store_js_1.saveLeaderboardCache)(newCache);
|
|
82
|
+
return {
|
|
83
|
+
entries: sortEntries(entries, sortBy).slice(0, limit),
|
|
84
|
+
fromCache: false,
|
|
85
|
+
skipped,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function sortEntries(entries, sortBy) {
|
|
89
|
+
const sorted = [...entries];
|
|
90
|
+
const domainSortKeys = {
|
|
91
|
+
"cc-mastery": "cc-mastery",
|
|
92
|
+
"tool-mcp": "tool-mcp",
|
|
93
|
+
"agentic": "agentic",
|
|
94
|
+
"prompt-craft": "prompt-craft",
|
|
95
|
+
"context-mgmt": "context-mgmt",
|
|
96
|
+
};
|
|
97
|
+
if (sortBy in domainSortKeys) {
|
|
98
|
+
const domainId = domainSortKeys[sortBy];
|
|
99
|
+
sorted.sort((a, b) => {
|
|
100
|
+
const aScore = a.domains.find((d) => d.id === domainId)?.score ?? 0;
|
|
101
|
+
const bScore = b.domains.find((d) => d.id === domainId)?.score ?? 0;
|
|
102
|
+
return bScore - aScore;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
else if (sortBy === "hours") {
|
|
106
|
+
sorted.sort((a, b) => b.totalHours - a.totalHours);
|
|
107
|
+
}
|
|
108
|
+
else if (sortBy === "streak") {
|
|
109
|
+
sorted.sort((a, b) => b.streak - a.streak);
|
|
110
|
+
}
|
|
111
|
+
else if (sortBy === "sessions") {
|
|
112
|
+
sorted.sort((a, b) => b.totalSessions - a.totalSessions);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Default: average score
|
|
116
|
+
sorted.sort((a, b) => b.averageScore - a.averageScore);
|
|
117
|
+
}
|
|
118
|
+
return sorted;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=leaderboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaderboard.js","sourceRoot":"","sources":["../../../src/cli/services/leaderboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ProficiencyResult, LocalStore, RemoteStore } from "../../types.js";
|
|
2
|
+
export interface MergeAndPushResult {
|
|
3
|
+
success: boolean;
|
|
4
|
+
error?: string;
|
|
5
|
+
merged?: RemoteStore;
|
|
6
|
+
totals?: {
|
|
7
|
+
sessions: number;
|
|
8
|
+
hours: number;
|
|
9
|
+
projects: number;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Read remote store, merge local data, check achievements, re-render badge,
|
|
14
|
+
* and push SVG + JSON atomically. Used by both cmdPush and cmdProcess.
|
|
15
|
+
*/
|
|
16
|
+
export declare function mergeAndPush(store: LocalStore, result: ProficiencyResult, gistId: string, username: string, verbose?: boolean): MergeAndPushResult;
|
|
17
|
+
export declare function pushToGist(): void;
|
|
18
|
+
//# sourceMappingURL=publishing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publishing.d.ts","sourceRoot":"","sources":["../../../src/cli/services/publishing.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAe,MAAM,gBAAgB,CAAC;AAE9F,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,OAAe,GACvB,kBAAkB,CA8EpB;AAED,wBAAgB,UAAU,IAAI,IAAI,CAmCjC"}
|