@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
@@ -0,0 +1,116 @@
1
+ import type { AIProvider, AIConfig, RemoteAIProvider, Model } from './types.js';
2
+ import { isOpenAIConfig, isAnthropicConfig, isRemoteConfig } from './types.js';
3
+ import { createOpenAIProvider } from './providers/openai.js';
4
+ import { createAnthropicProvider } from './providers/anthropic.js';
5
+ import { createRemoteProvider } from './providers/remote.js';
6
+ import { getAllModels, listProviderTypes } from './registry.js';
7
+
8
+ // ============================================================================
9
+ // Provider Factory
10
+ // ============================================================================
11
+
12
+ /**
13
+ * AI Provider Factory
14
+ * Creates provider instances based on configuration
15
+ */
16
+ export class ProviderFactory {
17
+ /**
18
+ * Create a provider instance from configuration
19
+ */
20
+ static create(config: AIConfig): AIProvider {
21
+ if (isOpenAIConfig(config)) {
22
+ return createOpenAIProvider(config);
23
+ }
24
+
25
+ if (isAnthropicConfig(config)) {
26
+ return createAnthropicProvider(config);
27
+ }
28
+
29
+ if (isRemoteConfig(config)) {
30
+ return createRemoteProvider(config);
31
+ }
32
+
33
+ throw new Error(`Unknown provider type: ${(config as any).type}`);
34
+ }
35
+
36
+ /**
37
+ * Create a remote provider instance (with task management)
38
+ */
39
+ static createRemote(config: AIConfig): RemoteAIProvider {
40
+ if (!isRemoteConfig(config)) {
41
+ throw new Error('createRemote requires a remote configuration');
42
+ }
43
+ return createRemoteProvider(config);
44
+ }
45
+
46
+ /**
47
+ * Get all available models
48
+ */
49
+ static getModels(): Model[] {
50
+ return getAllModels();
51
+ }
52
+
53
+ /**
54
+ * Get available provider types
55
+ */
56
+ static getProviderTypes(): string[] {
57
+ return listProviderTypes();
58
+ }
59
+
60
+ /**
61
+ * Check if provider type is supported
62
+ */
63
+ static isSupported(type: string): boolean {
64
+ const types = listProviderTypes();
65
+ return types.includes(type);
66
+ }
67
+
68
+ /**
69
+ * Get default configuration for a provider type
70
+ */
71
+ static getDefaultConfig(type: string, apiKey?: string, baseUrl?: string): AIConfig {
72
+ switch (type) {
73
+ case 'openai':
74
+ return {
75
+ type: 'openai',
76
+ apiKey,
77
+ baseUrl: baseUrl || 'https://api.openai.com/v1',
78
+ };
79
+
80
+ case 'anthropic':
81
+ return {
82
+ type: 'anthropic',
83
+ apiKey,
84
+ baseUrl: baseUrl || 'https://api.anthropic.com',
85
+ };
86
+
87
+ case 'remote':
88
+ return {
89
+ type: 'remote',
90
+ authToken: apiKey,
91
+ baseUrl: baseUrl || 'https://app.xagent.cn',
92
+ };
93
+
94
+ default:
95
+ throw new Error(`Unknown provider type: ${type}`);
96
+ }
97
+ }
98
+ }
99
+
100
+ // ============================================================================
101
+ // Factory Helpers
102
+ // ============================================================================
103
+
104
+ /**
105
+ * Get all available models
106
+ */
107
+ export function getModels(): Model[] {
108
+ return ProviderFactory.getModels();
109
+ }
110
+
111
+ /**
112
+ * Get available provider types
113
+ */
114
+ export function getProviderTypes(): string[] {
115
+ return ProviderFactory.getProviderTypes();
116
+ }
@@ -0,0 +1,61 @@
1
+ // ============================================================================
2
+ // AI Module - Unified Entry Point
3
+ // ============================================================================
4
+ //
5
+ // This module provides a unified interface for different AI providers.
6
+ // Supports OpenAI, Anthropic (including MiniMax), and Remote (xAgent Web Service).
7
+ //
8
+ // Usage:
9
+ // import { createProvider, type AIProvider } from './ai-client/index.js';
10
+ //
11
+ // const provider = createProvider({
12
+ // type: 'anthropic',
13
+ // apiKey: process.env.ANTHROPIC_API_KEY,
14
+ // baseUrl: 'https://api.minimax.chat/anthropic', // MiniMax example
15
+ // });
16
+ //
17
+ // const response = await provider.complete(messages, { model: 'MiniMax-M2.5' });
18
+ //
19
+ // ============================================================================
20
+
21
+ // Types
22
+ export * from './types.js';
23
+
24
+ // Registry
25
+ export * from './registry.js';
26
+
27
+ // Factory
28
+ export * from './factory.js';
29
+
30
+ // Providers
31
+ export { OpenAIProvider, createOpenAIProvider } from './providers/openai.js';
32
+ export { AnthropicProvider, createAnthropicProvider } from './providers/anthropic.js';
33
+ export { RemoteProvider, createRemoteProvider } from './providers/remote.js';
34
+
35
+ // ============================================================================
36
+ // Convenience Functions
37
+ // ============================================================================
38
+
39
+ import type { AIProvider, AIConfig } from './types.js';
40
+ import { ProviderFactory } from './factory.js';
41
+
42
+ /**
43
+ * Create an AI provider from configuration
44
+ */
45
+ export function createProvider(config: AIConfig): AIProvider {
46
+ return ProviderFactory.create(config);
47
+ }
48
+
49
+ /**
50
+ * Get all available models
51
+ */
52
+ export function getAllModels() {
53
+ return ProviderFactory.getModels();
54
+ }
55
+
56
+ /**
57
+ * Get available provider types
58
+ */
59
+ export function getProviderTypes() {
60
+ return ProviderFactory.getProviderTypes();
61
+ }
@@ -0,0 +1,475 @@
1
+ import axios, { AxiosInstance } from 'axios';
2
+ import https from 'https';
3
+ import type {
4
+ AIProvider,
5
+ AnthropicConfig,
6
+ Message,
7
+ ContentBlock,
8
+ CompletionOptions,
9
+ CompletionResponse,
10
+ StreamEvent,
11
+ Model,
12
+ } from '../types';
13
+ import { DEFAULT_RETRY_CONFIG } from '../types.js';
14
+ import { getLogger } from '../../logger.js';
15
+ import { withRetry, RetryConfig } from '../../retry.js';
16
+
17
+ const logger = getLogger();
18
+
19
+ // ============================================================================
20
+ // Anthropic Provider
21
+ // ============================================================================
22
+
23
+ /**
24
+ * Anthropic Compatible Provider
25
+ * Supports Anthropic official API and MiniMax (which uses Anthropic format)
26
+ */
27
+ export class AnthropicProvider implements AIProvider {
28
+ readonly type = 'anthropic';
29
+
30
+ private client: AxiosInstance;
31
+ private config: AnthropicConfig;
32
+ private abortController: AbortController | null = null;
33
+
34
+ constructor(config: AnthropicConfig) {
35
+ this.config = config;
36
+
37
+ const headers: Record<string, string> = {
38
+ 'Content-Type': 'application/json',
39
+ 'anthropic-version': '2023-06-01',
40
+ };
41
+
42
+ if (config.apiKey) {
43
+ headers['x-api-key'] = config.apiKey;
44
+ }
45
+
46
+ // Add extra headers if provided (for MiniMax and other compatible APIs)
47
+ if (config.extraHeaders) {
48
+ Object.assign(headers, config.extraHeaders);
49
+ }
50
+
51
+ this.client = axios.create({
52
+ baseURL: config.baseUrl || 'https://api.anthropic.com',
53
+ headers,
54
+ timeout: 300000,
55
+ httpsAgent: new https.Agent({ rejectUnauthorized: false }),
56
+ });
57
+ }
58
+
59
+ /**
60
+ * Get available models
61
+ */
62
+ async getModels(): Promise<Model[]> {
63
+ return ANTHROPIC_MODELS;
64
+ }
65
+
66
+ /**
67
+ * Non-streaming completion
68
+ */
69
+ async complete(
70
+ messages: Message[],
71
+ options?: CompletionOptions
72
+ ): Promise<CompletionResponse> {
73
+ const model = options?.model || this.config.model || 'claude-sonnet-4-20250514';
74
+ const showDebug = this.config.showDebugInfo ?? false;
75
+
76
+ const { system, messages: anthropicMessages } = this.convertToAnthropicFormat(messages);
77
+
78
+ const requestBody: Record<string, unknown> = {
79
+ model,
80
+ messages: anthropicMessages,
81
+ temperature: options?.temperature ?? 1.0,
82
+ stream: false,
83
+ max_tokens: options?.maxTokens,
84
+ };
85
+
86
+ if (system) {
87
+ requestBody.system = system;
88
+ }
89
+
90
+ if (options?.tools && options.tools.length > 0) {
91
+ requestBody.tools = options.tools.map(tool => ({
92
+ name: tool.function.name,
93
+ description: tool.function.description,
94
+ input_schema: tool.function.parameters || { type: 'object', properties: {} },
95
+ }));
96
+
97
+ const toolChoice = options.toolChoice;
98
+ if (toolChoice === 'none') {
99
+ requestBody.tool_choice = { type: 'auto' };
100
+ } else if (toolChoice && typeof toolChoice === 'object' && 'function' in toolChoice) {
101
+ requestBody.tool_choice = { type: 'tool', tool: { name: toolChoice.function.name } };
102
+ } else {
103
+ requestBody.tool_choice = { type: 'auto' };
104
+ }
105
+ }
106
+
107
+ if (options?.thinkingTokens && options.thinkingTokens > 0) {
108
+ requestBody.thinking = { type: 'enabled', budget_tokens: options.thinkingTokens };
109
+ }
110
+
111
+ if (showDebug) {
112
+ this.debugRequest('Anthropic', model, anthropicMessages, system);
113
+ }
114
+
115
+ const retryConfig: RetryConfig = { ...DEFAULT_RETRY_CONFIG };
116
+
117
+ const result = await withRetry(async () => {
118
+ const response = await this.client.post('/v1/messages', requestBody, {
119
+ signal: options?.signal,
120
+ });
121
+ return this.convertResponse(response.data, model);
122
+ }, retryConfig);
123
+
124
+ if (result.success) {
125
+ return result.data!;
126
+ }
127
+ throw result.error || new Error('Anthropic API request failed after retries');
128
+ }
129
+
130
+ /**
131
+ * Streaming completion
132
+ */
133
+ async *stream(
134
+ messages: Message[],
135
+ options?: CompletionOptions
136
+ ): AsyncIterable<StreamEvent> {
137
+ const model = options?.model || this.config.model || 'claude-sonnet-4-20250514';
138
+ const showDebug = this.config.showDebugInfo ?? false;
139
+
140
+ const { system, messages: anthropicMessages } = this.convertToAnthropicFormat(messages);
141
+
142
+ const requestBody: Record<string, unknown> = {
143
+ model,
144
+ messages: anthropicMessages,
145
+ temperature: options?.temperature ?? 1.0,
146
+ stream: true,
147
+ max_tokens: options?.maxTokens,
148
+ };
149
+
150
+ if (system) {
151
+ requestBody.system = system;
152
+ }
153
+
154
+ if (options?.tools && options.tools.length > 0) {
155
+ requestBody.tools = options.tools.map(tool => ({
156
+ name: tool.function.name,
157
+ description: tool.function.description,
158
+ input_schema: tool.function.parameters || { type: 'object', properties: {} },
159
+ }));
160
+ requestBody.tool_choice = { type: 'auto' };
161
+ }
162
+
163
+ if (options?.thinkingTokens && options.thinkingTokens > 0) {
164
+ requestBody.thinking = { type: 'enabled', budget_tokens: options.thinkingTokens };
165
+ }
166
+
167
+ if (showDebug) {
168
+ logger.debug(`[Anthropic] Starting stream with model: ${model}`);
169
+ }
170
+
171
+ this.abortController = new AbortController();
172
+
173
+ try {
174
+ const response = await this.client.post('/v1/messages', requestBody, {
175
+ responseType: 'stream',
176
+ signal: options?.signal || this.abortController.signal,
177
+ });
178
+
179
+ let buffer = '';
180
+
181
+ for await (const chunk of response.data) {
182
+ buffer += chunk.toString();
183
+ const lines = buffer.split('\n');
184
+ buffer = lines.pop() || '';
185
+
186
+ for (const line of lines) {
187
+ const trimmedLine = line.trim();
188
+ if (!trimmedLine) continue;
189
+
190
+ if (trimmedLine.startsWith('data: ')) {
191
+ const data = trimmedLine.slice(6);
192
+ try {
193
+ const event = JSON.parse(data);
194
+
195
+ if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta') {
196
+ yield { type: 'text_delta', delta: event.delta.text };
197
+ }
198
+
199
+ if (event.type === 'content_block_delta' && event.delta?.type === 'thinking_delta') {
200
+ yield { type: 'reasoning_delta', delta: event.delta.thinking };
201
+ }
202
+
203
+ if (event.type === 'content_block_delta' && event.delta?.type === 'tool_use_delta') {
204
+ const toolDelta = event.delta;
205
+ yield {
206
+ type: 'toolcall_delta',
207
+ delta: JSON.stringify({
208
+ id: toolDelta.id,
209
+ name: toolDelta.name,
210
+ input: toolDelta.input,
211
+ }),
212
+ };
213
+ }
214
+
215
+ if (event.type === 'message_stop') {
216
+ yield { type: 'done', reason: 'stop' };
217
+ }
218
+
219
+ if (event.type === 'message_delta' && event.delta?.stop_reason) {
220
+ yield { type: 'done', reason: this.convertStopReason(event.delta.stop_reason) };
221
+ }
222
+ } catch {
223
+ // Ignore parse errors
224
+ }
225
+ }
226
+ }
227
+ }
228
+ } catch (error) {
229
+ if (axios.isCancel(error)) {
230
+ yield { type: 'done', reason: 'stop' };
231
+ } else {
232
+ yield { type: 'error', error: error as Error };
233
+ }
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Abort ongoing request
239
+ */
240
+ abort(): void {
241
+ this.abortController?.abort();
242
+ this.abortController = null;
243
+ }
244
+
245
+ /**
246
+ * Close provider
247
+ */
248
+ async close(): Promise<void> {
249
+ this.abort();
250
+ }
251
+
252
+ // --------------------------------------------------------------------------
253
+
254
+ /**
255
+ * Convert messages to Anthropic format
256
+ */
257
+ private convertToAnthropicFormat(
258
+ messages: Message[]
259
+ ): { system: string; messages: Array<{ role: string; content: ContentBlock[] }> } {
260
+ const systemMessages = messages.filter(m => m.role === 'system');
261
+ const otherMessages = messages.filter(m => m.role !== 'system');
262
+
263
+ const systemContent = systemMessages[0]?.content;
264
+ const system = typeof systemContent === 'string' ? systemContent : '';
265
+
266
+ const anthropicMessages: Array<{ role: string; content: ContentBlock[] }> = [];
267
+
268
+ for (const msg of otherMessages) {
269
+ const blocks: ContentBlock[] = [];
270
+
271
+ // Handle tool result messages
272
+ if (msg.role === 'tool' && msg.tool_call_id) {
273
+ blocks.push({
274
+ type: 'tool_result',
275
+ tool_use_id: msg.tool_call_id,
276
+ content: typeof msg.content === 'string'
277
+ ? msg.content
278
+ : JSON.stringify(msg.content),
279
+ });
280
+ } else if (typeof msg.content === 'string') {
281
+ blocks.push({ type: 'text', text: msg.content });
282
+ } else if (Array.isArray(msg.content)) {
283
+ for (const block of msg.content) {
284
+ if (block.type === 'text' && 'text' in block) {
285
+ blocks.push({ type: 'text', text: (block as any).text });
286
+ } else if (block.type === 'tool_use') {
287
+ blocks.push({
288
+ type: 'tool_use',
289
+ id: (block as any).id,
290
+ name: (block as any).function?.name || (block as any).name,
291
+ input: (block as any).function?.arguments || (block as any).input,
292
+ });
293
+ } else if (block.type === 'tool_result') {
294
+ blocks.push({
295
+ type: 'tool_result',
296
+ tool_use_id: (block as any).tool_call_id || (block as any).tool_use_id,
297
+ content: typeof (block as any).content === 'string'
298
+ ? (block as any).content
299
+ : JSON.stringify((block as any).content),
300
+ });
301
+ } else if (block.type === 'thinking') {
302
+ blocks.push({ type: 'thinking', thinking: (block as any).thinking });
303
+ }
304
+ }
305
+ }
306
+
307
+ // Handle tool_calls from OpenAI format
308
+ if (msg.tool_calls) {
309
+ for (const tc of msg.tool_calls as any[]) {
310
+ blocks.push({
311
+ type: 'tool_use',
312
+ id: tc.id,
313
+ name: tc.function?.name || '',
314
+ input: typeof tc.function?.arguments === 'string'
315
+ ? JSON.parse(tc.function?.arguments)
316
+ : tc.function?.arguments || {},
317
+ });
318
+ }
319
+ }
320
+
321
+ if (blocks.length > 0) {
322
+ anthropicMessages.push({
323
+ role: msg.role === 'tool' ? 'user' : msg.role,
324
+ content: blocks,
325
+ });
326
+ }
327
+ }
328
+
329
+ return { system, messages: anthropicMessages };
330
+ }
331
+
332
+ /**
333
+ * Convert Anthropic response to unified format
334
+ */
335
+ private convertResponse(data: any, model: string): CompletionResponse {
336
+ const content = data.content || [];
337
+ let textContent = '';
338
+ let reasoningContent = '';
339
+ const toolCalls: any[] = [];
340
+
341
+ // Handle tool calls from content blocks
342
+ for (const block of content) {
343
+ if (block.type === 'text') {
344
+ textContent += block.text || '';
345
+ } else if (block.type === 'thinking') {
346
+ reasoningContent += block.thinking || '';
347
+ } else if (block.type === 'tool_use') {
348
+ toolCalls.push({
349
+ id: block.id,
350
+ type: 'function',
351
+ function: {
352
+ name: block.name,
353
+ arguments: JSON.stringify(block.input || {}),
354
+ },
355
+ });
356
+ }
357
+ }
358
+
359
+ // Handle tool calls from top-level field (some APIs return here too)
360
+ const topLevelToolCalls = data.tool_calls;
361
+ if (topLevelToolCalls && Array.isArray(topLevelToolCalls)) {
362
+ for (const tc of topLevelToolCalls) {
363
+ toolCalls.push({
364
+ id: tc.id,
365
+ type: tc.type || 'function',
366
+ function: {
367
+ name: tc.function?.name || '',
368
+ arguments: tc.function?.arguments || '',
369
+ },
370
+ });
371
+ }
372
+ }
373
+
374
+ return {
375
+ id: data.id || `anthropic-${Date.now()}`,
376
+ object: 'chat.completion',
377
+ created: Math.floor(Date.now() / 1000),
378
+ model: data.model || model,
379
+ choices: [{
380
+ index: 0,
381
+ message: {
382
+ role: 'assistant',
383
+ content: textContent,
384
+ reasoning_content: reasoningContent || undefined,
385
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
386
+ },
387
+ finish_reason: this.convertStopReason(data.stop_reason),
388
+ }],
389
+ usage: data.usage ? {
390
+ prompt_tokens: data.usage.input_tokens || 0,
391
+ completion_tokens: data.usage.output_tokens || 0,
392
+ total_tokens: (data.usage.input_tokens || 0) + (data.usage.output_tokens || 0),
393
+ } : undefined,
394
+ };
395
+ }
396
+
397
+ /**
398
+ * Convert Anthropic stop reason to unified format
399
+ */
400
+ private convertStopReason(reason: string | undefined): 'stop' | 'length' | 'tool_calls' | 'content_filter' {
401
+ switch (reason) {
402
+ case 'end_turn':
403
+ case 'stop':
404
+ return 'stop';
405
+ case 'max_tokens':
406
+ return 'length';
407
+ case 'tool_use':
408
+ return 'tool_calls';
409
+ default:
410
+ return 'stop';
411
+ }
412
+ }
413
+
414
+ /**
415
+ * Debug request output
416
+ */
417
+ private debugRequest(
418
+ provider: string,
419
+ model: string,
420
+ messages: Array<{ role: string; content: ContentBlock[] }>,
421
+ system?: string
422
+ ): void {
423
+ console.log(`\n╔══════════════════════════════════════════════════════════╗`);
424
+ console.log(`║ AI REQUEST DEBUG (${provider}) ║`);
425
+ console.log(`╚══════════════════════════════════════════════════════════╝`);
426
+ console.log(`📦 Model: ${model}`);
427
+ console.log(`💬 Messages: ${messages.length}`);
428
+ if (system) console.log(`📝 System: ${system.slice(0, 100)}...`);
429
+ console.log('─'.repeat(60));
430
+ console.log('\n📤 Sending request...\n');
431
+ }
432
+
433
+ /**
434
+ * Handle errors
435
+ */
436
+ private handleError(error: any): Error {
437
+ if (error.response) {
438
+ return new Error(`Anthropic API Error: ${error.response.status} - ${JSON.stringify(error.response.data)}`);
439
+ }
440
+ if (error.request) {
441
+ return new Error('Anthropic API Error: Network error - No response received');
442
+ }
443
+ return new Error(`Anthropic API Error: ${error.message}`);
444
+ }
445
+ }
446
+
447
+ // ============================================================================
448
+ // Anthropic Models
449
+ // ============================================================================
450
+
451
+ const ANTHROPIC_MODELS: Model[] = [
452
+ { id: 'claude-sonnet-4-20250514', name: 'Claude Sonnet 4', provider: 'anthropic', contextWindow: 200000, supportsTools: true, supportsThinking: true, supportsStreaming: true },
453
+ { id: 'claude-haiku-3-20250506', name: 'Claude Haiku 3', provider: 'anthropic', contextWindow: 200000, supportsTools: true, supportsStreaming: true },
454
+ { id: 'claude-opus-4-20250501', name: 'Claude Opus 4', provider: 'anthropic', contextWindow: 200000, supportsTools: true, supportsThinking: true, supportsStreaming: true },
455
+ { id: 'claude-sonnet-4', name: 'Claude Sonnet 4', provider: 'anthropic', contextWindow: 200000, supportsTools: true, supportsThinking: true, supportsStreaming: true },
456
+ { id: 'claude-haiku-3', name: 'Claude Haiku 3', provider: 'anthropic', contextWindow: 200000, supportsTools: true, supportsStreaming: true },
457
+ // MiniMax models (uses Anthropic format)
458
+ { id: 'MiniMax-M2.5', name: 'MiniMax-M2.5', provider: 'anthropic', contextWindow: 200000, supportsTools: true, supportsStreaming: true },
459
+ { id: 'MiniMax-M2.1', name: 'MiniMax-M2.1', provider: 'anthropic', contextWindow: 200000, supportsTools: true, supportsStreaming: true },
460
+ { id: 'MiniMax-M2', name: 'MiniMax-M2', provider: 'anthropic', contextWindow: 200000, supportsTools: true, supportsStreaming: true },
461
+ { id: 'MiniMax-M2-8k', name: 'MiniMax-M2-8K', provider: 'anthropic', contextWindow: 8000, supportsTools: true, supportsStreaming: true },
462
+ { id: 'MiniMax-M2-32k', name: 'MiniMax-M2-32K', provider: 'anthropic', contextWindow: 32000, supportsTools: true, supportsStreaming: true },
463
+ { id: 'MiniMax-M2-128k', name: 'MiniMax-M2-128K', provider: 'anthropic', contextWindow: 128000, supportsTools: true, supportsStreaming: true },
464
+ ];
465
+
466
+ // ============================================================================
467
+ // Factory Function
468
+ // ============================================================================
469
+
470
+ /**
471
+ * Create Anthropic provider instance
472
+ */
473
+ export function createAnthropicProvider(config: AnthropicConfig): AIProvider {
474
+ return new AnthropicProvider(config);
475
+ }