git-history-ui 4.0.1 → 5.0.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.
Files changed (106) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/CODE_OF_CONDUCT.md +53 -0
  3. package/CONTRIBUTING.md +132 -0
  4. package/LICENSE +21 -0
  5. package/README.md +75 -15
  6. package/SECURITY.md +51 -0
  7. package/build/frontend/chunk-6DL2ZTKG.js +1 -0
  8. package/build/frontend/chunk-ACWXPHRR.js +1 -0
  9. package/build/frontend/{chunk-CFCRPNUQ.js → chunk-F6HZ5OVS.js} +1 -1
  10. package/build/frontend/{chunk-UHWTLUOW.js → chunk-GHSRMAIR.js} +1 -1
  11. package/build/frontend/chunk-J5ZVP6TN.js +9 -0
  12. package/build/frontend/chunk-PRY6VAFG.js +1 -0
  13. package/build/frontend/chunk-PXNKNORB.js +1 -0
  14. package/build/frontend/chunk-S56XRIZ7.js +9 -0
  15. package/build/frontend/chunk-STUSEB5P.js +1 -0
  16. package/build/frontend/chunk-UM7ESEXJ.js +5 -0
  17. package/build/frontend/chunk-VGAHCEAA.js +1 -0
  18. package/build/frontend/chunk-XLGWMKXV.js +1 -0
  19. package/build/frontend/chunk-Y6GOUMAT.js +1 -0
  20. package/build/frontend/index.html +2 -2
  21. package/build/frontend/main-W5NQX3FE.js +1 -0
  22. package/build/frontend/styles-RQGRQK4Z.css +1 -0
  23. package/dist/backend/aggregations.d.ts +1 -0
  24. package/dist/backend/aggregations.d.ts.map +1 -0
  25. package/dist/backend/annotations.d.ts +10 -1
  26. package/dist/backend/annotations.d.ts.map +1 -0
  27. package/dist/backend/annotations.js +84 -9
  28. package/dist/backend/annotations.js.map +1 -1
  29. package/dist/backend/breakage.d.ts +70 -0
  30. package/dist/backend/breakage.d.ts.map +1 -0
  31. package/dist/backend/breakage.js +235 -0
  32. package/dist/backend/breakage.js.map +1 -0
  33. package/dist/backend/cache/sqliteIndex.d.ts +2 -1
  34. package/dist/backend/cache/sqliteIndex.d.ts.map +1 -0
  35. package/dist/backend/cache/sqliteIndex.js +36 -23
  36. package/dist/backend/cache/sqliteIndex.js.map +1 -1
  37. package/dist/backend/dev-server.d.ts +1 -0
  38. package/dist/backend/dev-server.d.ts.map +1 -0
  39. package/dist/backend/gitService.d.ts +15 -6
  40. package/dist/backend/gitService.d.ts.map +1 -0
  41. package/dist/backend/gitService.js +148 -45
  42. package/dist/backend/gitService.js.map +1 -1
  43. package/dist/backend/grouping/prGrouping.d.ts +1 -0
  44. package/dist/backend/grouping/prGrouping.d.ts.map +1 -0
  45. package/dist/backend/grouping/prGrouping.js +41 -19
  46. package/dist/backend/grouping/prGrouping.js.map +1 -1
  47. package/dist/backend/impact.d.ts +4 -1
  48. package/dist/backend/impact.d.ts.map +1 -0
  49. package/dist/backend/impact.js +30 -16
  50. package/dist/backend/impact.js.map +1 -1
  51. package/dist/backend/insights.d.ts +1 -0
  52. package/dist/backend/insights.d.ts.map +1 -0
  53. package/dist/backend/insights.js +8 -3
  54. package/dist/backend/insights.js.map +1 -1
  55. package/dist/backend/llm/anthropicProvider.d.ts +2 -0
  56. package/dist/backend/llm/anthropicProvider.d.ts.map +1 -0
  57. package/dist/backend/llm/anthropicProvider.js +10 -4
  58. package/dist/backend/llm/anthropicProvider.js.map +1 -1
  59. package/dist/backend/llm/heuristicProvider.d.ts +2 -0
  60. package/dist/backend/llm/heuristicProvider.d.ts.map +1 -0
  61. package/dist/backend/llm/heuristicProvider.js +54 -4
  62. package/dist/backend/llm/heuristicProvider.js.map +1 -1
  63. package/dist/backend/llm/index.d.ts +7 -0
  64. package/dist/backend/llm/index.d.ts.map +1 -0
  65. package/dist/backend/llm/index.js +15 -5
  66. package/dist/backend/llm/index.js.map +1 -1
  67. package/dist/backend/llm/openaiProvider.d.ts +3 -0
  68. package/dist/backend/llm/openaiProvider.d.ts.map +1 -0
  69. package/dist/backend/llm/openaiProvider.js +29 -4
  70. package/dist/backend/llm/openaiProvider.js.map +1 -1
  71. package/dist/backend/llm/types.d.ts +3 -1
  72. package/dist/backend/llm/types.d.ts.map +1 -0
  73. package/dist/backend/presets.d.ts +1 -0
  74. package/dist/backend/presets.d.ts.map +1 -0
  75. package/dist/backend/search/datePhrase.d.ts +1 -0
  76. package/dist/backend/search/datePhrase.d.ts.map +1 -0
  77. package/dist/backend/search/nlSearch.d.ts +1 -0
  78. package/dist/backend/search/nlSearch.d.ts.map +1 -0
  79. package/dist/backend/server.d.ts +1 -0
  80. package/dist/backend/server.d.ts.map +1 -0
  81. package/dist/backend/server.js +100 -26
  82. package/dist/backend/server.js.map +1 -1
  83. package/dist/backend/snapshot.d.ts +4 -1
  84. package/dist/backend/snapshot.d.ts.map +1 -0
  85. package/dist/backend/snapshot.js +14 -9
  86. package/dist/backend/snapshot.js.map +1 -1
  87. package/dist/cli.d.ts +1 -0
  88. package/dist/cli.d.ts.map +1 -0
  89. package/docs/API.md +70 -0
  90. package/docs/architecture.md +85 -0
  91. package/docs/configuration.md +54 -0
  92. package/docs/troubleshooting.md +85 -0
  93. package/package.json +44 -8
  94. package/build/frontend/chunk-4JCUQ6Y5.js +0 -1
  95. package/build/frontend/chunk-6VRZZB3T.js +0 -1
  96. package/build/frontend/chunk-EZUFC4CQ.js +0 -1
  97. package/build/frontend/chunk-GRG6HTLW.js +0 -9
  98. package/build/frontend/chunk-I4VBIHH2.js +0 -1
  99. package/build/frontend/chunk-OBPR2XVH.js +0 -5
  100. package/build/frontend/chunk-QNEGGJHP.js +0 -2
  101. package/build/frontend/chunk-UIWFTWLF.js +0 -1
  102. package/build/frontend/chunk-UNROVCUZ.js +0 -7
  103. package/build/frontend/chunk-UWM4ZZWH.js +0 -1
  104. package/build/frontend/chunk-VHEMN3MU.js +0 -1
  105. package/build/frontend/main-SQFBVJA6.js +0 -1
  106. package/build/frontend/styles-DUWPKHDX.css +0 -1
@@ -18,6 +18,7 @@ const prGrouping_1 = require("./grouping/prGrouping");
18
18
  const snapshot_1 = require("./snapshot");
19
19
  const llm_1 = require("./llm");
20
20
  const impact_1 = require("./impact");
21
+ const breakage_1 = require("./breakage");
21
22
  const insights_1 = require("./insights");
22
23
  const annotations_1 = require("./annotations");
23
24
  const sqliteIndex_1 = require("./cache/sqliteIndex");
@@ -55,7 +56,9 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
55
56
  });
56
57
  app.use('/api', apiLimiter);
57
58
  const gitService = new gitService_1.GitService(cwd);
58
- const llmService = options.llmService ?? (0, llm_1.getDefaultLlmService)(options.llm ?? {});
59
+ const llmConfig = options.llm ?? {};
60
+ const fixedLlmService = options.llmService ?? null;
61
+ const getLlm = () => fixedLlmService ?? (0, llm_1.getDefaultLlmService)(llmConfig);
59
62
  const githubToken = options.githubToken ?? process.env.GITHUB_TOKEN;
60
63
  const annotations = new annotations_1.AnnotationsStore(cwd);
61
64
  const sqliteIndex = new sqliteIndex_1.SqliteIndex(cwd, (args) => gitService.runRaw(args, { maxBuffer: 256 * 1024 * 1024 }), (args, onChunk, streamOpts) => gitService.streamRaw(args, onChunk, streamOpts));
@@ -71,7 +74,7 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
71
74
  res.json({
72
75
  name: 'git-history-ui',
73
76
  version: pkgVersion(),
74
- llm: { provider: llmService.name, isAi: llmService.isAi },
77
+ llm: { provider: getLlm().name, isAi: getLlm().isAi },
75
78
  githubEnrichment: !!githubToken,
76
79
  sqliteAvailable: sqliteIndex_1.SqliteIndex.isAvailable()
77
80
  });
@@ -103,24 +106,43 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
103
106
  });
104
107
  (async () => {
105
108
  try {
106
- let count = 0;
107
109
  const author = stringParam(req.query.author);
108
110
  const since = stringParam(req.query.since);
109
111
  const until = stringParam(req.query.until);
110
112
  const file = stringParam(req.query.file);
111
113
  const search = stringParam(req.query.search ?? req.query.q);
112
114
  const branch = stringParam(req.query.branch);
113
- for await (const commit of gitService.streamCommits({ author, since, until, file, search, branch }, 200, { signal: controller.signal })) {
115
+ const page = numberParam(req.query.page, 1);
116
+ const pageSize = numberParam(req.query.pageSize, 100);
117
+ const result = await gitService.getCommits({
118
+ author,
119
+ since,
120
+ until,
121
+ file,
122
+ search,
123
+ branch,
124
+ page,
125
+ pageSize
126
+ }, { signal: controller.signal });
127
+ let count = 0;
128
+ for (const commit of result.commits) {
114
129
  if (cancelled)
115
130
  break;
116
131
  send('commit', commit);
117
132
  count++;
118
- // Yield to the event loop occasionally so we don't block heartbeats.
133
+ // Yield to the event loop occasionally so large pages don't block heartbeats.
119
134
  if (count % 50 === 0)
120
135
  await new Promise((r) => setImmediate(r));
121
136
  }
122
137
  if (!cancelled) {
123
- send('done', { total: count });
138
+ send('done', {
139
+ total: result.total,
140
+ page: result.page,
141
+ pageSize: result.pageSize,
142
+ totalPages: result.totalPages,
143
+ hasNext: result.hasNext,
144
+ hasPrevious: result.hasPrevious
145
+ });
124
146
  res.end();
125
147
  }
126
148
  }
@@ -133,6 +155,7 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
133
155
  })();
134
156
  });
135
157
  app.get('/api/commits', wrap(async (req, res) => {
158
+ const signal = requestAbortSignal(req);
136
159
  const result = await gitService.getCommits({
137
160
  file: stringParam(req.query.file),
138
161
  since: stringParam(req.query.since),
@@ -142,7 +165,7 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
142
165
  search: stringParam(req.query.search ?? req.query.q),
143
166
  page: numberParam(req.query.page, 1),
144
167
  pageSize: numberParam(req.query.pageSize, 25)
145
- });
168
+ }, { signal });
146
169
  res.json(result);
147
170
  }));
148
171
  app.get('/api/commit/:hash', wrap(async (req, res) => {
@@ -150,7 +173,7 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
150
173
  res.json(commit);
151
174
  }));
152
175
  app.get('/api/diff/:hash', wrap(async (req, res) => {
153
- const diff = await gitService.getDiff(req.params.hash);
176
+ const diff = await gitService.getDiff(req.params.hash, { signal: requestAbortSignal(req) });
154
177
  res.json(diff);
155
178
  }));
156
179
  app.get('/api/diff', wrap(async (req, res) => {
@@ -160,7 +183,7 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
160
183
  res.status(400).json({ error: 'from and to query params are required' });
161
184
  return;
162
185
  }
163
- const diff = await gitService.getRangeDiff(from, to);
186
+ const diff = await gitService.getRangeDiff(from, to, { signal: requestAbortSignal(req) });
164
187
  res.json(diff);
165
188
  }));
166
189
  app.get('/api/search', wrap(async (req, res) => {
@@ -169,15 +192,43 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
169
192
  res.status(400).json({ error: 'q query param is required' });
170
193
  return;
171
194
  }
172
- const result = await (0, nlSearch_1.runNlSearch)(gitService, llmService, {
195
+ const page = numberParam(req.query.page, 1);
196
+ const pageSize = numberParam(req.query.pageSize, 25);
197
+ const hasFilters = !!(stringParam(req.query.branch) ||
198
+ stringParam(req.query.file) ||
199
+ stringParam(req.query.author) ||
200
+ stringParam(req.query.since) ||
201
+ stringParam(req.query.until));
202
+ const stats = await sqliteIndex.stats().catch(() => ({ available: false, total: 0 }));
203
+ if (!hasFilters && stats.available && stats.total > 0) {
204
+ const end = page * pageSize + 1;
205
+ const rows = await sqliteIndex.search(q, end);
206
+ const start = (page - 1) * pageSize;
207
+ const commits = rows.slice(start, start + pageSize);
208
+ const total = rows.length;
209
+ res.json({
210
+ commits,
211
+ total,
212
+ page,
213
+ pageSize,
214
+ totalPages: Math.max(1, Math.ceil(total / pageSize)),
215
+ hasNext: rows.length > start + pageSize,
216
+ hasPrevious: page > 1,
217
+ parsedQuery: (0, nlSearch_1.parseNlQuery)(q),
218
+ usedLlm: false,
219
+ llmProvider: 'heuristic'
220
+ });
221
+ return;
222
+ }
223
+ const result = await (0, nlSearch_1.runNlSearch)(gitService, getLlm(), {
173
224
  query: q,
174
225
  branch: stringParam(req.query.branch),
175
226
  file: stringParam(req.query.file),
176
227
  author: stringParam(req.query.author),
177
228
  since: stringParam(req.query.since),
178
229
  until: stringParam(req.query.until),
179
- page: numberParam(req.query.page, 1),
180
- pageSize: numberParam(req.query.pageSize, 25)
230
+ page,
231
+ pageSize
181
232
  });
182
233
  res.json(result);
183
234
  }));
@@ -198,7 +249,7 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
198
249
  res.status(400).json({ error: 'at query param is required' });
199
250
  return;
200
251
  }
201
- const snap = await (0, snapshot_1.getSnapshot)(gitService, at);
252
+ const snap = await (0, snapshot_1.getSnapshot)(gitService, at, { signal: requestAbortSignal(req) });
202
253
  res.json(snap);
203
254
  }));
204
255
  app.get('/api/file-stats', wrap(async (req, res) => {
@@ -211,9 +262,24 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
211
262
  res.json(stats);
212
263
  }));
213
264
  app.get('/api/impact/:hash', wrap(async (req, res) => {
214
- const impact = await (0, impact_1.getCommitImpact)(gitService, req.params.hash);
265
+ const impact = await (0, impact_1.getCommitImpact)(gitService, req.params.hash, {
266
+ signal: requestAbortSignal(req)
267
+ });
215
268
  res.json(impact);
216
269
  }));
270
+ app.get('/api/breakage', wrap(async (req, res) => {
271
+ const file = stringParam(req.query.file);
272
+ if (!file) {
273
+ res.status(400).json({ error: 'file query param is required' });
274
+ return;
275
+ }
276
+ const limit = numberParam(req.query.limit, 200);
277
+ const analysis = await (0, breakage_1.getFileBreakageAnalysis)(gitService, file, {
278
+ limit,
279
+ signal: requestAbortSignal(req)
280
+ });
281
+ res.json(analysis);
282
+ }));
217
283
  app.get('/api/insights', wrap(async (req, res) => {
218
284
  const signal = requestAbortSignal(req);
219
285
  const bundle = await (0, insights_1.computeInsights)(gitService, {
@@ -231,18 +297,25 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
231
297
  res.status(400).json({ error: 'text body field is required' });
232
298
  return;
233
299
  }
234
- if (!llmService.isAi) {
235
- res.status(503).json({ error: 'No AI provider configured. Set ANTHROPIC_API_KEY or OPENAI_API_KEY.' });
300
+ const llm = getLlm();
301
+ if (!llm.isAi) {
302
+ res
303
+ .status(503)
304
+ .json({ error: 'No AI provider configured. Set ANTHROPIC_API_KEY or OPENAI_API_KEY.' });
236
305
  return;
237
306
  }
238
- const summary = await llmService.summarize(text, {
239
- hint: 'Summarize this code diff in 2-3 sentences for a developer skimming the change.'
307
+ const summary = await llm.summarize(text, {
308
+ hint: 'Summarize this code diff in 2-3 concise markdown bullets for a developer skimming the change.',
309
+ maxTokens: 500
240
310
  });
241
- res.json({ summary, provider: llmService.name });
311
+ res.json({ summary, provider: llm.name });
242
312
  }));
243
313
  app.post('/api/explain-commit/:hash', wrap(async (req, res) => {
244
- if (!llmService.isAi) {
245
- res.status(503).json({ error: 'No AI provider configured. Set ANTHROPIC_API_KEY or OPENAI_API_KEY.' });
314
+ const llm = getLlm();
315
+ if (!llm.isAi) {
316
+ res
317
+ .status(503)
318
+ .json({ error: 'No AI provider configured. Set ANTHROPIC_API_KEY or OPENAI_API_KEY.' });
246
319
  return;
247
320
  }
248
321
  const commit = await gitService.getCommit(req.params.hash);
@@ -255,10 +328,11 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
255
328
  ]
256
329
  .filter(Boolean)
257
330
  .join('\n');
258
- const summary = await llmService.summarize(text, {
259
- hint: 'Explain in plain English what this commit changes and why a reviewer should care.'
331
+ const summary = await llm.summarize(text, {
332
+ hint: 'Explain this commit in concise markdown. Use exactly these sections: "What changed" and "Why reviewers should care". Keep the answer under 220 words and finish with a complete sentence.',
333
+ maxTokens: 900
260
334
  });
261
- res.json({ summary, provider: llmService.name });
335
+ res.json({ summary, provider: llm.name });
262
336
  }));
263
337
  app.get('/api/annotations/:hash', wrap(async (req, res) => {
264
338
  const list = await annotations.list(req.params.hash);
@@ -304,7 +378,7 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
304
378
  continue;
305
379
  params.set(k, String(v));
306
380
  }
307
- const proto = req.headers['x-forwarded-proto'] || (req.protocol || 'http');
381
+ const proto = req.headers['x-forwarded-proto'] || req.protocol || 'http';
308
382
  const host = req.headers.host || 'localhost';
309
383
  const url = `${proto}://${host}/?${params.toString()}`;
310
384
  res.status(201).json({ url, expiresAt: null, mode: 'local' });
@@ -320,7 +394,7 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
320
394
  }));
321
395
  app.get('/api/tags', wrap(async (_req, res) => res.json(await gitService.getTags())));
322
396
  app.get('/api/branches', wrap(async (_req, res) => res.json(await gitService.getBranches())));
323
- app.get('/api/authors', wrap(async (_req, res) => res.json(await gitService.getAuthors())));
397
+ app.get('/api/authors', wrap(async (req, res) => res.json(await gitService.getAuthors({ signal: requestAbortSignal(req) }))));
324
398
  app.all('/api/*', (_req, res) => {
325
399
  res.status(404).json({ error: 'Not Found' });
326
400
  });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/backend/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/backend/server.ts"],"names":[],"mappings":";;;;;AAyCA,kCAqhBC;AA9jBD,sDAAkF;AAClF,gDAAwB;AACxB,oDAA4B;AAC5B,8DAAsC;AACtC,4EAA2C;AAC3C,+BAA+D;AAC/D,gDAAwB;AACxB,4CAAoB;AACpB,6CAA+D;AAC/D,gDAA8D;AAC9D,sDAA0D;AAC1D,yCAAyC;AACzC,+BAA8E;AAC9E,qCAA2C;AAC3C,yCAAqD;AACrD,yCAA6C;AAC7C,+CAAiD;AACjD,qDAAkD;AAqBlD,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,YAAY,GAAG,WAAW,CAAC;AAE1B,KAAK,UAAU,WAAW,CAC/B,OAAe,YAAY,EAC3B,OAAe,YAAY,EAC3B,UAAkC,EAAE;IAEpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzC,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;IACtB,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEnC,GAAG,CAAC,GAAG,CACL,IAAA,gBAAM,EAAC;QACL,qBAAqB,EAAE,KAAK;QAC5B,yBAAyB,EAAE,KAAK;QAChC,yBAAyB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;KACrD,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,IAAA,cAAI,EAAC;QACH,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YACrB,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnC,IAAI,8CAA8C,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;QAClC,cAAc,EAAE,CAAC,cAAc,EAAE,kBAAkB,CAAC;KACrD,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,IAAA,qBAAW,GAAE,CAAC,CAAC;IACvB,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,IAAA,4BAAS,EAAC;QAC3B,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,GAAG;QACR,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,KAAK;KACrB,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE5B,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;IACpC,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IACnD,MAAM,MAAM,GAAG,GAAe,EAAE,CAAC,eAAe,IAAI,IAAA,0BAAoB,EAAC,SAAS,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACpE,MAAM,WAAW,GAAG,IAAI,8BAAgB,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,yBAAW,CACjC,GAAG,EACH,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,EACnE,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAC/E,CAAC;IAEF,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,YAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC;IAClF,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAErD,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEjE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACnC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACpC,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,UAAU,EAAE;YACrB,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE;YACrD,gBAAgB,EAAE,CAAC,CAAC,WAAW;YAC/B,eAAe,EAAE,yBAAW,CAAC,WAAW,EAAE;SAC3C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CACL,kBAAkB,EAClB,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,kBAAkB,EAClB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;QACzD,GAAG,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACzC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC1C,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;QAErB,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,IAAa,EAAE,EAAE;YAC5C,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;YAC/B,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,SAAS,GAAG,IAAI,CAAC;YACjB,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CACxC;oBACE,MAAM;oBACN,KAAK;oBACL,KAAK;oBACL,IAAI;oBACJ,MAAM;oBACN,MAAM;oBACN,IAAI;oBACJ,QAAQ;iBACT,EACD,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAC9B,CAAC;gBAEF,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpC,IAAI,SAAS;wBAAE,MAAM;oBACrB,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBACvB,KAAK,EAAE,CAAC;oBACR,8EAA8E;oBAC9E,IAAI,KAAK,GAAG,EAAE,KAAK,CAAC;wBAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,CAAC;gBACD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,EAAE;wBACX,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;qBAChC,CAAC,CAAC;oBACH,GAAG,CAAC,GAAG,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,SAAS;oBAAE,OAAO;gBACtB,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;gBAChF,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CACL,cAAc,EACd,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CACxC;YACE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YACrC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YACrC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACpD,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;SAC9C,EACD,EAAE,MAAM,EAAE,CACX,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,mBAAmB,EACnB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,iBAAiB,EACjB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,WAAW,EACX,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACjB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,aAAa,EACb,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,CAAC,CAAC,CACnB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YAC7B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YAC7B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAC7B,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO;gBACP,KAAK;gBACL,IAAI;gBACJ,QAAQ;gBACR,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;gBACpD,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,QAAQ;gBACvC,WAAW,EAAE,IAAI,GAAG,CAAC;gBACrB,WAAW,EAAE,IAAA,uBAAY,EAAC,CAAC,CAAC;gBAC5B,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,WAAW;aACzB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAW,EAAC,UAAU,EAAE,MAAM,EAAE,EAAE;YACrD,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YACrC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACjC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YACrC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC,IAAI;YACJ,QAAQ;SACT,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,aAAa,EACb,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAiB,EAAC,UAAU,EAAE;YACjD,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YACrC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YACrC,WAAW;YACX,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC;SACpD,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,eAAe,EACf,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAA,sBAAW,EAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,iBAAiB,EACjB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAClD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,mBAAmB,EACnB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAe,EAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;YAChE,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC;SAChC,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,eAAe,EACf,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAA,kCAAuB,EAAC,UAAU,EAAE,IAAI,EAAE;YAC/D,KAAK;YACL,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC;SAChC,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,eAAe,EACf,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAe,EAAC,UAAU,EAAE;YAC/C,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACnC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YACrC,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;YAClD,MAAM;SACP,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,qBAAqB,EACrB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,GAAG;iBACA,MAAM,CAAC,GAAG,CAAC;iBACX,IAAI,CAAC,EAAE,KAAK,EAAE,qEAAqE,EAAE,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE;YACxC,IAAI,EAAE,+FAA+F;YACrG,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,2BAA2B,EAC3B,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,GAAG;iBACA,MAAM,CAAC,GAAG,CAAC;iBACX,IAAI,CAAC,EAAE,KAAK,EAAE,qEAAqE,EAAE,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG;YACX,YAAY,MAAM,CAAC,OAAO,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;YAC1C,gBAAgB;YAChB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC;SACjF;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE;YACxC,IAAI,EAAE,2LAA2L;YACjM,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,wBAAwB,EACxB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,wBAAwB,EACxB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;QACpF,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,MAAM,CACR,4BAA4B,EAC5B,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;IAEF;;;;;;;;OAQG;IACH,GAAG,CAAC,IAAI,CACN,YAAY,EACZ,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;QAClC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QACD,qDAAqD;QACrD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;gBAAE,SAAS;YACxD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,KAAK,GAAI,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAY,IAAI,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC;QACrF,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QAC7C,MAAM,GAAG,GAAG,GAAG,KAAK,MAAM,IAAI,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QACvD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,YAAY,EACZ,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,WAAW,EACX,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAChE,CAAC;IACF,GAAG,CAAC,GAAG,CACL,eAAe,EACf,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CACpE,CAAC;IACF,GAAG,CAAC,GAAG,CACL,cAAc,EACd,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CACtB,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAC3E,CACF,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACzB,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YAC9B,IAAI,GAAG;gBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,CAAC,GAAY,EAAE,IAAa,EAAE,GAAa,EAAE,KAAmB,EAAE,EAAE;QAC1E,IAAI,GAAG,YAAY,gCAAmB,EAAE,CAAC;YACvC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACrE,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAA,mBAAY,EAAC,GAAG,CAAC,CAAC;IAErC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;YACjC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChC,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,GAAkB,EAAE,CAChC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5B,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEL,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,IAAI,CAAC,OAA8E;IAC1F,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,CAAU;IAC7B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,CAAU,EAAE,QAAgB;IAC/C,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAY;IACtC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1C,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;QACtF,OAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC,OAAO,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,8FAA8F;QAC9F,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC;IAClE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC;IAC9C,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;SACpB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;YAC/B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,oBAAoB,CAAC,CAAC;YACnD,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QACpD,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -13,4 +13,7 @@ export interface Snapshot {
13
13
  * Tags are typically immutable, but historically were placed at a different
14
14
  * commit so we still resolve them at the snapshot moment.
15
15
  */
16
- export declare function getSnapshot(gitService: GitService, atIso: string): Promise<Snapshot>;
16
+ export declare function getSnapshot(gitService: GitService, atIso: string, opts?: {
17
+ signal?: AbortSignal;
18
+ }): Promise<Snapshot>;
19
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/backend/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAClC,OAAO,CAAC,QAAQ,CAAC,CAsCnB"}
@@ -9,17 +9,23 @@ exports.getSnapshot = getSnapshot;
9
9
  * Tags are typically immutable, but historically were placed at a different
10
10
  * commit so we still resolve them at the snapshot moment.
11
11
  */
12
- async function getSnapshot(gitService, atIso) {
13
- const [branches, tags] = await Promise.all([
14
- gitService.getBranches(),
15
- gitService.getTags()
16
- ]);
12
+ async function getSnapshot(gitService, atIso, opts = {}) {
13
+ if (typeof gitService.refsAt === 'function') {
14
+ const refs = await gitService.refsAt(atIso, opts);
15
+ return {
16
+ at: atIso,
17
+ ref: refs.head,
18
+ branches: refs.branches,
19
+ tags: refs.tags
20
+ };
21
+ }
22
+ const [branches, tags] = await Promise.all([gitService.getBranches(), gitService.getTags()]);
17
23
  const branchEntries = await Promise.all(branches.map(async (b) => {
18
- const hash = await gitService.revAt(b, atIso).catch(() => null);
24
+ const hash = await gitService.revAt(b, atIso, opts).catch(() => null);
19
25
  return [b, hash];
20
26
  }));
21
27
  const tagEntries = await Promise.all(tags.map(async (t) => {
22
- const hash = await gitService.revAt(t, atIso).catch(() => null);
28
+ const hash = await gitService.revAt(t, atIso, opts).catch(() => null);
23
29
  return [t, hash];
24
30
  }));
25
31
  const branchMap = {};
@@ -30,8 +36,7 @@ async function getSnapshot(gitService, atIso) {
30
36
  for (const [t, hash] of tagEntries)
31
37
  if (hash)
32
38
  tagMap[t] = hash;
33
- // HEAD-equivalent: commit on the default branch (HEAD) at the snapshot time.
34
- const head = await gitService.revAt('HEAD', atIso).catch(() => null);
39
+ const head = await gitService.revAt('HEAD', atIso, opts).catch(() => null);
35
40
  return {
36
41
  at: atIso,
37
42
  ref: head,
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/backend/snapshot.ts"],"names":[],"mappings":";;AAiBA,kCAoCC;AA5CD;;;;;;;GAOG;AACI,KAAK,UAAU,WAAW,CAC/B,UAAsB,EACtB,KAAa;IAEb,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,UAAU,CAAC,WAAW,EAAE;QACxB,UAAU,CAAC,OAAO,EAAE;KACrB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAU,CAAC;IAC5B,CAAC,CAAC,CACH,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACnB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAU,CAAC;IAC5B,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,aAAa;QAAE,IAAI,IAAI;YAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACrE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,UAAU;QAAE,IAAI,IAAI;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE/D,6EAA6E;IAC7E,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAErE,OAAO;QACL,EAAE,EAAE,KAAK;QACT,GAAG,EAAE,IAAI;QACT,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,MAAM;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/backend/snapshot.ts"],"names":[],"mappings":";;AAiBA,kCA0CC;AAlDD;;;;;;;GAOG;AACI,KAAK,UAAU,WAAW,CAC/B,UAAsB,EACtB,KAAa,EACb,OAAiC,EAAE;IAEnC,IAAI,OAAO,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAE7F,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAU,CAAC;IAC5B,CAAC,CAAC,CACH,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACnB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAU,CAAC;IAC5B,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,aAAa;QAAE,IAAI,IAAI;YAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACrE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,UAAU;QAAE,IAAI,IAAI;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAE3E,OAAO;QACL,EAAE,EAAE,KAAK;QACT,GAAG,EAAE,IAAI;QACT,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,MAAM;KACb,CAAC;AACJ,CAAC"}
package/dist/cli.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/docs/API.md ADDED
@@ -0,0 +1,70 @@
1
+ # API Reference
2
+
3
+ `git-history-ui` runs a local Express server for the browser UI. The API is
4
+ intended for local tooling and integrations; it is not a hosted SaaS API.
5
+
6
+ By default, endpoints are available at `http://localhost:3000/api`.
7
+
8
+ ## Health and metadata
9
+
10
+ | Method | Path | Description |
11
+ | --- | --- | --- |
12
+ | `GET` | `/api/health` | Process health, uptime, and pid. |
13
+ | `GET` | `/api/version` | Package version, selected LLM provider, GitHub enrichment, SQLite availability. |
14
+
15
+ ## Git history
16
+
17
+ | Method | Path | Query / body | Description |
18
+ | --- | --- | --- | --- |
19
+ | `GET` | `/api/commits` | `file`, `since`, `until`, `author`, `branch`, `search`/`q`, `page`, `pageSize` | Paginated commit list. |
20
+ | `GET` | `/api/commits/stream` | Same as `/api/commits` | Server-sent events stream with `commit`, `done`, and `error` events. |
21
+ | `GET` | `/api/commit/:hash` | — | Single commit details. |
22
+ | `GET` | `/api/diff/:hash` | — | Diff for one commit. |
23
+ | `GET` | `/api/diff` | `from`, `to` | Range diff between two refs. |
24
+ | `GET` | `/api/tags` | — | Repository tags. |
25
+ | `GET` | `/api/branches` | — | Repository branches. |
26
+ | `GET` | `/api/authors` | — | Known commit authors. |
27
+
28
+ ## Search, grouping, and analysis
29
+
30
+ | Method | Path | Query / body | Description |
31
+ | --- | --- | --- | --- |
32
+ | `GET` | `/api/search` | `q`/`query`, `branch`, `file`, `author`, `since`, `until`, `page`, `pageSize` | Natural-language search with heuristic parsing and optional LLM scoring. |
33
+ | `GET` | `/api/groups` | `since`, `until`, `author`, `branch`, `maxCommits` | Commit groups inferred from PR merges, squash merges, and Conventional Commits scopes. |
34
+ | `GET` | `/api/snapshot` | `at` | Branch and tag positions at an ISO date/time. |
35
+ | `GET` | `/api/file-stats` | `file` | Per-file history and churn metadata. |
36
+ | `GET` | `/api/blame` | `file` | Porcelain blame parsed into line metadata. |
37
+ | `GET` | `/api/impact/:hash` | — | Files touched, affected modules, dependency ripple, and related commits. |
38
+ | `GET` | `/api/insights` | `since`, `until`, `branch`, `maxCommits` | Contributors, hotspots, churn over time, and risky-file score. |
39
+
40
+ ## Optional AI endpoints
41
+
42
+ These require either `ANTHROPIC_API_KEY` or `OPENAI_API_KEY`.
43
+
44
+ | Method | Path | Body | Description |
45
+ | --- | --- | --- | --- |
46
+ | `POST` | `/api/summarize-diff` | `{ "text": "..." }` | Summarize diff text. |
47
+ | `POST` | `/api/explain-commit/:hash` | — | Explain one commit using its metadata and changed files. |
48
+
49
+ When no AI provider is configured, these endpoints return `503`.
50
+
51
+ ## Local annotations and sharing
52
+
53
+ | Method | Path | Body | Description |
54
+ | --- | --- | --- | --- |
55
+ | `GET` | `/api/annotations/:hash` | — | List local comments for a commit. |
56
+ | `POST` | `/api/annotations/:hash` | `{ "author": "...", "body": "..." }` | Add a local comment. |
57
+ | `DELETE` | `/api/annotations/:hash/:id` | — | Delete a local comment. |
58
+ | `POST` | `/api/share` | `{ "viewState": { ... } }` | Return a local URL with view state encoded in the query string. |
59
+
60
+ Annotations are stored locally under `~/.git-history-ui/`.
61
+
62
+ ## SQLite index
63
+
64
+ | Method | Path | Description |
65
+ | --- | --- | --- |
66
+ | `GET` | `/api/index/stats` | Current optional SQLite index status. |
67
+ | `POST` | `/api/index/build` | Build or refresh the local SQLite FTS index. |
68
+
69
+ If the optional native `better-sqlite3` dependency is unavailable, the server
70
+ falls back to git-shelling paths.
@@ -0,0 +1,85 @@
1
+ # Architecture
2
+
3
+ `git-history-ui` is a local-first CLI that starts an Express backend and serves
4
+ an Angular single-page app.
5
+
6
+ ```text
7
+ npx git-history-ui
8
+
9
+
10
+ dist/cli.js ── starts ──► Express server
11
+
12
+ ├─ serves Angular build from build/frontend/
13
+ ├─ exposes /api/* endpoints
14
+ ├─ shells out to git with execFile/spawn
15
+ ├─ optionally builds a SQLite FTS index
16
+ └─ optionally calls Anthropic/OpenAI when configured
17
+ ```
18
+
19
+ ## Backend
20
+
21
+ Source lives in `src/backend/`.
22
+
23
+ | Module | Responsibility |
24
+ | --- | --- |
25
+ | `server.ts` | Express app, API routes, static asset serving, security middleware. |
26
+ | `gitService.ts` | All git operations, commit parsing, diffs, blame, branch/tag/author lookup. |
27
+ | `search/` | Natural-language query parsing and search orchestration. |
28
+ | `grouping/prGrouping.ts` | PR and feature grouping heuristics plus optional GitHub enrichment. |
29
+ | `impact.ts` | Commit impact analysis and JS/TS import ripple detection. |
30
+ | `insights.ts` / `aggregations.ts` | Contributor, churn, hotspot, and risky-file calculations. |
31
+ | `cache/sqliteIndex.ts` | Optional `better-sqlite3` FTS index for large repositories. |
32
+ | `llm/` | Provider abstraction for heuristic, Anthropic, and OpenAI scoring/summaries. |
33
+ | `annotations.ts` | Local per-commit notes stored under `~/.git-history-ui/`. |
34
+ | `presets.ts` | Saved CLI filter presets. |
35
+
36
+ The backend uses `execFile` and `spawn` instead of shell interpolation so git
37
+ arguments stay explicit and predictable.
38
+
39
+ ## Frontend
40
+
41
+ Source lives in `frontend/src/app/`.
42
+
43
+ The UI is an Angular standalone-components app using:
44
+
45
+ - Angular signals and `OnPush` change detection
46
+ - Angular CDK virtual scrolling
47
+ - `d3` for impact graphs, treemaps, and churn charts
48
+ - `highlight.js` for syntax-highlighted diffs and blame
49
+ - TailwindCSS and CSS custom properties for theming
50
+
51
+ Routes:
52
+
53
+ | Route | Component | Purpose |
54
+ | --- | --- | --- |
55
+ | `/` | `HomeShellComponent` | Main history view, graph/list/detail layout. |
56
+ | `/timeline` | `TimelineComponent` | Time-travel snapshot exploration. |
57
+ | `/file/:path` | `FileHistoryComponent` | File history and blame. |
58
+ | `/insights` | `InsightsComponent` | Contributors, hotspots, churn, risky files. |
59
+
60
+ ## Build output
61
+
62
+ ```text
63
+ src/ ── tsc ──► dist/
64
+ frontend/src/ ── ng build ──► frontend/dist/frontend/browser/
65
+ frontend build copy ─────────────► build/frontend/
66
+ ```
67
+
68
+ The npm package publishes the compiled backend (`dist/`), compiled frontend
69
+ (`build/`), fallback public assets (`public/`), docs, README, changelog, and
70
+ license files.
71
+
72
+ ## Local data
73
+
74
+ Runtime state is kept outside the inspected repository:
75
+
76
+ ```text
77
+ ~/.git-history-ui/
78
+ presets.json
79
+ <repo-hash>/
80
+ annotations.json
81
+ index.sqlite
82
+ ```
83
+
84
+ This keeps the target repository clean and makes annotations/indexes local to
85
+ the user's machine.
@@ -0,0 +1,54 @@
1
+ # Configuration
2
+
3
+ `git-history-ui` is zero-config by default. Run it inside any git repository:
4
+
5
+ ```bash
6
+ npx git-history-ui@latest
7
+ ```
8
+
9
+ ## CLI flags
10
+
11
+ | Flag | Default | Description |
12
+ | --- | --- | --- |
13
+ | `--port <number>` | `3000` | Local server port. |
14
+ | `--host <host>` | `localhost` | Host to bind. Use `0.0.0.0` for containers. |
15
+ | `--file <path>` | — | Start with commits filtered to a file path. |
16
+ | `--since <date>` | — | Start with commits after a date (`YYYY-MM-DD`). |
17
+ | `--author <name>` | — | Start with commits filtered by author. |
18
+ | `--cwd <path>` | Current directory | Git repository to inspect. |
19
+ | `--no-open` | `false` | Do not open the browser automatically. |
20
+ | `--llm <provider>` | Auto | Force `heuristic`, `anthropic`, or `openai`. |
21
+ | `--preset <name>` | — | Load saved filters. |
22
+ | `--save-preset <name>` | — | Save current filters for reuse. |
23
+
24
+ ## Environment variables
25
+
26
+ | Variable | Required? | Description |
27
+ | --- | --- | --- |
28
+ | `ANTHROPIC_API_KEY` | No | Enables Anthropic ranking and summaries. |
29
+ | `OPENAI_API_KEY` | No | Enables OpenAI ranking and summaries. |
30
+ | `GHUI_LLM_PROVIDER` | No | Force `anthropic`, `openai`, or `heuristic`. |
31
+ | `GHUI_LLM_MODEL` | No | Override the selected AI provider model. |
32
+ | `ANTHROPIC_MODEL` | No | Override the Anthropic model; takes precedence over `GHUI_LLM_MODEL`. |
33
+ | `OPENAI_MODEL` | No | Override the OpenAI model; takes precedence over `GHUI_LLM_MODEL`. |
34
+ | `GITHUB_TOKEN` | No | Enriches PR groups with GitHub titles, authors, and labels. Use a read-only token. |
35
+ | `PORT` | No | Production server port when running `dist/backend/server.js` directly. |
36
+ | `HOST` | No | Production server host when running `dist/backend/server.js` directly. |
37
+
38
+ ## AI privacy model
39
+
40
+ - Heuristic mode works without network calls.
41
+ - AI features are opt-in and use the key you provide.
42
+ - Repository data is sent only to the selected provider for the specific action
43
+ you requested.
44
+ - API keys are read from environment variables and are not written to disk.
45
+
46
+ ## Saved local state
47
+
48
+ `git-history-ui` stores local-only data in `~/.git-history-ui/`, including:
49
+
50
+ - CLI presets
51
+ - Per-repository annotations
52
+ - Optional SQLite indexes
53
+
54
+ Delete that directory to reset all local state.