@zenalexa/unicli 0.207.1 → 0.209.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/AGENTS.md +4 -4
  2. package/README.md +30 -17
  3. package/dist/browser/observe.d.ts +80 -0
  4. package/dist/browser/observe.d.ts.map +1 -0
  5. package/dist/browser/observe.js +144 -0
  6. package/dist/browser/observe.js.map +1 -0
  7. package/dist/browser/snapshot.d.ts.map +1 -1
  8. package/dist/browser/snapshot.js +29 -9
  9. package/dist/browser/snapshot.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +59 -2
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/agents.d.ts.map +1 -1
  14. package/dist/commands/agents.js +82 -2
  15. package/dist/commands/agents.js.map +1 -1
  16. package/dist/commands/eval.d.ts +112 -0
  17. package/dist/commands/eval.d.ts.map +1 -0
  18. package/dist/commands/eval.js +485 -0
  19. package/dist/commands/eval.js.map +1 -0
  20. package/dist/commands/generate.d.ts.map +1 -1
  21. package/dist/commands/generate.js +20 -1
  22. package/dist/commands/generate.js.map +1 -1
  23. package/dist/commands/hub.d.ts +13 -0
  24. package/dist/commands/hub.d.ts.map +1 -0
  25. package/dist/commands/hub.js +232 -0
  26. package/dist/commands/hub.js.map +1 -0
  27. package/dist/commands/mcp.d.ts +16 -0
  28. package/dist/commands/mcp.d.ts.map +1 -0
  29. package/dist/commands/mcp.js +135 -0
  30. package/dist/commands/mcp.js.map +1 -0
  31. package/dist/commands/operate.d.ts.map +1 -1
  32. package/dist/commands/operate.js +66 -1
  33. package/dist/commands/operate.js.map +1 -1
  34. package/dist/commands/research.d.ts +17 -0
  35. package/dist/commands/research.d.ts.map +1 -0
  36. package/dist/commands/research.js +257 -0
  37. package/dist/commands/research.js.map +1 -0
  38. package/dist/commands/skills.d.ts +91 -0
  39. package/dist/commands/skills.d.ts.map +1 -0
  40. package/dist/commands/skills.js +266 -0
  41. package/dist/commands/skills.js.map +1 -0
  42. package/dist/commands/test-gen.d.ts +10 -0
  43. package/dist/commands/test-gen.d.ts.map +1 -0
  44. package/dist/commands/test-gen.js +124 -0
  45. package/dist/commands/test-gen.js.map +1 -0
  46. package/dist/commands/usage.d.ts +17 -0
  47. package/dist/commands/usage.d.ts.map +1 -0
  48. package/dist/commands/usage.js +87 -0
  49. package/dist/commands/usage.js.map +1 -0
  50. package/dist/discovery/loader.d.ts +8 -1
  51. package/dist/discovery/loader.d.ts.map +1 -1
  52. package/dist/discovery/loader.js +103 -6
  53. package/dist/discovery/loader.js.map +1 -1
  54. package/dist/engine/capability.d.ts +40 -0
  55. package/dist/engine/capability.d.ts.map +1 -0
  56. package/dist/engine/capability.js +191 -0
  57. package/dist/engine/capability.js.map +1 -0
  58. package/dist/engine/endpoint.d.ts +47 -0
  59. package/dist/engine/endpoint.d.ts.map +1 -0
  60. package/dist/engine/endpoint.js +295 -0
  61. package/dist/engine/endpoint.js.map +1 -0
  62. package/dist/engine/framework.d.ts +28 -0
  63. package/dist/engine/framework.d.ts.map +1 -0
  64. package/dist/engine/framework.js +66 -0
  65. package/dist/engine/framework.js.map +1 -0
  66. package/dist/engine/probe.d.ts +19 -0
  67. package/dist/engine/probe.d.ts.map +1 -0
  68. package/dist/engine/probe.js +85 -0
  69. package/dist/engine/probe.js.map +1 -0
  70. package/dist/engine/research.d.ts +38 -0
  71. package/dist/engine/research.d.ts.map +1 -0
  72. package/dist/engine/research.js +414 -0
  73. package/dist/engine/research.js.map +1 -0
  74. package/dist/engine/update-check.js +1 -1
  75. package/dist/engine/update-check.js.map +1 -1
  76. package/dist/engine/yaml-runner.d.ts.map +1 -1
  77. package/dist/engine/yaml-runner.js +115 -6
  78. package/dist/engine/yaml-runner.js.map +1 -1
  79. package/dist/main.d.ts +1 -4
  80. package/dist/main.d.ts.map +1 -1
  81. package/dist/main.js +1 -4
  82. package/dist/main.js.map +1 -1
  83. package/dist/manifest.json +519 -1
  84. package/dist/mcp/server.d.ts +19 -6
  85. package/dist/mcp/server.d.ts.map +1 -1
  86. package/dist/mcp/server.js +459 -115
  87. package/dist/mcp/server.js.map +1 -1
  88. package/dist/permissions/sensitive-paths.d.ts +92 -0
  89. package/dist/permissions/sensitive-paths.d.ts.map +1 -0
  90. package/dist/permissions/sensitive-paths.js +174 -0
  91. package/dist/permissions/sensitive-paths.js.map +1 -0
  92. package/dist/runtime/usage-ledger.d.ts +86 -0
  93. package/dist/runtime/usage-ledger.d.ts.map +1 -0
  94. package/dist/runtime/usage-ledger.js +173 -0
  95. package/dist/runtime/usage-ledger.js.map +1 -0
  96. package/package.json +8 -7
  97. package/src/adapters/autoagent/eval-run.yaml +36 -0
  98. package/src/adapters/cnn/top.yaml +21 -0
  99. package/src/adapters/cocoapods/search.yaml +16 -0
  100. package/src/adapters/crates-io/search.yaml +27 -0
  101. package/src/adapters/cua/bench-list.yaml +20 -0
  102. package/src/adapters/cua/bench-run.yaml +32 -0
  103. package/src/adapters/docker-hub/search.yaml +26 -0
  104. package/src/adapters/eastmoney/hot.yaml +23 -0
  105. package/src/adapters/eastmoney/search.yaml +25 -0
  106. package/src/adapters/exchangerate/convert.yaml +19 -0
  107. package/src/adapters/feishu/calendar.yaml +24 -0
  108. package/src/adapters/feishu/docs.yaml +17 -0
  109. package/src/adapters/feishu/send.yaml +29 -0
  110. package/src/adapters/feishu/tasks.yaml +24 -0
  111. package/src/adapters/gitee/search.yaml +25 -0
  112. package/src/adapters/gitee/trending.yaml +22 -0
  113. package/src/adapters/gitlab/search.yaml +24 -0
  114. package/src/adapters/gitlab/trending.yaml +22 -0
  115. package/src/adapters/godot/project-run.yaml +31 -0
  116. package/src/adapters/godot/scene-export.yaml +39 -0
  117. package/src/adapters/hermes/sessions-search.yaml +61 -0
  118. package/src/adapters/hermes/skills-list.yaml +30 -0
  119. package/src/adapters/hermes/skills-read.yaml +46 -0
  120. package/src/adapters/homebrew/info.yaml +15 -0
  121. package/src/adapters/huggingface-papers/daily.yaml +21 -0
  122. package/src/adapters/infoq/articles.yaml +29 -0
  123. package/src/adapters/ip-info/lookup.yaml +15 -0
  124. package/src/adapters/itch-io/popular.yaml +22 -0
  125. package/src/adapters/ithome/news.yaml +21 -0
  126. package/src/adapters/mastodon/search.yaml +29 -0
  127. package/src/adapters/mastodon/trending.yaml +27 -0
  128. package/src/adapters/meituan/search.yaml +30 -0
  129. package/src/adapters/minimax/chat.yaml +33 -0
  130. package/src/adapters/minimax/models.yaml +18 -0
  131. package/src/adapters/minimax/tts.yaml +33 -0
  132. package/src/adapters/motion-studio/component-get.yaml +35 -0
  133. package/src/adapters/netease-music/hot.yaml +24 -0
  134. package/src/adapters/netease-music/search.yaml +29 -0
  135. package/src/adapters/npm-trends/compare.yaml +19 -0
  136. package/src/adapters/nytimes/top.yaml +26 -0
  137. package/src/adapters/openharness/memory-read.yaml +51 -0
  138. package/src/adapters/openharness/skills-list.yaml +28 -0
  139. package/src/adapters/openrouter/models.yaml +22 -0
  140. package/src/adapters/pexels/search.yaml +28 -0
  141. package/src/adapters/pinduoduo/hot.yaml +20 -0
  142. package/src/adapters/pypi/info.yaml +16 -0
  143. package/src/adapters/qweather/now.yaml +16 -0
  144. package/src/adapters/renderdoc/capture-list.yaml +42 -0
  145. package/src/adapters/renderdoc/frame-export.yaml +32 -0
  146. package/src/adapters/replicate/search.yaml +25 -0
  147. package/src/adapters/replicate/trending.yaml +22 -0
  148. package/src/adapters/sspai/hot.yaml +21 -0
  149. package/src/adapters/sspai/latest.yaml +22 -0
  150. package/src/adapters/stagehand/wrap-observe.yaml +42 -0
  151. package/src/adapters/techcrunch/latest.yaml +22 -0
  152. package/src/adapters/theverge/latest.yaml +21 -0
  153. package/src/adapters/twitch/top.yaml +26 -0
  154. package/src/adapters/unsplash/search.yaml +28 -0
  155. package/src/adapters/ycombinator/launches.yaml +20 -0
@@ -0,0 +1,16 @@
1
+ site: qweather
2
+ name: now
3
+ description: Current weather from QWeather (和风天气, free tier)
4
+ type: web-api
5
+ domain: devapi.qweather.com
6
+ strategy: public
7
+ args:
8
+ location:
9
+ required: true
10
+ positional: true
11
+ description: Location ID or coordinates (e.g. "101010100" for Beijing)
12
+ pipeline:
13
+ - fetch:
14
+ url: "https://devapi.qweather.com/v7/weather/now?location=${{ args.location }}&key=${{ env.QWEATHER_KEY | default('') }}"
15
+ - select: now
16
+ columns: [temp, feelsLike, text, windDir, windSpeed, humidity, pressure]
@@ -0,0 +1,42 @@
1
+ # RenderDoc capture/list — enumerate captures in a directory.
2
+ #
3
+ # Security: `args.dir` is passed via UNICLI_DIR env var (bash literal). There's
4
+ # no attempt to block absolute paths — this is a local directory lister and
5
+ # the user is free to list anywhere they have read access to. The sensitive-
6
+ # path deny list in src/permissions/sensitive-paths.ts does not apply here
7
+ # because we're listing, not reading, and credential directories are allowed
8
+ # to be *listed* by name (the deny list blocks read/exec of credential files).
9
+ site: renderdoc
10
+ name: capture/list
11
+ description: List RenderDoc capture files (.rdc) in a directory
12
+ type: desktop
13
+ strategy: public
14
+ binary: sh
15
+ detect: which renderdoccmd
16
+
17
+ args:
18
+ dir:
19
+ type: str
20
+ required: false
21
+ default: ./captures
22
+ description: Capture directory (defaults to ./captures)
23
+
24
+ pipeline:
25
+ - exec:
26
+ command: sh
27
+ args:
28
+ - -c
29
+ - |
30
+ dir="${UNICLI_DIR:-./captures}"
31
+ if [ ! -d "$dir" ]; then
32
+ echo "[]"
33
+ exit 0
34
+ fi
35
+ find "$dir" -maxdepth 1 -name '*.rdc' -type f 2>/dev/null \
36
+ | sed "s|$dir/||" \
37
+ | jq -R -s 'split("\n") | map(select(length > 0)) | map({name: .})'
38
+ env:
39
+ UNICLI_DIR: "${{ args.dir }}"
40
+ parse: json
41
+
42
+ columns: [name]
@@ -0,0 +1,32 @@
1
+ # RenderDoc frame/export — convert one capture's first frame to image via renderdoccmd.
2
+ site: renderdoc
3
+ name: frame/export
4
+ description: Export the first frame from a RenderDoc capture (.rdc) as an image
5
+ type: desktop
6
+ strategy: public
7
+ binary: renderdoccmd
8
+ detect: which renderdoccmd
9
+
10
+ args:
11
+ capture:
12
+ type: str
13
+ required: true
14
+ positional: true
15
+ description: Path to .rdc capture file
16
+ output:
17
+ type: str
18
+ required: true
19
+ description: Output image path (.png recommended)
20
+
21
+ pipeline:
22
+ - exec:
23
+ command: renderdoccmd
24
+ args:
25
+ - thumb
26
+ - ${{ args.capture }}
27
+ - --out
28
+ - ${{ args.output }}
29
+ parse: text
30
+ timeout: 60000
31
+
32
+ columns: [output]
@@ -0,0 +1,25 @@
1
+ site: replicate
2
+ name: search
3
+ description: Search AI models on Replicate
4
+ type: web-api
5
+ domain: replicate.com
6
+ strategy: public
7
+ args:
8
+ query:
9
+ required: true
10
+ positional: true
11
+ description: Model search query
12
+ limit:
13
+ required: false
14
+ default: 20
15
+ pipeline:
16
+ - fetch:
17
+ url: "https://replicate.com/api/v1/models?query=${{ args.query }}"
18
+ - select: results
19
+ - map:
20
+ name: "${{ item.name }}"
21
+ owner: "${{ item.owner }}"
22
+ description: "${{ item.description }}"
23
+ run_count: "${{ item.run_count }}"
24
+ - limit: "${{ args.limit | default(20) }}"
25
+ columns: [name, owner, description, run_count]
@@ -0,0 +1,22 @@
1
+ site: replicate
2
+ name: trending
3
+ description: Trending AI models on Replicate
4
+ type: web-api
5
+ domain: replicate.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://replicate.com/api/v1/collections/trending-models"
14
+ - select: models
15
+ - map:
16
+ name: "${{ item.name }}"
17
+ owner: "${{ item.owner }}"
18
+ description: "${{ item.description }}"
19
+ run_count: "${{ item.run_count }}"
20
+ url: "${{ item.url }}"
21
+ - limit: "${{ args.limit | default(20) }}"
22
+ columns: [name, owner, description, run_count]
@@ -0,0 +1,21 @@
1
+ site: sspai
2
+ name: hot
3
+ description: Hot/trending articles on Sspai (少数派)
4
+ type: web-api
5
+ domain: sspai.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://sspai.com/api/v1/articles?offset=0&limit=${{ args.limit | default(20) }}&sort=hot"
14
+ - select: data
15
+ - map:
16
+ title: "${{ item.title }}"
17
+ author: "${{ item.author.nickname }}"
18
+ likes: "${{ item.like_count }}"
19
+ url: "${{ 'https://sspai.com/post/' + item.id }}"
20
+ - limit: "${{ args.limit | default(20) }}"
21
+ columns: [title, author, likes, url]
@@ -0,0 +1,22 @@
1
+ site: sspai
2
+ name: latest
3
+ description: Latest articles on Sspai (少数派)
4
+ type: web-api
5
+ domain: sspai.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://sspai.com/api/v1/articles?offset=0&limit=${{ args.limit | default(20) }}&sort=created_at"
14
+ - select: data
15
+ - map:
16
+ title: "${{ item.title }}"
17
+ author: "${{ item.author.nickname }}"
18
+ likes: "${{ item.like_count }}"
19
+ url: "${{ 'https://sspai.com/post/' + item.id }}"
20
+ date: "${{ item.created_at }}"
21
+ - limit: "${{ args.limit | default(20) }}"
22
+ columns: [title, author, likes, url]
@@ -0,0 +1,42 @@
1
+ # Stagehand wrap/observe — subprocess wrapper around stagehand-cli.
2
+ #
3
+ # Stagehand exposes a vision-grounded `observe()` verb. This adapter shells
4
+ # out to it (if installed) and parses the JSON candidates the same way
5
+ # `unicli operate observe` does. The wrapper exists so users on Uni-CLI's
6
+ # declarative pipelines can tap Stagehand without porting a full LLM stack.
7
+ site: stagehand
8
+ name: wrap/observe
9
+ description: Run Stagehand's observe() verb against an open page (subprocess wrapper)
10
+ type: bridge
11
+ strategy: public
12
+ binary: stagehand
13
+ detect: which stagehand
14
+
15
+ args:
16
+ query:
17
+ type: str
18
+ required: true
19
+ positional: true
20
+ description: Natural-language goal (what should I click to do X?)
21
+ url:
22
+ type: str
23
+ required: false
24
+ description: URL to navigate to before observing
25
+ top_k:
26
+ type: int
27
+ default: 5
28
+ description: Max candidates
29
+
30
+ pipeline:
31
+ - exec:
32
+ command: stagehand
33
+ args:
34
+ - observe
35
+ - --query
36
+ - ${{ args.query }}
37
+ - --top-k
38
+ - ${{ args.top_k }}
39
+ parse: json
40
+ timeout: 60000
41
+
42
+ columns: [action, ref, selector, confidence]
@@ -0,0 +1,22 @@
1
+ site: techcrunch
2
+ name: latest
3
+ description: Latest TechCrunch articles via RSS
4
+ type: web-api
5
+ domain: techcrunch.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch_text:
13
+ url: "https://techcrunch.com/feed/"
14
+ - parse_rss: ~
15
+ - map:
16
+ title: "${{ item.title }}"
17
+ url: "${{ item.link }}"
18
+ author: "${{ item.creator }}"
19
+ date: "${{ item.pubDate }}"
20
+ description: "${{ item.contentSnippet }}"
21
+ - limit: "${{ args.limit | default(20) }}"
22
+ columns: [title, url, author, date]
@@ -0,0 +1,21 @@
1
+ site: theverge
2
+ name: latest
3
+ description: Latest The Verge articles via RSS
4
+ type: web-api
5
+ domain: theverge.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch_text:
13
+ url: "https://www.theverge.com/rss/index.xml"
14
+ - parse_rss: ~
15
+ - map:
16
+ title: "${{ item.title }}"
17
+ url: "${{ item.link }}"
18
+ author: "${{ item.creator }}"
19
+ date: "${{ item.pubDate }}"
20
+ - limit: "${{ args.limit | default(20) }}"
21
+ columns: [title, url, author, date]
@@ -0,0 +1,26 @@
1
+ site: twitch
2
+ name: top
3
+ description: Top live streams on Twitch via GQL public endpoint
4
+ type: web-api
5
+ domain: gql.twitch.tv
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://gql.twitch.tv/gql"
14
+ method: POST
15
+ headers:
16
+ Client-Id: "kimne78kx3ncx6brgo4mv6wki5h1ko"
17
+ body:
18
+ query: "query { streams(first: ${{ args.limit | default(20) }}) { edges { node { broadcaster { displayName login } title viewersCount game { name } } } } }"
19
+ - select: data.streams.edges
20
+ - map:
21
+ streamer: "${{ item.node.broadcaster.displayName }}"
22
+ title: "${{ item.node.title }}"
23
+ viewers: "${{ item.node.viewersCount }}"
24
+ game: "${{ item.node.game.name }}"
25
+ - limit: "${{ args.limit | default(20) }}"
26
+ columns: [streamer, title, viewers, game]
@@ -0,0 +1,28 @@
1
+ site: unsplash
2
+ name: search
3
+ description: Search free photos on Unsplash
4
+ type: web-api
5
+ domain: unsplash.com
6
+ strategy: public
7
+ args:
8
+ query:
9
+ required: true
10
+ positional: true
11
+ description: Photo search query
12
+ limit:
13
+ required: false
14
+ default: 20
15
+ pipeline:
16
+ - fetch:
17
+ url: "https://unsplash.com/napi/search/photos?query=${{ args.query }}&per_page=${{ args.limit | default(20) }}"
18
+ - select: results
19
+ - map:
20
+ description: "${{ item.description || item.alt_description }}"
21
+ author: "${{ item.user.name }}"
22
+ url: "${{ item.urls.regular }}"
23
+ download: "${{ item.links.download }}"
24
+ likes: "${{ item.likes }}"
25
+ width: "${{ item.width }}"
26
+ height: "${{ item.height }}"
27
+ - limit: "${{ args.limit | default(20) }}"
28
+ columns: [description, author, url, likes]
@@ -0,0 +1,20 @@
1
+ site: ycombinator
2
+ name: launches
3
+ description: Latest YC company launches
4
+ type: web-api
5
+ domain: www.ycombinator.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://www.ycombinator.com/launches.json"
14
+ - map:
15
+ name: "${{ item.name }}"
16
+ tagline: "${{ item.tagline }}"
17
+ url: "${{ item.url }}"
18
+ batch: "${{ item.batch }}"
19
+ - limit: "${{ args.limit | default(20) }}"
20
+ columns: [name, tagline, url, batch]