centaurus-cli 3.0.0 → 3.1.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.
Files changed (552) hide show
  1. package/dist/ai/types.js +0 -1
  2. package/dist/ai/types.js.map +1 -1
  3. package/dist/cli-adapter.js +5047 -5037
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/commands/CommandParser.js +372 -315
  6. package/dist/commands/CommandParser.js.map +1 -1
  7. package/dist/config/build-config.js +11 -42
  8. package/dist/config/build-config.js.map +1 -1
  9. package/dist/config/defaultConfig.js +94 -82
  10. package/dist/config/defaultConfig.js.map +1 -1
  11. package/dist/config/manager.js +144 -160
  12. package/dist/config/manager.js.map +1 -1
  13. package/dist/config/mcp-config-manager.js +411 -364
  14. package/dist/config/mcp-config-manager.js.map +1 -1
  15. package/dist/config/models.js +118 -185
  16. package/dist/config/models.js.map +1 -1
  17. package/dist/config/slash-commands.js +186 -184
  18. package/dist/config/slash-commands.js.map +1 -1
  19. package/dist/config/types.js +33 -26
  20. package/dist/config/types.js.map +1 -1
  21. package/dist/context/command-detector.js +63 -67
  22. package/dist/context/command-detector.js.map +1 -1
  23. package/dist/context/context-manager.js +533 -518
  24. package/dist/context/context-manager.js.map +1 -1
  25. package/dist/context/handlers/docker-handler.js +518 -576
  26. package/dist/context/handlers/docker-handler.js.map +1 -1
  27. package/dist/context/handlers/ssh-handler.js +1050 -1109
  28. package/dist/context/handlers/ssh-handler.js.map +1 -1
  29. package/dist/context/handlers/wsl-handler.js +558 -630
  30. package/dist/context/handlers/wsl-handler.js.map +1 -1
  31. package/dist/context/index.js +42 -6
  32. package/dist/context/index.js.map +1 -1
  33. package/dist/context/subshell-handler.js +0 -4
  34. package/dist/context/subshell-handler.js.map +1 -1
  35. package/dist/context/types.js +20 -31
  36. package/dist/context/types.js.map +1 -1
  37. package/dist/hooks/useConnectivity.js +13 -10
  38. package/dist/hooks/useConnectivity.js.map +1 -1
  39. package/dist/hooks/useTerminalDimensions.js +67 -79
  40. package/dist/hooks/useTerminalDimensions.js.map +1 -1
  41. package/dist/index.js +228 -251
  42. package/dist/index.js.map +1 -1
  43. package/dist/mcp/mcp-command-handler.js +297 -260
  44. package/dist/mcp/mcp-command-handler.js.map +1 -1
  45. package/dist/mcp/mcp-server-manager.js +139 -155
  46. package/dist/mcp/mcp-server-manager.js.map +1 -1
  47. package/dist/mcp/mcp-tool-wrapper.js +74 -94
  48. package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
  49. package/dist/services/ai-autocomplete-agent.js +169 -181
  50. package/dist/services/ai-autocomplete-agent.js.map +1 -1
  51. package/dist/services/ai-context-injector.js +180 -93
  52. package/dist/services/ai-context-injector.js.map +1 -1
  53. package/dist/services/ai-service-client.js +513 -456
  54. package/dist/services/ai-service-client.js.map +1 -1
  55. package/dist/services/api-client.js +443 -441
  56. package/dist/services/api-client.js.map +1 -1
  57. package/dist/services/auth-handler.js +162 -198
  58. package/dist/services/auth-handler.js.map +1 -1
  59. package/dist/services/background-task-manager.js +258 -282
  60. package/dist/services/background-task-manager.js.map +1 -1
  61. package/dist/services/checkpoint-manager.js +1513 -973
  62. package/dist/services/checkpoint-manager.js.map +1 -1
  63. package/dist/services/clipboard-service.js +151 -200
  64. package/dist/services/clipboard-service.js.map +1 -1
  65. package/dist/services/connectivity-manager.js +63 -65
  66. package/dist/services/connectivity-manager.js.map +1 -1
  67. package/dist/services/conversation-manager.js +118 -121
  68. package/dist/services/conversation-manager.js.map +1 -1
  69. package/dist/services/environment-context-injector.js +160 -187
  70. package/dist/services/environment-context-injector.js.map +1 -1
  71. package/dist/services/fast-context-agent.js +203 -243
  72. package/dist/services/fast-context-agent.js.map +1 -1
  73. package/dist/services/input-detection-agent.js +190 -202
  74. package/dist/services/input-detection-agent.js.map +1 -1
  75. package/dist/services/input-requirement-detector.js +155 -189
  76. package/dist/services/input-requirement-detector.js.map +1 -1
  77. package/dist/services/local-chat-storage.js +342 -365
  78. package/dist/services/local-chat-storage.js.map +1 -1
  79. package/dist/services/monitored-shell-manager.js +225 -233
  80. package/dist/services/monitored-shell-manager.js.map +1 -1
  81. package/dist/services/ollama-service.js +293 -310
  82. package/dist/services/ollama-service.js.map +1 -1
  83. package/dist/services/rules-storage.js +142 -0
  84. package/dist/services/rules-storage.js.map +1 -0
  85. package/dist/services/session-quota-manager.js +219 -235
  86. package/dist/services/session-quota-manager.js.map +1 -1
  87. package/dist/services/shell-input-agent.js +299 -334
  88. package/dist/services/shell-input-agent.js.map +1 -1
  89. package/dist/services/sub-agent-manager.js +459 -501
  90. package/dist/services/sub-agent-manager.js.map +1 -1
  91. package/dist/services/warpify-detector.js +133 -183
  92. package/dist/services/warpify-detector.js.map +1 -1
  93. package/dist/services/workflow-storage.js +202 -217
  94. package/dist/services/workflow-storage.js.map +1 -1
  95. package/dist/test-ssh-handler.js +148 -193
  96. package/dist/test-ssh-handler.js.map +1 -1
  97. package/dist/tools/add-mcp.js +161 -0
  98. package/dist/tools/add-mcp.js.map +1 -0
  99. package/dist/tools/background-command.js +240 -273
  100. package/dist/tools/background-command.js.map +1 -1
  101. package/dist/tools/command.js +447 -440
  102. package/dist/tools/command.js.map +1 -1
  103. package/dist/tools/create-image.js +172 -202
  104. package/dist/tools/create-image.js.map +1 -1
  105. package/dist/tools/enter-remote-session.js +169 -215
  106. package/dist/tools/enter-remote-session.js.map +1 -1
  107. package/dist/tools/fast-context.js +60 -67
  108. package/dist/tools/fast-context.js.map +1 -1
  109. package/dist/tools/file-ops.js +605 -537
  110. package/dist/tools/file-ops.js.map +1 -1
  111. package/dist/tools/find-files.js +262 -303
  112. package/dist/tools/find-files.js.map +1 -1
  113. package/dist/tools/get-diff.js +423 -400
  114. package/dist/tools/get-diff.js.map +1 -1
  115. package/dist/tools/grep-search.js +966 -948
  116. package/dist/tools/grep-search.js.map +1 -1
  117. package/dist/tools/inspect-symbol.js +308 -323
  118. package/dist/tools/inspect-symbol.js.map +1 -1
  119. package/dist/tools/plan-mode.js +459 -503
  120. package/dist/tools/plan-mode.js.map +1 -1
  121. package/dist/tools/read-binary-file.js +160 -190
  122. package/dist/tools/read-binary-file.js.map +1 -1
  123. package/dist/tools/registry.js +100 -84
  124. package/dist/tools/registry.js.map +1 -1
  125. package/dist/tools/reproduce_issue.js +170 -151
  126. package/dist/tools/reproduce_issue.js.map +1 -1
  127. package/dist/tools/sub-agent.js +223 -228
  128. package/dist/tools/sub-agent.js.map +1 -1
  129. package/dist/tools/task-complete.js +28 -27
  130. package/dist/tools/task-complete.js.map +1 -1
  131. package/dist/tools/types.js +0 -1
  132. package/dist/tools/types.js.map +1 -1
  133. package/dist/tools/validation.js +96 -118
  134. package/dist/tools/validation.js.map +1 -1
  135. package/dist/tools/web-search.js +194 -194
  136. package/dist/tools/web-search.js.map +1 -1
  137. package/dist/tools/workflow-tool.js +77 -82
  138. package/dist/tools/workflow-tool.js.map +1 -1
  139. package/dist/types/index.js +0 -1
  140. package/dist/types/index.js.map +1 -1
  141. package/dist/types/rule.js +1 -0
  142. package/dist/types/rule.js.map +1 -0
  143. package/dist/types/workflow.js +0 -7
  144. package/dist/types/workflow.js.map +1 -1
  145. package/dist/ui/components/AgentTimer.js +24 -25
  146. package/dist/ui/components/AgentTimer.js.map +1 -1
  147. package/dist/ui/components/App.js +3266 -3249
  148. package/dist/ui/components/App.js.map +1 -1
  149. package/dist/ui/components/AuthScreen.js +22 -34
  150. package/dist/ui/components/AuthScreen.js.map +1 -1
  151. package/dist/ui/components/AuthWelcomeScreen.js +30 -24
  152. package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
  153. package/dist/ui/components/Breadcrumbs.js +53 -82
  154. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  155. package/dist/ui/components/CircularSelectInput.js +59 -67
  156. package/dist/ui/components/CircularSelectInput.js.map +1 -1
  157. package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
  158. package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
  159. package/dist/ui/components/CodeBlock.js +24 -42
  160. package/dist/ui/components/CodeBlock.js.map +1 -1
  161. package/dist/ui/components/ConfigViewer.js +18 -25
  162. package/dist/ui/components/ConfigViewer.js.map +1 -1
  163. package/dist/ui/components/ConfirmPrompt.js +49 -71
  164. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  165. package/dist/ui/components/ConnectionStatusMessage.js +32 -83
  166. package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
  167. package/dist/ui/components/ContextWindowIndicator.js +34 -49
  168. package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
  169. package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
  170. package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
  171. package/dist/ui/components/DiffViewer.js +68 -121
  172. package/dist/ui/components/DiffViewer.js.map +1 -1
  173. package/dist/ui/components/ErrorBoundary.js +40 -48
  174. package/dist/ui/components/ErrorBoundary.js.map +1 -1
  175. package/dist/ui/components/FileCreationPreview.js +29 -60
  176. package/dist/ui/components/FileCreationPreview.js.map +1 -1
  177. package/dist/ui/components/FileOperation.js +34 -29
  178. package/dist/ui/components/FileOperation.js.map +1 -1
  179. package/dist/ui/components/FileTagAutocomplete.js +55 -25
  180. package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
  181. package/dist/ui/components/FontRecommendation.js.map +1 -1
  182. package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
  183. package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
  184. package/dist/ui/components/InputBox.js +1620 -2150
  185. package/dist/ui/components/InputBox.js.map +1 -1
  186. package/dist/ui/components/InteractiveShell.js +234 -352
  187. package/dist/ui/components/InteractiveShell.js.map +1 -1
  188. package/dist/ui/components/KeyboardHelp.js +34 -35
  189. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  190. package/dist/ui/components/LoadingIndicator.js +22 -25
  191. package/dist/ui/components/LoadingIndicator.js.map +1 -1
  192. package/dist/ui/components/MCPAddScreen.js +40 -51
  193. package/dist/ui/components/MCPAddScreen.js.map +1 -1
  194. package/dist/ui/components/MCPListScreen.js +40 -48
  195. package/dist/ui/components/MCPListScreen.js.map +1 -1
  196. package/dist/ui/components/MCPServerListScreen.js +49 -56
  197. package/dist/ui/components/MCPServerListScreen.js.map +1 -1
  198. package/dist/ui/components/MarkdownRenderer.js +69 -96
  199. package/dist/ui/components/MarkdownRenderer.js.map +1 -1
  200. package/dist/ui/components/MessageBox.js +66 -48
  201. package/dist/ui/components/MessageBox.js.map +1 -1
  202. package/dist/ui/components/MessageDisplay.js +150 -142
  203. package/dist/ui/components/MessageDisplay.js.map +1 -1
  204. package/dist/ui/components/MonitorModeAIPanel.js +46 -65
  205. package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
  206. package/dist/ui/components/MultiLineInput.js +243 -277
  207. package/dist/ui/components/MultiLineInput.js.map +1 -1
  208. package/dist/ui/components/PasswordPrompt.js +37 -18
  209. package/dist/ui/components/PasswordPrompt.js.map +1 -1
  210. package/dist/ui/components/PlanAcceptedMessage.js +27 -38
  211. package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
  212. package/dist/ui/components/PlanReviewScreen.js +46 -50
  213. package/dist/ui/components/PlanReviewScreen.js.map +1 -1
  214. package/dist/ui/components/RulesEditorScreen.js +81 -0
  215. package/dist/ui/components/RulesEditorScreen.js.map +1 -0
  216. package/dist/ui/components/SelectPrompt.js +19 -8
  217. package/dist/ui/components/SelectPrompt.js.map +1 -1
  218. package/dist/ui/components/ShimmerText.js +44 -0
  219. package/dist/ui/components/ShimmerText.js.map +1 -0
  220. package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
  221. package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
  222. package/dist/ui/components/StatusBar.js +56 -87
  223. package/dist/ui/components/StatusBar.js.map +1 -1
  224. package/dist/ui/components/StreamingMessageDisplay.js +116 -99
  225. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
  226. package/dist/ui/components/TaskCompletedMessage.js +28 -23
  227. package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
  228. package/dist/ui/components/TaskProgressIndicator.js +44 -70
  229. package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
  230. package/dist/ui/components/ThinkingDisplay.js +44 -41
  231. package/dist/ui/components/ThinkingDisplay.js.map +1 -1
  232. package/dist/ui/components/ToolExecutionMessage.js +772 -1326
  233. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  234. package/dist/ui/components/ToolExecutionStatus.js +53 -84
  235. package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
  236. package/dist/ui/components/ToolResult.js +22 -15
  237. package/dist/ui/components/ToolResult.js.map +1 -1
  238. package/dist/ui/components/VersionUpdatePrompt.js +88 -120
  239. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
  240. package/dist/ui/components/WelcomeBanner.js +176 -26
  241. package/dist/ui/components/WelcomeBanner.js.map +1 -1
  242. package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
  243. package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
  244. package/dist/utils/ansi-encoder.js +30 -61
  245. package/dist/utils/ansi-encoder.js.map +1 -1
  246. package/dist/utils/chat-formatter.js +327 -305
  247. package/dist/utils/chat-formatter.js.map +1 -1
  248. package/dist/utils/command-history.js +152 -174
  249. package/dist/utils/command-history.js.map +1 -1
  250. package/dist/utils/context-sanitizer.js +49 -112
  251. package/dist/utils/context-sanitizer.js.map +1 -1
  252. package/dist/utils/conversation-logger.js +292 -324
  253. package/dist/utils/conversation-logger.js.map +1 -1
  254. package/dist/utils/custom-commands-manager.js +126 -131
  255. package/dist/utils/custom-commands-manager.js.map +1 -1
  256. package/dist/utils/editor-utils.js +732 -837
  257. package/dist/utils/editor-utils.js.map +1 -1
  258. package/dist/utils/file.js +174 -213
  259. package/dist/utils/file.js.map +1 -1
  260. package/dist/utils/git-stats.js +169 -0
  261. package/dist/utils/git-stats.js.map +1 -0
  262. package/dist/utils/input-classifier.js +960 -482
  263. package/dist/utils/input-classifier.js.map +1 -1
  264. package/dist/utils/logger.js +48 -73
  265. package/dist/utils/logger.js.map +1 -1
  266. package/dist/utils/markdown-parser.js +277 -310
  267. package/dist/utils/markdown-parser.js.map +1 -1
  268. package/dist/utils/rule-reference-resolver.js +54 -0
  269. package/dist/utils/rule-reference-resolver.js.map +1 -0
  270. package/dist/utils/shell.js +144 -156
  271. package/dist/utils/shell.js.map +1 -1
  272. package/dist/utils/state.js +23 -22
  273. package/dist/utils/state.js.map +1 -1
  274. package/dist/utils/syntax-checker.js +279 -327
  275. package/dist/utils/syntax-checker.js.map +1 -1
  276. package/dist/utils/terminal-output.js +199 -302
  277. package/dist/utils/terminal-output.js.map +1 -1
  278. package/dist/utils/text-clipboard.js +47 -70
  279. package/dist/utils/text-clipboard.js.map +1 -1
  280. package/dist/utils/unicode-sanitizer.js +134 -197
  281. package/dist/utils/unicode-sanitizer.js.map +1 -1
  282. package/dist/utils/version-checker.js +46 -56
  283. package/dist/utils/version-checker.js.map +1 -1
  284. package/package.json +6 -4
  285. package/dist/ai/types.d.ts +0 -20
  286. package/dist/ai/types.d.ts.map +0 -1
  287. package/dist/cli-adapter.d.ts +0 -511
  288. package/dist/cli-adapter.d.ts.map +0 -1
  289. package/dist/commands/CommandParser.d.ts +0 -27
  290. package/dist/commands/CommandParser.d.ts.map +0 -1
  291. package/dist/config/build-config.d.ts +0 -42
  292. package/dist/config/build-config.d.ts.map +0 -1
  293. package/dist/config/defaultConfig.d.ts +0 -79
  294. package/dist/config/defaultConfig.d.ts.map +0 -1
  295. package/dist/config/manager.d.ts +0 -62
  296. package/dist/config/manager.d.ts.map +0 -1
  297. package/dist/config/mcp-config-manager.d.ts +0 -79
  298. package/dist/config/mcp-config-manager.d.ts.map +0 -1
  299. package/dist/config/models.d.ts +0 -83
  300. package/dist/config/models.d.ts.map +0 -1
  301. package/dist/config/slash-commands.d.ts +0 -23
  302. package/dist/config/slash-commands.d.ts.map +0 -1
  303. package/dist/config/types.d.ts +0 -35
  304. package/dist/config/types.d.ts.map +0 -1
  305. package/dist/context/command-detector.d.ts +0 -50
  306. package/dist/context/command-detector.d.ts.map +0 -1
  307. package/dist/context/context-manager.d.ts +0 -157
  308. package/dist/context/context-manager.d.ts.map +0 -1
  309. package/dist/context/handlers/docker-handler.d.ts +0 -130
  310. package/dist/context/handlers/docker-handler.d.ts.map +0 -1
  311. package/dist/context/handlers/ssh-handler.d.ts +0 -201
  312. package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
  313. package/dist/context/handlers/wsl-handler.d.ts +0 -146
  314. package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
  315. package/dist/context/index.d.ts +0 -8
  316. package/dist/context/index.d.ts.map +0 -1
  317. package/dist/context/subshell-handler.d.ts +0 -165
  318. package/dist/context/subshell-handler.d.ts.map +0 -1
  319. package/dist/context/types.d.ts +0 -70
  320. package/dist/context/types.d.ts.map +0 -1
  321. package/dist/hooks/useConnectivity.d.ts +0 -2
  322. package/dist/hooks/useConnectivity.d.ts.map +0 -1
  323. package/dist/hooks/useTerminalDimensions.d.ts +0 -41
  324. package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
  325. package/dist/index.d.ts +0 -9
  326. package/dist/index.d.ts.map +0 -1
  327. package/dist/mcp/mcp-command-handler.d.ts +0 -47
  328. package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
  329. package/dist/mcp/mcp-server-manager.d.ts +0 -30
  330. package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
  331. package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
  332. package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
  333. package/dist/services/ai-autocomplete-agent.d.ts +0 -39
  334. package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
  335. package/dist/services/ai-context-injector.d.ts +0 -41
  336. package/dist/services/ai-context-injector.d.ts.map +0 -1
  337. package/dist/services/ai-service-client.d.ts +0 -128
  338. package/dist/services/ai-service-client.d.ts.map +0 -1
  339. package/dist/services/api-client.d.ts +0 -353
  340. package/dist/services/api-client.d.ts.map +0 -1
  341. package/dist/services/auth-handler.d.ts +0 -30
  342. package/dist/services/auth-handler.d.ts.map +0 -1
  343. package/dist/services/background-task-manager.d.ts +0 -114
  344. package/dist/services/background-task-manager.d.ts.map +0 -1
  345. package/dist/services/checkpoint-manager.d.ts +0 -167
  346. package/dist/services/checkpoint-manager.d.ts.map +0 -1
  347. package/dist/services/clipboard-service.d.ts +0 -37
  348. package/dist/services/clipboard-service.d.ts.map +0 -1
  349. package/dist/services/connectivity-manager.d.ts +0 -18
  350. package/dist/services/connectivity-manager.d.ts.map +0 -1
  351. package/dist/services/conversation-manager.d.ts +0 -73
  352. package/dist/services/conversation-manager.d.ts.map +0 -1
  353. package/dist/services/environment-context-injector.d.ts +0 -69
  354. package/dist/services/environment-context-injector.d.ts.map +0 -1
  355. package/dist/services/fast-context-agent.d.ts +0 -12
  356. package/dist/services/fast-context-agent.d.ts.map +0 -1
  357. package/dist/services/input-detection-agent.d.ts +0 -40
  358. package/dist/services/input-detection-agent.d.ts.map +0 -1
  359. package/dist/services/input-requirement-detector.d.ts +0 -28
  360. package/dist/services/input-requirement-detector.d.ts.map +0 -1
  361. package/dist/services/local-chat-storage.d.ts +0 -182
  362. package/dist/services/local-chat-storage.d.ts.map +0 -1
  363. package/dist/services/monitored-shell-manager.d.ts +0 -120
  364. package/dist/services/monitored-shell-manager.d.ts.map +0 -1
  365. package/dist/services/ollama-service.d.ts +0 -197
  366. package/dist/services/ollama-service.d.ts.map +0 -1
  367. package/dist/services/session-quota-manager.d.ts +0 -101
  368. package/dist/services/session-quota-manager.d.ts.map +0 -1
  369. package/dist/services/shell-input-agent.d.ts +0 -89
  370. package/dist/services/shell-input-agent.d.ts.map +0 -1
  371. package/dist/services/sub-agent-manager.d.ts +0 -140
  372. package/dist/services/sub-agent-manager.d.ts.map +0 -1
  373. package/dist/services/warpify-detector.d.ts +0 -43
  374. package/dist/services/warpify-detector.d.ts.map +0 -1
  375. package/dist/services/workflow-storage.d.ts +0 -72
  376. package/dist/services/workflow-storage.d.ts.map +0 -1
  377. package/dist/test-ssh-handler.d.ts +0 -8
  378. package/dist/test-ssh-handler.d.ts.map +0 -1
  379. package/dist/tools/background-command.d.ts +0 -11
  380. package/dist/tools/background-command.d.ts.map +0 -1
  381. package/dist/tools/command.d.ts +0 -3
  382. package/dist/tools/command.d.ts.map +0 -1
  383. package/dist/tools/create-image.d.ts +0 -10
  384. package/dist/tools/create-image.d.ts.map +0 -1
  385. package/dist/tools/enter-remote-session.d.ts +0 -48
  386. package/dist/tools/enter-remote-session.d.ts.map +0 -1
  387. package/dist/tools/fast-context.d.ts +0 -3
  388. package/dist/tools/fast-context.d.ts.map +0 -1
  389. package/dist/tools/file-ops.d.ts +0 -7
  390. package/dist/tools/file-ops.d.ts.map +0 -1
  391. package/dist/tools/find-files.d.ts +0 -49
  392. package/dist/tools/find-files.d.ts.map +0 -1
  393. package/dist/tools/get-diff.d.ts +0 -14
  394. package/dist/tools/get-diff.d.ts.map +0 -1
  395. package/dist/tools/grep-search.d.ts +0 -155
  396. package/dist/tools/grep-search.d.ts.map +0 -1
  397. package/dist/tools/inspect-symbol.d.ts +0 -32
  398. package/dist/tools/inspect-symbol.d.ts.map +0 -1
  399. package/dist/tools/plan-mode.d.ts +0 -140
  400. package/dist/tools/plan-mode.d.ts.map +0 -1
  401. package/dist/tools/read-binary-file.d.ts +0 -10
  402. package/dist/tools/read-binary-file.d.ts.map +0 -1
  403. package/dist/tools/registry.d.ts +0 -31
  404. package/dist/tools/registry.d.ts.map +0 -1
  405. package/dist/tools/reproduce_issue.d.ts +0 -2
  406. package/dist/tools/reproduce_issue.d.ts.map +0 -1
  407. package/dist/tools/sub-agent.d.ts +0 -9
  408. package/dist/tools/sub-agent.d.ts.map +0 -1
  409. package/dist/tools/task-complete.d.ts +0 -3
  410. package/dist/tools/task-complete.d.ts.map +0 -1
  411. package/dist/tools/types.d.ts +0 -40
  412. package/dist/tools/types.d.ts.map +0 -1
  413. package/dist/tools/validation.d.ts +0 -47
  414. package/dist/tools/validation.d.ts.map +0 -1
  415. package/dist/tools/web-search.d.ts +0 -24
  416. package/dist/tools/web-search.d.ts.map +0 -1
  417. package/dist/tools/workflow-tool.d.ts +0 -11
  418. package/dist/tools/workflow-tool.d.ts.map +0 -1
  419. package/dist/types/index.d.ts +0 -123
  420. package/dist/types/index.d.ts.map +0 -1
  421. package/dist/types/workflow.d.ts +0 -110
  422. package/dist/types/workflow.d.ts.map +0 -1
  423. package/dist/ui/components/AgentTimer.d.ts +0 -7
  424. package/dist/ui/components/AgentTimer.d.ts.map +0 -1
  425. package/dist/ui/components/App.d.ts +0 -197
  426. package/dist/ui/components/App.d.ts.map +0 -1
  427. package/dist/ui/components/AuthScreen.d.ts +0 -8
  428. package/dist/ui/components/AuthScreen.d.ts.map +0 -1
  429. package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
  430. package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
  431. package/dist/ui/components/Breadcrumbs.d.ts +0 -13
  432. package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
  433. package/dist/ui/components/CircularSelectInput.d.ts +0 -24
  434. package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
  435. package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
  436. package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
  437. package/dist/ui/components/CodeBlock.d.ts +0 -9
  438. package/dist/ui/components/CodeBlock.d.ts.map +0 -1
  439. package/dist/ui/components/ConfigViewer.d.ts +0 -11
  440. package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
  441. package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
  442. package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
  443. package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
  444. package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
  445. package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
  446. package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
  447. package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
  448. package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
  449. package/dist/ui/components/DiffViewer.d.ts +0 -9
  450. package/dist/ui/components/DiffViewer.d.ts.map +0 -1
  451. package/dist/ui/components/ErrorBoundary.d.ts +0 -17
  452. package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
  453. package/dist/ui/components/FileCreationPreview.d.ts +0 -8
  454. package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
  455. package/dist/ui/components/FileOperation.d.ts +0 -10
  456. package/dist/ui/components/FileOperation.d.ts.map +0 -1
  457. package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
  458. package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
  459. package/dist/ui/components/FontRecommendation.d.ts +0 -1
  460. package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
  461. package/dist/ui/components/InputBox.d.ts +0 -42
  462. package/dist/ui/components/InputBox.d.ts.map +0 -1
  463. package/dist/ui/components/InteractiveShell.d.ts +0 -30
  464. package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
  465. package/dist/ui/components/KeyboardHelp.d.ts +0 -7
  466. package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
  467. package/dist/ui/components/LoadingIndicator.d.ts +0 -3
  468. package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
  469. package/dist/ui/components/MCPAddScreen.d.ts +0 -13
  470. package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
  471. package/dist/ui/components/MCPListScreen.d.ts +0 -17
  472. package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
  473. package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
  474. package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
  475. package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
  476. package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
  477. package/dist/ui/components/MessageBox.d.ts +0 -10
  478. package/dist/ui/components/MessageBox.d.ts.map +0 -1
  479. package/dist/ui/components/MessageDisplay.d.ts +0 -14
  480. package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
  481. package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
  482. package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
  483. package/dist/ui/components/MultiLineInput.d.ts +0 -13
  484. package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
  485. package/dist/ui/components/PasswordPrompt.d.ts +0 -9
  486. package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
  487. package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
  488. package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
  489. package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
  490. package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
  491. package/dist/ui/components/SelectPrompt.d.ts +0 -12
  492. package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
  493. package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
  494. package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
  495. package/dist/ui/components/StatusBar.d.ts +0 -14
  496. package/dist/ui/components/StatusBar.d.ts.map +0 -1
  497. package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
  498. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
  499. package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
  500. package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
  501. package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
  502. package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
  503. package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
  504. package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
  505. package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
  506. package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
  507. package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
  508. package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
  509. package/dist/ui/components/ToolResult.d.ts +0 -10
  510. package/dist/ui/components/ToolResult.d.ts.map +0 -1
  511. package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
  512. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
  513. package/dist/ui/components/WelcomeBanner.d.ts +0 -3
  514. package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
  515. package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
  516. package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
  517. package/dist/utils/ansi-encoder.d.ts +0 -7
  518. package/dist/utils/ansi-encoder.d.ts.map +0 -1
  519. package/dist/utils/chat-formatter.d.ts +0 -12
  520. package/dist/utils/chat-formatter.d.ts.map +0 -1
  521. package/dist/utils/command-history.d.ts +0 -24
  522. package/dist/utils/command-history.d.ts.map +0 -1
  523. package/dist/utils/context-sanitizer.d.ts +0 -50
  524. package/dist/utils/context-sanitizer.d.ts.map +0 -1
  525. package/dist/utils/conversation-logger.d.ts +0 -142
  526. package/dist/utils/conversation-logger.d.ts.map +0 -1
  527. package/dist/utils/custom-commands-manager.d.ts +0 -59
  528. package/dist/utils/custom-commands-manager.d.ts.map +0 -1
  529. package/dist/utils/editor-utils.d.ts +0 -101
  530. package/dist/utils/editor-utils.d.ts.map +0 -1
  531. package/dist/utils/file.d.ts +0 -61
  532. package/dist/utils/file.d.ts.map +0 -1
  533. package/dist/utils/input-classifier.d.ts +0 -25
  534. package/dist/utils/input-classifier.d.ts.map +0 -1
  535. package/dist/utils/logger.d.ts +0 -17
  536. package/dist/utils/logger.d.ts.map +0 -1
  537. package/dist/utils/markdown-parser.d.ts +0 -60
  538. package/dist/utils/markdown-parser.d.ts.map +0 -1
  539. package/dist/utils/shell.d.ts +0 -47
  540. package/dist/utils/shell.d.ts.map +0 -1
  541. package/dist/utils/state.d.ts +0 -13
  542. package/dist/utils/state.d.ts.map +0 -1
  543. package/dist/utils/syntax-checker.d.ts +0 -24
  544. package/dist/utils/syntax-checker.d.ts.map +0 -1
  545. package/dist/utils/terminal-output.d.ts +0 -25
  546. package/dist/utils/terminal-output.d.ts.map +0 -1
  547. package/dist/utils/text-clipboard.d.ts +0 -12
  548. package/dist/utils/text-clipboard.d.ts.map +0 -1
  549. package/dist/utils/unicode-sanitizer.d.ts +0 -44
  550. package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
  551. package/dist/utils/version-checker.d.ts +0 -14
  552. package/dist/utils/version-checker.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint-manager.js","sourceRoot":"","sources":["../../src/services/checkpoint-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/services/checkpoint-manager.ts"],"sourcesContent":["import * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport * as os from 'os';\r\nimport { logError, logWarning } from '../utils/logger.js';\r\nimport { quickLog } from '../utils/conversation-logger.js';\r\n\r\nexport type CheckpointContextType = 'local' | 'ssh' | 'wsl' | 'docker';\r\n\r\n/**\r\n * Interface for remote file operations, implemented by SSH/WSL/Docker handlers.\r\n * Used by CheckpointManager to create/revert snapshots on remote machines.\r\n */\r\nexport interface RemoteFileHandler {\r\n readFile(path: string): Promise<string>;\r\n writeFile(path: string, content: string | Buffer): Promise<void>;\r\n executeCommand(command: string): Promise<{ stdout: string; stderr: string; exitCode: number }>;\r\n isConnected(): boolean;\r\n}\r\n\r\n/**\r\n * Information about the remote session where a checkpoint was created.\r\n * Used to validate context when reverting.\r\n */\r\nexport interface RemoteSessionInfo {\r\n hostname?: string;\r\n username?: string;\r\n sessionId: string;\r\n connectionString?: string;\r\n}\r\n\r\nexport interface CheckpointChanges {\r\n added: string[];\r\n modified: string[];\r\n deleted: string[];\r\n}\r\n\r\nexport interface CheckpointToolCall {\r\n id?: string;\r\n name: string;\r\n arguments?: Record<string, any>;\r\n timestamp: string;\r\n}\r\n\r\nexport interface CheckpointMeta {\r\n id: string;\r\n prompt: string;\r\n createdAt: string;\r\n createdAtMs: number;\r\n cwd: string;\r\n contextType: CheckpointContextType;\r\n remoteSessionInfo?: RemoteSessionInfo;\r\n conversationIndex: number;\r\n uiMessageIndex?: number;\r\n uiMessageId?: string;\r\n snapshotDir: string;\r\n manifestPath: string;\r\n changes?: CheckpointChanges;\r\n commands: string[];\r\n toolCalls: CheckpointToolCall[];\r\n status: 'active' | 'finalized' | 'discarded';\r\n}\r\n\r\n// ── V2 Manifest types (backup-on-write approach) ──────────────────────\r\n\r\n/**\r\n * Represents a backed-up file's state before the AI modified it.\r\n * Only the files actually touched by AI tools are backed up.\r\n */\r\ninterface FileBackupEntry {\r\n /** Relative path in the project (forward-slash separated) */\r\n filePath: string;\r\n /** Whether the file existed before the AI changed it */\r\n existed: boolean;\r\n /** Original file size in bytes (only if existed=true) */\r\n size?: number;\r\n /** ISO timestamp of when the backup was taken */\r\n backedUpAt: string;\r\n}\r\n\r\n/**\r\n * Records an individual file operation performed by the AI.\r\n */\r\ninterface FileOperation {\r\n type: 'create' | 'modify' | 'delete';\r\n filePath: string;\r\n toolName: string;\r\n timestamp: string;\r\n}\r\n\r\n/**\r\n * V2 manifest: stores only backups of files the AI touched, not the entire project.\r\n * Checkpoint creation is O(1) — no directory scanning or file copying until a file\r\n * is actually modified by a tool.\r\n */\r\ninterface CheckpointManifestV2 {\r\n version: 2;\r\n createdAt: string;\r\n cwd: string;\r\n fileBackups: FileBackupEntry[];\r\n operations: FileOperation[];\r\n}\r\n\r\n// ── Legacy V1 manifest types (for backward compatibility) ─────────────\r\n\r\ninterface CheckpointManifestEntryV1 {\r\n path: string;\r\n size: number;\r\n mtimeMs: number;\r\n mode: number;\r\n}\r\n\r\ninterface CheckpointManifestV1 {\r\n version: 1;\r\n createdAt: string;\r\n cwd: string;\r\n files: CheckpointManifestEntryV1[];\r\n}\r\n\r\ntype CheckpointManifest = CheckpointManifestV1 | CheckpointManifestV2;\r\n\r\nexport class CheckpointManager {\r\n private checkpoints: CheckpointMeta[] = [];\r\n private currentChatId: string | null = null;\r\n private discardedIds: Set<string> = new Set();\r\n private baseDir: string;\r\n\r\n constructor() {\r\n this.baseDir = path.join(os.homedir(), '.centaurus', 'checkpoints');\r\n this.ensureDirSync(this.baseDir);\r\n }\r\n\r\n setCurrentChatId(chatId: string | null): void {\r\n this.currentChatId = chatId;\r\n this.loadIndex();\r\n }\r\n\r\n clear(): void {\r\n this.checkpoints = [];\r\n this.discardedIds.clear();\r\n }\r\n\r\n list(): CheckpointMeta[] {\r\n return [...this.checkpoints].sort((a, b) => b.createdAtMs - a.createdAtMs);\r\n }\r\n\r\n /**\r\n * Merge checkpoint metadata restored from chat history into in-memory state.\r\n * This acts as a fallback when checkpoint index.json is missing or stale.\r\n * Existing in-memory entries (loaded from disk index) take precedence.\r\n *\r\n * @returns Number of checkpoints merged from chat history.\r\n */\r\n hydrateFromChatHistory(entries?: CheckpointMeta[]): number {\r\n if (!Array.isArray(entries) || entries.length === 0) {\r\n return 0;\r\n }\r\n\r\n const existingIds = new Set(this.checkpoints.map(cp => cp.id));\r\n let merged = 0;\r\n\r\n for (const rawEntry of entries) {\r\n const entry = this.normalizeCheckpointMeta(rawEntry);\r\n if (!entry || existingIds.has(entry.id)) {\r\n continue;\r\n }\r\n\r\n // Revert/diff require manifest + backup files on disk.\r\n // Skip metadata-only entries that no longer have backing files.\r\n if (!fs.existsSync(entry.manifestPath)) {\r\n continue;\r\n }\r\n\r\n this.checkpoints.push(entry);\r\n existingIds.add(entry.id);\r\n merged++;\r\n }\r\n\r\n if (merged > 0) {\r\n this.saveIndex();\r\n }\r\n\r\n return merged;\r\n }\r\n\r\n // ── Backup-on-write: called by file tools before modifying a file ───\r\n\r\n /**\r\n * Back up a single file before the AI modifies it.\r\n * This is the core of the new checkpoint system: instead of copying the\r\n * entire project at checkpoint start, we only back up the specific files\r\n * that the AI actually touches, right before it touches them.\r\n *\r\n * If the file has already been backed up in this checkpoint, this is a no-op\r\n * (we always want the ORIGINAL state, not intermediate states).\r\n */\r\n async backupFileBeforeChange(\r\n checkpointId: string,\r\n absoluteFilePath: string,\r\n cwd: string,\r\n handler?: RemoteFileHandler\r\n ): Promise<void> {\r\n const checkpoint = this.checkpoints.find(cp => cp.id === checkpointId);\r\n if (!checkpoint || checkpoint.status !== 'active') return;\r\n\r\n const baseCwd = checkpoint.cwd || cwd;\r\n const { absolutePath, relativePath } = this.resolveCheckpointFilePath(baseCwd, absoluteFilePath);\r\n\r\n // Read the current manifest to check if this file is already backed up\r\n const manifest = this.readManifestV2(checkpoint.manifestPath);\r\n const alreadyBacked = manifest.fileBackups.some(b => b.filePath === relativePath);\r\n if (alreadyBacked) return; // Already have the original — skip\r\n\r\n const isRemote = checkpoint.contextType !== 'local' && handler && handler.isConnected();\r\n const backupDir = path.join(path.dirname(checkpoint.manifestPath), 'backups');\r\n\r\n try {\r\n let existed = false;\r\n let fileSize: number | undefined;\r\n\r\n if (isRemote) {\r\n // Remote: try to read the file via handler\r\n const remotePath = path.posix.resolve(baseCwd, relativePath);\r\n try {\r\n const content = await handler.readFile(remotePath);\r\n existed = true;\r\n fileSize = Buffer.from(content, 'utf-8').length;\r\n // Save backup locally\r\n const backupPath = path.join(backupDir, relativePath);\r\n this.ensureDirSync(path.dirname(backupPath));\r\n fs.writeFileSync(backupPath, content, 'utf-8');\r\n } catch {\r\n // File doesn't exist on remote — it will be created\r\n existed = false;\r\n }\r\n } else {\r\n // Local: check if file exists and back it up\r\n if (fs.existsSync(absolutePath)) {\r\n existed = true;\r\n try {\r\n const stat = fs.statSync(absolutePath);\r\n fileSize = stat.size;\r\n const backupPath = path.join(backupDir, relativePath);\r\n this.ensureDirSync(path.dirname(backupPath));\r\n fs.copyFileSync(absolutePath, backupPath);\r\n } catch (err) {\r\n logWarning(`Failed to backup file ${relativePath}: ${(err as Error).message}`);\r\n return;\r\n }\r\n } else {\r\n existed = false;\r\n }\r\n }\r\n\r\n // Add entry to manifest\r\n manifest.fileBackups.push({\r\n filePath: relativePath,\r\n existed,\r\n size: fileSize,\r\n backedUpAt: new Date().toISOString(),\r\n });\r\n\r\n fs.writeFileSync(checkpoint.manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');\r\n quickLog(`[${new Date().toISOString()}] [Checkpoint] Backed up \"${relativePath}\" (existed=${existed}) in ${checkpointId}\\n`);\r\n } catch (error) {\r\n logWarning(`Failed to backup file before change: ${(error as Error).message}`);\r\n }\r\n }\r\n\r\n private resolveCheckpointFilePath(cwd: string, filePath: string): { absolutePath: string; relativePath: string } {\r\n const baseCwd = path.resolve(cwd);\r\n const absolutePath = path.isAbsolute(filePath)\r\n ? path.resolve(filePath)\r\n : path.resolve(baseCwd, filePath);\r\n\r\n let relativePath = path.relative(baseCwd, absolutePath).replace(/\\\\/g, '/');\r\n relativePath = relativePath.replace(/^\\.\\/+/, '');\r\n if (!relativePath) {\r\n relativePath = path.basename(absolutePath).replace(/\\\\/g, '/');\r\n }\r\n\r\n return { absolutePath, relativePath };\r\n }\r\n\r\n /**\r\n * Record a file operation in the checkpoint's operation log.\r\n * Called by file tools after successfully modifying a file.\r\n */\r\n recordFileOperation(\r\n checkpointId: string,\r\n type: 'create' | 'modify' | 'delete',\r\n filePath: string,\r\n toolName: string\r\n ): void {\r\n const checkpoint = this.checkpoints.find(cp => cp.id === checkpointId);\r\n if (!checkpoint || checkpoint.status !== 'active') return;\r\n\r\n try {\r\n const manifest = this.readManifestV2(checkpoint.manifestPath);\r\n manifest.operations.push({\r\n type,\r\n filePath,\r\n toolName,\r\n timestamp: new Date().toISOString(),\r\n });\r\n fs.writeFileSync(checkpoint.manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');\r\n } catch (error) {\r\n logWarning(`Failed to record file operation: ${(error as Error).message}`);\r\n }\r\n }\r\n\r\n // ── Session changes and diff ────────────────────────────────────────\r\n\r\n /**\r\n * Get session changes for a checkpoint (live calculation).\r\n * Returns added/modified/deleted file lists plus per-file line stats.\r\n */\r\n async getSessionChanges(checkpointId: string, handler?: RemoteFileHandler): Promise<{\r\n changes: CheckpointChanges;\r\n stats: { filePath: string; insertions: number; deletions: number }[];\r\n } | null> {\r\n const checkpoint = this.checkpoints.find(cp => cp.id === checkpointId);\r\n if (!checkpoint) return null;\r\n const isRemote = checkpoint.contextType !== 'local';\r\n if (isRemote && (!handler || !handler.isConnected())) {\r\n return null;\r\n }\r\n\r\n const changes = await this.calculateChanges(checkpoint, handler);\r\n const stats: { filePath: string; insertions: number; deletions: number }[] = [];\r\n\r\n const manifest = this.readManifest(checkpoint.manifestPath);\r\n\r\n // V2: use backup-based stats\r\n if (this.isV2Manifest(manifest)) {\r\n for (const backup of manifest.fileBackups) {\r\n const backupPath = path.join(path.dirname(checkpoint.manifestPath), 'backups', backup.filePath);\r\n\r\n if (isRemote && handler) {\r\n const remotePath = checkpoint.cwd + '/' + backup.filePath;\r\n try {\r\n if (backup.existed) {\r\n // Modified or possibly deleted\r\n const backupContent = fs.readFileSync(backupPath, 'utf-8');\r\n try {\r\n const currentContent = await handler.readFile(remotePath);\r\n if (backupContent !== currentContent) {\r\n const lineStat = this.calculateLineStatsFromContent(backupContent, currentContent);\r\n stats.push({ filePath: backup.filePath, ...lineStat });\r\n }\r\n } catch {\r\n // File was deleted\r\n const lines = backupContent.split('\\n').length;\r\n stats.push({ filePath: backup.filePath, insertions: 0, deletions: lines });\r\n }\r\n } else {\r\n // Created file\r\n try {\r\n const currentContent = await handler.readFile(remotePath);\r\n const lines = currentContent.split('\\n').length;\r\n stats.push({ filePath: backup.filePath, insertions: lines, deletions: 0 });\r\n } catch {\r\n // Created then deleted — no net change\r\n }\r\n }\r\n } catch {\r\n stats.push({ filePath: backup.filePath, insertions: 0, deletions: 0 });\r\n }\r\n } else {\r\n // Local\r\n const currentPath = path.join(checkpoint.cwd, backup.filePath);\r\n if (backup.existed) {\r\n if (fs.existsSync(currentPath)) {\r\n // Modified\r\n try {\r\n const lineStat = this.calculateLineStats(backupPath, currentPath);\r\n if (lineStat.insertions > 0 || lineStat.deletions > 0) {\r\n stats.push({ filePath: backup.filePath, ...lineStat });\r\n }\r\n } catch {\r\n stats.push({ filePath: backup.filePath, insertions: 0, deletions: 0 });\r\n }\r\n } else {\r\n // Deleted\r\n try {\r\n const content = fs.readFileSync(backupPath, 'utf-8');\r\n const lines = content.split('\\n').length;\r\n stats.push({ filePath: backup.filePath, insertions: 0, deletions: lines });\r\n } catch {\r\n stats.push({ filePath: backup.filePath, insertions: 0, deletions: 0 });\r\n }\r\n }\r\n } else {\r\n // Created\r\n if (fs.existsSync(currentPath)) {\r\n try {\r\n const content = fs.readFileSync(currentPath, 'utf-8');\r\n const lines = content.split('\\n').length;\r\n stats.push({ filePath: backup.filePath, insertions: lines, deletions: 0 });\r\n } catch {\r\n stats.push({ filePath: backup.filePath, insertions: 0, deletions: 0 });\r\n }\r\n }\r\n // If file doesn't exist — created then deleted, no stats\r\n }\r\n }\r\n }\r\n } else {\r\n // V1 legacy: use full-scan approach for older checkpoints\r\n await this.getSessionChangesV1(checkpoint, changes, stats, isRemote, handler);\r\n }\r\n\r\n return { changes, stats };\r\n }\r\n\r\n /**\r\n * Get session changes across ALL checkpoints (for session scope).\r\n * Aggregates backups from all checkpoints to find the original state of each file.\r\n */\r\n async getAggregatedSessionChanges(handler?: RemoteFileHandler): Promise<{\r\n changes: CheckpointChanges;\r\n stats: { filePath: string; insertions: number; deletions: number }[];\r\n } | null> {\r\n if (this.checkpoints.length === 0) return null;\r\n\r\n // Sort checkpoints by creation time (earliest first)\r\n const sorted = [...this.checkpoints].sort((a, b) => a.createdAtMs - b.createdAtMs);\r\n const firstCheckpoint = sorted[0];\r\n const isRemote = firstCheckpoint.contextType !== 'local';\r\n if (isRemote && (!handler || !handler.isConnected())) return null;\r\n\r\n // Collect original state for each unique file across all checkpoints\r\n // The FIRST backup for each file path is the true original\r\n const originalBackups = new Map<string, { existed: boolean; backupPath: string; cwd: string }>();\r\n\r\n for (const cp of sorted) {\r\n const manifest = this.readManifest(cp.manifestPath);\r\n if (!this.isV2Manifest(manifest)) continue;\r\n\r\n for (const backup of manifest.fileBackups) {\r\n if (!originalBackups.has(backup.filePath)) {\r\n const backupPath = path.join(path.dirname(cp.manifestPath), 'backups', backup.filePath);\r\n originalBackups.set(backup.filePath, {\r\n existed: backup.existed,\r\n backupPath,\r\n cwd: cp.cwd,\r\n });\r\n }\r\n }\r\n }\r\n\r\n const changes: CheckpointChanges = { added: [], modified: [], deleted: [] };\r\n const stats: { filePath: string; insertions: number; deletions: number }[] = [];\r\n const cwd = firstCheckpoint.cwd;\r\n\r\n for (const [filePath, original] of originalBackups) {\r\n if (isRemote && handler) {\r\n const remotePath = cwd + '/' + filePath;\r\n try {\r\n if (original.existed) {\r\n const backupContent = fs.readFileSync(original.backupPath, 'utf-8');\r\n try {\r\n const currentContent = await handler.readFile(remotePath);\r\n if (backupContent !== currentContent) {\r\n changes.modified.push(filePath);\r\n const lineStat = this.calculateLineStatsFromContent(backupContent, currentContent);\r\n stats.push({ filePath, ...lineStat });\r\n }\r\n } catch {\r\n changes.deleted.push(filePath);\r\n const lines = backupContent.split('\\n').length;\r\n stats.push({ filePath, insertions: 0, deletions: lines });\r\n }\r\n } else {\r\n try {\r\n const currentContent = await handler.readFile(remotePath);\r\n changes.added.push(filePath);\r\n const lines = currentContent.split('\\n').length;\r\n stats.push({ filePath, insertions: lines, deletions: 0 });\r\n } catch {\r\n // Created then deleted — no net change\r\n }\r\n }\r\n } catch {\r\n // Skip on error\r\n }\r\n } else {\r\n // Local\r\n const currentPath = path.join(cwd, filePath);\r\n if (original.existed) {\r\n if (fs.existsSync(currentPath)) {\r\n if (this.filesDiffer(original.backupPath, currentPath)) {\r\n changes.modified.push(filePath);\r\n const lineStat = this.calculateLineStats(original.backupPath, currentPath);\r\n stats.push({ filePath, ...lineStat });\r\n }\r\n } else {\r\n changes.deleted.push(filePath);\r\n try {\r\n const content = fs.readFileSync(original.backupPath, 'utf-8');\r\n const lines = content.split('\\n').length;\r\n stats.push({ filePath, insertions: 0, deletions: lines });\r\n } catch {\r\n stats.push({ filePath, insertions: 0, deletions: 0 });\r\n }\r\n }\r\n } else {\r\n if (fs.existsSync(currentPath)) {\r\n changes.added.push(filePath);\r\n try {\r\n const content = fs.readFileSync(currentPath, 'utf-8');\r\n const lines = content.split('\\n').length;\r\n stats.push({ filePath, insertions: lines, deletions: 0 });\r\n } catch {\r\n stats.push({ filePath, insertions: 0, deletions: 0 });\r\n }\r\n }\r\n // If doesn't exist — created then fully reverted, ignore\r\n }\r\n }\r\n }\r\n\r\n return { changes, stats };\r\n }\r\n\r\n /**\r\n * Get a unified diff for a single file within a checkpoint.\r\n * For V2 checkpoints: compares the backed-up original to the current version.\r\n * For V1 checkpoints: compares the full snapshot to the current version (legacy).\r\n */\r\n async getFileDiff(checkpointId: string, filePath: string, handler?: RemoteFileHandler): Promise<string | null> {\r\n const checkpoint = this.checkpoints.find(cp => cp.id === checkpointId);\r\n if (!checkpoint) return null;\r\n const normalizedPath = this.normalizeToRelativePath(filePath, checkpoint.cwd);\r\n const manifest = this.readManifest(checkpoint.manifestPath);\r\n\r\n if (this.isV2Manifest(manifest)) {\r\n return this.getFileDiffV2(checkpoint, manifest, normalizedPath, handler);\r\n } else {\r\n return this.getFileDiffV1(checkpoint, normalizedPath, handler);\r\n }\r\n }\r\n\r\n /**\r\n * Get a session-wide diff for a single file (across all checkpoints).\r\n * Finds the earliest backup of the file and compares to current state.\r\n */\r\n async getSessionFileDiff(filePath: string, handler?: RemoteFileHandler): Promise<string | null> {\r\n const sorted = [...this.checkpoints].sort((a, b) => a.createdAtMs - b.createdAtMs);\r\n\r\n for (const cp of sorted) {\r\n const manifest = this.readManifest(cp.manifestPath);\r\n if (!this.isV2Manifest(manifest)) continue;\r\n\r\n const normalizedPath = this.normalizeToRelativePath(filePath, cp.cwd);\r\n const backup = manifest.fileBackups.find(b => b.filePath === normalizedPath);\r\n if (backup) {\r\n return this.getFileDiffV2(cp, manifest, normalizedPath, handler);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Normalise a file path to be relative to the given cwd.\r\n * If the path is already relative, it is returned unchanged.\r\n * This handles the common case where the AI passes an absolute remote path\r\n * (e.g. /home/user/project/foo.ts) to the diff tool while the checkpoint\r\n * manifest stores relative paths (e.g. project/foo.ts).\r\n */\r\n private normalizeToRelativePath(filePath: string, cwd: string): string {\r\n if (!path.isAbsolute(filePath)) return filePath;\r\n try {\r\n const rel = path.relative(cwd, filePath).replace(/\\\\/g, '/');\r\n return rel || filePath;\r\n } catch {\r\n return filePath;\r\n }\r\n }\r\n\r\n /**\r\n * Get the initial checkpoint for the current chat session.\r\n */\r\n getInitialCheckpoint(): CheckpointMeta | null {\r\n if (this.checkpoints.length === 0) return null;\r\n return [...this.checkpoints].sort((a, b) => a.createdAtMs - b.createdAtMs)[0];\r\n }\r\n\r\n // ── Checkpoint lifecycle ────────────────────────────────────────────\r\n\r\n /**\r\n * Start a new checkpoint. With V2 (backup-on-write), this is nearly instant:\r\n * no file scanning or copying. Just creates the checkpoint metadata and an\r\n * empty manifest.\r\n */\r\n async startCheckpoint(params: {\r\n prompt: string;\r\n cwd: string;\r\n contextType: CheckpointContextType;\r\n conversationIndex: number;\r\n uiMessageIndex?: number;\r\n uiMessageId?: string;\r\n remoteSessionInfo?: RemoteSessionInfo;\r\n handler?: RemoteFileHandler;\r\n }): Promise<CheckpointMeta | null> {\r\n if (!this.currentChatId) {\r\n return null;\r\n }\r\n\r\n const checkpointId = this.generateCheckpointId();\r\n const checkpointDir = path.join(this.getChatDir(), checkpointId);\r\n const backupsDir = path.join(checkpointDir, 'backups');\r\n const manifestPath = path.join(checkpointDir, 'manifest.json');\r\n\r\n try {\r\n this.ensureDirSync(backupsDir);\r\n\r\n // Create an empty V2 manifest — backups will be added incrementally\r\n // as the AI tools modify files via backupFileBeforeChange()\r\n const manifest: CheckpointManifestV2 = {\r\n version: 2,\r\n createdAt: new Date().toISOString(),\r\n cwd: params.cwd,\r\n fileBackups: [],\r\n operations: [],\r\n };\r\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');\r\n\r\n const meta: CheckpointMeta = {\r\n id: checkpointId,\r\n prompt: params.prompt,\r\n createdAt: new Date().toISOString(),\r\n createdAtMs: Date.now(),\r\n cwd: params.cwd,\r\n contextType: params.contextType,\r\n remoteSessionInfo: params.remoteSessionInfo,\r\n conversationIndex: params.conversationIndex,\r\n uiMessageIndex: params.uiMessageIndex,\r\n uiMessageId: params.uiMessageId,\r\n // V2: snapshotDir points to 'backups' directory (only has backed-up files)\r\n snapshotDir: backupsDir,\r\n manifestPath,\r\n commands: [],\r\n toolCalls: [],\r\n status: 'active',\r\n };\r\n\r\n this.checkpoints.push(meta);\r\n this.saveIndex();\r\n\r\n quickLog(`[${new Date().toISOString()}] [Checkpoint] Created ${checkpointId} (${params.contextType}) cwd=\"${params.cwd}\"\\n`);\r\n\r\n return meta;\r\n } catch (error) {\r\n logError('Failed to create checkpoint', error as Error);\r\n return null;\r\n }\r\n }\r\n\r\n async finalizeCheckpoint(id: string, handler?: RemoteFileHandler): Promise<void> {\r\n const checkpoint = this.checkpoints.find(cp => cp.id === id);\r\n if (!checkpoint) return;\r\n\r\n if (this.discardedIds.has(id)) {\r\n this.discardCheckpoint(id);\r\n return;\r\n }\r\n\r\n try {\r\n const changes = await this.calculateChanges(checkpoint, handler);\r\n checkpoint.changes = changes;\r\n checkpoint.status = 'finalized';\r\n this.saveIndex();\r\n quickLog(`[${new Date().toISOString()}] [Checkpoint] Finalized ${id} — ${checkpoint.changes.modified.length} modified, ${checkpoint.changes.added.length} added, ${checkpoint.changes.deleted.length} deleted\\n`);\r\n } catch (error) {\r\n logWarning(`Failed to finalize checkpoint ${id}: ${(error as Error).message}`);\r\n }\r\n }\r\n\r\n recordToolCall(id: string, toolCall: CheckpointToolCall): void {\r\n const checkpoint = this.checkpoints.find(cp => cp.id === id);\r\n if (!checkpoint || checkpoint.status === 'discarded') return;\r\n\r\n if (toolCall.id && checkpoint.toolCalls.some(tc => tc.id === toolCall.id)) {\r\n return;\r\n }\r\n\r\n checkpoint.toolCalls.push(toolCall);\r\n\r\n if (toolCall.name === 'execute_command') {\r\n const command = toolCall.arguments?.CommandLine || toolCall.arguments?.command;\r\n const isShellInput = Boolean(toolCall.arguments?.shell_input);\r\n if (command && !isShellInput) {\r\n checkpoint.commands.push(String(command));\r\n }\r\n }\r\n\r\n if (toolCall.name === 'background_command') {\r\n const command = toolCall.arguments?.command;\r\n const action = toolCall.arguments?.action;\r\n if (command && action === 'start') {\r\n checkpoint.commands.push(String(command));\r\n }\r\n }\r\n\r\n this.saveIndex();\r\n }\r\n\r\n /**\r\n * Revert to a checkpoint. For V2 checkpoints, this is efficient:\r\n * only the files the AI actually touched are restored.\r\n *\r\n * - Files the AI created (existed=false): deleted\r\n * - Files the AI modified (existed=true): restored from backup\r\n */\r\n async revertToCheckpoint(id: string, handler?: RemoteFileHandler): Promise<{\r\n checkpoint: CheckpointMeta;\r\n restored: number;\r\n removed: number;\r\n errors: string[];\r\n }> {\r\n const checkpoint = this.checkpoints.find(cp => cp.id === id);\r\n if (!checkpoint) {\r\n throw new Error(`Checkpoint \"${id}\" not found`);\r\n }\r\n\r\n if (checkpoint.contextType !== 'local') {\r\n if (!handler || !handler.isConnected()) {\r\n const sessionType = checkpoint.contextType.toUpperCase();\r\n const sessionInfo = checkpoint.remoteSessionInfo;\r\n const target = sessionInfo?.connectionString || sessionInfo?.hostname || 'the remote machine';\r\n throw new Error(\r\n `This checkpoint was created during a ${sessionType} session (${target}). ` +\r\n `You are not currently connected to that session. Please reconnect to the ${sessionType} session first, then retry /revert.`\r\n );\r\n }\r\n }\r\n\r\n const manifest = this.readManifest(checkpoint.manifestPath);\r\n\r\n quickLog(`[${new Date().toISOString()}] [Checkpoint] Reverting to ${id} (${checkpoint.contextType}, ${this.isV2Manifest(manifest) ? 'V2' : 'V1'})\\n`);\r\n\r\n let result: { checkpoint: CheckpointMeta; restored: number; removed: number; errors: string[] };\r\n if (this.isV2Manifest(manifest)) {\r\n result = await this.revertV2(checkpoint, manifest, handler);\r\n } else {\r\n // Legacy V1 full-scan revert\r\n result = await (checkpoint.contextType !== 'local' && handler\r\n ? this.revertRemoteCheckpointV1(checkpoint, manifest as CheckpointManifestV1, handler)\r\n : this.revertLocalCheckpointV1(checkpoint, manifest as CheckpointManifestV1));\r\n }\r\n\r\n quickLog(`[${new Date().toISOString()}] [Checkpoint] Revert complete — restored=${result.restored}, removed=${result.removed}, errors=${result.errors.length}\\n`);\r\n return result;\r\n }\r\n\r\n markDiscarded(id: string): void {\r\n this.discardedIds.add(id);\r\n }\r\n\r\n removeCheckpointsFrom(id: string): void {\r\n const index = this.checkpoints.findIndex(cp => cp.id === id);\r\n if (index === -1) return;\r\n\r\n const toRemove = this.checkpoints.slice(index);\r\n for (const checkpoint of toRemove) {\r\n this.discardCheckpoint(checkpoint.id);\r\n }\r\n }\r\n\r\n discardCheckpointById(id: string): void {\r\n this.discardCheckpoint(id);\r\n }\r\n\r\n deleteCheckpointsForChat(chatId: string): void {\r\n const chatDir = path.join(this.baseDir, chatId);\r\n try {\r\n if (fs.existsSync(chatDir)) {\r\n fs.rmSync(chatDir, { recursive: true, force: true });\r\n }\r\n } catch (error) {\r\n logWarning(`Failed to delete checkpoints for chat ${chatId}: ${(error as Error).message}`);\r\n }\r\n\r\n if (this.currentChatId === chatId) {\r\n this.clear();\r\n }\r\n }\r\n\r\n // ── V2 Revert (backup-on-write) ────────────────────────────────────\r\n\r\n private async revertV2(\r\n checkpoint: CheckpointMeta,\r\n manifest: CheckpointManifestV2,\r\n handler?: RemoteFileHandler\r\n ): Promise<{\r\n checkpoint: CheckpointMeta;\r\n restored: number;\r\n removed: number;\r\n errors: string[];\r\n }> {\r\n const errors: string[] = [];\r\n let restored = 0;\r\n let removed = 0;\r\n\r\n const incrementalResult = await this.revertV2IncrementalBackups(checkpoint, manifest, handler);\r\n restored += incrementalResult.restored;\r\n removed += incrementalResult.removed;\r\n errors.push(...incrementalResult.errors);\r\n\r\n return { checkpoint, restored, removed, errors };\r\n }\r\n\r\n private async revertV2IncrementalBackups(\r\n checkpoint: CheckpointMeta,\r\n manifest: CheckpointManifestV2,\r\n handler?: RemoteFileHandler\r\n ): Promise<{ restored: number; removed: number; errors: string[] }> {\r\n const isRemote = checkpoint.contextType !== 'local' && handler && handler.isConnected();\r\n const errors: string[] = [];\r\n let restored = 0;\r\n let removed = 0;\r\n\r\n const backupsDir = path.join(path.dirname(checkpoint.manifestPath), 'backups');\r\n\r\n for (const backup of manifest.fileBackups) {\r\n const backupPath = path.join(backupsDir, backup.filePath);\r\n\r\n if (isRemote && handler) {\r\n const remotePath = checkpoint.cwd + '/' + backup.filePath;\r\n try {\r\n if (backup.existed) {\r\n // Restore original content\r\n const content = fs.readFileSync(backupPath, 'utf-8');\r\n const remoteDir = remotePath.substring(0, remotePath.lastIndexOf('/'));\r\n await handler.executeCommand(`mkdir -p \"${remoteDir}\"`);\r\n await handler.writeFile(remotePath, content);\r\n restored++;\r\n } else {\r\n // File was created by AI — delete it\r\n const result = await handler.executeCommand(`rm -f \"${remotePath}\"`);\r\n if (result.exitCode === 0) {\r\n removed++;\r\n } else {\r\n errors.push(`Failed to remove ${backup.filePath}: ${result.stderr}`);\r\n }\r\n }\r\n } catch (error) {\r\n errors.push(`Failed to revert ${backup.filePath}: ${(error as Error).message}`);\r\n }\r\n } else {\r\n // Local revert\r\n const targetPath = path.join(checkpoint.cwd, backup.filePath);\r\n try {\r\n if (backup.existed) {\r\n // Restore original content\r\n this.ensureDirSync(path.dirname(targetPath));\r\n fs.copyFileSync(backupPath, targetPath);\r\n restored++;\r\n } else {\r\n // File was created by AI — delete it\r\n if (fs.existsSync(targetPath)) {\r\n this.removeFileOrDirSync(targetPath);\r\n removed++;\r\n }\r\n }\r\n } catch (error) {\r\n errors.push(`Failed to revert ${backup.filePath}: ${(error as Error).message}`);\r\n }\r\n }\r\n }\r\n\r\n // Clean up empty directories left after deleting files\r\n if (!isRemote) {\r\n this.cleanupEmptyDirectories(checkpoint.cwd, manifest.fileBackups\r\n .filter(b => !b.existed)\r\n .map(b => b.filePath));\r\n } else if (handler) {\r\n await this.cleanupEmptyDirectoriesRemote(checkpoint.cwd, manifest.fileBackups\r\n .filter(b => !b.existed)\r\n .map(b => b.filePath), handler);\r\n }\r\n\r\n return { restored, removed, errors };\r\n }\r\n\r\n // ── V2 Diff ─────────────────────────────────────────────────────────\r\n\r\n private async getFileDiffV2(\r\n checkpoint: CheckpointMeta,\r\n manifest: CheckpointManifestV2,\r\n filePath: string,\r\n handler?: RemoteFileHandler\r\n ): Promise<string | null> {\r\n const backup = manifest.fileBackups.find(b => b.filePath === filePath);\r\n if (!backup) {\r\n return null; // File wasn't touched by AI in this checkpoint\r\n }\r\n\r\n const isRemote = checkpoint.contextType !== 'local';\r\n const backupPath = path.join(path.dirname(checkpoint.manifestPath), 'backups', filePath);\r\n\r\n if (isRemote) {\r\n if (!handler || !handler.isConnected()) return null;\r\n\r\n const remotePath = checkpoint.cwd + '/' + filePath;\r\n let currentContent: string | null = null;\r\n try {\r\n currentContent = await handler.readFile(remotePath);\r\n } catch {\r\n currentContent = null;\r\n }\r\n\r\n if (!backup.existed && currentContent !== null) {\r\n // Added file\r\n const lines = currentContent.split('\\n');\r\n let diff = `--- /dev/null\\n+++ b/${filePath}\\n@@ -0,0 +1,${lines.length} @@\\n`;\r\n diff += lines.map(l => `+${l}`).join('\\n');\r\n return diff;\r\n }\r\n\r\n if (backup.existed && currentContent === null) {\r\n // Deleted file\r\n try {\r\n const content = fs.readFileSync(backupPath, 'utf-8');\r\n const lines = content.split('\\n');\r\n let diff = `--- a/${filePath}\\n+++ /dev/null\\n@@ -1,${lines.length} +0,0 @@\\n`;\r\n diff += lines.map(l => `-${l}`).join('\\n');\r\n return diff;\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n if (backup.existed && currentContent !== null) {\r\n // Modified file\r\n try {\r\n const oldContent = fs.readFileSync(backupPath, 'utf-8');\r\n return this.generateUnifiedDiff(filePath, oldContent, currentContent);\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n // Created then deleted — no diff\r\n return null;\r\n }\r\n\r\n // Local diff\r\n const currentPath = path.join(checkpoint.cwd, filePath);\r\n const currentExists = fs.existsSync(currentPath);\r\n\r\n if (!backup.existed && currentExists) {\r\n // Added file\r\n try {\r\n const content = fs.readFileSync(currentPath, 'utf-8');\r\n const lines = content.split('\\n');\r\n let diff = `--- /dev/null\\n+++ b/${filePath}\\n@@ -0,0 +1,${lines.length} @@\\n`;\r\n diff += lines.map(l => `+${l}`).join('\\n');\r\n return diff;\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n if (backup.existed && !currentExists) {\r\n // Deleted file\r\n try {\r\n const content = fs.readFileSync(backupPath, 'utf-8');\r\n const lines = content.split('\\n');\r\n let diff = `--- a/${filePath}\\n+++ /dev/null\\n@@ -1,${lines.length} +0,0 @@\\n`;\r\n diff += lines.map(l => `-${l}`).join('\\n');\r\n return diff;\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n if (backup.existed && currentExists) {\r\n // Modified file\r\n try {\r\n const oldContent = fs.readFileSync(backupPath, 'utf-8');\r\n const newContent = fs.readFileSync(currentPath, 'utf-8');\r\n return this.generateUnifiedDiff(filePath, oldContent, newContent);\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n // Created then deleted\r\n return null;\r\n }\r\n\r\n // ── V1 Legacy Support ───────────────────────────────────────────────\r\n\r\n /**\r\n * V1 diff: uses full snapshot files (legacy checkpoints).\r\n */\r\n private async getFileDiffV1(\r\n checkpoint: CheckpointMeta,\r\n filePath: string,\r\n handler?: RemoteFileHandler\r\n ): Promise<string | null> {\r\n const isRemote = checkpoint.contextType !== 'local';\r\n const snapshotPath = path.join(checkpoint.snapshotDir, filePath);\r\n const snapshotExists = fs.existsSync(snapshotPath);\r\n\r\n if (isRemote) {\r\n if (!handler || !handler.isConnected()) return null;\r\n\r\n const remotePath = checkpoint.cwd + '/' + filePath;\r\n let remoteContent: string | null = null;\r\n try {\r\n remoteContent = await handler.readFile(remotePath);\r\n } catch {\r\n remoteContent = null;\r\n }\r\n\r\n if (!snapshotExists && remoteContent === null) return null;\r\n\r\n if (!snapshotExists && remoteContent !== null) {\r\n const lines = remoteContent.split('\\n');\r\n let diff = `--- /dev/null\\n+++ b/${filePath}\\n@@ -0,0 +1,${lines.length} @@\\n`;\r\n diff += lines.map(l => `+${l}`).join('\\n');\r\n return diff;\r\n }\r\n\r\n if (snapshotExists && remoteContent === null) {\r\n try {\r\n const content = fs.readFileSync(snapshotPath, 'utf-8');\r\n const lines = content.split('\\n');\r\n let diff = `--- a/${filePath}\\n+++ /dev/null\\n@@ -1,${lines.length} +0,0 @@\\n`;\r\n diff += lines.map(l => `-${l}`).join('\\n');\r\n return diff;\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n try {\r\n const oldContent = fs.readFileSync(snapshotPath, 'utf-8');\r\n const newContent = remoteContent ?? '';\r\n return this.generateUnifiedDiff(filePath, oldContent, newContent);\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n // Local V1 diff\r\n const currentPath = path.join(checkpoint.cwd, filePath);\r\n const currentExists = fs.existsSync(currentPath);\r\n\r\n if (!snapshotExists && !currentExists) return null;\r\n\r\n if (!snapshotExists && currentExists) {\r\n try {\r\n const content = fs.readFileSync(currentPath, 'utf-8');\r\n const lines = content.split('\\n');\r\n let diff = `--- /dev/null\\n+++ b/${filePath}\\n@@ -0,0 +1,${lines.length} @@\\n`;\r\n diff += lines.map(l => `+${l}`).join('\\n');\r\n return diff;\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n if (snapshotExists && !currentExists) {\r\n try {\r\n const content = fs.readFileSync(snapshotPath, 'utf-8');\r\n const lines = content.split('\\n');\r\n let diff = `--- a/${filePath}\\n+++ /dev/null\\n@@ -1,${lines.length} +0,0 @@\\n`;\r\n diff += lines.map(l => `-${l}`).join('\\n');\r\n return diff;\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n try {\r\n const oldContent = fs.readFileSync(snapshotPath, 'utf-8');\r\n const newContent = fs.readFileSync(currentPath, 'utf-8');\r\n return this.generateUnifiedDiff(filePath, oldContent, newContent);\r\n } catch {\r\n return `[Binary or unreadable file: ${filePath}]`;\r\n }\r\n }\r\n\r\n private async getSessionChangesV1(\r\n checkpoint: CheckpointMeta,\r\n changes: CheckpointChanges,\r\n stats: { filePath: string; insertions: number; deletions: number }[],\r\n isRemote: boolean,\r\n handler?: RemoteFileHandler\r\n ): Promise<void> {\r\n if (!isRemote) {\r\n for (const filePath of changes.modified) {\r\n const snapshotPath = path.join(checkpoint.snapshotDir, filePath);\r\n const currentPath = path.join(checkpoint.cwd, filePath);\r\n const lineStat = this.calculateLineStats(snapshotPath, currentPath);\r\n stats.push({ filePath, ...lineStat });\r\n }\r\n\r\n for (const filePath of changes.added) {\r\n const currentPath = path.join(checkpoint.cwd, filePath);\r\n try {\r\n const content = fs.readFileSync(currentPath, 'utf-8');\r\n const lines = content.split('\\n').length;\r\n stats.push({ filePath, insertions: lines, deletions: 0 });\r\n } catch {\r\n stats.push({ filePath, insertions: 0, deletions: 0 });\r\n }\r\n }\r\n\r\n for (const filePath of changes.deleted) {\r\n const snapshotPath = path.join(checkpoint.snapshotDir, filePath);\r\n try {\r\n const content = fs.readFileSync(snapshotPath, 'utf-8');\r\n const lines = content.split('\\n').length;\r\n stats.push({ filePath, insertions: 0, deletions: lines });\r\n } catch {\r\n stats.push({ filePath, insertions: 0, deletions: 0 });\r\n }\r\n }\r\n } else if (handler) {\r\n for (const filePath of changes.modified) {\r\n const snapshotPath = path.join(checkpoint.snapshotDir, filePath);\r\n const remotePath = checkpoint.cwd + '/' + filePath;\r\n try {\r\n const snapshotContent = fs.readFileSync(snapshotPath, 'utf-8');\r\n const remoteContent = await handler.readFile(remotePath);\r\n const lineStat = this.calculateLineStatsFromContent(snapshotContent, remoteContent);\r\n stats.push({ filePath, ...lineStat });\r\n } catch {\r\n stats.push({ filePath, insertions: 0, deletions: 0 });\r\n }\r\n }\r\n\r\n for (const filePath of changes.added) {\r\n const remotePath = checkpoint.cwd + '/' + filePath;\r\n try {\r\n const remoteContent = await handler.readFile(remotePath);\r\n const lines = remoteContent.split('\\n').length;\r\n stats.push({ filePath, insertions: lines, deletions: 0 });\r\n } catch {\r\n stats.push({ filePath, insertions: 0, deletions: 0 });\r\n }\r\n }\r\n\r\n for (const filePath of changes.deleted) {\r\n const snapshotPath = path.join(checkpoint.snapshotDir, filePath);\r\n try {\r\n const content = fs.readFileSync(snapshotPath, 'utf-8');\r\n const lines = content.split('\\n').length;\r\n stats.push({ filePath, insertions: 0, deletions: lines });\r\n } catch {\r\n stats.push({ filePath, insertions: 0, deletions: 0 });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * V1 local revert: legacy full-scan approach.\r\n */\r\n private async revertLocalCheckpointV1(\r\n checkpoint: CheckpointMeta,\r\n manifest: CheckpointManifestV1\r\n ): Promise<{\r\n checkpoint: CheckpointMeta;\r\n restored: number;\r\n removed: number;\r\n errors: string[];\r\n }> {\r\n const manifestSet = new Set(manifest.files.map(file => file.path));\r\n const currentFiles = await this.scanLocalFiles(checkpoint.cwd);\r\n const errors: string[] = [];\r\n\r\n let removed = 0;\r\n for (const filePath of currentFiles) {\r\n if (!manifestSet.has(filePath)) {\r\n const absolutePath = path.join(checkpoint.cwd, filePath);\r\n try {\r\n this.removeFileOrDirSync(absolutePath);\r\n removed++;\r\n } catch (error) {\r\n errors.push(`Failed to remove ${filePath}: ${(error as Error).message}`);\r\n }\r\n }\r\n }\r\n\r\n let restored = 0;\r\n for (const file of manifest.files) {\r\n const sourcePath = path.join(checkpoint.snapshotDir, file.path);\r\n const targetPath = path.join(checkpoint.cwd, file.path);\r\n\r\n try {\r\n this.ensureDirSync(path.dirname(targetPath));\r\n this.removeFileOrDirSync(targetPath);\r\n fs.copyFileSync(sourcePath, targetPath);\r\n restored++;\r\n } catch (error) {\r\n errors.push(`Failed to restore ${file.path}: ${(error as Error).message}`);\r\n }\r\n }\r\n\r\n // Clean up empty directories\r\n const manifestDirs = new Set<string>();\r\n for (const file of manifest.files) {\r\n let dir = path.dirname(file.path);\r\n while (dir && dir !== '.' && dir !== '/') {\r\n manifestDirs.add(dir);\r\n dir = path.dirname(dir);\r\n }\r\n }\r\n\r\n try {\r\n const allDirs = this.scanLocalDirectories(checkpoint.cwd, checkpoint.cwd);\r\n allDirs.sort((a, b) => b.split(path.sep).length - a.split(path.sep).length);\r\n for (const dir of allDirs) {\r\n if (!manifestDirs.has(dir)) {\r\n const absDir = path.join(checkpoint.cwd, dir);\r\n try {\r\n const entries = fs.readdirSync(absDir);\r\n if (entries.length === 0) {\r\n fs.rmdirSync(absDir);\r\n removed++;\r\n }\r\n } catch {\r\n // Skip\r\n }\r\n }\r\n }\r\n } catch {\r\n // Non-critical\r\n }\r\n\r\n return { checkpoint, restored, removed, errors };\r\n }\r\n\r\n /**\r\n * V1 remote revert: legacy full-scan approach.\r\n */\r\n private async revertRemoteCheckpointV1(\r\n checkpoint: CheckpointMeta,\r\n manifest: CheckpointManifestV1,\r\n handler: RemoteFileHandler\r\n ): Promise<{\r\n checkpoint: CheckpointMeta;\r\n restored: number;\r\n removed: number;\r\n errors: string[];\r\n }> {\r\n const manifestSet = new Set(manifest.files.map(file => file.path));\r\n const currentFiles = await this.scanRemoteFiles(checkpoint.cwd, handler);\r\n const errors: string[] = [];\r\n\r\n let removed = 0;\r\n for (const filePath of currentFiles) {\r\n if (!manifestSet.has(filePath)) {\r\n const remotePath = checkpoint.cwd + '/' + filePath;\r\n try {\r\n const result = await handler.executeCommand(`rm -f \"${remotePath}\"`);\r\n if (result.exitCode === 0) {\r\n removed++;\r\n } else {\r\n errors.push(`Failed to remove ${filePath}: ${result.stderr}`);\r\n }\r\n } catch (error) {\r\n errors.push(`Failed to remove ${filePath}: ${(error as Error).message}`);\r\n }\r\n }\r\n }\r\n\r\n let restored = 0;\r\n for (const file of manifest.files) {\r\n const localSnapshotPath = path.join(checkpoint.snapshotDir, file.path);\r\n const remotePath = checkpoint.cwd + '/' + file.path;\r\n\r\n try {\r\n const content = fs.readFileSync(localSnapshotPath, 'utf-8');\r\n const remoteDir = remotePath.substring(0, remotePath.lastIndexOf('/'));\r\n await handler.executeCommand(`mkdir -p \"${remoteDir}\"`);\r\n await handler.writeFile(remotePath, content);\r\n restored++;\r\n } catch (error) {\r\n errors.push(`Failed to restore ${file.path}: ${(error as Error).message}`);\r\n }\r\n }\r\n\r\n // Clean up empty directories\r\n const manifestDirs = new Set<string>();\r\n for (const file of manifest.files) {\r\n let dir = file.path.substring(0, file.path.lastIndexOf('/'));\r\n while (dir && dir !== '.' && dir !== '/') {\r\n manifestDirs.add(dir);\r\n const lastSlash = dir.lastIndexOf('/');\r\n dir = lastSlash > 0 ? dir.substring(0, lastSlash) : '';\r\n }\r\n }\r\n\r\n try {\r\n const findDirsCmd = `find \"${checkpoint.cwd}\" -mindepth 1 -type d 2>/dev/null`;\r\n const dirsResult = await handler.executeCommand(findDirsCmd);\r\n if (dirsResult.exitCode === 0 && dirsResult.stdout.trim()) {\r\n const cwdPrefix = checkpoint.cwd.endsWith('/') ? checkpoint.cwd : checkpoint.cwd + '/';\r\n const remoteDirs = dirsResult.stdout\r\n .split('\\n')\r\n .map((l: string) => l.trim())\r\n .filter((l: string) => l.length > 0 && l.startsWith(cwdPrefix))\r\n .map((l: string) => l.substring(cwdPrefix.length))\r\n .filter((relPath: string) => relPath.length > 0);\r\n\r\n remoteDirs.sort((a: string, b: string) => b.split('/').length - a.split('/').length);\r\n\r\n for (const dir of remoteDirs) {\r\n if (!manifestDirs.has(dir)) {\r\n const remoteDirPath = checkpoint.cwd + '/' + dir;\r\n try {\r\n const rmResult = await handler.executeCommand(`rmdir \"${remoteDirPath}\" 2>/dev/null`);\r\n if (rmResult.exitCode === 0) {\r\n removed++;\r\n }\r\n } catch {\r\n // Skip\r\n }\r\n }\r\n }\r\n }\r\n } catch {\r\n // Non-critical\r\n }\r\n\r\n return { checkpoint, restored, removed, errors };\r\n }\r\n\r\n // ── Change calculation ──────────────────────────────────────────────\r\n\r\n private async calculateChanges(checkpoint: CheckpointMeta, handler?: RemoteFileHandler): Promise<CheckpointChanges> {\r\n const manifest = this.readManifest(checkpoint.manifestPath);\r\n\r\n if (this.isV2Manifest(manifest)) {\r\n return this.calculateChangesV2(checkpoint, manifest, handler);\r\n } else {\r\n return this.calculateChangesV1(checkpoint, manifest as CheckpointManifestV1, handler);\r\n }\r\n }\r\n\r\n /**\r\n * V2: Calculate changes from backup entries only.\r\n * No directory scanning needed — we only track files the AI touched.\r\n */\r\n private async calculateChangesV2(\r\n checkpoint: CheckpointMeta,\r\n manifest: CheckpointManifestV2,\r\n handler?: RemoteFileHandler\r\n ): Promise<CheckpointChanges> {\r\n const isRemote = checkpoint.contextType !== 'local' && handler && handler.isConnected();\r\n const added: string[] = [];\r\n const modified: string[] = [];\r\n const deleted: string[] = [];\r\n\r\n for (const backup of manifest.fileBackups) {\r\n const backupPath = path.join(path.dirname(checkpoint.manifestPath), 'backups', backup.filePath);\r\n\r\n if (isRemote && handler) {\r\n const remotePath = checkpoint.cwd + '/' + backup.filePath;\r\n try {\r\n if (backup.existed) {\r\n try {\r\n const remoteContent = await handler.readFile(remotePath);\r\n const backupContent = fs.readFileSync(backupPath, 'utf-8');\r\n if (remoteContent !== backupContent) {\r\n modified.push(backup.filePath);\r\n }\r\n } catch {\r\n deleted.push(backup.filePath);\r\n }\r\n } else {\r\n try {\r\n await handler.readFile(remotePath);\r\n added.push(backup.filePath);\r\n } catch {\r\n // Created then deleted — no net change\r\n }\r\n }\r\n } catch {\r\n // Skip on error\r\n }\r\n } else {\r\n // Local\r\n const currentPath = path.join(checkpoint.cwd, backup.filePath);\r\n if (backup.existed) {\r\n if (fs.existsSync(currentPath)) {\r\n if (this.filesDiffer(backupPath, currentPath)) {\r\n modified.push(backup.filePath);\r\n }\r\n } else {\r\n deleted.push(backup.filePath);\r\n }\r\n } else {\r\n if (fs.existsSync(currentPath)) {\r\n added.push(backup.filePath);\r\n }\r\n // If doesn't exist — created then deleted, no change\r\n }\r\n }\r\n }\r\n\r\n return {\r\n added: Array.from(new Set(added)),\r\n modified: Array.from(new Set(modified)),\r\n deleted: Array.from(new Set(deleted)),\r\n };\r\n }\r\n\r\n /**\r\n * V1 legacy: full directory scan approach.\r\n */\r\n private async calculateChangesV1(\r\n checkpoint: CheckpointMeta,\r\n manifest: CheckpointManifestV1,\r\n handler?: RemoteFileHandler\r\n ): Promise<CheckpointChanges> {\r\n const manifestSet = new Set(manifest.files.map(file => file.path));\r\n const isRemote = checkpoint.contextType !== 'local' && handler && handler.isConnected();\r\n const currentFiles = isRemote\r\n ? await this.scanRemoteFiles(checkpoint.cwd, handler!)\r\n : await this.scanLocalFiles(checkpoint.cwd);\r\n const currentSet = new Set(currentFiles);\r\n\r\n const added: string[] = [];\r\n const deleted: string[] = [];\r\n const modified: string[] = [];\r\n\r\n for (const filePath of currentFiles) {\r\n if (!manifestSet.has(filePath)) {\r\n added.push(filePath);\r\n }\r\n }\r\n\r\n for (const file of manifest.files) {\r\n if (!currentSet.has(file.path)) {\r\n deleted.push(file.path);\r\n continue;\r\n }\r\n\r\n if (isRemote && handler) {\r\n try {\r\n const remotePath = checkpoint.cwd + '/' + file.path;\r\n const remoteContent = await handler.readFile(remotePath);\r\n const snapshotPath = path.join(checkpoint.snapshotDir, file.path);\r\n const snapshotContent = fs.readFileSync(snapshotPath, 'utf-8');\r\n if (remoteContent !== snapshotContent) {\r\n modified.push(file.path);\r\n }\r\n } catch {\r\n modified.push(file.path);\r\n }\r\n } else {\r\n const currentPath = path.join(checkpoint.cwd, file.path);\r\n const snapshotPath = path.join(checkpoint.snapshotDir, file.path);\r\n if (this.filesDiffer(snapshotPath, currentPath)) {\r\n modified.push(file.path);\r\n }\r\n }\r\n }\r\n\r\n return { added, modified, deleted };\r\n }\r\n\r\n // ── Helpers: directory cleanup ──────────────────────────────────────\r\n\r\n /**\r\n * Clean up empty directories after deleting files that the AI created.\r\n */\r\n private cleanupEmptyDirectories(cwd: string, deletedRelPaths: string[]): void {\r\n // Gather unique parent directories of deleted files, sorted deepest first\r\n const dirs = new Set<string>();\r\n for (const relPath of deletedRelPaths) {\r\n let dir = path.dirname(relPath);\r\n while (dir && dir !== '.' && dir !== '/' && dir !== '\\\\') {\r\n dirs.add(dir);\r\n dir = path.dirname(dir);\r\n }\r\n }\r\n\r\n const sortedDirs = Array.from(dirs).sort(\r\n (a, b) => b.split('/').length - a.split('/').length\r\n );\r\n\r\n for (const dir of sortedDirs) {\r\n const absDir = path.join(cwd, dir);\r\n try {\r\n if (fs.existsSync(absDir)) {\r\n const entries = fs.readdirSync(absDir);\r\n if (entries.length === 0) {\r\n fs.rmdirSync(absDir);\r\n }\r\n }\r\n } catch {\r\n // Best-effort\r\n }\r\n }\r\n }\r\n\r\n private async cleanupEmptyDirectoriesRemote(\r\n cwd: string,\r\n deletedRelPaths: string[],\r\n handler: RemoteFileHandler\r\n ): Promise<void> {\r\n const dirs = new Set<string>();\r\n for (const relPath of deletedRelPaths) {\r\n let dir = relPath.substring(0, relPath.lastIndexOf('/'));\r\n while (dir && dir !== '.' && dir !== '/') {\r\n dirs.add(dir);\r\n const lastSlash = dir.lastIndexOf('/');\r\n dir = lastSlash > 0 ? dir.substring(0, lastSlash) : '';\r\n }\r\n }\r\n\r\n const sortedDirs = Array.from(dirs).sort(\r\n (a, b) => b.split('/').length - a.split('/').length\r\n );\r\n\r\n for (const dir of sortedDirs) {\r\n const remoteDirPath = cwd + '/' + dir;\r\n try {\r\n await handler.executeCommand(`rmdir \"${remoteDirPath}\" 2>/dev/null`);\r\n } catch {\r\n // Best-effort\r\n }\r\n }\r\n }\r\n\r\n // ── Helpers: line stats and diff generation ─────────────────────────\r\n\r\n private calculateLineStats(snapshotPath: string, currentPath: string): { insertions: number; deletions: number } {\r\n try {\r\n const oldContent = fs.readFileSync(snapshotPath, 'utf-8');\r\n const newContent = fs.readFileSync(currentPath, 'utf-8');\r\n return this.calculateLineStatsFromContent(oldContent, newContent);\r\n } catch {\r\n return { insertions: 0, deletions: 0 };\r\n }\r\n }\r\n\r\n private calculateLineStatsFromContent(oldContent: string, newContent: string): { insertions: number; deletions: number } {\r\n const oldLines = oldContent.split('\\n');\r\n const newLines = newContent.split('\\n');\r\n\r\n const oldSet = new Map<string, number>();\r\n for (const line of oldLines) {\r\n oldSet.set(line, (oldSet.get(line) || 0) + 1);\r\n }\r\n const newSet = new Map<string, number>();\r\n for (const line of newLines) {\r\n newSet.set(line, (newSet.get(line) || 0) + 1);\r\n }\r\n\r\n let deletions = 0;\r\n for (const [line, count] of oldSet) {\r\n const newCount = newSet.get(line) || 0;\r\n if (newCount < count) {\r\n deletions += count - newCount;\r\n }\r\n }\r\n\r\n let insertions = 0;\r\n for (const [line, count] of newSet) {\r\n const oldCount = oldSet.get(line) || 0;\r\n if (oldCount < count) {\r\n insertions += count - oldCount;\r\n }\r\n }\r\n\r\n return { insertions, deletions };\r\n }\r\n\r\n private generateUnifiedDiff(filePath: string, oldContent: string, newContent: string): string {\r\n const oldLines = oldContent.split('\\n');\r\n const newLines = newContent.split('\\n');\r\n\r\n let result = `--- a/${filePath}\\n+++ b/${filePath}\\n`;\r\n\r\n const hunks = this.computeHunks(oldLines, newLines);\r\n\r\n if (hunks.length === 0) {\r\n return `No differences found in ${filePath}`;\r\n }\r\n\r\n for (const hunk of hunks) {\r\n result += `@@ -${hunk.oldStart + 1},${hunk.oldCount} +${hunk.newStart + 1},${hunk.newCount} @@\\n`;\r\n for (const line of hunk.lines) {\r\n result += line + '\\n';\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private computeHunks(oldLines: string[], newLines: string[]): Array<{\r\n oldStart: number; oldCount: number;\r\n newStart: number; newCount: number;\r\n lines: string[];\r\n }> {\r\n const lcs = this.longestCommonSubsequence(oldLines, newLines);\r\n const editScript: Array<{ type: 'keep' | 'delete' | 'insert'; oldIdx: number; newIdx: number; line: string }> = [];\r\n\r\n let oldIdx = 0;\r\n let newIdx = 0;\r\n let lcsIdx = 0;\r\n\r\n while (oldIdx < oldLines.length || newIdx < newLines.length) {\r\n if (lcsIdx < lcs.length && oldIdx < oldLines.length && newIdx < newLines.length &&\r\n oldLines[oldIdx] === lcs[lcsIdx] && newLines[newIdx] === lcs[lcsIdx]) {\r\n editScript.push({ type: 'keep', oldIdx, newIdx, line: oldLines[oldIdx] });\r\n oldIdx++;\r\n newIdx++;\r\n lcsIdx++;\r\n } else if (oldIdx < oldLines.length && (lcsIdx >= lcs.length || oldLines[oldIdx] !== lcs[lcsIdx])) {\r\n editScript.push({ type: 'delete', oldIdx, newIdx, line: oldLines[oldIdx] });\r\n oldIdx++;\r\n } else if (newIdx < newLines.length) {\r\n editScript.push({ type: 'insert', oldIdx, newIdx, line: newLines[newIdx] });\r\n newIdx++;\r\n }\r\n }\r\n\r\n const CONTEXT = 3;\r\n const hunks: Array<{ oldStart: number; oldCount: number; newStart: number; newCount: number; lines: string[] }> = [];\r\n\r\n let currentHunk: { oldStart: number; oldCount: number; newStart: number; newCount: number; lines: string[] } | null = null;\r\n let contextCounter = 0;\r\n\r\n for (let i = 0; i < editScript.length; i++) {\r\n const edit = editScript[i];\r\n\r\n if (edit.type !== 'keep') {\r\n if (!currentHunk) {\r\n const contextStart = Math.max(0, i - CONTEXT);\r\n currentHunk = {\r\n oldStart: editScript[contextStart]?.oldIdx ?? edit.oldIdx,\r\n oldCount: 0,\r\n newStart: editScript[contextStart]?.newIdx ?? edit.newIdx,\r\n newCount: 0,\r\n lines: [],\r\n };\r\n for (let j = contextStart; j < i; j++) {\r\n if (editScript[j].type === 'keep') {\r\n currentHunk.lines.push(` ${editScript[j].line}`);\r\n currentHunk.oldCount++;\r\n currentHunk.newCount++;\r\n }\r\n }\r\n }\r\n\r\n if (edit.type === 'delete') {\r\n currentHunk.lines.push(`-${edit.line}`);\r\n currentHunk.oldCount++;\r\n } else {\r\n currentHunk.lines.push(`+${edit.line}`);\r\n currentHunk.newCount++;\r\n }\r\n contextCounter = 0;\r\n } else if (currentHunk) {\r\n contextCounter++;\r\n if (contextCounter <= CONTEXT) {\r\n currentHunk.lines.push(` ${edit.line}`);\r\n currentHunk.oldCount++;\r\n currentHunk.newCount++;\r\n } else {\r\n hunks.push(currentHunk);\r\n currentHunk = null;\r\n contextCounter = 0;\r\n }\r\n }\r\n }\r\n\r\n if (currentHunk) {\r\n hunks.push(currentHunk);\r\n }\r\n\r\n return hunks;\r\n }\r\n\r\n private longestCommonSubsequence(a: string[], b: string[]): string[] {\r\n if (a.length > 1000 || b.length > 1000) {\r\n return this.simpleLCS(a, b);\r\n }\r\n\r\n const m = a.length;\r\n const n = b.length;\r\n const dp: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));\r\n\r\n for (let i = 1; i <= m; i++) {\r\n for (let j = 1; j <= n; j++) {\r\n if (a[i - 1] === b[j - 1]) {\r\n dp[i][j] = dp[i - 1][j - 1] + 1;\r\n } else {\r\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\r\n }\r\n }\r\n }\r\n\r\n const result: string[] = [];\r\n let i = m, j = n;\r\n while (i > 0 && j > 0) {\r\n if (a[i - 1] === b[j - 1]) {\r\n result.unshift(a[i - 1]);\r\n i--;\r\n j--;\r\n } else if (dp[i - 1][j] > dp[i][j - 1]) {\r\n i--;\r\n } else {\r\n j--;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private simpleLCS(a: string[], b: string[]): string[] {\r\n const bMap = new Map<string, number[]>();\r\n for (let i = 0; i < b.length; i++) {\r\n const positions = bMap.get(b[i]) || [];\r\n positions.push(i);\r\n bMap.set(b[i], positions);\r\n }\r\n\r\n const result: string[] = [];\r\n let lastMatchB = -1;\r\n for (let i = 0; i < a.length; i++) {\r\n const positions = bMap.get(a[i]);\r\n if (positions) {\r\n for (const pos of positions) {\r\n if (pos > lastMatchB) {\r\n result.push(a[i]);\r\n lastMatchB = pos;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // ── Helpers: file operations ────────────────────────────────────────\r\n\r\n private filesDiffer(snapshotPath: string, currentPath: string): boolean {\r\n try {\r\n const snapStat = fs.statSync(snapshotPath);\r\n const currStat = fs.statSync(currentPath);\r\n if (snapStat.size !== currStat.size) {\r\n return true;\r\n }\r\n\r\n const snapBuffer = fs.readFileSync(snapshotPath);\r\n const currBuffer = fs.readFileSync(currentPath);\r\n if (snapBuffer.length !== currBuffer.length) {\r\n return true;\r\n }\r\n\r\n return !snapBuffer.equals(currBuffer);\r\n } catch {\r\n return true;\r\n }\r\n }\r\n\r\n private removeFileOrDirSync(targetPath: string): void {\r\n if (!fs.existsSync(targetPath)) return;\r\n\r\n const stat = fs.lstatSync(targetPath);\r\n if (stat.isDirectory()) {\r\n fs.rmSync(targetPath, { recursive: true, force: true });\r\n return;\r\n }\r\n\r\n fs.rmSync(targetPath, { force: true });\r\n }\r\n\r\n // ── Helpers: manifest & index I/O ───────────────────────────────────\r\n\r\n private readManifest(manifestPath: string): CheckpointManifest {\r\n const raw = fs.readFileSync(manifestPath, 'utf-8');\r\n return JSON.parse(raw) as CheckpointManifest;\r\n }\r\n\r\n private readManifestV2(manifestPath: string): CheckpointManifestV2 {\r\n const raw = fs.readFileSync(manifestPath, 'utf-8');\r\n const manifest = JSON.parse(raw);\r\n // Already V2 or convert\r\n if (manifest.version === 2) {\r\n return manifest as CheckpointManifestV2;\r\n }\r\n // Return default V2 structure if called on an unexpected manifest\r\n return {\r\n version: 2,\r\n createdAt: manifest.createdAt || new Date().toISOString(),\r\n cwd: manifest.cwd || '',\r\n fileBackups: [],\r\n operations: [],\r\n };\r\n }\r\n\r\n private isV2Manifest(manifest: CheckpointManifest): manifest is CheckpointManifestV2 {\r\n return (manifest as any).version === 2;\r\n }\r\n\r\n // ── Helpers: file scanning (only used for V1 legacy) ────────────────\r\n\r\n private async scanLocalFiles(cwd: string): Promise<string[]> {\r\n const fg = (await import('fast-glob')).default;\r\n const files = await fg(['**/*'], {\r\n cwd,\r\n dot: true,\r\n onlyFiles: true,\r\n followSymbolicLinks: false,\r\n unique: true,\r\n ignore: [\r\n '**/.git/**', '**/node_modules/**', '**/dist/**', '**/build/**',\r\n '**/out/**', '**/.next/**', '**/.turbo/**', '**/.cache/**',\r\n '**/coverage/**', '**/__pycache__/**', '**/.venv/**', '**/venv/**',\r\n '**/.idea/**', '**/.vscode/**', '**/.DS_Store', '**/Thumbs.db',\r\n '**/.centaurus/**',\r\n ],\r\n }) as string[];\r\n\r\n return files.map((file) => file.replace(/\\\\/g, '/'));\r\n }\r\n\r\n private scanLocalDirectories(rootDir: string, cwd: string): string[] {\r\n const dirs: string[] = [];\r\n const ignoreDirs = new Set([\r\n '.git', 'node_modules', 'dist', 'build', 'out',\r\n '.next', '.turbo', '.cache', 'coverage',\r\n '__pycache__', '.venv', 'venv', '.idea', '.vscode', '.centaurus',\r\n ]);\r\n\r\n const walk = (dir: string) => {\r\n try {\r\n const entries = fs.readdirSync(dir, { withFileTypes: true });\r\n for (const entry of entries) {\r\n if (entry.isDirectory() && !ignoreDirs.has(entry.name)) {\r\n const fullPath = path.join(dir, entry.name);\r\n const relPath = path.relative(cwd, fullPath).replace(/\\\\/g, '/');\r\n dirs.push(relPath);\r\n walk(fullPath);\r\n }\r\n }\r\n } catch {\r\n // Skip inaccessible directories\r\n }\r\n };\r\n\r\n walk(rootDir);\r\n return dirs;\r\n }\r\n\r\n private async scanRemoteFiles(cwd: string, handler: RemoteFileHandler): Promise<string[]> {\r\n const excludeDirs = [\r\n '.git', 'node_modules', 'dist', 'build', 'out',\r\n '.next', '.turbo', '.cache', 'coverage',\r\n '__pycache__', '.venv', 'venv', '.idea', '.vscode', '.centaurus',\r\n ];\r\n const excludeFiles = ['.DS_Store', 'Thumbs.db'];\r\n\r\n const pruneArgs = excludeDirs.map(d => `-name \"${d}\" -prune`).join(' -o ');\r\n const notFileArgs = excludeFiles.map(f => `! -name \"${f}\"`).join(' ');\r\n\r\n const findCmd = `find \"${cwd}\" \\\\( ${pruneArgs} \\\\) -o -type f ${notFileArgs} -print 2>/dev/null`;\r\n\r\n try {\r\n const result = await handler.executeCommand(findCmd);\r\n if (result.exitCode !== 0 && !result.stdout.trim()) {\r\n logWarning(`Remote file scan failed: ${result.stderr}`);\r\n return [];\r\n }\r\n\r\n const cwdPrefix = cwd.endsWith('/') ? cwd : cwd + '/';\r\n return result.stdout\r\n .split('\\n')\r\n .map(line => line.trim())\r\n .filter(line => line.length > 0 && line.startsWith(cwdPrefix))\r\n .map(line => line.substring(cwdPrefix.length))\r\n .filter(relPath => relPath.length > 0);\r\n } catch (error) {\r\n logWarning(`Failed to scan remote files: ${(error as Error).message}`);\r\n return [];\r\n }\r\n }\r\n\r\n // ── Helpers: checkpoint management ──────────────────────────────────\r\n\r\n private discardCheckpoint(id: string): void {\r\n const checkpointIndex = this.checkpoints.findIndex(cp => cp.id === id);\r\n if (checkpointIndex === -1) return;\r\n\r\n const [checkpoint] = this.checkpoints.splice(checkpointIndex, 1);\r\n this.discardedIds.delete(id);\r\n\r\n try {\r\n if (fs.existsSync(path.dirname(checkpoint.manifestPath))) {\r\n fs.rmSync(path.dirname(checkpoint.manifestPath), { recursive: true, force: true });\r\n }\r\n } catch (error) {\r\n logWarning(`Failed to delete checkpoint ${id}: ${(error as Error).message}`);\r\n }\r\n\r\n quickLog(`[${new Date().toISOString()}] [Checkpoint] Discarded ${id}\\n`);\r\n this.saveIndex();\r\n }\r\n\r\n private generateCheckpointId(): string {\r\n const timestamp = new Date().toISOString().replace(/[-:]/g, '').replace(/\\..+/, '');\r\n const random = Math.random().toString(36).substring(2, 6);\r\n return `cp-${timestamp}-${random}`;\r\n }\r\n\r\n private ensureDirSync(dirPath: string): void {\r\n if (!fs.existsSync(dirPath)) {\r\n fs.mkdirSync(dirPath, { recursive: true });\r\n }\r\n }\r\n\r\n private getChatDir(): string {\r\n if (!this.currentChatId) {\r\n return this.baseDir;\r\n }\r\n const dir = path.join(this.baseDir, this.currentChatId);\r\n this.ensureDirSync(dir);\r\n return dir;\r\n }\r\n\r\n private getIndexPath(): string | null {\r\n if (!this.currentChatId) return null;\r\n return path.join(this.getChatDir(), 'index.json');\r\n }\r\n\r\n private loadIndex(): void {\r\n this.checkpoints = [];\r\n this.discardedIds.clear();\r\n\r\n const indexPath = this.getIndexPath();\r\n if (!indexPath || !fs.existsSync(indexPath)) {\r\n return;\r\n }\r\n\r\n try {\r\n const raw = fs.readFileSync(indexPath, 'utf-8');\r\n const data = JSON.parse(raw) as CheckpointMeta[];\r\n this.checkpoints = data.filter(entry => fs.existsSync(entry.manifestPath));\r\n } catch (error) {\r\n logWarning(`Failed to load checkpoint index: ${(error as Error).message}`);\r\n }\r\n }\r\n\r\n private saveIndex(): void {\r\n const indexPath = this.getIndexPath();\r\n if (!indexPath) return;\r\n\r\n try {\r\n fs.writeFileSync(indexPath, JSON.stringify(this.checkpoints, null, 2), 'utf-8');\r\n } catch (error) {\r\n logWarning(`Failed to save checkpoint index: ${(error as Error).message}`);\r\n }\r\n }\r\n\r\n private normalizeCheckpointMeta(rawEntry: any): CheckpointMeta | null {\r\n if (!rawEntry || typeof rawEntry !== 'object' || typeof rawEntry.id !== 'string' || typeof rawEntry.manifestPath !== 'string') {\r\n return null;\r\n }\r\n\r\n const createdAt = typeof rawEntry.createdAt === 'string' ? rawEntry.createdAt : new Date().toISOString();\r\n const parsedCreatedAtMs = typeof rawEntry.createdAtMs === 'number'\r\n ? rawEntry.createdAtMs\r\n : Date.parse(createdAt);\r\n const createdAtMs = Number.isFinite(parsedCreatedAtMs) ? parsedCreatedAtMs : Date.now();\r\n\r\n const contextType: CheckpointContextType = rawEntry.contextType === 'ssh' ||\r\n rawEntry.contextType === 'wsl' ||\r\n rawEntry.contextType === 'docker'\r\n ? rawEntry.contextType\r\n : 'local';\r\n\r\n const status: CheckpointMeta['status'] = rawEntry.status === 'active' ||\r\n rawEntry.status === 'discarded'\r\n ? rawEntry.status\r\n : 'finalized';\r\n\r\n const toolCalls: CheckpointToolCall[] = Array.isArray(rawEntry.toolCalls)\r\n ? rawEntry.toolCalls\r\n .filter((toolCall: any) => toolCall && typeof toolCall.name === 'string')\r\n .map((toolCall: any) => ({\r\n id: typeof toolCall.id === 'string' ? toolCall.id : undefined,\r\n name: toolCall.name,\r\n arguments: toolCall.arguments && typeof toolCall.arguments === 'object' ? toolCall.arguments : undefined,\r\n timestamp: typeof toolCall.timestamp === 'string' ? toolCall.timestamp : createdAt,\r\n }))\r\n : [];\r\n\r\n const commands: string[] = Array.isArray(rawEntry.commands)\r\n ? rawEntry.commands.filter((command: any) => typeof command === 'string')\r\n : [];\r\n\r\n const snapshotDir = typeof rawEntry.snapshotDir === 'string'\r\n ? rawEntry.snapshotDir\r\n : path.join(path.dirname(rawEntry.manifestPath), 'backups');\r\n\r\n const remoteSessionInfo = rawEntry.remoteSessionInfo && typeof rawEntry.remoteSessionInfo === 'object'\r\n ? {\r\n hostname: typeof rawEntry.remoteSessionInfo.hostname === 'string' ? rawEntry.remoteSessionInfo.hostname : undefined,\r\n username: typeof rawEntry.remoteSessionInfo.username === 'string' ? rawEntry.remoteSessionInfo.username : undefined,\r\n sessionId: typeof rawEntry.remoteSessionInfo.sessionId === 'string' ? rawEntry.remoteSessionInfo.sessionId : '',\r\n connectionString: typeof rawEntry.remoteSessionInfo.connectionString === 'string' ? rawEntry.remoteSessionInfo.connectionString : undefined,\r\n }\r\n : undefined;\r\n\r\n return {\r\n id: rawEntry.id,\r\n prompt: typeof rawEntry.prompt === 'string' ? rawEntry.prompt : '',\r\n createdAt,\r\n createdAtMs,\r\n cwd: typeof rawEntry.cwd === 'string' ? rawEntry.cwd : '',\r\n contextType,\r\n remoteSessionInfo: remoteSessionInfo?.sessionId ? remoteSessionInfo : undefined,\r\n conversationIndex: typeof rawEntry.conversationIndex === 'number' ? rawEntry.conversationIndex : 0,\r\n uiMessageIndex: typeof rawEntry.uiMessageIndex === 'number' ? rawEntry.uiMessageIndex : undefined,\r\n uiMessageId: typeof rawEntry.uiMessageId === 'string' ? rawEntry.uiMessageId : undefined,\r\n snapshotDir,\r\n manifestPath: rawEntry.manifestPath,\r\n changes: rawEntry.changes && typeof rawEntry.changes === 'object'\r\n ? {\r\n added: Array.isArray(rawEntry.changes.added) ? rawEntry.changes.added.filter((f: any) => typeof f === 'string') : [],\r\n modified: Array.isArray(rawEntry.changes.modified) ? rawEntry.changes.modified.filter((f: any) => typeof f === 'string') : [],\r\n deleted: Array.isArray(rawEntry.changes.deleted) ? rawEntry.changes.deleted.filter((f: any) => typeof f === 'string') : [],\r\n }\r\n : undefined,\r\n commands,\r\n toolCalls,\r\n status,\r\n };\r\n }\r\n}\r\n"],"mappings":"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","names":["i","j"]}