quackscore 0.1.0 → 0.1.2
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 +30 -10
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +10 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/leaderboard.d.ts +1 -1
- package/dist/commands/leaderboard.d.ts.map +1 -1
- package/dist/commands/leaderboard.js +12 -5
- package/dist/commands/leaderboard.js.map +1 -1
- package/dist/commands/mock-report.js +13 -13
- package/dist/commands/mock-report.js.map +1 -1
- package/dist/config/types.d.ts +1 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/llm/prompts.d.ts.map +1 -1
- package/dist/llm/prompts.js +7 -2
- package/dist/llm/prompts.js.map +1 -1
- package/dist/llm/providers.d.ts.map +1 -1
- package/dist/llm/providers.js +11 -1
- package/dist/llm/providers.js.map +1 -1
- package/dist/report/generate.d.ts.map +1 -1
- package/dist/report/generate.js +32 -9
- package/dist/report/generate.js.map +1 -1
- package/dist/report/index.d.ts +1 -0
- package/dist/report/index.d.ts.map +1 -1
- package/dist/report/index.js +1 -0
- package/dist/report/index.js.map +1 -1
- package/dist/report/leaderboard.d.ts +3 -0
- package/dist/report/leaderboard.d.ts.map +1 -0
- package/dist/report/leaderboard.js +486 -0
- package/dist/report/leaderboard.js.map +1 -0
- package/dist/shared/technologies.d.ts +2 -2
- package/dist/shared/technologies.d.ts.map +1 -1
- package/dist/shared/technologies.js +38 -32
- package/dist/shared/technologies.js.map +1 -1
- package/dist/shared/types.d.ts +6 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/leaderboard.d.ts +1 -0
- package/dist/storage/leaderboard.d.ts.map +1 -1
- package/dist/storage/leaderboard.js +93 -8
- package/dist/storage/leaderboard.js.map +1 -1
- package/dist/storage/paths.d.ts +1 -0
- package/dist/storage/paths.d.ts.map +1 -1
- package/dist/storage/paths.js +1 -0
- package/dist/storage/paths.js.map +1 -1
- package/dist/storage/user.d.ts.map +1 -1
- package/dist/storage/user.js +10 -2
- package/dist/storage/user.js.map +1 -1
- package/package.json +9 -2
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ That's it. Quack.
|
|
|
26
26
|
|
|
27
27
|
- Node.js 18+
|
|
28
28
|
- `QUACKSCORE_GH_TOKEN` — a GitHub personal access token
|
|
29
|
-
- `QUACKSCORE_LLM_API_KEY` — API key for your chosen LLM provider
|
|
29
|
+
- `QUACKSCORE_LLM_API_KEY` — API key for your chosen LLM provider (not required for Ollama or unauthenticated LiteLLM proxies)
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
@@ -46,16 +46,17 @@ npx quackscore --help
|
|
|
46
46
|
|
|
47
47
|
## Supported LLM providers
|
|
48
48
|
|
|
49
|
-
| Provider | Value |
|
|
50
|
-
|
|
51
|
-
| Anthropic | `anthropic` |
|
|
52
|
-
| OpenAI | `openai` |
|
|
53
|
-
| Google | `google` |
|
|
54
|
-
| OpenRouter | `openrouter` |
|
|
55
|
-
| MiniMax | `minimax` |
|
|
56
|
-
| Ollama (local) | `ollama` |
|
|
49
|
+
| Provider | Value | Notes |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| Anthropic | `anthropic` | |
|
|
52
|
+
| OpenAI | `openai` | |
|
|
53
|
+
| Google | `google` | |
|
|
54
|
+
| OpenRouter | `openrouter` | |
|
|
55
|
+
| MiniMax | `minimax` | |
|
|
56
|
+
| Ollama (local) | `ollama` | No API key needed |
|
|
57
|
+
| LiteLLM proxy | `litellm` | Routes to Azure OpenAI, Bedrock, and more |
|
|
57
58
|
|
|
58
|
-
All remote providers use `QUACKSCORE_LLM_API_KEY`. Ollama needs no key.
|
|
59
|
+
All remote providers use `QUACKSCORE_LLM_API_KEY`. Ollama needs no key. LiteLLM's key is optional (only needed if your proxy requires auth).
|
|
59
60
|
|
|
60
61
|
---
|
|
61
62
|
|
|
@@ -133,6 +134,25 @@ quackscore init --provider minimax --model MiniMax-M2.7
|
|
|
133
134
|
|
|
134
135
|
# Ollama (local)
|
|
135
136
|
quackscore init --provider ollama --model llama3.2
|
|
137
|
+
|
|
138
|
+
# LiteLLM proxy — Azure OpenAI
|
|
139
|
+
quackscore init --provider litellm --model azure/gpt-4o-mini --base-url http://localhost:4000
|
|
140
|
+
|
|
141
|
+
# LiteLLM proxy — AWS Bedrock
|
|
142
|
+
quackscore init --provider litellm --model bedrock/claude-3-5-sonnet --base-url http://localhost:4000
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
LiteLLM lets you run a single proxy that routes to Azure OpenAI, AWS Bedrock, Hugging Face, and [many other backends](https://docs.litellm.ai/docs/providers). Start it with:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
pip install litellm
|
|
149
|
+
litellm --model azure/gpt-4o-mini # or whichever backend you want
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Then set your key if the proxy requires auth:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
export QUACKSCORE_LLM_API_KEY=<your-litellm-master-key>
|
|
136
156
|
```
|
|
137
157
|
|
|
138
158
|
---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAC;AAK5B,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAC;AAK5B,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDjE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -10,6 +10,7 @@ const VALID_PROVIDERS = [
|
|
|
10
10
|
'openrouter',
|
|
11
11
|
'minimax',
|
|
12
12
|
'ollama',
|
|
13
|
+
'litellm',
|
|
13
14
|
];
|
|
14
15
|
export async function runInit(options) {
|
|
15
16
|
diagLog('Starting init command', {
|
|
@@ -43,13 +44,18 @@ export async function runInit(options) {
|
|
|
43
44
|
console.log(` Base URL : ${chalk.cyan(options.baseUrl)}`);
|
|
44
45
|
}
|
|
45
46
|
console.log('');
|
|
46
|
-
if (options.provider
|
|
47
|
+
if (options.provider === 'ollama') {
|
|
48
|
+
rpgInfo('Ollama requires no API key. Make sure Ollama is running locally.');
|
|
49
|
+
}
|
|
50
|
+
else if (options.provider === 'litellm') {
|
|
51
|
+
rpgInfo('LiteLLM proxy API key is optional. Set it if your proxy requires auth:');
|
|
52
|
+
console.log(` ${chalk.yellow(`export ${LLM_API_KEY_ENV}=<your-litellm-master-key>`)}`);
|
|
53
|
+
rpgInfo(`Point --base-url at your LiteLLM proxy (default: http://localhost:4000)`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
47
56
|
rpgInfo(`Set your API key before running:`);
|
|
48
57
|
console.log(` ${chalk.yellow(`export ${LLM_API_KEY_ENV}=<your-api-key>`)}`);
|
|
49
58
|
}
|
|
50
|
-
else if (options.provider === 'ollama') {
|
|
51
|
-
rpgInfo('Ollama requires no API key. Make sure Ollama is running locally.');
|
|
52
|
-
}
|
|
53
59
|
console.log('');
|
|
54
60
|
rpgInfo('Example models for this provider:');
|
|
55
61
|
for (const m of PROVIDER_EXAMPLE_MODELS[options.provider]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,GAExB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,eAAe,GAAe;IAClC,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,QAAQ;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function runLeaderboard(): void
|
|
1
|
+
export declare function runLeaderboard(): Promise<void>;
|
|
2
2
|
//# sourceMappingURL=leaderboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leaderboard.d.ts","sourceRoot":"","sources":["../../src/commands/leaderboard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"leaderboard.d.ts","sourceRoot":"","sources":["../../src/commands/leaderboard.ts"],"names":[],"mappings":"AAOA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCpD"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { loadLeaderboard } from '../storage/index.js';
|
|
2
|
-
import {
|
|
1
|
+
import { loadLeaderboard, saveLeaderboardReport } from '../storage/index.js';
|
|
2
|
+
import { generateLeaderboardHTML } from '../report/index.js';
|
|
3
|
+
import { rpgHeader, rpgInfo, rpgSuccess, rpgLog } from '../shared/ui.js';
|
|
3
4
|
import { diagLog } from '../shared/diagnostics.js';
|
|
4
5
|
import chalk from 'chalk';
|
|
5
|
-
|
|
6
|
+
import open from 'open';
|
|
7
|
+
export async function runLeaderboard() {
|
|
6
8
|
const entries = loadLeaderboard();
|
|
7
9
|
diagLog('Loaded leaderboard entries', {
|
|
8
10
|
entryCount: entries.length,
|
|
@@ -13,14 +15,16 @@ export function runLeaderboard() {
|
|
|
13
15
|
rpgInfo('No players yet. Run quackscore create {user} to get started!');
|
|
14
16
|
return;
|
|
15
17
|
}
|
|
18
|
+
const leaderboardPath = saveLeaderboardReport(generateLeaderboardHTML(entries));
|
|
16
19
|
const medals = ['🥇', '🥈', '🥉'];
|
|
17
20
|
console.log(chalk.dim('─'.repeat(60)));
|
|
18
|
-
console.log(chalk.bold(`${'#'.padEnd(4)} ${'Username'.padEnd(
|
|
21
|
+
console.log(chalk.bold(`${'#'.padEnd(4)} ${'Username'.padEnd(30)} ${'Points'.padStart(10)} ${'Level'.padStart(8)}`));
|
|
19
22
|
console.log(chalk.dim('─'.repeat(60)));
|
|
20
23
|
for (let i = 0; i < entries.length; i++) {
|
|
21
24
|
const e = entries[i];
|
|
22
25
|
const medal = medals[i] || `${i + 1}.`;
|
|
23
|
-
const
|
|
26
|
+
const label = e.username.slice(0, 30);
|
|
27
|
+
const row = `${(medal + ' ').padEnd(4)} ${label.padEnd(30)} ${String(e.totalPoints).padStart(10)} ${('Lv.' + e.level).padStart(8)}`;
|
|
24
28
|
if (i === 0)
|
|
25
29
|
console.log(chalk.yellow(row));
|
|
26
30
|
else if (i === 1)
|
|
@@ -32,5 +36,8 @@ export function runLeaderboard() {
|
|
|
32
36
|
}
|
|
33
37
|
console.log(chalk.dim('─'.repeat(60)));
|
|
34
38
|
console.log(chalk.dim(`\n${entries.length} player(s) on the board.`));
|
|
39
|
+
rpgSuccess(`Leaderboard saved: ${leaderboardPath}`);
|
|
40
|
+
rpgLog('Opening the hall of champions...');
|
|
41
|
+
await open(leaderboardPath);
|
|
35
42
|
}
|
|
36
43
|
//# sourceMappingURL=leaderboard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leaderboard.js","sourceRoot":"","sources":["../../src/commands/leaderboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"leaderboard.js","sourceRoot":"","sources":["../../src/commands/leaderboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
17
17
|
complexity: 8,
|
|
18
18
|
areas: ['web_frontend', 'sre'],
|
|
19
19
|
types: ['bugfix', 'refactor'],
|
|
20
|
-
technologies: ['typescript', 'react'
|
|
20
|
+
technologies: ['typescript', 'react'],
|
|
21
21
|
summary: 'Reduced hydration mismatches, delayed analytics bootstrapping, and improved test coverage around first-load rendering paths.',
|
|
22
22
|
},
|
|
23
23
|
{
|
|
@@ -29,7 +29,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
29
29
|
complexity: 7,
|
|
30
30
|
areas: ['devops'],
|
|
31
31
|
types: ['new_development', 'documentation'],
|
|
32
|
-
technologies: ['
|
|
32
|
+
technologies: ['cloud', 'bash'],
|
|
33
33
|
summary: 'Introduced shared GitHub Actions templates for build, test, release, and rollback flows used across multiple repositories.',
|
|
34
34
|
},
|
|
35
35
|
{
|
|
@@ -41,7 +41,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
41
41
|
complexity: 8,
|
|
42
42
|
areas: ['backend'],
|
|
43
43
|
types: ['new_development'],
|
|
44
|
-
technologies: ['typescript', 'nodejs'
|
|
44
|
+
technologies: ['typescript', 'nodejs'],
|
|
45
45
|
summary: 'Added idempotent webhook processing, duplicate-event guards, and stronger observability for failed payment notifications.',
|
|
46
46
|
},
|
|
47
47
|
{
|
|
@@ -65,7 +65,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
65
65
|
complexity: 6,
|
|
66
66
|
areas: ['qa', 'web_frontend'],
|
|
67
67
|
types: ['bugfix', 'refactor'],
|
|
68
|
-
technologies: ['
|
|
68
|
+
technologies: ['typescript'],
|
|
69
69
|
summary: 'Removed timing-sensitive test setup by introducing seeded fixtures and clearer synchronization for end-to-end scenarios.',
|
|
70
70
|
},
|
|
71
71
|
{
|
|
@@ -77,7 +77,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
77
77
|
complexity: 9,
|
|
78
78
|
areas: ['web_frontend', 'backend'],
|
|
79
79
|
types: ['new_development'],
|
|
80
|
-
technologies: ['typescript', 'react', '
|
|
80
|
+
technologies: ['typescript', 'react', 'nodejs'],
|
|
81
81
|
summary: 'Delivered a full feature-flag management flow including admin screens, contract updates, and audit-oriented access checks.',
|
|
82
82
|
},
|
|
83
83
|
{
|
|
@@ -89,7 +89,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
89
89
|
complexity: 4,
|
|
90
90
|
areas: ['sre', 'devops'],
|
|
91
91
|
types: ['documentation'],
|
|
92
|
-
technologies: [
|
|
92
|
+
technologies: [],
|
|
93
93
|
summary: 'Added a practical release-failure playbook with rollback criteria, ownership handoff notes, and communication templates.',
|
|
94
94
|
},
|
|
95
95
|
{
|
|
@@ -101,7 +101,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
101
101
|
complexity: 7,
|
|
102
102
|
areas: ['backend'],
|
|
103
103
|
types: ['refactor', 'bugfix'],
|
|
104
|
-
technologies: ['typescript', 'nodejs'
|
|
104
|
+
technologies: ['typescript', 'nodejs'],
|
|
105
105
|
summary: 'Reduced N+1 query pressure in customer overview resolvers and improved backend latency under peak dashboard traffic.',
|
|
106
106
|
},
|
|
107
107
|
{
|
|
@@ -125,7 +125,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
125
125
|
complexity: 7,
|
|
126
126
|
areas: ['devops', 'sre'],
|
|
127
127
|
types: ['refactor'],
|
|
128
|
-
technologies: ['terraform', 'cloud'
|
|
128
|
+
technologies: ['terraform', 'cloud'],
|
|
129
129
|
summary: 'Reworked infrastructure modules to support predictable preview environment provisioning and cleaner teardown semantics.',
|
|
130
130
|
},
|
|
131
131
|
{
|
|
@@ -137,7 +137,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
137
137
|
complexity: 6,
|
|
138
138
|
areas: ['backend', 'qa'],
|
|
139
139
|
types: ['new_development'],
|
|
140
|
-
technologies: ['typescript', 'nodejs'
|
|
140
|
+
technologies: ['typescript', 'nodejs'],
|
|
141
141
|
summary: 'Added API contract tests to catch schema drift earlier and keep the notification service aligned with consuming clients.',
|
|
142
142
|
},
|
|
143
143
|
{
|
|
@@ -173,7 +173,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
173
173
|
complexity: 4,
|
|
174
174
|
areas: ['devops', 'scripts'],
|
|
175
175
|
types: ['documentation', 'refactor'],
|
|
176
|
-
technologies: ['docker', 'bash'
|
|
176
|
+
technologies: ['docker', 'bash'],
|
|
177
177
|
summary: 'Smoothed local onboarding by simplifying dev container startup and documenting common environment troubleshooting steps.',
|
|
178
178
|
},
|
|
179
179
|
{
|
|
@@ -185,7 +185,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
185
185
|
complexity: 6,
|
|
186
186
|
areas: ['backend'],
|
|
187
187
|
types: ['new_development'],
|
|
188
|
-
technologies: ['typescript', 'nodejs'
|
|
188
|
+
technologies: ['typescript', 'nodejs'],
|
|
189
189
|
summary: 'Added pagination and cursor-based retrieval for customer events so larger accounts remain usable in the timeline view.',
|
|
190
190
|
},
|
|
191
191
|
{
|
|
@@ -209,7 +209,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
209
209
|
complexity: 8,
|
|
210
210
|
areas: ['sre', 'web_frontend'],
|
|
211
211
|
types: ['new_development'],
|
|
212
|
-
technologies: ['typescript', 'react'
|
|
212
|
+
technologies: ['typescript', 'react'],
|
|
213
213
|
summary: 'Added alert routing configuration to the ops console with policy editing, preview validation, and safer default fallbacks.',
|
|
214
214
|
},
|
|
215
215
|
{
|
|
@@ -233,7 +233,7 @@ const MOCK_PR_BLUEPRINTS = [
|
|
|
233
233
|
complexity: 9,
|
|
234
234
|
areas: ['devops', 'web_frontend'],
|
|
235
235
|
types: ['new_development'],
|
|
236
|
-
technologies: ['typescript', 'react', 'cloud'
|
|
236
|
+
technologies: ['typescript', 'react', 'cloud'],
|
|
237
237
|
summary: 'Delivered self-serve workspace provisioning with approval hooks, status tracking, and reusable deployment templates.',
|
|
238
238
|
},
|
|
239
239
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-report.js","sourceRoot":"","sources":["../../src/commands/mock-report.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiBzE,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvC,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAErD,MAAM,kBAAkB,GAAsB;IAC5C;QACE,KAAK,EAAE,mEAAmE;QAC1E,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,sBAAsB;QAChC,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,CAAC;QACb,KAAK,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC;QAC9B,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC7B,YAAY,EAAE,CAAC,YAAY,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"mock-report.js","sourceRoot":"","sources":["../../src/commands/mock-report.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type Provider = 'anthropic' | 'openai' | 'google' | 'openrouter' | 'minimax' | 'ollama';
|
|
1
|
+
export type Provider = 'anthropic' | 'openai' | 'google' | 'openrouter' | 'minimax' | 'ollama' | 'litellm';
|
|
2
2
|
/** Shared API key environment variable for all remote LLM providers */
|
|
3
3
|
export declare const LLM_API_KEY_ENV = "QUACKSCORE_LLM_API_KEY";
|
|
4
4
|
/** Default model for each provider (used when --model is omitted from init) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAChB,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAChB,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,QAAQ,GACR,SAAS,CAAC;AAEd,uEAAuE;AACvE,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAExD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAQtD,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAQ9D,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
package/dist/config/types.js
CHANGED
|
@@ -8,6 +8,7 @@ export const PROVIDER_DEFAULTS = {
|
|
|
8
8
|
openrouter: 'anthropic/claude-haiku-4',
|
|
9
9
|
minimax: 'MiniMax-M2.7',
|
|
10
10
|
ollama: 'llama3.2',
|
|
11
|
+
litellm: 'azure/gpt-4o-mini',
|
|
11
12
|
};
|
|
12
13
|
/** Well-known models shown as examples during init */
|
|
13
14
|
export const PROVIDER_EXAMPLE_MODELS = {
|
|
@@ -17,5 +18,6 @@ export const PROVIDER_EXAMPLE_MODELS = {
|
|
|
17
18
|
openrouter: ['anthropic/claude-opus-4', 'google/gemini-2.0-flash', 'meta-llama/llama-3.3-70b-instruct'],
|
|
18
19
|
minimax: ['MiniMax-M2.7', 'MiniMax-M2.7-highspeed', 'MiniMax-M2.5'],
|
|
19
20
|
ollama: ['llama3.2', 'mistral', 'codestral', 'deepseek-coder'],
|
|
21
|
+
litellm: ['azure/gpt-4o', 'azure/gpt-4o-mini', 'bedrock/claude-3-5-sonnet'],
|
|
20
22
|
};
|
|
21
23
|
//# sourceMappingURL=types.js.map
|
package/dist/config/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AASA,uEAAuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAExD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD,SAAS,EAAE,2BAA2B;IACtC,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,kBAAkB;IAC1B,UAAU,EAAE,0BAA0B;IACtC,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,mBAAmB;CAC7B,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAA+B;IACjE,SAAS,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,2BAA2B,CAAC;IAChF,MAAM,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC;IAC5C,MAAM,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;IAClE,UAAU,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,EAAE,mCAAmC,CAAC;IACvG,OAAO,EAAE,CAAC,cAAc,EAAE,wBAAwB,EAAE,cAAc,CAAC;IACnE,MAAM,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,CAAC;IAC9D,OAAO,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,2BAA2B,CAAC;CAC5E,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,11 +14,11 @@ function withDiagnosticsOption(command) {
|
|
|
14
14
|
program
|
|
15
15
|
.name('quackscore')
|
|
16
16
|
.description('🦆 Transform your GitHub activity into a Duck RPG player card')
|
|
17
|
-
.version('0.1.
|
|
17
|
+
.version('0.1.2');
|
|
18
18
|
withDiagnosticsOption(program
|
|
19
19
|
.command('init')
|
|
20
20
|
.description('Configure the LLM provider and model (run once before first use)')
|
|
21
|
-
.requiredOption('--provider <provider>', 'LLM provider: anthropic | openai | google | openrouter | minimax | ollama')
|
|
21
|
+
.requiredOption('--provider <provider>', 'LLM provider: anthropic | openai | google | openrouter | minimax | ollama | litellm')
|
|
22
22
|
.option('--model <model>', 'Model name (defaults to recommended for provider)')
|
|
23
23
|
.option('--base-url <url>', 'Custom base URL (for Ollama or OpenAI-compatible endpoints)')
|
|
24
24
|
.action(async (options) => {
|
|
@@ -79,12 +79,12 @@ withDiagnosticsOption(program
|
|
|
79
79
|
}));
|
|
80
80
|
withDiagnosticsOption(program
|
|
81
81
|
.command('leaderboard')
|
|
82
|
-
.description('
|
|
83
|
-
.action((options) => {
|
|
82
|
+
.description('Open a leaderboard built from all generated local reports')
|
|
83
|
+
.action(async (options) => {
|
|
84
84
|
configureDiagnostics(Boolean(options.diagnostics), {
|
|
85
85
|
command: 'leaderboard',
|
|
86
86
|
});
|
|
87
|
-
runLeaderboard();
|
|
87
|
+
await runLeaderboard();
|
|
88
88
|
}));
|
|
89
89
|
program.parseAsync(process.argv).catch((err) => {
|
|
90
90
|
console.error('💀', err.message);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,OAAO,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC,CAAC;AAC/E,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,qBAAqB,CAAC,OAAO;KAC1B,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kEAAkE,CAAC;KAC/E,cAAc,CACb,uBAAuB,EACvB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/llm/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5F,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/llm/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5F,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAyEhD;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAoC3G"}
|
package/dist/llm/prompts.js
CHANGED
|
@@ -46,11 +46,16 @@ Examples:
|
|
|
46
46
|
- rails -> ruby
|
|
47
47
|
- postgresql, sqlite, mariadb -> sql
|
|
48
48
|
- mongodb, redis, kafka, rabbitmq -> data
|
|
49
|
-
- graphql, grpc, openapi -> api
|
|
50
|
-
- github_actions, jenkins, circleci -> ci_cd
|
|
51
49
|
- feature, enhancement -> new_development
|
|
52
50
|
- fix, hotfix -> bugfix
|
|
53
51
|
|
|
52
|
+
Technology rules:
|
|
53
|
+
- Only return implementation stack items such as languages, runtimes, frameworks, databases, cloud, or infra platforms
|
|
54
|
+
- Do NOT return process/capability labels like api, ci_cd, testing, markdown, docs, or other
|
|
55
|
+
- GraphQL, gRPC, OpenAPI, and REST are interface styles, not technologies for this field
|
|
56
|
+
- GitHub Actions, Jenkins, and CircleCI describe delivery workflow, not product stack, so capture that in areas/types instead
|
|
57
|
+
- Jest, Vitest, Playwright, Cypress, and similar tools should push the area toward qa, not appear in technologies
|
|
58
|
+
|
|
54
59
|
For the "summary" field:
|
|
55
60
|
- Describe WHAT was actually done and WHY it matters in one concise sentence
|
|
56
61
|
- Name the subsystem, workflow, or problem that changed
|
package/dist/llm/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/llm/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAe,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO;;YAEG,EAAE,CAAC,KAAK;cACN,EAAE,CAAC,IAAI;aACR,EAAE,CAAC,SAAS;aACZ,EAAE,CAAC,SAAS;;EAEvB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,oBAAoB;;;;;;;;;;;;;iBAarD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;8BACX,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;wBAC3C,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/llm/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,0BAA0B,EAAe,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO;;YAEG,EAAE,CAAC,KAAK;cACN,EAAE,CAAC,IAAI;aACR,EAAE,CAAC,SAAS;aACZ,EAAE,CAAC,SAAS;;EAEvB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,oBAAoB;;;;;;;;;;;;;iBAarD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;8BACX,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;wBAC3C,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDAiDD,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,YAAsB,EAAE,UAAoB;IACjG,OAAO;;aAEI,QAAQ;;;EAGnB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oCAAoC;;;EAGnH,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wDAAwD;;;;;;;;;;;;;;;;;;;;;;;;;;EA0B7I,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/llm/providers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGvE;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/llm/providers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGvE;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,CA+D7D"}
|
package/dist/llm/providers.js
CHANGED
|
@@ -11,7 +11,7 @@ import { diagLog } from '../shared/diagnostics.js';
|
|
|
11
11
|
* (never stored in config). Ollama requires no API key.
|
|
12
12
|
*/
|
|
13
13
|
export function getModel(config) {
|
|
14
|
-
const apiKey = config.provider === 'ollama' ? undefined : getSharedApiKey();
|
|
14
|
+
const apiKey = (config.provider === 'ollama' || config.provider === 'litellm') ? undefined : getSharedApiKey();
|
|
15
15
|
diagLog('Resolving language model provider', {
|
|
16
16
|
provider: config.provider,
|
|
17
17
|
model: config.model,
|
|
@@ -50,6 +50,16 @@ export function getModel(config) {
|
|
|
50
50
|
const ol = createOllama({ baseURL: config.baseUrl ?? 'http://localhost:11434/api' });
|
|
51
51
|
return ol(config.model);
|
|
52
52
|
}
|
|
53
|
+
case 'litellm': {
|
|
54
|
+
const litellmKey = process.env[LLM_API_KEY_ENV];
|
|
55
|
+
const ll = createOpenAI({
|
|
56
|
+
baseURL: config.baseUrl ?? 'http://localhost:4000',
|
|
57
|
+
apiKey: litellmKey ?? 'no-key',
|
|
58
|
+
compatibility: 'compatible',
|
|
59
|
+
name: 'litellm',
|
|
60
|
+
});
|
|
61
|
+
return ll(config.model);
|
|
62
|
+
}
|
|
53
63
|
default: {
|
|
54
64
|
const p = config.provider;
|
|
55
65
|
throw new Error(`Unsupported provider: ${p}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/llm/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAoB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAmB;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/llm/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/report/generate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAU,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/report/generate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAU,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAwO3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAo0CnD"}
|
package/dist/report/generate.js
CHANGED
|
@@ -128,10 +128,35 @@ function renderPlayerName(name) {
|
|
|
128
128
|
function polarPoint(angle, radius, cx, cy) {
|
|
129
129
|
return { x: cx + Math.cos(angle) * radius, y: cy + Math.sin(angle) * radius };
|
|
130
130
|
}
|
|
131
|
-
function
|
|
131
|
+
function buildTechnologyTotals(prs, fallbackTechnologies) {
|
|
132
|
+
const totals = {};
|
|
133
|
+
for (const pr of prs) {
|
|
134
|
+
if (!pr.analysis || pr.analysis.skipped || pr.points == null)
|
|
135
|
+
continue;
|
|
136
|
+
for (const technology of normalizeTechnologies(pr.analysis.technologies)) {
|
|
137
|
+
totals[technology] = (totals[technology] || 0) + pr.points;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (Object.keys(totals).length === 0) {
|
|
141
|
+
for (const [technology, value] of Object.entries(fallbackTechnologies)) {
|
|
142
|
+
for (const normalized of normalizeTechnologies([technology])) {
|
|
143
|
+
totals[normalized] = (totals[normalized] || 0) + value;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return Object.entries(totals).sort(([, left], [, right]) => right - left);
|
|
148
|
+
}
|
|
149
|
+
function renderRadarChart(areaEntries) {
|
|
132
150
|
const map = new Map(areaEntries);
|
|
133
151
|
const keys = Array.from(new Set([...areaEntries.map(([key]) => key), ...RADAR_FALLBACK_KEYS])).slice(0, 6);
|
|
134
|
-
const
|
|
152
|
+
const strongestAreaValue = Math.max(1, ...areaEntries.map(([, value]) => value), 0);
|
|
153
|
+
const items = keys.map((key) => {
|
|
154
|
+
const value = map.get(key) ?? 0;
|
|
155
|
+
return {
|
|
156
|
+
label: formatLabel(key),
|
|
157
|
+
share: value === 0 ? 0 : Number(((value / strongestAreaValue) * 100).toFixed(1)),
|
|
158
|
+
};
|
|
159
|
+
});
|
|
135
160
|
const cx = 160;
|
|
136
161
|
const cy = 138;
|
|
137
162
|
const radius = 92;
|
|
@@ -160,7 +185,7 @@ function renderRadarChart(areaEntries, areaTotal) {
|
|
|
160
185
|
const markers = items
|
|
161
186
|
.map((item, index) => {
|
|
162
187
|
const point = polarPoint(-Math.PI / 2 + (index * Math.PI * 2) / items.length, radius * (item.share / 100), cx, cy);
|
|
163
|
-
return `<circle cx="${point.x.toFixed(2)}" cy="${point.y.toFixed(2)}" r="3.5" fill="#f59e0b" stroke="#171717" stroke-width="2"><title>${escapeHtml(item.label)}: ${item.share.toFixed(1)}
|
|
188
|
+
return `<circle cx="${point.x.toFixed(2)}" cy="${point.y.toFixed(2)}" r="3.5" fill="#f59e0b" stroke="#171717" stroke-width="2"><title>${escapeHtml(item.label)}: ${item.share.toFixed(1)}% of strongest area</title></circle>`;
|
|
164
189
|
})
|
|
165
190
|
.join('');
|
|
166
191
|
return `<svg viewBox="0 0 320 280" role="img" aria-label="Specialization radar chart">${grid}${axes}<polygon points="${polygon}" fill="rgba(245,158,11,0.35)" stroke="#f59e0b" stroke-width="2" />${markers}</svg>`;
|
|
@@ -209,10 +234,9 @@ export function generateHTML(data) {
|
|
|
209
234
|
characterPresent: Boolean(character),
|
|
210
235
|
});
|
|
211
236
|
const sortedPRs = [...prs].sort((left, right) => Date.parse(right.mergedAt) - Date.parse(left.mergedAt));
|
|
212
|
-
const topTechs =
|
|
237
|
+
const topTechs = buildTechnologyTotals(sortedPRs, technologies).slice(0, TECH_PALETTE.length);
|
|
213
238
|
const areaEntries = Object.entries(areas).sort(([, left], [, right]) => right - left);
|
|
214
239
|
const typeEntries = Object.entries(types).sort(([, left], [, right]) => right - left);
|
|
215
|
-
const areaTotal = areaEntries.reduce((sum, [, value]) => sum + value, 0);
|
|
216
240
|
const typeTotal = typeEntries.reduce((sum, [, value]) => sum + value, 0);
|
|
217
241
|
const weekRangeStart = weeklyContributions[0]?.week.slice(5) ?? 'N/A';
|
|
218
242
|
const weekRangeEnd = weeklyContributions[weeklyContributions.length - 1]?.week.slice(5) ?? 'N/A';
|
|
@@ -341,13 +365,12 @@ a { color: inherit; }
|
|
|
341
365
|
|
|
342
366
|
.header-cards {
|
|
343
367
|
display: flex;
|
|
344
|
-
flex-wrap:
|
|
368
|
+
flex-wrap: nowrap;
|
|
345
369
|
gap: 16px;
|
|
346
370
|
justify-content: flex-end;
|
|
347
371
|
}
|
|
348
372
|
|
|
349
373
|
.info-card {
|
|
350
|
-
min-width: 180px;
|
|
351
374
|
padding: 14px 18px;
|
|
352
375
|
border-radius: 12px;
|
|
353
376
|
border: 1px solid var(--border-soft);
|
|
@@ -1486,8 +1509,8 @@ ${styles}
|
|
|
1486
1509
|
</aside>
|
|
1487
1510
|
<div class="main">
|
|
1488
1511
|
<div class="top-panels">
|
|
1489
|
-
<section class="panel visual-panel"><div class="panel-head"><div class="panel-title-row"><span class="panel-icon radar">⚡</span><h2 class="panel-title">Specialization Radar</h2></div></div><div class="panel-chart">${renderRadarChart(areaEntries
|
|
1490
|
-
<section class="panel visual-panel"><span class="panel-ornament tech" aria-hidden="true"></></span><div class="panel-head"><div class="panel-title-row"><span class="panel-icon tech"></></span><h2 class="panel-title">Tech Stack</h2></div></div><div class="panel-chart">${renderTechDonut(topTechs)}</div></section>
|
|
1512
|
+
<section class="panel visual-panel"><div class="panel-head"><div class="panel-title-row"><span class="panel-icon radar">⚡</span><h2 class="panel-title">Specialization Radar</h2></div><div class="panel-note">Scaled to the strongest area</div></div><div class="panel-chart">${renderRadarChart(areaEntries)}</div></section>
|
|
1513
|
+
<section class="panel visual-panel"><span class="panel-ornament tech" aria-hidden="true"></></span><div class="panel-head"><div class="panel-title-row"><span class="panel-icon tech"></></span><h2 class="panel-title">Tech Stack</h2></div><div class="panel-note">Languages, runtimes, and platforms only</div></div><div class="panel-chart">${renderTechDonut(topTechs)}</div></section>
|
|
1491
1514
|
</div>
|
|
1492
1515
|
<section class="panel"><div class="panel-head compact"><div><h2 class="panel-title">Contribution Types</h2></div></div><div class="type-list">${renderContributionTypes(typeEntries, typeTotal)}</div></section>
|
|
1493
1516
|
<section class="panel"><div class="panel-head"><div><div class="mono">Activity</div><h2 class="panel-title">Weekly XP Gains</h2></div><div class="weekly-note">${activeWeeks} active weeks between ${escapeHtml(weekRangeStart)} and ${escapeHtml(weekRangeEnd)}</div></div><div class="weekly-chart">${weeklyChartSvg}</div></section>
|