@xagent-ai/cli 1.2.2 → 1.3.0

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 (568) 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/workflows/ci.yml +72 -0
  4. package/.github/workflows/release.yml +109 -0
  5. package/.gitmodules +3 -3
  6. package/README.md +326 -280
  7. package/README_CN.md +325 -279
  8. package/dist/ai-client/factory.d.ts +52 -0
  9. package/dist/ai-client/factory.d.ts.map +1 -0
  10. package/dist/ai-client/factory.js +132 -0
  11. package/dist/ai-client/factory.js.map +1 -0
  12. package/dist/ai-client/index.d.ts +20 -0
  13. package/dist/ai-client/index.d.ts.map +1 -0
  14. package/dist/ai-client/index.js +49 -0
  15. package/dist/ai-client/index.js.map +1 -0
  16. package/dist/ai-client/providers/anthropic.d.ts +57 -0
  17. package/dist/ai-client/providers/anthropic.d.ts.map +1 -0
  18. package/dist/ai-client/providers/anthropic.js +400 -0
  19. package/dist/ai-client/providers/anthropic.js.map +1 -0
  20. package/dist/ai-client/providers/openai.d.ts +57 -0
  21. package/dist/ai-client/providers/openai.d.ts.map +1 -0
  22. package/dist/ai-client/providers/openai.js +286 -0
  23. package/dist/ai-client/providers/openai.js.map +1 -0
  24. package/dist/ai-client/providers/remote.d.ts +111 -0
  25. package/dist/ai-client/providers/remote.d.ts.map +1 -0
  26. package/dist/ai-client/providers/remote.js +351 -0
  27. package/dist/ai-client/providers/remote.js.map +1 -0
  28. package/dist/ai-client/registry.d.ts +51 -0
  29. package/dist/ai-client/registry.d.ts.map +1 -0
  30. package/dist/ai-client/registry.js +81 -0
  31. package/dist/ai-client/registry.js.map +1 -0
  32. package/dist/ai-client/types.d.ts +260 -0
  33. package/dist/ai-client/types.d.ts.map +1 -0
  34. package/dist/ai-client/types.js +73 -0
  35. package/dist/ai-client/types.js.map +1 -0
  36. package/dist/ai-client-factory.d.ts +62 -0
  37. package/dist/ai-client-factory.d.ts.map +1 -0
  38. package/dist/ai-client-factory.js +157 -0
  39. package/dist/ai-client-factory.js.map +1 -0
  40. package/dist/auth.d.ts +23 -1
  41. package/dist/auth.d.ts.map +1 -1
  42. package/dist/auth.js +160 -168
  43. package/dist/auth.js.map +1 -1
  44. package/dist/cancellation.d.ts +5 -4
  45. package/dist/cancellation.d.ts.map +1 -1
  46. package/dist/cancellation.js +55 -32
  47. package/dist/cancellation.js.map +1 -1
  48. package/dist/checkpoint.d.ts +1 -1
  49. package/dist/checkpoint.d.ts.map +1 -1
  50. package/dist/checkpoint.js +2 -2
  51. package/dist/checkpoint.js.map +1 -1
  52. package/dist/cli.js +626 -13
  53. package/dist/cli.js.map +1 -1
  54. package/dist/config.d.ts +10 -4
  55. package/dist/config.d.ts.map +1 -1
  56. package/dist/config.js +62 -25
  57. package/dist/config.js.map +1 -1
  58. package/dist/context-compressor.d.ts +81 -16
  59. package/dist/context-compressor.d.ts.map +1 -1
  60. package/dist/context-compressor.js +712 -153
  61. package/dist/context-compressor.js.map +1 -1
  62. package/dist/gui-subagent/action-parser/actionParser.d.ts.map +1 -1
  63. package/dist/gui-subagent/action-parser/actionParser.js +4 -2
  64. package/dist/gui-subagent/action-parser/actionParser.js.map +1 -1
  65. package/dist/gui-subagent/agent/gui-agent.d.ts +29 -2
  66. package/dist/gui-subagent/agent/gui-agent.d.ts.map +1 -1
  67. package/dist/gui-subagent/agent/gui-agent.js +87 -45
  68. package/dist/gui-subagent/agent/gui-agent.js.map +1 -1
  69. package/dist/gui-subagent/index.d.ts +16 -1
  70. package/dist/gui-subagent/index.d.ts.map +1 -1
  71. package/dist/gui-subagent/index.js +4 -0
  72. package/dist/gui-subagent/index.js.map +1 -1
  73. package/dist/gui-subagent/operator/base-operator.d.ts.map +1 -1
  74. package/dist/gui-subagent/operator/base-operator.js +0 -1
  75. package/dist/gui-subagent/operator/base-operator.js.map +1 -1
  76. package/dist/gui-subagent/operator/computer-operator.d.ts.map +1 -1
  77. package/dist/gui-subagent/operator/computer-operator.js +29 -8
  78. package/dist/gui-subagent/operator/computer-operator.js.map +1 -1
  79. package/dist/gui-subagent/types/actions.d.ts +1 -1
  80. package/dist/gui-subagent/types/actions.d.ts.map +1 -1
  81. package/dist/gui-subagent/types/actions.js +0 -1
  82. package/dist/gui-subagent/types/actions.js.map +1 -1
  83. package/dist/gui-subagent/types/operator.d.ts +1 -1
  84. package/dist/gui-subagent/types/operator.d.ts.map +1 -1
  85. package/dist/index.d.ts +1 -2
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +1 -2
  88. package/dist/index.js.map +1 -1
  89. package/dist/input-processor.d.ts.map +1 -1
  90. package/dist/input-processor.js +6 -3
  91. package/dist/input-processor.js.map +1 -1
  92. package/dist/mcp.d.ts +5 -0
  93. package/dist/mcp.d.ts.map +1 -1
  94. package/dist/mcp.js +81 -35
  95. package/dist/mcp.js.map +1 -1
  96. package/dist/ripgrep.d.ts +29 -0
  97. package/dist/ripgrep.d.ts.map +1 -0
  98. package/dist/ripgrep.js +292 -0
  99. package/dist/ripgrep.js.map +1 -0
  100. package/dist/session.d.ts +23 -7
  101. package/dist/session.d.ts.map +1 -1
  102. package/dist/session.js +624 -243
  103. package/dist/session.js.map +1 -1
  104. package/dist/shell.d.ts +33 -0
  105. package/dist/shell.d.ts.map +1 -0
  106. package/dist/shell.js +125 -0
  107. package/dist/shell.js.map +1 -0
  108. package/dist/skill-installer.d.ts +38 -0
  109. package/dist/skill-installer.d.ts.map +1 -0
  110. package/dist/skill-installer.js +447 -0
  111. package/dist/skill-installer.js.map +1 -0
  112. package/dist/skill-invoker.d.ts +7 -1
  113. package/dist/skill-invoker.d.ts.map +1 -1
  114. package/dist/skill-invoker.js +34 -13
  115. package/dist/skill-invoker.js.map +1 -1
  116. package/dist/skill-loader.d.ts +8 -3
  117. package/dist/skill-loader.d.ts.map +1 -1
  118. package/dist/skill-loader.js +46 -44
  119. package/dist/skill-loader.js.map +1 -1
  120. package/dist/skill-manager.d.ts +85 -0
  121. package/dist/skill-manager.d.ts.map +1 -0
  122. package/dist/skill-manager.js +340 -0
  123. package/dist/skill-manager.js.map +1 -0
  124. package/dist/slash-commands.d.ts +38 -1
  125. package/dist/slash-commands.d.ts.map +1 -1
  126. package/dist/slash-commands.js +912 -296
  127. package/dist/slash-commands.js.map +1 -1
  128. package/dist/smart-approval.d.ts.map +1 -1
  129. package/dist/smart-approval.js +67 -55
  130. package/dist/smart-approval.js.map +1 -1
  131. package/dist/system-prompt-generator.d.ts +6 -0
  132. package/dist/system-prompt-generator.d.ts.map +1 -1
  133. package/dist/system-prompt-generator.js +84 -34
  134. package/dist/system-prompt-generator.js.map +1 -1
  135. package/dist/terminal.d.ts +28 -0
  136. package/dist/terminal.d.ts.map +1 -0
  137. package/dist/terminal.js +82 -0
  138. package/dist/terminal.js.map +1 -0
  139. package/dist/tools.d.ts +23 -7
  140. package/dist/tools.d.ts.map +1 -1
  141. package/dist/tools.js +797 -437
  142. package/dist/tools.js.map +1 -1
  143. package/dist/truncate.d.ts +55 -0
  144. package/dist/truncate.d.ts.map +1 -0
  145. package/dist/truncate.js +130 -0
  146. package/dist/truncate.js.map +1 -0
  147. package/dist/types.d.ts +27 -9
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/update.d.ts.map +1 -1
  150. package/dist/update.js +17 -28
  151. package/dist/update.js.map +1 -1
  152. package/dist/workflow.d.ts +5 -1
  153. package/dist/workflow.d.ts.map +1 -1
  154. package/dist/workflow.js +60 -47
  155. package/dist/workflow.js.map +1 -1
  156. package/docs/architecture/mcp-integration-guide.md +304 -194
  157. package/docs/architecture/overview.md +169 -169
  158. package/docs/architecture/tool-system-design.md +134 -134
  159. package/docs/cli/commands.md +349 -238
  160. package/docs/smart-mode.md +281 -281
  161. package/docs/third-party-models.md +439 -439
  162. package/find-skills/SKILL.md +133 -0
  163. package/package.json +89 -90
  164. package/scripts/install-ripgrep.js +241 -0
  165. package/src/ai-client/factory.ts +151 -0
  166. package/src/ai-client/index.ts +61 -0
  167. package/src/ai-client/providers/anthropic.ts +466 -0
  168. package/src/ai-client/providers/openai.ts +342 -0
  169. package/src/ai-client/providers/remote.ts +436 -0
  170. package/src/ai-client/registry.ts +97 -0
  171. package/src/ai-client/types.ts +345 -0
  172. package/src/ai-client-factory.ts +204 -0
  173. package/src/auth.ts +663 -614
  174. package/src/cancellation.ts +205 -176
  175. package/src/checkpoint.ts +219 -219
  176. package/src/cli.ts +1406 -743
  177. package/src/config.ts +341 -297
  178. package/src/context-compressor.ts +982 -290
  179. package/src/conversation.ts +288 -288
  180. package/src/gui-subagent/action-parser/actionParser.ts +318 -315
  181. package/src/gui-subagent/action-parser/constants.ts +14 -14
  182. package/src/gui-subagent/action-parser/index.ts +8 -8
  183. package/src/gui-subagent/action-parser/types.ts +31 -31
  184. package/src/gui-subagent/agent/gui-agent.ts +1151 -1089
  185. package/src/gui-subagent/agent/index.ts +5 -5
  186. package/src/gui-subagent/index.ts +177 -163
  187. package/src/gui-subagent/operator/base-operator.ts +244 -245
  188. package/src/gui-subagent/operator/computer-operator.ts +540 -520
  189. package/src/gui-subagent/operator/index.ts +6 -6
  190. package/src/gui-subagent/types/actions.ts +260 -262
  191. package/src/gui-subagent/types/index.ts +6 -6
  192. package/src/gui-subagent/types/operator.ts +106 -106
  193. package/src/gui-subagent/utils.ts +51 -51
  194. package/src/index.ts +17 -18
  195. package/src/input-processor.ts +6 -3
  196. package/src/logger.ts +438 -438
  197. package/src/mcp.ts +730 -682
  198. package/src/memory.ts +344 -344
  199. package/src/ripgrep.ts +368 -0
  200. package/src/session-manager.ts +308 -308
  201. package/src/session.ts +948 -386
  202. package/src/shell.ts +133 -0
  203. package/src/skill-installer.ts +518 -0
  204. package/src/skill-invoker.ts +960 -935
  205. package/src/skill-loader.ts +501 -496
  206. package/src/skill-manager.ts +384 -0
  207. package/src/slash-commands.ts +2181 -1389
  208. package/src/smart-approval.ts +117 -73
  209. package/src/system-prompt-generator.ts +89 -34
  210. package/src/terminal.ts +96 -0
  211. package/src/theme.ts +738 -738
  212. package/src/tools.ts +1336 -773
  213. package/src/truncate.ts +173 -0
  214. package/src/types.ts +219 -198
  215. package/src/update.ts +22 -32
  216. package/src/workflow.ts +523 -508
  217. package/tsconfig.json +22 -22
  218. package/vitest.config.ts +19 -19
  219. package/dist/ai-client.d.ts +0 -86
  220. package/dist/ai-client.d.ts.map +0 -1
  221. package/dist/ai-client.js +0 -1372
  222. package/dist/ai-client.js.map +0 -1
  223. package/dist/gui-subagent/operator/browser-operator.d.ts +0 -36
  224. package/dist/gui-subagent/operator/browser-operator.d.ts.map +0 -1
  225. package/dist/gui-subagent/operator/browser-operator.js +0 -306
  226. package/dist/gui-subagent/operator/browser-operator.js.map +0 -1
  227. package/dist/gui-subagent/operator/desktop-operator.d.ts +0 -55
  228. package/dist/gui-subagent/operator/desktop-operator.d.ts.map +0 -1
  229. package/dist/gui-subagent/operator/desktop-operator.js +0 -527
  230. package/dist/gui-subagent/operator/desktop-operator.js.map +0 -1
  231. package/dist/hook.d.ts +0 -73
  232. package/dist/hook.d.ts.map +0 -1
  233. package/dist/hook.js +0 -156
  234. package/dist/hook.js.map +0 -1
  235. package/dist/input-history.d.ts +0 -24
  236. package/dist/input-history.d.ts.map +0 -1
  237. package/dist/input-history.js +0 -94
  238. package/dist/input-history.js.map +0 -1
  239. package/dist/keyboard-manager.d.ts +0 -151
  240. package/dist/keyboard-manager.d.ts.map +0 -1
  241. package/dist/keyboard-manager.js +0 -396
  242. package/dist/keyboard-manager.js.map +0 -1
  243. package/dist/print-system-prompt.d.ts +0 -2
  244. package/dist/print-system-prompt.d.ts.map +0 -1
  245. package/dist/print-system-prompt.js +0 -40
  246. package/dist/print-system-prompt.js.map +0 -1
  247. package/dist/remote-ai-client.d.ts +0 -104
  248. package/dist/remote-ai-client.d.ts.map +0 -1
  249. package/dist/remote-ai-client.js +0 -552
  250. package/dist/remote-ai-client.js.map +0 -1
  251. package/dist/sdk-output-adapter.d.ts +0 -232
  252. package/dist/sdk-output-adapter.d.ts.map +0 -1
  253. package/dist/sdk-output-adapter.js +0 -636
  254. package/dist/sdk-output-adapter.js.map +0 -1
  255. package/dist/sdk-session-v2.d.ts +0 -13
  256. package/dist/sdk-session-v2.d.ts.map +0 -1
  257. package/dist/sdk-session-v2.js +0 -46
  258. package/dist/sdk-session-v2.js.map +0 -1
  259. package/dist/sdk-session.d.ts +0 -13
  260. package/dist/sdk-session.d.ts.map +0 -1
  261. package/dist/sdk-session.js +0 -48
  262. package/dist/sdk-session.js.map +0 -1
  263. package/dist/test-boundary-conditions.d.ts.map +0 -1
  264. package/dist/test-boundary-conditions.js.map +0 -1
  265. package/dist/test-cancellation-fix.d.ts.map +0 -1
  266. package/dist/test-cancellation-fix.js.map +0 -1
  267. package/dist/test-input-history.d.ts.map +0 -1
  268. package/dist/test-input-history.js.map +0 -1
  269. package/dist/test-interaction-flow.d.ts.map +0 -1
  270. package/dist/test-interaction-flow.js.map +0 -1
  271. package/dist/test-quick.d.ts.map +0 -1
  272. package/dist/test-quick.js.map +0 -1
  273. package/dist/test-user-interaction.d.ts.map +0 -1
  274. package/dist/test-user-interaction.js.map +0 -1
  275. package/dist/tools/edit-diff.d.ts +0 -32
  276. package/dist/tools/edit-diff.d.ts.map +0 -1
  277. package/dist/tools/edit-diff.js +0 -185
  278. package/dist/tools/edit-diff.js.map +0 -1
  279. package/dist/tools/edit.d.ts +0 -11
  280. package/dist/tools/edit.d.ts.map +0 -1
  281. package/dist/tools/edit.js +0 -129
  282. package/dist/tools/edit.js.map +0 -1
  283. package/dist/unified-session.d.ts +0 -42
  284. package/dist/unified-session.d.ts.map +0 -1
  285. package/dist/unified-session.js +0 -271
  286. package/dist/unified-session.js.map +0 -1
  287. package/skills/.claude-plugin/marketplace.json +0 -45
  288. package/skills/README.md +0 -94
  289. package/skills/THIRD_PARTY_NOTICES.md +0 -405
  290. package/skills/skills/algorithmic-art/LICENSE.txt +0 -202
  291. package/skills/skills/algorithmic-art/SKILL.md +0 -405
  292. package/skills/skills/algorithmic-art/templates/generator_template.js +0 -223
  293. package/skills/skills/algorithmic-art/templates/viewer.html +0 -599
  294. package/skills/skills/brand-guidelines/LICENSE.txt +0 -202
  295. package/skills/skills/brand-guidelines/SKILL.md +0 -73
  296. package/skills/skills/canvas-design/LICENSE.txt +0 -202
  297. package/skills/skills/canvas-design/SKILL.md +0 -130
  298. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  299. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  300. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  301. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  302. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  303. package/skills/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  304. package/skills/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  305. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  306. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  307. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  308. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  309. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  310. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  311. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  312. package/skills/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  313. package/skills/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  314. package/skills/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  315. package/skills/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  316. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  317. package/skills/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  318. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  319. package/skills/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  320. package/skills/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  321. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  322. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  323. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  324. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  325. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  326. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  327. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  328. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  329. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  330. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  331. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  332. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  333. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  334. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  335. package/skills/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  336. package/skills/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  337. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  338. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  339. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  340. package/skills/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  341. package/skills/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  342. package/skills/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  343. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  344. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  345. package/skills/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  346. package/skills/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  347. package/skills/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  348. package/skills/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  349. package/skills/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  350. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  351. package/skills/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  352. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  353. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  354. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  355. package/skills/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  356. package/skills/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  357. package/skills/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  358. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  359. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  360. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  361. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  362. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  363. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  364. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  365. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  366. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  367. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  368. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  369. package/skills/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  370. package/skills/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  371. package/skills/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  372. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  373. package/skills/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  374. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  375. package/skills/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  376. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  377. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  378. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  379. package/skills/skills/doc-coauthoring/SKILL.md +0 -375
  380. package/skills/skills/docx/LICENSE.txt +0 -30
  381. package/skills/skills/docx/SKILL.md +0 -197
  382. package/skills/skills/docx/docx-js.md +0 -350
  383. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  384. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  385. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  386. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  387. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  388. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  389. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  390. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  391. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  392. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  393. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  394. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  395. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  396. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  397. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  398. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  399. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  400. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  401. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  402. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  403. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  404. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  405. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  406. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  407. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  408. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  409. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  410. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  411. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  412. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  413. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  414. package/skills/skills/docx/ooxml/schemas/mce/mc.xsd +0 -75
  415. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  416. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  417. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  418. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  419. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  420. package/skills/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  421. package/skills/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  422. package/skills/skills/docx/ooxml/scripts/pack.py +0 -159
  423. package/skills/skills/docx/ooxml/scripts/unpack.py +0 -29
  424. package/skills/skills/docx/ooxml/scripts/validate.py +0 -69
  425. package/skills/skills/docx/ooxml/scripts/validation/__init__.py +0 -15
  426. package/skills/skills/docx/ooxml/scripts/validation/base.py +0 -951
  427. package/skills/skills/docx/ooxml/scripts/validation/docx.py +0 -274
  428. package/skills/skills/docx/ooxml/scripts/validation/pptx.py +0 -315
  429. package/skills/skills/docx/ooxml/scripts/validation/redlining.py +0 -279
  430. package/skills/skills/docx/ooxml.md +0 -610
  431. package/skills/skills/docx/scripts/__init__.py +0 -1
  432. package/skills/skills/docx/scripts/document.py +0 -1276
  433. package/skills/skills/docx/scripts/templates/comments.xml +0 -3
  434. package/skills/skills/docx/scripts/templates/commentsExtended.xml +0 -3
  435. package/skills/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
  436. package/skills/skills/docx/scripts/templates/commentsIds.xml +0 -3
  437. package/skills/skills/docx/scripts/templates/people.xml +0 -3
  438. package/skills/skills/docx/scripts/utilities.py +0 -374
  439. package/skills/skills/frontend-design/LICENSE.txt +0 -177
  440. package/skills/skills/frontend-design/SKILL.md +0 -42
  441. package/skills/skills/internal-comms/LICENSE.txt +0 -202
  442. package/skills/skills/internal-comms/SKILL.md +0 -32
  443. package/skills/skills/internal-comms/examples/3p-updates.md +0 -47
  444. package/skills/skills/internal-comms/examples/company-newsletter.md +0 -65
  445. package/skills/skills/internal-comms/examples/faq-answers.md +0 -30
  446. package/skills/skills/internal-comms/examples/general-comms.md +0 -16
  447. package/skills/skills/mcp-builder/LICENSE.txt +0 -202
  448. package/skills/skills/mcp-builder/SKILL.md +0 -236
  449. package/skills/skills/mcp-builder/reference/evaluation.md +0 -602
  450. package/skills/skills/mcp-builder/reference/mcp_best_practices.md +0 -249
  451. package/skills/skills/mcp-builder/reference/node_mcp_server.md +0 -970
  452. package/skills/skills/mcp-builder/reference/python_mcp_server.md +0 -719
  453. package/skills/skills/mcp-builder/scripts/connections.py +0 -151
  454. package/skills/skills/mcp-builder/scripts/evaluation.py +0 -373
  455. package/skills/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  456. package/skills/skills/mcp-builder/scripts/requirements.txt +0 -2
  457. package/skills/skills/pdf/LICENSE.txt +0 -30
  458. package/skills/skills/pdf/SKILL.md +0 -294
  459. package/skills/skills/pdf/forms.md +0 -205
  460. package/skills/skills/pdf/reference.md +0 -612
  461. package/skills/skills/pdf/scripts/check_bounding_boxes.py +0 -70
  462. package/skills/skills/pdf/scripts/check_bounding_boxes_test.py +0 -226
  463. package/skills/skills/pdf/scripts/check_fillable_fields.py +0 -12
  464. package/skills/skills/pdf/scripts/convert_pdf_to_images.py +0 -35
  465. package/skills/skills/pdf/scripts/create_validation_image.py +0 -41
  466. package/skills/skills/pdf/scripts/extract_form_field_info.py +0 -152
  467. package/skills/skills/pdf/scripts/fill_fillable_fields.py +0 -114
  468. package/skills/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -108
  469. package/skills/skills/pptx/LICENSE.txt +0 -30
  470. package/skills/skills/pptx/SKILL.md +0 -484
  471. package/skills/skills/pptx/html2pptx.md +0 -625
  472. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  473. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  474. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  475. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  476. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  477. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  478. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  479. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  480. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  481. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  482. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  483. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  484. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  485. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  486. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  487. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  488. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  489. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  490. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  491. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  492. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  493. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  494. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  495. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  496. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  497. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  498. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  499. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  500. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  501. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  502. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  503. package/skills/skills/pptx/ooxml/schemas/mce/mc.xsd +0 -75
  504. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  505. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  506. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  507. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  508. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  509. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  510. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  511. package/skills/skills/pptx/ooxml/scripts/pack.py +0 -159
  512. package/skills/skills/pptx/ooxml/scripts/unpack.py +0 -29
  513. package/skills/skills/pptx/ooxml/scripts/validate.py +0 -69
  514. package/skills/skills/pptx/ooxml/scripts/validation/__init__.py +0 -15
  515. package/skills/skills/pptx/ooxml/scripts/validation/base.py +0 -951
  516. package/skills/skills/pptx/ooxml/scripts/validation/docx.py +0 -274
  517. package/skills/skills/pptx/ooxml/scripts/validation/pptx.py +0 -315
  518. package/skills/skills/pptx/ooxml/scripts/validation/redlining.py +0 -279
  519. package/skills/skills/pptx/ooxml.md +0 -427
  520. package/skills/skills/pptx/scripts/html2pptx.js +0 -979
  521. package/skills/skills/pptx/scripts/inventory.py +0 -1020
  522. package/skills/skills/pptx/scripts/rearrange.py +0 -231
  523. package/skills/skills/pptx/scripts/replace.py +0 -385
  524. package/skills/skills/pptx/scripts/thumbnail.py +0 -450
  525. package/skills/skills/skill-creator/LICENSE.txt +0 -202
  526. package/skills/skills/skill-creator/SKILL.md +0 -356
  527. package/skills/skills/skill-creator/references/output-patterns.md +0 -82
  528. package/skills/skills/skill-creator/references/workflows.md +0 -28
  529. package/skills/skills/skill-creator/scripts/init_skill.py +0 -303
  530. package/skills/skills/skill-creator/scripts/package_skill.py +0 -110
  531. package/skills/skills/skill-creator/scripts/quick_validate.py +0 -95
  532. package/skills/skills/slack-gif-creator/LICENSE.txt +0 -202
  533. package/skills/skills/slack-gif-creator/SKILL.md +0 -254
  534. package/skills/skills/slack-gif-creator/core/easing.py +0 -234
  535. package/skills/skills/slack-gif-creator/core/frame_composer.py +0 -176
  536. package/skills/skills/slack-gif-creator/core/gif_builder.py +0 -269
  537. package/skills/skills/slack-gif-creator/core/validators.py +0 -136
  538. package/skills/skills/slack-gif-creator/requirements.txt +0 -4
  539. package/skills/skills/theme-factory/LICENSE.txt +0 -202
  540. package/skills/skills/theme-factory/SKILL.md +0 -59
  541. package/skills/skills/theme-factory/theme-showcase.pdf +0 -0
  542. package/skills/skills/theme-factory/themes/arctic-frost.md +0 -19
  543. package/skills/skills/theme-factory/themes/botanical-garden.md +0 -19
  544. package/skills/skills/theme-factory/themes/desert-rose.md +0 -19
  545. package/skills/skills/theme-factory/themes/forest-canopy.md +0 -19
  546. package/skills/skills/theme-factory/themes/golden-hour.md +0 -19
  547. package/skills/skills/theme-factory/themes/midnight-galaxy.md +0 -19
  548. package/skills/skills/theme-factory/themes/modern-minimalist.md +0 -19
  549. package/skills/skills/theme-factory/themes/ocean-depths.md +0 -19
  550. package/skills/skills/theme-factory/themes/sunset-boulevard.md +0 -19
  551. package/skills/skills/theme-factory/themes/tech-innovation.md +0 -19
  552. package/skills/skills/web-artifacts-builder/LICENSE.txt +0 -202
  553. package/skills/skills/web-artifacts-builder/SKILL.md +0 -74
  554. package/skills/skills/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
  555. package/skills/skills/web-artifacts-builder/scripts/init-artifact.sh +0 -322
  556. package/skills/skills/webapp-testing/LICENSE.txt +0 -202
  557. package/skills/skills/webapp-testing/SKILL.md +0 -96
  558. package/skills/skills/webapp-testing/examples/console_logging.py +0 -35
  559. package/skills/skills/webapp-testing/examples/element_discovery.py +0 -40
  560. package/skills/skills/webapp-testing/examples/static_html_automation.py +0 -33
  561. package/skills/skills/webapp-testing/scripts/with_server.py +0 -106
  562. package/skills/skills/xlsx/LICENSE.txt +0 -30
  563. package/skills/skills/xlsx/SKILL.md +0 -289
  564. package/skills/skills/xlsx/recalc.py +0 -178
  565. package/skills/spec/agent-skills-spec.md +0 -3
  566. package/skills/template/SKILL.md +0 -6
  567. package/src/ai-client.ts +0 -1560
  568. package/src/remote-ai-client.ts +0 -664
@@ -1,315 +1,318 @@
1
- /**
2
- * Action Parser for GUI SubAgent
3
- * Parses UI-TARS model predictions into structured actions
4
- *
5
- * Based on UI-TARS architecture by @ui-tars/sdk
6
- * @see https://github.com/DouyinFE/sabre
7
- */
8
- import {
9
- ActionInputs,
10
- PredictionParsed,
11
- UITarsModelVersion,
12
- } from './types.js';
13
- import {
14
- MAX_RATIO,
15
- IMAGE_FACTOR,
16
- MIN_PIXELS,
17
- MAX_PIXELS_V1_5,
18
- } from './constants.js';
19
- import isNumber from 'lodash.isnumber';
20
-
21
- function roundByFactor(num: number, factor: number): number {
22
- return Math.round(num / factor) * factor;
23
- }
24
-
25
- function floorByFactor(num: number, factor: number): number {
26
- return Math.floor(num / factor) * factor;
27
- }
28
-
29
- function ceilByFactor(num: number, factor: number): number {
30
- return Math.ceil(num / factor) * factor;
31
- }
32
-
33
- function smartResizeForV15(
34
- height: number,
35
- width: number,
36
- maxRatio: number = MAX_RATIO,
37
- factor: number = IMAGE_FACTOR,
38
- minPixels: number = MIN_PIXELS,
39
- maxPixels: number = MAX_PIXELS_V1_5,
40
- ): [number, number] | null {
41
- if (Math.max(height, width) / Math.min(height, width) > maxRatio) {
42
- console.error(
43
- `absolute aspect ratio must be smaller than ${maxRatio}, got ${
44
- Math.max(height, width) / Math.min(height, width)
45
- }`,
46
- );
47
- return null;
48
- }
49
-
50
- let wBar = Math.max(factor, roundByFactor(width, factor));
51
- let hBar = Math.max(factor, roundByFactor(height, factor));
52
-
53
- if (hBar * wBar > maxPixels) {
54
- const beta = Math.sqrt((height * width) / maxPixels);
55
- hBar = floorByFactor(height / beta, factor);
56
- wBar = floorByFactor(width / beta, factor);
57
- } else if (hBar * wBar < minPixels) {
58
- const beta = Math.sqrt(minPixels / (height * width));
59
- hBar = ceilByFactor(height * beta, factor);
60
- wBar = ceilByFactor(width * beta, factor);
61
- }
62
-
63
- return [wBar, hBar];
64
- }
65
-
66
- export function actionParser(params: {
67
- prediction: string;
68
- factor: number | [number, number];
69
- screenContext?: {
70
- width: number;
71
- height: number;
72
- };
73
- scaleFactor?: number;
74
- mode?: 'bc' | 'o1';
75
- modelVer?: UITarsModelVersion;
76
- }): {
77
- parsed: PredictionParsed[];
78
- } {
79
- const { prediction, factor, mode, screenContext, scaleFactor, modelVer } =
80
- params;
81
-
82
- const parsed = parseActionVlm(
83
- prediction,
84
- Array.isArray(factor) ? factor : [factor, factor],
85
- mode,
86
- screenContext,
87
- scaleFactor,
88
- modelVer,
89
- );
90
-
91
- return {
92
- parsed,
93
- };
94
- }
95
-
96
- export function parseActionVlm(
97
- text: string,
98
- factors: [number, number] = [1000, 1000],
99
- mode: 'bc' | 'o1' = 'bc',
100
- screenContext?: {
101
- width: number;
102
- height: number;
103
- },
104
- scaleFactor?: number,
105
- modelVer: UITarsModelVersion = UITarsModelVersion.V1_0,
106
- ): PredictionParsed[] {
107
- let reflection: string | null = null;
108
- let thought: string | null = null;
109
- let actionStr = '';
110
-
111
- let smartResizeFactors: [number, number] | null = null;
112
- if (
113
- modelVer === UITarsModelVersion.V1_5 &&
114
- screenContext?.height &&
115
- screenContext?.width
116
- ) {
117
- smartResizeFactors = smartResizeForV15(
118
- screenContext.height,
119
- screenContext.width,
120
- );
121
- }
122
-
123
- text = text.trim();
124
- if (mode === 'bc') {
125
- if (text.includes('Thought:')) {
126
- const thoughtMatch = text.match(
127
- /Thought: ([\s\S]+?)(?=\s*Action[::]|$)/,
128
- );
129
-
130
- if (thoughtMatch) {
131
- thought = thoughtMatch[1].trim();
132
- }
133
- } else if (text.startsWith('Reflection:')) {
134
- const reflectionMatch = text.match(
135
- /Reflection: ([\s\S]+?)Action_Summary: ([\s\S]+?)(?=\s*Action[::]|$)/,
136
- );
137
- if (reflectionMatch) {
138
- thought = reflectionMatch[2].trim();
139
- reflection = reflectionMatch[1].trim();
140
- }
141
- } else if (text.startsWith('Action_Summary:')) {
142
- const summaryMatch = text.match(
143
- /Action_Summary: (.+?)(?=\s*Action[::]|$)/,
144
- );
145
- if (summaryMatch) {
146
- thought = summaryMatch[1].trim();
147
- }
148
- }
149
-
150
- if (!['Action:', 'Action:'].some((keyword) => text.includes(keyword))) {
151
- actionStr = text;
152
- } else {
153
- const actionParts = text.split(/Action[::]/);
154
- actionStr = actionParts[actionParts.length - 1];
155
- }
156
- } else if (mode === 'o1') {
157
- const thoughtMatch = text.match(/<Thought>\s*(.*?)\s*<\/Thought>/);
158
- const actionSummaryMatch = text.match(
159
- /\nAction_Summary:\s*(.*?)\s*Action:/,
160
- );
161
- const actionMatch = text.match(/\nAction:\s*(.*?)\s*<\/Output>/);
162
-
163
- const thoughtContent = thoughtMatch ? thoughtMatch[1] : null;
164
- const actionSummaryContent = actionSummaryMatch
165
- ? actionSummaryMatch[1]
166
- : null;
167
- const actionContent = actionMatch ? actionMatch[1] : null;
168
-
169
- thought = `${thoughtContent}\n<Action_Summary>\n${actionSummaryContent}`;
170
- actionStr = actionContent || '';
171
- }
172
-
173
- const allActions = actionStr.split('\n\n');
174
- const actions: PredictionParsed[] = [];
175
-
176
- for (const rawStr of allActions) {
177
- const actionInstance = parseAction(rawStr.replace(/\n/g, String.raw`\n`).trimStart());
178
- let actionType = '';
179
- let actionInputs: ActionInputs = {};
180
-
181
- if (actionInstance) {
182
- actionType = actionInstance.function;
183
- const params = actionInstance.args;
184
- actionInputs = {};
185
-
186
- for (const [paramName, param] of Object.entries(params)) {
187
- if (!param) continue;
188
- const trimmedParam = (param as string).trim();
189
-
190
- if (paramName.includes('start_box') || paramName.includes('end_box')) {
191
- const oriBox = trimmedParam;
192
- const numbers = oriBox
193
- .replace(/[()[\]]/g, '')
194
- .split(',')
195
- .filter((ori) => ori !== '');
196
-
197
- const floatNumbers = numbers.map((num, idx) => {
198
- const factorIndex = idx % 2;
199
- if (modelVer === UITarsModelVersion.V1_5 && smartResizeFactors) {
200
- return Number.parseFloat(num) / smartResizeFactors[factorIndex];
201
- }
202
- return Number.parseFloat(num) / factors[factorIndex];
203
- });
204
-
205
- if (floatNumbers.length === 2) {
206
- floatNumbers.push(floatNumbers[0], floatNumbers[1]);
207
- }
208
-
209
- actionInputs[
210
- paramName.trim() as keyof Omit<
211
- ActionInputs,
212
- 'start_coords' | 'end_coords'
213
- >
214
- ] = JSON.stringify(floatNumbers);
215
-
216
- if (screenContext?.width && screenContext?.height) {
217
- const boxKey = paramName.includes('start_box')
218
- ? 'start_coords'
219
- : 'end_coords';
220
- const [x1, y1, x2 = x1, y2 = y1] = floatNumbers;
221
- const [widthFactor, heightFactor] = factors;
222
-
223
- actionInputs[boxKey] = [x1, y1, x2, y2].every(isNumber)
224
- ? [
225
- (Math.round(
226
- ((x1 + x2) / 2) * screenContext?.width * widthFactor,
227
- ) /
228
- widthFactor) *
229
- (scaleFactor ?? 1),
230
- (Math.round(
231
- ((y1 + y2) / 2) * screenContext?.height * heightFactor,
232
- ) /
233
- heightFactor) *
234
- (scaleFactor ?? 1),
235
- ]
236
- : [];
237
- }
238
- } else {
239
- actionInputs[
240
- paramName.trim() as keyof Omit<
241
- ActionInputs,
242
- 'start_coords' | 'end_coords'
243
- >
244
- ] = trimmedParam;
245
- }
246
- }
247
- }
248
-
249
- actions.push({
250
- reflection: reflection,
251
- thought: thought || '',
252
- action_type: actionType,
253
- action_inputs: actionInputs,
254
- });
255
- }
256
-
257
- return actions;
258
- }
259
-
260
- function parseAction(actionStr: string) {
261
- try {
262
- actionStr = actionStr.replace(/<\|box_start\|>|<\|box_end\|>/g, '');
263
-
264
- actionStr = actionStr
265
- .replace(/(?<!start_|end_)point=/g, 'start_box=')
266
- .replace(/start_point=/g, 'start_box=')
267
- .replace(/end_point=/g, 'end_box=');
268
-
269
- const functionPattern = /^(\w+)\((.*)\)$/;
270
- const match = actionStr.trim().match(functionPattern);
271
-
272
- if (!match) {
273
- throw new Error('Not a function call');
274
- }
275
-
276
- const [_, functionName, argsStr] = match;
277
-
278
- const kwargs = {};
279
-
280
- if (argsStr.trim()) {
281
- const argPairs = argsStr.match(/([^,']|'[^']*')+/g) || [];
282
-
283
- for (const pair of argPairs) {
284
- const [key, ...valueParts] = pair.split('=');
285
- if (!key) continue;
286
-
287
- let value = valueParts
288
- .join('=')
289
- .trim()
290
- .replace(/^['"]|['"]$/g, '');
291
-
292
- if (value.includes('<bbox>')) {
293
- value = value.replace(/<bbox>|<\/bbox>/g, '').replace(/\s+/g, ',');
294
- value = `(${value})`;
295
- }
296
-
297
- if (value.includes('<point>')) {
298
- value = value.replace(/<point>|<\/point>/g, '').replace(/\s+/g, ',');
299
- value = `(${value})`;
300
- }
301
-
302
- //@ts-ignore
303
- kwargs[key.trim()] = value;
304
- }
305
- }
306
-
307
- return {
308
- function: functionName,
309
- args: kwargs,
310
- };
311
- } catch (e) {
312
- console.warn(`[ActionParser] Skipping invalid action: '${actionStr}'`);
313
- return null;
314
- }
315
- }
1
+ /**
2
+ * Action Parser for GUI SubAgent
3
+ * Parses UI-TARS model predictions into structured actions
4
+ *
5
+ * Based on UI-TARS architecture by @ui-tars/sdk
6
+ * @see https://github.com/DouyinFE/sabre
7
+ */
8
+ import {
9
+ ActionInputs,
10
+ PredictionParsed,
11
+ UITarsModelVersion,
12
+ } from './types.js';
13
+ import {
14
+ MAX_RATIO,
15
+ IMAGE_FACTOR,
16
+ MIN_PIXELS,
17
+ MAX_PIXELS_V1_5,
18
+ } from './constants.js';
19
+ import isNumber from 'lodash.isnumber';
20
+ import { getLogger } from '../../logger.js';
21
+
22
+ const logger = getLogger();
23
+
24
+ function roundByFactor(num: number, factor: number): number {
25
+ return Math.round(num / factor) * factor;
26
+ }
27
+
28
+ function floorByFactor(num: number, factor: number): number {
29
+ return Math.floor(num / factor) * factor;
30
+ }
31
+
32
+ function ceilByFactor(num: number, factor: number): number {
33
+ return Math.ceil(num / factor) * factor;
34
+ }
35
+
36
+ function smartResizeForV15(
37
+ height: number,
38
+ width: number,
39
+ maxRatio: number = MAX_RATIO,
40
+ factor: number = IMAGE_FACTOR,
41
+ minPixels: number = MIN_PIXELS,
42
+ maxPixels: number = MAX_PIXELS_V1_5,
43
+ ): [number, number] | null {
44
+ if (Math.max(height, width) / Math.min(height, width) > maxRatio) {
45
+ logger.error(
46
+ `absolute aspect ratio must be smaller than ${maxRatio}, got ${
47
+ Math.max(height, width) / Math.min(height, width)
48
+ }`,
49
+ );
50
+ return null;
51
+ }
52
+
53
+ let wBar = Math.max(factor, roundByFactor(width, factor));
54
+ let hBar = Math.max(factor, roundByFactor(height, factor));
55
+
56
+ if (hBar * wBar > maxPixels) {
57
+ const beta = Math.sqrt((height * width) / maxPixels);
58
+ hBar = floorByFactor(height / beta, factor);
59
+ wBar = floorByFactor(width / beta, factor);
60
+ } else if (hBar * wBar < minPixels) {
61
+ const beta = Math.sqrt(minPixels / (height * width));
62
+ hBar = ceilByFactor(height * beta, factor);
63
+ wBar = ceilByFactor(width * beta, factor);
64
+ }
65
+
66
+ return [wBar, hBar];
67
+ }
68
+
69
+ export function actionParser(params: {
70
+ prediction: string;
71
+ factor: number | [number, number];
72
+ screenContext?: {
73
+ width: number;
74
+ height: number;
75
+ };
76
+ scaleFactor?: number;
77
+ mode?: 'bc' | 'o1';
78
+ modelVer?: UITarsModelVersion;
79
+ }): {
80
+ parsed: PredictionParsed[];
81
+ } {
82
+ const { prediction, factor, mode, screenContext, scaleFactor, modelVer } =
83
+ params;
84
+
85
+ const parsed = parseActionVlm(
86
+ prediction,
87
+ Array.isArray(factor) ? factor : [factor, factor],
88
+ mode,
89
+ screenContext,
90
+ scaleFactor,
91
+ modelVer,
92
+ );
93
+
94
+ return {
95
+ parsed,
96
+ };
97
+ }
98
+
99
+ export function parseActionVlm(
100
+ text: string,
101
+ factors: [number, number] = [1000, 1000],
102
+ mode: 'bc' | 'o1' = 'bc',
103
+ screenContext?: {
104
+ width: number;
105
+ height: number;
106
+ },
107
+ scaleFactor?: number,
108
+ modelVer: UITarsModelVersion = UITarsModelVersion.V1_0,
109
+ ): PredictionParsed[] {
110
+ let reflection: string | null = null;
111
+ let thought: string | null = null;
112
+ let actionStr = '';
113
+
114
+ let smartResizeFactors: [number, number] | null = null;
115
+ if (
116
+ modelVer === UITarsModelVersion.V1_5 &&
117
+ screenContext?.height &&
118
+ screenContext?.width
119
+ ) {
120
+ smartResizeFactors = smartResizeForV15(
121
+ screenContext.height,
122
+ screenContext.width,
123
+ );
124
+ }
125
+
126
+ text = text.trim();
127
+ if (mode === 'bc') {
128
+ if (text.includes('Thought:')) {
129
+ const thoughtMatch = text.match(
130
+ /Thought: ([\s\S]+?)(?=\s*Action[::]|$)/,
131
+ );
132
+
133
+ if (thoughtMatch) {
134
+ thought = thoughtMatch[1].trim();
135
+ }
136
+ } else if (text.startsWith('Reflection:')) {
137
+ const reflectionMatch = text.match(
138
+ /Reflection: ([\s\S]+?)Action_Summary: ([\s\S]+?)(?=\s*Action[::]|$)/,
139
+ );
140
+ if (reflectionMatch) {
141
+ thought = reflectionMatch[2].trim();
142
+ reflection = reflectionMatch[1].trim();
143
+ }
144
+ } else if (text.startsWith('Action_Summary:')) {
145
+ const summaryMatch = text.match(
146
+ /Action_Summary: (.+?)(?=\s*Action[::]|$)/,
147
+ );
148
+ if (summaryMatch) {
149
+ thought = summaryMatch[1].trim();
150
+ }
151
+ }
152
+
153
+ if (!['Action:', 'Action:'].some((keyword) => text.includes(keyword))) {
154
+ actionStr = text;
155
+ } else {
156
+ const actionParts = text.split(/Action[::]/);
157
+ actionStr = actionParts[actionParts.length - 1];
158
+ }
159
+ } else if (mode === 'o1') {
160
+ const thoughtMatch = text.match(/<Thought>\s*(.*?)\s*<\/Thought>/);
161
+ const actionSummaryMatch = text.match(
162
+ /\nAction_Summary:\s*(.*?)\s*Action:/,
163
+ );
164
+ const actionMatch = text.match(/\nAction:\s*(.*?)\s*<\/Output>/);
165
+
166
+ const thoughtContent = thoughtMatch ? thoughtMatch[1] : null;
167
+ const actionSummaryContent = actionSummaryMatch
168
+ ? actionSummaryMatch[1]
169
+ : null;
170
+ const actionContent = actionMatch ? actionMatch[1] : null;
171
+
172
+ thought = `${thoughtContent}\n<Action_Summary>\n${actionSummaryContent}`;
173
+ actionStr = actionContent || '';
174
+ }
175
+
176
+ const allActions = actionStr.split('\n\n');
177
+ const actions: PredictionParsed[] = [];
178
+
179
+ for (const rawStr of allActions) {
180
+ const actionInstance = parseAction(rawStr.replace(/\n/g, String.raw`\n`).trimStart());
181
+ let actionType = '';
182
+ let actionInputs: ActionInputs = {};
183
+
184
+ if (actionInstance) {
185
+ actionType = actionInstance.function;
186
+ const params = actionInstance.args;
187
+ actionInputs = {};
188
+
189
+ for (const [paramName, param] of Object.entries(params)) {
190
+ if (!param) continue;
191
+ const trimmedParam = (param as string).trim();
192
+
193
+ if (paramName.includes('start_box') || paramName.includes('end_box')) {
194
+ const oriBox = trimmedParam;
195
+ const numbers = oriBox
196
+ .replace(/[()[\]]/g, '')
197
+ .split(',')
198
+ .filter((ori) => ori !== '');
199
+
200
+ const floatNumbers = numbers.map((num, idx) => {
201
+ const factorIndex = idx % 2;
202
+ if (modelVer === UITarsModelVersion.V1_5 && smartResizeFactors) {
203
+ return Number.parseFloat(num) / smartResizeFactors[factorIndex];
204
+ }
205
+ return Number.parseFloat(num) / factors[factorIndex];
206
+ });
207
+
208
+ if (floatNumbers.length === 2) {
209
+ floatNumbers.push(floatNumbers[0], floatNumbers[1]);
210
+ }
211
+
212
+ actionInputs[
213
+ paramName.trim() as keyof Omit<
214
+ ActionInputs,
215
+ 'start_coords' | 'end_coords'
216
+ >
217
+ ] = JSON.stringify(floatNumbers);
218
+
219
+ if (screenContext?.width && screenContext?.height) {
220
+ const boxKey = paramName.includes('start_box')
221
+ ? 'start_coords'
222
+ : 'end_coords';
223
+ const [x1, y1, x2 = x1, y2 = y1] = floatNumbers;
224
+ const [widthFactor, heightFactor] = factors;
225
+
226
+ actionInputs[boxKey] = [x1, y1, x2, y2].every(isNumber)
227
+ ? [
228
+ (Math.round(
229
+ ((x1 + x2) / 2) * screenContext?.width * widthFactor,
230
+ ) /
231
+ widthFactor) *
232
+ (scaleFactor ?? 1),
233
+ (Math.round(
234
+ ((y1 + y2) / 2) * screenContext?.height * heightFactor,
235
+ ) /
236
+ heightFactor) *
237
+ (scaleFactor ?? 1),
238
+ ]
239
+ : [];
240
+ }
241
+ } else {
242
+ actionInputs[
243
+ paramName.trim() as keyof Omit<
244
+ ActionInputs,
245
+ 'start_coords' | 'end_coords'
246
+ >
247
+ ] = trimmedParam;
248
+ }
249
+ }
250
+ }
251
+
252
+ actions.push({
253
+ reflection: reflection,
254
+ thought: thought || '',
255
+ action_type: actionType,
256
+ action_inputs: actionInputs,
257
+ });
258
+ }
259
+
260
+ return actions;
261
+ }
262
+
263
+ function parseAction(actionStr: string) {
264
+ try {
265
+ actionStr = actionStr.replace(/<\|box_start\|>|<\|box_end\|>/g, '');
266
+
267
+ actionStr = actionStr
268
+ .replace(/(?<!start_|end_)point=/g, 'start_box=')
269
+ .replace(/start_point=/g, 'start_box=')
270
+ .replace(/end_point=/g, 'end_box=');
271
+
272
+ const functionPattern = /^(\w+)\((.*)\)$/;
273
+ const match = actionStr.trim().match(functionPattern);
274
+
275
+ if (!match) {
276
+ throw new Error('Not a function call');
277
+ }
278
+
279
+ const [_, functionName, argsStr] = match;
280
+
281
+ const kwargs = {};
282
+
283
+ if (argsStr.trim()) {
284
+ const argPairs = argsStr.match(/([^,']|'[^']*')+/g) || [];
285
+
286
+ for (const pair of argPairs) {
287
+ const [key, ...valueParts] = pair.split('=');
288
+ if (!key) continue;
289
+
290
+ let value = valueParts
291
+ .join('=')
292
+ .trim()
293
+ .replace(/^['"]|['"]$/g, '');
294
+
295
+ if (value.includes('<bbox>')) {
296
+ value = value.replace(/<bbox>|<\/bbox>/g, '').replace(/\s+/g, ',');
297
+ value = `(${value})`;
298
+ }
299
+
300
+ if (value.includes('<point>')) {
301
+ value = value.replace(/<point>|<\/point>/g, '').replace(/\s+/g, ',');
302
+ value = `(${value})`;
303
+ }
304
+
305
+ //@ts-ignore
306
+ kwargs[key.trim()] = value;
307
+ }
308
+ }
309
+
310
+ return {
311
+ function: functionName,
312
+ args: kwargs,
313
+ };
314
+ } catch (e) {
315
+ logger.debug(`[ActionParser] Skipping invalid action: '${actionStr}'`);
316
+ return null;
317
+ }
318
+ }