quackscore 0.1.0
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/LICENSE +21 -0
- package/README.md +158 -0
- package/dist/commands/create.d.ts +6 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +165 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +62 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/leaderboard.d.ts +2 -0
- package/dist/commands/leaderboard.d.ts.map +1 -0
- package/dist/commands/leaderboard.js +36 -0
- package/dist/commands/leaderboard.js.map +1 -0
- package/dist/commands/mock-report.d.ts +4 -0
- package/dist/commands/mock-report.d.ts.map +1 -0
- package/dist/commands/mock-report.js +311 -0
- package/dist/commands/mock-report.js.map +1 -0
- package/dist/commands/show.d.ts +2 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +17 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +175 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +7 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +29 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/types.d.ts +14 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +21 -0
- package/dist/config/types.js.map +1 -0
- package/dist/github/client.d.ts +8 -0
- package/dist/github/client.d.ts.map +1 -0
- package/dist/github/client.js +241 -0
- package/dist/github/client.js.map +1 -0
- package/dist/github/index.d.ts +3 -0
- package/dist/github/index.d.ts.map +1 -0
- package/dist/github/index.js +2 -0
- package/dist/github/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/analyzer.d.ts +7 -0
- package/dist/llm/analyzer.d.ts.map +1 -0
- package/dist/llm/analyzer.js +249 -0
- package/dist/llm/analyzer.js.map +1 -0
- package/dist/llm/character.d.ts +16 -0
- package/dist/llm/character.d.ts.map +1 -0
- package/dist/llm/character.js +245 -0
- package/dist/llm/character.js.map +1 -0
- package/dist/llm/client.d.ts +5 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +98 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/index.d.ts +4 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +4 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/prompts.d.ts +4 -0
- package/dist/llm/prompts.d.ts.map +1 -0
- package/dist/llm/prompts.js +109 -0
- package/dist/llm/prompts.js.map +1 -0
- package/dist/llm/providers.d.ts +10 -0
- package/dist/llm/providers.d.ts.map +1 -0
- package/dist/llm/providers.js +70 -0
- package/dist/llm/providers.js.map +1 -0
- package/dist/report/generate.d.ts +3 -0
- package/dist/report/generate.d.ts.map +1 -0
- package/dist/report/generate.js +1540 -0
- package/dist/report/generate.js.map +1 -0
- package/dist/report/index.d.ts +2 -0
- package/dist/report/index.d.ts.map +1 -0
- package/dist/report/index.js +2 -0
- package/dist/report/index.js.map +1 -0
- package/dist/scoring/index.d.ts +3 -0
- package/dist/scoring/index.d.ts.map +1 -0
- package/dist/scoring/index.js +3 -0
- package/dist/scoring/index.js.map +1 -0
- package/dist/scoring/points.d.ts +8 -0
- package/dist/scoring/points.d.ts.map +1 -0
- package/dist/scoring/points.js +28 -0
- package/dist/scoring/points.js.map +1 -0
- package/dist/scoring/stats.d.ts +3 -0
- package/dist/scoring/stats.d.ts.map +1 -0
- package/dist/scoring/stats.js +80 -0
- package/dist/scoring/stats.js.map +1 -0
- package/dist/shared/diagnostics.d.ts +8 -0
- package/dist/shared/diagnostics.d.ts.map +1 -0
- package/dist/shared/diagnostics.js +99 -0
- package/dist/shared/diagnostics.js.map +1 -0
- package/dist/shared/pr-summary.d.ts +5 -0
- package/dist/shared/pr-summary.d.ts.map +1 -0
- package/dist/shared/pr-summary.js +272 -0
- package/dist/shared/pr-summary.js.map +1 -0
- package/dist/shared/profile-summary.d.ts +5 -0
- package/dist/shared/profile-summary.d.ts.map +1 -0
- package/dist/shared/profile-summary.js +262 -0
- package/dist/shared/profile-summary.js.map +1 -0
- package/dist/shared/technologies.d.ts +5 -0
- package/dist/shared/technologies.d.ts.map +1 -0
- package/dist/shared/technologies.js +211 -0
- package/dist/shared/technologies.js.map +1 -0
- package/dist/shared/types.d.ts +61 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +14 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared/ui.d.ts +7 -0
- package/dist/shared/ui.d.ts.map +1 -0
- package/dist/shared/ui.js +24 -0
- package/dist/shared/ui.js.map +1 -0
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/leaderboard.d.ts +4 -0
- package/dist/storage/leaderboard.d.ts.map +1 -0
- package/dist/storage/leaderboard.js +37 -0
- package/dist/storage/leaderboard.js.map +1 -0
- package/dist/storage/paths.d.ts +6 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +19 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/storage/report.d.ts +3 -0
- package/dist/storage/report.d.ts.map +1 -0
- package/dist/storage/report.js +21 -0
- package/dist/storage/report.js.map +1 -0
- package/dist/storage/user.d.ts +4 -0
- package/dist/storage/user.d.ts.map +1 -0
- package/dist/storage/user.js +44 -0
- package/dist/storage/user.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/llm/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvG,OAAO,kBAAkB,IAAI,yCAAyC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAsB,EAAE,MAAc;IAClE,OAAO,CAAC,aAAa,EAAE;QACrB,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,SAAS,EAAE,OAAO,KAAK;KACxB,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;YAClC,KAAK;YACL,MAAM;YACN,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,OAAO,CAAC,uBAAuB,EAAE;YAC/B,cAAc,EAAE,IAAI,CAAC,MAAM;YAC3B,mBAAmB;YACnB,eAAe,EAAE,0BAA0B,CAAC,IAAI,CAAC;SAClD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,SAAS,CAAC,iBAAiB,EAAE,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,CAAC,8CAA8C,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,SAAS;QAE9B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,SAAS;QAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtB,OAAO,CAAC,+CAA+C,EAAE;gBACvD,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,SAAS,CAAC,MAAM;aAC7B,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,0CAA0C,EAAE,EAAE,WAAW,EAAE,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvG,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,UAAkB,EAAE,WAAsB;IAC3E,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,GAAG,KAAK,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,GAAG,IAAI,CAAC;gBACf,SAAS;YACX,CAAC;YAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,KAAK,CAAC,GAAG,EAAE,CAAC;YACZ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +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,CAoEhD;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAoC3G"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { AREA_TAXONOMY, CONTRIBUTION_TYPE_TAXONOMY } from '../shared/types.js';
|
|
2
|
+
import { TECHNOLOGY_TAXONOMY } from '../shared/technologies.js';
|
|
3
|
+
export function buildPRPrompt(pr) {
|
|
4
|
+
return `You are a technical code reviewer analyzing a Pull Request for an RPG-style developer scoring system.
|
|
5
|
+
|
|
6
|
+
PR Title: ${pr.title}
|
|
7
|
+
Repository: ${pr.repo}
|
|
8
|
+
Additions: ${pr.additions} lines
|
|
9
|
+
Deletions: ${pr.deletions} lines
|
|
10
|
+
|
|
11
|
+
${pr.diff ? `Diff:\n\`\`\`\n${pr.diff}\n\`\`\`` : '(diff unavailable)'}
|
|
12
|
+
|
|
13
|
+
Analyze this PR and return a JSON object with EXACTLY this structure:
|
|
14
|
+
{
|
|
15
|
+
"skipped": boolean, // true if this is autogenerated code, migrations, lock files, compiled output, vendor/dist, or repository governance/legal/community template work
|
|
16
|
+
"skipReason": "reason if skipped",
|
|
17
|
+
"complexity": number, // 1-10: 1=trivial (typos/formatting), 5=medium feature/refactor, 10=major architecture
|
|
18
|
+
"areas": string[], // use ONLY exact values from the allowed list below
|
|
19
|
+
"types": string[], // use ONLY exact values from the allowed list below
|
|
20
|
+
"technologies": string[], // use ONLY broad categories from the allowed list below
|
|
21
|
+
"summary": "concise description max 200 chars"
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
Allowed areas: ${AREA_TAXONOMY.join(', ')}
|
|
25
|
+
Allowed contribution types: ${CONTRIBUTION_TYPE_TAXONOMY.join(', ')}
|
|
26
|
+
Allowed technologies: ${TECHNOLOGY_TAXONOMY.join(', ')}
|
|
27
|
+
|
|
28
|
+
Skip these kinds of PRs:
|
|
29
|
+
- LICENSE, CODE_OF_CONDUCT, CONTRIBUTING, SECURITY, CODEOWNERS
|
|
30
|
+
- issue/PR templates and repository governance/community files
|
|
31
|
+
- autogenerated code, migrations, lock files, vendor/dist, compiled output
|
|
32
|
+
|
|
33
|
+
Area mapping rules:
|
|
34
|
+
- ci_cd, pipelines, deployment, infra -> devops
|
|
35
|
+
- frontend, ui, accessibility -> web_frontend
|
|
36
|
+
- api, server -> backend
|
|
37
|
+
- testing -> qa
|
|
38
|
+
|
|
39
|
+
Keep technologies broad, not library-level.
|
|
40
|
+
Examples:
|
|
41
|
+
- redux, nextjs -> react
|
|
42
|
+
- express, nest_js, bun, deno -> nodejs
|
|
43
|
+
- django, flask, fastapi -> python
|
|
44
|
+
- spring_boot -> java
|
|
45
|
+
- laravel -> php
|
|
46
|
+
- rails -> ruby
|
|
47
|
+
- postgresql, sqlite, mariadb -> sql
|
|
48
|
+
- mongodb, redis, kafka, rabbitmq -> data
|
|
49
|
+
- graphql, grpc, openapi -> api
|
|
50
|
+
- github_actions, jenkins, circleci -> ci_cd
|
|
51
|
+
- feature, enhancement -> new_development
|
|
52
|
+
- fix, hotfix -> bugfix
|
|
53
|
+
|
|
54
|
+
For the "summary" field:
|
|
55
|
+
- Describe WHAT was actually done and WHY it matters in one concise sentence
|
|
56
|
+
- Name the subsystem, workflow, or problem that changed
|
|
57
|
+
- Focus on concrete work and practical impact, NOT on technologies, areas, or taxonomy labels
|
|
58
|
+
- If the title is already specific, keep that specificity and add the consequence or benefit
|
|
59
|
+
- Good examples:
|
|
60
|
+
- "Refactored the config loader so new modules can inject settings without touching global state"
|
|
61
|
+
- "Fixed the auth refresh race that could log users out during parallel API calls"
|
|
62
|
+
- "Added audit-log export jobs so large tenants can retrieve history without timing out"
|
|
63
|
+
- Bad examples:
|
|
64
|
+
- "fixes correctness or runtime issues with emphasis on ai, backend, sre using typescript, nodejs, api"
|
|
65
|
+
- "Adds or extends core capability, improves documentation and packaging"
|
|
66
|
+
- "Improves the implementation across multiple areas"
|
|
67
|
+
- Do not list technologies or categories unless they are the literal subject of the change
|
|
68
|
+
- Max 200 chars
|
|
69
|
+
|
|
70
|
+
Return ONLY valid JSON, no markdown, no explanation.`;
|
|
71
|
+
}
|
|
72
|
+
export function buildCharacterPrompt(username, patternNotes, highlights) {
|
|
73
|
+
return `You are a creative RPG narrator generating a player card for a developer.
|
|
74
|
+
|
|
75
|
+
Developer: ${username}
|
|
76
|
+
|
|
77
|
+
Observed working patterns:
|
|
78
|
+
${patternNotes.length > 0 ? patternNotes.map((note) => `- ${note}`).join('\n') : '- Historical patterns are limited.'}
|
|
79
|
+
|
|
80
|
+
Representative contributions:
|
|
81
|
+
${highlights.length > 0 ? highlights.map((highlight) => `- ${highlight}`).join('\n') : '- No representative contribution highlights available.'}
|
|
82
|
+
|
|
83
|
+
Generate a creative RPG-style character title and a character description summary.
|
|
84
|
+
The output must reflect the developer's actual profile — their strengths, tendencies, and personality as a coder.
|
|
85
|
+
|
|
86
|
+
Title rules:
|
|
87
|
+
- 4-60 chars, meaningful RPG class/archetype (e.g. "Backend Battle Duck", "Full-Stack Shadow Ninja")
|
|
88
|
+
- Do not use generic filler
|
|
89
|
+
|
|
90
|
+
Summary rules:
|
|
91
|
+
- 300-600 chars
|
|
92
|
+
- Write the summary for an engineering manager who wants to understand the person's practical impact and likely importance to the team
|
|
93
|
+
- Describe their main ownership area, the kind of work they repeatedly take on, and whether the PR history points more to foundations/core architecture, high-leverage delivery, enablement/support, or routine implementation
|
|
94
|
+
- Focus on what they changed and what that means for the team, not on tools or taxonomy
|
|
95
|
+
- Base the bio on the observed patterns and representative contributions above
|
|
96
|
+
- Keep some personality, but prioritize clear impact assessment over RPG flavor
|
|
97
|
+
- Do not start with the developer's username or "This developer"
|
|
98
|
+
- Do not mention the username, organization, repository names, level, XP, PR counts, technologies, or taxonomy labels directly
|
|
99
|
+
- Avoid phrases like "strongest in", "armed with", "org-scoped report", or "analyzed PRs"
|
|
100
|
+
- Do not use filler like "A good example is"
|
|
101
|
+
- Do not use ellipses or placeholders
|
|
102
|
+
|
|
103
|
+
Return ONLY valid JSON:
|
|
104
|
+
{
|
|
105
|
+
"title": "Duck RPG title",
|
|
106
|
+
"summary": "Manager-facing character bio, 300-600 chars"
|
|
107
|
+
}`;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDA4CD,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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LanguageModelV1 } from 'ai';
|
|
2
|
+
import { type QuackConfig } from '../config/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns a Vercel AI SDK LanguageModelV1 for the given config.
|
|
5
|
+
*
|
|
6
|
+
* Remote provider API keys are read from QUACKSCORE_LLM_API_KEY
|
|
7
|
+
* (never stored in config). Ollama requires no API key.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getModel(config: QuackConfig): LanguageModelV1;
|
|
10
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +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,CAoD7D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createAnthropic } from '@ai-sdk/anthropic';
|
|
2
|
+
import { createOpenAI } from '@ai-sdk/openai';
|
|
3
|
+
import { createGoogleGenerativeAI } from '@ai-sdk/google';
|
|
4
|
+
import { createOllama } from 'ollama-ai-provider';
|
|
5
|
+
import { LLM_API_KEY_ENV } from '../config/types.js';
|
|
6
|
+
import { diagLog } from '../shared/diagnostics.js';
|
|
7
|
+
/**
|
|
8
|
+
* Returns a Vercel AI SDK LanguageModelV1 for the given config.
|
|
9
|
+
*
|
|
10
|
+
* Remote provider API keys are read from QUACKSCORE_LLM_API_KEY
|
|
11
|
+
* (never stored in config). Ollama requires no API key.
|
|
12
|
+
*/
|
|
13
|
+
export function getModel(config) {
|
|
14
|
+
const apiKey = config.provider === 'ollama' ? undefined : getSharedApiKey();
|
|
15
|
+
diagLog('Resolving language model provider', {
|
|
16
|
+
provider: config.provider,
|
|
17
|
+
model: config.model,
|
|
18
|
+
baseUrl: config.baseUrl,
|
|
19
|
+
apiKeyPresent: Boolean(apiKey),
|
|
20
|
+
});
|
|
21
|
+
switch (config.provider) {
|
|
22
|
+
case 'anthropic':
|
|
23
|
+
return createAnthropic({ apiKey })(config.model);
|
|
24
|
+
case 'openai':
|
|
25
|
+
return createOpenAI({
|
|
26
|
+
apiKey,
|
|
27
|
+
...(config.baseUrl ? { baseURL: config.baseUrl, compatibility: 'compatible' } : {}),
|
|
28
|
+
})(config.model);
|
|
29
|
+
case 'google':
|
|
30
|
+
return createGoogleGenerativeAI({ apiKey })(config.model);
|
|
31
|
+
case 'openrouter': {
|
|
32
|
+
const or = createOpenAI({
|
|
33
|
+
baseURL: 'https://openrouter.ai/api/v1',
|
|
34
|
+
apiKey,
|
|
35
|
+
compatibility: 'compatible',
|
|
36
|
+
name: 'openrouter',
|
|
37
|
+
});
|
|
38
|
+
return or(config.model);
|
|
39
|
+
}
|
|
40
|
+
case 'minimax': {
|
|
41
|
+
const minimax = createOpenAI({
|
|
42
|
+
baseURL: config.baseUrl ?? 'https://api.minimax.io/v1',
|
|
43
|
+
apiKey,
|
|
44
|
+
compatibility: 'compatible',
|
|
45
|
+
name: 'minimax',
|
|
46
|
+
});
|
|
47
|
+
return minimax(config.model);
|
|
48
|
+
}
|
|
49
|
+
case 'ollama': {
|
|
50
|
+
const ol = createOllama({ baseURL: config.baseUrl ?? 'http://localhost:11434/api' });
|
|
51
|
+
return ol(config.model);
|
|
52
|
+
}
|
|
53
|
+
default: {
|
|
54
|
+
const p = config.provider;
|
|
55
|
+
throw new Error(`Unsupported provider: ${p}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function getSharedApiKey() {
|
|
60
|
+
const apiKey = process.env[LLM_API_KEY_ENV];
|
|
61
|
+
if (!apiKey) {
|
|
62
|
+
throw new Error(`${LLM_API_KEY_ENV} environment variable not set`);
|
|
63
|
+
}
|
|
64
|
+
diagLog('Resolved shared LLM API key from environment', {
|
|
65
|
+
envVar: LLM_API_KEY_ENV,
|
|
66
|
+
keyLength: apiKey.length,
|
|
67
|
+
});
|
|
68
|
+
return apiKey;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +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;IAC5E,OAAO,CAAC,mCAAmC,EAAE;QAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC;KAC/B,CAAC,CAAC;IAEH,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,WAAW;YACd,OAAO,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnD,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC;gBAClB,MAAM;gBACN,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,YAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7F,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnB,KAAK,QAAQ;YACX,OAAO,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5D,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,YAAY,CAAC;gBACtB,OAAO,EAAE,8BAA8B;gBACvC,MAAM;gBACN,aAAa,EAAE,YAAY;gBAC3B,IAAI,EAAE,YAAY;aACnB,CAAC,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,GAAG,YAAY,CAAC;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;gBACtD,MAAM;gBACN,aAAa,EAAE,YAAY;gBAC3B,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,4BAA4B,EAAE,CAAC,CAAC;YACrF,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,CAAC,GAAU,MAAM,CAAC,QAAQ,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,GAAG,eAAe,+BAA+B,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,CAAC,8CAA8C,EAAE;QACtD,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,MAAM,CAAC,MAAM;KACzB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +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;AA2M3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAs0CnD"}
|