mycontext-cli 1.0.93 → 1.0.95
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/README.md +99 -5
- package/dist/agents/implementations/ClaudeAgentWorkflow.d.ts +110 -0
- package/dist/agents/implementations/ClaudeAgentWorkflow.d.ts.map +1 -0
- package/dist/agents/implementations/ClaudeAgentWorkflow.js +555 -0
- package/dist/agents/implementations/ClaudeAgentWorkflow.js.map +1 -0
- package/dist/agents/implementations/WorkflowAgent.d.ts +1 -0
- package/dist/agents/implementations/WorkflowAgent.d.ts.map +1 -1
- package/dist/agents/implementations/WorkflowAgent.js +8 -0
- package/dist/agents/implementations/WorkflowAgent.js.map +1 -1
- package/dist/package.json +2 -1
- package/dist/utils/claudeAgentClient.d.ts +98 -0
- package/dist/utils/claudeAgentClient.d.ts.map +1 -0
- package/dist/utils/claudeAgentClient.js +409 -0
- package/dist/utils/claudeAgentClient.js.map +1 -0
- package/dist/utils/contextManager.d.ts +86 -0
- package/dist/utils/contextManager.d.ts.map +1 -0
- package/dist/utils/contextManager.js +322 -0
- package/dist/utils/contextManager.js.map +1 -0
- package/dist/utils/hybridAIClient.d.ts +25 -1
- package/dist/utils/hybridAIClient.d.ts.map +1 -1
- package/dist/utils/hybridAIClient.js +69 -2
- package/dist/utils/hybridAIClient.js.map +1 -1
- package/dist/utils/mcpAgentIntegration.d.ts +104 -0
- package/dist/utils/mcpAgentIntegration.d.ts.map +1 -0
- package/dist/utils/mcpAgentIntegration.js +382 -0
- package/dist/utils/mcpAgentIntegration.js.map +1 -0
- package/dist/utils/toolPermissions.d.ts +105 -0
- package/dist/utils/toolPermissions.d.ts.map +1 -0
- package/dist/utils/toolPermissions.js +408 -0
- package/dist/utils/toolPermissions.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export interface ProjectContext {
|
|
2
|
+
prd?: string;
|
|
3
|
+
types?: string;
|
|
4
|
+
brand?: string;
|
|
5
|
+
componentList?: any;
|
|
6
|
+
projectStructure?: string;
|
|
7
|
+
previousOutputs?: Record<string, any>;
|
|
8
|
+
userPrompt?: string;
|
|
9
|
+
workingDirectory?: string;
|
|
10
|
+
contextVersion?: string;
|
|
11
|
+
lastUpdated?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ContextCompactionOptions {
|
|
14
|
+
maxContextSize?: number;
|
|
15
|
+
preserveRecent?: boolean;
|
|
16
|
+
compressionLevel?: 'low' | 'medium' | 'high';
|
|
17
|
+
}
|
|
18
|
+
export declare class ContextManager {
|
|
19
|
+
private contextDir;
|
|
20
|
+
private contextFile;
|
|
21
|
+
private maxContextSize;
|
|
22
|
+
private compressionLevel;
|
|
23
|
+
constructor(workingDirectory?: string);
|
|
24
|
+
/**
|
|
25
|
+
* Load project context from files and memory
|
|
26
|
+
*/
|
|
27
|
+
loadContext(): Promise<ProjectContext>;
|
|
28
|
+
/**
|
|
29
|
+
* Save context to memory for persistence
|
|
30
|
+
*/
|
|
31
|
+
saveContext(context: ProjectContext): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Compact context to reduce size while preserving important information
|
|
34
|
+
*/
|
|
35
|
+
compactContext(context: ProjectContext, options?: ContextCompactionOptions): Promise<ProjectContext>;
|
|
36
|
+
/**
|
|
37
|
+
* Merge new context with existing context
|
|
38
|
+
*/
|
|
39
|
+
mergeContext(existingContext: ProjectContext, newContext: Partial<ProjectContext>): Promise<ProjectContext>;
|
|
40
|
+
/**
|
|
41
|
+
* Get context summary for debugging
|
|
42
|
+
*/
|
|
43
|
+
getContextSummary(context: ProjectContext): string;
|
|
44
|
+
/**
|
|
45
|
+
* Clear context memory
|
|
46
|
+
*/
|
|
47
|
+
clearContext(): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Load context from individual files
|
|
50
|
+
*/
|
|
51
|
+
private loadContextFiles;
|
|
52
|
+
/**
|
|
53
|
+
* Load context from memory file
|
|
54
|
+
*/
|
|
55
|
+
private loadMemoryContext;
|
|
56
|
+
/**
|
|
57
|
+
* Calculate context size in bytes
|
|
58
|
+
*/
|
|
59
|
+
private calculateContextSize;
|
|
60
|
+
/**
|
|
61
|
+
* Compress text by removing unnecessary whitespace and comments
|
|
62
|
+
*/
|
|
63
|
+
private compressText;
|
|
64
|
+
/**
|
|
65
|
+
* Preserve only recent outputs
|
|
66
|
+
*/
|
|
67
|
+
private preserveRecentOutputs;
|
|
68
|
+
/**
|
|
69
|
+
* Set context size limits
|
|
70
|
+
*/
|
|
71
|
+
setContextLimits(maxSize: number, compressionLevel: 'low' | 'medium' | 'high'): void;
|
|
72
|
+
/**
|
|
73
|
+
* Get context statistics
|
|
74
|
+
*/
|
|
75
|
+
getContextStats(context: ProjectContext): {
|
|
76
|
+
totalSize: number;
|
|
77
|
+
fileCount: number;
|
|
78
|
+
lastUpdated: string;
|
|
79
|
+
compressionRatio: number;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Calculate original size before compression
|
|
83
|
+
*/
|
|
84
|
+
private calculateOriginalSize;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=contextManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextManager.d.ts","sourceRoot":"","sources":["../../src/utils/contextManager.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC9C;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAA4B;gBAExC,gBAAgB,CAAC,EAAE,MAAM;IAOrC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC;IAsB5C;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzD;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,cAAc,CAAC;IA0D1B;;OAEG;IACG,YAAY,CAChB,eAAe,EAAE,cAAc,EAC/B,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,GAClC,OAAO,CAAC,cAAc,CAAC;IAyB1B;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IAelD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAWnC;;OAEG;YACW,gBAAgB;IAgC9B;;OAEG;YACW,iBAAiB;IAc/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI;IAKpF;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG;QACxC,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAqBD;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAI9B"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ContextManager = void 0;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
class ContextManager {
|
|
44
|
+
constructor(workingDirectory) {
|
|
45
|
+
this.contextDir = path.join(workingDirectory || process.cwd(), '.mycontext');
|
|
46
|
+
this.contextFile = path.join(this.contextDir, 'context.json');
|
|
47
|
+
this.maxContextSize = 50000; // Default 50KB context limit
|
|
48
|
+
this.compressionLevel = 'medium';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Load project context from files and memory
|
|
52
|
+
*/
|
|
53
|
+
async loadContext() {
|
|
54
|
+
const context = {
|
|
55
|
+
workingDirectory: this.contextDir.replace('/.mycontext', ''),
|
|
56
|
+
contextVersion: '1.0',
|
|
57
|
+
lastUpdated: new Date().toISOString(),
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
// Load from context files
|
|
61
|
+
await this.loadContextFiles(context);
|
|
62
|
+
// Load from memory file if exists
|
|
63
|
+
await this.loadMemoryContext(context);
|
|
64
|
+
console.log(chalk_1.default.green('✅ Context loaded successfully'));
|
|
65
|
+
return context;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.log(chalk_1.default.yellow(`⚠️ Context loading warning: ${error.message}`));
|
|
69
|
+
return context;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Save context to memory for persistence
|
|
74
|
+
*/
|
|
75
|
+
async saveContext(context) {
|
|
76
|
+
try {
|
|
77
|
+
// Ensure context directory exists
|
|
78
|
+
if (!fs.existsSync(this.contextDir)) {
|
|
79
|
+
fs.mkdirSync(this.contextDir, { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
// Update metadata
|
|
82
|
+
context.lastUpdated = new Date().toISOString();
|
|
83
|
+
context.contextVersion = context.contextVersion || '1.0';
|
|
84
|
+
// Save to memory file
|
|
85
|
+
fs.writeFileSync(this.contextFile, JSON.stringify(context, null, 2));
|
|
86
|
+
console.log(chalk_1.default.green('✅ Context saved successfully'));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
console.log(chalk_1.default.red(`❌ Context save failed: ${error.message}`));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Compact context to reduce size while preserving important information
|
|
94
|
+
*/
|
|
95
|
+
async compactContext(context, options = {}) {
|
|
96
|
+
const maxSize = options.maxContextSize || this.maxContextSize;
|
|
97
|
+
const preserveRecent = options.preserveRecent !== false;
|
|
98
|
+
const compressionLevel = options.compressionLevel || this.compressionLevel;
|
|
99
|
+
const compactedContext = { ...context };
|
|
100
|
+
try {
|
|
101
|
+
// Calculate current context size
|
|
102
|
+
const currentSize = this.calculateContextSize(context);
|
|
103
|
+
if (currentSize <= maxSize) {
|
|
104
|
+
console.log(chalk_1.default.green('✅ Context size is within limits'));
|
|
105
|
+
return context;
|
|
106
|
+
}
|
|
107
|
+
console.log(chalk_1.default.yellow(`⚠️ Context size (${currentSize} bytes) exceeds limit (${maxSize} bytes). Compacting...`));
|
|
108
|
+
// Apply compression based on level
|
|
109
|
+
switch (compressionLevel) {
|
|
110
|
+
case 'low':
|
|
111
|
+
compactedContext.prd = this.compressText(context.prd || '', 0.8);
|
|
112
|
+
compactedContext.brand = this.compressText(context.brand || '', 0.8);
|
|
113
|
+
break;
|
|
114
|
+
case 'medium':
|
|
115
|
+
compactedContext.prd = this.compressText(context.prd || '', 0.6);
|
|
116
|
+
compactedContext.brand = this.compressText(context.brand || '', 0.6);
|
|
117
|
+
compactedContext.projectStructure = this.compressText(context.projectStructure || '', 0.7);
|
|
118
|
+
break;
|
|
119
|
+
case 'high':
|
|
120
|
+
compactedContext.prd = this.compressText(context.prd || '', 0.4);
|
|
121
|
+
compactedContext.brand = this.compressText(context.brand || '', 0.4);
|
|
122
|
+
compactedContext.projectStructure = this.compressText(context.projectStructure || '', 0.5);
|
|
123
|
+
compactedContext.types = this.compressText(context.types || '', 0.6);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
// Preserve recent outputs if requested
|
|
127
|
+
if (preserveRecent && context.previousOutputs) {
|
|
128
|
+
compactedContext.previousOutputs = this.preserveRecentOutputs(context.previousOutputs);
|
|
129
|
+
}
|
|
130
|
+
// Update metadata
|
|
131
|
+
compactedContext.lastUpdated = new Date().toISOString();
|
|
132
|
+
compactedContext.contextVersion = '1.0-compacted';
|
|
133
|
+
const newSize = this.calculateContextSize(compactedContext);
|
|
134
|
+
console.log(chalk_1.default.green(`✅ Context compacted: ${currentSize} → ${newSize} bytes`));
|
|
135
|
+
return compactedContext;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.log(chalk_1.default.red(`❌ Context compaction failed: ${error.message}`));
|
|
139
|
+
return context;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Merge new context with existing context
|
|
144
|
+
*/
|
|
145
|
+
async mergeContext(existingContext, newContext) {
|
|
146
|
+
const mergedContext = {
|
|
147
|
+
...existingContext,
|
|
148
|
+
...newContext,
|
|
149
|
+
lastUpdated: new Date().toISOString(),
|
|
150
|
+
};
|
|
151
|
+
// Merge previous outputs intelligently
|
|
152
|
+
if (existingContext.previousOutputs && newContext.previousOutputs) {
|
|
153
|
+
mergedContext.previousOutputs = {
|
|
154
|
+
...existingContext.previousOutputs,
|
|
155
|
+
...newContext.previousOutputs,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
// Check if compaction is needed
|
|
159
|
+
const size = this.calculateContextSize(mergedContext);
|
|
160
|
+
if (size > this.maxContextSize) {
|
|
161
|
+
console.log(chalk_1.default.yellow('⚠️ Merged context exceeds size limit, compacting...'));
|
|
162
|
+
return await this.compactContext(mergedContext);
|
|
163
|
+
}
|
|
164
|
+
return mergedContext;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get context summary for debugging
|
|
168
|
+
*/
|
|
169
|
+
getContextSummary(context) {
|
|
170
|
+
const summary = {
|
|
171
|
+
prd: context.prd ? `${context.prd.length} chars` : 'Not loaded',
|
|
172
|
+
types: context.types ? `${context.types.length} chars` : 'Not loaded',
|
|
173
|
+
brand: context.brand ? `${context.brand.length} chars` : 'Not loaded',
|
|
174
|
+
componentList: context.componentList ? `${Object.keys(context.componentList).length} components` : 'Not loaded',
|
|
175
|
+
projectStructure: context.projectStructure ? `${context.projectStructure.length} chars` : 'Not loaded',
|
|
176
|
+
previousOutputs: context.previousOutputs ? `${Object.keys(context.previousOutputs).length} outputs` : 'None',
|
|
177
|
+
totalSize: `${this.calculateContextSize(context)} bytes`,
|
|
178
|
+
lastUpdated: context.lastUpdated || 'Unknown',
|
|
179
|
+
};
|
|
180
|
+
return JSON.stringify(summary, null, 2);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Clear context memory
|
|
184
|
+
*/
|
|
185
|
+
async clearContext() {
|
|
186
|
+
try {
|
|
187
|
+
if (fs.existsSync(this.contextFile)) {
|
|
188
|
+
fs.unlinkSync(this.contextFile);
|
|
189
|
+
console.log(chalk_1.default.green('✅ Context memory cleared'));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
console.log(chalk_1.default.red(`❌ Context clear failed: ${error.message}`));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Load context from individual files
|
|
198
|
+
*/
|
|
199
|
+
async loadContextFiles(context) {
|
|
200
|
+
const files = [
|
|
201
|
+
{ key: 'prd', file: '01-prd.md' },
|
|
202
|
+
{ key: 'types', file: '02-types.ts' },
|
|
203
|
+
{ key: 'brand', file: '03-branding.md' },
|
|
204
|
+
{ key: 'projectStructure', file: '05-project-structure.md' },
|
|
205
|
+
];
|
|
206
|
+
for (const { key, file } of files) {
|
|
207
|
+
const filePath = path.join(this.contextDir, file);
|
|
208
|
+
if (fs.existsSync(filePath)) {
|
|
209
|
+
try {
|
|
210
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
211
|
+
context[key] = content;
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
console.log(chalk_1.default.yellow(`⚠️ Could not load ${file}`));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Load component list
|
|
219
|
+
const componentListPath = path.join(this.contextDir, '04-component-list.json');
|
|
220
|
+
if (fs.existsSync(componentListPath)) {
|
|
221
|
+
try {
|
|
222
|
+
const content = fs.readFileSync(componentListPath, 'utf8');
|
|
223
|
+
context.componentList = JSON.parse(content);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
console.log(chalk_1.default.yellow('⚠️ Could not load component list'));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Load context from memory file
|
|
232
|
+
*/
|
|
233
|
+
async loadMemoryContext(context) {
|
|
234
|
+
if (fs.existsSync(this.contextFile)) {
|
|
235
|
+
try {
|
|
236
|
+
const content = fs.readFileSync(this.contextFile, 'utf8');
|
|
237
|
+
const memoryContext = JSON.parse(content);
|
|
238
|
+
// Merge memory context with file context
|
|
239
|
+
Object.assign(context, memoryContext);
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
console.log(chalk_1.default.yellow('⚠️ Could not load memory context'));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Calculate context size in bytes
|
|
248
|
+
*/
|
|
249
|
+
calculateContextSize(context) {
|
|
250
|
+
return JSON.stringify(context).length;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Compress text by removing unnecessary whitespace and comments
|
|
254
|
+
*/
|
|
255
|
+
compressText(text, compressionRatio) {
|
|
256
|
+
if (!text)
|
|
257
|
+
return '';
|
|
258
|
+
// Remove excessive whitespace
|
|
259
|
+
let compressed = text.replace(/\s+/g, ' ').trim();
|
|
260
|
+
// Remove comments if compression ratio is high
|
|
261
|
+
if (compressionRatio < 0.7) {
|
|
262
|
+
compressed = compressed.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
263
|
+
compressed = compressed.replace(/\/\/.*$/gm, '');
|
|
264
|
+
}
|
|
265
|
+
// Truncate if still too long
|
|
266
|
+
const targetLength = Math.floor(text.length * compressionRatio);
|
|
267
|
+
if (compressed.length > targetLength) {
|
|
268
|
+
compressed = compressed.substring(0, targetLength) + '...';
|
|
269
|
+
}
|
|
270
|
+
return compressed;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Preserve only recent outputs
|
|
274
|
+
*/
|
|
275
|
+
preserveRecentOutputs(outputs) {
|
|
276
|
+
const sortedEntries = Object.entries(outputs)
|
|
277
|
+
.sort(([, a], [, b]) => {
|
|
278
|
+
const timestampA = a.timestamp || '0';
|
|
279
|
+
const timestampB = b.timestamp || '0';
|
|
280
|
+
return new Date(timestampB).getTime() - new Date(timestampA).getTime();
|
|
281
|
+
})
|
|
282
|
+
.slice(0, 10); // Keep only 10 most recent
|
|
283
|
+
return Object.fromEntries(sortedEntries);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Set context size limits
|
|
287
|
+
*/
|
|
288
|
+
setContextLimits(maxSize, compressionLevel) {
|
|
289
|
+
this.maxContextSize = maxSize;
|
|
290
|
+
this.compressionLevel = compressionLevel;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get context statistics
|
|
294
|
+
*/
|
|
295
|
+
getContextStats(context) {
|
|
296
|
+
const totalSize = this.calculateContextSize(context);
|
|
297
|
+
const fileCount = [
|
|
298
|
+
context.prd,
|
|
299
|
+
context.types,
|
|
300
|
+
context.brand,
|
|
301
|
+
context.componentList,
|
|
302
|
+
context.projectStructure,
|
|
303
|
+
].filter(Boolean).length;
|
|
304
|
+
const originalSize = this.calculateOriginalSize(context);
|
|
305
|
+
const compressionRatio = originalSize > 0 ? totalSize / originalSize : 1;
|
|
306
|
+
return {
|
|
307
|
+
totalSize,
|
|
308
|
+
fileCount,
|
|
309
|
+
lastUpdated: context.lastUpdated || 'Unknown',
|
|
310
|
+
compressionRatio,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Calculate original size before compression
|
|
315
|
+
*/
|
|
316
|
+
calculateOriginalSize(context) {
|
|
317
|
+
// This is an approximation - in a real implementation, you'd track original sizes
|
|
318
|
+
return this.calculateContextSize(context) * 1.5;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
exports.ContextManager = ContextManager;
|
|
322
|
+
//# sourceMappingURL=contextManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextManager.js","sourceRoot":"","sources":["../../src/utils/contextManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,kDAA0B;AAqB1B,MAAa,cAAc;IAMzB,YAAY,gBAAyB;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,6BAA6B;QAC1D,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,OAAO,GAAmB;YAC9B,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;YAC5D,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,IAAI,CAAC;YACH,0BAA0B;YAC1B,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAErC,kCAAkC;YAClC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAEtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAC1D,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAuB;QACvC,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,kBAAkB;YAClB,OAAO,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC/C,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;YAEzD,sBAAsB;YACtB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAErE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,OAAuB,EACvB,UAAoC,EAAE;QAEtC,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC;QAC9D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC;QACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAE3E,MAAM,gBAAgB,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAExC,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAEvD,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBAC5D,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,oBAAoB,WAAW,0BAA0B,OAAO,wBAAwB,CAAC,CAAC,CAAC;YAEpH,mCAAmC;YACnC,QAAQ,gBAAgB,EAAE,CAAC;gBACzB,KAAK,KAAK;oBACR,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;oBACjE,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;oBACrE,MAAM;gBAER,KAAK,QAAQ;oBACX,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;oBACjE,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;oBACrE,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;oBAC3F,MAAM;gBAER,KAAK,MAAM;oBACT,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;oBACjE,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;oBACrE,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;oBAC3F,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;oBACrE,MAAM;YACV,CAAC;YAED,uCAAuC;YACvC,IAAI,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC9C,gBAAgB,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACzF,CAAC;YAED,kBAAkB;YAClB,gBAAgB,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACxD,gBAAgB,CAAC,cAAc,GAAG,eAAe,CAAC;YAElD,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,wBAAwB,WAAW,MAAM,OAAO,QAAQ,CAAC,CAAC,CAAC;YAEnF,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxE,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,eAA+B,EAC/B,UAAmC;QAEnC,MAAM,aAAa,GAAmB;YACpC,GAAG,eAAe;YAClB,GAAG,UAAU;YACb,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,uCAAuC;QACvC,IAAI,eAAe,CAAC,eAAe,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;YAClE,aAAa,CAAC,eAAe,GAAG;gBAC9B,GAAG,eAAe,CAAC,eAAe;gBAClC,GAAG,UAAU,CAAC,eAAe;aAC9B,CAAC;QACJ,CAAC;QAED,gCAAgC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACtD,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;YACjF,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,OAAuB;QACvC,MAAM,OAAO,GAAG;YACd,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,YAAY;YAC/D,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,YAAY;YACrE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,YAAY;YACrE,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,YAAY;YAC/G,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,YAAY;YACtG,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,MAAM;YAC5G,SAAS,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ;YACxD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;SAC9C,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,OAAuB;QACpD,MAAM,KAAK,GAAG;YACZ,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;YACjC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;YACrC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE;YACxC,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,yBAAyB,EAAE;SAC7D,CAAC;QAEF,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAClD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBACjD,OAAe,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;gBAClC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;QAC/E,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBAC3D,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,OAAuB;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAE1C,yCAAyC;gBACzC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,OAAuB;QAClD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAY,EAAE,gBAAwB;QACzD,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,8BAA8B;QAC9B,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAElD,+CAA+C;QAC/C,IAAI,gBAAgB,GAAG,GAAG,EAAE,CAAC;YAC3B,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;YACzD,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,6BAA6B;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC;QAChE,IAAI,UAAU,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YACrC,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC;QAC7D,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,OAA4B;QACxD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;aAC1C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACrB,MAAM,UAAU,GAAI,CAAS,CAAC,SAAS,IAAI,GAAG,CAAC;YAC/C,MAAM,UAAU,GAAI,CAAS,CAAC,SAAS,IAAI,GAAG,CAAC;YAC/C,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QACzE,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,2BAA2B;QAE5C,OAAO,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,OAAe,EAAE,gBAA2C;QAC3E,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,OAAuB;QAMrC,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG;YAChB,OAAO,CAAC,GAAG;YACX,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,aAAa;YACrB,OAAO,CAAC,gBAAgB;SACzB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,gBAAgB,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,OAAO;YACL,SAAS;YACT,SAAS;YACT,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;YAC7C,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,OAAuB;QACnD,kFAAkF;QAClF,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;IAClD,CAAC;CACF;AA1UD,wCA0UC"}
|
|
@@ -3,13 +3,14 @@ import { GitHubModelsClient } from "./githubModelsClient";
|
|
|
3
3
|
import { XaiClient } from "./xaiClient";
|
|
4
4
|
import { OpenAIClient } from "./openaiClient";
|
|
5
5
|
import { ClaudeClient } from "./claudeClient";
|
|
6
|
+
import { ClaudeAgentClient } from "./claudeAgentClient";
|
|
6
7
|
import { QwenClient } from "./qwenClient";
|
|
7
8
|
import { GeminiClient } from "./geminiClient";
|
|
8
9
|
import { HostedApiClient } from "./hostedApiClient";
|
|
9
10
|
export interface AIProvider {
|
|
10
11
|
name: string;
|
|
11
12
|
priority: number;
|
|
12
|
-
client: HuggingFaceClient | GitHubModelsClient | OpenAIClient | ClaudeClient | QwenClient | GeminiClient | XaiClient | HostedApiClient;
|
|
13
|
+
client: HuggingFaceClient | GitHubModelsClient | OpenAIClient | ClaudeClient | ClaudeAgentClient | QwenClient | GeminiClient | XaiClient | HostedApiClient;
|
|
13
14
|
isAvailable: () => Promise<boolean>;
|
|
14
15
|
}
|
|
15
16
|
export interface AIProviderConfig {
|
|
@@ -112,5 +113,28 @@ export declare class HybridAIClient {
|
|
|
112
113
|
setGeminiApiKey(apiKey: string): void;
|
|
113
114
|
getAvailableProviders(): Promise<AIProvider[]>;
|
|
114
115
|
getAllProviders(): Promise<AIProvider[]>;
|
|
116
|
+
/**
|
|
117
|
+
* Set Claude Agent API key
|
|
118
|
+
*/
|
|
119
|
+
setClaudeAgentApiKey(apiKey: string): void;
|
|
120
|
+
/**
|
|
121
|
+
* Generate component using Claude Agent SDK with enhanced context
|
|
122
|
+
*/
|
|
123
|
+
generateComponentWithAgent(prompt: string, context?: any, options?: any): Promise<string>;
|
|
124
|
+
/**
|
|
125
|
+
* Run agent workflow with Claude Agent SDK
|
|
126
|
+
*/
|
|
127
|
+
runAgentWorkflow(workflowPrompt: string, context?: any, options?: any): Promise<{
|
|
128
|
+
content: string;
|
|
129
|
+
context: any;
|
|
130
|
+
}>;
|
|
131
|
+
/**
|
|
132
|
+
* Check if Claude Agent SDK is available
|
|
133
|
+
*/
|
|
134
|
+
isClaudeAgentAvailable(): Promise<boolean>;
|
|
135
|
+
/**
|
|
136
|
+
* Get Claude Agent SDK client if available
|
|
137
|
+
*/
|
|
138
|
+
getClaudeAgentClient(): ClaudeAgentClient | null;
|
|
115
139
|
}
|
|
116
140
|
//# sourceMappingURL=hybridAIClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybridAIClient.d.ts","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EACF,iBAAiB,GACjB,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,SAAS,GACT,eAAe,CAAC;IACpB,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,GAAG,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,MAAM,CAAyB;;IAOvC;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;YACW,mBAAmB;
|
|
1
|
+
{"version":3,"file":"hybridAIClient.d.ts","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,7 @@ const githubModelsClient_1 = require("./githubModelsClient");
|
|
|
41
41
|
const xaiClient_1 = require("./xaiClient");
|
|
42
42
|
const openaiClient_1 = require("./openaiClient");
|
|
43
43
|
const claudeClient_1 = require("./claudeClient");
|
|
44
|
+
const claudeAgentClient_1 = require("./claudeAgentClient");
|
|
44
45
|
const qwenClient_1 = require("./qwenClient");
|
|
45
46
|
const geminiClient_1 = require("./geminiClient");
|
|
46
47
|
const hostedApiClient_1 = require("./hostedApiClient");
|
|
@@ -75,13 +76,25 @@ class HybridAIClient {
|
|
|
75
76
|
*/
|
|
76
77
|
async initializeProviders() {
|
|
77
78
|
// Add user API key providers first (highest priority)
|
|
78
|
-
// Claude
|
|
79
|
+
// Claude Agent SDK (highest priority for advanced features)
|
|
80
|
+
if (this.config?.claude?.enabled) {
|
|
81
|
+
const claudeAgentClient = new claudeAgentClient_1.ClaudeAgentClient();
|
|
82
|
+
if (claudeAgentClient.hasApiKey()) {
|
|
83
|
+
this.providers.push({
|
|
84
|
+
name: "claude-agent",
|
|
85
|
+
priority: 0, // Highest priority for Agent SDK
|
|
86
|
+
client: claudeAgentClient,
|
|
87
|
+
isAvailable: () => claudeAgentClient.checkConnection(),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Claude (fallback to regular Claude client)
|
|
79
92
|
if (this.config?.claude?.enabled) {
|
|
80
93
|
const claudeClient = new claudeClient_1.ClaudeClient();
|
|
81
94
|
if (claudeClient.hasApiKey()) {
|
|
82
95
|
this.providers.push({
|
|
83
96
|
name: "claude",
|
|
84
|
-
priority: 1, //
|
|
97
|
+
priority: 1, // High priority for user keys
|
|
85
98
|
client: claudeClient,
|
|
86
99
|
isAvailable: () => claudeClient.checkConnection(),
|
|
87
100
|
});
|
|
@@ -682,6 +695,60 @@ class HybridAIClient {
|
|
|
682
695
|
async getAllProviders() {
|
|
683
696
|
return this.providers;
|
|
684
697
|
}
|
|
698
|
+
/**
|
|
699
|
+
* Set Claude Agent API key
|
|
700
|
+
*/
|
|
701
|
+
setClaudeAgentApiKey(apiKey) {
|
|
702
|
+
const claudeAgentProvider = this.providers.find((p) => p.name === "claude-agent");
|
|
703
|
+
if (claudeAgentProvider) {
|
|
704
|
+
claudeAgentProvider.client.setApiKey(apiKey);
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Generate component using Claude Agent SDK with enhanced context
|
|
709
|
+
*/
|
|
710
|
+
async generateComponentWithAgent(prompt, context = {}, options = {}) {
|
|
711
|
+
const claudeAgentProvider = this.providers.find((p) => p.name === "claude-agent");
|
|
712
|
+
if (claudeAgentProvider && (await claudeAgentProvider.isAvailable())) {
|
|
713
|
+
const agentClient = claudeAgentProvider.client;
|
|
714
|
+
return await agentClient.generateComponent(prompt, context, options);
|
|
715
|
+
}
|
|
716
|
+
// Fallback to regular component generation
|
|
717
|
+
const result = await this.generateComponent(prompt, options);
|
|
718
|
+
return typeof result === "string" ? result : result.code;
|
|
719
|
+
}
|
|
720
|
+
/**
|
|
721
|
+
* Run agent workflow with Claude Agent SDK
|
|
722
|
+
*/
|
|
723
|
+
async runAgentWorkflow(workflowPrompt, context = {}, options = {}) {
|
|
724
|
+
const claudeAgentProvider = this.providers.find((p) => p.name === "claude-agent");
|
|
725
|
+
if (claudeAgentProvider && (await claudeAgentProvider.isAvailable())) {
|
|
726
|
+
const agentClient = claudeAgentProvider.client;
|
|
727
|
+
return await agentClient.runAgentWorkflow(workflowPrompt, context, options);
|
|
728
|
+
}
|
|
729
|
+
// Fallback to regular text generation
|
|
730
|
+
const result = await this.generateText(workflowPrompt, options);
|
|
731
|
+
const content = typeof result === "string" ? result : result.text;
|
|
732
|
+
return { content, context };
|
|
733
|
+
}
|
|
734
|
+
/**
|
|
735
|
+
* Check if Claude Agent SDK is available
|
|
736
|
+
*/
|
|
737
|
+
async isClaudeAgentAvailable() {
|
|
738
|
+
const claudeAgentProvider = this.providers.find((p) => p.name === "claude-agent");
|
|
739
|
+
return claudeAgentProvider
|
|
740
|
+
? await claudeAgentProvider.isAvailable()
|
|
741
|
+
: false;
|
|
742
|
+
}
|
|
743
|
+
/**
|
|
744
|
+
* Get Claude Agent SDK client if available
|
|
745
|
+
*/
|
|
746
|
+
getClaudeAgentClient() {
|
|
747
|
+
const claudeAgentProvider = this.providers.find((p) => p.name === "claude-agent");
|
|
748
|
+
return claudeAgentProvider
|
|
749
|
+
? claudeAgentProvider.client
|
|
750
|
+
: null;
|
|
751
|
+
}
|
|
685
752
|
}
|
|
686
753
|
exports.HybridAIClient = HybridAIClient;
|
|
687
754
|
//# sourceMappingURL=hybridAIClient.js.map
|