youtube-knowledge-mcp 3.0.0 → 3.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 +87 -41
- package/dist/brain-schemas.d.ts +10 -0
- package/dist/brain-schemas.d.ts.map +1 -1
- package/dist/harvest-schemas.d.ts +6 -6
- package/dist/harvest-schemas.d.ts.map +1 -1
- package/dist/harvest-schemas.js +5 -0
- package/dist/harvest-schemas.js.map +1 -1
- package/dist/registry/brain-tools.d.ts.map +1 -1
- package/dist/registry/brain-tools.js +16 -0
- package/dist/registry/brain-tools.js.map +1 -1
- package/dist/registry/channel-tools.d.ts.map +1 -1
- package/dist/registry/channel-tools.js +16 -0
- package/dist/registry/channel-tools.js.map +1 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +4 -0
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/media-tools.d.ts.map +1 -1
- package/dist/registry/media-tools.js +31 -0
- package/dist/registry/media-tools.js.map +1 -1
- package/dist/registry/store-tools.d.ts +9 -0
- package/dist/registry/store-tools.d.ts.map +1 -0
- package/dist/registry/store-tools.js +59 -0
- package/dist/registry/store-tools.js.map +1 -0
- package/dist/registry/transcript-tools.d.ts +4 -1
- package/dist/registry/transcript-tools.d.ts.map +1 -1
- package/dist/registry/transcript-tools.js +20 -1
- package/dist/registry/transcript-tools.js.map +1 -1
- package/dist/registry/video-tools.d.ts.map +1 -1
- package/dist/registry/video-tools.js +48 -0
- package/dist/registry/video-tools.js.map +1 -1
- package/dist/registry/vision-tools.d.ts +7 -0
- package/dist/registry/vision-tools.d.ts.map +1 -0
- package/dist/registry/vision-tools.js +55 -0
- package/dist/registry/vision-tools.js.map +1 -0
- package/dist/schemas.d.ts +6 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +2 -0
- package/dist/schemas.js.map +1 -1
- package/dist/thumbnail-schemas.d.ts +10 -0
- package/dist/thumbnail-schemas.d.ts.map +1 -1
- package/dist/tools/ask-brains.d.ts +66 -0
- package/dist/tools/ask-brains.d.ts.map +1 -0
- package/dist/tools/ask-brains.js +111 -0
- package/dist/tools/ask-brains.js.map +1 -0
- package/dist/tools/check-health.d.ts +16 -6
- package/dist/tools/check-health.d.ts.map +1 -1
- package/dist/tools/check-health.js +30 -1
- package/dist/tools/check-health.js.map +1 -1
- package/dist/tools/check-new-uploads.d.ts +55 -0
- package/dist/tools/check-new-uploads.d.ts.map +1 -0
- package/dist/tools/check-new-uploads.js +74 -0
- package/dist/tools/check-new-uploads.js.map +1 -0
- package/dist/tools/clips.d.ts +15 -0
- package/dist/tools/clips.d.ts.map +1 -1
- package/dist/tools/clips.js +5 -5
- package/dist/tools/clips.js.map +1 -1
- package/dist/tools/detect-scenes.d.ts +38 -0
- package/dist/tools/detect-scenes.d.ts.map +1 -0
- package/dist/tools/detect-scenes.js +66 -0
- package/dist/tools/detect-scenes.js.map +1 -0
- package/dist/tools/export-data.d.ts +85 -0
- package/dist/tools/export-data.d.ts.map +1 -0
- package/dist/tools/export-data.js +99 -0
- package/dist/tools/export-data.js.map +1 -0
- package/dist/tools/frames-subtitles.d.ts.map +1 -1
- package/dist/tools/frames-subtitles.js +16 -8
- package/dist/tools/frames-subtitles.js.map +1 -1
- package/dist/tools/frames.d.ts +73 -0
- package/dist/tools/frames.d.ts.map +1 -0
- package/dist/tools/frames.js +136 -0
- package/dist/tools/frames.js.map +1 -0
- package/dist/tools/get-channel-info.d.ts +2 -0
- package/dist/tools/get-channel-info.d.ts.map +1 -1
- package/dist/tools/get-channel-info.js +4 -0
- package/dist/tools/get-channel-info.js.map +1 -1
- package/dist/tools/get-comments.d.ts +5 -5
- package/dist/tools/get-coverage.d.ts +5 -5
- package/dist/tools/get-sponsor-segments.d.ts +49 -0
- package/dist/tools/get-sponsor-segments.d.ts.map +1 -0
- package/dist/tools/get-sponsor-segments.js +61 -0
- package/dist/tools/get-sponsor-segments.js.map +1 -0
- package/dist/tools/get-thumbnail.d.ts.map +1 -1
- package/dist/tools/get-thumbnail.js +2 -1
- package/dist/tools/get-thumbnail.js.map +1 -1
- package/dist/tools/get-transcript.d.ts +1 -0
- package/dist/tools/get-transcript.d.ts.map +1 -1
- package/dist/tools/get-transcript.js +11 -4
- package/dist/tools/get-transcript.js.map +1 -1
- package/dist/tools/get-video-details.d.ts +118 -0
- package/dist/tools/get-video-details.d.ts.map +1 -0
- package/dist/tools/get-video-details.js +147 -0
- package/dist/tools/get-video-details.js.map +1 -0
- package/dist/tools/gif-concat.d.ts +49 -0
- package/dist/tools/gif-concat.d.ts.map +1 -0
- package/dist/tools/gif-concat.js +96 -0
- package/dist/tools/gif-concat.js.map +1 -0
- package/dist/tools/harvest-channel.d.ts +5 -5
- package/dist/tools/harvest-comments.d.ts +5 -5
- package/dist/tools/harvest-details.d.ts +84 -0
- package/dist/tools/harvest-details.d.ts.map +1 -0
- package/dist/tools/harvest-details.js +71 -0
- package/dist/tools/harvest-details.js.map +1 -0
- package/dist/tools/list-captions.d.ts +17 -0
- package/dist/tools/list-captions.d.ts.map +1 -0
- package/dist/tools/list-captions.js +60 -0
- package/dist/tools/list-captions.js.map +1 -0
- package/dist/tools/list-channel-playlists.d.ts +30 -0
- package/dist/tools/list-channel-playlists.d.ts.map +1 -0
- package/dist/tools/list-channel-playlists.js +44 -0
- package/dist/tools/list-channel-playlists.js.map +1 -0
- package/dist/tools/query-comments.d.ts +5 -5
- package/dist/tools/query-videos.d.ts +5 -5
- package/dist/tools/search-channels.d.ts +6 -0
- package/dist/tools/search-channels.d.ts.map +1 -1
- package/dist/tools/transcribe-video.d.ts +28 -0
- package/dist/tools/transcribe-video.d.ts.map +1 -0
- package/dist/tools/transcribe-video.js +52 -0
- package/dist/tools/transcribe-video.js.map +1 -0
- package/dist/utils/brain-fusion.d.ts +24 -0
- package/dist/utils/brain-fusion.d.ts.map +1 -0
- package/dist/utils/brain-fusion.js +18 -0
- package/dist/utils/brain-fusion.js.map +1 -0
- package/dist/utils/channel-playlists.d.ts +21 -0
- package/dist/utils/channel-playlists.d.ts.map +1 -0
- package/dist/utils/channel-playlists.js +56 -0
- package/dist/utils/channel-playlists.js.map +1 -0
- package/dist/utils/clips.d.ts.map +1 -1
- package/dist/utils/clips.js +3 -17
- package/dist/utils/clips.js.map +1 -1
- package/dist/utils/concat.d.ts +19 -0
- package/dist/utils/concat.d.ts.map +1 -0
- package/dist/utils/concat.js +135 -0
- package/dist/utils/concat.js.map +1 -0
- package/dist/utils/contact-sheet.d.ts +28 -0
- package/dist/utils/contact-sheet.d.ts.map +1 -0
- package/dist/utils/contact-sheet.js +65 -0
- package/dist/utils/contact-sheet.js.map +1 -0
- package/dist/utils/detail-batch.d.ts +25 -0
- package/dist/utils/detail-batch.d.ts.map +1 -0
- package/dist/utils/detail-batch.js +58 -0
- package/dist/utils/detail-batch.js.map +1 -0
- package/dist/utils/errors.d.ts +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +10 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/export-data.d.ts +41 -0
- package/dist/utils/export-data.d.ts.map +1 -0
- package/dist/utils/export-data.js +114 -0
- package/dist/utils/export-data.js.map +1 -0
- package/dist/utils/export-format.d.ts +23 -0
- package/dist/utils/export-format.d.ts.map +1 -0
- package/dist/utils/export-format.js +59 -0
- package/dist/utils/export-format.js.map +1 -0
- package/dist/utils/export-load.d.ts +28 -0
- package/dist/utils/export-load.d.ts.map +1 -0
- package/dist/utils/export-load.js +70 -0
- package/dist/utils/export-load.js.map +1 -0
- package/dist/utils/export-rows.d.ts +35 -0
- package/dist/utils/export-rows.d.ts.map +1 -0
- package/dist/utils/export-rows.js +69 -0
- package/dist/utils/export-rows.js.map +1 -0
- package/dist/utils/ffmpeg.d.ts +26 -0
- package/dist/utils/ffmpeg.d.ts.map +1 -0
- package/dist/utils/ffmpeg.js +28 -0
- package/dist/utils/ffmpeg.js.map +1 -0
- package/dist/utils/format.d.ts +6 -0
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +4 -0
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/frame-plan.d.ts +24 -0
- package/dist/utils/frame-plan.d.ts.map +1 -0
- package/dist/utils/frame-plan.js +58 -0
- package/dist/utils/frame-plan.js.map +1 -0
- package/dist/utils/frames.d.ts +32 -0
- package/dist/utils/frames.d.ts.map +1 -0
- package/dist/utils/frames.js +60 -0
- package/dist/utils/frames.js.map +1 -0
- package/dist/utils/gif.d.ts +31 -0
- package/dist/utils/gif.d.ts.map +1 -0
- package/dist/utils/gif.js +77 -0
- package/dist/utils/gif.js.map +1 -0
- package/dist/utils/harvest-catalog.d.ts +10 -0
- package/dist/utils/harvest-catalog.d.ts.map +1 -1
- package/dist/utils/harvest-catalog.js +14 -5
- package/dist/utils/harvest-catalog.js.map +1 -1
- package/dist/utils/harvest-details.d.ts +30 -0
- package/dist/utils/harvest-details.d.ts.map +1 -0
- package/dist/utils/harvest-details.js +98 -0
- package/dist/utils/harvest-details.js.map +1 -0
- package/dist/utils/local-transcription.d.ts +14 -0
- package/dist/utils/local-transcription.d.ts.map +1 -0
- package/dist/utils/local-transcription.js +85 -0
- package/dist/utils/local-transcription.js.map +1 -0
- package/dist/utils/moment.d.ts +24 -0
- package/dist/utils/moment.d.ts.map +1 -0
- package/dist/utils/moment.js +22 -0
- package/dist/utils/moment.js.map +1 -0
- package/dist/utils/most-replayed.d.ts +15 -0
- package/dist/utils/most-replayed.d.ts.map +1 -0
- package/dist/utils/most-replayed.js +25 -0
- package/dist/utils/most-replayed.js.map +1 -0
- package/dist/utils/scenes.d.ts +39 -0
- package/dist/utils/scenes.d.ts.map +1 -0
- package/dist/utils/scenes.js +83 -0
- package/dist/utils/scenes.js.map +1 -0
- package/dist/utils/seconds.d.ts +5 -0
- package/dist/utils/seconds.d.ts.map +1 -0
- package/dist/utils/seconds.js +7 -0
- package/dist/utils/seconds.js.map +1 -0
- package/dist/utils/sponsorblock.d.ts +24 -0
- package/dist/utils/sponsorblock.d.ts.map +1 -0
- package/dist/utils/sponsorblock.js +153 -0
- package/dist/utils/sponsorblock.js.map +1 -0
- package/dist/utils/transcript-cache.d.ts +5 -1
- package/dist/utils/transcript-cache.d.ts.map +1 -1
- package/dist/utils/transcript-cache.js +31 -50
- package/dist/utils/transcript-cache.js.map +1 -1
- package/dist/utils/transcript-files.d.ts +24 -0
- package/dist/utils/transcript-files.d.ts.map +1 -0
- package/dist/utils/transcript-files.js +61 -0
- package/dist/utils/transcript-files.js.map +1 -0
- package/dist/utils/transcript.d.ts +3 -0
- package/dist/utils/transcript.d.ts.map +1 -1
- package/dist/utils/transcript.js +2 -0
- package/dist/utils/transcript.js.map +1 -1
- package/dist/utils/upload-check.d.ts +38 -0
- package/dist/utils/upload-check.d.ts.map +1 -0
- package/dist/utils/upload-check.js +93 -0
- package/dist/utils/upload-check.js.map +1 -0
- package/dist/utils/validate.d.ts +2 -0
- package/dist/utils/validate.d.ts.map +1 -1
- package/dist/utils/validate.js +4 -0
- package/dist/utils/validate.js.map +1 -1
- package/dist/utils/video-detail-store.d.ts +47 -0
- package/dist/utils/video-detail-store.d.ts.map +1 -0
- package/dist/utils/video-detail-store.js +89 -0
- package/dist/utils/video-detail-store.js.map +1 -0
- package/dist/utils/video-stats-cache.js +1 -1
- package/dist/utils/video-stats-schema.d.ts +187 -0
- package/dist/utils/video-stats-schema.d.ts.map +1 -0
- package/dist/utils/video-stats-schema.js +50 -0
- package/dist/utils/video-stats-schema.js.map +1 -0
- package/dist/utils/video-stats-storage.d.ts +16 -0
- package/dist/utils/video-stats-storage.d.ts.map +1 -0
- package/dist/utils/video-stats-storage.js +37 -0
- package/dist/utils/video-stats-storage.js.map +1 -0
- package/dist/utils/video-stats.d.ts +23 -127
- package/dist/utils/video-stats.d.ts.map +1 -1
- package/dist/utils/video-stats.js +42 -102
- package/dist/utils/video-stats.js.map +1 -1
- package/dist/utils/video-stream.d.ts +21 -0
- package/dist/utils/video-stream.d.ts.map +1 -0
- package/dist/utils/video-stream.js +36 -0
- package/dist/utils/video-stream.js.map +1 -0
- package/dist/utils/whisper.d.ts +39 -0
- package/dist/utils/whisper.d.ts.map +1 -0
- package/dist/utils/whisper.js +137 -0
- package/dist/utils/whisper.js.map +1 -0
- package/dist/utils/youtube-channel.d.ts +4 -0
- package/dist/utils/youtube-channel.d.ts.map +1 -1
- package/dist/utils/youtube-channel.js +6 -0
- package/dist/utils/youtube-channel.js.map +1 -1
- package/dist/utils/youtube-schemas.d.ts +6 -0
- package/dist/utils/youtube-schemas.d.ts.map +1 -1
- package/dist/utils/youtube-schemas.js +2 -0
- package/dist/utils/youtube-schemas.js.map +1 -1
- package/package.json +9 -3
package/README.md
CHANGED
|
@@ -235,9 +235,9 @@ a cold start. Any paid plan removes that.
|
|
|
235
235
|
|
|
236
236
|
## MCP Tools
|
|
237
237
|
|
|
238
|
-
|
|
239
|
-
your filesystem are registered only in local (stdio) mode, so a
|
|
240
|
-
deployment cannot reach the host's disk.
|
|
238
|
+
58 tools. The 19 read-only ones work over both transports; the 39 that touch
|
|
239
|
+
your filesystem or run ffmpeg are registered only in local (stdio) mode, so a
|
|
240
|
+
remote deployment cannot reach the host's disk or spawn processes on it.
|
|
241
241
|
|
|
242
242
|
Every tool returns human-readable text **and** typed structured output, and
|
|
243
243
|
reports failures as an actionable message — `[NO_CAPTIONS] No "en" captions are
|
|
@@ -245,19 +245,23 @@ available for this video. Call get_transcript again with one of: fr, es, de.`
|
|
|
245
245
|
|
|
246
246
|
### Discovery — remote + local
|
|
247
247
|
|
|
248
|
-
| Tool
|
|
249
|
-
|
|
|
250
|
-
| `search_videos`
|
|
251
|
-
| `search_channels`
|
|
252
|
-
| `fetch_videos`
|
|
253
|
-
| `get_video_info`
|
|
254
|
-
| `get_channel_info`
|
|
255
|
-
| `get_playlist_info`
|
|
256
|
-
| `
|
|
257
|
-
| `
|
|
258
|
-
| `
|
|
259
|
-
| `
|
|
260
|
-
| `
|
|
248
|
+
| Tool | Key parameters | Returns |
|
|
249
|
+
| ------------------------ | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- |
|
|
250
|
+
| `search_videos` | `query`, `limit` | Matching videos with durations, channels and view counts |
|
|
251
|
+
| `search_channels` | `query`, `limit` | Matching channels with subscriber counts |
|
|
252
|
+
| `fetch_videos` | `url`, `limit`, `cursor` | One page of a playlist or channel, with a cursor. `total` is present only when YouTube states one |
|
|
253
|
+
| `get_video_info` | `video` | Title, channel, duration, views, likes, description, tags |
|
|
254
|
+
| `get_channel_info` | `channel` | Name, handle, subscriber count, description, avatar, banner, verified badge and keywords |
|
|
255
|
+
| `get_playlist_info` | `url` | Title, channel, video count, last updated |
|
|
256
|
+
| `get_video_details` | `video`, `heatmap`, `refresh` | Most-replayed moments with links, category, licence, language, age limit, music credits, frame size, caption inventory |
|
|
257
|
+
| `list_captions` | `video` | Caption languages split into human-made and automatic, and the spoken language |
|
|
258
|
+
| `list_channel_playlists` | `channel`, `limit` | A channel's public playlists with titles and links |
|
|
259
|
+
| `get_sponsor_segments` | `video`, `categories` | Community-marked sponsor, intro, outro and filler segments with links (SponsorBlock) |
|
|
260
|
+
| `get_chapters` | `video` | Chapter titles with start/end times and deep links |
|
|
261
|
+
| `get_comments` | `video`, `limit`, `includeReplies`, `sort` | Comments with replies and a completeness receipt saying how many of the video's comments this is |
|
|
262
|
+
| `list_formats` | `video` | Available formats grouped by video+audio, video-only, audio-only |
|
|
263
|
+
| `get_thumbnail` | `video`, `channel`, `image`, `quality` | A video thumbnail, channel avatar or banner as an image, with its real size |
|
|
264
|
+
| `check_health` | — | yt-dlp and ffmpeg status, versions, staleness warnings, and which session options are set |
|
|
261
265
|
|
|
262
266
|
### Transcripts — remote + local
|
|
263
267
|
|
|
@@ -274,20 +278,57 @@ pieces instead of returning 100,000+ tokens at once.
|
|
|
274
278
|
|
|
275
279
|
### Extraction for editing — local only
|
|
276
280
|
|
|
277
|
-
| Tool | Key parameters | Returns
|
|
278
|
-
| -------------------- | -------------------------------------------------------------------------- |
|
|
279
|
-
| `extract_clip` | `video`, `start`+`end` or `chapter`, `quality`, `preciseCuts`, `outputDir` | Path to the cut video
|
|
280
|
-
| `extract_audio_clip` | `video`, `start`+`end` or `chapter`, `audioFormat`, `outputDir` | Path to the audio file
|
|
281
|
-
| `extract_clips` | `video`, `ranges` (up to 20), `quality`, `preciseCuts`, `outputDir` | One file per range
|
|
282
|
-
| `extract_frame` | `video`, `timestamp`, `format`, `outputDir` |
|
|
283
|
-
| `
|
|
284
|
-
| `
|
|
281
|
+
| Tool | Key parameters | Returns |
|
|
282
|
+
| -------------------- | -------------------------------------------------------------------------- | ------------------------------------------ |
|
|
283
|
+
| `extract_clip` | `video`, `start`+`end` or `chapter`, `quality`, `preciseCuts`, `outputDir` | Path to the cut video |
|
|
284
|
+
| `extract_audio_clip` | `video`, `start`+`end` or `chapter`, `audioFormat`, `outputDir` | Path to the audio file |
|
|
285
|
+
| `extract_clips` | `video`, `ranges` (up to 20), `quality`, `preciseCuts`, `outputDir` | One file per range |
|
|
286
|
+
| `extract_frame` | `video`, `timestamp`, `format`, `outputDir` | A PNG or JPG still, saved and shown inline |
|
|
287
|
+
| `extract_gif` | `video`, `start`+`end` or `chapter`, `width`, `fps`, `outputDir` | Path to a looping GIF, up to 15 s |
|
|
288
|
+
| `concat_clips` | `clips` (2 to 20 paths), `name`, `outputDir` | Path to one video joining them, re-encoded |
|
|
289
|
+
| `export_subtitles` | `video`, `format` (srt/vtt/txt), `language`, `outputDir` | Path to the subtitle file |
|
|
290
|
+
| `download_video` | `video`, `quality`, `formatId`, `outputDir` | Path to the downloaded video |
|
|
285
291
|
|
|
286
292
|
Clips are cut with `--download-sections`, so only the byte range covering the
|
|
287
293
|
window is fetched rather than the whole file. `preciseCuts` (default `true`)
|
|
288
294
|
cuts exactly at the requested times; set it to `false` for a faster
|
|
289
295
|
keyframe-aligned cut. All of these require ffmpeg.
|
|
290
296
|
|
|
297
|
+
### Looking at a video — local only
|
|
298
|
+
|
|
299
|
+
Everything above works from words. These work from pixels: each tool returns
|
|
300
|
+
images the model can read, and writes nothing to disk. All of them require ffmpeg.
|
|
301
|
+
|
|
302
|
+
| Tool | Key parameters | Returns |
|
|
303
|
+
| ----------------------- | --------------------------------------------------------- | --------------------------------------------------------------- |
|
|
304
|
+
| `extract_frames` | `video`, `timestamps` or `count`, `start`, `end`, `width` | Up to 12 frames as images, each labelled with its moment |
|
|
305
|
+
| `extract_contact_sheet` | `video`, `count` (up to 24), `start`, `end`, `columns` | One image tiling the frames, with the timestamp of every cell |
|
|
306
|
+
| `detect_scenes` | `video`, `start`, `end`, `threshold` | Timestamps where the video cuts, with links (up to 15 min/call) |
|
|
307
|
+
|
|
308
|
+
Start with `extract_contact_sheet` to see what a video looks like, then
|
|
309
|
+
`extract_frames` at the moments that matter, found with `search_transcript` or
|
|
310
|
+
`detect_scenes`. Frames are shrunk to `width` and never enlarged.
|
|
311
|
+
|
|
312
|
+
### Videos with no captions — local only
|
|
313
|
+
|
|
314
|
+
| Tool | Key parameters | Returns |
|
|
315
|
+
| ------------------ | ------------------------------ | ---------------------------------------------------------- |
|
|
316
|
+
| `transcribe_video` | `video`, `language`, `refresh` | A transcription made on this machine, kept for later reads |
|
|
317
|
+
|
|
318
|
+
When `get_transcript` reports `NO_CAPTIONS`, `transcribe_video` downloads the
|
|
319
|
+
audio and runs [whisper.cpp](https://github.com/ggml-org/whisper.cpp) over it.
|
|
320
|
+
It is optional and nothing runs unless you call it. Install whisper.cpp so that
|
|
321
|
+
`whisper-cli` is on your `PATH` (macOS: `brew install whisper.cpp`), download a
|
|
322
|
+
ggml model such as `ggml-base.bin`, and set `YOUTUBE_MCP_WHISPER_MODEL` to its
|
|
323
|
+
path. `check_health` reports whether both are in place.
|
|
324
|
+
|
|
325
|
+
Always pass `language`: auto-detection on a small model took English speech for
|
|
326
|
+
French. The result is kept beside the video's captions, never over them, and
|
|
327
|
+
`get_transcript`, `search_transcript`, `export_subtitles` and the channel brains
|
|
328
|
+
read it with `source: "local-asr"` so a machine's guess is never mistaken for
|
|
329
|
+
YouTube's captions. Accuracy depends on the model you choose; names and rare
|
|
330
|
+
words are the first to suffer.
|
|
331
|
+
|
|
291
332
|
### Knowledge library — local only
|
|
292
333
|
|
|
293
334
|
| Tool | Key parameters | Returns |
|
|
@@ -307,15 +348,18 @@ returns a **completeness receipt**: `complete` is true only when the server can
|
|
|
307
348
|
prove it has everything in scope, and a consumer must not describe the data as a
|
|
308
349
|
full history while it is false.
|
|
309
350
|
|
|
310
|
-
| Tool
|
|
311
|
-
|
|
|
312
|
-
| `harvest_channel`
|
|
313
|
-
| `
|
|
314
|
-
| `
|
|
315
|
-
| `
|
|
316
|
-
| `
|
|
317
|
-
| `
|
|
318
|
-
| `
|
|
351
|
+
| Tool | Key parameters | Returns |
|
|
352
|
+
| ------------------- | ---------------------------------------------------------------------- | --------------------------------------------------------------------------- |
|
|
353
|
+
| `harvest_channel` | `channel`, `maxVideos` | Every video across all tabs, catalogued, with a receipt |
|
|
354
|
+
| `harvest_details` | `channel`, `maxVideos`, `retryUnreadable` | The full record of each catalogued video, kept in the store, with a receipt |
|
|
355
|
+
| `check_new_uploads` | `channel`, `lookback` | Videos the channel lists that the catalogue lacks; writes nothing |
|
|
356
|
+
| `harvest_comments` | `video`, `maxComments`, `sort`, `maxRepliesPerThread` | Comments and replies stored locally, with a receipt |
|
|
357
|
+
| `get_coverage` | `scope`, `incompleteOnly`, `verify`, `limit`, `offset` | What the server can prove it holds, and what it cannot |
|
|
358
|
+
| `query_comments` | `video`, `channel`, `match`, `author`, `threadOf`, `order`, `limit` | Full-text search over stored comments, with real pagination |
|
|
359
|
+
| `query_videos` | `channel`, `match`, `since`, `until`, `withComments`, `order`, `limit` | The catalogued videos, filtered and sorted |
|
|
360
|
+
| `prune_harvest` | `channel`, `video`, `author`, `scope`, `confirm`, `vacuum` | What was removed from the store |
|
|
361
|
+
| `export_data` | `dataset`, `format`, `channel`, `video`, `limit`, `outputDir` | JSON, CSV or Markdown file of harvested rows, with their receipts |
|
|
362
|
+
| `repair_store` | `confirm` | Moves a damaged store aside and starts a fresh one |
|
|
319
363
|
|
|
320
364
|
`get_coverage` never contacts YouTube, so it is cheap enough to call before
|
|
321
365
|
making any claim about the data. Check `anyIncomplete` first.
|
|
@@ -331,14 +375,15 @@ The `author` filter is the per-person erasure path.
|
|
|
331
375
|
|
|
332
376
|
### Channel brains — local only
|
|
333
377
|
|
|
334
|
-
| Tool | Key parameters | Returns
|
|
335
|
-
| -------------------- | ----------------------------------------------------------------- |
|
|
336
|
-
| `build_brain` | `channel`, `maxVideos`, `language`, `since`, `minDurationSeconds` | What was read, what was ruled out, and the stats
|
|
337
|
-
| `ask_brain` | `channel`, `query`, `limit`, `offset` | Passages with timestamps and `?t=` links
|
|
338
|
-
| `
|
|
339
|
-
| `
|
|
340
|
-
| `
|
|
341
|
-
| `
|
|
378
|
+
| Tool | Key parameters | Returns |
|
|
379
|
+
| -------------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------- |
|
|
380
|
+
| `build_brain` | `channel`, `maxVideos`, `language`, `since`, `minDurationSeconds` | What was read, what was ruled out, and the stats |
|
|
381
|
+
| `ask_brain` | `channel`, `query`, `limit`, `offset` | Passages with timestamps and `?t=` links |
|
|
382
|
+
| `ask_brains` | `query`, `channels`, `limit` | The best passages across several brains, each naming its channel |
|
|
383
|
+
| `list_brains` | — | Every brain built locally |
|
|
384
|
+
| `get_brain_info` | `channel`, `includeVideos` | Coverage, statistics and repeated phrases |
|
|
385
|
+
| `save_brain_profile` | `channel`, `content` | Path to the saved profile |
|
|
386
|
+
| `delete_brain` | `channel` | What was removed |
|
|
342
387
|
|
|
343
388
|
`build_brain` is the only one that touches the network. The rest resolve a
|
|
344
389
|
channel from what is already on disk, so they work offline and cost nothing to
|
|
@@ -436,6 +481,7 @@ All optional.
|
|
|
436
481
|
| `YOUTUBE_MCP_MAX_CONCURRENCY` | `3` | Concurrent yt-dlp processes |
|
|
437
482
|
| `YOUTUBE_MCP_TRANSCRIPT_TTL_MS` | 30 days | Transcript cache lifetime |
|
|
438
483
|
| `YOUTUBE_MCP_STATS_TTL_MS` | 1 day | Per-video stats cache lifetime |
|
|
484
|
+
| `YOUTUBE_MCP_WHISPER_MODEL` | none | Path to a whisper.cpp ggml model file. Enables `transcribe_video`; never downloaded for you |
|
|
439
485
|
| `YOUTUBE_MCP_COOKIES_FROM_BROWSER` | unset | Browser whose cookies yt-dlp should read: `brave`, `chrome`, `chromium`, `edge`, `firefox`, `opera`, `safari`, `vivaldi` or `whale`. See Signed-in content |
|
|
440
486
|
| `YOUTUBE_MCP_COOKIES_FILE` | unset | A Netscape-format cookies file inside your home directory, as an alternative to a browser |
|
|
441
487
|
| `YOUTUBE_MCP_PROXY` | unset | An `http`, `https`, `socks4` or `socks5` proxy URL for yt-dlp |
|
package/dist/brain-schemas.d.ts
CHANGED
|
@@ -228,6 +228,8 @@ export declare const brainManifestSchema: z.ZodObject<{
|
|
|
228
228
|
description: z.ZodString;
|
|
229
229
|
avatarUrl: z.ZodOptional<z.ZodString>;
|
|
230
230
|
bannerUrl: z.ZodOptional<z.ZodString>;
|
|
231
|
+
isVerified: z.ZodOptional<z.ZodBoolean>;
|
|
232
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
231
233
|
}, "strip", z.ZodTypeAny, {
|
|
232
234
|
description: string;
|
|
233
235
|
name: string;
|
|
@@ -235,8 +237,10 @@ export declare const brainManifestSchema: z.ZodObject<{
|
|
|
235
237
|
handle: string;
|
|
236
238
|
subscriberCount: number;
|
|
237
239
|
channelUrl: string;
|
|
240
|
+
tags?: string[] | undefined;
|
|
238
241
|
avatarUrl?: string | undefined;
|
|
239
242
|
bannerUrl?: string | undefined;
|
|
243
|
+
isVerified?: boolean | undefined;
|
|
240
244
|
}, {
|
|
241
245
|
description: string;
|
|
242
246
|
name: string;
|
|
@@ -244,8 +248,10 @@ export declare const brainManifestSchema: z.ZodObject<{
|
|
|
244
248
|
handle: string;
|
|
245
249
|
subscriberCount: number;
|
|
246
250
|
channelUrl: string;
|
|
251
|
+
tags?: string[] | undefined;
|
|
247
252
|
avatarUrl?: string | undefined;
|
|
248
253
|
bannerUrl?: string | undefined;
|
|
254
|
+
isVerified?: boolean | undefined;
|
|
249
255
|
}>;
|
|
250
256
|
/**
|
|
251
257
|
* A brain is built from one caption language. Defaulted rather than required
|
|
@@ -351,8 +357,10 @@ export declare const brainManifestSchema: z.ZodObject<{
|
|
|
351
357
|
handle: string;
|
|
352
358
|
subscriberCount: number;
|
|
353
359
|
channelUrl: string;
|
|
360
|
+
tags?: string[] | undefined;
|
|
354
361
|
avatarUrl?: string | undefined;
|
|
355
362
|
bannerUrl?: string | undefined;
|
|
363
|
+
isVerified?: boolean | undefined;
|
|
356
364
|
};
|
|
357
365
|
version: number;
|
|
358
366
|
videos: Record<string, {
|
|
@@ -399,8 +407,10 @@ export declare const brainManifestSchema: z.ZodObject<{
|
|
|
399
407
|
handle: string;
|
|
400
408
|
subscriberCount: number;
|
|
401
409
|
channelUrl: string;
|
|
410
|
+
tags?: string[] | undefined;
|
|
402
411
|
avatarUrl?: string | undefined;
|
|
403
412
|
bannerUrl?: string | undefined;
|
|
413
|
+
isVerified?: boolean | undefined;
|
|
404
414
|
};
|
|
405
415
|
version: number;
|
|
406
416
|
videos: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-schemas.d.ts","sourceRoot":"","sources":["../src/brain-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;GAMG;AAEH,qDAAqD;AACrD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAchC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,uDAAuD;AACvD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;EAO3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG/B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;EAGpC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,4BAA4B;AAC5B,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"brain-schemas.d.ts","sourceRoot":"","sources":["../src/brain-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;;GAMG;AAEH,qDAAqD;AACrD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAchC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,uDAAuD;AACvD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;EAO3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG/B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;EAGpC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,4BAA4B;AAC5B,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAG9B;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMH,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,8BAA8B;AAC9B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY7B,CAAC"}
|
|
@@ -20,7 +20,7 @@ export type CompletenessReason = z.infer<typeof completenessReasonSchema>;
|
|
|
20
20
|
* `source-exhausted` is the one value that is not a number YouTube reported:
|
|
21
21
|
* it means the listing ended on its own, which is its own kind of proof.
|
|
22
22
|
*/
|
|
23
|
-
export declare const expectedSourceSchema: z.ZodEnum<["youtube:comment_count", "youtube:playlist_count", "source-exhausted"]>;
|
|
23
|
+
export declare const expectedSourceSchema: z.ZodEnum<["youtube:comment_count", "youtube:playlist_count", "source-exhausted", "store:catalog"]>;
|
|
24
24
|
export type ExpectedSource = z.infer<typeof expectedSourceSchema>;
|
|
25
25
|
export declare const coverageSchema: z.ZodObject<{
|
|
26
26
|
scope: z.ZodEnum<["channel-catalog", "video-details", "video-comments"]>;
|
|
@@ -29,7 +29,7 @@ export declare const coverageSchema: z.ZodObject<{
|
|
|
29
29
|
reason: z.ZodEnum<["COMPLETE", "CAP_REACHED", "BUDGET_SPENT", "RATE_LIMITED", "CANCELLED", "TIMEOUT", "SOURCE_REFUSED", "COMMENTS_DISABLED", "SOURCE_SILENT", "PARTIAL_ERROR", "NOT_ATTEMPTED"]>;
|
|
30
30
|
have: z.ZodNumber;
|
|
31
31
|
expected: z.ZodOptional<z.ZodNumber>;
|
|
32
|
-
expectedSource: z.ZodOptional<z.ZodEnum<["youtube:comment_count", "youtube:playlist_count", "source-exhausted"]>>;
|
|
32
|
+
expectedSource: z.ZodOptional<z.ZodEnum<["youtube:comment_count", "youtube:playlist_count", "source-exhausted", "store:catalog"]>>;
|
|
33
33
|
ranToExhaustion: z.ZodOptional<z.ZodBoolean>;
|
|
34
34
|
source: z.ZodString;
|
|
35
35
|
harvestedAt: z.ZodString;
|
|
@@ -39,33 +39,33 @@ export declare const coverageSchema: z.ZodObject<{
|
|
|
39
39
|
resumeToken: z.ZodOptional<z.ZodString>;
|
|
40
40
|
note: z.ZodOptional<z.ZodString>;
|
|
41
41
|
}, "strip", z.ZodTypeAny, {
|
|
42
|
+
source: string;
|
|
42
43
|
have: number;
|
|
43
44
|
scope: "channel-catalog" | "video-details" | "video-comments";
|
|
44
45
|
targetId: string;
|
|
45
46
|
complete: boolean;
|
|
46
47
|
reason: "RATE_LIMITED" | "TIMEOUT" | "CANCELLED" | "COMPLETE" | "CAP_REACHED" | "BUDGET_SPENT" | "SOURCE_REFUSED" | "COMMENTS_DISABLED" | "SOURCE_SILENT" | "PARTIAL_ERROR" | "NOT_ATTEMPTED";
|
|
47
|
-
source: string;
|
|
48
48
|
harvestedAt: string;
|
|
49
49
|
expected?: number | undefined;
|
|
50
50
|
note?: string | undefined;
|
|
51
51
|
ranToExhaustion?: boolean | undefined;
|
|
52
|
-
expectedSource?: "youtube:playlist_count" | "source-exhausted" | "youtube:comment_count" | undefined;
|
|
52
|
+
expectedSource?: "youtube:playlist_count" | "source-exhausted" | "youtube:comment_count" | "store:catalog" | undefined;
|
|
53
53
|
staleAfter?: string | undefined;
|
|
54
54
|
limitApplied?: number | undefined;
|
|
55
55
|
sortApplied?: "top" | "new" | undefined;
|
|
56
56
|
resumeToken?: string | undefined;
|
|
57
57
|
}, {
|
|
58
|
+
source: string;
|
|
58
59
|
have: number;
|
|
59
60
|
scope: "channel-catalog" | "video-details" | "video-comments";
|
|
60
61
|
targetId: string;
|
|
61
62
|
complete: boolean;
|
|
62
63
|
reason: "RATE_LIMITED" | "TIMEOUT" | "CANCELLED" | "COMPLETE" | "CAP_REACHED" | "BUDGET_SPENT" | "SOURCE_REFUSED" | "COMMENTS_DISABLED" | "SOURCE_SILENT" | "PARTIAL_ERROR" | "NOT_ATTEMPTED";
|
|
63
|
-
source: string;
|
|
64
64
|
harvestedAt: string;
|
|
65
65
|
expected?: number | undefined;
|
|
66
66
|
note?: string | undefined;
|
|
67
67
|
ranToExhaustion?: boolean | undefined;
|
|
68
|
-
expectedSource?: "youtube:playlist_count" | "source-exhausted" | "youtube:comment_count" | undefined;
|
|
68
|
+
expectedSource?: "youtube:playlist_count" | "source-exhausted" | "youtube:comment_count" | "store:catalog" | undefined;
|
|
69
69
|
staleAfter?: string | undefined;
|
|
70
70
|
limitApplied?: number | undefined;
|
|
71
71
|
sortApplied?: "top" | "new" | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harvest-schemas.d.ts","sourceRoot":"","sources":["../src/harvest-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,kBAAkB,mEAO7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,wBAAwB,0LAqBnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"harvest-schemas.d.ts","sourceRoot":"","sources":["../src/harvest-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,kBAAkB,mEAO7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,wBAAwB,0LAqBnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,qGAS/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4EzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
|
package/dist/harvest-schemas.js
CHANGED
|
@@ -50,6 +50,11 @@ export const expectedSourceSchema = z.enum([
|
|
|
50
50
|
'youtube:comment_count',
|
|
51
51
|
'youtube:playlist_count',
|
|
52
52
|
'source-exhausted',
|
|
53
|
+
/**
|
|
54
|
+
* The channel catalogue held in the store. Only ever the total of a catalogue whose own
|
|
55
|
+
* receipt is complete, so it is exactly as trustworthy as that receipt and no more.
|
|
56
|
+
*/
|
|
57
|
+
'store:catalog',
|
|
53
58
|
]);
|
|
54
59
|
export const coverageSchema = z.object({
|
|
55
60
|
scope: harvestScopeSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harvest-schemas.js","sourceRoot":"","sources":["../src/harvest-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,kCAAkC;IAClC,iBAAiB;IACjB,yCAAyC;IACzC,eAAe;IACf,0CAA0C;IAC1C,gBAAgB;CACjB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC7C,4FAA4F;IAC5F,UAAU;IACV,yCAAyC;IACzC,aAAa;IACb,mDAAmD;IACnD,cAAc;IACd,qCAAqC;IACrC,cAAc;IACd,0CAA0C;IAC1C,WAAW;IACX,SAAS;IACT,qEAAqE;IACrE,gBAAgB;IAChB,yEAAyE;IACzE,mBAAmB;IACnB,+DAA+D;IAC/D,eAAe;IACf,gDAAgD;IAChD,eAAe;IACf,eAAe;CAChB,CAAC,CAAC;AAGH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,uBAAuB;IACvB,wBAAwB;IACxB,kBAAkB;
|
|
1
|
+
{"version":3,"file":"harvest-schemas.js","sourceRoot":"","sources":["../src/harvest-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,kCAAkC;IAClC,iBAAiB;IACjB,yCAAyC;IACzC,eAAe;IACf,0CAA0C;IAC1C,gBAAgB;CACjB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC7C,4FAA4F;IAC5F,UAAU;IACV,yCAAyC;IACzC,aAAa;IACb,mDAAmD;IACnD,cAAc;IACd,qCAAqC;IACrC,cAAc;IACd,0CAA0C;IAC1C,WAAW;IACX,SAAS;IACT,qEAAqE;IACrE,gBAAgB;IAChB,yEAAyE;IACzE,mBAAmB;IACnB,+DAA+D;IAC/D,eAAe;IACf,gDAAgD;IAChD,eAAe;IACf,eAAe;CAChB,CAAC,CAAC;AAGH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,uBAAuB;IACvB,wBAAwB;IACxB,kBAAkB;IAClB;;;OAGG;IACH,eAAe;CAChB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,kBAAkB;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;IAE3F,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,CACP,qFAAqF;QACnF,0FAA0F,CAC7F;IAEH,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CACvC,8EAA8E,CAC/E;IAED,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,CAAC,0EAA0E,CAAC;IAEvF,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CACP,oFAAoF;QAClF,yFAAyF,CAC5F;IAEH,cAAc,EAAE,oBAAoB;SACjC,QAAQ,EAAE;SACV,QAAQ,CAAC,qEAAqE,CAAC;IAElF,eAAe,EAAE,CAAC;SACf,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,uFAAuF;QACrF,6DAA6D,CAChE;IAEH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IAE3F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAErF,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,iFAAiF;QAC/E,4CAA4C,CAC/C;IAEH,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,uEAAuE,CAAC;IAEpF,WAAW,EAAE,CAAC;SACX,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACpB,QAAQ,EAAE;SACV,QAAQ,CACP,sFAAsF;QACpF,sBAAsB,CACzB;IAEH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;IAEzF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-tools.d.ts","sourceRoot":"","sources":["../../src/registry/brain-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"brain-tools.d.ts","sourceRoot":"","sources":["../../src/registry/brain-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAyB7D,yMAAyM;AACzM,eAAO,MAAM,UAAU,EAAE,cAAc,EAsHtC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { defineTool } from './types.js';
|
|
2
2
|
import { askBrainSchema, askBrainOutputSchema, askBrainHandler } from '../tools/ask-brain.js';
|
|
3
|
+
import { askBrainsSchema, askBrainsOutputSchema, askBrainsHandler } from '../tools/ask-brains.js';
|
|
3
4
|
import { listBrainsSchema, listBrainsOutputSchema, listBrainsHandler, getBrainInfoSchema, getBrainInfoOutputSchema, getBrainInfoHandler, } from '../tools/brain-info.js';
|
|
4
5
|
import { buildBrainSchema, buildBrainOutputSchema, buildBrainHandler, } from '../tools/build-brain.js';
|
|
5
6
|
import { saveBrainProfileSchema, saveBrainProfileOutputSchema, saveBrainProfileHandler, deleteBrainSchema, deleteBrainOutputSchema, deleteBrainHandler, } from '../tools/manage-brain.js';
|
|
@@ -39,6 +40,21 @@ export const brainTools = [
|
|
|
39
40
|
},
|
|
40
41
|
handler: askBrainHandler,
|
|
41
42
|
}),
|
|
43
|
+
defineTool({
|
|
44
|
+
name: 'ask_brains',
|
|
45
|
+
mode: 'stdio',
|
|
46
|
+
title: 'Ask Several Channel Brains',
|
|
47
|
+
description: 'Put one question to several creators at once. Searches every brain built with build_brain, or the channels you name, and returns the best passages across them, each naming its channel with the timestamp and a link that opens the video there. Results are interleaved by rank because scores from different channels are not comparable.',
|
|
48
|
+
inputSchema: askBrainsSchema,
|
|
49
|
+
outputSchema: askBrainsOutputSchema,
|
|
50
|
+
annotations: {
|
|
51
|
+
readOnlyHint: true,
|
|
52
|
+
destructiveHint: false,
|
|
53
|
+
idempotentHint: true,
|
|
54
|
+
openWorldHint: false,
|
|
55
|
+
},
|
|
56
|
+
handler: askBrainsHandler,
|
|
57
|
+
}),
|
|
42
58
|
defineTool({
|
|
43
59
|
name: 'list_brains',
|
|
44
60
|
mode: 'stdio',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-tools.js","sourceRoot":"","sources":["../../src/registry/brain-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"brain-tools.js","sourceRoot":"","sources":["../../src/registry/brain-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-tools.d.ts","sourceRoot":"","sources":["../../src/registry/channel-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"channel-tools.d.ts","sourceRoot":"","sources":["../../src/registry/channel-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAsB7D,2CAA2C;AAC3C,eAAO,MAAM,YAAY,EAAE,cAAc,EAiExC,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { defineTool } from './types.js';
|
|
|
2
2
|
import { getChannelInfoSchema, getChannelInfoOutputSchema, getChannelInfoHandler, } from '../tools/get-channel-info.js';
|
|
3
3
|
import { getPlaylistInfoSchema, getPlaylistInfoOutputSchema, getPlaylistInfoHandler, } from '../tools/get-playlist-info.js';
|
|
4
4
|
import { searchChannelsSchema, searchChannelsOutputSchema, searchChannelsHandler, } from '../tools/search-channels.js';
|
|
5
|
+
import { listChannelPlaylistsSchema, listChannelPlaylistsOutputSchema, listChannelPlaylistsHandler, } from '../tools/list-channel-playlists.js';
|
|
5
6
|
/** Channels and playlists. Remote-safe. */
|
|
6
7
|
export const channelTools = [
|
|
7
8
|
defineTool({
|
|
@@ -49,5 +50,20 @@ export const channelTools = [
|
|
|
49
50
|
},
|
|
50
51
|
handler: getPlaylistInfoHandler,
|
|
51
52
|
}),
|
|
53
|
+
defineTool({
|
|
54
|
+
name: 'list_channel_playlists',
|
|
55
|
+
mode: 'all',
|
|
56
|
+
title: 'List YouTube Channel Playlists',
|
|
57
|
+
description: 'List the public playlists a YouTube channel has published, with titles and links. Pass a playlist URL on to fetch_videos or digest_playlist to read what is in it.',
|
|
58
|
+
inputSchema: listChannelPlaylistsSchema,
|
|
59
|
+
outputSchema: listChannelPlaylistsOutputSchema,
|
|
60
|
+
annotations: {
|
|
61
|
+
readOnlyHint: true,
|
|
62
|
+
destructiveHint: false,
|
|
63
|
+
idempotentHint: true,
|
|
64
|
+
openWorldHint: true,
|
|
65
|
+
},
|
|
66
|
+
handler: listChannelPlaylistsHandler,
|
|
67
|
+
}),
|
|
52
68
|
];
|
|
53
69
|
//# sourceMappingURL=channel-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-tools.js","sourceRoot":"","sources":["../../src/registry/channel-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"channel-tools.js","sourceRoot":"","sources":["../../src/registry/channel-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,2BAA2B,GAC5B,MAAM,oCAAoC,CAAC;AAE5C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,UAAU,CAAC;QACT,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,mHAAmH;QACrH,WAAW,EAAE,oBAAoB;QACjC,YAAY,EAAE,0BAA0B;QACxC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,qBAAqB;KAC/B,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE,oBAAoB;QACjC,YAAY,EAAE,0BAA0B;QACxC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,qBAAqB;KAC/B,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,+GAA+G;QACjH,WAAW,EAAE,qBAAqB;QAClC,YAAY,EAAE,2BAA2B;QACzC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,sBAAsB;KAChC,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,wBAAwB;QAC9B,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,oKAAoK;QACtK,WAAW,EAAE,0BAA0B;QACvC,YAAY,EAAE,gCAAgC;QAC9C,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;QACD,OAAO,EAAE,2BAA2B;KACrC,CAAC;CACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3D,sEAAsE;AACtE,eAAO,MAAM,KAAK,EAAE,cAAc,EAYjC,CAAC;AAEF,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI7E"}
|
package/dist/registry/index.js
CHANGED
|
@@ -4,9 +4,11 @@ import { channelTools } from './channel-tools.js';
|
|
|
4
4
|
import { healthTools } from './health-tools.js';
|
|
5
5
|
import { libraryTools } from './library-tools.js';
|
|
6
6
|
import { mediaTools } from './media-tools.js';
|
|
7
|
+
import { storeTools } from './store-tools.js';
|
|
7
8
|
import { thumbnailTools } from './thumbnail-tools.js';
|
|
8
9
|
import { transcriptTools } from './transcript-tools.js';
|
|
9
10
|
import { videoTools } from './video-tools.js';
|
|
11
|
+
import { visionTools } from './vision-tools.js';
|
|
10
12
|
/** Every tool the server can offer, in the order clients see them. */
|
|
11
13
|
export const TOOLS = [
|
|
12
14
|
...videoTools,
|
|
@@ -15,8 +17,10 @@ export const TOOLS = [
|
|
|
15
17
|
...healthTools,
|
|
16
18
|
...libraryTools,
|
|
17
19
|
...mediaTools,
|
|
20
|
+
...visionTools,
|
|
18
21
|
...brainTools,
|
|
19
22
|
...harvestTools,
|
|
23
|
+
...storeTools,
|
|
20
24
|
...thumbnailTools,
|
|
21
25
|
];
|
|
22
26
|
/** Registers the tools the transport may carry: everything on stdio, remote-safe ones over HTTP. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD,sEAAsE;AACtE,MAAM,CAAC,MAAM,KAAK,GAAqB;IACrC,GAAG,UAAU;IACb,GAAG,YAAY;IACf,GAAG,eAAe;IAClB,GAAG,WAAW;IACd,GAAG,YAAY;IACf,GAAG,UAAU;IACb,GAAG,WAAW;IACd,GAAG,UAAU;IACb,GAAG,YAAY;IACf,GAAG,UAAU;IACb,GAAG,cAAc;CAClB,CAAC;AAEF,oGAAoG;AACpG,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,IAAsB;IACrE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-tools.d.ts","sourceRoot":"","sources":["../../src/registry/media-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"media-tools.d.ts","sourceRoot":"","sources":["../../src/registry/media-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAkC7D,6EAA6E;AAC7E,eAAO,MAAM,UAAU,EAAE,cAAc,EAmItC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { defineTool } from './types.js';
|
|
2
2
|
import { extractClipSchema, extractClipOutputSchema, extractClipHandler, extractAudioClipSchema, extractAudioClipOutputSchema, extractAudioClipHandler, extractClipsSchema, extractClipsOutputSchema, extractClipsHandler, } from '../tools/clips.js';
|
|
3
3
|
import { downloadVideoSchema, downloadVideoOutputSchema, downloadVideoHandler, } from '../tools/download-video.js';
|
|
4
|
+
import { extractGifSchema, extractGifOutputSchema, extractGifHandler, concatClipsSchema, concatClipsOutputSchema, concatClipsHandler, } from '../tools/gif-concat.js';
|
|
4
5
|
import { extractFrameSchema, extractFrameOutputSchema, extractFrameHandler, exportSubtitlesSchema, exportSubtitlesOutputSchema, exportSubtitlesHandler, } from '../tools/frames-subtitles.js';
|
|
5
6
|
/** Clips, stills, subtitles and downloads. Local only: these write files. */
|
|
6
7
|
export const mediaTools = [
|
|
@@ -64,6 +65,36 @@ export const mediaTools = [
|
|
|
64
65
|
},
|
|
65
66
|
handler: extractFrameHandler,
|
|
66
67
|
}),
|
|
68
|
+
defineTool({
|
|
69
|
+
name: 'extract_gif',
|
|
70
|
+
mode: 'stdio',
|
|
71
|
+
title: 'Make a GIF',
|
|
72
|
+
description: 'Make a short looping GIF from a moment of a video, without downloading the file. Give start and end, or a chapter name, up to 15 seconds. Use to share a reaction or a key moment. Requires ffmpeg.',
|
|
73
|
+
inputSchema: extractGifSchema,
|
|
74
|
+
outputSchema: extractGifOutputSchema,
|
|
75
|
+
annotations: {
|
|
76
|
+
readOnlyHint: false,
|
|
77
|
+
destructiveHint: false,
|
|
78
|
+
idempotentHint: true,
|
|
79
|
+
openWorldHint: true,
|
|
80
|
+
},
|
|
81
|
+
handler: extractGifHandler,
|
|
82
|
+
}),
|
|
83
|
+
defineTool({
|
|
84
|
+
name: 'concat_clips',
|
|
85
|
+
mode: 'stdio',
|
|
86
|
+
title: 'Join Clips Into One Video',
|
|
87
|
+
description: 'Join several video files into one, in the order given, re-encoded so clips from different moments or sources fit together. Pass the paths extract_clip returned. This is the last step of cutting a montage. Requires ffmpeg.',
|
|
88
|
+
inputSchema: concatClipsSchema,
|
|
89
|
+
outputSchema: concatClipsOutputSchema,
|
|
90
|
+
annotations: {
|
|
91
|
+
readOnlyHint: false,
|
|
92
|
+
destructiveHint: false,
|
|
93
|
+
idempotentHint: true,
|
|
94
|
+
openWorldHint: false,
|
|
95
|
+
},
|
|
96
|
+
handler: concatClipsHandler,
|
|
97
|
+
}),
|
|
67
98
|
defineTool({
|
|
68
99
|
name: 'export_subtitles',
|
|
69
100
|
mode: 'stdio',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-tools.js","sourceRoot":"","sources":["../../src/registry/media-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-tools.js","sourceRoot":"","sources":["../../src/registry/media-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ToolDefinition } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Working with the harvested store once it holds something: reading each video in full,
|
|
4
|
+
* noticing what a channel published since, and taking the data out.
|
|
5
|
+
*
|
|
6
|
+
* All stdio-only, for the reason the harvest tools are: they read and write the local store.
|
|
7
|
+
*/
|
|
8
|
+
export declare const storeTools: ToolDefinition[];
|
|
9
|
+
//# sourceMappingURL=store-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-tools.d.ts","sourceRoot":"","sources":["../../src/registry/store-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAiB7D;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,cAAc,EAkDtC,CAAC"}
|