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
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
|
|
36
36
|
## What it does
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
Analyzes your Claude Code session transcripts **locally** with a rule-based engine, scoring usage patterns across 5 domains:
|
|
39
39
|
|
|
40
40
|
| Domain | Weight | What it measures |
|
|
41
41
|
|--------|--------|-----------------|
|
|
@@ -45,11 +45,14 @@ Uses a **rule-based engine** to analyze your Claude Code session transcripts **l
|
|
|
45
45
|
| **Prompt Craft** | 20% | Structured prompts, code blocks, error traces, refinement |
|
|
46
46
|
| **Context Mgmt** | 20% | Cross-session memory, CLAUDE.md updates, sustained projects |
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Also shows **8 feature mini-bars** (Hooks, Plugins, Skills, MCP, Agents, Plan, Memory, Rules) as a heatmap row.
|
|
49
49
|
|
|
50
50
|
<p align="center">
|
|
51
51
|
<a href="https://github.com/Z-M-Huang/cc-proficiency">
|
|
52
|
-
<img src="https://gist.githubusercontent.com/Z-M-Huang/2717fa94690c459d5093650c87f49868/raw/cc-proficiency.svg" alt="CC Proficiency Badge
|
|
52
|
+
<img src="https://gist.githubusercontent.com/Z-M-Huang/2717fa94690c459d5093650c87f49868/raw/cc-proficiency.svg" alt="CC Proficiency Badge — Static" />
|
|
53
|
+
</a>
|
|
54
|
+
<a href="https://github.com/Z-M-Huang/cc-proficiency">
|
|
55
|
+
<img src="https://gist.githubusercontent.com/Z-M-Huang/2717fa94690c459d5093650c87f49868/raw/cc-proficiency-animated.svg" alt="CC Proficiency Badge — Animated" />
|
|
53
56
|
</a>
|
|
54
57
|
</p>
|
|
55
58
|
|
|
@@ -190,10 +193,14 @@ $ cc-proficiency badge --output badge.svg
|
|
|
190
193
|
After running `cc-proficiency init`, add this to your README:
|
|
191
194
|
|
|
192
195
|
```markdown
|
|
196
|
+
<!-- Static badge -->
|
|
193
197
|

|
|
198
|
+
|
|
199
|
+
<!-- Animated badge (bars fill on load) -->
|
|
200
|
+

|
|
194
201
|
```
|
|
195
202
|
|
|
196
|
-
|
|
203
|
+
Both badges update automatically after each Claude Code session (via the Stop hook).
|
|
197
204
|
|
|
198
205
|
## Progressive Badge
|
|
199
206
|
|
|
@@ -205,11 +212,23 @@ The badge adapts based on how much data is available:
|
|
|
205
212
|
| **Early Results** | 3–9 | 5 domain bars + 8 feature mini-bars (low-confidence indicators ○) |
|
|
206
213
|
| **Full Badge** | 10+ | Full domain bars, feature heatmap, confidence dots (● ◐ ○) |
|
|
207
214
|
|
|
215
|
+
## Improve your scores
|
|
216
|
+
|
|
217
|
+
The **[Gamification Guide](https://github.com/Z-M-Huang/cc-proficiency/wiki/Gamification-Guide)** covers:
|
|
218
|
+
|
|
219
|
+
- First day through expert-level progression path
|
|
220
|
+
- Tips for each of the 5 domains
|
|
221
|
+
- How to unlock all 15 achievements
|
|
222
|
+
- What drives each feature mini-bar from 0 to 100
|
|
223
|
+
- Streak system and leaderboard
|
|
224
|
+
|
|
225
|
+
> **[Gamification Guide](https://github.com/Z-M-Huang/cc-proficiency/wiki/Gamification-Guide)** | **[游戏化攻略(中文)](https://github.com/Z-M-Huang/cc-proficiency/wiki/Gamification-Guide-zh)**
|
|
226
|
+
|
|
208
227
|
## How scoring works
|
|
209
228
|
|
|
210
|
-
### Rule-based engine
|
|
229
|
+
### Rule-based engine
|
|
211
230
|
|
|
212
|
-
|
|
231
|
+
cc-proficiency uses a **pattern-matching rule engine** with ~55 rules across 5 domains instead of counting tool calls. Each rule detects a specific behavior pattern and awards points by tier:
|
|
213
232
|
|
|
214
233
|
| Tier | Points | Example Rule |
|
|
215
234
|
|------|--------|-------------|
|
|
@@ -230,11 +249,11 @@ Instead of counting tool usage, cc-proficiency uses a **pattern-matching rule en
|
|
|
230
249
|
|
|
231
250
|
### 8 Feature Mini-Bars
|
|
232
251
|
|
|
233
|
-
Below the domain bars, a heatmap row shows
|
|
252
|
+
Below the domain bars, a heatmap row shows depth per feature:
|
|
234
253
|
|
|
235
254
|
`Hooks · Plugins · Skills · MCP · Agents · Plan · Memory · Rules`
|
|
236
255
|
|
|
237
|
-
Each mini-bar
|
|
256
|
+
Each mini-bar uses **depth-based scoring** with logarithmic curves that reflect actual usage, not just whether you've tried a feature once. Having hooks configured gets you ~30; firing them across hundreds of sessions gets you closer to 100. See the [Gamification Guide](https://github.com/Z-M-Huang/cc-proficiency/wiki/Gamification-Guide) for details.
|
|
238
257
|
|
|
239
258
|
### Bucket aggregation with caps
|
|
240
259
|
|
|
@@ -242,14 +261,14 @@ Scores are not raw sums. Each domain has capped buckets:
|
|
|
242
261
|
|
|
243
262
|
| Bucket | Max Points | Source |
|
|
244
263
|
|--------|-----------|--------|
|
|
245
|
-
| **Config** | 25 pts | Config-based rules (CLAUDE.md, hooks, plugins
|
|
246
|
-
| **Behavior** | 75 pts | Behavior-based rules (transcript patterns
|
|
264
|
+
| **Config** | 25 pts | Config-based rules (CLAUDE.md, hooks, plugins; available immediately) |
|
|
265
|
+
| **Behavior** | 75 pts | Behavior-based rules (transcript patterns; grow over time) |
|
|
247
266
|
| **Penalty** | -15 pts max | Anti-pattern deductions |
|
|
248
267
|
|
|
249
268
|
This means:
|
|
250
|
-
- **Fresh installs** can score up to ~25 per domain
|
|
251
|
-
- **
|
|
252
|
-
- **Anti-patterns are capped
|
|
269
|
+
- **Fresh installs** can score up to ~25 raw config points per domain (boosted to ~50 during calibration via 2.0x scaling)
|
|
270
|
+
- **After calibration** (10+ sessions) config alone caps at ~25 per domain; transcript evidence drives the rest
|
|
271
|
+
- **Anti-patterns are capped**, so a few bad sessions don't destroy your score
|
|
253
272
|
|
|
254
273
|
### Phase-aware weighting
|
|
255
274
|
|
|
@@ -263,17 +282,17 @@ Config evidence is weighted more heavily during calibration, less as transcripts
|
|
|
263
282
|
|
|
264
283
|
### Anti-gaming
|
|
265
284
|
|
|
266
|
-
- Rules fire **per-session with caps
|
|
285
|
+
- Rules fire **per-session with caps**; repeating the same tool 100x doesn't help
|
|
267
286
|
- **Anti-pattern rules** deduct points for bad habits (shotgun parallel calls, unstructured walls of text)
|
|
268
|
-
- Each rule has `maxPerSession
|
|
269
|
-
- Config scores are **capped at 25
|
|
287
|
+
- Each rule has `maxPerSession`; investigation chains cap at 3 per session
|
|
288
|
+
- Config scores are **capped at 25**, so you can't max a domain by just installing plugins
|
|
270
289
|
|
|
271
290
|
## Privacy
|
|
272
291
|
|
|
273
292
|
| Concern | How it's handled |
|
|
274
293
|
|---------|-----------------|
|
|
275
294
|
| **Data location** | All analysis happens **locally** on your machine |
|
|
276
|
-
| **What's stored** | Only aggregate counts, ratios, and boolean flags
|
|
295
|
+
| **What's stored** | Only aggregate counts, ratios, and boolean flags (no file paths, code, or prompts) |
|
|
277
296
|
| **Gist visibility** | **Private by default** (secret URL, not listed on your profile) |
|
|
278
297
|
| **Offline mode** | Works fully offline without `gh` CLI (local-only mode) |
|
|
279
298
|
| **CI/CD** | Non-interactive sessions are automatically detected and excluded |
|
|
@@ -288,9 +307,31 @@ Config evidence is weighted more heavily during calibration, less as transcripts
|
|
|
288
307
|
| `cc-proficiency badge [--output <file>]` | Generate SVG badge |
|
|
289
308
|
| `cc-proficiency push` | Upload badge to Gist |
|
|
290
309
|
| `cc-proficiency explain` | Show score drivers and tips |
|
|
310
|
+
| `cc-proficiency achievements` | View achievement progress |
|
|
311
|
+
| `cc-proficiency status` | Show hook activity, queue, and config |
|
|
291
312
|
| `cc-proficiency config [key] [value]` | View/set configuration |
|
|
313
|
+
| `cc-proficiency share [--remove]` | Join or leave the community leaderboard |
|
|
314
|
+
| `cc-proficiency leaderboard` | View community rankings |
|
|
315
|
+
| `cc-proficiency update` | Update to the latest version |
|
|
292
316
|
| `cc-proficiency uninstall` | Remove hooks and clean up |
|
|
293
317
|
|
|
318
|
+
### Community Leaderboard
|
|
319
|
+
|
|
320
|
+
Opt into the community leaderboard to compare your proficiency with other Claude Code users:
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
# Join the leaderboard (creates a separate public profile)
|
|
324
|
+
$ cc-proficiency share
|
|
325
|
+
|
|
326
|
+
# View rankings
|
|
327
|
+
$ cc-proficiency leaderboard
|
|
328
|
+
|
|
329
|
+
# Leave the leaderboard
|
|
330
|
+
$ cc-proficiency share --remove
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Your private data (session details, project names, file paths) is never shared. Only scores, streak, and achievement count are public. See the [wiki](https://github.com/Z-M-Huang/cc-proficiency/wiki) for full documentation.
|
|
334
|
+
|
|
294
335
|
## Architecture
|
|
295
336
|
|
|
296
337
|
```
|
|
@@ -315,7 +356,7 @@ Contributions welcome! Please open an issue first to discuss what you'd like to
|
|
|
315
356
|
git clone https://github.com/Z-M-Huang/cc-proficiency.git
|
|
316
357
|
cd cc-proficiency
|
|
317
358
|
npm install
|
|
318
|
-
npm test #
|
|
359
|
+
npm test # 200 tests
|
|
319
360
|
npm run build # compile to dist/
|
|
320
361
|
npm run typecheck # tsc --noEmit
|
|
321
362
|
npm run lint # eslint
|
package/README.zh-CN.md
CHANGED
|
@@ -49,7 +49,10 @@
|
|
|
49
49
|
|
|
50
50
|
<p align="center">
|
|
51
51
|
<a href="https://github.com/Z-M-Huang/cc-proficiency">
|
|
52
|
-
<img src="https://gist.githubusercontent.com/Z-M-Huang/2717fa94690c459d5093650c87f49868/raw/cc-proficiency.svg" alt="CC Proficiency
|
|
52
|
+
<img src="https://gist.githubusercontent.com/Z-M-Huang/2717fa94690c459d5093650c87f49868/raw/cc-proficiency.svg" alt="CC Proficiency 徽章 — 静态" />
|
|
53
|
+
</a>
|
|
54
|
+
<a href="https://github.com/Z-M-Huang/cc-proficiency">
|
|
55
|
+
<img src="https://gist.githubusercontent.com/Z-M-Huang/2717fa94690c459d5093650c87f49868/raw/cc-proficiency-animated.svg" alt="CC Proficiency 徽章 — 动画" />
|
|
53
56
|
</a>
|
|
54
57
|
</p>
|
|
55
58
|
|
|
@@ -141,7 +144,11 @@ cc-proficiency badge
|
|
|
141
144
|
运行 `cc-proficiency init` 后,在 README 中添加:
|
|
142
145
|
|
|
143
146
|
```markdown
|
|
147
|
+
<!-- 静态徽章 -->
|
|
144
148
|

|
|
149
|
+
|
|
150
|
+
<!-- 动画徽章(加载时进度条填充) -->
|
|
151
|
+

|
|
145
152
|
```
|
|
146
153
|
|
|
147
154
|
## 渐进式徽章
|
|
@@ -154,11 +161,23 @@ cc-proficiency badge
|
|
|
154
161
|
| **初步结果** | 3–9 | 5 个领域条 + 8 个特性迷你条(低置信度 ○) |
|
|
155
162
|
| **完整徽章** | 10+ | 完整领域条、特性热力图、置信度圆点(● ◐ ○) |
|
|
156
163
|
|
|
164
|
+
## 提升分数
|
|
165
|
+
|
|
166
|
+
**[游戏化攻略](https://github.com/Z-M-Huang/cc-proficiency/wiki/Gamification-Guide-zh)** 涵盖:
|
|
167
|
+
|
|
168
|
+
- 从第一天到专家级的进阶路径
|
|
169
|
+
- 5 个领域的提升技巧
|
|
170
|
+
- 解锁全部 15 个成就的方法
|
|
171
|
+
- 每个特性迷你条从 0 到 100 的具体指南
|
|
172
|
+
- 连续打卡和排行榜
|
|
173
|
+
|
|
174
|
+
> **[游戏化攻略(中文)](https://github.com/Z-M-Huang/cc-proficiency/wiki/Gamification-Guide-zh)** | **[Gamification Guide (English)](https://github.com/Z-M-Huang/cc-proficiency/wiki/Gamification-Guide)**
|
|
175
|
+
|
|
157
176
|
## 评分系统
|
|
158
177
|
|
|
159
178
|
### 基于规则的引擎
|
|
160
179
|
|
|
161
|
-
cc-proficiency 使用 **~
|
|
180
|
+
cc-proficiency 使用 **~55 条模式匹配规则**,而不是简单计数:
|
|
162
181
|
|
|
163
182
|
| 级别 | 分值 | 示例规则 |
|
|
164
183
|
|------|------|---------|
|
|
@@ -179,16 +198,18 @@ cc-proficiency 使用 **~53 条模式匹配规则**,而不是简单计数:
|
|
|
179
198
|
|
|
180
199
|
### 8 个特性迷你条
|
|
181
200
|
|
|
182
|
-
|
|
201
|
+
领域条下方,热力图行展示各特性的使用深度:
|
|
183
202
|
|
|
184
203
|
`钩子 · 插件 · 技能 · MCP · 代理 · 计划 · 记忆 · 规则`
|
|
185
204
|
|
|
205
|
+
每个迷你条使用**深度评分**,对数曲线反映实际使用情况,不只看你是否试过某个功能。配置钩子能拿到 ~30 分;在数百个会话中触发钩子才能接近 100 分。详见[游戏化攻略](https://github.com/Z-M-Huang/cc-proficiency/wiki/Gamification-Guide-zh)。
|
|
206
|
+
|
|
186
207
|
### 桶聚合与上限
|
|
187
208
|
|
|
188
209
|
| 桶 | 最大分值 | 来源 |
|
|
189
210
|
|----|---------|------|
|
|
190
|
-
| **配置** | 25 分 | 配置规则(CLAUDE.md
|
|
191
|
-
| **行为** | 75 分 |
|
|
211
|
+
| **配置** | 25 分 | 配置规则(CLAUDE.md、钩子、插件,立即可用) |
|
|
212
|
+
| **行为** | 75 分 | 行为规则(会话模式,随时间增长) |
|
|
192
213
|
| **惩罚** | -15 分上限 | 反模式扣分 |
|
|
193
214
|
|
|
194
215
|
### 阶段感知权重
|
|
@@ -201,17 +222,17 @@ cc-proficiency 使用 **~53 条模式匹配规则**,而不是简单计数:
|
|
|
201
222
|
|
|
202
223
|
### 防作弊
|
|
203
224
|
|
|
204
|
-
-
|
|
225
|
+
- 规则**按会话上限触发**,重复相同工具 100 次无效
|
|
205
226
|
- **反模式规则**对不良习惯扣分
|
|
206
|
-
- 每条规则有 `maxPerSession
|
|
207
|
-
- 配置分数**上限 25
|
|
227
|
+
- 每条规则有 `maxPerSession`,调查链每会话上限 3 次
|
|
228
|
+
- 配置分数**上限 25**,仅安装插件无法达到满分
|
|
208
229
|
|
|
209
230
|
## 隐私
|
|
210
231
|
|
|
211
232
|
| 关注点 | 处理方式 |
|
|
212
233
|
|--------|---------|
|
|
213
234
|
| **数据位置** | 所有分析**在本地机器**上进行 |
|
|
214
|
-
| **存储内容** |
|
|
235
|
+
| **存储内容** | 仅存储聚合计数、比率和布尔标志(无文件路径、代码或提示词) |
|
|
215
236
|
| **Gist 可见性** | **默认私有**(秘密 URL,不在个人资料中列出) |
|
|
216
237
|
| **离线模式** | 无需 `gh` CLI 即可完全离线工作(仅本地模式) |
|
|
217
238
|
| **CI/CD** | 非交互式会话自动检测并排除 |
|
|
@@ -226,8 +247,13 @@ cc-proficiency 使用 **~53 条模式匹配规则**,而不是简单计数:
|
|
|
226
247
|
| `cc-proficiency badge [--output <文件>]` | 生成 SVG 徽章 |
|
|
227
248
|
| `cc-proficiency push` | 上传徽章到 Gist |
|
|
228
249
|
| `cc-proficiency explain` | 显示分数驱动因素和建议 |
|
|
250
|
+
| `cc-proficiency achievements` | 查看成就进度 |
|
|
251
|
+
| `cc-proficiency status` | 显示钩子活动、队列和配置 |
|
|
229
252
|
| `cc-proficiency config [键] [值]` | 查看/设置配置 |
|
|
230
253
|
| `cc-proficiency config locale zh-CN` | 切换到中文徽章 |
|
|
254
|
+
| `cc-proficiency share [--remove]` | 加入或退出社区排行榜 |
|
|
255
|
+
| `cc-proficiency leaderboard` | 查看社区排名 |
|
|
256
|
+
| `cc-proficiency update` | 更新到最新版本 |
|
|
231
257
|
| `cc-proficiency uninstall` | 移除钩子和清理数据 |
|
|
232
258
|
|
|
233
259
|
## 架构
|
|
@@ -254,7 +280,7 @@ cc-proficiency process
|
|
|
254
280
|
git clone https://github.com/Z-M-Huang/cc-proficiency.git
|
|
255
281
|
cd cc-proficiency
|
|
256
282
|
npm install
|
|
257
|
-
npm test #
|
|
283
|
+
npm test # 200 tests
|
|
258
284
|
npm run build # 编译到 dist/
|
|
259
285
|
npm run typecheck # tsc --noEmit
|
|
260
286
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"achievements.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/achievements.ts"],"names":[],"mappings":"AAMA,wBAAgB,eAAe,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"achievements.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/achievements.ts"],"names":[],"mappings":"AAMA,wBAAgB,eAAe,IAAI,IAAI,CAgDtC"}
|
|
@@ -30,6 +30,7 @@ function cmdAchievements() {
|
|
|
30
30
|
streak: { current: 0, longest: 0 },
|
|
31
31
|
features: result.features,
|
|
32
32
|
activeDates: [],
|
|
33
|
+
leaderboard: config.leaderboard ?? false,
|
|
33
34
|
};
|
|
34
35
|
const newLocal = (0, achievements_js_1.checkAchievements)(ctx, unlockedIds);
|
|
35
36
|
const allUnlocked = new Set([...unlockedIds, ...newLocal]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"achievements.js","sourceRoot":"","sources":["../../../src/cli/commands/achievements.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"achievements.js","sourceRoot":"","sources":["../../../src/cli/commands/achievements.ts"],"names":[],"mappings":";;AAMA,0CAgDC;AAtDD,+DAAmE;AACnE,wDAAyE;AACzE,iEAA+D;AAC/D,iEAA8E;AAC9E,0DAAqD;AAErD,SAAgB,eAAe;IAC7B,MAAM,KAAK,GAAG,IAAA,0BAAS,GAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAA,2BAAU,GAAE,CAAC;IAE5B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,IAAI,IAAA,+BAAiB,GAAE,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAA,0BAAY,EAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,kCAAgB,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;IAChC,MAAM,GAAG,GAAG;QACV,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU;QACtC,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,KAAK;KACzC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,mCAAiB,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;IAE3D,OAAO,CAAC,GAAG,CAAC,qBAAqB,WAAW,CAAC,IAAI,IAAI,8BAAY,CAAC,MAAM,KAAK,CAAC,CAAC;IAE/E,KAAK,MAAM,WAAW,IAAI,8BAAY,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,IAAA,2BAAW,EAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEjC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC9D"}
|
|
@@ -8,13 +8,24 @@ async function cmdAnalyze(args) {
|
|
|
8
8
|
const full = args.includes("--full");
|
|
9
9
|
console.log(full ? "Running full analysis..." : "Running incremental analysis...\n");
|
|
10
10
|
const { sessions, config } = await (0, sessions_js_1.gatherData)(full);
|
|
11
|
+
// Always persist current cwd, even if no sessions found
|
|
12
|
+
const store = (0, local_store_js_1.loadStore)();
|
|
13
|
+
const known = new Set(store.knownProjectCwds ?? []);
|
|
14
|
+
known.add(process.cwd());
|
|
15
|
+
store.knownProjectCwds = [...known];
|
|
16
|
+
(0, local_store_js_1.saveStore)(store);
|
|
11
17
|
if (sessions.length === 0) {
|
|
12
18
|
console.log("No sessions found. Use Claude Code first, then run analyze again.");
|
|
13
19
|
return;
|
|
14
20
|
}
|
|
15
21
|
const userConfig = (0, local_store_js_1.loadConfig)();
|
|
16
22
|
const result = (0, sessions_js_1.runAnalysis)(sessions, config, userConfig.username ?? "unknown");
|
|
17
|
-
|
|
23
|
+
// Build token log entries from parsed sessions
|
|
24
|
+
(0, local_store_js_1.upsertTokenLog)(store, sessions.map((s) => ({
|
|
25
|
+
sessionId: s.sessionId,
|
|
26
|
+
timestamp: s.endTime,
|
|
27
|
+
tokens: s.totalTokens,
|
|
28
|
+
})));
|
|
18
29
|
store.lastResult = result;
|
|
19
30
|
for (const s of sessions) {
|
|
20
31
|
if (!store.processedSessionIds.includes(s.sessionId)) {
|
|
@@ -22,6 +33,7 @@ async function cmdAnalyze(args) {
|
|
|
22
33
|
}
|
|
23
34
|
}
|
|
24
35
|
(0, local_store_js_1.saveStore)(store);
|
|
25
|
-
(0,
|
|
36
|
+
const tokenWindows = (0, local_store_js_1.computeTokenWindows)(store.tokenLog);
|
|
37
|
+
(0, formatting_js_1.printResult)(result, tokenWindows);
|
|
26
38
|
}
|
|
27
39
|
//# sourceMappingURL=analyze.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":";;AAIA,gCAsCC;AA1CD,+DAAmH;AACnH,yDAAkE;AAClE,0DAAqD;AAE9C,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;IAErF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,wBAAU,EAAC,IAAI,CAAC,CAAC;IAEpD,wDAAwD;IACxD,MAAM,KAAK,GAAG,IAAA,0BAAS,GAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzB,KAAK,CAAC,gBAAgB,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACpC,IAAA,0BAAS,EAAC,KAAK,CAAC,CAAC;IAEjB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACjF,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,2BAAU,GAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAA,yBAAW,EAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IAE/E,+CAA+C;IAC/C,IAAA,+BAAc,EAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS,EAAE,CAAC,CAAC,OAAO;QACpB,MAAM,EAAE,CAAC,CAAC,WAAW;KACtB,CAAC,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,IAAA,0BAAS,EAAC,KAAK,CAAC,CAAC;IAEjB,MAAM,YAAY,GAAG,IAAA,oCAAmB,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAA,2BAAW,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/badge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/badge.ts"],"names":[],"mappings":"AAMA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsB7C"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.cmdBadge = cmdBadge;
|
|
4
4
|
const node_fs_1 = require("node:fs");
|
|
5
5
|
const svg_js_1 = require("../../renderer/svg.js");
|
|
6
|
+
const animated_svg_js_1 = require("../../renderer/animated-svg.js");
|
|
6
7
|
const local_store_js_1 = require("../../store/local-store.js");
|
|
7
8
|
const locale_js_1 = require("../utils/locale.js");
|
|
8
9
|
function cmdBadge(args) {
|
|
@@ -11,14 +12,19 @@ function cmdBadge(args) {
|
|
|
11
12
|
console.log("No analysis data. Run 'cc-proficiency analyze' first.");
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
14
|
-
const
|
|
15
|
+
const animated = args.includes("--animated");
|
|
16
|
+
const locale = (0, locale_js_1.getConfigLocale)();
|
|
17
|
+
const tokenWindows = (0, local_store_js_1.computeTokenWindows)(store.tokenLog);
|
|
18
|
+
const svg = animated
|
|
19
|
+
? (0, animated_svg_js_1.renderAnimatedBadge)(store.lastResult, locale, tokenWindows)
|
|
20
|
+
: (0, svg_js_1.renderBadge)(store.lastResult, locale, tokenWindows);
|
|
15
21
|
const outputIdx = args.indexOf("--output");
|
|
16
22
|
if (outputIdx !== -1 && args[outputIdx + 1]) {
|
|
17
23
|
(0, node_fs_1.writeFileSync)(args[outputIdx + 1], svg, "utf-8");
|
|
18
24
|
console.log(`Badge written to ${args[outputIdx + 1]}`);
|
|
19
25
|
}
|
|
20
26
|
else {
|
|
21
|
-
const path = (0, local_store_js_1.saveBadge)(svg);
|
|
27
|
+
const path = animated ? (0, local_store_js_1.saveAnimatedBadge)(svg) : (0, local_store_js_1.saveBadge)(svg);
|
|
22
28
|
console.log(`Badge saved to ${path}`);
|
|
23
29
|
}
|
|
24
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.js","sourceRoot":"","sources":["../../../src/cli/commands/badge.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"badge.js","sourceRoot":"","sources":["../../../src/cli/commands/badge.ts"],"names":[],"mappings":";;AAMA,4BAsBC;AA5BD,qCAAwC;AACxC,kDAAoD;AACpD,oEAAqE;AACrE,+DAA0G;AAC1G,kDAAqD;AAErD,SAAgB,QAAQ,CAAC,IAAc;IACrC,MAAM,KAAK,GAAG,IAAA,0BAAS,GAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAA,2BAAe,GAAE,CAAC;IACjC,MAAM,YAAY,GAAG,IAAA,oCAAmB,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,QAAQ;QAClB,CAAC,CAAC,IAAA,qCAAmB,EAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC;QAC7D,CAAC,CAAC,IAAA,oBAAW,EAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAExD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5C,IAAA,uBAAa,EAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,kCAAiB,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,0BAAS,EAAC,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAiC9C"}
|
|
@@ -29,6 +29,10 @@ function cmdConfig(args) {
|
|
|
29
29
|
config.public = value === "true";
|
|
30
30
|
else if (key === "locale")
|
|
31
31
|
config.locale = value;
|
|
32
|
+
else if (key === "leaderboard")
|
|
33
|
+
config.leaderboard = value === "true";
|
|
34
|
+
else if (key === "publicGistId")
|
|
35
|
+
config.publicGistId = value;
|
|
32
36
|
else {
|
|
33
37
|
console.log(`Unknown key: ${key}`);
|
|
34
38
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":";;AAEA,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":";;AAEA,8BAiCC;AAnCD,+DAAoE;AAEpE,SAAgB,SAAS,CAAC,IAAc;IACtC,MAAM,MAAM,GAAG,IAAA,2BAAU,GAAE,CAAC;IAE5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAwB,CAAC;QAC3C,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;IAC1B,IAAI,GAAG,KAAK,UAAU;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;SAC3C,IAAI,GAAG,KAAK,QAAQ;QAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;SAC5C,IAAI,GAAG,KAAK,YAAY;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,KAAK,MAAM,CAAC;SAC/D,IAAI,GAAG,KAAK,QAAQ;QAAE,MAAM,CAAC,MAAM,GAAG,KAAK,KAAK,MAAM,CAAC;SACvD,IAAI,GAAG,KAAK,QAAQ;QAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;SAC5C,IAAI,GAAG,KAAK,aAAa;QAAE,MAAM,CAAC,WAAW,GAAG,KAAK,KAAK,MAAM,CAAC;SACjE,IAAI,GAAG,KAAK,cAAc;QAAE,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;SACxD,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,IAAA,2BAAU,EAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -38,7 +38,7 @@ function cmdExplain() {
|
|
|
38
38
|
if (f.mcpServers.length > 0)
|
|
39
39
|
console.log(` MCP: ${f.mcpServers.join(", ")}`);
|
|
40
40
|
console.log(` Tools: ${f.topTools.map((t) => `${t.name} (${t.count})`).join(", ")} +${f.uniqueToolCount - f.topTools.length} more`);
|
|
41
|
-
console.log(` Flags: ${f.usedPlanMode ? "\u2713 Plan" : "\u2717 Plan"} ${f.hasMemory ? "\u2713 Memory" : "\u2717 Memory"} ${f.hasRules ? "\u2713 Rules" : "\u2717 Rules"}`);
|
|
41
|
+
console.log(` Flags: ${f.usedPlanMode ? "\u2713 Plan" : "\u2717 Plan"} ${f.hasMemory ? "\u2713 Memory" : "\u2717 Memory"} ${f.hasRules ? "\u2713 Rules" : "\u2717 Rules"} ${f.hasAgents ? "\u2713 Agents" : "\u2717 Agents"} ${f.hasSkills ? "\u2713 Skills" : "\u2717 Skills"}`);
|
|
42
42
|
console.log(`\n ${result.sessionCount} sessions \u00B7 ${result.projectCount} projects\n`);
|
|
43
43
|
}
|
|
44
44
|
//# sourceMappingURL=explain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":";;AAEA,gCA6CC;AA/CD,+DAAuD;AAEvD,SAAgB,UAAU;IACxB,MAAM,KAAK,GAAG,IAAA,0BAAS,GAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;IAChC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,uCAAuC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,GAA2B;QACnC,YAAY,EAAE,4FAA4F;QAC1G,UAAU,EAAE,8FAA8F;QAC1G,SAAS,EAAE,uFAAuF;QAClG,cAAc,EAAE,gFAAgF;QAChG,cAAc,EAAE,iFAAiF;KAClG,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,kCAAkC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,OAAO,CAAC,CAAC;IACxI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAE1R,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,YAAY,oBAAoB,MAAM,CAAC,YAAY,aAAa,CAAC,CAAC;AAC9F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AASA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA6D7C"}
|
|
@@ -5,6 +5,7 @@ const svg_js_1 = require("../../renderer/svg.js");
|
|
|
5
5
|
const local_store_js_1 = require("../../store/local-store.js");
|
|
6
6
|
const queue_js_1 = require("../../store/queue.js");
|
|
7
7
|
const uploader_js_1 = require("../../gist/uploader.js");
|
|
8
|
+
const locales_js_1 = require("../../i18n/locales.js");
|
|
8
9
|
const hooks_js_1 = require("../services/hooks.js");
|
|
9
10
|
const locale_js_1 = require("../utils/locale.js");
|
|
10
11
|
const analyze_js_1 = require("./analyze.js");
|
|
@@ -24,6 +25,11 @@ async function cmdInit() {
|
|
|
24
25
|
console.log(" Badge will be saved locally to: " + (0, local_store_js_1.getBadgePath)());
|
|
25
26
|
console.log(" To enable auto-upload: gh auth login && cc-proficiency init\n");
|
|
26
27
|
}
|
|
28
|
+
// Auto-detect locale from environment (LANG/LC_ALL)
|
|
29
|
+
if (!config.locale) {
|
|
30
|
+
config.locale = (0, locales_js_1.detectLocale)();
|
|
31
|
+
console.log(` Locale: ${config.locale}`);
|
|
32
|
+
}
|
|
27
33
|
(0, hooks_js_1.injectHook)();
|
|
28
34
|
console.log(" \u2713 Hook injected into ~/.claude/settings.json");
|
|
29
35
|
console.log("\n Running initial analysis...");
|
|
@@ -32,7 +38,7 @@ async function cmdInit() {
|
|
|
32
38
|
const store = (0, local_store_js_1.loadStore)();
|
|
33
39
|
let badgeSvg = '<svg xmlns="http://www.w3.org/2000/svg"><text>No data</text></svg>';
|
|
34
40
|
if (store.lastResult) {
|
|
35
|
-
badgeSvg = (0, svg_js_1.renderBadge)(store.lastResult, (0, locale_js_1.getConfigLocale)());
|
|
41
|
+
badgeSvg = (0, svg_js_1.renderBadge)(store.lastResult, (0, locale_js_1.getConfigLocale)(), (0, local_store_js_1.computeTokenWindows)(store.tokenLog));
|
|
36
42
|
(0, local_store_js_1.saveBadge)(badgeSvg);
|
|
37
43
|
}
|
|
38
44
|
if (config.username && (0, uploader_js_1.isGhAuthenticated)() && !config.gistId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaderboard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/leaderboard.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgDnD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdLeaderboard = cmdLeaderboard;
|
|
4
|
+
const leaderboard_js_1 = require("../services/leaderboard.js");
|
|
5
|
+
const local_store_js_1 = require("../../store/local-store.js");
|
|
6
|
+
function cmdLeaderboard(args) {
|
|
7
|
+
// Parse --sort and --limit
|
|
8
|
+
let sortBy = "avg";
|
|
9
|
+
let limit = 20;
|
|
10
|
+
for (let i = 0; i < args.length; i++) {
|
|
11
|
+
const arg = args[i];
|
|
12
|
+
if (arg.startsWith("--sort=")) {
|
|
13
|
+
sortBy = arg.slice(7);
|
|
14
|
+
}
|
|
15
|
+
else if (arg.startsWith("--limit=")) {
|
|
16
|
+
limit = parseInt(arg.slice(8), 10) || 20;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const { entries, fromCache, skipped } = (0, leaderboard_js_1.fetchLeaderboard)(sortBy, limit);
|
|
20
|
+
if (entries.length === 0) {
|
|
21
|
+
console.log("Leaderboard unavailable. Try again later.");
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const config = (0, local_store_js_1.loadConfig)();
|
|
25
|
+
const myUsername = config.username;
|
|
26
|
+
console.log(`\n cc-proficiency Leaderboard (${entries.length} users)`);
|
|
27
|
+
console.log(" " + "\u2500".repeat(58));
|
|
28
|
+
console.log(" # User Avg CC Tool Agen Prmp Ctx");
|
|
29
|
+
console.log(" " + "\u2500".repeat(58));
|
|
30
|
+
for (let i = 0; i < entries.length; i++) {
|
|
31
|
+
const e = entries[i];
|
|
32
|
+
const rank = String(i + 1).padStart(3);
|
|
33
|
+
const user = `@${e.username}`.padEnd(16);
|
|
34
|
+
const avg = String(e.averageScore).padStart(3);
|
|
35
|
+
const scores = getDomainScores(e);
|
|
36
|
+
const marker = e.username === myUsername ? " \u25C4" : "";
|
|
37
|
+
console.log(` ${rank} ${user} ${avg} ${scores}${marker}`);
|
|
38
|
+
}
|
|
39
|
+
console.log(" " + "\u2500".repeat(58));
|
|
40
|
+
const cacheNote = fromCache ? " (cached)" : "";
|
|
41
|
+
const skipNote = skipped > 0 ? ` (${skipped} skipped)` : "";
|
|
42
|
+
console.log(` ${entries.length} users${skipNote} \u00B7 Updated ${getTimeAgo(fromCache)}${cacheNote}`);
|
|
43
|
+
console.log("\n --sort=<avg|cc-mastery|tool-mcp|agentic|prompt-craft|context-mgmt|hours|streak>");
|
|
44
|
+
console.log(" --limit=N (default 20)\n");
|
|
45
|
+
}
|
|
46
|
+
function getDomainScores(entry) {
|
|
47
|
+
const ids = ["cc-mastery", "tool-mcp", "agentic", "prompt-craft", "context-mgmt"];
|
|
48
|
+
return ids.map((id) => {
|
|
49
|
+
const d = entry.domains.find((x) => x.id === id);
|
|
50
|
+
return String(d?.score ?? 0).padStart(4);
|
|
51
|
+
}).join(" ");
|
|
52
|
+
}
|
|
53
|
+
function getTimeAgo(fromCache) {
|
|
54
|
+
if (!fromCache)
|
|
55
|
+
return "just now";
|
|
56
|
+
return "recently";
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=leaderboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaderboard.js","sourceRoot":"","sources":["../../../src/cli/commands/leaderboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/process.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/process.ts"],"names":[],"mappings":"AAcA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAwGhD"}
|