@xagent-ai/cli 1.2.2 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (602) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +38 -38
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
  3. package/.github/release.yml +76 -0
  4. package/.github/workflows/ci.yml +75 -0
  5. package/.github/workflows/release.yml +103 -0
  6. package/.gitmodules +3 -3
  7. package/README.md +326 -280
  8. package/README_CN.md +325 -279
  9. package/dist/agents.d.ts.map +1 -1
  10. package/dist/agents.js +7 -3
  11. package/dist/agents.js.map +1 -1
  12. package/dist/ai-client/factory.d.ts +40 -0
  13. package/dist/ai-client/factory.d.ts.map +1 -0
  14. package/dist/ai-client/factory.js +100 -0
  15. package/dist/ai-client/factory.js.map +1 -0
  16. package/dist/ai-client/index.d.ts +20 -0
  17. package/dist/ai-client/index.d.ts.map +1 -0
  18. package/dist/ai-client/index.js +49 -0
  19. package/dist/ai-client/index.js.map +1 -0
  20. package/dist/ai-client/providers/anthropic.d.ts +57 -0
  21. package/dist/ai-client/providers/anthropic.d.ts.map +1 -0
  22. package/dist/ai-client/providers/anthropic.js +406 -0
  23. package/dist/ai-client/providers/anthropic.js.map +1 -0
  24. package/dist/ai-client/providers/openai.d.ts +57 -0
  25. package/dist/ai-client/providers/openai.d.ts.map +1 -0
  26. package/dist/ai-client/providers/openai.js +290 -0
  27. package/dist/ai-client/providers/openai.js.map +1 -0
  28. package/dist/ai-client/providers/remote.d.ts +110 -0
  29. package/dist/ai-client/providers/remote.d.ts.map +1 -0
  30. package/dist/ai-client/providers/remote.js +352 -0
  31. package/dist/ai-client/providers/remote.js.map +1 -0
  32. package/dist/ai-client/registry.d.ts +51 -0
  33. package/dist/ai-client/registry.d.ts.map +1 -0
  34. package/dist/ai-client/registry.js +81 -0
  35. package/dist/ai-client/registry.js.map +1 -0
  36. package/dist/ai-client/types.d.ts +274 -0
  37. package/dist/ai-client/types.d.ts.map +1 -0
  38. package/dist/ai-client/types.js +90 -0
  39. package/dist/ai-client/types.js.map +1 -0
  40. package/dist/ai-client-factory.d.ts +62 -0
  41. package/dist/ai-client-factory.d.ts.map +1 -0
  42. package/dist/ai-client-factory.js +157 -0
  43. package/dist/ai-client-factory.js.map +1 -0
  44. package/dist/auth.d.ts +23 -1
  45. package/dist/auth.d.ts.map +1 -1
  46. package/dist/auth.js +164 -174
  47. package/dist/auth.js.map +1 -1
  48. package/dist/cancellation.d.ts +5 -4
  49. package/dist/cancellation.d.ts.map +1 -1
  50. package/dist/cancellation.js +53 -32
  51. package/dist/cancellation.js.map +1 -1
  52. package/dist/checkpoint.d.ts +2 -1
  53. package/dist/checkpoint.d.ts.map +1 -1
  54. package/dist/checkpoint.js +39 -6
  55. package/dist/checkpoint.js.map +1 -1
  56. package/dist/cli.js +742 -29
  57. package/dist/cli.js.map +1 -1
  58. package/dist/config.d.ts +10 -4
  59. package/dist/config.d.ts.map +1 -1
  60. package/dist/config.js +62 -25
  61. package/dist/config.js.map +1 -1
  62. package/dist/context-compressor.d.ts +82 -18
  63. package/dist/context-compressor.d.ts.map +1 -1
  64. package/dist/context-compressor.js +718 -154
  65. package/dist/context-compressor.js.map +1 -1
  66. package/dist/conversation.d.ts +1 -1
  67. package/dist/conversation.d.ts.map +1 -1
  68. package/dist/conversation.js +8 -7
  69. package/dist/conversation.js.map +1 -1
  70. package/dist/gui-subagent/action-parser/actionParser.d.ts.map +1 -1
  71. package/dist/gui-subagent/action-parser/actionParser.js +6 -4
  72. package/dist/gui-subagent/action-parser/actionParser.js.map +1 -1
  73. package/dist/gui-subagent/agent/gui-agent.d.ts +39 -2
  74. package/dist/gui-subagent/agent/gui-agent.d.ts.map +1 -1
  75. package/dist/gui-subagent/agent/gui-agent.js +189 -74
  76. package/dist/gui-subagent/agent/gui-agent.js.map +1 -1
  77. package/dist/gui-subagent/index.d.ts +23 -1
  78. package/dist/gui-subagent/index.d.ts.map +1 -1
  79. package/dist/gui-subagent/index.js +6 -0
  80. package/dist/gui-subagent/index.js.map +1 -1
  81. package/dist/gui-subagent/operator/base-operator.d.ts.map +1 -1
  82. package/dist/gui-subagent/operator/base-operator.js +0 -1
  83. package/dist/gui-subagent/operator/base-operator.js.map +1 -1
  84. package/dist/gui-subagent/operator/computer-operator.d.ts.map +1 -1
  85. package/dist/gui-subagent/operator/computer-operator.js +31 -8
  86. package/dist/gui-subagent/operator/computer-operator.js.map +1 -1
  87. package/dist/gui-subagent/types/actions.d.ts +1 -1
  88. package/dist/gui-subagent/types/actions.d.ts.map +1 -1
  89. package/dist/gui-subagent/types/actions.js +0 -1
  90. package/dist/gui-subagent/types/actions.js.map +1 -1
  91. package/dist/gui-subagent/types/operator.d.ts +1 -1
  92. package/dist/gui-subagent/types/operator.d.ts.map +1 -1
  93. package/dist/index.d.ts +1 -2
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +1 -2
  96. package/dist/index.js.map +1 -1
  97. package/dist/input-processor.d.ts.map +1 -1
  98. package/dist/input-processor.js +8 -5
  99. package/dist/input-processor.js.map +1 -1
  100. package/dist/logger.d.ts.map +1 -1
  101. package/dist/logger.js +1 -1
  102. package/dist/logger.js.map +1 -1
  103. package/dist/mcp.d.ts +7 -1
  104. package/dist/mcp.d.ts.map +1 -1
  105. package/dist/mcp.js +157 -49
  106. package/dist/mcp.js.map +1 -1
  107. package/dist/memory.d.ts.map +1 -1
  108. package/dist/memory.js +3 -3
  109. package/dist/memory.js.map +1 -1
  110. package/dist/output-util.d.ts +27 -0
  111. package/dist/output-util.d.ts.map +1 -0
  112. package/dist/output-util.js +74 -0
  113. package/dist/output-util.js.map +1 -0
  114. package/dist/retry.js +1 -1
  115. package/dist/retry.js.map +1 -1
  116. package/dist/ripgrep.d.ts +29 -0
  117. package/dist/ripgrep.d.ts.map +1 -0
  118. package/dist/ripgrep.js +294 -0
  119. package/dist/ripgrep.js.map +1 -0
  120. package/dist/sdk-output-adapter.d.ts +34 -1
  121. package/dist/sdk-output-adapter.d.ts.map +1 -1
  122. package/dist/sdk-output-adapter.js +67 -2
  123. package/dist/sdk-output-adapter.js.map +1 -1
  124. package/dist/sdk-session.d.ts.map +1 -1
  125. package/dist/sdk-session.js +2 -0
  126. package/dist/sdk-session.js.map +1 -1
  127. package/dist/session-manager.js +3 -3
  128. package/dist/session-manager.js.map +1 -1
  129. package/dist/session.d.ts +116 -6
  130. package/dist/session.d.ts.map +1 -1
  131. package/dist/session.js +1416 -448
  132. package/dist/session.js.map +1 -1
  133. package/dist/shell.d.ts +33 -0
  134. package/dist/shell.d.ts.map +1 -0
  135. package/dist/shell.js +126 -0
  136. package/dist/shell.js.map +1 -0
  137. package/dist/skill-installer.d.ts +38 -0
  138. package/dist/skill-installer.d.ts.map +1 -0
  139. package/dist/skill-installer.js +447 -0
  140. package/dist/skill-installer.js.map +1 -0
  141. package/dist/skill-invoker.d.ts +8 -2
  142. package/dist/skill-invoker.d.ts.map +1 -1
  143. package/dist/skill-invoker.js +36 -15
  144. package/dist/skill-invoker.js.map +1 -1
  145. package/dist/skill-loader.d.ts +8 -3
  146. package/dist/skill-loader.d.ts.map +1 -1
  147. package/dist/skill-loader.js +51 -48
  148. package/dist/skill-loader.js.map +1 -1
  149. package/dist/skill-manager.d.ts +85 -0
  150. package/dist/skill-manager.d.ts.map +1 -0
  151. package/dist/skill-manager.js +341 -0
  152. package/dist/skill-manager.js.map +1 -0
  153. package/dist/slash-commands.d.ts +39 -2
  154. package/dist/slash-commands.d.ts.map +1 -1
  155. package/dist/slash-commands.js +934 -305
  156. package/dist/slash-commands.js.map +1 -1
  157. package/dist/smart-approval.d.ts +20 -1
  158. package/dist/smart-approval.d.ts.map +1 -1
  159. package/dist/smart-approval.js +125 -56
  160. package/dist/smart-approval.js.map +1 -1
  161. package/dist/system-prompt-generator.d.ts +6 -0
  162. package/dist/system-prompt-generator.d.ts.map +1 -1
  163. package/dist/system-prompt-generator.js +86 -36
  164. package/dist/system-prompt-generator.js.map +1 -1
  165. package/dist/terminal.d.ts +28 -0
  166. package/dist/terminal.d.ts.map +1 -0
  167. package/dist/terminal.js +82 -0
  168. package/dist/terminal.js.map +1 -0
  169. package/dist/theme.d.ts.map +1 -1
  170. package/dist/theme.js +8 -7
  171. package/dist/theme.js.map +1 -1
  172. package/dist/tools.d.ts +38 -7
  173. package/dist/tools.d.ts.map +1 -1
  174. package/dist/tools.js +1249 -617
  175. package/dist/tools.js.map +1 -1
  176. package/dist/truncate.d.ts +55 -0
  177. package/dist/truncate.d.ts.map +1 -0
  178. package/dist/truncate.js +130 -0
  179. package/dist/truncate.js.map +1 -0
  180. package/dist/types.d.ts +84 -9
  181. package/dist/types.d.ts.map +1 -1
  182. package/dist/types.js +49 -0
  183. package/dist/types.js.map +1 -1
  184. package/dist/update.d.ts.map +1 -1
  185. package/dist/update.js +28 -36
  186. package/dist/update.js.map +1 -1
  187. package/dist/workflow.d.ts +5 -1
  188. package/dist/workflow.d.ts.map +1 -1
  189. package/dist/workflow.js +61 -49
  190. package/dist/workflow.js.map +1 -1
  191. package/docs/architecture/mcp-integration-guide.md +304 -194
  192. package/docs/architecture/overview.md +169 -169
  193. package/docs/architecture/tool-system-design.md +134 -134
  194. package/docs/cli/commands.md +349 -238
  195. package/docs/smart-mode.md +281 -281
  196. package/docs/third-party-models.md +440 -439
  197. package/find-skills/SKILL.md +133 -0
  198. package/package.json +91 -90
  199. package/scripts/install-ripgrep.js +241 -0
  200. package/src/agents.ts +7 -3
  201. package/src/ai-client/factory.ts +116 -0
  202. package/src/ai-client/index.ts +61 -0
  203. package/src/ai-client/providers/anthropic.ts +475 -0
  204. package/src/ai-client/providers/openai.ts +348 -0
  205. package/src/ai-client/providers/remote.ts +439 -0
  206. package/src/ai-client/registry.ts +97 -0
  207. package/src/ai-client/types.ts +364 -0
  208. package/src/ai-client-factory.ts +204 -0
  209. package/src/auth.ts +661 -614
  210. package/src/cancellation.ts +202 -176
  211. package/src/checkpoint.ts +255 -219
  212. package/src/cli.ts +1523 -743
  213. package/src/config.ts +341 -297
  214. package/src/context-compressor.ts +987 -290
  215. package/src/conversation.ts +290 -288
  216. package/src/gui-subagent/action-parser/actionParser.ts +318 -315
  217. package/src/gui-subagent/action-parser/constants.ts +14 -14
  218. package/src/gui-subagent/action-parser/index.ts +8 -8
  219. package/src/gui-subagent/action-parser/types.ts +31 -31
  220. package/src/gui-subagent/agent/gui-agent.ts +1234 -1089
  221. package/src/gui-subagent/agent/index.ts +5 -5
  222. package/src/gui-subagent/index.ts +185 -163
  223. package/src/gui-subagent/operator/base-operator.ts +244 -245
  224. package/src/gui-subagent/operator/computer-operator.ts +541 -520
  225. package/src/gui-subagent/operator/index.ts +6 -6
  226. package/src/gui-subagent/types/actions.ts +260 -262
  227. package/src/gui-subagent/types/index.ts +6 -6
  228. package/src/gui-subagent/types/operator.ts +106 -106
  229. package/src/gui-subagent/utils.ts +51 -51
  230. package/src/index.ts +17 -18
  231. package/src/input-processor.ts +8 -5
  232. package/src/logger.ts +436 -438
  233. package/src/mcp.ts +793 -682
  234. package/src/memory.ts +343 -344
  235. package/src/output-util.ts +80 -0
  236. package/src/retry.ts +1 -1
  237. package/src/ripgrep.ts +370 -0
  238. package/src/sdk-output-adapter.ts +842 -0
  239. package/src/sdk-session.ts +62 -0
  240. package/src/session-manager.ts +308 -308
  241. package/src/session.ts +1775 -573
  242. package/src/shell.ts +134 -0
  243. package/src/skill-installer.ts +518 -0
  244. package/src/skill-invoker.ts +959 -935
  245. package/src/skill-loader.ts +501 -496
  246. package/src/skill-manager.ts +385 -0
  247. package/src/slash-commands.ts +2189 -1389
  248. package/src/smart-approval.ts +193 -74
  249. package/src/system-prompt-generator.ts +91 -36
  250. package/src/terminal.ts +96 -0
  251. package/src/theme.ts +739 -738
  252. package/src/tools.ts +1790 -931
  253. package/src/truncate.ts +173 -0
  254. package/src/types.ts +337 -198
  255. package/src/update.ts +33 -40
  256. package/src/workflow.ts +521 -508
  257. package/test/cli-launch.test.ts +279 -0
  258. package/tsconfig.json +22 -22
  259. package/vitest.config.ts +21 -19
  260. package/dist/ai-client.d.ts +0 -86
  261. package/dist/ai-client.d.ts.map +0 -1
  262. package/dist/ai-client.js +0 -1372
  263. package/dist/ai-client.js.map +0 -1
  264. package/dist/gui-subagent/operator/browser-operator.d.ts +0 -36
  265. package/dist/gui-subagent/operator/browser-operator.d.ts.map +0 -1
  266. package/dist/gui-subagent/operator/browser-operator.js +0 -306
  267. package/dist/gui-subagent/operator/browser-operator.js.map +0 -1
  268. package/dist/gui-subagent/operator/desktop-operator.d.ts +0 -55
  269. package/dist/gui-subagent/operator/desktop-operator.d.ts.map +0 -1
  270. package/dist/gui-subagent/operator/desktop-operator.js +0 -527
  271. package/dist/gui-subagent/operator/desktop-operator.js.map +0 -1
  272. package/dist/hook.d.ts +0 -73
  273. package/dist/hook.d.ts.map +0 -1
  274. package/dist/hook.js +0 -156
  275. package/dist/hook.js.map +0 -1
  276. package/dist/input-history.d.ts +0 -24
  277. package/dist/input-history.d.ts.map +0 -1
  278. package/dist/input-history.js +0 -94
  279. package/dist/input-history.js.map +0 -1
  280. package/dist/keyboard-manager.d.ts +0 -151
  281. package/dist/keyboard-manager.d.ts.map +0 -1
  282. package/dist/keyboard-manager.js +0 -396
  283. package/dist/keyboard-manager.js.map +0 -1
  284. package/dist/print-system-prompt.d.ts +0 -2
  285. package/dist/print-system-prompt.d.ts.map +0 -1
  286. package/dist/print-system-prompt.js +0 -40
  287. package/dist/print-system-prompt.js.map +0 -1
  288. package/dist/remote-ai-client.d.ts +0 -104
  289. package/dist/remote-ai-client.d.ts.map +0 -1
  290. package/dist/remote-ai-client.js +0 -552
  291. package/dist/remote-ai-client.js.map +0 -1
  292. package/dist/sdk-session-v2.d.ts +0 -13
  293. package/dist/sdk-session-v2.d.ts.map +0 -1
  294. package/dist/sdk-session-v2.js +0 -46
  295. package/dist/sdk-session-v2.js.map +0 -1
  296. package/dist/test-boundary-conditions.d.ts.map +0 -1
  297. package/dist/test-boundary-conditions.js.map +0 -1
  298. package/dist/test-cancellation-fix.d.ts.map +0 -1
  299. package/dist/test-cancellation-fix.js.map +0 -1
  300. package/dist/test-input-history.d.ts.map +0 -1
  301. package/dist/test-input-history.js.map +0 -1
  302. package/dist/test-interaction-flow.d.ts.map +0 -1
  303. package/dist/test-interaction-flow.js.map +0 -1
  304. package/dist/test-quick.d.ts.map +0 -1
  305. package/dist/test-quick.js.map +0 -1
  306. package/dist/test-user-interaction.d.ts.map +0 -1
  307. package/dist/test-user-interaction.js.map +0 -1
  308. package/dist/tools/edit-diff.d.ts +0 -32
  309. package/dist/tools/edit-diff.d.ts.map +0 -1
  310. package/dist/tools/edit-diff.js +0 -185
  311. package/dist/tools/edit-diff.js.map +0 -1
  312. package/dist/tools/edit.d.ts +0 -11
  313. package/dist/tools/edit.d.ts.map +0 -1
  314. package/dist/tools/edit.js +0 -129
  315. package/dist/tools/edit.js.map +0 -1
  316. package/dist/unified-session.d.ts +0 -42
  317. package/dist/unified-session.d.ts.map +0 -1
  318. package/dist/unified-session.js +0 -271
  319. package/dist/unified-session.js.map +0 -1
  320. package/skills/.claude-plugin/marketplace.json +0 -45
  321. package/skills/README.md +0 -94
  322. package/skills/THIRD_PARTY_NOTICES.md +0 -405
  323. package/skills/skills/algorithmic-art/LICENSE.txt +0 -202
  324. package/skills/skills/algorithmic-art/SKILL.md +0 -405
  325. package/skills/skills/algorithmic-art/templates/generator_template.js +0 -223
  326. package/skills/skills/algorithmic-art/templates/viewer.html +0 -599
  327. package/skills/skills/brand-guidelines/LICENSE.txt +0 -202
  328. package/skills/skills/brand-guidelines/SKILL.md +0 -73
  329. package/skills/skills/canvas-design/LICENSE.txt +0 -202
  330. package/skills/skills/canvas-design/SKILL.md +0 -130
  331. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -93
  332. package/skills/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  333. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  334. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -93
  335. package/skills/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  336. package/skills/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -93
  337. package/skills/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  338. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  339. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -93
  340. package/skills/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  341. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  342. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  343. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -93
  344. package/skills/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  345. package/skills/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -93
  346. package/skills/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  347. package/skills/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -94
  348. package/skills/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  349. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  350. package/skills/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -93
  351. package/skills/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  352. package/skills/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -93
  353. package/skills/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  354. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  355. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -93
  356. package/skills/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  357. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  358. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  359. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  360. package/skills/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  361. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  362. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  363. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  364. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -93
  365. package/skills/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  366. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  367. package/skills/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  368. package/skills/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -93
  369. package/skills/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  370. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  371. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -93
  372. package/skills/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  373. package/skills/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  374. package/skills/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  375. package/skills/skills/canvas-design/canvas-fonts/Jura-OFL.txt +0 -93
  376. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -93
  377. package/skills/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  378. package/skills/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  379. package/skills/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  380. package/skills/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  381. package/skills/skills/canvas-design/canvas-fonts/Lora-OFL.txt +0 -93
  382. package/skills/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  383. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  384. package/skills/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -93
  385. package/skills/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  386. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -93
  387. package/skills/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  388. package/skills/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  389. package/skills/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -93
  390. package/skills/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  391. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  392. package/skills/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -93
  393. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -93
  394. package/skills/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  395. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  396. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -93
  397. package/skills/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  398. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -93
  399. package/skills/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  400. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  401. package/skills/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -93
  402. package/skills/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  403. package/skills/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -93
  404. package/skills/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  405. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  406. package/skills/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  407. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  408. package/skills/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -93
  409. package/skills/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  410. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -93
  411. package/skills/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  412. package/skills/skills/doc-coauthoring/SKILL.md +0 -375
  413. package/skills/skills/docx/LICENSE.txt +0 -30
  414. package/skills/skills/docx/SKILL.md +0 -197
  415. package/skills/skills/docx/docx-js.md +0 -350
  416. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  417. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  418. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  419. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  420. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  421. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  422. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  423. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  424. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  425. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  426. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  427. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  428. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  429. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  430. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  431. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  432. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  433. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  434. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  435. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  436. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  437. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  438. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  439. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  440. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  441. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  442. package/skills/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  443. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  444. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  445. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  446. package/skills/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  447. package/skills/skills/docx/ooxml/schemas/mce/mc.xsd +0 -75
  448. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  449. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  450. package/skills/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  451. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  452. package/skills/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  453. package/skills/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  454. package/skills/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  455. package/skills/skills/docx/ooxml/scripts/pack.py +0 -159
  456. package/skills/skills/docx/ooxml/scripts/unpack.py +0 -29
  457. package/skills/skills/docx/ooxml/scripts/validate.py +0 -69
  458. package/skills/skills/docx/ooxml/scripts/validation/__init__.py +0 -15
  459. package/skills/skills/docx/ooxml/scripts/validation/base.py +0 -951
  460. package/skills/skills/docx/ooxml/scripts/validation/docx.py +0 -274
  461. package/skills/skills/docx/ooxml/scripts/validation/pptx.py +0 -315
  462. package/skills/skills/docx/ooxml/scripts/validation/redlining.py +0 -279
  463. package/skills/skills/docx/ooxml.md +0 -610
  464. package/skills/skills/docx/scripts/__init__.py +0 -1
  465. package/skills/skills/docx/scripts/document.py +0 -1276
  466. package/skills/skills/docx/scripts/templates/comments.xml +0 -3
  467. package/skills/skills/docx/scripts/templates/commentsExtended.xml +0 -3
  468. package/skills/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
  469. package/skills/skills/docx/scripts/templates/commentsIds.xml +0 -3
  470. package/skills/skills/docx/scripts/templates/people.xml +0 -3
  471. package/skills/skills/docx/scripts/utilities.py +0 -374
  472. package/skills/skills/frontend-design/LICENSE.txt +0 -177
  473. package/skills/skills/frontend-design/SKILL.md +0 -42
  474. package/skills/skills/internal-comms/LICENSE.txt +0 -202
  475. package/skills/skills/internal-comms/SKILL.md +0 -32
  476. package/skills/skills/internal-comms/examples/3p-updates.md +0 -47
  477. package/skills/skills/internal-comms/examples/company-newsletter.md +0 -65
  478. package/skills/skills/internal-comms/examples/faq-answers.md +0 -30
  479. package/skills/skills/internal-comms/examples/general-comms.md +0 -16
  480. package/skills/skills/mcp-builder/LICENSE.txt +0 -202
  481. package/skills/skills/mcp-builder/SKILL.md +0 -236
  482. package/skills/skills/mcp-builder/reference/evaluation.md +0 -602
  483. package/skills/skills/mcp-builder/reference/mcp_best_practices.md +0 -249
  484. package/skills/skills/mcp-builder/reference/node_mcp_server.md +0 -970
  485. package/skills/skills/mcp-builder/reference/python_mcp_server.md +0 -719
  486. package/skills/skills/mcp-builder/scripts/connections.py +0 -151
  487. package/skills/skills/mcp-builder/scripts/evaluation.py +0 -373
  488. package/skills/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  489. package/skills/skills/mcp-builder/scripts/requirements.txt +0 -2
  490. package/skills/skills/pdf/LICENSE.txt +0 -30
  491. package/skills/skills/pdf/SKILL.md +0 -294
  492. package/skills/skills/pdf/forms.md +0 -205
  493. package/skills/skills/pdf/reference.md +0 -612
  494. package/skills/skills/pdf/scripts/check_bounding_boxes.py +0 -70
  495. package/skills/skills/pdf/scripts/check_bounding_boxes_test.py +0 -226
  496. package/skills/skills/pdf/scripts/check_fillable_fields.py +0 -12
  497. package/skills/skills/pdf/scripts/convert_pdf_to_images.py +0 -35
  498. package/skills/skills/pdf/scripts/create_validation_image.py +0 -41
  499. package/skills/skills/pdf/scripts/extract_form_field_info.py +0 -152
  500. package/skills/skills/pdf/scripts/fill_fillable_fields.py +0 -114
  501. package/skills/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -108
  502. package/skills/skills/pptx/LICENSE.txt +0 -30
  503. package/skills/skills/pptx/SKILL.md +0 -484
  504. package/skills/skills/pptx/html2pptx.md +0 -625
  505. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  506. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  507. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  508. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  509. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  510. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  511. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  512. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  513. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  514. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  515. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  516. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  517. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  518. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  519. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  520. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  521. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  522. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  523. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  524. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  525. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  526. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  527. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  528. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  529. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  530. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  531. package/skills/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  532. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  533. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  534. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  535. package/skills/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  536. package/skills/skills/pptx/ooxml/schemas/mce/mc.xsd +0 -75
  537. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
  538. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
  539. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
  540. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
  541. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
  542. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  543. package/skills/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
  544. package/skills/skills/pptx/ooxml/scripts/pack.py +0 -159
  545. package/skills/skills/pptx/ooxml/scripts/unpack.py +0 -29
  546. package/skills/skills/pptx/ooxml/scripts/validate.py +0 -69
  547. package/skills/skills/pptx/ooxml/scripts/validation/__init__.py +0 -15
  548. package/skills/skills/pptx/ooxml/scripts/validation/base.py +0 -951
  549. package/skills/skills/pptx/ooxml/scripts/validation/docx.py +0 -274
  550. package/skills/skills/pptx/ooxml/scripts/validation/pptx.py +0 -315
  551. package/skills/skills/pptx/ooxml/scripts/validation/redlining.py +0 -279
  552. package/skills/skills/pptx/ooxml.md +0 -427
  553. package/skills/skills/pptx/scripts/html2pptx.js +0 -979
  554. package/skills/skills/pptx/scripts/inventory.py +0 -1020
  555. package/skills/skills/pptx/scripts/rearrange.py +0 -231
  556. package/skills/skills/pptx/scripts/replace.py +0 -385
  557. package/skills/skills/pptx/scripts/thumbnail.py +0 -450
  558. package/skills/skills/skill-creator/LICENSE.txt +0 -202
  559. package/skills/skills/skill-creator/SKILL.md +0 -356
  560. package/skills/skills/skill-creator/references/output-patterns.md +0 -82
  561. package/skills/skills/skill-creator/references/workflows.md +0 -28
  562. package/skills/skills/skill-creator/scripts/init_skill.py +0 -303
  563. package/skills/skills/skill-creator/scripts/package_skill.py +0 -110
  564. package/skills/skills/skill-creator/scripts/quick_validate.py +0 -95
  565. package/skills/skills/slack-gif-creator/LICENSE.txt +0 -202
  566. package/skills/skills/slack-gif-creator/SKILL.md +0 -254
  567. package/skills/skills/slack-gif-creator/core/easing.py +0 -234
  568. package/skills/skills/slack-gif-creator/core/frame_composer.py +0 -176
  569. package/skills/skills/slack-gif-creator/core/gif_builder.py +0 -269
  570. package/skills/skills/slack-gif-creator/core/validators.py +0 -136
  571. package/skills/skills/slack-gif-creator/requirements.txt +0 -4
  572. package/skills/skills/theme-factory/LICENSE.txt +0 -202
  573. package/skills/skills/theme-factory/SKILL.md +0 -59
  574. package/skills/skills/theme-factory/theme-showcase.pdf +0 -0
  575. package/skills/skills/theme-factory/themes/arctic-frost.md +0 -19
  576. package/skills/skills/theme-factory/themes/botanical-garden.md +0 -19
  577. package/skills/skills/theme-factory/themes/desert-rose.md +0 -19
  578. package/skills/skills/theme-factory/themes/forest-canopy.md +0 -19
  579. package/skills/skills/theme-factory/themes/golden-hour.md +0 -19
  580. package/skills/skills/theme-factory/themes/midnight-galaxy.md +0 -19
  581. package/skills/skills/theme-factory/themes/modern-minimalist.md +0 -19
  582. package/skills/skills/theme-factory/themes/ocean-depths.md +0 -19
  583. package/skills/skills/theme-factory/themes/sunset-boulevard.md +0 -19
  584. package/skills/skills/theme-factory/themes/tech-innovation.md +0 -19
  585. package/skills/skills/web-artifacts-builder/LICENSE.txt +0 -202
  586. package/skills/skills/web-artifacts-builder/SKILL.md +0 -74
  587. package/skills/skills/web-artifacts-builder/scripts/bundle-artifact.sh +0 -54
  588. package/skills/skills/web-artifacts-builder/scripts/init-artifact.sh +0 -322
  589. package/skills/skills/webapp-testing/LICENSE.txt +0 -202
  590. package/skills/skills/webapp-testing/SKILL.md +0 -96
  591. package/skills/skills/webapp-testing/examples/console_logging.py +0 -35
  592. package/skills/skills/webapp-testing/examples/element_discovery.py +0 -40
  593. package/skills/skills/webapp-testing/examples/static_html_automation.py +0 -33
  594. package/skills/skills/webapp-testing/scripts/with_server.py +0 -106
  595. package/skills/skills/xlsx/LICENSE.txt +0 -30
  596. package/skills/skills/xlsx/SKILL.md +0 -289
  597. package/skills/skills/xlsx/recalc.py +0 -178
  598. package/skills/spec/agent-skills-spec.md +0 -3
  599. package/skills/template/SKILL.md +0 -6
  600. package/src/ai-client.ts +0 -1560
  601. package/src/remote-ai-client.ts +0 -664
  602. /package/{.eslintrc.js → .eslintrc.cjs} +0 -0
@@ -1,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-expect-error - kwargs type mismatch with function signature
306
+ kwargs[key.trim()] = value;
307
+ }
308
+ }
309
+
310
+ return {
311
+ function: functionName,
312
+ args: kwargs,
313
+ };
314
+ } catch {
315
+ logger.debug(`[ActionParser] Skipping invalid action: '${actionStr}'`);
316
+ return null;
317
+ }
318
+ }