@xagent-ai/cli 1.2.2 → 1.3.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 (602) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -38
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
  3. package/.github/release.yml +76 -0
  4. package/.github/workflows/ci.yml +75 -0
  5. package/.github/workflows/release.yml +103 -0
  6. package/.gitmodules +3 -3
  7. package/README.md +326 -280
  8. package/README_CN.md +325 -279
  9. package/dist/agents.d.ts.map +1 -1
  10. package/dist/agents.js +7 -3
  11. package/dist/agents.js.map +1 -1
  12. package/dist/ai-client/factory.d.ts +40 -0
  13. package/dist/ai-client/factory.d.ts.map +1 -0
  14. package/dist/ai-client/factory.js +100 -0
  15. package/dist/ai-client/factory.js.map +1 -0
  16. package/dist/ai-client/index.d.ts +20 -0
  17. package/dist/ai-client/index.d.ts.map +1 -0
  18. package/dist/ai-client/index.js +49 -0
  19. package/dist/ai-client/index.js.map +1 -0
  20. package/dist/ai-client/providers/anthropic.d.ts +57 -0
  21. package/dist/ai-client/providers/anthropic.d.ts.map +1 -0
  22. package/dist/ai-client/providers/anthropic.js +406 -0
  23. package/dist/ai-client/providers/anthropic.js.map +1 -0
  24. package/dist/ai-client/providers/openai.d.ts +57 -0
  25. package/dist/ai-client/providers/openai.d.ts.map +1 -0
  26. package/dist/ai-client/providers/openai.js +290 -0
  27. package/dist/ai-client/providers/openai.js.map +1 -0
  28. package/dist/ai-client/providers/remote.d.ts +110 -0
  29. package/dist/ai-client/providers/remote.d.ts.map +1 -0
  30. package/dist/ai-client/providers/remote.js +352 -0
  31. package/dist/ai-client/providers/remote.js.map +1 -0
  32. package/dist/ai-client/registry.d.ts +51 -0
  33. package/dist/ai-client/registry.d.ts.map +1 -0
  34. package/dist/ai-client/registry.js +81 -0
  35. package/dist/ai-client/registry.js.map +1 -0
  36. package/dist/ai-client/types.d.ts +274 -0
  37. package/dist/ai-client/types.d.ts.map +1 -0
  38. package/dist/ai-client/types.js +90 -0
  39. package/dist/ai-client/types.js.map +1 -0
  40. package/dist/ai-client-factory.d.ts +62 -0
  41. package/dist/ai-client-factory.d.ts.map +1 -0
  42. package/dist/ai-client-factory.js +157 -0
  43. package/dist/ai-client-factory.js.map +1 -0
  44. package/dist/auth.d.ts +23 -1
  45. package/dist/auth.d.ts.map +1 -1
  46. package/dist/auth.js +164 -174
  47. package/dist/auth.js.map +1 -1
  48. package/dist/cancellation.d.ts +5 -4
  49. package/dist/cancellation.d.ts.map +1 -1
  50. package/dist/cancellation.js +53 -32
  51. package/dist/cancellation.js.map +1 -1
  52. package/dist/checkpoint.d.ts +2 -1
  53. package/dist/checkpoint.d.ts.map +1 -1
  54. package/dist/checkpoint.js +39 -6
  55. package/dist/checkpoint.js.map +1 -1
  56. package/dist/cli.js +742 -29
  57. package/dist/cli.js.map +1 -1
  58. package/dist/config.d.ts +10 -4
  59. package/dist/config.d.ts.map +1 -1
  60. package/dist/config.js +62 -25
  61. package/dist/config.js.map +1 -1
  62. package/dist/context-compressor.d.ts +82 -18
  63. package/dist/context-compressor.d.ts.map +1 -1
  64. package/dist/context-compressor.js +718 -154
  65. package/dist/context-compressor.js.map +1 -1
  66. package/dist/conversation.d.ts +1 -1
  67. package/dist/conversation.d.ts.map +1 -1
  68. package/dist/conversation.js +8 -7
  69. package/dist/conversation.js.map +1 -1
  70. package/dist/gui-subagent/action-parser/actionParser.d.ts.map +1 -1
  71. package/dist/gui-subagent/action-parser/actionParser.js +6 -4
  72. package/dist/gui-subagent/action-parser/actionParser.js.map +1 -1
  73. package/dist/gui-subagent/agent/gui-agent.d.ts +39 -2
  74. package/dist/gui-subagent/agent/gui-agent.d.ts.map +1 -1
  75. package/dist/gui-subagent/agent/gui-agent.js +189 -74
  76. package/dist/gui-subagent/agent/gui-agent.js.map +1 -1
  77. package/dist/gui-subagent/index.d.ts +23 -1
  78. package/dist/gui-subagent/index.d.ts.map +1 -1
  79. package/dist/gui-subagent/index.js +6 -0
  80. package/dist/gui-subagent/index.js.map +1 -1
  81. package/dist/gui-subagent/operator/base-operator.d.ts.map +1 -1
  82. package/dist/gui-subagent/operator/base-operator.js +0 -1
  83. package/dist/gui-subagent/operator/base-operator.js.map +1 -1
  84. package/dist/gui-subagent/operator/computer-operator.d.ts.map +1 -1
  85. package/dist/gui-subagent/operator/computer-operator.js +31 -8
  86. package/dist/gui-subagent/operator/computer-operator.js.map +1 -1
  87. package/dist/gui-subagent/types/actions.d.ts +1 -1
  88. package/dist/gui-subagent/types/actions.d.ts.map +1 -1
  89. package/dist/gui-subagent/types/actions.js +0 -1
  90. package/dist/gui-subagent/types/actions.js.map +1 -1
  91. package/dist/gui-subagent/types/operator.d.ts +1 -1
  92. package/dist/gui-subagent/types/operator.d.ts.map +1 -1
  93. package/dist/index.d.ts +1 -2
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +1 -2
  96. package/dist/index.js.map +1 -1
  97. package/dist/input-processor.d.ts.map +1 -1
  98. package/dist/input-processor.js +8 -5
  99. package/dist/input-processor.js.map +1 -1
  100. package/dist/logger.d.ts.map +1 -1
  101. package/dist/logger.js +1 -1
  102. package/dist/logger.js.map +1 -1
  103. package/dist/mcp.d.ts +7 -1
  104. package/dist/mcp.d.ts.map +1 -1
  105. package/dist/mcp.js +157 -49
  106. package/dist/mcp.js.map +1 -1
  107. package/dist/memory.d.ts.map +1 -1
  108. package/dist/memory.js +3 -3
  109. package/dist/memory.js.map +1 -1
  110. package/dist/output-util.d.ts +27 -0
  111. package/dist/output-util.d.ts.map +1 -0
  112. package/dist/output-util.js +74 -0
  113. package/dist/output-util.js.map +1 -0
  114. package/dist/retry.js +1 -1
  115. package/dist/retry.js.map +1 -1
  116. package/dist/ripgrep.d.ts +29 -0
  117. package/dist/ripgrep.d.ts.map +1 -0
  118. package/dist/ripgrep.js +294 -0
  119. package/dist/ripgrep.js.map +1 -0
  120. package/dist/sdk-output-adapter.d.ts +34 -1
  121. package/dist/sdk-output-adapter.d.ts.map +1 -1
  122. package/dist/sdk-output-adapter.js +67 -2
  123. package/dist/sdk-output-adapter.js.map +1 -1
  124. package/dist/sdk-session.d.ts.map +1 -1
  125. package/dist/sdk-session.js +2 -0
  126. package/dist/sdk-session.js.map +1 -1
  127. package/dist/session-manager.js +3 -3
  128. package/dist/session-manager.js.map +1 -1
  129. package/dist/session.d.ts +116 -6
  130. package/dist/session.d.ts.map +1 -1
  131. package/dist/session.js +1416 -448
  132. package/dist/session.js.map +1 -1
  133. package/dist/shell.d.ts +33 -0
  134. package/dist/shell.d.ts.map +1 -0
  135. package/dist/shell.js +126 -0
  136. package/dist/shell.js.map +1 -0
  137. package/dist/skill-installer.d.ts +38 -0
  138. package/dist/skill-installer.d.ts.map +1 -0
  139. package/dist/skill-installer.js +447 -0
  140. package/dist/skill-installer.js.map +1 -0
  141. package/dist/skill-invoker.d.ts +8 -2
  142. package/dist/skill-invoker.d.ts.map +1 -1
  143. package/dist/skill-invoker.js +36 -15
  144. package/dist/skill-invoker.js.map +1 -1
  145. package/dist/skill-loader.d.ts +8 -3
  146. package/dist/skill-loader.d.ts.map +1 -1
  147. package/dist/skill-loader.js +51 -48
  148. package/dist/skill-loader.js.map +1 -1
  149. package/dist/skill-manager.d.ts +85 -0
  150. package/dist/skill-manager.d.ts.map +1 -0
  151. package/dist/skill-manager.js +341 -0
  152. package/dist/skill-manager.js.map +1 -0
  153. package/dist/slash-commands.d.ts +39 -2
  154. package/dist/slash-commands.d.ts.map +1 -1
  155. package/dist/slash-commands.js +934 -305
  156. package/dist/slash-commands.js.map +1 -1
  157. package/dist/smart-approval.d.ts +20 -1
  158. package/dist/smart-approval.d.ts.map +1 -1
  159. package/dist/smart-approval.js +125 -56
  160. package/dist/smart-approval.js.map +1 -1
  161. package/dist/system-prompt-generator.d.ts +6 -0
  162. package/dist/system-prompt-generator.d.ts.map +1 -1
  163. package/dist/system-prompt-generator.js +86 -36
  164. package/dist/system-prompt-generator.js.map +1 -1
  165. package/dist/terminal.d.ts +28 -0
  166. package/dist/terminal.d.ts.map +1 -0
  167. package/dist/terminal.js +82 -0
  168. package/dist/terminal.js.map +1 -0
  169. package/dist/theme.d.ts.map +1 -1
  170. package/dist/theme.js +8 -7
  171. package/dist/theme.js.map +1 -1
  172. package/dist/tools.d.ts +38 -7
  173. package/dist/tools.d.ts.map +1 -1
  174. package/dist/tools.js +1249 -617
  175. package/dist/tools.js.map +1 -1
  176. package/dist/truncate.d.ts +55 -0
  177. package/dist/truncate.d.ts.map +1 -0
  178. package/dist/truncate.js +130 -0
  179. package/dist/truncate.js.map +1 -0
  180. package/dist/types.d.ts +84 -9
  181. package/dist/types.d.ts.map +1 -1
  182. package/dist/types.js +49 -0
  183. package/dist/types.js.map +1 -1
  184. package/dist/update.d.ts.map +1 -1
  185. package/dist/update.js +28 -36
  186. package/dist/update.js.map +1 -1
  187. package/dist/workflow.d.ts +5 -1
  188. package/dist/workflow.d.ts.map +1 -1
  189. package/dist/workflow.js +61 -49
  190. package/dist/workflow.js.map +1 -1
  191. package/docs/architecture/mcp-integration-guide.md +304 -194
  192. package/docs/architecture/overview.md +169 -169
  193. package/docs/architecture/tool-system-design.md +134 -134
  194. package/docs/cli/commands.md +349 -238
  195. package/docs/smart-mode.md +281 -281
  196. package/docs/third-party-models.md +440 -439
  197. package/find-skills/SKILL.md +133 -0
  198. package/package.json +91 -90
  199. package/scripts/install-ripgrep.js +241 -0
  200. package/src/agents.ts +7 -3
  201. package/src/ai-client/factory.ts +116 -0
  202. package/src/ai-client/index.ts +61 -0
  203. package/src/ai-client/providers/anthropic.ts +475 -0
  204. package/src/ai-client/providers/openai.ts +348 -0
  205. package/src/ai-client/providers/remote.ts +439 -0
  206. package/src/ai-client/registry.ts +97 -0
  207. package/src/ai-client/types.ts +364 -0
  208. package/src/ai-client-factory.ts +204 -0
  209. package/src/auth.ts +661 -614
  210. package/src/cancellation.ts +202 -176
  211. package/src/checkpoint.ts +255 -219
  212. package/src/cli.ts +1523 -743
  213. package/src/config.ts +341 -297
  214. package/src/context-compressor.ts +987 -290
  215. package/src/conversation.ts +290 -288
  216. package/src/gui-subagent/action-parser/actionParser.ts +318 -315
  217. package/src/gui-subagent/action-parser/constants.ts +14 -14
  218. package/src/gui-subagent/action-parser/index.ts +8 -8
  219. package/src/gui-subagent/action-parser/types.ts +31 -31
  220. package/src/gui-subagent/agent/gui-agent.ts +1234 -1089
  221. package/src/gui-subagent/agent/index.ts +5 -5
  222. package/src/gui-subagent/index.ts +185 -163
  223. package/src/gui-subagent/operator/base-operator.ts +244 -245
  224. package/src/gui-subagent/operator/computer-operator.ts +541 -520
  225. package/src/gui-subagent/operator/index.ts +6 -6
  226. package/src/gui-subagent/types/actions.ts +260 -262
  227. package/src/gui-subagent/types/index.ts +6 -6
  228. package/src/gui-subagent/types/operator.ts +106 -106
  229. package/src/gui-subagent/utils.ts +51 -51
  230. package/src/index.ts +17 -18
  231. package/src/input-processor.ts +8 -5
  232. package/src/logger.ts +436 -438
  233. package/src/mcp.ts +793 -682
  234. package/src/memory.ts +343 -344
  235. package/src/output-util.ts +80 -0
  236. package/src/retry.ts +1 -1
  237. package/src/ripgrep.ts +370 -0
  238. package/src/sdk-output-adapter.ts +842 -0
  239. package/src/sdk-session.ts +62 -0
  240. package/src/session-manager.ts +308 -308
  241. package/src/session.ts +1775 -573
  242. package/src/shell.ts +134 -0
  243. package/src/skill-installer.ts +518 -0
  244. package/src/skill-invoker.ts +959 -935
  245. package/src/skill-loader.ts +501 -496
  246. package/src/skill-manager.ts +385 -0
  247. package/src/slash-commands.ts +2189 -1389
  248. package/src/smart-approval.ts +193 -74
  249. package/src/system-prompt-generator.ts +91 -36
  250. package/src/terminal.ts +96 -0
  251. package/src/theme.ts +739 -738
  252. package/src/tools.ts +1790 -931
  253. package/src/truncate.ts +173 -0
  254. package/src/types.ts +337 -198
  255. package/src/update.ts +33 -40
  256. package/src/workflow.ts +521 -508
  257. package/test/cli-launch.test.ts +279 -0
  258. package/tsconfig.json +22 -22
  259. package/vitest.config.ts +21 -19
  260. package/dist/ai-client.d.ts +0 -86
  261. package/dist/ai-client.d.ts.map +0 -1
  262. package/dist/ai-client.js +0 -1372
  263. package/dist/ai-client.js.map +0 -1
  264. package/dist/gui-subagent/operator/browser-operator.d.ts +0 -36
  265. package/dist/gui-subagent/operator/browser-operator.d.ts.map +0 -1
  266. package/dist/gui-subagent/operator/browser-operator.js +0 -306
  267. package/dist/gui-subagent/operator/browser-operator.js.map +0 -1
  268. package/dist/gui-subagent/operator/desktop-operator.d.ts +0 -55
  269. package/dist/gui-subagent/operator/desktop-operator.d.ts.map +0 -1
  270. package/dist/gui-subagent/operator/desktop-operator.js +0 -527
  271. package/dist/gui-subagent/operator/desktop-operator.js.map +0 -1
  272. package/dist/hook.d.ts +0 -73
  273. package/dist/hook.d.ts.map +0 -1
  274. package/dist/hook.js +0 -156
  275. package/dist/hook.js.map +0 -1
  276. package/dist/input-history.d.ts +0 -24
  277. package/dist/input-history.d.ts.map +0 -1
  278. package/dist/input-history.js +0 -94
  279. package/dist/input-history.js.map +0 -1
  280. package/dist/keyboard-manager.d.ts +0 -151
  281. package/dist/keyboard-manager.d.ts.map +0 -1
  282. package/dist/keyboard-manager.js +0 -396
  283. package/dist/keyboard-manager.js.map +0 -1
  284. package/dist/print-system-prompt.d.ts +0 -2
  285. package/dist/print-system-prompt.d.ts.map +0 -1
  286. package/dist/print-system-prompt.js +0 -40
  287. package/dist/print-system-prompt.js.map +0 -1
  288. package/dist/remote-ai-client.d.ts +0 -104
  289. package/dist/remote-ai-client.d.ts.map +0 -1
  290. package/dist/remote-ai-client.js +0 -552
  291. package/dist/remote-ai-client.js.map +0 -1
  292. package/dist/sdk-session-v2.d.ts +0 -13
  293. package/dist/sdk-session-v2.d.ts.map +0 -1
  294. package/dist/sdk-session-v2.js +0 -46
  295. package/dist/sdk-session-v2.js.map +0 -1
  296. package/dist/test-boundary-conditions.d.ts.map +0 -1
  297. package/dist/test-boundary-conditions.js.map +0 -1
  298. package/dist/test-cancellation-fix.d.ts.map +0 -1
  299. package/dist/test-cancellation-fix.js.map +0 -1
  300. package/dist/test-input-history.d.ts.map +0 -1
  301. package/dist/test-input-history.js.map +0 -1
  302. package/dist/test-interaction-flow.d.ts.map +0 -1
  303. package/dist/test-interaction-flow.js.map +0 -1
  304. package/dist/test-quick.d.ts.map +0 -1
  305. package/dist/test-quick.js.map +0 -1
  306. package/dist/test-user-interaction.d.ts.map +0 -1
  307. package/dist/test-user-interaction.js.map +0 -1
  308. package/dist/tools/edit-diff.d.ts +0 -32
  309. package/dist/tools/edit-diff.d.ts.map +0 -1
  310. package/dist/tools/edit-diff.js +0 -185
  311. package/dist/tools/edit-diff.js.map +0 -1
  312. package/dist/tools/edit.d.ts +0 -11
  313. package/dist/tools/edit.d.ts.map +0 -1
  314. package/dist/tools/edit.js +0 -129
  315. package/dist/tools/edit.js.map +0 -1
  316. package/dist/unified-session.d.ts +0 -42
  317. package/dist/unified-session.d.ts.map +0 -1
  318. package/dist/unified-session.js +0 -271
  319. package/dist/unified-session.js.map +0 -1
  320. package/skills/.claude-plugin/marketplace.json +0 -45
  321. package/skills/README.md +0 -94
  322. package/skills/THIRD_PARTY_NOTICES.md +0 -405
  323. package/skills/skills/algorithmic-art/LICENSE.txt +0 -202
  324. package/skills/skills/algorithmic-art/SKILL.md +0 -405
  325. package/skills/skills/algorithmic-art/templates/generator_template.js +0 -223
  326. package/skills/skills/algorithmic-art/templates/viewer.html +0 -599
  327. package/skills/skills/brand-guidelines/LICENSE.txt +0 -202
  328. package/skills/skills/brand-guidelines/SKILL.md +0 -73
  329. package/skills/skills/canvas-design/LICENSE.txt +0 -202
  330. package/skills/skills/canvas-design/SKILL.md +0 -130
  331. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  332. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  333. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  334. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  335. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  336. package/skills/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  337. package/skills/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  338. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  339. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  340. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  341. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  342. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  343. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  344. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  345. package/skills/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  346. package/skills/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  347. package/skills/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  348. package/skills/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  349. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  350. package/skills/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  351. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  352. package/skills/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  353. package/skills/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  354. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  355. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  356. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  357. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  358. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  359. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  360. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  361. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  362. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  363. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  364. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  365. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  366. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  367. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  368. package/skills/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  369. package/skills/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  370. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  371. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  372. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  373. package/skills/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  374. package/skills/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  375. package/skills/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  376. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  377. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  378. package/skills/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  379. package/skills/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  380. package/skills/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  381. package/skills/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  382. package/skills/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  383. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  384. package/skills/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  385. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  386. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  387. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  388. package/skills/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  389. package/skills/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  390. package/skills/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  391. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  392. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  393. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  394. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  395. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  396. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  397. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  398. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  399. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  400. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  401. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  402. package/skills/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  403. package/skills/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  404. package/skills/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  405. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  406. package/skills/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  407. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  408. package/skills/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  409. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  410. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  411. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  412. package/skills/skills/doc-coauthoring/SKILL.md +0 -375
  413. package/skills/skills/docx/LICENSE.txt +0 -30
  414. package/skills/skills/docx/SKILL.md +0 -197
  415. package/skills/skills/docx/docx-js.md +0 -350
  416. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  417. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  418. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  419. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  420. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  421. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  422. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  423. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  424. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  425. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  426. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  427. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  428. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  429. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  430. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  431. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  432. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  433. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  434. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  435. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  436. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  437. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  438. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  439. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  440. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  441. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  442. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  443. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  444. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  445. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  446. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  447. package/skills/skills/docx/ooxml/schemas/mce/mc.xsd +0 -75
  448. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  449. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  450. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  451. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  452. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  453. package/skills/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  454. package/skills/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  455. package/skills/skills/docx/ooxml/scripts/pack.py +0 -159
  456. package/skills/skills/docx/ooxml/scripts/unpack.py +0 -29
  457. package/skills/skills/docx/ooxml/scripts/validate.py +0 -69
  458. package/skills/skills/docx/ooxml/scripts/validation/__init__.py +0 -15
  459. package/skills/skills/docx/ooxml/scripts/validation/base.py +0 -951
  460. package/skills/skills/docx/ooxml/scripts/validation/docx.py +0 -274
  461. package/skills/skills/docx/ooxml/scripts/validation/pptx.py +0 -315
  462. package/skills/skills/docx/ooxml/scripts/validation/redlining.py +0 -279
  463. package/skills/skills/docx/ooxml.md +0 -610
  464. package/skills/skills/docx/scripts/__init__.py +0 -1
  465. package/skills/skills/docx/scripts/document.py +0 -1276
  466. package/skills/skills/docx/scripts/templates/comments.xml +0 -3
  467. package/skills/skills/docx/scripts/templates/commentsExtended.xml +0 -3
  468. package/skills/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
  469. package/skills/skills/docx/scripts/templates/commentsIds.xml +0 -3
  470. package/skills/skills/docx/scripts/templates/people.xml +0 -3
  471. package/skills/skills/docx/scripts/utilities.py +0 -374
  472. package/skills/skills/frontend-design/LICENSE.txt +0 -177
  473. package/skills/skills/frontend-design/SKILL.md +0 -42
  474. package/skills/skills/internal-comms/LICENSE.txt +0 -202
  475. package/skills/skills/internal-comms/SKILL.md +0 -32
  476. package/skills/skills/internal-comms/examples/3p-updates.md +0 -47
  477. package/skills/skills/internal-comms/examples/company-newsletter.md +0 -65
  478. package/skills/skills/internal-comms/examples/faq-answers.md +0 -30
  479. package/skills/skills/internal-comms/examples/general-comms.md +0 -16
  480. package/skills/skills/mcp-builder/LICENSE.txt +0 -202
  481. package/skills/skills/mcp-builder/SKILL.md +0 -236
  482. package/skills/skills/mcp-builder/reference/evaluation.md +0 -602
  483. package/skills/skills/mcp-builder/reference/mcp_best_practices.md +0 -249
  484. package/skills/skills/mcp-builder/reference/node_mcp_server.md +0 -970
  485. package/skills/skills/mcp-builder/reference/python_mcp_server.md +0 -719
  486. package/skills/skills/mcp-builder/scripts/connections.py +0 -151
  487. package/skills/skills/mcp-builder/scripts/evaluation.py +0 -373
  488. package/skills/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  489. package/skills/skills/mcp-builder/scripts/requirements.txt +0 -2
  490. package/skills/skills/pdf/LICENSE.txt +0 -30
  491. package/skills/skills/pdf/SKILL.md +0 -294
  492. package/skills/skills/pdf/forms.md +0 -205
  493. package/skills/skills/pdf/reference.md +0 -612
  494. package/skills/skills/pdf/scripts/check_bounding_boxes.py +0 -70
  495. package/skills/skills/pdf/scripts/check_bounding_boxes_test.py +0 -226
  496. package/skills/skills/pdf/scripts/check_fillable_fields.py +0 -12
  497. package/skills/skills/pdf/scripts/convert_pdf_to_images.py +0 -35
  498. package/skills/skills/pdf/scripts/create_validation_image.py +0 -41
  499. package/skills/skills/pdf/scripts/extract_form_field_info.py +0 -152
  500. package/skills/skills/pdf/scripts/fill_fillable_fields.py +0 -114
  501. package/skills/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -108
  502. package/skills/skills/pptx/LICENSE.txt +0 -30
  503. package/skills/skills/pptx/SKILL.md +0 -484
  504. package/skills/skills/pptx/html2pptx.md +0 -625
  505. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  506. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  507. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  508. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  509. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  510. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  511. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  512. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  513. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  514. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  515. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  516. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  517. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  518. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  519. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  520. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  521. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  522. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  523. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  524. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  525. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  526. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  527. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  528. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  529. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  530. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  531. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  532. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  533. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  534. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  535. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  536. package/skills/skills/pptx/ooxml/schemas/mce/mc.xsd +0 -75
  537. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  538. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  539. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  540. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  541. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  542. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  543. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  544. package/skills/skills/pptx/ooxml/scripts/pack.py +0 -159
  545. package/skills/skills/pptx/ooxml/scripts/unpack.py +0 -29
  546. package/skills/skills/pptx/ooxml/scripts/validate.py +0 -69
  547. package/skills/skills/pptx/ooxml/scripts/validation/__init__.py +0 -15
  548. package/skills/skills/pptx/ooxml/scripts/validation/base.py +0 -951
  549. package/skills/skills/pptx/ooxml/scripts/validation/docx.py +0 -274
  550. package/skills/skills/pptx/ooxml/scripts/validation/pptx.py +0 -315
  551. package/skills/skills/pptx/ooxml/scripts/validation/redlining.py +0 -279
  552. package/skills/skills/pptx/ooxml.md +0 -427
  553. package/skills/skills/pptx/scripts/html2pptx.js +0 -979
  554. package/skills/skills/pptx/scripts/inventory.py +0 -1020
  555. package/skills/skills/pptx/scripts/rearrange.py +0 -231
  556. package/skills/skills/pptx/scripts/replace.py +0 -385
  557. package/skills/skills/pptx/scripts/thumbnail.py +0 -450
  558. package/skills/skills/skill-creator/LICENSE.txt +0 -202
  559. package/skills/skills/skill-creator/SKILL.md +0 -356
  560. package/skills/skills/skill-creator/references/output-patterns.md +0 -82
  561. package/skills/skills/skill-creator/references/workflows.md +0 -28
  562. package/skills/skills/skill-creator/scripts/init_skill.py +0 -303
  563. package/skills/skills/skill-creator/scripts/package_skill.py +0 -110
  564. package/skills/skills/skill-creator/scripts/quick_validate.py +0 -95
  565. package/skills/skills/slack-gif-creator/LICENSE.txt +0 -202
  566. package/skills/skills/slack-gif-creator/SKILL.md +0 -254
  567. package/skills/skills/slack-gif-creator/core/easing.py +0 -234
  568. package/skills/skills/slack-gif-creator/core/frame_composer.py +0 -176
  569. package/skills/skills/slack-gif-creator/core/gif_builder.py +0 -269
  570. package/skills/skills/slack-gif-creator/core/validators.py +0 -136
  571. package/skills/skills/slack-gif-creator/requirements.txt +0 -4
  572. package/skills/skills/theme-factory/LICENSE.txt +0 -202
  573. package/skills/skills/theme-factory/SKILL.md +0 -59
  574. package/skills/skills/theme-factory/theme-showcase.pdf +0 -0
  575. package/skills/skills/theme-factory/themes/arctic-frost.md +0 -19
  576. package/skills/skills/theme-factory/themes/botanical-garden.md +0 -19
  577. package/skills/skills/theme-factory/themes/desert-rose.md +0 -19
  578. package/skills/skills/theme-factory/themes/forest-canopy.md +0 -19
  579. package/skills/skills/theme-factory/themes/golden-hour.md +0 -19
  580. package/skills/skills/theme-factory/themes/midnight-galaxy.md +0 -19
  581. package/skills/skills/theme-factory/themes/modern-minimalist.md +0 -19
  582. package/skills/skills/theme-factory/themes/ocean-depths.md +0 -19
  583. package/skills/skills/theme-factory/themes/sunset-boulevard.md +0 -19
  584. package/skills/skills/theme-factory/themes/tech-innovation.md +0 -19
  585. package/skills/skills/web-artifacts-builder/LICENSE.txt +0 -202
  586. package/skills/skills/web-artifacts-builder/SKILL.md +0 -74
  587. package/skills/skills/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
  588. package/skills/skills/web-artifacts-builder/scripts/init-artifact.sh +0 -322
  589. package/skills/skills/webapp-testing/LICENSE.txt +0 -202
  590. package/skills/skills/webapp-testing/SKILL.md +0 -96
  591. package/skills/skills/webapp-testing/examples/console_logging.py +0 -35
  592. package/skills/skills/webapp-testing/examples/element_discovery.py +0 -40
  593. package/skills/skills/webapp-testing/examples/static_html_automation.py +0 -33
  594. package/skills/skills/webapp-testing/scripts/with_server.py +0 -106
  595. package/skills/skills/xlsx/LICENSE.txt +0 -30
  596. package/skills/skills/xlsx/SKILL.md +0 -289
  597. package/skills/skills/xlsx/recalc.py +0 -178
  598. package/skills/spec/agent-skills-spec.md +0 -3
  599. package/skills/template/SKILL.md +0 -6
  600. package/src/ai-client.ts +0 -1560
  601. package/src/remote-ai-client.ts +0 -664
  602. /package/{.eslintrc.js → .eslintrc.cjs} +0 -0
@@ -1,664 +0,0 @@
1
- import { EventEmitter } from 'events';
2
- import https from 'https';
3
- import axios from 'axios';
4
- import { ChatMessage, SessionOutput, ToolCall } from './types.js';
5
- import { ChatCompletionResponse, ChatCompletionOptions, Message, renderMarkdown, displayMessages } from './ai-client.js';
6
- import { getLogger } from './logger.js';
7
- import { withRetry, RetryConfig } from './retry.js';
8
-
9
- const logger = getLogger();
10
-
11
- /**
12
- * Token invalid error - thrown when the authentication token is no longer valid
13
- */
14
- export class TokenInvalidError extends Error {
15
- constructor(message: string = 'Authentication token is invalid or expired') {
16
- super(message);
17
- this.name = 'TokenInvalidError';
18
- }
19
- }
20
-
21
- export interface RemoteChatOptions {
22
- model?: string;
23
- taskId?: string;
24
- status?: 'begin' | 'continue' | 'end' | 'cancel';
25
- conversationId?: string;
26
- context?: {
27
- cwd?: string;
28
- workspace?: string;
29
- recentFiles?: string[];
30
- };
31
- toolResults?: Array<{
32
- toolCallId: string;
33
- toolName: string;
34
- result: any;
35
- }>;
36
- tools?: Array<{
37
- type: 'function';
38
- function: {
39
- name: string;
40
- description: string;
41
- parameters: {
42
- type: 'object';
43
- properties: Record<string, any>;
44
- required?: string[];
45
- };
46
- };
47
- }>;
48
- signal?: AbortSignal;
49
- }
50
-
51
- export interface RemoteChatResponse {
52
- content: string;
53
- reasoningContent?: string;
54
- toolCalls?: ToolCall[];
55
- conversationId: string;
56
- }
57
-
58
- export interface RemoteVLMResponse {
59
- content: string;
60
- }
61
-
62
- /**
63
- * Remote AI Client - communicates with xagent-web service
64
- */
65
- export class RemoteAIClient extends EventEmitter {
66
- private authToken: string;
67
- private webBaseUrl: string;
68
- private agentApi: string;
69
- private vlmApi: string;
70
- private showAIDebugInfo: boolean;
71
-
72
- constructor(authToken: string, webBaseUrl: string, showAIDebugInfo: boolean = false) {
73
- super();
74
- logger.debug(`[RemoteAIClient] Constructor called, authToken: ${authToken ? authToken.substring(0, 30) + '...' : 'empty'}`);
75
- this.authToken = authToken;
76
- this.webBaseUrl = webBaseUrl.replace(/\/$/, ''); // Remove trailing slash
77
- this.agentApi = `${this.webBaseUrl}/api/agent`;
78
- this.vlmApi = `${this.webBaseUrl}/api/agent/vlm`;
79
- this.showAIDebugInfo = showAIDebugInfo;
80
-
81
- if (this.showAIDebugInfo) {
82
- logger.debug('[RemoteAIClient] Initialization complete');
83
- logger.debug(`[RemoteAIClient] Web Base URL: ${this.webBaseUrl}`);
84
- logger.debug(`[RemoteAIClient] Agent API: ${this.agentApi}`);
85
- logger.debug(`[RemoteAIClient] VLM API: ${this.vlmApi}`);
86
- }
87
- }
88
-
89
- /**
90
- * Non-streaming chat - send messages and receive full response
91
- */
92
- async chat(
93
- messages: ChatMessage[],
94
- remoteChatOptions: RemoteChatOptions = {}
95
- ): Promise<SessionOutput> {
96
- // Pass complete messages array to backend, backend forwards directly to LLM
97
- const requestBody = {
98
- messages: messages, // Pass complete message history
99
- taskId: remoteChatOptions.taskId,
100
- status: remoteChatOptions.status || 'begin',
101
- conversationId: remoteChatOptions.conversationId,
102
- context: remoteChatOptions.context,
103
- options: {
104
- model: remoteChatOptions.model
105
- },
106
- toolResults: remoteChatOptions.toolResults,
107
- tools: remoteChatOptions.tools
108
- };
109
-
110
- const url = `${this.agentApi}/chat`;
111
- if (this.showAIDebugInfo) {
112
- logger.debug(`[RemoteAIClient] Sending request to: ${url}`);
113
- logger.debug(`[RemoteAIClient] Token prefix: ${this.authToken.substring(0, 20)}...`);
114
- logger.debug(`[RemoteAIClient] Message count: ${messages.length}`);
115
- if (remoteChatOptions.tools) {
116
- logger.debug(`[RemoteAIClient] Tool count: ${remoteChatOptions.tools.length}`);
117
- }
118
- }
119
-
120
- const httpsAgent = new https.Agent({ rejectUnauthorized: false });
121
-
122
- try {
123
- const response = await axios.post(url, requestBody, {
124
- headers: {
125
- 'Content-Type': 'application/json',
126
- 'Authorization': `Bearer ${this.authToken}`
127
- },
128
- httpsAgent,
129
- timeout: 300000
130
- });
131
-
132
- // Check for 401 and throw TokenInvalidError
133
- if (response.status === 401) {
134
- throw new TokenInvalidError('Authentication token is invalid or expired. Please log in again.');
135
- }
136
-
137
- const data = response.data;
138
- logger.debug('[RemoteAIClient] response received, status:', String(response.status));
139
- if (this.showAIDebugInfo) {
140
- console.log('[RemoteAIClient] Received response, content length:', data.content?.length || 0);
141
- console.log('[RemoteAIClient] toolCalls count:', data.toolCalls?.length || 0);
142
- }
143
-
144
- return {
145
- role: 'assistant',
146
- content: data.content || '',
147
- reasoningContent: data.reasoningContent || '',
148
- toolCalls: data.toolCalls,
149
- timestamp: Date.now()
150
- };
151
-
152
- } catch (error: any) {
153
- if (this.showAIDebugInfo) {
154
- console.log('[RemoteAIClient] Request exception:', error.message);
155
- }
156
-
157
- // Provide user-friendly error messages based on status code
158
- if (error.response) {
159
- const status = error.response.status;
160
- let errorMessage: string;
161
- let userFriendlyMessage: string;
162
-
163
- switch (status) {
164
- case 400:
165
- errorMessage = 'Bad Request';
166
- userFriendlyMessage = 'Invalid request parameters. Please check your input and try again.';
167
- break;
168
- case 401:
169
- throw new TokenInvalidError('Authentication token is invalid or expired. Please log in again.');
170
- case 413:
171
- errorMessage = 'Payload Too Large';
172
- userFriendlyMessage = 'Request data is too large. Please reduce input content or screenshot size and try again.';
173
- break;
174
- case 429:
175
- errorMessage = 'Too Many Requests';
176
- userFriendlyMessage = 'XAgent service rate limit exceeded. Please wait a moment and try again.';
177
- break;
178
- case 500:
179
- // Try to parse server's detailed error message
180
- try {
181
- const errorData = error.response.data || null;
182
- errorMessage = errorData?.error || 'Internal Server Error';
183
- if (errorData?.error && errorData?.errorType === 'AI_SERVICE_ERROR') {
184
- userFriendlyMessage = `${errorData.error}\n\nSuggestion: ${errorData.suggestion}`;
185
- } else {
186
- userFriendlyMessage = errorData?.error || 'Server error. Please try again later. If the problem persists, contact the administrator.';
187
- }
188
- } catch {
189
- errorMessage = 'Internal Server Error';
190
- userFriendlyMessage = 'Server error. Please try again later. If the problem persists, contact the administrator.';
191
- }
192
- break;
193
- case 502:
194
- errorMessage = 'Bad Gateway';
195
- userFriendlyMessage = 'Gateway error. Service temporarily unavailable. Please try again later.';
196
- break;
197
- case 503:
198
- errorMessage = 'Service Unavailable';
199
- userFriendlyMessage = 'AI service request timed out. Please try again.';
200
- break;
201
- case 504:
202
- errorMessage = 'Gateway Timeout';
203
- userFriendlyMessage = 'Gateway timeout. Please try again later.';
204
- break;
205
- default:
206
- try {
207
- errorMessage = error.response.data?.error || `HTTP ${status}`;
208
- } catch {
209
- errorMessage = `HTTP ${status}`;
210
- }
211
- userFriendlyMessage = `Request failed with status code: ${status}`;
212
- }
213
-
214
- // Print user-friendly error message
215
- console.error(`\n❌ Request failed (${status})`);
216
- console.error(` ${userFriendlyMessage}`);
217
- if (this.showAIDebugInfo) {
218
- console.error(` Original error: ${errorMessage}`);
219
- }
220
- throw new Error(userFriendlyMessage);
221
- }
222
-
223
- // Network error or other error
224
- // Check if error is retryable
225
- const isRetryable = this.isRetryableError(error);
226
- if (!isRetryable) {
227
- throw error;
228
- }
229
-
230
- // Retry with exponential backoff
231
- const retryResult = await withRetry(async () => {
232
- const response = await axios.post(url, requestBody, {
233
- headers: {
234
- 'Content-Type': 'application/json',
235
- 'Authorization': `Bearer ${this.authToken}`
236
- },
237
- httpsAgent,
238
- timeout: 300000
239
- });
240
-
241
- if (response.status === 401) {
242
- throw new TokenInvalidError('Authentication token is invalid or expired. Please log in again.');
243
- }
244
-
245
- return {
246
- role: 'assistant' as const,
247
- content: response.data.content || '',
248
- reasoningContent: response.data.reasoningContent || '',
249
- toolCalls: response.data.toolCalls,
250
- timestamp: Date.now()
251
- };
252
- }, { maxRetries: 3, baseDelay: 1000, maxDelay: 10000, jitter: true });
253
-
254
- if (!retryResult.success) {
255
- throw retryResult.error || new Error('Retry failed');
256
- }
257
-
258
- if (!retryResult.data) {
259
- throw new Error('Retry returned empty response');
260
- }
261
-
262
- return retryResult.data;
263
- }
264
- }
265
-
266
- private isRetryableError(error: any): boolean {
267
- // Timeout or network error (no response received)
268
- if (error.code === 'ECONNABORTED' || !error.response) {
269
- return true;
270
- }
271
- // 5xx server errors
272
- if (error.response?.status && error.response.status >= 500) {
273
- return true;
274
- }
275
- // 429 rate limit
276
- if (error.response?.status === 429) {
277
- return true;
278
- }
279
- return false;
280
- }
281
-
282
- /**
283
- * Mark task as completed
284
- * Call backend to update task status to 'end'
285
- */
286
- async completeTask(taskId: string): Promise<void> {
287
- if (!taskId) {
288
- logger.debug('[RemoteAIClient] completeTask called with empty taskId, skipping');
289
- return;
290
- }
291
-
292
- logger.debug(`[RemoteAIClient] completeTask called: taskId=${taskId}`);
293
-
294
- const url = `${this.agentApi}/chat`;
295
- const requestBody = {
296
- taskId,
297
- status: 'end',
298
- messages: [],
299
- options: {}
300
- };
301
-
302
- const httpsAgent = new https.Agent({ rejectUnauthorized: false });
303
-
304
- try {
305
- const response = await axios.post(url, requestBody, {
306
- headers: {
307
- 'Content-Type': 'application/json',
308
- 'Authorization': `Bearer ${this.authToken}`
309
- },
310
- httpsAgent
311
- });
312
- logger.debug(`[RemoteAIClient] completeTask response status: ${response.status}`);
313
- } catch (error) {
314
- console.error('[RemoteAIClient] Failed to mark task as completed:', error);
315
- }
316
- }
317
-
318
- /**
319
- * Mark task as cancelled
320
- * Call backend to update task status to 'cancel'
321
- */
322
- async cancelTask(taskId: string): Promise<void> {
323
- if (!taskId) return;
324
-
325
- const url = `${this.agentApi}/chat`;
326
- const requestBody = {
327
- taskId,
328
- status: 'cancel',
329
- messages: [],
330
- options: {}
331
- };
332
-
333
- const httpsAgent = new https.Agent({ rejectUnauthorized: false });
334
-
335
- try {
336
- await axios.post(url, requestBody, {
337
- headers: {
338
- 'Content-Type': 'application/json',
339
- 'Authorization': `Bearer ${this.authToken}`
340
- },
341
- httpsAgent
342
- });
343
- } catch (error) {
344
- console.error('[RemoteAIClient] Failed to mark task as cancelled:', error);
345
- }
346
- }
347
-
348
- /**
349
- * Unified LLM call interface - same return type as aiClient.chatCompletion
350
- * Implements transparency: caller doesn't need to know remote vs local mode
351
- */
352
- async chatCompletion(
353
- messages: ChatMessage[],
354
- options: ChatCompletionOptions = {}
355
- ): Promise<ChatCompletionResponse> {
356
- const model = options.model || 'remote-llm';
357
-
358
- // Debug output for request
359
- if (this.showAIDebugInfo) {
360
- console.log('\n╔══════════════════════════════════════════════════════════╗');
361
- console.log('║ AI REQUEST DEBUG (REMOTE) ║');
362
- console.log('╚══════════════════════════════════════════════════════════╝');
363
- console.log(`📦 Model: ${model}`);
364
- console.log(`🌐 Base URL: ${this.webBaseUrl}`);
365
- console.log(`💬 Total Messages: ${messages.length} items`);
366
- if (options.temperature !== undefined) console.log(`🌡️ Temperature: ${options.temperature}`);
367
- if (options.maxTokens) console.log(`📏 Max Tokens: ${options.maxTokens}`);
368
- if (options.tools?.length) console.log(`🔧 Tools: ${options.tools.length} items`);
369
- if (options.thinkingTokens) console.log(`🧠 Thinking Tokens: ${options.thinkingTokens}`);
370
- console.log('─'.repeat(60));
371
-
372
- // Display system messages separately
373
- const systemMsgs = messages.filter(m => m.role === 'system');
374
- const otherMsgs = messages.filter(m => m.role !== 'system');
375
-
376
- if (systemMsgs.length > 0) {
377
- const systemContent = typeof systemMsgs[0].content === 'string'
378
- ? systemMsgs[0].content
379
- : JSON.stringify(systemMsgs[0].content);
380
- console.log('\n┌─────────────────────────────────────────────────────────────┐');
381
- console.log('│ 🟫 SYSTEM │');
382
- console.log('├─────────────────────────────────────────────────────────────┤');
383
- console.log(renderMarkdown(systemContent).split('\n').map(l => '│ ' + l).join('\n'));
384
- console.log('└─────────────────────────────────────────────────────────────┘');
385
- }
386
-
387
- // Display other messages
388
- displayMessages(otherMsgs);
389
-
390
- console.log('\n📤 Sending request to Remote API...\n');
391
- }
392
-
393
- // Call existing chat method
394
- const response = await this.chat(messages, {
395
- conversationId: undefined,
396
- tools: options.tools as any,
397
- toolResults: undefined,
398
- context: undefined,
399
- model: options.model,
400
- taskId: (options as any).taskId,
401
- status: 'begin' // Mark as beginning of task
402
- });
403
-
404
- // Debug output for response
405
- if (this.showAIDebugInfo) {
406
- console.log('\n╔══════════════════════════════════════════════════════════╗');
407
- console.log('║ AI RESPONSE DEBUG (REMOTE) ║');
408
- console.log('╚══════════════════════════════════════════════════════════╝');
409
- console.log(`🆔 ID: remote-${Date.now()}`);
410
- console.log(`🤖 Model: ${model}`);
411
- console.log(`🏁 Finish Reason: stop`);
412
-
413
- console.log('\n┌─────────────────────────────────────────────────────────────┐');
414
- console.log('│ 🤖 ASSISTANT │');
415
- console.log('├─────────────────────────────────────────────────────────────┤');
416
-
417
- // Display reasoning_content (if present)
418
- if (response.reasoningContent) {
419
- console.log('│ 🧠 REASONING:');
420
- console.log('│ ───────────────────────────────────────────────────────────');
421
- const reasoningLines = renderMarkdown(response.reasoningContent).split('\n');
422
- for (const line of reasoningLines.slice(0, 15)) {
423
- console.log('│ ' + line.slice(0, 62));
424
- }
425
- if (response.reasoningContent.length > 800) console.log('│ ... (truncated)');
426
- console.log('│ ───────────────────────────────────────────────────────────');
427
- }
428
-
429
- // Display content
430
- console.log('│ 💬 CONTENT:');
431
- console.log('│ ───────────────────────────────────────────────────────────');
432
- const lines = renderMarkdown(response.content).split('\n');
433
- for (const line of lines.slice(0, 40)) {
434
- console.log('│ ' + line.slice(0, 62));
435
- }
436
- if (lines.length > 40) {
437
- console.log(`│ ... (${lines.length - 40} more lines)`);
438
- }
439
- console.log('└─────────────────────────────────────────────────────────────┘');
440
-
441
- // Display tool calls if present
442
- if (response.toolCalls && response.toolCalls.length > 0) {
443
- console.log('\n┌─────────────────────────────────────────────────────────────┐');
444
- console.log('│ 🔧 TOOL CALLS │');
445
- console.log('├─────────────────────────────────────────────────────────────┤');
446
- for (let i = 0; i < response.toolCalls.length; i++) {
447
- const tc = response.toolCalls[i];
448
- console.log(`│ ${i + 1}. ${tc.function?.name || 'unknown'}`);
449
- if (tc.function?.arguments) {
450
- const args = typeof tc.function.arguments === 'string'
451
- ? JSON.parse(tc.function.arguments)
452
- : tc.function.arguments;
453
- const argsStr = JSON.stringify(args, null, 2).split('\n').slice(0, 5).join('\n');
454
- console.log('│ Args:', argsStr.slice(0, 50) + (argsStr.length > 50 ? '...' : ''));
455
- }
456
- }
457
- console.log('└─────────────────────────────────────────────────────────────┘');
458
- }
459
-
460
- console.log('\n╔══════════════════════════════════════════════════════════╗');
461
- console.log('║ RESPONSE ENDED ║');
462
- console.log('╚══════════════════════════════════════════════════════════╝\n');
463
- }
464
-
465
- // Convert to ChatCompletionResponse format (consistent with local mode)
466
- return {
467
- id: `remote-${Date.now()}`,
468
- object: 'chat.completion',
469
- created: Date.now(),
470
- model: options.model || 'remote-llm',
471
- choices: [
472
- {
473
- index: 0,
474
- message: {
475
- role: 'assistant',
476
- content: response.content,
477
- reasoning_content: response.reasoningContent || '',
478
- tool_calls: response.toolCalls
479
- },
480
- finish_reason: 'stop'
481
- }
482
- ],
483
- usage: undefined
484
- };
485
- }
486
-
487
- /**
488
- * Invoke VLM for image understanding
489
- * @param messages - full messages array (consistent with local mode)
490
- * @param systemPrompt - system prompt (optional, for reference)
491
- * @param remoteChatOptions - other options including AbortSignal, taskId
492
- */
493
- async invokeVLM(
494
- messages: any[],
495
- _systemPrompt?: string,
496
- remoteChatOptions: RemoteChatOptions = {}
497
- ): Promise<string> {
498
- // Forward complete messages to backend (same format as local mode)
499
- const requestBody = {
500
- messages, // Pass complete messages array
501
- taskId: remoteChatOptions.taskId,
502
- status: remoteChatOptions.status || 'begin',
503
- context: remoteChatOptions.context,
504
- options: {
505
- model: remoteChatOptions.model
506
- }
507
- };
508
-
509
- if (this.showAIDebugInfo) {
510
- console.log('[RemoteAIClient] VLM sending request to:', this.vlmApi);
511
- }
512
-
513
- // Handle abort signal
514
- const controller = remoteChatOptions.signal ? new AbortController() : undefined;
515
- const abortSignal = remoteChatOptions.signal || controller?.signal;
516
-
517
- // If external signal is provided, listen to it
518
- if (remoteChatOptions.signal) {
519
- remoteChatOptions.signal.addEventListener?.('abort', () => controller?.abort());
520
- }
521
-
522
- try {
523
- const response = await axios.post(this.vlmApi, requestBody, {
524
- headers: {
525
- 'Content-Type': 'application/json',
526
- 'Authorization': `Bearer ${this.authToken}`
527
- },
528
- signal: abortSignal,
529
- httpsAgent: new https.Agent({ rejectUnauthorized: false }),
530
- timeout: 120000
531
- });
532
-
533
- if (this.showAIDebugInfo) {
534
- console.log('[RemoteAIClient] VLM response status:', response.status);
535
- }
536
-
537
- const data = response.data as RemoteVLMResponse;
538
- return data.content || '';
539
-
540
- } catch (error: any) {
541
- if (this.showAIDebugInfo) {
542
- console.log('[RemoteAIClient] VLM request exception:', error.message);
543
- }
544
- throw error;
545
- }
546
- }
547
-
548
- /**
549
- * Validate if the current token is still valid
550
- * Returns true if valid, false otherwise
551
- */
552
- async validateToken(): Promise<boolean> {
553
- try {
554
- const url = `${this.webBaseUrl}/api/auth/me`;
555
- const httpsAgent = new https.Agent({ rejectUnauthorized: false });
556
- const response = await axios.get(url, {
557
- httpsAgent,
558
- timeout: 10000
559
- });
560
- return response.status === 200;
561
- } catch {
562
- return false;
563
- }
564
- }
565
-
566
- async getConversations(): Promise<any[]> {
567
- const url = `${this.agentApi}/conversations`;
568
- if (this.showAIDebugInfo) {
569
- console.log('[RemoteAIClient] Getting conversation list:', url);
570
- }
571
-
572
- const httpsAgent = new https.Agent({ rejectUnauthorized: false });
573
-
574
- const response = await axios.get(url, {
575
- headers: {
576
- 'Authorization': `Bearer ${this.authToken}`
577
- },
578
- httpsAgent
579
- });
580
-
581
- if (response.status !== 200) {
582
- throw new Error('Failed to get conversation list');
583
- }
584
-
585
- const data = response.data as { conversations?: any[] };
586
- return data.conversations || [];
587
- }
588
-
589
- /**
590
- * Get conversation details
591
- */
592
- async getConversation(conversationId: string): Promise<any> {
593
- const url = `${this.agentApi}/conversations/${conversationId}`;
594
- if (this.showAIDebugInfo) {
595
- console.log('[RemoteAIClient] Getting conversation details:', url);
596
- }
597
-
598
- const httpsAgent = new https.Agent({ rejectUnauthorized: false });
599
-
600
- const response = await axios.get(url, {
601
- headers: {
602
- 'Authorization': `Bearer ${this.authToken}`
603
- },
604
- httpsAgent
605
- });
606
-
607
- if (response.status !== 200) {
608
- throw new Error('Failed to get conversation details');
609
- }
610
-
611
- const data = response.data as { conversation?: any };
612
- return data.conversation;
613
- }
614
-
615
- /**
616
- * Create new conversation
617
- */
618
- async createConversation(title?: string): Promise<any> {
619
- const url = `${this.agentApi}/conversations`;
620
- if (this.showAIDebugInfo) {
621
- console.log('[RemoteAIClient] Creating conversation:', url);
622
- }
623
-
624
- const httpsAgent = new https.Agent({ rejectUnauthorized: false });
625
-
626
- const response = await axios.post(url, { title }, {
627
- headers: {
628
- 'Content-Type': 'application/json',
629
- 'Authorization': `Bearer ${this.authToken}`
630
- },
631
- httpsAgent
632
- });
633
-
634
- if (response.status !== 200) {
635
- throw new Error('Failed to create conversation');
636
- }
637
-
638
- const data = response.data as { conversation?: any };
639
- return data.conversation;
640
- }
641
-
642
- /**
643
- * Delete conversation
644
- */
645
- async deleteConversation(conversationId: string): Promise<void> {
646
- const url = `${this.agentApi}/conversations/${conversationId}`;
647
- if (this.showAIDebugInfo) {
648
- console.log('[RemoteAIClient] Deleting conversation:', url);
649
- }
650
-
651
- const httpsAgent = new https.Agent({ rejectUnauthorized: false });
652
-
653
- const response = await axios.delete(url, {
654
- headers: {
655
- 'Authorization': `Bearer ${this.authToken}`
656
- },
657
- httpsAgent
658
- });
659
-
660
- if (!response.status.toString().startsWith('2')) {
661
- throw new Error('Failed to delete conversation');
662
- }
663
- }
664
- }
File without changes