cc-proficiency 0.2.10 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +79 -3
  2. package/dist/cli/commands/ai-grade.d.ts +2 -0
  3. package/dist/cli/commands/ai-grade.d.ts.map +1 -0
  4. package/dist/cli/commands/ai-grade.js +139 -0
  5. package/dist/cli/commands/ai-grade.js.map +1 -0
  6. package/dist/cli/commands/config.d.ts.map +1 -1
  7. package/dist/cli/commands/config.js +2 -0
  8. package/dist/cli/commands/config.js.map +1 -1
  9. package/dist/cli/commands/explain.d.ts.map +1 -1
  10. package/dist/cli/commands/explain.js +18 -0
  11. package/dist/cli/commands/explain.js.map +1 -1
  12. package/dist/cli/commands/process.d.ts.map +1 -1
  13. package/dist/cli/commands/process.js +30 -0
  14. package/dist/cli/commands/process.js.map +1 -1
  15. package/dist/cli/index.js +6 -0
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/services/publishing.d.ts +1 -0
  18. package/dist/cli/services/publishing.d.ts.map +1 -1
  19. package/dist/cli/services/publishing.js +43 -13
  20. package/dist/cli/services/publishing.js.map +1 -1
  21. package/dist/i18n/locales/en.d.ts.map +1 -1
  22. package/dist/i18n/locales/en.js +28 -1
  23. package/dist/i18n/locales/en.js.map +1 -1
  24. package/dist/i18n/locales/es.d.ts.map +1 -1
  25. package/dist/i18n/locales/es.js +28 -1
  26. package/dist/i18n/locales/es.js.map +1 -1
  27. package/dist/i18n/locales/fr.d.ts.map +1 -1
  28. package/dist/i18n/locales/fr.js +27 -0
  29. package/dist/i18n/locales/fr.js.map +1 -1
  30. package/dist/i18n/locales/ja.d.ts.map +1 -1
  31. package/dist/i18n/locales/ja.js +27 -0
  32. package/dist/i18n/locales/ja.js.map +1 -1
  33. package/dist/i18n/locales/ko.d.ts.map +1 -1
  34. package/dist/i18n/locales/ko.js +27 -0
  35. package/dist/i18n/locales/ko.js.map +1 -1
  36. package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
  37. package/dist/i18n/locales/zh-CN.js +27 -0
  38. package/dist/i18n/locales/zh-CN.js.map +1 -1
  39. package/dist/i18n/types.d.ts +21 -0
  40. package/dist/i18n/types.d.ts.map +1 -1
  41. package/dist/renderer/ai-animated-svg.d.ts +11 -0
  42. package/dist/renderer/ai-animated-svg.d.ts.map +1 -0
  43. package/dist/renderer/ai-animated-svg.js +206 -0
  44. package/dist/renderer/ai-animated-svg.js.map +1 -0
  45. package/dist/scoring/ai-evidence.d.ts +108 -0
  46. package/dist/scoring/ai-evidence.d.ts.map +1 -0
  47. package/dist/scoring/ai-evidence.js +305 -0
  48. package/dist/scoring/ai-evidence.js.map +1 -0
  49. package/dist/scoring/ai-grader.d.ts +64 -0
  50. package/dist/scoring/ai-grader.d.ts.map +1 -0
  51. package/dist/scoring/ai-grader.js +229 -0
  52. package/dist/scoring/ai-grader.js.map +1 -0
  53. package/dist/scoring/rubric-loader.d.ts +4 -0
  54. package/dist/scoring/rubric-loader.d.ts.map +1 -0
  55. package/dist/scoring/rubric-loader.js +102 -0
  56. package/dist/scoring/rubric-loader.js.map +1 -0
  57. package/dist/store/achievements.d.ts.map +1 -1
  58. package/dist/store/achievements.js +25 -0
  59. package/dist/store/achievements.js.map +1 -1
  60. package/dist/store/local-store.d.ts +2 -0
  61. package/dist/store/local-store.d.ts.map +1 -1
  62. package/dist/store/local-store.js +11 -0
  63. package/dist/store/local-store.js.map +1 -1
  64. package/dist/store/queue.d.ts +8 -0
  65. package/dist/store/queue.d.ts.map +1 -1
  66. package/dist/store/queue.js +44 -0
  67. package/dist/store/queue.js.map +1 -1
  68. package/dist/store/remote-store.d.ts.map +1 -1
  69. package/dist/store/remote-store.js +3 -0
  70. package/dist/store/remote-store.js.map +1 -1
  71. package/dist/types.d.ts +51 -0
  72. package/dist/types.d.ts.map +1 -1
  73. package/docs/ai-grading/README.md +39 -0
  74. package/docs/ai-grading/anti-gaming.md +11 -0
  75. package/docs/ai-grading/collaboration-quality.md +25 -0
  76. package/docs/ai-grading/goal-achievement.md +25 -0
  77. package/docs/ai-grading/growth-learning.md +25 -0
  78. package/docs/ai-grading/system-prompt-header.md +32 -0
  79. package/docs/ai-grading/verification-quality.md +25 -0
  80. package/docs/ai-grading/workflow-mastery.md +25 -0
  81. package/package.json +2 -1
package/README.md CHANGED
@@ -26,6 +26,7 @@
26
26
  <a href="#install">Install</a> &nbsp;·&nbsp;
27
27
  <a href="#usage">Usage</a> &nbsp;·&nbsp;
28
28
  <a href="#embed-in-your-readme">Embed</a> &nbsp;·&nbsp;
29
+ <a href="#ai-grading">AI Grading</a> &nbsp;·&nbsp;
29
30
  <a href="#how-scoring-works">Scoring</a> &nbsp;·&nbsp;
30
31
  <a href="#privacy">Privacy</a> &nbsp;·&nbsp;
31
32
  <a href="#localization">Localization</a> &nbsp;·&nbsp;
@@ -36,7 +37,7 @@
36
37
 
37
38
  ## What it does
38
39
 
39
- Analyzes your Claude Code session transcripts **locally** with a rule-based engine, scoring usage patterns across 5 domains:
40
+ Analyzes your Claude Code session transcripts **locally** with a rule-based engine, scoring usage patterns across 5 domains. Optionally adds [AI-powered grading](#ai-grading) across 5 outcome-focused domains using Claude's `/insights` data.
40
41
 
41
42
  | Domain | Weight | What it measures |
42
43
  |--------|--------|-----------------|
@@ -54,6 +55,12 @@ Also shows **8 feature mini-bars** (Hooks, Plugins, Skills, MCP, Agents, Plan, M
54
55
  </a>
55
56
  <br />
56
57
  <a href="https://gist.githubusercontent.com/Z-M-Huang/2717fa94690c459d5093650c87f49868/raw/cc-proficiency-animated.svg">Click to see animated version</a>
58
+ <br />
59
+ <a href="https://github.com/Z-M-Huang/cc-proficiency">
60
+ <img src="https://gist.githubusercontent.com/Z-M-Huang/2717fa94690c459d5093650c87f49868/raw/cc-proficiency-animated-ai-graded.svg" alt="CC Proficiency Badge — AI Graded" />
61
+ </a>
62
+ <br />
63
+ <a href="https://gist.githubusercontent.com/Z-M-Huang/2717fa94690c459d5093650c87f49868/raw/cc-proficiency-animated-ai-graded.svg">Click to see animated version</a>
57
64
  </p>
58
65
 
59
66
  > **Disclaimer:** This is an unofficial usage estimate, not an actual Anthropic certification score. Not affiliated with or endorsed by Anthropic.
@@ -218,12 +225,80 @@ The **[Gamification Guide](https://github.com/Z-M-Huang/cc-proficiency/wiki/Gami
218
225
 
219
226
  - First day through expert-level progression path
220
227
  - Tips for each of the 5 domains
221
- - How to unlock all 15 achievements
228
+ - How to unlock all 18 achievements (including 3 AI achievements)
222
229
  - What drives each feature mini-bar from 0 to 100
223
230
  - Streak system and leaderboard
224
231
 
225
232
  > **[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
233
 
234
+ ## AI Grading
235
+
236
+ In addition to the rule-based engine, cc-proficiency offers **AI-powered grading** that evaluates your usage patterns across 5 outcome-focused domains using Claude's `/insights` data (facets + session metadata).
237
+
238
+ ### AI Domains
239
+
240
+ | Domain | What it measures |
241
+ |--------|-----------------|
242
+ | **Goal Achievement** | Goal clarity, achievement rate, complexity progression, session purposefulness |
243
+ | **Collaboration Quality** | Friction recovery, direction clarity, feedback quality, outcome satisfaction |
244
+ | **Workflow Mastery** | Session strategy diversity, output-to-effort ratio, multi-session coordination |
245
+ | **Growth & Learning** | Friction trajectory, outcome trajectory, capability expansion, resilience |
246
+ | **Verification & Quality** | Outcome reliability, error handling, iterative refinement, course-correction |
247
+
248
+ Each domain is scored 0–100% with levels: **Novice** (<34%), **Proficient** (34–66%), **Expert** (67%+).
249
+
250
+ ### How it works
251
+
252
+ 1. Reads `/insights` facets and session-meta from `~/.claude/usage-data/`
253
+ 2. Precomputes stats locally (outcome rates, friction trends, tool distributions)
254
+ 3. Sends stats + rubric to `claude -p` (via stdin — no data leaves your machine except to Claude API)
255
+ 4. AI returns only per-criterion scores (1–5); totals, levels, and achievements are computed **locally**
256
+ 5. Renders an animated SVG badge with "AI Graded" indicator
257
+
258
+ The grading rubric is stored as editable markdown files in `docs/ai-grading/` — you can review and customize the criteria.
259
+
260
+ ### Usage
261
+
262
+ ```bash
263
+ # Enable AI grading
264
+ cc-proficiency config aiGrading true
265
+
266
+ # Run AI grading (requires Claude CLI ≥ 2.1.0)
267
+ cc-proficiency ai-grade # uses sonnet by default
268
+ cc-proficiency ai-grade --model opus # use a specific model
269
+ cc-proficiency ai-grade --full # force re-grade (ignore cache)
270
+ ```
271
+
272
+ Results are cached based on evidence hash — re-running without new data returns the cached result instantly.
273
+
274
+ ### Auto-trigger
275
+
276
+ When `aiGrading` is enabled, the `process` command automatically triggers AI grading weekly (after releasing the queue lock). No manual steps needed.
277
+
278
+ ### Phase system
279
+
280
+ | Phase | Facets | Behavior |
281
+ |-------|--------|----------|
282
+ | **Insufficient** | <10 | Refuses to grade — not enough data |
283
+ | **Early Assessment** | 10–30 | Grades with a warning note on the badge |
284
+ | **Full** | 30+ | Standard AI grading |
285
+
286
+ ### AI Achievements
287
+
288
+ Three achievements unlock based on your `/insights` data (deterministic, not AI judgment):
289
+
290
+ | Achievement | Requirement |
291
+ |------------|-------------|
292
+ | **Goal Crusher** | ≥90% achievement rate across 20+ sessions |
293
+ | **Recovery Artist** | Recover from friction with satisfied outcome 5+ times |
294
+ | **Prompt Evolution** | Measurable improvement in prompt quality over time |
295
+
296
+ ### Privacy
297
+
298
+ AI grading sends **precomputed statistics** to Claude, not raw transcripts. Project paths are sanitized to slugs. The `report.html` narrative is excluded to avoid AI grading AI-generated text.
299
+
300
+ ---
301
+
227
302
  ## How scoring works
228
303
 
229
304
  ### Rule-based engine
@@ -331,6 +406,7 @@ To add a new language, copy `src/i18n/locales/en.ts` to `src/i18n/locales/<code>
331
406
  | `cc-proficiency achievements` | View achievement progress |
332
407
  | `cc-proficiency status` | Show hook activity, queue, and config |
333
408
  | `cc-proficiency config [key] [value]` | View/set configuration |
409
+ | `cc-proficiency ai-grade [--model m] [--full]` | AI-powered proficiency grading |
334
410
  | `cc-proficiency share [--remove]` | Join or leave the community leaderboard |
335
411
  | `cc-proficiency leaderboard` | View community rankings |
336
412
  | `cc-proficiency update` | Update to the latest version |
@@ -377,7 +453,7 @@ Contributions welcome! Please open an issue first to discuss what you'd like to
377
453
  git clone https://github.com/Z-M-Huang/cc-proficiency.git
378
454
  cd cc-proficiency
379
455
  npm install
380
- npm test # 200 tests
456
+ npm test # 433 tests
381
457
  npm run build # compile to dist/
382
458
  npm run typecheck # tsc --noEmit
383
459
  npm run lint # eslint
@@ -0,0 +1,2 @@
1
+ export declare function cmdAIGrade(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=ai-grade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-grade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ai-grade.ts"],"names":[],"mappings":"AAmDA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsG9D"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cmdAIGrade = cmdAIGrade;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const node_os_1 = require("node:os");
7
+ const node_crypto_1 = require("node:crypto");
8
+ const local_store_js_1 = require("../../store/local-store.js");
9
+ const rubric_loader_js_1 = require("../../scoring/rubric-loader.js");
10
+ const ai_evidence_js_1 = require("../../scoring/ai-evidence.js");
11
+ const ai_grader_js_1 = require("../../scoring/ai-grader.js");
12
+ const ai_animated_svg_js_1 = require("../../renderer/ai-animated-svg.js");
13
+ const queue_js_1 = require("../../store/queue.js");
14
+ const config_parser_js_1 = require("../../parsers/config-parser.js");
15
+ const index_js_1 = require("../../i18n/index.js");
16
+ const FACETS_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".claude", "usage-data", "facets");
17
+ const META_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), ".claude", "usage-data", "session-meta");
18
+ function parseFlags(args) {
19
+ let model;
20
+ let full = false;
21
+ for (let i = 0; i < args.length; i++) {
22
+ if (args[i] === "--model" && i + 1 < args.length) {
23
+ model = args[++i];
24
+ }
25
+ else if (args[i] === "--full") {
26
+ full = true;
27
+ }
28
+ }
29
+ return { model, full };
30
+ }
31
+ function getLatestMtime(dir) {
32
+ try {
33
+ const stat = (0, node_fs_1.statSync)(dir);
34
+ return stat.mtime.toISOString();
35
+ }
36
+ catch {
37
+ return "";
38
+ }
39
+ }
40
+ function printResults(result) {
41
+ const strings = (0, index_js_1.t)().cli.aiGrade;
42
+ console.log(strings.gradingComplete);
43
+ for (const domain of result.domains) {
44
+ const label = (0, index_js_1.t)().aiBadge.aiDomainLabels[domain.id] ?? domain.id;
45
+ console.log(strings.domainResult(label, domain.total, domain.level));
46
+ }
47
+ console.log(`\n ${result.overall}`);
48
+ }
49
+ async function cmdAIGrade(args) {
50
+ const strings = (0, index_js_1.t)().cli.aiGrade;
51
+ const { model, full } = parseFlags(args);
52
+ // Check prerequisites: Claude CLI
53
+ if (!(0, ai_grader_js_1.checkClaudeVersion)()) {
54
+ console.log(strings.claudeNotFound);
55
+ return;
56
+ }
57
+ // Check prerequisites: session-meta data exists
58
+ if (!(0, node_fs_1.existsSync)(META_DIR)) {
59
+ console.log(strings.insufficientFacets(0, 10));
60
+ return;
61
+ }
62
+ // Acquire AI grade lock (separate from queue lock)
63
+ if (!(0, queue_js_1.acquireAIGradeLock)()) {
64
+ console.log("Another AI grading process is already running.");
65
+ return;
66
+ }
67
+ try {
68
+ console.log(strings.running);
69
+ // Load rubric and build prompt
70
+ const rubric = (0, rubric_loader_js_1.loadRubric)();
71
+ const rubricText = (0, rubric_loader_js_1.buildPromptFromRubric)(rubric);
72
+ const rubricVersion = (0, node_crypto_1.createHash)("sha256").update(rubricText).digest("hex").slice(0, 12);
73
+ // Assemble evidence
74
+ const evidence = (0, ai_evidence_js_1.assembleEvidence)(META_DIR, FACETS_DIR);
75
+ if (!evidence) {
76
+ console.log(strings.insufficientFacets(0, 10));
77
+ return;
78
+ }
79
+ // Check phase
80
+ const phase = (0, ai_evidence_js_1.getAIPhase)(evidence.metaCount);
81
+ if (phase === "insufficient") {
82
+ console.log(strings.insufficientFacets(evidence.metaCount, 10));
83
+ return;
84
+ }
85
+ // Precompute stats and build payload
86
+ const stats = (0, ai_evidence_js_1.precomputeStats)(evidence);
87
+ const configSignals = (0, config_parser_js_1.parseClaudeConfig)();
88
+ const store = (0, local_store_js_1.loadStore)();
89
+ const ruleScores = store.lastResult?.domains;
90
+ const features = store.lastResult?.features;
91
+ const payload = (0, ai_evidence_js_1.buildEvidencePayload)(stats, configSignals, ruleScores, features);
92
+ // Check cache
93
+ const metaMtime = getLatestMtime(META_DIR);
94
+ const ruleScoresHash = ruleScores
95
+ ? (0, node_crypto_1.createHash)("sha256").update(JSON.stringify(ruleScores.map(d => `${d.id}=${d.percentage}`))).digest("hex").slice(0, 12)
96
+ : "";
97
+ const cacheKey = (0, ai_grader_js_1.computeCacheKey)(metaMtime, rubricText, evidence.metaCount, JSON.stringify(configSignals), ruleScoresHash);
98
+ if (!full && store.lastAIResult?.cacheKey === cacheKey) {
99
+ console.log(strings.cacheHit);
100
+ printResults(store.lastAIResult);
101
+ return;
102
+ }
103
+ // Grade with Claude
104
+ const gradeResult = (0, ai_grader_js_1.gradeWithClaude)(rubricText, payload, model);
105
+ if (!gradeResult) {
106
+ console.log(strings.gradingFailed("Claude returned no result"));
107
+ return;
108
+ }
109
+ // Post-process (use actual model ID from claude response, not the alias)
110
+ let result;
111
+ try {
112
+ result = (0, ai_grader_js_1.postProcess)(gradeResult.response, rubric, gradeResult.actualModel, rubricVersion);
113
+ }
114
+ catch (err) {
115
+ console.log(strings.gradingFailed(String(err)));
116
+ return;
117
+ }
118
+ result.cacheKey = cacheKey;
119
+ // Render and save badge (uses proficiency result for shared header/footer)
120
+ if (!store.lastResult) {
121
+ console.log(strings.gradingFailed("No proficiency data yet. Run 'cc-proficiency process' first."));
122
+ return;
123
+ }
124
+ const tokenWindows = (0, local_store_js_1.computeTokenWindows)(store.tokenLog);
125
+ const svg = (0, ai_animated_svg_js_1.renderAIAnimatedBadge)(result, phase, store.lastResult, tokenWindows);
126
+ const badgePath = (0, local_store_js_1.saveAIBadge)(svg);
127
+ // Save to store (including AI evidence for achievements)
128
+ store.lastAIResult = result;
129
+ store.aiEvidence = (0, ai_evidence_js_1.computeAIEvidence)(evidence, stats);
130
+ (0, local_store_js_1.saveStore)(store);
131
+ // Print results
132
+ printResults(result);
133
+ console.log(strings.badgeSaved(badgePath));
134
+ }
135
+ finally {
136
+ (0, queue_js_1.releaseAIGradeLock)();
137
+ }
138
+ }
139
+ //# sourceMappingURL=ai-grade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-grade.js","sourceRoot":"","sources":["../../../src/cli/commands/ai-grade.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAqC9C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAsC9C"}
@@ -38,6 +38,8 @@ function cmdConfig(args) {
38
38
  config.leaderboard = value === "true";
39
39
  else if (key === "publicGistId")
40
40
  config.publicGistId = value;
41
+ else if (key === "aiGrading")
42
+ config.aiGrading = value === "true";
41
43
  else {
42
44
  console.log((0, index_js_1.t)().common.unknownKey(key));
43
45
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":";;AAGA,8BAqCC;AAxCD,+DAAoE;AACpE,kDAA0E;AAE1E,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,IAAA,YAAC,GAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;IAC1B,IAAI,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAA,wBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,IAAA,YAAC,GAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAM,EAAE,4BAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IACD,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,IAAA,YAAC,GAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAI,CAAC,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,IAAA,2BAAU,EAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,IAAA,YAAC,GAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAI,EAAE,KAAM,CAAC,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":";;AAGA,8BAsCC;AAzCD,+DAAoE;AACpE,kDAA0E;AAE1E,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,IAAA,YAAC,GAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;IAC1B,IAAI,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAA,wBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,IAAA,YAAC,GAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAM,EAAE,4BAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IACD,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,IAAI,GAAG,KAAK,WAAW;QAAE,MAAM,CAAC,SAAS,GAAG,KAAK,KAAK,MAAM,CAAC;SAC7D,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,IAAA,YAAC,GAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAI,CAAC,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,IAAA,2BAAU,EAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,IAAA,YAAC,GAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAI,EAAE,KAAM,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,IAAI,IAAI,CAgDjC"}
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explain.ts"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,IAAI,IAAI,CAoDjC"}
@@ -44,5 +44,23 @@ function cmdExplain() {
44
44
  console.log(` ${s.toolsLabel} ${f.topTools.map((tl) => `${tl.name} (${tl.count})`).join(", ")} +${f.uniqueToolCount - f.topTools.length} ${s.more}`);
45
45
  console.log(` ${s.flagsLabel} ${f.usedPlanMode ? `\u2713 ${fl.plan}` : `\u2717 ${fl.plan}`} ${f.hasMemory ? `\u2713 ${fl.memory}` : `\u2717 ${fl.memory}`} ${f.hasRules ? `\u2713 ${fl.rules}` : `\u2717 ${fl.rules}`} ${f.hasAgents ? `\u2713 ${fl.agents}` : `\u2717 ${fl.agents}`} ${f.hasSkills ? `\u2713 ${fl.skills}` : `\u2717 ${fl.skills}`}`);
46
46
  console.log(`\n${s.sessionsSummary(result.sessionCount, result.projectCount)}\n`);
47
+ if (store.lastAIResult) {
48
+ printAIAssessment(store.lastAIResult);
49
+ }
50
+ }
51
+ function printAIAssessment(ai) {
52
+ console.log(" AI Assessment:");
53
+ console.log("");
54
+ for (const d of ai.domains) {
55
+ const levelTag = d.level === "expert" ? "\u2605" : d.level === "proficient" ? "\u25cb" : "\u25b7";
56
+ console.log(` ${levelTag} ${d.id.padEnd(24)} ${d.total}% (${d.level})`);
57
+ if (d.summary) {
58
+ console.log(` ${d.summary}`);
59
+ }
60
+ }
61
+ if (ai.overall) {
62
+ console.log(`\n ${ai.overall}`);
63
+ }
64
+ console.log("");
47
65
  }
48
66
  //# 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":";;AAKA,gCAoDC;AAzDD,+DAAuD;AACvD,kDAAwC;AAIxC,SAAgB,UAAU;IACxB,MAAM,KAAK,GAAG,IAAA,0BAAS,GAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAA,YAAC,GAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;IAChC,MAAM,KAAK,GAAG,CAAC,CAA+D,EAAU,EAAE,CACxF,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,GAAG,IAAA,YAAC,GAAE,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1B,MAAM,YAAY,GAAG,IAAA,YAAC,GAAE,CAAC,KAAK,CAAC,YAAY,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,EAAc,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;QACxD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,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,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,EAAc,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;QACxD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,EAAc,CAAC,IAAI,IAAA,YAAC,GAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,EAAc,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnI,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAA,YAAC,GAAE,CAAC,KAAK,CAAC,aAAa,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,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;IAClG,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtG,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzJ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE/V,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAElF,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAmB;IAC5C,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClG,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAC3E,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/process.ts"],"names":[],"mappings":"AAwBA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA8HhD"}
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.cmdProcess = cmdProcess;
4
4
  const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const node_child_process_1 = require("node:child_process");
5
7
  const transcript_parser_js_1 = require("../../parsers/transcript-parser.js");
6
8
  const config_parser_js_1 = require("../../parsers/config-parser.js");
7
9
  const engine_js_1 = require("../../scoring/engine.js");
@@ -13,11 +15,19 @@ const sessions_js_1 = require("../services/sessions.js");
13
15
  const publishing_js_1 = require("../services/publishing.js");
14
16
  const config_sync_js_1 = require("../../store/config-sync.js");
15
17
  const index_js_1 = require("../../i18n/index.js");
18
+ const AUTO_GRADE_STALE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
19
+ function shouldAutoGrade(store) {
20
+ if (!store.lastAIResult)
21
+ return true;
22
+ const elapsed = Date.now() - new Date(store.lastAIResult.gradedAt).getTime();
23
+ return elapsed > AUTO_GRADE_STALE_MS;
24
+ }
16
25
  async function cmdProcess() {
17
26
  if (!(0, queue_js_1.acquireLock)()) {
18
27
  console.log((0, index_js_1.t)().cli.process.anotherRunning);
19
28
  return;
20
29
  }
30
+ let shouldTriggerAI = false;
21
31
  try {
22
32
  const queue = (0, queue_js_1.readQueue)();
23
33
  if (queue.length === 0) {
@@ -85,6 +95,10 @@ async function cmdProcess() {
85
95
  }
86
96
  }
87
97
  console.log((0, index_js_1.t)().cli.process.processed(newSessions.length, badgePath));
98
+ // Check if AI grading should auto-trigger (evaluated before lock release)
99
+ if (userConfig.aiGrading && shouldAutoGrade(store)) {
100
+ shouldTriggerAI = true;
101
+ }
88
102
  }
89
103
  (0, queue_js_1.writeQueue)(new Set(processed));
90
104
  (0, local_store_js_1.saveStore)(store);
@@ -92,5 +106,21 @@ async function cmdProcess() {
92
106
  finally {
93
107
  (0, queue_js_1.releaseLock)();
94
108
  }
109
+ // Spawn detached AI grading AFTER lock release to avoid deadlock
110
+ if (shouldTriggerAI) {
111
+ try {
112
+ const processorPath = (0, node_path_1.join)(__dirname, "..", "index.js");
113
+ if ((0, node_fs_1.existsSync)(processorPath)) {
114
+ const child = (0, node_child_process_1.spawn)("node", [processorPath, "ai-grade"], {
115
+ detached: true,
116
+ stdio: "ignore",
117
+ });
118
+ child.unref();
119
+ }
120
+ }
121
+ catch {
122
+ // AI grade trigger is best-effort — never crash process
123
+ }
124
+ }
95
125
  }
96
126
  //# sourceMappingURL=process.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/cli/commands/process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/cli/commands/process.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -36,6 +36,7 @@ Commands:
36
36
  explain ${c.explain}
37
37
  status ${c.status}
38
38
  config [key] [value] ${c.config}
39
+ ai-grade [--model m] AI-powered proficiency grading
39
40
  share [--remove] ${c.share}
40
41
  leaderboard ${c.leaderboard}
41
42
  update ${c.update}
@@ -79,6 +80,11 @@ async function main() {
79
80
  break;
80
81
  case "config":
81
82
  return (0, config_js_1.cmdConfig)(args.slice(1));
83
+ case "ai-grade": {
84
+ const { cmdAIGrade } = await import("./commands/ai-grade.js");
85
+ await cmdAIGrade(args.slice(1));
86
+ break;
87
+ }
82
88
  case "share":
83
89
  return (0, share_js_1.cmdShare)(args);
84
90
  case "leaderboard":
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export interface MergeAndPushResult {
9
9
  projects: number;
10
10
  };
11
11
  }
12
+ export declare function buildRecentSessionsForRemote(store: LocalStore, result: ProficiencyResult): RemoteStore["recentSessions"];
12
13
  /**
13
14
  * Read remote store, merge local data, check achievements, re-render badge,
14
15
  * and push SVG + JSON atomically. Used by both cmdPush and cmdProcess.
@@ -1 +1 @@
1
- {"version":3,"file":"publishing.d.ts","sourceRoot":"","sources":["../../../src/cli/services/publishing.ts"],"names":[],"mappings":"AAUA,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,EACxB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,GACjC,kBAAkB,CA4FpB;AAED,wBAAgB,UAAU,IAAI,IAAI,CA2CjC"}
1
+ {"version":3,"file":"publishing.d.ts","sourceRoot":"","sources":["../../../src/cli/services/publishing.ts"],"names":[],"mappings":"AAWA,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;AAMD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,iBAAiB,GACxB,WAAW,CAAC,gBAAgB,CAAC,CAsB/B;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,EACxB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,GACjC,kBAAkB,CA4FpB;AAED,wBAAgB,UAAU,IAAI,IAAI,CA2CjC"}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildRecentSessionsForRemote = buildRecentSessionsForRemote;
3
4
  exports.mergeAndPush = mergeAndPush;
4
5
  exports.pushToGist = pushToGist;
6
+ const node_fs_1 = require("node:fs");
5
7
  const svg_js_1 = require("../../renderer/svg.js");
6
8
  const animated_svg_js_1 = require("../../renderer/animated-svg.js");
7
9
  const local_store_js_1 = require("../../store/local-store.js");
@@ -12,6 +14,32 @@ const public_profile_js_1 = require("../../store/public-profile.js");
12
14
  const config_parser_js_1 = require("../../parsers/config-parser.js");
13
15
  const config_sync_js_1 = require("../../store/config-sync.js");
14
16
  const index_js_1 = require("../../i18n/index.js");
17
+ function isValidTimestamp(timestamp) {
18
+ return typeof timestamp === "string" && !Number.isNaN(Date.parse(timestamp));
19
+ }
20
+ function buildRecentSessionsForRemote(store, result) {
21
+ const avgHours = result.features.totalHours / Math.max(store.processedSessionIds.length, 1);
22
+ const snapshotMap = new Map(store.snapshots.map((s) => [s.sessionId, s]));
23
+ const tokenMap = new Map((store.tokenLog ?? []).map((t) => [t.sessionId, t]));
24
+ return store.processedSessionIds
25
+ .map((id) => {
26
+ const snap = snapshotMap.get(id);
27
+ const tokenEntry = tokenMap.get(id);
28
+ const endTimestamp = isValidTimestamp(tokenEntry?.timestamp) ? tokenEntry.timestamp : undefined;
29
+ const snapshotTimestamp = isValidTimestamp(snap?.timestamp) ? snap.timestamp : undefined;
30
+ const timestamp = endTimestamp ?? snapshotTimestamp;
31
+ if (!timestamp)
32
+ return null;
33
+ return {
34
+ id,
35
+ date: (0, remote_store_js_1.getUTCDate)(timestamp),
36
+ hours: avgHours,
37
+ tokens: tokenEntry?.tokens,
38
+ endTimestamp,
39
+ };
40
+ })
41
+ .filter((s) => s !== null);
42
+ }
15
43
  /**
16
44
  * Read remote store, merge local data, check achievements, re-render badge,
17
45
  * and push SVG + JSON atomically. Used by both cmdPush and cmdProcess.
@@ -21,19 +49,7 @@ function mergeAndPush(store, result, gistId, username, verbose = false, configSn
21
49
  let remote = remoteJson ? (0, remote_store_js_1.parseRemoteStore)(remoteJson) : null;
22
50
  if (!remote)
23
51
  remote = (0, remote_store_js_1.emptyRemoteStore)(username);
24
- const avgHours = result.features.totalHours / Math.max(store.processedSessionIds.length, 1);
25
- const tokenMap = new Map((store.tokenLog ?? []).map((t) => [t.sessionId, t]));
26
- const localSessions = store.processedSessionIds.map((id) => {
27
- const snap = store.snapshots.find((s) => s.sessionId === id);
28
- const tokenEntry = tokenMap.get(id);
29
- return {
30
- id,
31
- date: snap ? (0, remote_store_js_1.getUTCDate)(snap.timestamp) : new Date().toISOString().slice(0, 10),
32
- hours: avgHours,
33
- tokens: tokenEntry?.tokens,
34
- endTimestamp: tokenEntry?.timestamp,
35
- };
36
- });
52
+ const localSessions = buildRecentSessionsForRemote(store, result);
37
53
  const merged = (0, remote_store_js_1.mergeIntoRemote)(remote, localSessions, result);
38
54
  const totals = (0, remote_store_js_1.getTotalStats)(merged);
39
55
  const cfg = (0, local_store_js_1.loadConfig)();
@@ -46,6 +62,7 @@ function mergeAndPush(store, result, gistId, username, verbose = false, configSn
46
62
  features: result.features,
47
63
  activeDates: merged.streak.activeDates,
48
64
  leaderboard: cfg.leaderboard ?? false,
65
+ aiEvidence: store.aiEvidence,
49
66
  };
50
67
  const newAchievements = (0, achievements_js_1.checkAchievements)(ctx, merged.achievements.map((a) => a.id));
51
68
  for (const id of newAchievements) {
@@ -77,6 +94,15 @@ function mergeAndPush(store, result, gistId, username, verbose = false, configSn
77
94
  if (configSnapshotJson) {
78
95
  files["config-snapshots.json"] = configSnapshotJson;
79
96
  }
97
+ const aiBadgePath = (0, local_store_js_1.getAIBadgePath)();
98
+ if ((0, node_fs_1.existsSync)(aiBadgePath)) {
99
+ try {
100
+ files["cc-proficiency-animated-ai-graded.svg"] = (0, node_fs_1.readFileSync)(aiBadgePath, "utf-8");
101
+ }
102
+ catch {
103
+ // skip if unreadable
104
+ }
105
+ }
80
106
  const pushResult = (0, uploader_js_1.pushGistFiles)(gistId, files);
81
107
  if (!pushResult.success) {
82
108
  return { success: false, error: pushResult.error };
@@ -87,6 +113,10 @@ function mergeAndPush(store, result, gistId, username, verbose = false, configSn
87
113
  console.log((0, index_js_1.t)().services.publishing.pushedToGist);
88
114
  console.log((0, index_js_1.t)().services.publishing.staticUrl(rawUrl));
89
115
  console.log((0, index_js_1.t)().services.publishing.animatedUrl(animatedUrl));
116
+ if ((0, node_fs_1.existsSync)((0, local_store_js_1.getAIBadgePath)())) {
117
+ const aiGradedUrl = (0, uploader_js_1.getGistRawUrl)(username, gistId, "cc-proficiency-animated-ai-graded.svg");
118
+ console.log((0, index_js_1.t)().services.publishing.aiGradedUrl(aiGradedUrl));
119
+ }
90
120
  console.log((0, index_js_1.t)().services.publishing.pushSummary(totals.sessions, totals.hours.toFixed(1), merged.achievements.length, merged.streak.current));
91
121
  }
92
122
  // Auto-update public profile if leaderboard is enabled