@zenalexa/unicli 0.210.0 → 0.212.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 (1127) hide show
  1. package/AGENTS.md +71 -134
  2. package/README.md +222 -209
  3. package/dist/cli.d.ts +8 -0
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +114 -9
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/acp.d.ts +14 -0
  8. package/dist/commands/acp.d.ts.map +1 -0
  9. package/dist/commands/acp.js +41 -0
  10. package/dist/commands/acp.js.map +1 -0
  11. package/dist/commands/agents.d.ts +14 -3
  12. package/dist/commands/agents.d.ts.map +1 -1
  13. package/dist/commands/agents.js +369 -140
  14. package/dist/commands/agents.js.map +1 -1
  15. package/dist/commands/health.d.ts.map +1 -1
  16. package/dist/commands/health.js +14 -0
  17. package/dist/commands/health.js.map +1 -1
  18. package/dist/commands/lint.d.ts +32 -0
  19. package/dist/commands/lint.d.ts.map +1 -0
  20. package/dist/commands/lint.js +377 -0
  21. package/dist/commands/lint.js.map +1 -0
  22. package/dist/commands/mcp.d.ts +3 -4
  23. package/dist/commands/mcp.d.ts.map +1 -1
  24. package/dist/commands/mcp.js +47 -62
  25. package/dist/commands/mcp.js.map +1 -1
  26. package/dist/commands/migrate-schema.d.ts +56 -0
  27. package/dist/commands/migrate-schema.d.ts.map +1 -0
  28. package/dist/commands/migrate-schema.js +522 -0
  29. package/dist/commands/migrate-schema.js.map +1 -0
  30. package/dist/commands/migrate.d.ts +54 -0
  31. package/dist/commands/migrate.d.ts.map +1 -0
  32. package/dist/commands/migrate.js +270 -0
  33. package/dist/commands/migrate.js.map +1 -0
  34. package/dist/commands/schema.d.ts +12 -0
  35. package/dist/commands/schema.d.ts.map +1 -0
  36. package/dist/commands/schema.js +72 -0
  37. package/dist/commands/schema.js.map +1 -0
  38. package/dist/commands/search.d.ts +12 -0
  39. package/dist/commands/search.d.ts.map +1 -0
  40. package/dist/commands/search.js +47 -0
  41. package/dist/commands/search.js.map +1 -0
  42. package/dist/commands/skills.d.ts.map +1 -1
  43. package/dist/commands/skills.js +76 -0
  44. package/dist/commands/skills.js.map +1 -1
  45. package/dist/constants.d.ts +2 -0
  46. package/dist/constants.d.ts.map +1 -1
  47. package/dist/constants.js +2 -0
  48. package/dist/constants.js.map +1 -1
  49. package/dist/core/envelope.d.ts +87 -0
  50. package/dist/core/envelope.d.ts.map +1 -0
  51. package/dist/core/envelope.js +94 -0
  52. package/dist/core/envelope.js.map +1 -0
  53. package/dist/core/index.d.ts +12 -0
  54. package/dist/core/index.d.ts.map +1 -0
  55. package/dist/core/index.js +12 -0
  56. package/dist/core/index.js.map +1 -0
  57. package/dist/core/registry.d.ts +63 -0
  58. package/dist/core/registry.d.ts.map +1 -0
  59. package/dist/core/registry.js +62 -0
  60. package/dist/core/registry.js.map +1 -0
  61. package/dist/core/schema-v2.d.ts +111 -0
  62. package/dist/core/schema-v2.d.ts.map +1 -0
  63. package/dist/core/schema-v2.js +118 -0
  64. package/dist/core/schema-v2.js.map +1 -0
  65. package/dist/core/types.d.ts +24 -0
  66. package/dist/core/types.d.ts.map +1 -0
  67. package/dist/core/types.js +15 -0
  68. package/dist/core/types.js.map +1 -0
  69. package/dist/discovery/aliases.d.ts +36 -0
  70. package/dist/discovery/aliases.d.ts.map +1 -0
  71. package/dist/discovery/aliases.js +520 -0
  72. package/dist/discovery/aliases.js.map +1 -0
  73. package/dist/discovery/loader.d.ts.map +1 -1
  74. package/dist/discovery/loader.js +107 -5
  75. package/dist/discovery/loader.js.map +1 -1
  76. package/dist/discovery/search.d.ts +73 -0
  77. package/dist/discovery/search.d.ts.map +1 -0
  78. package/dist/discovery/search.js +392 -0
  79. package/dist/discovery/search.js.map +1 -0
  80. package/dist/engine/repair/logger.d.ts.map +1 -1
  81. package/dist/engine/repair/logger.js +11 -1
  82. package/dist/engine/repair/logger.js.map +1 -1
  83. package/dist/engine/steps/browser.d.ts +11 -0
  84. package/dist/engine/steps/browser.d.ts.map +1 -0
  85. package/dist/engine/steps/browser.js +11 -0
  86. package/dist/engine/steps/browser.js.map +1 -0
  87. package/dist/engine/steps/control.d.ts +10 -0
  88. package/dist/engine/steps/control.d.ts.map +1 -0
  89. package/dist/engine/steps/control.js +10 -0
  90. package/dist/engine/steps/control.js.map +1 -0
  91. package/dist/engine/steps/cua.d.ts +53 -0
  92. package/dist/engine/steps/cua.d.ts.map +1 -0
  93. package/dist/engine/steps/cua.js +71 -0
  94. package/dist/engine/steps/cua.js.map +1 -0
  95. package/dist/engine/steps/desktop-ax.d.ts +38 -0
  96. package/dist/engine/steps/desktop-ax.d.ts.map +1 -0
  97. package/dist/engine/steps/desktop-ax.js +49 -0
  98. package/dist/engine/steps/desktop-ax.js.map +1 -0
  99. package/dist/engine/steps/desktop.d.ts +10 -0
  100. package/dist/engine/steps/desktop.d.ts.map +1 -0
  101. package/dist/engine/steps/desktop.js +10 -0
  102. package/dist/engine/steps/desktop.js.map +1 -0
  103. package/dist/engine/steps/download.d.ts +10 -0
  104. package/dist/engine/steps/download.d.ts.map +1 -0
  105. package/dist/engine/steps/download.js +10 -0
  106. package/dist/engine/steps/download.js.map +1 -0
  107. package/dist/engine/steps/fetch.d.ts +10 -0
  108. package/dist/engine/steps/fetch.d.ts.map +1 -0
  109. package/dist/engine/steps/fetch.js +10 -0
  110. package/dist/engine/steps/fetch.js.map +1 -0
  111. package/dist/engine/steps/index.d.ts +19 -0
  112. package/dist/engine/steps/index.d.ts.map +1 -0
  113. package/dist/engine/steps/index.js +19 -0
  114. package/dist/engine/steps/index.js.map +1 -0
  115. package/dist/engine/steps/transform.d.ts +10 -0
  116. package/dist/engine/steps/transform.d.ts.map +1 -0
  117. package/dist/engine/steps/transform.js +10 -0
  118. package/dist/engine/steps/transform.js.map +1 -0
  119. package/dist/engine/steps/websocket.d.ts +10 -0
  120. package/dist/engine/steps/websocket.d.ts.map +1 -0
  121. package/dist/engine/steps/websocket.js +10 -0
  122. package/dist/engine/steps/websocket.js.map +1 -0
  123. package/dist/engine/yaml-runner.d.ts +159 -1
  124. package/dist/engine/yaml-runner.d.ts.map +1 -1
  125. package/dist/engine/yaml-runner.js +180 -32
  126. package/dist/engine/yaml-runner.js.map +1 -1
  127. package/dist/manifest-compact.txt +15 -0
  128. package/dist/manifest-search.json +1 -0
  129. package/dist/manifest.json +530 -244
  130. package/dist/mcp/elicitation.d.ts +56 -0
  131. package/dist/mcp/elicitation.d.ts.map +1 -0
  132. package/dist/mcp/elicitation.js +62 -0
  133. package/dist/mcp/elicitation.js.map +1 -0
  134. package/dist/mcp/oauth.d.ts +33 -0
  135. package/dist/mcp/oauth.d.ts.map +1 -0
  136. package/dist/mcp/oauth.js +291 -0
  137. package/dist/mcp/oauth.js.map +1 -0
  138. package/dist/mcp/schema.d.ts +65 -0
  139. package/dist/mcp/schema.d.ts.map +1 -0
  140. package/dist/mcp/schema.js +136 -0
  141. package/dist/mcp/schema.js.map +1 -0
  142. package/dist/mcp/server.d.ts +28 -10
  143. package/dist/mcp/server.d.ts.map +1 -1
  144. package/dist/mcp/server.js +408 -234
  145. package/dist/mcp/server.js.map +1 -1
  146. package/dist/mcp/sse-transport.d.ts +34 -0
  147. package/dist/mcp/sse-transport.d.ts.map +1 -0
  148. package/dist/mcp/sse-transport.js +182 -0
  149. package/dist/mcp/sse-transport.js.map +1 -0
  150. package/dist/mcp/streamable-http.d.ts +89 -0
  151. package/dist/mcp/streamable-http.d.ts.map +1 -0
  152. package/dist/mcp/streamable-http.js +566 -0
  153. package/dist/mcp/streamable-http.js.map +1 -0
  154. package/dist/output/formatter.d.ts +14 -4
  155. package/dist/output/formatter.d.ts.map +1 -1
  156. package/dist/output/formatter.js +49 -25
  157. package/dist/output/formatter.js.map +1 -1
  158. package/dist/permissions/sensitive-paths.js +2 -2
  159. package/dist/permissions/sensitive-paths.js.map +1 -1
  160. package/dist/protocol/acp.d.ts +126 -0
  161. package/dist/protocol/acp.d.ts.map +1 -0
  162. package/dist/protocol/acp.js +588 -0
  163. package/dist/protocol/acp.js.map +1 -0
  164. package/dist/protocol/skill.d.ts +106 -0
  165. package/dist/protocol/skill.d.ts.map +1 -0
  166. package/dist/protocol/skill.js +276 -0
  167. package/dist/protocol/skill.js.map +1 -0
  168. package/dist/registry.d.ts +2 -0
  169. package/dist/registry.d.ts.map +1 -1
  170. package/dist/registry.js +2 -0
  171. package/dist/registry.js.map +1 -1
  172. package/dist/transport/adapters/cdp-browser.d.ts +44 -0
  173. package/dist/transport/adapters/cdp-browser.d.ts.map +1 -0
  174. package/dist/transport/adapters/cdp-browser.js +240 -0
  175. package/dist/transport/adapters/cdp-browser.js.map +1 -0
  176. package/dist/transport/adapters/cua.d.ts +240 -0
  177. package/dist/transport/adapters/cua.d.ts.map +1 -0
  178. package/dist/transport/adapters/cua.js +663 -0
  179. package/dist/transport/adapters/cua.js.map +1 -0
  180. package/dist/transport/adapters/desktop-atspi.d.ts +27 -0
  181. package/dist/transport/adapters/desktop-atspi.d.ts.map +1 -0
  182. package/dist/transport/adapters/desktop-atspi.js +65 -0
  183. package/dist/transport/adapters/desktop-atspi.js.map +1 -0
  184. package/dist/transport/adapters/desktop-ax.d.ts +59 -0
  185. package/dist/transport/adapters/desktop-ax.d.ts.map +1 -0
  186. package/dist/transport/adapters/desktop-ax.js +311 -0
  187. package/dist/transport/adapters/desktop-ax.js.map +1 -0
  188. package/dist/transport/adapters/desktop-uia.d.ts +27 -0
  189. package/dist/transport/adapters/desktop-uia.d.ts.map +1 -0
  190. package/dist/transport/adapters/desktop-uia.js +66 -0
  191. package/dist/transport/adapters/desktop-uia.js.map +1 -0
  192. package/dist/transport/adapters/http.d.ts +40 -0
  193. package/dist/transport/adapters/http.d.ts.map +1 -0
  194. package/dist/transport/adapters/http.js +353 -0
  195. package/dist/transport/adapters/http.js.map +1 -0
  196. package/dist/transport/adapters/subprocess.d.ts +27 -0
  197. package/dist/transport/adapters/subprocess.d.ts.map +1 -0
  198. package/dist/transport/adapters/subprocess.js +254 -0
  199. package/dist/transport/adapters/subprocess.js.map +1 -0
  200. package/dist/transport/bus.d.ts +28 -0
  201. package/dist/transport/bus.d.ts.map +1 -0
  202. package/dist/transport/bus.js +112 -0
  203. package/dist/transport/bus.js.map +1 -0
  204. package/dist/transport/capability.d.ts +38 -0
  205. package/dist/transport/capability.d.ts.map +1 -0
  206. package/dist/transport/capability.js +254 -0
  207. package/dist/transport/capability.js.map +1 -0
  208. package/dist/transport/types.d.ts +148 -0
  209. package/dist/transport/types.d.ts.map +1 -0
  210. package/dist/transport/types.js +19 -0
  211. package/dist/transport/types.js.map +1 -0
  212. package/dist/types.d.ts +18 -2
  213. package/dist/types.d.ts.map +1 -1
  214. package/dist/types.js.map +1 -1
  215. package/package.json +32 -10
  216. package/src/adapters/1688/_site.json +9 -0
  217. package/src/adapters/1688/item.yaml +7 -0
  218. package/src/adapters/1688/search.yaml +7 -0
  219. package/src/adapters/1688/store.yaml +7 -0
  220. package/src/adapters/36kr/article.yaml +7 -0
  221. package/src/adapters/36kr/hot.yaml +7 -0
  222. package/src/adapters/36kr/latest.yaml +7 -0
  223. package/src/adapters/36kr/news.yaml +7 -0
  224. package/src/adapters/36kr/search.yaml +7 -0
  225. package/src/adapters/adguardhome/add-rule.yaml +7 -0
  226. package/src/adapters/adguardhome/rules.yaml +7 -0
  227. package/src/adapters/adguardhome/stats.yaml +7 -0
  228. package/src/adapters/adguardhome/status.yaml +7 -0
  229. package/src/adapters/adguardhome/toggle.yaml +7 -0
  230. package/src/adapters/amazon/bestsellers.yaml +7 -0
  231. package/src/adapters/amazon/discussion.yaml +7 -0
  232. package/src/adapters/amazon/movers-shakers.yaml +7 -0
  233. package/src/adapters/amazon/new-releases.yaml +7 -0
  234. package/src/adapters/amazon/offer.yaml +7 -0
  235. package/src/adapters/amazon/product.yaml +7 -0
  236. package/src/adapters/amazon/rankings.yaml +7 -0
  237. package/src/adapters/amazon/search.yaml +7 -0
  238. package/src/adapters/apple-music/rate-album.yaml +71 -0
  239. package/src/adapters/apple-notes/list.yaml +52 -0
  240. package/src/adapters/apple-notes/read.yaml +44 -0
  241. package/src/adapters/apple-notes/search.yaml +43 -0
  242. package/src/adapters/apple-podcasts/episodes.yaml +7 -0
  243. package/src/adapters/apple-podcasts/search.yaml +7 -0
  244. package/src/adapters/apple-podcasts/top.yaml +7 -0
  245. package/src/adapters/arxiv/paper.yaml +7 -0
  246. package/src/adapters/arxiv/search.yaml +7 -0
  247. package/src/adapters/arxiv/trending.yaml +7 -0
  248. package/src/adapters/audacity/convert.yaml +7 -0
  249. package/src/adapters/audacity/effects.yaml +7 -0
  250. package/src/adapters/audacity/info.yaml +7 -0
  251. package/src/adapters/audacity/mix.yaml +7 -0
  252. package/src/adapters/audacity/normalize.yaml +7 -0
  253. package/src/adapters/audacity/spectrogram.yaml +7 -0
  254. package/src/adapters/audacity/split-channels.yaml +7 -0
  255. package/src/adapters/audacity/trim.yaml +7 -0
  256. package/src/adapters/autoagent/eval-run.yaml +7 -0
  257. package/src/adapters/aws/s3-ls.yaml +7 -0
  258. package/src/adapters/az/account.yaml +7 -0
  259. package/src/adapters/baidu/hot.yaml +7 -0
  260. package/src/adapters/baidu/search.yaml +7 -0
  261. package/src/adapters/band/bands.yaml +7 -0
  262. package/src/adapters/band/mentions.yaml +7 -0
  263. package/src/adapters/band/post.yaml +7 -0
  264. package/src/adapters/band/posts.yaml +7 -0
  265. package/src/adapters/barchart/_site.json +10 -0
  266. package/src/adapters/barchart/flow.yaml +7 -0
  267. package/src/adapters/barchart/greeks.yaml +7 -0
  268. package/src/adapters/barchart/options.yaml +7 -0
  269. package/src/adapters/barchart/quote.yaml +7 -0
  270. package/src/adapters/bbc/news.yaml +7 -0
  271. package/src/adapters/bbc/technology.yaml +7 -0
  272. package/src/adapters/bbc/top.yaml +7 -0
  273. package/src/adapters/bbc/world.yaml +7 -0
  274. package/src/adapters/bilibili/coin.yaml +7 -0
  275. package/src/adapters/bilibili/dynamic.yaml +7 -0
  276. package/src/adapters/bilibili/favorites.yaml +7 -0
  277. package/src/adapters/bilibili/feed.yaml +7 -0
  278. package/src/adapters/bilibili/following.yaml +7 -0
  279. package/src/adapters/bilibili/history.yaml +7 -0
  280. package/src/adapters/bilibili/hot.yaml +7 -0
  281. package/src/adapters/bilibili/later.yaml +7 -0
  282. package/src/adapters/bilibili/live.yaml +7 -0
  283. package/src/adapters/bilibili/me.yaml +7 -0
  284. package/src/adapters/bilibili/ranking.yaml +7 -0
  285. package/src/adapters/bilibili/trending.yaml +7 -0
  286. package/src/adapters/binance/hot.yaml +7 -0
  287. package/src/adapters/binance/kline.yaml +7 -0
  288. package/src/adapters/binance/ticker.yaml +7 -0
  289. package/src/adapters/blender/animation.yaml +7 -0
  290. package/src/adapters/blender/camera.yaml +7 -0
  291. package/src/adapters/blender/convert.yaml +7 -0
  292. package/src/adapters/blender/export.yaml +7 -0
  293. package/src/adapters/blender/import.yaml +7 -0
  294. package/src/adapters/blender/info.yaml +7 -0
  295. package/src/adapters/blender/lighting.yaml +7 -0
  296. package/src/adapters/blender/materials.yaml +7 -0
  297. package/src/adapters/blender/objects.yaml +7 -0
  298. package/src/adapters/blender/render.yaml +7 -0
  299. package/src/adapters/blender/scene.yaml +7 -0
  300. package/src/adapters/blender/screenshot.yaml +7 -0
  301. package/src/adapters/blender/script.yaml +7 -0
  302. package/src/adapters/bloomberg/businessweek.yaml +7 -0
  303. package/src/adapters/bloomberg/economics.yaml +7 -0
  304. package/src/adapters/bloomberg/feeds.yaml +7 -0
  305. package/src/adapters/bloomberg/industries.yaml +7 -0
  306. package/src/adapters/bloomberg/main.yaml +7 -0
  307. package/src/adapters/bloomberg/markets.yaml +7 -0
  308. package/src/adapters/bloomberg/news.yaml +7 -0
  309. package/src/adapters/bloomberg/opinions.yaml +7 -0
  310. package/src/adapters/bloomberg/politics.yaml +7 -0
  311. package/src/adapters/bloomberg/tech.yaml +7 -0
  312. package/src/adapters/bluesky/feeds.yaml +7 -0
  313. package/src/adapters/bluesky/followers.yaml +7 -0
  314. package/src/adapters/bluesky/following.yaml +7 -0
  315. package/src/adapters/bluesky/likes.yaml +7 -0
  316. package/src/adapters/bluesky/notifications.yaml +7 -0
  317. package/src/adapters/bluesky/post.yaml +7 -0
  318. package/src/adapters/bluesky/profile.yaml +7 -0
  319. package/src/adapters/bluesky/search.yaml +7 -0
  320. package/src/adapters/bluesky/starter-packs.yaml +7 -0
  321. package/src/adapters/bluesky/thread.yaml +7 -0
  322. package/src/adapters/bluesky/trending.yaml +7 -0
  323. package/src/adapters/bluesky/user.yaml +7 -0
  324. package/src/adapters/boss/batchgreet.yaml +7 -0
  325. package/src/adapters/boss/chatlist.yaml +7 -0
  326. package/src/adapters/boss/chatmsg.yaml +7 -0
  327. package/src/adapters/boss/detail.yaml +7 -0
  328. package/src/adapters/boss/exchange.yaml +7 -0
  329. package/src/adapters/boss/greet.yaml +7 -0
  330. package/src/adapters/boss/invite.yaml +7 -0
  331. package/src/adapters/boss/joblist.yaml +7 -0
  332. package/src/adapters/boss/mark.yaml +7 -0
  333. package/src/adapters/boss/recommend.yaml +7 -0
  334. package/src/adapters/boss/resume.yaml +7 -0
  335. package/src/adapters/boss/search.yaml +7 -0
  336. package/src/adapters/boss/send.yaml +7 -0
  337. package/src/adapters/boss/stats.yaml +7 -0
  338. package/src/adapters/chaoxing/assignments.yaml +7 -0
  339. package/src/adapters/chaoxing/exams.yaml +7 -0
  340. package/src/adapters/chrome/bookmarks.yaml +7 -0
  341. package/src/adapters/chrome/tabs.yaml +7 -0
  342. package/src/adapters/claude-code/version.yaml +7 -0
  343. package/src/adapters/cloudcompare/compare.yaml +7 -0
  344. package/src/adapters/cloudcompare/convert.yaml +7 -0
  345. package/src/adapters/cloudcompare/info.yaml +7 -0
  346. package/src/adapters/cloudcompare/subsample.yaml +7 -0
  347. package/src/adapters/cnki/search.yaml +7 -0
  348. package/src/adapters/cnn/technology.yaml +7 -0
  349. package/src/adapters/cnn/top.yaml +7 -0
  350. package/src/adapters/cocoapods/info.yaml +7 -0
  351. package/src/adapters/cocoapods/search.yaml +7 -0
  352. package/src/adapters/codex-cli/version.yaml +7 -0
  353. package/src/adapters/coinbase/prices.yaml +7 -0
  354. package/src/adapters/coinbase/rates.yaml +7 -0
  355. package/src/adapters/comfyui/generate.yaml +7 -0
  356. package/src/adapters/comfyui/history.yaml +7 -0
  357. package/src/adapters/comfyui/nodes.yaml +7 -0
  358. package/src/adapters/comfyui/status.yaml +7 -0
  359. package/src/adapters/coupang/add-to-cart.yaml +7 -0
  360. package/src/adapters/coupang/hot.yaml +7 -0
  361. package/src/adapters/coupang/search.yaml +7 -0
  362. package/src/adapters/crates-io/info.yaml +7 -0
  363. package/src/adapters/crates-io/search.yaml +7 -0
  364. package/src/adapters/crates-io/versions.yaml +7 -0
  365. package/src/adapters/ctrip/hot.yaml +7 -0
  366. package/src/adapters/ctrip/search.yaml +7 -0
  367. package/src/adapters/cua/bench-list.yaml +7 -0
  368. package/src/adapters/cua/bench-run.yaml +7 -0
  369. package/src/adapters/dangdang/hot.yaml +7 -0
  370. package/src/adapters/dangdang/search.yaml +7 -0
  371. package/src/adapters/deepseek/chat.yaml +7 -0
  372. package/src/adapters/deepseek/models.yaml +7 -0
  373. package/src/adapters/devto/latest.yaml +7 -0
  374. package/src/adapters/devto/search.yaml +7 -0
  375. package/src/adapters/devto/tag.yaml +7 -0
  376. package/src/adapters/devto/top.yaml +7 -0
  377. package/src/adapters/devto/user.yaml +7 -0
  378. package/src/adapters/dianping/hot.yaml +7 -0
  379. package/src/adapters/dianping/search.yaml +7 -0
  380. package/src/adapters/dictionary/examples.yaml +7 -0
  381. package/src/adapters/dictionary/search.yaml +7 -0
  382. package/src/adapters/dictionary/synonyms.yaml +7 -0
  383. package/src/adapters/dingtalk/version.yaml +7 -0
  384. package/src/adapters/docker/build.yaml +7 -0
  385. package/src/adapters/docker/images.yaml +7 -0
  386. package/src/adapters/docker/logs.yaml +7 -0
  387. package/src/adapters/docker/networks.yaml +7 -0
  388. package/src/adapters/docker/ps.yaml +7 -0
  389. package/src/adapters/docker/run.yaml +7 -0
  390. package/src/adapters/docker/volumes.yaml +7 -0
  391. package/src/adapters/docker-hub/info.yaml +7 -0
  392. package/src/adapters/docker-hub/search.yaml +7 -0
  393. package/src/adapters/docker-hub/tags.yaml +7 -0
  394. package/src/adapters/doctl/droplets.yaml +7 -0
  395. package/src/adapters/douban/book-hot.yaml +7 -0
  396. package/src/adapters/douban/download.yaml +7 -0
  397. package/src/adapters/douban/group-hot.yaml +7 -0
  398. package/src/adapters/douban/marks.yaml +7 -0
  399. package/src/adapters/douban/movie-hot.yaml +7 -0
  400. package/src/adapters/douban/new-movies.yaml +7 -0
  401. package/src/adapters/douban/photos.yaml +7 -0
  402. package/src/adapters/douban/reviews.yaml +7 -0
  403. package/src/adapters/douban/search.yaml +7 -0
  404. package/src/adapters/douban/subject.yaml +7 -0
  405. package/src/adapters/douban/top250.yaml +7 -0
  406. package/src/adapters/douban/tv-hot.yaml +7 -0
  407. package/src/adapters/doubao/ask.yaml +7 -0
  408. package/src/adapters/doubao/new.yaml +7 -0
  409. package/src/adapters/doubao/status.yaml +7 -0
  410. package/src/adapters/doubao-web/ask.yaml +7 -0
  411. package/src/adapters/doubao-web/detail.yaml +7 -0
  412. package/src/adapters/doubao-web/history.yaml +7 -0
  413. package/src/adapters/doubao-web/meeting-summary.yaml +7 -0
  414. package/src/adapters/doubao-web/meeting-transcript.yaml +7 -0
  415. package/src/adapters/doubao-web/new.yaml +7 -0
  416. package/src/adapters/doubao-web/read.yaml +7 -0
  417. package/src/adapters/doubao-web/send.yaml +7 -0
  418. package/src/adapters/doubao-web/status.yaml +7 -0
  419. package/src/adapters/douyu/hot.yaml +7 -0
  420. package/src/adapters/douyu/search.yaml +7 -0
  421. package/src/adapters/drawio/export.yaml +7 -0
  422. package/src/adapters/eastmoney/fund.yaml +7 -0
  423. package/src/adapters/eastmoney/hot.yaml +7 -0
  424. package/src/adapters/eastmoney/market.yaml +7 -0
  425. package/src/adapters/eastmoney/search.yaml +7 -0
  426. package/src/adapters/ele/hot.yaml +8 -0
  427. package/src/adapters/ele/search.yaml +8 -0
  428. package/src/adapters/exchangerate/convert.yaml +7 -0
  429. package/src/adapters/exchangerate/list.yaml +7 -0
  430. package/src/adapters/facebook/add-friend.yaml +7 -0
  431. package/src/adapters/facebook/events.yaml +7 -0
  432. package/src/adapters/facebook/feed.yaml +7 -0
  433. package/src/adapters/facebook/friends.yaml +7 -0
  434. package/src/adapters/facebook/groups.yaml +7 -0
  435. package/src/adapters/facebook/join-group.yaml +7 -0
  436. package/src/adapters/facebook/marketplace.yaml +7 -0
  437. package/src/adapters/facebook/memories.yaml +7 -0
  438. package/src/adapters/facebook/notifications.yaml +7 -0
  439. package/src/adapters/facebook/post.yaml +7 -0
  440. package/src/adapters/facebook/profile.yaml +7 -0
  441. package/src/adapters/facebook/search.yaml +7 -0
  442. package/src/adapters/feishu/calendar.yaml +7 -0
  443. package/src/adapters/feishu/docs.yaml +7 -0
  444. package/src/adapters/feishu/send.yaml +7 -0
  445. package/src/adapters/feishu/tasks.yaml +7 -0
  446. package/src/adapters/ffmpeg/compress.yaml +7 -0
  447. package/src/adapters/ffmpeg/concat.yaml +7 -0
  448. package/src/adapters/ffmpeg/convert.yaml +7 -0
  449. package/src/adapters/ffmpeg/extract-audio.yaml +7 -0
  450. package/src/adapters/ffmpeg/gif.yaml +7 -0
  451. package/src/adapters/ffmpeg/normalize.yaml +7 -0
  452. package/src/adapters/ffmpeg/probe.yaml +7 -0
  453. package/src/adapters/ffmpeg/resize.yaml +7 -0
  454. package/src/adapters/ffmpeg/subtitles.yaml +7 -0
  455. package/src/adapters/ffmpeg/thumbnail.yaml +7 -0
  456. package/src/adapters/ffmpeg/trim.yaml +7 -0
  457. package/src/adapters/figma/export-selected.yaml +67 -0
  458. package/src/adapters/flyctl/apps.yaml +7 -0
  459. package/src/adapters/freecad/assembly.yaml +7 -0
  460. package/src/adapters/freecad/bom.yaml +7 -0
  461. package/src/adapters/freecad/boolean.yaml +7 -0
  462. package/src/adapters/freecad/check.yaml +7 -0
  463. package/src/adapters/freecad/convert.yaml +7 -0
  464. package/src/adapters/freecad/export-stl.yaml +7 -0
  465. package/src/adapters/freecad/import.yaml +7 -0
  466. package/src/adapters/freecad/info.yaml +7 -0
  467. package/src/adapters/freecad/macro.yaml +7 -0
  468. package/src/adapters/freecad/measure.yaml +7 -0
  469. package/src/adapters/freecad/mesh.yaml +7 -0
  470. package/src/adapters/freecad/properties.yaml +7 -0
  471. package/src/adapters/freecad/render.yaml +7 -0
  472. package/src/adapters/freecad/section.yaml +7 -0
  473. package/src/adapters/freecad/sketch.yaml +7 -0
  474. package/src/adapters/futu/hot.yaml +7 -0
  475. package/src/adapters/futu/quote.yaml +7 -0
  476. package/src/adapters/gcloud/projects.yaml +7 -0
  477. package/src/adapters/gemini/ask.yaml +7 -0
  478. package/src/adapters/gemini/deep-research-result.yaml +7 -0
  479. package/src/adapters/gemini/deep-research.yaml +7 -0
  480. package/src/adapters/gemini/image.yaml +7 -0
  481. package/src/adapters/gemini/new.yaml +7 -0
  482. package/src/adapters/gh/issue.yaml +7 -0
  483. package/src/adapters/gh/pr.yaml +7 -0
  484. package/src/adapters/gh/release.yaml +7 -0
  485. package/src/adapters/gh/repo.yaml +7 -0
  486. package/src/adapters/gh/run.yaml +7 -0
  487. package/src/adapters/gimp/adjust.yaml +7 -0
  488. package/src/adapters/gimp/batch.yaml +7 -0
  489. package/src/adapters/gimp/convert.yaml +7 -0
  490. package/src/adapters/gimp/crop.yaml +7 -0
  491. package/src/adapters/gimp/filter.yaml +7 -0
  492. package/src/adapters/gimp/flip.yaml +7 -0
  493. package/src/adapters/gimp/info.yaml +7 -0
  494. package/src/adapters/gimp/layers.yaml +7 -0
  495. package/src/adapters/gimp/merge-layers.yaml +7 -0
  496. package/src/adapters/gimp/resize.yaml +7 -0
  497. package/src/adapters/gimp/rotate.yaml +7 -0
  498. package/src/adapters/gimp/text.yaml +7 -0
  499. package/src/adapters/gitee/repos.yaml +7 -0
  500. package/src/adapters/gitee/search.yaml +7 -0
  501. package/src/adapters/gitee/trending.yaml +7 -0
  502. package/src/adapters/github-trending/daily.yaml +7 -0
  503. package/src/adapters/github-trending/developers.yaml +7 -0
  504. package/src/adapters/github-trending/weekly.yaml +7 -0
  505. package/src/adapters/gitlab/projects.yaml +7 -0
  506. package/src/adapters/gitlab/search.yaml +7 -0
  507. package/src/adapters/gitlab/trending.yaml +7 -0
  508. package/src/adapters/godot/project-run.yaml +7 -0
  509. package/src/adapters/godot/scene-export.yaml +7 -0
  510. package/src/adapters/google/news.yaml +7 -0
  511. package/src/adapters/google/search.yaml +7 -0
  512. package/src/adapters/google/suggest.yaml +7 -0
  513. package/src/adapters/google/trends.yaml +7 -0
  514. package/src/adapters/grok/ask.yaml +7 -0
  515. package/src/adapters/hackernews/ask.yaml +7 -0
  516. package/src/adapters/hackernews/best.yaml +7 -0
  517. package/src/adapters/hackernews/comments.yaml +7 -0
  518. package/src/adapters/hackernews/item.yaml +7 -0
  519. package/src/adapters/hackernews/jobs.yaml +7 -0
  520. package/src/adapters/hackernews/new.yaml +7 -0
  521. package/src/adapters/hackernews/search.yaml +7 -0
  522. package/src/adapters/hackernews/show.yaml +7 -0
  523. package/src/adapters/hackernews/top.yaml +7 -0
  524. package/src/adapters/hackernews/user.yaml +7 -0
  525. package/src/adapters/hermes/sessions-search.yaml +7 -0
  526. package/src/adapters/hermes/skills-list.yaml +7 -0
  527. package/src/adapters/hermes/skills-read.yaml +7 -0
  528. package/src/adapters/hf/datasets.yaml +7 -0
  529. package/src/adapters/hf/models.yaml +7 -0
  530. package/src/adapters/hf/spaces.yaml +7 -0
  531. package/src/adapters/hf/top.yaml +7 -0
  532. package/src/adapters/homebrew/info.yaml +7 -0
  533. package/src/adapters/homebrew/search.yaml +7 -0
  534. package/src/adapters/huggingface-papers/daily.yaml +7 -0
  535. package/src/adapters/huggingface-papers/search.yaml +7 -0
  536. package/src/adapters/hupu/detail.yaml +7 -0
  537. package/src/adapters/hupu/hot.yaml +7 -0
  538. package/src/adapters/hupu/like.yaml +7 -0
  539. package/src/adapters/hupu/mentions.yaml +7 -0
  540. package/src/adapters/hupu/reply.yaml +7 -0
  541. package/src/adapters/hupu/search.yaml +7 -0
  542. package/src/adapters/hupu/unlike.yaml +7 -0
  543. package/src/adapters/imagemagick/compare.yaml +7 -0
  544. package/src/adapters/imagemagick/composite.yaml +7 -0
  545. package/src/adapters/imagemagick/convert.yaml +7 -0
  546. package/src/adapters/imagemagick/identify.yaml +7 -0
  547. package/src/adapters/imagemagick/montage.yaml +7 -0
  548. package/src/adapters/imagemagick/resize.yaml +7 -0
  549. package/src/adapters/imdb/box-office.yaml +7 -0
  550. package/src/adapters/imdb/person.yaml +7 -0
  551. package/src/adapters/imdb/reviews.yaml +7 -0
  552. package/src/adapters/imdb/search.yaml +7 -0
  553. package/src/adapters/imdb/title.yaml +7 -0
  554. package/src/adapters/imdb/top.yaml +7 -0
  555. package/src/adapters/imdb/trending.yaml +7 -0
  556. package/src/adapters/imessage/contact.yaml +73 -0
  557. package/src/adapters/imessage/recent.yaml +66 -0
  558. package/src/adapters/imessage/search.yaml +75 -0
  559. package/src/adapters/infoq/articles.yaml +7 -0
  560. package/src/adapters/infoq/latest.yaml +7 -0
  561. package/src/adapters/inkscape/convert.yaml +7 -0
  562. package/src/adapters/inkscape/export.yaml +7 -0
  563. package/src/adapters/inkscape/optimize.yaml +7 -0
  564. package/src/adapters/instagram/activity.yaml +7 -0
  565. package/src/adapters/instagram/comment.yaml +7 -0
  566. package/src/adapters/instagram/explore.yaml +7 -0
  567. package/src/adapters/instagram/follow.yaml +7 -0
  568. package/src/adapters/instagram/followers.yaml +7 -0
  569. package/src/adapters/instagram/following.yaml +7 -0
  570. package/src/adapters/instagram/highlights.yaml +7 -0
  571. package/src/adapters/instagram/like.yaml +7 -0
  572. package/src/adapters/instagram/profile.yaml +7 -0
  573. package/src/adapters/instagram/reels-trending.yaml +7 -0
  574. package/src/adapters/instagram/reels.yaml +7 -0
  575. package/src/adapters/instagram/save.yaml +7 -0
  576. package/src/adapters/instagram/saved.yaml +7 -0
  577. package/src/adapters/instagram/search.yaml +7 -0
  578. package/src/adapters/instagram/stories.yaml +7 -0
  579. package/src/adapters/instagram/suggested.yaml +7 -0
  580. package/src/adapters/instagram/tags.yaml +7 -0
  581. package/src/adapters/instagram/unfollow.yaml +7 -0
  582. package/src/adapters/instagram/unlike.yaml +7 -0
  583. package/src/adapters/instagram/unsave.yaml +7 -0
  584. package/src/adapters/instagram/user.yaml +7 -0
  585. package/src/adapters/ip-info/lookup.yaml +7 -0
  586. package/src/adapters/itch-io/popular.yaml +7 -0
  587. package/src/adapters/itch-io/search.yaml +7 -0
  588. package/src/adapters/itch-io/top.yaml +7 -0
  589. package/src/adapters/ithome/hot.yaml +7 -0
  590. package/src/adapters/ithome/latest.yaml +7 -0
  591. package/src/adapters/ithome/news.yaml +7 -0
  592. package/src/adapters/jd/_site.json +9 -0
  593. package/src/adapters/jd/hot.yaml +7 -0
  594. package/src/adapters/jd/item.yaml +7 -0
  595. package/src/adapters/jd/search.yaml +7 -0
  596. package/src/adapters/jianyu/search.yaml +7 -0
  597. package/src/adapters/jike/feed.yaml +7 -0
  598. package/src/adapters/jike/notifications.yaml +7 -0
  599. package/src/adapters/jike/post.yaml +7 -0
  600. package/src/adapters/jike/search.yaml +7 -0
  601. package/src/adapters/jike/topic.yaml +7 -0
  602. package/src/adapters/jike/user.yaml +7 -0
  603. package/src/adapters/jimeng/generate.yaml +7 -0
  604. package/src/adapters/jimeng/history.yaml +7 -0
  605. package/src/adapters/jq/format.yaml +7 -0
  606. package/src/adapters/jq/query.yaml +7 -0
  607. package/src/adapters/kdenlive/effects.yaml +7 -0
  608. package/src/adapters/kdenlive/info.yaml +7 -0
  609. package/src/adapters/kdenlive/render.yaml +7 -0
  610. package/src/adapters/ke/ershoufang.yaml +7 -0
  611. package/src/adapters/ke/xiaoqu.yaml +7 -0
  612. package/src/adapters/krita/batch.yaml +7 -0
  613. package/src/adapters/krita/convert.yaml +7 -0
  614. package/src/adapters/krita/export.yaml +7 -0
  615. package/src/adapters/krita/info.yaml +7 -0
  616. package/src/adapters/kuaishou/hot.yaml +8 -0
  617. package/src/adapters/kuaishou/search.yaml +8 -0
  618. package/src/adapters/lark/version.yaml +7 -0
  619. package/src/adapters/lesswrong/comments.yaml +7 -0
  620. package/src/adapters/lesswrong/curated.yaml +7 -0
  621. package/src/adapters/lesswrong/frontpage.yaml +7 -0
  622. package/src/adapters/lesswrong/new.yaml +7 -0
  623. package/src/adapters/lesswrong/read.yaml +7 -0
  624. package/src/adapters/lesswrong/sequences.yaml +7 -0
  625. package/src/adapters/lesswrong/shortform.yaml +7 -0
  626. package/src/adapters/lesswrong/tag.yaml +7 -0
  627. package/src/adapters/lesswrong/tags.yaml +7 -0
  628. package/src/adapters/lesswrong/top-month.yaml +7 -0
  629. package/src/adapters/lesswrong/top-week.yaml +7 -0
  630. package/src/adapters/lesswrong/top-year.yaml +7 -0
  631. package/src/adapters/lesswrong/top.yaml +7 -0
  632. package/src/adapters/lesswrong/user-posts.yaml +7 -0
  633. package/src/adapters/lesswrong/user.yaml +7 -0
  634. package/src/adapters/libreoffice/convert.yaml +7 -0
  635. package/src/adapters/libreoffice/print.yaml +7 -0
  636. package/src/adapters/linear/issue-create.yaml +98 -0
  637. package/src/adapters/linear/issue-list.yaml +87 -0
  638. package/src/adapters/linear/issue-update.yaml +100 -0
  639. package/src/adapters/linkedin/_site.json +10 -0
  640. package/src/adapters/linkedin/jobs.yaml +7 -0
  641. package/src/adapters/linkedin/profile.yaml +7 -0
  642. package/src/adapters/linkedin/search.yaml +7 -0
  643. package/src/adapters/linkedin/timeline.yaml +7 -0
  644. package/src/adapters/linux-do/categories.yaml +7 -0
  645. package/src/adapters/linux-do/category.yaml +7 -0
  646. package/src/adapters/linux-do/feed.yaml +7 -0
  647. package/src/adapters/linux-do/hot.yaml +7 -0
  648. package/src/adapters/linux-do/latest.yaml +7 -0
  649. package/src/adapters/linux-do/search.yaml +7 -0
  650. package/src/adapters/linux-do/tags.yaml +7 -0
  651. package/src/adapters/linux-do/topic.yaml +7 -0
  652. package/src/adapters/linux-do/user-posts.yaml +7 -0
  653. package/src/adapters/linux-do/user-topics.yaml +7 -0
  654. package/src/adapters/lobsters/active.yaml +7 -0
  655. package/src/adapters/lobsters/hot.yaml +7 -0
  656. package/src/adapters/lobsters/newest.yaml +7 -0
  657. package/src/adapters/lobsters/search.yaml +7 -0
  658. package/src/adapters/lobsters/tag.yaml +7 -0
  659. package/src/adapters/macos/active-app.yaml +7 -0
  660. package/src/adapters/macos/apps-list.yaml +7 -0
  661. package/src/adapters/macos/apps.yaml +7 -0
  662. package/src/adapters/macos/battery.yaml +7 -0
  663. package/src/adapters/macos/bluetooth.yaml +7 -0
  664. package/src/adapters/macos/brightness.yaml +7 -0
  665. package/src/adapters/macos/caffeinate.yaml +7 -0
  666. package/src/adapters/macos/calendar-create.yaml +7 -0
  667. package/src/adapters/macos/calendar-list.yaml +7 -0
  668. package/src/adapters/macos/calendar-today.yaml +7 -0
  669. package/src/adapters/macos/clipboard.yaml +7 -0
  670. package/src/adapters/macos/contacts-search.yaml +7 -0
  671. package/src/adapters/macos/dark-mode.yaml +7 -0
  672. package/src/adapters/macos/disk-info.yaml +7 -0
  673. package/src/adapters/macos/disk-usage.yaml +7 -0
  674. package/src/adapters/macos/do-not-disturb.yaml +7 -0
  675. package/src/adapters/macos/empty-trash.yaml +7 -0
  676. package/src/adapters/macos/finder-copy.yaml +47 -0
  677. package/src/adapters/macos/finder-move.yaml +47 -0
  678. package/src/adapters/macos/finder-new-folder.yaml +43 -0
  679. package/src/adapters/macos/finder-recent.yaml +7 -0
  680. package/src/adapters/macos/finder-selection.yaml +7 -0
  681. package/src/adapters/macos/finder-tags.yaml +7 -0
  682. package/src/adapters/macos/lock-screen.yaml +7 -0
  683. package/src/adapters/macos/mail-send.yaml +7 -0
  684. package/src/adapters/macos/mail-status.yaml +7 -0
  685. package/src/adapters/macos/messages-send.yaml +7 -0
  686. package/src/adapters/macos/music-control.yaml +7 -0
  687. package/src/adapters/macos/music-now.yaml +7 -0
  688. package/src/adapters/macos/notes-list.yaml +7 -0
  689. package/src/adapters/macos/notes-search.yaml +7 -0
  690. package/src/adapters/macos/notification.yaml +7 -0
  691. package/src/adapters/macos/notify.yaml +7 -0
  692. package/src/adapters/macos/open-app.yaml +7 -0
  693. package/src/adapters/macos/open.yaml +7 -0
  694. package/src/adapters/macos/photos-search.yaml +7 -0
  695. package/src/adapters/macos/processes.yaml +7 -0
  696. package/src/adapters/macos/reminder-create.yaml +7 -0
  697. package/src/adapters/macos/reminders-complete.yaml +7 -0
  698. package/src/adapters/macos/reminders-list.yaml +7 -0
  699. package/src/adapters/macos/safari-history.yaml +30 -0
  700. package/src/adapters/macos/safari-tabs.yaml +7 -0
  701. package/src/adapters/macos/safari-url.yaml +29 -0
  702. package/src/adapters/macos/say.yaml +7 -0
  703. package/src/adapters/macos/screen-lock.yaml +7 -0
  704. package/src/adapters/macos/screen-recording.yaml +39 -0
  705. package/src/adapters/macos/screenshot.yaml +7 -0
  706. package/src/adapters/macos/shortcuts-list.yaml +7 -0
  707. package/src/adapters/macos/shortcuts-run.yaml +7 -0
  708. package/src/adapters/macos/sleep.yaml +7 -0
  709. package/src/adapters/macos/spotlight.yaml +7 -0
  710. package/src/adapters/macos/system-info.yaml +7 -0
  711. package/src/adapters/macos/trash.yaml +7 -0
  712. package/src/adapters/macos/uptime.yaml +7 -0
  713. package/src/adapters/macos/volume.yaml +7 -0
  714. package/src/adapters/macos/wallpaper.yaml +40 -0
  715. package/src/adapters/macos/wifi-info.yaml +7 -0
  716. package/src/adapters/macos/wifi.yaml +7 -0
  717. package/src/adapters/maimai/search.yaml +7 -0
  718. package/src/adapters/maoyan/hot.yaml +7 -0
  719. package/src/adapters/maoyan/search.yaml +7 -0
  720. package/src/adapters/mastodon/search.yaml +7 -0
  721. package/src/adapters/mastodon/timeline.yaml +7 -0
  722. package/src/adapters/mastodon/trending.yaml +7 -0
  723. package/src/adapters/mastodon/user.yaml +7 -0
  724. package/src/adapters/medium/article.yaml +7 -0
  725. package/src/adapters/medium/feed.yaml +7 -0
  726. package/src/adapters/medium/search.yaml +7 -0
  727. package/src/adapters/medium/trending.yaml +7 -0
  728. package/src/adapters/medium/user.yaml +7 -0
  729. package/src/adapters/meituan/hot.yaml +7 -0
  730. package/src/adapters/meituan/search.yaml +7 -0
  731. package/src/adapters/mermaid/render.yaml +7 -0
  732. package/src/adapters/minimax/chat.yaml +7 -0
  733. package/src/adapters/minimax/models.yaml +7 -0
  734. package/src/adapters/minimax/tts.yaml +7 -0
  735. package/src/adapters/motion-studio/component-get.yaml +7 -0
  736. package/src/adapters/mubu/list.yaml +7 -0
  737. package/src/adapters/mubu/search.yaml +14 -0
  738. package/src/adapters/musescore/convert.yaml +7 -0
  739. package/src/adapters/musescore/export.yaml +7 -0
  740. package/src/adapters/musescore/info.yaml +7 -0
  741. package/src/adapters/musescore/instruments.yaml +7 -0
  742. package/src/adapters/musescore/transpose.yaml +7 -0
  743. package/src/adapters/neonctl/projects.yaml +7 -0
  744. package/src/adapters/netease-music/hot.yaml +7 -0
  745. package/src/adapters/netease-music/playlist.yaml +7 -0
  746. package/src/adapters/netease-music/search.yaml +7 -0
  747. package/src/adapters/netease-music/top.yaml +7 -0
  748. package/src/adapters/netlify/sites.yaml +7 -0
  749. package/src/adapters/notebooklm/current.yaml +7 -0
  750. package/src/adapters/notebooklm/get.yaml +7 -0
  751. package/src/adapters/notebooklm/history.yaml +7 -0
  752. package/src/adapters/notebooklm/list.yaml +7 -0
  753. package/src/adapters/notebooklm/note-list.yaml +7 -0
  754. package/src/adapters/notebooklm/notes-get.yaml +7 -0
  755. package/src/adapters/notebooklm/open.yaml +7 -0
  756. package/src/adapters/notebooklm/rpc.yaml +7 -0
  757. package/src/adapters/notebooklm/shared.yaml +7 -0
  758. package/src/adapters/notebooklm/source-fulltext.yaml +7 -0
  759. package/src/adapters/notebooklm/source-get.yaml +7 -0
  760. package/src/adapters/notebooklm/source-guide.yaml +7 -0
  761. package/src/adapters/notebooklm/source-list.yaml +7 -0
  762. package/src/adapters/notebooklm/status.yaml +7 -0
  763. package/src/adapters/notebooklm/summary.yaml +7 -0
  764. package/src/adapters/notion/databases.yaml +7 -0
  765. package/src/adapters/notion/pages.yaml +7 -0
  766. package/src/adapters/notion/search.yaml +7 -0
  767. package/src/adapters/novita/generate.yaml +7 -0
  768. package/src/adapters/novita/models.yaml +7 -0
  769. package/src/adapters/novita/status.yaml +7 -0
  770. package/src/adapters/npm/downloads.yaml +7 -0
  771. package/src/adapters/npm/info.yaml +7 -0
  772. package/src/adapters/npm/search.yaml +7 -0
  773. package/src/adapters/npm/versions.yaml +7 -0
  774. package/src/adapters/npm-trends/compare.yaml +7 -0
  775. package/src/adapters/npm-trends/trending.yaml +7 -0
  776. package/src/adapters/nytimes/search.yaml +7 -0
  777. package/src/adapters/nytimes/top.yaml +7 -0
  778. package/src/adapters/obs/record-start.yaml +7 -0
  779. package/src/adapters/obs/record-stop.yaml +7 -0
  780. package/src/adapters/obs/scenes.yaml +7 -0
  781. package/src/adapters/obs/screenshot.yaml +7 -0
  782. package/src/adapters/obs/sources.yaml +7 -0
  783. package/src/adapters/obs/status.yaml +7 -0
  784. package/src/adapters/obs/stream-start.yaml +7 -0
  785. package/src/adapters/obs/stream-stop.yaml +7 -0
  786. package/src/adapters/obsidian/daily.yaml +7 -0
  787. package/src/adapters/obsidian/open.yaml +7 -0
  788. package/src/adapters/obsidian/search.yaml +7 -0
  789. package/src/adapters/ollama/generate.yaml +7 -0
  790. package/src/adapters/ollama/list.yaml +7 -0
  791. package/src/adapters/ollama/models.yaml +7 -0
  792. package/src/adapters/ollama/ps.yaml +7 -0
  793. package/src/adapters/ones/enrich-tasks.yaml +7 -0
  794. package/src/adapters/ones/login.yaml +7 -0
  795. package/src/adapters/ones/logout.yaml +7 -0
  796. package/src/adapters/ones/me.yaml +7 -0
  797. package/src/adapters/ones/my-tasks.yaml +7 -0
  798. package/src/adapters/ones/resolve-labels.yaml +7 -0
  799. package/src/adapters/ones/task-helpers.yaml +7 -0
  800. package/src/adapters/ones/task.yaml +7 -0
  801. package/src/adapters/ones/tasks.yaml +7 -0
  802. package/src/adapters/ones/token-info.yaml +7 -0
  803. package/src/adapters/ones/worklog.yaml +7 -0
  804. package/src/adapters/opencode/version.yaml +7 -0
  805. package/src/adapters/openharness/memory-read.yaml +7 -0
  806. package/src/adapters/openharness/skills-list.yaml +7 -0
  807. package/src/adapters/openrouter/models.yaml +7 -0
  808. package/src/adapters/openrouter/search.yaml +7 -0
  809. package/src/adapters/pandoc/convert.yaml +7 -0
  810. package/src/adapters/paperreview/feedback.yaml +7 -0
  811. package/src/adapters/paperreview/review.yaml +7 -0
  812. package/src/adapters/paperreview/submit.yaml +7 -0
  813. package/src/adapters/perplexity/ask.yaml +7 -0
  814. package/src/adapters/pexels/curated.yaml +7 -0
  815. package/src/adapters/pexels/search.yaml +7 -0
  816. package/src/adapters/pinduoduo/hot.yaml +7 -0
  817. package/src/adapters/pinduoduo/search.yaml +7 -0
  818. package/src/adapters/pixiv/detail.yaml +7 -0
  819. package/src/adapters/pixiv/download.yaml +7 -0
  820. package/src/adapters/pixiv/illusts.yaml +7 -0
  821. package/src/adapters/pixiv/ranking.yaml +7 -0
  822. package/src/adapters/pixiv/search.yaml +7 -0
  823. package/src/adapters/pixiv/user.yaml +7 -0
  824. package/src/adapters/producthunt/browse.yaml +7 -0
  825. package/src/adapters/producthunt/hot.yaml +7 -0
  826. package/src/adapters/producthunt/posts.yaml +7 -0
  827. package/src/adapters/producthunt/search.yaml +7 -0
  828. package/src/adapters/producthunt/today.yaml +7 -0
  829. package/src/adapters/pscale/databases.yaml +7 -0
  830. package/src/adapters/pypi/info.yaml +7 -0
  831. package/src/adapters/pypi/search.yaml +7 -0
  832. package/src/adapters/pypi/versions.yaml +7 -0
  833. package/src/adapters/quark/ls.yaml +7 -0
  834. package/src/adapters/quark/search.yaml +7 -0
  835. package/src/adapters/qweather/forecast.yaml +7 -0
  836. package/src/adapters/qweather/now.yaml +7 -0
  837. package/src/adapters/railway/deploy.yaml +7 -0
  838. package/src/adapters/reddit/comment.yaml +7 -0
  839. package/src/adapters/reddit/comments.yaml +7 -0
  840. package/src/adapters/reddit/frontpage.yaml +7 -0
  841. package/src/adapters/reddit/hot.yaml +7 -0
  842. package/src/adapters/reddit/new.yaml +7 -0
  843. package/src/adapters/reddit/popular.yaml +7 -0
  844. package/src/adapters/reddit/read.yaml +7 -0
  845. package/src/adapters/reddit/rising.yaml +7 -0
  846. package/src/adapters/reddit/save.yaml +7 -0
  847. package/src/adapters/reddit/saved.yaml +7 -0
  848. package/src/adapters/reddit/search.yaml +7 -0
  849. package/src/adapters/reddit/subreddit.yaml +7 -0
  850. package/src/adapters/reddit/subscribe.yaml +7 -0
  851. package/src/adapters/reddit/top.yaml +7 -0
  852. package/src/adapters/reddit/trending.yaml +7 -0
  853. package/src/adapters/reddit/upvote.yaml +7 -0
  854. package/src/adapters/reddit/upvoted.yaml +7 -0
  855. package/src/adapters/reddit/user-comments.yaml +7 -0
  856. package/src/adapters/reddit/user-posts.yaml +7 -0
  857. package/src/adapters/reddit/user.yaml +7 -0
  858. package/src/adapters/renderdoc/capture-list.yaml +7 -0
  859. package/src/adapters/renderdoc/frame-export.yaml +7 -0
  860. package/src/adapters/replicate/run.yaml +7 -0
  861. package/src/adapters/replicate/search.yaml +7 -0
  862. package/src/adapters/replicate/trending.yaml +7 -0
  863. package/src/adapters/reuters/_site.json +9 -0
  864. package/src/adapters/reuters/article.yaml +7 -0
  865. package/src/adapters/reuters/latest.yaml +7 -0
  866. package/src/adapters/reuters/search.yaml +7 -0
  867. package/src/adapters/reuters/top.yaml +7 -0
  868. package/src/adapters/shotcut/effects.yaml +7 -0
  869. package/src/adapters/shotcut/info.yaml +7 -0
  870. package/src/adapters/shotcut/render.yaml +7 -0
  871. package/src/adapters/sinablog/_site.json +9 -0
  872. package/src/adapters/sinablog/article.yaml +7 -0
  873. package/src/adapters/sinablog/hot.yaml +7 -0
  874. package/src/adapters/sinablog/search.yaml +7 -0
  875. package/src/adapters/sinablog/user.yaml +7 -0
  876. package/src/adapters/sinafinance/market.yaml +7 -0
  877. package/src/adapters/sinafinance/news.yaml +7 -0
  878. package/src/adapters/sinafinance/rolling-news.yaml +7 -0
  879. package/src/adapters/sinafinance/stock-rank.yaml +7 -0
  880. package/src/adapters/sinafinance/stock.yaml +7 -0
  881. package/src/adapters/sketch/artboards.yaml +7 -0
  882. package/src/adapters/sketch/export.yaml +7 -0
  883. package/src/adapters/sketch/symbols.yaml +7 -0
  884. package/src/adapters/slack/channels.yaml +7 -0
  885. package/src/adapters/slack/messages.yaml +7 -0
  886. package/src/adapters/slack/post.yaml +7 -0
  887. package/src/adapters/slack/search.yaml +7 -0
  888. package/src/adapters/slack/send.yaml +7 -0
  889. package/src/adapters/slack/status.yaml +7 -0
  890. package/src/adapters/slack/users.yaml +7 -0
  891. package/src/adapters/slay-the-spire-ii/deck.yaml +7 -0
  892. package/src/adapters/slay-the-spire-ii/end-turn.yaml +7 -0
  893. package/src/adapters/slay-the-spire-ii/map.yaml +7 -0
  894. package/src/adapters/slay-the-spire-ii/play-card.yaml +7 -0
  895. package/src/adapters/slay-the-spire-ii/status.yaml +7 -0
  896. package/src/adapters/slay-the-spire-ii/use-potion.yaml +7 -0
  897. package/src/adapters/slock/servers.yaml +7 -0
  898. package/src/adapters/smzdm/_site.json +9 -0
  899. package/src/adapters/smzdm/article.yaml +7 -0
  900. package/src/adapters/smzdm/hot.yaml +7 -0
  901. package/src/adapters/smzdm/search.yaml +7 -0
  902. package/src/adapters/spotify/now-playing.yaml +7 -0
  903. package/src/adapters/spotify/playlists.yaml +7 -0
  904. package/src/adapters/spotify/search.yaml +7 -0
  905. package/src/adapters/spotify/top-tracks.yaml +7 -0
  906. package/src/adapters/sspai/hot.yaml +7 -0
  907. package/src/adapters/sspai/latest.yaml +7 -0
  908. package/src/adapters/stackoverflow/bounties.yaml +7 -0
  909. package/src/adapters/stackoverflow/hot.yaml +7 -0
  910. package/src/adapters/stackoverflow/question.yaml +7 -0
  911. package/src/adapters/stackoverflow/search.yaml +7 -0
  912. package/src/adapters/stackoverflow/tags.yaml +7 -0
  913. package/src/adapters/stackoverflow/unanswered.yaml +7 -0
  914. package/src/adapters/stagehand/wrap-observe.yaml +7 -0
  915. package/src/adapters/steam/app-details.yaml +7 -0
  916. package/src/adapters/steam/new-releases.yaml +7 -0
  917. package/src/adapters/steam/search.yaml +7 -0
  918. package/src/adapters/steam/specials.yaml +7 -0
  919. package/src/adapters/steam/top-sellers.yaml +7 -0
  920. package/src/adapters/steam/wishlist.yaml +7 -0
  921. package/src/adapters/substack/feed.yaml +7 -0
  922. package/src/adapters/substack/publication.yaml +7 -0
  923. package/src/adapters/substack/search.yaml +7 -0
  924. package/src/adapters/substack/trending.yaml +7 -0
  925. package/src/adapters/supabase/projects.yaml +7 -0
  926. package/src/adapters/taobao/hot.yaml +7 -0
  927. package/src/adapters/taobao/search.yaml +7 -0
  928. package/src/adapters/techcrunch/latest.yaml +7 -0
  929. package/src/adapters/techcrunch/search.yaml +7 -0
  930. package/src/adapters/theverge/latest.yaml +7 -0
  931. package/src/adapters/theverge/search.yaml +7 -0
  932. package/src/adapters/threads/hot.yaml +8 -0
  933. package/src/adapters/threads/search.yaml +8 -0
  934. package/src/adapters/tieba/hot.yaml +7 -0
  935. package/src/adapters/tieba/posts.yaml +7 -0
  936. package/src/adapters/tieba/read.yaml +7 -0
  937. package/src/adapters/tieba/search.yaml +7 -0
  938. package/src/adapters/tiktok/comment.yaml +7 -0
  939. package/src/adapters/tiktok/explore.yaml +7 -0
  940. package/src/adapters/tiktok/follow.yaml +7 -0
  941. package/src/adapters/tiktok/following.yaml +7 -0
  942. package/src/adapters/tiktok/friends.yaml +7 -0
  943. package/src/adapters/tiktok/like.yaml +7 -0
  944. package/src/adapters/tiktok/live.yaml +7 -0
  945. package/src/adapters/tiktok/notifications.yaml +7 -0
  946. package/src/adapters/tiktok/profile.yaml +7 -0
  947. package/src/adapters/tiktok/save.yaml +7 -0
  948. package/src/adapters/tiktok/search.yaml +7 -0
  949. package/src/adapters/tiktok/trending.yaml +7 -0
  950. package/src/adapters/tiktok/unfollow.yaml +7 -0
  951. package/src/adapters/tiktok/unlike.yaml +7 -0
  952. package/src/adapters/tiktok/unsave.yaml +7 -0
  953. package/src/adapters/tiktok/user.yaml +7 -0
  954. package/src/adapters/toutiao/hot.yaml +7 -0
  955. package/src/adapters/toutiao/search.yaml +8 -0
  956. package/src/adapters/twitch/games.yaml +7 -0
  957. package/src/adapters/twitch/search.yaml +7 -0
  958. package/src/adapters/twitch/streams.yaml +7 -0
  959. package/src/adapters/twitch/top.yaml +7 -0
  960. package/src/adapters/twitter/lists.yaml +7 -0
  961. package/src/adapters/twitter/media.yaml +7 -0
  962. package/src/adapters/twitter/mentions.yaml +7 -0
  963. package/src/adapters/twitter/mute.yaml +7 -0
  964. package/src/adapters/twitter/pin.yaml +7 -0
  965. package/src/adapters/twitter/quotes.yaml +7 -0
  966. package/src/adapters/twitter/retweets.yaml +7 -0
  967. package/src/adapters/twitter/spaces.yaml +7 -0
  968. package/src/adapters/twitter/unmute.yaml +7 -0
  969. package/src/adapters/unsplash/random.yaml +7 -0
  970. package/src/adapters/unsplash/search.yaml +7 -0
  971. package/src/adapters/v2ex/daily.yaml +7 -0
  972. package/src/adapters/v2ex/hot.yaml +7 -0
  973. package/src/adapters/v2ex/latest.yaml +7 -0
  974. package/src/adapters/v2ex/me.yaml +7 -0
  975. package/src/adapters/v2ex/member.yaml +7 -0
  976. package/src/adapters/v2ex/node.yaml +7 -0
  977. package/src/adapters/v2ex/nodes.yaml +7 -0
  978. package/src/adapters/v2ex/notifications.yaml +7 -0
  979. package/src/adapters/v2ex/replies.yaml +7 -0
  980. package/src/adapters/v2ex/search.yaml +7 -0
  981. package/src/adapters/v2ex/topic.yaml +7 -0
  982. package/src/adapters/v2ex/user.yaml +7 -0
  983. package/src/adapters/vercel/list.yaml +7 -0
  984. package/src/adapters/vscode/extensions.yaml +7 -0
  985. package/src/adapters/vscode/install-ext.yaml +7 -0
  986. package/src/adapters/vscode/open.yaml +7 -0
  987. package/src/adapters/web/read.yaml +7 -0
  988. package/src/adapters/wechat-channels/hot.yaml +8 -0
  989. package/src/adapters/wechat-channels/search.yaml +15 -0
  990. package/src/adapters/weibo/comments.yaml +7 -0
  991. package/src/adapters/weibo/feed.yaml +7 -0
  992. package/src/adapters/weibo/hot.yaml +7 -0
  993. package/src/adapters/weibo/me.yaml +7 -0
  994. package/src/adapters/weibo/post.yaml +7 -0
  995. package/src/adapters/weibo/profile.yaml +7 -0
  996. package/src/adapters/weibo/search.yaml +7 -0
  997. package/src/adapters/weibo/timeline.yaml +7 -0
  998. package/src/adapters/weibo/trending.yaml +7 -0
  999. package/src/adapters/weibo/user.yaml +7 -0
  1000. package/src/adapters/weixin/_site.json +9 -0
  1001. package/src/adapters/weixin/article.yaml +7 -0
  1002. package/src/adapters/weixin/download.yaml +7 -0
  1003. package/src/adapters/weixin/hot.yaml +7 -0
  1004. package/src/adapters/weixin/search.yaml +7 -0
  1005. package/src/adapters/weread/book.yaml +7 -0
  1006. package/src/adapters/weread/highlights.yaml +7 -0
  1007. package/src/adapters/weread/notebooks.yaml +7 -0
  1008. package/src/adapters/weread/notes.yaml +7 -0
  1009. package/src/adapters/weread/ranking.yaml +7 -0
  1010. package/src/adapters/weread/search.yaml +7 -0
  1011. package/src/adapters/weread/shelf.yaml +7 -0
  1012. package/src/adapters/wikipedia/random.yaml +7 -0
  1013. package/src/adapters/wikipedia/search.yaml +7 -0
  1014. package/src/adapters/wikipedia/summary.yaml +7 -0
  1015. package/src/adapters/wikipedia/today.yaml +7 -0
  1016. package/src/adapters/wikipedia/trending.yaml +7 -0
  1017. package/src/adapters/wiremock/create-stub.yaml +7 -0
  1018. package/src/adapters/wiremock/delete-stub.yaml +7 -0
  1019. package/src/adapters/wiremock/reset.yaml +7 -0
  1020. package/src/adapters/wiremock/stubs.yaml +7 -0
  1021. package/src/adapters/wiremock/verify.yaml +7 -0
  1022. package/src/adapters/wrangler/list.yaml +7 -0
  1023. package/src/adapters/xianyu/chat.yaml +7 -0
  1024. package/src/adapters/xianyu/item.yaml +7 -0
  1025. package/src/adapters/xianyu/search.yaml +8 -0
  1026. package/src/adapters/xiaoe/catalog.yaml +7 -0
  1027. package/src/adapters/xiaoe/content.yaml +7 -0
  1028. package/src/adapters/xiaoe/courses.yaml +7 -0
  1029. package/src/adapters/xiaoe/detail.yaml +7 -0
  1030. package/src/adapters/xiaoe/play-url.yaml +7 -0
  1031. package/src/adapters/xiaohongshu/feed.yaml +7 -0
  1032. package/src/adapters/xiaohongshu/follow.yaml +7 -0
  1033. package/src/adapters/xiaohongshu/hashtag.yaml +7 -0
  1034. package/src/adapters/xiaohongshu/hot.yaml +7 -0
  1035. package/src/adapters/xiaohongshu/like.yaml +7 -0
  1036. package/src/adapters/xiaohongshu/notifications.yaml +7 -0
  1037. package/src/adapters/xiaohongshu/profile.yaml +7 -0
  1038. package/src/adapters/xiaohongshu/save.yaml +7 -0
  1039. package/src/adapters/xiaohongshu/suggest.yaml +7 -0
  1040. package/src/adapters/xiaohongshu/trending.yaml +7 -0
  1041. package/src/adapters/xiaohongshu/unfollow.yaml +7 -0
  1042. package/src/adapters/xiaoyuzhou/episode.yaml +7 -0
  1043. package/src/adapters/xiaoyuzhou/podcast-episodes.yaml +7 -0
  1044. package/src/adapters/xiaoyuzhou/podcast.yaml +7 -0
  1045. package/src/adapters/xueqiu/comments.yaml +7 -0
  1046. package/src/adapters/xueqiu/earnings-date.yaml +7 -0
  1047. package/src/adapters/xueqiu/feed.yaml +7 -0
  1048. package/src/adapters/xueqiu/fund-holdings.yaml +7 -0
  1049. package/src/adapters/xueqiu/fund-snapshot.yaml +7 -0
  1050. package/src/adapters/xueqiu/hot-stock.yaml +7 -0
  1051. package/src/adapters/xueqiu/hot.yaml +7 -0
  1052. package/src/adapters/xueqiu/market.yaml +7 -0
  1053. package/src/adapters/xueqiu/quote.yaml +7 -0
  1054. package/src/adapters/xueqiu/search.yaml +7 -0
  1055. package/src/adapters/xueqiu/stock.yaml +7 -0
  1056. package/src/adapters/xueqiu/watchlist.yaml +7 -0
  1057. package/src/adapters/yahoo-finance/quote.yaml +7 -0
  1058. package/src/adapters/yahoo-finance/search.yaml +7 -0
  1059. package/src/adapters/yahoo-finance/trending.yaml +7 -0
  1060. package/src/adapters/ycombinator/launches.yaml +7 -0
  1061. package/src/adapters/yollomi/background.yaml +7 -0
  1062. package/src/adapters/yollomi/edit.yaml +7 -0
  1063. package/src/adapters/yollomi/face-swap.yaml +7 -0
  1064. package/src/adapters/yollomi/generate.yaml +7 -0
  1065. package/src/adapters/yollomi/models.yaml +7 -0
  1066. package/src/adapters/yollomi/object-remover.yaml +7 -0
  1067. package/src/adapters/yollomi/remove-bg.yaml +7 -0
  1068. package/src/adapters/yollomi/restore.yaml +7 -0
  1069. package/src/adapters/yollomi/try-on.yaml +7 -0
  1070. package/src/adapters/yollomi/upload.yaml +7 -0
  1071. package/src/adapters/yollomi/upscale.yaml +7 -0
  1072. package/src/adapters/yollomi/video.yaml +7 -0
  1073. package/src/adapters/youtube/playlist.yaml +7 -0
  1074. package/src/adapters/youtube/shorts.yaml +7 -0
  1075. package/src/adapters/youtube/trending.yaml +7 -0
  1076. package/src/adapters/yt-dlp/download.yaml +7 -0
  1077. package/src/adapters/yt-dlp/extract-audio.yaml +7 -0
  1078. package/src/adapters/yt-dlp/info.yaml +7 -0
  1079. package/src/adapters/yt-dlp/search.yaml +7 -0
  1080. package/src/adapters/yuanbao/ask.yaml +7 -0
  1081. package/src/adapters/yuanbao/new.yaml +7 -0
  1082. package/src/adapters/yuanbao/shared.yaml +7 -0
  1083. package/src/adapters/zhihu/answer.yaml +7 -0
  1084. package/src/adapters/zhihu/answers.yaml +7 -0
  1085. package/src/adapters/zhihu/article.yaml +7 -0
  1086. package/src/adapters/zhihu/articles.yaml +7 -0
  1087. package/src/adapters/zhihu/collections.yaml +7 -0
  1088. package/src/adapters/zhihu/columns.yaml +7 -0
  1089. package/src/adapters/zhihu/comment.yaml +7 -0
  1090. package/src/adapters/zhihu/download.yaml +7 -0
  1091. package/src/adapters/zhihu/feed.yaml +7 -0
  1092. package/src/adapters/zhihu/followers.yaml +7 -0
  1093. package/src/adapters/zhihu/following.yaml +7 -0
  1094. package/src/adapters/zhihu/hot.yaml +7 -0
  1095. package/src/adapters/zhihu/me.yaml +7 -0
  1096. package/src/adapters/zhihu/notifications.yaml +7 -0
  1097. package/src/adapters/zhihu/pins.yaml +7 -0
  1098. package/src/adapters/zhihu/question.yaml +7 -0
  1099. package/src/adapters/zhihu/search.yaml +7 -0
  1100. package/src/adapters/zhihu/topic.yaml +7 -0
  1101. package/src/adapters/zhihu/topics.yaml +7 -0
  1102. package/src/adapters/zhihu/trending.yaml +7 -0
  1103. package/src/adapters/zhihu/user.yaml +7 -0
  1104. package/src/adapters/zoom/join.yaml +7 -0
  1105. package/src/adapters/zoom/start.yaml +7 -0
  1106. package/src/adapters/zoom/toggle-mute.yaml +37 -0
  1107. package/src/adapters/zotero/add-note.yaml +7 -0
  1108. package/src/adapters/zotero/add-tag.yaml +7 -0
  1109. package/src/adapters/zotero/collections.yaml +7 -0
  1110. package/src/adapters/zotero/export.yaml +7 -0
  1111. package/src/adapters/zotero/items.yaml +7 -0
  1112. package/src/adapters/zotero/notes.yaml +7 -0
  1113. package/src/adapters/zotero/search.yaml +7 -0
  1114. package/src/adapters/zotero/tags.yaml +7 -0
  1115. package/src/adapters/zsxq/dynamics.yaml +7 -0
  1116. package/src/adapters/zsxq/groups.yaml +7 -0
  1117. package/src/adapters/zsxq/search.yaml +7 -0
  1118. package/src/adapters/zsxq/topic.yaml +7 -0
  1119. package/src/adapters/zsxq/topics.yaml +7 -0
  1120. package/src/adapters/1688/manifest.yaml +0 -7
  1121. package/src/adapters/barchart/manifest.yaml +0 -8
  1122. package/src/adapters/jd/manifest.yaml +0 -7
  1123. package/src/adapters/linkedin/manifest.yaml +0 -8
  1124. package/src/adapters/reuters/manifest.yaml +0 -7
  1125. package/src/adapters/sinablog/manifest.yaml +0 -7
  1126. package/src/adapters/smzdm/manifest.yaml +0 -7
  1127. package/src/adapters/weixin/manifest.yaml +0 -7
@@ -16,11 +16,12 @@
16
16
  */
17
17
  import type { PipelineStep } from "../types.js";
18
18
  import type { BrowserPage } from "../browser/page.js";
19
+ import { type WebsocketStepConfig } from "./websocket.js";
19
20
  export interface PipelineOptions {
20
21
  site?: string;
21
22
  strategy?: string;
22
23
  }
23
- type PipelineContext = {
24
+ export type PipelineContext = {
24
25
  data: unknown;
25
26
  args: Record<string, unknown>;
26
27
  vars: Record<string, unknown>;
@@ -80,8 +81,85 @@ export declare class PipelineError extends Error {
80
81
  adapter: string | undefined;
81
82
  };
82
83
  }
84
+ /**
85
+ * SSRF defence — reject request URLs that point at non-http(s) schemes or
86
+ * reserved local address ranges before we issue the fetch.
87
+ *
88
+ * The attack shape this blocks: a YAML adapter takes `${{ args.query }}`
89
+ * and interpolates it into the request URL. An attacker (or a careless
90
+ * template author) feeds a payload like `http://169.254.169.254/latest/meta-data/`
91
+ * (AWS IMDS) or `http://127.0.0.1:19825/internal` (Uni-CLI daemon). Without
92
+ * this guard the runner happily fetches it and returns the response —
93
+ * leaking credentials or driving the daemon.
94
+ *
95
+ * The check is intentionally conservative: only http/https, and no loopback
96
+ * / link-local / private metadata addresses. Set `UNICLI_ALLOW_LOCAL=1` to
97
+ * bypass — useful for local dev / testing where a developer intentionally
98
+ * targets `127.0.0.1` or a docker compose stack on a private subnet.
99
+ */
100
+ export declare function assertSafeRequestUrl(raw: string): void;
101
+ /** Exposed for tests — reset the shared bus between runs. */
102
+ export declare function __resetTransportBusForTests(): void;
83
103
  export declare function runPipeline(steps: PipelineStep[], args: Record<string, unknown>, base?: string, options?: PipelineOptions): Promise<unknown[]>;
104
+ export interface AssertConfig {
105
+ url?: string;
106
+ selector?: string;
107
+ text?: string;
108
+ condition?: string;
109
+ message?: string;
110
+ }
111
+ export declare function stepAssert(ctx: PipelineContext, config: AssertConfig, stepIndex: number): Promise<PipelineContext>;
112
+ export interface FetchConfig {
113
+ url: string;
114
+ method?: string;
115
+ params?: Record<string, unknown>;
116
+ headers?: Record<string, string>;
117
+ body?: unknown;
118
+ retry?: number;
119
+ backoff?: number;
120
+ cache?: number;
121
+ }
122
+ export declare function stepFetch(ctx: PipelineContext, config: FetchConfig): Promise<PipelineContext>;
123
+ export declare function stepSelect(ctx: PipelineContext, path: string, stepIndex: number): PipelineContext;
124
+ export declare function stepMap(ctx: PipelineContext, template: Record<string, string>): PipelineContext;
125
+ export declare function stepFilter(ctx: PipelineContext, expr: string): PipelineContext;
126
+ export declare function stepLimit(ctx: PipelineContext, config: unknown): PipelineContext;
127
+ export declare function stepFetchText(ctx: PipelineContext, config: FetchConfig): Promise<PipelineContext>;
128
+ export interface RssConfig {
129
+ fields?: Record<string, string>;
130
+ }
131
+ export declare function stepParseRss(ctx: PipelineContext, config: RssConfig | undefined): PipelineContext;
132
+ export interface SortConfig {
133
+ by: string;
134
+ order?: "asc" | "desc";
135
+ }
136
+ export declare function stepSort(ctx: PipelineContext, config: SortConfig): PipelineContext;
137
+ export interface ExecConfig {
138
+ command: string;
139
+ args?: string[];
140
+ parse?: "lines" | "json" | "csv" | "text";
141
+ timeout?: number;
142
+ stdin?: string;
143
+ env?: Record<string, string>;
144
+ output_file?: string;
145
+ }
146
+ export declare function stepExec(ctx: PipelineContext, config: ExecConfig): Promise<PipelineContext>;
147
+ export declare function stepHtmlToMd(ctx: PipelineContext): PipelineContext;
84
148
  declare function buildScope(ctx: PipelineContext): Record<string, unknown>;
149
+ export declare function stepSet(ctx: PipelineContext, config: Record<string, unknown>): PipelineContext;
150
+ export declare function stepAppend(ctx: PipelineContext, key: string): PipelineContext;
151
+ export declare function stepIf(ctx: PipelineContext, config: {
152
+ if: string;
153
+ then?: PipelineStep[];
154
+ else?: PipelineStep[];
155
+ }, stepIndex: number, depth?: number): Promise<PipelineContext>;
156
+ export interface EachConfig {
157
+ max?: number;
158
+ do: PipelineStep[];
159
+ until?: string;
160
+ }
161
+ export declare function stepEach(ctx: PipelineContext, config: EachConfig, stepIndex: number, depth: number): Promise<PipelineContext>;
162
+ export declare function stepParallel(ctx: PipelineContext, branches: PipelineStep[], merge: string, stepIndex: number, depth: number): Promise<PipelineContext>;
85
163
  /**
86
164
  * Built-in pipe filters — used in template expressions like:
87
165
  * ${{ item.tags | join(', ') }}
@@ -98,5 +176,85 @@ declare const PIPE_FILTERS: Record<string, (...args: unknown[]) => unknown>;
98
176
  * Supports pipe filters: ${{ expr | join(', ') | slice(0, 100) }}
99
177
  */
100
178
  declare function evalExpression(expr: string, scope: Record<string, unknown>): unknown;
179
+ export interface WriteTempConfig {
180
+ filename: string;
181
+ content: string;
182
+ }
183
+ export declare function stepWriteTemp(ctx: PipelineContext, config: WriteTempConfig): PipelineContext;
184
+ export interface NavigateConfig {
185
+ url: string;
186
+ settleMs?: number;
187
+ waitUntil?: "load" | "domcontentloaded" | "networkidle" | "commit";
188
+ }
189
+ export declare function stepNavigate(ctx: PipelineContext, config: NavigateConfig): Promise<PipelineContext>;
190
+ export interface EvaluateConfig {
191
+ expression: string;
192
+ }
193
+ export declare function stepEvaluate(ctx: PipelineContext, config: EvaluateConfig | string): Promise<PipelineContext>;
194
+ export interface ClickConfig {
195
+ selector?: string;
196
+ x?: number;
197
+ y?: number;
198
+ quads?: boolean;
199
+ }
200
+ export declare function stepClick(ctx: PipelineContext, config: ClickConfig | string): Promise<PipelineContext>;
201
+ export interface TypeConfig {
202
+ text: string;
203
+ selector?: string;
204
+ submit?: boolean;
205
+ }
206
+ export declare function stepType(ctx: PipelineContext, config: TypeConfig): Promise<PipelineContext>;
207
+ export interface WaitBrowserConfig {
208
+ ms?: number;
209
+ selector?: string;
210
+ timeout?: number;
211
+ }
212
+ export declare function stepWaitBrowser(ctx: PipelineContext, config: WaitBrowserConfig | number): Promise<PipelineContext>;
213
+ export interface InterceptConfig {
214
+ trigger: string;
215
+ capture: string;
216
+ select?: string;
217
+ timeout?: number;
218
+ regex?: boolean;
219
+ all?: boolean;
220
+ captureText?: boolean;
221
+ }
222
+ export declare function stepIntercept(ctx: PipelineContext, config: InterceptConfig): Promise<PipelineContext>;
223
+ export declare function stepPress(ctx: PipelineContext, config: unknown): Promise<PipelineContext>;
224
+ export declare function stepScroll(ctx: PipelineContext, config: unknown): Promise<PipelineContext>;
225
+ export declare function stepSnapshot(ctx: PipelineContext, config: unknown): Promise<PipelineContext>;
226
+ export interface TapConfig {
227
+ store: string;
228
+ action: string;
229
+ capture: string;
230
+ timeout?: number;
231
+ select?: string;
232
+ framework?: "pinia" | "vuex" | "auto";
233
+ args?: unknown[];
234
+ }
235
+ export declare function stepTap(ctx: PipelineContext, config: TapConfig): Promise<PipelineContext>;
236
+ export interface DownloadStepConfig {
237
+ url: string;
238
+ dir?: string;
239
+ filename?: string;
240
+ concurrency?: number;
241
+ skip_existing?: boolean;
242
+ use_ytdlp?: boolean;
243
+ type?: "auto" | "image" | "video" | "document";
244
+ content?: string;
245
+ }
246
+ export declare function stepDownload(ctx: PipelineContext, config: DownloadStepConfig): Promise<PipelineContext>;
247
+ export declare function stepWebsocket(ctx: PipelineContext, config: WebsocketStepConfig): Promise<PipelineContext>;
248
+ interface FieldDef {
249
+ selector: string;
250
+ type?: "text" | "number" | "html" | "attribute";
251
+ attribute?: string;
252
+ pattern?: string;
253
+ }
254
+ export interface ExtractConfig {
255
+ from: string;
256
+ fields: Record<string, FieldDef>;
257
+ }
258
+ export declare function stepExtract(ctx: PipelineContext, config: ExtractConfig): Promise<PipelineContext>;
101
259
  export { PIPE_FILTERS, evalExpression, buildScope };
102
260
  //# sourceMappingURL=yaml-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"yaml-runner.d.ts","sourceRoot":"","sources":["../../src/engine/yaml-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yaml-runner.d.ts","sourceRoot":"","sources":["../../src/engine/yaml-runner.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,16 @@ import { generateInterceptorJs, generateReadInterceptedJs, } from "./interceptor
30
30
  import { httpDownload, ytdlpDownload, requiresYtdlp, sanitizeFilename, generateFilename, mapConcurrent, } from "./download.js";
31
31
  import { executeWebsocket } from "./websocket.js";
32
32
  import { getProxyAgent } from "./proxy.js";
33
+ import { createTransportBus } from "../transport/bus.js";
34
+ import { CuaTransport } from "../transport/adapters/cua.js";
35
+ import { DesktopAxTransport } from "../transport/adapters/desktop-ax.js";
36
+ import { DesktopUiaTransport } from "../transport/adapters/desktop-uia.js";
37
+ import { DesktopAtspiTransport } from "../transport/adapters/desktop-atspi.js";
38
+ import { HttpTransport } from "../transport/adapters/http.js";
39
+ import { SubprocessTransport } from "../transport/adapters/subprocess.js";
40
+ import { CdpBrowserTransport } from "../transport/adapters/cdp-browser.js";
41
+ import { CUA_STEP_HANDLERS } from "./steps/cua.js";
42
+ import { DESKTOP_AX_STEP_HANDLERS, } from "./steps/desktop-ax.js";
33
43
  const execFileAsync = promisify(execFile);
34
44
  /**
35
45
  * Structured pipeline error — designed for AI agent consumption.
@@ -63,6 +73,116 @@ const SIBLING_KEYS = new Set([
63
73
  "retry",
64
74
  "backoff",
65
75
  ]);
76
+ /**
77
+ * SSRF defence — reject request URLs that point at non-http(s) schemes or
78
+ * reserved local address ranges before we issue the fetch.
79
+ *
80
+ * The attack shape this blocks: a YAML adapter takes `${{ args.query }}`
81
+ * and interpolates it into the request URL. An attacker (or a careless
82
+ * template author) feeds a payload like `http://169.254.169.254/latest/meta-data/`
83
+ * (AWS IMDS) or `http://127.0.0.1:19825/internal` (Uni-CLI daemon). Without
84
+ * this guard the runner happily fetches it and returns the response —
85
+ * leaking credentials or driving the daemon.
86
+ *
87
+ * The check is intentionally conservative: only http/https, and no loopback
88
+ * / link-local / private metadata addresses. Set `UNICLI_ALLOW_LOCAL=1` to
89
+ * bypass — useful for local dev / testing where a developer intentionally
90
+ * targets `127.0.0.1` or a docker compose stack on a private subnet.
91
+ */
92
+ export function assertSafeRequestUrl(raw) {
93
+ let u;
94
+ try {
95
+ u = new URL(raw);
96
+ }
97
+ catch {
98
+ throw new Error(`invalid URL for pipeline fetch: ${raw.slice(0, 120)}`);
99
+ }
100
+ if (u.protocol !== "http:" && u.protocol !== "https:") {
101
+ throw new Error(`disallowed URL scheme for pipeline fetch: ${u.protocol} (only http/https)`);
102
+ }
103
+ if (process.env.UNICLI_ALLOW_LOCAL === "1")
104
+ return;
105
+ // Node's URL.hostname keeps the IPv6 brackets (`[::1]`) around the
106
+ // zero-compressed literal; strip them before comparing. This is load-
107
+ // bearing — a missing strip means `[::1]` and `[fe80::...]` slip past
108
+ // the check.
109
+ const hostnameLower = u.hostname.toLowerCase();
110
+ const host = hostnameLower.startsWith("[") && hostnameLower.endsWith("]")
111
+ ? hostnameLower.slice(1, -1)
112
+ : hostnameLower;
113
+ // Literal loopback / unspecified / link-local / cloud metadata
114
+ if (host === "localhost" ||
115
+ host === "0.0.0.0" ||
116
+ host === "::" ||
117
+ host === "::1" ||
118
+ host === "metadata.google.internal" ||
119
+ host === "metadata" ||
120
+ // IPv6 link-local (fe80::/10) and unique-local (fc00::/7 → fc/fd prefix)
121
+ host.startsWith("fe80:") ||
122
+ host.startsWith("fc") ||
123
+ host.startsWith("fd") ||
124
+ // IPv4 CIDR check — crude but covers the most common SSRF vectors.
125
+ // Full RFC-6890 enumeration is overkill for adapter fetches; if you
126
+ // need to target those ranges, set UNICLI_ALLOW_LOCAL=1.
127
+ host.startsWith("127.") ||
128
+ host.startsWith("10.") ||
129
+ host.startsWith("169.254.") ||
130
+ host.startsWith("192.168.") ||
131
+ /^172\.(1[6-9]|2\d|3[01])\./.test(host)) {
132
+ throw new Error(`blocked fetch to reserved/local address ${host} — set UNICLI_ALLOW_LOCAL=1 to override`);
133
+ }
134
+ }
135
+ /**
136
+ * Lazily-created transport bus — the capability registry for the runner.
137
+ *
138
+ * All seven v0.212 transports are registered so `bus.require(step)` gives
139
+ * an honest answer for every pipeline step name in the capability matrix.
140
+ * The legacy step executors (stepFetch / stepExec / browser ops) still run
141
+ * their own code paths for v0.212 compatibility — registering the HTTP,
142
+ * subprocess, and CDP transports here does NOT eagerly open Chrome or
143
+ * spawn a process; `open()` is only called when a handler dispatches
144
+ * through the bus (currently only the `cua_*` and `ax_*` step families).
145
+ *
146
+ * This is deliberately lightweight: the bus is the single source of truth
147
+ * for capability declarations; full execution routing through the bus is
148
+ * the v0.213 destination.
149
+ */
150
+ let sharedBus;
151
+ function getBus() {
152
+ if (sharedBus)
153
+ return sharedBus;
154
+ const bus = createTransportBus();
155
+ // Order matters only for fallback lookup — register in the canonical
156
+ // order from src/transport/capability.ts:TRANSPORT_KINDS.
157
+ bus.register(new HttpTransport());
158
+ bus.register(new CdpBrowserTransport());
159
+ bus.register(new SubprocessTransport());
160
+ bus.register(new DesktopAxTransport());
161
+ bus.register(new DesktopUiaTransport());
162
+ bus.register(new DesktopAtspiTransport());
163
+ bus.register(new CuaTransport());
164
+ sharedBus = bus;
165
+ return bus;
166
+ }
167
+ /** Exposed for tests — reset the shared bus between runs. */
168
+ export function __resetTransportBusForTests() {
169
+ sharedBus = undefined;
170
+ }
171
+ function buildTransportCtx(ctx) {
172
+ return {
173
+ cwd: process.cwd(),
174
+ env: process.env,
175
+ cookieHeader: ctx.cookieHeader,
176
+ vars: ctx.vars,
177
+ bus: getBus(),
178
+ };
179
+ }
180
+ function isCuaStep(action) {
181
+ return action in CUA_STEP_HANDLERS;
182
+ }
183
+ function isDesktopAxStep(action) {
184
+ return action in DESKTOP_AX_STEP_HANDLERS;
185
+ }
66
186
  function getActionEntry(step) {
67
187
  const entries = Object.entries(step);
68
188
  return (entries.find(([k]) => !SIBLING_KEYS.has(k)) ?? entries[0]);
@@ -141,6 +261,26 @@ async function executeStep(ctx, action, config, stepIndex, fullStep, depth) {
141
261
  case "extract":
142
262
  return stepExtract(ctx, config);
143
263
  default: {
264
+ // CUA family + macOS AX family dispatch through the transport bus.
265
+ // `action()` never throws — envelopes surface via ctx.vars.lastEnvelope.
266
+ if (isCuaStep(action)) {
267
+ const handler = CUA_STEP_HANDLERS[action];
268
+ const params = config && typeof config === "object" && !Array.isArray(config)
269
+ ? config
270
+ : {};
271
+ const envelope = await handler({ bus: getBus(), transportCtx: buildTransportCtx(ctx) }, params);
272
+ ctx.vars["lastEnvelope"] = envelope;
273
+ return { ...ctx, data: envelope.ok ? envelope.data : envelope };
274
+ }
275
+ if (isDesktopAxStep(action)) {
276
+ const handler = DESKTOP_AX_STEP_HANDLERS[action];
277
+ const params = config && typeof config === "object" && !Array.isArray(config)
278
+ ? config
279
+ : {};
280
+ const envelope = await handler({ bus: getBus(), transportCtx: buildTransportCtx(ctx) }, params);
281
+ ctx.vars["lastEnvelope"] = envelope;
282
+ return { ...ctx, data: envelope.ok ? envelope.data : envelope };
283
+ }
144
284
  // Check plugin custom step registry before giving up
145
285
  const { getCustomStep } = await import("../plugin/step-registry.js");
146
286
  const customHandler = getCustomStep(action);
@@ -423,7 +563,7 @@ function getBackoffMs(step, config) {
423
563
  }
424
564
  return 1000;
425
565
  }
426
- async function stepAssert(ctx, config, stepIndex) {
566
+ export async function stepAssert(ctx, config, stepIndex) {
427
567
  const page = ctx.page ? ctx.page : undefined;
428
568
  // URL assertion
429
569
  if (config.url) {
@@ -480,8 +620,9 @@ function assertionError(message, config, stepIndex) {
480
620
  alternatives: [],
481
621
  });
482
622
  }
483
- async function stepFetch(ctx, config) {
623
+ export async function stepFetch(ctx, config) {
484
624
  let url = evalTemplate(config.url, ctx);
625
+ assertSafeRequestUrl(url);
485
626
  // If data is an array of items with IDs, fetch each one (fan-out with concurrency limit)
486
627
  if (Array.isArray(ctx.data)) {
487
628
  const items = ctx.data;
@@ -492,6 +633,7 @@ async function stepFetch(ctx, config) {
492
633
  const results = await mapConcurrent(items, concurrency, async (item) => {
493
634
  const itemCtx = { ...ctx, data: item };
494
635
  const itemUrl = evalTemplate(config.url, itemCtx);
636
+ assertSafeRequestUrl(itemUrl);
495
637
  const resolvedConfig = config.body
496
638
  ? { ...config, body: resolveTemplateDeep(config.body, itemCtx) }
497
639
  : config;
@@ -657,7 +799,7 @@ async function fetchJson(url, config, cookieHeader) {
657
799
  // Unreachable — loop always returns or throws — but satisfies TypeScript
658
800
  throw new Error("fetchJson: unreachable");
659
801
  }
660
- function stepSelect(ctx, path, stepIndex) {
802
+ export function stepSelect(ctx, path, stepIndex) {
661
803
  const resolved = evalTemplate(path, ctx);
662
804
  const data = getNestedValue(ctx.data, resolved);
663
805
  if (data === undefined || data === null) {
@@ -673,7 +815,7 @@ function stepSelect(ctx, path, stepIndex) {
673
815
  }
674
816
  return { ...ctx, data };
675
817
  }
676
- function stepMap(ctx, template) {
818
+ export function stepMap(ctx, template) {
677
819
  if (!Array.isArray(ctx.data))
678
820
  return ctx;
679
821
  const items = ctx.data;
@@ -689,7 +831,7 @@ function stepMap(ctx, template) {
689
831
  });
690
832
  return { ...ctx, data: mapped };
691
833
  }
692
- function stepFilter(ctx, expr) {
834
+ export function stepFilter(ctx, expr) {
693
835
  if (!Array.isArray(ctx.data))
694
836
  return ctx;
695
837
  const items = ctx.data;
@@ -699,7 +841,7 @@ function stepFilter(ctx, expr) {
699
841
  });
700
842
  return { ...ctx, data: filtered };
701
843
  }
702
- function stepLimit(ctx, config) {
844
+ export function stepLimit(ctx, config) {
703
845
  if (!Array.isArray(ctx.data))
704
846
  return ctx;
705
847
  let n;
@@ -713,8 +855,9 @@ function stepLimit(ctx, config) {
713
855
  return { ...ctx, data: ctx.data.slice(0, n) };
714
856
  }
715
857
  // --- fetch_text: like fetch but returns raw text (for XML/RSS/HTML) ---
716
- async function stepFetchText(ctx, config) {
858
+ export async function stepFetchText(ctx, config) {
717
859
  let url = evalTemplate(config.url, ctx);
860
+ assertSafeRequestUrl(url);
718
861
  if (config.params) {
719
862
  const params = new URLSearchParams();
720
863
  for (const [k, v] of Object.entries(config.params)) {
@@ -757,7 +900,7 @@ async function stepFetchText(ctx, config) {
757
900
  const text = await resp.text();
758
901
  return { ...ctx, data: text };
759
902
  }
760
- function stepParseRss(ctx, config) {
903
+ export function stepParseRss(ctx, config) {
761
904
  const xml = String(ctx.data ?? "");
762
905
  const items = [];
763
906
  // Support both RSS 2.0 (<item>) and Atom (<entry>) formats
@@ -812,7 +955,7 @@ function extractXmlTag(xml, tag) {
812
955
  const m = xml.match(new RegExp(`<${tag}[^>]*>([\\s\\S]*?)</${tag}>`));
813
956
  return m ? m[1].trim() : "";
814
957
  }
815
- function stepSort(ctx, config) {
958
+ export function stepSort(ctx, config) {
816
959
  if (!Array.isArray(ctx.data))
817
960
  return ctx;
818
961
  const items = [...ctx.data];
@@ -830,7 +973,7 @@ function stepSort(ctx, config) {
830
973
  });
831
974
  return { ...ctx, data: items };
832
975
  }
833
- async function stepExec(ctx, config) {
976
+ export async function stepExec(ctx, config) {
834
977
  const cmd = evalTemplate(config.command, ctx);
835
978
  const execArgs = (config.args ?? []).map((a) => evalTemplate(String(a), ctx));
836
979
  const timeout = config.timeout ?? 30000;
@@ -995,7 +1138,7 @@ async function stepExec(ctx, config) {
995
1138
  }
996
1139
  }
997
1140
  // --- HTML to Markdown ---
998
- function stepHtmlToMd(ctx) {
1141
+ export function stepHtmlToMd(ctx) {
999
1142
  const html = String(ctx.data ?? "");
1000
1143
  const turndown = new TurndownService({
1001
1144
  headingStyle: "atx",
@@ -1041,7 +1184,7 @@ function buildScope(ctx) {
1041
1184
  return scope;
1042
1185
  }
1043
1186
  // --- Set step (store pipeline variables) ---
1044
- function stepSet(ctx, config) {
1187
+ export function stepSet(ctx, config) {
1045
1188
  if (!config || typeof config !== "object" || Array.isArray(config))
1046
1189
  return ctx;
1047
1190
  const resolved = {};
@@ -1051,7 +1194,7 @@ function stepSet(ctx, config) {
1051
1194
  return { ...ctx, vars: { ...ctx.vars, ...resolved } };
1052
1195
  }
1053
1196
  // --- Append step (accumulate data into vars array) ---
1054
- function stepAppend(ctx, key) {
1197
+ export function stepAppend(ctx, key) {
1055
1198
  if (typeof key !== "string" || !key)
1056
1199
  return ctx;
1057
1200
  const existing = ctx.vars[key];
@@ -1069,7 +1212,7 @@ function stepAppend(ctx, key) {
1069
1212
  return { ...ctx, vars: { ...ctx.vars, [key]: arr } };
1070
1213
  }
1071
1214
  // --- If/else step (conditional branching) ---
1072
- async function stepIf(ctx, config, stepIndex, depth = 0) {
1215
+ export async function stepIf(ctx, config, stepIndex, depth = 0) {
1073
1216
  if (depth > 10) {
1074
1217
  throw new PipelineError("if step recursion depth exceeded (max 10)", {
1075
1218
  step: stepIndex,
@@ -1097,7 +1240,7 @@ async function stepIf(ctx, config, stepIndex, depth = 0) {
1097
1240
  }
1098
1241
  return ctx;
1099
1242
  }
1100
- async function stepEach(ctx, config, stepIndex, depth) {
1243
+ export async function stepEach(ctx, config, stepIndex, depth) {
1101
1244
  if (depth > 10) {
1102
1245
  throw new PipelineError("each step recursion depth exceeded (max 10)", {
1103
1246
  step: stepIndex,
@@ -1139,7 +1282,7 @@ async function stepEach(ctx, config, stepIndex, depth) {
1139
1282
  return ctx;
1140
1283
  }
1141
1284
  // --- Parallel step (concurrent branch execution with merge strategies) ---
1142
- async function stepParallel(ctx, branches, merge, stepIndex, depth) {
1285
+ export async function stepParallel(ctx, branches, merge, stepIndex, depth) {
1143
1286
  if (!Array.isArray(branches) || branches.length === 0)
1144
1287
  return ctx;
1145
1288
  if (depth > 10) {
@@ -1153,7 +1296,12 @@ async function stepParallel(ctx, branches, merge, stepIndex, depth) {
1153
1296
  alternatives: [],
1154
1297
  });
1155
1298
  }
1156
- const results = await Promise.all(branches.map(async (branch) => {
1299
+ // Parallel concurrency cap bound simultaneous branch execution so a
1300
+ // pipeline with 100 parallel `fetch` steps doesn't exhaust the socket
1301
+ // pool or trip per-host rate limiters. Default 5 mirrors `stepFetch`
1302
+ // fan-out; overridable via `concurrency:` on the parallel step config
1303
+ // (read when the runner dispatches; plumbing goes through executeStep).
1304
+ const results = await mapConcurrent(branches, 5, async (branch) => {
1157
1305
  const branchCtx = {
1158
1306
  ...ctx,
1159
1307
  vars: { ...ctx.vars },
@@ -1161,7 +1309,7 @@ async function stepParallel(ctx, branches, merge, stepIndex, depth) {
1161
1309
  const [action, config] = getActionEntry(branch);
1162
1310
  const result = await executeStep(branchCtx, action, config, stepIndex, branch, depth + 1);
1163
1311
  return result.data;
1164
- }));
1312
+ });
1165
1313
  let merged;
1166
1314
  switch (merge) {
1167
1315
  case "zip": {
@@ -1495,7 +1643,7 @@ function resolveFilterArg(a, scope) {
1495
1643
  return a;
1496
1644
  }
1497
1645
  }
1498
- function stepWriteTemp(ctx, config) {
1646
+ export function stepWriteTemp(ctx, config) {
1499
1647
  const td = ctx.tempDir ?? join(tmpdir(), `unicli-${randomBytes(6).toString("hex")}`);
1500
1648
  mkdirSync(td, { recursive: true });
1501
1649
  const filename = evalTemplate(config.filename, ctx);
@@ -1594,7 +1742,7 @@ async function waitForNetworkIdle(page, maxMs = 5000, quietMs = 500) {
1594
1742
  await page.waitFor(100);
1595
1743
  }
1596
1744
  }
1597
- async function stepNavigate(ctx, config) {
1745
+ export async function stepNavigate(ctx, config) {
1598
1746
  const page = await acquirePage(ctx);
1599
1747
  const url = evalTemplate(config.url, ctx);
1600
1748
  const settleMs = config.settleMs ?? 0;
@@ -1604,7 +1752,7 @@ async function stepNavigate(ctx, config) {
1604
1752
  }
1605
1753
  return { ...ctx, page };
1606
1754
  }
1607
- async function stepEvaluate(ctx, config) {
1755
+ export async function stepEvaluate(ctx, config) {
1608
1756
  const page = await acquirePage(ctx);
1609
1757
  const expr = typeof config === "string"
1610
1758
  ? evalTemplate(config, ctx)
@@ -1612,7 +1760,7 @@ async function stepEvaluate(ctx, config) {
1612
1760
  const result = await page.evaluate(expr);
1613
1761
  return { ...ctx, data: result, page };
1614
1762
  }
1615
- async function stepClick(ctx, config) {
1763
+ export async function stepClick(ctx, config) {
1616
1764
  const page = await acquirePage(ctx);
1617
1765
  // String shorthand: just a CSS selector
1618
1766
  if (typeof config === "string") {
@@ -1641,7 +1789,7 @@ async function stepClick(ctx, config) {
1641
1789
  alternatives: [],
1642
1790
  });
1643
1791
  }
1644
- async function stepType(ctx, config) {
1792
+ export async function stepType(ctx, config) {
1645
1793
  const page = await acquirePage(ctx);
1646
1794
  const text = evalTemplate(config.text, ctx);
1647
1795
  if (config.selector) {
@@ -1656,7 +1804,7 @@ async function stepType(ctx, config) {
1656
1804
  await page.press("Enter");
1657
1805
  return { ...ctx, page };
1658
1806
  }
1659
- async function stepWaitBrowser(ctx, config) {
1807
+ export async function stepWaitBrowser(ctx, config) {
1660
1808
  const page = await acquirePage(ctx);
1661
1809
  if (typeof config === "number") {
1662
1810
  await page.waitFor(config);
@@ -1669,7 +1817,7 @@ async function stepWaitBrowser(ctx, config) {
1669
1817
  }
1670
1818
  return { ...ctx, page };
1671
1819
  }
1672
- async function stepIntercept(ctx, config) {
1820
+ export async function stepIntercept(ctx, config) {
1673
1821
  const page = await acquirePage(ctx);
1674
1822
  const capturePattern = evalTemplate(config.capture, ctx);
1675
1823
  const timeout = config.timeout ?? 10000;
@@ -1734,7 +1882,7 @@ async function stepIntercept(ctx, config) {
1734
1882
  return { ...ctx, data, page };
1735
1883
  }
1736
1884
  // --- press: keyboard event dispatch ---
1737
- async function stepPress(ctx, config) {
1885
+ export async function stepPress(ctx, config) {
1738
1886
  const page = await acquirePage(ctx);
1739
1887
  if (typeof config === "string") {
1740
1888
  await page.press(evalTemplate(config, ctx));
@@ -1752,7 +1900,7 @@ async function stepPress(ctx, config) {
1752
1900
  return { ...ctx, page };
1753
1901
  }
1754
1902
  // --- scroll: page scrolling ---
1755
- async function stepScroll(ctx, config) {
1903
+ export async function stepScroll(ctx, config) {
1756
1904
  const page = await acquirePage(ctx);
1757
1905
  if (typeof config === "string") {
1758
1906
  await page.scroll(config);
@@ -1774,7 +1922,7 @@ async function stepScroll(ctx, config) {
1774
1922
  return { ...ctx, page };
1775
1923
  }
1776
1924
  // --- snapshot: DOM accessibility tree ---
1777
- async function stepSnapshot(ctx, config) {
1925
+ export async function stepSnapshot(ctx, config) {
1778
1926
  const page = await acquirePage(ctx);
1779
1927
  const opts = typeof config === "object" && config !== null
1780
1928
  ? config
@@ -1789,7 +1937,7 @@ async function stepSnapshot(ctx, config) {
1789
1937
  const result = await page.snapshot(normalizedOpts);
1790
1938
  return { ...ctx, data: result, page };
1791
1939
  }
1792
- async function stepTap(ctx, config) {
1940
+ export async function stepTap(ctx, config) {
1793
1941
  const page = await acquirePage(ctx);
1794
1942
  const { generateTapInterceptorJs } = await import("./interceptor.js");
1795
1943
  const capturePattern = evalTemplate(config.capture, ctx);
@@ -1917,7 +2065,7 @@ function getNestedValue(obj, path) {
1917
2065
  }
1918
2066
  return current;
1919
2067
  }
1920
- async function stepDownload(ctx, config) {
2068
+ export async function stepDownload(ctx, config) {
1921
2069
  const dir = resolve(config.dir ?? "./downloads");
1922
2070
  mkdirSync(dir, { recursive: true });
1923
2071
  const concurrency = config.concurrency ?? 3;
@@ -1968,7 +2116,7 @@ async function stepDownload(ctx, config) {
1968
2116
  return { ...ctx, data: [result] };
1969
2117
  }
1970
2118
  }
1971
- async function stepWebsocket(ctx, config) {
2119
+ export async function stepWebsocket(ctx, config) {
1972
2120
  const resolvedConfig = {
1973
2121
  ...config,
1974
2122
  url: evalTemplate(config.url, ctx),
@@ -1977,7 +2125,7 @@ async function stepWebsocket(ctx, config) {
1977
2125
  const data = await executeWebsocket(resolvedConfig);
1978
2126
  return { ...ctx, data };
1979
2127
  }
1980
- async function stepExtract(ctx, config) {
2128
+ export async function stepExtract(ctx, config) {
1981
2129
  const page = await acquirePage(ctx);
1982
2130
  const containerSelector = evalTemplate(config.from, ctx);
1983
2131
  // Build a JS expression that extracts structured data