indusagi-coding-agent 0.1.45 → 0.1.47

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 (432) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/command-line/args.js +1 -1
  3. package/dist/command-line/args.js.map +1 -1
  4. package/dist/command-line/login-handler.d.ts.map +1 -1
  5. package/dist/command-line/login-handler.js +3 -1
  6. package/dist/command-line/login-handler.js.map +1 -1
  7. package/dist/command-line/session-picker.d.ts.map +1 -1
  8. package/dist/command-line/session-picker.js +26 -48
  9. package/dist/command-line/session-picker.js.map +1 -1
  10. package/dist/config.js +1 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/helpers/open-auth-url.d.ts +2 -0
  13. package/dist/helpers/open-auth-url.d.ts.map +1 -0
  14. package/dist/helpers/open-auth-url.js +54 -0
  15. package/dist/helpers/open-auth-url.js.map +1 -0
  16. package/dist/index.d.ts +2 -2
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +2 -2
  19. package/dist/index.js.map +1 -1
  20. package/dist/interfaces/index.d.ts +1 -1
  21. package/dist/interfaces/index.d.ts.map +1 -1
  22. package/dist/interfaces/index.js +1 -1
  23. package/dist/interfaces/index.js.map +1 -1
  24. package/dist/interfaces/react-ink/adapters/command-router.d.ts +17 -0
  25. package/dist/interfaces/react-ink/adapters/command-router.d.ts.map +1 -0
  26. package/dist/interfaces/react-ink/adapters/command-router.js +646 -0
  27. package/dist/interfaces/react-ink/adapters/command-router.js.map +1 -0
  28. package/dist/interfaces/react-ink/adapters/session-events.d.ts +5 -0
  29. package/dist/interfaces/react-ink/adapters/session-events.d.ts.map +1 -0
  30. package/dist/interfaces/react-ink/adapters/session-events.js +69 -0
  31. package/dist/interfaces/react-ink/adapters/session-events.js.map +1 -0
  32. package/dist/interfaces/react-ink/adapters/session-history.d.ts +8 -0
  33. package/dist/interfaces/react-ink/adapters/session-history.d.ts.map +1 -0
  34. package/dist/interfaces/react-ink/adapters/session-history.js +69 -0
  35. package/dist/interfaces/react-ink/adapters/session-history.js.map +1 -0
  36. package/dist/interfaces/react-ink/adapters/tool-state.d.ts +4 -0
  37. package/dist/interfaces/react-ink/adapters/tool-state.d.ts.map +1 -0
  38. package/dist/interfaces/react-ink/adapters/tool-state.js +67 -0
  39. package/dist/interfaces/react-ink/adapters/tool-state.js.map +1 -0
  40. package/dist/interfaces/react-ink/components/AppShell.d.ts +16 -0
  41. package/dist/interfaces/react-ink/components/AppShell.d.ts.map +1 -0
  42. package/dist/interfaces/react-ink/components/AppShell.js +599 -0
  43. package/dist/interfaces/react-ink/components/AppShell.js.map +1 -0
  44. package/dist/interfaces/react-ink/components/ChangelogBlock.d.ts +9 -0
  45. package/dist/interfaces/react-ink/components/ChangelogBlock.d.ts.map +1 -0
  46. package/dist/interfaces/react-ink/components/ChangelogBlock.js +58 -0
  47. package/dist/interfaces/react-ink/components/ChangelogBlock.js.map +1 -0
  48. package/dist/interfaces/react-ink/components/DisplayBlockView.d.ts +9 -0
  49. package/dist/interfaces/react-ink/components/DisplayBlockView.d.ts.map +1 -0
  50. package/dist/interfaces/react-ink/components/DisplayBlockView.js +11 -0
  51. package/dist/interfaces/react-ink/components/DisplayBlockView.js.map +1 -0
  52. package/dist/interfaces/react-ink/components/Footer.d.ts +11 -0
  53. package/dist/interfaces/react-ink/components/Footer.d.ts.map +1 -0
  54. package/dist/interfaces/react-ink/components/Footer.js +18 -0
  55. package/dist/interfaces/react-ink/components/Footer.js.map +1 -0
  56. package/dist/interfaces/react-ink/components/Header.d.ts +13 -0
  57. package/dist/interfaces/react-ink/components/Header.d.ts.map +1 -0
  58. package/dist/interfaces/react-ink/components/Header.js +22 -0
  59. package/dist/interfaces/react-ink/components/Header.js.map +1 -0
  60. package/dist/interfaces/react-ink/components/MessageList.d.ts +14 -0
  61. package/dist/interfaces/react-ink/components/MessageList.d.ts.map +1 -0
  62. package/dist/interfaces/react-ink/components/MessageList.js +43 -0
  63. package/dist/interfaces/react-ink/components/MessageList.js.map +1 -0
  64. package/dist/interfaces/react-ink/components/MessageRow.d.ts +13 -0
  65. package/dist/interfaces/react-ink/components/MessageRow.d.ts.map +1 -0
  66. package/dist/interfaces/react-ink/components/MessageRow.js +35 -0
  67. package/dist/interfaces/react-ink/components/MessageRow.js.map +1 -0
  68. package/dist/interfaces/react-ink/components/PromptInput.d.ts +21 -0
  69. package/dist/interfaces/react-ink/components/PromptInput.d.ts.map +1 -0
  70. package/dist/interfaces/react-ink/components/PromptInput.js +231 -0
  71. package/dist/interfaces/react-ink/components/PromptInput.js.map +1 -0
  72. package/dist/interfaces/react-ink/components/StatusLine.d.ts +10 -0
  73. package/dist/interfaces/react-ink/components/StatusLine.d.ts.map +1 -0
  74. package/dist/interfaces/react-ink/components/StatusLine.js +39 -0
  75. package/dist/interfaces/react-ink/components/StatusLine.js.map +1 -0
  76. package/dist/interfaces/react-ink/components/TaskPanel.d.ts +10 -0
  77. package/dist/interfaces/react-ink/components/TaskPanel.d.ts.map +1 -0
  78. package/dist/interfaces/react-ink/components/TaskPanel.js +23 -0
  79. package/dist/interfaces/react-ink/components/TaskPanel.js.map +1 -0
  80. package/dist/interfaces/react-ink/components/ToolEventBlock.d.ts +18 -0
  81. package/dist/interfaces/react-ink/components/ToolEventBlock.d.ts.map +1 -0
  82. package/dist/interfaces/react-ink/components/ToolEventBlock.js +61 -0
  83. package/dist/interfaces/react-ink/components/ToolEventBlock.js.map +1 -0
  84. package/dist/interfaces/react-ink/components/dialogs/DialogFrame.d.ts +9 -0
  85. package/dist/interfaces/react-ink/components/dialogs/DialogFrame.d.ts.map +1 -0
  86. package/dist/interfaces/react-ink/components/dialogs/DialogFrame.js +6 -0
  87. package/dist/interfaces/react-ink/components/dialogs/DialogFrame.js.map +1 -0
  88. package/dist/interfaces/react-ink/components/dialogs/LoginDialog.d.ts +15 -0
  89. package/dist/interfaces/react-ink/components/dialogs/LoginDialog.d.ts.map +1 -0
  90. package/dist/interfaces/react-ink/components/dialogs/LoginDialog.js +10 -0
  91. package/dist/interfaces/react-ink/components/dialogs/LoginDialog.js.map +1 -0
  92. package/dist/interfaces/react-ink/components/dialogs/ModelDialog.d.ts +10 -0
  93. package/dist/interfaces/react-ink/components/dialogs/ModelDialog.d.ts.map +1 -0
  94. package/dist/interfaces/react-ink/components/dialogs/ModelDialog.js +64 -0
  95. package/dist/interfaces/react-ink/components/dialogs/ModelDialog.js.map +1 -0
  96. package/dist/interfaces/react-ink/components/dialogs/OAuthDialog.d.ts +10 -0
  97. package/dist/interfaces/react-ink/components/dialogs/OAuthDialog.d.ts.map +1 -0
  98. package/dist/interfaces/react-ink/components/dialogs/OAuthDialog.js +24 -0
  99. package/dist/interfaces/react-ink/components/dialogs/OAuthDialog.js.map +1 -0
  100. package/dist/interfaces/react-ink/components/dialogs/ScopedModelsDialog.d.ts +10 -0
  101. package/dist/interfaces/react-ink/components/dialogs/ScopedModelsDialog.d.ts.map +1 -0
  102. package/dist/interfaces/react-ink/components/dialogs/ScopedModelsDialog.js +95 -0
  103. package/dist/interfaces/react-ink/components/dialogs/ScopedModelsDialog.js.map +1 -0
  104. package/dist/interfaces/react-ink/components/dialogs/SelectableDialog.d.ts +17 -0
  105. package/dist/interfaces/react-ink/components/dialogs/SelectableDialog.d.ts.map +1 -0
  106. package/dist/interfaces/react-ink/components/dialogs/SelectableDialog.js +66 -0
  107. package/dist/interfaces/react-ink/components/dialogs/SelectableDialog.js.map +1 -0
  108. package/dist/interfaces/react-ink/components/dialogs/SessionDialog.d.ts +11 -0
  109. package/dist/interfaces/react-ink/components/dialogs/SessionDialog.d.ts.map +1 -0
  110. package/dist/interfaces/react-ink/components/dialogs/SessionDialog.js +10 -0
  111. package/dist/interfaces/react-ink/components/dialogs/SessionDialog.js.map +1 -0
  112. package/dist/interfaces/react-ink/components/dialogs/SettingsDialog.d.ts +15 -0
  113. package/dist/interfaces/react-ink/components/dialogs/SettingsDialog.d.ts.map +1 -0
  114. package/dist/interfaces/react-ink/components/dialogs/SettingsDialog.js +79 -0
  115. package/dist/interfaces/react-ink/components/dialogs/SettingsDialog.js.map +1 -0
  116. package/dist/interfaces/react-ink/components/dialogs/StartupSessionPicker.d.ts +10 -0
  117. package/dist/interfaces/react-ink/components/dialogs/StartupSessionPicker.d.ts.map +1 -0
  118. package/dist/interfaces/react-ink/components/dialogs/StartupSessionPicker.js +99 -0
  119. package/dist/interfaces/react-ink/components/dialogs/StartupSessionPicker.js.map +1 -0
  120. package/dist/interfaces/react-ink/components/dialogs/ThemeDialog.d.ts +8 -0
  121. package/dist/interfaces/react-ink/components/dialogs/ThemeDialog.d.ts.map +1 -0
  122. package/dist/interfaces/react-ink/components/dialogs/ThemeDialog.js +7 -0
  123. package/dist/interfaces/react-ink/components/dialogs/ThemeDialog.js.map +1 -0
  124. package/dist/interfaces/react-ink/components/dialogs/TreeDialog.d.ts +9 -0
  125. package/dist/interfaces/react-ink/components/dialogs/TreeDialog.d.ts.map +1 -0
  126. package/dist/interfaces/react-ink/components/dialogs/TreeDialog.js +7 -0
  127. package/dist/interfaces/react-ink/components/dialogs/TreeDialog.js.map +1 -0
  128. package/dist/interfaces/react-ink/components/dialogs/UserMessageDialog.d.ts +9 -0
  129. package/dist/interfaces/react-ink/components/dialogs/UserMessageDialog.d.ts.map +1 -0
  130. package/dist/interfaces/react-ink/components/dialogs/UserMessageDialog.js +7 -0
  131. package/dist/interfaces/react-ink/components/dialogs/UserMessageDialog.js.map +1 -0
  132. package/dist/interfaces/react-ink/components/messages/AssistantMessage.d.ts +12 -0
  133. package/dist/interfaces/react-ink/components/messages/AssistantMessage.d.ts.map +1 -0
  134. package/dist/interfaces/react-ink/components/messages/AssistantMessage.js +20 -0
  135. package/dist/interfaces/react-ink/components/messages/AssistantMessage.js.map +1 -0
  136. package/dist/interfaces/react-ink/components/messages/BashMessage.d.ts +9 -0
  137. package/dist/interfaces/react-ink/components/messages/BashMessage.d.ts.map +1 -0
  138. package/dist/interfaces/react-ink/components/messages/BashMessage.js +11 -0
  139. package/dist/interfaces/react-ink/components/messages/BashMessage.js.map +1 -0
  140. package/dist/interfaces/react-ink/components/messages/BranchSummaryMessage.d.ts +9 -0
  141. package/dist/interfaces/react-ink/components/messages/BranchSummaryMessage.d.ts.map +1 -0
  142. package/dist/interfaces/react-ink/components/messages/BranchSummaryMessage.js +6 -0
  143. package/dist/interfaces/react-ink/components/messages/BranchSummaryMessage.js.map +1 -0
  144. package/dist/interfaces/react-ink/components/messages/CompactionMessage.d.ts +9 -0
  145. package/dist/interfaces/react-ink/components/messages/CompactionMessage.d.ts.map +1 -0
  146. package/dist/interfaces/react-ink/components/messages/CompactionMessage.js +6 -0
  147. package/dist/interfaces/react-ink/components/messages/CompactionMessage.js.map +1 -0
  148. package/dist/interfaces/react-ink/components/messages/CustomMessage.d.ts +10 -0
  149. package/dist/interfaces/react-ink/components/messages/CustomMessage.d.ts.map +1 -0
  150. package/dist/interfaces/react-ink/components/messages/CustomMessage.js +9 -0
  151. package/dist/interfaces/react-ink/components/messages/CustomMessage.js.map +1 -0
  152. package/dist/interfaces/react-ink/components/messages/SkillInvocationMessage.d.ts +8 -0
  153. package/dist/interfaces/react-ink/components/messages/SkillInvocationMessage.d.ts.map +1 -0
  154. package/dist/interfaces/react-ink/components/messages/SkillInvocationMessage.js +10 -0
  155. package/dist/interfaces/react-ink/components/messages/SkillInvocationMessage.js.map +1 -0
  156. package/dist/interfaces/react-ink/components/messages/ToolCallMessage.d.ts +9 -0
  157. package/dist/interfaces/react-ink/components/messages/ToolCallMessage.d.ts.map +1 -0
  158. package/dist/interfaces/react-ink/components/messages/ToolCallMessage.js +8 -0
  159. package/dist/interfaces/react-ink/components/messages/ToolCallMessage.js.map +1 -0
  160. package/dist/interfaces/react-ink/components/messages/ToolResultBlock.d.ts +12 -0
  161. package/dist/interfaces/react-ink/components/messages/ToolResultBlock.d.ts.map +1 -0
  162. package/dist/interfaces/react-ink/components/messages/ToolResultBlock.js +8 -0
  163. package/dist/interfaces/react-ink/components/messages/ToolResultBlock.js.map +1 -0
  164. package/dist/interfaces/react-ink/components/messages/UserMessage.d.ts +10 -0
  165. package/dist/interfaces/react-ink/components/messages/UserMessage.d.ts.map +1 -0
  166. package/dist/interfaces/react-ink/components/messages/UserMessage.js +7 -0
  167. package/dist/interfaces/react-ink/components/messages/UserMessage.js.map +1 -0
  168. package/dist/interfaces/react-ink/hooks/use-agent-session.d.ts +8 -0
  169. package/dist/interfaces/react-ink/hooks/use-agent-session.d.ts.map +1 -0
  170. package/dist/interfaces/react-ink/hooks/use-agent-session.js +29 -0
  171. package/dist/interfaces/react-ink/hooks/use-agent-session.js.map +1 -0
  172. package/dist/interfaces/react-ink/hooks/use-app-keybindings.d.ts +14 -0
  173. package/dist/interfaces/react-ink/hooks/use-app-keybindings.d.ts.map +1 -0
  174. package/dist/interfaces/react-ink/hooks/use-app-keybindings.js +54 -0
  175. package/dist/interfaces/react-ink/hooks/use-app-keybindings.js.map +1 -0
  176. package/dist/interfaces/react-ink/hooks/use-footer-data.d.ts +7 -0
  177. package/dist/interfaces/react-ink/hooks/use-footer-data.d.ts.map +1 -0
  178. package/dist/interfaces/react-ink/hooks/use-footer-data.js +17 -0
  179. package/dist/interfaces/react-ink/hooks/use-footer-data.js.map +1 -0
  180. package/dist/interfaces/react-ink/hooks/use-prompt-submit.d.ts +15 -0
  181. package/dist/interfaces/react-ink/hooks/use-prompt-submit.d.ts.map +1 -0
  182. package/dist/interfaces/react-ink/hooks/use-prompt-submit.js +53 -0
  183. package/dist/interfaces/react-ink/hooks/use-prompt-submit.js.map +1 -0
  184. package/dist/interfaces/react-ink/hooks/use-session-history.d.ts +8 -0
  185. package/dist/interfaces/react-ink/hooks/use-session-history.d.ts.map +1 -0
  186. package/dist/interfaces/react-ink/hooks/use-session-history.js +8 -0
  187. package/dist/interfaces/react-ink/hooks/use-session-history.js.map +1 -0
  188. package/dist/interfaces/react-ink/index.d.ts +12 -0
  189. package/dist/interfaces/react-ink/index.d.ts.map +1 -0
  190. package/dist/interfaces/react-ink/index.js +12 -0
  191. package/dist/interfaces/react-ink/index.js.map +1 -0
  192. package/dist/interfaces/react-ink/interactive-mode.d.ts +23 -0
  193. package/dist/interfaces/react-ink/interactive-mode.d.ts.map +1 -0
  194. package/dist/interfaces/react-ink/interactive-mode.js +50 -0
  195. package/dist/interfaces/react-ink/interactive-mode.js.map +1 -0
  196. package/dist/interfaces/react-ink/render-root.d.ts +18 -0
  197. package/dist/interfaces/react-ink/render-root.d.ts.map +1 -0
  198. package/dist/interfaces/react-ink/render-root.js +6 -0
  199. package/dist/interfaces/react-ink/render-root.js.map +1 -0
  200. package/dist/interfaces/react-ink/state/reducer.d.ts +51 -0
  201. package/dist/interfaces/react-ink/state/reducer.d.ts.map +1 -0
  202. package/dist/interfaces/react-ink/state/reducer.js +122 -0
  203. package/dist/interfaces/react-ink/state/reducer.js.map +1 -0
  204. package/dist/interfaces/react-ink/state/store.d.ts +4 -0
  205. package/dist/interfaces/react-ink/state/store.d.ts.map +1 -0
  206. package/dist/interfaces/react-ink/state/store.js +5 -0
  207. package/dist/interfaces/react-ink/state/store.js.map +1 -0
  208. package/dist/interfaces/react-ink/state/ui-state.d.ts +5 -0
  209. package/dist/interfaces/react-ink/state/ui-state.d.ts.map +1 -0
  210. package/dist/interfaces/react-ink/state/ui-state.js +20 -0
  211. package/dist/interfaces/react-ink/state/ui-state.js.map +1 -0
  212. package/dist/interfaces/react-ink/theme-adapter.d.ts +10 -0
  213. package/dist/interfaces/react-ink/theme-adapter.d.ts.map +1 -0
  214. package/dist/interfaces/react-ink/theme-adapter.js +54 -0
  215. package/dist/interfaces/react-ink/theme-adapter.js.map +1 -0
  216. package/dist/interfaces/react-ink/types.d.ts +140 -0
  217. package/dist/interfaces/react-ink/types.d.ts.map +1 -0
  218. package/dist/interfaces/react-ink/types.js +2 -0
  219. package/dist/interfaces/react-ink/types.js.map +1 -0
  220. package/dist/interfaces/react-ink/utils/changelog.d.ts +7 -0
  221. package/dist/interfaces/react-ink/utils/changelog.d.ts.map +1 -0
  222. package/dist/interfaces/react-ink/utils/changelog.js +40 -0
  223. package/dist/interfaces/react-ink/utils/changelog.js.map +1 -0
  224. package/dist/interfaces/react-ink/utils/message-groups.d.ts +26 -0
  225. package/dist/interfaces/react-ink/utils/message-groups.d.ts.map +1 -0
  226. package/dist/interfaces/react-ink/utils/message-groups.js +230 -0
  227. package/dist/interfaces/react-ink/utils/message-groups.js.map +1 -0
  228. package/dist/interfaces/react-ink/utils/prompt-autocomplete.d.ts +20 -0
  229. package/dist/interfaces/react-ink/utils/prompt-autocomplete.d.ts.map +1 -0
  230. package/dist/interfaces/react-ink/utils/prompt-autocomplete.js +46 -0
  231. package/dist/interfaces/react-ink/utils/prompt-autocomplete.js.map +1 -0
  232. package/dist/interfaces/react-ink/utils/selection-dialog.d.ts +3 -0
  233. package/dist/interfaces/react-ink/utils/selection-dialog.d.ts.map +1 -0
  234. package/dist/interfaces/react-ink/utils/selection-dialog.js +18 -0
  235. package/dist/interfaces/react-ink/utils/selection-dialog.js.map +1 -0
  236. package/dist/interfaces/react-ink/utils/session-actions.d.ts +8 -0
  237. package/dist/interfaces/react-ink/utils/session-actions.d.ts.map +1 -0
  238. package/dist/interfaces/react-ink/utils/session-actions.js +56 -0
  239. package/dist/interfaces/react-ink/utils/session-actions.js.map +1 -0
  240. package/dist/interfaces/react-ink/utils/slash-commands.d.ts +10 -0
  241. package/dist/interfaces/react-ink/utils/slash-commands.d.ts.map +1 -0
  242. package/dist/interfaces/react-ink/utils/slash-commands.js +111 -0
  243. package/dist/interfaces/react-ink/utils/slash-commands.js.map +1 -0
  244. package/dist/interfaces/react-ink/utils/tool-display.d.ts +22 -0
  245. package/dist/interfaces/react-ink/utils/tool-display.d.ts.map +1 -0
  246. package/dist/interfaces/react-ink/utils/tool-display.js +349 -0
  247. package/dist/interfaces/react-ink/utils/tool-display.js.map +1 -0
  248. package/dist/interfaces/service-api/rpc-mode.js +1 -1
  249. package/dist/interfaces/service-api/rpc-mode.js.map +1 -1
  250. package/dist/interfaces/theme/theme.d.ts.map +1 -0
  251. package/dist/interfaces/{terminal-ui/theme → theme}/theme.js +1 -1
  252. package/dist/interfaces/theme/theme.js.map +1 -0
  253. package/dist/main.js +1 -1
  254. package/dist/main.js.map +1 -1
  255. package/dist/runtime/agent-session.js +1 -1
  256. package/dist/runtime/agent-session.js.map +1 -1
  257. package/dist/runtime/html-export/index.js +1 -1
  258. package/dist/runtime/html-export/index.js.map +1 -1
  259. package/dist/runtime/html-export/index.ts +1 -2
  260. package/dist/runtime/html-export/tool-renderer.d.ts +1 -1
  261. package/dist/runtime/html-export/tool-renderer.d.ts.map +1 -1
  262. package/dist/runtime/html-export/tool-renderer.ts +1 -1
  263. package/dist/runtime/plugins/runner.js +1 -1
  264. package/dist/runtime/plugins/runner.js.map +1 -1
  265. package/dist/runtime/plugins/types.d.ts +1 -1
  266. package/dist/runtime/plugins/types.d.ts.map +1 -1
  267. package/dist/runtime/resource-loader.d.ts +1 -1
  268. package/dist/runtime/resource-loader.d.ts.map +1 -1
  269. package/dist/runtime/resource-loader.js +1 -1
  270. package/dist/runtime/resource-loader.js.map +1 -1
  271. package/dist/runtime/system-prompt.js +1 -1
  272. package/dist/runtime/system-prompt.js.map +1 -1
  273. package/dist/runtime/tooling/composio-compat.d.ts +169 -0
  274. package/dist/runtime/tooling/composio-compat.d.ts.map +1 -0
  275. package/dist/runtime/tooling/composio-compat.js +163 -0
  276. package/dist/runtime/tooling/composio-compat.js.map +1 -0
  277. package/dist/runtime/tooling/index.d.ts +12 -25
  278. package/dist/runtime/tooling/index.d.ts.map +1 -1
  279. package/dist/runtime/tooling/index.js +3 -3
  280. package/dist/runtime/tooling/index.js.map +1 -1
  281. package/guides/INDUSVX_OBSERVE_FULL_INTEGRATION_REPORT.md +2 -2
  282. package/package.json +9 -5
  283. package/dist/interfaces/induscode-ui-delegate.d.ts +0 -3
  284. package/dist/interfaces/induscode-ui-delegate.d.ts.map +0 -1
  285. package/dist/interfaces/induscode-ui-delegate.js +0 -148
  286. package/dist/interfaces/induscode-ui-delegate.js.map +0 -1
  287. package/dist/interfaces/terminal-ui/components/armin.d.ts +0 -19
  288. package/dist/interfaces/terminal-ui/components/armin.d.ts.map +0 -1
  289. package/dist/interfaces/terminal-ui/components/armin.js +0 -280
  290. package/dist/interfaces/terminal-ui/components/armin.js.map +0 -1
  291. package/dist/interfaces/terminal-ui/components/assistant-message.d.ts +0 -13
  292. package/dist/interfaces/terminal-ui/components/assistant-message.d.ts.map +0 -1
  293. package/dist/interfaces/terminal-ui/components/assistant-message.js +0 -95
  294. package/dist/interfaces/terminal-ui/components/assistant-message.js.map +0 -1
  295. package/dist/interfaces/terminal-ui/components/bash-execution.d.ts +0 -24
  296. package/dist/interfaces/terminal-ui/components/bash-execution.d.ts.map +0 -1
  297. package/dist/interfaces/terminal-ui/components/bash-execution.js +0 -135
  298. package/dist/interfaces/terminal-ui/components/bash-execution.js.map +0 -1
  299. package/dist/interfaces/terminal-ui/components/bordered-loader.d.ts +0 -14
  300. package/dist/interfaces/terminal-ui/components/bordered-loader.d.ts.map +0 -1
  301. package/dist/interfaces/terminal-ui/components/bordered-loader.js +0 -78
  302. package/dist/interfaces/terminal-ui/components/bordered-loader.js.map +0 -1
  303. package/dist/interfaces/terminal-ui/components/branch-summary-message.d.ts +0 -16
  304. package/dist/interfaces/terminal-ui/components/branch-summary-message.d.ts.map +0 -1
  305. package/dist/interfaces/terminal-ui/components/branch-summary-message.js +0 -55
  306. package/dist/interfaces/terminal-ui/components/branch-summary-message.js.map +0 -1
  307. package/dist/interfaces/terminal-ui/components/compaction-summary-message.d.ts +0 -16
  308. package/dist/interfaces/terminal-ui/components/compaction-summary-message.d.ts.map +0 -1
  309. package/dist/interfaces/terminal-ui/components/compaction-summary-message.js +0 -60
  310. package/dist/interfaces/terminal-ui/components/compaction-summary-message.js.map +0 -1
  311. package/dist/interfaces/terminal-ui/components/config-selector.d.ts +0 -71
  312. package/dist/interfaces/terminal-ui/components/config-selector.d.ts.map +0 -1
  313. package/dist/interfaces/terminal-ui/components/config-selector.js +0 -459
  314. package/dist/interfaces/terminal-ui/components/config-selector.js.map +0 -1
  315. package/dist/interfaces/terminal-ui/components/countdown-timer.d.ts +0 -10
  316. package/dist/interfaces/terminal-ui/components/countdown-timer.d.ts.map +0 -1
  317. package/dist/interfaces/terminal-ui/components/countdown-timer.js +0 -42
  318. package/dist/interfaces/terminal-ui/components/countdown-timer.js.map +0 -1
  319. package/dist/interfaces/terminal-ui/components/custom-editor.d.ts +0 -17
  320. package/dist/interfaces/terminal-ui/components/custom-editor.d.ts.map +0 -1
  321. package/dist/interfaces/terminal-ui/components/custom-editor.js +0 -72
  322. package/dist/interfaces/terminal-ui/components/custom-editor.js.map +0 -1
  323. package/dist/interfaces/terminal-ui/components/custom-message.d.ts +0 -19
  324. package/dist/interfaces/terminal-ui/components/custom-message.d.ts.map +0 -1
  325. package/dist/interfaces/terminal-ui/components/custom-message.js +0 -71
  326. package/dist/interfaces/terminal-ui/components/custom-message.js.map +0 -1
  327. package/dist/interfaces/terminal-ui/components/diff.d.ts +0 -9
  328. package/dist/interfaces/terminal-ui/components/diff.d.ts.map +0 -1
  329. package/dist/interfaces/terminal-ui/components/diff.js +0 -126
  330. package/dist/interfaces/terminal-ui/components/diff.js.map +0 -1
  331. package/dist/interfaces/terminal-ui/components/dynamic-border.d.ts +0 -20
  332. package/dist/interfaces/terminal-ui/components/dynamic-border.d.ts.map +0 -1
  333. package/dist/interfaces/terminal-ui/components/dynamic-border.js +0 -40
  334. package/dist/interfaces/terminal-ui/components/dynamic-border.js.map +0 -1
  335. package/dist/interfaces/terminal-ui/components/extension-editor.d.ts +0 -13
  336. package/dist/interfaces/terminal-ui/components/extension-editor.d.ts.map +0 -1
  337. package/dist/interfaces/terminal-ui/components/extension-editor.js +0 -94
  338. package/dist/interfaces/terminal-ui/components/extension-editor.js.map +0 -1
  339. package/dist/interfaces/terminal-ui/components/extension-input.d.ts +0 -18
  340. package/dist/interfaces/terminal-ui/components/extension-input.d.ts.map +0 -1
  341. package/dist/interfaces/terminal-ui/components/extension-input.js +0 -72
  342. package/dist/interfaces/terminal-ui/components/extension-input.js.map +0 -1
  343. package/dist/interfaces/terminal-ui/components/extension-selector.d.ts +0 -19
  344. package/dist/interfaces/terminal-ui/components/extension-selector.d.ts.map +0 -1
  345. package/dist/interfaces/terminal-ui/components/extension-selector.js +0 -93
  346. package/dist/interfaces/terminal-ui/components/extension-selector.js.map +0 -1
  347. package/dist/interfaces/terminal-ui/components/footer.d.ts +0 -17
  348. package/dist/interfaces/terminal-ui/components/footer.d.ts.map +0 -1
  349. package/dist/interfaces/terminal-ui/components/footer.js +0 -160
  350. package/dist/interfaces/terminal-ui/components/footer.js.map +0 -1
  351. package/dist/interfaces/terminal-ui/components/index.d.ts +0 -80
  352. package/dist/interfaces/terminal-ui/components/index.d.ts.map +0 -1
  353. package/dist/interfaces/terminal-ui/components/index.js +0 -74
  354. package/dist/interfaces/terminal-ui/components/index.js.map +0 -1
  355. package/dist/interfaces/terminal-ui/components/keybinding-hints.d.ts +0 -23
  356. package/dist/interfaces/terminal-ui/components/keybinding-hints.d.ts.map +0 -1
  357. package/dist/interfaces/terminal-ui/components/keybinding-hints.js +0 -54
  358. package/dist/interfaces/terminal-ui/components/keybinding-hints.js.map +0 -1
  359. package/dist/interfaces/terminal-ui/components/login-dialog.d.ts +0 -29
  360. package/dist/interfaces/terminal-ui/components/login-dialog.d.ts.map +0 -1
  361. package/dist/interfaces/terminal-ui/components/login-dialog.js +0 -143
  362. package/dist/interfaces/terminal-ui/components/login-dialog.js.map +0 -1
  363. package/dist/interfaces/terminal-ui/components/model-selector.d.ts +0 -43
  364. package/dist/interfaces/terminal-ui/components/model-selector.d.ts.map +0 -1
  365. package/dist/interfaces/terminal-ui/components/model-selector.js +0 -201
  366. package/dist/interfaces/terminal-ui/components/model-selector.js.map +0 -1
  367. package/dist/interfaces/terminal-ui/components/oauth-selector.d.ts +0 -75
  368. package/dist/interfaces/terminal-ui/components/oauth-selector.d.ts.map +0 -1
  369. package/dist/interfaces/terminal-ui/components/oauth-selector.js +0 -374
  370. package/dist/interfaces/terminal-ui/components/oauth-selector.js.map +0 -1
  371. package/dist/interfaces/terminal-ui/components/scoped-models-selector.d.ts +0 -39
  372. package/dist/interfaces/terminal-ui/components/scoped-models-selector.d.ts.map +0 -1
  373. package/dist/interfaces/terminal-ui/components/scoped-models-selector.js +0 -242
  374. package/dist/interfaces/terminal-ui/components/scoped-models-selector.js.map +0 -1
  375. package/dist/interfaces/terminal-ui/components/session-selector-search.d.ts +0 -21
  376. package/dist/interfaces/terminal-ui/components/session-selector-search.d.ts.map +0 -1
  377. package/dist/interfaces/terminal-ui/components/session-selector-search.js +0 -135
  378. package/dist/interfaces/terminal-ui/components/session-selector-search.js.map +0 -1
  379. package/dist/interfaces/terminal-ui/components/session-selector.d.ts +0 -85
  380. package/dist/interfaces/terminal-ui/components/session-selector.d.ts.map +0 -1
  381. package/dist/interfaces/terminal-ui/components/session-selector.js +0 -688
  382. package/dist/interfaces/terminal-ui/components/session-selector.js.map +0 -1
  383. package/dist/interfaces/terminal-ui/components/settings-selector.d.ts +0 -49
  384. package/dist/interfaces/terminal-ui/components/settings-selector.d.ts.map +0 -1
  385. package/dist/interfaces/terminal-ui/components/settings-selector.js +0 -159
  386. package/dist/interfaces/terminal-ui/components/settings-selector.js.map +0 -1
  387. package/dist/interfaces/terminal-ui/components/show-images-selector.d.ts +0 -10
  388. package/dist/interfaces/terminal-ui/components/show-images-selector.d.ts.map +0 -1
  389. package/dist/interfaces/terminal-ui/components/show-images-selector.js +0 -32
  390. package/dist/interfaces/terminal-ui/components/show-images-selector.js.map +0 -1
  391. package/dist/interfaces/terminal-ui/components/skill-invocation-message.d.ts +0 -17
  392. package/dist/interfaces/terminal-ui/components/skill-invocation-message.d.ts.map +0 -1
  393. package/dist/interfaces/terminal-ui/components/skill-invocation-message.js +0 -55
  394. package/dist/interfaces/terminal-ui/components/skill-invocation-message.js.map +0 -1
  395. package/dist/interfaces/terminal-ui/components/theme-selector.d.ts +0 -11
  396. package/dist/interfaces/terminal-ui/components/theme-selector.d.ts.map +0 -1
  397. package/dist/interfaces/terminal-ui/components/theme-selector.js +0 -39
  398. package/dist/interfaces/terminal-ui/components/theme-selector.js.map +0 -1
  399. package/dist/interfaces/terminal-ui/components/thinking-selector.d.ts +0 -11
  400. package/dist/interfaces/terminal-ui/components/thinking-selector.d.ts.map +0 -1
  401. package/dist/interfaces/terminal-ui/components/thinking-selector.js +0 -45
  402. package/dist/interfaces/terminal-ui/components/thinking-selector.js.map +0 -1
  403. package/dist/interfaces/terminal-ui/components/tool-execution.d.ts +0 -72
  404. package/dist/interfaces/terminal-ui/components/tool-execution.d.ts.map +0 -1
  405. package/dist/interfaces/terminal-ui/components/tool-execution.js +0 -1162
  406. package/dist/interfaces/terminal-ui/components/tool-execution.js.map +0 -1
  407. package/dist/interfaces/terminal-ui/components/tree-selector.d.ts +0 -62
  408. package/dist/interfaces/terminal-ui/components/tree-selector.d.ts.map +0 -1
  409. package/dist/interfaces/terminal-ui/components/tree-selector.js +0 -886
  410. package/dist/interfaces/terminal-ui/components/tree-selector.js.map +0 -1
  411. package/dist/interfaces/terminal-ui/components/user-message-selector.d.ts +0 -24
  412. package/dist/interfaces/terminal-ui/components/user-message-selector.d.ts.map +0 -1
  413. package/dist/interfaces/terminal-ui/components/user-message-selector.js +0 -99
  414. package/dist/interfaces/terminal-ui/components/user-message-selector.js.map +0 -1
  415. package/dist/interfaces/terminal-ui/components/user-message.d.ts +0 -193
  416. package/dist/interfaces/terminal-ui/components/user-message.d.ts.map +0 -1
  417. package/dist/interfaces/terminal-ui/components/user-message.js +0 -201
  418. package/dist/interfaces/terminal-ui/components/user-message.js.map +0 -1
  419. package/dist/interfaces/terminal-ui/components/visual-truncate.d.ts +0 -12
  420. package/dist/interfaces/terminal-ui/components/visual-truncate.d.ts.map +0 -1
  421. package/dist/interfaces/terminal-ui/components/visual-truncate.js +0 -25
  422. package/dist/interfaces/terminal-ui/components/visual-truncate.js.map +0 -1
  423. package/dist/interfaces/terminal-ui/interactive-mode.d.ts +0 -1941
  424. package/dist/interfaces/terminal-ui/interactive-mode.d.ts.map +0 -1
  425. package/dist/interfaces/terminal-ui/interactive-mode.js +0 -5940
  426. package/dist/interfaces/terminal-ui/interactive-mode.js.map +0 -1
  427. package/dist/interfaces/terminal-ui/theme/theme.d.ts.map +0 -1
  428. package/dist/interfaces/terminal-ui/theme/theme.js.map +0 -1
  429. /package/dist/interfaces/{terminal-ui/theme → theme}/dark.json +0 -0
  430. /package/dist/interfaces/{terminal-ui/theme → theme}/light.json +0 -0
  431. /package/dist/interfaces/{terminal-ui/theme → theme}/theme-schema.json +0 -0
  432. /package/dist/interfaces/{terminal-ui/theme → theme}/theme.d.ts +0 -0
@@ -0,0 +1,646 @@
1
+ import { spawnSync } from "child_process";
2
+ import { existsSync, mkdirSync, unlinkSync, writeFileSync } from "fs";
3
+ import { tmpdir } from "os";
4
+ import { dirname, join } from "path";
5
+ import { getAuthPath, getDebugLogPath, getMCPConfigPath, getShareViewerUrl, } from "../../../config.js";
6
+ import { resolveModelScope } from "../../../runtime/model-resolver.js";
7
+ import { setTheme } from "../../theme/theme.js";
8
+ import { flattenSessionTree, listSessions, listUserMessages } from "./session-history.js";
9
+ import { buildLoginProviders, buildSavedAccounts, copyLastAssistantMessage, formatSessionStats, setSessionName, } from "../utils/session-actions.js";
10
+ import { getFullChangelogMarkdown } from "../utils/changelog.js";
11
+ import { formatSlashCommandList } from "../utils/slash-commands.js";
12
+ function ensureLeadingSlash(name) {
13
+ return name.startsWith("/") ? name : `/${name}`;
14
+ }
15
+ function buildOAuthOverlay(provider) {
16
+ return {
17
+ kind: "oauth",
18
+ providerId: provider.id,
19
+ providerName: provider.label,
20
+ mode: "apiKey",
21
+ inputLabel: `API key for ${provider.id}`,
22
+ inputValue: "",
23
+ accountId: "default",
24
+ accountName: "Default",
25
+ progress: `Credentials will be saved to ${getAuthPath()}.`,
26
+ };
27
+ }
28
+ function formatHotkeys() {
29
+ return [
30
+ "Keyboard Shortcuts:",
31
+ " Ctrl+C Cancel active work or exit when idle",
32
+ " Ctrl+P Cycle models",
33
+ " Shift+Tab Cycle thinking level",
34
+ " Ctrl+, Open settings",
35
+ " Ctrl+R Open session resume",
36
+ " Ctrl+G Open session tree",
37
+ " Ctrl+S Queue a steering message",
38
+ " Ctrl+J Insert a new line",
39
+ " Ctrl+U Clear the prompt",
40
+ " Enter Submit prompt",
41
+ " / Slash commands",
42
+ " ! Run a bash command",
43
+ " !! Run a bash command without adding it to context",
44
+ ].join("\n");
45
+ }
46
+ function ensureParentDirectory(filePath) {
47
+ const parent = dirname(filePath);
48
+ if (!existsSync(parent)) {
49
+ mkdirSync(parent, { recursive: true });
50
+ }
51
+ }
52
+ function writeDebugLog(session) {
53
+ const debugPath = getDebugLogPath();
54
+ const stats = session.getSessionStats();
55
+ const debugData = [
56
+ `Debug output at ${new Date().toISOString()}`,
57
+ `Session ID: ${stats.sessionId}`,
58
+ stats.sessionFile ? `Session file: ${stats.sessionFile}` : "Session file: (none)",
59
+ `Messages: ${stats.totalMessages}`,
60
+ `Tool calls: ${stats.toolCalls}`,
61
+ `Tokens: ${stats.tokens.total}`,
62
+ `Cost: ${stats.cost.toFixed(4)}`,
63
+ "",
64
+ "=== Messages (JSONL) ===",
65
+ ...session.messages.map((message) => JSON.stringify(message)),
66
+ "",
67
+ ].join("\n");
68
+ ensureParentDirectory(debugPath);
69
+ writeFileSync(debugPath, debugData, "utf-8");
70
+ return debugPath;
71
+ }
72
+ async function handleThemeCommand(searchTerm, ctx) {
73
+ if (!searchTerm) {
74
+ ctx.setOverlay({ kind: "theme" });
75
+ return;
76
+ }
77
+ const result = setTheme(searchTerm, true);
78
+ if (!result.success) {
79
+ ctx.setError(result.error ?? `Unable to load theme "${searchTerm}".`);
80
+ return;
81
+ }
82
+ ctx.session.settingsManager.setTheme(searchTerm);
83
+ ctx.setStatus(`Theme set to ${searchTerm}.`, "success");
84
+ }
85
+ async function handleModelCommand(searchTerm, ctx) {
86
+ if (!searchTerm) {
87
+ ctx.setOverlay({ kind: "model" });
88
+ return;
89
+ }
90
+ const normalized = searchTerm.toLowerCase();
91
+ const match = ctx.session.modelRegistry
92
+ .getAvailable()
93
+ .find((model) => `${model.provider}/${model.id}`.toLowerCase() === normalized || model.id.toLowerCase() === normalized);
94
+ if (!match) {
95
+ ctx.setError(`No model matched "${searchTerm}".`);
96
+ return;
97
+ }
98
+ await ctx.session.setModel(match);
99
+ ctx.setStatus(`Model set to ${match.provider}/${match.id}.`, "success");
100
+ }
101
+ async function handleScopedModelsCommand(ctx) {
102
+ ctx.session.modelRegistry.refresh();
103
+ const models = ctx.session.modelRegistry.getAvailable();
104
+ if (models.length === 0) {
105
+ ctx.setError("No authenticated models are available yet.");
106
+ return;
107
+ }
108
+ let selectedIds = ctx.session.scopedModels.map((entry) => `${entry.model.provider}/${entry.model.id}`);
109
+ if (selectedIds.length === 0) {
110
+ const patterns = ctx.session.settingsManager.getEnabledModels();
111
+ if (patterns && patterns.length > 0) {
112
+ const resolved = await resolveModelScope(patterns, ctx.session.modelRegistry);
113
+ selectedIds = resolved.map((entry) => `${entry.model.provider}/${entry.model.id}`);
114
+ }
115
+ }
116
+ ctx.setOverlay({
117
+ kind: "scopedModels",
118
+ models,
119
+ selectedIds,
120
+ });
121
+ }
122
+ async function handleResumeCommand(ctx) {
123
+ ctx.setOverlay({ kind: "session", sessions: [], loading: true });
124
+ try {
125
+ const sessions = await listSessions(ctx.session);
126
+ ctx.setOverlay({ kind: "session", sessions, loading: false });
127
+ }
128
+ catch (error) {
129
+ ctx.setOverlay({
130
+ kind: "session",
131
+ sessions: [],
132
+ loading: false,
133
+ error: error instanceof Error ? error.message : String(error),
134
+ });
135
+ }
136
+ }
137
+ async function handleMCPCommand(subCommand, ctx) {
138
+ switch (subCommand) {
139
+ case "":
140
+ case "status": {
141
+ const servers = await ctx.session.getMCPStatus();
142
+ const toolNames = ctx.session.getMCPToolNames();
143
+ if (servers.length === 0) {
144
+ ctx.setStatus("MCP: no servers are configured or connected.");
145
+ return;
146
+ }
147
+ const lines = servers.map((server) => `${server.name}: ${server.connected ? "connected" : "disconnected"}${server.toolCount ? ` (${server.toolCount} tools)` : ""}`);
148
+ ctx.setStatus(`MCP Servers:\n${lines.join("\n")}\n\nTools: ${toolNames.length} available`);
149
+ return;
150
+ }
151
+ case "connect":
152
+ case "reconnect": {
153
+ const toolCount = await ctx.session.reconnectMCP(getMCPConfigPath());
154
+ ctx.setStatus(`Reconnected MCP servers. ${toolCount} tools available.`, "success");
155
+ return;
156
+ }
157
+ case "disconnect":
158
+ await ctx.session.disconnectMCP();
159
+ ctx.setStatus("Disconnected MCP servers.", "success");
160
+ return;
161
+ case "tools": {
162
+ const tools = ctx.session.getMCPToolNames();
163
+ ctx.setStatus(tools.length > 0 ? `MCP Tools:\n${tools.join("\n")}` : "MCP: no tools are loaded.");
164
+ return;
165
+ }
166
+ default:
167
+ ctx.setError("Usage: /mcp [status|connect|reconnect|disconnect|tools]");
168
+ }
169
+ }
170
+ async function handleMemoryCommand(subCommand, ctx) {
171
+ const trimmed = subCommand.trim();
172
+ const [command = "", ...rest] = trimmed.split(/\s+/).filter(Boolean);
173
+ const apiKey = rest.join(" ").trim();
174
+ switch (command) {
175
+ case "":
176
+ case "status": {
177
+ const savedOpenAIKey = await ctx.session.modelRegistry.getApiKeyForProvider("openai");
178
+ const memorySettings = ctx.session.settingsManager.getMemorySettings();
179
+ const enabledText = ctx.session.isMemoryEnabled() ? "Enabled for this session" : "Disabled for this session";
180
+ const defaultText = memorySettings.enabled && memorySettings.autoConnect ? "ON" : "OFF";
181
+ const toolCount = ctx.session.getMemoryToolNames().length;
182
+ ctx.setStatus(`Memory: ${enabledText}\n\nDefault startup: ${defaultText}\nSaved OpenAI key: ${savedOpenAIKey ? "Configured" : "Missing"}\nTools available: ${toolCount}`);
183
+ return;
184
+ }
185
+ case "on":
186
+ try {
187
+ await ctx.session.enableMemory({ persistSettings: true });
188
+ ctx.setStatus("Memory enabled. It will now auto-start for future sessions too.", "success");
189
+ }
190
+ catch (error) {
191
+ ctx.setError(`Could not enable memory: ${error instanceof Error ? error.message : "Unknown error"}\n\nTip: run /memory setup <OPENAI_API_KEY> first.`);
192
+ }
193
+ return;
194
+ case "off":
195
+ await ctx.session.disableMemory({ persistSettings: true });
196
+ ctx.setStatus("Memory disabled. Future sessions will start with memory off.", "success");
197
+ return;
198
+ case "setup":
199
+ if (!apiKey) {
200
+ const savedOpenAIKey = await ctx.session.modelRegistry.getApiKeyForProvider("openai");
201
+ if (!savedOpenAIKey) {
202
+ ctx.setError("Usage: /memory setup <OPENAI_API_KEY>");
203
+ return;
204
+ }
205
+ await ctx.session.enableMemory({ persistSettings: true });
206
+ ctx.setStatus("Memory enabled using your saved OpenAI API key.", "success");
207
+ return;
208
+ }
209
+ await ctx.session.enableMemory({ apiKey, persistSettings: true });
210
+ ctx.setStatus("OpenAI API key saved and memory enabled.", "success");
211
+ return;
212
+ case "clear":
213
+ if (!ctx.session.isMemoryEnabled()) {
214
+ ctx.setError("Memory is not enabled. Run /memory on first.");
215
+ return;
216
+ }
217
+ await ctx.session.clearMemory();
218
+ ctx.setStatus("Memory cleared for the current thread.", "success");
219
+ return;
220
+ case "working":
221
+ if (!ctx.session.isMemoryEnabled()) {
222
+ ctx.setError("Memory is not enabled. Run /memory on first.");
223
+ return;
224
+ }
225
+ {
226
+ const workingMemory = await ctx.session.getWorkingMemory();
227
+ ctx.setStatus(workingMemory
228
+ ? `Working Memory:\n\n${workingMemory}`
229
+ : "Working Memory: not set yet. The updateWorkingMemory tool can write to it once memory is enabled.");
230
+ }
231
+ return;
232
+ case "tools": {
233
+ const tools = ctx.session.getMemoryToolNames();
234
+ ctx.setStatus(tools.length > 0 ? `Memory Tools:\n${tools.join("\n")}` : "Memory tools are not enabled.");
235
+ return;
236
+ }
237
+ default:
238
+ ctx.setError("Usage: /memory [status|on|off|setup <OPENAI_API_KEY>|clear|working|tools]");
239
+ }
240
+ }
241
+ function asRecord(value) {
242
+ return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
243
+ }
244
+ function asNonEmptyString(value) {
245
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
246
+ }
247
+ function collectUrls(value, seen = new WeakSet(), urls = []) {
248
+ if (value == null) {
249
+ return urls;
250
+ }
251
+ if (Array.isArray(value)) {
252
+ for (const item of value) {
253
+ collectUrls(item, seen, urls);
254
+ }
255
+ return urls;
256
+ }
257
+ const record = asRecord(value);
258
+ if (!record) {
259
+ return urls;
260
+ }
261
+ if (seen.has(record)) {
262
+ return urls;
263
+ }
264
+ seen.add(record);
265
+ for (const key of [
266
+ "authUri",
267
+ "auth_uri",
268
+ "authUrl",
269
+ "auth_url",
270
+ "authorizationUrl",
271
+ "authorization_url",
272
+ "redirectUrl",
273
+ "redirect_url",
274
+ "composio_link_redirect_url",
275
+ "account_url",
276
+ "accountUrl",
277
+ "borneo_dashboard_url",
278
+ ]) {
279
+ const candidate = asNonEmptyString(record[key]);
280
+ if (!candidate || urls.includes(candidate)) {
281
+ continue;
282
+ }
283
+ try {
284
+ const parsed = new URL(candidate);
285
+ if (parsed.protocol === "http:" || parsed.protocol === "https:") {
286
+ urls.push(candidate);
287
+ }
288
+ }
289
+ catch {
290
+ // Ignore malformed URLs from provider payloads.
291
+ }
292
+ }
293
+ for (const nested of Object.values(record)) {
294
+ collectUrls(nested, seen, urls);
295
+ }
296
+ return urls;
297
+ }
298
+ function formatComposioAccount(account) {
299
+ const record = asRecord(account) ?? {};
300
+ const toolkit = asNonEmptyString(asRecord(record.toolkit)?.slug) ?? "unknown";
301
+ const status = asNonEmptyString(record.status) ?? "UNKNOWN";
302
+ const accountId = asNonEmptyString(record.id) ?? "unknown";
303
+ const authConfig = asNonEmptyString(asRecord(record.authConfig)?.id) ?? asNonEmptyString(asRecord(record.auth_config)?.id);
304
+ const reason = asNonEmptyString(record.statusReason) ?? asNonEmptyString(record.status_reason);
305
+ const urls = collectUrls(account).slice(0, 2);
306
+ const lines = [` • ${toolkit} account ${accountId} [${status}]${authConfig ? ` authConfig=${authConfig}` : ""}`];
307
+ if (reason && status !== "ACTIVE") {
308
+ lines.push(` reason: ${reason}`);
309
+ }
310
+ for (const url of urls) {
311
+ lines.push(` open: ${url}`);
312
+ }
313
+ return lines.join("\n");
314
+ }
315
+ async function handleComposioCommand(subCommand, ctx) {
316
+ const trimmed = subCommand.trim();
317
+ const [command = "", ...rest] = trimmed.split(/\s+/).filter(Boolean);
318
+ const toolkitArg = rest.join(" ").trim();
319
+ const parsedToolkits = toolkitArg
320
+ .split(",")
321
+ .map((toolkit) => toolkit.trim())
322
+ .filter(Boolean);
323
+ const controlTools = [
324
+ "composio_toolkits",
325
+ "composio_tools",
326
+ "composio_execute",
327
+ "composio_enable",
328
+ "composio_connect",
329
+ "composio_accounts",
330
+ ];
331
+ switch (command) {
332
+ case "":
333
+ case "status": {
334
+ const settings = ctx.session.settingsManager.getComposioSettings();
335
+ const activeControlTools = controlTools.filter((tool) => ctx.session.getActiveToolNames().includes(tool));
336
+ const enabledTools = ctx.session.getComposioToolNames();
337
+ ctx.setStatus(`Composio: ${settings.enabled ? "enabled" : "disabled"}\n\nControl tools active: ${activeControlTools.length}/${controlTools.length}\nHydrated toolkit tools: ${enabledTools.length}\nDefault mode: ${settings.mode}\nDefault auto-connect: ${settings.autoConnect ? "ON" : "OFF"}\nDefault toolkits: ${settings.defaultToolkits.length > 0 ? settings.defaultToolkits.join(", ") : "(none)"}`);
338
+ return;
339
+ }
340
+ case "connect": {
341
+ if (!toolkitArg) {
342
+ ctx.setError("Usage: /composio connect <toolkit|connectedAccountId>");
343
+ return;
344
+ }
345
+ const isAccountId = toolkitArg.startsWith("ca_");
346
+ const result = await ctx.session.connectComposio({
347
+ toolkit: isAccountId ? undefined : toolkitArg,
348
+ connectedAccountId: isAccountId ? toolkitArg : undefined,
349
+ });
350
+ const lines = [`Composio Connect: ${result.toolkit ?? "account"} ${result.accountId} [${result.status}]`];
351
+ if (result.redirectUrl) {
352
+ lines.push("", "Open this URL to finish auth:", result.redirectUrl);
353
+ }
354
+ else if (result.action === "already_connected") {
355
+ lines.push("", "This account is already active and ready to use.");
356
+ }
357
+ else {
358
+ lines.push("", "No auth URL was returned. Run /composio accounts again in a few seconds.");
359
+ }
360
+ ctx.setStatus(lines.join("\n"), result.redirectUrl ? "warning" : "info");
361
+ return;
362
+ }
363
+ case "enable": {
364
+ if (parsedToolkits.length === 0) {
365
+ ctx.setError("Usage: /composio enable <toolkit[,toolkit]>");
366
+ return;
367
+ }
368
+ const tools = await ctx.session.enableComposio({
369
+ toolkits: parsedToolkits,
370
+ persistSettings: false,
371
+ });
372
+ ctx.setStatus(`Composio: enabled ${tools.length} toolkit tool${tools.length === 1 ? "" : "s"} from ${parsedToolkits.join(", ")}`, "success");
373
+ return;
374
+ }
375
+ case "tools": {
376
+ const tools = ctx.session.getComposioTools();
377
+ if (tools.length === 0) {
378
+ ctx.setStatus("Composio: no toolkit tools are hydrated in this session yet.");
379
+ return;
380
+ }
381
+ ctx.setStatus(`Composio Toolkit Tools:\n${tools
382
+ .map((tool) => ` • ${tool.name} (${tool.composio.slug}${tool.composio.toolkit ? ` / ${tool.composio.toolkit}` : ""})`)
383
+ .join("\n")}`);
384
+ return;
385
+ }
386
+ case "accounts": {
387
+ const result = await ctx.session.listComposioAccounts({
388
+ toolkits: parsedToolkits.length > 0 ? parsedToolkits : undefined,
389
+ });
390
+ const items = Array.isArray(result.items) ? result.items : [];
391
+ if (items.length === 0) {
392
+ ctx.setStatus("Composio: no connected accounts found for the current user.");
393
+ return;
394
+ }
395
+ ctx.setStatus(`Composio Accounts:\n${items.map((account) => formatComposioAccount(account)).join("\n")}`);
396
+ return;
397
+ }
398
+ case "clear":
399
+ await ctx.session.clearComposioTools({ persistSettings: true });
400
+ ctx.setStatus("Composio toolkit tools cleared from the current session.", "success");
401
+ return;
402
+ default:
403
+ ctx.setError("Usage: /composio [status|connect <toolkit|connectedAccountId>|enable <toolkit[,toolkit]>|tools|accounts [toolkit[,toolkit]]|clear]");
404
+ }
405
+ }
406
+ function handleLoginProvider(providerId, ctx) {
407
+ const normalized = providerId.trim().toLowerCase();
408
+ const provider = buildLoginProviders(ctx.session).find((entry) => entry.id.toLowerCase() === normalized);
409
+ if (!provider) {
410
+ ctx.setError(`Unknown auth provider "${providerId}".`);
411
+ return true;
412
+ }
413
+ if (provider.authKind === "oauth" && ctx.startOAuthLogin) {
414
+ void ctx.startOAuthLogin(provider);
415
+ return true;
416
+ }
417
+ ctx.setOverlay(buildOAuthOverlay(provider));
418
+ return true;
419
+ }
420
+ function handleShareCommand(ctx) {
421
+ let authResult;
422
+ try {
423
+ authResult = spawnSync("gh", ["auth", "status"], { encoding: "utf-8" });
424
+ }
425
+ catch {
426
+ ctx.setError("GitHub CLI (gh) is not installed. Install it and retry.");
427
+ return;
428
+ }
429
+ if (authResult.status !== 0) {
430
+ ctx.setError("GitHub CLI is not logged in. Run `gh auth login` first.");
431
+ return;
432
+ }
433
+ const tempFile = join(tmpdir(), `indusagi-session-${Date.now()}.html`);
434
+ void (async () => {
435
+ try {
436
+ await ctx.session.exportToHtml(tempFile);
437
+ const gistResult = spawnSync("gh", ["gist", "create", "--public=false", tempFile], {
438
+ encoding: "utf-8",
439
+ });
440
+ if (gistResult.status !== 0) {
441
+ ctx.setError(String(gistResult.stderr || "Failed to create gist.").trim());
442
+ return;
443
+ }
444
+ const gistUrl = String(gistResult.stdout).trim().split(/\s+/)[0];
445
+ const gistId = gistUrl.split("/").pop();
446
+ if (!gistId) {
447
+ ctx.setError("Failed to parse gist ID from GitHub CLI output.");
448
+ return;
449
+ }
450
+ ctx.setStatus(`Share URL: ${getShareViewerUrl(gistId)}\nGist: ${gistUrl}`, "success");
451
+ }
452
+ catch (error) {
453
+ ctx.setError(`Failed to share session: ${error instanceof Error ? error.message : String(error)}`);
454
+ }
455
+ finally {
456
+ try {
457
+ unlinkSync(tempFile);
458
+ }
459
+ catch {
460
+ // Ignore cleanup errors.
461
+ }
462
+ }
463
+ })();
464
+ }
465
+ export async function runSlashCommand(input, ctx) {
466
+ const trimmed = input.trim();
467
+ if (!trimmed.startsWith("/")) {
468
+ return false;
469
+ }
470
+ if (trimmed === "/settings") {
471
+ ctx.setOverlay({ kind: "settings" });
472
+ return true;
473
+ }
474
+ if (trimmed === "/model" || trimmed.startsWith("/model ")) {
475
+ await handleModelCommand(trimmed === "/model" ? undefined : trimmed.slice(7).trim(), ctx);
476
+ return true;
477
+ }
478
+ if (trimmed === "/scoped-models") {
479
+ await handleScopedModelsCommand(ctx);
480
+ return true;
481
+ }
482
+ if (trimmed === "/theme" || trimmed.startsWith("/theme ")) {
483
+ await handleThemeCommand(trimmed === "/theme" ? undefined : trimmed.slice(7).trim(), ctx);
484
+ return true;
485
+ }
486
+ if (trimmed === "/session") {
487
+ ctx.setStatus(formatSessionStats(ctx.session));
488
+ return true;
489
+ }
490
+ if (trimmed === "/resume") {
491
+ await handleResumeCommand(ctx);
492
+ return true;
493
+ }
494
+ if (trimmed === "/tree") {
495
+ ctx.setOverlay({ kind: "tree", items: flattenSessionTree(ctx.session) });
496
+ return true;
497
+ }
498
+ if (trimmed === "/fork") {
499
+ ctx.setOverlay({ kind: "userMessage", items: listUserMessages(ctx.session) });
500
+ return true;
501
+ }
502
+ if (trimmed === "/login") {
503
+ ctx.setOverlay({ kind: "login", providers: buildLoginProviders(ctx.session) });
504
+ return true;
505
+ }
506
+ if (trimmed.startsWith("/login ")) {
507
+ return handleLoginProvider(trimmed.slice(7).trim(), ctx);
508
+ }
509
+ if (trimmed === "/logout") {
510
+ ctx.setOverlay({ kind: "logout", accounts: buildSavedAccounts(ctx.session) });
511
+ return true;
512
+ }
513
+ if (trimmed === "/new" || trimmed === "/clear") {
514
+ const started = await ctx.session.newSession();
515
+ if (!started) {
516
+ ctx.setStatus("Starting a new session was cancelled.", "warning");
517
+ return true;
518
+ }
519
+ ctx.resetSessionView?.();
520
+ ctx.setInput("");
521
+ ctx.setStatus("Started a new session.", "success");
522
+ return true;
523
+ }
524
+ if (trimmed === "/compact" || trimmed.startsWith("/compact ")) {
525
+ const customInstructions = trimmed === "/compact" ? undefined : trimmed.slice(9).trim();
526
+ await ctx.session.compact(customInstructions || undefined);
527
+ ctx.setStatus("Compaction completed.", "success");
528
+ return true;
529
+ }
530
+ if (trimmed === "/reload") {
531
+ await ctx.session.reload();
532
+ ctx.setStatus("Reloaded extensions, prompts, skills, and themes.", "success");
533
+ return true;
534
+ }
535
+ if (trimmed === "/copy") {
536
+ copyLastAssistantMessage(ctx.session);
537
+ ctx.setStatus("Copied the last assistant response to your clipboard.", "success");
538
+ return true;
539
+ }
540
+ if (trimmed === "/help") {
541
+ ctx.setStatus(formatSlashCommandList(ctx.session));
542
+ return true;
543
+ }
544
+ if (trimmed === "/hotkeys") {
545
+ ctx.setStatus(formatHotkeys());
546
+ return true;
547
+ }
548
+ if (trimmed === "/changelog") {
549
+ if (ctx.appendDisplayBlock) {
550
+ ctx.appendDisplayBlock({
551
+ kind: "changelog",
552
+ title: "What's New",
553
+ markdown: getFullChangelogMarkdown(),
554
+ });
555
+ ctx.clearStatus?.();
556
+ }
557
+ else {
558
+ ctx.setStatus(getFullChangelogMarkdown());
559
+ }
560
+ return true;
561
+ }
562
+ if (trimmed === "/debug") {
563
+ const debugPath = writeDebugLog(ctx.session);
564
+ ctx.setStatus(`Debug log written to ${debugPath}`, "success");
565
+ return true;
566
+ }
567
+ if (trimmed === "/share") {
568
+ handleShareCommand(ctx);
569
+ return true;
570
+ }
571
+ if (trimmed === "/mcp" || trimmed.startsWith("/mcp ")) {
572
+ await handleMCPCommand(trimmed.startsWith("/mcp ") ? trimmed.slice(5).trim() : "", ctx);
573
+ return true;
574
+ }
575
+ if (trimmed === "/memory" || trimmed.startsWith("/memory ")) {
576
+ await handleMemoryCommand(trimmed.startsWith("/memory ") ? trimmed.slice(8).trim() : "", ctx);
577
+ return true;
578
+ }
579
+ if (trimmed === "/composio" || trimmed.startsWith("/composio ")) {
580
+ await handleComposioCommand(trimmed.startsWith("/composio ") ? trimmed.slice(10).trim() : "", ctx);
581
+ return true;
582
+ }
583
+ if (trimmed === "/name") {
584
+ const currentName = ctx.session.sessionManager.getSessionName();
585
+ ctx.setStatus(currentName ? `Session name: ${currentName}` : "Session has no custom name yet.");
586
+ return true;
587
+ }
588
+ if (trimmed.startsWith("/name ")) {
589
+ const name = trimmed.slice(6).trim();
590
+ if (!name) {
591
+ ctx.setError("Usage: /name <name>");
592
+ return true;
593
+ }
594
+ const nextName = setSessionName(ctx.session, name);
595
+ ctx.setStatus(`Session name set to "${nextName}".`, "success");
596
+ return true;
597
+ }
598
+ if (trimmed === "/export" || trimmed.startsWith("/export ")) {
599
+ const outputPath = trimmed === "/export" ? undefined : trimmed.slice(8).trim() || undefined;
600
+ const exported = await ctx.session.exportToHtml(outputPath);
601
+ ctx.setStatus(`Exported session HTML to ${exported}.`, "success");
602
+ return true;
603
+ }
604
+ if ((trimmed === "/quit" || trimmed === "/exit") && ctx.onExit) {
605
+ ctx.onExit();
606
+ return true;
607
+ }
608
+ // Let prompt templates, extension commands, and /skill:* commands fall through to the runtime.
609
+ if (trimmed.startsWith("/")) {
610
+ const builtins = new Set([
611
+ "/settings",
612
+ "/model",
613
+ "/scoped-models",
614
+ "/theme",
615
+ "/session",
616
+ "/resume",
617
+ "/tree",
618
+ "/fork",
619
+ "/login",
620
+ "/logout",
621
+ "/new",
622
+ "/clear",
623
+ "/compact",
624
+ "/reload",
625
+ "/copy",
626
+ "/help",
627
+ "/hotkeys",
628
+ "/changelog",
629
+ "/debug",
630
+ "/share",
631
+ "/mcp",
632
+ "/memory",
633
+ "/composio",
634
+ "/name",
635
+ "/export",
636
+ "/quit",
637
+ "/exit",
638
+ ]);
639
+ const baseCommand = ensureLeadingSlash(trimmed.split(/\s+/, 1)[0]);
640
+ if (!builtins.has(baseCommand)) {
641
+ return false;
642
+ }
643
+ }
644
+ return false;
645
+ }
646
+ //# sourceMappingURL=command-router.js.map