@within-7/minto 0.1.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/cli.js +155 -37
  2. package/dist/Tool.js +38 -0
  3. package/dist/Tool.js.map +3 -3
  4. package/dist/commands/agents/AgentsCommand.js +52 -26
  5. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  6. package/dist/commands/agents/constants.js +1 -1
  7. package/dist/commands/agents/constants.js.map +1 -1
  8. package/dist/commands/agents/index.js +1 -1
  9. package/dist/commands/bug.js +74 -7
  10. package/dist/commands/bug.js.map +3 -3
  11. package/dist/commands/clear.js +3 -0
  12. package/dist/commands/clear.js.map +2 -2
  13. package/dist/commands/compact.js +37 -0
  14. package/dist/commands/compact.js.map +2 -2
  15. package/dist/commands/context.js +84 -0
  16. package/dist/commands/context.js.map +7 -0
  17. package/dist/commands/ctx_viz.js +18 -10
  18. package/dist/commands/ctx_viz.js.map +2 -2
  19. package/dist/commands/doctor.js +158 -12
  20. package/dist/commands/doctor.js.map +2 -2
  21. package/dist/commands/export.js +156 -0
  22. package/dist/commands/export.js.map +7 -0
  23. package/dist/commands/mcp-interactive.js +21 -12
  24. package/dist/commands/mcp-interactive.js.map +2 -2
  25. package/dist/commands/model.js +6 -5
  26. package/dist/commands/model.js.map +2 -2
  27. package/dist/commands/permissions.js +86 -0
  28. package/dist/commands/permissions.js.map +7 -0
  29. package/dist/commands/quit.js +3 -1
  30. package/dist/commands/quit.js.map +2 -2
  31. package/dist/commands/sandbox.js +104 -0
  32. package/dist/commands/sandbox.js.map +7 -0
  33. package/dist/commands/status.js +58 -0
  34. package/dist/commands/status.js.map +7 -0
  35. package/dist/commands/tasks.js +108 -0
  36. package/dist/commands/tasks.js.map +7 -0
  37. package/dist/commands/todos.js +123 -0
  38. package/dist/commands/todos.js.map +7 -0
  39. package/dist/commands.js +20 -2
  40. package/dist/commands.js.map +2 -2
  41. package/dist/components/AgentThinkingBlock.js +10 -18
  42. package/dist/components/AgentThinkingBlock.js.map +2 -2
  43. package/dist/components/BackgroundTasksPanel.js +78 -29
  44. package/dist/components/BackgroundTasksPanel.js.map +2 -2
  45. package/dist/components/BashStreamingProgress.js +24 -0
  46. package/dist/components/BashStreamingProgress.js.map +7 -0
  47. package/dist/components/CollapsibleHint.js +14 -0
  48. package/dist/components/CollapsibleHint.js.map +7 -0
  49. package/dist/components/FileEditToolUpdatedMessage.js +1 -1
  50. package/dist/components/FileEditToolUpdatedMessage.js.map +2 -2
  51. package/dist/components/HotkeyHelpPanel.js +137 -0
  52. package/dist/components/HotkeyHelpPanel.js.map +7 -0
  53. package/dist/components/Logo.js +5 -5
  54. package/dist/components/Logo.js.map +2 -2
  55. package/dist/components/Message.js +23 -7
  56. package/dist/components/Message.js.map +3 -3
  57. package/dist/components/ModelConfig.js +16 -3
  58. package/dist/components/ModelConfig.js.map +2 -2
  59. package/dist/components/ModelListManager.js +3 -3
  60. package/dist/components/ModelListManager.js.map +2 -2
  61. package/dist/components/ModelSelector/ModelSelector.js +1 -1
  62. package/dist/components/Onboarding.js +19 -14
  63. package/dist/components/Onboarding.js.map +2 -2
  64. package/dist/components/ProgressBar.js +74 -0
  65. package/dist/components/ProgressBar.js.map +7 -0
  66. package/dist/components/PromptInput.js +156 -46
  67. package/dist/components/PromptInput.js.map +2 -2
  68. package/dist/components/RequestStatusIndicator.js +194 -0
  69. package/dist/components/RequestStatusIndicator.js.map +7 -0
  70. package/dist/components/Spinner.js +92 -27
  71. package/dist/components/Spinner.js.map +2 -2
  72. package/dist/components/SpinnerSymbol.js +21 -27
  73. package/dist/components/SpinnerSymbol.js.map +2 -2
  74. package/dist/components/StreamingBashOutput.js +9 -8
  75. package/dist/components/StreamingBashOutput.js.map +2 -2
  76. package/dist/components/SubagentBlock.js +1 -1
  77. package/dist/components/SubagentBlock.js.map +1 -1
  78. package/dist/components/SubagentProgress.js +10 -11
  79. package/dist/components/SubagentProgress.js.map +2 -2
  80. package/dist/components/TaskCard.js +16 -13
  81. package/dist/components/TaskCard.js.map +2 -2
  82. package/dist/components/TodoChangeBlock.js +1 -1
  83. package/dist/components/TodoChangeBlock.js.map +2 -2
  84. package/dist/components/TodoPanel.js +120 -29
  85. package/dist/components/TodoPanel.js.map +3 -3
  86. package/dist/components/TokenCounter.js +74 -0
  87. package/dist/components/TokenCounter.js.map +7 -0
  88. package/dist/components/TokenWarning.js +2 -1
  89. package/dist/components/TokenWarning.js.map +2 -2
  90. package/dist/components/TreeConnector.js +25 -0
  91. package/dist/components/TreeConnector.js.map +7 -0
  92. package/dist/components/TurnCompletionIndicator.js +18 -0
  93. package/dist/components/TurnCompletionIndicator.js.map +7 -0
  94. package/dist/components/messages/AssistantTextMessage.js +5 -2
  95. package/dist/components/messages/AssistantTextMessage.js.map +2 -2
  96. package/dist/components/messages/AssistantThinkingMessage.js +18 -3
  97. package/dist/components/messages/AssistantThinkingMessage.js.map +2 -2
  98. package/dist/components/messages/AssistantToolUseMessage.js +11 -8
  99. package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
  100. package/dist/components/messages/GroupRenderer.js +53 -0
  101. package/dist/components/messages/GroupRenderer.js.map +7 -0
  102. package/dist/components/messages/NestedTasksPreview.js +12 -0
  103. package/dist/components/messages/NestedTasksPreview.js.map +7 -0
  104. package/dist/components/messages/ParallelTasksGroupView.js +92 -0
  105. package/dist/components/messages/ParallelTasksGroupView.js.map +7 -0
  106. package/dist/components/messages/TaskInModuleView.js +198 -0
  107. package/dist/components/messages/TaskInModuleView.js.map +7 -0
  108. package/dist/components/messages/TaskOutputContent.js +53 -0
  109. package/dist/components/messages/TaskOutputContent.js.map +7 -0
  110. package/dist/components/messages/UserPromptMessage.js +1 -1
  111. package/dist/components/messages/UserPromptMessage.js.map +2 -2
  112. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +2 -3
  113. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
  114. package/dist/components/permissions/FallbackPermissionRequest.js +4 -4
  115. package/dist/components/permissions/FallbackPermissionRequest.js.map +2 -2
  116. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +4 -4
  117. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +2 -2
  118. package/dist/constants/colors.js +48 -0
  119. package/dist/constants/colors.js.map +2 -2
  120. package/dist/constants/formatRules.js +102 -0
  121. package/dist/constants/formatRules.js.map +7 -0
  122. package/dist/constants/prompts.js +12 -34
  123. package/dist/constants/prompts.js.map +2 -2
  124. package/dist/constants/symbols.js +64 -6
  125. package/dist/constants/symbols.js.map +2 -2
  126. package/dist/constants/timing.js +5 -0
  127. package/dist/constants/timing.js.map +2 -2
  128. package/dist/core/config/defaults.js +84 -0
  129. package/dist/core/config/defaults.js.map +7 -0
  130. package/dist/core/config/index.js +111 -0
  131. package/dist/core/config/index.js.map +7 -0
  132. package/dist/core/config/loader.js +221 -0
  133. package/dist/core/config/loader.js.map +7 -0
  134. package/dist/core/config/migrations.js +128 -0
  135. package/dist/core/config/migrations.js.map +7 -0
  136. package/dist/core/config/schema.js +178 -0
  137. package/dist/core/config/schema.js.map +7 -0
  138. package/dist/core/costTracker.js +138 -0
  139. package/dist/core/costTracker.js.map +7 -0
  140. package/dist/core/index.js +5 -0
  141. package/dist/core/index.js.map +7 -0
  142. package/dist/core/permissions/auditLog.js +204 -0
  143. package/dist/core/permissions/auditLog.js.map +7 -0
  144. package/dist/core/permissions/engine/index.js +3 -0
  145. package/dist/core/permissions/engine/index.js.map +7 -0
  146. package/dist/core/permissions/engine/permissionEngine.js +106 -0
  147. package/dist/core/permissions/engine/permissionEngine.js.map +7 -0
  148. package/dist/core/permissions/engine/types.js +1 -0
  149. package/dist/core/permissions/engine/types.js.map +7 -0
  150. package/dist/core/permissions/index.js +84 -0
  151. package/dist/core/permissions/index.js.map +7 -0
  152. package/dist/core/permissions/ruleEngine.js +259 -0
  153. package/dist/core/permissions/ruleEngine.js.map +7 -0
  154. package/dist/core/permissions/rules/allowedToolsRule.js +62 -0
  155. package/dist/core/permissions/rules/allowedToolsRule.js.map +7 -0
  156. package/dist/core/permissions/rules/autoEscalationRule.js +291 -0
  157. package/dist/core/permissions/rules/autoEscalationRule.js.map +7 -0
  158. package/dist/core/permissions/rules/index.js +46 -0
  159. package/dist/core/permissions/rules/index.js.map +7 -0
  160. package/dist/core/permissions/rules/planModeRule.js +55 -0
  161. package/dist/core/permissions/rules/planModeRule.js.map +7 -0
  162. package/dist/core/permissions/rules/projectBoundaryRule.js +168 -0
  163. package/dist/core/permissions/rules/projectBoundaryRule.js.map +7 -0
  164. package/dist/core/permissions/rules/safeModeRule.js +65 -0
  165. package/dist/core/permissions/rules/safeModeRule.js.map +7 -0
  166. package/dist/core/permissions/rules/sensitivePathsRule.js +340 -0
  167. package/dist/core/permissions/rules/sensitivePathsRule.js.map +7 -0
  168. package/dist/core/permissions/types.js +127 -0
  169. package/dist/core/permissions/types.js.map +7 -0
  170. package/dist/core/tools/executor.js +143 -0
  171. package/dist/core/tools/executor.js.map +7 -0
  172. package/dist/core/tools/index.js +15 -0
  173. package/dist/core/tools/index.js.map +7 -0
  174. package/dist/core/tools/registry.js +183 -0
  175. package/dist/core/tools/registry.js.map +7 -0
  176. package/dist/core/tools/types.js +1 -0
  177. package/dist/core/tools/types.js.map +7 -0
  178. package/dist/cost-tracker.js +23 -15
  179. package/dist/cost-tracker.js.map +2 -2
  180. package/dist/entrypoints/cli.js +43 -43
  181. package/dist/entrypoints/cli.js.map +2 -2
  182. package/dist/entrypoints/mcp.js +12 -4
  183. package/dist/entrypoints/mcp.js.map +2 -2
  184. package/dist/history.js +14 -3
  185. package/dist/history.js.map +2 -2
  186. package/dist/hooks/useAgentTranscripts.js +116 -0
  187. package/dist/hooks/useAgentTranscripts.js.map +7 -0
  188. package/dist/hooks/useAnimationSync.js +53 -0
  189. package/dist/hooks/useAnimationSync.js.map +7 -0
  190. package/dist/hooks/useArrowKeyHistory.js +4 -2
  191. package/dist/hooks/useArrowKeyHistory.js.map +2 -2
  192. package/dist/hooks/useCanUseTool.js +3 -1
  193. package/dist/hooks/useCanUseTool.js.map +2 -2
  194. package/dist/hooks/useCancelRequest.js +4 -1
  195. package/dist/hooks/useCancelRequest.js.map +2 -2
  196. package/dist/hooks/useExitOnCtrlCD.js +9 -5
  197. package/dist/hooks/useExitOnCtrlCD.js.map +2 -2
  198. package/dist/hooks/useHookStatus.js +40 -0
  199. package/dist/hooks/useHookStatus.js.map +7 -0
  200. package/dist/hooks/useLogMessages.js +17 -1
  201. package/dist/hooks/useLogMessages.js.map +2 -2
  202. package/dist/hooks/useMessageGroups.js +43 -0
  203. package/dist/hooks/useMessageGroups.js.map +7 -0
  204. package/dist/hooks/useTerminalSize.js +62 -6
  205. package/dist/hooks/useTerminalSize.js.map +2 -2
  206. package/dist/hooks/useUnifiedCompletion.js +69 -0
  207. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  208. package/dist/i18n/index.js +109 -0
  209. package/dist/i18n/index.js.map +7 -0
  210. package/dist/i18n/locales/en.js +347 -0
  211. package/dist/i18n/locales/en.js.map +7 -0
  212. package/dist/i18n/locales/index.js +7 -0
  213. package/dist/i18n/locales/index.js.map +7 -0
  214. package/dist/i18n/locales/zh-CN.js +347 -0
  215. package/dist/i18n/locales/zh-CN.js.map +7 -0
  216. package/dist/i18n/types.js +8 -0
  217. package/dist/i18n/types.js.map +7 -0
  218. package/dist/query.js +175 -17
  219. package/dist/query.js.map +3 -3
  220. package/dist/screens/REPL.js +501 -192
  221. package/dist/screens/REPL.js.map +3 -3
  222. package/dist/services/adapters/chatCompletions.js +3 -1
  223. package/dist/services/adapters/chatCompletions.js.map +2 -2
  224. package/dist/services/adapters/messageNormalizer.js +354 -0
  225. package/dist/services/adapters/messageNormalizer.js.map +7 -0
  226. package/dist/services/adapters/responsesAPI.js +6 -3
  227. package/dist/services/adapters/responsesAPI.js.map +2 -2
  228. package/dist/services/checkpointManager.js +386 -0
  229. package/dist/services/checkpointManager.js.map +7 -0
  230. package/dist/services/claude.js +138 -11
  231. package/dist/services/claude.js.map +3 -3
  232. package/dist/services/compressionService.js +50 -1
  233. package/dist/services/compressionService.js.map +2 -2
  234. package/dist/services/contextMonitor.js +162 -0
  235. package/dist/services/contextMonitor.js.map +7 -0
  236. package/dist/services/customCommands.js +60 -41
  237. package/dist/services/customCommands.js.map +2 -2
  238. package/dist/services/hookExecutor.js +173 -1
  239. package/dist/services/hookExecutor.js.map +2 -2
  240. package/dist/services/intelligentCompactor.js +281 -0
  241. package/dist/services/intelligentCompactor.js.map +7 -0
  242. package/dist/services/lspConfig.js +109 -0
  243. package/dist/services/lspConfig.js.map +7 -0
  244. package/dist/services/mcpClient.js +273 -34
  245. package/dist/services/mcpClient.js.map +2 -2
  246. package/dist/services/modelOrchestrator.js +310 -0
  247. package/dist/services/modelOrchestrator.js.map +7 -0
  248. package/dist/services/openai.js +8 -1
  249. package/dist/services/openai.js.map +2 -2
  250. package/dist/services/outputStyles.js +138 -0
  251. package/dist/services/outputStyles.js.map +7 -0
  252. package/dist/services/plugins/index.js +5 -0
  253. package/dist/services/plugins/index.js.map +7 -0
  254. package/dist/services/plugins/lspServers.js +188 -0
  255. package/dist/services/plugins/lspServers.js.map +7 -0
  256. package/dist/services/plugins/pluginRuntime.js +229 -0
  257. package/dist/services/plugins/pluginRuntime.js.map +7 -0
  258. package/dist/services/plugins/pluginValidation.js +219 -0
  259. package/dist/services/plugins/pluginValidation.js.map +7 -0
  260. package/dist/services/plugins/skillMarketplace.js +556 -0
  261. package/dist/services/plugins/skillMarketplace.js.map +7 -0
  262. package/dist/services/responseStateManager.js +37 -3
  263. package/dist/services/responseStateManager.js.map +2 -2
  264. package/dist/services/sandbox/filesystemBoundary.js +300 -0
  265. package/dist/services/sandbox/filesystemBoundary.js.map +7 -0
  266. package/dist/services/sandbox/index.js +14 -0
  267. package/dist/services/sandbox/index.js.map +7 -0
  268. package/dist/services/sandbox/networkProxy.js +293 -0
  269. package/dist/services/sandbox/networkProxy.js.map +7 -0
  270. package/dist/services/sandbox/sandboxController.js +574 -0
  271. package/dist/services/sandbox/sandboxController.js.map +7 -0
  272. package/dist/services/sandbox/types.js +50 -0
  273. package/dist/services/sandbox/types.js.map +7 -0
  274. package/dist/services/sessionMemory.js +266 -0
  275. package/dist/services/sessionMemory.js.map +7 -0
  276. package/dist/services/taskRouter.js +324 -0
  277. package/dist/services/taskRouter.js.map +7 -0
  278. package/dist/tools/ArchitectTool/ArchitectTool.js +10 -3
  279. package/dist/tools/ArchitectTool/ArchitectTool.js.map +2 -2
  280. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +3 -0
  281. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
  282. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +8 -1
  283. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +2 -2
  284. package/dist/tools/BaseTool.js +72 -0
  285. package/dist/tools/BaseTool.js.map +7 -0
  286. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +3 -0
  287. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +2 -2
  288. package/dist/tools/BashTool/BashTool.js +60 -3
  289. package/dist/tools/BashTool/BashTool.js.map +2 -2
  290. package/dist/tools/BashTool/BashToolResultMessage.js +3 -0
  291. package/dist/tools/BashTool/BashToolResultMessage.js.map +2 -2
  292. package/dist/tools/BashTool/OutputLine.js +54 -0
  293. package/dist/tools/BashTool/OutputLine.js.map +2 -2
  294. package/dist/tools/BashTool/prompt.js +192 -3
  295. package/dist/tools/BashTool/prompt.js.map +2 -2
  296. package/dist/tools/FileEditTool/FileEditTool.js +29 -4
  297. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  298. package/dist/tools/FileReadTool/FileReadTool.js +23 -4
  299. package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
  300. package/dist/tools/FileWriteTool/FileWriteTool.js +5 -5
  301. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  302. package/dist/tools/GlobTool/GlobTool.js +14 -3
  303. package/dist/tools/GlobTool/GlobTool.js.map +2 -2
  304. package/dist/tools/GrepTool/GrepTool.js +41 -7
  305. package/dist/tools/GrepTool/GrepTool.js.map +2 -2
  306. package/dist/tools/KillShellTool/KillShellToolResultMessage.js +3 -0
  307. package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +2 -2
  308. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +109 -0
  309. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +7 -0
  310. package/dist/tools/ListMcpResourcesTool/prompt.js +19 -0
  311. package/dist/tools/ListMcpResourcesTool/prompt.js.map +7 -0
  312. package/dist/tools/LspTool/LspTool.js +664 -0
  313. package/dist/tools/LspTool/LspTool.js.map +7 -0
  314. package/dist/tools/LspTool/prompt.js +27 -0
  315. package/dist/tools/LspTool/prompt.js.map +7 -0
  316. package/dist/tools/MCPTool/MCPTool.js +11 -4
  317. package/dist/tools/MCPTool/MCPTool.js.map +2 -2
  318. package/dist/tools/MemoryReadTool/MemoryReadTool.js +19 -6
  319. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
  320. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +6 -6
  321. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
  322. package/dist/tools/MultiEditTool/MultiEditTool.js +19 -2
  323. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  324. package/dist/tools/NotebookEditTool/NotebookEditTool.js +5 -1
  325. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  326. package/dist/tools/NotebookReadTool/NotebookReadTool.js +8 -4
  327. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
  328. package/dist/tools/PlanModeTool/EnterPlanModeTool.js +74 -0
  329. package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +7 -0
  330. package/dist/tools/PlanModeTool/ExitPlanModeTool.js +108 -0
  331. package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +7 -0
  332. package/dist/tools/PlanModeTool/prompt.js +94 -0
  333. package/dist/tools/PlanModeTool/prompt.js.map +7 -0
  334. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +130 -0
  335. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +7 -0
  336. package/dist/tools/ReadMcpResourceTool/prompt.js +17 -0
  337. package/dist/tools/ReadMcpResourceTool/prompt.js.map +7 -0
  338. package/dist/tools/SkillTool/SkillTool.js +14 -3
  339. package/dist/tools/SkillTool/SkillTool.js.map +2 -2
  340. package/dist/tools/SlashCommandTool/SlashCommandTool.js +260 -0
  341. package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +7 -0
  342. package/dist/tools/SlashCommandTool/prompt.js +35 -0
  343. package/dist/tools/SlashCommandTool/prompt.js.map +7 -0
  344. package/dist/tools/TaskOutputTool/TaskOutputTool.js +189 -0
  345. package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +7 -0
  346. package/dist/tools/TaskOutputTool/prompt.js +15 -0
  347. package/dist/tools/TaskOutputTool/prompt.js.map +7 -0
  348. package/dist/tools/TaskTool/TaskTool.js +321 -146
  349. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  350. package/dist/tools/TaskTool/prompt.js.map +2 -2
  351. package/dist/tools/TodoWriteTool/TodoWriteTool.js +42 -73
  352. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
  353. package/dist/tools/URLFetcherTool/URLFetcherTool.js +7 -1
  354. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
  355. package/dist/tools/URLFetcherTool/cache.js +55 -8
  356. package/dist/tools/URLFetcherTool/cache.js.map +2 -2
  357. package/dist/tools/WebSearchTool/WebSearchTool.js +6 -1
  358. package/dist/tools/WebSearchTool/WebSearchTool.js.map +2 -2
  359. package/dist/tools.js +31 -2
  360. package/dist/tools.js.map +2 -2
  361. package/dist/types/hooks.js +4 -0
  362. package/dist/types/hooks.js.map +2 -2
  363. package/dist/types/marketplace.js.map +2 -2
  364. package/dist/types/messageGroup.js +36 -0
  365. package/dist/types/messageGroup.js.map +7 -0
  366. package/dist/types/plugin.js.map +2 -2
  367. package/dist/types/thinking.js +1 -0
  368. package/dist/types/thinking.js.map +7 -0
  369. package/dist/utils/BackgroundShellManager.js +136 -39
  370. package/dist/utils/BackgroundShellManager.js.map +2 -2
  371. package/dist/utils/MessageBatchBuffer.js +102 -0
  372. package/dist/utils/MessageBatchBuffer.js.map +7 -0
  373. package/dist/utils/PersistentShell.js +151 -1
  374. package/dist/utils/PersistentShell.js.map +2 -2
  375. package/dist/utils/agentLoader.js +1 -23
  376. package/dist/utils/agentLoader.js.map +2 -2
  377. package/dist/utils/agentTranscripts.js +641 -0
  378. package/dist/utils/agentTranscripts.js.map +7 -0
  379. package/dist/utils/animationManager.js +213 -0
  380. package/dist/utils/animationManager.js.map +7 -0
  381. package/dist/utils/animationSync.js +110 -0
  382. package/dist/utils/animationSync.js.map +7 -0
  383. package/dist/utils/asyncFile.js +215 -0
  384. package/dist/utils/asyncFile.js.map +7 -0
  385. package/dist/utils/backgroundAgentManager.js +231 -0
  386. package/dist/utils/backgroundAgentManager.js.map +7 -0
  387. package/dist/utils/config.js +63 -7
  388. package/dist/utils/config.js.map +2 -2
  389. package/dist/utils/conversationRecovery.js +19 -0
  390. package/dist/utils/conversationRecovery.js.map +2 -2
  391. package/dist/utils/exit.js +73 -0
  392. package/dist/utils/exit.js.map +7 -0
  393. package/dist/utils/format.js +73 -5
  394. package/dist/utils/format.js.map +2 -2
  395. package/dist/utils/generators.js +76 -6
  396. package/dist/utils/generators.js.map +2 -2
  397. package/dist/utils/globalErrorHandler.js +149 -0
  398. package/dist/utils/globalErrorHandler.js.map +7 -0
  399. package/dist/utils/groupHandlers/index.js +8 -0
  400. package/dist/utils/groupHandlers/index.js.map +7 -0
  401. package/dist/utils/groupHandlers/parallelTasksHandler.js +140 -0
  402. package/dist/utils/groupHandlers/parallelTasksHandler.js.map +7 -0
  403. package/dist/utils/groupHandlers/taskHandler.js +104 -0
  404. package/dist/utils/groupHandlers/taskHandler.js.map +7 -0
  405. package/dist/utils/groupHandlers/types.js +1 -0
  406. package/dist/utils/groupHandlers/types.js.map +7 -0
  407. package/dist/utils/logRotation.js +224 -0
  408. package/dist/utils/logRotation.js.map +7 -0
  409. package/dist/utils/marketplaceManager.js +3 -5
  410. package/dist/utils/marketplaceManager.js.map +2 -2
  411. package/dist/utils/memSafety.js +264 -0
  412. package/dist/utils/memSafety.js.map +7 -0
  413. package/dist/utils/messageGroupManager.js +274 -0
  414. package/dist/utils/messageGroupManager.js.map +7 -0
  415. package/dist/utils/messages.js +13 -4
  416. package/dist/utils/messages.js.map +2 -2
  417. package/dist/utils/model.js +119 -15
  418. package/dist/utils/model.js.map +3 -3
  419. package/dist/utils/permissions/filesystem.js +157 -5
  420. package/dist/utils/permissions/filesystem.js.map +2 -2
  421. package/dist/utils/plan/planMode.js +143 -0
  422. package/dist/utils/plan/planMode.js.map +7 -0
  423. package/dist/utils/pluginLoader.js +17 -21
  424. package/dist/utils/pluginLoader.js.map +2 -2
  425. package/dist/utils/ripgrep.js +55 -2
  426. package/dist/utils/ripgrep.js.map +2 -2
  427. package/dist/utils/sanitizeInput.js +32 -0
  428. package/dist/utils/sanitizeInput.js.map +7 -0
  429. package/dist/utils/secureKeyStorage.js +312 -0
  430. package/dist/utils/secureKeyStorage.js.map +7 -0
  431. package/dist/utils/session/sessionPlugins.js +67 -0
  432. package/dist/utils/session/sessionPlugins.js.map +7 -0
  433. package/dist/utils/taskDisplayUtils.js +257 -0
  434. package/dist/utils/taskDisplayUtils.js.map +7 -0
  435. package/dist/utils/teamConfig.js +2 -1
  436. package/dist/utils/teamConfig.js.map +2 -2
  437. package/dist/utils/todoStorage.js +92 -2
  438. package/dist/utils/todoStorage.js.map +2 -2
  439. package/dist/utils/toolTimeout.js +136 -0
  440. package/dist/utils/toolTimeout.js.map +7 -0
  441. package/dist/utils/tooling/safeRender.js +115 -0
  442. package/dist/utils/tooling/safeRender.js.map +7 -0
  443. package/dist/utils/userFriendlyError.js +346 -0
  444. package/dist/utils/userFriendlyError.js.map +7 -0
  445. package/dist/utils/vendor/ripgrep/arm64-darwin/rg +0 -0
  446. package/dist/version.js +2 -2
  447. package/dist/version.js.map +1 -1
  448. package/package.json +14 -4
  449. package/scripts/postinstall.js +128 -38
  450. package/dist/commands/agents.js +0 -2086
  451. package/dist/commands/agents.js.map +0 -7
  452. package/dist/commands/build.js +0 -74
  453. package/dist/commands/build.js.map +0 -7
  454. package/dist/commands/compression.js +0 -57
  455. package/dist/commands/compression.js.map +0 -7
  456. package/dist/commands/listen.js +0 -37
  457. package/dist/commands/listen.js.map +0 -7
  458. package/dist/commands/login.js +0 -37
  459. package/dist/commands/login.js.map +0 -7
  460. package/dist/commands/logout.js +0 -33
  461. package/dist/commands/logout.js.map +0 -7
  462. package/dist/commands/mcp.js +0 -40
  463. package/dist/commands/mcp.js.map +0 -7
  464. package/dist/commands/mcp_refresh.js +0 -40
  465. package/dist/commands/mcp_refresh.js.map +0 -7
  466. package/dist/commands/modelstatus.js +0 -21
  467. package/dist/commands/modelstatus.js.map +0 -7
  468. package/dist/commands/onboarding.js +0 -36
  469. package/dist/commands/onboarding.js.map +0 -7
  470. package/dist/commands/plugin-interactive.js +0 -446
  471. package/dist/commands/plugin-interactive.js.map +0 -7
  472. package/dist/commands/pr_comments.js +0 -61
  473. package/dist/commands/pr_comments.js.map +0 -7
  474. package/dist/commands/release-notes.js +0 -30
  475. package/dist/commands/release-notes.js.map +0 -7
  476. package/dist/commands/review.js +0 -51
  477. package/dist/commands/review.js.map +0 -7
  478. package/dist/components/Bug.js +0 -147
  479. package/dist/components/Bug.js.map +0 -7
  480. package/dist/components/ModelSelector.js +0 -2062
  481. package/dist/components/ModelSelector.js.map +0 -7
  482. package/dist/components/ModelStatusDisplay.js +0 -87
  483. package/dist/components/ModelStatusDisplay.js.map +0 -7
  484. package/dist/entrypoints/cli-wrapper.js +0 -61
  485. package/dist/entrypoints/cli-wrapper.js.map +0 -7
  486. package/dist/screens/Doctor.js +0 -22
  487. package/dist/screens/Doctor.js.map +0 -7
@@ -0,0 +1,386 @@
1
+ import { randomUUID } from "crypto";
2
+ import {
3
+ existsSync,
4
+ mkdirSync,
5
+ readFileSync,
6
+ writeFileSync,
7
+ unlinkSync,
8
+ readdirSync
9
+ } from "fs";
10
+ import { join, dirname } from "path";
11
+ import { getCwd } from "../utils/state.js";
12
+ import { execFileNoThrow } from "../utils/execFileNoThrow.js";
13
+ class CheckpointManager {
14
+ checkpoints = /* @__PURE__ */ new Map();
15
+ fileChangeTracker = [];
16
+ checkpointDir;
17
+ maxCheckpoints;
18
+ constructor(options) {
19
+ this.checkpointDir = options?.checkpointDir ?? join(getCwd(), ".minto", "checkpoints");
20
+ this.maxCheckpoints = options?.maxCheckpoints ?? 50;
21
+ if (!existsSync(this.checkpointDir)) {
22
+ mkdirSync(this.checkpointDir, { recursive: true });
23
+ }
24
+ this.loadCheckpoints();
25
+ }
26
+ /**
27
+ * Create a new checkpoint
28
+ */
29
+ async createCheckpoint(description, options) {
30
+ const id = randomUUID();
31
+ const timestamp = Date.now();
32
+ const lastCheckpoint = this.getLastCheckpoint();
33
+ let gitCommit;
34
+ let gitBranch;
35
+ if (options?.includeGit !== false) {
36
+ try {
37
+ gitCommit = await this.getCurrentGitCommit();
38
+ gitBranch = await this.getCurrentGitBranch();
39
+ } catch {
40
+ }
41
+ }
42
+ const checkpoint = {
43
+ id,
44
+ timestamp,
45
+ description,
46
+ messageCount: 0,
47
+ // Will be updated by caller
48
+ fileChanges: [...this.fileChangeTracker],
49
+ gitCommit,
50
+ gitBranch,
51
+ parentId: lastCheckpoint?.id,
52
+ metadata: {
53
+ cwd: getCwd(),
54
+ tags: options?.tags
55
+ }
56
+ };
57
+ this.checkpoints.set(id, checkpoint);
58
+ this.saveCheckpoint(checkpoint);
59
+ this.fileChangeTracker = [];
60
+ this.pruneOldCheckpoints();
61
+ return checkpoint;
62
+ }
63
+ /**
64
+ * Restore to a checkpoint
65
+ */
66
+ async restore(checkpointId, options = {}) {
67
+ const checkpoint = this.checkpoints.get(checkpointId);
68
+ if (!checkpoint) {
69
+ return {
70
+ success: false,
71
+ checkpointId,
72
+ restoredFiles: [],
73
+ error: `Checkpoint not found: ${checkpointId}`
74
+ };
75
+ }
76
+ const restoredFiles = [];
77
+ let backupId;
78
+ if (options.createBackup) {
79
+ const backup = await this.createCheckpoint(
80
+ `Backup before restore to ${checkpoint.description}`
81
+ );
82
+ backupId = backup.id;
83
+ }
84
+ if (options.dryRun) {
85
+ return {
86
+ success: true,
87
+ checkpointId,
88
+ restoredFiles: checkpoint.fileChanges.map((f) => f.path),
89
+ backupId
90
+ };
91
+ }
92
+ if (options.restoreFiles !== false) {
93
+ try {
94
+ for (const change of checkpoint.fileChanges) {
95
+ await this.restoreFileChange(change);
96
+ restoredFiles.push(change.path);
97
+ }
98
+ } catch (error) {
99
+ return {
100
+ success: false,
101
+ checkpointId,
102
+ restoredFiles,
103
+ error: error instanceof Error ? error.message : String(error),
104
+ backupId
105
+ };
106
+ }
107
+ }
108
+ let gitRestored = false;
109
+ if (options.restoreGit && checkpoint.gitCommit) {
110
+ try {
111
+ await this.restoreGitState(checkpoint.gitCommit);
112
+ gitRestored = true;
113
+ } catch (error) {
114
+ return {
115
+ success: false,
116
+ checkpointId,
117
+ restoredFiles,
118
+ gitRestored: false,
119
+ error: `Git restore failed: ${error instanceof Error ? error.message : String(error)}`,
120
+ backupId
121
+ };
122
+ }
123
+ }
124
+ return {
125
+ success: true,
126
+ checkpointId,
127
+ restoredFiles,
128
+ gitRestored,
129
+ backupId
130
+ };
131
+ }
132
+ /**
133
+ * Track a file change
134
+ */
135
+ trackFileChange(change) {
136
+ this.fileChangeTracker.push({
137
+ ...change,
138
+ timestamp: Date.now()
139
+ });
140
+ }
141
+ /**
142
+ * Get all checkpoints
143
+ */
144
+ getCheckpoints() {
145
+ return Array.from(this.checkpoints.values()).sort(
146
+ (a, b) => b.timestamp - a.timestamp
147
+ );
148
+ }
149
+ /**
150
+ * Get checkpoint by ID
151
+ */
152
+ getCheckpoint(id) {
153
+ return this.checkpoints.get(id);
154
+ }
155
+ /**
156
+ * Get the most recent checkpoint
157
+ */
158
+ getLastCheckpoint() {
159
+ const checkpoints = this.getCheckpoints();
160
+ return checkpoints[0];
161
+ }
162
+ /**
163
+ * Get checkpoints by tag
164
+ */
165
+ getCheckpointsByTag(tag) {
166
+ return this.getCheckpoints().filter((cp) => cp.metadata.tags?.includes(tag));
167
+ }
168
+ /**
169
+ * Delete a checkpoint
170
+ */
171
+ deleteCheckpoint(id) {
172
+ const checkpoint = this.checkpoints.get(id);
173
+ if (!checkpoint) return false;
174
+ this.checkpoints.delete(id);
175
+ const filePath = join(this.checkpointDir, `${id}.json`);
176
+ if (existsSync(filePath)) {
177
+ unlinkSync(filePath);
178
+ }
179
+ return true;
180
+ }
181
+ /**
182
+ * Get checkpoint history (chain from current to first)
183
+ */
184
+ getCheckpointHistory(checkpointId) {
185
+ const history = [];
186
+ let current = this.checkpoints.get(checkpointId);
187
+ while (current) {
188
+ history.push(current);
189
+ current = current.parentId ? this.checkpoints.get(current.parentId) : void 0;
190
+ }
191
+ return history;
192
+ }
193
+ /**
194
+ * Get pending file changes (not yet checkpointed)
195
+ */
196
+ getPendingChanges() {
197
+ return [...this.fileChangeTracker];
198
+ }
199
+ /**
200
+ * Clear pending file changes
201
+ */
202
+ clearPendingChanges() {
203
+ this.fileChangeTracker = [];
204
+ }
205
+ /**
206
+ * Get diff between two checkpoints
207
+ */
208
+ getDiff(fromId, toId) {
209
+ const fromCheckpoint = this.checkpoints.get(fromId);
210
+ const toCheckpoint = this.checkpoints.get(toId);
211
+ if (!fromCheckpoint || !toCheckpoint) {
212
+ return { addedFiles: [], modifiedFiles: [], deletedFiles: [] };
213
+ }
214
+ const history = this.getCheckpointHistory(toId);
215
+ const fromIndex = history.findIndex((cp) => cp.id === fromId);
216
+ if (fromIndex === -1) {
217
+ return { addedFiles: [], modifiedFiles: [], deletedFiles: [] };
218
+ }
219
+ const relevantCheckpoints = history.slice(0, fromIndex);
220
+ const allChanges = relevantCheckpoints.flatMap((cp) => cp.fileChanges);
221
+ const addedFiles = [];
222
+ const modifiedFiles = [];
223
+ const deletedFiles = [];
224
+ for (const change of allChanges) {
225
+ switch (change.type) {
226
+ case "create":
227
+ addedFiles.push(change.path);
228
+ break;
229
+ case "modify":
230
+ modifiedFiles.push(change.path);
231
+ break;
232
+ case "delete":
233
+ deletedFiles.push(change.path);
234
+ break;
235
+ }
236
+ }
237
+ return {
238
+ addedFiles: [...new Set(addedFiles)],
239
+ modifiedFiles: [...new Set(modifiedFiles)],
240
+ deletedFiles: [...new Set(deletedFiles)]
241
+ };
242
+ }
243
+ /**
244
+ * Load checkpoints from disk
245
+ */
246
+ loadCheckpoints() {
247
+ if (!existsSync(this.checkpointDir)) return;
248
+ try {
249
+ const files = readdirSync(this.checkpointDir);
250
+ for (const file of files) {
251
+ if (!file.endsWith(".json")) continue;
252
+ try {
253
+ const filePath = join(this.checkpointDir, file);
254
+ const content = readFileSync(filePath, "utf-8");
255
+ const checkpoint = JSON.parse(content);
256
+ this.checkpoints.set(checkpoint.id, checkpoint);
257
+ } catch {
258
+ }
259
+ }
260
+ } catch {
261
+ }
262
+ }
263
+ /**
264
+ * Save checkpoint to disk
265
+ */
266
+ saveCheckpoint(checkpoint) {
267
+ const filePath = join(this.checkpointDir, `${checkpoint.id}.json`);
268
+ writeFileSync(filePath, JSON.stringify(checkpoint, null, 2), "utf-8");
269
+ }
270
+ /**
271
+ * Prune old checkpoints to stay within limit
272
+ */
273
+ pruneOldCheckpoints() {
274
+ const checkpoints = this.getCheckpoints();
275
+ if (checkpoints.length <= this.maxCheckpoints) return;
276
+ const toDelete = checkpoints.slice(this.maxCheckpoints);
277
+ for (const checkpoint of toDelete) {
278
+ this.deleteCheckpoint(checkpoint.id);
279
+ }
280
+ }
281
+ /**
282
+ * Restore a file change
283
+ */
284
+ async restoreFileChange(change) {
285
+ const fullPath = join(getCwd(), change.path);
286
+ switch (change.type) {
287
+ case "create":
288
+ if (existsSync(fullPath)) {
289
+ unlinkSync(fullPath);
290
+ }
291
+ break;
292
+ case "modify":
293
+ if (change.originalContent !== void 0) {
294
+ const dir = dirname(fullPath);
295
+ if (!existsSync(dir)) {
296
+ mkdirSync(dir, { recursive: true });
297
+ }
298
+ writeFileSync(fullPath, change.originalContent, "utf-8");
299
+ }
300
+ break;
301
+ case "delete":
302
+ if (change.originalContent !== void 0) {
303
+ const dir = dirname(fullPath);
304
+ if (!existsSync(dir)) {
305
+ mkdirSync(dir, { recursive: true });
306
+ }
307
+ writeFileSync(fullPath, change.originalContent, "utf-8");
308
+ }
309
+ break;
310
+ }
311
+ }
312
+ /**
313
+ * Get current git commit hash
314
+ */
315
+ async getCurrentGitCommit() {
316
+ try {
317
+ const result = await execFileNoThrow("git", ["rev-parse", "HEAD"]);
318
+ if (result.code === 0 && result.stdout) {
319
+ return result.stdout.trim();
320
+ }
321
+ return void 0;
322
+ } catch {
323
+ return void 0;
324
+ }
325
+ }
326
+ /**
327
+ * Get current git branch
328
+ */
329
+ async getCurrentGitBranch() {
330
+ try {
331
+ const result = await execFileNoThrow("git", [
332
+ "rev-parse",
333
+ "--abbrev-ref",
334
+ "HEAD"
335
+ ]);
336
+ if (result.code === 0 && result.stdout) {
337
+ return result.stdout.trim();
338
+ }
339
+ return void 0;
340
+ } catch {
341
+ return void 0;
342
+ }
343
+ }
344
+ /**
345
+ * Restore git state to a specific commit
346
+ */
347
+ async restoreGitState(commit) {
348
+ await execFileNoThrow("git", ["stash"]);
349
+ const result = await execFileNoThrow("git", ["checkout", commit]);
350
+ if (result.code !== 0) {
351
+ throw new Error(`Failed to checkout commit ${commit}: ${result.stderr}`);
352
+ }
353
+ }
354
+ }
355
+ let managerInstance = null;
356
+ function getCheckpointManager() {
357
+ if (!managerInstance) {
358
+ managerInstance = new CheckpointManager();
359
+ }
360
+ return managerInstance;
361
+ }
362
+ function resetCheckpointManager() {
363
+ managerInstance = null;
364
+ }
365
+ async function createCheckpoint(description, options) {
366
+ return getCheckpointManager().createCheckpoint(description, options);
367
+ }
368
+ async function restoreCheckpoint(checkpointId, options) {
369
+ return getCheckpointManager().restore(checkpointId, options);
370
+ }
371
+ function trackFileChange(change) {
372
+ getCheckpointManager().trackFileChange(change);
373
+ }
374
+ function getCheckpoints() {
375
+ return getCheckpointManager().getCheckpoints();
376
+ }
377
+ export {
378
+ CheckpointManager,
379
+ createCheckpoint,
380
+ getCheckpointManager,
381
+ getCheckpoints,
382
+ resetCheckpointManager,
383
+ restoreCheckpoint,
384
+ trackFileChange
385
+ };
386
+ //# sourceMappingURL=checkpointManager.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/services/checkpointManager.ts"],
4
+ "sourcesContent": ["/**\n * Checkpoint Manager\n *\n * Provides checkpoint and rollback capabilities for conversation state,\n * file changes, and git commits. Allows users to restore previous states.\n */\n\nimport { randomUUID } from 'crypto'\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n unlinkSync,\n readdirSync,\n} from 'fs'\nimport { join, dirname } from 'path'\nimport { getCwd } from '@utils/state'\nimport { execFileNoThrow } from '@utils/execFileNoThrow'\n\n/**\n * File change record\n */\nexport interface FileChange {\n /** File path */\n path: string\n /** Type of change */\n type: 'create' | 'modify' | 'delete'\n /** Original content (for modify/delete) */\n originalContent?: string\n /** New content (for create/modify) */\n newContent?: string\n /** Timestamp of change */\n timestamp: number\n}\n\n/**\n * Checkpoint data\n */\nexport interface Checkpoint {\n /** Unique checkpoint ID */\n id: string\n /** Creation timestamp */\n timestamp: number\n /** Description of this checkpoint */\n description: string\n /** Messages at this point */\n messageCount: number\n /** File changes since last checkpoint */\n fileChanges: FileChange[]\n /** Git commit hash (if available) */\n gitCommit?: string\n /** Git branch name */\n gitBranch?: string\n /** Parent checkpoint ID */\n parentId?: string\n /** Metadata */\n metadata: {\n /** Working directory */\n cwd: string\n /** User who created checkpoint */\n createdBy?: string\n /** Tags for categorization */\n tags?: string[]\n }\n}\n\n/**\n * Checkpoint restore options\n */\nexport interface RestoreOptions {\n /** Restore file changes */\n restoreFiles?: boolean\n /** Restore git state */\n restoreGit?: boolean\n /** Create backup before restore */\n createBackup?: boolean\n /** Dry run (preview changes) */\n dryRun?: boolean\n}\n\n/**\n * Restore result\n */\nexport interface RestoreResult {\n /** Whether restore succeeded */\n success: boolean\n /** Restored checkpoint ID */\n checkpointId: string\n /** Files that were restored */\n restoredFiles: string[]\n /** Git restore result */\n gitRestored?: boolean\n /** Error message if failed */\n error?: string\n /** Backup checkpoint ID (if created) */\n backupId?: string\n}\n\n/**\n * Checkpoint Manager for state tracking and rollback\n */\nexport class CheckpointManager {\n private checkpoints: Map<string, Checkpoint> = new Map()\n private fileChangeTracker: FileChange[] = []\n private checkpointDir: string\n private maxCheckpoints: number\n\n constructor(options?: { checkpointDir?: string; maxCheckpoints?: number }) {\n this.checkpointDir =\n options?.checkpointDir ?? join(getCwd(), '.minto', 'checkpoints')\n this.maxCheckpoints = options?.maxCheckpoints ?? 50\n\n // Ensure checkpoint directory exists\n if (!existsSync(this.checkpointDir)) {\n mkdirSync(this.checkpointDir, { recursive: true })\n }\n\n // Load existing checkpoints\n this.loadCheckpoints()\n }\n\n /**\n * Create a new checkpoint\n */\n async createCheckpoint(\n description: string,\n options?: {\n tags?: string[]\n includeGit?: boolean\n },\n ): Promise<Checkpoint> {\n const id = randomUUID()\n const timestamp = Date.now()\n const lastCheckpoint = this.getLastCheckpoint()\n\n // Get git info if requested\n let gitCommit: string | undefined\n let gitBranch: string | undefined\n\n if (options?.includeGit !== false) {\n try {\n gitCommit = await this.getCurrentGitCommit()\n gitBranch = await this.getCurrentGitBranch()\n } catch {\n // Git not available or not a git repo\n }\n }\n\n const checkpoint: Checkpoint = {\n id,\n timestamp,\n description,\n messageCount: 0, // Will be updated by caller\n fileChanges: [...this.fileChangeTracker],\n gitCommit,\n gitBranch,\n parentId: lastCheckpoint?.id,\n metadata: {\n cwd: getCwd(),\n tags: options?.tags,\n },\n }\n\n // Store checkpoint\n this.checkpoints.set(id, checkpoint)\n this.saveCheckpoint(checkpoint)\n\n // Clear file change tracker\n this.fileChangeTracker = []\n\n // Prune old checkpoints if needed\n this.pruneOldCheckpoints()\n\n return checkpoint\n }\n\n /**\n * Restore to a checkpoint\n */\n async restore(\n checkpointId: string,\n options: RestoreOptions = {},\n ): Promise<RestoreResult> {\n const checkpoint = this.checkpoints.get(checkpointId)\n if (!checkpoint) {\n return {\n success: false,\n checkpointId,\n restoredFiles: [],\n error: `Checkpoint not found: ${checkpointId}`,\n }\n }\n\n const restoredFiles: string[] = []\n let backupId: string | undefined\n\n // Create backup if requested\n if (options.createBackup) {\n const backup = await this.createCheckpoint(\n `Backup before restore to ${checkpoint.description}`,\n )\n backupId = backup.id\n }\n\n // Dry run mode - just return what would change\n if (options.dryRun) {\n return {\n success: true,\n checkpointId,\n restoredFiles: checkpoint.fileChanges.map(f => f.path),\n backupId,\n }\n }\n\n // Restore files if requested\n if (options.restoreFiles !== false) {\n try {\n for (const change of checkpoint.fileChanges) {\n await this.restoreFileChange(change)\n restoredFiles.push(change.path)\n }\n } catch (error) {\n return {\n success: false,\n checkpointId,\n restoredFiles,\n error: error instanceof Error ? error.message : String(error),\n backupId,\n }\n }\n }\n\n // Restore git state if requested\n let gitRestored = false\n if (options.restoreGit && checkpoint.gitCommit) {\n try {\n await this.restoreGitState(checkpoint.gitCommit)\n gitRestored = true\n } catch (error) {\n return {\n success: false,\n checkpointId,\n restoredFiles,\n gitRestored: false,\n error: `Git restore failed: ${error instanceof Error ? error.message : String(error)}`,\n backupId,\n }\n }\n }\n\n return {\n success: true,\n checkpointId,\n restoredFiles,\n gitRestored,\n backupId,\n }\n }\n\n /**\n * Track a file change\n */\n trackFileChange(change: Omit<FileChange, 'timestamp'>): void {\n this.fileChangeTracker.push({\n ...change,\n timestamp: Date.now(),\n })\n }\n\n /**\n * Get all checkpoints\n */\n getCheckpoints(): Checkpoint[] {\n return Array.from(this.checkpoints.values()).sort(\n (a, b) => b.timestamp - a.timestamp,\n )\n }\n\n /**\n * Get checkpoint by ID\n */\n getCheckpoint(id: string): Checkpoint | undefined {\n return this.checkpoints.get(id)\n }\n\n /**\n * Get the most recent checkpoint\n */\n getLastCheckpoint(): Checkpoint | undefined {\n const checkpoints = this.getCheckpoints()\n return checkpoints[0]\n }\n\n /**\n * Get checkpoints by tag\n */\n getCheckpointsByTag(tag: string): Checkpoint[] {\n return this.getCheckpoints().filter(cp => cp.metadata.tags?.includes(tag))\n }\n\n /**\n * Delete a checkpoint\n */\n deleteCheckpoint(id: string): boolean {\n const checkpoint = this.checkpoints.get(id)\n if (!checkpoint) return false\n\n // Remove from memory\n this.checkpoints.delete(id)\n\n // Remove from disk\n const filePath = join(this.checkpointDir, `${id}.json`)\n if (existsSync(filePath)) {\n unlinkSync(filePath)\n }\n\n return true\n }\n\n /**\n * Get checkpoint history (chain from current to first)\n */\n getCheckpointHistory(checkpointId: string): Checkpoint[] {\n const history: Checkpoint[] = []\n let current = this.checkpoints.get(checkpointId)\n\n while (current) {\n history.push(current)\n current = current.parentId\n ? this.checkpoints.get(current.parentId)\n : undefined\n }\n\n return history\n }\n\n /**\n * Get pending file changes (not yet checkpointed)\n */\n getPendingChanges(): FileChange[] {\n return [...this.fileChangeTracker]\n }\n\n /**\n * Clear pending file changes\n */\n clearPendingChanges(): void {\n this.fileChangeTracker = []\n }\n\n /**\n * Get diff between two checkpoints\n */\n getDiff(\n fromId: string,\n toId: string,\n ): {\n addedFiles: string[]\n modifiedFiles: string[]\n deletedFiles: string[]\n } {\n const fromCheckpoint = this.checkpoints.get(fromId)\n const toCheckpoint = this.checkpoints.get(toId)\n\n if (!fromCheckpoint || !toCheckpoint) {\n return { addedFiles: [], modifiedFiles: [], deletedFiles: [] }\n }\n\n // Collect all changes between checkpoints\n const history = this.getCheckpointHistory(toId)\n const fromIndex = history.findIndex(cp => cp.id === fromId)\n\n if (fromIndex === -1) {\n return { addedFiles: [], modifiedFiles: [], deletedFiles: [] }\n }\n\n const relevantCheckpoints = history.slice(0, fromIndex)\n const allChanges = relevantCheckpoints.flatMap(cp => cp.fileChanges)\n\n const addedFiles: string[] = []\n const modifiedFiles: string[] = []\n const deletedFiles: string[] = []\n\n for (const change of allChanges) {\n switch (change.type) {\n case 'create':\n addedFiles.push(change.path)\n break\n case 'modify':\n modifiedFiles.push(change.path)\n break\n case 'delete':\n deletedFiles.push(change.path)\n break\n }\n }\n\n return {\n addedFiles: [...new Set(addedFiles)],\n modifiedFiles: [...new Set(modifiedFiles)],\n deletedFiles: [...new Set(deletedFiles)],\n }\n }\n\n /**\n * Load checkpoints from disk\n */\n private loadCheckpoints(): void {\n if (!existsSync(this.checkpointDir)) return\n\n try {\n const files = readdirSync(this.checkpointDir)\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue\n\n try {\n const filePath = join(this.checkpointDir, file)\n const content = readFileSync(filePath, 'utf-8')\n const checkpoint = JSON.parse(content) as Checkpoint\n this.checkpoints.set(checkpoint.id, checkpoint)\n } catch {\n // Skip invalid checkpoint files\n }\n }\n } catch {\n // Directory read failed\n }\n }\n\n /**\n * Save checkpoint to disk\n */\n private saveCheckpoint(checkpoint: Checkpoint): void {\n const filePath = join(this.checkpointDir, `${checkpoint.id}.json`)\n writeFileSync(filePath, JSON.stringify(checkpoint, null, 2), 'utf-8')\n }\n\n /**\n * Prune old checkpoints to stay within limit\n */\n private pruneOldCheckpoints(): void {\n const checkpoints = this.getCheckpoints()\n\n if (checkpoints.length <= this.maxCheckpoints) return\n\n // Keep the most recent checkpoints\n const toDelete = checkpoints.slice(this.maxCheckpoints)\n for (const checkpoint of toDelete) {\n this.deleteCheckpoint(checkpoint.id)\n }\n }\n\n /**\n * Restore a file change\n */\n private async restoreFileChange(change: FileChange): Promise<void> {\n const fullPath = join(getCwd(), change.path)\n\n switch (change.type) {\n case 'create':\n // To restore, we need to delete the created file\n if (existsSync(fullPath)) {\n unlinkSync(fullPath)\n }\n break\n\n case 'modify':\n // Restore original content\n if (change.originalContent !== undefined) {\n const dir = dirname(fullPath)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(fullPath, change.originalContent, 'utf-8')\n }\n break\n\n case 'delete':\n // Restore deleted file\n if (change.originalContent !== undefined) {\n const dir = dirname(fullPath)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(fullPath, change.originalContent, 'utf-8')\n }\n break\n }\n }\n\n /**\n * Get current git commit hash\n */\n private async getCurrentGitCommit(): Promise<string | undefined> {\n try {\n const result = await execFileNoThrow('git', ['rev-parse', 'HEAD'])\n if (result.code === 0 && result.stdout) {\n return result.stdout.trim()\n }\n return undefined\n } catch {\n return undefined\n }\n }\n\n /**\n * Get current git branch\n */\n private async getCurrentGitBranch(): Promise<string | undefined> {\n try {\n const result = await execFileNoThrow('git', [\n 'rev-parse',\n '--abbrev-ref',\n 'HEAD',\n ])\n if (result.code === 0 && result.stdout) {\n return result.stdout.trim()\n }\n return undefined\n } catch {\n return undefined\n }\n }\n\n /**\n * Restore git state to a specific commit\n */\n private async restoreGitState(commit: string): Promise<void> {\n // Stash any uncommitted changes\n await execFileNoThrow('git', ['stash'])\n\n // Checkout the commit\n const result = await execFileNoThrow('git', ['checkout', commit])\n\n if (result.code !== 0) {\n throw new Error(`Failed to checkout commit ${commit}: ${result.stderr}`)\n }\n }\n}\n\n// Singleton instance\nlet managerInstance: CheckpointManager | null = null\n\n/**\n * Get the checkpoint manager instance\n */\nexport function getCheckpointManager(): CheckpointManager {\n if (!managerInstance) {\n managerInstance = new CheckpointManager()\n }\n return managerInstance\n}\n\n/**\n * Reset the checkpoint manager instance (useful for testing)\n */\nexport function resetCheckpointManager(): void {\n managerInstance = null\n}\n\n/**\n * Create a checkpoint\n */\nexport async function createCheckpoint(\n description: string,\n options?: {\n tags?: string[]\n includeGit?: boolean\n },\n): Promise<Checkpoint> {\n return getCheckpointManager().createCheckpoint(description, options)\n}\n\n/**\n * Restore to a checkpoint\n */\nexport async function restoreCheckpoint(\n checkpointId: string,\n options?: RestoreOptions,\n): Promise<RestoreResult> {\n return getCheckpointManager().restore(checkpointId, options)\n}\n\n/**\n * Track a file change\n */\nexport function trackFileChange(change: Omit<FileChange, 'timestamp'>): void {\n getCheckpointManager().trackFileChange(change)\n}\n\n/**\n * Get all checkpoints\n */\nexport function getCheckpoints(): Checkpoint[] {\n return getCheckpointManager().getCheckpoints()\n}\n"],
5
+ "mappings": "AAOA,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,MAAM,eAAe;AAC9B,SAAS,cAAc;AACvB,SAAS,uBAAuB;AAoFzB,MAAM,kBAAkB;AAAA,EACrB,cAAuC,oBAAI,IAAI;AAAA,EAC/C,oBAAkC,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EAER,YAAY,SAA+D;AACzE,SAAK,gBACH,SAAS,iBAAiB,KAAK,OAAO,GAAG,UAAU,aAAa;AAClE,SAAK,iBAAiB,SAAS,kBAAkB;AAGjD,QAAI,CAAC,WAAW,KAAK,aAAa,GAAG;AACnC,gBAAU,KAAK,eAAe,EAAE,WAAW,KAAK,CAAC;AAAA,IACnD;AAGA,SAAK,gBAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBACJ,aACA,SAIqB;AACrB,UAAM,KAAK,WAAW;AACtB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,iBAAiB,KAAK,kBAAkB;AAG9C,QAAI;AACJ,QAAI;AAEJ,QAAI,SAAS,eAAe,OAAO;AACjC,UAAI;AACF,oBAAY,MAAM,KAAK,oBAAoB;AAC3C,oBAAY,MAAM,KAAK,oBAAoB;AAAA,MAC7C,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,UAAM,aAAyB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA;AAAA,MACd,aAAa,CAAC,GAAG,KAAK,iBAAiB;AAAA,MACvC;AAAA,MACA;AAAA,MACA,UAAU,gBAAgB;AAAA,MAC1B,UAAU;AAAA,QACR,KAAK,OAAO;AAAA,QACZ,MAAM,SAAS;AAAA,MACjB;AAAA,IACF;AAGA,SAAK,YAAY,IAAI,IAAI,UAAU;AACnC,SAAK,eAAe,UAAU;AAG9B,SAAK,oBAAoB,CAAC;AAG1B,SAAK,oBAAoB;AAEzB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QACJ,cACA,UAA0B,CAAC,GACH;AACxB,UAAM,aAAa,KAAK,YAAY,IAAI,YAAY;AACpD,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,eAAe,CAAC;AAAA,QAChB,OAAO,yBAAyB,YAAY;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,gBAA0B,CAAC;AACjC,QAAI;AAGJ,QAAI,QAAQ,cAAc;AACxB,YAAM,SAAS,MAAM,KAAK;AAAA,QACxB,4BAA4B,WAAW,WAAW;AAAA,MACpD;AACA,iBAAW,OAAO;AAAA,IACpB;AAGA,QAAI,QAAQ,QAAQ;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,eAAe,WAAW,YAAY,IAAI,OAAK,EAAE,IAAI;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAGA,QAAI,QAAQ,iBAAiB,OAAO;AAClC,UAAI;AACF,mBAAW,UAAU,WAAW,aAAa;AAC3C,gBAAM,KAAK,kBAAkB,MAAM;AACnC,wBAAc,KAAK,OAAO,IAAI;AAAA,QAChC;AAAA,MACF,SAAS,OAAO;AACd,eAAO;AAAA,UACL,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,cAAc;AAClB,QAAI,QAAQ,cAAc,WAAW,WAAW;AAC9C,UAAI;AACF,cAAM,KAAK,gBAAgB,WAAW,SAAS;AAC/C,sBAAc;AAAA,MAChB,SAAS,OAAO;AACd,eAAO;AAAA,UACL,SAAS;AAAA,UACT;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb,OAAO,uBAAuB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,UACpF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,QAA6C;AAC3D,SAAK,kBAAkB,KAAK;AAAA,MAC1B,GAAG;AAAA,MACH,WAAW,KAAK,IAAI;AAAA,IACtB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,iBAA+B;AAC7B,WAAO,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EAAE;AAAA,MAC3C,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,IAAoC;AAChD,WAAO,KAAK,YAAY,IAAI,EAAE;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,oBAA4C;AAC1C,UAAM,cAAc,KAAK,eAAe;AACxC,WAAO,YAAY,CAAC;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,KAA2B;AAC7C,WAAO,KAAK,eAAe,EAAE,OAAO,QAAM,GAAG,SAAS,MAAM,SAAS,GAAG,CAAC;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,IAAqB;AACpC,UAAM,aAAa,KAAK,YAAY,IAAI,EAAE;AAC1C,QAAI,CAAC,WAAY,QAAO;AAGxB,SAAK,YAAY,OAAO,EAAE;AAG1B,UAAM,WAAW,KAAK,KAAK,eAAe,GAAG,EAAE,OAAO;AACtD,QAAI,WAAW,QAAQ,GAAG;AACxB,iBAAW,QAAQ;AAAA,IACrB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,cAAoC;AACvD,UAAM,UAAwB,CAAC;AAC/B,QAAI,UAAU,KAAK,YAAY,IAAI,YAAY;AAE/C,WAAO,SAAS;AACd,cAAQ,KAAK,OAAO;AACpB,gBAAU,QAAQ,WACd,KAAK,YAAY,IAAI,QAAQ,QAAQ,IACrC;AAAA,IACN;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAkC;AAChC,WAAO,CAAC,GAAG,KAAK,iBAAiB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,sBAA4B;AAC1B,SAAK,oBAAoB,CAAC;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,QACE,QACA,MAKA;AACA,UAAM,iBAAiB,KAAK,YAAY,IAAI,MAAM;AAClD,UAAM,eAAe,KAAK,YAAY,IAAI,IAAI;AAE9C,QAAI,CAAC,kBAAkB,CAAC,cAAc;AACpC,aAAO,EAAE,YAAY,CAAC,GAAG,eAAe,CAAC,GAAG,cAAc,CAAC,EAAE;AAAA,IAC/D;AAGA,UAAM,UAAU,KAAK,qBAAqB,IAAI;AAC9C,UAAM,YAAY,QAAQ,UAAU,QAAM,GAAG,OAAO,MAAM;AAE1D,QAAI,cAAc,IAAI;AACpB,aAAO,EAAE,YAAY,CAAC,GAAG,eAAe,CAAC,GAAG,cAAc,CAAC,EAAE;AAAA,IAC/D;AAEA,UAAM,sBAAsB,QAAQ,MAAM,GAAG,SAAS;AACtD,UAAM,aAAa,oBAAoB,QAAQ,QAAM,GAAG,WAAW;AAEnE,UAAM,aAAuB,CAAC;AAC9B,UAAM,gBAA0B,CAAC;AACjC,UAAM,eAAyB,CAAC;AAEhC,eAAW,UAAU,YAAY;AAC/B,cAAQ,OAAO,MAAM;AAAA,QACnB,KAAK;AACH,qBAAW,KAAK,OAAO,IAAI;AAC3B;AAAA,QACF,KAAK;AACH,wBAAc,KAAK,OAAO,IAAI;AAC9B;AAAA,QACF,KAAK;AACH,uBAAa,KAAK,OAAO,IAAI;AAC7B;AAAA,MACJ;AAAA,IACF;AAEA,WAAO;AAAA,MACL,YAAY,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC;AAAA,MACnC,eAAe,CAAC,GAAG,IAAI,IAAI,aAAa,CAAC;AAAA,MACzC,cAAc,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAwB;AAC9B,QAAI,CAAC,WAAW,KAAK,aAAa,EAAG;AAErC,QAAI;AACF,YAAM,QAAQ,YAAY,KAAK,aAAa;AAE5C,iBAAW,QAAQ,OAAO;AACxB,YAAI,CAAC,KAAK,SAAS,OAAO,EAAG;AAE7B,YAAI;AACF,gBAAM,WAAW,KAAK,KAAK,eAAe,IAAI;AAC9C,gBAAM,UAAU,aAAa,UAAU,OAAO;AAC9C,gBAAM,aAAa,KAAK,MAAM,OAAO;AACrC,eAAK,YAAY,IAAI,WAAW,IAAI,UAAU;AAAA,QAChD,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,YAA8B;AACnD,UAAM,WAAW,KAAK,KAAK,eAAe,GAAG,WAAW,EAAE,OAAO;AACjE,kBAAc,UAAU,KAAK,UAAU,YAAY,MAAM,CAAC,GAAG,OAAO;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAA4B;AAClC,UAAM,cAAc,KAAK,eAAe;AAExC,QAAI,YAAY,UAAU,KAAK,eAAgB;AAG/C,UAAM,WAAW,YAAY,MAAM,KAAK,cAAc;AACtD,eAAW,cAAc,UAAU;AACjC,WAAK,iBAAiB,WAAW,EAAE;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAkB,QAAmC;AACjE,UAAM,WAAW,KAAK,OAAO,GAAG,OAAO,IAAI;AAE3C,YAAQ,OAAO,MAAM;AAAA,MACnB,KAAK;AAEH,YAAI,WAAW,QAAQ,GAAG;AACxB,qBAAW,QAAQ;AAAA,QACrB;AACA;AAAA,MAEF,KAAK;AAEH,YAAI,OAAO,oBAAoB,QAAW;AACxC,gBAAM,MAAM,QAAQ,QAAQ;AAC5B,cAAI,CAAC,WAAW,GAAG,GAAG;AACpB,sBAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,UACpC;AACA,wBAAc,UAAU,OAAO,iBAAiB,OAAO;AAAA,QACzD;AACA;AAAA,MAEF,KAAK;AAEH,YAAI,OAAO,oBAAoB,QAAW;AACxC,gBAAM,MAAM,QAAQ,QAAQ;AAC5B,cAAI,CAAC,WAAW,GAAG,GAAG;AACpB,sBAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,UACpC;AACA,wBAAc,UAAU,OAAO,iBAAiB,OAAO;AAAA,QACzD;AACA;AAAA,IACJ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,sBAAmD;AAC/D,QAAI;AACF,YAAM,SAAS,MAAM,gBAAgB,OAAO,CAAC,aAAa,MAAM,CAAC;AACjE,UAAI,OAAO,SAAS,KAAK,OAAO,QAAQ;AACtC,eAAO,OAAO,OAAO,KAAK;AAAA,MAC5B;AACA,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,sBAAmD;AAC/D,QAAI;AACF,YAAM,SAAS,MAAM,gBAAgB,OAAO;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,OAAO,SAAS,KAAK,OAAO,QAAQ;AACtC,eAAO,OAAO,OAAO,KAAK;AAAA,MAC5B;AACA,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAgB,QAA+B;AAE3D,UAAM,gBAAgB,OAAO,CAAC,OAAO,CAAC;AAGtC,UAAM,SAAS,MAAM,gBAAgB,OAAO,CAAC,YAAY,MAAM,CAAC;AAEhE,QAAI,OAAO,SAAS,GAAG;AACrB,YAAM,IAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,MAAM,EAAE;AAAA,IACzE;AAAA,EACF;AACF;AAGA,IAAI,kBAA4C;AAKzC,SAAS,uBAA0C;AACxD,MAAI,CAAC,iBAAiB;AACpB,sBAAkB,IAAI,kBAAkB;AAAA,EAC1C;AACA,SAAO;AACT;AAKO,SAAS,yBAA+B;AAC7C,oBAAkB;AACpB;AAKA,eAAsB,iBACpB,aACA,SAIqB;AACrB,SAAO,qBAAqB,EAAE,iBAAiB,aAAa,OAAO;AACrE;AAKA,eAAsB,kBACpB,cACA,SACwB;AACxB,SAAO,qBAAqB,EAAE,QAAQ,cAAc,OAAO;AAC7D;AAKO,SAAS,gBAAgB,QAA6C;AAC3E,uBAAqB,EAAE,gBAAgB,MAAM;AAC/C;AAKO,SAAS,iBAA+B;AAC7C,SAAO,qBAAqB,EAAE,eAAe;AAC/C;",
6
+ "names": []
7
+ }