@dharminnagar/bruh 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +111 -0
- package/dist/args.d.ts +4 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +136 -0
- package/dist/args.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +429 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +8 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +72 -0
- package/dist/errors.js.map +1 -0
- package/dist/git.d.ts +6 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +95 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +132 -0
- package/dist/main.js.map +1 -0
- package/dist/providers.d.ts +3 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +484 -0
- package/dist/providers.js.map +1 -0
- package/dist/report.d.ts +5 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +96 -0
- package/dist/report.js.map +1 -0
- package/dist/types.d.ts +59 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +74 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { cancel, isCancel, password, select, text } from '@clack/prompts';
|
|
5
|
+
const CONFIG_FILE_NAME = 'config.json';
|
|
6
|
+
const USE_PROVIDER_DEFAULT_MODEL = '__use_provider_default_model__';
|
|
7
|
+
const KEEP_EXISTING_MODEL = '__keep_existing_model__';
|
|
8
|
+
const CUSTOM_MODEL = '__custom_model__';
|
|
9
|
+
const SEARCH_MODELS = '__search_models__';
|
|
10
|
+
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
11
|
+
const PROVIDER_MODEL_OPTIONS = {
|
|
12
|
+
openai: ['gpt-4.1-mini', 'gpt-4.1', 'gpt-4o-mini'],
|
|
13
|
+
claude: [
|
|
14
|
+
'claude-3-5-haiku-latest',
|
|
15
|
+
'claude-3-5-sonnet-latest',
|
|
16
|
+
'claude-3-opus-latest',
|
|
17
|
+
],
|
|
18
|
+
cloudflare: [
|
|
19
|
+
'@cf/meta/llama-3.1-8b-instruct',
|
|
20
|
+
'@cf/meta/llama-3.3-70b-instruct-fp8-fast',
|
|
21
|
+
'@cf/meta/llama-3.1-70b-instruct',
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
function uniqueStrings(values) {
|
|
25
|
+
return [...new Set(values.map((item) => item.trim()).filter(Boolean))];
|
|
26
|
+
}
|
|
27
|
+
function isUuid(value) {
|
|
28
|
+
return UUID_REGEX.test(value);
|
|
29
|
+
}
|
|
30
|
+
function isRunnableCloudflareModelId(value) {
|
|
31
|
+
const trimmed = value.trim();
|
|
32
|
+
if (!trimmed || isUuid(trimmed) || trimmed.includes(' ')) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (!trimmed.includes('/')) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return trimmed.startsWith('@') || trimmed.split('/').length >= 2;
|
|
39
|
+
}
|
|
40
|
+
function normalizeCandidate(value) {
|
|
41
|
+
if (typeof value !== 'string') {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const trimmed = value.trim();
|
|
45
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
46
|
+
}
|
|
47
|
+
function extractObjectCandidates(record) {
|
|
48
|
+
const primitive = [
|
|
49
|
+
record.model,
|
|
50
|
+
record.slug,
|
|
51
|
+
record.name,
|
|
52
|
+
record.model_name,
|
|
53
|
+
record.modelName,
|
|
54
|
+
record.display_name,
|
|
55
|
+
record.title,
|
|
56
|
+
record.id,
|
|
57
|
+
]
|
|
58
|
+
.map((item) => normalizeCandidate(item))
|
|
59
|
+
.filter((item) => item !== null);
|
|
60
|
+
const nested = [record.model, record.meta, record.properties]
|
|
61
|
+
.filter((item) => Boolean(item && typeof item === 'object'))
|
|
62
|
+
.flatMap((item) => [item.id, item.name, item.slug, item.model]
|
|
63
|
+
.map((entry) => normalizeCandidate(entry))
|
|
64
|
+
.filter((entry) => entry !== null));
|
|
65
|
+
return uniqueStrings([...primitive, ...nested]);
|
|
66
|
+
}
|
|
67
|
+
function pickCloudflareModelIdentifier(record) {
|
|
68
|
+
const candidates = extractObjectCandidates(record);
|
|
69
|
+
const prioritized = candidates.filter((candidate) => isRunnableCloudflareModelId(candidate));
|
|
70
|
+
const best = prioritized.find((item) => item.startsWith('@cf/')) ?? prioritized[0];
|
|
71
|
+
return best ?? null;
|
|
72
|
+
}
|
|
73
|
+
function pickCloudflareModelLabel(record, fallback) {
|
|
74
|
+
const labelCandidates = [
|
|
75
|
+
record.display_name,
|
|
76
|
+
record.title,
|
|
77
|
+
record.name,
|
|
78
|
+
record.model,
|
|
79
|
+
record.slug,
|
|
80
|
+
]
|
|
81
|
+
.map((entry) => normalizeCandidate(entry))
|
|
82
|
+
.filter((entry) => entry !== null);
|
|
83
|
+
return labelCandidates[0] ?? fallback;
|
|
84
|
+
}
|
|
85
|
+
function extractTaskHint(record) {
|
|
86
|
+
const directTaskCandidates = [record.task, record.taskType, record.type]
|
|
87
|
+
.map((entry) => normalizeCandidate(entry))
|
|
88
|
+
.filter((entry) => entry !== null);
|
|
89
|
+
const nestedTaskObjects = [
|
|
90
|
+
record.task,
|
|
91
|
+
record.meta,
|
|
92
|
+
record.properties,
|
|
93
|
+
].filter((entry) => Boolean(entry && typeof entry === 'object'));
|
|
94
|
+
const nestedTaskCandidates = nestedTaskObjects.flatMap((entry) => [entry.task, entry.taskType, entry.type, entry.name, entry.id]
|
|
95
|
+
.map((value) => normalizeCandidate(value))
|
|
96
|
+
.filter((value) => value !== null));
|
|
97
|
+
const tagCandidates = [record.tags, record.capabilities]
|
|
98
|
+
.filter((entry) => Array.isArray(entry))
|
|
99
|
+
.flatMap((entry) => entry
|
|
100
|
+
.map((value) => normalizeCandidate(value))
|
|
101
|
+
.filter((value) => value !== null));
|
|
102
|
+
const taskCandidates = [
|
|
103
|
+
...directTaskCandidates,
|
|
104
|
+
...nestedTaskCandidates,
|
|
105
|
+
...tagCandidates,
|
|
106
|
+
];
|
|
107
|
+
if (taskCandidates.length > 0) {
|
|
108
|
+
return taskCandidates.join(' ').toLowerCase();
|
|
109
|
+
}
|
|
110
|
+
return '';
|
|
111
|
+
}
|
|
112
|
+
function isLikelyTextGeneration(identifier, label, taskHint) {
|
|
113
|
+
const combined = `${identifier} ${label} ${taskHint}`.toLowerCase();
|
|
114
|
+
if (combined.includes('embedding') ||
|
|
115
|
+
combined.includes('speech') ||
|
|
116
|
+
combined.includes('tts') ||
|
|
117
|
+
combined.includes('asr') ||
|
|
118
|
+
combined.includes('image') ||
|
|
119
|
+
combined.includes('classification') ||
|
|
120
|
+
combined.includes('translation') ||
|
|
121
|
+
combined.includes('rerank') ||
|
|
122
|
+
combined.includes('detect')) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
if (combined.includes('text generation') ||
|
|
126
|
+
combined.includes('text-generation') ||
|
|
127
|
+
combined.includes('chat completion') ||
|
|
128
|
+
combined.includes('chat-completion') ||
|
|
129
|
+
combined.includes('llm')) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
if (taskHint.trim().length > 0) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (identifier.startsWith('@cf/') &&
|
|
136
|
+
(combined.includes('instruct') ||
|
|
137
|
+
combined.includes('chat') ||
|
|
138
|
+
combined.includes('reasoning'))) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
function extractCloudflareModelOption(value) {
|
|
144
|
+
if (typeof value === 'string') {
|
|
145
|
+
const model = normalizeCandidate(value);
|
|
146
|
+
if (!model || !isRunnableCloudflareModelId(model)) {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
value: model,
|
|
151
|
+
label: model,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (!value || typeof value !== 'object') {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
const record = value;
|
|
158
|
+
const identifier = pickCloudflareModelIdentifier(record);
|
|
159
|
+
if (!identifier) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
const label = pickCloudflareModelLabel(record, identifier);
|
|
163
|
+
const taskHint = extractTaskHint(record);
|
|
164
|
+
if (!isLikelyTextGeneration(identifier, label, taskHint)) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
value: identifier,
|
|
169
|
+
label,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function uniqueModelOptions(options) {
|
|
173
|
+
const seen = new Set();
|
|
174
|
+
const deduped = [];
|
|
175
|
+
for (const option of options) {
|
|
176
|
+
const key = option.value.trim();
|
|
177
|
+
if (seen.has(key)) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
seen.add(key);
|
|
181
|
+
deduped.push({
|
|
182
|
+
value: key,
|
|
183
|
+
label: option.label.trim() || key,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
return deduped;
|
|
187
|
+
}
|
|
188
|
+
async function fetchCloudflareModelOptions(apiKey, cloudflareAccountId) {
|
|
189
|
+
const endpoint = `https://api.cloudflare.com/client/v4/accounts/${cloudflareAccountId}/ai/models/search`;
|
|
190
|
+
const response = await fetch(endpoint, {
|
|
191
|
+
method: 'GET',
|
|
192
|
+
headers: {
|
|
193
|
+
Authorization: `Bearer ${apiKey}`,
|
|
194
|
+
'Content-Type': 'application/json',
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
if (!response.ok) {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
const payload = (await response.json());
|
|
201
|
+
if (!Array.isArray(payload.result)) {
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
204
|
+
const extracted = payload.result
|
|
205
|
+
.map((entry) => extractCloudflareModelOption(entry))
|
|
206
|
+
.filter((entry) => entry !== null);
|
|
207
|
+
return uniqueModelOptions(extracted);
|
|
208
|
+
}
|
|
209
|
+
function mustResolvePrompt(value, message) {
|
|
210
|
+
if (isCancel(value)) {
|
|
211
|
+
cancel('Setup cancelled.');
|
|
212
|
+
throw new Error(message);
|
|
213
|
+
}
|
|
214
|
+
return value;
|
|
215
|
+
}
|
|
216
|
+
function resolvePromptText(value, message) {
|
|
217
|
+
const resolved = mustResolvePrompt(value, message);
|
|
218
|
+
return typeof resolved === 'string' ? resolved : '';
|
|
219
|
+
}
|
|
220
|
+
function providerModelChoices(provider, providerModels, currentModel) {
|
|
221
|
+
const options = providerModels.map((model) => ({
|
|
222
|
+
value: model.value,
|
|
223
|
+
label: model.label,
|
|
224
|
+
}));
|
|
225
|
+
const choices = [
|
|
226
|
+
{
|
|
227
|
+
value: USE_PROVIDER_DEFAULT_MODEL,
|
|
228
|
+
label: 'Use provider default model',
|
|
229
|
+
hint: 'No explicit model override in config',
|
|
230
|
+
},
|
|
231
|
+
...options,
|
|
232
|
+
];
|
|
233
|
+
if (currentModel && currentModel.trim().length > 0) {
|
|
234
|
+
choices.push({
|
|
235
|
+
value: KEEP_EXISTING_MODEL,
|
|
236
|
+
label: `Keep existing model (${currentModel})`,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
choices.push({
|
|
240
|
+
value: CUSTOM_MODEL,
|
|
241
|
+
label: 'Enter custom model id',
|
|
242
|
+
});
|
|
243
|
+
return choices;
|
|
244
|
+
}
|
|
245
|
+
async function promptForModel(provider, apiKey, cloudflareAccountId, currentModel) {
|
|
246
|
+
const staticModels = PROVIDER_MODEL_OPTIONS[provider].map((model) => ({
|
|
247
|
+
value: model,
|
|
248
|
+
label: model,
|
|
249
|
+
}));
|
|
250
|
+
const cloudflareModels = provider === 'cloudflare' && apiKey && cloudflareAccountId
|
|
251
|
+
? await fetchCloudflareModelOptions(apiKey, cloudflareAccountId)
|
|
252
|
+
: [];
|
|
253
|
+
const providerModels = uniqueModelOptions([
|
|
254
|
+
...cloudflareModels,
|
|
255
|
+
...staticModels,
|
|
256
|
+
]);
|
|
257
|
+
let searchTerm = '';
|
|
258
|
+
while (true) {
|
|
259
|
+
const typedSearch = resolvePromptText(await text({
|
|
260
|
+
message: 'Type model name to filter (press enter to show all models)',
|
|
261
|
+
placeholder: 'e.g. llama, qwen, instruct',
|
|
262
|
+
initialValue: searchTerm,
|
|
263
|
+
}), 'Model search cancelled by user.');
|
|
264
|
+
searchTerm = typedSearch.trim();
|
|
265
|
+
const filteredModels = searchTerm.trim().length === 0
|
|
266
|
+
? providerModels
|
|
267
|
+
: providerModels.filter((model) => `${model.label} ${model.value}`
|
|
268
|
+
.toLowerCase()
|
|
269
|
+
.includes(searchTerm.toLowerCase()));
|
|
270
|
+
const filteredChoices = providerModelChoices(provider, filteredModels, currentModel);
|
|
271
|
+
const searchLabel = searchTerm.trim().length > 0
|
|
272
|
+
? `Change search filter (current: ${searchTerm})`
|
|
273
|
+
: 'Change search filter';
|
|
274
|
+
const selection = mustResolvePrompt(await select({
|
|
275
|
+
message: `Select ${provider} model`,
|
|
276
|
+
options: [
|
|
277
|
+
{ value: SEARCH_MODELS, label: searchLabel },
|
|
278
|
+
...filteredChoices,
|
|
279
|
+
],
|
|
280
|
+
}), 'Model selection cancelled by user.');
|
|
281
|
+
if (selection === SEARCH_MODELS) {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
if (selection === USE_PROVIDER_DEFAULT_MODEL) {
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
287
|
+
if (selection === KEEP_EXISTING_MODEL) {
|
|
288
|
+
return currentModel?.trim() || undefined;
|
|
289
|
+
}
|
|
290
|
+
if (selection === CUSTOM_MODEL) {
|
|
291
|
+
const custom = resolvePromptText(await text({
|
|
292
|
+
message: 'Enter custom model id',
|
|
293
|
+
placeholder: 'e.g. @cf/meta/llama-3.1-8b-instruct',
|
|
294
|
+
validate(value) {
|
|
295
|
+
const normalized = value.trim();
|
|
296
|
+
if (!normalized) {
|
|
297
|
+
return 'Model id is required';
|
|
298
|
+
}
|
|
299
|
+
if (provider === 'cloudflare' &&
|
|
300
|
+
!isRunnableCloudflareModelId(normalized)) {
|
|
301
|
+
return 'Use a full Cloudflare model id like @cf/meta/llama-3.3-70b-instruct-fp8-fast';
|
|
302
|
+
}
|
|
303
|
+
return undefined;
|
|
304
|
+
},
|
|
305
|
+
}), 'Custom model input cancelled by user.');
|
|
306
|
+
return custom.trim();
|
|
307
|
+
}
|
|
308
|
+
return selection;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
function defaultConfigDirectory() {
|
|
312
|
+
const home = os.homedir();
|
|
313
|
+
if (process.platform === 'darwin') {
|
|
314
|
+
return path.join(home, 'Library', 'Application Support', 'bruh');
|
|
315
|
+
}
|
|
316
|
+
if (process.env.XDG_CONFIG_HOME) {
|
|
317
|
+
return path.join(process.env.XDG_CONFIG_HOME, 'bruh');
|
|
318
|
+
}
|
|
319
|
+
return path.join(home, '.config', 'bruh');
|
|
320
|
+
}
|
|
321
|
+
export function resolveConfigPath(customPath) {
|
|
322
|
+
if (customPath) {
|
|
323
|
+
return path.resolve(customPath);
|
|
324
|
+
}
|
|
325
|
+
return path.join(defaultConfigDirectory(), CONFIG_FILE_NAME);
|
|
326
|
+
}
|
|
327
|
+
export async function loadConfig(configPath) {
|
|
328
|
+
const configFile = Bun.file(configPath);
|
|
329
|
+
if (!(await configFile.exists())) {
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
const content = await configFile.text();
|
|
333
|
+
try {
|
|
334
|
+
const parsed = JSON.parse(content);
|
|
335
|
+
if (!parsed.provider || !parsed.apiKey) {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
return {
|
|
339
|
+
provider: parsed.provider,
|
|
340
|
+
apiKey: parsed.apiKey,
|
|
341
|
+
model: parsed.model,
|
|
342
|
+
cloudflareAccountId: parsed.cloudflareAccountId,
|
|
343
|
+
lastUpdated: parsed.lastUpdated ?? new Date().toISOString(),
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
export async function saveConfig(configPath, config) {
|
|
351
|
+
const dirPath = path.dirname(configPath);
|
|
352
|
+
await mkdir(dirPath, { recursive: true });
|
|
353
|
+
const payload = JSON.stringify(config, null, 2);
|
|
354
|
+
await Bun.write(configPath, payload);
|
|
355
|
+
}
|
|
356
|
+
function envApiKey(provider) {
|
|
357
|
+
switch (provider) {
|
|
358
|
+
case 'openai':
|
|
359
|
+
return process.env.OPENAI_API_KEY;
|
|
360
|
+
case 'claude':
|
|
361
|
+
return process.env.ANTHROPIC_API_KEY;
|
|
362
|
+
case 'cloudflare':
|
|
363
|
+
return process.env.CLOUDFLARE_API_TOKEN;
|
|
364
|
+
default:
|
|
365
|
+
return undefined;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
export function mergeProviderContext(provider, storedConfig, overrides) {
|
|
369
|
+
const apiKey = overrides.apiKey ?? storedConfig.apiKey ?? envApiKey(provider);
|
|
370
|
+
if (!apiKey) {
|
|
371
|
+
throw new Error('API key is missing. Run with --init to configure credentials.');
|
|
372
|
+
}
|
|
373
|
+
return {
|
|
374
|
+
apiKey,
|
|
375
|
+
model: overrides.model ?? storedConfig.model,
|
|
376
|
+
cloudflareAccountId: storedConfig.cloudflareAccountId ?? process.env.CLOUDFLARE_ACCOUNT_ID,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
export async function runInteractiveSetup(current) {
|
|
380
|
+
const providerChoice = mustResolvePrompt(await select({
|
|
381
|
+
message: 'Select AI provider',
|
|
382
|
+
options: [
|
|
383
|
+
{ label: 'OpenAI', value: 'openai' },
|
|
384
|
+
{ label: 'Claude (Anthropic)', value: 'claude' },
|
|
385
|
+
{ label: 'Cloudflare Workers AI', value: 'cloudflare' },
|
|
386
|
+
],
|
|
387
|
+
initialValue: current?.provider,
|
|
388
|
+
}), 'Provider selection cancelled by user.');
|
|
389
|
+
const apiKeyValue = mustResolvePrompt(await password({
|
|
390
|
+
message: current?.apiKey && current.apiKey.trim().length > 0
|
|
391
|
+
? `Enter ${providerChoice} API key (press enter to keep existing)`
|
|
392
|
+
: `Enter ${providerChoice} API key`,
|
|
393
|
+
mask: '*',
|
|
394
|
+
validate(value) {
|
|
395
|
+
if (value.trim().length > 0) {
|
|
396
|
+
return undefined;
|
|
397
|
+
}
|
|
398
|
+
if (current?.apiKey && current.apiKey.trim().length > 0) {
|
|
399
|
+
return undefined;
|
|
400
|
+
}
|
|
401
|
+
return 'API key is required';
|
|
402
|
+
},
|
|
403
|
+
}), 'API key input cancelled by user.');
|
|
404
|
+
let cloudflareAccountId = current?.cloudflareAccountId;
|
|
405
|
+
if (providerChoice === 'cloudflare') {
|
|
406
|
+
cloudflareAccountId = mustResolvePrompt(await text({
|
|
407
|
+
message: 'Cloudflare account ID (required for Workers AI)',
|
|
408
|
+
initialValue: current?.cloudflareAccountId,
|
|
409
|
+
validate(value) {
|
|
410
|
+
return value.trim().length > 0
|
|
411
|
+
? undefined
|
|
412
|
+
: 'Cloudflare account ID is required';
|
|
413
|
+
},
|
|
414
|
+
}), 'Cloudflare account ID input cancelled by user.');
|
|
415
|
+
}
|
|
416
|
+
const modelValue = await promptForModel(providerChoice, (typeof apiKeyValue === 'string' ? apiKeyValue : '').trim() ||
|
|
417
|
+
current?.apiKey?.trim() ||
|
|
418
|
+
undefined, cloudflareAccountId?.trim() || undefined, current?.model);
|
|
419
|
+
return {
|
|
420
|
+
provider: providerChoice,
|
|
421
|
+
apiKey: (typeof apiKeyValue === 'string' ? apiKeyValue : '').trim() ||
|
|
422
|
+
current?.apiKey?.trim() ||
|
|
423
|
+
'',
|
|
424
|
+
model: modelValue,
|
|
425
|
+
cloudflareAccountId: cloudflareAccountId?.trim() || undefined,
|
|
426
|
+
lastUpdated: new Date().toISOString(),
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAUD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAoF1D"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
function defaultUserError(message) {
|
|
2
|
+
return {
|
|
3
|
+
title: 'Command failed',
|
|
4
|
+
details: message,
|
|
5
|
+
recovery: 'Re-run with --help for usage guidance.',
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function formatUserError(message) {
|
|
9
|
+
const normalized = message.trim();
|
|
10
|
+
if (normalized.includes('not a git repository')) {
|
|
11
|
+
return {
|
|
12
|
+
title: 'Not inside a git repository',
|
|
13
|
+
details: normalized,
|
|
14
|
+
recovery: 'Change into a repository folder and run the command again.',
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (normalized.includes('Commit hash appears invalid')) {
|
|
18
|
+
return {
|
|
19
|
+
title: 'Invalid commit hash format',
|
|
20
|
+
details: normalized,
|
|
21
|
+
recovery: 'Use a 7-40 character hexadecimal hash from `git log --oneline`.',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (normalized.includes('does not exist in this repository') ||
|
|
25
|
+
normalized.includes('No commits found after the provided commit hash')) {
|
|
26
|
+
return {
|
|
27
|
+
title: 'Commit range could not be analyzed',
|
|
28
|
+
details: normalized,
|
|
29
|
+
recovery: 'Verify the base commit using `git log --oneline` and choose an older hash.',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (normalized.includes('API key is missing')) {
|
|
33
|
+
return {
|
|
34
|
+
title: 'Missing provider credentials',
|
|
35
|
+
details: normalized,
|
|
36
|
+
recovery: 'Run `bun run src/index.ts --init` to configure credentials.',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (normalized.includes('Cloudflare account ID is missing')) {
|
|
40
|
+
return {
|
|
41
|
+
title: 'Cloudflare account ID required',
|
|
42
|
+
details: normalized,
|
|
43
|
+
recovery: 'Run `bun run src/index.ts --init` and provide your Cloudflare account ID.',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (normalized.includes('Cloudflare request failed')) {
|
|
47
|
+
return {
|
|
48
|
+
title: 'Cloudflare request failed',
|
|
49
|
+
details: normalized,
|
|
50
|
+
recovery: 'Check token/account/model settings, then run `bun run src/index.ts --init` to update configuration.',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (normalized.includes('Cloudflare response did not include analysis text')) {
|
|
54
|
+
return {
|
|
55
|
+
title: 'Cloudflare response could not be parsed',
|
|
56
|
+
details: normalized,
|
|
57
|
+
recovery: 'Pick a different Cloudflare model in `--init` (for example a `@cf/meta/...-instruct` model), then retry.',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (normalized.startsWith('Unknown flag:') ||
|
|
61
|
+
normalized.startsWith('Missing value for') ||
|
|
62
|
+
normalized.startsWith('Unsupported provider') ||
|
|
63
|
+
normalized.startsWith('Unsupported format')) {
|
|
64
|
+
return {
|
|
65
|
+
title: 'Invalid command arguments',
|
|
66
|
+
details: normalized,
|
|
67
|
+
recovery: 'Run `bun run src/index.ts --help` for valid options and examples.',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return defaultUserError(normalized);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAMA,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO;QACL,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,wCAAwC;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAElC,IAAI,UAAU,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAChD,OAAO;YACL,KAAK,EAAE,6BAA6B;YACpC,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,4DAA4D;SACvE,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACvD,OAAO;YACL,KAAK,EAAE,4BAA4B;YACnC,OAAO,EAAE,UAAU;YACnB,QAAQ,EACN,iEAAiE;SACpE,CAAC;IACJ,CAAC;IAED,IACE,UAAU,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACxD,UAAU,CAAC,QAAQ,CAAC,iDAAiD,CAAC,EACtE,CAAC;QACD,OAAO;YACL,KAAK,EAAE,oCAAoC;YAC3C,OAAO,EAAE,UAAU;YACnB,QAAQ,EACN,4EAA4E;SAC/E,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC9C,OAAO;YACL,KAAK,EAAE,8BAA8B;YACrC,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,6DAA6D;SACxE,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,CAAC;QAC5D,OAAO;YACL,KAAK,EAAE,gCAAgC;YACvC,OAAO,EAAE,UAAU;YACnB,QAAQ,EACN,2EAA2E;SAC9E,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC;QACrD,OAAO;YACL,KAAK,EAAE,2BAA2B;YAClC,OAAO,EAAE,UAAU;YACnB,QAAQ,EACN,qGAAqG;SACxG,CAAC;IACJ,CAAC;IAED,IACE,UAAU,CAAC,QAAQ,CAAC,mDAAmD,CAAC,EACxE,CAAC;QACD,OAAO;YACL,KAAK,EAAE,yCAAyC;YAChD,OAAO,EAAE,UAAU;YACnB,QAAQ,EACN,0GAA0G;SAC7G,CAAC;IACJ,CAAC;IAED,IACE,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC;QACtC,UAAU,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAC1C,UAAU,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAC7C,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAC3C,CAAC;QACD,OAAO;YACL,KAAK,EAAE,2BAA2B;YAClC,OAAO,EAAE,UAAU;YACnB,QAAQ,EACN,mEAAmE;SACtE,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACtC,CAAC"}
|
package/dist/git.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Commit } from './types';
|
|
2
|
+
export declare function assertGitRepository(): Promise<void>;
|
|
3
|
+
export declare function assertCommitExists(commitHash: string): Promise<string>;
|
|
4
|
+
export declare function collectCommitsAfter(commitHash: string): Promise<Commit[]>;
|
|
5
|
+
export declare function currentRepositoryPath(): string;
|
|
6
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA4BtC,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CASzD;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU5E;AAqDD,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C"}
|
package/dist/git.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
const HASH_REGEX = /^[a-f0-9]{7,40}$/i;
|
|
3
|
+
const RECORD_SEPARATOR = '\u001e';
|
|
4
|
+
const FIELD_SEPARATOR = '\u001f';
|
|
5
|
+
const MAX_DIFF_CHARS_PER_COMMIT = 12000;
|
|
6
|
+
function truncateDiff(diff) {
|
|
7
|
+
if (diff.length <= MAX_DIFF_CHARS_PER_COMMIT) {
|
|
8
|
+
return { value: diff, wasTruncated: false };
|
|
9
|
+
}
|
|
10
|
+
const trimmed = diff.slice(0, MAX_DIFF_CHARS_PER_COMMIT);
|
|
11
|
+
const suffix = '\n\n[diff truncated to keep analysis stable]';
|
|
12
|
+
return { value: `${trimmed}${suffix}`, wasTruncated: true };
|
|
13
|
+
}
|
|
14
|
+
function normalizeHash(commitHash) {
|
|
15
|
+
const hash = commitHash.trim();
|
|
16
|
+
if (!HASH_REGEX.test(hash)) {
|
|
17
|
+
throw new Error('Commit hash appears invalid. Provide a 7-40 character hexadecimal hash.');
|
|
18
|
+
}
|
|
19
|
+
return hash;
|
|
20
|
+
}
|
|
21
|
+
export async function assertGitRepository() {
|
|
22
|
+
try {
|
|
23
|
+
const result = await Bun.$ `git rev-parse --is-inside-work-tree`.text();
|
|
24
|
+
if (result.trim() !== 'true') {
|
|
25
|
+
throw new Error();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
throw new Error('Current directory is not a git repository.');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function assertCommitExists(commitHash) {
|
|
33
|
+
const normalized = normalizeHash(commitHash);
|
|
34
|
+
try {
|
|
35
|
+
await Bun.$ `git cat-file -e ${normalized}^{commit}`.quiet();
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
throw new Error(`Commit ${normalized} does not exist in this repository.`);
|
|
39
|
+
}
|
|
40
|
+
return normalized;
|
|
41
|
+
}
|
|
42
|
+
async function getCommitMetadata(afterCommit) {
|
|
43
|
+
const range = `${afterCommit}..HEAD`;
|
|
44
|
+
const format = '%H%x1f%an%x1f%ad%x1f%s%x1f%b%x1e';
|
|
45
|
+
const output = await Bun.$ `git log ${range} --date=iso-strict --pretty=format:${format}`.text();
|
|
46
|
+
const rows = output
|
|
47
|
+
.split(RECORD_SEPARATOR)
|
|
48
|
+
.map((chunk) => chunk.trim())
|
|
49
|
+
.filter((chunk) => chunk.length > 0);
|
|
50
|
+
return rows.map((row) => {
|
|
51
|
+
const [hash, author, date, title, body] = row.split(FIELD_SEPARATOR);
|
|
52
|
+
if (!hash || !author || !date || !title) {
|
|
53
|
+
throw new Error('Failed to parse git log output.');
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
hash,
|
|
57
|
+
author,
|
|
58
|
+
date,
|
|
59
|
+
title,
|
|
60
|
+
body: body ?? '',
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async function getDiffForCommit(commitHash) {
|
|
65
|
+
const rawDiff = await Bun.$ `git show --format= --patch --find-renames --no-color ${commitHash}`.text();
|
|
66
|
+
const truncated = truncateDiff(rawDiff);
|
|
67
|
+
return {
|
|
68
|
+
diff: truncated.value,
|
|
69
|
+
diffWasTruncated: truncated.wasTruncated,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export async function collectCommitsAfter(commitHash) {
|
|
73
|
+
const metadata = await getCommitMetadata(commitHash);
|
|
74
|
+
if (metadata.length === 0) {
|
|
75
|
+
throw new Error('No commits found after the provided commit hash.');
|
|
76
|
+
}
|
|
77
|
+
const commits = [];
|
|
78
|
+
for (const entry of metadata) {
|
|
79
|
+
const diffResult = await getDiffForCommit(entry.hash);
|
|
80
|
+
commits.push({
|
|
81
|
+
hash: entry.hash,
|
|
82
|
+
author: entry.author,
|
|
83
|
+
date: entry.date,
|
|
84
|
+
title: entry.title,
|
|
85
|
+
body: entry.body,
|
|
86
|
+
diff: diffResult.diff,
|
|
87
|
+
diffWasTruncated: diffResult.diffWasTruncated,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return commits;
|
|
91
|
+
}
|
|
92
|
+
export function currentRepositoryPath() {
|
|
93
|
+
return path.resolve(process.cwd());
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=git.js.map
|
package/dist/git.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|