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,311 @@
|
|
|
1
|
+
import open from 'open';
|
|
2
|
+
import { generateHTML } from '../report/index.js';
|
|
3
|
+
import { aggregateStats, calculatePRPoints } from '../scoring/index.js';
|
|
4
|
+
import { saveReport } from '../storage/index.js';
|
|
5
|
+
import { diagLog } from '../shared/diagnostics.js';
|
|
6
|
+
import { rpgHeader, rpgInfo, rpgLog, rpgSuccess } from '../shared/ui.js';
|
|
7
|
+
const MOCK_USERNAME = 'Demo Developer';
|
|
8
|
+
const MOCK_REPORT_ID = 'mock-report';
|
|
9
|
+
const MOCK_LAST_UPDATED = '2026-03-23T12:00:00.000Z';
|
|
10
|
+
const MOCK_PR_BLUEPRINTS = [
|
|
11
|
+
{
|
|
12
|
+
title: 'Stabilize React dashboard hydration and defer analytics bootstrap',
|
|
13
|
+
repo: 'acme/platform-web',
|
|
14
|
+
mergedAt: '2026-03-18T10:00:00Z',
|
|
15
|
+
additions: 320,
|
|
16
|
+
deletions: 94,
|
|
17
|
+
complexity: 8,
|
|
18
|
+
areas: ['web_frontend', 'sre'],
|
|
19
|
+
types: ['bugfix', 'refactor'],
|
|
20
|
+
technologies: ['typescript', 'react', 'testing'],
|
|
21
|
+
summary: 'Reduced hydration mismatches, delayed analytics bootstrapping, and improved test coverage around first-load rendering paths.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
title: 'Add organization-wide reusable CI workflow templates',
|
|
25
|
+
repo: 'acme/cicd-templates',
|
|
26
|
+
mergedAt: '2026-03-10T09:20:00Z',
|
|
27
|
+
additions: 410,
|
|
28
|
+
deletions: 88,
|
|
29
|
+
complexity: 7,
|
|
30
|
+
areas: ['devops'],
|
|
31
|
+
types: ['new_development', 'documentation'],
|
|
32
|
+
technologies: ['ci_cd', 'cloud', 'bash'],
|
|
33
|
+
summary: 'Introduced shared GitHub Actions templates for build, test, release, and rollback flows used across multiple repositories.',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
title: 'Implement retry-safe billing webhook consumer',
|
|
37
|
+
repo: 'acme/platform-api',
|
|
38
|
+
mergedAt: '2026-03-02T14:45:00Z',
|
|
39
|
+
additions: 280,
|
|
40
|
+
deletions: 61,
|
|
41
|
+
complexity: 8,
|
|
42
|
+
areas: ['backend'],
|
|
43
|
+
types: ['new_development'],
|
|
44
|
+
technologies: ['typescript', 'nodejs', 'api'],
|
|
45
|
+
summary: 'Added idempotent webhook processing, duplicate-event guards, and stronger observability for failed payment notifications.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
title: 'Refactor admin search filters for large customer datasets',
|
|
49
|
+
repo: 'acme/admin-portal',
|
|
50
|
+
mergedAt: '2026-02-21T12:00:00Z',
|
|
51
|
+
additions: 245,
|
|
52
|
+
deletions: 140,
|
|
53
|
+
complexity: 7,
|
|
54
|
+
areas: ['web_frontend'],
|
|
55
|
+
types: ['refactor'],
|
|
56
|
+
technologies: ['typescript', 'react', 'css'],
|
|
57
|
+
summary: 'Restructured filter state management and rendering to keep the admin search experience responsive on large datasets.',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
title: 'Improve flaky Playwright suite with deterministic seed data',
|
|
61
|
+
repo: 'acme/admin-portal',
|
|
62
|
+
mergedAt: '2026-02-15T08:30:00Z',
|
|
63
|
+
additions: 198,
|
|
64
|
+
deletions: 73,
|
|
65
|
+
complexity: 6,
|
|
66
|
+
areas: ['qa', 'web_frontend'],
|
|
67
|
+
types: ['bugfix', 'refactor'],
|
|
68
|
+
technologies: ['testing', 'typescript'],
|
|
69
|
+
summary: 'Removed timing-sensitive test setup by introducing seeded fixtures and clearer synchronization for end-to-end scenarios.',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
title: 'Ship feature flag management UI and API contracts',
|
|
73
|
+
repo: 'acme/platform-web',
|
|
74
|
+
mergedAt: '2026-02-07T16:10:00Z',
|
|
75
|
+
additions: 530,
|
|
76
|
+
deletions: 115,
|
|
77
|
+
complexity: 9,
|
|
78
|
+
areas: ['web_frontend', 'backend'],
|
|
79
|
+
types: ['new_development'],
|
|
80
|
+
technologies: ['typescript', 'react', 'api'],
|
|
81
|
+
summary: 'Delivered a full feature-flag management flow including admin screens, contract updates, and audit-oriented access checks.',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
title: 'Document incident response playbook for release failures',
|
|
85
|
+
repo: 'acme/platform-ops',
|
|
86
|
+
mergedAt: '2026-01-30T11:25:00Z',
|
|
87
|
+
additions: 92,
|
|
88
|
+
deletions: 14,
|
|
89
|
+
complexity: 4,
|
|
90
|
+
areas: ['sre', 'devops'],
|
|
91
|
+
types: ['documentation'],
|
|
92
|
+
technologies: ['markdown', 'ci_cd'],
|
|
93
|
+
summary: 'Added a practical release-failure playbook with rollback criteria, ownership handoff notes, and communication templates.',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
title: 'Optimize GraphQL resolver batching for customer overview',
|
|
97
|
+
repo: 'acme/platform-api',
|
|
98
|
+
mergedAt: '2026-01-19T13:40:00Z',
|
|
99
|
+
additions: 188,
|
|
100
|
+
deletions: 80,
|
|
101
|
+
complexity: 7,
|
|
102
|
+
areas: ['backend'],
|
|
103
|
+
types: ['refactor', 'bugfix'],
|
|
104
|
+
technologies: ['typescript', 'nodejs', 'api'],
|
|
105
|
+
summary: 'Reduced N+1 query pressure in customer overview resolvers and improved backend latency under peak dashboard traffic.',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
title: 'Add tenant-aware audit log export jobs',
|
|
109
|
+
repo: 'acme/platform-api',
|
|
110
|
+
mergedAt: '2026-01-12T10:05:00Z',
|
|
111
|
+
additions: 360,
|
|
112
|
+
deletions: 102,
|
|
113
|
+
complexity: 8,
|
|
114
|
+
areas: ['backend', 'scripts'],
|
|
115
|
+
types: ['new_development'],
|
|
116
|
+
technologies: ['typescript', 'nodejs', 'sql'],
|
|
117
|
+
summary: 'Introduced background export jobs for audit logs with tenant scoping, pagination, and traceable completion status.',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
title: 'Harden IaC modules for preview environments',
|
|
121
|
+
repo: 'acme/infrastructure',
|
|
122
|
+
mergedAt: '2025-12-20T15:25:00Z',
|
|
123
|
+
additions: 210,
|
|
124
|
+
deletions: 67,
|
|
125
|
+
complexity: 7,
|
|
126
|
+
areas: ['devops', 'sre'],
|
|
127
|
+
types: ['refactor'],
|
|
128
|
+
technologies: ['terraform', 'cloud', 'ci_cd'],
|
|
129
|
+
summary: 'Reworked infrastructure modules to support predictable preview environment provisioning and cleaner teardown semantics.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
title: 'Introduce API contract tests for notification service',
|
|
133
|
+
repo: 'acme/notification-service',
|
|
134
|
+
mergedAt: '2025-12-11T09:55:00Z',
|
|
135
|
+
additions: 224,
|
|
136
|
+
deletions: 41,
|
|
137
|
+
complexity: 6,
|
|
138
|
+
areas: ['backend', 'qa'],
|
|
139
|
+
types: ['new_development'],
|
|
140
|
+
technologies: ['typescript', 'nodejs', 'testing'],
|
|
141
|
+
summary: 'Added API contract tests to catch schema drift earlier and keep the notification service aligned with consuming clients.',
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
title: 'Refine mobile web checkout layout for smaller devices',
|
|
145
|
+
repo: 'acme/platform-web',
|
|
146
|
+
mergedAt: '2025-11-25T12:10:00Z',
|
|
147
|
+
additions: 146,
|
|
148
|
+
deletions: 58,
|
|
149
|
+
complexity: 5,
|
|
150
|
+
areas: ['mobile_frontend', 'web_frontend'],
|
|
151
|
+
types: ['bugfix', 'refactor'],
|
|
152
|
+
technologies: ['typescript', 'react', 'css'],
|
|
153
|
+
summary: 'Improved checkout ergonomics on narrow screens, tightened spacing rules, and fixed a set of layout regressions.',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
title: 'Build internal migration runner for scheduled data fixes',
|
|
157
|
+
repo: 'acme/platform-api',
|
|
158
|
+
mergedAt: '2025-11-08T10:35:00Z',
|
|
159
|
+
additions: 300,
|
|
160
|
+
deletions: 77,
|
|
161
|
+
complexity: 8,
|
|
162
|
+
areas: ['scripts', 'backend'],
|
|
163
|
+
types: ['new_development'],
|
|
164
|
+
technologies: ['typescript', 'nodejs', 'sql'],
|
|
165
|
+
summary: 'Created a controlled migration runner for scheduled data corrections with dry-run support and execution logging.',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
title: 'Improve developer container startup and local tooling docs',
|
|
169
|
+
repo: 'acme/dev-experience',
|
|
170
|
+
mergedAt: '2025-10-22T09:15:00Z',
|
|
171
|
+
additions: 118,
|
|
172
|
+
deletions: 36,
|
|
173
|
+
complexity: 4,
|
|
174
|
+
areas: ['devops', 'scripts'],
|
|
175
|
+
types: ['documentation', 'refactor'],
|
|
176
|
+
technologies: ['docker', 'bash', 'markdown'],
|
|
177
|
+
summary: 'Smoothed local onboarding by simplifying dev container startup and documenting common environment troubleshooting steps.',
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
title: 'Add server-side pagination to customer events timeline',
|
|
181
|
+
repo: 'acme/platform-api',
|
|
182
|
+
mergedAt: '2025-10-03T14:50:00Z',
|
|
183
|
+
additions: 202,
|
|
184
|
+
deletions: 49,
|
|
185
|
+
complexity: 6,
|
|
186
|
+
areas: ['backend'],
|
|
187
|
+
types: ['new_development'],
|
|
188
|
+
technologies: ['typescript', 'nodejs', 'api'],
|
|
189
|
+
summary: 'Added pagination and cursor-based retrieval for customer events so larger accounts remain usable in the timeline view.',
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
title: 'Rework release dashboard widgets for faster first paint',
|
|
193
|
+
repo: 'acme/platform-web',
|
|
194
|
+
mergedAt: '2025-09-14T11:00:00Z',
|
|
195
|
+
additions: 260,
|
|
196
|
+
deletions: 121,
|
|
197
|
+
complexity: 7,
|
|
198
|
+
areas: ['web_frontend'],
|
|
199
|
+
types: ['refactor'],
|
|
200
|
+
technologies: ['typescript', 'react', 'css'],
|
|
201
|
+
summary: 'Reduced initial rendering cost in release dashboards by splitting widget loading and trimming expensive derived state.',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
title: 'Integrate alert routing policies into ops console',
|
|
205
|
+
repo: 'acme/platform-ops',
|
|
206
|
+
mergedAt: '2025-08-29T13:25:00Z',
|
|
207
|
+
additions: 332,
|
|
208
|
+
deletions: 90,
|
|
209
|
+
complexity: 8,
|
|
210
|
+
areas: ['sre', 'web_frontend'],
|
|
211
|
+
types: ['new_development'],
|
|
212
|
+
technologies: ['typescript', 'react', 'api'],
|
|
213
|
+
summary: 'Added alert routing configuration to the ops console with policy editing, preview validation, and safer default fallbacks.',
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
title: 'Fix background job dead-letter replay edge cases',
|
|
217
|
+
repo: 'acme/notification-service',
|
|
218
|
+
mergedAt: '2025-08-11T08:45:00Z',
|
|
219
|
+
additions: 174,
|
|
220
|
+
deletions: 62,
|
|
221
|
+
complexity: 7,
|
|
222
|
+
areas: ['backend', 'sre'],
|
|
223
|
+
types: ['bugfix'],
|
|
224
|
+
technologies: ['typescript', 'nodejs', 'data'],
|
|
225
|
+
summary: 'Addressed replay edge cases in dead-letter handling and improved visibility into partial retry failures.',
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
title: 'Launch self-serve workspace provisioning flow',
|
|
229
|
+
repo: 'acme/dev-experience',
|
|
230
|
+
mergedAt: '2025-07-22T10:15:00Z',
|
|
231
|
+
additions: 488,
|
|
232
|
+
deletions: 109,
|
|
233
|
+
complexity: 9,
|
|
234
|
+
areas: ['devops', 'web_frontend'],
|
|
235
|
+
types: ['new_development'],
|
|
236
|
+
technologies: ['typescript', 'react', 'cloud', 'ci_cd'],
|
|
237
|
+
summary: 'Delivered self-serve workspace provisioning with approval hooks, status tracking, and reusable deployment templates.',
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
title: 'Tighten SQL query plans for monthly finance exports',
|
|
241
|
+
repo: 'acme/finance-service',
|
|
242
|
+
mergedAt: '2025-07-04T09:05:00Z',
|
|
243
|
+
additions: 134,
|
|
244
|
+
deletions: 57,
|
|
245
|
+
complexity: 6,
|
|
246
|
+
areas: ['backend'],
|
|
247
|
+
types: ['bugfix', 'refactor'],
|
|
248
|
+
technologies: ['sql', 'typescript', 'nodejs'],
|
|
249
|
+
summary: 'Improved export runtime by restructuring query plans and indexes for monthly finance reporting workloads.',
|
|
250
|
+
},
|
|
251
|
+
];
|
|
252
|
+
export function buildMockUserData() {
|
|
253
|
+
const prs = MOCK_PR_BLUEPRINTS.map((pr, index) => {
|
|
254
|
+
const result = {
|
|
255
|
+
id: index + 1,
|
|
256
|
+
number: 1000 + index + 1,
|
|
257
|
+
title: pr.title,
|
|
258
|
+
url: `https://github.com/${pr.repo}/pull/${1000 + index + 1}`,
|
|
259
|
+
repo: pr.repo,
|
|
260
|
+
mergedAt: pr.mergedAt,
|
|
261
|
+
additions: pr.additions,
|
|
262
|
+
deletions: pr.deletions,
|
|
263
|
+
analysis: {
|
|
264
|
+
skipped: false,
|
|
265
|
+
complexity: pr.complexity,
|
|
266
|
+
areas: pr.areas,
|
|
267
|
+
types: pr.types,
|
|
268
|
+
technologies: pr.technologies,
|
|
269
|
+
summary: pr.summary,
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
result.points = calculatePRPoints(result);
|
|
273
|
+
return result;
|
|
274
|
+
});
|
|
275
|
+
const stats = aggregateStats(prs);
|
|
276
|
+
const characterSummary = 'Strong cross-functional contributor who ships product work, platform improvements, CI/CD upgrades, and reliability fixes with consistent follow-through across frontend, backend, and operational tooling.';
|
|
277
|
+
return {
|
|
278
|
+
username: MOCK_USERNAME,
|
|
279
|
+
lastUpdated: MOCK_LAST_UPDATED,
|
|
280
|
+
prs,
|
|
281
|
+
stats,
|
|
282
|
+
character: {
|
|
283
|
+
title: 'Senior Platform Engineer',
|
|
284
|
+
summary: characterSummary,
|
|
285
|
+
avatarUrl: 'https://images.unsplash.com/photo-1518770660439-4636190af475?auto=format&fit=crop&w=512&q=80',
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
export async function runMockReport() {
|
|
290
|
+
rpgHeader('Quackscore Mock Report');
|
|
291
|
+
rpgLog('Assembling mocked contribution history...');
|
|
292
|
+
const userData = buildMockUserData();
|
|
293
|
+
diagLog('Built mock report dataset', {
|
|
294
|
+
username: userData.username,
|
|
295
|
+
prCount: userData.prs.length,
|
|
296
|
+
totalPoints: userData.stats.totalPoints,
|
|
297
|
+
level: userData.stats.level,
|
|
298
|
+
});
|
|
299
|
+
rpgInfo(`Using ${userData.prs.length} hardcoded PRs across ${new Set(userData.prs.map((pr) => pr.repo)).size} repositories.`);
|
|
300
|
+
rpgLog('Forging the sample Quack-Card...');
|
|
301
|
+
const html = generateHTML(userData);
|
|
302
|
+
const reportPath = saveReport(MOCK_REPORT_ID, html);
|
|
303
|
+
diagLog('Generated mock report', {
|
|
304
|
+
reportPath,
|
|
305
|
+
htmlLength: html.length,
|
|
306
|
+
});
|
|
307
|
+
rpgSuccess(`Mock report saved: ${reportPath}`);
|
|
308
|
+
rpgLog('Opening the sample report...');
|
|
309
|
+
await open(reportPath);
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=mock-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-report.js","sourceRoot":"","sources":["../../src/commands/mock-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAMA,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getUserReportPath } from '../storage/index.js';
|
|
2
|
+
import { rpgError, rpgLog } from '../shared/ui.js';
|
|
3
|
+
import { diagLog } from '../shared/diagnostics.js';
|
|
4
|
+
import open from 'open';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
export async function runShow(username) {
|
|
7
|
+
const reportPath = getUserReportPath(username);
|
|
8
|
+
diagLog('Resolved report path for show command', { username, reportPath });
|
|
9
|
+
if (!fs.existsSync(reportPath)) {
|
|
10
|
+
rpgError(`No report found for ${username}. Run 'quackscore create ${username}' first.`);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
rpgLog(`Opening report for ${username}...`);
|
|
14
|
+
diagLog('Opening existing report in default browser', { username, reportPath });
|
|
15
|
+
await open(reportPath);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAgB;IAC5C,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,CAAC,uCAAuC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,uBAAuB,QAAQ,4BAA4B,QAAQ,UAAU,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,sBAAsB,QAAQ,KAAK,CAAC,CAAC;IAC5C,OAAO,CAAC,4CAA4C,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IAChF,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkLvF"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { fetchUserPRs } from '../github/index.js';
|
|
2
|
+
import { getModel, analyzePR, generateCharacter } from '../llm/index.js';
|
|
3
|
+
import { calculatePRPoints, aggregateStats } from '../scoring/index.js';
|
|
4
|
+
import { loadUserData, saveUserData, saveReport } from '../storage/index.js';
|
|
5
|
+
import { generateHTML } from '../report/index.js';
|
|
6
|
+
import { loadConfig } from '../config/index.js';
|
|
7
|
+
import { rpgHeader, rpgLog, rpgInfo, rpgProgress, rpgSuccess, rpgError } from '../shared/ui.js';
|
|
8
|
+
import { diagError, diagLog } from '../shared/diagnostics.js';
|
|
9
|
+
import open from 'open';
|
|
10
|
+
export async function runUpdate(username, options) {
|
|
11
|
+
diagLog('Starting update command', {
|
|
12
|
+
username,
|
|
13
|
+
options,
|
|
14
|
+
githubTokenPresent: Boolean(process.env['QUACKSCORE_GH_TOKEN']),
|
|
15
|
+
});
|
|
16
|
+
const token = process.env['QUACKSCORE_GH_TOKEN'];
|
|
17
|
+
if (!token) {
|
|
18
|
+
rpgError('QUACKSCORE_GH_TOKEN environment variable not set');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
let model;
|
|
22
|
+
try {
|
|
23
|
+
const config = loadConfig();
|
|
24
|
+
diagLog('Loaded configuration for update', config);
|
|
25
|
+
model = getModel(config);
|
|
26
|
+
diagLog('Instantiated model for update');
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
diagError('Update command failed while loading model configuration', err);
|
|
30
|
+
rpgError(err.message);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
rpgHeader(`Quackscore Update — ${username}`);
|
|
34
|
+
const existing = loadUserData(username);
|
|
35
|
+
if (!existing) {
|
|
36
|
+
diagLog('No existing user data found during update; delegating to create', { username });
|
|
37
|
+
rpgInfo('No existing data found. Running full analysis...');
|
|
38
|
+
const { runCreate } = await import('./create.js');
|
|
39
|
+
await runCreate(username, options);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
diagLog('Loaded existing user data for update', {
|
|
43
|
+
username,
|
|
44
|
+
lastUpdated: existing.lastUpdated,
|
|
45
|
+
existingPRs: existing.prs.length,
|
|
46
|
+
totalPoints: existing.stats.totalPoints,
|
|
47
|
+
level: existing.stats.level,
|
|
48
|
+
});
|
|
49
|
+
rpgLog(`Last updated: ${existing.lastUpdated}`);
|
|
50
|
+
rpgInfo('Fetching new PR scrolls...');
|
|
51
|
+
let newPRs;
|
|
52
|
+
try {
|
|
53
|
+
const fetchStartedAt = Date.now();
|
|
54
|
+
newPRs = await fetchUserPRs(username, token, {
|
|
55
|
+
org: options.org,
|
|
56
|
+
repo: options.repository,
|
|
57
|
+
since: existing.lastUpdated,
|
|
58
|
+
});
|
|
59
|
+
diagLog('Fetched candidate PRs for update', {
|
|
60
|
+
username,
|
|
61
|
+
durationMs: Date.now() - fetchStartedAt,
|
|
62
|
+
candidateCount: newPRs.length,
|
|
63
|
+
since: existing.lastUpdated,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
diagError('Update command failed while fetching PRs', err, {
|
|
68
|
+
username,
|
|
69
|
+
options,
|
|
70
|
+
since: existing.lastUpdated,
|
|
71
|
+
});
|
|
72
|
+
rpgError(`Failed to fetch PRs: ${err.message}`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
const existingIds = new Set(existing.prs.map((p) => p.id));
|
|
76
|
+
const freshPRs = newPRs.filter((p) => !existingIds.has(p.id));
|
|
77
|
+
diagLog('Filtered fresh PRs during update', {
|
|
78
|
+
existingCount: existingIds.size,
|
|
79
|
+
candidateCount: newPRs.length,
|
|
80
|
+
freshCount: freshPRs.length,
|
|
81
|
+
freshPRNumbers: freshPRs.map((pr) => pr.number),
|
|
82
|
+
});
|
|
83
|
+
rpgSuccess(`Found ${freshPRs.length} new PRs since last update`);
|
|
84
|
+
if (freshPRs.length === 0) {
|
|
85
|
+
rpgInfo('Nothing new to analyze. Your card is up to date.');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
for (let i = 0; i < freshPRs.length; i++) {
|
|
89
|
+
const pr = freshPRs[i];
|
|
90
|
+
rpgProgress(i + 1, freshPRs.length, pr.title);
|
|
91
|
+
diagLog('Analyzing fresh PR during update', {
|
|
92
|
+
index: i + 1,
|
|
93
|
+
total: freshPRs.length,
|
|
94
|
+
prNumber: pr.number,
|
|
95
|
+
repo: pr.repo,
|
|
96
|
+
title: pr.title,
|
|
97
|
+
mergedAt: pr.mergedAt,
|
|
98
|
+
additions: pr.additions,
|
|
99
|
+
deletions: pr.deletions,
|
|
100
|
+
diffPresent: Boolean(pr.diff),
|
|
101
|
+
diffLength: pr.diff?.length ?? 0,
|
|
102
|
+
});
|
|
103
|
+
try {
|
|
104
|
+
const analysisStartedAt = Date.now();
|
|
105
|
+
pr.analysis = await analyzePR(pr, model);
|
|
106
|
+
pr.points = calculatePRPoints(pr);
|
|
107
|
+
diagLog('Completed fresh PR analysis during update', {
|
|
108
|
+
prNumber: pr.number,
|
|
109
|
+
durationMs: Date.now() - analysisStartedAt,
|
|
110
|
+
skipped: pr.analysis.skipped,
|
|
111
|
+
complexity: pr.analysis.complexity,
|
|
112
|
+
areas: pr.analysis.areas,
|
|
113
|
+
types: pr.analysis.types,
|
|
114
|
+
technologies: pr.analysis.technologies,
|
|
115
|
+
points: pr.points,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
diagError('PR analysis failed during update', err, {
|
|
120
|
+
prNumber: pr.number,
|
|
121
|
+
repo: pr.repo,
|
|
122
|
+
title: pr.title,
|
|
123
|
+
});
|
|
124
|
+
rpgError(`Skipping PR #${pr.number}: ${err.message}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const allPRs = [...existing.prs, ...freshPRs];
|
|
128
|
+
const stats = aggregateStats(allPRs);
|
|
129
|
+
diagLog('Aggregated stats for update', {
|
|
130
|
+
totalPRsAfterMerge: allPRs.length,
|
|
131
|
+
totalPoints: stats.totalPoints,
|
|
132
|
+
level: stats.level,
|
|
133
|
+
pointsToNextLevel: stats.pointsToNextLevel,
|
|
134
|
+
analyzedPRs: stats.analyzedPRs,
|
|
135
|
+
areaCount: Object.keys(stats.areas).length,
|
|
136
|
+
technologyCount: Object.keys(stats.technologies).length,
|
|
137
|
+
typeCount: Object.keys(stats.types).length,
|
|
138
|
+
});
|
|
139
|
+
rpgLog('Updating character profile...');
|
|
140
|
+
const characterStartedAt = Date.now();
|
|
141
|
+
const character = await generateCharacter(stats, username, allPRs, model);
|
|
142
|
+
diagLog('Generated character profile for update', {
|
|
143
|
+
durationMs: Date.now() - characterStartedAt,
|
|
144
|
+
character,
|
|
145
|
+
});
|
|
146
|
+
const userData = {
|
|
147
|
+
username,
|
|
148
|
+
lastUpdated: new Date().toISOString(),
|
|
149
|
+
prs: allPRs,
|
|
150
|
+
stats,
|
|
151
|
+
character,
|
|
152
|
+
};
|
|
153
|
+
saveUserData(userData);
|
|
154
|
+
diagLog('Persisted user data for update', {
|
|
155
|
+
username,
|
|
156
|
+
prCount: userData.prs.length,
|
|
157
|
+
stats: {
|
|
158
|
+
totalPoints: userData.stats.totalPoints,
|
|
159
|
+
level: userData.stats.level,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
rpgLog('Forging updated Quack-Card...');
|
|
163
|
+
const reportStartedAt = Date.now();
|
|
164
|
+
const html = generateHTML(userData);
|
|
165
|
+
const reportPath = saveReport(username, html);
|
|
166
|
+
diagLog('Generated and saved report for update', {
|
|
167
|
+
durationMs: Date.now() - reportStartedAt,
|
|
168
|
+
reportPath,
|
|
169
|
+
htmlLength: html.length,
|
|
170
|
+
});
|
|
171
|
+
rpgSuccess(`Card updated: ${reportPath}`);
|
|
172
|
+
diagLog('Opening updated report in default browser', { reportPath });
|
|
173
|
+
await open(reportPath);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { loadConfig, saveConfig, hasConfig, CONFIG_DIR, CONFIG_FILE } from './manager.js';
|
|
2
|
+
export { LLM_API_KEY_ENV, PROVIDER_DEFAULTS, PROVIDER_EXAMPLE_MODELS } from './types.js';
|
|
3
|
+
export type { QuackConfig, Provider } from './types.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACzF,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { QuackConfig } from './types.js';
|
|
2
|
+
export declare const CONFIG_DIR: string;
|
|
3
|
+
export declare const CONFIG_FILE: string;
|
|
4
|
+
export declare function loadConfig(): QuackConfig;
|
|
5
|
+
export declare function saveConfig(config: QuackConfig): void;
|
|
6
|
+
export declare function hasConfig(): boolean;
|
|
7
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,eAAO,MAAM,UAAU,QAAyC,CAAC;AACjE,eAAO,MAAM,WAAW,QAAuC,CAAC;AAEhE,wBAAgB,UAAU,IAAI,WAAW,CAUxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAOpD;AAED,wBAAgB,SAAS,IAAI,OAAO,CAInC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import { diagLog } from '../shared/diagnostics.js';
|
|
5
|
+
export const CONFIG_DIR = path.join(os.homedir(), '.quackscore');
|
|
6
|
+
export const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
7
|
+
export function loadConfig() {
|
|
8
|
+
diagLog('Loading config file', { configFile: CONFIG_FILE });
|
|
9
|
+
if (!fs.existsSync(CONFIG_FILE)) {
|
|
10
|
+
throw new Error(`No config found. Run 'quackscore init --provider <provider>' to set up your LLM provider.`);
|
|
11
|
+
}
|
|
12
|
+
const raw = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
13
|
+
diagLog('Loaded config file contents', { configFile: CONFIG_FILE, bytes: raw.length });
|
|
14
|
+
return JSON.parse(raw);
|
|
15
|
+
}
|
|
16
|
+
export function saveConfig(config) {
|
|
17
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
18
|
+
diagLog('Creating config directory', { configDir: CONFIG_DIR });
|
|
19
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
diagLog('Writing config file', { configFile: CONFIG_FILE, config });
|
|
22
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
|
|
23
|
+
}
|
|
24
|
+
export function hasConfig() {
|
|
25
|
+
const exists = fs.existsSync(CONFIG_FILE);
|
|
26
|
+
diagLog('Checked config existence', { configFile: CONFIG_FILE, exists });
|
|
27
|
+
return exists;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEhE,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,CAAC,6BAA6B,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAChE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1C,OAAO,CAAC,0BAA0B,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type Provider = 'anthropic' | 'openai' | 'google' | 'openrouter' | 'minimax' | 'ollama';
|
|
2
|
+
/** Shared API key environment variable for all remote LLM providers */
|
|
3
|
+
export declare const LLM_API_KEY_ENV = "QUACKSCORE_LLM_API_KEY";
|
|
4
|
+
/** Default model for each provider (used when --model is omitted from init) */
|
|
5
|
+
export declare const PROVIDER_DEFAULTS: Record<Provider, string>;
|
|
6
|
+
/** Well-known models shown as examples during init */
|
|
7
|
+
export declare const PROVIDER_EXAMPLE_MODELS: Record<Provider, string[]>;
|
|
8
|
+
export interface QuackConfig {
|
|
9
|
+
provider: Provider;
|
|
10
|
+
model: string;
|
|
11
|
+
/** Optional custom base URL — used for Ollama or OpenAI-compatible endpoints */
|
|
12
|
+
baseUrl?: string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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;AAEb,uEAAuE;AACvE,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAExD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOtD,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAO9D,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|