git-history-ui 2.0.3 → 3.0.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 +70 -0
- package/README.md +75 -13
- package/build/frontend/chunk-2QTYGOOP.js +1 -0
- package/build/frontend/chunk-36NFLS3P.js +1 -0
- package/build/frontend/chunk-3FFYILBL.js +1 -0
- package/build/frontend/chunk-C56FFICU.js +2 -0
- package/build/frontend/chunk-HIERJLKT.js +1 -0
- package/build/frontend/chunk-HYRHOB47.js +7 -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-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-44WYBFGF.js +1 -0
- package/build/frontend/styles-GSJUSSXL.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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datePhrase.js","sourceRoot":"","sources":["../../../src/backend/search/datePhrase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { LlmService } from '../llm/types';
|
|
2
|
+
import type { GitService, PaginatedCommits } from '../gitService';
|
|
3
|
+
export interface NlInterpretation {
|
|
4
|
+
rawQuery: string;
|
|
5
|
+
keywords: string[];
|
|
6
|
+
expandedKeywords: string[];
|
|
7
|
+
author?: string;
|
|
8
|
+
since?: string;
|
|
9
|
+
until?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface NlSearchResult extends PaginatedCommits {
|
|
12
|
+
parsedQuery: NlInterpretation;
|
|
13
|
+
usedLlm: boolean;
|
|
14
|
+
llmProvider: 'heuristic' | 'anthropic' | 'openai';
|
|
15
|
+
}
|
|
16
|
+
export interface ParseOptions {
|
|
17
|
+
/** When true, skip stripping date/author phrases from keywords. */
|
|
18
|
+
preserveOriginal?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse a free-form NL query into structured filter components plus a
|
|
22
|
+
* cleaned keyword list. Pure function — no I/O.
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseNlQuery(query: string, opts?: ParseOptions): NlInterpretation;
|
|
25
|
+
export interface NlSearchOptions {
|
|
26
|
+
query: string;
|
|
27
|
+
page?: number;
|
|
28
|
+
pageSize?: number;
|
|
29
|
+
/** Cap on candidates pulled from git for LLM rerank. */
|
|
30
|
+
candidateCap?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* NL search pipeline:
|
|
34
|
+
* 1. Parse query into structured filters (date/author/keywords).
|
|
35
|
+
* 2. Pull candidates via existing git-log filtering (uses author/since/until/regex on keywords).
|
|
36
|
+
* 3. Score with LlmService (heuristic by default, optional AI rerank).
|
|
37
|
+
* 4. Sort by score, paginate.
|
|
38
|
+
*/
|
|
39
|
+
export declare function runNlSearch(gitService: GitService, llm: LlmService, options: NlSearchOptions): Promise<NlSearchResult>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseNlQuery = parseNlQuery;
|
|
4
|
+
exports.runNlSearch = runNlSearch;
|
|
5
|
+
const heuristicProvider_1 = require("../llm/heuristicProvider");
|
|
6
|
+
const datePhrase_1 = require("./datePhrase");
|
|
7
|
+
const AUTHOR_PHRASE = /\bby\s+@?([a-zA-Z][\w.-]*)\b/i;
|
|
8
|
+
/**
|
|
9
|
+
* Parse a free-form NL query into structured filter components plus a
|
|
10
|
+
* cleaned keyword list. Pure function — no I/O.
|
|
11
|
+
*/
|
|
12
|
+
function parseNlQuery(query, opts = {}) {
|
|
13
|
+
const raw = (query || '').trim();
|
|
14
|
+
const dateRange = (0, datePhrase_1.parseDatePhrase)(raw);
|
|
15
|
+
const authorMatch = raw.match(AUTHOR_PHRASE);
|
|
16
|
+
const author = authorMatch ? authorMatch[1] : undefined;
|
|
17
|
+
let cleaned = opts.preserveOriginal ? raw : (0, datePhrase_1.stripDatePhrase)(raw);
|
|
18
|
+
if (author)
|
|
19
|
+
cleaned = cleaned.replace(AUTHOR_PHRASE, ' ').replace(/\s+/g, ' ').trim();
|
|
20
|
+
const keywords = (0, heuristicProvider_1.tokenize)(cleaned);
|
|
21
|
+
const expandedKeywords = (0, heuristicProvider_1.expandKeywords)(cleaned);
|
|
22
|
+
return {
|
|
23
|
+
rawQuery: raw,
|
|
24
|
+
keywords,
|
|
25
|
+
expandedKeywords,
|
|
26
|
+
author,
|
|
27
|
+
since: dateRange.since,
|
|
28
|
+
until: dateRange.until
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* NL search pipeline:
|
|
33
|
+
* 1. Parse query into structured filters (date/author/keywords).
|
|
34
|
+
* 2. Pull candidates via existing git-log filtering (uses author/since/until/regex on keywords).
|
|
35
|
+
* 3. Score with LlmService (heuristic by default, optional AI rerank).
|
|
36
|
+
* 4. Sort by score, paginate.
|
|
37
|
+
*/
|
|
38
|
+
async function runNlSearch(gitService, llm, options) {
|
|
39
|
+
const page = Math.max(1, options.page ?? 1);
|
|
40
|
+
const pageSize = Math.max(1, Math.min(500, options.pageSize ?? 25));
|
|
41
|
+
const candidateCap = Math.max(pageSize, Math.min(1000, options.candidateCap ?? 200));
|
|
42
|
+
const parsed = parseNlQuery(options.query);
|
|
43
|
+
// Build a search regex for git log --grep: union of expanded keywords (with word-ish boundaries).
|
|
44
|
+
// Limit length to keep arg list sane.
|
|
45
|
+
const top = parsed.expandedKeywords.slice(0, 12);
|
|
46
|
+
const grep = top.length > 0 ? top.map(escapeForGrep).join('|') : undefined;
|
|
47
|
+
// Pull candidate set. We deliberately ignore pagination here so we can re-rank.
|
|
48
|
+
const candidatesPage = await gitService.getCommits({
|
|
49
|
+
author: parsed.author,
|
|
50
|
+
since: parsed.since,
|
|
51
|
+
until: parsed.until,
|
|
52
|
+
search: grep,
|
|
53
|
+
page: 1,
|
|
54
|
+
pageSize: candidateCap
|
|
55
|
+
});
|
|
56
|
+
const scored = await llm.score(options.query, candidatesPage.commits.map((c) => ({
|
|
57
|
+
id: c.hash,
|
|
58
|
+
text: textForScoring(c)
|
|
59
|
+
})));
|
|
60
|
+
// Map back to commits, sort by score (desc).
|
|
61
|
+
const byHash = new Map(candidatesPage.commits.map((c) => [c.hash, c]));
|
|
62
|
+
const ranked = scored
|
|
63
|
+
.map((s) => ({ score: s.score, commit: byHash.get(s.id) }))
|
|
64
|
+
.filter((r) => !!r.commit)
|
|
65
|
+
.sort((a, b) => b.score - a.score);
|
|
66
|
+
const total = ranked.length;
|
|
67
|
+
const start = (page - 1) * pageSize;
|
|
68
|
+
const slice = ranked.slice(start, start + pageSize).map((r) => r.commit);
|
|
69
|
+
const totalPages = Math.max(1, Math.ceil(total / pageSize));
|
|
70
|
+
return {
|
|
71
|
+
commits: slice,
|
|
72
|
+
total,
|
|
73
|
+
page,
|
|
74
|
+
pageSize,
|
|
75
|
+
totalPages,
|
|
76
|
+
hasNext: page < totalPages,
|
|
77
|
+
hasPrevious: page > 1,
|
|
78
|
+
parsedQuery: parsed,
|
|
79
|
+
usedLlm: llm.isAi,
|
|
80
|
+
llmProvider: llm.name
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function textForScoring(c) {
|
|
84
|
+
return `${c.subject}\n${c.body}\n${c.author}\n${c.branches.join(' ')}\n${c.tags.join(' ')}`;
|
|
85
|
+
}
|
|
86
|
+
function escapeForGrep(token) {
|
|
87
|
+
// Escape POSIX BRE/ERE metacharacters (git --grep is ERE with --regexp-ignore-case).
|
|
88
|
+
return token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=nlSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nlSearch.js","sourceRoot":"","sources":["../../../src/backend/search/nlSearch.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/server.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Server as HttpServer } from 'http';
|
|
2
|
+
import { type LlmConfig } from './llm';
|
|
2
3
|
export interface ServerOptions {
|
|
3
4
|
port?: number;
|
|
4
5
|
host?: string;
|
|
@@ -6,6 +7,8 @@ export interface ServerOptions {
|
|
|
6
7
|
since?: string;
|
|
7
8
|
author?: string;
|
|
8
9
|
cwd?: string;
|
|
10
|
+
llm?: LlmConfig;
|
|
11
|
+
githubToken?: string;
|
|
9
12
|
}
|
|
10
13
|
export interface BootResult {
|
|
11
14
|
server: HttpServer;
|
package/dist/backend/server.js
CHANGED
|
@@ -13,6 +13,13 @@ const http_1 = require("http");
|
|
|
13
13
|
const path_1 = __importDefault(require("path"));
|
|
14
14
|
const fs_1 = __importDefault(require("fs"));
|
|
15
15
|
const gitService_1 = require("./gitService");
|
|
16
|
+
const nlSearch_1 = require("./search/nlSearch");
|
|
17
|
+
const prGrouping_1 = require("./grouping/prGrouping");
|
|
18
|
+
const snapshot_1 = require("./snapshot");
|
|
19
|
+
const llm_1 = require("./llm");
|
|
20
|
+
const impact_1 = require("./impact");
|
|
21
|
+
const insights_1 = require("./insights");
|
|
22
|
+
const annotations_1 = require("./annotations");
|
|
16
23
|
const DEFAULT_PORT = 3000;
|
|
17
24
|
const DEFAULT_HOST = 'localhost';
|
|
18
25
|
async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {}) {
|
|
@@ -34,7 +41,7 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
|
|
|
34
41
|
}
|
|
35
42
|
return cb(new Error('CORS not allowed'), false);
|
|
36
43
|
},
|
|
37
|
-
methods: ['GET'],
|
|
44
|
+
methods: ['GET', 'POST', 'DELETE'],
|
|
38
45
|
allowedHeaders: ['Content-Type', 'X-Requested-With']
|
|
39
46
|
}));
|
|
40
47
|
app.use((0, compression_1.default)());
|
|
@@ -47,6 +54,9 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
|
|
|
47
54
|
});
|
|
48
55
|
app.use('/api', apiLimiter);
|
|
49
56
|
const gitService = new gitService_1.GitService(cwd);
|
|
57
|
+
const llmService = (0, llm_1.getDefaultLlmService)(options.llm ?? {});
|
|
58
|
+
const githubToken = options.githubToken ?? process.env.GITHUB_TOKEN;
|
|
59
|
+
const annotations = new annotations_1.AnnotationsStore(cwd);
|
|
50
60
|
const angularBuildPath = path_1.default.join(__dirname, '../../build/frontend');
|
|
51
61
|
const publicPath = path_1.default.join(__dirname, '../../public');
|
|
52
62
|
const staticDir = fs_1.default.existsSync(angularBuildPath) ? angularBuildPath : publicPath;
|
|
@@ -56,7 +66,12 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
|
|
|
56
66
|
res.json({ status: 'ok', uptime: process.uptime(), pid: process.pid });
|
|
57
67
|
});
|
|
58
68
|
app.get('/api/version', (_req, res) => {
|
|
59
|
-
res.json({
|
|
69
|
+
res.json({
|
|
70
|
+
name: 'git-history-ui',
|
|
71
|
+
version: pkgVersion(),
|
|
72
|
+
llm: { provider: llmService.name, isAi: llmService.isAi },
|
|
73
|
+
githubEnrichment: !!githubToken
|
|
74
|
+
});
|
|
60
75
|
});
|
|
61
76
|
app.get('/api/commits', wrap(async (req, res) => {
|
|
62
77
|
const result = await gitService.getCommits({
|
|
@@ -78,6 +93,126 @@ async function startServer(port = DEFAULT_PORT, host = DEFAULT_HOST, options = {
|
|
|
78
93
|
const diff = await gitService.getDiff(req.params.hash);
|
|
79
94
|
res.json(diff);
|
|
80
95
|
}));
|
|
96
|
+
app.get('/api/diff', wrap(async (req, res) => {
|
|
97
|
+
const from = stringParam(req.query.from);
|
|
98
|
+
const to = stringParam(req.query.to);
|
|
99
|
+
if (!from || !to) {
|
|
100
|
+
res.status(400).json({ error: 'from and to query params are required' });
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const diff = await gitService.getRangeDiff(from, to);
|
|
104
|
+
res.json(diff);
|
|
105
|
+
}));
|
|
106
|
+
app.get('/api/search', wrap(async (req, res) => {
|
|
107
|
+
const q = stringParam(req.query.q ?? req.query.query);
|
|
108
|
+
if (!q) {
|
|
109
|
+
res.status(400).json({ error: 'q query param is required' });
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const result = await (0, nlSearch_1.runNlSearch)(gitService, llmService, {
|
|
113
|
+
query: q,
|
|
114
|
+
page: numberParam(req.query.page, 1),
|
|
115
|
+
pageSize: numberParam(req.query.pageSize, 25)
|
|
116
|
+
});
|
|
117
|
+
res.json(result);
|
|
118
|
+
}));
|
|
119
|
+
app.get('/api/groups', wrap(async (req, res) => {
|
|
120
|
+
const groups = await (0, prGrouping_1.buildCommitGroups)(gitService, {
|
|
121
|
+
since: stringParam(req.query.since),
|
|
122
|
+
until: stringParam(req.query.until),
|
|
123
|
+
author: stringParam(req.query.author),
|
|
124
|
+
githubToken,
|
|
125
|
+
maxCommits: numberParam(req.query.maxCommits, 1000)
|
|
126
|
+
});
|
|
127
|
+
res.json(groups);
|
|
128
|
+
}));
|
|
129
|
+
app.get('/api/snapshot', wrap(async (req, res) => {
|
|
130
|
+
const at = stringParam(req.query.at);
|
|
131
|
+
if (!at) {
|
|
132
|
+
res.status(400).json({ error: 'at query param is required' });
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const snap = await (0, snapshot_1.getSnapshot)(gitService, at);
|
|
136
|
+
res.json(snap);
|
|
137
|
+
}));
|
|
138
|
+
app.get('/api/file-stats', wrap(async (req, res) => {
|
|
139
|
+
const file = stringParam(req.query.file);
|
|
140
|
+
if (!file) {
|
|
141
|
+
res.status(400).json({ error: 'file query param is required' });
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const stats = await gitService.getFileStats(file);
|
|
145
|
+
res.json(stats);
|
|
146
|
+
}));
|
|
147
|
+
app.get('/api/impact/:hash', wrap(async (req, res) => {
|
|
148
|
+
const impact = await (0, impact_1.getCommitImpact)(gitService, req.params.hash);
|
|
149
|
+
res.json(impact);
|
|
150
|
+
}));
|
|
151
|
+
app.get('/api/insights', wrap(async (req, res) => {
|
|
152
|
+
const bundle = await (0, insights_1.computeInsights)(gitService, {
|
|
153
|
+
since: stringParam(req.query.since),
|
|
154
|
+
until: stringParam(req.query.until),
|
|
155
|
+
maxCommits: numberParam(req.query.maxCommits, 500)
|
|
156
|
+
});
|
|
157
|
+
res.json(bundle);
|
|
158
|
+
}));
|
|
159
|
+
app.post('/api/summarize-diff', wrap(async (req, res) => {
|
|
160
|
+
const text = typeof req.body?.text === 'string' ? req.body.text : '';
|
|
161
|
+
if (!text) {
|
|
162
|
+
res.status(400).json({ error: 'text body field is required' });
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (!llmService.isAi) {
|
|
166
|
+
res.status(503).json({ error: 'No AI provider configured. Set ANTHROPIC_API_KEY or OPENAI_API_KEY.' });
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const summary = await llmService.summarize(text, {
|
|
170
|
+
hint: 'Summarize this code diff in 2-3 sentences for a developer skimming the change.'
|
|
171
|
+
});
|
|
172
|
+
res.json({ summary, provider: llmService.name });
|
|
173
|
+
}));
|
|
174
|
+
app.post('/api/explain-commit/:hash', wrap(async (req, res) => {
|
|
175
|
+
if (!llmService.isAi) {
|
|
176
|
+
res.status(503).json({ error: 'No AI provider configured. Set ANTHROPIC_API_KEY or OPENAI_API_KEY.' });
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const commit = await gitService.getCommit(req.params.hash);
|
|
180
|
+
const diff = await gitService.getDiff(req.params.hash);
|
|
181
|
+
const text = [
|
|
182
|
+
`Subject: ${commit.subject}`,
|
|
183
|
+
commit.body ? `Body:\n${commit.body}` : '',
|
|
184
|
+
'Changed files:',
|
|
185
|
+
...diff.slice(0, 25).map((f) => `- ${f.file} (+${f.additions} -${f.deletions})`)
|
|
186
|
+
]
|
|
187
|
+
.filter(Boolean)
|
|
188
|
+
.join('\n');
|
|
189
|
+
const summary = await llmService.summarize(text, {
|
|
190
|
+
hint: 'Explain in plain English what this commit changes and why a reviewer should care.'
|
|
191
|
+
});
|
|
192
|
+
res.json({ summary, provider: llmService.name });
|
|
193
|
+
}));
|
|
194
|
+
app.get('/api/annotations/:hash', wrap(async (req, res) => {
|
|
195
|
+
const list = await annotations.list(req.params.hash);
|
|
196
|
+
res.json(list);
|
|
197
|
+
}));
|
|
198
|
+
app.post('/api/annotations/:hash', wrap(async (req, res) => {
|
|
199
|
+
const author = typeof req.body?.author === 'string' ? req.body.author : 'anonymous';
|
|
200
|
+
const body = typeof req.body?.body === 'string' ? req.body.body.trim() : '';
|
|
201
|
+
if (!body) {
|
|
202
|
+
res.status(400).json({ error: 'body is required' });
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (body.length > 5000) {
|
|
206
|
+
res.status(413).json({ error: 'comment too long' });
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const created = await annotations.add(req.params.hash, { author, body });
|
|
210
|
+
res.status(201).json(created);
|
|
211
|
+
}));
|
|
212
|
+
app.delete('/api/annotations/:hash/:id', wrap(async (req, res) => {
|
|
213
|
+
const ok = await annotations.remove(req.params.hash, req.params.id);
|
|
214
|
+
res.status(ok ? 204 : 404).end();
|
|
215
|
+
}));
|
|
81
216
|
app.get('/api/blame', wrap(async (req, res) => {
|
|
82
217
|
const file = stringParam(req.query.file);
|
|
83
218
|
if (!file) {
|
|
@@ -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":";;;;;AAqCA,kCAsUC;AA3WD,sDAAkF;AAClF,gDAAwB;AACxB,oDAA4B;AAC5B,8DAAsC;AACtC,4EAA2C;AAC3C,+BAA+D;AAC/D,gDAAwB;AACxB,4CAAoB;AACpB,6CAA+D;AAC/D,gDAAgD;AAChD,sDAA0D;AAC1D,yCAAyC;AACzC,+BAA6D;AAC7D,qCAA2C;AAC3C,yCAA6C;AAC7C,+CAAiD;AAmBjD,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,UAAU,GAAG,IAAA,0BAAoB,EAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACpE,MAAM,WAAW,GAAG,IAAI,8BAAgB,CAAC,GAAG,CAAC,CAAC;IAE9C,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,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE;YACzD,gBAAgB,EAAE,CAAC,CAAC,WAAW;SAChC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CACL,cAAc,EACd,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC;YACzC,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,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,CAAC,CAAC;QACH,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,CAAC,CAAC;QACvD,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,CAAC,CAAC;QACrD,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,MAAM,GAAG,MAAM,IAAA,sBAAW,EAAC,UAAU,EAAE,UAAU,EAAE;YACvD,KAAK,EAAE,CAAC;YACR,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,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,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,CAAC,CAAC;QAC/C,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,CAAC,CAAC;QAClE,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,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,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;SACnD,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,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qEAAqE,EAAE,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE;YAC/C,IAAI,EAAE,gFAAgF;SACvF,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,IAAI,CACN,2BAA2B,EAC3B,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qEAAqE,EAAE,CAAC,CAAC;YACvG,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,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE;YAC/C,IAAI,EAAE,mFAAmF;SAC1F,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,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,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,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACtF,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5F,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,CACX,OAA8E;IAE9E,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,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,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { GitService } from './gitService';
|
|
2
|
+
export interface Snapshot {
|
|
3
|
+
at: string;
|
|
4
|
+
ref: string | null;
|
|
5
|
+
branches: Record<string, string>;
|
|
6
|
+
tags: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get the repo state at a point in time: HEAD/branch/tag heads as of `atIso`.
|
|
10
|
+
* Implementation: for each branch/tag ref, find the most recent commit
|
|
11
|
+
* with committer date <= atIso (`git rev-list -1 --before=...`).
|
|
12
|
+
*
|
|
13
|
+
* Tags are typically immutable, but historically were placed at a different
|
|
14
|
+
* commit so we still resolve them at the snapshot moment.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getSnapshot(gitService: GitService, atIso: string): Promise<Snapshot>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSnapshot = getSnapshot;
|
|
4
|
+
/**
|
|
5
|
+
* Get the repo state at a point in time: HEAD/branch/tag heads as of `atIso`.
|
|
6
|
+
* Implementation: for each branch/tag ref, find the most recent commit
|
|
7
|
+
* with committer date <= atIso (`git rev-list -1 --before=...`).
|
|
8
|
+
*
|
|
9
|
+
* Tags are typically immutable, but historically were placed at a different
|
|
10
|
+
* commit so we still resolve them at the snapshot moment.
|
|
11
|
+
*/
|
|
12
|
+
async function getSnapshot(gitService, atIso) {
|
|
13
|
+
const [branches, tags] = await Promise.all([
|
|
14
|
+
gitService.getBranches(),
|
|
15
|
+
gitService.getTags()
|
|
16
|
+
]);
|
|
17
|
+
const branchEntries = await Promise.all(branches.map(async (b) => {
|
|
18
|
+
const hash = await gitService.revAt(b, atIso).catch(() => null);
|
|
19
|
+
return [b, hash];
|
|
20
|
+
}));
|
|
21
|
+
const tagEntries = await Promise.all(tags.map(async (t) => {
|
|
22
|
+
const hash = await gitService.revAt(t, atIso).catch(() => null);
|
|
23
|
+
return [t, hash];
|
|
24
|
+
}));
|
|
25
|
+
const branchMap = {};
|
|
26
|
+
for (const [b, hash] of branchEntries)
|
|
27
|
+
if (hash)
|
|
28
|
+
branchMap[b] = hash;
|
|
29
|
+
const tagMap = {};
|
|
30
|
+
for (const [t, hash] of tagEntries)
|
|
31
|
+
if (hash)
|
|
32
|
+
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);
|
|
35
|
+
return {
|
|
36
|
+
at: atIso,
|
|
37
|
+
ref: head,
|
|
38
|
+
branches: branchMap,
|
|
39
|
+
tags: tagMap
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +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"}
|
package/docs/launch.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# v3.0 launch — talking points
|
|
2
|
+
|
|
3
|
+
## Hacker News title (proposed)
|
|
4
|
+
|
|
5
|
+
> Show HN: I added natural-language search and time travel to git-history-ui
|
|
6
|
+
|
|
7
|
+
## Lede (~120 words)
|
|
8
|
+
|
|
9
|
+
git-history-ui v3 turns your local git history into something you can ask
|
|
10
|
+
questions of. Drop into any repo, run `npx git-history-ui@latest`, and you
|
|
11
|
+
get three features that used to need GitHub Pro, a desktop client, or a
|
|
12
|
+
homegrown script:
|
|
13
|
+
|
|
14
|
+
1. **Natural-language search.** Type "login bug last month" or "payments by
|
|
15
|
+
alice". A heuristic intent parser handles dates, authors, and synonym
|
|
16
|
+
expansion with no setup; if you set `ANTHROPIC_API_KEY` (or
|
|
17
|
+
`OPENAI_API_KEY`), the same query gets semantically re-ranked by Claude
|
|
18
|
+
or GPT — but only the prompt leaves your machine, never the code.
|
|
19
|
+
2. **PR / feature grouping.** A "Grouped" toggle clusters commits by GitHub
|
|
20
|
+
merge / squash patterns and Conventional Commits scope, turning a wall
|
|
21
|
+
of 200 commits into ~20 PRs you can scan.
|
|
22
|
+
3. **Time travel.** A horizontal timeline slider shows the repo state at any
|
|
23
|
+
moment and computes a live diff against HEAD.
|
|
24
|
+
|
|
25
|
+
Plus file-level history, blame, commit impact analysis, an insights
|
|
26
|
+
dashboard, and an "Explain this change" AI button on every commit. All
|
|
27
|
+
local. All zero-config. AI is opt-in.
|
|
28
|
+
|
|
29
|
+
## What to emphasize in comments
|
|
30
|
+
|
|
31
|
+
- **Privacy.** Heuristic mode is the default. AI calls only happen on user
|
|
32
|
+
intent (clicking Explain / Summarize, or running an NL search) and only
|
|
33
|
+
send the prompt — never the working tree.
|
|
34
|
+
- **Zero deps to add.** No new npm packages were added in v3 — the LLM
|
|
35
|
+
providers use `fetch`, the date parser is hand-rolled, the heuristic
|
|
36
|
+
scorer is plain TF-IDF. Same install footprint as v2.
|
|
37
|
+
- **Open to providers.** Anthropic and OpenAI today; the `LlmService`
|
|
38
|
+
interface is two methods (`score`, `summarize`) so adding Ollama, Gemini,
|
|
39
|
+
or a self-hosted model is a single file.
|
|
40
|
+
- **What's next (Phase 2 + 3).** Better diff viz (intra-line, scroll-sync
|
|
41
|
+
split), d3 charts in the insights dashboard, SQLite background indexer
|
|
42
|
+
for huge repos, virtualized graph rendering, GitHub App + Chrome
|
|
43
|
+
extension for "open in git-history-ui" deep links, CLI presets.
|
|
44
|
+
|
|
45
|
+
## Demo script (~60s)
|
|
46
|
+
|
|
47
|
+
1. `cd ~/some-busy-repo && npx git-history-ui@latest`.
|
|
48
|
+
2. Click the search icon — it flips to "AI" mode. Type
|
|
49
|
+
"login bug last month". Show the parsed-query chips appear.
|
|
50
|
+
3. Click "Grouped" in the toolbar. Expand a PR group, click a commit.
|
|
51
|
+
4. On the commit detail, click "✨ Explain change". (If you've set a key,
|
|
52
|
+
it actually summarizes; otherwise it shows a clear "set a key" message.)
|
|
53
|
+
5. Click "Show impact" — point out the dependency ripple list.
|
|
54
|
+
6. Top nav → "Timeline". Drag the slider to last quarter, watch HEAD
|
|
55
|
+
pointers update and the "Diff vs HEAD" panel populate.
|
|
56
|
+
7. Top nav → "Insights". Hotspots + risky files.
|
|
57
|
+
8. Click any file in a commit's Files panel → land on `/file/...` →
|
|
58
|
+
switch to the Blame tab.
|
|
59
|
+
|
|
60
|
+
## Screenshots needed before publishing
|
|
61
|
+
|
|
62
|
+
- [ ] Toolbar with NL chips visible
|
|
63
|
+
- [ ] Grouped commit list with PR cards
|
|
64
|
+
- [ ] Timeline page with slider mid-history
|
|
65
|
+
- [ ] File history → Blame tab
|
|
66
|
+
- [ ] Insights dashboard (hotspots + churn chart)
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "git-history-ui",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "Git Intelligence in your browser — natural-language search, PR/feature grouping, time-travel snapshots, file history, blame, commit impact, and an insights dashboard. Optional AI integration (Anthropic / OpenAI).",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"git-history-ui": "dist/cli.js"
|
|
@@ -50,7 +50,16 @@
|
|
|
50
50
|
"developer-tools",
|
|
51
51
|
"git-graph",
|
|
52
52
|
"git-log",
|
|
53
|
-
"command-palette"
|
|
53
|
+
"command-palette",
|
|
54
|
+
"natural-language-search",
|
|
55
|
+
"ai",
|
|
56
|
+
"anthropic",
|
|
57
|
+
"openai",
|
|
58
|
+
"claude",
|
|
59
|
+
"blame",
|
|
60
|
+
"code-insights",
|
|
61
|
+
"time-travel",
|
|
62
|
+
"pull-request"
|
|
54
63
|
],
|
|
55
64
|
"author": "Ankit Sharma <ankit.sharma199803@gmail.com>",
|
|
56
65
|
"license": "MIT",
|