erosolar-cli 1.3.6 → 1.3.9

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.
Files changed (49) hide show
  1. package/dist/StringUtils.d.ts +8 -0
  2. package/dist/StringUtils.d.ts.map +1 -0
  3. package/dist/StringUtils.js +11 -0
  4. package/dist/StringUtils.js.map +1 -0
  5. package/dist/alpha-zero/index.d.ts +1 -1
  6. package/dist/alpha-zero/index.js +1 -1
  7. package/dist/capabilities/index.d.ts +1 -1
  8. package/dist/capabilities/index.d.ts.map +1 -1
  9. package/dist/capabilities/index.js +1 -1
  10. package/dist/capabilities/index.js.map +1 -1
  11. package/dist/capabilities/skillCapability.d.ts +2 -6
  12. package/dist/capabilities/skillCapability.d.ts.map +1 -1
  13. package/dist/capabilities/skillCapability.js +70 -20
  14. package/dist/capabilities/skillCapability.js.map +1 -1
  15. package/dist/core/agent.d.ts +16 -0
  16. package/dist/core/agent.d.ts.map +1 -1
  17. package/dist/core/agent.js +171 -54
  18. package/dist/core/agent.js.map +1 -1
  19. package/dist/core/contextManager.js +6 -6
  20. package/dist/core/contextManager.js.map +1 -1
  21. package/dist/core/contextWindow.d.ts +6 -0
  22. package/dist/core/contextWindow.d.ts.map +1 -1
  23. package/dist/core/contextWindow.js +12 -4
  24. package/dist/core/contextWindow.js.map +1 -1
  25. package/dist/plugins/tools/skills/skillPlugin.js +2 -2
  26. package/dist/plugins/tools/skills/skillPlugin.js.map +1 -1
  27. package/dist/shell/interactiveShell.d.ts +19 -0
  28. package/dist/shell/interactiveShell.d.ts.map +1 -1
  29. package/dist/shell/interactiveShell.js +178 -1
  30. package/dist/shell/interactiveShell.js.map +1 -1
  31. package/dist/skills/skillRepository.d.ts +99 -23
  32. package/dist/skills/skillRepository.d.ts.map +1 -1
  33. package/dist/skills/skillRepository.js +213 -329
  34. package/dist/skills/skillRepository.js.map +1 -1
  35. package/dist/tools/skillTools.d.ts.map +1 -1
  36. package/dist/tools/skillTools.js +24 -62
  37. package/dist/tools/skillTools.js.map +1 -1
  38. package/package.json +21 -5
  39. package/scripts/ai-code-reviewer.mjs +343 -0
  40. package/scripts/code-intelligence-enhancer.mjs +415 -0
  41. package/scripts/dev-productivity-booster.mjs +342 -0
  42. package/dist/ui/advancedPrompt.d.ts +0 -58
  43. package/dist/ui/advancedPrompt.d.ts.map +0 -1
  44. package/dist/ui/advancedPrompt.js +0 -219
  45. package/dist/ui/advancedPrompt.js.map +0 -1
  46. package/dist/ui/overlay/OverlayManager.d.ts +0 -105
  47. package/dist/ui/overlay/OverlayManager.d.ts.map +0 -1
  48. package/dist/ui/overlay/OverlayManager.js +0 -291
  49. package/dist/ui/overlay/OverlayManager.js.map +0 -1
@@ -0,0 +1,342 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Development Productivity Booster
5
+ *
6
+ * Enhances developer workflow with intelligent automation,
7
+ * code generation, and productivity tools.
8
+ *
9
+ * Features:
10
+ * - Automated code scaffolding
11
+ * - Intelligent file generation
12
+ * - Development workflow optimization
13
+ * - Code snippet library
14
+ * - Project template management
15
+ */
16
+
17
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
18
+ import { join, dirname, basename } from 'path';
19
+ import { fileURLToPath } from 'url';
20
+
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ const __dirname = dirname(__filename);
23
+
24
+ class DevProductivityBooster {
25
+ constructor() {
26
+ this.projectRoot = join(__dirname, '..');
27
+ this.templates = this.loadTemplates();
28
+ }
29
+
30
+ loadTemplates() {
31
+ return {
32
+ 'component': `/**
33
+ * Component Template
34
+ *
35
+ * Auto-generated component with TypeScript and best practices
36
+ */
37
+
38
+ export interface {{name}}Props {
39
+ // Component props interface
40
+ }
41
+
42
+ export const {{name}} = (props: {{name}}Props) => {
43
+ return (
44
+ <div>
45
+ {/* Component content */}
46
+ </div>
47
+ );
48
+ };
49
+
50
+ export default {{name}};`,
51
+
52
+ 'service': `/**
53
+ * Service Template
54
+ *
55
+ * Auto-generated service with error handling and TypeScript
56
+ */
57
+
58
+ export class {{name}}Service {
59
+ constructor() {
60
+ // Service initialization
61
+ }
62
+
63
+ async execute(): Promise<any> {
64
+ try {
65
+ // Service logic here
66
+ return { success: true };
67
+ } catch (error) {
68
+ console.error('Service error:', error);
69
+ throw error;
70
+ }
71
+ }
72
+ }
73
+
74
+ export default {{name}}Service;`,
75
+
76
+ 'utility': `/**
77
+ * Utility Function Template
78
+ *
79
+ * Auto-generated utility function with TypeScript
80
+ */
81
+
82
+ export const {{name}} = (input: any): any => {
83
+ // Utility logic here
84
+ return input;
85
+ };
86
+
87
+ export default {{name}};`,
88
+
89
+ 'test': `/**
90
+ * Test Template
91
+ *
92
+ * Auto-generated test with Jest and TypeScript
93
+ */
94
+
95
+ import { {{name}} } from './{{name}}';
96
+
97
+ describe('{{name}}', () => {
98
+ it('should work correctly', () => {
99
+ expect({{name}}()).toBeDefined();
100
+ });
101
+ });`
102
+ };
103
+ }
104
+
105
+ generateFile(type, name, targetPath = 'src') {
106
+ if (!this.templates[type]) {
107
+ throw new Error(`Unknown template type: ${type}`);
108
+ }
109
+
110
+ const template = this.templates[type];
111
+ const content = template.replace(/\{\{name\}\}/g, name);
112
+
113
+ const fileName = this.getFileName(type, name);
114
+ const fullPath = join(this.projectRoot, targetPath, fileName);
115
+
116
+ // Ensure directory exists
117
+ const dir = dirname(fullPath);
118
+ if (!existsSync(dir)) {
119
+ mkdirSync(dir, { recursive: true });
120
+ }
121
+
122
+ // Write file
123
+ writeFileSync(fullPath, content, 'utf8');
124
+
125
+ return {
126
+ type,
127
+ name,
128
+ fileName,
129
+ path: fullPath,
130
+ content
131
+ };
132
+ }
133
+
134
+ getFileName(type, name) {
135
+ const extensions = {
136
+ 'component': '.tsx',
137
+ 'service': '.ts',
138
+ 'utility': '.ts',
139
+ 'test': '.test.ts'
140
+ };
141
+
142
+ return `${name}${extensions[type] || '.ts'}`;
143
+ }
144
+
145
+ analyzeWorkflow() {
146
+ const packageJson = JSON.parse(readFileSync(join(this.projectRoot, 'package.json'), 'utf8'));
147
+ const scripts = packageJson.scripts || {};
148
+
149
+ const workflow = {
150
+ build: scripts.build ? '✅' : '❌',
151
+ test: scripts.test ? '✅' : '❌',
152
+ lint: scripts.lint ? '✅' : '❌',
153
+ dev: scripts.dev ? '✅' : '❌',
154
+ typeCheck: scripts['type-check'] ? '✅' : '❌'
155
+ };
156
+
157
+ return {
158
+ scripts: workflow,
159
+ recommendations: this.generateWorkflowRecommendations(workflow)
160
+ };
161
+ }
162
+
163
+ generateWorkflowRecommendations(workflow) {
164
+ const recommendations = [];
165
+
166
+ if (workflow.build === '❌') {
167
+ recommendations.push('Add build script to package.json');
168
+ }
169
+
170
+ if (workflow.test === '❌') {
171
+ recommendations.push('Add test script to package.json');
172
+ }
173
+
174
+ if (workflow.lint === '❌') {
175
+ recommendations.push('Add lint script to package.json');
176
+ }
177
+
178
+ if (workflow.dev === '❌') {
179
+ recommendations.push('Add dev script for development workflow');
180
+ }
181
+
182
+ return recommendations;
183
+ }
184
+
185
+ generateCodeSnippets() {
186
+ return {
187
+ 'error-handling': `
188
+ // Error handling pattern
189
+ try {
190
+ // Your code here
191
+ } catch (error) {
192
+ console.error('Operation failed:', error);
193
+ throw new Error('Failed to execute operation');
194
+ }
195
+ `,
196
+ 'async-function': `
197
+ // Async function pattern
198
+ const asyncFunction = async (): Promise<any> => {
199
+ try {
200
+ // Async operations here
201
+ return await someAsyncOperation();
202
+ } catch (error) {
203
+ console.error('Async operation failed:', error);
204
+ throw error;
205
+ }
206
+ };
207
+ `,
208
+ 'type-definition': `
209
+ // Type definition pattern
210
+ export interface User {
211
+ id: string;
212
+ name: string;
213
+ email: string;
214
+ createdAt: Date;
215
+ }
216
+
217
+ export type UserRole = 'admin' | 'user' | 'guest';
218
+ `,
219
+ 'api-client': `
220
+ // API client pattern
221
+ class ApiClient {
222
+ private baseUrl: string;
223
+
224
+ constructor(baseUrl: string) {
225
+ this.baseUrl = baseUrl;
226
+ }
227
+
228
+ async get<T>(endpoint: string): Promise<T> {
229
+ const response = await fetch(\`\${this.baseUrl}\${endpoint}\`);
230
+ if (!response.ok) {
231
+ throw new Error(\`API error: \${response.status}\`);
232
+ }
233
+ return response.json();
234
+ }
235
+ }
236
+ `
237
+ };
238
+ }
239
+
240
+ formatReport(generatedFile, workflowAnalysis) {
241
+ const output = [];
242
+
243
+ output.push('╔══════════════════════════════════════════════════════════════════════════════╗');
244
+ output.push('║ DEVELOPMENT PRODUCTIVITY REPORT ║');
245
+ output.push('╚══════════════════════════════════════════════════════════════════════════════╝\n');
246
+
247
+ if (generatedFile) {
248
+ output.push('📄 FILE GENERATED');
249
+ output.push('─'.repeat(60));
250
+ output.push(`Type: ${generatedFile.type}`);
251
+ output.push(`Name: ${generatedFile.name}`);
252
+ output.push(`File: ${generatedFile.fileName}`);
253
+ output.push(`Path: ${generatedFile.path.replace(this.projectRoot + '/', '')}`);
254
+ output.push('');
255
+ }
256
+
257
+ output.push('⚙️ WORKFLOW ANALYSIS');
258
+ output.push('─'.repeat(60));
259
+ output.push(`Build: ${workflowAnalysis.scripts.build}`);
260
+ output.push(`Test: ${workflowAnalysis.scripts.test}`);
261
+ output.push(`Lint: ${workflowAnalysis.scripts.lint}`);
262
+ output.push(`Dev: ${workflowAnalysis.scripts.dev}`);
263
+ output.push(`Type Check: ${workflowAnalysis.scripts.typeCheck}`);
264
+ output.push('');
265
+
266
+ if (workflowAnalysis.recommendations.length > 0) {
267
+ output.push('💡 WORKFLOW RECOMMENDATIONS');
268
+ output.push('─'.repeat(60));
269
+ workflowAnalysis.recommendations.forEach(rec => {
270
+ output.push(`• ${rec}`);
271
+ });
272
+ output.push('');
273
+ }
274
+
275
+ output.push('🚀 PRODUCTIVITY TIPS');
276
+ output.push('─'.repeat(60));
277
+ output.push('• Use "npm run dev" for development with hot reload');
278
+ output.push('• Run "npm test" frequently during development');
279
+ output.push('• Use "npm run lint:fix" to automatically fix code style');
280
+ output.push('• Run "npm run type-check" to verify TypeScript types');
281
+ output.push('• Use code snippets for common patterns');
282
+
283
+ output.push('\n' + '═'.repeat(60));
284
+
285
+ return output.join('\n');
286
+ }
287
+ }
288
+
289
+ // CLI interface
290
+ async function main() {
291
+ const args = process.argv.slice(2);
292
+ const booster = new DevProductivityBooster();
293
+
294
+ if (args.length === 0) {
295
+ // Show workflow analysis
296
+ const workflow = booster.analyzeWorkflow();
297
+ console.log(booster.formatReport(null, workflow));
298
+ return;
299
+ }
300
+
301
+ if (args[0] === 'generate') {
302
+ if (args.length < 3) {
303
+ console.log('Usage: node scripts/dev-productivity-booster.mjs generate <type> <name> [target-path]');
304
+ console.log('Types: component, service, utility, test');
305
+ process.exit(1);
306
+ }
307
+
308
+ const type = args[1];
309
+ const name = args[2];
310
+ const targetPath = args[3] || 'src';
311
+
312
+ try {
313
+ const generatedFile = booster.generateFile(type, name, targetPath);
314
+ const workflow = booster.analyzeWorkflow();
315
+ console.log(booster.formatReport(generatedFile, workflow));
316
+ } catch (error) {
317
+ console.error('❌ Error:', error.message);
318
+ process.exit(1);
319
+ }
320
+ } else if (args[0] === 'snippets') {
321
+ const snippets = booster.generateCodeSnippets();
322
+ console.log('📝 AVAILABLE CODE SNIPPETS');
323
+ console.log('─'.repeat(60));
324
+ Object.keys(snippets).forEach(key => {
325
+ console.log(`\n${key}:`);
326
+ console.log(snippets[key]);
327
+ });
328
+ } else {
329
+ console.log('Usage:');
330
+ console.log(' node scripts/dev-productivity-booster.mjs # Workflow analysis');
331
+ console.log(' node scripts/dev-productivity-booster.mjs generate <type> <name> [path]');
332
+ console.log(' node scripts/dev-productivity-booster.mjs snippets # Show code snippets');
333
+ process.exit(1);
334
+ }
335
+ }
336
+
337
+ // Run if called directly
338
+ if (import.meta.url === `file://${process.argv[1]}`) {
339
+ main();
340
+ }
341
+
342
+ export { DevProductivityBooster };
@@ -1,58 +0,0 @@
1
- /**
2
- * Advanced Prompt System - Sophisticated shell prompts with animations
3
- */
4
- /**
5
- * Create a sophisticated animated prompt
6
- */
7
- export declare class AdvancedPrompt {
8
- private animationFrame;
9
- /**
10
- * Format user prompt with advanced styling
11
- */
12
- formatUserPrompt(profileLabel: string, contextUsage?: number): string;
13
- /**
14
- * Create a mini progress bar for context usage
15
- */
16
- private createMiniProgressBar;
17
- /**
18
- * Get animated prompt symbol
19
- */
20
- private getAnimatedPromptSymbol;
21
- /**
22
- * Create status line with sophisticated formatting
23
- */
24
- createStatusLine(status: string, fileChanges?: {
25
- files: number;
26
- added: number;
27
- removed: number;
28
- }, activeTools?: string[]): string;
29
- /**
30
- * Create thinking indicator with sophisticated animation
31
- */
32
- createThinkingIndicator(message?: string): string;
33
- /**
34
- * Create input field with sophisticated styling
35
- */
36
- formatInputField(input: string, cursorPosition: number): string;
37
- /**
38
- * Create command preview with sophisticated formatting
39
- */
40
- formatCommandPreview(commands: Array<{
41
- command: string;
42
- description: string;
43
- }>, _filterText?: string): string;
44
- /**
45
- * Create welcome banner with sophisticated effects
46
- */
47
- createWelcomeBanner(model: string, version: string): string;
48
- /**
49
- * Center text within width
50
- */
51
- private centerText;
52
- /**
53
- * Create sophisticated loading animation
54
- */
55
- createLoadingAnimation(progress: number, message?: string): string;
56
- }
57
- export declare const advancedPrompt: AdvancedPrompt;
58
- //# sourceMappingURL=advancedPrompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"advancedPrompt.d.ts","sourceRoot":"","sources":["../../src/ui/advancedPrompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAAK;IAE3B;;OAEG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM;IAsCrE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAS/B;;OAEG;IACH,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAC/D,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,MAAM;IAuCT;;OAEG;IACH,uBAAuB,CAAC,OAAO,GAAE,MAAmB,GAAG,MAAM;IAsB7D;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;IAyB/D;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAuC7G;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAiD3D;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAkB,GAAG,MAAM;CAyC9E;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -1,219 +0,0 @@
1
- /**
2
- * Advanced Prompt System - Sophisticated shell prompts with animations
3
- */
4
- import { GradientEffect, AnimationFrames, AdvancedSymbols } from './advancedTheme.js';
5
- /**
6
- * Create a sophisticated animated prompt
7
- */
8
- export class AdvancedPrompt {
9
- animationFrame = 0;
10
- /**
11
- * Format user prompt with advanced styling
12
- */
13
- formatUserPrompt(profileLabel, contextUsage) {
14
- // Create prompt segments
15
- const segments = [];
16
- // Time segment with subtle gradient
17
- const timeStr = new Date().toLocaleTimeString('en-US', {
18
- hour12: false,
19
- hour: '2-digit',
20
- minute: '2-digit',
21
- });
22
- const timeGradient = GradientEffect.linearGradient(timeStr, [100, 100, 100], [150, 150, 150]);
23
- segments.push(`[${timeGradient}]`);
24
- // Profile segment with wave gradient
25
- const profileGradient = GradientEffect.wave(profileLabel, [0, 255, 255], [255, 0, 255]);
26
- segments.push(profileGradient);
27
- // Context usage indicator if available
28
- if (contextUsage !== undefined) {
29
- const contextBar = this.createMiniProgressBar(contextUsage / 100, 10);
30
- segments.push(contextBar);
31
- }
32
- // Animated prompt symbol
33
- const promptSymbol = this.getAnimatedPromptSymbol();
34
- segments.push(promptSymbol);
35
- return segments.join(' ');
36
- }
37
- /**
38
- * Create a mini progress bar for context usage
39
- */
40
- createMiniProgressBar(progress, width) {
41
- const filled = Math.round(progress * width);
42
- const empty = width - filled;
43
- const filledChars = '█'.repeat(filled);
44
- const emptyChars = '░'.repeat(empty);
45
- // Apply gradient based on usage level
46
- let color;
47
- if (progress < 0.5) {
48
- color = [0, 255, 0]; // Green
49
- }
50
- else if (progress < 0.8) {
51
- color = [255, 255, 0]; // Yellow
52
- }
53
- else {
54
- color = [255, 0, 0]; // Red
55
- }
56
- const bar = filledChars + emptyChars;
57
- return `[${GradientEffect.pulse(bar, color, 0.3)}]`;
58
- }
59
- /**
60
- * Get animated prompt symbol
61
- */
62
- getAnimatedPromptSymbol() {
63
- const symbols = ['❯', '❱', '❭', '❯❯', '⟩', '▸', '▹', '►'];
64
- const symbol = symbols[this.animationFrame % symbols.length] || '❯';
65
- this.animationFrame++;
66
- // Apply rainbow effect to the symbol
67
- return GradientEffect.rainbow(symbol);
68
- }
69
- /**
70
- * Create status line with sophisticated formatting
71
- */
72
- createStatusLine(status, fileChanges, activeTools) {
73
- const segments = [];
74
- // Status with gradient
75
- const statusGradient = GradientEffect.wave(status, [64, 224, 208], [147, 112, 219]);
76
- segments.push(statusGradient);
77
- // File changes indicator
78
- if (fileChanges && fileChanges.files > 0) {
79
- const changesText = `${fileChanges.files} files +${fileChanges.added} -${fileChanges.removed}`;
80
- const changesGradient = GradientEffect.linearGradient(changesText, [0, 255, 127], [255, 127, 0]);
81
- segments.push(`[${changesGradient}]`);
82
- }
83
- // Active tools indicator
84
- if (activeTools && activeTools.length > 0) {
85
- const toolsText = activeTools.map(t => {
86
- const key = t.toLowerCase();
87
- return AdvancedSymbols.tools[key] || t;
88
- }).join(' ');
89
- const toolsGradient = GradientEffect.pulse(toolsText, [127, 127, 255], 0.5);
90
- segments.push(toolsGradient);
91
- }
92
- return segments.join(' • ');
93
- }
94
- /**
95
- * Create thinking indicator with sophisticated animation
96
- */
97
- createThinkingIndicator(message = 'Thinking') {
98
- const frames = AnimationFrames.elegantDots();
99
- const frame = frames[this.animationFrame % frames.length] || '⣾';
100
- this.animationFrame++;
101
- // Create pulsing gradient for the spinner
102
- const spinnerGradient = GradientEffect.pulse(frame, [0, 255, 255], 0.8);
103
- // Create wave gradient for the message
104
- const messageGradient = GradientEffect.wave(message, [147, 112, 219], [255, 182, 193]);
105
- return `${spinnerGradient} ${messageGradient}`;
106
- }
107
- /**
108
- * Create input field with sophisticated styling
109
- */
110
- formatInputField(input, cursorPosition) {
111
- const before = input.slice(0, cursorPosition);
112
- const after = input.slice(cursorPosition);
113
- // Apply subtle gradient to the input
114
- const beforeGradient = GradientEffect.linearGradient(before, [200, 200, 200], [255, 255, 255]);
115
- const afterGradient = GradientEffect.linearGradient(after, [255, 255, 255], [200, 200, 200]);
116
- // Animated cursor
117
- const cursorFrames = ['▊', '▌', '▎', '▏', '▎', '▌'];
118
- const cursor = cursorFrames[this.animationFrame % cursorFrames.length] || '▊';
119
- const cursorGradient = GradientEffect.rainbow(cursor);
120
- return `${beforeGradient}${cursorGradient}${afterGradient}`;
121
- }
122
- /**
123
- * Create command preview with sophisticated formatting
124
- */
125
- formatCommandPreview(commands, _filterText) {
126
- const lines = [];
127
- // Header with gradient (no box characters)
128
- const headerGradient = GradientEffect.wave('=== Commands ===', [0, 255, 255], [255, 0, 255]);
129
- lines.push(headerGradient);
130
- // Commands with alternating gradients
131
- commands.forEach((cmd, i) => {
132
- const isEven = i % 2 === 0;
133
- const commandColor = isEven ? [0, 255, 255] : [255, 0, 255];
134
- const descColor = isEven ? [147, 112, 219] : [255, 182, 193];
135
- const commandGradient = GradientEffect.pulse(cmd.command, commandColor, 0.3);
136
- const descGradient = GradientEffect.linearGradient(cmd.description, descColor, [150, 150, 150]);
137
- lines.push(` ${commandGradient}`);
138
- lines.push(` ${descGradient}`);
139
- });
140
- // Footer (no box characters)
141
- const footerGradient = GradientEffect.wave('================', [255, 0, 255], [0, 255, 255]);
142
- lines.push(footerGradient);
143
- return lines.join('\n');
144
- }
145
- /**
146
- * Create welcome banner with sophisticated effects
147
- */
148
- createWelcomeBanner(model, version) {
149
- const lines = [];
150
- // Top border with gradient
151
- const width = process.stdout.columns || 80;
152
- const topBorder = '═'.repeat(width - 2);
153
- const topGradient = GradientEffect.linearGradient(`╔${topBorder}╗`, [0, 255, 255], [255, 0, 255]);
154
- lines.push(topGradient);
155
- // Title with rainbow effect
156
- const title = 'CLAUDE CODE';
157
- const titleCentered = this.centerText(title, width - 2);
158
- const titleRainbow = GradientEffect.rainbow(titleCentered);
159
- lines.push(`║${titleRainbow}║`);
160
- // Model with wave gradient
161
- const modelCentered = this.centerText(model, width - 2);
162
- const modelGradient = GradientEffect.wave(modelCentered, [147, 112, 219], [255, 182, 193]);
163
- lines.push(`║${modelGradient}║`);
164
- // Version with pulse gradient
165
- const versionCentered = this.centerText(version, width - 2);
166
- const versionGradient = GradientEffect.pulse(versionCentered, [100, 200, 255], 0.5);
167
- lines.push(`║${versionGradient}║`);
168
- // Bottom border
169
- const bottomBorder = '═'.repeat(width - 2);
170
- const bottomGradient = GradientEffect.linearGradient(`╚${bottomBorder}╝`, [255, 0, 255], [0, 255, 255]);
171
- lines.push(bottomGradient);
172
- return lines.join('\n');
173
- }
174
- /**
175
- * Center text within width
176
- */
177
- centerText(text, width) {
178
- // Remove ANSI codes to get actual text length
179
- // eslint-disable-next-line no-control-regex
180
- const textLength = text.replace(/\u001b\[[0-9;]*m/g, '').length;
181
- const padding = Math.max(0, Math.floor((width - textLength) / 2));
182
- const totalPadding = width - textLength;
183
- const leftPadding = padding;
184
- const rightPadding = totalPadding - leftPadding;
185
- return ' '.repeat(leftPadding) + text + ' '.repeat(rightPadding);
186
- }
187
- /**
188
- * Create sophisticated loading animation
189
- */
190
- createLoadingAnimation(progress, message = 'Loading') {
191
- const width = 30;
192
- const filled = Math.round(progress * width);
193
- // Create segments with different symbols
194
- const segments = [];
195
- for (let i = 0; i < width; i++) {
196
- if (i < filled) {
197
- segments.push('▰');
198
- }
199
- else if (i === filled && progress < 1) {
200
- // Animated loading position
201
- const loadingFrames = ['▱', '▰', '▱'];
202
- segments.push(loadingFrames[this.animationFrame % loadingFrames.length] || '▱');
203
- }
204
- else {
205
- segments.push('▱');
206
- }
207
- }
208
- const bar = segments.join('');
209
- const barGradient = GradientEffect.wave(bar, [0, 255, 127], [255, 127, 0]);
210
- const percentage = Math.round(progress * 100);
211
- const percentageText = `${percentage}%`.padStart(4);
212
- const percentageGradient = GradientEffect.pulse(percentageText, [255, 255, 255], 0.3);
213
- const messageGradient = GradientEffect.linearGradient(message, [147, 112, 219], [255, 182, 193]);
214
- return `${messageGradient} [${barGradient}] ${percentageGradient}`;
215
- }
216
- }
217
- // Export singleton instance
218
- export const advancedPrompt = new AdvancedPrompt();
219
- //# sourceMappingURL=advancedPrompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"advancedPrompt.js","sourceRoot":"","sources":["../../src/ui/advancedPrompt.ts"],"names":[],"mappings":"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"}