@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.
- package/AGENTS.md +71 -134
- package/README.md +222 -209
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +114 -9
- package/dist/cli.js.map +1 -1
- package/dist/commands/acp.d.ts +14 -0
- package/dist/commands/acp.d.ts.map +1 -0
- package/dist/commands/acp.js +41 -0
- package/dist/commands/acp.js.map +1 -0
- package/dist/commands/agents.d.ts +14 -3
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +369 -140
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +14 -0
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/lint.d.ts +32 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +377 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -4
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +47 -62
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/migrate-schema.d.ts +56 -0
- package/dist/commands/migrate-schema.d.ts.map +1 -0
- package/dist/commands/migrate-schema.js +522 -0
- package/dist/commands/migrate-schema.js.map +1 -0
- package/dist/commands/migrate.d.ts +54 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +270 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/schema.d.ts +12 -0
- package/dist/commands/schema.d.ts.map +1 -0
- package/dist/commands/schema.js +72 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/search.d.ts +12 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +47 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +76 -0
- package/dist/commands/skills.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/envelope.d.ts +87 -0
- package/dist/core/envelope.d.ts.map +1 -0
- package/dist/core/envelope.js +94 -0
- package/dist/core/envelope.js.map +1 -0
- package/dist/core/index.d.ts +12 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/registry.d.ts +63 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +62 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/schema-v2.d.ts +111 -0
- package/dist/core/schema-v2.d.ts.map +1 -0
- package/dist/core/schema-v2.js +118 -0
- package/dist/core/schema-v2.js.map +1 -0
- package/dist/core/types.d.ts +24 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +15 -0
- package/dist/core/types.js.map +1 -0
- package/dist/discovery/aliases.d.ts +36 -0
- package/dist/discovery/aliases.d.ts.map +1 -0
- package/dist/discovery/aliases.js +520 -0
- package/dist/discovery/aliases.js.map +1 -0
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +107 -5
- package/dist/discovery/loader.js.map +1 -1
- package/dist/discovery/search.d.ts +73 -0
- package/dist/discovery/search.d.ts.map +1 -0
- package/dist/discovery/search.js +392 -0
- package/dist/discovery/search.js.map +1 -0
- package/dist/engine/repair/logger.d.ts.map +1 -1
- package/dist/engine/repair/logger.js +11 -1
- package/dist/engine/repair/logger.js.map +1 -1
- package/dist/engine/steps/browser.d.ts +11 -0
- package/dist/engine/steps/browser.d.ts.map +1 -0
- package/dist/engine/steps/browser.js +11 -0
- package/dist/engine/steps/browser.js.map +1 -0
- package/dist/engine/steps/control.d.ts +10 -0
- package/dist/engine/steps/control.d.ts.map +1 -0
- package/dist/engine/steps/control.js +10 -0
- package/dist/engine/steps/control.js.map +1 -0
- package/dist/engine/steps/cua.d.ts +53 -0
- package/dist/engine/steps/cua.d.ts.map +1 -0
- package/dist/engine/steps/cua.js +71 -0
- package/dist/engine/steps/cua.js.map +1 -0
- package/dist/engine/steps/desktop-ax.d.ts +38 -0
- package/dist/engine/steps/desktop-ax.d.ts.map +1 -0
- package/dist/engine/steps/desktop-ax.js +49 -0
- package/dist/engine/steps/desktop-ax.js.map +1 -0
- package/dist/engine/steps/desktop.d.ts +10 -0
- package/dist/engine/steps/desktop.d.ts.map +1 -0
- package/dist/engine/steps/desktop.js +10 -0
- package/dist/engine/steps/desktop.js.map +1 -0
- package/dist/engine/steps/download.d.ts +10 -0
- package/dist/engine/steps/download.d.ts.map +1 -0
- package/dist/engine/steps/download.js +10 -0
- package/dist/engine/steps/download.js.map +1 -0
- package/dist/engine/steps/fetch.d.ts +10 -0
- package/dist/engine/steps/fetch.d.ts.map +1 -0
- package/dist/engine/steps/fetch.js +10 -0
- package/dist/engine/steps/fetch.js.map +1 -0
- package/dist/engine/steps/index.d.ts +19 -0
- package/dist/engine/steps/index.d.ts.map +1 -0
- package/dist/engine/steps/index.js +19 -0
- package/dist/engine/steps/index.js.map +1 -0
- package/dist/engine/steps/transform.d.ts +10 -0
- package/dist/engine/steps/transform.d.ts.map +1 -0
- package/dist/engine/steps/transform.js +10 -0
- package/dist/engine/steps/transform.js.map +1 -0
- package/dist/engine/steps/websocket.d.ts +10 -0
- package/dist/engine/steps/websocket.d.ts.map +1 -0
- package/dist/engine/steps/websocket.js +10 -0
- package/dist/engine/steps/websocket.js.map +1 -0
- package/dist/engine/yaml-runner.d.ts +159 -1
- package/dist/engine/yaml-runner.d.ts.map +1 -1
- package/dist/engine/yaml-runner.js +180 -32
- package/dist/engine/yaml-runner.js.map +1 -1
- package/dist/manifest-compact.txt +15 -0
- package/dist/manifest-search.json +1 -0
- package/dist/manifest.json +530 -244
- package/dist/mcp/elicitation.d.ts +56 -0
- package/dist/mcp/elicitation.d.ts.map +1 -0
- package/dist/mcp/elicitation.js +62 -0
- package/dist/mcp/elicitation.js.map +1 -0
- package/dist/mcp/oauth.d.ts +33 -0
- package/dist/mcp/oauth.d.ts.map +1 -0
- package/dist/mcp/oauth.js +291 -0
- package/dist/mcp/oauth.js.map +1 -0
- package/dist/mcp/schema.d.ts +65 -0
- package/dist/mcp/schema.d.ts.map +1 -0
- package/dist/mcp/schema.js +136 -0
- package/dist/mcp/schema.js.map +1 -0
- package/dist/mcp/server.d.ts +28 -10
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +408 -234
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/sse-transport.d.ts +34 -0
- package/dist/mcp/sse-transport.d.ts.map +1 -0
- package/dist/mcp/sse-transport.js +182 -0
- package/dist/mcp/sse-transport.js.map +1 -0
- package/dist/mcp/streamable-http.d.ts +89 -0
- package/dist/mcp/streamable-http.d.ts.map +1 -0
- package/dist/mcp/streamable-http.js +566 -0
- package/dist/mcp/streamable-http.js.map +1 -0
- package/dist/output/formatter.d.ts +14 -4
- package/dist/output/formatter.d.ts.map +1 -1
- package/dist/output/formatter.js +49 -25
- package/dist/output/formatter.js.map +1 -1
- package/dist/permissions/sensitive-paths.js +2 -2
- package/dist/permissions/sensitive-paths.js.map +1 -1
- package/dist/protocol/acp.d.ts +126 -0
- package/dist/protocol/acp.d.ts.map +1 -0
- package/dist/protocol/acp.js +588 -0
- package/dist/protocol/acp.js.map +1 -0
- package/dist/protocol/skill.d.ts +106 -0
- package/dist/protocol/skill.d.ts.map +1 -0
- package/dist/protocol/skill.js +276 -0
- package/dist/protocol/skill.js.map +1 -0
- package/dist/registry.d.ts +2 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -1
- package/dist/transport/adapters/cdp-browser.d.ts +44 -0
- package/dist/transport/adapters/cdp-browser.d.ts.map +1 -0
- package/dist/transport/adapters/cdp-browser.js +240 -0
- package/dist/transport/adapters/cdp-browser.js.map +1 -0
- package/dist/transport/adapters/cua.d.ts +240 -0
- package/dist/transport/adapters/cua.d.ts.map +1 -0
- package/dist/transport/adapters/cua.js +663 -0
- package/dist/transport/adapters/cua.js.map +1 -0
- package/dist/transport/adapters/desktop-atspi.d.ts +27 -0
- package/dist/transport/adapters/desktop-atspi.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-atspi.js +65 -0
- package/dist/transport/adapters/desktop-atspi.js.map +1 -0
- package/dist/transport/adapters/desktop-ax.d.ts +59 -0
- package/dist/transport/adapters/desktop-ax.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-ax.js +311 -0
- package/dist/transport/adapters/desktop-ax.js.map +1 -0
- package/dist/transport/adapters/desktop-uia.d.ts +27 -0
- package/dist/transport/adapters/desktop-uia.d.ts.map +1 -0
- package/dist/transport/adapters/desktop-uia.js +66 -0
- package/dist/transport/adapters/desktop-uia.js.map +1 -0
- package/dist/transport/adapters/http.d.ts +40 -0
- package/dist/transport/adapters/http.d.ts.map +1 -0
- package/dist/transport/adapters/http.js +353 -0
- package/dist/transport/adapters/http.js.map +1 -0
- package/dist/transport/adapters/subprocess.d.ts +27 -0
- package/dist/transport/adapters/subprocess.d.ts.map +1 -0
- package/dist/transport/adapters/subprocess.js +254 -0
- package/dist/transport/adapters/subprocess.js.map +1 -0
- package/dist/transport/bus.d.ts +28 -0
- package/dist/transport/bus.d.ts.map +1 -0
- package/dist/transport/bus.js +112 -0
- package/dist/transport/bus.js.map +1 -0
- package/dist/transport/capability.d.ts +38 -0
- package/dist/transport/capability.d.ts.map +1 -0
- package/dist/transport/capability.js +254 -0
- package/dist/transport/capability.js.map +1 -0
- package/dist/transport/types.d.ts +148 -0
- package/dist/transport/types.d.ts.map +1 -0
- package/dist/transport/types.js +19 -0
- package/dist/transport/types.js.map +1 -0
- package/dist/types.d.ts +18 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +32 -10
- package/src/adapters/1688/_site.json +9 -0
- package/src/adapters/1688/item.yaml +7 -0
- package/src/adapters/1688/search.yaml +7 -0
- package/src/adapters/1688/store.yaml +7 -0
- package/src/adapters/36kr/article.yaml +7 -0
- package/src/adapters/36kr/hot.yaml +7 -0
- package/src/adapters/36kr/latest.yaml +7 -0
- package/src/adapters/36kr/news.yaml +7 -0
- package/src/adapters/36kr/search.yaml +7 -0
- package/src/adapters/adguardhome/add-rule.yaml +7 -0
- package/src/adapters/adguardhome/rules.yaml +7 -0
- package/src/adapters/adguardhome/stats.yaml +7 -0
- package/src/adapters/adguardhome/status.yaml +7 -0
- package/src/adapters/adguardhome/toggle.yaml +7 -0
- package/src/adapters/amazon/bestsellers.yaml +7 -0
- package/src/adapters/amazon/discussion.yaml +7 -0
- package/src/adapters/amazon/movers-shakers.yaml +7 -0
- package/src/adapters/amazon/new-releases.yaml +7 -0
- package/src/adapters/amazon/offer.yaml +7 -0
- package/src/adapters/amazon/product.yaml +7 -0
- package/src/adapters/amazon/rankings.yaml +7 -0
- package/src/adapters/amazon/search.yaml +7 -0
- package/src/adapters/apple-music/rate-album.yaml +71 -0
- package/src/adapters/apple-notes/list.yaml +52 -0
- package/src/adapters/apple-notes/read.yaml +44 -0
- package/src/adapters/apple-notes/search.yaml +43 -0
- package/src/adapters/apple-podcasts/episodes.yaml +7 -0
- package/src/adapters/apple-podcasts/search.yaml +7 -0
- package/src/adapters/apple-podcasts/top.yaml +7 -0
- package/src/adapters/arxiv/paper.yaml +7 -0
- package/src/adapters/arxiv/search.yaml +7 -0
- package/src/adapters/arxiv/trending.yaml +7 -0
- package/src/adapters/audacity/convert.yaml +7 -0
- package/src/adapters/audacity/effects.yaml +7 -0
- package/src/adapters/audacity/info.yaml +7 -0
- package/src/adapters/audacity/mix.yaml +7 -0
- package/src/adapters/audacity/normalize.yaml +7 -0
- package/src/adapters/audacity/spectrogram.yaml +7 -0
- package/src/adapters/audacity/split-channels.yaml +7 -0
- package/src/adapters/audacity/trim.yaml +7 -0
- package/src/adapters/autoagent/eval-run.yaml +7 -0
- package/src/adapters/aws/s3-ls.yaml +7 -0
- package/src/adapters/az/account.yaml +7 -0
- package/src/adapters/baidu/hot.yaml +7 -0
- package/src/adapters/baidu/search.yaml +7 -0
- package/src/adapters/band/bands.yaml +7 -0
- package/src/adapters/band/mentions.yaml +7 -0
- package/src/adapters/band/post.yaml +7 -0
- package/src/adapters/band/posts.yaml +7 -0
- package/src/adapters/barchart/_site.json +10 -0
- package/src/adapters/barchart/flow.yaml +7 -0
- package/src/adapters/barchart/greeks.yaml +7 -0
- package/src/adapters/barchart/options.yaml +7 -0
- package/src/adapters/barchart/quote.yaml +7 -0
- package/src/adapters/bbc/news.yaml +7 -0
- package/src/adapters/bbc/technology.yaml +7 -0
- package/src/adapters/bbc/top.yaml +7 -0
- package/src/adapters/bbc/world.yaml +7 -0
- package/src/adapters/bilibili/coin.yaml +7 -0
- package/src/adapters/bilibili/dynamic.yaml +7 -0
- package/src/adapters/bilibili/favorites.yaml +7 -0
- package/src/adapters/bilibili/feed.yaml +7 -0
- package/src/adapters/bilibili/following.yaml +7 -0
- package/src/adapters/bilibili/history.yaml +7 -0
- package/src/adapters/bilibili/hot.yaml +7 -0
- package/src/adapters/bilibili/later.yaml +7 -0
- package/src/adapters/bilibili/live.yaml +7 -0
- package/src/adapters/bilibili/me.yaml +7 -0
- package/src/adapters/bilibili/ranking.yaml +7 -0
- package/src/adapters/bilibili/trending.yaml +7 -0
- package/src/adapters/binance/hot.yaml +7 -0
- package/src/adapters/binance/kline.yaml +7 -0
- package/src/adapters/binance/ticker.yaml +7 -0
- package/src/adapters/blender/animation.yaml +7 -0
- package/src/adapters/blender/camera.yaml +7 -0
- package/src/adapters/blender/convert.yaml +7 -0
- package/src/adapters/blender/export.yaml +7 -0
- package/src/adapters/blender/import.yaml +7 -0
- package/src/adapters/blender/info.yaml +7 -0
- package/src/adapters/blender/lighting.yaml +7 -0
- package/src/adapters/blender/materials.yaml +7 -0
- package/src/adapters/blender/objects.yaml +7 -0
- package/src/adapters/blender/render.yaml +7 -0
- package/src/adapters/blender/scene.yaml +7 -0
- package/src/adapters/blender/screenshot.yaml +7 -0
- package/src/adapters/blender/script.yaml +7 -0
- package/src/adapters/bloomberg/businessweek.yaml +7 -0
- package/src/adapters/bloomberg/economics.yaml +7 -0
- package/src/adapters/bloomberg/feeds.yaml +7 -0
- package/src/adapters/bloomberg/industries.yaml +7 -0
- package/src/adapters/bloomberg/main.yaml +7 -0
- package/src/adapters/bloomberg/markets.yaml +7 -0
- package/src/adapters/bloomberg/news.yaml +7 -0
- package/src/adapters/bloomberg/opinions.yaml +7 -0
- package/src/adapters/bloomberg/politics.yaml +7 -0
- package/src/adapters/bloomberg/tech.yaml +7 -0
- package/src/adapters/bluesky/feeds.yaml +7 -0
- package/src/adapters/bluesky/followers.yaml +7 -0
- package/src/adapters/bluesky/following.yaml +7 -0
- package/src/adapters/bluesky/likes.yaml +7 -0
- package/src/adapters/bluesky/notifications.yaml +7 -0
- package/src/adapters/bluesky/post.yaml +7 -0
- package/src/adapters/bluesky/profile.yaml +7 -0
- package/src/adapters/bluesky/search.yaml +7 -0
- package/src/adapters/bluesky/starter-packs.yaml +7 -0
- package/src/adapters/bluesky/thread.yaml +7 -0
- package/src/adapters/bluesky/trending.yaml +7 -0
- package/src/adapters/bluesky/user.yaml +7 -0
- package/src/adapters/boss/batchgreet.yaml +7 -0
- package/src/adapters/boss/chatlist.yaml +7 -0
- package/src/adapters/boss/chatmsg.yaml +7 -0
- package/src/adapters/boss/detail.yaml +7 -0
- package/src/adapters/boss/exchange.yaml +7 -0
- package/src/adapters/boss/greet.yaml +7 -0
- package/src/adapters/boss/invite.yaml +7 -0
- package/src/adapters/boss/joblist.yaml +7 -0
- package/src/adapters/boss/mark.yaml +7 -0
- package/src/adapters/boss/recommend.yaml +7 -0
- package/src/adapters/boss/resume.yaml +7 -0
- package/src/adapters/boss/search.yaml +7 -0
- package/src/adapters/boss/send.yaml +7 -0
- package/src/adapters/boss/stats.yaml +7 -0
- package/src/adapters/chaoxing/assignments.yaml +7 -0
- package/src/adapters/chaoxing/exams.yaml +7 -0
- package/src/adapters/chrome/bookmarks.yaml +7 -0
- package/src/adapters/chrome/tabs.yaml +7 -0
- package/src/adapters/claude-code/version.yaml +7 -0
- package/src/adapters/cloudcompare/compare.yaml +7 -0
- package/src/adapters/cloudcompare/convert.yaml +7 -0
- package/src/adapters/cloudcompare/info.yaml +7 -0
- package/src/adapters/cloudcompare/subsample.yaml +7 -0
- package/src/adapters/cnki/search.yaml +7 -0
- package/src/adapters/cnn/technology.yaml +7 -0
- package/src/adapters/cnn/top.yaml +7 -0
- package/src/adapters/cocoapods/info.yaml +7 -0
- package/src/adapters/cocoapods/search.yaml +7 -0
- package/src/adapters/codex-cli/version.yaml +7 -0
- package/src/adapters/coinbase/prices.yaml +7 -0
- package/src/adapters/coinbase/rates.yaml +7 -0
- package/src/adapters/comfyui/generate.yaml +7 -0
- package/src/adapters/comfyui/history.yaml +7 -0
- package/src/adapters/comfyui/nodes.yaml +7 -0
- package/src/adapters/comfyui/status.yaml +7 -0
- package/src/adapters/coupang/add-to-cart.yaml +7 -0
- package/src/adapters/coupang/hot.yaml +7 -0
- package/src/adapters/coupang/search.yaml +7 -0
- package/src/adapters/crates-io/info.yaml +7 -0
- package/src/adapters/crates-io/search.yaml +7 -0
- package/src/adapters/crates-io/versions.yaml +7 -0
- package/src/adapters/ctrip/hot.yaml +7 -0
- package/src/adapters/ctrip/search.yaml +7 -0
- package/src/adapters/cua/bench-list.yaml +7 -0
- package/src/adapters/cua/bench-run.yaml +7 -0
- package/src/adapters/dangdang/hot.yaml +7 -0
- package/src/adapters/dangdang/search.yaml +7 -0
- package/src/adapters/deepseek/chat.yaml +7 -0
- package/src/adapters/deepseek/models.yaml +7 -0
- package/src/adapters/devto/latest.yaml +7 -0
- package/src/adapters/devto/search.yaml +7 -0
- package/src/adapters/devto/tag.yaml +7 -0
- package/src/adapters/devto/top.yaml +7 -0
- package/src/adapters/devto/user.yaml +7 -0
- package/src/adapters/dianping/hot.yaml +7 -0
- package/src/adapters/dianping/search.yaml +7 -0
- package/src/adapters/dictionary/examples.yaml +7 -0
- package/src/adapters/dictionary/search.yaml +7 -0
- package/src/adapters/dictionary/synonyms.yaml +7 -0
- package/src/adapters/dingtalk/version.yaml +7 -0
- package/src/adapters/docker/build.yaml +7 -0
- package/src/adapters/docker/images.yaml +7 -0
- package/src/adapters/docker/logs.yaml +7 -0
- package/src/adapters/docker/networks.yaml +7 -0
- package/src/adapters/docker/ps.yaml +7 -0
- package/src/adapters/docker/run.yaml +7 -0
- package/src/adapters/docker/volumes.yaml +7 -0
- package/src/adapters/docker-hub/info.yaml +7 -0
- package/src/adapters/docker-hub/search.yaml +7 -0
- package/src/adapters/docker-hub/tags.yaml +7 -0
- package/src/adapters/doctl/droplets.yaml +7 -0
- package/src/adapters/douban/book-hot.yaml +7 -0
- package/src/adapters/douban/download.yaml +7 -0
- package/src/adapters/douban/group-hot.yaml +7 -0
- package/src/adapters/douban/marks.yaml +7 -0
- package/src/adapters/douban/movie-hot.yaml +7 -0
- package/src/adapters/douban/new-movies.yaml +7 -0
- package/src/adapters/douban/photos.yaml +7 -0
- package/src/adapters/douban/reviews.yaml +7 -0
- package/src/adapters/douban/search.yaml +7 -0
- package/src/adapters/douban/subject.yaml +7 -0
- package/src/adapters/douban/top250.yaml +7 -0
- package/src/adapters/douban/tv-hot.yaml +7 -0
- package/src/adapters/doubao/ask.yaml +7 -0
- package/src/adapters/doubao/new.yaml +7 -0
- package/src/adapters/doubao/status.yaml +7 -0
- package/src/adapters/doubao-web/ask.yaml +7 -0
- package/src/adapters/doubao-web/detail.yaml +7 -0
- package/src/adapters/doubao-web/history.yaml +7 -0
- package/src/adapters/doubao-web/meeting-summary.yaml +7 -0
- package/src/adapters/doubao-web/meeting-transcript.yaml +7 -0
- package/src/adapters/doubao-web/new.yaml +7 -0
- package/src/adapters/doubao-web/read.yaml +7 -0
- package/src/adapters/doubao-web/send.yaml +7 -0
- package/src/adapters/doubao-web/status.yaml +7 -0
- package/src/adapters/douyu/hot.yaml +7 -0
- package/src/adapters/douyu/search.yaml +7 -0
- package/src/adapters/drawio/export.yaml +7 -0
- package/src/adapters/eastmoney/fund.yaml +7 -0
- package/src/adapters/eastmoney/hot.yaml +7 -0
- package/src/adapters/eastmoney/market.yaml +7 -0
- package/src/adapters/eastmoney/search.yaml +7 -0
- package/src/adapters/ele/hot.yaml +8 -0
- package/src/adapters/ele/search.yaml +8 -0
- package/src/adapters/exchangerate/convert.yaml +7 -0
- package/src/adapters/exchangerate/list.yaml +7 -0
- package/src/adapters/facebook/add-friend.yaml +7 -0
- package/src/adapters/facebook/events.yaml +7 -0
- package/src/adapters/facebook/feed.yaml +7 -0
- package/src/adapters/facebook/friends.yaml +7 -0
- package/src/adapters/facebook/groups.yaml +7 -0
- package/src/adapters/facebook/join-group.yaml +7 -0
- package/src/adapters/facebook/marketplace.yaml +7 -0
- package/src/adapters/facebook/memories.yaml +7 -0
- package/src/adapters/facebook/notifications.yaml +7 -0
- package/src/adapters/facebook/post.yaml +7 -0
- package/src/adapters/facebook/profile.yaml +7 -0
- package/src/adapters/facebook/search.yaml +7 -0
- package/src/adapters/feishu/calendar.yaml +7 -0
- package/src/adapters/feishu/docs.yaml +7 -0
- package/src/adapters/feishu/send.yaml +7 -0
- package/src/adapters/feishu/tasks.yaml +7 -0
- package/src/adapters/ffmpeg/compress.yaml +7 -0
- package/src/adapters/ffmpeg/concat.yaml +7 -0
- package/src/adapters/ffmpeg/convert.yaml +7 -0
- package/src/adapters/ffmpeg/extract-audio.yaml +7 -0
- package/src/adapters/ffmpeg/gif.yaml +7 -0
- package/src/adapters/ffmpeg/normalize.yaml +7 -0
- package/src/adapters/ffmpeg/probe.yaml +7 -0
- package/src/adapters/ffmpeg/resize.yaml +7 -0
- package/src/adapters/ffmpeg/subtitles.yaml +7 -0
- package/src/adapters/ffmpeg/thumbnail.yaml +7 -0
- package/src/adapters/ffmpeg/trim.yaml +7 -0
- package/src/adapters/figma/export-selected.yaml +67 -0
- package/src/adapters/flyctl/apps.yaml +7 -0
- package/src/adapters/freecad/assembly.yaml +7 -0
- package/src/adapters/freecad/bom.yaml +7 -0
- package/src/adapters/freecad/boolean.yaml +7 -0
- package/src/adapters/freecad/check.yaml +7 -0
- package/src/adapters/freecad/convert.yaml +7 -0
- package/src/adapters/freecad/export-stl.yaml +7 -0
- package/src/adapters/freecad/import.yaml +7 -0
- package/src/adapters/freecad/info.yaml +7 -0
- package/src/adapters/freecad/macro.yaml +7 -0
- package/src/adapters/freecad/measure.yaml +7 -0
- package/src/adapters/freecad/mesh.yaml +7 -0
- package/src/adapters/freecad/properties.yaml +7 -0
- package/src/adapters/freecad/render.yaml +7 -0
- package/src/adapters/freecad/section.yaml +7 -0
- package/src/adapters/freecad/sketch.yaml +7 -0
- package/src/adapters/futu/hot.yaml +7 -0
- package/src/adapters/futu/quote.yaml +7 -0
- package/src/adapters/gcloud/projects.yaml +7 -0
- package/src/adapters/gemini/ask.yaml +7 -0
- package/src/adapters/gemini/deep-research-result.yaml +7 -0
- package/src/adapters/gemini/deep-research.yaml +7 -0
- package/src/adapters/gemini/image.yaml +7 -0
- package/src/adapters/gemini/new.yaml +7 -0
- package/src/adapters/gh/issue.yaml +7 -0
- package/src/adapters/gh/pr.yaml +7 -0
- package/src/adapters/gh/release.yaml +7 -0
- package/src/adapters/gh/repo.yaml +7 -0
- package/src/adapters/gh/run.yaml +7 -0
- package/src/adapters/gimp/adjust.yaml +7 -0
- package/src/adapters/gimp/batch.yaml +7 -0
- package/src/adapters/gimp/convert.yaml +7 -0
- package/src/adapters/gimp/crop.yaml +7 -0
- package/src/adapters/gimp/filter.yaml +7 -0
- package/src/adapters/gimp/flip.yaml +7 -0
- package/src/adapters/gimp/info.yaml +7 -0
- package/src/adapters/gimp/layers.yaml +7 -0
- package/src/adapters/gimp/merge-layers.yaml +7 -0
- package/src/adapters/gimp/resize.yaml +7 -0
- package/src/adapters/gimp/rotate.yaml +7 -0
- package/src/adapters/gimp/text.yaml +7 -0
- package/src/adapters/gitee/repos.yaml +7 -0
- package/src/adapters/gitee/search.yaml +7 -0
- package/src/adapters/gitee/trending.yaml +7 -0
- package/src/adapters/github-trending/daily.yaml +7 -0
- package/src/adapters/github-trending/developers.yaml +7 -0
- package/src/adapters/github-trending/weekly.yaml +7 -0
- package/src/adapters/gitlab/projects.yaml +7 -0
- package/src/adapters/gitlab/search.yaml +7 -0
- package/src/adapters/gitlab/trending.yaml +7 -0
- package/src/adapters/godot/project-run.yaml +7 -0
- package/src/adapters/godot/scene-export.yaml +7 -0
- package/src/adapters/google/news.yaml +7 -0
- package/src/adapters/google/search.yaml +7 -0
- package/src/adapters/google/suggest.yaml +7 -0
- package/src/adapters/google/trends.yaml +7 -0
- package/src/adapters/grok/ask.yaml +7 -0
- package/src/adapters/hackernews/ask.yaml +7 -0
- package/src/adapters/hackernews/best.yaml +7 -0
- package/src/adapters/hackernews/comments.yaml +7 -0
- package/src/adapters/hackernews/item.yaml +7 -0
- package/src/adapters/hackernews/jobs.yaml +7 -0
- package/src/adapters/hackernews/new.yaml +7 -0
- package/src/adapters/hackernews/search.yaml +7 -0
- package/src/adapters/hackernews/show.yaml +7 -0
- package/src/adapters/hackernews/top.yaml +7 -0
- package/src/adapters/hackernews/user.yaml +7 -0
- package/src/adapters/hermes/sessions-search.yaml +7 -0
- package/src/adapters/hermes/skills-list.yaml +7 -0
- package/src/adapters/hermes/skills-read.yaml +7 -0
- package/src/adapters/hf/datasets.yaml +7 -0
- package/src/adapters/hf/models.yaml +7 -0
- package/src/adapters/hf/spaces.yaml +7 -0
- package/src/adapters/hf/top.yaml +7 -0
- package/src/adapters/homebrew/info.yaml +7 -0
- package/src/adapters/homebrew/search.yaml +7 -0
- package/src/adapters/huggingface-papers/daily.yaml +7 -0
- package/src/adapters/huggingface-papers/search.yaml +7 -0
- package/src/adapters/hupu/detail.yaml +7 -0
- package/src/adapters/hupu/hot.yaml +7 -0
- package/src/adapters/hupu/like.yaml +7 -0
- package/src/adapters/hupu/mentions.yaml +7 -0
- package/src/adapters/hupu/reply.yaml +7 -0
- package/src/adapters/hupu/search.yaml +7 -0
- package/src/adapters/hupu/unlike.yaml +7 -0
- package/src/adapters/imagemagick/compare.yaml +7 -0
- package/src/adapters/imagemagick/composite.yaml +7 -0
- package/src/adapters/imagemagick/convert.yaml +7 -0
- package/src/adapters/imagemagick/identify.yaml +7 -0
- package/src/adapters/imagemagick/montage.yaml +7 -0
- package/src/adapters/imagemagick/resize.yaml +7 -0
- package/src/adapters/imdb/box-office.yaml +7 -0
- package/src/adapters/imdb/person.yaml +7 -0
- package/src/adapters/imdb/reviews.yaml +7 -0
- package/src/adapters/imdb/search.yaml +7 -0
- package/src/adapters/imdb/title.yaml +7 -0
- package/src/adapters/imdb/top.yaml +7 -0
- package/src/adapters/imdb/trending.yaml +7 -0
- package/src/adapters/imessage/contact.yaml +73 -0
- package/src/adapters/imessage/recent.yaml +66 -0
- package/src/adapters/imessage/search.yaml +75 -0
- package/src/adapters/infoq/articles.yaml +7 -0
- package/src/adapters/infoq/latest.yaml +7 -0
- package/src/adapters/inkscape/convert.yaml +7 -0
- package/src/adapters/inkscape/export.yaml +7 -0
- package/src/adapters/inkscape/optimize.yaml +7 -0
- package/src/adapters/instagram/activity.yaml +7 -0
- package/src/adapters/instagram/comment.yaml +7 -0
- package/src/adapters/instagram/explore.yaml +7 -0
- package/src/adapters/instagram/follow.yaml +7 -0
- package/src/adapters/instagram/followers.yaml +7 -0
- package/src/adapters/instagram/following.yaml +7 -0
- package/src/adapters/instagram/highlights.yaml +7 -0
- package/src/adapters/instagram/like.yaml +7 -0
- package/src/adapters/instagram/profile.yaml +7 -0
- package/src/adapters/instagram/reels-trending.yaml +7 -0
- package/src/adapters/instagram/reels.yaml +7 -0
- package/src/adapters/instagram/save.yaml +7 -0
- package/src/adapters/instagram/saved.yaml +7 -0
- package/src/adapters/instagram/search.yaml +7 -0
- package/src/adapters/instagram/stories.yaml +7 -0
- package/src/adapters/instagram/suggested.yaml +7 -0
- package/src/adapters/instagram/tags.yaml +7 -0
- package/src/adapters/instagram/unfollow.yaml +7 -0
- package/src/adapters/instagram/unlike.yaml +7 -0
- package/src/adapters/instagram/unsave.yaml +7 -0
- package/src/adapters/instagram/user.yaml +7 -0
- package/src/adapters/ip-info/lookup.yaml +7 -0
- package/src/adapters/itch-io/popular.yaml +7 -0
- package/src/adapters/itch-io/search.yaml +7 -0
- package/src/adapters/itch-io/top.yaml +7 -0
- package/src/adapters/ithome/hot.yaml +7 -0
- package/src/adapters/ithome/latest.yaml +7 -0
- package/src/adapters/ithome/news.yaml +7 -0
- package/src/adapters/jd/_site.json +9 -0
- package/src/adapters/jd/hot.yaml +7 -0
- package/src/adapters/jd/item.yaml +7 -0
- package/src/adapters/jd/search.yaml +7 -0
- package/src/adapters/jianyu/search.yaml +7 -0
- package/src/adapters/jike/feed.yaml +7 -0
- package/src/adapters/jike/notifications.yaml +7 -0
- package/src/adapters/jike/post.yaml +7 -0
- package/src/adapters/jike/search.yaml +7 -0
- package/src/adapters/jike/topic.yaml +7 -0
- package/src/adapters/jike/user.yaml +7 -0
- package/src/adapters/jimeng/generate.yaml +7 -0
- package/src/adapters/jimeng/history.yaml +7 -0
- package/src/adapters/jq/format.yaml +7 -0
- package/src/adapters/jq/query.yaml +7 -0
- package/src/adapters/kdenlive/effects.yaml +7 -0
- package/src/adapters/kdenlive/info.yaml +7 -0
- package/src/adapters/kdenlive/render.yaml +7 -0
- package/src/adapters/ke/ershoufang.yaml +7 -0
- package/src/adapters/ke/xiaoqu.yaml +7 -0
- package/src/adapters/krita/batch.yaml +7 -0
- package/src/adapters/krita/convert.yaml +7 -0
- package/src/adapters/krita/export.yaml +7 -0
- package/src/adapters/krita/info.yaml +7 -0
- package/src/adapters/kuaishou/hot.yaml +8 -0
- package/src/adapters/kuaishou/search.yaml +8 -0
- package/src/adapters/lark/version.yaml +7 -0
- package/src/adapters/lesswrong/comments.yaml +7 -0
- package/src/adapters/lesswrong/curated.yaml +7 -0
- package/src/adapters/lesswrong/frontpage.yaml +7 -0
- package/src/adapters/lesswrong/new.yaml +7 -0
- package/src/adapters/lesswrong/read.yaml +7 -0
- package/src/adapters/lesswrong/sequences.yaml +7 -0
- package/src/adapters/lesswrong/shortform.yaml +7 -0
- package/src/adapters/lesswrong/tag.yaml +7 -0
- package/src/adapters/lesswrong/tags.yaml +7 -0
- package/src/adapters/lesswrong/top-month.yaml +7 -0
- package/src/adapters/lesswrong/top-week.yaml +7 -0
- package/src/adapters/lesswrong/top-year.yaml +7 -0
- package/src/adapters/lesswrong/top.yaml +7 -0
- package/src/adapters/lesswrong/user-posts.yaml +7 -0
- package/src/adapters/lesswrong/user.yaml +7 -0
- package/src/adapters/libreoffice/convert.yaml +7 -0
- package/src/adapters/libreoffice/print.yaml +7 -0
- package/src/adapters/linear/issue-create.yaml +98 -0
- package/src/adapters/linear/issue-list.yaml +87 -0
- package/src/adapters/linear/issue-update.yaml +100 -0
- package/src/adapters/linkedin/_site.json +10 -0
- package/src/adapters/linkedin/jobs.yaml +7 -0
- package/src/adapters/linkedin/profile.yaml +7 -0
- package/src/adapters/linkedin/search.yaml +7 -0
- package/src/adapters/linkedin/timeline.yaml +7 -0
- package/src/adapters/linux-do/categories.yaml +7 -0
- package/src/adapters/linux-do/category.yaml +7 -0
- package/src/adapters/linux-do/feed.yaml +7 -0
- package/src/adapters/linux-do/hot.yaml +7 -0
- package/src/adapters/linux-do/latest.yaml +7 -0
- package/src/adapters/linux-do/search.yaml +7 -0
- package/src/adapters/linux-do/tags.yaml +7 -0
- package/src/adapters/linux-do/topic.yaml +7 -0
- package/src/adapters/linux-do/user-posts.yaml +7 -0
- package/src/adapters/linux-do/user-topics.yaml +7 -0
- package/src/adapters/lobsters/active.yaml +7 -0
- package/src/adapters/lobsters/hot.yaml +7 -0
- package/src/adapters/lobsters/newest.yaml +7 -0
- package/src/adapters/lobsters/search.yaml +7 -0
- package/src/adapters/lobsters/tag.yaml +7 -0
- package/src/adapters/macos/active-app.yaml +7 -0
- package/src/adapters/macos/apps-list.yaml +7 -0
- package/src/adapters/macos/apps.yaml +7 -0
- package/src/adapters/macos/battery.yaml +7 -0
- package/src/adapters/macos/bluetooth.yaml +7 -0
- package/src/adapters/macos/brightness.yaml +7 -0
- package/src/adapters/macos/caffeinate.yaml +7 -0
- package/src/adapters/macos/calendar-create.yaml +7 -0
- package/src/adapters/macos/calendar-list.yaml +7 -0
- package/src/adapters/macos/calendar-today.yaml +7 -0
- package/src/adapters/macos/clipboard.yaml +7 -0
- package/src/adapters/macos/contacts-search.yaml +7 -0
- package/src/adapters/macos/dark-mode.yaml +7 -0
- package/src/adapters/macos/disk-info.yaml +7 -0
- package/src/adapters/macos/disk-usage.yaml +7 -0
- package/src/adapters/macos/do-not-disturb.yaml +7 -0
- package/src/adapters/macos/empty-trash.yaml +7 -0
- package/src/adapters/macos/finder-copy.yaml +47 -0
- package/src/adapters/macos/finder-move.yaml +47 -0
- package/src/adapters/macos/finder-new-folder.yaml +43 -0
- package/src/adapters/macos/finder-recent.yaml +7 -0
- package/src/adapters/macos/finder-selection.yaml +7 -0
- package/src/adapters/macos/finder-tags.yaml +7 -0
- package/src/adapters/macos/lock-screen.yaml +7 -0
- package/src/adapters/macos/mail-send.yaml +7 -0
- package/src/adapters/macos/mail-status.yaml +7 -0
- package/src/adapters/macos/messages-send.yaml +7 -0
- package/src/adapters/macos/music-control.yaml +7 -0
- package/src/adapters/macos/music-now.yaml +7 -0
- package/src/adapters/macos/notes-list.yaml +7 -0
- package/src/adapters/macos/notes-search.yaml +7 -0
- package/src/adapters/macos/notification.yaml +7 -0
- package/src/adapters/macos/notify.yaml +7 -0
- package/src/adapters/macos/open-app.yaml +7 -0
- package/src/adapters/macos/open.yaml +7 -0
- package/src/adapters/macos/photos-search.yaml +7 -0
- package/src/adapters/macos/processes.yaml +7 -0
- package/src/adapters/macos/reminder-create.yaml +7 -0
- package/src/adapters/macos/reminders-complete.yaml +7 -0
- package/src/adapters/macos/reminders-list.yaml +7 -0
- package/src/adapters/macos/safari-history.yaml +30 -0
- package/src/adapters/macos/safari-tabs.yaml +7 -0
- package/src/adapters/macos/safari-url.yaml +29 -0
- package/src/adapters/macos/say.yaml +7 -0
- package/src/adapters/macos/screen-lock.yaml +7 -0
- package/src/adapters/macos/screen-recording.yaml +39 -0
- package/src/adapters/macos/screenshot.yaml +7 -0
- package/src/adapters/macos/shortcuts-list.yaml +7 -0
- package/src/adapters/macos/shortcuts-run.yaml +7 -0
- package/src/adapters/macos/sleep.yaml +7 -0
- package/src/adapters/macos/spotlight.yaml +7 -0
- package/src/adapters/macos/system-info.yaml +7 -0
- package/src/adapters/macos/trash.yaml +7 -0
- package/src/adapters/macos/uptime.yaml +7 -0
- package/src/adapters/macos/volume.yaml +7 -0
- package/src/adapters/macos/wallpaper.yaml +40 -0
- package/src/adapters/macos/wifi-info.yaml +7 -0
- package/src/adapters/macos/wifi.yaml +7 -0
- package/src/adapters/maimai/search.yaml +7 -0
- package/src/adapters/maoyan/hot.yaml +7 -0
- package/src/adapters/maoyan/search.yaml +7 -0
- package/src/adapters/mastodon/search.yaml +7 -0
- package/src/adapters/mastodon/timeline.yaml +7 -0
- package/src/adapters/mastodon/trending.yaml +7 -0
- package/src/adapters/mastodon/user.yaml +7 -0
- package/src/adapters/medium/article.yaml +7 -0
- package/src/adapters/medium/feed.yaml +7 -0
- package/src/adapters/medium/search.yaml +7 -0
- package/src/adapters/medium/trending.yaml +7 -0
- package/src/adapters/medium/user.yaml +7 -0
- package/src/adapters/meituan/hot.yaml +7 -0
- package/src/adapters/meituan/search.yaml +7 -0
- package/src/adapters/mermaid/render.yaml +7 -0
- package/src/adapters/minimax/chat.yaml +7 -0
- package/src/adapters/minimax/models.yaml +7 -0
- package/src/adapters/minimax/tts.yaml +7 -0
- package/src/adapters/motion-studio/component-get.yaml +7 -0
- package/src/adapters/mubu/list.yaml +7 -0
- package/src/adapters/mubu/search.yaml +14 -0
- package/src/adapters/musescore/convert.yaml +7 -0
- package/src/adapters/musescore/export.yaml +7 -0
- package/src/adapters/musescore/info.yaml +7 -0
- package/src/adapters/musescore/instruments.yaml +7 -0
- package/src/adapters/musescore/transpose.yaml +7 -0
- package/src/adapters/neonctl/projects.yaml +7 -0
- package/src/adapters/netease-music/hot.yaml +7 -0
- package/src/adapters/netease-music/playlist.yaml +7 -0
- package/src/adapters/netease-music/search.yaml +7 -0
- package/src/adapters/netease-music/top.yaml +7 -0
- package/src/adapters/netlify/sites.yaml +7 -0
- package/src/adapters/notebooklm/current.yaml +7 -0
- package/src/adapters/notebooklm/get.yaml +7 -0
- package/src/adapters/notebooklm/history.yaml +7 -0
- package/src/adapters/notebooklm/list.yaml +7 -0
- package/src/adapters/notebooklm/note-list.yaml +7 -0
- package/src/adapters/notebooklm/notes-get.yaml +7 -0
- package/src/adapters/notebooklm/open.yaml +7 -0
- package/src/adapters/notebooklm/rpc.yaml +7 -0
- package/src/adapters/notebooklm/shared.yaml +7 -0
- package/src/adapters/notebooklm/source-fulltext.yaml +7 -0
- package/src/adapters/notebooklm/source-get.yaml +7 -0
- package/src/adapters/notebooklm/source-guide.yaml +7 -0
- package/src/adapters/notebooklm/source-list.yaml +7 -0
- package/src/adapters/notebooklm/status.yaml +7 -0
- package/src/adapters/notebooklm/summary.yaml +7 -0
- package/src/adapters/notion/databases.yaml +7 -0
- package/src/adapters/notion/pages.yaml +7 -0
- package/src/adapters/notion/search.yaml +7 -0
- package/src/adapters/novita/generate.yaml +7 -0
- package/src/adapters/novita/models.yaml +7 -0
- package/src/adapters/novita/status.yaml +7 -0
- package/src/adapters/npm/downloads.yaml +7 -0
- package/src/adapters/npm/info.yaml +7 -0
- package/src/adapters/npm/search.yaml +7 -0
- package/src/adapters/npm/versions.yaml +7 -0
- package/src/adapters/npm-trends/compare.yaml +7 -0
- package/src/adapters/npm-trends/trending.yaml +7 -0
- package/src/adapters/nytimes/search.yaml +7 -0
- package/src/adapters/nytimes/top.yaml +7 -0
- package/src/adapters/obs/record-start.yaml +7 -0
- package/src/adapters/obs/record-stop.yaml +7 -0
- package/src/adapters/obs/scenes.yaml +7 -0
- package/src/adapters/obs/screenshot.yaml +7 -0
- package/src/adapters/obs/sources.yaml +7 -0
- package/src/adapters/obs/status.yaml +7 -0
- package/src/adapters/obs/stream-start.yaml +7 -0
- package/src/adapters/obs/stream-stop.yaml +7 -0
- package/src/adapters/obsidian/daily.yaml +7 -0
- package/src/adapters/obsidian/open.yaml +7 -0
- package/src/adapters/obsidian/search.yaml +7 -0
- package/src/adapters/ollama/generate.yaml +7 -0
- package/src/adapters/ollama/list.yaml +7 -0
- package/src/adapters/ollama/models.yaml +7 -0
- package/src/adapters/ollama/ps.yaml +7 -0
- package/src/adapters/ones/enrich-tasks.yaml +7 -0
- package/src/adapters/ones/login.yaml +7 -0
- package/src/adapters/ones/logout.yaml +7 -0
- package/src/adapters/ones/me.yaml +7 -0
- package/src/adapters/ones/my-tasks.yaml +7 -0
- package/src/adapters/ones/resolve-labels.yaml +7 -0
- package/src/adapters/ones/task-helpers.yaml +7 -0
- package/src/adapters/ones/task.yaml +7 -0
- package/src/adapters/ones/tasks.yaml +7 -0
- package/src/adapters/ones/token-info.yaml +7 -0
- package/src/adapters/ones/worklog.yaml +7 -0
- package/src/adapters/opencode/version.yaml +7 -0
- package/src/adapters/openharness/memory-read.yaml +7 -0
- package/src/adapters/openharness/skills-list.yaml +7 -0
- package/src/adapters/openrouter/models.yaml +7 -0
- package/src/adapters/openrouter/search.yaml +7 -0
- package/src/adapters/pandoc/convert.yaml +7 -0
- package/src/adapters/paperreview/feedback.yaml +7 -0
- package/src/adapters/paperreview/review.yaml +7 -0
- package/src/adapters/paperreview/submit.yaml +7 -0
- package/src/adapters/perplexity/ask.yaml +7 -0
- package/src/adapters/pexels/curated.yaml +7 -0
- package/src/adapters/pexels/search.yaml +7 -0
- package/src/adapters/pinduoduo/hot.yaml +7 -0
- package/src/adapters/pinduoduo/search.yaml +7 -0
- package/src/adapters/pixiv/detail.yaml +7 -0
- package/src/adapters/pixiv/download.yaml +7 -0
- package/src/adapters/pixiv/illusts.yaml +7 -0
- package/src/adapters/pixiv/ranking.yaml +7 -0
- package/src/adapters/pixiv/search.yaml +7 -0
- package/src/adapters/pixiv/user.yaml +7 -0
- package/src/adapters/producthunt/browse.yaml +7 -0
- package/src/adapters/producthunt/hot.yaml +7 -0
- package/src/adapters/producthunt/posts.yaml +7 -0
- package/src/adapters/producthunt/search.yaml +7 -0
- package/src/adapters/producthunt/today.yaml +7 -0
- package/src/adapters/pscale/databases.yaml +7 -0
- package/src/adapters/pypi/info.yaml +7 -0
- package/src/adapters/pypi/search.yaml +7 -0
- package/src/adapters/pypi/versions.yaml +7 -0
- package/src/adapters/quark/ls.yaml +7 -0
- package/src/adapters/quark/search.yaml +7 -0
- package/src/adapters/qweather/forecast.yaml +7 -0
- package/src/adapters/qweather/now.yaml +7 -0
- package/src/adapters/railway/deploy.yaml +7 -0
- package/src/adapters/reddit/comment.yaml +7 -0
- package/src/adapters/reddit/comments.yaml +7 -0
- package/src/adapters/reddit/frontpage.yaml +7 -0
- package/src/adapters/reddit/hot.yaml +7 -0
- package/src/adapters/reddit/new.yaml +7 -0
- package/src/adapters/reddit/popular.yaml +7 -0
- package/src/adapters/reddit/read.yaml +7 -0
- package/src/adapters/reddit/rising.yaml +7 -0
- package/src/adapters/reddit/save.yaml +7 -0
- package/src/adapters/reddit/saved.yaml +7 -0
- package/src/adapters/reddit/search.yaml +7 -0
- package/src/adapters/reddit/subreddit.yaml +7 -0
- package/src/adapters/reddit/subscribe.yaml +7 -0
- package/src/adapters/reddit/top.yaml +7 -0
- package/src/adapters/reddit/trending.yaml +7 -0
- package/src/adapters/reddit/upvote.yaml +7 -0
- package/src/adapters/reddit/upvoted.yaml +7 -0
- package/src/adapters/reddit/user-comments.yaml +7 -0
- package/src/adapters/reddit/user-posts.yaml +7 -0
- package/src/adapters/reddit/user.yaml +7 -0
- package/src/adapters/renderdoc/capture-list.yaml +7 -0
- package/src/adapters/renderdoc/frame-export.yaml +7 -0
- package/src/adapters/replicate/run.yaml +7 -0
- package/src/adapters/replicate/search.yaml +7 -0
- package/src/adapters/replicate/trending.yaml +7 -0
- package/src/adapters/reuters/_site.json +9 -0
- package/src/adapters/reuters/article.yaml +7 -0
- package/src/adapters/reuters/latest.yaml +7 -0
- package/src/adapters/reuters/search.yaml +7 -0
- package/src/adapters/reuters/top.yaml +7 -0
- package/src/adapters/shotcut/effects.yaml +7 -0
- package/src/adapters/shotcut/info.yaml +7 -0
- package/src/adapters/shotcut/render.yaml +7 -0
- package/src/adapters/sinablog/_site.json +9 -0
- package/src/adapters/sinablog/article.yaml +7 -0
- package/src/adapters/sinablog/hot.yaml +7 -0
- package/src/adapters/sinablog/search.yaml +7 -0
- package/src/adapters/sinablog/user.yaml +7 -0
- package/src/adapters/sinafinance/market.yaml +7 -0
- package/src/adapters/sinafinance/news.yaml +7 -0
- package/src/adapters/sinafinance/rolling-news.yaml +7 -0
- package/src/adapters/sinafinance/stock-rank.yaml +7 -0
- package/src/adapters/sinafinance/stock.yaml +7 -0
- package/src/adapters/sketch/artboards.yaml +7 -0
- package/src/adapters/sketch/export.yaml +7 -0
- package/src/adapters/sketch/symbols.yaml +7 -0
- package/src/adapters/slack/channels.yaml +7 -0
- package/src/adapters/slack/messages.yaml +7 -0
- package/src/adapters/slack/post.yaml +7 -0
- package/src/adapters/slack/search.yaml +7 -0
- package/src/adapters/slack/send.yaml +7 -0
- package/src/adapters/slack/status.yaml +7 -0
- package/src/adapters/slack/users.yaml +7 -0
- package/src/adapters/slay-the-spire-ii/deck.yaml +7 -0
- package/src/adapters/slay-the-spire-ii/end-turn.yaml +7 -0
- package/src/adapters/slay-the-spire-ii/map.yaml +7 -0
- package/src/adapters/slay-the-spire-ii/play-card.yaml +7 -0
- package/src/adapters/slay-the-spire-ii/status.yaml +7 -0
- package/src/adapters/slay-the-spire-ii/use-potion.yaml +7 -0
- package/src/adapters/slock/servers.yaml +7 -0
- package/src/adapters/smzdm/_site.json +9 -0
- package/src/adapters/smzdm/article.yaml +7 -0
- package/src/adapters/smzdm/hot.yaml +7 -0
- package/src/adapters/smzdm/search.yaml +7 -0
- package/src/adapters/spotify/now-playing.yaml +7 -0
- package/src/adapters/spotify/playlists.yaml +7 -0
- package/src/adapters/spotify/search.yaml +7 -0
- package/src/adapters/spotify/top-tracks.yaml +7 -0
- package/src/adapters/sspai/hot.yaml +7 -0
- package/src/adapters/sspai/latest.yaml +7 -0
- package/src/adapters/stackoverflow/bounties.yaml +7 -0
- package/src/adapters/stackoverflow/hot.yaml +7 -0
- package/src/adapters/stackoverflow/question.yaml +7 -0
- package/src/adapters/stackoverflow/search.yaml +7 -0
- package/src/adapters/stackoverflow/tags.yaml +7 -0
- package/src/adapters/stackoverflow/unanswered.yaml +7 -0
- package/src/adapters/stagehand/wrap-observe.yaml +7 -0
- package/src/adapters/steam/app-details.yaml +7 -0
- package/src/adapters/steam/new-releases.yaml +7 -0
- package/src/adapters/steam/search.yaml +7 -0
- package/src/adapters/steam/specials.yaml +7 -0
- package/src/adapters/steam/top-sellers.yaml +7 -0
- package/src/adapters/steam/wishlist.yaml +7 -0
- package/src/adapters/substack/feed.yaml +7 -0
- package/src/adapters/substack/publication.yaml +7 -0
- package/src/adapters/substack/search.yaml +7 -0
- package/src/adapters/substack/trending.yaml +7 -0
- package/src/adapters/supabase/projects.yaml +7 -0
- package/src/adapters/taobao/hot.yaml +7 -0
- package/src/adapters/taobao/search.yaml +7 -0
- package/src/adapters/techcrunch/latest.yaml +7 -0
- package/src/adapters/techcrunch/search.yaml +7 -0
- package/src/adapters/theverge/latest.yaml +7 -0
- package/src/adapters/theverge/search.yaml +7 -0
- package/src/adapters/threads/hot.yaml +8 -0
- package/src/adapters/threads/search.yaml +8 -0
- package/src/adapters/tieba/hot.yaml +7 -0
- package/src/adapters/tieba/posts.yaml +7 -0
- package/src/adapters/tieba/read.yaml +7 -0
- package/src/adapters/tieba/search.yaml +7 -0
- package/src/adapters/tiktok/comment.yaml +7 -0
- package/src/adapters/tiktok/explore.yaml +7 -0
- package/src/adapters/tiktok/follow.yaml +7 -0
- package/src/adapters/tiktok/following.yaml +7 -0
- package/src/adapters/tiktok/friends.yaml +7 -0
- package/src/adapters/tiktok/like.yaml +7 -0
- package/src/adapters/tiktok/live.yaml +7 -0
- package/src/adapters/tiktok/notifications.yaml +7 -0
- package/src/adapters/tiktok/profile.yaml +7 -0
- package/src/adapters/tiktok/save.yaml +7 -0
- package/src/adapters/tiktok/search.yaml +7 -0
- package/src/adapters/tiktok/trending.yaml +7 -0
- package/src/adapters/tiktok/unfollow.yaml +7 -0
- package/src/adapters/tiktok/unlike.yaml +7 -0
- package/src/adapters/tiktok/unsave.yaml +7 -0
- package/src/adapters/tiktok/user.yaml +7 -0
- package/src/adapters/toutiao/hot.yaml +7 -0
- package/src/adapters/toutiao/search.yaml +8 -0
- package/src/adapters/twitch/games.yaml +7 -0
- package/src/adapters/twitch/search.yaml +7 -0
- package/src/adapters/twitch/streams.yaml +7 -0
- package/src/adapters/twitch/top.yaml +7 -0
- package/src/adapters/twitter/lists.yaml +7 -0
- package/src/adapters/twitter/media.yaml +7 -0
- package/src/adapters/twitter/mentions.yaml +7 -0
- package/src/adapters/twitter/mute.yaml +7 -0
- package/src/adapters/twitter/pin.yaml +7 -0
- package/src/adapters/twitter/quotes.yaml +7 -0
- package/src/adapters/twitter/retweets.yaml +7 -0
- package/src/adapters/twitter/spaces.yaml +7 -0
- package/src/adapters/twitter/unmute.yaml +7 -0
- package/src/adapters/unsplash/random.yaml +7 -0
- package/src/adapters/unsplash/search.yaml +7 -0
- package/src/adapters/v2ex/daily.yaml +7 -0
- package/src/adapters/v2ex/hot.yaml +7 -0
- package/src/adapters/v2ex/latest.yaml +7 -0
- package/src/adapters/v2ex/me.yaml +7 -0
- package/src/adapters/v2ex/member.yaml +7 -0
- package/src/adapters/v2ex/node.yaml +7 -0
- package/src/adapters/v2ex/nodes.yaml +7 -0
- package/src/adapters/v2ex/notifications.yaml +7 -0
- package/src/adapters/v2ex/replies.yaml +7 -0
- package/src/adapters/v2ex/search.yaml +7 -0
- package/src/adapters/v2ex/topic.yaml +7 -0
- package/src/adapters/v2ex/user.yaml +7 -0
- package/src/adapters/vercel/list.yaml +7 -0
- package/src/adapters/vscode/extensions.yaml +7 -0
- package/src/adapters/vscode/install-ext.yaml +7 -0
- package/src/adapters/vscode/open.yaml +7 -0
- package/src/adapters/web/read.yaml +7 -0
- package/src/adapters/wechat-channels/hot.yaml +8 -0
- package/src/adapters/wechat-channels/search.yaml +15 -0
- package/src/adapters/weibo/comments.yaml +7 -0
- package/src/adapters/weibo/feed.yaml +7 -0
- package/src/adapters/weibo/hot.yaml +7 -0
- package/src/adapters/weibo/me.yaml +7 -0
- package/src/adapters/weibo/post.yaml +7 -0
- package/src/adapters/weibo/profile.yaml +7 -0
- package/src/adapters/weibo/search.yaml +7 -0
- package/src/adapters/weibo/timeline.yaml +7 -0
- package/src/adapters/weibo/trending.yaml +7 -0
- package/src/adapters/weibo/user.yaml +7 -0
- package/src/adapters/weixin/_site.json +9 -0
- package/src/adapters/weixin/article.yaml +7 -0
- package/src/adapters/weixin/download.yaml +7 -0
- package/src/adapters/weixin/hot.yaml +7 -0
- package/src/adapters/weixin/search.yaml +7 -0
- package/src/adapters/weread/book.yaml +7 -0
- package/src/adapters/weread/highlights.yaml +7 -0
- package/src/adapters/weread/notebooks.yaml +7 -0
- package/src/adapters/weread/notes.yaml +7 -0
- package/src/adapters/weread/ranking.yaml +7 -0
- package/src/adapters/weread/search.yaml +7 -0
- package/src/adapters/weread/shelf.yaml +7 -0
- package/src/adapters/wikipedia/random.yaml +7 -0
- package/src/adapters/wikipedia/search.yaml +7 -0
- package/src/adapters/wikipedia/summary.yaml +7 -0
- package/src/adapters/wikipedia/today.yaml +7 -0
- package/src/adapters/wikipedia/trending.yaml +7 -0
- package/src/adapters/wiremock/create-stub.yaml +7 -0
- package/src/adapters/wiremock/delete-stub.yaml +7 -0
- package/src/adapters/wiremock/reset.yaml +7 -0
- package/src/adapters/wiremock/stubs.yaml +7 -0
- package/src/adapters/wiremock/verify.yaml +7 -0
- package/src/adapters/wrangler/list.yaml +7 -0
- package/src/adapters/xianyu/chat.yaml +7 -0
- package/src/adapters/xianyu/item.yaml +7 -0
- package/src/adapters/xianyu/search.yaml +8 -0
- package/src/adapters/xiaoe/catalog.yaml +7 -0
- package/src/adapters/xiaoe/content.yaml +7 -0
- package/src/adapters/xiaoe/courses.yaml +7 -0
- package/src/adapters/xiaoe/detail.yaml +7 -0
- package/src/adapters/xiaoe/play-url.yaml +7 -0
- package/src/adapters/xiaohongshu/feed.yaml +7 -0
- package/src/adapters/xiaohongshu/follow.yaml +7 -0
- package/src/adapters/xiaohongshu/hashtag.yaml +7 -0
- package/src/adapters/xiaohongshu/hot.yaml +7 -0
- package/src/adapters/xiaohongshu/like.yaml +7 -0
- package/src/adapters/xiaohongshu/notifications.yaml +7 -0
- package/src/adapters/xiaohongshu/profile.yaml +7 -0
- package/src/adapters/xiaohongshu/save.yaml +7 -0
- package/src/adapters/xiaohongshu/suggest.yaml +7 -0
- package/src/adapters/xiaohongshu/trending.yaml +7 -0
- package/src/adapters/xiaohongshu/unfollow.yaml +7 -0
- package/src/adapters/xiaoyuzhou/episode.yaml +7 -0
- package/src/adapters/xiaoyuzhou/podcast-episodes.yaml +7 -0
- package/src/adapters/xiaoyuzhou/podcast.yaml +7 -0
- package/src/adapters/xueqiu/comments.yaml +7 -0
- package/src/adapters/xueqiu/earnings-date.yaml +7 -0
- package/src/adapters/xueqiu/feed.yaml +7 -0
- package/src/adapters/xueqiu/fund-holdings.yaml +7 -0
- package/src/adapters/xueqiu/fund-snapshot.yaml +7 -0
- package/src/adapters/xueqiu/hot-stock.yaml +7 -0
- package/src/adapters/xueqiu/hot.yaml +7 -0
- package/src/adapters/xueqiu/market.yaml +7 -0
- package/src/adapters/xueqiu/quote.yaml +7 -0
- package/src/adapters/xueqiu/search.yaml +7 -0
- package/src/adapters/xueqiu/stock.yaml +7 -0
- package/src/adapters/xueqiu/watchlist.yaml +7 -0
- package/src/adapters/yahoo-finance/quote.yaml +7 -0
- package/src/adapters/yahoo-finance/search.yaml +7 -0
- package/src/adapters/yahoo-finance/trending.yaml +7 -0
- package/src/adapters/ycombinator/launches.yaml +7 -0
- package/src/adapters/yollomi/background.yaml +7 -0
- package/src/adapters/yollomi/edit.yaml +7 -0
- package/src/adapters/yollomi/face-swap.yaml +7 -0
- package/src/adapters/yollomi/generate.yaml +7 -0
- package/src/adapters/yollomi/models.yaml +7 -0
- package/src/adapters/yollomi/object-remover.yaml +7 -0
- package/src/adapters/yollomi/remove-bg.yaml +7 -0
- package/src/adapters/yollomi/restore.yaml +7 -0
- package/src/adapters/yollomi/try-on.yaml +7 -0
- package/src/adapters/yollomi/upload.yaml +7 -0
- package/src/adapters/yollomi/upscale.yaml +7 -0
- package/src/adapters/yollomi/video.yaml +7 -0
- package/src/adapters/youtube/playlist.yaml +7 -0
- package/src/adapters/youtube/shorts.yaml +7 -0
- package/src/adapters/youtube/trending.yaml +7 -0
- package/src/adapters/yt-dlp/download.yaml +7 -0
- package/src/adapters/yt-dlp/extract-audio.yaml +7 -0
- package/src/adapters/yt-dlp/info.yaml +7 -0
- package/src/adapters/yt-dlp/search.yaml +7 -0
- package/src/adapters/yuanbao/ask.yaml +7 -0
- package/src/adapters/yuanbao/new.yaml +7 -0
- package/src/adapters/yuanbao/shared.yaml +7 -0
- package/src/adapters/zhihu/answer.yaml +7 -0
- package/src/adapters/zhihu/answers.yaml +7 -0
- package/src/adapters/zhihu/article.yaml +7 -0
- package/src/adapters/zhihu/articles.yaml +7 -0
- package/src/adapters/zhihu/collections.yaml +7 -0
- package/src/adapters/zhihu/columns.yaml +7 -0
- package/src/adapters/zhihu/comment.yaml +7 -0
- package/src/adapters/zhihu/download.yaml +7 -0
- package/src/adapters/zhihu/feed.yaml +7 -0
- package/src/adapters/zhihu/followers.yaml +7 -0
- package/src/adapters/zhihu/following.yaml +7 -0
- package/src/adapters/zhihu/hot.yaml +7 -0
- package/src/adapters/zhihu/me.yaml +7 -0
- package/src/adapters/zhihu/notifications.yaml +7 -0
- package/src/adapters/zhihu/pins.yaml +7 -0
- package/src/adapters/zhihu/question.yaml +7 -0
- package/src/adapters/zhihu/search.yaml +7 -0
- package/src/adapters/zhihu/topic.yaml +7 -0
- package/src/adapters/zhihu/topics.yaml +7 -0
- package/src/adapters/zhihu/trending.yaml +7 -0
- package/src/adapters/zhihu/user.yaml +7 -0
- package/src/adapters/zoom/join.yaml +7 -0
- package/src/adapters/zoom/start.yaml +7 -0
- package/src/adapters/zoom/toggle-mute.yaml +37 -0
- package/src/adapters/zotero/add-note.yaml +7 -0
- package/src/adapters/zotero/add-tag.yaml +7 -0
- package/src/adapters/zotero/collections.yaml +7 -0
- package/src/adapters/zotero/export.yaml +7 -0
- package/src/adapters/zotero/items.yaml +7 -0
- package/src/adapters/zotero/notes.yaml +7 -0
- package/src/adapters/zotero/search.yaml +7 -0
- package/src/adapters/zotero/tags.yaml +7 -0
- package/src/adapters/zsxq/dynamics.yaml +7 -0
- package/src/adapters/zsxq/groups.yaml +7 -0
- package/src/adapters/zsxq/search.yaml +7 -0
- package/src/adapters/zsxq/topic.yaml +7 -0
- package/src/adapters/zsxq/topics.yaml +7 -0
- package/src/adapters/1688/manifest.yaml +0 -7
- package/src/adapters/barchart/manifest.yaml +0 -8
- package/src/adapters/jd/manifest.yaml +0 -7
- package/src/adapters/linkedin/manifest.yaml +0 -8
- package/src/adapters/reuters/manifest.yaml +0 -7
- package/src/adapters/sinablog/manifest.yaml +0 -7
- package/src/adapters/smzdm/manifest.yaml +0 -7
- 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":"AAAA;;;;;;;;;;;;;;;GAeG;AAkBH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
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
|
-
|
|
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
|