recoder-code 2.1.4 ā 2.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/cli/interactive.js +42 -22
- package/package.json +1 -1
package/cli/interactive.js
CHANGED
|
@@ -143,7 +143,7 @@ class InteractiveRecoderChat {
|
|
|
143
143
|
this.rl = readline.createInterface({
|
|
144
144
|
input: process.stdin,
|
|
145
145
|
output: process.stdout,
|
|
146
|
-
prompt: chalk.
|
|
146
|
+
prompt: chalk.magenta('ā¶ ') + chalk.white.bold('You: '),
|
|
147
147
|
historySize: 100,
|
|
148
148
|
removeHistoryDuplicates: true,
|
|
149
149
|
completer: this.autoComplete.bind(this)
|
|
@@ -403,9 +403,9 @@ class InteractiveRecoderChat {
|
|
|
403
403
|
const convIndicator = this.currentConversationId === 'main' ? '' : chalk.gray(`[${currentConv.name}] `);
|
|
404
404
|
|
|
405
405
|
if (this.multiLineMode) {
|
|
406
|
-
this.rl.setPrompt(chalk.
|
|
406
|
+
this.rl.setPrompt(chalk.magenta('ā ') + chalk.gray('... '));
|
|
407
407
|
} else {
|
|
408
|
-
this.rl.setPrompt(convIndicator + chalk.
|
|
408
|
+
this.rl.setPrompt(convIndicator + chalk.magenta('ā¶ ') + chalk.white.bold('You: '));
|
|
409
409
|
}
|
|
410
410
|
}
|
|
411
411
|
|
|
@@ -981,20 +981,40 @@ class InteractiveRecoderChat {
|
|
|
981
981
|
displayWelcome() {
|
|
982
982
|
console.clear();
|
|
983
983
|
|
|
984
|
-
//
|
|
984
|
+
// Stunning purple/gray/black UI with recoder.xyz branding
|
|
985
985
|
console.log('');
|
|
986
|
-
console.log(chalk.bold('
|
|
986
|
+
console.log(chalk.magenta.bold('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā®'));
|
|
987
|
+
console.log(chalk.magenta.bold('ā') + chalk.black.bgMagenta.bold(' RECODER.XYZ ') + chalk.magenta.bold('ā'));
|
|
988
|
+
console.log(chalk.magenta.bold('ā') + chalk.gray(' AI-Powered Development Terminal ') + chalk.magenta.bold('ā'));
|
|
989
|
+
console.log(chalk.magenta.bold('ā°āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāÆ'));
|
|
987
990
|
console.log('');
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
console.log(chalk.
|
|
991
|
+
|
|
992
|
+
// ASCII Art Logo
|
|
993
|
+
console.log(chalk.magenta.bold('āāāāāāā āāāāāāāā āāāāāāā āāāāāāā āāāāāāā āāāāāāāāāāāāāāā'));
|
|
994
|
+
console.log(chalk.magenta.bold('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
995
|
+
console.log(chalk.magenta.bold('āāāāāāāāāāāāāā āāā āāā āāāāāā āāāāāāāāā āāāāāāāā'));
|
|
996
|
+
console.log(chalk.gray('āāāāāāāāāāāāāā āāā āāā āāāāāā āāāāāāāāā āāāāāāāā'));
|
|
997
|
+
console.log(chalk.gray('āāā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā āāā'));
|
|
998
|
+
console.log(chalk.gray('āāā āāāāāāāāāāā āāāāāāā āāāāāāā āāāāāāā āāāāāāāāāāā āāā'));
|
|
991
999
|
console.log('');
|
|
1000
|
+
|
|
1001
|
+
// Status Bar
|
|
1002
|
+
console.log(chalk.magenta('ā¶ ') + chalk.white.bold('Ready') + chalk.gray(' ā ') + chalk.gray(`${process.cwd()}`));
|
|
1003
|
+
console.log(chalk.gray('ā'.repeat(65)));
|
|
992
1004
|
console.log('');
|
|
1005
|
+
|
|
993
1006
|
// Show session suggestions if available
|
|
994
1007
|
this.showSessionSuggestions();
|
|
995
1008
|
|
|
996
|
-
|
|
997
|
-
console.log(chalk.
|
|
1009
|
+
// Quick actions
|
|
1010
|
+
console.log(chalk.magenta('ā” ') + chalk.white.bold('Quick Actions:'));
|
|
1011
|
+
console.log(chalk.gray(' ⢠') + chalk.cyan('/help') + chalk.gray(' - Show available commands'));
|
|
1012
|
+
console.log(chalk.gray(' ⢠') + chalk.cyan('/status') + chalk.gray(' - System status & configuration'));
|
|
1013
|
+
console.log(chalk.gray(' ⢠') + chalk.cyan('/models') + chalk.gray(' - Switch AI models'));
|
|
1014
|
+
console.log('');
|
|
1015
|
+
|
|
1016
|
+
console.log(chalk.magenta('š¬ ') + chalk.white.bold('Start coding with AI assistance!'));
|
|
1017
|
+
console.log(chalk.gray('⨠Try: ') + chalk.cyan('"build a React app"') + chalk.gray(' or ') + chalk.cyan('"debug my Python code"'));
|
|
998
1018
|
console.log('');
|
|
999
1019
|
|
|
1000
1020
|
this.rl.prompt();
|
|
@@ -1006,35 +1026,35 @@ class InteractiveRecoderChat {
|
|
|
1006
1026
|
const projectStatus = this.projectManager.getProjectStatus();
|
|
1007
1027
|
|
|
1008
1028
|
if (projectStatus.exists) {
|
|
1009
|
-
console.log(chalk.
|
|
1010
|
-
console.log(chalk.gray(` Todos: ${projectStatus.todos.pending} pending, ${projectStatus.todos.completed} completed`));
|
|
1029
|
+
console.log(chalk.magenta('š ') + chalk.white.bold(`Project: ${projectStatus.context.name}`));
|
|
1030
|
+
console.log(chalk.gray(` ⢠Todos: ${projectStatus.todos.pending} pending, ${projectStatus.todos.completed} completed`));
|
|
1011
1031
|
}
|
|
1012
1032
|
|
|
1013
1033
|
// Check for intelligent auto-resume candidate
|
|
1014
1034
|
const resumeCandidate = this.projectManager.shouldOfferAutoResume();
|
|
1015
1035
|
|
|
1016
1036
|
if (resumeCandidate) {
|
|
1017
|
-
console.log(chalk.
|
|
1018
|
-
console.log(chalk.
|
|
1019
|
-
console.log(chalk.gray(` Messages: ${resumeCandidate.messageCount} | Model: ${resumeCandidate.model}`));
|
|
1037
|
+
console.log(chalk.magenta('š ') + chalk.white.bold('Resume Previous Session?'));
|
|
1038
|
+
console.log(chalk.gray(` ⢠Session: ${resumeCandidate.id} (${resumeCandidate.activityDescription})`));
|
|
1039
|
+
console.log(chalk.gray(` ⢠Messages: ${resumeCandidate.messageCount} | Model: ${resumeCandidate.model}`));
|
|
1020
1040
|
|
|
1021
1041
|
if (resumeCandidate.lastUserMessage) {
|
|
1022
|
-
console.log(chalk.gray(` Last: "${resumeCandidate.lastUserMessage}"`));
|
|
1042
|
+
console.log(chalk.gray(` ⢠Last: "${resumeCandidate.lastUserMessage}"`));
|
|
1023
1043
|
}
|
|
1024
1044
|
|
|
1025
|
-
console.log(chalk.gray(' š” Type /resume to continue or start fresh'));
|
|
1045
|
+
console.log(chalk.gray(' š” Type ') + chalk.cyan('/resume') + chalk.gray(' to continue or start fresh'));
|
|
1026
1046
|
console.log('');
|
|
1027
1047
|
} else {
|
|
1028
1048
|
// Get recent sessions if no auto-resume candidate
|
|
1029
1049
|
const recentSessions = this.projectManager.listSessions({ limit: 3 });
|
|
1030
1050
|
|
|
1031
1051
|
if (recentSessions.length > 0) {
|
|
1032
|
-
console.log(chalk.
|
|
1052
|
+
console.log(chalk.magenta('š ') + chalk.white.bold('Recent Sessions:'));
|
|
1033
1053
|
recentSessions.forEach((session, index) => {
|
|
1034
1054
|
const timeAgo = this.getTimeAgo(new Date(session.modified));
|
|
1035
|
-
console.log(chalk.gray(`
|
|
1055
|
+
console.log(chalk.gray(` ⢠${session.id} - ${timeAgo} (${session.messageCount} messages)`));
|
|
1036
1056
|
});
|
|
1037
|
-
console.log(chalk.gray(' š” Use /resume <id> to continue a session'));
|
|
1057
|
+
console.log(chalk.gray(' š” Use ') + chalk.cyan('/resume <id>') + chalk.gray(' to continue a session'));
|
|
1038
1058
|
console.log('');
|
|
1039
1059
|
}
|
|
1040
1060
|
}
|
|
@@ -2905,7 +2925,7 @@ class InteractiveRecoderChat {
|
|
|
2905
2925
|
// Update legacy reference
|
|
2906
2926
|
this.conversationHistory = currentConv.history;
|
|
2907
2927
|
|
|
2908
|
-
console.log(chalk.
|
|
2928
|
+
console.log(chalk.magenta('\nš¤ ') + chalk.white.bold('Recoder: '), { end: '' });
|
|
2909
2929
|
|
|
2910
2930
|
try {
|
|
2911
2931
|
// Start API call timer
|
|
@@ -2937,7 +2957,7 @@ class InteractiveRecoderChat {
|
|
|
2937
2957
|
if (response.usage) {
|
|
2938
2958
|
currentConv.tokens += response.usage.total_tokens || 0;
|
|
2939
2959
|
this.totalTokens += response.usage.total_tokens || 0;
|
|
2940
|
-
console.log(chalk.gray(`\n
|
|
2960
|
+
console.log(chalk.gray(`\nš ${response.usage.prompt_tokens} + ${response.usage.completion_tokens} = `) + chalk.magenta(`${response.usage.total_tokens} tokens`));
|
|
2941
2961
|
|
|
2942
2962
|
// Log API call metrics
|
|
2943
2963
|
const apiDuration = this.logger.endTimer('api_call');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "recoder-code",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Complete AI-powered development platform with ML model training, plugin registry, real-time collaboration, monitoring, infrastructure automation, and enterprise deployment capabilities",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|