modular-studio 0.2.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/LICENSE +21 -0
- package/README.md +261 -0
- package/dist/assets/graphPopulator-C6jg83nL.js +1 -0
- package/dist/assets/index-CXhIX28x.js +634 -0
- package/dist/assets/index-CeNF0r-K.css +1 -0
- package/dist/assets/jszip.min-BlpRodxc.js +2 -0
- package/dist/index.html +16 -0
- package/dist/vite.svg +1 -0
- package/dist-server/bin/modular-mcp.d.ts +8 -0
- package/dist-server/bin/modular-mcp.d.ts.map +1 -0
- package/dist-server/bin/modular-mcp.js +158 -0
- package/dist-server/bin/modular-mcp.js.map +1 -0
- package/dist-server/bin/modular-studio.d.ts +3 -0
- package/dist-server/bin/modular-studio.d.ts.map +1 -0
- package/dist-server/bin/modular-studio.js +63 -0
- package/dist-server/bin/modular-studio.js.map +1 -0
- package/dist-server/server/config.d.ts +4 -0
- package/dist-server/server/config.d.ts.map +1 -0
- package/dist-server/server/config.js +33 -0
- package/dist-server/server/config.js.map +1 -0
- package/dist-server/server/data/mcp-clients.json +5 -0
- package/dist-server/server/index.d.ts +3 -0
- package/dist-server/server/index.d.ts.map +1 -0
- package/dist-server/server/index.js +174 -0
- package/dist-server/server/index.js.map +1 -0
- package/dist-server/server/mcp/manager.d.ts +47 -0
- package/dist-server/server/mcp/manager.d.ts.map +1 -0
- package/dist-server/server/mcp/manager.js +203 -0
- package/dist-server/server/mcp/manager.js.map +1 -0
- package/dist-server/server/mcp/modular-server.d.ts +55 -0
- package/dist-server/server/mcp/modular-server.d.ts.map +1 -0
- package/dist-server/server/mcp/modular-server.js +492 -0
- package/dist-server/server/mcp/modular-server.js.map +1 -0
- package/dist-server/server/mcp/transport.d.ts +29 -0
- package/dist-server/server/mcp/transport.d.ts.map +1 -0
- package/dist-server/server/mcp/transport.js +61 -0
- package/dist-server/server/mcp/transport.js.map +1 -0
- package/dist-server/server/routes/agent-sdk.d.ts +3 -0
- package/dist-server/server/routes/agent-sdk.d.ts.map +1 -0
- package/dist-server/server/routes/agent-sdk.js +99 -0
- package/dist-server/server/routes/agent-sdk.js.map +1 -0
- package/dist-server/server/routes/agents.d.ts +10 -0
- package/dist-server/server/routes/agents.d.ts.map +1 -0
- package/dist-server/server/routes/agents.js +61 -0
- package/dist-server/server/routes/agents.js.map +1 -0
- package/dist-server/server/routes/auth-codex.d.ts +3 -0
- package/dist-server/server/routes/auth-codex.d.ts.map +1 -0
- package/dist-server/server/routes/auth-codex.js +51 -0
- package/dist-server/server/routes/auth-codex.js.map +1 -0
- package/dist-server/server/routes/capabilities.d.ts +3 -0
- package/dist-server/server/routes/capabilities.d.ts.map +1 -0
- package/dist-server/server/routes/capabilities.js +32 -0
- package/dist-server/server/routes/capabilities.js.map +1 -0
- package/dist-server/server/routes/claude-config.d.ts +3 -0
- package/dist-server/server/routes/claude-config.d.ts.map +1 -0
- package/dist-server/server/routes/claude-config.js +146 -0
- package/dist-server/server/routes/claude-config.js.map +1 -0
- package/dist-server/server/routes/connectors.d.ts +12 -0
- package/dist-server/server/routes/connectors.d.ts.map +1 -0
- package/dist-server/server/routes/connectors.js +325 -0
- package/dist-server/server/routes/connectors.js.map +1 -0
- package/dist-server/server/routes/embeddings.d.ts +6 -0
- package/dist-server/server/routes/embeddings.d.ts.map +1 -0
- package/dist-server/server/routes/embeddings.js +130 -0
- package/dist-server/server/routes/embeddings.js.map +1 -0
- package/dist-server/server/routes/health.d.ts +9 -0
- package/dist-server/server/routes/health.d.ts.map +1 -0
- package/dist-server/server/routes/health.js +284 -0
- package/dist-server/server/routes/health.js.map +1 -0
- package/dist-server/server/routes/knowledge.d.ts +3 -0
- package/dist-server/server/routes/knowledge.d.ts.map +1 -0
- package/dist-server/server/routes/knowledge.js +534 -0
- package/dist-server/server/routes/knowledge.js.map +1 -0
- package/dist-server/server/routes/llm.d.ts +3 -0
- package/dist-server/server/routes/llm.d.ts.map +1 -0
- package/dist-server/server/routes/llm.js +200 -0
- package/dist-server/server/routes/llm.js.map +1 -0
- package/dist-server/server/routes/mcp-oauth.d.ts +12 -0
- package/dist-server/server/routes/mcp-oauth.d.ts.map +1 -0
- package/dist-server/server/routes/mcp-oauth.js +137 -0
- package/dist-server/server/routes/mcp-oauth.js.map +1 -0
- package/dist-server/server/routes/mcp.d.ts +3 -0
- package/dist-server/server/routes/mcp.d.ts.map +1 -0
- package/dist-server/server/routes/mcp.js +177 -0
- package/dist-server/server/routes/mcp.js.map +1 -0
- package/dist-server/server/routes/pipeline.d.ts +45 -0
- package/dist-server/server/routes/pipeline.d.ts.map +1 -0
- package/dist-server/server/routes/pipeline.js +483 -0
- package/dist-server/server/routes/pipeline.js.map +1 -0
- package/dist-server/server/routes/providers.d.ts +3 -0
- package/dist-server/server/routes/providers.d.ts.map +1 -0
- package/dist-server/server/routes/providers.js +204 -0
- package/dist-server/server/routes/providers.js.map +1 -0
- package/dist-server/server/routes/qualification.d.ts +3 -0
- package/dist-server/server/routes/qualification.d.ts.map +1 -0
- package/dist-server/server/routes/qualification.js +105 -0
- package/dist-server/server/routes/qualification.js.map +1 -0
- package/dist-server/server/routes/repo-index.d.ts +4 -0
- package/dist-server/server/routes/repo-index.d.ts.map +1 -0
- package/dist-server/server/routes/repo-index.js +318 -0
- package/dist-server/server/routes/repo-index.js.map +1 -0
- package/dist-server/server/routes/runtime.d.ts +3 -0
- package/dist-server/server/routes/runtime.d.ts.map +1 -0
- package/dist-server/server/routes/runtime.js +122 -0
- package/dist-server/server/routes/runtime.js.map +1 -0
- package/dist-server/server/routes/skills-search.d.ts +3 -0
- package/dist-server/server/routes/skills-search.d.ts.map +1 -0
- package/dist-server/server/routes/skills-search.js +198 -0
- package/dist-server/server/routes/skills-search.js.map +1 -0
- package/dist-server/server/routes/worktrees.d.ts +3 -0
- package/dist-server/server/routes/worktrees.d.ts.map +1 -0
- package/dist-server/server/routes/worktrees.js +70 -0
- package/dist-server/server/routes/worktrees.js.map +1 -0
- package/dist-server/server/services/__tests__/embeddingService.test.d.ts +5 -0
- package/dist-server/server/services/__tests__/embeddingService.test.d.ts.map +1 -0
- package/dist-server/server/services/__tests__/embeddingService.test.js +233 -0
- package/dist-server/server/services/__tests__/embeddingService.test.js.map +1 -0
- package/dist-server/server/services/agentRunner.d.ts +46 -0
- package/dist-server/server/services/agentRunner.d.ts.map +1 -0
- package/dist-server/server/services/agentRunner.js +295 -0
- package/dist-server/server/services/agentRunner.js.map +1 -0
- package/dist-server/server/services/agentStore.d.ts +40 -0
- package/dist-server/server/services/agentStore.d.ts.map +1 -0
- package/dist-server/server/services/agentStore.js +62 -0
- package/dist-server/server/services/agentStore.js.map +1 -0
- package/dist-server/server/services/contentStore.d.ts +32 -0
- package/dist-server/server/services/contentStore.d.ts.map +1 -0
- package/dist-server/server/services/contentStore.js +68 -0
- package/dist-server/server/services/contentStore.js.map +1 -0
- package/dist-server/server/services/embeddingService.d.ts +53 -0
- package/dist-server/server/services/embeddingService.d.ts.map +1 -0
- package/dist-server/server/services/embeddingService.js +199 -0
- package/dist-server/server/services/embeddingService.js.map +1 -0
- package/dist-server/server/services/factExtractor.d.ts +14 -0
- package/dist-server/server/services/factExtractor.d.ts.map +1 -0
- package/dist-server/server/services/factExtractor.js +126 -0
- package/dist-server/server/services/factExtractor.js.map +1 -0
- package/dist-server/server/services/githubIndexer.d.ts +59 -0
- package/dist-server/server/services/githubIndexer.d.ts.map +1 -0
- package/dist-server/server/services/githubIndexer.js +183 -0
- package/dist-server/server/services/githubIndexer.js.map +1 -0
- package/dist-server/server/services/mcpOAuth.d.ts +32 -0
- package/dist-server/server/services/mcpOAuth.d.ts.map +1 -0
- package/dist-server/server/services/mcpOAuth.js +264 -0
- package/dist-server/server/services/mcpOAuth.js.map +1 -0
- package/dist-server/server/services/memoryScorer.d.ts +19 -0
- package/dist-server/server/services/memoryScorer.d.ts.map +1 -0
- package/dist-server/server/services/memoryScorer.js +147 -0
- package/dist-server/server/services/memoryScorer.js.map +1 -0
- package/dist-server/server/services/repoIndexer.d.ts +91 -0
- package/dist-server/server/services/repoIndexer.d.ts.map +1 -0
- package/dist-server/server/services/repoIndexer.js +512 -0
- package/dist-server/server/services/repoIndexer.js.map +1 -0
- package/dist-server/server/services/teamRunner.d.ts +39 -0
- package/dist-server/server/services/teamRunner.d.ts.map +1 -0
- package/dist-server/server/services/teamRunner.js +76 -0
- package/dist-server/server/services/teamRunner.js.map +1 -0
- package/dist-server/server/services/worktreeManager.d.ts +27 -0
- package/dist-server/server/services/worktreeManager.d.ts.map +1 -0
- package/dist-server/server/services/worktreeManager.js +107 -0
- package/dist-server/server/services/worktreeManager.js.map +1 -0
- package/dist-server/server/types.d.ts +30 -0
- package/dist-server/server/types.d.ts.map +1 -0
- package/dist-server/server/types.js +2 -0
- package/dist-server/server/types.js.map +1 -0
- package/dist-server/server/utils/pathSecurity.d.ts +34 -0
- package/dist-server/server/utils/pathSecurity.d.ts.map +1 -0
- package/dist-server/server/utils/pathSecurity.js +78 -0
- package/dist-server/server/utils/pathSecurity.js.map +1 -0
- package/dist-server/src/services/budgetAllocator.d.ts +37 -0
- package/dist-server/src/services/budgetAllocator.d.ts.map +1 -0
- package/dist-server/src/services/budgetAllocator.js +120 -0
- package/dist-server/src/services/budgetAllocator.js.map +1 -0
- package/dist-server/src/services/contradictionDetector.d.ts +18 -0
- package/dist-server/src/services/contradictionDetector.d.ts.map +1 -0
- package/dist-server/src/services/contradictionDetector.js +111 -0
- package/dist-server/src/services/contradictionDetector.js.map +1 -0
- package/dist-server/src/services/treeIndexer.d.ts +91 -0
- package/dist-server/src/services/treeIndexer.d.ts.map +1 -0
- package/dist-server/src/services/treeIndexer.js +289 -0
- package/dist-server/src/services/treeIndexer.js.map +1 -0
- package/dist-server/src/store/knowledgeBase.d.ts +130 -0
- package/dist-server/src/store/knowledgeBase.d.ts.map +1 -0
- package/dist-server/src/store/knowledgeBase.js +299 -0
- package/dist-server/src/store/knowledgeBase.js.map +1 -0
- package/dist-server/tsconfig.server.tsbuildinfo +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export function scoreFact(fact, query, now) {
|
|
2
|
+
const currentTime = now ?? Date.now();
|
|
3
|
+
// Calculate relevance based on keyword overlap
|
|
4
|
+
const factWords = fact.value.toLowerCase().split(/\W+/).filter(word => word.length > 2);
|
|
5
|
+
const queryWords = query.toLowerCase().split(/\W+/).filter(word => word.length > 2);
|
|
6
|
+
if (queryWords.length === 0)
|
|
7
|
+
return 0;
|
|
8
|
+
const intersection = factWords.filter(word => queryWords.includes(word));
|
|
9
|
+
const union = new Set([...factWords, ...queryWords]);
|
|
10
|
+
const relevance = intersection.length / union.size;
|
|
11
|
+
// Calculate recency score (0.99^hours)
|
|
12
|
+
const hoursAgo = (currentTime - (fact.created_at ?? currentTime)) / (1000 * 60 * 60);
|
|
13
|
+
const recency = Math.pow(0.99, hoursAgo);
|
|
14
|
+
// Use importance or default to confidence * 0.8
|
|
15
|
+
const importance = fact.importance ?? fact.confidence * 0.8;
|
|
16
|
+
return relevance + 0.5 * recency + 0.5 * importance;
|
|
17
|
+
}
|
|
18
|
+
export function rankFacts(facts, query, limit, now) {
|
|
19
|
+
const currentTime = now ?? Date.now();
|
|
20
|
+
// Score all facts
|
|
21
|
+
const scoredFacts = facts.map(fact => ({
|
|
22
|
+
...fact,
|
|
23
|
+
score: scoreFact(fact, query, currentTime)
|
|
24
|
+
}));
|
|
25
|
+
// Sort by score descending
|
|
26
|
+
scoredFacts.sort((a, b) => b.score - a.score);
|
|
27
|
+
// Apply limit if specified
|
|
28
|
+
const topFacts = limit ? scoredFacts.slice(0, limit) : scoredFacts;
|
|
29
|
+
// Update accessed_at and access_count for returned facts
|
|
30
|
+
topFacts.forEach(fact => {
|
|
31
|
+
fact.accessed_at = currentTime;
|
|
32
|
+
fact.access_count = (fact.access_count ?? 0) + 1;
|
|
33
|
+
});
|
|
34
|
+
return topFacts;
|
|
35
|
+
}
|
|
36
|
+
export function computeStrength(fact, now) {
|
|
37
|
+
const currentTime = now ?? Date.now();
|
|
38
|
+
// Use importance or default to confidence * 0.8
|
|
39
|
+
const importance = fact.importance ?? fact.confidence * 0.8;
|
|
40
|
+
// Calculate half-life based on access count
|
|
41
|
+
const accessCount = fact.access_count ?? 0;
|
|
42
|
+
const halfLife = 30 * (1 + Math.log2(1 + accessCount)); // days
|
|
43
|
+
// Calculate days since creation
|
|
44
|
+
const daysSince = (currentTime - (fact.created_at ?? currentTime)) / (1000 * 60 * 60 * 24);
|
|
45
|
+
// Exponential decay: importance * exp(-days / halfLife)
|
|
46
|
+
return importance * Math.exp(-daysSince / halfLife);
|
|
47
|
+
}
|
|
48
|
+
export function textSimilarity(a, b) {
|
|
49
|
+
// Get word tokens, filter length > 2
|
|
50
|
+
const wordsA = a.toLowerCase().split(/\W+/).filter(word => word.length > 2);
|
|
51
|
+
const wordsB = b.toLowerCase().split(/\W+/).filter(word => word.length > 2);
|
|
52
|
+
if (wordsA.length === 0 && wordsB.length === 0)
|
|
53
|
+
return 1;
|
|
54
|
+
if (wordsA.length === 0 || wordsB.length === 0)
|
|
55
|
+
return 0;
|
|
56
|
+
// Calculate Jaccard similarity
|
|
57
|
+
const setA = new Set(wordsA);
|
|
58
|
+
const setB = new Set(wordsB);
|
|
59
|
+
const intersection = new Set([...setA].filter(x => setB.has(x)));
|
|
60
|
+
const union = new Set([...setA, ...setB]);
|
|
61
|
+
return intersection.size / union.size;
|
|
62
|
+
}
|
|
63
|
+
export function consolidateMemory(facts, now) {
|
|
64
|
+
const currentTime = now ?? Date.now();
|
|
65
|
+
const result = {
|
|
66
|
+
kept: [],
|
|
67
|
+
pruned: [],
|
|
68
|
+
merged: [],
|
|
69
|
+
promoted: []
|
|
70
|
+
};
|
|
71
|
+
// Step 1: Prune facts with strength < 0.05
|
|
72
|
+
const strongFacts = facts.filter(fact => {
|
|
73
|
+
const strength = computeStrength(fact, currentTime);
|
|
74
|
+
if (strength < 0.05) {
|
|
75
|
+
result.pruned.push(fact);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
});
|
|
80
|
+
// Step 2: Group similar facts for merging
|
|
81
|
+
const processed = new Set();
|
|
82
|
+
const mergeGroups = [];
|
|
83
|
+
for (const fact of strongFacts) {
|
|
84
|
+
if (processed.has(fact.key))
|
|
85
|
+
continue;
|
|
86
|
+
const group = [fact];
|
|
87
|
+
processed.add(fact.key);
|
|
88
|
+
for (const other of strongFacts) {
|
|
89
|
+
if (processed.has(other.key))
|
|
90
|
+
continue;
|
|
91
|
+
const similarity = textSimilarity(fact.value, other.value);
|
|
92
|
+
if (similarity > 0.7) {
|
|
93
|
+
group.push(other);
|
|
94
|
+
processed.add(other.key);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
mergeGroups.push(group);
|
|
98
|
+
}
|
|
99
|
+
// Step 3: Process merge groups
|
|
100
|
+
for (const group of mergeGroups) {
|
|
101
|
+
if (group.length === 1) {
|
|
102
|
+
// Single fact - check for promotion
|
|
103
|
+
const fact = group[0];
|
|
104
|
+
if (fact.epistemicType === 'hypothesis' &&
|
|
105
|
+
(fact.access_count ?? 0) > 3 &&
|
|
106
|
+
fact.confidence > 0.7) {
|
|
107
|
+
// Promote hypothesis to observation
|
|
108
|
+
const promoted = {
|
|
109
|
+
...fact,
|
|
110
|
+
epistemicType: 'observation',
|
|
111
|
+
confidence: Math.min(0.95, fact.confidence + 0.1)
|
|
112
|
+
};
|
|
113
|
+
result.promoted.push(promoted);
|
|
114
|
+
result.kept.push(promoted);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
result.kept.push(fact);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Multiple facts - merge them
|
|
122
|
+
// Keep the strongest fact as the merged result
|
|
123
|
+
const strongest = group.reduce((best, current) => {
|
|
124
|
+
const bestStrength = computeStrength(best, currentTime);
|
|
125
|
+
const currentStrength = computeStrength(current, currentTime);
|
|
126
|
+
return currentStrength > bestStrength ? current : best;
|
|
127
|
+
});
|
|
128
|
+
// Update the strongest fact with combined data
|
|
129
|
+
const totalAccessCount = group.reduce((sum, fact) => sum + (fact.access_count ?? 0), 0);
|
|
130
|
+
const avgConfidence = group.reduce((sum, fact) => sum + fact.confidence, 0) / group.length;
|
|
131
|
+
const mostRecentAccess = Math.max(...group.map(fact => fact.accessed_at ?? 0));
|
|
132
|
+
const merged = {
|
|
133
|
+
...strongest,
|
|
134
|
+
confidence: Math.min(0.95, avgConfidence + 0.05 * (group.length - 1)),
|
|
135
|
+
access_count: Math.max(strongest.access_count ?? 0, totalAccessCount),
|
|
136
|
+
accessed_at: mostRecentAccess
|
|
137
|
+
};
|
|
138
|
+
result.merged.push({
|
|
139
|
+
merged,
|
|
140
|
+
from: group
|
|
141
|
+
});
|
|
142
|
+
result.kept.push(merged);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=memoryScorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoryScorer.js","sourceRoot":"","sources":["../../../server/services/memoryScorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository Indexer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes a codebase and generates a structured markdown knowledge base
|
|
5
|
+
* optimized for tree indexing and depth filtering.
|
|
6
|
+
*
|
|
7
|
+
* Unlike Aider's repo map (AST → symbol list) or Autodoc (per-file LLM docs),
|
|
8
|
+
* this generates FEATURE-LEVEL and FLOW-LEVEL documentation that answers:
|
|
9
|
+
* - What does this feature do?
|
|
10
|
+
* - Where does it live (key files)?
|
|
11
|
+
* - How does data flow through it?
|
|
12
|
+
* - What patterns/conventions does it follow?
|
|
13
|
+
* - What are the edge cases and gotchas?
|
|
14
|
+
*
|
|
15
|
+
* Output: markdown files with heading structure that maps to depth levels:
|
|
16
|
+
* # Feature name → Mention (depth 4)
|
|
17
|
+
* ## Architecture → Headlines (depth 3)
|
|
18
|
+
* ### Data flow details → Summary (depth 2)
|
|
19
|
+
* Paragraphs → Detail (depth 1) / Full (depth 0)
|
|
20
|
+
*
|
|
21
|
+
* Pipeline: scan → analyze → cluster → generate → index
|
|
22
|
+
*/
|
|
23
|
+
export interface RepoFile {
|
|
24
|
+
path: string;
|
|
25
|
+
ext: string;
|
|
26
|
+
size: number;
|
|
27
|
+
tokens: number;
|
|
28
|
+
category: FileCategory;
|
|
29
|
+
imports: string[];
|
|
30
|
+
exports: string[];
|
|
31
|
+
functions: string[];
|
|
32
|
+
classes: string[];
|
|
33
|
+
types: string[];
|
|
34
|
+
}
|
|
35
|
+
export type FileCategory = 'component' | 'store' | 'service' | 'util' | 'route' | 'config' | 'test' | 'type' | 'style' | 'doc' | 'script' | 'other';
|
|
36
|
+
export interface RepoModule {
|
|
37
|
+
name: string;
|
|
38
|
+
path: string;
|
|
39
|
+
files: RepoFile[];
|
|
40
|
+
entryPoint?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface RepoFeature {
|
|
44
|
+
name: string;
|
|
45
|
+
description: string;
|
|
46
|
+
modules: string[];
|
|
47
|
+
keyFiles: string[];
|
|
48
|
+
stores: string[];
|
|
49
|
+
routes: string[];
|
|
50
|
+
components: string[];
|
|
51
|
+
imports: Map<string, string[]>;
|
|
52
|
+
}
|
|
53
|
+
export interface RepoScan {
|
|
54
|
+
root: string;
|
|
55
|
+
name: string;
|
|
56
|
+
files: RepoFile[];
|
|
57
|
+
modules: RepoModule[];
|
|
58
|
+
features: RepoFeature[];
|
|
59
|
+
conventions: RepoConvention[];
|
|
60
|
+
stack: StackInfo;
|
|
61
|
+
totalFiles: number;
|
|
62
|
+
totalTokens: number;
|
|
63
|
+
}
|
|
64
|
+
export interface RepoConvention {
|
|
65
|
+
pattern: string;
|
|
66
|
+
description: string;
|
|
67
|
+
examples: string[];
|
|
68
|
+
}
|
|
69
|
+
export interface StackInfo {
|
|
70
|
+
language: string;
|
|
71
|
+
framework: string;
|
|
72
|
+
stateManagement: string;
|
|
73
|
+
styling: string;
|
|
74
|
+
testing: string;
|
|
75
|
+
buildTool: string;
|
|
76
|
+
packageManager: string;
|
|
77
|
+
}
|
|
78
|
+
export declare function scanRepository(root: string): RepoScan;
|
|
79
|
+
/**
|
|
80
|
+
* Generate the overview document for the repository.
|
|
81
|
+
*/
|
|
82
|
+
export declare function generateOverviewDoc(scan: RepoScan): string;
|
|
83
|
+
/**
|
|
84
|
+
* Generate a detailed feature document.
|
|
85
|
+
*/
|
|
86
|
+
export declare function generateFeatureDoc(scan: RepoScan, feature: RepoFeature): string;
|
|
87
|
+
/**
|
|
88
|
+
* Generate the full knowledge base as a map of filename → markdown content.
|
|
89
|
+
*/
|
|
90
|
+
export declare function generateKnowledgeBase(scan: RepoScan): Map<string, string>;
|
|
91
|
+
//# sourceMappingURL=repoIndexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repoIndexer.d.ts","sourceRoot":"","sources":["../../../server/services/repoIndexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,OAAO,GACP,SAAS,GACT,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,MAAM,GACN,OAAO,GACP,KAAK,GACL,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AA6RD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAoErD;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAsD1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CA+D/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAezE"}
|