cc-proficiency 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -18
- package/README.zh-CN.md +36 -10
- package/dist/cli/commands/achievements.d.ts.map +1 -1
- package/dist/cli/commands/achievements.js +1 -0
- package/dist/cli/commands/achievements.js.map +1 -1
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +14 -2
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/badge.d.ts.map +1 -1
- package/dist/cli/commands/badge.js +8 -2
- package/dist/cli/commands/badge.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +4 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/explain.js +1 -1
- package/dist/cli/commands/explain.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +7 -1
- package/dist/cli/commands/init.js.map +1 -1
- 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.map +1 -1
- package/dist/cli/commands/process.js +25 -5
- package/dist/cli/commands/process.js.map +1 -1
- package/dist/cli/commands/refresh.d.ts +7 -0
- package/dist/cli/commands/refresh.d.ts.map +1 -0
- package/dist/cli/commands/refresh.js +66 -0
- package/dist/cli/commands/refresh.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.map +1 -1
- package/dist/cli/commands/status.js +1 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +40 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.js +38 -19
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/services/hooks.d.ts.map +1 -1
- package/dist/cli/services/hooks.js +36 -18
- package/dist/cli/services/hooks.js.map +1 -1
- 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 +16 -0
- package/dist/cli/services/publishing.d.ts.map +1 -1
- package/dist/cli/services/publishing.js +88 -39
- package/dist/cli/services/publishing.js.map +1 -1
- package/dist/cli/services/self-update.d.ts +14 -0
- package/dist/cli/services/self-update.d.ts.map +1 -0
- package/dist/cli/services/self-update.js +45 -0
- package/dist/cli/services/self-update.js.map +1 -0
- package/dist/cli/services/sessions.d.ts +1 -0
- package/dist/cli/services/sessions.d.ts.map +1 -1
- package/dist/cli/services/sessions.js +15 -2
- package/dist/cli/services/sessions.js.map +1 -1
- package/dist/cli/utils/formatting.d.ts +2 -2
- package/dist/cli/utils/formatting.d.ts.map +1 -1
- package/dist/cli/utils/formatting.js +7 -1
- package/dist/cli/utils/formatting.js.map +1 -1
- package/dist/cli/utils/update-check.d.ts +9 -0
- package/dist/cli/utils/update-check.d.ts.map +1 -0
- package/dist/cli/utils/update-check.js +124 -0
- package/dist/cli/utils/update-check.js.map +1 -0
- package/dist/cli/utils/version.d.ts +2 -0
- package/dist/cli/utils/version.d.ts.map +1 -0
- package/dist/cli/utils/version.js +16 -0
- package/dist/cli/utils/version.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/token-refresh.js +72 -0
- 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 +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -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 +31 -229
- package/dist/parsers/config-parser.js.map +1 -1
- package/dist/parsers/transcript-parser.d.ts.map +1 -1
- package/dist/parsers/transcript-parser.js +10 -0
- package/dist/parsers/transcript-parser.js.map +1 -1
- package/dist/renderer/animated-svg.d.ts +9 -0
- package/dist/renderer/animated-svg.d.ts.map +1 -0
- package/dist/renderer/animated-svg.js +125 -0
- package/dist/renderer/animated-svg.js.map +1 -0
- package/dist/renderer/svg.d.ts +33 -5
- package/dist/renderer/svg.d.ts.map +1 -1
- package/dist/renderer/svg.js +77 -55
- 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/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 +2 -0
- 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/config-sync.d.ts +36 -0
- package/dist/store/config-sync.d.ts.map +1 -0
- package/dist/store/config-sync.js +161 -0
- package/dist/store/config-sync.js.map +1 -0
- package/dist/store/local-store.d.ts +6 -1
- package/dist/store/local-store.d.ts.map +1 -1
- package/dist/store/local-store.js +74 -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 +8 -1
- package/dist/store/remote-store.d.ts.map +1 -1
- package/dist/store/remote-store.js +32 -4
- package/dist/store/remote-store.js.map +1 -1
- package/dist/types.d.ts +77 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/format.d.ts +6 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +15 -0
- package/dist/utils/format.js.map +1 -0
- package/hooks/token-refresh.ts +75 -0
- package/package.json +1 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compareVersions = compareVersions;
|
|
4
|
+
exports.fetchLatestVersion = fetchLatestVersion;
|
|
5
|
+
exports.checkForUpdates = checkForUpdates;
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const node_os_1 = require("node:os");
|
|
9
|
+
const node_https_1 = require("node:https");
|
|
10
|
+
const queue_js_1 = require("../../store/queue.js");
|
|
11
|
+
const STORE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".cc-proficiency");
|
|
12
|
+
const CACHE_FILE = (0, node_path_1.join)(STORE_DIR, "version-check.json");
|
|
13
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
14
|
+
const FETCH_TIMEOUT_MS = 3000; // 3 seconds
|
|
15
|
+
function loadCache() {
|
|
16
|
+
if (!(0, node_fs_1.existsSync)(CACHE_FILE))
|
|
17
|
+
return null;
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse((0, node_fs_1.readFileSync)(CACHE_FILE, "utf-8"));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function saveCache(cache) {
|
|
26
|
+
(0, queue_js_1.ensureStoreDir)();
|
|
27
|
+
try {
|
|
28
|
+
(0, node_fs_1.writeFileSync)(CACHE_FILE, JSON.stringify(cache), "utf-8");
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// non-critical
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function compareVersions(a, b) {
|
|
35
|
+
// Strip prerelease/build metadata, compare major.minor.patch only
|
|
36
|
+
const pa = a.split("-")[0].split(".").map(Number);
|
|
37
|
+
const pb = b.split("-")[0].split(".").map(Number);
|
|
38
|
+
for (let i = 0; i < 3; i++) {
|
|
39
|
+
const va = pa[i] ?? 0;
|
|
40
|
+
const vb = pb[i] ?? 0;
|
|
41
|
+
if (isNaN(va) || isNaN(vb))
|
|
42
|
+
return 0; // can't compare, skip
|
|
43
|
+
if (va !== vb)
|
|
44
|
+
return va - vb;
|
|
45
|
+
}
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
function fetchLatestVersion() {
|
|
49
|
+
return new Promise((resolve) => {
|
|
50
|
+
let resolved = false;
|
|
51
|
+
const done = (val) => {
|
|
52
|
+
if (resolved)
|
|
53
|
+
return;
|
|
54
|
+
resolved = true;
|
|
55
|
+
clearTimeout(timer);
|
|
56
|
+
resolve(val);
|
|
57
|
+
};
|
|
58
|
+
const timer = setTimeout(() => {
|
|
59
|
+
req.destroy();
|
|
60
|
+
done(null);
|
|
61
|
+
}, FETCH_TIMEOUT_MS);
|
|
62
|
+
const req = (0, node_https_1.get)("https://registry.npmjs.org/cc-proficiency/latest", {
|
|
63
|
+
headers: { "Accept": "application/json" },
|
|
64
|
+
timeout: FETCH_TIMEOUT_MS,
|
|
65
|
+
}, (res) => {
|
|
66
|
+
if (res.statusCode !== 200) {
|
|
67
|
+
res.resume();
|
|
68
|
+
done(null);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
let data = "";
|
|
72
|
+
res.on("data", (chunk) => { data += chunk.toString(); });
|
|
73
|
+
res.on("end", () => {
|
|
74
|
+
try {
|
|
75
|
+
const pkg = JSON.parse(data);
|
|
76
|
+
done(typeof pkg.version === "string" ? pkg.version : null);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
done(null);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
req.on("error", () => done(null));
|
|
84
|
+
req.on("timeout", () => { req.destroy(); done(null); });
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check for updates and print a notice if a newer version is available.
|
|
89
|
+
* Non-blocking: fetches in background, resolves quickly from cache.
|
|
90
|
+
* Call after CLI output is complete.
|
|
91
|
+
*/
|
|
92
|
+
async function checkForUpdates(currentVersion) {
|
|
93
|
+
// Skip in non-interactive contexts
|
|
94
|
+
if (process.env.CC_PROFICIENCY_NO_UPDATE_CHECK === "1")
|
|
95
|
+
return;
|
|
96
|
+
if (process.env.CI)
|
|
97
|
+
return;
|
|
98
|
+
if (!process.stdout.isTTY)
|
|
99
|
+
return;
|
|
100
|
+
const cache = loadCache();
|
|
101
|
+
// Use cache if fresh
|
|
102
|
+
if (cache) {
|
|
103
|
+
const age = Date.now() - new Date(cache.checkedAt).getTime();
|
|
104
|
+
if (age >= 0 && age < CHECK_INTERVAL_MS) {
|
|
105
|
+
if (compareVersions(cache.latestVersion, currentVersion) > 0) {
|
|
106
|
+
printNotice(currentVersion, cache.latestVersion);
|
|
107
|
+
}
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Fetch in background — don't block
|
|
112
|
+
const latest = await fetchLatestVersion();
|
|
113
|
+
if (!latest)
|
|
114
|
+
return;
|
|
115
|
+
saveCache({ latestVersion: latest, checkedAt: new Date().toISOString() });
|
|
116
|
+
if (compareVersions(latest, currentVersion) > 0) {
|
|
117
|
+
printNotice(currentVersion, latest);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function printNotice(current, latest) {
|
|
121
|
+
console.log(`\n Update available: v${current} \u2192 v${latest}`);
|
|
122
|
+
console.log(" Run: cc-proficiency update\n");
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../../src/cli/utils/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/version.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAQnC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getVersion = getVersion;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
function getVersion() {
|
|
7
|
+
try {
|
|
8
|
+
// dist/cli/utils/version.js -> ../../../package.json
|
|
9
|
+
const pkg = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, "..", "..", "..", "package.json"), "utf-8"));
|
|
10
|
+
return pkg.version ?? "0.1.0";
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return "0.1.0";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/cli/utils/version.ts"],"names":[],"mappings":";;AAGA,gCAQC;AAXD,qCAAuC;AACvC,yCAAiC;AAEjC,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,qDAAqD;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACjG,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LeaderboardRegistry, PublicProfile } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Read the leaderboard registry from the owner's public gist.
|
|
4
|
+
*/
|
|
5
|
+
export declare function readRegistry(): LeaderboardRegistry | null;
|
|
6
|
+
/**
|
|
7
|
+
* Read a public profile from a user's public gist.
|
|
8
|
+
*/
|
|
9
|
+
export declare function readPublicProfileFromGist(publicGistId: string): PublicProfile | null;
|
|
10
|
+
/**
|
|
11
|
+
* Open a GitHub Issue to join the leaderboard.
|
|
12
|
+
*/
|
|
13
|
+
export declare function openJoinIssue(username: string, publicGistId: string): {
|
|
14
|
+
success: boolean;
|
|
15
|
+
issueUrl?: string;
|
|
16
|
+
error?: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Open a GitHub Issue to leave the leaderboard.
|
|
20
|
+
*/
|
|
21
|
+
export declare function openLeaveIssue(username: string): {
|
|
22
|
+
success: boolean;
|
|
23
|
+
issueUrl?: string;
|
|
24
|
+
error?: string;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/gist/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUtE;;GAEG;AACH,wBAAgB,YAAY,IAAI,mBAAmB,GAAG,IAAI,CAUzD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAIpF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA0BzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAyBzD"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readRegistry = readRegistry;
|
|
4
|
+
exports.readPublicProfileFromGist = readPublicProfileFromGist;
|
|
5
|
+
exports.openJoinIssue = openJoinIssue;
|
|
6
|
+
exports.openLeaveIssue = openLeaveIssue;
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const uploader_js_1 = require("./uploader.js");
|
|
9
|
+
const public_profile_js_1 = require("../store/public-profile.js");
|
|
10
|
+
// Must match vars.REGISTRY_GIST_ID in .github/workflows/leaderboard-registration.yml
|
|
11
|
+
const REGISTRY_GIST_ID = "ce1b434355768cfa36c68e5dbe5aa982";
|
|
12
|
+
const BOARD_REPO = "Z-M-Huang/cc-proficiency";
|
|
13
|
+
// Known limitation: public profiles are trust-based. A user could handcraft a gist
|
|
14
|
+
// with fake scores. Server-side verification or signed profiles would be needed to
|
|
15
|
+
// prevent this. Acceptable for v1 community leaderboard.
|
|
16
|
+
/**
|
|
17
|
+
* Read the leaderboard registry from the owner's public gist.
|
|
18
|
+
*/
|
|
19
|
+
function readRegistry() {
|
|
20
|
+
const json = (0, uploader_js_1.readGistFile)(REGISTRY_GIST_ID, "cc-proficiency-registry.json");
|
|
21
|
+
if (!json)
|
|
22
|
+
return null;
|
|
23
|
+
try {
|
|
24
|
+
const data = JSON.parse(json);
|
|
25
|
+
if (data?.version !== "1.0.0" || !Array.isArray(data.entries))
|
|
26
|
+
return null;
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Read a public profile from a user's public gist.
|
|
35
|
+
*/
|
|
36
|
+
function readPublicProfileFromGist(publicGistId) {
|
|
37
|
+
const json = (0, uploader_js_1.readGistFile)(publicGistId, "cc-proficiency-public.json");
|
|
38
|
+
if (!json)
|
|
39
|
+
return null;
|
|
40
|
+
return (0, public_profile_js_1.parsePublicProfile)(json);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Open a GitHub Issue to join the leaderboard.
|
|
44
|
+
*/
|
|
45
|
+
function openJoinIssue(username, publicGistId) {
|
|
46
|
+
try {
|
|
47
|
+
const title = `[leaderboard] join @${username}`;
|
|
48
|
+
const body = [
|
|
49
|
+
`**Username:** ${username}`,
|
|
50
|
+
`**Public Gist ID:** ${publicGistId}`,
|
|
51
|
+
"",
|
|
52
|
+
"This issue was automatically created by `cc-proficiency share`.",
|
|
53
|
+
"A GitHub Action will validate and add this entry to the leaderboard registry.",
|
|
54
|
+
].join("\n");
|
|
55
|
+
const result = (0, node_child_process_1.execFileSync)("gh", [
|
|
56
|
+
"issue", "create",
|
|
57
|
+
"--repo", BOARD_REPO,
|
|
58
|
+
"--title", title,
|
|
59
|
+
"--body", body,
|
|
60
|
+
"--label", "leaderboard",
|
|
61
|
+
], {
|
|
62
|
+
encoding: "utf-8",
|
|
63
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
64
|
+
timeout: 30_000,
|
|
65
|
+
});
|
|
66
|
+
return { success: true, issueUrl: result.trim() };
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
return { success: false, error: String(err) };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Open a GitHub Issue to leave the leaderboard.
|
|
74
|
+
*/
|
|
75
|
+
function openLeaveIssue(username) {
|
|
76
|
+
try {
|
|
77
|
+
const title = `[leaderboard] leave @${username}`;
|
|
78
|
+
const body = [
|
|
79
|
+
`**Username:** ${username}`,
|
|
80
|
+
"",
|
|
81
|
+
"This issue was automatically created by `cc-proficiency share --remove`.",
|
|
82
|
+
"A GitHub Action will remove this entry from the leaderboard registry.",
|
|
83
|
+
].join("\n");
|
|
84
|
+
const result = (0, node_child_process_1.execFileSync)("gh", [
|
|
85
|
+
"issue", "create",
|
|
86
|
+
"--repo", BOARD_REPO,
|
|
87
|
+
"--title", title,
|
|
88
|
+
"--body", body,
|
|
89
|
+
"--label", "leaderboard",
|
|
90
|
+
], {
|
|
91
|
+
encoding: "utf-8",
|
|
92
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
93
|
+
timeout: 30_000,
|
|
94
|
+
});
|
|
95
|
+
return { success: true, issueUrl: result.trim() };
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
return { success: false, error: String(err) };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/gist/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/gist/uploader.d.ts
CHANGED
|
@@ -30,7 +30,15 @@ export declare function findExistingGist(): string | null;
|
|
|
30
30
|
/**
|
|
31
31
|
* Push multiple files to a Gist atomically via gh api PATCH.
|
|
32
32
|
*/
|
|
33
|
-
export declare function pushGistFiles(gistId: string, files: Record<string, string>): GistResult;
|
|
33
|
+
export declare function pushGistFiles(gistId: string, files: Record<string, string | null>): GistResult;
|
|
34
|
+
/**
|
|
35
|
+
* Create a new public Gist with a public profile JSON.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createPublicGist(content: string): GistResult;
|
|
38
|
+
/**
|
|
39
|
+
* Delete a Gist by ID.
|
|
40
|
+
*/
|
|
41
|
+
export declare function deleteGist(gistId: string): GistResult;
|
|
34
42
|
/**
|
|
35
43
|
* Get the raw URL for a gist file.
|
|
36
44
|
*/
|
|
@@ -1 +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,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAehD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,
|
|
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,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAehD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,UAAU,CAqB9F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAmB5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAWrD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAA6B,GAAG,MAAM,CAE/G"}
|
package/dist/gist/uploader.js
CHANGED
|
@@ -7,6 +7,8 @@ exports.updateGist = updateGist;
|
|
|
7
7
|
exports.readGistFile = readGistFile;
|
|
8
8
|
exports.findExistingGist = findExistingGist;
|
|
9
9
|
exports.pushGistFiles = pushGistFiles;
|
|
10
|
+
exports.createPublicGist = createPublicGist;
|
|
11
|
+
exports.deleteGist = deleteGist;
|
|
10
12
|
exports.getGistRawUrl = getGistRawUrl;
|
|
11
13
|
const node_child_process_1 = require("node:child_process");
|
|
12
14
|
const node_fs_1 = require("node:fs");
|
|
@@ -139,7 +141,7 @@ function pushGistFiles(gistId, files) {
|
|
|
139
141
|
try {
|
|
140
142
|
const payload = { files: {} };
|
|
141
143
|
for (const [name, content] of Object.entries(files)) {
|
|
142
|
-
payload.files[name] = { content };
|
|
144
|
+
payload.files[name] = content === null ? null : { content };
|
|
143
145
|
}
|
|
144
146
|
const tmpFile = (0, node_path_1.join)((0, node_os_1.tmpdir)(), "cc-proficiency-patch.json");
|
|
145
147
|
(0, node_fs_1.writeFileSync)(tmpFile, JSON.stringify(payload), "utf-8");
|
|
@@ -162,6 +164,50 @@ function pushGistFiles(gistId, files) {
|
|
|
162
164
|
return { success: false, error: String(err) };
|
|
163
165
|
}
|
|
164
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Create a new public Gist with a public profile JSON.
|
|
169
|
+
*/
|
|
170
|
+
function createPublicGist(content) {
|
|
171
|
+
const tmpFile = (0, node_path_1.join)((0, node_os_1.tmpdir)(), "cc-proficiency-public.json");
|
|
172
|
+
try {
|
|
173
|
+
(0, node_fs_1.writeFileSync)(tmpFile, content, "utf-8");
|
|
174
|
+
const result = (0, node_child_process_1.execFileSync)("gh", [
|
|
175
|
+
"gist", "create", "--public", "-d", "cc-proficiency Public Profile", tmpFile,
|
|
176
|
+
], {
|
|
177
|
+
encoding: "utf-8",
|
|
178
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
179
|
+
timeout: 30_000,
|
|
180
|
+
});
|
|
181
|
+
const url = result.trim();
|
|
182
|
+
const gistId = url.split("/").pop();
|
|
183
|
+
return { success: true, url: gistId };
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
return { success: false, error: String(err) };
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
try {
|
|
190
|
+
(0, node_fs_1.unlinkSync)(tmpFile);
|
|
191
|
+
}
|
|
192
|
+
catch { /* ignore */ }
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Delete a Gist by ID.
|
|
197
|
+
*/
|
|
198
|
+
function deleteGist(gistId) {
|
|
199
|
+
try {
|
|
200
|
+
(0, node_child_process_1.execFileSync)("gh", ["gist", "delete", gistId, "--yes"], {
|
|
201
|
+
encoding: "utf-8",
|
|
202
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
203
|
+
timeout: 15_000,
|
|
204
|
+
});
|
|
205
|
+
return { success: true };
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
return { success: false, error: String(err) };
|
|
209
|
+
}
|
|
210
|
+
}
|
|
165
211
|
/**
|
|
166
212
|
* Get the raw URL for a gist file.
|
|
167
213
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.js","sourceRoot":"","sources":["../../src/gist/uploader.ts"],"names":[],"mappings":";;AAcA,8CAOC;AAKD,sCAWC;AAKD,gCAmBC;AAKD,gCAeC;AAKD,oCAcC;AAKD,4CAeC;AAKD,sCAqBC;AAKD,sCAEC;
|
|
1
|
+
{"version":3,"file":"uploader.js","sourceRoot":"","sources":["../../src/gist/uploader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Stop hook for token refresh.
|
|
5
|
+
* Checks if badge is stale (>30 min) and spawns a lightweight refresh.
|
|
6
|
+
* Must exit 0 in <1 second.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const node_child_process_1 = require("node:child_process");
|
|
10
|
+
const node_path_1 = require("node:path");
|
|
11
|
+
const node_os_1 = require("node:os");
|
|
12
|
+
const node_fs_1 = require("node:fs");
|
|
13
|
+
const STORE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".cc-proficiency");
|
|
14
|
+
const BADGE_FILE = (0, node_path_1.join)(STORE_DIR, "cc-proficiency.svg");
|
|
15
|
+
const HOOK_LOG = (0, node_path_1.join)(STORE_DIR, "hook.log");
|
|
16
|
+
const MAX_LOG_SIZE = 500_000;
|
|
17
|
+
const STALE_MS = 30 * 60 * 1000; // 30 minutes
|
|
18
|
+
function log(msg) {
|
|
19
|
+
try {
|
|
20
|
+
if (!(0, node_fs_1.existsSync)(STORE_DIR))
|
|
21
|
+
(0, node_fs_1.mkdirSync)(STORE_DIR, { recursive: true });
|
|
22
|
+
if ((0, node_fs_1.existsSync)(HOOK_LOG)) {
|
|
23
|
+
try {
|
|
24
|
+
if ((0, node_fs_1.statSync)(HOOK_LOG).size > MAX_LOG_SIZE)
|
|
25
|
+
(0, node_fs_1.writeFileSync)(HOOK_LOG, "", "utf-8");
|
|
26
|
+
}
|
|
27
|
+
catch { /* ignore */ }
|
|
28
|
+
}
|
|
29
|
+
const ts = new Date().toISOString();
|
|
30
|
+
(0, node_fs_1.appendFileSync)(HOOK_LOG, `[${ts}] ${msg}\n`, "utf-8");
|
|
31
|
+
}
|
|
32
|
+
catch { /* logging must never crash the hook */ }
|
|
33
|
+
}
|
|
34
|
+
// CI/CD detection — skip if non-interactive
|
|
35
|
+
// Duplicated from src/utils/ci-detect.ts — keep in sync
|
|
36
|
+
const CI_VARS = ["CI", "GITHUB_ACTIONS", "GITLAB_CI", "CODESPACES", "BUILDKITE", "CIRCLECI", "TRAVIS"];
|
|
37
|
+
if (CI_VARS.some((v) => process.env[v] === "true") || process.env.JENKINS_URL) {
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
40
|
+
// Read stdin (hook payload — consumed but not used for refresh)
|
|
41
|
+
process.stdin.setEncoding("utf-8");
|
|
42
|
+
process.stdin.on("data", () => { });
|
|
43
|
+
process.stdin.on("end", () => {
|
|
44
|
+
try {
|
|
45
|
+
// Check badge file staleness (mtime reflects actual render time)
|
|
46
|
+
if (!(0, node_fs_1.existsSync)(BADGE_FILE)) {
|
|
47
|
+
process.exit(0);
|
|
48
|
+
}
|
|
49
|
+
const age = Date.now() - (0, node_fs_1.statSync)(BADGE_FILE).mtimeMs;
|
|
50
|
+
if (age < STALE_MS) {
|
|
51
|
+
process.exit(0); // not stale
|
|
52
|
+
}
|
|
53
|
+
// Badge is stale — spawn refresh
|
|
54
|
+
const processorPath = (0, node_path_1.join)(__dirname, "..", "cli", "index.js");
|
|
55
|
+
if ((0, node_fs_1.existsSync)(processorPath)) {
|
|
56
|
+
const child = (0, node_child_process_1.spawn)("node", [processorPath, "refresh"], {
|
|
57
|
+
detached: true,
|
|
58
|
+
stdio: "ignore",
|
|
59
|
+
});
|
|
60
|
+
child.unref();
|
|
61
|
+
log(`REFRESH: badge stale (${Math.round(age / 60000)}m), spawned pid=${child.pid}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
log(`REFRESH-ERROR: ${err}`);
|
|
66
|
+
}
|
|
67
|
+
process.exit(0);
|
|
68
|
+
});
|
|
69
|
+
// Timeout safety
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
process.exit(0);
|
|
72
|
+
}, 4000);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../src/i18n/locales.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IAErB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAoDD,wBAAgB,SAAS,CAAC,MAAM,GAAE,MAAa,GAAG,aAAa,CAE9D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../src/i18n/locales.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IAErB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAoDD,wBAAgB,SAAS,CAAC,MAAM,GAAE,MAAa,GAAG,aAAa,CAE9D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAKrC"}
|
package/dist/i18n/locales.js
CHANGED
|
@@ -56,7 +56,8 @@ function getLocale(locale = "en") {
|
|
|
56
56
|
* Detect locale from environment or config.
|
|
57
57
|
*/
|
|
58
58
|
function detectLocale() {
|
|
59
|
-
|
|
59
|
+
// LC_ALL overrides everything, then LC_MESSAGES, then LANG, then LANGUAGE
|
|
60
|
+
const lang = process.env.LC_ALL ?? process.env.LC_MESSAGES ?? process.env.LANG ?? process.env.LANGUAGE ?? "";
|
|
60
61
|
if (lang.startsWith("zh"))
|
|
61
62
|
return "zh-CN";
|
|
62
63
|
return "en";
|
package/dist/i18n/locales.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/i18n/locales.ts"],"names":[],"mappings":";;AA+EA,8BAEC;AAKD,
|
|
1
|
+
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/i18n/locales.ts"],"names":[],"mappings":";;AA+EA,8BAEC;AAKD,oCAKC;AA9DD,MAAM,EAAE,GAAkB;IACxB,KAAK,EAAE,yBAAyB;IAChC,WAAW,EAAE,6BAA6B;IAC1C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB;IAC7C,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,cAAc;IAC3B,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF,MAAM,IAAI,GAAkB;IAC1B,KAAK,EAAE,sCAAsC;IAC7C,WAAW,EAAE,qDAAqD;IAClE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,6CAA6C;IAC/E,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,cAAc;IACxB,KAAK,EAAE,cAAc;IACrB,YAAY,EAAE,0BAA0B;IACxC,SAAS,EAAE,iBAAiB;IAC5B,OAAO,EAAE,oBAAoB;IAC7B,OAAO,EAAE,oBAAoB;IAC7B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,oBAAoB;IACjC,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,cAAc;IACtB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,cAAc;IACtB,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,cAAc;IACrB,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF,MAAM,OAAO,GAAkC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAErE,SAAgB,SAAS,CAAC,SAAiB,IAAI;IAC7C,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY;IAC1B,0EAA0E;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC7G,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { ProficiencyResult, DomainScore, ExtractedSignals, SetupChecklist, FeatureInventory, CCProficiencyConfig, LocalStore, SessionSnapshot, QueueEntry, } from "./types.js";
|
|
1
|
+
export type { ProficiencyResult, DomainScore, ExtractedSignals, SetupChecklist, FeatureInventory, CCProficiencyConfig, LocalStore, SessionSnapshot, QueueEntry, TokenLogEntry, TokenWindows, } from "./types.js";
|
|
2
2
|
export { parseTranscript, sanitizeProjectSlug } from "./parsers/transcript-parser.js";
|
|
3
3
|
export { normalizeEntry } from "./parsers/normalizer.js";
|
|
4
4
|
export { parseClaudeConfig, buildSetupChecklist } from "./parsers/config-parser.js";
|
|
@@ -7,6 +7,8 @@ export { extractSignals } from "./scoring/signals.js";
|
|
|
7
7
|
export { computeProficiency, extractFeatureInventory, getPhase, getConfidence, getRecencyWeight, SCORING_VERSION } from "./scoring/engine.js";
|
|
8
8
|
export { fireRules, aggregateToBuckets, bucketsToScores, extractFeatureScores } from "./scoring/rule-engine.js";
|
|
9
9
|
export { RULES } from "./scoring/rules.js";
|
|
10
|
+
export { computeFeatureDepthScores } from "./scoring/feature-scores.js";
|
|
10
11
|
export { logCurve, cappedRatio, binary, ratioToScore, weightedSum } from "./scoring/curves.js";
|
|
11
12
|
export { isCIEnvironment } from "./utils/ci-detect.js";
|
|
13
|
+
export { formatTokens } from "./utils/format.js";
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,UAAU,EACV,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9I,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isCIEnvironment = exports.weightedSum = exports.ratioToScore = exports.binary = exports.cappedRatio = exports.logCurve = exports.RULES = exports.extractFeatureScores = exports.bucketsToScores = exports.aggregateToBuckets = exports.fireRules = exports.SCORING_VERSION = exports.getRecencyWeight = exports.getConfidence = exports.getPhase = exports.extractFeatureInventory = exports.computeProficiency = exports.extractSignals = exports.parseHistory = exports.buildSetupChecklist = exports.parseClaudeConfig = exports.normalizeEntry = exports.sanitizeProjectSlug = exports.parseTranscript = void 0;
|
|
3
|
+
exports.formatTokens = exports.isCIEnvironment = exports.weightedSum = exports.ratioToScore = exports.binary = exports.cappedRatio = exports.logCurve = exports.computeFeatureDepthScores = exports.RULES = exports.extractFeatureScores = exports.bucketsToScores = exports.aggregateToBuckets = exports.fireRules = exports.SCORING_VERSION = exports.getRecencyWeight = exports.getConfidence = exports.getPhase = exports.extractFeatureInventory = exports.computeProficiency = exports.extractSignals = exports.parseHistory = exports.buildSetupChecklist = exports.parseClaudeConfig = exports.normalizeEntry = exports.sanitizeProjectSlug = exports.parseTranscript = void 0;
|
|
4
4
|
var transcript_parser_js_1 = require("./parsers/transcript-parser.js");
|
|
5
5
|
Object.defineProperty(exports, "parseTranscript", { enumerable: true, get: function () { return transcript_parser_js_1.parseTranscript; } });
|
|
6
6
|
Object.defineProperty(exports, "sanitizeProjectSlug", { enumerable: true, get: function () { return transcript_parser_js_1.sanitizeProjectSlug; } });
|
|
@@ -27,6 +27,8 @@ Object.defineProperty(exports, "bucketsToScores", { enumerable: true, get: funct
|
|
|
27
27
|
Object.defineProperty(exports, "extractFeatureScores", { enumerable: true, get: function () { return rule_engine_js_1.extractFeatureScores; } });
|
|
28
28
|
var rules_js_1 = require("./scoring/rules.js");
|
|
29
29
|
Object.defineProperty(exports, "RULES", { enumerable: true, get: function () { return rules_js_1.RULES; } });
|
|
30
|
+
var feature_scores_js_1 = require("./scoring/feature-scores.js");
|
|
31
|
+
Object.defineProperty(exports, "computeFeatureDepthScores", { enumerable: true, get: function () { return feature_scores_js_1.computeFeatureDepthScores; } });
|
|
30
32
|
var curves_js_1 = require("./scoring/curves.js");
|
|
31
33
|
Object.defineProperty(exports, "logCurve", { enumerable: true, get: function () { return curves_js_1.logCurve; } });
|
|
32
34
|
Object.defineProperty(exports, "cappedRatio", { enumerable: true, get: function () { return curves_js_1.cappedRatio; } });
|
|
@@ -35,4 +37,6 @@ Object.defineProperty(exports, "ratioToScore", { enumerable: true, get: function
|
|
|
35
37
|
Object.defineProperty(exports, "weightedSum", { enumerable: true, get: function () { return curves_js_1.weightedSum; } });
|
|
36
38
|
var ci_detect_js_1 = require("./utils/ci-detect.js");
|
|
37
39
|
Object.defineProperty(exports, "isCIEnvironment", { enumerable: true, get: function () { return ci_detect_js_1.isCIEnvironment; } });
|
|
40
|
+
var format_js_1 = require("./utils/format.js");
|
|
41
|
+
Object.defineProperty(exports, "formatTokens", { enumerable: true, get: function () { return format_js_1.formatTokens; } });
|
|
38
42
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAcA,uEAAsF;AAA7E,uHAAA,eAAe,OAAA;AAAE,2HAAA,mBAAmB,OAAA;AAC7C,yDAAyD;AAAhD,+GAAA,cAAc,OAAA;AACvB,+DAAoF;AAA3E,qHAAA,iBAAiB,OAAA;AAAE,uHAAA,mBAAmB,OAAA;AAC/C,iEAA2D;AAAlD,iHAAA,YAAY,OAAA;AACrB,mDAAsD;AAA7C,4GAAA,cAAc,OAAA;AACvB,iDAA8I;AAArI,+GAAA,kBAAkB,OAAA;AAAE,oHAAA,uBAAuB,OAAA;AAAE,qGAAA,QAAQ,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAChH,2DAAgH;AAAvG,2GAAA,SAAS,OAAA;AAAE,oHAAA,kBAAkB,OAAA;AAAE,iHAAA,eAAe,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AAC7E,+CAA2C;AAAlC,iGAAA,KAAK,OAAA;AACd,iEAAwE;AAA/D,8HAAA,yBAAyB,OAAA;AAClC,iDAA+F;AAAtF,qGAAA,QAAQ,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,mGAAA,MAAM,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,wGAAA,WAAW,OAAA;AACjE,qDAAuD;AAA9C,+GAAA,eAAe,OAAA;AACxB,+CAAiD;AAAxC,yGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ConfigSignals } from "./config-parser.js";
|
|
2
|
+
export declare function parseGlobalClaudeMd(result: ConfigSignals): void;
|
|
3
|
+
/** Parse global ~/.claude/settings.json (called once). */
|
|
4
|
+
export declare function parseGlobalSettings(result: ConfigSignals): void;
|
|
5
|
+
/** Parse project-level .claude/settings.json (called per project cwd). */
|
|
6
|
+
export declare function parseSettings(result: ConfigSignals, cwd: string): void;
|
|
7
|
+
/** Parse plugin hooks from global cache. Global-only: plugins install to ~/.claude/plugins/cache/. */
|
|
8
|
+
export declare function parsePluginHooks(result: ConfigSignals): void;
|
|
9
|
+
/** Scan global ~/.claude/projects/ for CLAUDE.md and memory. */
|
|
10
|
+
export declare function parseProjectsAndMemory(result: ConfigSignals): void;
|
|
11
|
+
/** Scan a project cwd for CLAUDE.md (per project cwd). */
|
|
12
|
+
export declare function parseProjectClaudeMd(result: ConfigSignals, cwd: string): void;
|
|
13
|
+
/** Scan a project cwd for agent-memory (per project cwd). */
|
|
14
|
+
export declare function parseProjectAgentMemory(result: ConfigSignals, cwd: string): void;
|
|
15
|
+
export declare function parseGlobalRulesFiles(result: ConfigSignals): void;
|
|
16
|
+
export declare function parseRulesFiles(result: ConfigSignals, cwd: string): void;
|
|
17
|
+
/** Parse global ~/.claude MCP configs + plugin MCP (called once). */
|
|
18
|
+
export declare function parseGlobalMcpServers(result: ConfigSignals): void;
|
|
19
|
+
/** Parse project-level MCP configs (called per project cwd). */
|
|
20
|
+
export declare function parseMcpServers(result: ConfigSignals, cwd: string): void;
|
|
21
|
+
/** Parse global ~/.claude/agents/ (called once). */
|
|
22
|
+
export declare function parseGlobalAgents(result: ConfigSignals): void;
|
|
23
|
+
/** Parse project-level .claude/agents/ (called per project cwd). */
|
|
24
|
+
export declare function parseCustomAgents(result: ConfigSignals, cwd: string): void;
|
|
25
|
+
/** Parse global ~/.claude/skills/ (called once). */
|
|
26
|
+
export declare function parseGlobalSkills(result: ConfigSignals): void;
|
|
27
|
+
/** Parse project-level .claude/skills/ (called per project cwd). */
|
|
28
|
+
export declare function parseCustomSkills(result: ConfigSignals, cwd: string): void;
|
|
29
|
+
//# sourceMappingURL=config-detectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-detectors.d.ts","sourceRoot":"","sources":["../../src/parsers/config-detectors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAc/D;AAuCD,0DAA0D;AAC1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAK/D;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAKtE;AAED,sGAAsG;AACtG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAuC5D;AA2BD,gEAAgE;AAChE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CA6BlE;AAED,0DAA0D;AAC1D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAG7E;AAED,6DAA6D;AAC7D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQhF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAQjE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQxE;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CA0CjE;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAiBxE;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAQ7D;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ1E;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAa7D;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAa1E"}
|