@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,354 @@
1
+ function normalizeClaudeToolResult(raw) {
2
+ if (!raw || typeof raw !== "object") {
3
+ return {
4
+ toolUseId: "",
5
+ toolName: "",
6
+ result: String(raw ?? ""),
7
+ isError: false
8
+ };
9
+ }
10
+ const obj = raw;
11
+ const content = obj.content;
12
+ let result;
13
+ if (typeof content === "string" || typeof content === "object") {
14
+ result = content;
15
+ } else {
16
+ result = String(content ?? "");
17
+ }
18
+ return {
19
+ toolUseId: String(obj.tool_use_id || ""),
20
+ toolName: String(obj.name || ""),
21
+ result,
22
+ isError: Boolean(obj.is_error),
23
+ metadata: obj.metadata
24
+ };
25
+ }
26
+ function normalizeOpenAIToolResult(raw) {
27
+ if (!raw || typeof raw !== "object") {
28
+ return {
29
+ toolUseId: "",
30
+ toolName: "",
31
+ result: String(raw ?? ""),
32
+ isError: false
33
+ };
34
+ }
35
+ const obj = raw;
36
+ const content = obj.content;
37
+ let result;
38
+ if (typeof content === "string" || typeof content === "object") {
39
+ result = content;
40
+ } else {
41
+ result = String(content ?? "");
42
+ }
43
+ return {
44
+ toolUseId: String(obj.tool_call_id || ""),
45
+ toolName: String(obj.name || ""),
46
+ result,
47
+ isError: false
48
+ // OpenAI doesn't have an is_error field
49
+ };
50
+ }
51
+ function normalizeToolResult(raw, adapter) {
52
+ switch (adapter) {
53
+ case "claude":
54
+ return normalizeClaudeToolResult(raw);
55
+ case "openai":
56
+ case "responses":
57
+ return normalizeOpenAIToolResult(raw);
58
+ default:
59
+ return normalizeClaudeToolResult(raw);
60
+ }
61
+ }
62
+ function denormalizeToClaudeFormat(normalized) {
63
+ return {
64
+ type: "tool_result",
65
+ tool_use_id: normalized.toolUseId,
66
+ content: normalized.result,
67
+ is_error: normalized.isError
68
+ };
69
+ }
70
+ function denormalizeToOpenAIFormat(normalized) {
71
+ let content;
72
+ if (typeof normalized.result === "string") {
73
+ content = normalized.result;
74
+ } else {
75
+ try {
76
+ content = JSON.stringify(normalized.result);
77
+ } catch {
78
+ content = String(normalized.result);
79
+ }
80
+ }
81
+ return {
82
+ role: "tool",
83
+ tool_call_id: normalized.toolUseId,
84
+ content
85
+ };
86
+ }
87
+ function denormalizeToolResult(normalized, adapter) {
88
+ switch (adapter) {
89
+ case "claude":
90
+ return denormalizeToClaudeFormat(normalized);
91
+ case "openai":
92
+ case "responses":
93
+ return denormalizeToOpenAIFormat(normalized);
94
+ default:
95
+ return denormalizeToClaudeFormat(normalized);
96
+ }
97
+ }
98
+ function normalizeClaudeContentBlock(block) {
99
+ if (!block || typeof block !== "object") {
100
+ return { type: "text", text: String(block ?? "") };
101
+ }
102
+ const obj = block;
103
+ const type = String(obj.type || "text");
104
+ switch (type) {
105
+ case "text":
106
+ return {
107
+ type: "text",
108
+ text: String(obj.text || "")
109
+ };
110
+ case "tool_use":
111
+ return {
112
+ type: "tool_use",
113
+ toolUseId: String(obj.id || ""),
114
+ toolName: String(obj.name || ""),
115
+ input: obj.input
116
+ };
117
+ case "tool_result": {
118
+ const content = obj.content;
119
+ let resultValue;
120
+ if (typeof content === "string" || typeof content === "object") {
121
+ resultValue = content;
122
+ } else {
123
+ resultValue = String(content ?? "");
124
+ }
125
+ return {
126
+ type: "tool_result",
127
+ toolUseId: String(obj.tool_use_id || ""),
128
+ result: resultValue,
129
+ isError: Boolean(obj.is_error)
130
+ };
131
+ }
132
+ case "thinking":
133
+ return {
134
+ type: "thinking",
135
+ thinking: String(obj.thinking || ""),
136
+ signature: String(obj.signature || "")
137
+ };
138
+ default:
139
+ return { type: "text", text: JSON.stringify(obj) };
140
+ }
141
+ }
142
+ function normalizeOpenAIContentBlock(block) {
143
+ if (!block || typeof block !== "object") {
144
+ return { type: "text", text: String(block ?? "") };
145
+ }
146
+ const obj = block;
147
+ const type = String(obj.type || "text");
148
+ switch (type) {
149
+ case "text":
150
+ return {
151
+ type: "text",
152
+ text: String(obj.text || "")
153
+ };
154
+ case "function":
155
+ const func = obj.function;
156
+ return {
157
+ type: "tool_use",
158
+ toolUseId: String(obj.id || ""),
159
+ toolName: String(func?.name || ""),
160
+ input: parseJSONSafe(String(func?.arguments || "{}"))
161
+ };
162
+ default:
163
+ return { type: "text", text: JSON.stringify(obj) };
164
+ }
165
+ }
166
+ function normalizeOpenAIContent(content) {
167
+ if (typeof content === "string") {
168
+ return [{ type: "text", text: content }];
169
+ }
170
+ if (Array.isArray(content)) {
171
+ return content.map(normalizeOpenAIContentBlock);
172
+ }
173
+ return [{ type: "text", text: String(content ?? "") }];
174
+ }
175
+ function normalizeClaudeContent(content) {
176
+ if (typeof content === "string") {
177
+ return [{ type: "text", text: content }];
178
+ }
179
+ if (Array.isArray(content)) {
180
+ return content.map(normalizeClaudeContentBlock);
181
+ }
182
+ return [{ type: "text", text: String(content ?? "") }];
183
+ }
184
+ function normalizeClaudeMessage(raw) {
185
+ if (!raw || typeof raw !== "object") {
186
+ return {
187
+ role: "user",
188
+ content: [{ type: "text", text: String(raw ?? "") }]
189
+ };
190
+ }
191
+ const obj = raw;
192
+ return {
193
+ role: obj.role || "user",
194
+ content: normalizeClaudeContent(obj.content),
195
+ metadata: {
196
+ id: obj.id,
197
+ model: obj.model
198
+ }
199
+ };
200
+ }
201
+ function normalizeOpenAIMessage(raw) {
202
+ if (!raw || typeof raw !== "object") {
203
+ return {
204
+ role: "user",
205
+ content: [{ type: "text", text: String(raw ?? "") }]
206
+ };
207
+ }
208
+ const obj = raw;
209
+ const content = [];
210
+ if (obj.content) {
211
+ content.push(...normalizeOpenAIContent(obj.content));
212
+ }
213
+ if (obj.tool_calls && Array.isArray(obj.tool_calls)) {
214
+ for (const call of obj.tool_calls) {
215
+ if (call && typeof call === "object") {
216
+ const callObj = call;
217
+ const func = callObj.function;
218
+ content.push({
219
+ type: "tool_use",
220
+ toolUseId: String(callObj.id || ""),
221
+ toolName: String(func?.name || ""),
222
+ input: parseJSONSafe(String(func?.arguments || "{}"))
223
+ });
224
+ }
225
+ }
226
+ }
227
+ return {
228
+ role: mapOpenAIRole(obj.role),
229
+ content,
230
+ metadata: {
231
+ id: obj.id,
232
+ model: obj.model
233
+ }
234
+ };
235
+ }
236
+ function mapOpenAIRole(role) {
237
+ switch (role) {
238
+ case "user":
239
+ return "user";
240
+ case "assistant":
241
+ return "assistant";
242
+ case "system":
243
+ return "system";
244
+ case "tool":
245
+ return "user";
246
+ // Tool results are considered user messages
247
+ default:
248
+ return "user";
249
+ }
250
+ }
251
+ function parseJSONSafe(str) {
252
+ try {
253
+ return JSON.parse(str);
254
+ } catch {
255
+ return {};
256
+ }
257
+ }
258
+ function denormalizeToClaudeMessage(normalized) {
259
+ return {
260
+ role: normalized.role,
261
+ content: normalized.content.map((block) => {
262
+ switch (block.type) {
263
+ case "text":
264
+ return { type: "text", text: block.text || "" };
265
+ case "tool_use":
266
+ return {
267
+ type: "tool_use",
268
+ id: block.toolUseId || "",
269
+ name: block.toolName || "",
270
+ input: block.input || {}
271
+ };
272
+ case "tool_result":
273
+ return {
274
+ type: "tool_result",
275
+ tool_use_id: block.toolUseId || "",
276
+ content: block.result,
277
+ is_error: block.isError || false
278
+ };
279
+ case "thinking":
280
+ return {
281
+ type: "thinking",
282
+ thinking: block.thinking || "",
283
+ signature: block.signature || ""
284
+ };
285
+ default:
286
+ return { type: "text", text: "" };
287
+ }
288
+ })
289
+ };
290
+ }
291
+ function denormalizeToOpenAIMessage(normalized) {
292
+ const textContent = normalized.content.filter((b) => b.type === "text").map((b) => b.text).join("\n");
293
+ const toolCalls = normalized.content.filter((b) => b.type === "tool_use").map((b) => ({
294
+ id: b.toolUseId || "",
295
+ type: "function",
296
+ function: {
297
+ name: b.toolName || "",
298
+ arguments: JSON.stringify(b.input || {})
299
+ }
300
+ }));
301
+ const result = {
302
+ role: normalized.role,
303
+ content: textContent || null
304
+ };
305
+ if (toolCalls.length > 0) {
306
+ result.tool_calls = toolCalls;
307
+ }
308
+ return result;
309
+ }
310
+ function normalizeMessages(messages, adapter) {
311
+ return messages.map((msg) => {
312
+ switch (adapter) {
313
+ case "claude":
314
+ return normalizeClaudeMessage(msg);
315
+ case "openai":
316
+ case "responses":
317
+ return normalizeOpenAIMessage(msg);
318
+ default:
319
+ return normalizeClaudeMessage(msg);
320
+ }
321
+ });
322
+ }
323
+ function denormalizeMessages(messages, adapter) {
324
+ return messages.map((msg) => {
325
+ switch (adapter) {
326
+ case "claude":
327
+ return denormalizeToClaudeMessage(msg);
328
+ case "openai":
329
+ case "responses":
330
+ return denormalizeToOpenAIMessage(msg);
331
+ default:
332
+ return denormalizeToClaudeMessage(msg);
333
+ }
334
+ });
335
+ }
336
+ export {
337
+ denormalizeMessages,
338
+ denormalizeToClaudeFormat,
339
+ denormalizeToClaudeMessage,
340
+ denormalizeToOpenAIFormat,
341
+ denormalizeToOpenAIMessage,
342
+ denormalizeToolResult,
343
+ normalizeClaudeContent,
344
+ normalizeClaudeContentBlock,
345
+ normalizeClaudeMessage,
346
+ normalizeClaudeToolResult,
347
+ normalizeMessages,
348
+ normalizeOpenAIContent,
349
+ normalizeOpenAIContentBlock,
350
+ normalizeOpenAIMessage,
351
+ normalizeOpenAIToolResult,
352
+ normalizeToolResult
353
+ };
354
+ //# sourceMappingURL=messageNormalizer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/services/adapters/messageNormalizer.ts"],
4
+ "sourcesContent": ["/**\n * Message Normalizer for Cross-Adapter Compatibility\n *\n * Provides a unified format for tool results and messages that can be\n * converted to/from different API formats (Claude, OpenAI, etc.)\n *\n * Part of Phase 1.4: Tool Message Normalization\n */\n\n/**\n * Normalized tool result format - adapter-agnostic\n */\nexport interface NormalizedToolResult {\n toolUseId: string\n toolName: string\n result: string | object\n isError: boolean\n metadata?: {\n duration?: number\n cached?: boolean\n }\n}\n\n/**\n * Normalized message content block\n */\nexport interface NormalizedContentBlock {\n type: 'text' | 'tool_use' | 'tool_result' | 'thinking' | 'image'\n // For text blocks\n text?: string\n // For tool_use blocks\n toolUseId?: string\n toolName?: string\n input?: unknown\n // For tool_result blocks\n result?: string | object\n isError?: boolean\n // For thinking blocks\n thinking?: string\n signature?: string\n // For image blocks\n imageData?: string\n mediaType?: string\n}\n\n/**\n * Normalized message format\n */\nexport interface NormalizedMessage {\n role: 'user' | 'assistant' | 'system'\n content: NormalizedContentBlock[]\n metadata?: {\n id?: string\n model?: string\n timestamp?: number\n usage?: {\n inputTokens?: number\n outputTokens?: number\n }\n }\n}\n\n/**\n * Adapter type for format conversion\n */\nexport type AdapterType = 'claude' | 'openai' | 'responses'\n\n/**\n * Normalize a tool result from Claude API format\n */\nexport function normalizeClaudeToolResult(raw: unknown): NormalizedToolResult {\n if (!raw || typeof raw !== 'object') {\n return {\n toolUseId: '',\n toolName: '',\n result: String(raw ?? ''),\n isError: false,\n }\n }\n\n const obj = raw as Record<string, unknown>\n\n const content = obj.content\n let result: string | object\n if (typeof content === 'string' || typeof content === 'object') {\n result = content as string | object\n } else {\n result = String(content ?? '')\n }\n\n return {\n toolUseId: String(obj.tool_use_id || ''),\n toolName: String(obj.name || ''),\n result,\n isError: Boolean(obj.is_error),\n metadata: obj.metadata as NormalizedToolResult['metadata'],\n }\n}\n\n/**\n * Normalize a tool result from OpenAI API format\n */\nexport function normalizeOpenAIToolResult(raw: unknown): NormalizedToolResult {\n if (!raw || typeof raw !== 'object') {\n return {\n toolUseId: '',\n toolName: '',\n result: String(raw ?? ''),\n isError: false,\n }\n }\n\n const obj = raw as Record<string, unknown>\n\n // OpenAI uses tool_call_id instead of tool_use_id\n const content = obj.content\n let result: string | object\n if (typeof content === 'string' || typeof content === 'object') {\n result = content as string | object\n } else {\n result = String(content ?? '')\n }\n\n return {\n toolUseId: String(obj.tool_call_id || ''),\n toolName: String(obj.name || ''),\n result,\n isError: false, // OpenAI doesn't have an is_error field\n }\n}\n\n/**\n * Normalize a tool result based on adapter type\n */\nexport function normalizeToolResult(\n raw: unknown,\n adapter: AdapterType,\n): NormalizedToolResult {\n switch (adapter) {\n case 'claude':\n return normalizeClaudeToolResult(raw)\n case 'openai':\n case 'responses':\n return normalizeOpenAIToolResult(raw)\n default:\n return normalizeClaudeToolResult(raw)\n }\n}\n\n/**\n * Convert normalized tool result back to Claude format\n */\nexport function denormalizeToClaudeFormat(\n normalized: NormalizedToolResult,\n): Record<string, unknown> {\n return {\n type: 'tool_result',\n tool_use_id: normalized.toolUseId,\n content: normalized.result,\n is_error: normalized.isError,\n }\n}\n\n/**\n * Convert normalized tool result back to OpenAI format\n */\nexport function denormalizeToOpenAIFormat(\n normalized: NormalizedToolResult,\n): Record<string, unknown> {\n // Ensure content is always a string for OpenAI\n let content: string\n if (typeof normalized.result === 'string') {\n content = normalized.result\n } else {\n try {\n content = JSON.stringify(normalized.result)\n } catch {\n content = String(normalized.result)\n }\n }\n\n return {\n role: 'tool',\n tool_call_id: normalized.toolUseId,\n content,\n }\n}\n\n/**\n * Convert normalized tool result to target adapter format\n */\nexport function denormalizeToolResult(\n normalized: NormalizedToolResult,\n adapter: AdapterType,\n): Record<string, unknown> {\n switch (adapter) {\n case 'claude':\n return denormalizeToClaudeFormat(normalized)\n case 'openai':\n case 'responses':\n return denormalizeToOpenAIFormat(normalized)\n default:\n return denormalizeToClaudeFormat(normalized)\n }\n}\n\n/**\n * Normalize a content block from Claude format\n */\nexport function normalizeClaudeContentBlock(\n block: unknown,\n): NormalizedContentBlock {\n if (!block || typeof block !== 'object') {\n return { type: 'text', text: String(block ?? '') }\n }\n\n const obj = block as Record<string, unknown>\n const type = String(obj.type || 'text')\n\n switch (type) {\n case 'text':\n return {\n type: 'text',\n text: String(obj.text || ''),\n }\n case 'tool_use':\n return {\n type: 'tool_use',\n toolUseId: String(obj.id || ''),\n toolName: String(obj.name || ''),\n input: obj.input,\n }\n case 'tool_result': {\n const content = obj.content\n let resultValue: string | object\n if (typeof content === 'string' || typeof content === 'object') {\n resultValue = content as string | object\n } else {\n resultValue = String(content ?? '')\n }\n return {\n type: 'tool_result',\n toolUseId: String(obj.tool_use_id || ''),\n result: resultValue,\n isError: Boolean(obj.is_error),\n }\n }\n case 'thinking':\n return {\n type: 'thinking',\n thinking: String(obj.thinking || ''),\n signature: String(obj.signature || ''),\n }\n default:\n return { type: 'text', text: JSON.stringify(obj) }\n }\n}\n\n/**\n * Normalize a content block from OpenAI format\n */\nexport function normalizeOpenAIContentBlock(\n block: unknown,\n): NormalizedContentBlock {\n if (!block || typeof block !== 'object') {\n return { type: 'text', text: String(block ?? '') }\n }\n\n const obj = block as Record<string, unknown>\n const type = String(obj.type || 'text')\n\n switch (type) {\n case 'text':\n return {\n type: 'text',\n text: String(obj.text || ''),\n }\n case 'function':\n // OpenAI function call format\n const func = obj.function as Record<string, unknown> | undefined\n return {\n type: 'tool_use',\n toolUseId: String(obj.id || ''),\n toolName: String(func?.name || ''),\n input: parseJSONSafe(String(func?.arguments || '{}')),\n }\n default:\n return { type: 'text', text: JSON.stringify(obj) }\n }\n}\n\n/**\n * Normalize OpenAI message content (which can be string or array)\n */\nexport function normalizeOpenAIContent(\n content: unknown,\n): NormalizedContentBlock[] {\n if (typeof content === 'string') {\n return [{ type: 'text', text: content }]\n }\n\n if (Array.isArray(content)) {\n return content.map(normalizeOpenAIContentBlock)\n }\n\n return [{ type: 'text', text: String(content ?? '') }]\n}\n\n/**\n * Normalize Claude message content\n */\nexport function normalizeClaudeContent(\n content: unknown,\n): NormalizedContentBlock[] {\n if (typeof content === 'string') {\n return [{ type: 'text', text: content }]\n }\n\n if (Array.isArray(content)) {\n return content.map(normalizeClaudeContentBlock)\n }\n\n return [{ type: 'text', text: String(content ?? '') }]\n}\n\n/**\n * Normalize a complete message from Claude format\n */\nexport function normalizeClaudeMessage(raw: unknown): NormalizedMessage {\n if (!raw || typeof raw !== 'object') {\n return {\n role: 'user',\n content: [{ type: 'text', text: String(raw ?? '') }],\n }\n }\n\n const obj = raw as Record<string, unknown>\n\n return {\n role: (obj.role as NormalizedMessage['role']) || 'user',\n content: normalizeClaudeContent(obj.content),\n metadata: {\n id: obj.id as string | undefined,\n model: obj.model as string | undefined,\n },\n }\n}\n\n/**\n * Normalize a complete message from OpenAI format\n */\nexport function normalizeOpenAIMessage(raw: unknown): NormalizedMessage {\n if (!raw || typeof raw !== 'object') {\n return {\n role: 'user',\n content: [{ type: 'text', text: String(raw ?? '') }],\n }\n }\n\n const obj = raw as Record<string, unknown>\n\n // Handle tool calls in OpenAI format\n const content: NormalizedContentBlock[] = []\n\n // Add text content if present\n if (obj.content) {\n content.push(...normalizeOpenAIContent(obj.content))\n }\n\n // Add tool calls if present\n if (obj.tool_calls && Array.isArray(obj.tool_calls)) {\n for (const call of obj.tool_calls) {\n if (call && typeof call === 'object') {\n const callObj = call as Record<string, unknown>\n const func = callObj.function as Record<string, unknown> | undefined\n content.push({\n type: 'tool_use',\n toolUseId: String(callObj.id || ''),\n toolName: String(func?.name || ''),\n input: parseJSONSafe(String(func?.arguments || '{}')),\n })\n }\n }\n }\n\n return {\n role: mapOpenAIRole(obj.role as string),\n content,\n metadata: {\n id: obj.id as string | undefined,\n model: obj.model as string | undefined,\n },\n }\n}\n\n/**\n * Map OpenAI role to normalized role\n */\nfunction mapOpenAIRole(role: string): NormalizedMessage['role'] {\n switch (role) {\n case 'user':\n return 'user'\n case 'assistant':\n return 'assistant'\n case 'system':\n return 'system'\n case 'tool':\n return 'user' // Tool results are considered user messages\n default:\n return 'user'\n }\n}\n\n/**\n * Safe JSON parse with fallback\n */\nfunction parseJSONSafe(str: string): unknown {\n try {\n return JSON.parse(str)\n } catch {\n return {}\n }\n}\n\n/**\n * Convert normalized message to Claude format\n */\nexport function denormalizeToClaudeMessage(\n normalized: NormalizedMessage,\n): Record<string, unknown> {\n return {\n role: normalized.role,\n content: normalized.content.map(block => {\n switch (block.type) {\n case 'text':\n return { type: 'text', text: block.text || '' }\n case 'tool_use':\n return {\n type: 'tool_use',\n id: block.toolUseId || '',\n name: block.toolName || '',\n input: block.input || {},\n }\n case 'tool_result':\n return {\n type: 'tool_result',\n tool_use_id: block.toolUseId || '',\n content: block.result,\n is_error: block.isError || false,\n }\n case 'thinking':\n return {\n type: 'thinking',\n thinking: block.thinking || '',\n signature: block.signature || '',\n }\n default:\n return { type: 'text', text: '' }\n }\n }),\n }\n}\n\n/**\n * Convert normalized message to OpenAI format\n */\nexport function denormalizeToOpenAIMessage(\n normalized: NormalizedMessage,\n): Record<string, unknown> {\n const textContent = normalized.content\n .filter(b => b.type === 'text')\n .map(b => b.text)\n .join('\\n')\n\n const toolCalls = normalized.content\n .filter(b => b.type === 'tool_use')\n .map(b => ({\n id: b.toolUseId || '',\n type: 'function',\n function: {\n name: b.toolName || '',\n arguments: JSON.stringify(b.input || {}),\n },\n }))\n\n const result: Record<string, unknown> = {\n role: normalized.role,\n content: textContent || null,\n }\n\n if (toolCalls.length > 0) {\n result.tool_calls = toolCalls\n }\n\n return result\n}\n\n/**\n * Batch normalize messages\n */\nexport function normalizeMessages(\n messages: unknown[],\n adapter: AdapterType,\n): NormalizedMessage[] {\n return messages.map(msg => {\n switch (adapter) {\n case 'claude':\n return normalizeClaudeMessage(msg)\n case 'openai':\n case 'responses':\n return normalizeOpenAIMessage(msg)\n default:\n return normalizeClaudeMessage(msg)\n }\n })\n}\n\n/**\n * Batch denormalize messages\n */\nexport function denormalizeMessages(\n messages: NormalizedMessage[],\n adapter: AdapterType,\n): Record<string, unknown>[] {\n return messages.map(msg => {\n switch (adapter) {\n case 'claude':\n return denormalizeToClaudeMessage(msg)\n case 'openai':\n case 'responses':\n return denormalizeToOpenAIMessage(msg)\n default:\n return denormalizeToClaudeMessage(msg)\n }\n })\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,4 +1,5 @@
1
1
  import { ModelAPIAdapter } from "./base.js";
2
+ import { getToolDescription } from "../../Tool.js";
2
3
  import { zodToJsonSchema } from "zod-to-json-schema";
3
4
  class ResponsesAPIAdapter extends ModelAPIAdapter {
4
5
  createRequest(params) {
@@ -46,7 +47,8 @@ class ResponsesAPIAdapter extends ModelAPIAdapter {
46
47
  type: "function",
47
48
  function: {
48
49
  name: tool.name,
49
- description: tool.description || "",
50
+ // Use getToolDescription() for safe synchronous access
51
+ description: getToolDescription(tool),
50
52
  parameters: tool.inputJSONSchema || zodToJsonSchema(tool.inputSchema)
51
53
  }
52
54
  }));
@@ -54,18 +56,19 @@ class ResponsesAPIAdapter extends ModelAPIAdapter {
54
56
  return tools.map((tool) => {
55
57
  const hasSchema = tool.inputJSONSchema || tool.inputSchema;
56
58
  const isCustom = !hasSchema;
59
+ const description = getToolDescription(tool);
57
60
  if (isCustom) {
58
61
  return {
59
62
  type: "custom",
60
63
  name: tool.name,
61
- description: tool.description || ""
64
+ description
62
65
  };
63
66
  } else {
64
67
  return {
65
68
  type: "function",
66
69
  function: {
67
70
  name: tool.name,
68
- description: tool.description || "",
71
+ description,
69
72
  parameters: tool.inputJSONSchema || zodToJsonSchema(tool.inputSchema)
70
73
  }
71
74
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/services/adapters/responsesAPI.ts"],
4
- "sourcesContent": ["import { ModelAPIAdapter } from './base'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n} from '@minto-types/modelCapabilities'\nimport { Tool } from '@tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\n\nexport class ResponsesAPIAdapter extends ModelAPIAdapter {\n createRequest(params: UnifiedRequestParams): any {\n const { messages, systemPrompt, tools, maxTokens } = params\n\n // Separate system messages and user messages\n const systemMessages = messages.filter(m => m.role === 'system')\n const nonSystemMessages = messages.filter(m => m.role !== 'system')\n\n // Build base request\n const request: any = {\n model: this.modelProfile.modelName,\n input: this.convertMessagesToInput(nonSystemMessages),\n instructions: this.buildInstructions(systemPrompt, systemMessages),\n }\n\n // Add token limit\n request[this.getMaxTokensParam()] = maxTokens\n\n // Add temperature (GPT-5 only supports 1)\n if (this.getTemperature() === 1) {\n request.temperature = 1\n }\n\n // Add reasoning control - correct format for Responses API\n if (this.shouldIncludeReasoningEffort()) {\n request.reasoning = {\n effort:\n params.reasoningEffort ||\n this.modelProfile.reasoningEffort ||\n 'medium',\n }\n }\n\n // Add verbosity control - correct format for Responses API\n if (this.shouldIncludeVerbosity()) {\n request.text = {\n verbosity: params.verbosity || 'high', // High verbosity for coding tasks\n }\n }\n\n // Add tools\n if (tools && tools.length > 0) {\n request.tools = this.buildTools(tools)\n\n // Handle allowed_tools\n if (\n params.allowedTools &&\n this.capabilities.toolCalling.supportsAllowedTools\n ) {\n request.tool_choice = {\n type: 'allowed_tools',\n mode: 'auto',\n tools: params.allowedTools,\n }\n }\n }\n\n // Add state management\n if (\n params.previousResponseId &&\n this.capabilities.stateManagement.supportsPreviousResponseId\n ) {\n request.previous_response_id = params.previousResponseId\n }\n\n return request\n }\n\n buildTools(tools: Tool[]): any[] {\n // If freeform not supported, use traditional format\n if (!this.capabilities.toolCalling.supportsFreeform) {\n return tools.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description || '',\n parameters: tool.inputJSONSchema || zodToJsonSchema(tool.inputSchema),\n },\n }))\n }\n\n // Custom tools format (GPT-5 feature)\n return tools.map(tool => {\n const hasSchema = tool.inputJSONSchema || tool.inputSchema\n const isCustom = !hasSchema\n\n if (isCustom) {\n // Custom tool format\n return {\n type: 'custom',\n name: tool.name,\n description: tool.description || '',\n }\n } else {\n // Traditional function format\n return {\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description || '',\n parameters:\n tool.inputJSONSchema || zodToJsonSchema(tool.inputSchema),\n },\n }\n }\n })\n }\n\n parseResponse(response: any): UnifiedResponse {\n // Process basic text output\n let content = response.output_text || ''\n\n // Process structured output\n if (response.output && Array.isArray(response.output)) {\n const messageItems = response.output.filter(\n item => item.type === 'message',\n )\n if (messageItems.length > 0) {\n content = messageItems\n .map(item => {\n if (item.content && Array.isArray(item.content)) {\n return item.content\n .filter(c => c.type === 'text')\n .map(c => c.text)\n .join('\\n')\n }\n return item.content || ''\n })\n .filter(Boolean)\n .join('\\n\\n')\n }\n }\n\n // Parse tool calls\n const toolCalls = this.parseToolCalls(response)\n\n // Build unified response\n return {\n id: response.id || `resp_${Date.now()}`,\n content,\n toolCalls,\n usage: {\n promptTokens: response.usage?.input_tokens || 0,\n completionTokens: response.usage?.output_tokens || 0,\n reasoningTokens:\n response.usage?.output_tokens_details?.reasoning_tokens,\n },\n responseId: response.id, // Save for state management\n }\n }\n\n private convertMessagesToInput(messages: any[]): any {\n // Convert messages to Responses API input format\n // May need adjustment based on actual API specification\n return messages\n }\n\n private buildInstructions(\n systemPrompt: string[],\n systemMessages: any[],\n ): string {\n const systemContent = systemMessages.map(m => m.content).join('\\n\\n')\n const promptContent = systemPrompt.join('\\n\\n')\n return [systemContent, promptContent].filter(Boolean).join('\\n\\n')\n }\n\n private parseToolCalls(response: any): any[] {\n if (!response.output || !Array.isArray(response.output)) {\n return []\n }\n\n return response.output\n .filter(item => item.type === 'tool_call')\n .map(item => ({\n id: item.id || `tool_${Date.now()}`,\n type: 'tool_call',\n name: item.name,\n arguments: item.arguments, // Can be text or JSON\n }))\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { ModelAPIAdapter } from './base'\nimport {\n UnifiedRequestParams,\n UnifiedResponse,\n} from '@minto-types/modelCapabilities'\nimport { Tool, getToolDescription } from '@tool'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\n\nexport class ResponsesAPIAdapter extends ModelAPIAdapter {\n createRequest(params: UnifiedRequestParams): any {\n const { messages, systemPrompt, tools, maxTokens } = params\n\n // Separate system messages and user messages\n const systemMessages = messages.filter(m => m.role === 'system')\n const nonSystemMessages = messages.filter(m => m.role !== 'system')\n\n // Build base request\n const request: any = {\n model: this.modelProfile.modelName,\n input: this.convertMessagesToInput(nonSystemMessages),\n instructions: this.buildInstructions(systemPrompt, systemMessages),\n }\n\n // Add token limit\n request[this.getMaxTokensParam()] = maxTokens\n\n // Add temperature (GPT-5 only supports 1)\n if (this.getTemperature() === 1) {\n request.temperature = 1\n }\n\n // Add reasoning control - correct format for Responses API\n if (this.shouldIncludeReasoningEffort()) {\n request.reasoning = {\n effort:\n params.reasoningEffort ||\n this.modelProfile.reasoningEffort ||\n 'medium',\n }\n }\n\n // Add verbosity control - correct format for Responses API\n if (this.shouldIncludeVerbosity()) {\n request.text = {\n verbosity: params.verbosity || 'high', // High verbosity for coding tasks\n }\n }\n\n // Add tools\n if (tools && tools.length > 0) {\n request.tools = this.buildTools(tools)\n\n // Handle allowed_tools\n if (\n params.allowedTools &&\n this.capabilities.toolCalling.supportsAllowedTools\n ) {\n request.tool_choice = {\n type: 'allowed_tools',\n mode: 'auto',\n tools: params.allowedTools,\n }\n }\n }\n\n // Add state management\n if (\n params.previousResponseId &&\n this.capabilities.stateManagement.supportsPreviousResponseId\n ) {\n request.previous_response_id = params.previousResponseId\n }\n\n return request\n }\n\n buildTools(tools: Tool[]): any[] {\n // If freeform not supported, use traditional format\n if (!this.capabilities.toolCalling.supportsFreeform) {\n return tools.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n // Use getToolDescription() for safe synchronous access\n description: getToolDescription(tool),\n parameters: tool.inputJSONSchema || zodToJsonSchema(tool.inputSchema),\n },\n }))\n }\n\n // Custom tools format (GPT-5 feature)\n return tools.map(tool => {\n const hasSchema = tool.inputJSONSchema || tool.inputSchema\n const isCustom = !hasSchema\n // Use getToolDescription() for safe synchronous access\n const description = getToolDescription(tool)\n\n if (isCustom) {\n // Custom tool format\n return {\n type: 'custom',\n name: tool.name,\n description,\n }\n } else {\n // Traditional function format\n return {\n type: 'function',\n function: {\n name: tool.name,\n description,\n parameters:\n tool.inputJSONSchema || zodToJsonSchema(tool.inputSchema),\n },\n }\n }\n })\n }\n\n parseResponse(response: any): UnifiedResponse {\n // Process basic text output\n let content = response.output_text || ''\n\n // Process structured output\n if (response.output && Array.isArray(response.output)) {\n const messageItems = response.output.filter(\n item => item.type === 'message',\n )\n if (messageItems.length > 0) {\n content = messageItems\n .map(item => {\n if (item.content && Array.isArray(item.content)) {\n return item.content\n .filter(c => c.type === 'text')\n .map(c => c.text)\n .join('\\n')\n }\n return item.content || ''\n })\n .filter(Boolean)\n .join('\\n\\n')\n }\n }\n\n // Parse tool calls\n const toolCalls = this.parseToolCalls(response)\n\n // Build unified response\n return {\n id: response.id || `resp_${Date.now()}`,\n content,\n toolCalls,\n usage: {\n promptTokens: response.usage?.input_tokens || 0,\n completionTokens: response.usage?.output_tokens || 0,\n reasoningTokens:\n response.usage?.output_tokens_details?.reasoning_tokens,\n },\n responseId: response.id, // Save for state management\n }\n }\n\n private convertMessagesToInput(messages: any[]): any {\n // Convert messages to Responses API input format\n // May need adjustment based on actual API specification\n return messages\n }\n\n private buildInstructions(\n systemPrompt: string[],\n systemMessages: any[],\n ): string {\n const systemContent = systemMessages.map(m => m.content).join('\\n\\n')\n const promptContent = systemPrompt.join('\\n\\n')\n return [systemContent, promptContent].filter(Boolean).join('\\n\\n')\n }\n\n private parseToolCalls(response: any): any[] {\n if (!response.output || !Array.isArray(response.output)) {\n return []\n }\n\n return response.output\n .filter(item => item.type === 'tool_call')\n .map(item => ({\n id: item.id || `tool_${Date.now()}`,\n type: 'tool_call',\n name: item.name,\n arguments: item.arguments, // Can be text or JSON\n }))\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }