@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
package/src/auth.ts ADDED
@@ -0,0 +1,648 @@
1
+ import axios from 'axios';
2
+ import open from 'open';
3
+ import inquirer from 'inquirer';
4
+ import http from 'http';
5
+ import { AuthConfig, AuthType } from './types.js';
6
+ import { getLogger } from './logger.js';
7
+
8
+ const logger = getLogger();
9
+
10
+ // Extended AuthConfig for xAgent with additional fields
11
+ interface XAgentAuthConfig extends AuthConfig {
12
+ xagentApiBaseUrl?: string;
13
+ }
14
+
15
+ interface VLMProviderInfo {
16
+ name: string;
17
+ provider: string;
18
+ baseUrl: string;
19
+ defaultModel: string;
20
+ models: string[];
21
+ }
22
+
23
+ const VLM_PROVIDERS: VLMProviderInfo[] = [
24
+ {
25
+ name: 'OpenAI',
26
+ provider: 'openai',
27
+ baseUrl: 'https://api.openai.com/v1',
28
+ defaultModel: 'gpt-4o',
29
+ models: ['gpt-5', 'gpt-4o', 'gpt-4o-mini', 'gpt-5-mini']
30
+ },
31
+ {
32
+ name: 'Volcengine (Doubao)',
33
+ provider: 'volcengine',
34
+ baseUrl: 'https://ark.cn-beijing.volces.com/api/v3',
35
+ defaultModel: 'doubao-seed-1-8-251228',
36
+ models: ['doubao-seed-1-8-251228', 'doubao-1-5-ui-tars-250428', 'seed1.5-vl']
37
+ },
38
+ {
39
+ name: 'Anthropic',
40
+ provider: 'anthropic',
41
+ baseUrl: 'https://api.anthropic.com/v1',
42
+ defaultModel: 'claude-sonnet-4-5',
43
+ models: ['claude-sonnet-4-5', 'claude-opus-4-5', 'claude-sonnet-4', 'claude-opus-4']
44
+ }
45
+ ];
46
+
47
+ interface ThirdPartyProvider {
48
+ name: string;
49
+ baseUrl: string;
50
+ defaultModel: string;
51
+ description: string;
52
+ models?: string[];
53
+ }
54
+
55
+ const THIRD_PARTY_PROVIDERS: ThirdPartyProvider[] = [
56
+ {
57
+ name: 'Zhipu AI (GLM-4)',
58
+ baseUrl: 'https://open.bigmodel.cn/api/coding/paas/v4/',
59
+ defaultModel: 'glm-4.7',
60
+ description: 'Zhipu AI GLM-4 series models',
61
+ models: ['glm-4.7', 'glm-4', 'glm-4-plus', 'glm-4-0520', 'glm-4-air', 'glm-4-airx', 'glm-4-flash', 'glm-4.7-plus']
62
+ },
63
+ {
64
+ name: 'DeepSeek',
65
+ baseUrl: 'https://api.deepseek.com/v1',
66
+ defaultModel: 'deepseek-chat',
67
+ description: 'DeepSeek DeepSeek series models',
68
+ models: ['deepseek-chat', 'deepseek-coder', 'deepseek-reasoner']
69
+ },
70
+ {
71
+ name: 'Alibaba Tongyi Qianwen',
72
+ baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
73
+ defaultModel: 'qwen-max',
74
+ description: 'Alibaba Cloud Tongyi Qianwen series models',
75
+ models: ['qwen-max', 'qwen-plus', 'qwen-turbo', 'qwen-long', 'qwen-vl-max', 'qwen-vl-plus']
76
+ },
77
+ {
78
+ name: 'Baidu Wenxin Yiyan',
79
+ baseUrl: 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat',
80
+ defaultModel: 'ernie-bot-4',
81
+ description: 'Baidu Intelligent Cloud Wenxin Yiyan series models',
82
+ models: ['ernie-bot-4', 'ernie-bot-turbo', 'ernie-speed', 'ernie-speed-128k', 'ernie-lite-8k']
83
+ },
84
+ {
85
+ name: 'Moonshot AI (Kimi)',
86
+ baseUrl: 'https://api.moonshot.cn/v1',
87
+ defaultModel: 'moonshot-v1-8k',
88
+ description: 'Moonshot AI Kimi series models',
89
+ models: ['moonshot-v1-8k', 'moonshot-v1-32k', 'moonshot-v1-128k']
90
+ },
91
+ {
92
+ name: 'MiniMax',
93
+ baseUrl: 'https://api.minimax.chat/anthropic',
94
+ defaultModel: 'MiniMax-M2.1',
95
+ description: 'MiniMax (Anthropic-compatible format)',
96
+ models: ['MiniMax-M2.1', 'MiniMax-M2.1-lightning', 'MiniMax-M2', 'MiniMax-M2-Stable']
97
+ },
98
+ {
99
+ name: '01.AI (Yi)',
100
+ baseUrl: 'https://api.lingyiwanwu.com/v1',
101
+ defaultModel: 'yi-large',
102
+ description: '01.AI Yi series models',
103
+ models: ['yi-large', 'yi-large-turbo', 'yi-medium', 'yi-spark', 'yi-vision']
104
+ },
105
+ {
106
+ name: 'Baichuan Intelligence (Baichuan)',
107
+ baseUrl: 'https://api.baichuan-ai.com/v1',
108
+ defaultModel: 'Baichuan4',
109
+ description: 'Baichuan Intelligence Baichuan series models',
110
+ models: ['Baichuan4', 'Baichuan3-Turbo', 'Baichuan3-Turbo-128k', 'Baichuan-Text-Embedding']
111
+ },
112
+ {
113
+ name: 'Tencent Hunyuan',
114
+ baseUrl: 'https://hunyuan.cloud.tencent.com/hyllm/v1',
115
+ defaultModel: 'hunyuan-pro',
116
+ description: 'Tencent Hunyuan series models',
117
+ models: ['hunyuan-pro', 'hunyuan-standard', 'hunyuan-lite', 'hunyuan-vision']
118
+ },
119
+ {
120
+ name: 'iFlytek (SparkDesk)',
121
+ baseUrl: 'https://spark-api-open.xf-yun.com/v1',
122
+ defaultModel: 'spark-pro',
123
+ description: 'iFlytek Spark cognitive large model',
124
+ models: ['spark-pro', 'spark-ultra', 'spark-max', 'spark-lite']
125
+ },
126
+ {
127
+ name: 'Custom',
128
+ baseUrl: '',
129
+ defaultModel: '',
130
+ description: 'Manually enter API configuration',
131
+ models: []
132
+ }
133
+ ];
134
+
135
+ export class AuthService {
136
+ private authConfig: XAgentAuthConfig;
137
+
138
+ constructor(authConfig: AuthConfig) {
139
+ this.authConfig = authConfig;
140
+ }
141
+
142
+ async authenticate(): Promise<boolean> {
143
+ switch (this.authConfig.type) {
144
+ case AuthType.OAUTH_XAGENT:
145
+ return await this.authenticateWithXAgent();
146
+ case AuthType.API_KEY:
147
+ return await this.authenticateWithApiKey();
148
+ case AuthType.OPENAI_COMPATIBLE:
149
+ return await this.authenticateWithOpenAICompatible();
150
+ default:
151
+ throw new Error(`Unknown auth type: ${this.authConfig.type}`);
152
+ }
153
+ }
154
+
155
+ private async authenticateWithXAgent(): Promise<boolean> {
156
+ logger.info('Authenticating with xAgent...', 'Please complete the authentication in your browser');
157
+
158
+ try {
159
+ // 1. 先启动 HTTP 服务器接收回调
160
+ const token = await this.retrieveXAgentToken();
161
+
162
+ // 2. 设置认证配置
163
+ this.authConfig.baseUrl = 'http://xagent-colife.net:3000/v1';
164
+ this.authConfig.xagentApiBaseUrl = 'http://xagent-colife.net:3000';
165
+ this.authConfig.apiKey = token;
166
+
167
+ logger.success('Successfully authenticated with xAgent!');
168
+ logger.info(`LLM API: http://xagent-colife.net:3000/v1`);
169
+ logger.info(`VLM API: http://xagent-colife.net:3000/v3`);
170
+ return true;
171
+ } catch (error: any) {
172
+ const errorMsg = error?.message || 'Unknown error';
173
+ if (errorMsg.includes('timeout') || errorMsg.includes('Timeout')) {
174
+ logger.error('Authentication timed out', 'The browser authentication took too long. Please try again.');
175
+ } else if (errorMsg.includes('No token') || errorMsg.includes('no token')) {
176
+ logger.error('Authentication was cancelled or failed', 'No token was received from the browser. Please try again.');
177
+ } else {
178
+ logger.error('xAgent authentication failed', errorMsg || 'Check your network connection and try again');
179
+ }
180
+ return false;
181
+ }
182
+ }
183
+
184
+ private async authenticateWithApiKey(): Promise<boolean> {
185
+ logger.info('Authenticating with API Key...');
186
+
187
+ const answers = await inquirer.prompt([
188
+ {
189
+ type: 'input',
190
+ name: 'apiKey',
191
+ message: 'Enter your xAgent API Key:',
192
+ validate: (input: string) => {
193
+ if (!input || input.trim().length === 0) {
194
+ return 'API Key cannot be empty';
195
+ }
196
+ return true;
197
+ }
198
+ }
199
+ ]);
200
+
201
+ const apiKey = answers.apiKey as string;
202
+
203
+ this.authConfig.apiKey = apiKey.trim();
204
+ this.authConfig.baseUrl = 'https://apis.xagent.cn/v1';
205
+
206
+ const isValid = await this.validateApiKey();
207
+ if (isValid) {
208
+ logger.success('API Key verified successfully!', 'You can now start using xAgent CLI');
209
+ return true;
210
+ } else {
211
+ logger.error('Invalid API Key, please try again.', 'Make sure you entered the correct API Key');
212
+ return false;
213
+ }
214
+ }
215
+
216
+ private async authenticateWithOpenAICompatible(): Promise<boolean> {
217
+ logger.info('Configuring third-party model API...\n');
218
+
219
+ const { provider } = await inquirer.prompt([
220
+ {
221
+ type: 'list',
222
+ name: 'provider',
223
+ message: 'Select third-party model provider:',
224
+ choices: THIRD_PARTY_PROVIDERS.map(p => ({
225
+ name: `${p.name} - ${p.description}`,
226
+ value: p
227
+ }))
228
+ }
229
+ ]);
230
+
231
+ const selectedProvider = provider as ThirdPartyProvider;
232
+
233
+ let baseUrl = selectedProvider.baseUrl;
234
+ let modelName = selectedProvider.defaultModel;
235
+
236
+ if (selectedProvider.name === 'Custom') {
237
+ const customAnswers = await inquirer.prompt([
238
+ {
239
+ type: 'input',
240
+ name: 'baseUrl',
241
+ message: 'Enter API Base URL:',
242
+ default: 'https://api.openai.com/v1',
243
+ validate: (input: string) => {
244
+ if (!input || input.trim().length === 0) {
245
+ return 'Base URL cannot be empty';
246
+ }
247
+ return true;
248
+ }
249
+ },
250
+ {
251
+ type: 'input',
252
+ name: 'modelName',
253
+ message: 'Enter model name:',
254
+ default: 'gpt-4',
255
+ validate: (input: string) => {
256
+ if (!input || input.trim().length === 0) {
257
+ return 'Model name cannot be empty';
258
+ }
259
+ return true;
260
+ }
261
+ }
262
+ ]);
263
+
264
+ baseUrl = (customAnswers.baseUrl as string).trim();
265
+ modelName = (customAnswers.modelName as string).trim();
266
+ } else {
267
+ logger.info(`\nSelected: ${selectedProvider.name}`);
268
+ logger.info(`API URL: ${baseUrl}`);
269
+
270
+ if (selectedProvider.models && selectedProvider.models.length > 0) {
271
+ logger.info(`Available models: ${selectedProvider.models.join(', ')}`);
272
+
273
+ const { selectedModel } = await inquirer.prompt([
274
+ {
275
+ type: 'list',
276
+ name: 'selectedModel',
277
+ message: 'Select model:',
278
+ choices: selectedProvider.models.map(model => ({
279
+ name: model === selectedProvider.defaultModel ? `${model} (default)` : model,
280
+ value: model
281
+ }))
282
+ }
283
+ ]);
284
+
285
+ modelName = selectedModel;
286
+ } else {
287
+ logger.info(`Default model: ${modelName}\n`);
288
+
289
+ const { confirmModel } = await inquirer.prompt([
290
+ {
291
+ type: 'input',
292
+ name: 'modelName',
293
+ message: `Enter model name (press Enter to use default value ${modelName}):`,
294
+ default: modelName,
295
+ validate: (input: string) => {
296
+ if (!input || input.trim().length === 0) {
297
+ return 'Model name cannot be empty';
298
+ }
299
+ return true;
300
+ }
301
+ }
302
+ ]);
303
+
304
+ modelName = (confirmModel as string).trim();
305
+ }
306
+ }
307
+
308
+ const { apiKey } = await inquirer.prompt([
309
+ {
310
+ type: 'password',
311
+ name: 'apiKey',
312
+ message: `Enter ${selectedProvider.name} API Key:`,
313
+ mask: '*',
314
+ validate: (input: string) => {
315
+ if (!input || input.trim().length === 0) {
316
+ return 'API Key cannot be empty';
317
+ }
318
+ return true;
319
+ }
320
+ }
321
+ ]);
322
+
323
+ this.authConfig.baseUrl = baseUrl;
324
+ this.authConfig.apiKey = (apiKey as string).trim();
325
+ this.authConfig.modelName = modelName;
326
+
327
+ const isValid = await this.validateApiKey();
328
+ if (isValid) {
329
+ logger.success(`${selectedProvider.name} configured successfully!`, `Model: ${modelName}, API: ${baseUrl}`);
330
+ logger.info(` Model: ${modelName}`);
331
+ logger.info(` API URL: ${baseUrl}`);
332
+ return true;
333
+ } else {
334
+ logger.error(`${selectedProvider.name} configuration verification failed, please check API Key and network connection.`, 'Verify your API Key and network connection');
335
+ return false;
336
+ }
337
+ }
338
+
339
+ private async validateApiKey(): Promise<boolean> {
340
+ try {
341
+ // Check if it's MiniMax-M2 (uses Anthropic format)
342
+ if ((this.authConfig.baseUrl?.includes('minimax.chat') ||
343
+ this.authConfig.baseUrl?.includes('minimaxi.com')) &&
344
+ this.authConfig.baseUrl?.includes('anthropic')) {
345
+ // MiniMax-M2 uses Anthropic format with x-api-key header
346
+ const response = await axios.post(
347
+ `${this.authConfig.baseUrl}/v1/messages`,
348
+ {
349
+ model: 'MiniMax-M2',
350
+ max_tokens: 1,
351
+ messages: [{ role: 'user', content: 'test' }]
352
+ },
353
+ {
354
+ headers: {
355
+ 'x-api-key': this.authConfig.apiKey,
356
+ 'anthropic-version': '2023-06-01',
357
+ 'Content-Type': 'application/json'
358
+ },
359
+ timeout: 10000
360
+ }
361
+ );
362
+ return response.status === 200;
363
+ }
364
+
365
+ // Standard OpenAI compatible API
366
+ const response = await axios.get(
367
+ `${this.authConfig.baseUrl}/models`,
368
+ {
369
+ headers: {
370
+ 'Authorization': `Bearer ${this.authConfig.apiKey}`,
371
+ 'Content-Type': 'application/json'
372
+ },
373
+ timeout: 10000
374
+ }
375
+ );
376
+ return response.status === 200;
377
+ } catch (error: any) {
378
+ // Provide user-friendly error messages without exposing stack traces
379
+ if (error.response) {
380
+ const status = error.response.status;
381
+
382
+ if (status === 401) {
383
+ logger.error('API Key verification failed: Invalid or expired API Key', `Verify your API Key is correct and has not expired`);
384
+ } else if (status === 403) {
385
+ logger.error('API Key verification failed: Access denied', `Check if your API Key has permission to access`);
386
+ } else if (status === 404) {
387
+ logger.error('API request failed: API endpoint not found', `Verify your API Base URL is correct`);
388
+ } else if (status === 429) {
389
+ logger.error('API rate limit exceeded', `Please wait before retrying`);
390
+ } else {
391
+ logger.error(`API Key verification failed (HTTP ${status})`, `Verify your API Key and network connection`);
392
+ }
393
+ } else if (error.code === 'ECONNREFUSED') {
394
+ logger.error('Failed to connect to API server', `Verify your API Base URL and network connection`);
395
+ } else if (error.code === 'ETIMEDOUT' || error.code === 'ECONNABORTED') {
396
+ logger.error('API request timed out', `Check your network connection and try again`);
397
+ } else {
398
+ logger.error('API Key verification failed', `Verify your API Key and network connection`);
399
+ }
400
+ return false;
401
+ }
402
+ }
403
+
404
+ private async retrieveXAgentToken(): Promise<string> {
405
+ // 使用前端登录页面(支持 callback 参数)
406
+ const authUrl = 'http://xagent-colife.net:3000/login';
407
+ const callbackUrl = 'http://localhost:8080/callback';
408
+
409
+ logger.debug(`[OAuth] Opening browser for authentication`);
410
+ logger.debug(`[OAuth] Login URL: ${authUrl}?callback=${encodeURIComponent(callbackUrl)}`);
411
+
412
+ // 启动 HTTP 服务器接收回调,然后打开浏览器
413
+ return new Promise((resolve, reject) => {
414
+ let timeoutId: NodeJS.Timeout | null = null;
415
+ let server: http.Server | null = null;
416
+
417
+ const cleanup = () => {
418
+ if (timeoutId) {
419
+ clearTimeout(timeoutId);
420
+ timeoutId = null;
421
+ }
422
+ };
423
+
424
+ const serverCallback = (req: any, res: any) => {
425
+ logger.debug(`[OAuth] Received request: ${req.url}`);
426
+
427
+ if (req.url.startsWith('/callback')) {
428
+ const url = new URL(req.url, `http://${req.headers.host}`);
429
+ const token = url.searchParams.get('token');
430
+ const refreshToken = url.searchParams.get('refreshToken');
431
+
432
+ logger.debug(`[OAuth] Callback received, token: ${token ? 'present' : 'missing'}`);
433
+ logger.debug(`[OAuth] Refresh token: ${refreshToken ? 'present' : 'missing'}`);
434
+
435
+ if (token) {
436
+ cleanup();
437
+
438
+ // Save refresh token if provided
439
+ if (refreshToken) {
440
+ this.authConfig.refreshToken = refreshToken;
441
+ logger.debug(`[OAuth] Refresh token saved`);
442
+ }
443
+
444
+ // Redirect directly to home page after successful authentication
445
+ res.writeHead(302, { 'Location': 'http://localhost:3000/' });
446
+ res.end();
447
+ if (server) {
448
+ server.close();
449
+ }
450
+ resolve(token);
451
+ } else {
452
+ cleanup();
453
+
454
+ res.writeHead(400, { 'Content-Type': 'text/html' });
455
+ res.end('<h1>Authentication Failed: No token</h1>');
456
+ if (server) {
457
+ server.close();
458
+ }
459
+ reject(new Error('No token received'));
460
+ }
461
+ }
462
+ };
463
+
464
+ server = http.createServer(serverCallback);
465
+
466
+ // 设置超时定时器(在 server 创建后)
467
+ timeoutId = setTimeout(() => {
468
+ logger.warn('[OAuth] Authentication timeout after 30 minutes');
469
+ if (server) {
470
+ server.close();
471
+ }
472
+ reject(new Error('Authentication timeout'));
473
+ }, 1800000); // 30 minutes
474
+
475
+ server.listen(8080, async () => {
476
+ logger.info('Waiting for authentication...', 'Opening browser for login...');
477
+ const fullUrl = `${authUrl}?callback=${encodeURIComponent(callbackUrl)}`;
478
+ logger.debug(`[OAuth] Full URL: ${fullUrl}`);
479
+ await open(fullUrl);
480
+ });
481
+ });
482
+ }
483
+
484
+ getAuthConfig(): AuthConfig {
485
+ return { ...this.authConfig };
486
+ }
487
+
488
+ updateAuthConfig(config: Partial<AuthConfig>): void {
489
+ this.authConfig = { ...this.authConfig, ...config };
490
+ }
491
+
492
+ /**
493
+ * Configure and validate VLM for GUI Agent
494
+ * Returns { model, baseUrl, apiKey } if successful, null if failed or cancelled
495
+ */
496
+ async configureAndValidateVLM(): Promise<{ model: string; baseUrl: string; apiKey: string } | null> {
497
+ logger.info('\n🔧 Configuring VLM for GUI Agent...', 'Vision-Language Model for browser/desktop automation\n');
498
+
499
+ const { provider } = await inquirer.prompt([
500
+ {
501
+ type: 'list',
502
+ name: 'provider',
503
+ message: 'Select VLM provider for GUI automation:',
504
+ choices: VLM_PROVIDERS.map(p => ({
505
+ name: `${p.name}`,
506
+ value: p
507
+ }))
508
+ }
509
+ ]);
510
+
511
+ const selectedProvider = provider as VLMProviderInfo;
512
+
513
+ logger.info(`\nSelected: ${selectedProvider.name}`);
514
+ logger.info(`API URL: ${selectedProvider.baseUrl}`);
515
+ logger.info(`Available models: ${selectedProvider.models.join(', ')}`);
516
+
517
+ const { selectedModel } = await inquirer.prompt([
518
+ {
519
+ type: 'list',
520
+ name: 'selectedModel',
521
+ message: 'Select VLM model:',
522
+ choices: selectedProvider.models.map(model => ({
523
+ name: model === selectedProvider.defaultModel ? `${model} (default)` : model,
524
+ value: model
525
+ }))
526
+ }
527
+ ]);
528
+
529
+ const { baseUrl } = await inquirer.prompt([
530
+ {
531
+ type: 'input',
532
+ name: 'baseUrl',
533
+ message: 'Enter VLM API Base URL:',
534
+ default: selectedProvider.baseUrl,
535
+ validate: (input: string) => {
536
+ if (!input || input.trim().length === 0) {
537
+ return 'Base URL cannot be empty';
538
+ }
539
+ return true;
540
+ }
541
+ }
542
+ ]);
543
+
544
+ const { apiKey } = await inquirer.prompt([
545
+ {
546
+ type: 'password',
547
+ name: 'apiKey',
548
+ message: `Enter ${selectedProvider.name} API Key:`,
549
+ mask: '*',
550
+ validate: (input: string) => {
551
+ if (!input || input.trim().length === 0) {
552
+ return 'API Key cannot be empty';
553
+ }
554
+ return true;
555
+ }
556
+ }
557
+ ]);
558
+
559
+ const vlmConfig = {
560
+ model: selectedModel as string,
561
+ baseUrl: (baseUrl as string).trim(),
562
+ apiKey: (apiKey as string).trim()
563
+ };
564
+
565
+ const isValid = await this.validateVLMApiKey(vlmConfig.baseUrl, vlmConfig.apiKey);
566
+ if (isValid) {
567
+ logger.success(`${selectedProvider.name} VLM configured successfully!`, `Model: ${vlmConfig.model}`);
568
+ return vlmConfig;
569
+ } else {
570
+ return null;
571
+ }
572
+ }
573
+
574
+ private async validateVLMApiKey(baseUrl: string, apiKey: string): Promise<boolean> {
575
+ try {
576
+ const headers: Record<string, string> = {
577
+ 'Content-Type': 'application/json'
578
+ };
579
+
580
+ // Anthropic uses x-api-key header
581
+ if (baseUrl.includes('anthropic.com')) {
582
+ headers['x-api-key'] = apiKey;
583
+ headers['anthropic-version'] = '2023-06-01';
584
+ } else {
585
+ headers['Authorization'] = `Bearer ${apiKey}`;
586
+ }
587
+
588
+ const response = await axios.get(
589
+ `${baseUrl}/models`,
590
+ { headers, timeout: 10000 }
591
+ );
592
+ return response.status === 200;
593
+ } catch (error: any) {
594
+ // Provide user-friendly error messages without exposing stack traces
595
+ // Distinguish between API Key errors and Base URL errors
596
+
597
+ // Check if we received an HTTP response from server
598
+ if (error.response) {
599
+ const status = error.response.status;
600
+
601
+ // Server responded but with error - API Key or permissions issue
602
+ if (status === 401 || status === 403) {
603
+ logger.error('VLM API authentication failed: Invalid API Key', `Verify your API Key is correct and has not expired`);
604
+ } else if (status === 429) {
605
+ logger.error('VLM API rate limit exceeded', `Please wait before retrying`);
606
+ } else if (status === 404) {
607
+ // 404 with valid response means base URL is valid but endpoint doesn't exist
608
+ logger.error('VLM API error: API endpoint not found (404)', `Verify your API Base URL is correct`);
609
+ } else {
610
+ logger.error(`VLM API request failed (HTTP ${status})`, `Verify your API Base URL and API Key`);
611
+ }
612
+ return false;
613
+ }
614
+
615
+ // No HTTP response - server not reached or URL invalid
616
+ // These indicate Base URL issues
617
+ const networkErrors = ['ECONNREFUSED', 'ETIMEDOUT', 'ECONNABORTED', 'ENOTFOUND', 'EAI_AGAIN', 'EPROTO', 'ERR_INVALID_URL'];
618
+
619
+ if (networkErrors.includes(error.code) ||
620
+ error.message?.includes('Invalid URL') ||
621
+ error.message?.includes('getaddrinfo') ||
622
+ error.message?.includes('socket hang up')) {
623
+ logger.error('VLM API connection failed: Unable to reach the server', `Verify your API Base URL is correct and accessible`);
624
+ return false;
625
+ }
626
+
627
+ // Fallback for unknown errors
628
+ logger.error('VLM API request failed', `Verify your API Base URL and API Key`);
629
+ return false;
630
+ }
631
+ }
632
+ }
633
+
634
+ export async function selectAuthType(): Promise<AuthType> {
635
+ const { authType } = await inquirer.prompt([
636
+ {
637
+ type: 'list',
638
+ name: 'authType',
639
+ message: 'Select authentication method:',
640
+ choices: [
641
+ { name: 'Log in with xAgent – Start your free trial', value: AuthType.OAUTH_XAGENT },
642
+ { name: 'Use third-party model APIs (e.g., Zhipu GLM-4.7, MiniMax)', value: AuthType.OPENAI_COMPATIBLE }
643
+ ]
644
+ }
645
+ ]);
646
+
647
+ return authType;
648
+ }