@streamapp/stream 0.0.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/README.md +24 -0
- package/bin/stream.mjs +89 -0
- package/package.json +34 -0
- package/resources/app/dist-panel/panel-boards.js +6 -0
- package/resources/app/dist-panel/panel-detail.css +1 -0
- package/resources/app/dist-panel/panel-detail.js +2141 -0
- package/resources/app/dist-panel/panel-manage.css +1 -0
- package/resources/app/dist-panel/panel-manage.js +2246 -0
- package/resources/app/dist-panel/panel-movie.css +1 -0
- package/resources/app/dist-panel/panel-movie.js +2268 -0
- package/resources/app/dist-panel/panel-research.css +1 -0
- package/resources/app/dist-panel/panel-research.js +316 -0
- package/resources/app/dist-panel/panel.css +1 -0
- package/resources/app/dist-panel/panel.js +463 -0
- package/resources/dsh-engine-lock/package-lock.json +9032 -0
- package/resources/extension/.output/chrome-mv3/assets/popup-C2NUZZQW.css +2 -0
- package/resources/extension/.output/chrome-mv3/background.js +1 -0
- package/resources/extension/.output/chrome-mv3/chunks/popup-BeBts9v2.js +50 -0
- package/resources/extension/.output/chrome-mv3/icon/128.png +0 -0
- package/resources/extension/.output/chrome-mv3/icon/16.png +0 -0
- package/resources/extension/.output/chrome-mv3/icon/32.png +0 -0
- package/resources/extension/.output/chrome-mv3/icon/48.png +0 -0
- package/resources/extension/.output/chrome-mv3/icon/96.png +0 -0
- package/resources/extension/.output/chrome-mv3/manifest.json +1 -0
- package/resources/extension/.output/chrome-mv3/popup.html +21 -0
- package/resources/packages/1lou/1lou-search.recipe.json +102 -0
- package/resources/packages/1lou/README.md +7 -0
- package/resources/packages/1lou/package.json +15 -0
- package/resources/packages/Douyin_TikTok_Download_API/README.md +23 -0
- package/resources/packages/Douyin_TikTok_Download_API/activate.ts +14 -0
- package/resources/packages/Douyin_TikTok_Download_API/adapter/adapter.ts +321 -0
- package/resources/packages/Douyin_TikTok_Download_API/adapter/danmaku.ts +21 -0
- package/resources/packages/Douyin_TikTok_Download_API/adapter/executor.ts +75 -0
- package/resources/packages/Douyin_TikTok_Download_API/adapter/normalize.ts +20 -0
- package/resources/packages/Douyin_TikTok_Download_API/manifests.yaml +521 -0
- package/resources/packages/Douyin_TikTok_Download_API/package.json +32 -0
- package/resources/packages/alist/README.md +14 -0
- package/resources/packages/alist/activate.ts +12 -0
- package/resources/packages/alist/adapter.ts +74 -0
- package/resources/packages/alist/manifests.yaml +76 -0
- package/resources/packages/alist/mounts.ts +120 -0
- package/resources/packages/alist/package.json +24 -0
- package/resources/packages/alist/presets.ts +53 -0
- package/resources/packages/alist/provision.ts +84 -0
- package/resources/packages/baidu/baidu-share.recipe.json +93 -0
- package/resources/packages/baidu/package.json +16 -0
- package/resources/packages/baidu-search/baidu-search.recipe.json +129 -0
- package/resources/packages/baidu-search/package.json +25 -0
- package/resources/packages/brave/brave-search.recipe.json +129 -0
- package/resources/packages/brave/package.json +25 -0
- package/resources/packages/browser/README.md +3 -0
- package/resources/packages/browser/adapter.ts +44 -0
- package/resources/packages/browser/manifests.yaml +20 -0
- package/resources/packages/browser/package.json +13 -0
- package/resources/packages/bt0/README.md +7 -0
- package/resources/packages/bt0/bt0-search.recipe.json +69 -0
- package/resources/packages/bt0/bt0-tlist.recipe.json +74 -0
- package/resources/packages/bt0/package.json +15 -0
- package/resources/packages/btbtla/README.md +6 -0
- package/resources/packages/btbtla/btbtla-detail.recipe.json +76 -0
- package/resources/packages/btbtla/btbtla-search.recipe.json +74 -0
- package/resources/packages/btbtla/package.json +15 -0
- package/resources/packages/builtin/README.md +8 -0
- package/resources/packages/builtin/manifests.yaml +487 -0
- package/resources/packages/builtin/package.json +14 -0
- package/resources/packages/douyin/README.md +39 -0
- package/resources/packages/douyin/douyin-collection.recipe.json +127 -0
- package/resources/packages/douyin/douyin-search.recipe.json +163 -0
- package/resources/packages/douyin/package.json +16 -0
- package/resources/packages/firecrawl/firecrawl-create-key.recipe.json +81 -0
- package/resources/packages/firecrawl/firecrawl-read-key.recipe.json +56 -0
- package/resources/packages/firecrawl/package.json +16 -0
- package/resources/packages/google/google-search.recipe.json +127 -0
- package/resources/packages/google/package.json +24 -0
- package/resources/packages/groq/groq-create-key.recipe.json +67 -0
- package/resources/packages/groq/package.json +16 -0
- package/resources/packages/huggingface/README.md +7 -0
- package/resources/packages/huggingface/huggingface-spaces.recipe.json +73 -0
- package/resources/packages/huggingface/package.json +15 -0
- package/resources/packages/imdb/imdb-chart.recipe.json +75 -0
- package/resources/packages/imdb/package.json +15 -0
- package/resources/packages/index.ts +15 -0
- package/resources/packages/iqiyi/README.md +10 -0
- package/resources/packages/iqiyi/iqiyi-cn-album.recipe.json +80 -0
- package/resources/packages/iqiyi/iqiyi-cn-search.recipe.json +71 -0
- package/resources/packages/iqiyi/package.json +15 -0
- package/resources/packages/lizhi/README.md +35 -0
- package/resources/packages/lizhi/lizhi-user.recipe.json +80 -0
- package/resources/packages/lizhi/package.json +15 -0
- package/resources/packages/manmanbuy/README.md +16 -0
- package/resources/packages/manmanbuy/manmanbuy-search.recipe.json +115 -0
- package/resources/packages/manmanbuy/package.json +15 -0
- package/resources/packages/mineru/README.md +38 -0
- package/resources/packages/mineru/package.json +28 -0
- package/resources/packages/pansou/README.md +14 -0
- package/resources/packages/pansou/activate.ts +11 -0
- package/resources/packages/pansou/adapter.ts +94 -0
- package/resources/packages/pansou/manifests.yaml +50 -0
- package/resources/packages/pansou/package.json +27 -0
- package/resources/packages/qq/package.json +15 -0
- package/resources/packages/qq/qq-send.recipe.json +104 -0
- package/resources/packages/quark/package.json +16 -0
- package/resources/packages/quark/quark-share.recipe.json +40 -0
- package/resources/packages/reddit/package.json +15 -0
- package/resources/packages/reddit/reddit-sub.recipe.json +77 -0
- package/resources/packages/replay/README.md +7 -0
- package/resources/packages/replay/package.json +13 -0
- package/resources/packages/rsshub/README.md +16 -0
- package/resources/packages/rsshub/manifests.yaml +107 -0
- package/resources/packages/rsshub/package.json +21 -0
- package/resources/packages/telegram/package.json +15 -0
- package/resources/packages/telegram/telegram-search.recipe.json +125 -0
- package/resources/packages/tencent/README.md +11 -0
- package/resources/packages/tencent/package.json +15 -0
- package/resources/packages/tencent/tencent-cn-episode.recipe.json +98 -0
- package/resources/packages/toubiec/README.md +38 -0
- package/resources/packages/toubiec/package.json +15 -0
- package/resources/packages/toubiec/toubiec-download.recipe.json +58 -0
- package/resources/packages/toubiec/toubiec-playlist.recipe.json +49 -0
- package/resources/packages/toubiec/toubiec-search.recipe.json +80 -0
- package/resources/packages/voiceprint/README.md +31 -0
- package/resources/packages/voiceprint/package.json +36 -0
- package/resources/packages/wikipedia/package.json +15 -0
- package/resources/packages/wikipedia/wikipedia-award-list.recipe.json +102 -0
- package/resources/packages/xhs/README.md +32 -0
- package/resources/packages/xhs/package.json +21 -0
- package/resources/packages/xhs/xhs-detail.recipe.json +129 -0
- package/resources/packages/xhs/xhs-home.recipe.json +144 -0
- package/resources/packages/xhs/xhs-like.recipe.json +96 -0
- package/resources/packages/xhs/xhs-search.recipe.json +138 -0
- package/resources/packages/xueqiu/README.md +9 -0
- package/resources/packages/xueqiu/package.json +16 -0
- package/resources/packages/xueqiu/xueqiu-detail.recipe.json +92 -0
- package/resources/packages/xueqiu/xueqiu-user.recipe.json +75 -0
- package/resources/packages/zhipu/package.json +16 -0
- package/resources/packages/zhipu/zhipu-create-key.recipe.json +74 -0
- package/resources/packages/zuna/README.md +31 -0
- package/resources/packages/zuna/package.json +15 -0
- package/resources/packages/zuna/zuna-album.recipe.json +46 -0
- package/resources/packages/zuna/zuna-download.recipe.json +53 -0
- package/resources/packages/zuna/zuna-playlist.recipe.json +46 -0
- package/resources/packages/zuna/zuna-search.recipe.json +96 -0
- package/resources/server.mjs +238876 -0
- package/resources/sidequest.jobs.js +1 -0
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
# 网易云取歌(播放/下载/订阅)已全部走 netease-track Provider → 目录 download 路由(rsshub
|
|
2
|
+
# matches: music.163.com/song)。进程内的 dl-znnu/dl-toubiec/dl-enclosure builtin 源已退休,
|
|
3
|
+
# 播客直链下载由队列直接 fetch item 的 pageUrl。业务层不再有硬编码的音频源。
|
|
4
|
+
# content-search 与 resource-search 都已拆成 provides 逐源成员(executor 并发扇出,呈现在调用点按各
|
|
5
|
+
# 条 item 的产出源 manifest 决定)——不再有 content-search-aggregate / resource-search-aggregate
|
|
6
|
+
# builtin 聚合器。resource-search 行 = {mode:auto, provides:search-download}(migration #2c/resource-search)。
|
|
7
|
+
- id: magnet-btbtla
|
|
8
|
+
adapter: builtin
|
|
9
|
+
title: btbtla 磁力解析
|
|
10
|
+
description: 按需解析 btbtla 资源页 /tdown/ 链接为 magnet 磁力链接(SSRF 白名单保护)。
|
|
11
|
+
topics: [magnet, btbtla, 磁力, 种子, 解析]
|
|
12
|
+
categories: [resource]
|
|
13
|
+
capabilities: [anchor]
|
|
14
|
+
auth: { type: none }
|
|
15
|
+
discoverable: false
|
|
16
|
+
cadence_hint_seconds: 3600
|
|
17
|
+
fixed_params: { mode: magnet }
|
|
18
|
+
- id: bilibili-resolve
|
|
19
|
+
adapter: builtin
|
|
20
|
+
title: bilibili 视频解析
|
|
21
|
+
description: bilibili 视频播放解析(进程内 cookie DASH / progressive 描述子);video-bilibili Provider 行的成员。
|
|
22
|
+
topics: [bilibili, 哔哩哔哩, 视频, 播放, 解析, dash]
|
|
23
|
+
categories: [video]
|
|
24
|
+
capabilities: [anchor]
|
|
25
|
+
auth: { type: none }
|
|
26
|
+
discoverable: false
|
|
27
|
+
cadence_hint_seconds: 3600
|
|
28
|
+
fixed_params: { mode: bilibili-resolve }
|
|
29
|
+
- id: douyin-resolve
|
|
30
|
+
adapter: builtin
|
|
31
|
+
title: douyin 视频解析
|
|
32
|
+
description: douyin 视频播放解析(经 DTDL 网关取 play_addr 直连 CDN;range 串流描述子);video-douyin Provider 行的成员。
|
|
33
|
+
topics: [douyin, 抖音, 视频, 播放, 解析, play_addr]
|
|
34
|
+
categories: [video]
|
|
35
|
+
capabilities: [anchor]
|
|
36
|
+
auth: { type: none }
|
|
37
|
+
discoverable: false
|
|
38
|
+
cadence_hint_seconds: 3600
|
|
39
|
+
fixed_params: { mode: douyin-resolve }
|
|
40
|
+
# baidu-share(百度分享验活)已迁为 recipe:recipes/baidu/baidu-share.recipe.json
|
|
41
|
+
# ——引擎补齐 jar/params 钩子/parse 模式后,验活是热插数据,加网盘不再发版。
|
|
42
|
+
- id: quark-save
|
|
43
|
+
adapter: builtin
|
|
44
|
+
title: 夸克分享转存
|
|
45
|
+
description: 把一条夸克分享转存进用户网盘的落点目录(不存在则建);netdisk-save-quark Provider 行的成员。验活是它的姊妹源 quark-share(kind:http recipe)。
|
|
46
|
+
topics: [quark, 夸克网盘, 网盘, 转存, 分享, save, netdisk]
|
|
47
|
+
categories: [resource]
|
|
48
|
+
capabilities: [anchor]
|
|
49
|
+
# 转存的结果是一个 {saved, stage, message, …} 结果对象,不是条目批——执行器缝上按此解包。
|
|
50
|
+
output: object
|
|
51
|
+
facility: { key: quark, label: 夸克网盘 }
|
|
52
|
+
# replay 才读 recipe 的 cookieDomain;builtin 源自己经 broker 取 quark.cn 的 cookie,
|
|
53
|
+
# 故此处 auth 是陈述性的:它确实要用户的夸克登录态。
|
|
54
|
+
auth: { type: session, facility: quark, login: cookie, cookieDomain: quark.cn }
|
|
55
|
+
discoverable: false
|
|
56
|
+
cadence_hint_seconds: 3600
|
|
57
|
+
params_schema:
|
|
58
|
+
pwd_id:
|
|
59
|
+
type: string
|
|
60
|
+
required: true
|
|
61
|
+
description: 夸克分享 id(pan.quark.cn/s/<pwd_id>)
|
|
62
|
+
dest:
|
|
63
|
+
type: string
|
|
64
|
+
required: false
|
|
65
|
+
description: 目标目录名(用户网盘根目录下);不存在时自动创建
|
|
66
|
+
subdir:
|
|
67
|
+
type: string
|
|
68
|
+
required: false
|
|
69
|
+
description: 落点下的作品子目录(如片名);绑定是「一个目录 ↔ 一个左侧」一对一,共用落点就没有哪个绑定能把它当自己的右侧
|
|
70
|
+
passcode:
|
|
71
|
+
type: string
|
|
72
|
+
required: false
|
|
73
|
+
description: 分享提取码(如有)
|
|
74
|
+
fixed_params: { mode: quark-save }
|
|
75
|
+
- id: quark-play
|
|
76
|
+
adapter: builtin
|
|
77
|
+
title: 夸克视频转码播放
|
|
78
|
+
description: 夸克文件 fid → 它自家转码好的 H.264+AAC 播放流地址(原盘 AC3/DTS 音轨浏览器无声,夸克转码后有声);netdisk-play-quark Provider 行的成员。只读,登录态经 broker 取。
|
|
79
|
+
topics: [quark, 夸克网盘, 网盘, 播放, 转码, play, netdisk]
|
|
80
|
+
categories: [resource]
|
|
81
|
+
capabilities: [anchor]
|
|
82
|
+
# 播放解析的结果是一个 {url, resolution, …} 对象,不是条目批——执行器缝上按此解包。
|
|
83
|
+
output: object
|
|
84
|
+
facility: { key: quark, label: 夸克网盘 }
|
|
85
|
+
auth: { type: session, facility: quark, login: cookie, cookieDomain: quark.cn }
|
|
86
|
+
discoverable: false
|
|
87
|
+
cadence_hint_seconds: 3600
|
|
88
|
+
params_schema:
|
|
89
|
+
fid:
|
|
90
|
+
type: string
|
|
91
|
+
required: true
|
|
92
|
+
description: 夸克文件 id(AList fs/get 返回的 id)
|
|
93
|
+
fixed_params: { mode: quark-play }
|
|
94
|
+
- id: quark-folder
|
|
95
|
+
adapter: builtin
|
|
96
|
+
title: 夸克文件夹跳转
|
|
97
|
+
description: 网盘内路径段 → 夸克网页那个文件夹的 web URL(「跳转网盘」按钮用);netdisk-folder-quark Provider 行的成员。只读,登录态经 broker 取。
|
|
98
|
+
topics: [quark, 夸克网盘, 网盘, 跳转, folder, browse, netdisk]
|
|
99
|
+
categories: [resource]
|
|
100
|
+
capabilities: [anchor]
|
|
101
|
+
# 结果是一个 {url, fid} 对象,不是条目批——执行器缝上按此解包。
|
|
102
|
+
output: object
|
|
103
|
+
facility: { key: quark, label: 夸克网盘 }
|
|
104
|
+
auth: { type: session, facility: quark, login: cookie, cookieDomain: quark.cn }
|
|
105
|
+
discoverable: false
|
|
106
|
+
cadence_hint_seconds: 3600
|
|
107
|
+
fixed_params: { mode: quark-folder }
|
|
108
|
+
- id: fetch-url
|
|
109
|
+
adapter: builtin
|
|
110
|
+
title: 通用网页抓取
|
|
111
|
+
description: 任意 URL → 标准化**媒体**(抖音/B站/图片/视频直链)。**不产正文**——网页正文走 article-extract 行。
|
|
112
|
+
topics: [fetch, url, 抓取, 兜底, douyin, bilibili]
|
|
113
|
+
categories: [fallback]
|
|
114
|
+
capabilities: [anchor]
|
|
115
|
+
auth: { type: none }
|
|
116
|
+
discoverable: false
|
|
117
|
+
cadence_hint_seconds: 3600
|
|
118
|
+
fixed_params: { mode: fetch-url }
|
|
119
|
+
- id: article-defuddle
|
|
120
|
+
adapter: builtin
|
|
121
|
+
title: 网页正文抽取(Defuddle)
|
|
122
|
+
description: 网页 URL → 正文 markdown(图片保留为 ``)。裸 HTTP + Defuddle(不跑页面 JS),正文太短(SPA 空壳)即弃权让给降级档;与阅读器 `/api/enrich?source=link` 共用同一份抽取与缓存。
|
|
123
|
+
topics: [article, 正文, 网页, defuddle, 抓取]
|
|
124
|
+
categories: [transform]
|
|
125
|
+
capabilities: [anchor]
|
|
126
|
+
auth: { type: none }
|
|
127
|
+
discoverable: false
|
|
128
|
+
cadence_hint_seconds: 3600
|
|
129
|
+
fixed_params: { mode: article-defuddle }
|
|
130
|
+
# 一个 URL 只有一份正文——成员合同是单个对象,不是数组(见 docs/PACKAGE.md §2.3 `output`)。
|
|
131
|
+
output: object
|
|
132
|
+
- id: cf-whisper
|
|
133
|
+
adapter: builtin
|
|
134
|
+
title: Cloudflare Whisper
|
|
135
|
+
description: Cloudflare Workers AI whisper-large-v3-turbo 云端转写(多语,含中文;免费额度)。无说话人分离。
|
|
136
|
+
topics: [transcribe, speech, whisper, cloudflare, 转写, 语音]
|
|
137
|
+
categories: [transcribe]
|
|
138
|
+
capabilities: [anchor]
|
|
139
|
+
auth: { type: none }
|
|
140
|
+
discoverable: false
|
|
141
|
+
cadence_hint_seconds: 3600
|
|
142
|
+
# 整集音频一次成员调用,110min 音频实测 67.7s(见 src/transcribe/openai-stt.ts 头注);10 分钟给足余量,别被全局默认 25s 掐死。
|
|
143
|
+
member_timeout_ms: 600000
|
|
144
|
+
runtime_config:
|
|
145
|
+
ref: cloudflare
|
|
146
|
+
fields:
|
|
147
|
+
apiKey:
|
|
148
|
+
type: secret
|
|
149
|
+
label: Cloudflare Workers AI Token
|
|
150
|
+
description: BYOK;不填则回退环境变量 CLOUDFLARE_WORKERS_AI_TOKEN。
|
|
151
|
+
helpUrl: https://dash.cloudflare.com/profile/api-tokens
|
|
152
|
+
fixed_params: { mode: transcribe-cf }
|
|
153
|
+
- id: groq-whisper
|
|
154
|
+
adapter: builtin
|
|
155
|
+
title: Groq Whisper
|
|
156
|
+
description: Groq 云端转写 whisper-large-v3(OpenAI 兼容,BYOK:GROQ_API_KEY;免费额度)。>24MB 自动切块。无说话人分离。
|
|
157
|
+
topics: [transcribe, speech, whisper, groq, 转写, 语音]
|
|
158
|
+
categories: [transcribe]
|
|
159
|
+
capabilities: [anchor]
|
|
160
|
+
auth: { type: none }
|
|
161
|
+
discoverable: false
|
|
162
|
+
cadence_hint_seconds: 3600
|
|
163
|
+
# 整集音频一次成员调用,110min 音频实测 67.7s(见 src/transcribe/openai-stt.ts 头注);10 分钟给足余量,别被全局默认 25s 掐死。
|
|
164
|
+
member_timeout_ms: 600000
|
|
165
|
+
runtime_config:
|
|
166
|
+
ref: groq
|
|
167
|
+
fields:
|
|
168
|
+
apiKey:
|
|
169
|
+
type: secret
|
|
170
|
+
label: Groq API Key
|
|
171
|
+
description: BYOK;不填则回退环境变量 GROQ_API_KEY。
|
|
172
|
+
helpUrl: https://console.groq.com/keys
|
|
173
|
+
fixed_params: { mode: transcribe-groq }
|
|
174
|
+
- id: openai-whisper
|
|
175
|
+
adapter: builtin
|
|
176
|
+
title: OpenAI Whisper
|
|
177
|
+
description: OpenAI 云端转写 whisper-1(BYOK:OPENAI_API_KEY)。>24MB 自动切块。无说话人分离。
|
|
178
|
+
topics: [transcribe, speech, whisper, openai, 转写, 语音]
|
|
179
|
+
categories: [transcribe]
|
|
180
|
+
capabilities: [anchor]
|
|
181
|
+
auth: { type: none }
|
|
182
|
+
discoverable: false
|
|
183
|
+
cadence_hint_seconds: 3600
|
|
184
|
+
# 整集音频一次成员调用,110min 音频实测 67.7s(见 src/transcribe/openai-stt.ts 头注);10 分钟给足余量,别被全局默认 25s 掐死。
|
|
185
|
+
member_timeout_ms: 600000
|
|
186
|
+
runtime_config:
|
|
187
|
+
ref: openai
|
|
188
|
+
fields:
|
|
189
|
+
apiKey:
|
|
190
|
+
type: secret
|
|
191
|
+
label: OpenAI API Key
|
|
192
|
+
description: BYOK;不填则回退环境变量 OPENAI_API_KEY。
|
|
193
|
+
helpUrl: https://platform.openai.com/api-keys
|
|
194
|
+
fixed_params: { mode: transcribe-openai }
|
|
195
|
+
- id: ocr-vlm
|
|
196
|
+
adapter: builtin
|
|
197
|
+
title: 视觉模型 OCR
|
|
198
|
+
description: 图片/PDF → Markdown,走 OpenAI 兼容 /chat/completions(消息里带一个 image 分片);parse Provider 行的成员,一个实例 = 一个端点+视觉模型+key。
|
|
199
|
+
topics: [ocr, vision, 图片, 识别, markdown, 视觉]
|
|
200
|
+
categories: [transform]
|
|
201
|
+
capabilities: [anchor]
|
|
202
|
+
auth: { type: none }
|
|
203
|
+
discoverable: false
|
|
204
|
+
cadence_hint_seconds: 3600
|
|
205
|
+
# 与 llm-openai 同一传输层,对齐其 180s。
|
|
206
|
+
member_timeout_ms: 180000
|
|
207
|
+
# builtin adapter 按 `fixed_params.mode` 分发到 bootstrap 注册的实现函数——**不是按 source id**。
|
|
208
|
+
# 漏了它,运行期报的是 `no implementation registered for mode ""`,而不是"这个源不存在"。
|
|
209
|
+
fixed_params: { mode: ocr-vlm }
|
|
210
|
+
# 产出是**一个** {markdown} 结果对象,不是条目批——adapter 通道端到端是数组,单个对象以
|
|
211
|
+
# [obj] 骑到执行器,靠这一行在成员契约的缝上解包。漏了它,梯子会把 `[{markdown}]` 整个数组
|
|
212
|
+
# 当成赢家交出去:**成员其实成功了**,调用方读 .markdown 却是 undefined,而且因为它"赢"了,
|
|
213
|
+
# 兜底成员根本不会跑——活体上表现成"所有成员都没产出",最难查的一种。
|
|
214
|
+
output: object
|
|
215
|
+
# 和 llm-openai 是同一个传输层(同一个端点、同一种 BYOK 钥匙),差别只在正文里多一个 image
|
|
216
|
+
# 分片、以及模型必须是**视觉**模型。所以参数形状照抄它,别另发明一套。
|
|
217
|
+
params_schema:
|
|
218
|
+
baseUrl:
|
|
219
|
+
type: string
|
|
220
|
+
required: true
|
|
221
|
+
description: OpenAI 兼容端点,到版本段为止(例:`https://open.bigmodel.cn/api/paas/v4`)。
|
|
222
|
+
model:
|
|
223
|
+
type: string
|
|
224
|
+
required: true
|
|
225
|
+
description: 必须是**能看图**的模型(例:智谱免费档 `glm-4v-flash`)。填了纯文本模型会整批失败——它读不了 image 分片。
|
|
226
|
+
runtime_config:
|
|
227
|
+
ref: ocr-vlm
|
|
228
|
+
perInstance: true
|
|
229
|
+
# 实例 key 落 `ocr:<实例名>`。命名空间必须显式声明——写 key 的端点按它限定前缀,
|
|
230
|
+
# 不声明就等于放开"任意 ref 写入"(一个源能改掉别的源的 key)。
|
|
231
|
+
instanceNamespace: ocr
|
|
232
|
+
fields:
|
|
233
|
+
apiKey:
|
|
234
|
+
type: secret
|
|
235
|
+
label: API Key
|
|
236
|
+
required: true
|
|
237
|
+
description: 该实例的端点密钥;每个成员实例各自一份,不共享。
|
|
238
|
+
|
|
239
|
+
- id: ocr-mineru
|
|
240
|
+
adapter: builtin
|
|
241
|
+
title: MinerU 文档解析(本地)
|
|
242
|
+
description: 图片/PDF → Markdown,打本地 MinerU 容器;parse 行的兜底成员——born-digital PDF 直接读文字层,不靠识别。
|
|
243
|
+
topics: [ocr, pdf, 文档, markdown, mineru]
|
|
244
|
+
categories: [transform]
|
|
245
|
+
capabilities: [anchor]
|
|
246
|
+
auth: { type: none }
|
|
247
|
+
discoverable: false
|
|
248
|
+
cadence_hint_seconds: 3600
|
|
249
|
+
# 本地 standby 容器,唤醒+长 PDF 解析,整份一次成员调用。
|
|
250
|
+
member_timeout_ms: 600000
|
|
251
|
+
# 分发键,同上——builtin adapter 认 mode,不认 source id。
|
|
252
|
+
fixed_params: { mode: ocr-mineru }
|
|
253
|
+
# 同 ocr-vlm:产出是一个 {markdown} 对象,不是条目批。
|
|
254
|
+
output: object
|
|
255
|
+
# 无参数:端点来自插件描述符(plugins/mineru.yaml)/ config.mineru_url,不是成员参数。
|
|
256
|
+
params_schema: {}
|
|
257
|
+
|
|
258
|
+
- id: article-firecrawl
|
|
259
|
+
adapter: builtin
|
|
260
|
+
title: 网页正文抽取(Firecrawl)
|
|
261
|
+
description: 网页 URL → 正文 markdown(云端跑 JS);`article-extract` 梯子的降级档——Defuddle 抽不出正文才走。keyless 免费档可直接用,配 key 只是把额度记在自己账上。
|
|
262
|
+
topics: [网页, 正文, 抓取, markdown, firecrawl, spa]
|
|
263
|
+
categories: [transform]
|
|
264
|
+
# capabilities 非空 + cadence_hint_seconds 都是 manifestSchema 的硬要求,
|
|
265
|
+
# 漏任一个是**启动即 crash**,而 per-source 单测绕过 schema 察觉不到。
|
|
266
|
+
capabilities: [anchor]
|
|
267
|
+
cadence_hint_seconds: 3600
|
|
268
|
+
auth: { type: none }
|
|
269
|
+
discoverable: false
|
|
270
|
+
# 云端 JS 渲染 + 抽取比裸 HTTP 慢一档;2 分钟给足余量,别被全局默认 25s 掐死。
|
|
271
|
+
member_timeout_ms: 120000
|
|
272
|
+
# builtin adapter 按 `fixed_params.mode` 分发到 bootstrap 注册的实现函数——**不是按 source id**。
|
|
273
|
+
# 漏了它,运行期报的是 `no implementation registered for mode ""`,而不是"这个源不存在"。
|
|
274
|
+
fixed_params: { mode: article-firecrawl }
|
|
275
|
+
# 产出是**一个**归形对象({ text, … }),不是条目批。漏了这行,梯子会把整个数组
|
|
276
|
+
# 当赢家交出去:成员其实成功了,调用方读 .text 却是 undefined,而且因为它"赢"了,
|
|
277
|
+
# 后面的成员根本不会跑——活体上表现成"所有成员都没产出",最难查的一种。
|
|
278
|
+
output: object
|
|
279
|
+
params_schema:
|
|
280
|
+
baseUrl:
|
|
281
|
+
type: string
|
|
282
|
+
required: false
|
|
283
|
+
description: Firecrawl 端点,默认 `https://api.firecrawl.dev`。只有自托管才需要改。
|
|
284
|
+
runtime_config:
|
|
285
|
+
ref: firecrawl
|
|
286
|
+
fields:
|
|
287
|
+
apiKey:
|
|
288
|
+
type: secret
|
|
289
|
+
label: Firecrawl API Key
|
|
290
|
+
required: false
|
|
291
|
+
description: 可留空——keyless 免费档(1000 credits/月)不需要 key。但 keyless 按**出口 IP** 记账、与同节点的他人共享,额度可能被先吃掉且只表现为 429;注册一个免费账号填在这里,额度相同但记在自己账上、可预期。
|
|
292
|
+
helpUrl: https://www.firecrawl.dev/app/api-keys
|
|
293
|
+
|
|
294
|
+
- id: llm-openai
|
|
295
|
+
adapter: builtin
|
|
296
|
+
title: OpenAI 兼容 LLM
|
|
297
|
+
description: 调 OpenAI 兼容 /chat/completions;llm Provider 行的成员,一个实例 = 一个端点+模型+key(默认经 Cloudflare AI Gateway)。
|
|
298
|
+
topics: [llm, chat, openai, gateway, 大模型, 总结]
|
|
299
|
+
categories: [llm]
|
|
300
|
+
capabilities: [anchor]
|
|
301
|
+
auth: { type: none }
|
|
302
|
+
discoverable: false
|
|
303
|
+
cadence_hint_seconds: 3600
|
|
304
|
+
# 长 prompt/长输出(如整篇文章摘要)可能跑到分钟级;3 分钟给足余量,别被全局默认 25s 掐死。
|
|
305
|
+
member_timeout_ms: 180000
|
|
306
|
+
# 成员参数自足:端点与默认模型都写在成员自己的 params 上(key 走 runtime_config 的实例层),
|
|
307
|
+
# 所以同一个源能带不同参数多次进同一条梯子。调用点绑定的 params.model 可以再覆盖这里的默认。
|
|
308
|
+
params_schema:
|
|
309
|
+
baseUrl:
|
|
310
|
+
type: string
|
|
311
|
+
required: true
|
|
312
|
+
description: OpenAI 兼容端点,到 /v1 为止(例:`https://gateway.ai.cloudflare.com/v1/<account_id>/<gateway>/compat`)。
|
|
313
|
+
model:
|
|
314
|
+
type: string
|
|
315
|
+
required: true
|
|
316
|
+
description: 该实例的默认模型;调用点绑定里配了 model 则以绑定为准。
|
|
317
|
+
contextWindow:
|
|
318
|
+
type: string
|
|
319
|
+
required: false
|
|
320
|
+
description: 该模型能吃多长的 prompt(token 数,如 `131072`)。**对话工作台的自动压缩就靠这个数**——梯子上最小的那个决定整条会话的压缩阈值。留空则按模型名查内置表,查不到回落到 32768 这个保守下限(宁可早压缩,也不要一路涨到上游报错)。
|
|
321
|
+
runtime_config:
|
|
322
|
+
ref: llm-openai
|
|
323
|
+
perInstance: true
|
|
324
|
+
# 实例 key 落 `llm:<实例名>`——**不是** `llm-openai:`。命名空间与 ref 是两件事,
|
|
325
|
+
# 拿 ref 推会把存量配置(llm:default / llm:zhipu)全打断。
|
|
326
|
+
instanceNamespace: llm
|
|
327
|
+
fields:
|
|
328
|
+
apiKey:
|
|
329
|
+
type: secret
|
|
330
|
+
label: API Key
|
|
331
|
+
required: true
|
|
332
|
+
description: 该实例的 OpenAI 兼容端点密钥;每个成员实例(每个连接)各自一份,不共享。
|
|
333
|
+
fixed_params: { mode: llm-chat }
|
|
334
|
+
- id: tmdb-canonical
|
|
335
|
+
adapter: builtin
|
|
336
|
+
title: TMDb 权威标识
|
|
337
|
+
description: TMDb 影片/剧集候选验证,返回可复用的 TMDb 与 IMDb 标识;video-canonical Provider 的成员。
|
|
338
|
+
topics: [tmdb, 影视, 电影, 剧集, 标识]
|
|
339
|
+
categories: [video]
|
|
340
|
+
capabilities: [anchor]
|
|
341
|
+
auth: { type: none }
|
|
342
|
+
discoverable: false
|
|
343
|
+
cadence_hint_seconds: 3600
|
|
344
|
+
runtime_config:
|
|
345
|
+
ref: tmdb
|
|
346
|
+
fields:
|
|
347
|
+
apiKey:
|
|
348
|
+
type: secret
|
|
349
|
+
label: TMDb API Key
|
|
350
|
+
required: true
|
|
351
|
+
description: 登录 TMDb 后在 Account Settings → API 申请;请填写 API Key (v3 auth),不要填 API Read Access Token。
|
|
352
|
+
helpUrl: https://www.themoviedb.org/settings/api
|
|
353
|
+
language: { type: string, label: 语言, default: zh-CN }
|
|
354
|
+
fixed_params: { mode: tmdb-canonical }
|
|
355
|
+
- id: tmdb-metadata
|
|
356
|
+
adapter: builtin
|
|
357
|
+
title: TMDb 元数据
|
|
358
|
+
description: TMDb 影片/剧集查询,标准化返回标题、简介、演职员、评分和外部 ID;video-metadata Provider 的成员。
|
|
359
|
+
topics: [tmdb, 影视, 电影, 剧集, 元数据]
|
|
360
|
+
categories: [video]
|
|
361
|
+
capabilities: [anchor]
|
|
362
|
+
auth: { type: none }
|
|
363
|
+
discoverable: false
|
|
364
|
+
cadence_hint_seconds: 3600
|
|
365
|
+
runtime_config:
|
|
366
|
+
ref: tmdb
|
|
367
|
+
fields:
|
|
368
|
+
apiKey:
|
|
369
|
+
type: secret
|
|
370
|
+
label: TMDb API Key
|
|
371
|
+
required: true
|
|
372
|
+
description: 登录 TMDb 后在 Account Settings → API 申请;请填写 API Key (v3 auth),不要填 API Read Access Token。
|
|
373
|
+
helpUrl: https://www.themoviedb.org/settings/api
|
|
374
|
+
language: { type: string, label: 语言, default: zh-CN }
|
|
375
|
+
fixed_params: { mode: tmdb-metadata }
|
|
376
|
+
- id: tmdb-title-search
|
|
377
|
+
adapter: builtin
|
|
378
|
+
title: TMDb 片名搜索
|
|
379
|
+
description: TMDb 关键词搜索,一次返回电影+剧集候选(标题、年份、海报、TMDb ID);video-search Provider 的成员。
|
|
380
|
+
topics: [tmdb, 影视, 电影, 剧集, 搜索]
|
|
381
|
+
categories: [video]
|
|
382
|
+
capabilities: [search]
|
|
383
|
+
auth: { type: none }
|
|
384
|
+
discoverable: false
|
|
385
|
+
cadence_hint_seconds: 3600
|
|
386
|
+
runtime_config:
|
|
387
|
+
ref: tmdb
|
|
388
|
+
fields:
|
|
389
|
+
apiKey:
|
|
390
|
+
type: secret
|
|
391
|
+
label: TMDb API Key
|
|
392
|
+
required: true
|
|
393
|
+
description: 登录 TMDb 后在 Account Settings → API 申请;请填写 API Key (v3 auth),不要填 API Read Access Token。
|
|
394
|
+
helpUrl: https://www.themoviedb.org/settings/api
|
|
395
|
+
language: { type: string, label: 语言, default: zh-CN }
|
|
396
|
+
fixed_params: { mode: tmdb-title-search }
|
|
397
|
+
- id: omdb-metadata
|
|
398
|
+
adapter: builtin
|
|
399
|
+
title: OMDb 元数据
|
|
400
|
+
description: OMDb 影片/剧集查询,按 IMDb ID 或标题年份补充标准化元数据;video-metadata Provider 的成员。
|
|
401
|
+
topics: [omdb, imdb, 影视, 电影, 剧集, 元数据]
|
|
402
|
+
categories: [video]
|
|
403
|
+
capabilities: [anchor]
|
|
404
|
+
auth: { type: none }
|
|
405
|
+
discoverable: false
|
|
406
|
+
cadence_hint_seconds: 3600
|
|
407
|
+
runtime_config:
|
|
408
|
+
ref: omdb
|
|
409
|
+
fields:
|
|
410
|
+
apiKey:
|
|
411
|
+
type: secret
|
|
412
|
+
label: OMDb API Key
|
|
413
|
+
required: true
|
|
414
|
+
description: 免费计划每日 1,000 次请求;填写邮箱后按邮件链接激活。
|
|
415
|
+
helpUrl: https://www.omdbapi.com/apikey.aspx
|
|
416
|
+
fixed_params: { mode: omdb-metadata }
|
|
417
|
+
- id: tmdb-images
|
|
418
|
+
adapter: builtin
|
|
419
|
+
title: TMDb 图片
|
|
420
|
+
description: TMDb 影片/剧集查询,返回海报、背景和标题图候选;video-images Provider 的成员。
|
|
421
|
+
topics: [tmdb, 影视, 海报, 背景图, 图片]
|
|
422
|
+
categories: [video]
|
|
423
|
+
capabilities: [anchor]
|
|
424
|
+
auth: { type: none }
|
|
425
|
+
discoverable: false
|
|
426
|
+
cadence_hint_seconds: 3600
|
|
427
|
+
runtime_config:
|
|
428
|
+
ref: tmdb
|
|
429
|
+
fields:
|
|
430
|
+
apiKey:
|
|
431
|
+
type: secret
|
|
432
|
+
label: TMDb API Key
|
|
433
|
+
required: true
|
|
434
|
+
description: 登录 TMDb 后在 Account Settings → API 申请;请填写 API Key (v3 auth),不要填 API Read Access Token。
|
|
435
|
+
helpUrl: https://www.themoviedb.org/settings/api
|
|
436
|
+
language: { type: string, label: 语言, default: zh-CN }
|
|
437
|
+
fixed_params: { mode: tmdb-images }
|
|
438
|
+
- id: omdb-images
|
|
439
|
+
adapter: builtin
|
|
440
|
+
title: OMDb 图片
|
|
441
|
+
description: OMDb 影片/剧集查询,返回 OMDb 海报候选;video-images Provider 的成员。
|
|
442
|
+
topics: [omdb, imdb, 影视, 海报, 图片]
|
|
443
|
+
categories: [video]
|
|
444
|
+
capabilities: [anchor]
|
|
445
|
+
auth: { type: none }
|
|
446
|
+
discoverable: false
|
|
447
|
+
cadence_hint_seconds: 3600
|
|
448
|
+
runtime_config:
|
|
449
|
+
ref: omdb
|
|
450
|
+
fields:
|
|
451
|
+
apiKey:
|
|
452
|
+
type: secret
|
|
453
|
+
label: OMDb API Key
|
|
454
|
+
required: true
|
|
455
|
+
description: 免费计划每日 1,000 次请求;填写邮箱后按邮件链接激活。
|
|
456
|
+
helpUrl: https://www.omdbapi.com/apikey.aspx
|
|
457
|
+
fixed_params: { mode: omdb-images }
|
|
458
|
+
- id: netease-lyrics
|
|
459
|
+
adapter: builtin
|
|
460
|
+
title: 网易云歌词
|
|
461
|
+
description: 按已知 track id 或 (title, artist) 模糊匹配查网易云歌词;lyrics-search Provider 的成员。
|
|
462
|
+
topics: [netease, 网易云, 音乐, 歌词]
|
|
463
|
+
categories: [music]
|
|
464
|
+
capabilities: [anchor]
|
|
465
|
+
auth: { type: none }
|
|
466
|
+
discoverable: false
|
|
467
|
+
cadence_hint_seconds: 3600
|
|
468
|
+
key_param: input
|
|
469
|
+
fixed_params: { mode: netease-lyrics }
|
|
470
|
+
- id: research-runs
|
|
471
|
+
adapter: builtin
|
|
472
|
+
title: 研究 run 采集
|
|
473
|
+
description: 盯 cockpit_sdk 落盘的 artifacts 目录,每个新 run 一条 feed item(名字/tag/关键指标,深链 run 详情看板)。
|
|
474
|
+
topics: [research, run, backtest, artifacts, 研究, 回测]
|
|
475
|
+
categories: [research]
|
|
476
|
+
capabilities: [timeline]
|
|
477
|
+
auth: { type: none }
|
|
478
|
+
discoverable: true
|
|
479
|
+
cadence_hint_seconds: 300
|
|
480
|
+
runtime_config:
|
|
481
|
+
ref: research
|
|
482
|
+
fields:
|
|
483
|
+
artifactsDir:
|
|
484
|
+
type: string
|
|
485
|
+
label: artifacts 目录
|
|
486
|
+
description: cockpit_sdk 落盘的 artifacts 根目录绝对路径(如 /home/jagger/projects/Lean/artifacts)。
|
|
487
|
+
fixed_params: { mode: research-runs }
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@streamapp/builtin",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"stream": {
|
|
7
|
+
"id": "builtin",
|
|
8
|
+
"required": true,
|
|
9
|
+
"name": "Stream 内置",
|
|
10
|
+
"tagline": "进程内能力(磁力解析 / 视频播放解析 / 转写 / LLM / 兜底抓取)",
|
|
11
|
+
"description": "Stream 自带的、无独立 facility 插件的进程内能力源:磁力解析、视频播放解析梯子成员、语音转写、LLM 调用与通用网页兜底抓取。(聚合搜索已改为 Provider 行,成员是各插件的搜索源,不再内置。)",
|
|
12
|
+
"normalizer": "generic"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
## 说明(迁自 manifests.yaml 注释)
|
|
2
|
+
|
|
3
|
+
抖音 — replay 采集源(跑在用户自己的 Chrome 上)。两个:`douyin-search`(关键词搜索)与
|
|
4
|
+
`douyin-collection`(我的收藏)。搜索用默认 lane,收藏自己声明 `laneKey: "collection"` —— 因为
|
|
5
|
+
**一个 facility 一个 tab 且独占**,同一条 lane 上的话,定时跑的收藏会把用户刚发起的那次搜索的
|
|
6
|
+
feed 冲掉,反过来也一样。
|
|
7
|
+
|
|
8
|
+
### 我的收藏(`douyin-collection`)
|
|
9
|
+
|
|
10
|
+
入口直接落收藏页,它自己会发一发 `/aweme/v1/web/aweme/listcollection/`(network observer 拦它当
|
|
11
|
+
第一批),其余批次由 evaluate step 在页内调站点自己的签名客户端翻页。两处参数是活体标定出来的,
|
|
12
|
+
**动了就回到 403/-404,而且失败长得像「没抓到」不像「被拒了」**:必须走 **POST**(GET → `-404`
|
|
13
|
+
risk-verify),抄来的参数模板必须**删掉 `timestamp` 和 `x-secsdk-web-signature`**(每请求一次性
|
|
14
|
+
的值,留着 GET 连 `status_code` 都不回,只回一个 bdturing 挑战信封)。细节写在 recipe 的
|
|
15
|
+
`_why_calibrated_params` 里。
|
|
16
|
+
|
|
17
|
+
(站外 HTTP 那条路已死:`Douyin_TikTok_Download_API` 容器打这个端点恒 403
|
|
18
|
+
`Blocked by ArgusSecurityPlugin`——端点挪到 Argus 签名头后面了,**和 bogus 无关**,
|
|
19
|
+
上游那个库至今没有任何 Argus 实现。)
|
|
20
|
+
|
|
21
|
+
**搜索走拟人输入,不拼 URL 直达**:从首页(自己会跳 `/jingxuan`)点搜索框 → 打字 → 点「搜索」
|
|
22
|
+
按钮 → 点「视频」筛选 tab,然后拦页面自己发的 `/aweme/v1/web/search/item/`。**别改回把关键词
|
|
23
|
+
拼进 `/search/{keyword}?type=video`**——那条路在高频使用下反复触发风控挑战(冷却十几分钟),
|
|
24
|
+
而人肉路径活体全链零验证码。
|
|
25
|
+
(站外 HTTP 搜索端点被风控门挡着——无 cookie 返回 status_code 2483「请先登录」,
|
|
26
|
+
而登录 cookie 有 7KB+、塞进 query 会被上游拒;所以这条只能在浏览器里走。)
|
|
27
|
+
|
|
28
|
+
**搜完即关**(`lifecycle:'one-shot'`):搜索没有常驻的必要——没有定时流骑这个 tab、也没有
|
|
29
|
+
detail recipe 骑它的账本,留着只是风控的活靶子。
|
|
30
|
+
|
|
31
|
+
**它比默认的并发成员闸慢**:拟人路径全程 30–40s,而扇出层默认 25s 就把成员判超时。所以
|
|
32
|
+
manifest 自己申报 `member_timeout_ms: 60000`——只放宽自己这一格,别去抬全局闸让所有搜索陪等。
|
|
33
|
+
|
|
34
|
+
`provides:[search-content]` —— content-search Provider 的 {mode:auto, provides:search-content}
|
|
35
|
+
扇出成员(沿用旧 plugin 源的成员资格)。
|
|
36
|
+
|
|
37
|
+
免扫码:登录态由后端去用户自己的 Chrome 里取(`src/credentials/cookie-puller.ts` 的 `cookiePull`),
|
|
38
|
+
签名(a_bogus 等)由页面自己算,我们一行都不实现。cookie 失效时用户在自己 Chrome 重登即可,
|
|
39
|
+
stream 侧零操作(不进扫码面板)。
|