@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
package/src/config.ts CHANGED
@@ -1,297 +1,341 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import os from 'os';
4
- import { Settings, AuthType, ExecutionMode, MCPServerConfig, CheckpointConfig, ThinkingConfig, CompressionConfig, LogLevel } from './types.js';
5
- import { getLogger } from './logger.js';
6
-
7
- const logger = getLogger();
8
-
9
- const DEFAULT_SETTINGS: Settings = {
10
- theme: 'Default',
11
- selectedAuthType: AuthType.OAUTH_XAGENT,
12
- apiKey: '',
13
- // LLM API - for main conversation and task processing (OpenAI compatible format)
14
- baseUrl: 'https://www.xagent-colife.net:3000/v1',
15
- modelName: 'Qwen3-Coder',
16
- // xAgent API - for token validation and other backend calls (without /v1)
17
- xagentApiBaseUrl: 'https://www.xagent-colife.net:3000',
18
- // VLM API - for GUI automation (browser/desktop operations)
19
- guiSubagentModel: 'Qwen3-Coder',
20
- guiSubagentBaseUrl: 'https://www.xagent-colife.net:3000/v3',
21
- guiSubagentApiKey: '',
22
- searchApiKey: '',
23
- skillsPath: '', // Will be auto-detected if not set
24
- workspacePath: '', // Will be auto-detected if not set
25
- executionMode: ExecutionMode.SMART,
26
- approvalMode: ExecutionMode.SMART,
27
- checkpointing: {
28
- enabled: false,
29
- autoCreate: true,
30
- maxCheckpoints: 10
31
- },
32
- thinking: {
33
- enabled: true,
34
- mode: 'normal',
35
- displayMode: 'compact'
36
- },
37
- contextCompression: {
38
- enabled: true,
39
- maxMessages: 30,
40
- maxContextSize: 1500000,
41
- preserveRecentMessages: 0,
42
- enableSummary: true
43
- },
44
- contextFileName: 'XAGENT.md',
45
- mcpServers: {},
46
- mcpToolPreferences: {},
47
- language: 'zh',
48
- autoUpdate: true,
49
- telemetryEnabled: true,
50
- showToolDetails: false,
51
- showAIDebugInfo: false,
52
- loggerLevel: LogLevel.INFO
53
- };
54
-
55
- export class ConfigManager {
56
- private globalConfigPath: string;
57
- private projectConfigPath: string;
58
- private settings: Settings;
59
-
60
- constructor(projectRoot?: string) {
61
- this.globalConfigPath = path.join(os.homedir(), '.xagent', 'settings.json');
62
- this.projectConfigPath = projectRoot
63
- ? path.join(projectRoot, '.xagent', 'settings.json')
64
- : '';
65
- this.settings = { ...DEFAULT_SETTINGS };
66
- }
67
-
68
- async load(): Promise<Settings> {
69
- logger.debug('[CONFIG] ========== load() 开始 ==========');
70
- logger.debug('[CONFIG] globalConfigPath:', this.globalConfigPath);
71
- logger.debug('[CONFIG] projectConfigPath:', this.projectConfigPath);
72
- logger.debug('[CONFIG] 检查文件是否存在...');
73
-
74
- try {
75
- const globalConfig = this.readConfigFile(this.globalConfigPath);
76
- logger.debug('[CONFIG] globalConfig 读取成功:', JSON.stringify(globalConfig, null, 2));
77
-
78
- this.settings = { ...DEFAULT_SETTINGS, ...globalConfig };
79
- logger.debug('[CONFIG] 合并后的 settings:', JSON.stringify(this.settings, null, 2));
80
-
81
- if (this.projectConfigPath) {
82
- const projectConfig = this.readConfigFile(this.projectConfigPath);
83
- logger.debug('[CONFIG] projectConfig 读取成功:', JSON.stringify(projectConfig, null, 2));
84
- this.settings = { ...this.settings, ...projectConfig };
85
- }
86
-
87
- logger.debug('[CONFIG] 最终 settings.apiKey:', this.settings.apiKey ? this.settings.apiKey.substring(0, 30) + '...' : 'empty');
88
- logger.debug('[CONFIG] 最终 settings.refreshToken:', this.settings.refreshToken ? 'exists' : 'empty');
89
- logger.debug('[CONFIG] ========== load() 结束 ==========');
90
-
91
- return this.settings;
92
- } catch (error) {
93
- logger.debug('[CONFIG] load() 捕获到错误:', error instanceof Error ? error.message : String(error));
94
- logger.debug('[CONFIG] ========== load() 结束 (使用默认值) ==========');
95
- return { ...DEFAULT_SETTINGS };
96
- }
97
- }
98
-
99
- async save(scope: 'global' | 'project' = 'global'): Promise<void> {
100
- const configPath = scope === 'global' ? this.globalConfigPath : this.projectConfigPath;
101
- if (!configPath) {
102
- throw new Error('Project config path not set');
103
- }
104
-
105
- const configDir = path.dirname(configPath);
106
- fs.mkdirSync(configDir, { recursive: true });
107
-
108
- const configToSave = scope === 'global'
109
- ? this.settings
110
- : { mcpServers: this.settings.mcpServers };
111
-
112
- fs.writeFileSync(
113
- configPath,
114
- JSON.stringify(configToSave, null, 2),
115
- 'utf-8'
116
- );
117
- }
118
-
119
- get<K extends keyof Settings>(key: K): Settings[K] {
120
- return this.settings[key];
121
- }
122
-
123
- set<K extends keyof Settings>(key: K, value: Settings[K]): void {
124
- this.settings[key] = value;
125
- }
126
-
127
- getAuthConfig() {
128
- const result = {
129
- type: this.settings.selectedAuthType,
130
- apiKey: this.settings.apiKey,
131
- refreshToken: this.settings.refreshToken,
132
- baseUrl: this.settings.baseUrl,
133
- xagentApiBaseUrl: this.settings.xagentApiBaseUrl,
134
- modelName: this.settings.modelName,
135
- searchApiKey: this.settings.searchApiKey,
136
- showAIDebugInfo: this.settings.showAIDebugInfo
137
- };
138
-
139
- logger.debug('[CONFIG] getAuthConfig() 返回:');
140
- logger.debug(' - type:', result.type);
141
- logger.debug(' - apiKey:', result.apiKey ? result.apiKey.substring(0, 30) + '...' : 'empty');
142
- logger.debug(' - refreshToken:', result.refreshToken ? 'exists' : 'empty');
143
- logger.debug(' - baseUrl:', result.baseUrl);
144
- logger.debug(' - xagentApiBaseUrl:', result.xagentApiBaseUrl);
145
-
146
- return result;
147
- }
148
-
149
- async setAuthConfig(config: Partial<Settings> & { xagentApiBaseUrl?: string }): Promise<void> {
150
- // Extract xagentApiBaseUrl separately since it's not in Settings
151
- const { xagentApiBaseUrl, type, ...otherConfig } = config as any;
152
-
153
- // Map 'type' to 'selectedAuthType' (AuthConfig uses 'type', Settings uses 'selectedAuthType')
154
- if (type !== undefined) {
155
- this.settings.selectedAuthType = type;
156
- }
157
-
158
- Object.assign(this.settings, otherConfig);
159
- if (xagentApiBaseUrl !== undefined) {
160
- this.settings.xagentApiBaseUrl = xagentApiBaseUrl;
161
- }
162
- await this.save('global');
163
- }
164
-
165
- getExecutionMode(): ExecutionMode {
166
- return this.settings.executionMode;
167
- }
168
-
169
- setExecutionMode(mode: ExecutionMode): void {
170
- this.settings.executionMode = mode;
171
- }
172
-
173
- getApprovalMode(): ExecutionMode {
174
- return this.settings.approvalMode || ExecutionMode.DEFAULT;
175
- }
176
-
177
- setApprovalMode(mode: ExecutionMode): void {
178
- this.settings.approvalMode = mode;
179
- }
180
-
181
- getMcpServers(): Record<string, MCPServerConfig> {
182
- return this.settings.mcpServers;
183
- }
184
-
185
- addMcpServer(name: string, config: MCPServerConfig): void {
186
- this.settings.mcpServers[name] = config;
187
- }
188
-
189
- removeMcpServer(name: string): void {
190
- delete this.settings.mcpServers[name];
191
- }
192
-
193
- getCheckpointingConfig(): CheckpointConfig {
194
- return this.settings.checkpointing;
195
- }
196
-
197
- setCheckpointingConfig(config: Partial<CheckpointConfig>): void {
198
- this.settings.checkpointing = { ...this.settings.checkpointing, ...config };
199
- }
200
-
201
- getThinkingConfig(): ThinkingConfig {
202
- return this.settings.thinking;
203
- }
204
-
205
- setThinkingConfig(config: Partial<ThinkingConfig>): void {
206
- this.settings.thinking = { ...this.settings.thinking, ...config };
207
- }
208
-
209
- getContextCompressionConfig(): CompressionConfig {
210
- return this.settings.contextCompression;
211
- }
212
-
213
- setContextCompressionConfig(config: Partial<CompressionConfig>): void {
214
- this.settings.contextCompression = { ...this.settings.contextCompression, ...config };
215
- }
216
-
217
- getContextFileName(): string | string[] {
218
- return this.settings.contextFileName;
219
- }
220
-
221
- getLanguage(): 'zh' | 'en' {
222
- return this.settings.language;
223
- }
224
-
225
- setLanguage(language: 'zh' | 'en'): void {
226
- this.settings.language = language;
227
- }
228
-
229
- getLoggerLevel(): LogLevel {
230
- return this.settings.loggerLevel;
231
- }
232
-
233
- setLoggerLevel(level: LogLevel): void {
234
- this.settings.loggerLevel = level;
235
- }
236
-
237
- getSkillsPath(): string | undefined {
238
- return this.settings.skillsPath;
239
- }
240
-
241
- setSkillsPath(path: string): void {
242
- this.settings.skillsPath = path;
243
- }
244
-
245
- private readConfigFile(filePath: string): Partial<Settings> {
246
- try {
247
- const content = fs.readFileSync(filePath, 'utf-8');
248
- return JSON.parse(content);
249
- } catch (error) {
250
- if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {
251
- logger.error(`Error reading config file ${filePath}`, 'Check file permissions and format');
252
- }
253
- return {};
254
- }
255
- }
256
-
257
- getWorkspacePath(): string | undefined {
258
- if (this.settings.workspacePath) {
259
- return this.settings.workspacePath;
260
- }
261
- // Auto-detect: ~/.xagent/workspace
262
- const detectedPath = path.join(os.homedir(), '.xagent', 'workspace');
263
-
264
- // Ensure directory exists
265
- try {
266
- if (!fs.existsSync(detectedPath)) {
267
- fs.mkdirSync(detectedPath, { recursive: true });
268
- }
269
- } catch {
270
- // Ignore errors - caller will handle missing path
271
- }
272
-
273
- return detectedPath;
274
- }
275
-
276
- setWorkspacePath(path: string): void {
277
- this.settings.workspacePath = path;
278
- }
279
-
280
- getSettings(): Settings | undefined {
281
- return this.settings;
282
- }
283
-
284
- async resetToDefaults(): Promise<void> {
285
- this.settings = { ...DEFAULT_SETTINGS };
286
- await this.save('global');
287
- }
288
- }
289
-
290
- let configManagerInstance: ConfigManager | null = null;
291
-
292
- export function getConfigManager(projectRoot?: string): ConfigManager {
293
- if (!configManagerInstance) {
294
- configManagerInstance = new ConfigManager(projectRoot);
295
- }
296
- return configManagerInstance;
297
- }
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { Settings, AuthType, ExecutionMode, MCPServerConfig, CheckpointConfig, ThinkingConfig, CompressionConfig, LogLevel } from './types.js';
5
+ import { getLogger } from './logger.js';
6
+
7
+ const logger = getLogger();
8
+
9
+ // Environment variable support for backend URL configuration
10
+ // Set these to use local development server instead of cloud
11
+ const CLOUD_BASE_URL = 'https://www.xagent-colife.net';
12
+ const _LOCAL_BASE_URL = process.env.XAGENT_BASE_URL || CLOUD_BASE_URL;
13
+
14
+ const DEFAULT_SETTINGS: Settings = {
15
+ theme: 'Default',
16
+ selectedAuthType: AuthType.OAUTH_XAGENT,
17
+ apiKey: '',
18
+ // LLM API - for main conversation and task processing (OpenAI compatible format)
19
+ baseUrl: `${CLOUD_BASE_URL}/v1`,
20
+ modelName: 'Qwen3-Coder',
21
+ // xAgent API - for token validation and other backend calls (without /v1)
22
+ xagentApiBaseUrl: '',
23
+ // VLM API - for GUI automation (browser/desktop operations)
24
+ // NOTE: guiSubagent* fields are only set when user runs /model command
25
+ guiSubagentModel: '',
26
+ guiSubagentBaseUrl: '',
27
+ guiSubagentApiKey: '',
28
+ searchApiKey: '',
29
+ skillsPath: '', // Will be auto-detected if not set
30
+ userSkillsPath: '', // Will be auto-detected to ~/.xagent/skills if not set
31
+ userNodeModulesPath: '', // Will be auto-detected to ~/.xagent/node_modules if not set
32
+ workspacePath: '', // Will be auto-detected if not set
33
+ executionMode: ExecutionMode.SMART,
34
+ approvalMode: ExecutionMode.SMART,
35
+ checkpointing: {
36
+ enabled: false,
37
+ autoCreate: true,
38
+ maxCheckpoints: 10
39
+ },
40
+ thinking: {
41
+ enabled: true,
42
+ mode: 'normal',
43
+ displayMode: 'compact'
44
+ },
45
+ contextCompression: {
46
+ enabled: true
47
+ },
48
+ contextFileName: 'XAGENT.md',
49
+ mcpServers: {},
50
+ mcpToolPreferences: {},
51
+ language: 'zh',
52
+ autoUpdate: true,
53
+ telemetryEnabled: true,
54
+ showToolDetails: false,
55
+ showAIDebugInfo: false,
56
+ loggerLevel: LogLevel.INFO,
57
+ remote_llmModelName: '', // Remote mode LLM Model Name
58
+ remote_vlmModelName: '' // Remote mode VLM Model Name
59
+ };
60
+
61
+ export class ConfigManager {
62
+ private globalConfigPath: string;
63
+ private projectConfigPath: string;
64
+ private settings: Settings;
65
+
66
+ constructor(projectRoot?: string) {
67
+ this.globalConfigPath = path.join(os.homedir(), '.xagent', 'settings.json');
68
+ this.projectConfigPath = projectRoot
69
+ ? path.join(projectRoot, '.xagent', 'settings.json')
70
+ : '';
71
+ this.settings = { ...DEFAULT_SETTINGS };
72
+ }
73
+
74
+ load(): Settings {
75
+ logger.debug('[CONFIG] ========== load() 开始 ==========');
76
+ logger.debug('[CONFIG] globalConfigPath:', this.globalConfigPath);
77
+ logger.debug('[CONFIG] projectConfigPath:', this.projectConfigPath);
78
+ logger.debug('[CONFIG] 检查文件是否存在...');
79
+
80
+ try {
81
+ const globalConfig = this.readConfigFile(this.globalConfigPath);
82
+ logger.debug('[CONFIG] globalConfig 读取成功:', JSON.stringify(globalConfig, null, 2));
83
+
84
+ this.settings = { ...DEFAULT_SETTINGS, ...globalConfig };
85
+ logger.debug('[CONFIG] 合并后的 settings:', JSON.stringify(this.settings, null, 2));
86
+
87
+ if (this.projectConfigPath) {
88
+ const projectConfig = this.readConfigFile(this.projectConfigPath);
89
+ logger.debug('[CONFIG] projectConfig 读取成功:', JSON.stringify(projectConfig, null, 2));
90
+ this.settings = { ...this.settings, ...projectConfig };
91
+ }
92
+
93
+ // Removed: logging sensitive information (apiKey, refreshToken)
94
+
95
+ // Apply environment variables AFTER loading saved config
96
+ // Only apply for remote mode (OAuth XAGENT) - local mode should use user-saved config
97
+ if (process.env.XAGENT_BASE_URL && this.settings.selectedAuthType === AuthType.OAUTH_XAGENT) {
98
+ const localBaseUrl = process.env.XAGENT_BASE_URL;
99
+ this.settings.baseUrl = `${localBaseUrl}/v1`;
100
+ this.settings.xagentApiBaseUrl = localBaseUrl;
101
+ logger.debug('[CONFIG] Applied XAGENT_BASE_URL for remote mode:', localBaseUrl);
102
+ }
103
+ if (process.env.XAGENT_GUI_BASE_URL) {
104
+ this.settings.guiSubagentBaseUrl = `${process.env.XAGENT_GUI_BASE_URL}/v3`;
105
+ logger.debug('[CONFIG] Applied XAGENT_GUI_BASE_URL:', process.env.XAGENT_GUI_BASE_URL);
106
+ }
107
+
108
+ logger.debug('[CONFIG] ========== load() 结束 ==========');
109
+
110
+ return this.settings;
111
+ } catch (error) {
112
+ logger.debug('[CONFIG] load() 捕获到错误:', error instanceof Error ? error.message : String(error));
113
+ logger.debug('[CONFIG] ========== load() 结束 (使用默认值) ==========');
114
+ return { ...DEFAULT_SETTINGS };
115
+ }
116
+ }
117
+
118
+ save(scope: 'global' | 'project' = 'global'): void {
119
+ const configPath = scope === 'global' ? this.globalConfigPath : this.projectConfigPath;
120
+ if (!configPath) {
121
+ throw new Error('Project config path not set');
122
+ }
123
+
124
+ const configDir = path.dirname(configPath);
125
+ fs.mkdirSync(configDir, { recursive: true });
126
+
127
+ const configToSave = scope === 'global'
128
+ ? this.settings
129
+ : { mcpServers: this.settings.mcpServers };
130
+
131
+ fs.writeFileSync(
132
+ configPath,
133
+ JSON.stringify(configToSave, null, 2),
134
+ { mode: 0o600, encoding: 'utf-8' }
135
+ );
136
+ }
137
+
138
+ get<K extends keyof Settings>(key: K): Settings[K] {
139
+ return this.settings[key];
140
+ }
141
+
142
+ set<K extends keyof Settings>(key: K, value: Settings[K]): void {
143
+ this.settings[key] = value;
144
+ }
145
+
146
+ getAuthConfig() {
147
+ const result = {
148
+ type: this.settings.selectedAuthType,
149
+ apiKey: this.settings.apiKey,
150
+ refreshToken: this.settings.refreshToken,
151
+ baseUrl: this.settings.baseUrl,
152
+ xagentApiBaseUrl: this.settings.xagentApiBaseUrl,
153
+ modelName: this.settings.modelName,
154
+ searchApiKey: this.settings.searchApiKey,
155
+ showAIDebugInfo: this.settings.showAIDebugInfo,
156
+ remote_llmModelName: this.settings.remote_llmModelName || '',
157
+ remote_vlmModelName: this.settings.remote_vlmModelName || ''
158
+ };
159
+
160
+ logger.debug('[CONFIG] getAuthConfig() 返回:');
161
+ logger.debug(' - type:', result.type);
162
+ // Removed: logging sensitive information (apiKey, refreshToken)
163
+ logger.debug(' - baseUrl:', result.baseUrl);
164
+ logger.debug(' - xagentApiBaseUrl:', result.xagentApiBaseUrl);
165
+ logger.debug(`[CONFIG] this.settings.remote_llmModelName=${this.settings.remote_llmModelName}, result.remote_llmModelName=${result.remote_llmModelName}`);
166
+ logger.debug(`[CONFIG] this.settings.remote_vlmModelName=${this.settings.remote_vlmModelName}, result.remote_vlmModelName=${result.remote_vlmModelName}`);
167
+
168
+ return result;
169
+ }
170
+
171
+ setAuthConfig(config: Partial<Settings> & { xagentApiBaseUrl?: string }): void {
172
+ const { xagentApiBaseUrl, type, ...otherConfig } = config as any;
173
+
174
+ if (type !== undefined) {
175
+ this.settings.selectedAuthType = type;
176
+ }
177
+
178
+ Object.assign(this.settings, otherConfig);
179
+ if (xagentApiBaseUrl !== undefined) {
180
+ this.settings.xagentApiBaseUrl = xagentApiBaseUrl;
181
+ }
182
+ this.save('global');
183
+ }
184
+
185
+ getExecutionMode(): ExecutionMode {
186
+ return this.settings.executionMode;
187
+ }
188
+
189
+ setExecutionMode(mode: ExecutionMode): void {
190
+ this.settings.executionMode = mode;
191
+ }
192
+
193
+ getApprovalMode(): ExecutionMode {
194
+ return this.settings.approvalMode || ExecutionMode.DEFAULT;
195
+ }
196
+
197
+ setApprovalMode(mode: ExecutionMode): void {
198
+ this.settings.approvalMode = mode;
199
+ }
200
+
201
+ getMcpServers(): Record<string, MCPServerConfig> {
202
+ return this.settings.mcpServers;
203
+ }
204
+
205
+ addMcpServer(name: string, config: MCPServerConfig): void {
206
+ this.settings.mcpServers[name] = config;
207
+ }
208
+
209
+ removeMcpServer(name: string): void {
210
+ delete this.settings.mcpServers[name];
211
+ }
212
+
213
+ getCheckpointingConfig(): CheckpointConfig {
214
+ return this.settings.checkpointing;
215
+ }
216
+
217
+ setCheckpointingConfig(config: Partial<CheckpointConfig>): void {
218
+ this.settings.checkpointing = { ...this.settings.checkpointing, ...config };
219
+ }
220
+
221
+ getThinkingConfig(): ThinkingConfig {
222
+ return this.settings.thinking;
223
+ }
224
+
225
+ setThinkingConfig(config: Partial<ThinkingConfig>): void {
226
+ this.settings.thinking = { ...this.settings.thinking, ...config };
227
+ }
228
+
229
+ getContextCompressionConfig(): CompressionConfig {
230
+ return this.settings.contextCompression;
231
+ }
232
+
233
+ setContextCompressionConfig(config: Partial<CompressionConfig>): void {
234
+ this.settings.contextCompression = { ...this.settings.contextCompression, ...config };
235
+ }
236
+
237
+ getContextFileName(): string | string[] {
238
+ return this.settings.contextFileName;
239
+ }
240
+
241
+ getLanguage(): 'zh' | 'en' {
242
+ return this.settings.language;
243
+ }
244
+
245
+ setLanguage(language: 'zh' | 'en'): void {
246
+ this.settings.language = language;
247
+ }
248
+
249
+ getLoggerLevel(): LogLevel {
250
+ return this.settings.loggerLevel;
251
+ }
252
+
253
+ setLoggerLevel(level: LogLevel): void {
254
+ this.settings.loggerLevel = level;
255
+ }
256
+
257
+ getSkillsPath(): string | undefined {
258
+ return this.settings.skillsPath;
259
+ }
260
+
261
+ setSkillsPath(path: string): void {
262
+ this.settings.skillsPath = path;
263
+ }
264
+
265
+ getUserSkillsPath(): string | undefined {
266
+ if (this.settings.userSkillsPath) {
267
+ return this.settings.userSkillsPath;
268
+ }
269
+ // Auto-detect: ~/.xagent/skills
270
+ return path.join(os.homedir(), '.xagent', 'skills');
271
+ }
272
+
273
+ setUserSkillsPath(path: string): void {
274
+ this.settings.userSkillsPath = path;
275
+ }
276
+
277
+ getUserNodeModulesPath(): string | undefined {
278
+ if (this.settings.userNodeModulesPath) {
279
+ return this.settings.userNodeModulesPath;
280
+ }
281
+ // Auto-detect: ~/.xagent/node_modules
282
+ return path.join(os.homedir(), '.xagent', 'node_modules');
283
+ }
284
+
285
+ setUserNodeModulesPath(path: string): void {
286
+ this.settings.userNodeModulesPath = path;
287
+ }
288
+
289
+ private readConfigFile(filePath: string): Partial<Settings> {
290
+ try {
291
+ const content = fs.readFileSync(filePath, 'utf-8');
292
+ return JSON.parse(content);
293
+ } catch (error) {
294
+ if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {
295
+ logger.error(`Error reading config file ${filePath}: ${error instanceof Error ? error.message : String(error)}`, 'Check file permissions and format');
296
+ }
297
+ return {};
298
+ }
299
+ }
300
+
301
+ getWorkspacePath(): string | undefined {
302
+ if (this.settings.workspacePath) {
303
+ return this.settings.workspacePath;
304
+ }
305
+ // Auto-detect: ~/.xagent/workspace
306
+ const detectedPath = path.join(os.homedir(), '.xagent', 'workspace');
307
+
308
+ // Ensure directory exists
309
+ try {
310
+ if (!fs.existsSync(detectedPath)) {
311
+ fs.mkdirSync(detectedPath, { recursive: true });
312
+ }
313
+ } catch {
314
+ // Ignore errors - caller will handle missing path
315
+ }
316
+
317
+ return detectedPath;
318
+ }
319
+
320
+ setWorkspacePath(path: string): void {
321
+ this.settings.workspacePath = path;
322
+ }
323
+
324
+ getSettings(): Settings | undefined {
325
+ return this.settings;
326
+ }
327
+
328
+ resetToDefaults(): void {
329
+ this.settings = { ...DEFAULT_SETTINGS };
330
+ this.save('global');
331
+ }
332
+ }
333
+
334
+ let configManagerInstance: ConfigManager | null = null;
335
+
336
+ export function getConfigManager(projectRoot?: string): ConfigManager {
337
+ if (!configManagerInstance) {
338
+ configManagerInstance = new ConfigManager(projectRoot);
339
+ }
340
+ return configManagerInstance;
341
+ }