openmd-cli 0.1.0__py3-none-any.whl

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 (177) hide show
  1. openmd/__init__.py +3 -0
  2. openmd/__main__.py +5 -0
  3. openmd/adapters/__init__.py +1 -0
  4. openmd/adapters/base.py +95 -0
  5. openmd/adapters/bilibili/__init__.py +11 -0
  6. openmd/adapters/bilibili/adapter.py +104 -0
  7. openmd/adapters/bilibili/discovery.py +33 -0
  8. openmd/adapters/douyin/__init__.py +11 -0
  9. openmd/adapters/douyin/adapter.py +117 -0
  10. openmd/adapters/douyin/discovery.py +36 -0
  11. openmd/adapters/douyin/sidecar.py +77 -0
  12. openmd/adapters/generic_media/__init__.py +14 -0
  13. openmd/adapters/high_privacy.py +77 -0
  14. openmd/adapters/local_audio/__init__.py +14 -0
  15. openmd/adapters/local_audio/adapter.py +169 -0
  16. openmd/adapters/local_audio/asr.py +58 -0
  17. openmd/adapters/local_audio/backends/__init__.py +1 -0
  18. openmd/adapters/local_audio/backends/auto.py +177 -0
  19. openmd/adapters/local_audio/backends/faster_whisper.py +285 -0
  20. openmd/adapters/local_audio/backends/funasr_sense_voice.py +14 -0
  21. openmd/adapters/local_audio/backends/qwen3_asr.py +254 -0
  22. openmd/adapters/opencli.py +770 -0
  23. openmd/adapters/pdf/__init__.py +11 -0
  24. openmd/adapters/pdf/adapter.py +153 -0
  25. openmd/adapters/pdf/backends/__init__.py +1 -0
  26. openmd/adapters/pdf/backends/markitdown.py +165 -0
  27. openmd/adapters/pdf/parser.py +56 -0
  28. openmd/adapters/qq_group/__init__.py +11 -0
  29. openmd/adapters/qq_group/adapter.py +289 -0
  30. openmd/adapters/qq_group/parsers/__init__.py +1 -0
  31. openmd/adapters/qq_group/parsers/html.py +60 -0
  32. openmd/adapters/qq_group/parsers/json.py +71 -0
  33. openmd/adapters/registry.py +149 -0
  34. openmd/adapters/screenshot/__init__.py +11 -0
  35. openmd/adapters/screenshot/adapter.py +154 -0
  36. openmd/adapters/screenshot/backends/__init__.py +1 -0
  37. openmd/adapters/screenshot/backends/paddle.py +15 -0
  38. openmd/adapters/screenshot/backends/rapidocr.py +176 -0
  39. openmd/adapters/screenshot/backends/tesseract.py +15 -0
  40. openmd/adapters/screenshot/ocr.py +84 -0
  41. openmd/adapters/wechat_group/__init__.py +11 -0
  42. openmd/adapters/wechat_group/adapter.py +160 -0
  43. openmd/adapters/wechat_group/wx_cli.py +268 -0
  44. openmd/adapters/wechat_moments/__init__.py +11 -0
  45. openmd/adapters/wechat_moments/adapter.py +167 -0
  46. openmd/adapters/wechat_moments/wx_cli.py +265 -0
  47. openmd/adapters/weixin/__init__.py +11 -0
  48. openmd/adapters/weixin/adapter.py +148 -0
  49. openmd/adapters/weixin/discovery.py +510 -0
  50. openmd/adapters/weixin/report.py +278 -0
  51. openmd/adapters/xiaohongshu.py +158 -0
  52. openmd/backends/__init__.py +1 -0
  53. openmd/backends/base.py +204 -0
  54. openmd/backends/bilibili.py +1480 -0
  55. openmd/backends/bilibili_wbi.py +277 -0
  56. openmd/backends/discourse.py +426 -0
  57. openmd/backends/douyin.py +868 -0
  58. openmd/backends/douyin_detail.py +124 -0
  59. openmd/backends/douyin_providers.py +602 -0
  60. openmd/backends/executor.py +546 -0
  61. openmd/backends/feishu.py +861 -0
  62. openmd/backends/generic_media.py +77 -0
  63. openmd/backends/interactive.py +60 -0
  64. openmd/backends/ocr.py +41 -0
  65. openmd/backends/opencli.py +82 -0
  66. openmd/backends/pdf.py +122 -0
  67. openmd/backends/registry.py +234 -0
  68. openmd/backends/screenshot.py +79 -0
  69. openmd/backends/video_metadata.py +167 -0
  70. openmd/backends/web_article.py +363 -0
  71. openmd/backends/wechat_group.py +35 -0
  72. openmd/backends/wechat_moments.py +35 -0
  73. openmd/backends/weixin.py +767 -0
  74. openmd/backends/x.py +455 -0
  75. openmd/backends/xiaoe.py +940 -0
  76. openmd/backends/xiaohongshu.py +911 -0
  77. openmd/backends/xiaohongshu_providers.py +876 -0
  78. openmd/backends/xiaoyuzhou.py +1017 -0
  79. openmd/backends/youtube.py +280 -0
  80. openmd/backends/youtube_discovery.py +1245 -0
  81. openmd/backends/youtube_transcript.py +213 -0
  82. openmd/browser_extension/background.js +231 -0
  83. openmd/browser_extension/icons/icon-128.png +0 -0
  84. openmd/browser_extension/icons/icon-16.png +0 -0
  85. openmd/browser_extension/icons/icon-32.png +0 -0
  86. openmd/browser_extension/icons/icon-48.png +0 -0
  87. openmd/browser_extension/icons/icon-512.png +0 -0
  88. openmd/browser_extension/idle.html +6 -0
  89. openmd/browser_extension/manifest.json +43 -0
  90. openmd/browser_extension/options.html +42 -0
  91. openmd/browser_extension/options.js +117 -0
  92. openmd/browser_extension/popup.css +71 -0
  93. openmd/browser_extension/popup.html +17 -0
  94. openmd/browser_extension/popup.js +59 -0
  95. openmd/browser_extension/vendor/opencli-bridge/LICENSE +190 -0
  96. openmd/browser_extension/vendor/opencli-bridge/VENDOR.md +31 -0
  97. openmd/browser_extension/vendor/opencli-bridge/background.js +2742 -0
  98. openmd/browser_host.py +503 -0
  99. openmd/browser_setup.py +106 -0
  100. openmd/cli.py +2012 -0
  101. openmd/console.py +32 -0
  102. openmd/core/__init__.py +1 -0
  103. openmd/core/capabilities.py +162 -0
  104. openmd/core/content_validation.py +323 -0
  105. openmd/core/coverage.py +163 -0
  106. openmd/core/detector.py +247 -0
  107. openmd/core/doctor.py +104 -0
  108. openmd/core/execution_policy.py +164 -0
  109. openmd/core/filename.py +64 -0
  110. openmd/core/input_validation.py +91 -0
  111. openmd/core/local_config.py +96 -0
  112. openmd/core/manifest.py +156 -0
  113. openmd/core/models.py +168 -0
  114. openmd/core/opencli_output.py +34 -0
  115. openmd/core/operation_contract.py +60 -0
  116. openmd/core/output.py +194 -0
  117. openmd/core/package_contract.py +335 -0
  118. openmd/core/package_validator.py +489 -0
  119. openmd/core/package_writer.py +666 -0
  120. openmd/core/planner.py +345 -0
  121. openmd/core/preferences.py +61 -0
  122. openmd/core/readable.py +129 -0
  123. openmd/core/receipt.py +285 -0
  124. openmd/core/renderer.py +185 -0
  125. openmd/core/runlog.py +208 -0
  126. openmd/core/secrets.py +313 -0
  127. openmd/doctor_view.py +68 -0
  128. openmd/interactive.py +453 -0
  129. openmd/ocr/__init__.py +1 -0
  130. openmd/ocr/breakers.py +84 -0
  131. openmd/ocr/config.py +54 -0
  132. openmd/ocr/documents.py +522 -0
  133. openmd/ocr/endpoint.py +72 -0
  134. openmd/ocr/layout.py +92 -0
  135. openmd/ocr/layout_filter.py +118 -0
  136. openmd/ocr/layout_worker.py +89 -0
  137. openmd/ocr/native_math.py +220 -0
  138. openmd/ocr/office.py +305 -0
  139. openmd/ocr/ollama.py +200 -0
  140. openmd/ocr/otsl.py +51 -0
  141. openmd/ocr/ovis-prompt.txt +1 -0
  142. openmd/ocr/pipeline.py +384 -0
  143. openmd/ocr/settings.json +25 -0
  144. openmd/ocr/tiling.py +631 -0
  145. openmd/post_video.py +154 -0
  146. openmd/probe.py +397 -0
  147. openmd/routing/__init__.py +1 -0
  148. openmd/routing/cards/builtin.json +620 -0
  149. openmd/routing/cards/defuddle.json +70 -0
  150. openmd/routing/cards/x-tweet-fetcher.json +71 -0
  151. openmd/routing/cards/xyz-dl.json +60 -0
  152. openmd/routing/cards/yutto.json +68 -0
  153. openmd/routing/entry_shim.py +71 -0
  154. openmd/routing/lifecycle.py +459 -0
  155. openmd/routing/loader.py +138 -0
  156. openmd/routing/providers.py +158 -0
  157. openmd/routing/readers.py +108 -0
  158. openmd/routing/routes.json +504 -0
  159. openmd/routing/runner.py +192 -0
  160. openmd/routing/view.py +40 -0
  161. openmd/runtime/__init__.py +1 -0
  162. openmd/runtime/_windows_job.py +234 -0
  163. openmd/runtime/asr.py +217 -0
  164. openmd/runtime/asr_worker.py +119 -0
  165. openmd/runtime/gpu_lock.py +81 -0
  166. openmd/runtime/gpu_quarantine.py +85 -0
  167. openmd/runtime/interpreters.py +407 -0
  168. openmd/runtime/managed_tools.py +204 -0
  169. openmd/runtime/models.py +202 -0
  170. openmd/runtime/services.py +175 -0
  171. openmd/runtime/tempdirs.py +227 -0
  172. openmd_cli-0.1.0.dist-info/METADATA +168 -0
  173. openmd_cli-0.1.0.dist-info/RECORD +177 -0
  174. openmd_cli-0.1.0.dist-info/WHEEL +5 -0
  175. openmd_cli-0.1.0.dist-info/entry_points.txt +2 -0
  176. openmd_cli-0.1.0.dist-info/licenses/LICENSE +21 -0
  177. openmd_cli-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,620 @@
1
+ {
2
+ "schema": "openmd.tool-card/v1",
3
+ "id": "builtin",
4
+ "kind": "builtin",
5
+ "version": "openmd-source",
6
+ "license": "project",
7
+ "homepage": "",
8
+ "installation": {
9
+ "mode": "project",
10
+ "sha256": null,
11
+ "verification": "source-controlled provider"
12
+ },
13
+ "evidence": [],
14
+ "capabilities": [
15
+ {
16
+ "id": "asr.fallback",
17
+ "provider": "asr.fallback",
18
+ "sources": [
19
+ "bilibili",
20
+ "generic_media",
21
+ "youtube"
22
+ ],
23
+ "capability": "content",
24
+ "gates": [
25
+ "network",
26
+ "media_download",
27
+ "asr"
28
+ ],
29
+ "source_level": "provider_defined",
30
+ "requires_login": false,
31
+ "cost_class": "local_compute",
32
+ "status_policy": "provider_defined"
33
+ },
34
+ {
35
+ "id": "bilibili-harvest.core",
36
+ "provider": "bilibili-harvest.core",
37
+ "sources": [
38
+ "bilibili"
39
+ ],
40
+ "capability": "content",
41
+ "gates": [
42
+ "network"
43
+ ],
44
+ "source_level": "provider_defined",
45
+ "requires_login": false,
46
+ "cost_class": "unknown",
47
+ "status_policy": "provider_defined"
48
+ },
49
+ {
50
+ "id": "douyin.metadata",
51
+ "provider": "douyin.metadata",
52
+ "sources": [
53
+ "douyin"
54
+ ],
55
+ "capability": "metadata",
56
+ "gates": [],
57
+ "source_level": "provider_defined",
58
+ "requires_login": false,
59
+ "cost_class": "unknown",
60
+ "status_policy": "provider_defined"
61
+ },
62
+ {
63
+ "id": "lark-cli.docs.fetch",
64
+ "provider": "lark-cli.docs.fetch",
65
+ "sources": [
66
+ "feishu"
67
+ ],
68
+ "capability": "content",
69
+ "gates": [
70
+ "network",
71
+ "account"
72
+ ],
73
+ "source_level": "provider_defined",
74
+ "requires_login": true,
75
+ "cost_class": "unknown",
76
+ "status_policy": "provider_defined"
77
+ },
78
+ {
79
+ "id": "lark-cli.drive.export-markdown",
80
+ "provider": "lark-cli.drive.export-markdown",
81
+ "sources": [
82
+ "feishu"
83
+ ],
84
+ "capability": "content",
85
+ "gates": [
86
+ "network",
87
+ "account"
88
+ ],
89
+ "source_level": "provider_defined",
90
+ "requires_login": true,
91
+ "cost_class": "unknown",
92
+ "status_policy": "provider_defined"
93
+ },
94
+ {
95
+ "id": "lark-cli.markdown.fetch",
96
+ "provider": "lark-cli.markdown.fetch",
97
+ "sources": [
98
+ "feishu"
99
+ ],
100
+ "capability": "content",
101
+ "gates": [
102
+ "network",
103
+ "account"
104
+ ],
105
+ "source_level": "provider_defined",
106
+ "requires_login": true,
107
+ "cost_class": "unknown",
108
+ "status_policy": "provider_defined"
109
+ },
110
+ {
111
+ "id": "manual.markdown-export",
112
+ "provider": "manual.markdown-export",
113
+ "sources": [
114
+ "feishu"
115
+ ],
116
+ "capability": "content",
117
+ "gates": [],
118
+ "source_level": "provider_defined",
119
+ "requires_login": false,
120
+ "cost_class": "unknown",
121
+ "status_policy": "provider_defined"
122
+ },
123
+ {
124
+ "id": "ocr.paddle",
125
+ "provider": "ocr.paddle",
126
+ "sources": [
127
+ "screenshot"
128
+ ],
129
+ "capability": "content",
130
+ "gates": [
131
+ "local_compute"
132
+ ],
133
+ "source_level": "provider_defined",
134
+ "requires_login": false,
135
+ "cost_class": "local_compute",
136
+ "status_policy": "provider_defined"
137
+ },
138
+ {
139
+ "id": "ocr.rapidocr",
140
+ "provider": "ocr.rapidocr",
141
+ "sources": [
142
+ "screenshot"
143
+ ],
144
+ "capability": "content",
145
+ "gates": [
146
+ "local_compute"
147
+ ],
148
+ "source_level": "provider_defined",
149
+ "requires_login": false,
150
+ "cost_class": "local_compute",
151
+ "status_policy": "provider_defined"
152
+ },
153
+ {
154
+ "id": "ocr.tesseract",
155
+ "provider": "ocr.tesseract",
156
+ "sources": [
157
+ "screenshot"
158
+ ],
159
+ "capability": "content",
160
+ "gates": [
161
+ "local_compute"
162
+ ],
163
+ "source_level": "provider_defined",
164
+ "requires_login": false,
165
+ "cost_class": "local_compute",
166
+ "status_policy": "provider_defined"
167
+ },
168
+ {
169
+ "id": "opencli.bilibili.subtitle",
170
+ "provider": "opencli.bilibili.subtitle",
171
+ "sources": [
172
+ "bilibili"
173
+ ],
174
+ "capability": "content",
175
+ "gates": [
176
+ "browser"
177
+ ],
178
+ "source_level": "provider_defined",
179
+ "requires_login": false,
180
+ "cost_class": "unknown",
181
+ "status_policy": "provider_defined"
182
+ },
183
+ {
184
+ "id": "opencli.tiktok.user",
185
+ "provider": "opencli.tiktok.user",
186
+ "sources": [
187
+ "tiktok"
188
+ ],
189
+ "capability": "content",
190
+ "gates": [
191
+ "browser"
192
+ ],
193
+ "source_level": "provider_defined",
194
+ "requires_login": false,
195
+ "cost_class": "unknown",
196
+ "status_policy": "provider_defined"
197
+ },
198
+ {
199
+ "id": "opencli.twitter.thread",
200
+ "provider": "opencli.twitter.thread",
201
+ "sources": [
202
+ "x"
203
+ ],
204
+ "capability": "content",
205
+ "gates": [
206
+ "browser"
207
+ ],
208
+ "source_level": "provider_defined",
209
+ "requires_login": false,
210
+ "cost_class": "unknown",
211
+ "status_policy": "provider_defined"
212
+ },
213
+ {
214
+ "id": "opencli.web.read",
215
+ "provider": "opencli.web.read",
216
+ "sources": [
217
+ "web_article",
218
+ "weixin",
219
+ "xiaoyuzhou"
220
+ ],
221
+ "capability": "content",
222
+ "gates": [
223
+ "browser"
224
+ ],
225
+ "source_level": "provider_defined",
226
+ "requires_login": false,
227
+ "cost_class": "unknown",
228
+ "status_policy": "provider_defined"
229
+ },
230
+ {
231
+ "id": "opencli.weixin.download",
232
+ "provider": "opencli.weixin.download",
233
+ "sources": [
234
+ "weixin"
235
+ ],
236
+ "capability": "content",
237
+ "gates": [
238
+ "browser"
239
+ ],
240
+ "source_level": "provider_defined",
241
+ "requires_login": false,
242
+ "cost_class": "unknown",
243
+ "status_policy": "provider_defined"
244
+ },
245
+ {
246
+ "id": "opencli.wx.history",
247
+ "provider": "opencli.wx.history",
248
+ "sources": [
249
+ "wechat_group"
250
+ ],
251
+ "capability": "content",
252
+ "gates": [
253
+ "local_export"
254
+ ],
255
+ "source_level": "provider_defined",
256
+ "requires_login": false,
257
+ "cost_class": "unknown",
258
+ "status_policy": "provider_defined"
259
+ },
260
+ {
261
+ "id": "opencli.wx.sns-feed",
262
+ "provider": "opencli.wx.sns-feed",
263
+ "sources": [
264
+ "wechat_moments"
265
+ ],
266
+ "capability": "content",
267
+ "gates": [
268
+ "local_export"
269
+ ],
270
+ "source_level": "provider_defined",
271
+ "requires_login": false,
272
+ "cost_class": "unknown",
273
+ "status_policy": "provider_defined"
274
+ },
275
+ {
276
+ "id": "opencli.xiaoe.content",
277
+ "provider": "opencli.xiaoe.content",
278
+ "sources": [
279
+ "xiaoe"
280
+ ],
281
+ "capability": "content",
282
+ "gates": [
283
+ "browser"
284
+ ],
285
+ "source_level": "provider_defined",
286
+ "requires_login": false,
287
+ "cost_class": "unknown",
288
+ "status_policy": "provider_defined"
289
+ },
290
+ {
291
+ "id": "opencli.xiaoe.transcript",
292
+ "provider": "opencli.xiaoe.transcript",
293
+ "sources": [
294
+ "xiaoe"
295
+ ],
296
+ "capability": "content",
297
+ "gates": [
298
+ "browser"
299
+ ],
300
+ "source_level": "provider_defined",
301
+ "requires_login": false,
302
+ "cost_class": "unknown",
303
+ "status_policy": "provider_defined"
304
+ },
305
+ {
306
+ "id": "opencli.xiaoyuzhou.transcript",
307
+ "provider": "opencli.xiaoyuzhou.transcript",
308
+ "sources": [
309
+ "xiaoyuzhou"
310
+ ],
311
+ "capability": "content",
312
+ "gates": [
313
+ "browser"
314
+ ],
315
+ "source_level": "provider_defined",
316
+ "requires_login": false,
317
+ "cost_class": "unknown",
318
+ "status_policy": "provider_defined"
319
+ },
320
+ {
321
+ "id": "opencli.youtube.transcript",
322
+ "provider": "opencli.youtube.transcript",
323
+ "sources": [
324
+ "youtube"
325
+ ],
326
+ "capability": "content",
327
+ "gates": [
328
+ "browser"
329
+ ],
330
+ "source_level": "provider_defined",
331
+ "requires_login": false,
332
+ "cost_class": "unknown",
333
+ "status_policy": "provider_defined"
334
+ },
335
+ {
336
+ "id": "pdf.markitdown",
337
+ "provider": "pdf.markitdown",
338
+ "sources": [
339
+ "pdf"
340
+ ],
341
+ "capability": "content",
342
+ "gates": [
343
+ "local_compute"
344
+ ],
345
+ "source_level": "provider_defined",
346
+ "requires_login": false,
347
+ "cost_class": "local_compute",
348
+ "status_policy": "provider_defined"
349
+ },
350
+ {
351
+ "id": "podwise.transcript",
352
+ "provider": "podwise.transcript",
353
+ "sources": [
354
+ "xiaoyuzhou"
355
+ ],
356
+ "capability": "content",
357
+ "gates": [
358
+ "browser"
359
+ ],
360
+ "source_level": "provider_defined",
361
+ "requires_login": false,
362
+ "cost_class": "unknown",
363
+ "status_policy": "provider_defined"
364
+ },
365
+ {
366
+ "id": "qq_group.export",
367
+ "provider": "qq_group.export",
368
+ "sources": [
369
+ "qq_group"
370
+ ],
371
+ "capability": "content",
372
+ "gates": [],
373
+ "source_level": "provider_defined",
374
+ "requires_login": false,
375
+ "cost_class": "unknown",
376
+ "status_policy": "provider_defined"
377
+ },
378
+ {
379
+ "id": "web_article.trafilatura",
380
+ "provider": "web_article.trafilatura",
381
+ "sources": [
382
+ "web_article"
383
+ ],
384
+ "capability": "content",
385
+ "gates": [
386
+ "network"
387
+ ],
388
+ "source_level": "provider_defined",
389
+ "requires_login": false,
390
+ "cost_class": "unknown",
391
+ "status_policy": "provider_defined"
392
+ },
393
+ {
394
+ "id": "wechat-article-exporter.download",
395
+ "provider": "wechat-article-exporter.download",
396
+ "sources": [
397
+ "weixin"
398
+ ],
399
+ "capability": "content",
400
+ "gates": [
401
+ "browser"
402
+ ],
403
+ "source_level": "provider_defined",
404
+ "requires_login": false,
405
+ "cost_class": "unknown",
406
+ "status_policy": "provider_defined"
407
+ },
408
+ {
409
+ "id": "weixin.article.local",
410
+ "provider": "weixin.article.local",
411
+ "sources": [
412
+ "weixin"
413
+ ],
414
+ "capability": "content",
415
+ "gates": [
416
+ "network"
417
+ ],
418
+ "source_level": "provider_defined",
419
+ "requires_login": false,
420
+ "cost_class": "unknown",
421
+ "status_policy": "provider_defined"
422
+ },
423
+ {
424
+ "id": "xiaohongshu.composite",
425
+ "provider": "xiaohongshu.composite",
426
+ "sources": [
427
+ "xiaohongshu"
428
+ ],
429
+ "capability": "content",
430
+ "gates": [
431
+ "browser"
432
+ ],
433
+ "source_level": "provider_defined",
434
+ "requires_login": false,
435
+ "cost_class": "unknown",
436
+ "status_policy": "provider_defined"
437
+ },
438
+ {
439
+ "id": "youtube-transcript-api",
440
+ "provider": "youtube-transcript-api",
441
+ "sources": [
442
+ "youtube"
443
+ ],
444
+ "capability": "content",
445
+ "gates": [
446
+ "network"
447
+ ],
448
+ "source_level": "provider_defined",
449
+ "requires_login": false,
450
+ "cost_class": "unknown",
451
+ "status_policy": "provider_defined"
452
+ },
453
+ {
454
+ "id": "yt-dlp.bilibili",
455
+ "provider": "yt-dlp.bilibili",
456
+ "sources": [
457
+ "bilibili"
458
+ ],
459
+ "capability": "content",
460
+ "gates": [
461
+ "network",
462
+ "media_download"
463
+ ],
464
+ "source_level": "provider_defined",
465
+ "requires_login": false,
466
+ "cost_class": "unknown",
467
+ "status_policy": "provider_defined"
468
+ },
469
+ {
470
+ "id": "yt-dlp.youtube",
471
+ "provider": "yt-dlp.youtube",
472
+ "sources": [
473
+ "youtube"
474
+ ],
475
+ "capability": "content",
476
+ "gates": [
477
+ "network",
478
+ "media_download"
479
+ ],
480
+ "source_level": "provider_defined",
481
+ "requires_login": false,
482
+ "cost_class": "unknown",
483
+ "status_policy": "provider_defined"
484
+ },
485
+ {
486
+ "id": "asr.auto",
487
+ "provider": "asr.auto",
488
+ "sources": [
489
+ "local_audio",
490
+ "local_video",
491
+ "tutorial_video"
492
+ ],
493
+ "capability": "transcript",
494
+ "gates": [
495
+ "asr"
496
+ ],
497
+ "source_level": "media_asr",
498
+ "requires_login": false,
499
+ "cost_class": "local_compute",
500
+ "status_policy": "provider_defined"
501
+ },
502
+ {
503
+ "id": "ocr.ovis3",
504
+ "provider": "ocr.ovis3",
505
+ "sources": [
506
+ "screenshot",
507
+ "pdf"
508
+ ],
509
+ "capability": "content",
510
+ "gates": [
511
+ "local_compute",
512
+ "network"
513
+ ],
514
+ "source_level": "ocr",
515
+ "requires_login": false,
516
+ "cost_class": "local_compute",
517
+ "status_policy": "provider_defined"
518
+ },
519
+ {
520
+ "id": "ocr.minicpm",
521
+ "provider": "ocr.minicpm",
522
+ "sources": [
523
+ "screenshot",
524
+ "pdf"
525
+ ],
526
+ "capability": "content",
527
+ "gates": [
528
+ "local_compute",
529
+ "network"
530
+ ],
531
+ "source_level": "ocr",
532
+ "requires_login": false,
533
+ "cost_class": "local_compute",
534
+ "status_policy": "provider_defined"
535
+ },
536
+ {
537
+ "id": "ocr.chain",
538
+ "provider": "ocr.chain",
539
+ "sources": [
540
+ "screenshot",
541
+ "pdf"
542
+ ],
543
+ "capability": "content",
544
+ "gates": [
545
+ "local_compute",
546
+ "network"
547
+ ],
548
+ "source_level": "ocr",
549
+ "requires_login": false,
550
+ "cost_class": "local_compute",
551
+ "status_policy": "provider_defined"
552
+ },
553
+ {
554
+ "id": "pdf.textlayer",
555
+ "provider": "pdf.textlayer",
556
+ "sources": [
557
+ "pdf"
558
+ ],
559
+ "capability": "content",
560
+ "gates": [
561
+ "local_compute"
562
+ ],
563
+ "source_level": "native_text",
564
+ "requires_login": false,
565
+ "cost_class": "local_compute",
566
+ "status_policy": "provider_defined"
567
+ },
568
+ {
569
+ "id": "douyin.transcript",
570
+ "provider": "douyin.transcript",
571
+ "sources": [
572
+ "douyin"
573
+ ],
574
+ "capability": "content",
575
+ "gates": [
576
+ "browser",
577
+ "media_download",
578
+ "asr"
579
+ ],
580
+ "source_level": "provider_defined",
581
+ "requires_login": false,
582
+ "cost_class": "local_compute",
583
+ "status_policy": "provider_defined"
584
+ },
585
+ {
586
+ "id": "web_article.discourse",
587
+ "provider": "web_article.discourse",
588
+ "sources": [
589
+ "web_article"
590
+ ],
591
+ "capability": "content",
592
+ "gates": [
593
+ "network"
594
+ ],
595
+ "source_level": "provider_defined",
596
+ "requires_login": false,
597
+ "cost_class": "unknown",
598
+ "status_policy": "provider_defined",
599
+ "gate_policy": "network OR browser; enforced by provider registration"
600
+ },
601
+ {
602
+ "id": "siliconflow.sensevoice",
603
+ "provider": "siliconflow.sensevoice",
604
+ "sources": [
605
+ "douyin"
606
+ ],
607
+ "capability": "content",
608
+ "gates": [
609
+ "browser",
610
+ "media_download",
611
+ "asr",
612
+ "cloud"
613
+ ],
614
+ "source_level": "media_asr",
615
+ "requires_login": false,
616
+ "cost_class": "cloud_api",
617
+ "status_policy": "provider_defined"
618
+ }
619
+ ]
620
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "schema": "openmd.tool-card/v1",
3
+ "installation": {
4
+ "mode": "isolated_existing",
5
+ "sha256": "8bf10dfa15d7d303d1fb08a4fb83fcbdf7bbb0e50cc17bba07f37b448fc12b52",
6
+ "verification": "SHA256 of the installed entry file; dependency tree is isolated, not attested"
7
+ },
8
+ "evidence": [
9
+ {
10
+ "date": "2026-11-07",
11
+ "ledger": "docs/benchmarks/routes/trials-backup.jsonl",
12
+ "scope": "one real sample; does not establish platform-wide completeness"
13
+ }
14
+ ],
15
+ "id": "defuddle",
16
+ "kind": "command",
17
+ "version": "0.19.6",
18
+ "license": "MIT",
19
+ "homepage": "https://github.com/kepano/defuddle",
20
+ "launcher": {
21
+ "node_entry": "defuddle/dist/cli.js",
22
+ "node_api": {
23
+ "module": "defuddle/dist/node.js",
24
+ "export": "Defuddle",
25
+ "options": {"removeExactSelectors": false}
26
+ },
27
+ "which": [
28
+ "defuddle"
29
+ ]
30
+ },
31
+ "capabilities": [
32
+ {
33
+ "status_policy": "verified_if_valid_else_failed",
34
+ "requires_login": false,
35
+ "cost_class": "none",
36
+ "id": "defuddle.web.content",
37
+ "sources": [
38
+ "web_article",
39
+ "weixin"
40
+ ],
41
+ "capability": "content",
42
+ "argv": [
43
+ "parse",
44
+ "{url}",
45
+ "--markdown",
46
+ "--json",
47
+ "-o",
48
+ "{workdir}/content.json"
49
+ ],
50
+ "reader": {
51
+ "type": "json_file",
52
+ "path": "content.json",
53
+ "fields": {
54
+ "text": ["contentMarkdown", "content"],
55
+ "title": "title",
56
+ "author": "author",
57
+ "published_at": "published"
58
+ }
59
+ },
60
+ "gates": [
61
+ "network"
62
+ ],
63
+ "source_level": "third_party_extractor",
64
+ "timeout_s": 120,
65
+ "validation": {
66
+ "min_chars": 40
67
+ }
68
+ }
69
+ ]
70
+ }