@llmtune/cli 0.1.9 → 0.2.1

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 (173) hide show
  1. package/README.md +206 -181
  2. package/dist/agent/conversation.d.ts.map +1 -0
  3. package/dist/agent/conversation.js.map +1 -0
  4. package/dist/agent/loop.d.ts.map +1 -0
  5. package/dist/agent/loop.js +27 -10
  6. package/dist/agent/loop.js.map +1 -0
  7. package/dist/agent/planner.d.ts.map +1 -0
  8. package/dist/agent/planner.js.map +1 -0
  9. package/dist/auth/client.d.ts.map +1 -0
  10. package/dist/auth/client.js.map +1 -0
  11. package/dist/auth/config.d.ts.map +1 -0
  12. package/dist/auth/config.js.map +1 -0
  13. package/dist/commands/balance.d.ts.map +1 -0
  14. package/dist/commands/balance.js.map +1 -0
  15. package/dist/commands/chat.d.ts.map +1 -0
  16. package/dist/commands/chat.js.map +1 -0
  17. package/dist/commands/config.d.ts.map +1 -0
  18. package/dist/commands/config.js.map +1 -0
  19. package/dist/commands/doctor.d.ts.map +1 -0
  20. package/dist/commands/doctor.js.map +1 -0
  21. package/dist/commands/login.d.ts.map +1 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/marketplace.d.ts.map +1 -0
  24. package/dist/commands/marketplace.js.map +1 -0
  25. package/dist/commands/models.d.ts.map +1 -0
  26. package/dist/commands/models.js.map +1 -0
  27. package/dist/commands/update.d.ts.map +1 -0
  28. package/dist/commands/update.js +14 -3
  29. package/dist/commands/update.js.map +1 -0
  30. package/dist/compact/auto-compact.d.ts.map +1 -0
  31. package/dist/compact/auto-compact.js.map +1 -0
  32. package/dist/compact/budget.d.ts.map +1 -0
  33. package/dist/compact/budget.js +18 -0
  34. package/dist/compact/budget.js.map +1 -0
  35. package/dist/compact/history-store.d.ts.map +1 -0
  36. package/dist/compact/history-store.js.map +1 -0
  37. package/dist/compact/microcompact.d.ts.map +1 -0
  38. package/dist/compact/microcompact.js.map +1 -0
  39. package/dist/compact/service.d.ts.map +1 -0
  40. package/dist/compact/service.js.map +1 -0
  41. package/dist/context/agent-identity.d.ts.map +1 -0
  42. package/dist/context/agent-identity.js +19 -0
  43. package/dist/context/agent-identity.js.map +1 -0
  44. package/dist/context/analyzer.d.ts.map +1 -0
  45. package/dist/context/analyzer.js.map +1 -0
  46. package/dist/context/builder.d.ts.map +1 -0
  47. package/dist/context/builder.js +7 -0
  48. package/dist/context/builder.js.map +1 -0
  49. package/dist/context/cache.d.ts.map +1 -0
  50. package/dist/context/cache.js.map +1 -0
  51. package/dist/context/git-context.d.ts.map +1 -0
  52. package/dist/context/git-context.js.map +1 -0
  53. package/dist/context/llmtune-md.d.ts.map +1 -0
  54. package/dist/context/llmtune-md.js.map +1 -0
  55. package/dist/context/project-detect.d.ts +26 -0
  56. package/dist/context/project-detect.d.ts.map +1 -0
  57. package/dist/context/project-detect.js +213 -0
  58. package/dist/context/project-detect.js.map +1 -0
  59. package/dist/context/workspace.d.ts.map +1 -0
  60. package/dist/context/workspace.js.map +1 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/marketplace/client.d.ts.map +1 -0
  64. package/dist/marketplace/client.js.map +1 -0
  65. package/dist/memory/files.d.ts.map +1 -0
  66. package/dist/memory/files.js.map +1 -0
  67. package/dist/memory/service.d.ts +2 -1
  68. package/dist/memory/service.d.ts.map +1 -0
  69. package/dist/memory/service.js +1 -0
  70. package/dist/memory/service.js.map +1 -0
  71. package/dist/repl/auto-save.d.ts +14 -0
  72. package/dist/repl/auto-save.d.ts.map +1 -0
  73. package/dist/repl/auto-save.js +101 -0
  74. package/dist/repl/auto-save.js.map +1 -0
  75. package/dist/repl/repl.d.ts.map +1 -0
  76. package/dist/repl/repl.js +264 -22
  77. package/dist/repl/repl.js.map +1 -0
  78. package/dist/skills/args.d.ts.map +1 -0
  79. package/dist/skills/args.js.map +1 -0
  80. package/dist/skills/frontmatter.d.ts.map +1 -0
  81. package/dist/skills/frontmatter.js.map +1 -0
  82. package/dist/skills/loader.d.ts.map +1 -0
  83. package/dist/skills/loader.js.map +1 -0
  84. package/dist/skills/registry.d.ts.map +1 -0
  85. package/dist/skills/registry.js.map +1 -0
  86. package/dist/skills/signing/signer.d.ts.map +1 -0
  87. package/dist/skills/signing/signer.js.map +1 -0
  88. package/dist/skills/trust.d.ts.map +1 -0
  89. package/dist/skills/trust.js.map +1 -0
  90. package/dist/telemetry/logger.d.ts.map +1 -0
  91. package/dist/telemetry/logger.js.map +1 -0
  92. package/dist/tools/permissions.d.ts.map +1 -0
  93. package/dist/tools/permissions.js +15 -9
  94. package/dist/tools/permissions.js.map +1 -0
  95. package/dist/tools/protocol.d.ts.map +1 -0
  96. package/dist/tools/protocol.js.map +1 -0
  97. package/dist/tools/registry.d.ts.map +1 -0
  98. package/dist/tools/registry.js.map +1 -0
  99. package/dist/tools/sandbox/docker.d.ts.map +1 -0
  100. package/dist/tools/sandbox/docker.js.map +1 -0
  101. package/dist/tools/sandbox/index.d.ts.map +1 -0
  102. package/dist/tools/sandbox/index.js.map +1 -0
  103. package/dist/tools/sanitize.d.ts.map +1 -0
  104. package/dist/tools/sanitize.js.map +1 -0
  105. package/dist/tools/tools/ask-user.d.ts.map +1 -0
  106. package/dist/tools/tools/ask-user.js.map +1 -0
  107. package/dist/tools/tools/bash.d.ts.map +1 -0
  108. package/dist/tools/tools/bash.js +52 -1
  109. package/dist/tools/tools/bash.js.map +1 -0
  110. package/dist/tools/tools/edit.d.ts.map +1 -0
  111. package/dist/tools/tools/edit.js +1 -0
  112. package/dist/tools/tools/edit.js.map +1 -0
  113. package/dist/tools/tools/glob.d.ts.map +1 -0
  114. package/dist/tools/tools/glob.js.map +1 -0
  115. package/dist/tools/tools/grep.d.ts.map +1 -0
  116. package/dist/tools/tools/grep.js +6 -8
  117. package/dist/tools/tools/grep.js.map +1 -0
  118. package/dist/tools/tools/read.d.ts.map +1 -0
  119. package/dist/tools/tools/read.js.map +1 -0
  120. package/dist/tools/tools/web-fetch.d.ts.map +1 -0
  121. package/dist/tools/tools/web-fetch.js.map +1 -0
  122. package/dist/tools/tools/write.d.ts.map +1 -0
  123. package/dist/tools/tools/write.js.map +1 -0
  124. package/dist/tools/validation.d.ts.map +1 -0
  125. package/dist/tools/validation.js.map +1 -0
  126. package/dist/ui/banner.d.ts.map +1 -0
  127. package/dist/ui/banner.js +9 -8
  128. package/dist/ui/banner.js.map +1 -0
  129. package/dist/utils/diff.d.ts +38 -0
  130. package/dist/utils/diff.d.ts.map +1 -0
  131. package/dist/utils/diff.js +184 -0
  132. package/dist/utils/diff.js.map +1 -0
  133. package/dist/utils/errors.d.ts +32 -0
  134. package/dist/utils/errors.d.ts.map +1 -0
  135. package/dist/utils/errors.js +72 -0
  136. package/dist/utils/errors.js.map +1 -0
  137. package/dist/utils/ignore.d.ts +22 -0
  138. package/dist/utils/ignore.d.ts.map +1 -0
  139. package/dist/utils/ignore.js +205 -0
  140. package/dist/utils/ignore.js.map +1 -0
  141. package/dist/utils/input-history.d.ts +37 -0
  142. package/dist/utils/input-history.d.ts.map +1 -0
  143. package/dist/utils/input-history.js +142 -0
  144. package/dist/utils/input-history.js.map +1 -0
  145. package/dist/utils/markdown.d.ts.map +1 -0
  146. package/dist/utils/markdown.js.map +1 -0
  147. package/dist/utils/rate-limit.d.ts +36 -0
  148. package/dist/utils/rate-limit.d.ts.map +1 -0
  149. package/dist/utils/rate-limit.js +71 -0
  150. package/dist/utils/rate-limit.js.map +1 -0
  151. package/dist/utils/retry.d.ts +26 -0
  152. package/dist/utils/retry.d.ts.map +1 -0
  153. package/dist/utils/retry.js +96 -0
  154. package/dist/utils/retry.js.map +1 -0
  155. package/dist/utils/spinner.d.ts +12 -0
  156. package/dist/utils/spinner.d.ts.map +1 -0
  157. package/dist/utils/spinner.js +51 -0
  158. package/dist/utils/spinner.js.map +1 -0
  159. package/dist/utils/stats.d.ts +29 -0
  160. package/dist/utils/stats.d.ts.map +1 -0
  161. package/dist/utils/stats.js +95 -0
  162. package/dist/utils/stats.js.map +1 -0
  163. package/dist/utils/streaming.d.ts.map +1 -0
  164. package/dist/utils/streaming.js.map +1 -0
  165. package/dist/utils/tokens.d.ts.map +1 -0
  166. package/dist/utils/tokens.js.map +1 -0
  167. package/dist/utils/undo-tracker.d.ts +37 -0
  168. package/dist/utils/undo-tracker.d.ts.map +1 -0
  169. package/dist/utils/undo-tracker.js +118 -0
  170. package/dist/utils/undo-tracker.js.map +1 -0
  171. package/dist/version.d.ts.map +1 -0
  172. package/dist/version.js.map +1 -0
  173. package/package.json +61 -45
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/marketplace/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAA;IACzD,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAkBD;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,YAAY,CAAC,CA6BvB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWhG;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBnF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GACxG,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAepD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/marketplace/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/memory/files.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,eAAO,MAAM,iBAAiB,EAAE,cAAc,EAK7C,CAAA;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAWtC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAS9C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAM9D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAG5D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOtD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAa1C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/memory/files.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,13 @@ declare const MEMORY_FILES: {
5
5
  readonly architecture: "architecture.md";
6
6
  readonly "active-task": "active-task.md";
7
7
  };
8
- type MemoryCategory = keyof typeof MEMORY_FILES;
8
+ export type MemoryCategory = keyof typeof MEMORY_FILES;
9
9
  export interface MemoryEntry {
10
10
  category: MemoryCategory;
11
11
  content: string;
12
12
  path: string;
13
13
  }
14
+ export declare function getMemoryPath(category: MemoryCategory): string;
14
15
  export declare function readMemory(category: MemoryCategory): string;
15
16
  export declare function writeMemory(category: MemoryCategory, content: string): void;
16
17
  export declare function appendMemory(category: MemoryCategory, line: string): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/memory/service.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,YAAY;;;;;;CAMR,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAA;AAEtD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,cAAc,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAQD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAE9D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAO3D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3E;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAKzE;AAED,wBAAgB,aAAa,IAAI,WAAW,EAAE,CAc7C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAU1C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIjD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAiB3D;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAqBtC"}
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getMemoryPath = getMemoryPath;
36
37
  exports.readMemory = readMemory;
37
38
  exports.writeMemory = writeMemory;
38
39
  exports.appendMemory = appendMemory;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/memory/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Session auto-save — periodically saves conversation state so the user
3
+ * doesn't lose their session if the process crashes or is killed.
4
+ */
5
+ import { Conversation } from "../agent/conversation";
6
+ export declare class SessionAutoSave {
7
+ private timer;
8
+ private conversation;
9
+ private lastSaveHash;
10
+ start(conversation: Conversation): void;
11
+ stop(): void;
12
+ private save;
13
+ }
14
+ //# sourceMappingURL=auto-save.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-save.d.ts","sourceRoot":"","sources":["../../src/repl/auto-save.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAKpD,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,YAAY,CAAa;IAEjC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAiBvC,IAAI,IAAI,IAAI;IASZ,OAAO,CAAC,IAAI;CA8Bb"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ /**
3
+ * Session auto-save — periodically saves conversation state so the user
4
+ * doesn't lose their session if the process crashes or is killed.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.SessionAutoSave = void 0;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const os = __importStar(require("os"));
44
+ const AUTO_SAVE_DIR = path.join(os.homedir(), ".llmtune", "sessions");
45
+ const AUTO_SAVE_INTERVAL_MS = 30_000; // Save every 30 seconds
46
+ class SessionAutoSave {
47
+ timer = null;
48
+ conversation = null;
49
+ lastSaveHash = "";
50
+ start(conversation) {
51
+ this.conversation = conversation;
52
+ // Ensure directory exists
53
+ if (!fs.existsSync(AUTO_SAVE_DIR)) {
54
+ fs.mkdirSync(AUTO_SAVE_DIR, { recursive: true });
55
+ }
56
+ // Auto-save periodically
57
+ this.timer = setInterval(() => {
58
+ this.save();
59
+ }, AUTO_SAVE_INTERVAL_MS);
60
+ // Also save on process exit
61
+ process.on("beforeExit", () => this.save());
62
+ }
63
+ stop() {
64
+ if (this.timer) {
65
+ clearInterval(this.timer);
66
+ this.timer = null;
67
+ }
68
+ // Final save
69
+ this.save();
70
+ }
71
+ save() {
72
+ if (!this.conversation)
73
+ return;
74
+ try {
75
+ const messages = this.conversation.getApiMessages();
76
+ const hash = JSON.stringify(messages).length.toString();
77
+ // Skip save if nothing changed
78
+ if (hash === this.lastSaveHash)
79
+ return;
80
+ this.lastSaveHash = hash;
81
+ const sessionId = `autosave-${new Date().toISOString().slice(0, 10)}`;
82
+ const filePath = path.join(AUTO_SAVE_DIR, `${sessionId}.json`);
83
+ const data = {
84
+ meta: {
85
+ sessionId,
86
+ createdAt: new Date().toISOString(),
87
+ updatedAt: new Date().toISOString(),
88
+ messageCount: messages.length,
89
+ autosave: true,
90
+ },
91
+ messages,
92
+ };
93
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2), "utf-8");
94
+ }
95
+ catch {
96
+ // Silent fail — auto-save is non-critical
97
+ }
98
+ }
99
+ }
100
+ exports.SessionAutoSave = SessionAutoSave;
101
+ //# sourceMappingURL=auto-save.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-save.js","sourceRoot":"","sources":["../../src/repl/auto-save.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAwB;AACxB,2CAA4B;AAC5B,uCAAwB;AAGxB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;AACrE,MAAM,qBAAqB,GAAG,MAAM,CAAA,CAAC,wBAAwB;AAE7D,MAAa,eAAe;IAClB,KAAK,GAA0C,IAAI,CAAA;IACnD,YAAY,GAAwB,IAAI,CAAA;IACxC,YAAY,GAAW,EAAE,CAAA;IAEjC,KAAK,CAAC,YAA0B;QAC9B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAEhC,0BAA0B;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAClC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,EAAE,CAAA;QACb,CAAC,EAAE,qBAAqB,CAAC,CAAA;QAEzB,4BAA4B;QAC5B,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACnB,CAAC;QACD,aAAa;QACb,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAM;QAE9B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAA;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YAEvD,+BAA+B;YAC/B,IAAI,IAAI,KAAK,IAAI,CAAC,YAAY;gBAAE,OAAM;YACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YAExB,MAAM,SAAS,GAAG,YAAY,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;YACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,SAAS,OAAO,CAAC,CAAA;YAE9D,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE;oBACJ,SAAS;oBACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,YAAY,EAAE,QAAQ,CAAC,MAAM;oBAC7B,QAAQ,EAAE,IAAI;iBACf;gBACD,QAAQ;aACT,CAAA;YAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;CACF;AA7DD,0CA6DC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/repl/repl.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAsC3B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAkCD,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0OnE"}
package/dist/repl/repl.js CHANGED
@@ -60,33 +60,61 @@ const trust_1 = require("../skills/trust");
60
60
  const service_2 = require("../memory/service");
61
61
  const logger_1 = require("../telemetry/logger");
62
62
  const config_1 = require("../auth/config");
63
+ const input_history_1 = require("../utils/input-history");
64
+ const undo_tracker_1 = require("../utils/undo-tracker");
65
+ const project_detect_1 = require("../context/project-detect");
66
+ const auto_save_1 = require("./auto-save");
63
67
  const fs = __importStar(require("fs"));
64
68
  const path = __importStar(require("path"));
65
- const HELP_TEXT = `
66
- ${chalk_1.default.bold("LLMTune CLI - Commands:")}
67
-
68
- ${chalk_1.default.cyan("/help")} Show this help
69
- ${chalk_1.default.cyan("/clear")} Clear conversation history
70
- ${chalk_1.default.cyan("/context")} Show detailed context usage breakdown
71
- ${chalk_1.default.cyan("/compact")} Compact conversation (LLM summary)
72
- ${chalk_1.default.cyan("/uncompact")} Restore conversation from before compaction
73
- ${chalk_1.default.cyan("/model <name>")} Switch model
74
- ${chalk_1.default.cyan("/stream")} Toggle streaming mode
75
- ${chalk_1.default.cyan("/verbose")} Toggle verbose tool output
76
- ${chalk_1.default.cyan("/trust <tool>")} Trust a tool (skip confirmations)
77
- ${chalk_1.default.cyan("/skills")} List available skills
78
- ${chalk_1.default.cyan("/memory")} Show memory contents
79
- ${chalk_1.default.cyan("/balance")} Show account balance
80
- ${chalk_1.default.cyan("/save")} Save conversation to file
81
- ${chalk_1.default.cyan("/exit")} Exit REPL
82
-
83
- ${chalk_1.default.gray("Type your message and press Enter to chat.")}
84
- ${chalk_1.default.gray("Multi-line: end a line with '\\' to continue.")}
69
+ const BUILTIN_SLASH_COMMANDS = new Set([
70
+ "/help", "/exit", "/quit", "/clear", "/context", "/compact",
71
+ "/uncompact", "/model", "/stream", "/verbose", "/trust",
72
+ "/skills", "/memory", "/save", "/balance",
73
+ "/undo", "/history", "/cost", "/retry", "/edit-memory", "/project",
74
+ "/stats", "/diff", "/sessions",
75
+ ]);
76
+ const HELP_TEXT = `
77
+ ${chalk_1.default.bold("LLMTune CLI - Commands:")}
78
+
79
+ ${chalk_1.default.cyan("/help")} Show this help
80
+ ${chalk_1.default.cyan("/clear")} Clear conversation history
81
+ ${chalk_1.default.cyan("/context")} Show detailed context usage breakdown
82
+ ${chalk_1.default.cyan("/compact")} Compact conversation (LLM summary)
83
+ ${chalk_1.default.cyan("/uncompact")} Restore conversation from before compaction
84
+ ${chalk_1.default.cyan("/model <name>")} Switch model
85
+ ${chalk_1.default.cyan("/stream")} Toggle streaming mode
86
+ ${chalk_1.default.cyan("/verbose")} Toggle verbose tool output
87
+ ${chalk_1.default.cyan("/trust <tool>")} Trust a tool (skip confirmations)
88
+ ${chalk_1.default.cyan("/skills")} List available skills
89
+ ${chalk_1.default.cyan("/memory")} Show memory contents
90
+ ${chalk_1.default.cyan("/balance")} Show account balance
91
+ ${chalk_1.default.cyan("/save")} Save conversation to file
92
+ ${chalk_1.default.cyan("/undo")} Undo last file change
93
+ ${chalk_1.default.cyan("/retry")} Retry the last message
94
+ ${chalk_1.default.cyan("/history")} Show recent input history
95
+ ${chalk_1.default.cyan("/cost")} Show session cost breakdown
96
+ ${chalk_1.default.cyan("/stats")} Show detailed session statistics
97
+ ${chalk_1.default.cyan("/sessions")} List saved conversation sessions
98
+ ${chalk_1.default.cyan("/diff")} Show diff of last file change
99
+ ${chalk_1.default.cyan("/edit-memory")} Edit a memory category
100
+ ${chalk_1.default.cyan("/project")} Show detected project info
101
+ ${chalk_1.default.cyan("/exit")} Exit REPL
102
+
103
+ ${chalk_1.default.gray("Type your message and press Enter to chat.")}
104
+ ${chalk_1.default.gray("Multi-line: end a line with '\\' to continue.")}
105
+ ${chalk_1.default.gray("UP/DOWN arrows: navigate input history.")}
85
106
  `.trim();
86
107
  async function startRepl(options) {
87
108
  const registry = new registry_1.ToolRegistry();
88
109
  const cwd = process.cwd();
89
110
  const permissions = new permissions_1.PermissionManager();
111
+ const inputHistory = new input_history_1.InputHistory();
112
+ const undoTracker = new undo_tracker_1.UndoTracker();
113
+ const autoSave = new auto_save_1.SessionAutoSave();
114
+ let lastUserInput = "";
115
+ let sessionTotalCost = 0;
116
+ let sessionTotalTokensIn = 0;
117
+ let sessionTotalTokensOut = 0;
90
118
  registry.register(read_1.readTool);
91
119
  registry.register(write_1.writeTool);
92
120
  registry.register(edit_1.editTool);
@@ -96,6 +124,8 @@ async function startRepl(options) {
96
124
  registry.register(web_fetch_1.webFetchTool);
97
125
  registry.register(ask_user_1.askUserTool);
98
126
  const conversation = new conversation_1.Conversation(options.model);
127
+ // Start session auto-save
128
+ autoSave.start(conversation);
99
129
  // Load skills
100
130
  const skills = (0, loader_1.loadAllSkills)(cwd);
101
131
  const skillList = skills.listUserInvocable();
@@ -115,11 +145,18 @@ async function startRepl(options) {
115
145
  if (skillList.length > 0) {
116
146
  console.log(chalk_1.default.dim(` Skills: ${skillList.map((s) => s.name).join(", ")}`));
117
147
  }
148
+ // Show detected project info
149
+ const projectInfo = (0, project_detect_1.detectProjectType)(cwd);
150
+ const projectSummary = (0, project_detect_1.formatProjectInfo)(projectInfo);
151
+ if (projectSummary) {
152
+ console.log(chalk_1.default.dim(` Project: ${projectSummary}`));
153
+ }
118
154
  console.log("");
119
155
  const rl = (0, readline_1.createInterface)({
120
156
  input: process.stdin,
121
157
  output: process.stdout,
122
158
  prompt: chalk_1.default.blue("> "),
159
+ historySize: 100,
123
160
  });
124
161
  rl.prompt();
125
162
  let multiLineBuffer = "";
@@ -136,8 +173,10 @@ async function startRepl(options) {
136
173
  rl.prompt();
137
174
  return;
138
175
  }
176
+ // Save to input history (for UP arrow recall)
177
+ inputHistory.add(fullInput);
139
178
  // Check for skill execution: /skill-name [args]
140
- if (fullInput.startsWith("/") && !fullInput.startsWith("/help") && !fullInput.startsWith("/exit") && !fullInput.startsWith("/quit") && !fullInput.startsWith("/clear") && !fullInput.startsWith("/context") && !fullInput.startsWith("/compact") && !fullInput.startsWith("/uncompact") && !fullInput.startsWith("/model") && !fullInput.startsWith("/stream") && !fullInput.startsWith("/verbose") && !fullInput.startsWith("/trust") && !fullInput.startsWith("/skills") && !fullInput.startsWith("/memory") && !fullInput.startsWith("/save") && !fullInput.startsWith("/balance")) {
179
+ if (fullInput.startsWith("/") && !BUILTIN_SLASH_COMMANDS.has(fullInput.split(/\s+/)[0])) {
141
180
  const parts = fullInput.slice(1).split(/\s+/);
142
181
  const skillName = parts[0];
143
182
  const skillArgs = parts.slice(1);
@@ -165,6 +204,7 @@ async function startRepl(options) {
165
204
  skipUserInput: false,
166
205
  });
167
206
  (0, logger_1.logEvent)({ event: "tool_call", tool: skillName, latency_ms: 0 });
207
+ trackSessionUsage(result);
168
208
  }
169
209
  catch (err) {
170
210
  const msg = err instanceof Error ? err.message : String(err);
@@ -196,11 +236,24 @@ async function startRepl(options) {
196
236
  setVerbose: (v) => {
197
237
  verbose = v;
198
238
  },
239
+ inputHistory,
240
+ undoTracker,
241
+ getSessionStats: () => ({
242
+ totalCost: sessionTotalCost,
243
+ totalTokensIn: sessionTotalTokensIn,
244
+ totalTokensOut: sessionTotalTokensOut,
245
+ }),
246
+ getLastInput: () => lastUserInput,
247
+ setLastInput: (input) => {
248
+ lastUserInput = input;
249
+ },
250
+ projectInfo,
199
251
  });
200
252
  rl.prompt();
201
253
  return;
202
254
  }
203
255
  // Normal chat
256
+ lastUserInput = fullInput;
204
257
  try {
205
258
  const startTime = Date.now();
206
259
  const result = await (0, loop_1.runAgentLoop)(options.client, conversation, registry, fullInput, {
@@ -212,6 +265,7 @@ async function startRepl(options) {
212
265
  workspaceRoot: cwd,
213
266
  permissions,
214
267
  });
268
+ trackSessionUsage(result);
215
269
  if (result.totalTokensIn > 0 || result.totalTokensOut > 0) {
216
270
  const cost = estimateCostFromUsage(result.totalTokensIn, result.totalTokensOut);
217
271
  const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
@@ -219,7 +273,7 @@ async function startRepl(options) {
219
273
  console.log(chalk_1.default.dim(` [${elapsed}s | ` +
220
274
  `${result.turns} turn${result.turns !== 1 ? "s" : ""} | ` +
221
275
  `${result.totalToolCalls} tool${result.totalToolCalls !== 1 ? "s" : ""} | ` +
222
- `${result.totalTokensIn + result.totalTokensOut} tok | ` +
276
+ `${(result.totalTokensIn + result.totalTokensOut).toLocaleString()} tok | ` +
223
277
  `${costStr}]`));
224
278
  (0, logger_1.logEvent)({
225
279
  event: "llm_response",
@@ -240,10 +294,17 @@ async function startRepl(options) {
240
294
  rl.prompt();
241
295
  });
242
296
  rl.on("close", () => {
297
+ autoSave.stop();
243
298
  (0, logger_1.endSessionLog)({ totalToolCalls: 0, totalTokens: 0 });
244
299
  console.log(chalk_1.default.dim("\nGoodbye!"));
245
300
  process.exit(0);
246
301
  });
302
+ /** Track cumulative session usage */
303
+ function trackSessionUsage(result) {
304
+ sessionTotalTokensIn += result.totalTokensIn;
305
+ sessionTotalTokensOut += result.totalTokensOut;
306
+ sessionTotalCost += estimateCostFromUsage(result.totalTokensIn, result.totalTokensOut);
307
+ }
247
308
  }
248
309
  async function handleCommand(input, ctx) {
249
310
  const parts = input.split(/\s+/);
@@ -373,6 +434,36 @@ async function handleCommand(input, ctx) {
373
434
  }
374
435
  break;
375
436
  }
437
+ case "/edit-memory": {
438
+ const category = args[0];
439
+ if (!category) {
440
+ console.log(chalk_1.default.dim("Usage: /edit-memory <category>"));
441
+ console.log(chalk_1.default.dim("Categories: preferences, project-notes, decisions, architecture, active-task"));
442
+ break;
443
+ }
444
+ const validCategories = ["preferences", "project-notes", "decisions", "architecture", "active-task"];
445
+ if (!validCategories.includes(category)) {
446
+ console.log(chalk_1.default.yellow(`Invalid category: ${category}`));
447
+ console.log(chalk_1.default.dim(`Valid categories: ${validCategories.join(", ")}`));
448
+ break;
449
+ }
450
+ const { getMemoryPath } = await Promise.resolve().then(() => __importStar(require("../memory/service")));
451
+ const memPath = getMemoryPath(category);
452
+ if (memPath) {
453
+ console.log(chalk_1.default.dim(`Memory file: ${memPath}`));
454
+ console.log(chalk_1.default.dim("Edit it manually or ask the agent to update it."));
455
+ // Show current content
456
+ try {
457
+ const content = fs.readFileSync(memPath, "utf-8");
458
+ console.log("");
459
+ console.log(content);
460
+ }
461
+ catch {
462
+ console.log(chalk_1.default.yellow("Memory file not found."));
463
+ }
464
+ }
465
+ break;
466
+ }
376
467
  case "/balance": {
377
468
  try {
378
469
  const { balanceCommand } = await Promise.resolve().then(() => __importStar(require("../commands/balance")));
@@ -391,6 +482,157 @@ async function handleCommand(input, ctx) {
391
482
  console.log(chalk_1.default.green(`Session saved to: ${savePath}`));
392
483
  break;
393
484
  }
485
+ // === NEW COMMANDS ===
486
+ case "/undo": {
487
+ const snapshot = ctx.undoTracker.peek();
488
+ if (!snapshot) {
489
+ console.log(chalk_1.default.yellow("Nothing to undo."));
490
+ break;
491
+ }
492
+ try {
493
+ const undone = ctx.undoTracker.undo();
494
+ const relativePath = path.relative(ctx.cwd, undone.filePath);
495
+ if (undone.content === null) {
496
+ console.log(chalk_1.default.green(`Undone: deleted ${relativePath} (was created by agent)`));
497
+ }
498
+ else {
499
+ console.log(chalk_1.default.green(`Undone: restored ${relativePath} to previous state`));
500
+ }
501
+ console.log(chalk_1.default.dim(` ${ctx.undoTracker.size} undo(s) remaining`));
502
+ }
503
+ catch (err) {
504
+ const msg = err instanceof Error ? err.message : String(err);
505
+ console.log(chalk_1.default.red(`Undo failed: ${msg}`));
506
+ }
507
+ break;
508
+ }
509
+ case "/retry": {
510
+ const lastInput = ctx.getLastInput();
511
+ if (!lastInput) {
512
+ console.log(chalk_1.default.yellow("No previous message to retry."));
513
+ break;
514
+ }
515
+ console.log(chalk_1.default.dim(`Retrying: "${lastInput.slice(0, 80)}${lastInput.length > 80 ? "..." : ""}"`));
516
+ try {
517
+ const startTime = Date.now();
518
+ const result = await (0, loop_1.runAgentLoop)(ctx.client, ctx.conversation, ctx.registry, lastInput, {
519
+ model: ctx.getModel(),
520
+ maxTurns: 50,
521
+ verbose: ctx.getVerbose(),
522
+ stream: ctx.getStream(),
523
+ cwd: ctx.cwd,
524
+ workspaceRoot: ctx.cwd,
525
+ permissions: ctx.permissions,
526
+ });
527
+ if (result.totalTokensIn > 0 || result.totalTokensOut > 0) {
528
+ const cost = estimateCostFromUsage(result.totalTokensIn, result.totalTokensOut);
529
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
530
+ console.log(chalk_1.default.dim(` [${elapsed}s | ${(result.totalTokensIn + result.totalTokensOut).toLocaleString()} tok | ~$${cost.toFixed(4)}]`));
531
+ }
532
+ }
533
+ catch (err) {
534
+ const msg = err instanceof Error ? err.message : String(err);
535
+ console.log(chalk_1.default.red(`\nError: ${msg}`));
536
+ }
537
+ break;
538
+ }
539
+ case "/history": {
540
+ const recent = ctx.inputHistory.recent(20);
541
+ if (recent.length === 0) {
542
+ console.log(chalk_1.default.dim("No input history yet."));
543
+ break;
544
+ }
545
+ console.log(chalk_1.default.bold("\nRecent Inputs:"));
546
+ const startIdx = Math.max(0, recent.length - 20);
547
+ for (let i = recent.length - 1; i >= startIdx; i--) {
548
+ const entry = recent[i];
549
+ const num = i + 1;
550
+ const preview = entry.length > 80 ? entry.slice(0, 77) + "..." : entry;
551
+ console.log(` ${chalk_1.default.dim(`${num}.`)} ${preview}`);
552
+ }
553
+ console.log("");
554
+ break;
555
+ }
556
+ case "/cost": {
557
+ const stats = ctx.getSessionStats();
558
+ console.log(chalk_1.default.bold("\nSession Cost Breakdown:"));
559
+ console.log(` Input tokens: ${chalk_1.default.cyan(stats.totalTokensIn.toLocaleString())}`);
560
+ console.log(` Output tokens: ${chalk_1.default.cyan(stats.totalTokensOut.toLocaleString())}`);
561
+ console.log(` Total tokens: ${chalk_1.default.cyan((stats.totalTokensIn + stats.totalTokensOut).toLocaleString())}`);
562
+ const costStr = stats.totalCost < 0.001 ? "<$0.001" : `$${stats.totalCost.toFixed(4)}`;
563
+ console.log(` Estimated cost: ${chalk_1.default.green(costStr)}`);
564
+ console.log(` Model: ${chalk_1.default.dim(ctx.getModel())}`);
565
+ console.log("");
566
+ break;
567
+ }
568
+ case "/project": {
569
+ const info = ctx.projectInfo;
570
+ console.log(chalk_1.default.bold("\nProject Info:"));
571
+ console.log(` Name: ${chalk_1.default.cyan(info.name)}`);
572
+ console.log(` Type: ${chalk_1.default.cyan(info.type)}`);
573
+ console.log(` Language: ${chalk_1.default.cyan(info.language)}`);
574
+ console.log(` Framework: ${chalk_1.default.cyan(info.framework)}`);
575
+ if (info.testFramework !== "none") {
576
+ console.log(` Test framework: ${chalk_1.default.cyan(info.testFramework)}`);
577
+ }
578
+ console.log(` Package manager: ${chalk_1.default.cyan(info.packageManager)}`);
579
+ if (info.configFiles.length > 0) {
580
+ console.log(` Config files: ${chalk_1.default.dim(info.configFiles.join(", "))}`);
581
+ }
582
+ console.log("");
583
+ break;
584
+ }
585
+ case "/stats": {
586
+ const stats = ctx.getSessionStats();
587
+ console.log(chalk_1.default.bold("Session Statistics"));
588
+ console.log(chalk_1.default.dim("─".repeat(40)));
589
+ console.log(` Input tokens: ${stats.totalTokensIn.toLocaleString()}`);
590
+ console.log(` Output tokens: ${stats.totalTokensOut.toLocaleString()}`);
591
+ console.log(` Est. cost: ${stats.totalCost.toFixed(4)}`);
592
+ console.log(` Messages: ${ctx.conversation.messages.length}`);
593
+ console.log("");
594
+ break;
595
+ }
596
+ case "/sessions": {
597
+ try {
598
+ const sessions = conversation_1.Conversation.listSessions();
599
+ if (sessions.length === 0) {
600
+ console.log(chalk_1.default.dim("No saved sessions found."));
601
+ break;
602
+ }
603
+ console.log(chalk_1.default.bold("Recent Sessions"));
604
+ console.log(chalk_1.default.dim("─".repeat(60)));
605
+ for (const session of sessions.slice(0, 10)) {
606
+ const date = new Date(session.updatedAt).toLocaleDateString();
607
+ const time = new Date(session.updatedAt).toLocaleTimeString();
608
+ const label = session.id;
609
+ console.log(` ${chalk_1.default.cyan(session.id.slice(0, 8))} ${chalk_1.default.dim(`${date} ${time}`)} ${label} (${session.messageCount} msgs)`);
610
+ }
611
+ console.log("");
612
+ }
613
+ catch {
614
+ console.log(chalk_1.default.yellow("Could not load sessions."));
615
+ }
616
+ break;
617
+ }
618
+ case "/diff": {
619
+ const lastUndo = ctx.undoTracker.peek();
620
+ if (!lastUndo) {
621
+ console.log(chalk_1.default.yellow("No recent file changes to show."));
622
+ break;
623
+ }
624
+ try {
625
+ const current = fs.readFileSync(lastUndo.filePath, "utf-8");
626
+ const { diffStrings, formatDiff } = await Promise.resolve().then(() => __importStar(require("../utils/diff")));
627
+ const oldContent = lastUndo.content ?? "";
628
+ const result = diffStrings(oldContent, current, path.basename(lastUndo.filePath));
629
+ console.log(formatDiff(result, chalk_1.default));
630
+ }
631
+ catch {
632
+ console.log(chalk_1.default.yellow("Could not generate diff."));
633
+ }
634
+ break;
635
+ }
394
636
  default:
395
637
  console.log(chalk_1.default.yellow(`Unknown command: ${cmd}. Type /help for available commands.`));
396
638
  }