@zenalexa/unicli 0.208.0 → 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 (98) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +6 -6
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +6 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/agents.d.ts.map +1 -1
  7. package/dist/commands/agents.js +82 -2
  8. package/dist/commands/agents.js.map +1 -1
  9. package/dist/commands/generate.d.ts.map +1 -1
  10. package/dist/commands/generate.js +20 -1
  11. package/dist/commands/generate.js.map +1 -1
  12. package/dist/commands/hub.d.ts +13 -0
  13. package/dist/commands/hub.d.ts.map +1 -0
  14. package/dist/commands/hub.js +232 -0
  15. package/dist/commands/hub.js.map +1 -0
  16. package/dist/commands/research.d.ts +17 -0
  17. package/dist/commands/research.d.ts.map +1 -0
  18. package/dist/commands/research.js +257 -0
  19. package/dist/commands/research.js.map +1 -0
  20. package/dist/commands/test-gen.d.ts +10 -0
  21. package/dist/commands/test-gen.d.ts.map +1 -0
  22. package/dist/commands/test-gen.js +124 -0
  23. package/dist/commands/test-gen.js.map +1 -0
  24. package/dist/discovery/loader.d.ts.map +1 -1
  25. package/dist/discovery/loader.js +3 -0
  26. package/dist/discovery/loader.js.map +1 -1
  27. package/dist/engine/capability.d.ts +40 -0
  28. package/dist/engine/capability.d.ts.map +1 -0
  29. package/dist/engine/capability.js +191 -0
  30. package/dist/engine/capability.js.map +1 -0
  31. package/dist/engine/endpoint.d.ts +47 -0
  32. package/dist/engine/endpoint.d.ts.map +1 -0
  33. package/dist/engine/endpoint.js +295 -0
  34. package/dist/engine/endpoint.js.map +1 -0
  35. package/dist/engine/framework.d.ts +28 -0
  36. package/dist/engine/framework.d.ts.map +1 -0
  37. package/dist/engine/framework.js +66 -0
  38. package/dist/engine/framework.js.map +1 -0
  39. package/dist/engine/probe.d.ts +19 -0
  40. package/dist/engine/probe.d.ts.map +1 -0
  41. package/dist/engine/probe.js +85 -0
  42. package/dist/engine/probe.js.map +1 -0
  43. package/dist/engine/research.d.ts +38 -0
  44. package/dist/engine/research.d.ts.map +1 -0
  45. package/dist/engine/research.js +414 -0
  46. package/dist/engine/research.js.map +1 -0
  47. package/dist/engine/yaml-runner.d.ts.map +1 -1
  48. package/dist/engine/yaml-runner.js +80 -5
  49. package/dist/engine/yaml-runner.js.map +1 -1
  50. package/dist/manifest.json +403 -1
  51. package/dist/mcp/server.js +59 -1
  52. package/dist/mcp/server.js.map +1 -1
  53. package/package.json +1 -1
  54. package/src/adapters/cnn/top.yaml +21 -0
  55. package/src/adapters/cocoapods/search.yaml +16 -0
  56. package/src/adapters/crates-io/search.yaml +27 -0
  57. package/src/adapters/docker-hub/search.yaml +26 -0
  58. package/src/adapters/eastmoney/hot.yaml +23 -0
  59. package/src/adapters/eastmoney/search.yaml +25 -0
  60. package/src/adapters/exchangerate/convert.yaml +19 -0
  61. package/src/adapters/feishu/calendar.yaml +24 -0
  62. package/src/adapters/feishu/docs.yaml +17 -0
  63. package/src/adapters/feishu/send.yaml +29 -0
  64. package/src/adapters/feishu/tasks.yaml +24 -0
  65. package/src/adapters/gitee/search.yaml +25 -0
  66. package/src/adapters/gitee/trending.yaml +22 -0
  67. package/src/adapters/gitlab/search.yaml +24 -0
  68. package/src/adapters/gitlab/trending.yaml +22 -0
  69. package/src/adapters/homebrew/info.yaml +15 -0
  70. package/src/adapters/huggingface-papers/daily.yaml +21 -0
  71. package/src/adapters/infoq/articles.yaml +29 -0
  72. package/src/adapters/ip-info/lookup.yaml +15 -0
  73. package/src/adapters/itch-io/popular.yaml +22 -0
  74. package/src/adapters/ithome/news.yaml +21 -0
  75. package/src/adapters/mastodon/search.yaml +29 -0
  76. package/src/adapters/mastodon/trending.yaml +27 -0
  77. package/src/adapters/meituan/search.yaml +30 -0
  78. package/src/adapters/minimax/chat.yaml +33 -0
  79. package/src/adapters/minimax/models.yaml +18 -0
  80. package/src/adapters/minimax/tts.yaml +33 -0
  81. package/src/adapters/netease-music/hot.yaml +24 -0
  82. package/src/adapters/netease-music/search.yaml +29 -0
  83. package/src/adapters/npm-trends/compare.yaml +19 -0
  84. package/src/adapters/nytimes/top.yaml +26 -0
  85. package/src/adapters/openrouter/models.yaml +22 -0
  86. package/src/adapters/pexels/search.yaml +28 -0
  87. package/src/adapters/pinduoduo/hot.yaml +20 -0
  88. package/src/adapters/pypi/info.yaml +16 -0
  89. package/src/adapters/qweather/now.yaml +16 -0
  90. package/src/adapters/replicate/search.yaml +25 -0
  91. package/src/adapters/replicate/trending.yaml +22 -0
  92. package/src/adapters/sspai/hot.yaml +21 -0
  93. package/src/adapters/sspai/latest.yaml +22 -0
  94. package/src/adapters/techcrunch/latest.yaml +22 -0
  95. package/src/adapters/theverge/latest.yaml +21 -0
  96. package/src/adapters/twitch/top.yaml +26 -0
  97. package/src/adapters/unsplash/search.yaml +28 -0
  98. package/src/adapters/ycombinator/launches.yaml +20 -0
@@ -0,0 +1,30 @@
1
+ site: meituan
2
+ name: search
3
+ description: Search restaurants/shops on Meituan
4
+ type: web-api
5
+ domain: apimobile.meituan.com
6
+ strategy: cookie
7
+ args:
8
+ query:
9
+ required: true
10
+ positional: true
11
+ description: Search keyword (e.g. "火锅", "coffee")
12
+ city:
13
+ required: false
14
+ default: "1"
15
+ description: City ID (1=北京, 10=上海, 20=广州)
16
+ limit:
17
+ required: false
18
+ default: 20
19
+ pipeline:
20
+ - fetch:
21
+ url: "https://apimobile.meituan.com/group/v4/poi/pcsearch/${{ args.city | default('1') }}?uuid=auto&limit=${{ args.limit | default(20) }}&q=${{ args.query }}"
22
+ - select: data.searchResult
23
+ - map:
24
+ name: "${{ item.title }}"
25
+ score: "${{ item.avgscore }}"
26
+ price: "${{ item.avgprice }}"
27
+ address: "${{ item.address }}"
28
+ category: "${{ item.catName }}"
29
+ - limit: "${{ args.limit | default(20) }}"
30
+ columns: [name, score, price, address, category]
@@ -0,0 +1,33 @@
1
+ site: minimax
2
+ name: chat
3
+ description: MiniMax M2 chat completion (OpenAI-compatible API)
4
+ type: web-api
5
+ domain: api.minimax.chat
6
+ strategy: header
7
+ args:
8
+ prompt:
9
+ required: true
10
+ positional: true
11
+ description: Chat message
12
+ model:
13
+ required: false
14
+ default: MiniMax-M2.7
15
+ description: Model name (MiniMax-M2.7, MiniMax-M2.5, MiniMax-M1)
16
+ pipeline:
17
+ - fetch:
18
+ url: "https://api.minimax.chat/v1/text/chatcompletion_v2"
19
+ method: POST
20
+ headers:
21
+ Content-Type: application/json
22
+ Authorization: "Bearer ${{ env.MINIMAX_API_KEY }}"
23
+ body:
24
+ model: "${{ args.model | default('MiniMax-M2.7') }}"
25
+ messages:
26
+ - role: user
27
+ content: "${{ args.prompt }}"
28
+ - select: choices
29
+ - map:
30
+ content: "${{ item.message.content }}"
31
+ model: "${{ item.model }}"
32
+ usage: "${{ item.usage }}"
33
+ columns: [content]
@@ -0,0 +1,18 @@
1
+ site: minimax
2
+ name: models
3
+ description: List available MiniMax models
4
+ type: web-api
5
+ domain: api.minimax.chat
6
+ strategy: header
7
+ args: {}
8
+ pipeline:
9
+ - fetch:
10
+ url: "https://api.minimax.chat/v1/models"
11
+ headers:
12
+ Authorization: "Bearer ${{ env.MINIMAX_API_KEY }}"
13
+ - select: data
14
+ - map:
15
+ id: "${{ item.id }}"
16
+ type: "${{ item.type }}"
17
+ created: "${{ item.created }}"
18
+ columns: [id, type, created]
@@ -0,0 +1,33 @@
1
+ site: minimax
2
+ name: tts
3
+ description: MiniMax text-to-speech generation
4
+ type: web-api
5
+ domain: api.minimax.chat
6
+ strategy: header
7
+ args:
8
+ text:
9
+ required: true
10
+ positional: true
11
+ description: Text to convert to speech
12
+ voice:
13
+ required: false
14
+ default: male-qn-qingse
15
+ description: Voice ID
16
+ output:
17
+ required: false
18
+ default: output.mp3
19
+ description: Output file path
20
+ pipeline:
21
+ - fetch:
22
+ url: "https://api.minimax.chat/v1/t2a_v2"
23
+ method: POST
24
+ headers:
25
+ Content-Type: application/json
26
+ Authorization: "Bearer ${{ env.MINIMAX_API_KEY }}"
27
+ body:
28
+ model: speech-02-hd
29
+ text: "${{ args.text }}"
30
+ voice_setting:
31
+ voice_id: "${{ args.voice | default('male-qn-qingse') }}"
32
+ - select: data
33
+ columns: [audio_url, duration]
@@ -0,0 +1,24 @@
1
+ site: netease-music
2
+ name: hot
3
+ description: NetEase Cloud Music hot/trending songs
4
+ type: web-api
5
+ domain: music.163.com
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://music.163.com/api/playlist/detail?id=3778678"
14
+ headers:
15
+ Referer: "https://music.163.com"
16
+ - select: result.tracks
17
+ - map:
18
+ rank: "${{ index + 1 }}"
19
+ name: "${{ item.name }}"
20
+ artist: "${{ item.artists[0].name }}"
21
+ album: "${{ item.album.name }}"
22
+ duration: "${{ Math.floor(item.duration / 60000) }}:${{ String(Math.floor((item.duration % 60000) / 1000)).padStart(2, '0') }}"
23
+ - limit: "${{ args.limit | default(20) }}"
24
+ columns: [rank, name, artist, album]
@@ -0,0 +1,29 @@
1
+ site: netease-music
2
+ name: search
3
+ description: Search songs on NetEase Cloud Music
4
+ type: web-api
5
+ domain: music.163.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://music.163.com/api/search/get/web?s=${{ args.query }}&type=1&offset=0&limit=${{ args.limit | default(20) }}"
18
+ method: POST
19
+ headers:
20
+ Referer: "https://music.163.com"
21
+ Content-Type: application/x-www-form-urlencoded
22
+ - select: result.songs
23
+ - map:
24
+ name: "${{ item.name }}"
25
+ artist: "${{ item.artists[0].name }}"
26
+ album: "${{ item.album.name }}"
27
+ id: "${{ item.id }}"
28
+ - limit: "${{ args.limit | default(20) }}"
29
+ columns: [name, artist, album, id]
@@ -0,0 +1,19 @@
1
+ site: npm-trends
2
+ name: compare
3
+ description: Compare npm package download counts
4
+ type: web-api
5
+ domain: api.npmjs.org
6
+ strategy: public
7
+ args:
8
+ packages:
9
+ required: true
10
+ positional: true
11
+ description: Comma-separated package names (e.g. "react,vue,svelte")
12
+ period:
13
+ required: false
14
+ default: last-month
15
+ description: Time period (last-week, last-month, last-year)
16
+ pipeline:
17
+ - fetch:
18
+ url: "https://api.npmjs.org/downloads/point/${{ args.period | default('last-month') }}/${{ args.packages }}"
19
+ columns: [package, downloads, start, end]
@@ -0,0 +1,26 @@
1
+ site: nytimes
2
+ name: top
3
+ description: New York Times top stories via RSS
4
+ type: web-api
5
+ domain: rss.nytimes.com
6
+ strategy: public
7
+ args:
8
+ section:
9
+ required: false
10
+ default: HomePage
11
+ description: Section (HomePage, World, Business, Technology, Science, Arts)
12
+ limit:
13
+ required: false
14
+ default: 20
15
+ pipeline:
16
+ - fetch_text:
17
+ url: "https://rss.nytimes.com/services/xml/rss/nyt/${{ args.section | default('HomePage') }}.xml"
18
+ - parse_rss: ~
19
+ - map:
20
+ title: "${{ item.title }}"
21
+ url: "${{ item.link }}"
22
+ author: "${{ item.creator }}"
23
+ date: "${{ item.pubDate }}"
24
+ description: "${{ item.contentSnippet }}"
25
+ - limit: "${{ args.limit | default(20) }}"
26
+ columns: [title, url, author, date]
@@ -0,0 +1,22 @@
1
+ site: openrouter
2
+ name: models
3
+ description: List all available AI models on OpenRouter
4
+ type: web-api
5
+ domain: openrouter.ai
6
+ strategy: public
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 30
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://openrouter.ai/api/v1/models"
14
+ - select: data
15
+ - map:
16
+ id: "${{ item.id }}"
17
+ name: "${{ item.name }}"
18
+ context_length: "${{ item.context_length }}"
19
+ pricing_prompt: "${{ item.pricing.prompt }}"
20
+ pricing_completion: "${{ item.pricing.completion }}"
21
+ - limit: "${{ args.limit | default(30) }}"
22
+ columns: [id, name, context_length, pricing_prompt]
@@ -0,0 +1,28 @@
1
+ site: pexels
2
+ name: search
3
+ description: Search free stock photos on Pexels
4
+ type: web-api
5
+ domain: api.pexels.com
6
+ strategy: header
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://api.pexels.com/v1/search?query=${{ args.query }}&per_page=${{ args.limit | default(20) }}"
18
+ headers:
19
+ Authorization: "${{ env.PEXELS_API_KEY }}"
20
+ - select: photos
21
+ - map:
22
+ photographer: "${{ item.photographer }}"
23
+ url: "${{ item.src.large }}"
24
+ alt: "${{ item.alt }}"
25
+ width: "${{ item.width }}"
26
+ height: "${{ item.height }}"
27
+ - limit: "${{ args.limit | default(20) }}"
28
+ columns: [photographer, alt, url, width, height]
@@ -0,0 +1,20 @@
1
+ site: pinduoduo
2
+ name: hot
3
+ description: Pinduoduo hot/trending products
4
+ type: web-api
5
+ domain: mobile.yangkeduo.com
6
+ strategy: cookie
7
+ args:
8
+ limit:
9
+ required: false
10
+ default: 20
11
+ pipeline:
12
+ - fetch:
13
+ url: "https://mobile.yangkeduo.com/proxy/api/api/darwin/hot_search/list"
14
+ - select: data.list
15
+ - map:
16
+ rank: "${{ index + 1 }}"
17
+ keyword: "${{ item.keyword }}"
18
+ heat: "${{ item.heat }}"
19
+ - limit: "${{ args.limit | default(20) }}"
20
+ columns: [rank, keyword, heat]
@@ -0,0 +1,16 @@
1
+ site: pypi
2
+ name: info
3
+ description: Get PyPI package details
4
+ type: web-api
5
+ domain: pypi.org
6
+ strategy: public
7
+ args:
8
+ package:
9
+ required: true
10
+ positional: true
11
+ description: Package name (e.g. "requests", "flask")
12
+ pipeline:
13
+ - fetch:
14
+ url: "https://pypi.org/pypi/${{ args.package }}/json"
15
+ - select: info
16
+ columns: [name, version, summary, author, license]
@@ -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,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,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]