@xagent-ai/cli 1.2.0 → 1.2.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.
Files changed (80) hide show
  1. package/README.md +1 -1
  2. package/README_CN.md +1 -1
  3. package/dist/agents.js +164 -164
  4. package/dist/agents.js.map +1 -1
  5. package/dist/ai-client.d.ts +4 -6
  6. package/dist/ai-client.d.ts.map +1 -1
  7. package/dist/ai-client.js +137 -115
  8. package/dist/ai-client.js.map +1 -1
  9. package/dist/auth.js +4 -4
  10. package/dist/auth.js.map +1 -1
  11. package/dist/cli.js +184 -1
  12. package/dist/cli.js.map +1 -1
  13. package/dist/config.js +3 -3
  14. package/dist/config.js.map +1 -1
  15. package/dist/context-compressor.d.ts.map +1 -1
  16. package/dist/context-compressor.js +65 -81
  17. package/dist/context-compressor.js.map +1 -1
  18. package/dist/conversation.d.ts +1 -1
  19. package/dist/conversation.d.ts.map +1 -1
  20. package/dist/conversation.js +5 -31
  21. package/dist/conversation.js.map +1 -1
  22. package/dist/memory.d.ts +5 -1
  23. package/dist/memory.d.ts.map +1 -1
  24. package/dist/memory.js +77 -37
  25. package/dist/memory.js.map +1 -1
  26. package/dist/remote-ai-client.d.ts +1 -8
  27. package/dist/remote-ai-client.d.ts.map +1 -1
  28. package/dist/remote-ai-client.js +55 -65
  29. package/dist/remote-ai-client.js.map +1 -1
  30. package/dist/retry.d.ts +35 -0
  31. package/dist/retry.d.ts.map +1 -0
  32. package/dist/retry.js +166 -0
  33. package/dist/retry.js.map +1 -0
  34. package/dist/session.d.ts +0 -5
  35. package/dist/session.d.ts.map +1 -1
  36. package/dist/session.js +243 -312
  37. package/dist/session.js.map +1 -1
  38. package/dist/slash-commands.d.ts +1 -0
  39. package/dist/slash-commands.d.ts.map +1 -1
  40. package/dist/slash-commands.js +91 -9
  41. package/dist/slash-commands.js.map +1 -1
  42. package/dist/smart-approval.d.ts.map +1 -1
  43. package/dist/smart-approval.js +18 -17
  44. package/dist/smart-approval.js.map +1 -1
  45. package/dist/system-prompt-generator.d.ts.map +1 -1
  46. package/dist/system-prompt-generator.js +149 -139
  47. package/dist/system-prompt-generator.js.map +1 -1
  48. package/dist/theme.d.ts +48 -0
  49. package/dist/theme.d.ts.map +1 -1
  50. package/dist/theme.js +254 -0
  51. package/dist/theme.js.map +1 -1
  52. package/dist/tools/edit-diff.d.ts +32 -0
  53. package/dist/tools/edit-diff.d.ts.map +1 -0
  54. package/dist/tools/edit-diff.js +185 -0
  55. package/dist/tools/edit-diff.js.map +1 -0
  56. package/dist/tools/edit.d.ts +11 -0
  57. package/dist/tools/edit.d.ts.map +1 -0
  58. package/dist/tools/edit.js +129 -0
  59. package/dist/tools/edit.js.map +1 -0
  60. package/dist/tools.d.ts +19 -5
  61. package/dist/tools.d.ts.map +1 -1
  62. package/dist/tools.js +979 -631
  63. package/dist/tools.js.map +1 -1
  64. package/dist/types.d.ts +6 -31
  65. package/dist/types.d.ts.map +1 -1
  66. package/package.json +3 -2
  67. package/src/agents.ts +504 -504
  68. package/src/ai-client.ts +1559 -1458
  69. package/src/auth.ts +4 -4
  70. package/src/cli.ts +195 -1
  71. package/src/config.ts +3 -3
  72. package/src/memory.ts +55 -14
  73. package/src/remote-ai-client.ts +663 -683
  74. package/src/retry.ts +217 -0
  75. package/src/session.ts +1736 -1840
  76. package/src/slash-commands.ts +98 -9
  77. package/src/smart-approval.ts +626 -625
  78. package/src/system-prompt-generator.ts +853 -843
  79. package/src/theme.ts +284 -0
  80. package/src/tools.ts +390 -70
@@ -1,6 +1,8 @@
1
1
  import inquirer from 'inquirer';
2
2
  import chalk from 'chalk';
3
3
  import ora from 'ora';
4
+ import fs from 'fs/promises';
5
+ import path from 'path';
4
6
  import { ExecutionMode, ChatMessage, InputType, ToolCall, Checkpoint, AgentConfig, CompressionConfig, AuthType } from './types.js';
5
7
  import { AIClient, Message, detectThinkingKeywords, getThinkingTokens } from './ai-client.js';
6
8
  import { getToolRegistry } from './tools.js';
@@ -185,10 +187,10 @@ export class SlashCommandHandler {
185
187
  example: '/init'
186
188
  },
187
189
  {
188
- cmd: '/memory [show|add|refresh]',
190
+ cmd: '/memory [show|clear]',
189
191
  desc: 'Manage project memory',
190
- detail: 'View, add or refresh project memory information',
191
- example: '/memory show\n/memory add "Project uses TypeScript"'
192
+ detail: 'View or clear memory (global, current, all, or filename)',
193
+ example: '/memory show\n/memory clear\n/memory clear global\n/memory clear all'
192
194
  }
193
195
  ]);
194
196
 
@@ -940,21 +942,102 @@ export class SlashCommandHandler {
940
942
  private async handleMemory(args: string[]): Promise<void> {
941
943
  const action = args[0] || 'show';
942
944
 
945
+ // Load memory files before showing
946
+ try {
947
+ await this.memoryManager.loadMemory();
948
+ } catch (error) {
949
+ logger.error('Failed to load memory files', error instanceof Error ? error.message : String(error));
950
+ return;
951
+ }
952
+
943
953
  switch (action) {
944
954
  case 'show':
945
955
  await this.showMemory();
946
956
  break;
947
- case 'add':
948
- logger.warn('Memory addition not implemented yet', 'Use /memory add in interactive mode');
949
- break;
950
- case 'refresh':
951
- logger.warn('Memory refresh not implemented yet', 'Check back later for updates');
957
+ case 'clear':
958
+ await this.clearMemory(args[1]);
952
959
  break;
953
960
  default:
954
961
  logger.warn(`Unknown memory action: ${action}`, 'Use /memory show to see available actions');
955
962
  }
956
963
  }
957
964
 
965
+ private async clearMemory(target?: string): Promise<void> {
966
+ const memoryFiles = this.memoryManager.getMemoryFiles();
967
+
968
+ // Handle different clear targets
969
+ if (!target || target === '.' || target === 'current') {
970
+ // Clear current project's memory
971
+ const currentProjectMemory = memoryFiles.find((m: MemoryFile) => m.level === 'project');
972
+ if (currentProjectMemory) {
973
+ await fs.unlink(currentProjectMemory.path);
974
+ logger.success('Project memory cleared');
975
+ logger.info('Use /init to initialize if needed');
976
+ } else {
977
+ logger.warn('No project memory found for current directory');
978
+ }
979
+ return;
980
+ }
981
+
982
+ if (target === 'all') {
983
+ // Clear all memories including global
984
+ let cleared = 0;
985
+ for (const file of memoryFiles) {
986
+ await fs.unlink(file.path);
987
+ cleared++;
988
+ }
989
+ logger.success(`Cleared ${cleared} memory file(s)`);
990
+
991
+ // Recreate global memory
992
+ await this.memoryManager.saveMemory('# Global Context\n\nGlobal preferences and settings will be added here.', 'global');
993
+ logger.info('Recreated global memory');
994
+ logger.info('Use /init to initialize project memory if needed');
995
+ return;
996
+ }
997
+
998
+ if (target === 'global') {
999
+ // Clear global memory
1000
+ const globalMemory = memoryFiles.find((m: MemoryFile) => m.level === 'global');
1001
+ if (globalMemory) {
1002
+ await fs.unlink(globalMemory.path);
1003
+ logger.success('Global memory cleared');
1004
+
1005
+ // Recreate global memory
1006
+ await this.memoryManager.saveMemory('# Global Context\n\nGlobal preferences and settings will be added here.', 'global');
1007
+ logger.info('Recreated with default content');
1008
+ } else {
1009
+ logger.warn('No global memory found');
1010
+ }
1011
+ return;
1012
+ }
1013
+
1014
+ // Clear specific file by filename or path
1015
+ const targetMemory = memoryFiles.find((m: MemoryFile) =>
1016
+ path.basename(m.path) === target ||
1017
+ m.path === target
1018
+ );
1019
+
1020
+ if (targetMemory) {
1021
+ try {
1022
+ await fs.unlink(targetMemory.path);
1023
+ const levelLabel = targetMemory.level === 'global' ? 'Global' : 'Project';
1024
+ logger.success(`${levelLabel} memory cleared: ${path.basename(targetMemory.path)}`);
1025
+
1026
+ // Recreate global memory, not project memory
1027
+ if (targetMemory.level === 'global') {
1028
+ await this.memoryManager.saveMemory('# Global Context\n\nGlobal preferences and settings will be added here.', 'global');
1029
+ logger.info('Recreated with default content');
1030
+ } else {
1031
+ logger.info('Use /init to initialize if needed');
1032
+ }
1033
+ } catch (error) {
1034
+ logger.error('Failed to clear memory', error instanceof Error ? error.message : String(error));
1035
+ }
1036
+ } else {
1037
+ logger.warn(`Memory file not found: ${target}`, 'Use /memory show to see available files');
1038
+ }
1039
+ }
1040
+
958
1041
  private async showMemory(): Promise<void> {
959
1042
  const memoryFiles = this.memoryManager.getMemoryFiles();
960
1043
 
@@ -963,14 +1046,20 @@ export class SlashCommandHandler {
963
1046
  return;
964
1047
  }
965
1048
 
1049
+ const memoriesDir = this.memoryManager.getMemoriesDir();
966
1050
  logger.section('Memory Files');
1051
+ logger.info(`Directory: ${memoriesDir}`);
1052
+ console.log('');
967
1053
 
968
1054
  memoryFiles.forEach((file: MemoryFile) => {
969
1055
  const level = file.level === 'global' ? chalk.blue('[global]') :
970
1056
  file.level === 'project' ? chalk.green('[project]') :
971
1057
  chalk.yellow('[subdirectory]');
972
- logger.info(` ${level} ${file.path}`);
1058
+ logger.info(` ${level} ${path.basename(file.path)}`);
973
1059
  });
1060
+
1061
+ console.log('');
1062
+ // logger.info('Usage: /memory clear [global|current|all|<filename>]');
974
1063
  }
975
1064
 
976
1065
  private async addMemory(): Promise<void> {