argustack 0.1.26 → 0.1.27

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.
@@ -0,0 +1,270 @@
1
+ import { readFileSync, existsSync, readdirSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ function noop(_message) { }
4
+ export class BuildGraphUseCase {
5
+ storage;
6
+ constructor(storage) {
7
+ this.storage = storage;
8
+ }
9
+ async execute(options = {}) {
10
+ const log = options.onProgress ?? noop;
11
+ await this.storage.initialize();
12
+ if (!options.since) {
13
+ log('Clearing structural graph...');
14
+ await this.storage.clearGraph();
15
+ }
16
+ const entities = [];
17
+ const relationships = [];
18
+ const entityMap = new Map();
19
+ let nextId = 1;
20
+ const getOrCreateEntity = (name, type, properties = {}) => {
21
+ const key = `${type}::${name}`;
22
+ const existing = entityMap.get(key);
23
+ if (existing !== undefined) {
24
+ return existing;
25
+ }
26
+ const id = nextId++;
27
+ entityMap.set(key, id);
28
+ entities.push({ id, name, type, properties });
29
+ return id;
30
+ };
31
+ log('Extracting entities from issues...');
32
+ const issueResult = await this.storage.query(`SELECT issue_key, summary, issue_type, status, assignee, reporter, labels, components, parent_key
33
+ FROM issues ${options.since ? 'WHERE updated >= $1' : ''} ORDER BY issue_key`, options.since ? [options.since] : []);
34
+ for (const row of issueResult.rows) {
35
+ const issueKey = row['issue_key'];
36
+ const issueId = getOrCreateEntity(issueKey, 'issue', {
37
+ summary: row['summary'],
38
+ issueType: row['issue_type'],
39
+ status: row['status'],
40
+ });
41
+ const assignee = row['assignee'];
42
+ if (assignee) {
43
+ const devId = getOrCreateEntity(assignee, 'developer', {});
44
+ relationships.push({ sourceId: issueId, targetId: devId, type: 'assigned_to', weight: 1, source: 'structural', properties: {} });
45
+ }
46
+ const reporter = row['reporter'];
47
+ if (reporter) {
48
+ const devId = getOrCreateEntity(reporter, 'developer', {});
49
+ relationships.push({ sourceId: issueId, targetId: devId, type: 'reported_by', weight: 1, source: 'structural', properties: {} });
50
+ }
51
+ const labels = row['labels'];
52
+ if (labels) {
53
+ for (const label of labels) {
54
+ const labelId = getOrCreateEntity(label, 'label', {});
55
+ relationships.push({ sourceId: issueId, targetId: labelId, type: 'labeled', weight: 1, source: 'structural', properties: {} });
56
+ }
57
+ }
58
+ const components = row['components'];
59
+ if (components) {
60
+ for (const comp of components) {
61
+ const compId = getOrCreateEntity(comp, 'component', {});
62
+ relationships.push({ sourceId: issueId, targetId: compId, type: 'in_component', weight: 1, source: 'structural', properties: {} });
63
+ }
64
+ }
65
+ const parentKey = row['parent_key'];
66
+ if (parentKey) {
67
+ const parentId = getOrCreateEntity(parentKey, 'issue', {});
68
+ relationships.push({ sourceId: parentId, targetId: issueId, type: 'parent_of', weight: 1, source: 'structural', properties: {} });
69
+ }
70
+ }
71
+ log(` ${String(issueResult.rows.length)} issues processed`);
72
+ log('Extracting entities from commits...');
73
+ const commitResult = await this.storage.query(`SELECT hash, author_name, message FROM commits ${options.since ? 'WHERE committed_at >= $1' : ''} ORDER BY committed_at`, options.since ? [options.since] : []);
74
+ for (const row of commitResult.rows) {
75
+ const author = row['author_name'];
76
+ if (author) {
77
+ getOrCreateEntity(author, 'developer', {});
78
+ }
79
+ }
80
+ log(` ${String(commitResult.rows.length)} commits processed`);
81
+ log('Extracting commit→issue references...');
82
+ const refResult = await this.storage.query(`SELECT cr.commit_hash, cr.issue_key, c.author_name
83
+ FROM commit_issue_refs cr JOIN commits c ON c.hash = cr.commit_hash`, []);
84
+ for (const row of refResult.rows) {
85
+ const issueKey = row['issue_key'];
86
+ const author = row['author_name'];
87
+ const issueId = getOrCreateEntity(issueKey, 'issue', {});
88
+ if (author) {
89
+ const devId = getOrCreateEntity(author, 'developer', {});
90
+ relationships.push({ sourceId: devId, targetId: issueId, type: 'authored_commit_for', weight: 1, source: 'structural', properties: {} });
91
+ }
92
+ }
93
+ log(` ${String(refResult.rows.length)} commit→issue refs`);
94
+ log('Extracting commit→file modules...');
95
+ const fileResult = await this.storage.query(`SELECT cf.commit_hash, cf.file_path, c.author_name
96
+ FROM commit_files cf JOIN commits c ON c.hash = cf.commit_hash`, []);
97
+ for (const row of fileResult.rows) {
98
+ const filePath = row['file_path'];
99
+ const author = row['author_name'];
100
+ const moduleName = extractModuleName(filePath);
101
+ const moduleId = getOrCreateEntity(moduleName, 'module', {});
102
+ if (author) {
103
+ const devId = getOrCreateEntity(author, 'developer', {});
104
+ const existing = relationships.find((r) => r.sourceId === devId && r.targetId === moduleId && r.type === 'changed');
105
+ if (existing) {
106
+ existing.weight++;
107
+ }
108
+ else {
109
+ relationships.push({ sourceId: devId, targetId: moduleId, type: 'changed', weight: 1, source: 'structural', properties: {} });
110
+ }
111
+ }
112
+ }
113
+ log(` ${String(fileResult.rows.length)} file changes processed`);
114
+ log('Extracting PR→issue references...');
115
+ const prRefResult = await this.storage.query(`SELECT pr.number, pr.author, pri.issue_key
116
+ FROM pr_issue_refs pri JOIN pull_requests pr ON pr.number = pri.pr_number AND pr.repo_full_name = pri.repo_full_name`, []);
117
+ for (const row of prRefResult.rows) {
118
+ const prNumber = String(row['number']);
119
+ const issueKey = row['issue_key'];
120
+ const author = row['author'];
121
+ const prId = getOrCreateEntity(`#${prNumber}`, 'pr', {});
122
+ const issueId = getOrCreateEntity(issueKey, 'issue', {});
123
+ relationships.push({ sourceId: prId, targetId: issueId, type: 'implements', weight: 1, source: 'structural', properties: {} });
124
+ if (author) {
125
+ const devId = getOrCreateEntity(author, 'developer', {});
126
+ relationships.push({ sourceId: devId, targetId: prId, type: 'authored_pr', weight: 1, source: 'structural', properties: {} });
127
+ }
128
+ }
129
+ log(` ${String(prRefResult.rows.length)} PR→issue refs`);
130
+ log('Co-change analysis...');
131
+ const coChangeResult = await this.storage.query(`SELECT a.file_path as file_a, b.file_path as file_b, COUNT(*) as co_count
132
+ FROM commit_files a
133
+ JOIN commit_files b ON a.commit_hash = b.commit_hash AND a.file_path < b.file_path
134
+ GROUP BY a.file_path, b.file_path
135
+ HAVING COUNT(*) >= 3
136
+ ORDER BY co_count DESC
137
+ LIMIT 500`, []);
138
+ for (const row of coChangeResult.rows) {
139
+ const modA = extractModuleName(row['file_a']);
140
+ const modB = extractModuleName(row['file_b']);
141
+ if (modA !== modB) {
142
+ const idA = getOrCreateEntity(modA, 'module', {});
143
+ const idB = getOrCreateEntity(modB, 'module', {});
144
+ const weight = Number(row['co_count']);
145
+ relationships.push({ sourceId: idA, targetId: idB, type: 'co_changes', weight, source: 'structural', properties: {} });
146
+ }
147
+ }
148
+ log(` ${String(coChangeResult.rows.length)} co-change pairs`);
149
+ if (options.repoPaths) {
150
+ for (const repoPath of options.repoPaths) {
151
+ log(`Import analysis: ${repoPath}...`);
152
+ const importRels = extractImports(repoPath, getOrCreateEntity);
153
+ relationships.push(...importRels);
154
+ log(` ${String(importRels.length)} import relationships`);
155
+ const pkgRels = extractPackageDeps(repoPath, getOrCreateEntity);
156
+ relationships.push(...pkgRels);
157
+ log(` ${String(pkgRels.length)} package dependencies`);
158
+ }
159
+ }
160
+ log(`Saving graph: ${String(entities.length)} entities, ${String(relationships.length)} relationships...`);
161
+ await this.storage.saveGraphEntities(entities);
162
+ const savedEntities = await this.storage.query(`SELECT id, name, type FROM graph_entities`, []);
163
+ const dbEntityMap = new Map();
164
+ for (const row of savedEntities.rows) {
165
+ dbEntityMap.set(`${row['type']}::${row['name']}`, row['id']);
166
+ }
167
+ const mappedRels = relationships.map((r) => {
168
+ const sourceEntity = entities.find((e) => e.id === r.sourceId);
169
+ const targetEntity = entities.find((e) => e.id === r.targetId);
170
+ if (!sourceEntity || !targetEntity) {
171
+ return null;
172
+ }
173
+ const dbSourceId = dbEntityMap.get(`${sourceEntity.type}::${sourceEntity.name}`);
174
+ const dbTargetId = dbEntityMap.get(`${targetEntity.type}::${targetEntity.name}`);
175
+ if (!dbSourceId || !dbTargetId) {
176
+ return null;
177
+ }
178
+ return { ...r, sourceId: dbSourceId, targetId: dbTargetId };
179
+ }).filter((r) => r !== null);
180
+ await this.storage.saveGraphRelationships(mappedRels);
181
+ const stats = await this.storage.getGraphStats();
182
+ log(`Graph built: ${String(stats.entityCount)} entities, ${String(stats.relationshipCount)} relationships, ${String(stats.observationCount)} observations`);
183
+ return stats;
184
+ }
185
+ }
186
+ function extractModuleName(filePath) {
187
+ const parts = filePath.split('/').filter(Boolean);
188
+ if (parts.length <= 2) {
189
+ return filePath;
190
+ }
191
+ return parts.slice(0, 2).join('/');
192
+ }
193
+ function extractImports(repoPath, getOrCreate) {
194
+ const rels = [];
195
+ const importRegex = /(?:import\s+.*\s+from\s+['"](.+?)['"]|require\(['"](.+?)['"]\))/g;
196
+ try {
197
+ const files = collectSourceFiles(repoPath);
198
+ for (const file of files.slice(0, 500)) {
199
+ const content = readFileSync(file, 'utf-8');
200
+ const fileModule = extractModuleName(file.replace(repoPath, '').replace(/^\//, ''));
201
+ let match = importRegex.exec(content);
202
+ while (match !== null) {
203
+ const imported = match[1] ?? match[2] ?? '';
204
+ if (imported.startsWith('.')) {
205
+ const resolvedDir = dirname(file);
206
+ const resolvedPath = join(resolvedDir, imported).replace(repoPath, '').replace(/^\//, '');
207
+ const importedModule = extractModuleName(resolvedPath);
208
+ if (importedModule !== fileModule) {
209
+ const fromId = getOrCreate(fileModule, 'module', {});
210
+ const toId = getOrCreate(importedModule, 'module', {});
211
+ rels.push({ sourceId: fromId, targetId: toId, type: 'imports', weight: 1, source: 'structural', properties: {} });
212
+ }
213
+ }
214
+ match = importRegex.exec(content);
215
+ }
216
+ }
217
+ }
218
+ catch {
219
+ /* repo may not be accessible */
220
+ }
221
+ return rels;
222
+ }
223
+ function extractPackageDeps(repoPath, getOrCreate) {
224
+ const rels = [];
225
+ const pkgPath = join(repoPath, 'package.json');
226
+ if (existsSync(pkgPath)) {
227
+ try {
228
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
229
+ const projectName = typeof pkg['name'] === 'string' ? pkg['name'] : 'project';
230
+ const projectId = getOrCreate(projectName, 'package', {});
231
+ const rawDeps = pkg['dependencies'] ?? {};
232
+ const rawDevDeps = pkg['devDependencies'] ?? {};
233
+ const deps = { ...rawDeps, ...rawDevDeps };
234
+ for (const depName of Object.keys(deps)) {
235
+ const depId = getOrCreate(depName, 'package', {});
236
+ rels.push({ sourceId: projectId, targetId: depId, type: 'depends_on_pkg', weight: 1, source: 'structural', properties: {} });
237
+ }
238
+ }
239
+ catch {
240
+ /* invalid package.json */
241
+ }
242
+ }
243
+ return rels;
244
+ }
245
+ function collectSourceFiles(dir, depth = 0) {
246
+ if (depth > 5) {
247
+ return [];
248
+ }
249
+ const files = [];
250
+ try {
251
+ const entries = readdirSync(dir, { withFileTypes: true });
252
+ for (const entry of entries) {
253
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist' || entry.name === 'build') {
254
+ continue;
255
+ }
256
+ const fullPath = join(dir, entry.name);
257
+ if (entry.isDirectory()) {
258
+ files.push(...collectSourceFiles(fullPath, depth + 1));
259
+ }
260
+ else if (/\.(ts|js|tsx|jsx|py|java|kt|rs)$/.test(entry.name)) {
261
+ files.push(fullPath);
262
+ }
263
+ }
264
+ }
265
+ catch {
266
+ /* permission denied etc */
267
+ }
268
+ return files;
269
+ }
270
+ //# sourceMappingURL=build-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-graph.js","sourceRoot":"","sources":["../../src/use-cases/build-graph.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,SAAS,IAAI,CAAC,QAAgB,IAA4B,CAAC;AAQ3D,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,OAAiB;QAAjB,YAAO,GAAP,OAAO,CAAU;IAAG,CAAC;IAElD,KAAK,CAAC,OAAO,CAAC,UAA6B,EAAE;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QAEvC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAEhC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,GAAG,CAAC,8BAA8B,CAAC,CAAC;YACpC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,MAAM,aAAa,GAAwB,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE5C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,aAAsC,EAAE,EAAU,EAAE;YACzG,MAAM,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;YACpB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAC1C;qBACe,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAC9E,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CACrC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAW,CAAC;YAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE;gBACnD,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;gBACvB,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC;gBAC5B,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC;aACtB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAkB,CAAC;YAClD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC3D,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YACnI,CAAC;YAED,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAkB,CAAC;YAClD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC3D,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YACnI,CAAC;YAED,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAoB,CAAC;YAChD,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;oBACtD,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;gBACjI,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAoB,CAAC;YACxD,IAAI,UAAU,EAAE,CAAC;gBACf,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;oBACxD,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;gBACrI,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAkB,CAAC;YACrD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC3D,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YACpI,CAAC;QACH,CAAC;QACD,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAE7D,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAC3C,kDAAkD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,wBAAwB,EACzH,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CACrC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAkB,CAAC;YACnD,IAAI,MAAM,EAAE,CAAC;gBACX,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,GAAG,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE/D,GAAG,CAAC,uCAAuC,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CACxC;2EACqE,EACrE,EAAE,CACH,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAW,CAAC;YAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAkB,CAAC;YACnD,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACzD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;gBACzD,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3I,CAAC;QACH,CAAC;QACD,GAAG,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE5D,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CACzC;sEACgE,EAChE,EAAE,CACH,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAW,CAAC;YAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAkB,CAAC;YACnD,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YAE7D,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;gBACzD,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;gBACpH,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACN,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChI,CAAC;YACH,CAAC;QACH,CAAC;QACD,GAAG,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAElE,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAC1C;4HACsH,EACtH,EAAE,CACH,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAW,CAAC;YAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAkB,CAAC;YAE9C,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;YACzD,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YAE/H,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;gBACzD,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YAChI,CAAC;QACH,CAAC;QACD,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAE1D,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC7B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAC7C;;;;;;iBAMW,EACX,EAAE,CACH,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAW,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAW,CAAC,CAAC;YACxD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClD,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;gBACvC,aAAa,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YACzH,CAAC;QACH,CAAC;QACD,GAAG,CAAC,KAAK,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAE/D,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,GAAG,CAAC,oBAAoB,QAAQ,KAAK,CAAC,CAAC;gBACvC,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;gBAC/D,aAAa,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAClC,GAAG,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBAE3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;gBAChE,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;gBAC/B,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,GAAG,CAAC,iBAAiB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC3G,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE/C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAC5C,2CAA2C,EAAE,EAAE,CAChD,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;YACrC,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAW,KAAK,GAAG,CAAC,MAAM,CAAW,EAAE,EAAE,GAAG,CAAC,IAAI,CAAW,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;YAEpD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;YACjF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;YACjF,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;YAEhD,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QAC9D,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAA0B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAErD,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACjD,GAAG,CAAC,gBAAgB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAC5J,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAAC,OAAO,QAAQ,CAAC;IAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,WAAoF;IAC5H,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,kEAAkE,CAAC;IAEvF,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YACpF,IAAI,KAAK,GAA2B,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC1F,MAAM,cAAc,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;oBACvD,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;wBAClC,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACrD,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACvD,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;oBACpH,CAAC;gBACH,CAAC;gBACD,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,WAAoF;IAChI,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAE/C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAA4B,CAAC;YAClF,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9E,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAE1D,MAAM,OAAO,GAAI,GAAG,CAAC,cAAc,CAAwC,IAAI,EAAE,CAAC;YAClF,MAAM,UAAU,GAAI,GAAG,CAAC,iBAAiB,CAAwC,IAAI,EAAE,CAAC;YACxF,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC;YAC3C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/H,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,KAAK,GAAG,CAAC;IAChD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACnH,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,IAAI,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "argustack",
3
- "version": "0.1.26",
3
+ "version": "0.1.27",
4
4
  "description": "Project analysis platform — Jira + Git + DB",
5
5
  "type": "module",
6
6
  "bin": {