git-history-ui 2.0.3 → 3.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/CHANGELOG.md +98 -0
- package/README.md +75 -13
- package/build/frontend/chunk-36NFLS3P.js +1 -0
- package/build/frontend/chunk-3BORCJKI.js +2 -0
- package/build/frontend/chunk-3FFYILBL.js +1 -0
- package/build/frontend/chunk-B7ZU76GM.js +1 -0
- package/build/frontend/chunk-HQV5AEMT.js +3 -0
- package/build/frontend/chunk-ITIFFECZ.js +1 -0
- package/build/frontend/chunk-N7UHDKJ7.js +1 -0
- package/build/frontend/chunk-NUMLL3OZ.js +1 -0
- package/build/frontend/chunk-QUDEGJKI.js +1 -0
- package/build/frontend/chunk-R33W2FKN.js +7 -0
- package/build/frontend/chunk-TQE5NWMZ.js +5 -0
- package/build/frontend/chunk-TQVUSJBM.js +1 -0
- package/build/frontend/chunk-YSTG766K.js +1 -0
- package/build/frontend/index.html +2 -2
- package/build/frontend/main-6LGPRO6C.js +1 -0
- package/build/frontend/styles-BOEVKAI2.css +1 -0
- package/dist/backend/aggregations.d.ts +57 -0
- package/dist/backend/aggregations.js +130 -0
- package/dist/backend/aggregations.js.map +1 -0
- package/dist/backend/annotations.d.ts +30 -0
- package/dist/backend/annotations.js +90 -0
- package/dist/backend/annotations.js.map +1 -0
- package/dist/backend/gitService.d.ts +14 -0
- package/dist/backend/gitService.js +81 -0
- package/dist/backend/gitService.js.map +1 -1
- package/dist/backend/grouping/prGrouping.d.ts +39 -0
- package/dist/backend/grouping/prGrouping.js +210 -0
- package/dist/backend/grouping/prGrouping.js.map +1 -0
- package/dist/backend/impact.d.ts +16 -0
- package/dist/backend/impact.js +66 -0
- package/dist/backend/impact.js.map +1 -0
- package/dist/backend/insights.d.ts +9 -0
- package/dist/backend/insights.js +44 -0
- package/dist/backend/insights.js.map +1 -0
- package/dist/backend/llm/anthropicProvider.d.ts +13 -0
- package/dist/backend/llm/anthropicProvider.js +90 -0
- package/dist/backend/llm/anthropicProvider.js.map +1 -0
- package/dist/backend/llm/heuristicProvider.d.ts +15 -0
- package/dist/backend/llm/heuristicProvider.js +127 -0
- package/dist/backend/llm/heuristicProvider.js.map +1 -0
- package/dist/backend/llm/index.d.ts +17 -0
- package/dist/backend/llm/index.js +66 -0
- package/dist/backend/llm/index.js.map +1 -0
- package/dist/backend/llm/openaiProvider.d.ts +13 -0
- package/dist/backend/llm/openaiProvider.js +100 -0
- package/dist/backend/llm/openaiProvider.js.map +1 -0
- package/dist/backend/llm/types.d.ts +32 -0
- package/dist/backend/llm/types.js +3 -0
- package/dist/backend/llm/types.js.map +1 -0
- package/dist/backend/search/datePhrase.d.ts +20 -0
- package/dist/backend/search/datePhrase.js +113 -0
- package/dist/backend/search/datePhrase.js.map +1 -0
- package/dist/backend/search/nlSearch.d.ts +39 -0
- package/dist/backend/search/nlSearch.js +90 -0
- package/dist/backend/search/nlSearch.js.map +1 -0
- package/dist/backend/server.d.ts +3 -0
- package/dist/backend/server.js +137 -2
- package/dist/backend/server.js.map +1 -1
- package/dist/backend/snapshot.d.ts +16 -0
- package/dist/backend/snapshot.js +42 -0
- package/dist/backend/snapshot.js.map +1 -0
- package/docs/launch.md +66 -0
- package/package.json +12 -3
- package/build/frontend/main-VDZAFLAV.js +0 -11
- package/build/frontend/styles-CO6MLMTR.css +0 -1
|
@@ -213,6 +213,79 @@ class GitService {
|
|
|
213
213
|
}
|
|
214
214
|
return parseUnifiedDiff(raw);
|
|
215
215
|
}
|
|
216
|
+
async getRangeDiff(from, to) {
|
|
217
|
+
if (!isPlausibleHash(from) || !isPlausibleHash(to)) {
|
|
218
|
+
throw new Error('Invalid commit hash');
|
|
219
|
+
}
|
|
220
|
+
const raw = await this.git(['diff', '-M', '--no-color', from, to], {
|
|
221
|
+
maxBuffer: 64 * 1024 * 1024
|
|
222
|
+
});
|
|
223
|
+
return parseUnifiedDiff(raw);
|
|
224
|
+
}
|
|
225
|
+
/** Resolve any ref (branch/tag/HEAD) to its commit at or before `atIso`. */
|
|
226
|
+
async revAt(ref, atIso) {
|
|
227
|
+
if (!isSafeRef(ref))
|
|
228
|
+
throw new Error('Invalid ref');
|
|
229
|
+
if (!isIsoLikeDate(atIso))
|
|
230
|
+
throw new Error('Invalid date');
|
|
231
|
+
try {
|
|
232
|
+
const out = await this.git([
|
|
233
|
+
'rev-list',
|
|
234
|
+
'-1',
|
|
235
|
+
`--before=${atIso}`,
|
|
236
|
+
ref
|
|
237
|
+
]);
|
|
238
|
+
const hash = out.trim();
|
|
239
|
+
return hash || null;
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/** Origin URL of the first remote (typically `origin`). */
|
|
246
|
+
async getRemoteUrl(name = 'origin') {
|
|
247
|
+
const out = await this.git(['remote', 'get-url', name]);
|
|
248
|
+
return out.trim();
|
|
249
|
+
}
|
|
250
|
+
async getFileStats(filePath) {
|
|
251
|
+
if (filePath.includes('\0'))
|
|
252
|
+
throw new Error('Invalid path');
|
|
253
|
+
const out = await this.git([
|
|
254
|
+
'log',
|
|
255
|
+
'--follow',
|
|
256
|
+
'--pretty=format:%aI%x1f%an',
|
|
257
|
+
'--',
|
|
258
|
+
filePath
|
|
259
|
+
]);
|
|
260
|
+
const dates = [];
|
|
261
|
+
const authors = new Set();
|
|
262
|
+
for (const line of out.split('\n')) {
|
|
263
|
+
const trimmed = line.trim();
|
|
264
|
+
if (!trimmed)
|
|
265
|
+
continue;
|
|
266
|
+
const [date, author] = trimmed.split('\x1f');
|
|
267
|
+
if (date)
|
|
268
|
+
dates.push(date);
|
|
269
|
+
if (author)
|
|
270
|
+
authors.add(author);
|
|
271
|
+
}
|
|
272
|
+
dates.sort();
|
|
273
|
+
return {
|
|
274
|
+
file: filePath,
|
|
275
|
+
firstSeen: dates[0] ?? '',
|
|
276
|
+
lastTouched: dates[dates.length - 1] ?? '',
|
|
277
|
+
totalCommits: dates.length,
|
|
278
|
+
contributors: Array.from(authors).sort((a, b) => a.localeCompare(b))
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
/** Read the contents of a file at a specific commit. */
|
|
282
|
+
async getFileAtCommit(hash, filePath) {
|
|
283
|
+
if (!isPlausibleHash(hash))
|
|
284
|
+
throw new Error('Invalid commit hash');
|
|
285
|
+
if (filePath.includes('\0'))
|
|
286
|
+
throw new Error('Invalid path');
|
|
287
|
+
return this.git(['show', `${hash}:${filePath}`], { maxBuffer: 16 * 1024 * 1024 });
|
|
288
|
+
}
|
|
216
289
|
async getBlame(filePath) {
|
|
217
290
|
if (filePath.includes('\0'))
|
|
218
291
|
throw new Error('Invalid path');
|
|
@@ -258,6 +331,14 @@ exports.GitService = GitService;
|
|
|
258
331
|
function isPlausibleHash(hash) {
|
|
259
332
|
return typeof hash === 'string' && /^[0-9a-fA-F]{4,40}$/.test(hash);
|
|
260
333
|
}
|
|
334
|
+
function isSafeRef(ref) {
|
|
335
|
+
// Allow alphanumerics, slash, dot, dash, underscore, plus HEAD shorthand chars.
|
|
336
|
+
return typeof ref === 'string' && /^[A-Za-z0-9_./@^~+-]{1,200}$/.test(ref);
|
|
337
|
+
}
|
|
338
|
+
function isIsoLikeDate(s) {
|
|
339
|
+
// Accept YYYY-MM-DD or full ISO-8601, plus a small set of git-friendly relative tokens.
|
|
340
|
+
return typeof s === 'string' && /^[0-9T:Z+\-.\s]{4,40}$/.test(s);
|
|
341
|
+
}
|
|
261
342
|
function clamp(value, min, max) {
|
|
262
343
|
return Math.max(min, Math.min(max, value));
|
|
263
344
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitService.js","sourceRoot":"","sources":["../../src/backend/gitService.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AACzC,+BAAiC;AAEjC,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,wBAAQ,CAAC,CAAC;AAiE1C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,gDAAgD;AAC1E,MAAM,UAAU,GAAG,MAAM,CAAC;AAC1B,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEvF,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAa,mBAAoB,SAAQ,KAAK;IAC5C;QACE,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC;AAED,MAAa,UAAU;IACb,QAAQ,CAAS;IACjB,aAAa,GAAoB,IAAI,CAAC;IACtC,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;IAChD,eAAe,GAAmB,IAAI,CAAC;IAE/C,YAAY,WAAmB,OAAO,CAAC,GAAG,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,aAAa,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,gBAAgB,EAAE,CAAC;YAC9E,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoB,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEjD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;YACzB,cAAc;YACd,sDAAsD;YACtD,YAAY;YACZ,WAAW;YACX,cAAc;SACf,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;gBAAE,SAAS;YAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,EAAE,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC,aAAa,CAAC;QAE1B,SAAS,IAAI,CAAC,GAA0B,EAAE,GAAW,EAAE,KAAa;YAClE,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;gBACtB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAsB,EAAE;QACvC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,mBAAmB,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;QAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;QAE5D,MAAM,IAAI,GAAG;YACX,KAAK;YACL,eAAe,QAAQ,EAAE;YACzB,UAAU,IAAI,EAAE;YAChB,mBAAmB,UAAU,GAAG,UAAU,EAAE;YAC5C,GAAG,UAAU;SACd,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEzC,OAAO;YACL,OAAO;YACP,KAAK;YACL,IAAI;YACJ,QAAQ;YACR,UAAU;YACV,OAAO,EAAE,IAAI,GAAG,UAAU;YAC1B,WAAW,EAAE,IAAI,GAAG,CAAC;SACtB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,UAAoB;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,GAAG;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;QAE1D,4EAA4E;QAC5E,6EAA6E;QAC7E,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GACX,MAAM,IAAI,CAAC;YACT,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,MAAM,CAAC,CAAC;QAE9B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;YAChE,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACrF,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,GAAG,kBAAkB,EAAE,CAAC,CAAC;QAC9E,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,eAAe,CAAC,OAAmB;QACzC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAClF,IAAI,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,QAAQ,CAAC,GAAW,EAAE,IAAc;QAC1C,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAEhC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;YAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAE/C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,SAAS;gBACT,MAAM;gBACN,WAAW;gBACX,IAAI;gBACJ,OAAO;gBACP,IAAI;gBACJ,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO;gBACjD,OAAO;gBACP,QAAQ;gBACR,IAAI;gBACJ,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;YACzB,KAAK;YACL,eAAe;YACf,mBAAmB,UAAU,GAAG,UAAU,EAAE;YAC5C,IAAI;SACL,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC9D,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAEnE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE/D,IAAI,GAAW,CAAC;QAChB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAC7B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrE,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9C,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;YACzB,cAAc;YACd,2BAA2B;YAC3B,YAAY;YACZ,cAAc;SACf,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,OAA+B,EAAE;QACjE,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;gBAClD,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;gBAC7C,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;oBACd,SAAS,EAAE,KAAK;oBAChB,mBAAmB,EAAE,GAAG;oBACxB,MAAM,EAAE,GAAG;iBACZ;gBACD,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,GAAkD,CAAC;YAC7D,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;CACF;AA3PD,gCA2PC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAEvB,IAAI,OAAO,GAAoB,IAAI,CAAC;IACpC,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,GAAG,IAAI,CAAC;QACf,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,KAAK,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC3D,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,GAAG;gBACR,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;gBAClB,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAChC,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAC3B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAC3B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACxD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACnD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;YAC1B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACtD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC;IAER,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAA6C,CAAC;IAElE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClB,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC,EAAE,CAAC;QAEJ,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;QAC1C,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QAEvC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBAChD,IAAI,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC;gBAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7E,CAAC,EAAE,CAAC;QACN,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,UAAU;YAChB,IAAI;YACJ,MAAM;YACN,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;YACvD,OAAO;SACR,CAAC,CAAC;QACH,CAAC,EAAE,CAAC;IACN,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"gitService.js","sourceRoot":"","sources":["../../src/backend/gitService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { GitService } from '../gitService';
|
|
2
|
+
export interface CommitGroup {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
prNumber?: number;
|
|
6
|
+
source: 'merge' | 'squash' | 'conventional' | 'standalone';
|
|
7
|
+
scope?: string;
|
|
8
|
+
type?: string;
|
|
9
|
+
commits: string[];
|
|
10
|
+
filesTouched: number;
|
|
11
|
+
additions: number;
|
|
12
|
+
deletions: number;
|
|
13
|
+
firstDate: string;
|
|
14
|
+
lastDate: string;
|
|
15
|
+
authors: string[];
|
|
16
|
+
pr?: PrInfo;
|
|
17
|
+
}
|
|
18
|
+
export interface PrInfo {
|
|
19
|
+
number: number;
|
|
20
|
+
title: string;
|
|
21
|
+
author: string;
|
|
22
|
+
url: string;
|
|
23
|
+
labels: string[];
|
|
24
|
+
state: 'open' | 'closed' | 'merged';
|
|
25
|
+
}
|
|
26
|
+
export interface GroupingOptions {
|
|
27
|
+
since?: string;
|
|
28
|
+
until?: string;
|
|
29
|
+
author?: string;
|
|
30
|
+
/** When set + remote is GitHub, fetch PR metadata. */
|
|
31
|
+
githubToken?: string;
|
|
32
|
+
/** Cap to keep result responsive on huge repos. */
|
|
33
|
+
maxCommits?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Group commits by PR or feature using pure heuristics. Optionally enrich
|
|
37
|
+
* with PR metadata if a GitHub token is provided and the remote is on GitHub.
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildCommitGroups(gitService: GitService, opts?: GroupingOptions): Promise<CommitGroup[]>;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildCommitGroups = buildCommitGroups;
|
|
4
|
+
const MERGE_PR_RE = /^Merge pull request #(\d+) from (\S+)/;
|
|
5
|
+
const SQUASH_PR_RE = /\(#(\d+)\)\s*$/;
|
|
6
|
+
const CONVENTIONAL_RE = /^(\w+)(?:\(([^)]+)\))?(!?):\s*(.+)$/;
|
|
7
|
+
/**
|
|
8
|
+
* Group commits by PR or feature using pure heuristics. Optionally enrich
|
|
9
|
+
* with PR metadata if a GitHub token is provided and the remote is on GitHub.
|
|
10
|
+
*/
|
|
11
|
+
async function buildCommitGroups(gitService, opts = {}) {
|
|
12
|
+
const maxCommits = opts.maxCommits ?? 1000;
|
|
13
|
+
const page = await gitService.getCommits({
|
|
14
|
+
since: opts.since,
|
|
15
|
+
until: opts.until,
|
|
16
|
+
author: opts.author,
|
|
17
|
+
page: 1,
|
|
18
|
+
pageSize: maxCommits
|
|
19
|
+
});
|
|
20
|
+
const commits = page.commits;
|
|
21
|
+
const byHash = new Map(commits.map((c) => [c.hash, c]));
|
|
22
|
+
const groupedHashes = new Set();
|
|
23
|
+
const groups = [];
|
|
24
|
+
// Pass 1: GitHub-style merge commits.
|
|
25
|
+
for (const c of commits) {
|
|
26
|
+
if (!c.isMerge)
|
|
27
|
+
continue;
|
|
28
|
+
const m = c.subject.match(MERGE_PR_RE);
|
|
29
|
+
if (!m)
|
|
30
|
+
continue;
|
|
31
|
+
const prNumber = parseInt(m[1], 10);
|
|
32
|
+
// Walk the second-parent chain until we hit a commit already on the trunk.
|
|
33
|
+
const chain = walkSecondParent(c, byHash);
|
|
34
|
+
const memberHashes = [c.hash, ...chain.map((x) => x.hash)];
|
|
35
|
+
for (const h of memberHashes)
|
|
36
|
+
groupedHashes.add(h);
|
|
37
|
+
const title = stripMerge(c.body) || stripMerge(c.subject) || `PR #${prNumber}`;
|
|
38
|
+
groups.push(buildGroup(memberHashes, byHash, {
|
|
39
|
+
id: `pr-${prNumber}`,
|
|
40
|
+
title,
|
|
41
|
+
prNumber,
|
|
42
|
+
source: 'merge'
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
// Pass 2: squash-merge commits with trailing (#N).
|
|
46
|
+
for (const c of commits) {
|
|
47
|
+
if (groupedHashes.has(c.hash))
|
|
48
|
+
continue;
|
|
49
|
+
const m = c.subject.match(SQUASH_PR_RE);
|
|
50
|
+
if (!m)
|
|
51
|
+
continue;
|
|
52
|
+
const prNumber = parseInt(m[1], 10);
|
|
53
|
+
groupedHashes.add(c.hash);
|
|
54
|
+
groups.push(buildGroup([c.hash], byHash, {
|
|
55
|
+
id: `pr-${prNumber}`,
|
|
56
|
+
title: c.subject.replace(SQUASH_PR_RE, '').trim(),
|
|
57
|
+
prNumber,
|
|
58
|
+
source: 'squash'
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
// Pass 3: conventional commits — group by type+scope.
|
|
62
|
+
const conventionalBuckets = new Map();
|
|
63
|
+
const conventionalMeta = new Map();
|
|
64
|
+
for (const c of commits) {
|
|
65
|
+
if (groupedHashes.has(c.hash))
|
|
66
|
+
continue;
|
|
67
|
+
const m = c.subject.match(CONVENTIONAL_RE);
|
|
68
|
+
if (!m)
|
|
69
|
+
continue;
|
|
70
|
+
const type = m[1].toLowerCase();
|
|
71
|
+
const scope = m[2];
|
|
72
|
+
const title = m[4];
|
|
73
|
+
const key = `${type}:${scope ?? '_'}`;
|
|
74
|
+
if (!conventionalBuckets.has(key)) {
|
|
75
|
+
conventionalBuckets.set(key, []);
|
|
76
|
+
conventionalMeta.set(key, { type, scope, title });
|
|
77
|
+
}
|
|
78
|
+
conventionalBuckets.get(key).push(c.hash);
|
|
79
|
+
groupedHashes.add(c.hash);
|
|
80
|
+
}
|
|
81
|
+
for (const [key, hashes] of conventionalBuckets) {
|
|
82
|
+
if (hashes.length < 2) {
|
|
83
|
+
// Single-commit "groups" stay as standalones for clarity.
|
|
84
|
+
groupedHashes.delete(hashes[0]);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const meta = conventionalMeta.get(key);
|
|
88
|
+
groups.push(buildGroup(hashes, byHash, {
|
|
89
|
+
id: `conv-${key}`,
|
|
90
|
+
title: `${meta.type}${meta.scope ? `(${meta.scope})` : ''}: ${hashes.length} commits`,
|
|
91
|
+
source: 'conventional',
|
|
92
|
+
type: meta.type,
|
|
93
|
+
scope: meta.scope
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
// Pass 4: any remaining commits become standalone "groups" of one.
|
|
97
|
+
for (const c of commits) {
|
|
98
|
+
if (groupedHashes.has(c.hash))
|
|
99
|
+
continue;
|
|
100
|
+
groups.push(buildGroup([c.hash], byHash, {
|
|
101
|
+
id: `c-${c.shortHash}`,
|
|
102
|
+
title: c.subject,
|
|
103
|
+
source: 'standalone'
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
// Sort by lastDate desc.
|
|
107
|
+
groups.sort((a, b) => b.lastDate.localeCompare(a.lastDate));
|
|
108
|
+
// Optional PR enrichment.
|
|
109
|
+
if (opts.githubToken) {
|
|
110
|
+
const remote = await gitService.getRemoteUrl().catch(() => null);
|
|
111
|
+
const slug = remote ? parseGithubSlug(remote) : null;
|
|
112
|
+
if (slug) {
|
|
113
|
+
await enrichWithPrInfo(groups, slug, opts.githubToken);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return groups;
|
|
117
|
+
}
|
|
118
|
+
function walkSecondParent(merge, byHash) {
|
|
119
|
+
// Heuristic: follow the second parent until we hit a commit reachable from the first parent.
|
|
120
|
+
// Without a graph traversal we approximate: take up to 30 commits down second-parent, stopping
|
|
121
|
+
// when a commit has fewer parents (root of feature branch) or we've seen a merge.
|
|
122
|
+
const out = [];
|
|
123
|
+
if (merge.parents.length < 2)
|
|
124
|
+
return out;
|
|
125
|
+
let cur = byHash.get(merge.parents[1]);
|
|
126
|
+
let safety = 30;
|
|
127
|
+
while (cur && safety-- > 0) {
|
|
128
|
+
out.push(cur);
|
|
129
|
+
if (cur.parents.length === 0 || cur.isMerge)
|
|
130
|
+
break;
|
|
131
|
+
cur = byHash.get(cur.parents[0]);
|
|
132
|
+
}
|
|
133
|
+
return out;
|
|
134
|
+
}
|
|
135
|
+
function stripMerge(text) {
|
|
136
|
+
return text
|
|
137
|
+
.replace(/^Merge pull request #\d+ from \S+\s*/i, '')
|
|
138
|
+
.replace(/\n+/g, ' ')
|
|
139
|
+
.trim();
|
|
140
|
+
}
|
|
141
|
+
function buildGroup(hashes, byHash, meta) {
|
|
142
|
+
const cs = hashes.map((h) => byHash.get(h)).filter((c) => !!c);
|
|
143
|
+
const dates = cs.map((c) => c.date).sort();
|
|
144
|
+
const authors = Array.from(new Set(cs.map((c) => c.author)));
|
|
145
|
+
// We don't have file/line counts at this layer (would need diff per commit).
|
|
146
|
+
// Fill with zeros; the impact endpoint can fill these in client-side on demand.
|
|
147
|
+
return {
|
|
148
|
+
...meta,
|
|
149
|
+
commits: hashes,
|
|
150
|
+
filesTouched: 0,
|
|
151
|
+
additions: 0,
|
|
152
|
+
deletions: 0,
|
|
153
|
+
firstDate: dates[0] ?? '',
|
|
154
|
+
lastDate: dates[dates.length - 1] ?? '',
|
|
155
|
+
authors
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const GH_SLUG_RE = /github\.com[:/]([^/]+)\/([^/.]+)(?:\.git)?$/;
|
|
159
|
+
function parseGithubSlug(remote) {
|
|
160
|
+
const m = remote.match(GH_SLUG_RE);
|
|
161
|
+
if (!m)
|
|
162
|
+
return null;
|
|
163
|
+
return { owner: m[1], repo: m[2] };
|
|
164
|
+
}
|
|
165
|
+
async function enrichWithPrInfo(groups, slug, token) {
|
|
166
|
+
const cache = new Map();
|
|
167
|
+
const fetchOne = async (n) => {
|
|
168
|
+
if (cache.has(n))
|
|
169
|
+
return cache.get(n) ?? null;
|
|
170
|
+
try {
|
|
171
|
+
const resp = await fetch(`https://api.github.com/repos/${slug.owner}/${slug.repo}/pulls/${n}`, {
|
|
172
|
+
headers: {
|
|
173
|
+
Authorization: `Bearer ${token}`,
|
|
174
|
+
Accept: 'application/vnd.github+json',
|
|
175
|
+
'User-Agent': 'git-history-ui'
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
if (!resp.ok) {
|
|
179
|
+
cache.set(n, null);
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
const j = (await resp.json());
|
|
183
|
+
const pr = {
|
|
184
|
+
number: j.number,
|
|
185
|
+
title: j.title,
|
|
186
|
+
author: j.user?.login ?? 'unknown',
|
|
187
|
+
url: j.html_url,
|
|
188
|
+
labels: (j.labels ?? []).map((l) => l.name ?? '').filter(Boolean),
|
|
189
|
+
state: j.merged_at ? 'merged' : j.state
|
|
190
|
+
};
|
|
191
|
+
cache.set(n, pr);
|
|
192
|
+
return pr;
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
cache.set(n, null);
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
await Promise.all(groups
|
|
200
|
+
.filter((g) => typeof g.prNumber === 'number')
|
|
201
|
+
.map(async (g) => {
|
|
202
|
+
const info = await fetchOne(g.prNumber);
|
|
203
|
+
if (info) {
|
|
204
|
+
g.pr = info;
|
|
205
|
+
if (g.title === `PR #${g.prNumber}`)
|
|
206
|
+
g.title = info.title;
|
|
207
|
+
}
|
|
208
|
+
}));
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=prGrouping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prGrouping.js","sourceRoot":"","sources":["../../../src/backend/grouping/prGrouping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { GitService } from './gitService';
|
|
2
|
+
export interface CommitImpact {
|
|
3
|
+
hash: string;
|
|
4
|
+
files: string[];
|
|
5
|
+
modules: string[];
|
|
6
|
+
dependencyRipple: Array<{
|
|
7
|
+
from: string;
|
|
8
|
+
to: string;
|
|
9
|
+
}>;
|
|
10
|
+
relatedCommits: Array<{
|
|
11
|
+
hash: string;
|
|
12
|
+
subject: string;
|
|
13
|
+
date: string;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
export declare function getCommitImpact(gitService: GitService, hash: string): Promise<CommitImpact>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getCommitImpact = getCommitImpact;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const IMPORT_RE = /(?:import\s.*?from\s+|require\s*\(\s*|import\s*\(\s*)['"]([^'"\n]+)['"]/g;
|
|
9
|
+
const SUPPORTED_EXTS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts']);
|
|
10
|
+
const RELATED_LIMIT = 10;
|
|
11
|
+
const RIPPLE_FILE_LIMIT = 10;
|
|
12
|
+
async function getCommitImpact(gitService, hash) {
|
|
13
|
+
const diff = await gitService.getDiff(hash);
|
|
14
|
+
const files = diff.map((d) => d.file);
|
|
15
|
+
const modules = Array.from(new Set(files.map(detectModule))).sort();
|
|
16
|
+
// Cheap dependency ripple: parse `import`/`require` from the post-state of changed files.
|
|
17
|
+
const dependencyRipple = [];
|
|
18
|
+
const sampled = files.filter((f) => SUPPORTED_EXTS.has(path_1.default.extname(f))).slice(0, RIPPLE_FILE_LIMIT);
|
|
19
|
+
for (const file of sampled) {
|
|
20
|
+
const content = await gitService.getFileAtCommit(hash, file).catch(() => '');
|
|
21
|
+
if (!content)
|
|
22
|
+
continue;
|
|
23
|
+
const seen = new Set();
|
|
24
|
+
let m;
|
|
25
|
+
IMPORT_RE.lastIndex = 0;
|
|
26
|
+
while ((m = IMPORT_RE.exec(content)) !== null) {
|
|
27
|
+
const target = m[1];
|
|
28
|
+
if (!target.startsWith('.'))
|
|
29
|
+
continue; // ignore externals
|
|
30
|
+
const resolved = path_1.default.posix.normalize(path_1.default.posix.join(path_1.default.posix.dirname(file), target));
|
|
31
|
+
if (seen.has(resolved))
|
|
32
|
+
continue;
|
|
33
|
+
seen.add(resolved);
|
|
34
|
+
dependencyRipple.push({ from: file, to: resolved });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Related commits: commits that have touched any of the files modified here.
|
|
38
|
+
const relatedHashes = new Map();
|
|
39
|
+
for (const file of files.slice(0, 5)) {
|
|
40
|
+
const page = await gitService
|
|
41
|
+
.getCommits({ file, page: 1, pageSize: 8 })
|
|
42
|
+
.catch(() => null);
|
|
43
|
+
if (!page)
|
|
44
|
+
continue;
|
|
45
|
+
for (const c of page.commits) {
|
|
46
|
+
if (c.hash === hash)
|
|
47
|
+
continue;
|
|
48
|
+
if (!relatedHashes.has(c.hash)) {
|
|
49
|
+
relatedHashes.set(c.hash, { subject: c.subject, date: c.date });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const relatedCommits = Array.from(relatedHashes.entries())
|
|
54
|
+
.map(([h, info]) => ({ hash: h, ...info }))
|
|
55
|
+
.sort((a, b) => b.date.localeCompare(a.date))
|
|
56
|
+
.slice(0, RELATED_LIMIT);
|
|
57
|
+
return { hash, files, modules, dependencyRipple, relatedCommits };
|
|
58
|
+
}
|
|
59
|
+
function detectModule(file) {
|
|
60
|
+
const parts = file.split('/');
|
|
61
|
+
if (parts.length === 1)
|
|
62
|
+
return '(root)';
|
|
63
|
+
// src/backend/foo.ts -> "src/backend"; frontend/src/app/components/x/y.ts -> "frontend/src/app/components/x"
|
|
64
|
+
return parts.slice(0, Math.min(parts.length - 1, 3)).join('/');
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=impact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/backend/impact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type InsightsBundle } from './aggregations';
|
|
2
|
+
import type { GitService } from './gitService';
|
|
3
|
+
export interface InsightsOptions {
|
|
4
|
+
since?: string;
|
|
5
|
+
until?: string;
|
|
6
|
+
/** Cap on commits scanned to keep dashboards responsive. */
|
|
7
|
+
maxCommits?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function computeInsights(gitService: GitService, opts?: InsightsOptions): Promise<InsightsBundle>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeInsights = computeInsights;
|
|
4
|
+
const aggregations_1 = require("./aggregations");
|
|
5
|
+
const CONCURRENCY = 6;
|
|
6
|
+
async function computeInsights(gitService, opts = {}) {
|
|
7
|
+
const maxCommits = Math.min(2000, Math.max(50, opts.maxCommits ?? 500));
|
|
8
|
+
const page = await gitService.getCommits({
|
|
9
|
+
since: opts.since,
|
|
10
|
+
until: opts.until,
|
|
11
|
+
page: 1,
|
|
12
|
+
pageSize: maxCommits
|
|
13
|
+
});
|
|
14
|
+
const commits = page.commits;
|
|
15
|
+
// Fan out diffs with bounded concurrency.
|
|
16
|
+
const pairs = [];
|
|
17
|
+
let cursor = 0;
|
|
18
|
+
await Promise.all(Array.from({ length: CONCURRENCY }, async () => {
|
|
19
|
+
while (cursor < commits.length) {
|
|
20
|
+
const i = cursor++;
|
|
21
|
+
const commit = commits[i];
|
|
22
|
+
const files = await gitService.getDiff(commit.hash).catch(() => []);
|
|
23
|
+
pairs.push({ commit, files });
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
const contributors = (0, aggregations_1.computeContributorStats)(commits).slice(0, 15);
|
|
27
|
+
const churn = (0, aggregations_1.computeFileChurn)(pairs);
|
|
28
|
+
const churnByDay = (0, aggregations_1.computeChurnByDay)(pairs);
|
|
29
|
+
const risky = (0, aggregations_1.computeRiskyFiles)(churn);
|
|
30
|
+
const sortedDates = commits.map((c) => c.date).sort();
|
|
31
|
+
const windowStart = sortedDates[0] ?? null;
|
|
32
|
+
const windowEnd = sortedDates[sortedDates.length - 1] ?? null;
|
|
33
|
+
return {
|
|
34
|
+
windowStart,
|
|
35
|
+
windowEnd,
|
|
36
|
+
totalCommits: commits.length,
|
|
37
|
+
totalAuthors: new Set(commits.map((c) => c.authorEmail || c.author)).size,
|
|
38
|
+
topContributors: contributors,
|
|
39
|
+
hotspots: churn.slice(0, 20),
|
|
40
|
+
churnByDay,
|
|
41
|
+
riskyFiles: risky
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=insights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insights.js","sourceRoot":"","sources":["../../src/backend/insights.ts"],"names":[],"mappings":";;AAkBA,0CA8CC;AAhED,iDAMwB;AAUxB,MAAM,WAAW,GAAG,CAAC,CAAC;AAEf,KAAK,UAAU,eAAe,CACnC,UAAsB,EACtB,OAAwB,EAAE;IAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC;QACvC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,UAAU;KACrB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAE7B,0CAA0C;IAC1C,MAAM,KAAK,GAAuG,EAAE,CAAC;IACrH,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,IAAI,EAAE;QAC7C,OAAO,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,YAAY,GAAG,IAAA,sCAAuB,EAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,IAAA,+BAAgB,EAAC,KAAK,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAA,gCAAiB,EAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAA,gCAAiB,EAAC,KAAK,CAAC,CAAC;IAEvC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC3C,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IAE9D,OAAO;QACL,WAAW;QACX,SAAS;QACT,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,YAAY,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACzE,eAAe,EAAE,YAAY;QAC7B,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5B,UAAU;QACV,UAAU,EAAE,KAAK;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LlmService, ScoreCandidate, ScoredCandidate } from './types';
|
|
2
|
+
export declare class AnthropicProvider implements LlmService {
|
|
3
|
+
private apiKey;
|
|
4
|
+
private model;
|
|
5
|
+
readonly name: "anthropic";
|
|
6
|
+
readonly isAi = true;
|
|
7
|
+
constructor(apiKey: string, model?: string);
|
|
8
|
+
score(query: string, candidates: ScoreCandidate[]): Promise<ScoredCandidate[]>;
|
|
9
|
+
summarize(text: string, opts?: {
|
|
10
|
+
hint?: string;
|
|
11
|
+
}): Promise<string>;
|
|
12
|
+
private call;
|
|
13
|
+
}
|