@xagent-ai/cli 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (537) hide show
  1. package/.eslintrc.js +25 -0
  2. package/.gitmodules +3 -0
  3. package/.prettierrc.json +8 -0
  4. package/CONTRIBUTING.md +167 -0
  5. package/LICENSE +21 -0
  6. package/README.md +280 -0
  7. package/README_CN.md +280 -0
  8. package/dist/agents.d.ts +21 -0
  9. package/dist/agents.d.ts.map +1 -0
  10. package/dist/agents.js +463 -0
  11. package/dist/agents.js.map +1 -0
  12. package/dist/ai-client.d.ts +83 -0
  13. package/dist/ai-client.d.ts.map +1 -0
  14. package/dist/ai-client.js +1280 -0
  15. package/dist/ai-client.js.map +1 -0
  16. package/dist/auth.d.ts +25 -0
  17. package/dist/auth.d.ts.map +1 -0
  18. package/dist/auth.js +573 -0
  19. package/dist/auth.js.map +1 -0
  20. package/dist/cancellation.d.ts +46 -0
  21. package/dist/cancellation.d.ts.map +1 -0
  22. package/dist/cancellation.js +154 -0
  23. package/dist/cancellation.js.map +1 -0
  24. package/dist/checkpoint.d.ts +28 -0
  25. package/dist/checkpoint.d.ts.map +1 -0
  26. package/dist/checkpoint.js +186 -0
  27. package/dist/checkpoint.js.map +1 -0
  28. package/dist/cli.d.ts +3 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +364 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/config.d.ts +49 -0
  33. package/dist/config.d.ts.map +1 -0
  34. package/dist/config.js +205 -0
  35. package/dist/config.js.map +1 -0
  36. package/dist/context-compressor.d.ts +51 -0
  37. package/dist/context-compressor.d.ts.map +1 -0
  38. package/dist/context-compressor.js +231 -0
  39. package/dist/context-compressor.js.map +1 -0
  40. package/dist/conversation.d.ts +34 -0
  41. package/dist/conversation.d.ts.map +1 -0
  42. package/dist/conversation.js +221 -0
  43. package/dist/conversation.js.map +1 -0
  44. package/dist/gui-subagent/action-parser/actionParser.d.ts +19 -0
  45. package/dist/gui-subagent/action-parser/actionParser.d.ts.map +1 -0
  46. package/dist/gui-subagent/action-parser/actionParser.js +203 -0
  47. package/dist/gui-subagent/action-parser/actionParser.js.map +1 -0
  48. package/dist/gui-subagent/action-parser/constants.d.ts +8 -0
  49. package/dist/gui-subagent/action-parser/constants.d.ts.map +1 -0
  50. package/dist/gui-subagent/action-parser/constants.js +12 -0
  51. package/dist/gui-subagent/action-parser/constants.js.map +1 -0
  52. package/dist/gui-subagent/action-parser/index.d.ts +3 -0
  53. package/dist/gui-subagent/action-parser/index.d.ts.map +1 -0
  54. package/dist/gui-subagent/action-parser/index.js +6 -0
  55. package/dist/gui-subagent/action-parser/index.js.map +1 -0
  56. package/dist/gui-subagent/action-parser/types.d.ts +24 -0
  57. package/dist/gui-subagent/action-parser/types.d.ts.map +1 -0
  58. package/dist/gui-subagent/action-parser/types.js +12 -0
  59. package/dist/gui-subagent/action-parser/types.js.map +1 -0
  60. package/dist/gui-subagent/agent/gui-agent.d.ts +126 -0
  61. package/dist/gui-subagent/agent/gui-agent.d.ts.map +1 -0
  62. package/dist/gui-subagent/agent/gui-agent.js +820 -0
  63. package/dist/gui-subagent/agent/gui-agent.js.map +1 -0
  64. package/dist/gui-subagent/agent/index.d.ts +5 -0
  65. package/dist/gui-subagent/agent/index.d.ts.map +1 -0
  66. package/dist/gui-subagent/agent/index.js +5 -0
  67. package/dist/gui-subagent/agent/index.js.map +1 -0
  68. package/dist/gui-subagent/index.d.ts +43 -0
  69. package/dist/gui-subagent/index.d.ts.map +1 -0
  70. package/dist/gui-subagent/index.js +96 -0
  71. package/dist/gui-subagent/index.js.map +1 -0
  72. package/dist/gui-subagent/operator/base-operator.d.ts +108 -0
  73. package/dist/gui-subagent/operator/base-operator.d.ts.map +1 -0
  74. package/dist/gui-subagent/operator/base-operator.js +172 -0
  75. package/dist/gui-subagent/operator/base-operator.js.map +1 -0
  76. package/dist/gui-subagent/operator/browser-operator.d.ts +36 -0
  77. package/dist/gui-subagent/operator/browser-operator.d.ts.map +1 -0
  78. package/dist/gui-subagent/operator/browser-operator.js +306 -0
  79. package/dist/gui-subagent/operator/browser-operator.js.map +1 -0
  80. package/dist/gui-subagent/operator/computer-operator.d.ts +31 -0
  81. package/dist/gui-subagent/operator/computer-operator.d.ts.map +1 -0
  82. package/dist/gui-subagent/operator/computer-operator.js +441 -0
  83. package/dist/gui-subagent/operator/computer-operator.js.map +1 -0
  84. package/dist/gui-subagent/operator/desktop-operator.d.ts +55 -0
  85. package/dist/gui-subagent/operator/desktop-operator.d.ts.map +1 -0
  86. package/dist/gui-subagent/operator/desktop-operator.js +527 -0
  87. package/dist/gui-subagent/operator/desktop-operator.js.map +1 -0
  88. package/dist/gui-subagent/operator/index.d.ts +7 -0
  89. package/dist/gui-subagent/operator/index.d.ts.map +1 -0
  90. package/dist/gui-subagent/operator/index.js +6 -0
  91. package/dist/gui-subagent/operator/index.js.map +1 -0
  92. package/dist/gui-subagent/types/actions.d.ts +108 -0
  93. package/dist/gui-subagent/types/actions.d.ts.map +1 -0
  94. package/dist/gui-subagent/types/actions.js +39 -0
  95. package/dist/gui-subagent/types/actions.js.map +1 -0
  96. package/dist/gui-subagent/types/index.d.ts +6 -0
  97. package/dist/gui-subagent/types/index.d.ts.map +1 -0
  98. package/dist/gui-subagent/types/index.js +6 -0
  99. package/dist/gui-subagent/types/index.js.map +1 -0
  100. package/dist/gui-subagent/types/operator.d.ts +95 -0
  101. package/dist/gui-subagent/types/operator.d.ts.map +1 -0
  102. package/dist/gui-subagent/types/operator.js +16 -0
  103. package/dist/gui-subagent/types/operator.js.map +1 -0
  104. package/dist/gui-subagent/utils.d.ts +19 -0
  105. package/dist/gui-subagent/utils.d.ts.map +1 -0
  106. package/dist/gui-subagent/utils.js +42 -0
  107. package/dist/gui-subagent/utils.js.map +1 -0
  108. package/dist/hook.d.ts +73 -0
  109. package/dist/hook.d.ts.map +1 -0
  110. package/dist/hook.js +156 -0
  111. package/dist/hook.js.map +1 -0
  112. package/dist/index.d.ts +19 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.js +19 -0
  115. package/dist/index.js.map +1 -0
  116. package/dist/input-history.d.ts +24 -0
  117. package/dist/input-history.d.ts.map +1 -0
  118. package/dist/input-history.js +94 -0
  119. package/dist/input-history.js.map +1 -0
  120. package/dist/input-processor.d.ts +31 -0
  121. package/dist/input-processor.d.ts.map +1 -0
  122. package/dist/input-processor.js +233 -0
  123. package/dist/input-processor.js.map +1 -0
  124. package/dist/keyboard-manager.d.ts +151 -0
  125. package/dist/keyboard-manager.d.ts.map +1 -0
  126. package/dist/keyboard-manager.js +396 -0
  127. package/dist/keyboard-manager.js.map +1 -0
  128. package/dist/logger.d.ts +75 -0
  129. package/dist/logger.d.ts.map +1 -0
  130. package/dist/logger.js +339 -0
  131. package/dist/logger.js.map +1 -0
  132. package/dist/mcp.d.ts +57 -0
  133. package/dist/mcp.d.ts.map +1 -0
  134. package/dist/mcp.js +483 -0
  135. package/dist/mcp.js.map +1 -0
  136. package/dist/memory.d.ts +25 -0
  137. package/dist/memory.d.ts.map +1 -0
  138. package/dist/memory.js +250 -0
  139. package/dist/memory.js.map +1 -0
  140. package/dist/print-system-prompt.d.ts +2 -0
  141. package/dist/print-system-prompt.d.ts.map +1 -0
  142. package/dist/print-system-prompt.js +40 -0
  143. package/dist/print-system-prompt.js.map +1 -0
  144. package/dist/session-manager.d.ts +41 -0
  145. package/dist/session-manager.d.ts.map +1 -0
  146. package/dist/session-manager.js +234 -0
  147. package/dist/session-manager.js.map +1 -0
  148. package/dist/session.d.ts +77 -0
  149. package/dist/session.d.ts.map +1 -0
  150. package/dist/session.js +1081 -0
  151. package/dist/session.js.map +1 -0
  152. package/dist/skill-invoker.d.ts +177 -0
  153. package/dist/skill-invoker.d.ts.map +1 -0
  154. package/dist/skill-invoker.js +1643 -0
  155. package/dist/skill-invoker.js.map +1 -0
  156. package/dist/skill-loader.d.ts +76 -0
  157. package/dist/skill-loader.d.ts.map +1 -0
  158. package/dist/skill-loader.js +407 -0
  159. package/dist/skill-loader.js.map +1 -0
  160. package/dist/slash-commands.d.ts +60 -0
  161. package/dist/slash-commands.d.ts.map +1 -0
  162. package/dist/slash-commands.js +1021 -0
  163. package/dist/slash-commands.js.map +1 -0
  164. package/dist/smart-approval.d.ts +137 -0
  165. package/dist/smart-approval.d.ts.map +1 -0
  166. package/dist/smart-approval.js +512 -0
  167. package/dist/smart-approval.js.map +1 -0
  168. package/dist/system-prompt-generator.d.ts +35 -0
  169. package/dist/system-prompt-generator.d.ts.map +1 -0
  170. package/dist/system-prompt-generator.js +729 -0
  171. package/dist/system-prompt-generator.js.map +1 -0
  172. package/dist/test-boundary-conditions.d.ts.map +1 -0
  173. package/dist/test-boundary-conditions.js.map +1 -0
  174. package/dist/test-cancellation-fix.d.ts.map +1 -0
  175. package/dist/test-cancellation-fix.js.map +1 -0
  176. package/dist/test-input-history.d.ts.map +1 -0
  177. package/dist/test-input-history.js.map +1 -0
  178. package/dist/test-interaction-flow.d.ts.map +1 -0
  179. package/dist/test-interaction-flow.js.map +1 -0
  180. package/dist/test-quick.d.ts.map +1 -0
  181. package/dist/test-quick.js.map +1 -0
  182. package/dist/test-user-interaction.d.ts.map +1 -0
  183. package/dist/test-user-interaction.js.map +1 -0
  184. package/dist/theme.d.ts +353 -0
  185. package/dist/theme.d.ts.map +1 -0
  186. package/dist/theme.js +383 -0
  187. package/dist/theme.js.map +1 -0
  188. package/dist/tools.d.ts +373 -0
  189. package/dist/tools.d.ts.map +1 -0
  190. package/dist/tools.js +2906 -0
  191. package/dist/tools.js.map +1 -0
  192. package/dist/types.d.ts +180 -0
  193. package/dist/types.d.ts.map +1 -0
  194. package/dist/types.js +23 -0
  195. package/dist/types.js.map +1 -0
  196. package/dist/unified-session.d.ts +42 -0
  197. package/dist/unified-session.d.ts.map +1 -0
  198. package/dist/unified-session.js +271 -0
  199. package/dist/unified-session.js.map +1 -0
  200. package/dist/update.d.ts +30 -0
  201. package/dist/update.d.ts.map +1 -0
  202. package/dist/update.js +211 -0
  203. package/dist/update.js.map +1 -0
  204. package/dist/workflow.d.ts +53 -0
  205. package/dist/workflow.d.ts.map +1 -0
  206. package/dist/workflow.js +405 -0
  207. package/dist/workflow.js.map +1 -0
  208. package/docs/architecture/mcp-integration-guide.md +131 -0
  209. package/docs/architecture/overview.md +93 -0
  210. package/docs/architecture/tool-system-design.md +89 -0
  211. package/docs/cli/commands.md +189 -0
  212. package/docs/smart-mode.md +257 -0
  213. package/docs/third-party-models.md +449 -0
  214. package/package.json +85 -0
  215. package/scripts/init-skills-path.js +58 -0
  216. package/skills/.claude-plugin/marketplace.json +45 -0
  217. package/skills/README.md +94 -0
  218. package/skills/THIRD_PARTY_NOTICES.md +405 -0
  219. package/skills/skills/algorithmic-art/LICENSE.txt +202 -0
  220. package/skills/skills/algorithmic-art/SKILL.md +405 -0
  221. package/skills/skills/algorithmic-art/templates/generator_template.js +223 -0
  222. package/skills/skills/algorithmic-art/templates/viewer.html +599 -0
  223. package/skills/skills/brand-guidelines/LICENSE.txt +202 -0
  224. package/skills/skills/brand-guidelines/SKILL.md +73 -0
  225. package/skills/skills/canvas-design/LICENSE.txt +202 -0
  226. package/skills/skills/canvas-design/SKILL.md +130 -0
  227. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  228. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  229. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  230. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  231. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  232. package/skills/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  233. package/skills/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  234. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  235. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  236. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  237. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  238. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  239. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  240. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  241. package/skills/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  242. package/skills/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  243. package/skills/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  244. package/skills/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  245. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  246. package/skills/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  247. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  248. package/skills/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  249. package/skills/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  250. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  251. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  252. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  253. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  254. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  255. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  256. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  257. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  258. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  259. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  260. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  261. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  262. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  263. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  264. package/skills/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  265. package/skills/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  266. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  267. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  268. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  269. package/skills/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  270. package/skills/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  271. package/skills/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  272. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  273. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  274. package/skills/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  275. package/skills/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  276. package/skills/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  277. package/skills/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  278. package/skills/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  279. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  280. package/skills/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  281. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  282. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  283. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  284. package/skills/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  285. package/skills/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  286. package/skills/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  287. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  288. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  289. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  290. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  291. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  292. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  293. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  294. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  295. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  296. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  297. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  298. package/skills/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  299. package/skills/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  300. package/skills/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  301. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  302. package/skills/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  303. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  304. package/skills/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  305. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  306. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  307. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  308. package/skills/skills/doc-coauthoring/SKILL.md +375 -0
  309. package/skills/skills/docx/LICENSE.txt +30 -0
  310. package/skills/skills/docx/SKILL.md +197 -0
  311. package/skills/skills/docx/docx-js.md +350 -0
  312. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  313. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  314. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  315. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  316. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  317. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  318. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  319. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  320. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  321. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  322. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  323. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  324. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  325. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  326. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  327. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  328. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  329. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  330. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  331. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  332. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  333. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  334. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  335. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  336. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  337. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  338. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  339. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  340. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  341. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  342. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  343. package/skills/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  344. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  345. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  346. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  347. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  348. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  349. package/skills/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  350. package/skills/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  351. package/skills/skills/docx/ooxml/scripts/pack.py +159 -0
  352. package/skills/skills/docx/ooxml/scripts/unpack.py +29 -0
  353. package/skills/skills/docx/ooxml/scripts/validate.py +69 -0
  354. package/skills/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  355. package/skills/skills/docx/ooxml/scripts/validation/base.py +951 -0
  356. package/skills/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  357. package/skills/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  358. package/skills/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  359. package/skills/skills/docx/ooxml.md +610 -0
  360. package/skills/skills/docx/scripts/__init__.py +1 -0
  361. package/skills/skills/docx/scripts/document.py +1276 -0
  362. package/skills/skills/docx/scripts/templates/comments.xml +3 -0
  363. package/skills/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  364. package/skills/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  365. package/skills/skills/docx/scripts/templates/commentsIds.xml +3 -0
  366. package/skills/skills/docx/scripts/templates/people.xml +3 -0
  367. package/skills/skills/docx/scripts/utilities.py +374 -0
  368. package/skills/skills/frontend-design/LICENSE.txt +177 -0
  369. package/skills/skills/frontend-design/SKILL.md +42 -0
  370. package/skills/skills/internal-comms/LICENSE.txt +202 -0
  371. package/skills/skills/internal-comms/SKILL.md +32 -0
  372. package/skills/skills/internal-comms/examples/3p-updates.md +47 -0
  373. package/skills/skills/internal-comms/examples/company-newsletter.md +65 -0
  374. package/skills/skills/internal-comms/examples/faq-answers.md +30 -0
  375. package/skills/skills/internal-comms/examples/general-comms.md +16 -0
  376. package/skills/skills/mcp-builder/LICENSE.txt +202 -0
  377. package/skills/skills/mcp-builder/SKILL.md +236 -0
  378. package/skills/skills/mcp-builder/reference/evaluation.md +602 -0
  379. package/skills/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  380. package/skills/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  381. package/skills/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  382. package/skills/skills/mcp-builder/scripts/connections.py +151 -0
  383. package/skills/skills/mcp-builder/scripts/evaluation.py +373 -0
  384. package/skills/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  385. package/skills/skills/mcp-builder/scripts/requirements.txt +2 -0
  386. package/skills/skills/pdf/LICENSE.txt +30 -0
  387. package/skills/skills/pdf/SKILL.md +294 -0
  388. package/skills/skills/pdf/forms.md +205 -0
  389. package/skills/skills/pdf/reference.md +612 -0
  390. package/skills/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  391. package/skills/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  392. package/skills/skills/pdf/scripts/check_fillable_fields.py +12 -0
  393. package/skills/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  394. package/skills/skills/pdf/scripts/create_validation_image.py +41 -0
  395. package/skills/skills/pdf/scripts/extract_form_field_info.py +152 -0
  396. package/skills/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  397. package/skills/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  398. package/skills/skills/pptx/LICENSE.txt +30 -0
  399. package/skills/skills/pptx/SKILL.md +484 -0
  400. package/skills/skills/pptx/html2pptx.md +625 -0
  401. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  402. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  403. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  404. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  405. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  406. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  407. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  408. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  409. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  410. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  411. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  412. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  413. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  414. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  415. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  416. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  417. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  418. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  419. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  420. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  421. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  422. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  423. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  424. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  425. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  426. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  427. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  428. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  429. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  430. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  431. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  432. package/skills/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  433. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  434. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  435. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  436. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  437. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  438. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  439. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  440. package/skills/skills/pptx/ooxml/scripts/pack.py +159 -0
  441. package/skills/skills/pptx/ooxml/scripts/unpack.py +29 -0
  442. package/skills/skills/pptx/ooxml/scripts/validate.py +69 -0
  443. package/skills/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  444. package/skills/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  445. package/skills/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  446. package/skills/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  447. package/skills/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  448. package/skills/skills/pptx/ooxml.md +427 -0
  449. package/skills/skills/pptx/scripts/html2pptx.js +979 -0
  450. package/skills/skills/pptx/scripts/inventory.py +1020 -0
  451. package/skills/skills/pptx/scripts/rearrange.py +231 -0
  452. package/skills/skills/pptx/scripts/replace.py +385 -0
  453. package/skills/skills/pptx/scripts/thumbnail.py +450 -0
  454. package/skills/skills/skill-creator/LICENSE.txt +202 -0
  455. package/skills/skills/skill-creator/SKILL.md +356 -0
  456. package/skills/skills/skill-creator/references/output-patterns.md +82 -0
  457. package/skills/skills/skill-creator/references/workflows.md +28 -0
  458. package/skills/skills/skill-creator/scripts/init_skill.py +303 -0
  459. package/skills/skills/skill-creator/scripts/package_skill.py +110 -0
  460. package/skills/skills/skill-creator/scripts/quick_validate.py +95 -0
  461. package/skills/skills/slack-gif-creator/LICENSE.txt +202 -0
  462. package/skills/skills/slack-gif-creator/SKILL.md +254 -0
  463. package/skills/skills/slack-gif-creator/core/easing.py +234 -0
  464. package/skills/skills/slack-gif-creator/core/frame_composer.py +176 -0
  465. package/skills/skills/slack-gif-creator/core/gif_builder.py +269 -0
  466. package/skills/skills/slack-gif-creator/core/validators.py +136 -0
  467. package/skills/skills/slack-gif-creator/requirements.txt +4 -0
  468. package/skills/skills/theme-factory/LICENSE.txt +202 -0
  469. package/skills/skills/theme-factory/SKILL.md +59 -0
  470. package/skills/skills/theme-factory/theme-showcase.pdf +0 -0
  471. package/skills/skills/theme-factory/themes/arctic-frost.md +19 -0
  472. package/skills/skills/theme-factory/themes/botanical-garden.md +19 -0
  473. package/skills/skills/theme-factory/themes/desert-rose.md +19 -0
  474. package/skills/skills/theme-factory/themes/forest-canopy.md +19 -0
  475. package/skills/skills/theme-factory/themes/golden-hour.md +19 -0
  476. package/skills/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  477. package/skills/skills/theme-factory/themes/modern-minimalist.md +19 -0
  478. package/skills/skills/theme-factory/themes/ocean-depths.md +19 -0
  479. package/skills/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  480. package/skills/skills/theme-factory/themes/tech-innovation.md +19 -0
  481. package/skills/skills/web-artifacts-builder/LICENSE.txt +202 -0
  482. package/skills/skills/web-artifacts-builder/SKILL.md +74 -0
  483. package/skills/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  484. package/skills/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  485. package/skills/skills/webapp-testing/LICENSE.txt +202 -0
  486. package/skills/skills/webapp-testing/SKILL.md +96 -0
  487. package/skills/skills/webapp-testing/examples/console_logging.py +35 -0
  488. package/skills/skills/webapp-testing/examples/element_discovery.py +40 -0
  489. package/skills/skills/webapp-testing/examples/static_html_automation.py +33 -0
  490. package/skills/skills/webapp-testing/scripts/with_server.py +106 -0
  491. package/skills/skills/xlsx/LICENSE.txt +30 -0
  492. package/skills/skills/xlsx/SKILL.md +289 -0
  493. package/skills/skills/xlsx/recalc.py +178 -0
  494. package/skills/spec/agent-skills-spec.md +3 -0
  495. package/skills/template/SKILL.md +6 -0
  496. package/src/agents.ts +504 -0
  497. package/src/ai-client.ts +1456 -0
  498. package/src/auth.ts +648 -0
  499. package/src/cancellation.ts +176 -0
  500. package/src/checkpoint.ts +219 -0
  501. package/src/cli.ts +384 -0
  502. package/src/config.ts +248 -0
  503. package/src/context-compressor.ts +290 -0
  504. package/src/conversation.ts +288 -0
  505. package/src/gui-subagent/action-parser/actionParser.ts +312 -0
  506. package/src/gui-subagent/action-parser/constants.ts +12 -0
  507. package/src/gui-subagent/action-parser/index.ts +6 -0
  508. package/src/gui-subagent/action-parser/types.ts +31 -0
  509. package/src/gui-subagent/agent/gui-agent.ts +982 -0
  510. package/src/gui-subagent/agent/index.ts +5 -0
  511. package/src/gui-subagent/index.ts +139 -0
  512. package/src/gui-subagent/operator/base-operator.ts +246 -0
  513. package/src/gui-subagent/operator/computer-operator.ts +520 -0
  514. package/src/gui-subagent/operator/index.ts +7 -0
  515. package/src/gui-subagent/types/actions.ts +263 -0
  516. package/src/gui-subagent/types/index.ts +6 -0
  517. package/src/gui-subagent/types/operator.ts +106 -0
  518. package/src/gui-subagent/utils.ts +51 -0
  519. package/src/index.ts +18 -0
  520. package/src/input-processor.ts +282 -0
  521. package/src/logger.ts +438 -0
  522. package/src/mcp.ts +563 -0
  523. package/src/memory.ts +303 -0
  524. package/src/session-manager.ts +308 -0
  525. package/src/session.ts +1280 -0
  526. package/src/skill-invoker.ts +1888 -0
  527. package/src/skill-loader.ts +476 -0
  528. package/src/slash-commands.ts +1150 -0
  529. package/src/smart-approval.ts +595 -0
  530. package/src/system-prompt-generator.ts +786 -0
  531. package/src/theme.ts +455 -0
  532. package/src/tools.ts +3398 -0
  533. package/src/types.ts +198 -0
  534. package/src/update.ts +270 -0
  535. package/src/workflow.ts +508 -0
  536. package/tsconfig.json +22 -0
  537. package/vitest.config.ts +19 -0
@@ -0,0 +1,1021 @@
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { ExecutionMode } from './types.js';
5
+ import { getToolRegistry } from './tools.js';
6
+ import { getAgentManager } from './agents.js';
7
+ import { getMemoryManager } from './memory.js';
8
+ import { getMCPManager } from './mcp.js';
9
+ import { getCheckpointManager } from './checkpoint.js';
10
+ import { getConfigManager } from './config.js';
11
+ import { getLogger } from './logger.js';
12
+ import { getContextCompressor } from './context-compressor.js';
13
+ import { getConversationManager } from './conversation.js';
14
+ import { icons, colors } from './theme.js';
15
+ const logger = getLogger();
16
+ export class SlashCommandHandler {
17
+ configManager;
18
+ agentManager;
19
+ memoryManager;
20
+ mcpManager;
21
+ checkpointManager;
22
+ contextCompressor;
23
+ conversationManager;
24
+ conversationHistory = [];
25
+ onClearCallback = null;
26
+ onSystemPromptUpdate = null;
27
+ constructor() {
28
+ this.configManager = getConfigManager(process.cwd());
29
+ this.agentManager = getAgentManager(process.cwd());
30
+ this.memoryManager = getMemoryManager(process.cwd());
31
+ this.mcpManager = getMCPManager();
32
+ this.checkpointManager = getCheckpointManager(process.cwd());
33
+ this.contextCompressor = getContextCompressor();
34
+ this.conversationManager = getConversationManager();
35
+ }
36
+ /**
37
+ * č®¾ē½®ęø…é™¤åÆ¹čÆēš„å›žč°ƒå‡½ę•°
38
+ */
39
+ setClearCallback(callback) {
40
+ this.onClearCallback = callback;
41
+ }
42
+ /**
43
+ * č®¾ē½®ē³»ē»Ÿęē¤ŗę›“ę–°ēš„å›žč°ƒå‡½ę•°
44
+ */
45
+ setSystemPromptUpdateCallback(callback) {
46
+ this.onSystemPromptUpdate = callback;
47
+ }
48
+ /**
49
+ * Set current conversation history (includes all user/assistant/tool messages)
50
+ */
51
+ setConversationHistory(messages) {
52
+ this.conversationHistory = messages;
53
+ }
54
+ async handleCommand(input) {
55
+ if (!input.startsWith('/')) {
56
+ return false;
57
+ }
58
+ const [command, ...args] = input.slice(1).split(' ');
59
+ switch (command.toLowerCase()) {
60
+ case 'help':
61
+ await this.showHelp();
62
+ break;
63
+ case 'init':
64
+ await this.handleInit();
65
+ break;
66
+ case 'clear':
67
+ await this.handleClear();
68
+ break;
69
+ case 'exit':
70
+ case 'quit':
71
+ await this.handleExit();
72
+ break;
73
+ case 'auth':
74
+ await this.handleAuth();
75
+ break;
76
+ case 'mode':
77
+ await this.handleMode(args);
78
+ break;
79
+ case 'think':
80
+ await this.handleThink(args);
81
+ break;
82
+ case 'agents':
83
+ await this.handleAgents(args);
84
+ break;
85
+ case 'mcp':
86
+ await this.handleMcp(args);
87
+ break;
88
+ case 'memory':
89
+ await this.handleMemory(args);
90
+ break;
91
+ case 'restore':
92
+ await this.handleRestore(args);
93
+ break;
94
+ case 'tools':
95
+ await this.handleToolsVerbose(args);
96
+ break;
97
+ case 'stats':
98
+ await this.handleStats();
99
+ break;
100
+ case 'theme':
101
+ await this.handleTheme();
102
+ break;
103
+ case 'language':
104
+ await this.handleLanguage();
105
+ break;
106
+ case 'about':
107
+ await this.handleAbout();
108
+ break;
109
+ case 'compress':
110
+ await this.handleCompress(args);
111
+ break;
112
+ default:
113
+ logger.warn(`Unknown command: /${command}`, 'Type /help for available commands');
114
+ }
115
+ return true;
116
+ }
117
+ async showHelp() {
118
+ const separator = icons.separator.repeat(Math.min(60, process.stdout.columns || 80));
119
+ console.log('');
120
+ console.log(colors.primaryBright('╔════════════════════════════════════════════════════════════╗'));
121
+ console.log(colors.primaryBright('ā•‘') + ' '.repeat(56) + colors.primaryBright('ā•‘'));
122
+ console.log(' '.repeat(14) + colors.gradient('šŸ“š XAGENT CLI Help') + ' '.repeat(31) + colors.primaryBright('ā•‘'));
123
+ console.log(colors.primaryBright('ā•‘') + ' '.repeat(56) + colors.primaryBright('ā•‘'));
124
+ console.log(colors.primaryBright('ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•'));
125
+ console.log('');
126
+ // Shortcuts
127
+ console.log(colors.accent('Shortcuts'));
128
+ console.log(colors.border(separator));
129
+ console.log('');
130
+ console.log(colors.textDim(` ${colors.accent('!')} - ${colors.textMuted('Enter bash mode')}`));
131
+ console.log(colors.textDim(` ${colors.accent('/')} - ${colors.textMuted('Commands')}`));
132
+ console.log(colors.textDim(` ${colors.accent('@')} - ${colors.textMuted('File paths')}`));
133
+ console.log('');
134
+ // Basic Commands
135
+ this.showHelpCategory('Basic Commands', [
136
+ {
137
+ cmd: '/help [command]',
138
+ desc: 'Show help information',
139
+ detail: 'View all available commands or detailed description of specific command',
140
+ example: '/help\n/help mode'
141
+ },
142
+ {
143
+ cmd: '/clear',
144
+ desc: 'Clear conversation history',
145
+ detail: 'Clear all conversation records of current session, start new conversation',
146
+ example: '/clear'
147
+ },
148
+ {
149
+ cmd: '/exit',
150
+ desc: 'Exit program',
151
+ detail: 'Safely exit XAGENT CLI',
152
+ example: '/exit'
153
+ }
154
+ ]);
155
+ // Project Management
156
+ this.showHelpCategory('Project Management', [
157
+ {
158
+ cmd: '/init',
159
+ desc: 'Initialize project context',
160
+ detail: 'Create XAGENT.md file in current directory, used to store project context information',
161
+ example: '/init'
162
+ },
163
+ {
164
+ cmd: '/memory [show|add|refresh]',
165
+ desc: 'Manage project memory',
166
+ detail: 'View, add or refresh project memory information',
167
+ example: '/memory show\n/memory add "Project uses TypeScript"'
168
+ }
169
+ ]);
170
+ // Authentication & Configuration
171
+ this.showHelpCategory('Authentication & Configuration', [
172
+ {
173
+ cmd: '/auth',
174
+ desc: 'Configure authentication information',
175
+ detail: 'Change or view current authentication configuration',
176
+ example: '/auth'
177
+ },
178
+ {
179
+ cmd: '/mode [mode]',
180
+ desc: 'Switch approval mode',
181
+ detail: 'Switch security approval mode for tool execution',
182
+ example: '/mode\n/mode smart\n/mode yolo',
183
+ modes: [
184
+ 'yolo - Execute all operations without restriction',
185
+ 'accept_edits - Automatically accept edit operations',
186
+ 'plan - Plan before executing',
187
+ 'default - Safe execution, requires confirmation',
188
+ 'smart - Smart approval (recommended)'
189
+ ]
190
+ },
191
+ {
192
+ cmd: '/think [on|off|display]',
193
+ desc: 'Control thinking mode',
194
+ detail: 'Enable/disable AI thinking process display',
195
+ example: '/think on\n/think off\n/think display compact'
196
+ },
197
+ {
198
+ cmd: '/language [zh|en]',
199
+ desc: 'Switch language',
200
+ detail: 'Switch between Chinese and English interface',
201
+ example: '/language zh\n/language en'
202
+ },
203
+ {
204
+ cmd: '/theme',
205
+ desc: 'Switch theme',
206
+ detail: 'Change UI theme style',
207
+ example: '/theme'
208
+ }
209
+ ]);
210
+ // Feature Extensions
211
+ this.showHelpCategory('Feature Extensions', [
212
+ {
213
+ cmd: '/agents [list|online|install|remove]',
214
+ desc: 'Manage sub-agents',
215
+ detail: 'View, install or remove specialized AI sub-agents',
216
+ example: '/agents list\n/agents online\n/agents install explore-agent'
217
+ },
218
+ {
219
+ cmd: '/mcp [list|add|remove|refresh]',
220
+ desc: 'Manage MCP servers',
221
+ detail: 'Manage Model Context Protocol servers',
222
+ example: '/mcp list\n/mcp add server-name'
223
+ },
224
+ {
225
+ cmd: '/tools [verbose|simple]',
226
+ desc: 'Manage tool display',
227
+ detail: 'View available tools or switch tool call display mode',
228
+ example: '/tools\n/tools verbose\n/tools simple'
229
+ }
230
+ ]);
231
+ // Advanced Features
232
+ this.showHelpCategory('Advanced Features', [
233
+ {
234
+ cmd: '/restore',
235
+ desc: 'Restore from checkpoint',
236
+ detail: 'Restore conversation state from historical checkpoints',
237
+ example: '/restore'
238
+ },
239
+ {
240
+ cmd: '/compress [on|off|max_message|max_token|exec]',
241
+ desc: 'Manage context compression',
242
+ detail: 'Configure compression settings or execute compression manually',
243
+ example: '/compress\n/compress exec\n/compress on\n/compress max_message 50\n/compress max_token 1500000'
244
+ },
245
+ {
246
+ cmd: '/stats',
247
+ desc: 'Show session statistics',
248
+ detail: 'View statistics information of current session',
249
+ example: '/stats'
250
+ },
251
+ {
252
+ cmd: '/about',
253
+ desc: 'Show version information',
254
+ detail: 'View version and related information of XAGENT CLI',
255
+ example: '/about'
256
+ }
257
+ ]);
258
+ // Keyboard Shortcuts
259
+ console.log('');
260
+ console.log(colors.border(separator));
261
+ console.log(colors.primaryBright('Keyboard Shortcuts'));
262
+ console.log(colors.border(separator));
263
+ console.log('');
264
+ console.log(colors.textMuted(' ESC - Cancel current operation'));
265
+ console.log(colors.textMuted(' Ctrl+C - Exit program'));
266
+ console.log('');
267
+ }
268
+ showHelpCategory(title, commands) {
269
+ const separator = icons.separator.repeat(Math.min(60, process.stdout.columns || 80));
270
+ console.log('');
271
+ console.log(colors.border(separator));
272
+ console.log(colors.primaryBright(title));
273
+ console.log(colors.border(separator));
274
+ console.log('');
275
+ commands.forEach(cmd => {
276
+ console.log(colors.primaryBright(` ${cmd.cmd}`));
277
+ console.log(colors.textDim(` ${cmd.desc}`));
278
+ console.log(colors.textMuted(` ${cmd.detail}`));
279
+ if (cmd.modes) {
280
+ console.log(colors.textDim(` Available modes:`));
281
+ cmd.modes.forEach(mode => {
282
+ console.log(colors.textDim(` • ${mode}`));
283
+ });
284
+ }
285
+ console.log(colors.accent(` Examples:`));
286
+ cmd.example.split('\n').forEach(ex => {
287
+ console.log(colors.codeText(` ${ex}`));
288
+ });
289
+ console.log('');
290
+ });
291
+ }
292
+ async handleInit() {
293
+ const spinner = ora('Initializing project...').start();
294
+ try {
295
+ await this.memoryManager.initializeProject(process.cwd());
296
+ spinner.succeed('Project initialized successfully');
297
+ }
298
+ catch (error) {
299
+ spinner.fail(`Initialization failed: ${error.message}`);
300
+ }
301
+ }
302
+ async handleClear() {
303
+ // ęø…ē©ŗęœ¬åœ°åÆ¹čÆåŽ†å²
304
+ this.conversationHistory = [];
305
+ // 清空 ConversationManager äø­ēš„å½“å‰åÆ¹čÆ
306
+ await this.conversationManager.clearCurrentConversation();
307
+ // č°ƒē”Øå›žč°ƒé€šēŸ„ InteractiveSession ęø…ē©ŗåÆ¹čÆ
308
+ if (this.onClearCallback) {
309
+ this.onClearCallback();
310
+ }
311
+ logger.success('Conversation history cleared', 'Start a new conversation');
312
+ }
313
+ async handleExit() {
314
+ logger.info('Goodbye!', 'Thank you for using xAgent CLI');
315
+ process.exit(0);
316
+ }
317
+ async handleAuth() {
318
+ logger.section('Authentication Management');
319
+ const { action } = await inquirer.prompt([
320
+ {
321
+ type: 'list',
322
+ name: 'action',
323
+ message: 'Select action:',
324
+ choices: [
325
+ { name: 'Change authentication method', value: 'change' },
326
+ { name: 'Show current auth config', value: 'show' },
327
+ { name: 'Back', value: 'back' }
328
+ ]
329
+ }
330
+ ]);
331
+ if (action === 'back') {
332
+ return;
333
+ }
334
+ if (action === 'show') {
335
+ const authConfig = this.configManager.getAuthConfig();
336
+ logger.subsection('Current Authentication Configuration');
337
+ console.log(JSON.stringify(authConfig, null, 2));
338
+ }
339
+ else if (action === 'change') {
340
+ const { selectAuthType } = await inquirer.prompt([
341
+ {
342
+ type: 'confirm',
343
+ name: 'selectAuthType',
344
+ message: 'Do you want to change authentication type?',
345
+ default: false
346
+ }
347
+ ]);
348
+ if (selectAuthType) {
349
+ logger.warn('Please restart xAgent CLI and run /auth again', 'Authentication changes require restart');
350
+ }
351
+ }
352
+ }
353
+ async handleMode(args) {
354
+ const modes = Object.values(ExecutionMode);
355
+ const currentMode = this.configManager.getApprovalMode() || this.configManager.getExecutionMode();
356
+ if (args.length > 0) {
357
+ const newMode = args[0].toLowerCase();
358
+ if (modes.includes(newMode)) {
359
+ this.configManager.setApprovalMode(newMode);
360
+ await this.configManager.save('global');
361
+ console.log(chalk.green(`āœ… Approval mode changed to: ${newMode}`));
362
+ }
363
+ else {
364
+ console.log(chalk.red(`āŒ Invalid mode: ${newMode}`));
365
+ console.log(chalk.gray(`Available modes: ${modes.join(', ')}`));
366
+ }
367
+ }
368
+ else {
369
+ console.log(chalk.cyan('\nšŸŽÆ Approval Modes:\n'));
370
+ console.log(` Current: ${chalk.green(currentMode)}\n`);
371
+ const descriptions = [
372
+ { mode: 'yolo', desc: 'Execute commands without confirmation' },
373
+ { mode: 'accept_edits', desc: 'Accept all edits automatically' },
374
+ { mode: 'plan', desc: 'Plan before executing' },
375
+ { mode: 'default', desc: 'Safe execution with confirmations' },
376
+ { mode: 'smart', desc: 'Smart approval with intelligent security checks' }
377
+ ];
378
+ descriptions.forEach(({ mode, desc }) => {
379
+ const current = mode === currentMode ? chalk.green(' [current]') : '';
380
+ console.log(` ${chalk.yellow(mode)}${current}`);
381
+ console.log(` ${chalk.gray(desc)}`);
382
+ });
383
+ console.log();
384
+ }
385
+ }
386
+ async handleThink(args) {
387
+ const thinkingConfig = this.configManager.getThinkingConfig();
388
+ if (args.length > 0) {
389
+ const action = args[0].toLowerCase();
390
+ if (action === 'on' || action === 'true' || action === '1') {
391
+ thinkingConfig.enabled = true;
392
+ this.configManager.setThinkingConfig(thinkingConfig);
393
+ await this.configManager.save('global');
394
+ console.log(chalk.green('āœ… Thinking mode enabled'));
395
+ }
396
+ else if (action === 'off' || action === 'false' || action === '0') {
397
+ thinkingConfig.enabled = false;
398
+ this.configManager.setThinkingConfig(thinkingConfig);
399
+ await this.configManager.save('global');
400
+ console.log(chalk.green('āœ… Thinking mode disabled'));
401
+ }
402
+ else if (action === 'display' && args[1]) {
403
+ const displayMode = args[1].toLowerCase();
404
+ const validModes = ['full', 'compact', 'indicator'];
405
+ if (validModes.includes(displayMode)) {
406
+ thinkingConfig.displayMode = displayMode;
407
+ thinkingConfig.enabled = true; // Auto-enable when setting display mode
408
+ this.configManager.setThinkingConfig(thinkingConfig);
409
+ await this.configManager.save('global');
410
+ console.log(chalk.green(`āœ… Thinking display mode set to: ${displayMode}`));
411
+ }
412
+ else {
413
+ console.log(chalk.red(`āŒ Invalid display mode: ${displayMode}`));
414
+ console.log(chalk.gray(`Valid modes: ${validModes.join(', ')}`));
415
+ }
416
+ }
417
+ else {
418
+ console.log(chalk.red(`āŒ Invalid action: ${action}`));
419
+ console.log(chalk.gray('Usage: /think [on|off|display <mode>]'));
420
+ }
421
+ }
422
+ else {
423
+ console.log(chalk.cyan('\n🧠 Thinking Mode:\n'));
424
+ console.log(` Status: ${thinkingConfig.enabled ? chalk.green('Enabled') : chalk.red('Disabled')}`);
425
+ console.log(` Mode: ${chalk.yellow(thinkingConfig.mode)}`);
426
+ console.log(` Display: ${chalk.yellow(thinkingConfig.displayMode)}\n`);
427
+ console.log(chalk.gray('Usage:'));
428
+ console.log(chalk.gray(' /think on - Enable thinking mode'));
429
+ console.log(chalk.gray(' /think off - Disable thinking mode'));
430
+ console.log(chalk.gray(' /think display full - Show full thinking process'));
431
+ console.log(chalk.gray(' /think display compact - Show compact thinking (500 chars)'));
432
+ console.log(chalk.gray(' /think display indicator - Show only indicator'));
433
+ console.log();
434
+ }
435
+ }
436
+ async handleAgents(args) {
437
+ const action = args[0] || 'list';
438
+ switch (action) {
439
+ case 'list':
440
+ await this.listAgents();
441
+ break;
442
+ case 'online':
443
+ logger.warn('Online marketplace not implemented yet', 'Check back later for updates');
444
+ break;
445
+ case 'install':
446
+ logger.warn('Agent installation wizard not implemented yet', 'Use /agents install in interactive mode');
447
+ break;
448
+ case 'remove':
449
+ logger.warn('Agent removal not implemented yet', 'Use /agents remove in interactive mode');
450
+ break;
451
+ default:
452
+ logger.warn(`Unknown agents action: ${action}`, 'Use /agents list to see available actions');
453
+ }
454
+ }
455
+ async listAgents() {
456
+ const agents = this.agentManager.getAllAgents();
457
+ if (agents.length === 0) {
458
+ logger.warn('No agents configured', 'Use /agents install to add agents');
459
+ return;
460
+ }
461
+ logger.section('Available Agents');
462
+ agents.forEach((agent) => {
463
+ const color = agent.color || '#FFFFFF';
464
+ logger.info(` ${chalk.hex(color)(agent.name || agent.agentType)}`);
465
+ logger.info(` Type: ${agent.agentType}`);
466
+ logger.info(` ${agent.whenToUse}`);
467
+ });
468
+ }
469
+ async handleMcp(args) {
470
+ const action = args[0] || 'list';
471
+ switch (action) {
472
+ case 'list':
473
+ await this.listMcpServers();
474
+ break;
475
+ case 'add':
476
+ if (args[1]) {
477
+ // Non-interactive mode: use command line arguments
478
+ await this.addMcpServerInteractive(args[1]);
479
+ }
480
+ else {
481
+ // Interactive mode
482
+ await this.addMcpServerInteractive();
483
+ }
484
+ break;
485
+ case 'remove':
486
+ if (args[1]) {
487
+ // Non-interactive mode
488
+ await this.removeMcpServer(args[1]);
489
+ }
490
+ else {
491
+ // Interactive mode
492
+ await this.removeMcpServerInteractive();
493
+ }
494
+ break;
495
+ case 'refresh':
496
+ await this.refreshMcpServers();
497
+ break;
498
+ default:
499
+ logger.warn(`Unknown MCP action: ${action}`, 'Use /mcp list to see available actions');
500
+ }
501
+ }
502
+ async listMcpServers() {
503
+ const serverConfigs = this.mcpManager.getAllServerConfigs();
504
+ if (serverConfigs.length === 0) {
505
+ logger.section('MCP Servers');
506
+ logger.warn('No MCP servers configured');
507
+ logger.info('Use /mcp add to add a new MCP server');
508
+ return;
509
+ }
510
+ logger.section('MCP Servers');
511
+ serverConfigs.forEach(({ name: serverName, config: serverConfig }) => {
512
+ const server = this.mcpManager.getServer(serverName);
513
+ const isConnected = server?.isServerConnected() || false;
514
+ const status = isConnected ? chalk.green('āœ“ Connected') : chalk.red('āœ— Disconnected');
515
+ const tools = server?.getToolNames() || [];
516
+ const transport = serverConfig?.transport || serverConfig?.type || 'unknown';
517
+ const command = serverConfig?.command ? `${serverConfig.command} ${(serverConfig.args || []).join(' ')}` : serverConfig?.url || 'N/A';
518
+ console.log('');
519
+ console.log(` ${chalk.cyan(serverName)} ${status}`);
520
+ console.log(` Transport: ${transport}`);
521
+ console.log(` Command: ${command}`);
522
+ console.log(` Tools: ${isConnected ? tools.length : 'N/A'} (${isConnected ? tools.join(', ') : 'wait for connection'})`);
523
+ });
524
+ console.log('');
525
+ logger.info(`Total: ${serverConfigs.length} server(s)`);
526
+ }
527
+ async addMcpServerInteractive(serverName) {
528
+ const { name, command, args: serverArgs, transport, url, authToken, headers } = await inquirer.prompt([
529
+ {
530
+ type: 'input',
531
+ name: 'name',
532
+ message: 'Enter MCP server name:',
533
+ default: serverName,
534
+ validate: (input) => {
535
+ if (!input.trim()) {
536
+ return 'Server name is required';
537
+ }
538
+ const servers = this.mcpManager.getAllServers();
539
+ if (servers.some((s) => s.config?.name === input)) {
540
+ return 'Server with this name already exists';
541
+ }
542
+ return true;
543
+ }
544
+ },
545
+ {
546
+ type: 'list',
547
+ name: 'transport',
548
+ message: 'Select transport type:',
549
+ choices: [
550
+ { name: 'Stdio (stdin/stdout)', value: 'stdio' },
551
+ { name: 'HTTP/SSE', value: 'sse' },
552
+ { name: 'HTTP (POST)', value: 'http' }
553
+ ],
554
+ default: 'stdio'
555
+ },
556
+ {
557
+ type: 'input',
558
+ name: 'command',
559
+ message: 'Enter command (for stdio transport):',
560
+ when: (answers) => answers.transport === 'stdio',
561
+ validate: (input) => input.trim() ? true : 'Command is required'
562
+ },
563
+ {
564
+ type: 'input',
565
+ name: 'args',
566
+ message: 'Enter arguments (comma-separated, for stdio transport):',
567
+ when: (answers) => answers.transport === 'stdio',
568
+ filter: (input) => input ? input.split(',').map((a) => a.trim()) : []
569
+ },
570
+ {
571
+ type: 'input',
572
+ name: 'url',
573
+ message: 'Enter server URL (for HTTP/SSE/HTTP transport):',
574
+ when: (answers) => answers.transport === 'sse' || answers.transport === 'http',
575
+ validate: (input) => input.trim() ? true : 'URL is required'
576
+ },
577
+ {
578
+ type: 'password',
579
+ name: 'authToken',
580
+ message: 'Enter authentication token (optional):',
581
+ when: (answers) => answers.transport === 'sse' || answers.transport === 'http'
582
+ },
583
+ {
584
+ type: 'input',
585
+ name: 'headers',
586
+ message: 'Enter custom headers as JSON (optional, e.g., {"Authorization": "Bearer token"}):',
587
+ when: (answers) => answers.transport === 'sse' || answers.transport === 'http',
588
+ filter: (input) => {
589
+ if (!input.trim())
590
+ return undefined;
591
+ try {
592
+ return JSON.parse(input);
593
+ }
594
+ catch {
595
+ return undefined;
596
+ }
597
+ }
598
+ }
599
+ ]);
600
+ const config = {
601
+ transport: transport
602
+ };
603
+ if (transport === 'stdio') {
604
+ config.command = command;
605
+ if (serverArgs && serverArgs.length > 0) {
606
+ config.args = serverArgs;
607
+ }
608
+ }
609
+ else {
610
+ config.url = url;
611
+ if (authToken) {
612
+ config.authToken = authToken;
613
+ }
614
+ if (headers) {
615
+ config.headers = headers;
616
+ }
617
+ }
618
+ try {
619
+ // Save to config file
620
+ this.configManager.addMcpServer(name, config);
621
+ await this.configManager.save('global');
622
+ // Register to MCP Manager
623
+ this.mcpManager.registerServer(name, config);
624
+ // Connect to server (with error handling)
625
+ let connected = false;
626
+ try {
627
+ await this.mcpManager.connectServer(name);
628
+ connected = true;
629
+ }
630
+ catch (error) {
631
+ // Connection failed - cleanup
632
+ this.mcpManager.disconnectServer(name);
633
+ this.configManager.removeMcpServer(name);
634
+ await this.configManager.save('global');
635
+ throw new Error(`Connection failed: ${error.message}`);
636
+ }
637
+ // Register MCP tools with simple names
638
+ const allMcpTools = this.mcpManager.getAllTools();
639
+ const toolRegistry = getToolRegistry();
640
+ toolRegistry.registerMCPTools(allMcpTools);
641
+ // Update system prompt to include new MCP tools
642
+ if (this.onSystemPromptUpdate) {
643
+ await this.onSystemPromptUpdate();
644
+ }
645
+ console.log(chalk.green(`āœ… MCP server '${name}' added and connected successfully`));
646
+ }
647
+ catch (error) {
648
+ console.log(chalk.red(`āŒ Failed to add MCP server: ${error.message}`));
649
+ }
650
+ }
651
+ async removeMcpServerInteractive() {
652
+ const servers = this.mcpManager.getAllServers();
653
+ if (servers.length === 0) {
654
+ logger.warn('No MCP servers configured', 'Use /mcp add to add servers');
655
+ return;
656
+ }
657
+ const serverNames = servers.map((s) => {
658
+ const tools = s.getToolNames();
659
+ const status = s.isServerConnected() ? 'āœ“' : 'āœ—';
660
+ return {
661
+ name: `${status} ${s.config?.name || 'unknown'} (${tools.length} tools)`,
662
+ value: s.config?.name
663
+ };
664
+ });
665
+ const { serverName } = await inquirer.prompt([
666
+ {
667
+ type: 'list',
668
+ name: 'serverName',
669
+ message: 'Select MCP server to remove:',
670
+ choices: serverNames
671
+ }
672
+ ]);
673
+ await this.removeMcpServer(serverName);
674
+ }
675
+ async removeMcpServer(serverName) {
676
+ try {
677
+ // Get server info before disconnecting to notify LLM
678
+ const server = this.mcpManager.getServer(serverName);
679
+ const removedTools = server ? server.getToolNames() : [];
680
+ const removedToolNames = removedTools.map((t) => `${serverName}__${t}`).join(', ');
681
+ // Disconnect
682
+ this.mcpManager.disconnectServer(serverName);
683
+ // Unregister MCP tools for this server
684
+ const toolRegistry = getToolRegistry();
685
+ toolRegistry.unregisterMCPTools(serverName);
686
+ // Remove from config
687
+ this.configManager.removeMcpServer(serverName);
688
+ await this.configManager.save('global');
689
+ // Update system prompt to reflect removed MCP tools
690
+ if (this.onSystemPromptUpdate) {
691
+ await this.onSystemPromptUpdate();
692
+ }
693
+ console.log(chalk.green(`āœ… MCP server '${serverName}' removed successfully`));
694
+ }
695
+ catch (error) {
696
+ console.log(chalk.red(`āŒ Failed to remove MCP server: ${error.message}`));
697
+ }
698
+ }
699
+ async refreshMcpServers() {
700
+ const spinner = ora({ text: 'Refreshing MCP servers...', interval: 200 }).start();
701
+ try {
702
+ // Disconnect all existing connections
703
+ this.mcpManager.disconnectAllServers();
704
+ // Reconnect all servers
705
+ await this.mcpManager.connectAllServers();
706
+ spinner.succeed('MCP servers refreshed successfully');
707
+ // Show current server status
708
+ await this.listMcpServers();
709
+ }
710
+ catch (error) {
711
+ spinner.fail(`Failed to refresh MCP servers: ${error.message}`);
712
+ }
713
+ }
714
+ async handleMemory(args) {
715
+ const action = args[0] || 'show';
716
+ switch (action) {
717
+ case 'show':
718
+ await this.showMemory();
719
+ break;
720
+ case 'add':
721
+ logger.warn('Memory addition not implemented yet', 'Use /memory add in interactive mode');
722
+ break;
723
+ case 'refresh':
724
+ logger.warn('Memory refresh not implemented yet', 'Check back later for updates');
725
+ break;
726
+ default:
727
+ logger.warn(`Unknown memory action: ${action}`, 'Use /memory show to see available actions');
728
+ }
729
+ }
730
+ async showMemory() {
731
+ const memoryFiles = this.memoryManager.getMemoryFiles();
732
+ if (memoryFiles.length === 0) {
733
+ logger.warn('No memory files loaded', 'Use /init to initialize project context');
734
+ return;
735
+ }
736
+ logger.section('Memory Files');
737
+ memoryFiles.forEach((file) => {
738
+ const level = file.level === 'global' ? chalk.blue('[global]') :
739
+ file.level === 'project' ? chalk.green('[project]') :
740
+ chalk.yellow('[subdirectory]');
741
+ logger.info(` ${level} ${file.path}`);
742
+ });
743
+ }
744
+ async addMemory() {
745
+ const { entry } = await inquirer.prompt([
746
+ {
747
+ type: 'editor',
748
+ name: 'entry',
749
+ message: 'Enter memory entry (opens editor):'
750
+ }
751
+ ]);
752
+ if (entry && entry.trim()) {
753
+ await this.memoryManager.addMemoryEntry(entry.trim());
754
+ console.log(chalk.green('āœ… Memory entry added'));
755
+ }
756
+ }
757
+ async refreshMemory() {
758
+ const spinner = ora({ text: 'Refreshing memory...', interval: 200 }).start();
759
+ try {
760
+ await this.memoryManager.loadMemory();
761
+ spinner.succeed('Memory refreshed successfully');
762
+ }
763
+ catch (error) {
764
+ spinner.fail(`Failed to refresh memory: ${error.message}`);
765
+ }
766
+ }
767
+ async handleRestore(args) {
768
+ if (!this.checkpointManager.isEnabled()) {
769
+ logger.warn('Checkpointing is not enabled', 'Enable it with /mode or in settings');
770
+ return;
771
+ }
772
+ const checkpoints = this.checkpointManager.listCheckpoints();
773
+ if (checkpoints.length === 0) {
774
+ logger.warn('No checkpoints available', 'Create checkpoints during your session');
775
+ return;
776
+ }
777
+ if (args.length > 0) {
778
+ const checkpointId = args[0];
779
+ try {
780
+ await this.checkpointManager.restoreCheckpoint(checkpointId);
781
+ logger.success(`Checkpoint ${checkpointId} restored successfully!`);
782
+ }
783
+ catch (error) {
784
+ logger.error(error.message, 'Check if checkpoint ID is valid');
785
+ }
786
+ }
787
+ else {
788
+ const choices = checkpoints.map((cp) => ({
789
+ name: `${new Date(cp.timestamp).toLocaleString()} - ${cp.description}`,
790
+ value: cp.id
791
+ }));
792
+ const { checkpointId } = await inquirer.prompt([
793
+ {
794
+ type: 'list',
795
+ name: 'checkpointId',
796
+ message: 'Select checkpoint to restore:',
797
+ choices
798
+ }
799
+ ]);
800
+ try {
801
+ await this.checkpointManager.restoreCheckpoint(checkpointId);
802
+ logger.success(`Checkpoint ${checkpointId} restored successfully!`);
803
+ }
804
+ catch (error) {
805
+ logger.error(error.message, 'Check if checkpoint ID is valid');
806
+ }
807
+ }
808
+ }
809
+ async handleTools() {
810
+ const toolRegistry = getToolRegistry();
811
+ const tools = toolRegistry.getAll();
812
+ logger.section('Available Tools');
813
+ tools.forEach(tool => {
814
+ logger.info(` ${tool.name}`);
815
+ logger.info(` ${tool.description}`);
816
+ });
817
+ console.log('');
818
+ const currentSetting = this.configManager.get('showToolDetails') ? 'verbose' : 'simple';
819
+ logger.info(`Current tool display mode: ${currentSetting}`);
820
+ logger.info('Use /tools verbose to switch to verbose mode');
821
+ logger.info('Use /tools simple to switch to simple mode');
822
+ }
823
+ async handleToolsVerbose(args) {
824
+ if (args.length === 0) {
825
+ const currentSetting = this.configManager.get('showToolDetails') ? 'verbose' : 'simple';
826
+ logger.info(`Current tool display mode: ${currentSetting}`);
827
+ return;
828
+ }
829
+ const mode = args[0].toLowerCase();
830
+ if (mode === 'verbose' || mode === 'detail' || mode === 'true' || mode === 'on') {
831
+ this.configManager.set('showToolDetails', true);
832
+ await this.configManager.save('global');
833
+ logger.success('Tool display mode switched to verbose mode', 'Will show complete tool call information');
834
+ }
835
+ else if (mode === 'simple' || mode === 'concise' || mode === 'false' || mode === 'off') {
836
+ this.configManager.set('showToolDetails', false);
837
+ await this.configManager.save('global');
838
+ logger.success('Tool display mode switched to simple mode', 'Only show tool execution status');
839
+ }
840
+ else {
841
+ logger.warn('Invalid mode', 'Use verbose or simple');
842
+ }
843
+ }
844
+ async handleStats() {
845
+ logger.section('Session Statistics');
846
+ logger.info(` Execution Mode: ${this.configManager.getExecutionMode()}`);
847
+ logger.info(` Language: ${this.configManager.getLanguage()}`);
848
+ logger.info(` Checkpointing: ${this.checkpointManager.isEnabled() ? 'Enabled' : 'Disabled'}`);
849
+ logger.info(` MCP Servers: ${this.mcpManager.getAllServers().length}`);
850
+ logger.info(` Agents: ${this.agentManager.getAllAgents().length}`);
851
+ }
852
+ async handleTheme() {
853
+ logger.warn('Theme switching not implemented yet', 'Check back later for updates');
854
+ }
855
+ async handleLanguage() {
856
+ const { language } = await inquirer.prompt([
857
+ {
858
+ type: 'list',
859
+ name: 'language',
860
+ message: 'Select language:',
861
+ choices: [
862
+ { name: 'Chinese', value: 'zh' },
863
+ { name: 'English', value: 'en' }
864
+ ]
865
+ }
866
+ ]);
867
+ this.configManager.setLanguage(language);
868
+ logger.success(`Language changed to: ${language === 'zh' ? 'Chinese' : 'English'}`, 'Restart CLI to apply changes');
869
+ }
870
+ async handleAbout() {
871
+ logger.section('xAgent CLI');
872
+ logger.info('Version: 1.0.0');
873
+ logger.info('A powerful AI-powered command-line assistant');
874
+ logger.blank();
875
+ logger.link('Documentation', 'https://platform.xagent.cn/');
876
+ logger.link('GitHub', 'https://github.com/xagent-ai/xagent-cli');
877
+ }
878
+ async handleCompress(args) {
879
+ const config = this.configManager.getContextCompressionConfig();
880
+ // If there are arguments, process config or execute
881
+ if (args.length > 0) {
882
+ const action = args[0].toLowerCase();
883
+ if (action === 'exec' || action === 'run' || action === 'now') {
884
+ await this.executeCompression(config);
885
+ return;
886
+ }
887
+ await this.setCompressConfig(args);
888
+ return;
889
+ }
890
+ // Display current configuration
891
+ console.log(chalk.cyan('\nšŸ“¦ Context Compression:\n'));
892
+ console.log(` Status: ${config.enabled ? chalk.green('Enabled') : chalk.red('Disabled')}`);
893
+ console.log(` Max Messages: ${chalk.yellow(config.maxMessages.toString())}`);
894
+ console.log(` Max Tokens: ${chalk.yellow(config.maxContextSize.toString())}`);
895
+ console.log('');
896
+ console.log(chalk.gray('Usage:'));
897
+ console.log(chalk.gray(' /compress - Show current configuration'));
898
+ console.log(chalk.gray(' /compress exec - Execute compression now'));
899
+ console.log(chalk.gray(' /compress on|off - Enable/disable compression'));
900
+ console.log(chalk.gray(' /compress max_message <n> - Set max messages before compression'));
901
+ console.log(chalk.gray(' /compress max_token <n> - Set max tokens before compression'));
902
+ console.log('');
903
+ }
904
+ async executeCompression(config) {
905
+ const messages = this.conversationHistory;
906
+ if (!messages || messages.length === 0) {
907
+ console.log(chalk.yellow('āš ļø No conversation to compress'));
908
+ return;
909
+ }
910
+ const { needsCompression, reason } = this.contextCompressor.needsCompression(messages, config);
911
+ if (!needsCompression) {
912
+ console.log(chalk.green('āœ… No compression needed'));
913
+ console.log(chalk.gray(` ${reason}`));
914
+ return;
915
+ }
916
+ console.log(chalk.cyan('\nšŸš€ Executing context compression...\n'));
917
+ const spinner = ora({
918
+ text: 'Compressing context...',
919
+ spinner: 'dots',
920
+ color: 'cyan'
921
+ }).start();
922
+ try {
923
+ const result = await this.contextCompressor.compressContext(messages, 'You are a helpful AI assistant.', config);
924
+ spinner.succeed(chalk.green('āœ… Compression complete'));
925
+ console.log('');
926
+ console.log(` ${chalk.cyan('Original:')} ${chalk.yellow(result.originalMessageCount.toString())} messages (${result.originalSize} chars)`);
927
+ console.log(` ${chalk.cyan('Compressed:')} ${chalk.yellow(result.compressedMessageCount.toString())} messages (${result.compressedSize} chars)`);
928
+ console.log(` ${chalk.cyan('Reduction:')} ${chalk.green(Math.round((1 - result.compressedSize / result.originalSize) * 100) + '%')}`);
929
+ console.log(` ${chalk.cyan('Method:')} ${chalk.yellow(result.compressionMethod)}`);
930
+ console.log('');
931
+ console.log(chalk.gray('Use /clear to start a new conversation, or continue chatting to see the compressed summary.'));
932
+ console.log('');
933
+ }
934
+ catch (error) {
935
+ spinner.fail(chalk.red('Compression failed'));
936
+ console.log(chalk.red(` ${error.message}`));
937
+ }
938
+ }
939
+ async setCompressConfig(args) {
940
+ const config = this.configManager.getContextCompressionConfig();
941
+ const action = args[0].toLowerCase();
942
+ switch (action) {
943
+ case 'on':
944
+ config.enabled = true;
945
+ this.configManager.setContextCompressionConfig(config);
946
+ await this.configManager.save('global');
947
+ console.log(chalk.green('āœ… Context compression enabled'));
948
+ break;
949
+ case 'off':
950
+ config.enabled = false;
951
+ this.configManager.setContextCompressionConfig(config);
952
+ await this.configManager.save('global');
953
+ console.log(chalk.green('āœ… Context compression disabled'));
954
+ break;
955
+ case 'max_message':
956
+ if (args[1]) {
957
+ const maxMessages = parseInt(args[1], 10);
958
+ if (isNaN(maxMessages) || maxMessages < 1) {
959
+ console.log(chalk.red('āŒ Invalid value for max_message. Must be a positive number.'));
960
+ return;
961
+ }
962
+ config.maxMessages = maxMessages;
963
+ this.configManager.setContextCompressionConfig(config);
964
+ await this.configManager.save('global');
965
+ console.log(chalk.green(`āœ… Max messages set to: ${maxMessages}`));
966
+ }
967
+ else {
968
+ console.log(chalk.gray('Usage: /compress max_message <number>'));
969
+ }
970
+ break;
971
+ case 'max_token':
972
+ if (args[1]) {
973
+ const maxContextSize = parseInt(args[1], 10);
974
+ if (isNaN(maxContextSize) || maxContextSize < 1000) {
975
+ console.log(chalk.red('āŒ Invalid value for max_token. Must be at least 1000.'));
976
+ return;
977
+ }
978
+ config.maxContextSize = maxContextSize;
979
+ this.configManager.setContextCompressionConfig(config);
980
+ await this.configManager.save('global');
981
+ console.log(chalk.green(`āœ… Max tokens set to: ${maxContextSize}`));
982
+ }
983
+ else {
984
+ console.log(chalk.gray('Usage: /compress max_token <number>'));
985
+ }
986
+ break;
987
+ default:
988
+ console.log(chalk.red(`āŒ Unknown action: ${action}`));
989
+ console.log(chalk.gray('Available actions: on, off, max_message, max_token, exec'));
990
+ }
991
+ }
992
+ }
993
+ export function parseInput(input) {
994
+ const inputs = [];
995
+ let remaining = input;
996
+ const fileRefRegex = /@([^\s]+)/g;
997
+ let match;
998
+ while ((match = fileRefRegex.exec(remaining)) !== null) {
999
+ const filePath = match[1];
1000
+ const beforeMatch = remaining.substring(0, match.index);
1001
+ const afterMatch = remaining.substring(match.index + match[0].length);
1002
+ if (beforeMatch.trim()) {
1003
+ inputs.push({ type: 'text', content: beforeMatch.trim() });
1004
+ }
1005
+ inputs.push({ type: 'file', content: filePath });
1006
+ remaining = afterMatch;
1007
+ }
1008
+ if (remaining.trim()) {
1009
+ if (remaining.startsWith('!')) {
1010
+ inputs.push({ type: 'command', content: remaining.slice(1).trim() });
1011
+ }
1012
+ else {
1013
+ inputs.push({ type: 'text', content: remaining.trim() });
1014
+ }
1015
+ }
1016
+ return inputs;
1017
+ }
1018
+ export function detectImageInput(input) {
1019
+ return input.includes('[Pasted image') || input.includes('<image');
1020
+ }
1021
+ //# sourceMappingURL=slash-commands.js.map