create-merlin-brain 2.2.2 → 2.3.2
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/dist/server/lite/client.d.ts +49 -0
- package/dist/server/lite/client.d.ts.map +1 -0
- package/dist/server/lite/client.js +166 -0
- package/dist/server/lite/client.js.map +1 -0
- package/dist/server/lite/generator.d.ts +56 -0
- package/dist/server/lite/generator.d.ts.map +1 -0
- package/dist/server/lite/generator.js +474 -0
- package/dist/server/lite/generator.js.map +1 -0
- package/dist/server/lite/index.d.ts +10 -0
- package/dist/server/lite/index.d.ts.map +1 -0
- package/dist/server/lite/index.js +10 -0
- package/dist/server/lite/index.js.map +1 -0
- package/dist/server/lite/storage.d.ts +42 -0
- package/dist/server/lite/storage.d.ts.map +1 -0
- package/dist/server/lite/storage.js +283 -0
- package/dist/server/lite/storage.js.map +1 -0
- package/dist/server/lite/types.d.ts +122 -0
- package/dist/server/lite/types.d.ts.map +1 -0
- package/dist/server/lite/types.js +40 -0
- package/dist/server/lite/types.js.map +1 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +157 -5
- package/dist/server/server.js.map +1 -1
- package/dist/server/stats.d.ts.map +1 -1
- package/dist/server/stats.js +18 -0
- package/dist/server/stats.js.map +1 -1
- package/dist/server/tools/config-sync.d.ts +13 -0
- package/dist/server/tools/config-sync.d.ts.map +1 -0
- package/dist/server/tools/config-sync.js +414 -0
- package/dist/server/tools/config-sync.js.map +1 -0
- package/dist/server/tools/lite.d.ts +20 -0
- package/dist/server/tools/lite.d.ts.map +1 -0
- package/dist/server/tools/lite.js +374 -0
- package/dist/server/tools/lite.js.map +1 -0
- package/dist/server/tools/types.d.ts +3 -0
- package/dist/server/tools/types.d.ts.map +1 -1
- package/dist/server/version.d.ts +1 -1
- package/dist/server/version.js +1 -1
- package/files/CLAUDE.md +267 -0
- package/files/agents/merlin.md +80 -0
- package/package.json +1 -1
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merlin Lite Storage
|
|
3
|
+
* Handles reading/writing .merlin/ local files
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs/promises';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { createHash } from 'crypto';
|
|
8
|
+
import { LITE_LIMITS, LITE_VERSION } from './types.js';
|
|
9
|
+
export class LiteStorage {
|
|
10
|
+
basePath;
|
|
11
|
+
repoRoot;
|
|
12
|
+
constructor(repoRoot) {
|
|
13
|
+
this.repoRoot = repoRoot;
|
|
14
|
+
this.basePath = path.join(repoRoot, '.merlin');
|
|
15
|
+
}
|
|
16
|
+
/** Check if .merlin/ exists */
|
|
17
|
+
async exists() {
|
|
18
|
+
try {
|
|
19
|
+
await fs.access(this.basePath);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Initialize .merlin/ directory structure */
|
|
27
|
+
async initialize(repoUrl, repoName) {
|
|
28
|
+
// Create directories
|
|
29
|
+
await fs.mkdir(this.basePath, { recursive: true });
|
|
30
|
+
await fs.mkdir(path.join(this.basePath, 'context'), { recursive: true });
|
|
31
|
+
await fs.mkdir(path.join(this.basePath, 'howto'), { recursive: true });
|
|
32
|
+
// Create initial manifest
|
|
33
|
+
const manifest = {
|
|
34
|
+
version: LITE_VERSION,
|
|
35
|
+
repoUrl,
|
|
36
|
+
repoName,
|
|
37
|
+
createdAt: new Date().toISOString(),
|
|
38
|
+
updatedAt: new Date().toISOString(),
|
|
39
|
+
stats: {
|
|
40
|
+
fileCount: 0,
|
|
41
|
+
lineCount: 0,
|
|
42
|
+
lastAnalyzed: new Date().toISOString(),
|
|
43
|
+
},
|
|
44
|
+
limits: {
|
|
45
|
+
maxFiles: 0, // No file limit - only lines matter
|
|
46
|
+
maxLines: LITE_LIMITS.MAX_LINES,
|
|
47
|
+
isOverLimit: false,
|
|
48
|
+
warningShown: false,
|
|
49
|
+
},
|
|
50
|
+
sync: {
|
|
51
|
+
enabled: true,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
await this.writeManifest(manifest);
|
|
55
|
+
// Create empty files
|
|
56
|
+
await this.writeFiles([]);
|
|
57
|
+
await this.writeConventions({ conventions: [], antiPatterns: [] });
|
|
58
|
+
await this.writeDiscoveries([]);
|
|
59
|
+
// Add to .gitignore if not already there
|
|
60
|
+
await this.ensureGitignore();
|
|
61
|
+
}
|
|
62
|
+
/** Ensure .merlin/ is in .gitignore */
|
|
63
|
+
async ensureGitignore() {
|
|
64
|
+
const gitignorePath = path.join(this.repoRoot, '.gitignore');
|
|
65
|
+
try {
|
|
66
|
+
let content = '';
|
|
67
|
+
try {
|
|
68
|
+
content = await fs.readFile(gitignorePath, 'utf-8');
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// File doesn't exist
|
|
72
|
+
}
|
|
73
|
+
if (!content.includes('.merlin/')) {
|
|
74
|
+
const addition = '\n# Merlin Lite local context\n.merlin/\n';
|
|
75
|
+
await fs.writeFile(gitignorePath, content + addition);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
// Ignore gitignore errors
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// ============================================================
|
|
83
|
+
// MANIFEST
|
|
84
|
+
// ============================================================
|
|
85
|
+
async readManifest() {
|
|
86
|
+
try {
|
|
87
|
+
const content = await fs.readFile(path.join(this.basePath, 'manifest.json'), 'utf-8');
|
|
88
|
+
return JSON.parse(content);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async writeManifest(manifest) {
|
|
95
|
+
manifest.updatedAt = new Date().toISOString();
|
|
96
|
+
await fs.writeFile(path.join(this.basePath, 'manifest.json'), JSON.stringify(manifest, null, 2));
|
|
97
|
+
}
|
|
98
|
+
async updateStats(fileCount, lineCount) {
|
|
99
|
+
const manifest = await this.readManifest();
|
|
100
|
+
if (!manifest)
|
|
101
|
+
throw new Error('Manifest not found');
|
|
102
|
+
manifest.stats.fileCount = fileCount;
|
|
103
|
+
manifest.stats.lineCount = lineCount;
|
|
104
|
+
manifest.stats.lastAnalyzed = new Date().toISOString();
|
|
105
|
+
// Check limits - only lines matter for free tier
|
|
106
|
+
const isOverLimit = lineCount > LITE_LIMITS.MAX_LINES;
|
|
107
|
+
manifest.limits.isOverLimit = isOverLimit;
|
|
108
|
+
await this.writeManifest(manifest);
|
|
109
|
+
return {
|
|
110
|
+
isOverLimit,
|
|
111
|
+
fileCount,
|
|
112
|
+
lineCount,
|
|
113
|
+
fileLimit: 0, // No file limit
|
|
114
|
+
lineLimit: LITE_LIMITS.MAX_LINES,
|
|
115
|
+
percentUsed: {
|
|
116
|
+
files: 0, // Not tracked
|
|
117
|
+
lines: (lineCount / LITE_LIMITS.MAX_LINES) * 100,
|
|
118
|
+
},
|
|
119
|
+
upgradeReason: isOverLimit ? 'line_limit' : undefined,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// ============================================================
|
|
123
|
+
// FILES
|
|
124
|
+
// ============================================================
|
|
125
|
+
async readFiles() {
|
|
126
|
+
try {
|
|
127
|
+
const content = await fs.readFile(path.join(this.basePath, 'context', 'files.json'), 'utf-8');
|
|
128
|
+
return JSON.parse(content);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async writeFiles(files) {
|
|
135
|
+
await fs.writeFile(path.join(this.basePath, 'context', 'files.json'), JSON.stringify(files, null, 2));
|
|
136
|
+
}
|
|
137
|
+
// ============================================================
|
|
138
|
+
// CONVENTIONS
|
|
139
|
+
// ============================================================
|
|
140
|
+
async readConventions() {
|
|
141
|
+
try {
|
|
142
|
+
const content = await fs.readFile(path.join(this.basePath, 'context', 'conventions.json'), 'utf-8');
|
|
143
|
+
return JSON.parse(content);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return { conventions: [], antiPatterns: [] };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async writeConventions(conventions) {
|
|
150
|
+
await fs.writeFile(path.join(this.basePath, 'context', 'conventions.json'), JSON.stringify(conventions, null, 2));
|
|
151
|
+
}
|
|
152
|
+
// ============================================================
|
|
153
|
+
// QUICKSTART
|
|
154
|
+
// ============================================================
|
|
155
|
+
async readQuickstart() {
|
|
156
|
+
try {
|
|
157
|
+
return await fs.readFile(path.join(this.basePath, 'context', 'quickstart.md'), 'utf-8');
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async writeQuickstart(content) {
|
|
164
|
+
await fs.writeFile(path.join(this.basePath, 'context', 'quickstart.md'), content);
|
|
165
|
+
}
|
|
166
|
+
// ============================================================
|
|
167
|
+
// HOW-TO CACHE
|
|
168
|
+
// ============================================================
|
|
169
|
+
getHowToKey(task) {
|
|
170
|
+
return createHash('md5').update(task.toLowerCase().trim()).digest('hex').slice(0, 12);
|
|
171
|
+
}
|
|
172
|
+
async readHowTo(task) {
|
|
173
|
+
try {
|
|
174
|
+
const key = this.getHowToKey(task);
|
|
175
|
+
const content = await fs.readFile(path.join(this.basePath, 'howto', `${key}.json`), 'utf-8');
|
|
176
|
+
const howto = JSON.parse(content);
|
|
177
|
+
// Check if cache is stale (older than 24 hours)
|
|
178
|
+
const age = Date.now() - new Date(howto.generatedAt).getTime();
|
|
179
|
+
if (age > 24 * 60 * 60 * 1000) {
|
|
180
|
+
return null; // Stale
|
|
181
|
+
}
|
|
182
|
+
return howto;
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async writeHowTo(task, guide, relevantFiles) {
|
|
189
|
+
const key = this.getHowToKey(task);
|
|
190
|
+
const howto = {
|
|
191
|
+
task,
|
|
192
|
+
guide,
|
|
193
|
+
relevantFiles,
|
|
194
|
+
generatedAt: new Date().toISOString(),
|
|
195
|
+
};
|
|
196
|
+
await fs.writeFile(path.join(this.basePath, 'howto', `${key}.json`), JSON.stringify(howto, null, 2));
|
|
197
|
+
}
|
|
198
|
+
// ============================================================
|
|
199
|
+
// DISCOVERIES
|
|
200
|
+
// ============================================================
|
|
201
|
+
async readDiscoveries() {
|
|
202
|
+
try {
|
|
203
|
+
const content = await fs.readFile(path.join(this.basePath, 'discoveries.json'), 'utf-8');
|
|
204
|
+
return JSON.parse(content);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async writeDiscoveries(discoveries) {
|
|
211
|
+
await fs.writeFile(path.join(this.basePath, 'discoveries.json'), JSON.stringify(discoveries, null, 2));
|
|
212
|
+
}
|
|
213
|
+
async addDiscovery(discovery) {
|
|
214
|
+
const discoveries = await this.readDiscoveries();
|
|
215
|
+
const newDiscovery = {
|
|
216
|
+
...discovery,
|
|
217
|
+
id: createHash('md5').update(discovery.query + Date.now()).digest('hex').slice(0, 12),
|
|
218
|
+
createdAt: new Date().toISOString(),
|
|
219
|
+
};
|
|
220
|
+
discoveries.push(newDiscovery);
|
|
221
|
+
await this.writeDiscoveries(discoveries);
|
|
222
|
+
return newDiscovery;
|
|
223
|
+
}
|
|
224
|
+
// ============================================================
|
|
225
|
+
// SYNC STATUS
|
|
226
|
+
// ============================================================
|
|
227
|
+
async readSyncStatus() {
|
|
228
|
+
try {
|
|
229
|
+
const content = await fs.readFile(path.join(this.basePath, 'sync.json'), 'utf-8');
|
|
230
|
+
return JSON.parse(content);
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
return { pendingChanges: true, localVersion: 1 };
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
async writeSyncStatus(status) {
|
|
237
|
+
await fs.writeFile(path.join(this.basePath, 'sync.json'), JSON.stringify(status, null, 2));
|
|
238
|
+
}
|
|
239
|
+
// ============================================================
|
|
240
|
+
// EXPORT ALL DATA (for server sync)
|
|
241
|
+
// ============================================================
|
|
242
|
+
async exportAll() {
|
|
243
|
+
const [manifest, files, conventions, quickstart, discoveries] = await Promise.all([
|
|
244
|
+
this.readManifest(),
|
|
245
|
+
this.readFiles(),
|
|
246
|
+
this.readConventions(),
|
|
247
|
+
this.readQuickstart(),
|
|
248
|
+
this.readDiscoveries(),
|
|
249
|
+
]);
|
|
250
|
+
return { manifest, files, conventions, quickstart, discoveries };
|
|
251
|
+
}
|
|
252
|
+
// ============================================================
|
|
253
|
+
// CHECK LIMITS
|
|
254
|
+
// ============================================================
|
|
255
|
+
async checkLimits() {
|
|
256
|
+
const manifest = await this.readManifest();
|
|
257
|
+
if (!manifest) {
|
|
258
|
+
return {
|
|
259
|
+
isOverLimit: false,
|
|
260
|
+
fileCount: 0,
|
|
261
|
+
lineCount: 0,
|
|
262
|
+
fileLimit: 0,
|
|
263
|
+
lineLimit: LITE_LIMITS.MAX_LINES,
|
|
264
|
+
percentUsed: { files: 0, lines: 0 },
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
const { fileCount, lineCount } = manifest.stats;
|
|
268
|
+
const isOverLimit = lineCount > LITE_LIMITS.MAX_LINES;
|
|
269
|
+
return {
|
|
270
|
+
isOverLimit,
|
|
271
|
+
fileCount,
|
|
272
|
+
lineCount,
|
|
273
|
+
fileLimit: 0, // No file limit
|
|
274
|
+
lineLimit: LITE_LIMITS.MAX_LINES,
|
|
275
|
+
percentUsed: {
|
|
276
|
+
files: 0, // Not tracked
|
|
277
|
+
lines: (lineCount / LITE_LIMITS.MAX_LINES) * 100,
|
|
278
|
+
},
|
|
279
|
+
upgradeReason: isOverLimit ? 'line_limit' : undefined,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/server/lite/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merlin Lite Types
|
|
3
|
+
* Type definitions for the local file-based context system
|
|
4
|
+
*/
|
|
5
|
+
/** Manifest stored in .merlin/manifest.json */
|
|
6
|
+
export interface LiteManifest {
|
|
7
|
+
version: string;
|
|
8
|
+
repoUrl: string;
|
|
9
|
+
repoName: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
updatedAt: string;
|
|
12
|
+
stats: {
|
|
13
|
+
fileCount: number;
|
|
14
|
+
lineCount: number;
|
|
15
|
+
lastAnalyzed: string;
|
|
16
|
+
};
|
|
17
|
+
limits: {
|
|
18
|
+
maxFiles: number;
|
|
19
|
+
maxLines: number;
|
|
20
|
+
isOverLimit: boolean;
|
|
21
|
+
warningShown: boolean;
|
|
22
|
+
};
|
|
23
|
+
sync: {
|
|
24
|
+
enabled: boolean;
|
|
25
|
+
serverId?: string;
|
|
26
|
+
lastSyncedAt?: string;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** File summary stored in .merlin/context/files.json */
|
|
30
|
+
export interface LiteFileSummary {
|
|
31
|
+
path: string;
|
|
32
|
+
purpose: string;
|
|
33
|
+
layer: string;
|
|
34
|
+
exports: Array<{
|
|
35
|
+
name: string;
|
|
36
|
+
type: 'function' | 'class' | 'constant' | 'type' | 'interface';
|
|
37
|
+
}>;
|
|
38
|
+
dependencies: string[];
|
|
39
|
+
modifyFor: string[];
|
|
40
|
+
}
|
|
41
|
+
/** Conventions stored in .merlin/context/conventions.json */
|
|
42
|
+
export interface LiteConventions {
|
|
43
|
+
conventions: Array<{
|
|
44
|
+
category: string;
|
|
45
|
+
rule: string;
|
|
46
|
+
example?: string;
|
|
47
|
+
exampleFiles: string[];
|
|
48
|
+
}>;
|
|
49
|
+
antiPatterns: Array<{
|
|
50
|
+
pattern: string;
|
|
51
|
+
reason: string;
|
|
52
|
+
instead: string;
|
|
53
|
+
severity: 'low' | 'medium' | 'high';
|
|
54
|
+
}>;
|
|
55
|
+
}
|
|
56
|
+
/** How-to cache entry */
|
|
57
|
+
export interface LiteHowTo {
|
|
58
|
+
task: string;
|
|
59
|
+
guide: string;
|
|
60
|
+
relevantFiles: string[];
|
|
61
|
+
generatedAt: string;
|
|
62
|
+
}
|
|
63
|
+
/** Discovery taught by user */
|
|
64
|
+
export interface LiteDiscovery {
|
|
65
|
+
id: string;
|
|
66
|
+
query: string;
|
|
67
|
+
summary: string;
|
|
68
|
+
relevantFiles: Array<{
|
|
69
|
+
path: string;
|
|
70
|
+
reason: string;
|
|
71
|
+
}>;
|
|
72
|
+
patterns: string[];
|
|
73
|
+
confidence: number;
|
|
74
|
+
createdAt: string;
|
|
75
|
+
}
|
|
76
|
+
/** Sync status */
|
|
77
|
+
export interface LiteSyncStatus {
|
|
78
|
+
lastSyncedAt?: string;
|
|
79
|
+
pendingChanges: boolean;
|
|
80
|
+
serverVersion?: number;
|
|
81
|
+
localVersion: number;
|
|
82
|
+
}
|
|
83
|
+
/** Limit check result */
|
|
84
|
+
export interface LimitCheckResult {
|
|
85
|
+
isOverLimit: boolean;
|
|
86
|
+
fileCount: number;
|
|
87
|
+
lineCount: number;
|
|
88
|
+
fileLimit: number;
|
|
89
|
+
lineLimit: number;
|
|
90
|
+
percentUsed: {
|
|
91
|
+
files: number;
|
|
92
|
+
lines: number;
|
|
93
|
+
};
|
|
94
|
+
upgradeReason?: 'file_limit' | 'line_limit';
|
|
95
|
+
}
|
|
96
|
+
/** Pricing tier definition */
|
|
97
|
+
export interface PricingTier {
|
|
98
|
+
name: string;
|
|
99
|
+
displayName: string;
|
|
100
|
+
minLines: number;
|
|
101
|
+
maxLines: number;
|
|
102
|
+
price: number;
|
|
103
|
+
priceId: string;
|
|
104
|
+
}
|
|
105
|
+
/** All pricing tiers */
|
|
106
|
+
export declare const PRICING_TIERS: PricingTier[];
|
|
107
|
+
/** Get the tier for a given line count */
|
|
108
|
+
export declare function getTierForLines(lineCount: number): PricingTier;
|
|
109
|
+
/** Get upgrade recommendation based on current usage */
|
|
110
|
+
export declare function getUpgradeRecommendation(lineCount: number): {
|
|
111
|
+
currentTier: PricingTier;
|
|
112
|
+
nextTier: PricingTier | null;
|
|
113
|
+
isOverLimit: boolean;
|
|
114
|
+
percentToNextTier: number;
|
|
115
|
+
};
|
|
116
|
+
/** Constants for free tier (Lite mode) */
|
|
117
|
+
export declare const LITE_LIMITS: {
|
|
118
|
+
readonly MAX_LINES: 5000;
|
|
119
|
+
readonly WARNING_THRESHOLD: 0.8;
|
|
120
|
+
};
|
|
121
|
+
export declare const LITE_VERSION = "1.0.0";
|
|
122
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/lite/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merlin Lite Types
|
|
3
|
+
* Type definitions for the local file-based context system
|
|
4
|
+
*/
|
|
5
|
+
/** All pricing tiers */
|
|
6
|
+
export const PRICING_TIERS = [
|
|
7
|
+
{ name: 'free', displayName: 'Free', minLines: 0, maxLines: 5000, price: 0, priceId: '' },
|
|
8
|
+
{ name: 'small', displayName: 'Small', minLines: 5000, maxLines: 10000, price: 99, priceId: 'price_1SsZDLGZjZMfoSqgxlSumOpi' },
|
|
9
|
+
{ name: 'medium', displayName: 'Medium', minLines: 10000, maxLines: 50000, price: 250, priceId: 'price_1SsZCOGZjZMfoSqgxEuLrH3K' },
|
|
10
|
+
{ name: 'large', displayName: 'Large', minLines: 50000, maxLines: 500000, price: 399, priceId: 'price_1SsacBGZjZMfoSqgxYWIStKm' },
|
|
11
|
+
{ name: 'enterprise', displayName: 'Enterprise', minLines: 500000, maxLines: Infinity, price: -1, priceId: '' }, // Contact us
|
|
12
|
+
];
|
|
13
|
+
/** Get the tier for a given line count */
|
|
14
|
+
export function getTierForLines(lineCount) {
|
|
15
|
+
for (const tier of PRICING_TIERS) {
|
|
16
|
+
if (lineCount >= tier.minLines && lineCount < tier.maxLines) {
|
|
17
|
+
return tier;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// Default to enterprise for very large repos
|
|
21
|
+
return PRICING_TIERS[PRICING_TIERS.length - 1];
|
|
22
|
+
}
|
|
23
|
+
/** Get upgrade recommendation based on current usage */
|
|
24
|
+
export function getUpgradeRecommendation(lineCount) {
|
|
25
|
+
const currentTier = getTierForLines(lineCount);
|
|
26
|
+
const tierIndex = PRICING_TIERS.findIndex(t => t.name === currentTier.name);
|
|
27
|
+
const nextTier = tierIndex < PRICING_TIERS.length - 1 ? PRICING_TIERS[tierIndex + 1] : null;
|
|
28
|
+
const isOverLimit = currentTier.name === 'free' && lineCount >= currentTier.maxLines;
|
|
29
|
+
const percentToNextTier = nextTier
|
|
30
|
+
? ((lineCount - currentTier.minLines) / (currentTier.maxLines - currentTier.minLines)) * 100
|
|
31
|
+
: 100;
|
|
32
|
+
return { currentTier, nextTier, isOverLimit, percentToNextTier };
|
|
33
|
+
}
|
|
34
|
+
/** Constants for free tier (Lite mode) */
|
|
35
|
+
export const LITE_LIMITS = {
|
|
36
|
+
MAX_LINES: 5000, // Hard limit - 5K lines free
|
|
37
|
+
WARNING_THRESHOLD: 0.8, // Warn at 80% (4K lines)
|
|
38
|
+
};
|
|
39
|
+
export const LITE_VERSION = '1.0.0';
|
|
40
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/lite/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2GH,wBAAwB;AACxB,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IACzF,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,gCAAgC,EAAE;IAC9H,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,gCAAgC,EAAE;IAClI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,gCAAgC,EAAE;IACjI,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,aAAa;CAC/H,CAAC;AAEF,0CAA0C;AAC1C,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,6CAA6C;IAC7C,OAAO,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IAMxD,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5F,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,IAAI,WAAW,CAAC,QAAQ,CAAC;IACrF,MAAM,iBAAiB,GAAG,QAAQ;QAChC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG;QAC5F,CAAC,CAAC,GAAG,CAAC;IAER,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AACnE,CAAC;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,SAAS,EAAE,IAAI,EAAS,6BAA6B;IACrD,iBAAiB,EAAE,GAAG,EAAE,yBAAyB;CACzC,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsCpE,0CAA0C;AAC1C,wBAAgB,YAAY,IAAI,SAAS,CA66ExC;AAED,gDAAgD;AAChD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAQjD"}
|