@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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zenalexa/unicli",
3
- "version": "0.207.1",
4
- "description": "CLI IS ALL YOU NEED Turn any website, desktop app, cloud service, or system tool into a CLI command",
3
+ "version": "0.209.0",
4
+ "description": "The universal interface between AI agents and the world's software",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
7
7
  "bin": {
@@ -29,7 +29,8 @@
29
29
  "lint": "oxlint src/",
30
30
  "format": "prettier --write .",
31
31
  "format:check": "prettier --check .",
32
- "verify": "npm run format:check && npm run typecheck && npm run lint && npm run test && npm run build",
32
+ "lint:context": "bash scripts/lint-context.sh",
33
+ "verify": "npm run format:check && npm run typecheck && npm run lint && npm run lint:context && npm run test && npm run build",
33
34
  "docs:dev": "vitepress dev docs",
34
35
  "docs:build": "vitepress build docs",
35
36
  "docs:preview": "vitepress preview docs",
@@ -37,7 +38,7 @@
37
38
  "mcp": "tsx src/mcp/server.ts",
38
39
  "release": "npm run build && tsx scripts/release.ts",
39
40
  "bench": "tsx scripts/bench.ts",
40
- "sync:ref": "cd ref && (cd opencli && git pull --rebase --depth 1) && (cd CLI-Anything && git pull --rebase --depth 1) && echo 'ref repos synced'"
41
+ "sync:ref": "bash scripts/sync-ref.sh"
41
42
  },
42
43
  "keywords": [
43
44
  "cli",
@@ -55,11 +56,11 @@
55
56
  "license": "Apache-2.0",
56
57
  "repository": {
57
58
  "type": "git",
58
- "url": "git+https://github.com/ZenAlexa/Uni-CLI.git"
59
+ "url": "git+https://github.com/olo-dot-io/Uni-CLI.git"
59
60
  },
60
- "homepage": "https://github.com/ZenAlexa/Uni-CLI",
61
+ "homepage": "https://github.com/olo-dot-io/Uni-CLI",
61
62
  "bugs": {
62
- "url": "https://github.com/ZenAlexa/Uni-CLI/issues"
63
+ "url": "https://github.com/olo-dot-io/Uni-CLI/issues"
63
64
  },
64
65
  "engines": {
65
66
  "node": ">=20.0.0"
@@ -0,0 +1,36 @@
1
+ # kevinrgu/autoagent eval/run — delegate hill-climbing optimization to AutoAgent.
2
+ # Subprocess wrapper that streams JSON results back.
3
+ site: autoagent
4
+ name: eval/run
5
+ description: Run an AutoAgent evaluation (hill-climbing on agent.py)
6
+ type: bridge
7
+ strategy: public
8
+ binary: autoagent
9
+ detect: which autoagent
10
+
11
+ args:
12
+ task:
13
+ type: str
14
+ required: true
15
+ positional: true
16
+ description: Task name or path to a YAML task spec
17
+ iterations:
18
+ type: int
19
+ default: 5
20
+ description: Max hill-climb iterations
21
+
22
+ pipeline:
23
+ - exec:
24
+ command: autoagent
25
+ args:
26
+ - eval
27
+ - run
28
+ - --task
29
+ - ${{ args.task }}
30
+ - --iterations
31
+ - ${{ args.iterations }}
32
+ - --json
33
+ parse: json
34
+ timeout: 600000
35
+
36
+ columns: [iteration, score, change]
@@ -0,0 +1,21 @@
1
+ site: cnn
2
+ name: top
3
+ description: CNN top stories via RSS
4
+ type: web-api
5
+ domain: rss.cnn.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch_text:
13
+ url: "http://rss.cnn.com/rss/edition.rss"
14
+ - parse_rss: ~
15
+ - map:
16
+ title: "${{ item.title }}"
17
+ url: "${{ item.link }}"
18
+ date: "${{ item.pubDate }}"
19
+ description: "${{ item.contentSnippet }}"
20
+ - limit: "${{ args.limit | default(20) }}"
21
+ columns: [title, url, date]
@@ -0,0 +1,16 @@
1
+ site: cocoapods
2
+ name: search
3
+ description: Search CocoaPods iOS/macOS libraries
4
+ type: web-api
5
+ domain: cocoapods.org
6
+ strategy: public
7
+ args:
8
+ query:
9
+ required: true
10
+ positional: true
11
+ description: Pod search query
12
+ pipeline:
13
+ - fetch:
14
+ url: "https://search.cocoapods.org/api/v1/pods.picky.hash.json?query=${{ args.query }}&amount=20"
15
+ - select: allocations
16
+ columns: [name, version, summary, source]
@@ -0,0 +1,27 @@
1
+ site: crates-io
2
+ name: search
3
+ description: Search Rust crates on crates.io
4
+ type: web-api
5
+ domain: crates.io
6
+ strategy: public
7
+ args:
8
+ query:
9
+ required: true
10
+ positional: true
11
+ description: Search keyword
12
+ limit:
13
+ required: false
14
+ default: 20
15
+ pipeline:
16
+ - fetch:
17
+ url: "https://crates.io/api/v1/crates?q=${{ args.query }}&per_page=${{ args.limit | default(20) }}&sort=downloads"
18
+ headers:
19
+ User-Agent: "unicli/0.209.0 (https://github.com/olo-dot-io/Uni-CLI)"
20
+ - select: crates
21
+ - map:
22
+ name: "${{ item.name }}"
23
+ version: "${{ item.newest_version }}"
24
+ description: "${{ item.description }}"
25
+ downloads: "${{ item.downloads }}"
26
+ - limit: "${{ args.limit | default(20) }}"
27
+ columns: [name, version, description, downloads]
@@ -0,0 +1,20 @@
1
+ # trycua/cua bench/list — list available cua benchmarks.
2
+ site: cua
3
+ name: bench/list
4
+ description: List trycua/cua computer-use benchmarks
5
+ type: bridge
6
+ strategy: public
7
+ binary: cua
8
+ detect: which cua
9
+
10
+ pipeline:
11
+ - exec:
12
+ command: cua
13
+ args:
14
+ - bench
15
+ - list
16
+ - --json
17
+ parse: json
18
+ timeout: 30000
19
+
20
+ columns: [name, description]
@@ -0,0 +1,32 @@
1
+ # trycua/cua bench/run — run a single computer-use benchmark.
2
+ site: cua
3
+ name: bench/run
4
+ description: Run a trycua/cua computer-use benchmark
5
+ type: bridge
6
+ strategy: public
7
+ binary: cua
8
+ detect: which cua
9
+
10
+ args:
11
+ benchmark:
12
+ type: str
13
+ required: true
14
+ positional: true
15
+ description: Benchmark name from `cua bench/list`
16
+ agent:
17
+ type: str
18
+ required: false
19
+ description: Agent backend (e.g. unicli, browser-use, claude)
20
+
21
+ pipeline:
22
+ - exec:
23
+ command: cua
24
+ args:
25
+ - bench
26
+ - run
27
+ - ${{ args.benchmark }}
28
+ - --json
29
+ parse: json
30
+ timeout: 600000
31
+
32
+ columns: [task, score, duration, agent]
@@ -0,0 +1,26 @@
1
+ site: docker-hub
2
+ name: search
3
+ description: Search Docker Hub images
4
+ type: web-api
5
+ domain: hub.docker.com
6
+ strategy: public
7
+ args:
8
+ query:
9
+ required: true
10
+ positional: true
11
+ description: Image search query
12
+ limit:
13
+ required: false
14
+ default: 20
15
+ pipeline:
16
+ - fetch:
17
+ url: "https://hub.docker.com/v2/search/repositories/?query=${{ args.query }}&page_size=${{ args.limit | default(20) }}"
18
+ - select: results
19
+ - map:
20
+ name: "${{ item.repo_name }}"
21
+ description: "${{ item.short_description }}"
22
+ stars: "${{ item.star_count }}"
23
+ pulls: "${{ item.pull_count }}"
24
+ official: "${{ item.is_official }}"
25
+ - limit: "${{ args.limit | default(20) }}"
26
+ columns: [name, description, stars, pulls, official]
@@ -0,0 +1,23 @@
1
+ site: eastmoney
2
+ name: hot
3
+ description: Eastmoney hot stocks (A-share volume leaders)
4
+ type: web-api
5
+ domain: push2.eastmoney.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://push2.eastmoney.com/api/qt/clist/get?pn=1&pz=${{ args.limit | default(20) }}&po=1&np=1&fltt=2&invt=2&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23&fields=f2,f3,f4,f5,f6,f12,f14"
14
+ - select: data.diff
15
+ - map:
16
+ code: "${{ item.f12 }}"
17
+ name: "${{ item.f14 }}"
18
+ price: "${{ item.f2 }}"
19
+ change_pct: "${{ item.f3 }}%"
20
+ volume: "${{ item.f5 }}"
21
+ amount: "${{ item.f6 }}"
22
+ - limit: "${{ args.limit | default(20) }}"
23
+ columns: [code, name, price, change_pct, volume]
@@ -0,0 +1,25 @@
1
+ site: eastmoney
2
+ name: search
3
+ description: Search stocks on Eastmoney
4
+ type: web-api
5
+ domain: searchapi.eastmoney.com
6
+ strategy: public
7
+ args:
8
+ query:
9
+ required: true
10
+ positional: true
11
+ description: Stock name or code (e.g. "贵州茅台" or "600519")
12
+ limit:
13
+ required: false
14
+ default: 10
15
+ pipeline:
16
+ - fetch:
17
+ url: "https://searchapi.eastmoney.com/api/suggest/get?input=${{ args.query }}&type=14&count=${{ args.limit | default(10) }}"
18
+ - select: QuotationCodeTable.Data
19
+ - map:
20
+ code: "${{ item.Code }}"
21
+ name: "${{ item.Name }}"
22
+ market: "${{ item.MktNum }}"
23
+ type: "${{ item.SecurityTypeName }}"
24
+ - limit: "${{ args.limit | default(10) }}"
25
+ columns: [code, name, market, type]
@@ -0,0 +1,19 @@
1
+ site: exchangerate
2
+ name: convert
3
+ description: Get exchange rates (free API, no key needed)
4
+ type: web-api
5
+ domain: open.er-api.com
6
+ strategy: public
7
+ args:
8
+ from:
9
+ required: true
10
+ positional: true
11
+ description: Base currency code (e.g. USD, EUR, CNY)
12
+ to:
13
+ required: false
14
+ description: Target currency (if omitted, returns all rates)
15
+ pipeline:
16
+ - fetch:
17
+ url: "https://open.er-api.com/v6/latest/${{ args.from }}"
18
+ - select: rates
19
+ columns: [currency, rate]
@@ -0,0 +1,24 @@
1
+ site: feishu
2
+ name: calendar
3
+ description: List upcoming Feishu/Lark calendar events
4
+ type: bridge
5
+ domain: feishu-cli.com
6
+ detect: which feishu
7
+ strategy: public
8
+ args:
9
+ days:
10
+ required: false
11
+ default: 7
12
+ description: Number of days to look ahead
13
+ pipeline:
14
+ - exec:
15
+ command: feishu
16
+ args:
17
+ [
18
+ "calendar",
19
+ "events",
20
+ "--days",
21
+ "${{ args.days | default(7) }}",
22
+ "--json",
23
+ ]
24
+ columns: [title, start, end, location, organizer]
@@ -0,0 +1,17 @@
1
+ site: feishu
2
+ name: docs
3
+ description: List recent Feishu/Lark documents
4
+ type: bridge
5
+ domain: feishu-cli.com
6
+ detect: which feishu
7
+ strategy: public
8
+ args:
9
+ limit:
10
+ required: false
11
+ default: 20
12
+ pipeline:
13
+ - exec:
14
+ command: feishu
15
+ args:
16
+ ["docs", "list", "--limit", "${{ args.limit | default(20) }}", "--json"]
17
+ columns: [title, url, owner, updated_at]
@@ -0,0 +1,29 @@
1
+ site: feishu
2
+ name: send
3
+ description: Send a message via Feishu/Lark CLI
4
+ type: bridge
5
+ domain: feishu-cli.com
6
+ detect: which feishu
7
+ strategy: public
8
+ args:
9
+ chat:
10
+ required: true
11
+ positional: true
12
+ description: Chat ID or group name
13
+ message:
14
+ required: true
15
+ description: Message content
16
+ pipeline:
17
+ - exec:
18
+ command: feishu
19
+ args:
20
+ [
21
+ "messenger",
22
+ "send",
23
+ "--chat",
24
+ "${{ args.chat }}",
25
+ "--text",
26
+ "${{ args.message }}",
27
+ "--json",
28
+ ]
29
+ columns: [message_id, chat_id, status]
@@ -0,0 +1,24 @@
1
+ site: feishu
2
+ name: tasks
3
+ description: List Feishu/Lark tasks
4
+ type: bridge
5
+ domain: feishu-cli.com
6
+ detect: which feishu
7
+ strategy: public
8
+ args:
9
+ status:
10
+ required: false
11
+ default: open
12
+ description: Task status filter (open, completed, all)
13
+ pipeline:
14
+ - exec:
15
+ command: feishu
16
+ args:
17
+ [
18
+ "tasks",
19
+ "list",
20
+ "--status",
21
+ "${{ args.status | default('open') }}",
22
+ "--json",
23
+ ]
24
+ columns: [title, assignee, due_date, status]
@@ -0,0 +1,25 @@
1
+ site: gitee
2
+ name: search
3
+ description: Search repositories on Gitee
4
+ type: web-api
5
+ domain: gitee.com
6
+ strategy: public
7
+ args:
8
+ query:
9
+ required: true
10
+ positional: true
11
+ description: Search keyword
12
+ limit:
13
+ required: false
14
+ default: 20
15
+ pipeline:
16
+ - fetch:
17
+ url: "https://gitee.com/api/v5/search/repositories?q=${{ args.query }}&page=1&per_page=${{ args.limit | default(20) }}&sort=stars_count&order=desc"
18
+ - map:
19
+ name: "${{ item.full_name }}"
20
+ description: "${{ item.description }}"
21
+ stars: "${{ item.stargazers_count }}"
22
+ language: "${{ item.language }}"
23
+ url: "${{ item.html_url }}"
24
+ - limit: "${{ args.limit | default(20) }}"
25
+ columns: [name, description, stars, language]
@@ -0,0 +1,22 @@
1
+ site: gitee
2
+ name: trending
3
+ description: Trending repositories on Gitee
4
+ type: web-api
5
+ domain: gitee.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://gitee.com/api/v5/projects?sort=stars_count&direction=desc&page=1&per_page=${{ args.limit | default(20) }}"
14
+ - map:
15
+ name: "${{ item.full_name }}"
16
+ description: "${{ item.description }}"
17
+ stars: "${{ item.stargazers_count }}"
18
+ forks: "${{ item.forks_count }}"
19
+ language: "${{ item.language }}"
20
+ url: "${{ item.html_url }}"
21
+ - limit: "${{ args.limit | default(20) }}"
22
+ columns: [name, description, stars, language, url]
@@ -0,0 +1,24 @@
1
+ site: gitlab
2
+ name: search
3
+ description: Search GitLab projects
4
+ type: web-api
5
+ domain: gitlab.com
6
+ strategy: public
7
+ args:
8
+ query:
9
+ required: true
10
+ positional: true
11
+ description: Search keyword
12
+ limit:
13
+ required: false
14
+ default: 20
15
+ pipeline:
16
+ - fetch:
17
+ url: "https://gitlab.com/api/v4/search?scope=projects&search=${{ args.query }}&per_page=${{ args.limit | default(20) }}"
18
+ - map:
19
+ name: "${{ item.path_with_namespace }}"
20
+ description: "${{ item.description }}"
21
+ stars: "${{ item.star_count }}"
22
+ url: "${{ item.web_url }}"
23
+ - limit: "${{ args.limit | default(20) }}"
24
+ columns: [name, description, stars, url]
@@ -0,0 +1,22 @@
1
+ site: gitlab
2
+ name: trending
3
+ description: Trending/popular GitLab projects
4
+ type: web-api
5
+ domain: gitlab.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://gitlab.com/api/v4/projects?order_by=star_count&sort=desc&per_page=${{ args.limit | default(20) }}"
14
+ - map:
15
+ name: "${{ item.path_with_namespace }}"
16
+ description: "${{ item.description }}"
17
+ stars: "${{ item.star_count }}"
18
+ forks: "${{ item.forks_count }}"
19
+ language: "${{ item.language }}"
20
+ url: "${{ item.web_url }}"
21
+ - limit: "${{ args.limit | default(20) }}"
22
+ columns: [name, description, stars, language, url]
@@ -0,0 +1,31 @@
1
+ # Godot project/run — run a project headlessly with optional script.
2
+ site: godot
3
+ name: project/run
4
+ description: Run a Godot project in headless mode
5
+ type: desktop
6
+ strategy: public
7
+ binary: godot
8
+ detect: which godot
9
+
10
+ args:
11
+ project:
12
+ type: str
13
+ required: true
14
+ positional: true
15
+ description: Path to project directory or project.godot file
16
+ script:
17
+ type: str
18
+ required: false
19
+ description: Optional GDScript file to run as main scene
20
+
21
+ pipeline:
22
+ - exec:
23
+ command: godot
24
+ args:
25
+ - --headless
26
+ - --path
27
+ - ${{ args.project }}
28
+ parse: text
29
+ timeout: 60000
30
+
31
+ columns: [output]
@@ -0,0 +1,39 @@
1
+ # Godot scene/export — export a scene to a known format via godot --headless.
2
+ # Closes the v0.208 coverage gap with CLI-Anything's Godot harness.
3
+ site: godot
4
+ name: scene/export
5
+ description: Export a Godot scene to PNG / GLTF / DAE via headless mode
6
+ type: desktop
7
+ strategy: public
8
+ binary: godot
9
+ detect: which godot
10
+
11
+ args:
12
+ project:
13
+ type: str
14
+ required: true
15
+ positional: true
16
+ description: Path to project directory or project.godot file
17
+ scene:
18
+ type: str
19
+ required: true
20
+ description: Scene path within the project (e.g. res://Main.tscn)
21
+ output:
22
+ type: str
23
+ required: true
24
+ description: Output file path
25
+
26
+ pipeline:
27
+ - exec:
28
+ command: godot
29
+ args:
30
+ - --headless
31
+ - --path
32
+ - ${{ args.project }}
33
+ - --export-pack
34
+ - ${{ args.scene }}
35
+ - ${{ args.output }}
36
+ parse: text
37
+ timeout: 120000
38
+
39
+ columns: [output]
@@ -0,0 +1,61 @@
1
+ # NousResearch/hermes-agent sessions/search — query Hermes session FTS.
2
+ # Hermes stores session history in a SQLite database at ~/.hermes/sessions.db.
3
+ #
4
+ # Security:
5
+ # - `args.query` is passed via env var UNICLI_QUERY (bash literal, no shell injection)
6
+ # - Single quotes in the query are doubled (`'` → `''`) via bash parameter
7
+ # expansion before being injected into the SQL string literal — this is
8
+ # the standard SQL string-literal escape. FTS5 MATCH still interprets its
9
+ # own query grammar (e.g. `OR`, `*`) as FTS operators, which is
10
+ # intentional for search.
11
+ # - `args.limit` is typed int in adapter args; bash strips non-digits as
12
+ # a belt-and-suspenders guard to keep LIMIT clause integer-only.
13
+ site: hermes
14
+ name: sessions/search
15
+ description: Search Hermes session history via SQLite FTS5
16
+ type: desktop
17
+ strategy: public
18
+ binary: sh
19
+ detect: test -f ~/.hermes/sessions.db
20
+
21
+ args:
22
+ query:
23
+ type: str
24
+ required: true
25
+ positional: true
26
+ description: FTS5 query string
27
+ limit:
28
+ type: int
29
+ default: 20
30
+ description: Max rows
31
+
32
+ pipeline:
33
+ - exec:
34
+ command: sh
35
+ args:
36
+ - -c
37
+ - |
38
+ db="$HOME/.hermes/sessions.db"
39
+ if [ ! -f "$db" ]; then
40
+ echo "[]"
41
+ exit 0
42
+ fi
43
+ # SQL-escape single quotes: ' -> ''
44
+ q=${UNICLI_QUERY//\'/\'\'}
45
+ # Force integer on limit (strip non-digits)
46
+ lim=${UNICLI_LIMIT//[^0-9]/}
47
+ : "${lim:=20}"
48
+ # Try FTS5 table first; fall back to LIKE if FTS table is missing
49
+ sqlite3 -json "$db" \
50
+ "SELECT id, ts, snippet(sessions_fts, -1, '<b>', '</b>', '...', 16) AS snippet FROM sessions_fts WHERE sessions_fts MATCH '$q' LIMIT $lim;" \
51
+ 2>/dev/null \
52
+ || sqlite3 -json "$db" \
53
+ "SELECT id, ts, substr(content, 1, 200) AS snippet FROM sessions WHERE content LIKE '%$q%' LIMIT $lim;" \
54
+ 2>/dev/null \
55
+ || echo "[]"
56
+ env:
57
+ UNICLI_QUERY: "${{ args.query }}"
58
+ UNICLI_LIMIT: "${{ args.limit }}"
59
+ parse: json
60
+
61
+ columns: [id, ts, snippet]
@@ -0,0 +1,30 @@
1
+ # NousResearch/hermes-agent skills/list — read on-disk skill files.
2
+ # Hermes stores agent skills as markdown under ~/.hermes/skills/
3
+ #
4
+ # Security note: no user input, so no injection surface. Uses `find`
5
+ # directly with argv (no shell interpolation).
6
+ site: hermes
7
+ name: skills/list
8
+ description: List skills installed in the local Hermes agent (~/.hermes/skills/)
9
+ type: desktop
10
+ strategy: public
11
+ binary: sh
12
+ detect: test -d ~/.hermes/skills
13
+
14
+ pipeline:
15
+ - exec:
16
+ command: sh
17
+ args:
18
+ - -c
19
+ - |
20
+ dir="$HOME/.hermes/skills"
21
+ if [ ! -d "$dir" ]; then
22
+ echo "[]"
23
+ exit 0
24
+ fi
25
+ find "$dir" -maxdepth 1 -name '*.md' -type f 2>/dev/null \
26
+ | sed "s|$dir/||" \
27
+ | jq -R -s 'split("\n") | map(select(length > 0)) | map({name: .})'
28
+ parse: json
29
+
30
+ columns: [name]