video-context-mcp-server 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +38 -29
  2. package/dist/generated/version.d.ts +1 -1
  3. package/dist/generated/version.js +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/services/m3Client.d.ts +75 -0
  7. package/dist/services/m3Client.d.ts.map +1 -0
  8. package/dist/services/m3Client.js +195 -0
  9. package/dist/services/m3Client.js.map +1 -0
  10. package/dist/services/providerRouter.d.ts +28 -22
  11. package/dist/services/providerRouter.d.ts.map +1 -1
  12. package/dist/services/providerRouter.js +52 -28
  13. package/dist/services/providerRouter.js.map +1 -1
  14. package/dist/services/qwenClient.d.ts +1 -1
  15. package/dist/services/qwenClient.js +3 -3
  16. package/dist/tools/analyzeVideo.d.ts.map +1 -1
  17. package/dist/tools/analyzeVideo.js +22 -0
  18. package/dist/tools/analyzeVideo.js.map +1 -1
  19. package/dist/tools/orchestrator.d.ts +2 -0
  20. package/dist/tools/orchestrator.d.ts.map +1 -1
  21. package/dist/tools/orchestrator.js +4 -2
  22. package/dist/tools/orchestrator.js.map +1 -1
  23. package/dist/tools/redactSensitive.d.ts.map +1 -1
  24. package/dist/tools/redactSensitive.js +14 -0
  25. package/dist/tools/redactSensitive.js.map +1 -1
  26. package/dist/tools/schemas.d.ts +5 -0
  27. package/dist/tools/schemas.d.ts.map +1 -1
  28. package/dist/tools/schemas.js +5 -4
  29. package/dist/tools/schemas.js.map +1 -1
  30. package/dist/tools/searchTimestamp.d.ts.map +1 -1
  31. package/dist/tools/searchTimestamp.js +7 -1
  32. package/dist/tools/searchTimestamp.js.map +1 -1
  33. package/dist/tools/summarizeVideo.d.ts.map +1 -1
  34. package/dist/tools/summarizeVideo.js +53 -7
  35. package/dist/tools/summarizeVideo.js.map +1 -1
  36. package/package.json +1 -1
package/README.md CHANGED
@@ -14,8 +14,8 @@ An MCP server that gives coding assistants (GitHub Copilot, Cursor, Claude Code)
14
14
  - 📊 **Video Metadata** — Get duration, resolution, fps, codec, and other technical details
15
15
  - 🎙️ **Audio Transcription** — Transcribe speech with paragraph-level timestamps (`[MM:SS]`) or export as SRT/VTT subtitles and JSON using Deepgram, AssemblyAI, Groq/Whisper, or Gemini
16
16
  - 🔊 **Speaker Diarization** — Identify who said what (Deepgram and AssemblyAI)
17
- - 🔊 **Audio-Enhanced Analysis** — Auto-transcribes audio and injects transcripts into AI prompts for richer results (GLM/Kimi/Qwen)
18
- - 🔄 **Multi-Provider Support** — Choose between GLM-4.6V, Qwen3.6, Kimi K2.6, Gemini, or MiMo-V2.5
17
+ - 🔊 **Audio-Enhanced Analysis** — Auto-transcribes audio and injects transcripts into AI prompts for richer results (all non-Gemini video providers: GLM, MiniMax-M3, Kimi, Qwen, MiMo)
18
+ - 🔄 **Multi-Provider Support** — Choose between GLM-4.6V, Qwen3.7, Kimi K2.6, Gemini, MiMo-V2.5, or MiniMax-M3
19
19
  - 🎯 **Smart Video Handling** — Extracts keyframes from long videos to reduce token usage
20
20
  - 🗣️ **Text-to-Speech** ⚠️ _Experimental_ — Convert text to natural speech audio (MiniMax TTS)
21
21
  - 🖼️ **Image Generation** ⚠️ _Experimental_ — Generate images from text prompts (MiniMax image-01)
@@ -411,23 +411,25 @@ If you need a MiniMax API key, get it from the [MiniMax interface key page](http
411
411
 
412
412
  ### Video Providers
413
413
 
414
- Set all keys to get the full fallback chain. The server will try Gemini first, then GLM, then Qwen, then Kimi, then MiMo, so having all keys ensures it never gets stuck without a working provider:
414
+ Set all keys to get the full fallback chain. The server will try Gemini first, then MiniMax-M3, then Kimi, then Qwen, then MiMo, then GLM last (the free tier is aggressively rate-limited, so GLM is the last-resort fallback), so having all keys ensures it never gets stuck without a working provider:
415
415
 
416
416
  | Provider | Key | Link |
417
417
  | ----------------------------------------- | ------------------- | --------------------------------------------------------------------------------------------- |
418
418
  | **Gemini 3.5 Flash** (default, free-tier) | `GEMINI_API_KEY` | [Get key](https://aistudio.google.com/app/apikey) |
419
419
  | **GLM-4.6V** (free-tier) | `Z_AI_API_KEY` | [Get key](https://z.ai/manage-apikey/apikey-list) |
420
- | **Qwen3.6** (paid) | `DASHSCOPE_API_KEY` | [Get key](https://modelstudio.console.alibabacloud.com/ap-southeast-1?tab=dashboard#/api-key) |
420
+ | **Qwen3.7** (paid) | `DASHSCOPE_API_KEY` | [Get key](https://modelstudio.console.alibabacloud.com/ap-southeast-1?tab=dashboard#/api-key) |
421
421
  | **Kimi K2.6** (paid) | `MOONSHOT_API_KEY` | [Get key](https://platform.kimi.ai) |
422
422
  | **MiMo-V2.5** (paid) | `MIMO_API_KEY` | [Get key](https://platform.xiaomimimo.com/#/console/api-keys) |
423
+ | **MiniMax-M3** (paid) | `MINIMAX_API_KEY` | [Get key](https://platform.minimax.io/user-center/basic-information/interface-key) |
423
424
 
424
- When a provider's API key is missing or its API call fails at runtime, tools automatically fall back through the remaining providers in priority order, starting from the configured default:
425
+ When a provider's API key is missing or its API call fails at runtime, tools automatically fall back through the remaining providers in priority order, starting from the configured default. **GLM is last in the chain** — its free tier applies aggressive rate-limit throttling, so all other providers are preferred when their keys are available. **Kimi is placed ahead of Qwen** because Kimi accepts native file upload up to 100 MB, so large local videos work out-of-the-box without setting up the optional S3 relay (which most users skip):
425
426
 
426
- - Gemini default (standard): **Gemini → GLM → Qwen → KimiMiMo**
427
- - GLM default: **GLM → Gemini → Qwen → KimiMiMo**
428
- - Qwen default: **Qwen → Gemini → GLMKimi → MiMo**
429
- - Kimi default: **Kimi → Gemini → GLMQwen → MiMo**
430
- - MiMo default: **MiMo → Gemini → GLM → Qwen → Kimi**
427
+ - Gemini default (standard): **Gemini → MiniMax-M3Kimi → Qwen → MiMoGLM**
428
+ - MiniMax-M3 default: **MiniMax-M3 → Gemini → Kimi → Qwen → MiMoGLM**
429
+ - Kimi default: **Kimi → Gemini → MiniMax-M3Qwen → MiMo → GLM**
430
+ - Qwen default: **Qwen → Gemini → MiniMax-M3Kimi → MiMo → GLM**
431
+ - MiMo default: **MiMo → Gemini → MiniMax-M3Kimi → Qwen → GLM**
432
+ - GLM default: **GLM → Gemini → MiniMax-M3 → Kimi → Qwen → MiMo**
431
433
 
432
434
  ### Audio Providers
433
435
 
@@ -448,24 +450,24 @@ When an audio key is missing or an audio API call fails at runtime, tools automa
448
450
 
449
451
  ### Video Providers
450
452
 
451
- | Feature | Gemini 3.5 Flash (default) | GLM-4.6V | Qwen3.6 | Kimi K2.6 | MiMo-V2.5 |
452
- | -------------- | ---------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------ | ---------------------------------------------- | ------------------------------------------------------ |
453
- | Price | Free tier available | Free tier available (GLM-4.6V-Flash) | $0.50 input / $3.00 output per 1M tokens | $0.60 input / $3.00 output per 1M tokens | $0.40 input / $2.00 output per 1M tokens |
454
- | Video formats | mp4, mpeg, mov, avi, flv, mpg, webm, wmv, 3gpp | mp4, avi, mov, wmv, webm, m4v | mp4, avi, mov, wmv, webm, m4v | mp4, mpeg, mov, avi, flv, mpg, webm, wmv, 3gpp | mp4, mov, avi, wmv |
455
- | Context window | 1M tokens | 128K tokens | 1M tokens | 256K tokens | 256K tokens |
456
- | Max file size | 2 GB | ~12 MB base64 / frames fallback / **unlimited w/ S3↓** | ~10 MB base64 / frames fallback / **unlimited w/ S3↓** | 100 MB | ~10 MB base64 / frames fallback / **unlimited w/ S3↓** |
457
- | Best for | **Default** — free, no card required | Free, no card required | SOTA agentic coding | Paid — broadest format support | Paid — thinking mode; multimodal |
453
+ | Feature | Gemini 3.5 Flash (default) | GLM-4.6V | Qwen3.7 | Kimi K2.6 | MiMo-V2.5 | MiniMax-M3 |
454
+ | -------------- | ---------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------ | ---------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
455
+ | Price | Free tier available | Free tier available (GLM-4.6V-Flash) | $0.50 input / $3.00 output per 1M tokens | $0.60 input / $3.00 output per 1M tokens | $0.40 input / $2.00 output per 1M tokens | **$0.30 / $1.20** (effective; permanent 50% off) ≤512K |
456
+ | Video formats | mp4, mpeg, mov, avi, flv, mpg, webm, wmv, 3gpp | mp4, avi, mov, wmv, webm, m4v | mp4, avi, mov, wmv, webm, m4v | mp4, mpeg, mov, avi, flv, mpg, webm, wmv, 3gpp | mp4, mov, avi, wmv | mp4, mov, avi, etc. (image frames; ≤100 per request) |
457
+ | Context window | 1M tokens | 128K tokens | 1M tokens | 256K tokens | 256K tokens | **1M tokens** (built for long-video understanding) |
458
+ | Max file size | 2 GB | ~12 MB base64 / frames fallback / **unlimited w/ S3↓** | ~10 MB base64 / frames fallback / **unlimited w/ S3↓** | 100 MB | ~10 MB base64 / frames fallback / **unlimited w/ S3↓** | 100 MB image batch budget / frames fallback |
459
+ | Best for | **Default** — free, no card required | Free, no card required | SOTA agentic coding | Paid — broadest format support | Paid — thinking mode; multimodal | Paid — **best for long videos** (1M context, 100-frame budget, prompt caching 5× cheaper on follow-up) |
458
460
 
459
- **Gemini 3.5 Flash** is the default — it offers a free tier with no credit card required, 1M context window, and 2 GB file support. **GLM-4.6V** is the second fallback — also free with no card required. **Qwen3.6** is a paid provider at $0.50 input / $3.00 output per 1M tokens with SOTA agentic coding performance. **Kimi K2.6** is a paid provider with the broadest video format support. **MiMo-V2.5** is Xiaomi's multimodal model with thinking mode support ($0.40 input / $2.00 output per 1M tokens).
461
+ **Gemini 3.5 Flash** is the default — it offers a free tier with no credit card required, 1M context window, and 2 GB file support. **MiniMax-M3** is the second fallback — paid, but has the largest context window (1M tokens) and 100-image-per-request budget, making it the best long-video fallback. **Kimi K2.6** is the third fallback — paid, with native file upload up to 100 MB so large local videos work without S3 relay. **Qwen3.7** is the fourth fallback — paid at $0.50 input / $3.00 output per 1M tokens with SOTA agentic coding performance (capped at 10 MB base64 large files require S3 relay or frame fallback). **MiMo-V2.5** is the fifth fallback — Xiaomi's multimodal model with thinking mode support ($0.40 input / $2.00 output per 1M tokens). **GLM-4.6V** is the last-resort fallback — also free with no card required, but the free tier applies aggressive rate-limit throttling, so all other providers are preferred when their keys are available.
460
462
 
461
- Set `VIDEO_MCP_DEFAULT_PROVIDER=gemini`, `glm`, `qwen`, `kimi`, or `mimo` to change the default provider used when a tool call does not pass `provider`. If a tool call includes `provider`, that per-call value takes precedence.
463
+ Set `VIDEO_MCP_DEFAULT_PROVIDER=gemini`, `glm`, `qwen`, `kimi`, `mimo`, or `m3` to change the default provider used when a tool call does not pass `provider`. If a tool call includes `provider`, that per-call value takes precedence.
462
464
 
463
465
  > **ℹ️ Large local files with GLM, Qwen, or MiMo:** All three providers have a 10–12 MB base64 limit for local files. When a file exceeds this limit, the server first tries to fall back to an upload-capable provider (Gemini or Kimi) if one is available in the fallback chain. Frame-based analysis (evenly-spaced keyframes sent as images) is used only as a **last resort** when no upload-capable provider is available, or when all upload-capable providers fail at runtime — no configuration needed. For the highest quality with large local videos, set up the optional **S3 relay** (below) — GLM, Qwen, and MiMo will receive a presigned URL to the full video, bypassing the limit entirely and taking priority over both fallbacks.
464
466
 
465
467
  <details open>
466
468
  <summary><strong>Automatic S3 relay: bypass the 10 MB local file limit with GLM, Qwen, and MiMo</strong></summary>
467
469
 
468
- **GLM-4.6V**, **Qwen3.6**, and **MiMo-V2.5** all accept direct video URLs, but base64-encoding a local file caps out at **10–12 MB**. Above that limit, the server first tries to fall back to an upload-capable provider (Gemini or Kimi) if one is available, then falls back to **frame-based analysis** as a last resort. For the best results on large local videos, set `AWS_S3_BUCKET` — the server uploads the full video to S3 and passes a presigned URL to GLM, Qwen, and MiMo, bypassing the base64 limit entirely and taking priority over both fallbacks. No manual upload step needed.
470
+ **GLM-4.6V**, **Qwen3.7**, and **MiMo-V2.5** all accept direct video URLs, but base64-encoding a local file caps out at **10–12 MB**. Above that limit, the server first tries to fall back to an upload-capable provider (Gemini or Kimi) if one is available, then falls back to **frame-based analysis** as a last resort. For the best results on large local videos, set `AWS_S3_BUCKET` — the server uploads the full video to S3 and passes a presigned URL to GLM, Qwen, and MiMo, bypassing the base64 limit entirely and taking priority over both fallbacks. No manual upload step needed.
469
471
 
470
472
  #### Why S3 works
471
473
 
@@ -691,7 +693,7 @@ Set `AUDIO_MCP_DEFAULT_PROVIDER` to change the default.
691
693
  | Variable | Description | Default |
692
694
  | ---------------------------- | --------------------------------------------------------------------------------------------------------------------- | -------- |
693
695
  | `Z_AI_API_KEY` | Z.AI API key for GLM-4.6V | — |
694
- | `DASHSCOPE_API_KEY` | Alibaba Cloud API key for Qwen3.6 | — |
696
+ | `DASHSCOPE_API_KEY` | Alibaba Cloud API key for Qwen3.7 | — |
695
697
  | `MOONSHOT_API_KEY` | Moonshot AI API key for Kimi K2.6 | — |
696
698
  | `GEMINI_API_KEY` | Google API key for Gemini | — |
697
699
  | `MIMO_API_KEY` | Xiaomi MiMo API key for MiMo-V2.5 | — |
@@ -709,13 +711,13 @@ Set `AUDIO_MCP_DEFAULT_PROVIDER` to change the default.
709
711
 
710
712
  ### Audio
711
713
 
712
- | Variable | Description | Default |
713
- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
714
- | `DEEPGRAM_API_KEY` | Deepgram API key | — |
715
- | `ASSEMBLYAI_API_KEY` | AssemblyAI API key | — |
716
- | `GROQ_API_KEY` | Groq API key for Whisper transcription | — |
717
- | `AUDIO_MCP_DEFAULT_PROVIDER` | Default audio provider: `deepgram`, `assemblyai`, `groq`, or `gemini`. Falls back in that order when the selected key is missing. | `deepgram` |
718
- | `AUDIO_ENHANCE_VIDEO_ANALYSIS` | Inject audio transcripts into `analyze_video`/`summarize_video` prompts (GLM/Kimi/Qwen/MiMo). `auto` = transcribe when audio track detected; `true` = always; `false` = disabled. | `auto` |
714
+ | Variable | Description | Default |
715
+ | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
716
+ | `DEEPGRAM_API_KEY` | Deepgram API key | — |
717
+ | `ASSEMBLYAI_API_KEY` | AssemblyAI API key | — |
718
+ | `GROQ_API_KEY` | Groq API key for Whisper transcription | — |
719
+ | `AUDIO_MCP_DEFAULT_PROVIDER` | Default audio provider: `deepgram`, `assemblyai`, `groq`, or `gemini`. Falls back in that order when the selected key is missing. | `deepgram` |
720
+ | `AUDIO_ENHANCE_VIDEO_ANALYSIS` | Inject audio transcripts into `analyze_video`/`summarize_video` prompts (GLM/Kimi/Qwen/MiMo/M3). `auto` = transcribe when audio track detected; `true` = always; `false` = disabled. | `auto` |
719
721
 
720
722
  ### Media Generation (MiniMax)
721
723
 
@@ -823,6 +825,12 @@ vmcp cache clear:all --yes # skip confirmation
823
825
  | ------------------------- | ------------------------------------------------------------------------------ | ---------------- |
824
826
  | `MIMO_REQUEST_TIMEOUT_MS` | Client-side timeout (ms) for MiMo API requests. Default: `240000` (4 minutes). | `240000` (4 min) |
825
827
 
828
+ ### M3 (MiniMax-M3)
829
+
830
+ | Variable | Description | Default |
831
+ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------------- |
832
+ | `M3_REQUEST_TIMEOUT_MS` | Client-side timeout (ms) for MiniMax-M3 API requests. MiniMax-M3 is image-only (100 images per request, 10 MB per image). | `240000` (4 min) |
833
+
826
834
  ### yt-dlp (Platform Downloads)
827
835
 
828
836
  | Variable | Description | Default |
@@ -877,6 +885,7 @@ vmcp cache clear:all --yes # skip confirmation
877
885
  "QWEN_REQUEST_TIMEOUT_MS": "240000",
878
886
  "GLM_REQUEST_TIMEOUT_MS": "240000",
879
887
  "MIMO_REQUEST_TIMEOUT_MS": "240000",
888
+ "M3_REQUEST_TIMEOUT_MS": "240000",
880
889
  "VIDEO_MCP_LICENSE_KEY": "your-license-key"
881
890
  }
882
891
  }
@@ -1067,7 +1076,7 @@ Proprietary — All Rights Reserved. No part of this software may be copied, mod
1067
1076
  - [MCP SDK](https://github.com/modelcontextprotocol/typescript-sdk) by Anthropic
1068
1077
  - [Kimi K2.6](https://github.com/MoonshotAI/Kimi-K2.6) by Moonshot AI
1069
1078
  - [GLM-4.6V](https://docs.z.ai/guides/vlm/glm-4.6v) by Z.AI
1070
- - [Qwen3.6](https://bailian.console.alibabacloud.com/ap-southeast-1/) by Alibaba Cloud
1079
+ - [Qwen3.7](https://bailian.console.alibabacloud.com/ap-southeast-1/) by Alibaba Cloud
1071
1080
  - [MiMo-V2.5](https://platform.xiaomimimo.com/) by Xiaomi
1072
1081
  - [Deepgram](https://www.deepgram.com/) for audio transcription
1073
1082
  - [AssemblyAI](https://www.assemblyai.com/) for audio transcription
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.2.2";
1
+ export declare const VERSION = "1.3.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by scripts/sync-version.ts — do not edit
2
- export const VERSION = '1.2.2';
2
+ export const VERSION = '1.3.0';
3
3
  //# sourceMappingURL=version.js.map
package/dist/index.js CHANGED
@@ -88,7 +88,7 @@ async function main() {
88
88
  // Tool 2: summarize_video - Generate structured video summary
89
89
  server.registerTool('summarize_video', {
90
90
  title: 'Summarize Video',
91
- description: "Generate a structured summary of the video including overview, key scenes, and timeline. For long videos (>5 min), extracts keyframes to reduce token usage (unless using Gemini, which processes natively). Provider options: 'glm' (default), 'qwen', 'kimi', 'gemini', 'mimo'.",
91
+ description: "Generate a structured summary of the video including overview, key scenes, and timeline. For long videos (>5 min), extracts keyframes to reduce token usage (unless using Gemini, which processes natively). Provider options: 'gemini' (Gemini 3.5 Flash, default), 'glm' (GLM-4.6V), 'qwen' (Qwen3.7), 'kimi' (Kimi K2.6), 'mimo' (MiMo-V2.5), or 'm3' (MiniMax-M3).",
92
92
  inputSchema: summarizeVideoSchema,
93
93
  }, withUpdateCheck(summarizeVideoTool));
94
94
  // Tool 3: extract_frames - Extract frames from video
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * MiniMax-M3 Client
3
+ * Handles multimodal video understanding via MiniMax's Anthropic-compatible API.
4
+ *
5
+ * API Specification (Confirmed):
6
+ * - Base URL (Anthropic-compatible, recommended): https://api.minimax.io/anthropic
7
+ * - Endpoint: POST {baseURL}/v1/messages
8
+ * - Auth: x-api-key header (Anthropic-style)
9
+ * - Anthropic version: 2023-06-01
10
+ * - Model: MiniMax-M3
11
+ * - Native multimodality with 1M-token context window; explicitly built for
12
+ * "long-video understanding" via extracted JPEG frames.
13
+ * - Per-request caps inherited from Anthropic Messages vision:
14
+ * up to 100 images, 10 MB per image (base64-encoded), 8000x8000 px max.
15
+ * - Caching: $0.06/M effective cache-hit vs $0.30/M effective new input
16
+ * (5x cheaper on follow-up calls when content is the same).
17
+ */
18
+ export interface M3ClientOptions {
19
+ apiKey: string;
20
+ baseURL?: string;
21
+ }
22
+ export declare class M3Client {
23
+ private apiKey;
24
+ private baseURL;
25
+ constructor(options: M3ClientOptions);
26
+ /**
27
+ * Send a vision analysis request — array of JPEG/PNG frames + text prompt.
28
+ * Returns the model's text response (skipping `thinking` blocks).
29
+ *
30
+ * @param images Base64-encoded frames with MIME types
31
+ * @param prompt Text prompt (question, summarization, etc.)
32
+ * @param opts.maxImages Cap images per request (default 100, Anthropic 200K cap)
33
+ * @param opts.maxImageBytes Cap per-image base64 size (default 10 MB)
34
+ * @param opts.useCache Add `cache_control: { type: 'ephemeral' }` to the last
35
+ * image block to enable explicit prompt caching
36
+ */
37
+ analyzeImages(images: Array<{
38
+ data: string;
39
+ mimeType: string;
40
+ }>, prompt: string, opts?: {
41
+ maxImages?: number;
42
+ maxImageBytes?: number;
43
+ useCache?: boolean;
44
+ maxTokens?: number;
45
+ }): Promise<string>;
46
+ /** Throw if any image exceeds the per-request caps. */
47
+ private validateImagesOrThrow;
48
+ /** Convert base64 frames to Anthropic-style image content blocks. */
49
+ private buildImageBlocks;
50
+ /** Surface any API error envelope and return the model text otherwise. */
51
+ private extractErrorOrText;
52
+ /**
53
+ * Convenience wrapper for prompt caching. Equivalent to
54
+ * `analyzeImages(images, prompt, { useCache: true })`.
55
+ */
56
+ analyzeImagesCached(images: Array<{
57
+ data: string;
58
+ mimeType: string;
59
+ }>, prompt: string, opts?: {
60
+ maxImages?: number;
61
+ maxImageBytes?: number;
62
+ maxTokens?: number;
63
+ }): Promise<string>;
64
+ /** Extract the first text content block, skipping thinking/tool_use blocks. */
65
+ private extractText;
66
+ private post;
67
+ }
68
+ /**
69
+ * Create an M3Client if the API key is available.
70
+ * @param apiKey MiniMax API key (MINIMAX_API_KEY env var)
71
+ * @param baseURL Optional custom base URL
72
+ * @returns M3Client instance or null if no API key
73
+ */
74
+ export declare function createM3Client(apiKey?: string, baseURL?: string): M3Client | null;
75
+ //# sourceMappingURL=m3Client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"m3Client.d.ts","sourceRoot":"","sources":["../../src/services/m3Client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAqBH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA8CD,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,eAAe;IAKpC;;;;;;;;;;OAUG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QACJ,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;KACd,GACL,OAAO,CAAC,MAAM,CAAC;IAyBlB,uDAAuD;IACvD,OAAO,CAAC,qBAAqB;IAsB7B,qEAAqE;IACrE,OAAO,CAAC,gBAAgB;IAsBxB,0EAA0E;IAC1E,OAAO,CAAC,kBAAkB;IAmB1B;;;OAGG;IACG,mBAAmB,CACvB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QACJ,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,SAAS,CAAC,EAAE,MAAM,CAAA;KACd,GACL,OAAO,CAAC,MAAM,CAAC;IAOlB,+EAA+E;IAC/E,OAAO,CAAC,WAAW;YAgBL,IAAI;CAqDnB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,QAAQ,GAAG,IAAI,CAIjB"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * MiniMax-M3 Client
3
+ * Handles multimodal video understanding via MiniMax's Anthropic-compatible API.
4
+ *
5
+ * API Specification (Confirmed):
6
+ * - Base URL (Anthropic-compatible, recommended): https://api.minimax.io/anthropic
7
+ * - Endpoint: POST {baseURL}/v1/messages
8
+ * - Auth: x-api-key header (Anthropic-style)
9
+ * - Anthropic version: 2023-06-01
10
+ * - Model: MiniMax-M3
11
+ * - Native multimodality with 1M-token context window; explicitly built for
12
+ * "long-video understanding" via extracted JPEG frames.
13
+ * - Per-request caps inherited from Anthropic Messages vision:
14
+ * up to 100 images, 10 MB per image (base64-encoded), 8000x8000 px max.
15
+ * - Caching: $0.06/M effective cache-hit vs $0.30/M effective new input
16
+ * (5x cheaper on follow-up calls when content is the same).
17
+ */
18
+ const M3_BASE_URL = 'https://api.minimax.io/anthropic';
19
+ const M3_MODEL = 'MiniMax-M3';
20
+ /** Client-side request timeout in ms. Default: 4 min.
21
+ * Override via M3_REQUEST_TIMEOUT_MS env var (milliseconds). */
22
+ const M3_REQUEST_TIMEOUT_MS = process.env.M3_REQUEST_TIMEOUT_MS
23
+ ? Number(process.env.M3_REQUEST_TIMEOUT_MS)
24
+ : 4 * 60 * 1000;
25
+ const M3_TIMEOUT_LABEL = `${Math.round(M3_REQUEST_TIMEOUT_MS / 60000)} minutes`;
26
+ /** Anthropic-API version pinned for M3 multimodal vision support. */
27
+ const M3_ANTHROPIC_VERSION = '2023-06-01';
28
+ /** Default per-request image cap. Matches Anthropic 200K-context ceiling. */
29
+ const M3_MAX_IMAGES_DEFAULT = 100;
30
+ /** Per-image base64 size cap. Matches Anthropic vision limit. */
31
+ const M3_MAX_IMAGE_BYTES = 10 * 1024 * 1024;
32
+ export class M3Client {
33
+ apiKey;
34
+ baseURL;
35
+ constructor(options) {
36
+ this.apiKey = options.apiKey;
37
+ this.baseURL = (options.baseURL ?? M3_BASE_URL).replace(/\/+$/, '');
38
+ }
39
+ /**
40
+ * Send a vision analysis request — array of JPEG/PNG frames + text prompt.
41
+ * Returns the model's text response (skipping `thinking` blocks).
42
+ *
43
+ * @param images Base64-encoded frames with MIME types
44
+ * @param prompt Text prompt (question, summarization, etc.)
45
+ * @param opts.maxImages Cap images per request (default 100, Anthropic 200K cap)
46
+ * @param opts.maxImageBytes Cap per-image base64 size (default 10 MB)
47
+ * @param opts.useCache Add `cache_control: { type: 'ephemeral' }` to the last
48
+ * image block to enable explicit prompt caching
49
+ */
50
+ async analyzeImages(images, prompt, opts = {}) {
51
+ const maxImages = opts.maxImages ?? M3_MAX_IMAGES_DEFAULT;
52
+ const maxImageBytes = opts.maxImageBytes ?? M3_MAX_IMAGE_BYTES;
53
+ this.validateImagesOrThrow(images, maxImages, maxImageBytes);
54
+ const messages = [
55
+ {
56
+ role: 'user',
57
+ content: [
58
+ ...this.buildImageBlocks(images, opts.useCache === true),
59
+ { type: 'text', text: prompt },
60
+ ],
61
+ },
62
+ ];
63
+ const body = {
64
+ model: M3_MODEL,
65
+ max_tokens: opts.maxTokens ?? 4096,
66
+ messages,
67
+ };
68
+ const data = await this.post('/v1/messages', body);
69
+ return this.extractErrorOrText(data);
70
+ }
71
+ /** Throw if any image exceeds the per-request caps. */
72
+ validateImagesOrThrow(images, maxImages, maxImageBytes) {
73
+ if (images.length > maxImages) {
74
+ throw new Error(`M3: too many images (${images.length} > ${maxImages}). ` +
75
+ `Reduce frame count or split into multiple requests.`);
76
+ }
77
+ for (const [i, img] of images.entries()) {
78
+ if (img.data.length > maxImageBytes) {
79
+ throw new Error(`M3: image ${i} exceeds per-image base64 size limit ` +
80
+ `(${img.data.length} > ${maxImageBytes} bytes). ` +
81
+ `Re-encode at a lower resolution.`);
82
+ }
83
+ }
84
+ }
85
+ /** Convert base64 frames to Anthropic-style image content blocks. */
86
+ buildImageBlocks(images, useCache) {
87
+ return images.map((img, i) => {
88
+ const isLast = i === images.length - 1;
89
+ const block = {
90
+ type: 'image',
91
+ source: {
92
+ type: 'base64',
93
+ media_type: img.mimeType,
94
+ data: img.data,
95
+ },
96
+ };
97
+ if (useCache && isLast) {
98
+ // Cache the last image so subsequent calls on the same video are cheap
99
+ block.cache_control = { type: 'ephemeral' };
100
+ }
101
+ return block;
102
+ });
103
+ }
104
+ /** Surface any API error envelope and return the model text otherwise. */
105
+ extractErrorOrText(data) {
106
+ // MiniMax-style error envelope
107
+ if (data.base_resp?.status_code !== undefined &&
108
+ data.base_resp.status_code !== 0) {
109
+ throw new Error(`M3 API error ${data.base_resp.status_code}: ${data.base_resp.status_msg ?? 'unknown error'}`);
110
+ }
111
+ // Anthropic-style top-level error
112
+ if (data.error) {
113
+ throw new Error(`M3 API error: ${data.error.message ?? data.error.type ?? 'unknown error'}`);
114
+ }
115
+ return this.extractText(data);
116
+ }
117
+ /**
118
+ * Convenience wrapper for prompt caching. Equivalent to
119
+ * `analyzeImages(images, prompt, { useCache: true })`.
120
+ */
121
+ async analyzeImagesCached(images, prompt, opts = {}) {
122
+ return this.analyzeImages(images, prompt, {
123
+ ...opts,
124
+ useCache: true,
125
+ });
126
+ }
127
+ /** Extract the first text content block, skipping thinking/tool_use blocks. */
128
+ extractText(data) {
129
+ const blocks = data.content ?? [];
130
+ const textBlocks = blocks.filter((b) => b.type === 'text');
131
+ if (textBlocks.length === 0) {
132
+ throw new Error('M3 returned no text content');
133
+ }
134
+ return textBlocks
135
+ .map((b) => b.text ?? '')
136
+ .join('\n')
137
+ .trim();
138
+ }
139
+ // ── HTTP helpers ──────────────────────────────────────────────────────
140
+ async post(path, body) {
141
+ const url = `${this.baseURL}${path}`;
142
+ const controller = new AbortController();
143
+ const timeoutId = setTimeout(() => controller.abort(), M3_REQUEST_TIMEOUT_MS);
144
+ try {
145
+ const response = await fetch(url, {
146
+ method: 'POST',
147
+ headers: {
148
+ 'Content-Type': 'application/json',
149
+ 'x-api-key': this.apiKey,
150
+ 'anthropic-version': M3_ANTHROPIC_VERSION,
151
+ },
152
+ body: JSON.stringify(body),
153
+ signal: controller.signal,
154
+ });
155
+ const text = await response.text();
156
+ let data;
157
+ try {
158
+ data = JSON.parse(text);
159
+ }
160
+ catch (parseError) {
161
+ throw new Error(`M3 API returned non-JSON response (HTTP ${response.status}): ${text.substring(0, 200)}`, { cause: parseError });
162
+ }
163
+ if (!response.ok &&
164
+ !data.base_resp &&
165
+ !data.error) {
166
+ throw new Error(`M3 API HTTP ${response.status}: ${text.substring(0, 200)}`);
167
+ }
168
+ return data;
169
+ }
170
+ catch (error) {
171
+ if (error instanceof Error && error.name === 'AbortError') {
172
+ throw new Error(`M3 API request timed out after ${M3_TIMEOUT_LABEL}`, {
173
+ cause: error,
174
+ });
175
+ }
176
+ throw error;
177
+ }
178
+ finally {
179
+ clearTimeout(timeoutId);
180
+ }
181
+ }
182
+ }
183
+ /**
184
+ * Create an M3Client if the API key is available.
185
+ * @param apiKey MiniMax API key (MINIMAX_API_KEY env var)
186
+ * @param baseURL Optional custom base URL
187
+ * @returns M3Client instance or null if no API key
188
+ */
189
+ export function createM3Client(apiKey, baseURL) {
190
+ const key = apiKey || process.env.MINIMAX_API_KEY;
191
+ if (!key)
192
+ return null;
193
+ return new M3Client({ apiKey: key, baseURL });
194
+ }
195
+ //# sourceMappingURL=m3Client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"m3Client.js","sourceRoot":"","sources":["../../src/services/m3Client.ts"],"names":[],"mappings":"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"}
@@ -2,18 +2,19 @@
2
2
  * Provider Selection
3
3
  * Determines which AI backend to use based on user preference
4
4
  */
5
- export type VideoProvider = 'glm' | 'kimi' | 'gemini' | 'qwen' | 'mimo';
5
+ export type VideoProvider = 'glm' | 'kimi' | 'gemini' | 'qwen' | 'mimo' | 'm3';
6
6
  /**
7
7
  * Validate that the selected provider has a configured API key
8
- * @param provider - User-specified provider ('glm', 'kimi', 'gemini', 'qwen', or 'mimo')
8
+ * @param provider - User-specified provider ('glm', 'kimi', 'gemini', 'qwen', 'mimo', or 'm3')
9
9
  * @param hasKimiKey - Whether Kimi API key is available
10
10
  * @param hasGLMKey - Whether GLM API key is available
11
11
  * @param hasGeminiKey - Whether Gemini API key is available
12
12
  * @param hasQwenKey - Whether Qwen API key is available
13
13
  * @param hasMimoKey - Whether MiMo API key is available
14
+ * @param hasM3Key - Whether MiniMax-M3 API key is available
14
15
  * @returns The validated provider
15
16
  */
16
- export declare function selectProvider(provider: VideoProvider, hasKimiKey: boolean, hasGLMKey: boolean, hasGeminiKey?: boolean, hasQwenKey?: boolean, hasMimoKey?: boolean): VideoProvider;
17
+ export declare function selectProvider(provider: VideoProvider, hasKimiKey: boolean, hasGLMKey: boolean, hasGeminiKey?: boolean, hasQwenKey?: boolean, hasMimoKey?: boolean, hasM3Key?: boolean): VideoProvider;
17
18
  /**
18
19
  * Result type returned by resolveProviderWithFallback.
19
20
  * When `fallbackFrom` is set, the caller should notify the user that the
@@ -26,18 +27,19 @@ export type ProviderResult = {
26
27
  /**
27
28
  * Resolve the provider, with optional fallback behavior.
28
29
  * If the requested provider's key is missing, falls back in canonical priority
29
- * order (gemini → glm → qwen → kimimimo), skipping the requested provider and
30
- * visiting all remaining candidates. This means every starting provider can
30
+ * order (gemini → m3kimi → qwen → mimoglm), skipping the requested provider
31
+ * and visiting all remaining candidates. This means every starting provider can
31
32
  * eventually reach any other provider:
32
- * gemini → glm → qwen → kimimimo
33
- * glm → gemini → qwen → kimi → mimo
34
- * kimi → gemini → glm → qwen → mimo
35
- * qwen → gemini → glm → kimi → mimo
36
- * mimo → gemini → glm → qwen → kimi
33
+ * gemini → m3kimi → qwen → mimoglm
34
+ * glm → gemini → m3 → kimi → qwen → mimo
35
+ * kimi → gemini → m3 → qwen → mimo → glm
36
+ * qwen → gemini → m3 → kimi → mimo → glm
37
+ * mimo → gemini → m3kimi → qwen → glm
38
+ * m3 → gemini → kimi → qwen → mimo → glm
37
39
  * Returns a ProviderResult with `fallbackFrom` set if a fallback occurred.
38
40
  * Throws only when no provider API key is available at all.
39
41
  */
40
- export declare function resolveProviderWithFallback(provider: VideoProvider, hasKimiKey: boolean, hasGLMKey: boolean, hasGeminiKey?: boolean, hasQwenKey?: boolean, hasMimoKey?: boolean): ProviderResult;
42
+ export declare function resolveProviderWithFallback(provider: VideoProvider, hasKimiKey: boolean, hasGLMKey: boolean, hasGeminiKey?: boolean, hasQwenKey?: boolean, hasMimoKey?: boolean, hasM3Key?: boolean): ProviderResult;
41
43
  /**
42
44
  * Get the default provider from environment variable
43
45
  */
@@ -47,18 +49,19 @@ export declare function getDefaultProvider(): VideoProvider;
47
49
  * filtered to only those whose API keys are available.
48
50
  *
49
51
  * Fallback order: start with the requested provider, then visit remaining
50
- * providers in canonical priority order (gemini → glm → qwen → kimimimo), so
51
- * every starting provider can reach all other providers:
52
- * gemini → gemini, glm, qwen, kimi, mimo
53
- * glm → glm, gemini, qwen, kimi, mimo
54
- * kimi → kimi, gemini, glm, qwen, mimo
55
- * qwen → qwen, gemini, glm, kimi, mimo
56
- * mimo → mimo, gemini, glm, qwen, kimi
52
+ * providers in canonical priority order (gemini → m3kimi → qwen → mimoglm),
53
+ * so every starting provider can reach all other providers:
54
+ * gemini → gemini, m3, kimi, qwen, mimo, glm
55
+ * glm → glm, gemini, m3, kimi, qwen, mimo
56
+ * kimi → kimi, gemini, m3, qwen, mimo, glm
57
+ * qwen → qwen, gemini, m3, kimi, mimo, glm
58
+ * mimo → mimo, gemini, m3, kimi, qwen, glm
59
+ * m3 → m3, gemini, kimi, qwen, mimo, glm
57
60
  *
58
61
  * This is used for runtime error-based fallback: if the first provider's API call
59
62
  * throws (overloaded, timeout, 5xx, etc.), the caller retries with the next entry.
60
63
  */
61
- export declare function getRuntimeFallbackChain(provider: VideoProvider, hasKimiKey: boolean, hasGLMKey: boolean, hasGeminiKey?: boolean, hasQwenKey?: boolean, hasMimoKey?: boolean): VideoProvider[];
64
+ export declare function getRuntimeFallbackChain(provider: VideoProvider, hasKimiKey: boolean, hasGLMKey: boolean, hasGeminiKey?: boolean, hasQwenKey?: boolean, hasMimoKey?: boolean, hasM3Key?: boolean): VideoProvider[];
62
65
  /**
63
66
  * Get the maximum number of frames to extract for summarization.
64
67
  *
@@ -74,8 +77,8 @@ export declare function getMaxFrames(): number;
74
77
  * Returns the maximum number of images that can be sent in a single
75
78
  * analyzeImages() request for a given provider.
76
79
  *
77
- * Qwen3.6 and MiMo-V2.5 enforce a per-request image cap of 20.
78
- * GLM-4.6V shares the same 20-image practical limit.
80
+ * Qwen3.7, MiMo-V2.5 and GLM-4.6V enforce a per-request image cap of 20.
81
+ * M3 (MiniMax-M3) inherits Anthropic's 200K-context vision cap of 100.
79
82
  * Kimi/Gemini are upload-based and do not use multi-image requests.
80
83
  */
81
84
  export declare function getProviderImageCountLimit(provider: VideoProvider): number;
@@ -88,6 +91,8 @@ export declare function getProviderImageCountLimit(provider: VideoProvider): num
88
91
  * Qwen cap: ~10 MB (DashScope hard reject above this)
89
92
  * Kimi cap: ~80 MB (frame payload budget — base64 overhead keeps request body under 100 MB)
90
93
  * MiMo cap: ~10 MB (confirmed for mimo-v2.5)
94
+ * M3 cap: 100 MB overall request budget (image-only provider; 1M-token context,
95
+ * 10 MB per-image Anthropic cap is enforced in M3Client.analyzeImages).
91
96
  * Gemini: no base64 path — always uses the Files API
92
97
  */
93
98
  export declare function getProviderBase64SizeLimit(provider: VideoProvider): number;
@@ -105,7 +110,8 @@ export declare const KIMI_FILE_UPLOAD_LIMIT: number;
105
110
  * Returns true when at least one provider remaining in the fallback chain
106
111
  * (after `chainIndex`) can accept the given file via native upload (not
107
112
  * base64). Gemini always qualifies (2 GB Files API). Kimi qualifies when
108
- * the raw file is ≤ 100 MB.
113
+ * the raw file is ≤ 100 MB. M3 is image-only (no native upload) so it
114
+ * does not qualify — GLM/Qwen/MiMo will only defer to Gemini or Kimi.
109
115
  */
110
116
  export declare function hasUploadCapableProviderRemaining(chain: VideoProvider[], chainIndex: number, fileSizeBytes: number): boolean;
111
117
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"providerRouter.d.ts","sourceRoot":"","sources":["../../src/services/providerRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;AAEvE;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,YAAY,GAAE,OAAe,EAC7B,UAAU,GAAE,OAAe,EAC3B,UAAU,GAAE,OAAe,GAC1B,aAAa,CA4Bf;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,aAAa,CAAA;IACvB,YAAY,CAAC,EAAE,aAAa,CAAA;CAC7B,CAAA;AAWD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,YAAY,GAAE,OAAe,EAC7B,UAAU,GAAE,OAAe,EAC3B,UAAU,GAAE,OAAe,GAC1B,cAAc,CAuBhB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAYlD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,YAAY,GAAE,OAAe,EAC7B,UAAU,GAAE,OAAe,EAC3B,UAAU,GAAE,OAAe,GAC1B,aAAa,EAAE,CAgBjB;AAQD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAerC;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAK1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAM1E;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAGT;AAED,qDAAqD;AACrD,eAAO,MAAM,sBAAsB,QAAoB,CAAA;AAEvD;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,aAAa,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAOT;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAQzC"}
1
+ {"version":3,"file":"providerRouter.d.ts","sourceRoot":"","sources":["../../src/services/providerRouter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;AAE9E;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,YAAY,GAAE,OAAe,EAC7B,UAAU,GAAE,OAAe,EAC3B,UAAU,GAAE,OAAe,EAC3B,QAAQ,GAAE,OAAe,GACxB,aAAa,CA+Bf;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,aAAa,CAAA;IACvB,YAAY,CAAC,EAAE,aAAa,CAAA;CAC7B,CAAA;AAmBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,YAAY,GAAE,OAAe,EAC7B,UAAU,GAAE,OAAe,EAC3B,UAAU,GAAE,OAAe,EAC3B,QAAQ,GAAE,OAAe,GACxB,cAAc,CAwBhB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAalD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,OAAO,EAClB,YAAY,GAAE,OAAe,EAC7B,UAAU,GAAE,OAAe,EAC3B,UAAU,GAAE,OAAe,EAC3B,QAAQ,GAAE,OAAe,GACxB,aAAa,EAAE,CAiBjB;AAQD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAerC;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAM1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAO1E;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAGT;AAED,qDAAqD;AACrD,eAAO,MAAM,sBAAsB,QAAoB,CAAA;AAEvD;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,aAAa,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAOT;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAQzC"}