video-context-mcp-server 0.44.1-beta → 0.46.0-beta

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 (42) hide show
  1. package/README.md +28 -19
  2. package/dist/generated/version.d.ts +1 -1
  3. package/dist/generated/version.js +1 -1
  4. package/dist/index.js +4 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/services/geminiClient.d.ts +14 -0
  7. package/dist/services/geminiClient.d.ts.map +1 -1
  8. package/dist/services/geminiClient.js +22 -0
  9. package/dist/services/geminiClient.js.map +1 -1
  10. package/dist/services/glmClient.d.ts.map +1 -1
  11. package/dist/services/glmClient.js +7 -3
  12. package/dist/services/glmClient.js.map +1 -1
  13. package/dist/services/qwenClient.d.ts.map +1 -1
  14. package/dist/services/qwenClient.js +7 -3
  15. package/dist/services/qwenClient.js.map +1 -1
  16. package/dist/services/s3Relay.d.ts +17 -4
  17. package/dist/services/s3Relay.d.ts.map +1 -1
  18. package/dist/services/s3Relay.js +44 -7
  19. package/dist/services/s3Relay.js.map +1 -1
  20. package/dist/tools/analyzeVideo.d.ts.map +1 -1
  21. package/dist/tools/analyzeVideo.js +58 -28
  22. package/dist/tools/analyzeVideo.js.map +1 -1
  23. package/dist/tools/orchestrator.d.ts +2 -0
  24. package/dist/tools/orchestrator.d.ts.map +1 -1
  25. package/dist/tools/orchestrator.js +16 -6
  26. package/dist/tools/orchestrator.js.map +1 -1
  27. package/dist/tools/schemas.d.ts +8 -8
  28. package/dist/tools/searchTimestamp.d.ts.map +1 -1
  29. package/dist/tools/searchTimestamp.js +17 -4
  30. package/dist/tools/searchTimestamp.js.map +1 -1
  31. package/dist/tools/summarizeVideo.d.ts.map +1 -1
  32. package/dist/tools/summarizeVideo.js +30 -8
  33. package/dist/tools/summarizeVideo.js.map +1 -1
  34. package/dist/utils/artifactCache.d.ts +43 -0
  35. package/dist/utils/artifactCache.d.ts.map +1 -1
  36. package/dist/utils/artifactCache.js +194 -11
  37. package/dist/utils/artifactCache.js.map +1 -1
  38. package/dist/utils/videoUtils.d.ts +8 -2
  39. package/dist/utils/videoUtils.d.ts.map +1 -1
  40. package/dist/utils/videoUtils.js +22 -6
  41. package/dist/utils/videoUtils.js.map +1 -1
  42. package/package.json +1 -1
package/README.md CHANGED
@@ -288,19 +288,21 @@ When an audio key is missing or an audio API call fails at runtime, tools automa
288
288
 
289
289
  ### Video Providers
290
290
 
291
- | Feature | GLM-4.6V (default) | Gemini 3 Flash Preview | Qwen3.5 | Kimi K2.5 |
292
- | -------------- | ------------------------------------ | ---------------------------------------------- | --------------------------------- | ---------------------------------------------- |
293
- | Price | Free tier available (GLM-4.6V-Flash) | Free tier available | Free credits (1M tokens, 90 days) | $0.60 input / $3.00 output per 1M tokens |
294
- | Video formats | mp4, avi, mov, wmv, webm, m4v | mp4, mpeg, mov, avi, flv, mpg, webm, wmv, 3gpp | mp4, avi, mov, wmv, webm, m4v | mp4, mpeg, mov, avi, flv, mpg, webm, wmv, 3gpp |
295
- | Context window | 128K tokens | 1M tokens | 1M tokens | 256K tokens |
296
- | Max file size | ~12 MB (base64) | 2 GB | ~10 MB (base64) | 100 MB |
297
- | Best for | **Default** — free, no card required | Free fallback, no card (less accurate) | Free credits (card required) | Paid — broadest format support |
291
+ | Feature | GLM-4.6V (default) | Gemini 3 Flash Preview | Qwen3.5 | Kimi K2.5 |
292
+ | -------------- | ------------------------------------ | ---------------------------------------------- | ------------------------------------ | ---------------------------------------------- |
293
+ | Price | Free tier available (GLM-4.6V-Flash) | Free tier available | Free credits (1M tokens, 90 days) | $0.60 input / $3.00 output per 1M tokens |
294
+ | Video formats | mp4, avi, mov, wmv, webm, m4v | mp4, mpeg, mov, avi, flv, mpg, webm, wmv, 3gpp | mp4, avi, mov, wmv, webm, m4v | mp4, mpeg, mov, avi, flv, mpg, webm, wmv, 3gpp |
295
+ | Context window | 128K tokens | 1M tokens | 1M tokens | 256K tokens |
296
+ | Max file size | ~12 MB base64 / **unlimited w/ S3↓** | 2 GB | ~10 MB base64 / **unlimited w/ S3↓** | 100 MB |
297
+ | Best for | **Default** — free, no card required | Free fallback, no card (less accurate) | Free credits (card required) | Paid — broadest format support |
298
298
 
299
299
  **GLM-4.6V** is the default — it offers a free tier with no credit card required. **Gemini** is the second fallback — also free with no card required, though it has proven less accurate for video analysis in practice. **Qwen3.5** offers free credits (1M tokens for 90 days) but requires a credit card to sign up. **Kimi K2.5** is a paid provider with the broadest video format support.
300
300
 
301
301
  Set `VIDEO_MCP_DEFAULT_PROVIDER=gemini`, `qwen`, or `kimi` to change the default.
302
302
 
303
- <details>
303
+ > **⚠️ Recommended for local files with GLM or Qwen:** Both providers have a 10–12 MB base64 limit for local files. Without S3, large local videos will fail on GLM/Qwen and fall back to Gemini (less accurate) or Kimi (paid). **Setting up the S3 relay (one-time, free tier)** removes this limit entirely — GLM and Qwen receive a presigned URL instead of base64 data, enabling analysis of arbitrarily large local videos.
304
+
305
+ <details open>
304
306
  <summary><strong>Automatic S3 relay: bypass the 10 MB local file limit with Qwen and GLM</strong></summary>
305
307
 
306
308
  **GLM-4.6V** and **Qwen3.5** both accept direct video URLs, but base64-encoding a local file caps out at **10–12 MB**. Set `AWS_S3_BUCKET` to have the server automatically upload local videos (and platform downloads from YouTube, Bilibili, etc.) to S3 and pass a presigned URL to GLM/Qwen — no manual upload step needed.
@@ -339,7 +341,7 @@ AWS credentials are resolved automatically in this order:
339
341
 
340
342
  That's it. Every time you analyze a local video (or a YouTube/Bilibili download) with GLM or Qwen, the server uploads it to S3, uses the presigned URL, and leaves the object in the bucket for reuse.
341
343
 
342
- **Optional:** Set `AWS_S3_RELAY_CLEANUP=true` to delete all relayed objects when the MCP server session ends. Objects uploaded during a session are reused across multiple tool calls before being cleaned up at exit.
344
+ **Cleanup:** Relayed S3 objects are deleted automatically when the MCP server session ends and orphaned objects are swept at startup. Set `AWS_S3_RELAY_CLEANUP=false` to keep objects in the bucket for reuse across sessions.
343
345
 
344
346
  **Cost**: AWS S3 free tier covers 5 GB storage + 20K GET requests/month for 12 months. After the free tier, storage is roughly $0.023/GB/month.
345
347
 
@@ -384,13 +386,13 @@ Set `AUDIO_MCP_DEFAULT_PROVIDER` to change the default.
384
386
 
385
387
  ### S3 Relay
386
388
 
387
- | Variable | Description | Default |
388
- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
389
- | `AWS_S3_BUCKET` | S3 bucket name for automatic video relay. When set, local videos (and platform downloads) are uploaded to S3 and GLM/Qwen receive a presigned URL — bypassing the 10–12 MB base64 limit. | — |
390
- | `AWS_ACCESS_KEY_ID` | AWS access key ID. Required if you are not using `~/.aws/credentials` or an IAM role. | — |
391
- | `AWS_SECRET_ACCESS_KEY` | AWS secret access key. Required alongside `AWS_ACCESS_KEY_ID`. | — |
392
- | `AWS_REGION` | AWS region for the S3 bucket (e.g. `us-east-1`). Required if not set in `~/.aws/config`. | — |
393
- | `AWS_S3_RELAY_CLEANUP` | When `true`, delete all relayed S3 objects when the MCP server session ends (process exit). Default: objects are kept in the bucket for reuse across sessions. | |
389
+ | Variable | Description | Default |
390
+ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
391
+ | `AWS_S3_BUCKET` | S3 bucket name for automatic video relay. When set, local videos (and platform downloads) are uploaded to S3 and GLM/Qwen receive a presigned URL — bypassing the 10–12 MB base64 limit. | — |
392
+ | `AWS_ACCESS_KEY_ID` | AWS access key ID. Required if you are not using `~/.aws/credentials` or an IAM role. | — |
393
+ | `AWS_SECRET_ACCESS_KEY` | AWS secret access key. Required alongside `AWS_ACCESS_KEY_ID`. | — |
394
+ | `AWS_REGION` | AWS region for the S3 bucket (e.g. `us-east-1`). Required if not set in `~/.aws/config`. | — |
395
+ | `AWS_S3_RELAY_CLEANUP` | Set to `false` to keep relayed S3 objects in the bucket for reuse across sessions. Default: relayed objects are deleted when the MCP server session ends **and** orphaned objects are swept at startup. | `true` |
394
396
 
395
397
  ### Audio
396
398
 
@@ -481,9 +483,16 @@ vmcp cache clear:all --yes # skip confirmation
481
483
 
482
484
  ### Qwen
483
485
 
484
- | Variable | Description | Default |
485
- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
486
- | `QWEN_BASE_URL` | Override the DashScope API endpoint. Use for regional routing: Singapore (default), Virginia (`https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions`), or Beijing (`https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions`). | `https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions` |
486
+ | Variable | Description | Default |
487
+ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
488
+ | `QWEN_BASE_URL` | Override the DashScope API endpoint. Use for regional routing: Singapore (default), Virginia (`https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions`), or Beijing (`https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions`). | `https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions` |
489
+ | `QWEN_REQUEST_TIMEOUT_MS` | Client-side timeout (ms) for Qwen API requests. DashScope applies a server-side limit of ~5 minutes, so values above ~285000 are unlikely to help. Increase to e.g. `270000` for extra headroom on large frame payloads. | `240000` (4 min) |
490
+
491
+ ### GLM
492
+
493
+ | Variable | Description | Default |
494
+ | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
495
+ | `GLM_REQUEST_TIMEOUT_MS` | Client-side timeout (ms) for GLM API requests. Z.AI has no hard server-side streaming timeout, so raising this value (e.g. `480000` for 8 minutes) can help when analysing long videos with many frames. | `240000` (4 min) |
487
496
 
488
497
  ### yt-dlp (Platform Downloads)
489
498
 
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.44.1-beta";
1
+ export declare const VERSION = "0.46.0-beta";
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 = '0.44.1-beta';
2
+ export const VERSION = '0.46.0-beta';
3
3
  //# sourceMappingURL=version.js.map
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@ import { setLoggerServer } from './utils/logger.js';
12
12
  import { initLicenseValidation } from './utils/license.js';
13
13
  import { sweepStaleTempDirs } from './utils/tempFiles.js';
14
14
  import { sweepExpiredCacheDirs } from './utils/artifactCache.js';
15
- import { registerSessionCleanup } from './services/s3Relay.js';
15
+ import { registerSessionCleanup, sweepStaleRelayKeys, } from './services/s3Relay.js';
16
16
  import { triggerUpdateCheck, waitForUpdateCheck, wrapWithUpdateNotice, } from './utils/updateCheck.js';
17
17
  import { VERSION } from './generated/version.js';
18
18
  import { analyzeVideoSchema, summarizeVideoSchema, extractFramesSchema, searchTimestampSchema, getVideoInfoSchema, transcribeVideoSchema, } from './tools/schemas.js';
@@ -32,8 +32,10 @@ async function main() {
32
32
  });
33
33
  // Wire up the logger so tools can emit progress notifications
34
34
  setLoggerServer(server);
35
- // Register S3 relay session-end cleanup (no-op unless AWS_S3_RELAY_CLEANUP=true)
35
+ // Register S3 relay session-end cleanup (enabled by default; set AWS_S3_RELAY_CLEANUP=false to disable)
36
36
  registerSessionCleanup();
37
+ // Sweep orphaned S3 relay objects from previous sessions (skipped only when AWS_S3_RELAY_CLEANUP=false)
38
+ sweepStaleRelayKeys().catch(() => { }); // fire-and-forget
37
39
  // Clean up orphaned temp directories from previous runs that were killed mid-call
38
40
  sweepStaleTempDirs().catch(() => { }); // fire-and-forget
39
41
  // Remove expired per-video artifact directories from the persistent cache
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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"}
@@ -19,6 +19,20 @@ export declare class GeminiClient {
19
19
  * @throws Error if the file fails to process or if polling exceeds the timeout
20
20
  */
21
21
  waitForFileProcessing(name: string | undefined): Promise<void>;
22
+ /**
23
+ * Check whether a previously-uploaded file is still ACTIVE on Gemini's servers.
24
+ *
25
+ * Returns the `GeminiFile` object when the file exists and its state is
26
+ * `ACTIVE` (ready for re-use). Returns `null` when the file is not found,
27
+ * is in `FAILED` / `PROCESSING` state, or if the API call throws — so that
28
+ * the caller can safely fall back to a fresh upload without surfacing an error.
29
+ *
30
+ * Gemini files expire after 48 hours, so a cached `name` from a previous
31
+ * session may no longer be valid.
32
+ *
33
+ * @param name - The file name returned from a previous `uploadVideo()` call
34
+ */
35
+ checkFileActive(name: string): Promise<GeminiFile | null>;
22
36
  /**
23
37
  * Analyze a video using the uploaded file object
24
38
  * @param fileObject - The file object returned from uploadVideo()
@@ -1 +1 @@
1
- {"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,IAAI,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAS5D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;gBAEf,OAAO,EAAE,mBAAmB;IAMxC;;;;;OAKG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAS3E;;;;OAIG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBpE;;;;;OAKG;IACG,YAAY,CAChB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAwBlB;;;;OAIG;IACG,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAU7D;;;;;OAKG;IACG,eAAe,CACnB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAOlB;;;;;OAKG;IACG,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;IAYtE;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;CAyBnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,IAAI,CAMxD"}
1
+ {"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,IAAI,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAS5D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;gBAEf,OAAO,EAAE,mBAAmB;IAMxC;;;;;OAKG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAS3E;;;;OAIG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBpE;;;;;;;;;;;;OAYG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAS/D;;;;;OAKG;IACG,YAAY,CAChB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAwBlB;;;;OAIG;IACG,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAU7D;;;;;OAKG;IACG,eAAe,CACnB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAOlB;;;;;OAKG;IACG,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;IAYtE;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;CAyBnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,IAAI,CAMxD"}
@@ -48,6 +48,28 @@ export class GeminiClient {
48
48
  throw new Error('Video processing failed in Gemini API.');
49
49
  }
50
50
  }
51
+ /**
52
+ * Check whether a previously-uploaded file is still ACTIVE on Gemini's servers.
53
+ *
54
+ * Returns the `GeminiFile` object when the file exists and its state is
55
+ * `ACTIVE` (ready for re-use). Returns `null` when the file is not found,
56
+ * is in `FAILED` / `PROCESSING` state, or if the API call throws — so that
57
+ * the caller can safely fall back to a fresh upload without surfacing an error.
58
+ *
59
+ * Gemini files expire after 48 hours, so a cached `name` from a previous
60
+ * session may no longer be valid.
61
+ *
62
+ * @param name - The file name returned from a previous `uploadVideo()` call
63
+ */
64
+ async checkFileActive(name) {
65
+ try {
66
+ const file = await this.client.files.get({ name });
67
+ return file.state === 'ACTIVE' ? file : null;
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ }
51
73
  /**
52
74
  * Analyze a video using the uploaded file object
53
75
  * @param fileObject - The file object returned from uploadVideo()
@@ -1 +1 @@
1
- {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"glmClient.d.ts","sourceRoot":"","sources":["../../src/services/glmClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,KAAK,cAAc,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAmBrD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,gBAAgB;IAKrC;;;;;;OAMG;IACG,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAoB,EAC9B,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAsBlB;;;;;;OAMG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAoBlB;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAwBlB;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,cAAc,EAAE,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;KACf,CAAC;YA8BY,yBAAyB;IA8BvC,OAAO,CAAC,0BAA0B;YAIpB,iBAAiB;YAqCjB,qBAAqB;IAkBnC,OAAO,CAAC,sBAAsB;CAoB/B;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,GAAG,IAAI,CAMlD"}
1
+ {"version":3,"file":"glmClient.d.ts","sourceRoot":"","sources":["../../src/services/glmClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,KAAK,cAAc,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAmBrD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,gBAAgB;IAKrC;;;;;;OAMG;IACG,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAoB,EAC9B,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAsBlB;;;;;;OAMG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAoBlB;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAwBlB;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,cAAc,EAAE,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;KACf,CAAC;YA8BY,yBAAyB;IA8BvC,OAAO,CAAC,0BAA0B;YAIpB,iBAAiB;YAwCjB,qBAAqB;IAkBnC,OAAO,CAAC,sBAAsB;CAoB/B;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,GAAG,IAAI,CAMlD"}
@@ -5,8 +5,12 @@
5
5
  const GLM_BASE_URL = 'https://api.z.ai/api/paas/v4/chat/completions';
6
6
  const GLM_MODEL = 'glm-4.6v';
7
7
  const GLM_MODEL_FLASH = 'glm-4.6v-flash';
8
- /** Client-side request timeout in ms (4 min). */
9
- const GLM_REQUEST_TIMEOUT_MS = 4 * 60 * 1000;
8
+ /** Client-side request timeout in ms. Default: 4 min.
9
+ * Override via GLM_REQUEST_TIMEOUT_MS env var (milliseconds). */
10
+ const GLM_REQUEST_TIMEOUT_MS = process.env.GLM_REQUEST_TIMEOUT_MS
11
+ ? Number(process.env.GLM_REQUEST_TIMEOUT_MS)
12
+ : 4 * 60 * 1000;
13
+ const GLM_TIMEOUT_LABEL = `${Math.round(GLM_REQUEST_TIMEOUT_MS / 60000)} minutes`;
10
14
  export class GLMClient {
11
15
  apiKey;
12
16
  baseURL;
@@ -156,7 +160,7 @@ export class GLMClient {
156
160
  }
157
161
  catch (err) {
158
162
  if (err instanceof DOMException && err.name === 'TimeoutError') {
159
- throw new Error('GLM API request timed out after 4 minutes', {
163
+ throw new Error(`GLM API request timed out after ${GLM_TIMEOUT_LABEL}`, {
160
164
  cause: err,
161
165
  });
162
166
  }
@@ -1 +1 @@
1
- {"version":3,"file":"glmClient.js","sourceRoot":"","sources":["../../src/services/glmClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glmClient.js","sourceRoot":"","sources":["../../src/services/glmClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"qwenClient.d.ts","sourceRoot":"","sources":["../../src/services/qwenClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,KAAK,eAAe,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAoBrD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAK5C;;;OAGG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,MAAyB,GAC7B,OAAO,CAAC,MAAM,CAAC;IAoBlB;;;OAGG;IACG,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC;IAsBlB;;;OAGG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAwBlB;;;OAGG;IACG,mBAAmB,CACvB,OAAO,EAAE,eAAe,EAAE,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;KACf,CAAC;YAmCY,qBAAqB;YAmBrB,iBAAiB;IAqC/B,OAAO,CAAC,sBAAsB;CAoB/B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,GAAG,IAAI,CAOpD"}
1
+ {"version":3,"file":"qwenClient.d.ts","sourceRoot":"","sources":["../../src/services/qwenClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,KAAK,eAAe,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAoBrD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAK5C;;;OAGG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,MAAyB,GAC7B,OAAO,CAAC,MAAM,CAAC;IAoBlB;;;OAGG;IACG,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC;IAsBlB;;;OAGG;IACG,aAAa,CACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAwBlB;;;OAGG;IACG,mBAAmB,CACvB,OAAO,EAAE,eAAe,EAAE,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;KACf,CAAC;YAmCY,qBAAqB;YAmBrB,iBAAiB;IAwC/B,OAAO,CAAC,sBAAsB;CAoB/B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,GAAG,IAAI,CAOpD"}
@@ -7,8 +7,12 @@ const QWEN_MODEL = 'qwen3.5-plus';
7
7
  const QWEN_MODEL_FLASH = 'qwen3.5-flash';
8
8
  /** Default fps for server-side frame extraction on video URL inputs. */
9
9
  const QWEN_DEFAULT_FPS = 2.0;
10
- /** Client-side request timeout in ms (4 min). DashScope times out at ~5 min. */
11
- const QWEN_REQUEST_TIMEOUT_MS = 4 * 60 * 1000;
10
+ /** Client-side request timeout in ms. Default: 4 min (just under DashScope's ~5 min server cap).
11
+ * Override via QWEN_REQUEST_TIMEOUT_MS env var (milliseconds). */
12
+ const QWEN_REQUEST_TIMEOUT_MS = process.env.QWEN_REQUEST_TIMEOUT_MS
13
+ ? Number(process.env.QWEN_REQUEST_TIMEOUT_MS)
14
+ : 4 * 60 * 1000;
15
+ const QWEN_TIMEOUT_LABEL = `${Math.round(QWEN_REQUEST_TIMEOUT_MS / 60000)} minutes`;
12
16
  export class QwenClient {
13
17
  apiKey;
14
18
  baseURL;
@@ -149,7 +153,7 @@ export class QwenClient {
149
153
  }
150
154
  catch (err) {
151
155
  if (err instanceof DOMException && err.name === 'TimeoutError') {
152
- throw new Error('Qwen API request timed out after 4 minutes', {
156
+ throw new Error(`Qwen API request timed out after ${QWEN_TIMEOUT_LABEL}`, {
153
157
  cause: err,
154
158
  });
155
159
  }
@@ -1 +1 @@
1
- {"version":3,"file":"qwenClient.js","sourceRoot":"","sources":["../../src/services/qwenClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qwenClient.js","sourceRoot":"","sources":["../../src/services/qwenClient.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,15 @@
5
5
  * presigned GET URL is returned so GLM/Qwen can fetch the video directly —
6
6
  * bypassing the 10–12 MB base64 encode limit.
7
7
  *
8
- * Cleanup is opt-in via AWS_S3_RELAY_CLEANUP=true and runs at session end
9
- * (process exit), not per-call. All keys uploaded in the current process are
10
- * tracked in a module-level Set and deleted together when the process exits.
8
+ * Cleanup is enabled by default and runs at session end (process exit), not
9
+ * per-call. Set AWS_S3_RELAY_CLEANUP=false to keep objects in the bucket for
10
+ * reuse across sessions. All keys uploaded in the current process are tracked
11
+ * in a module-level Set and deleted together when the process exits.
11
12
  */
13
+ export declare const PRESIGNED_URL_EXPIRY_SECONDS = 3600;
12
14
  /** Returns true when AWS_S3_BUCKET is configured. */
13
15
  export declare function isS3RelayConfigured(): boolean;
14
- /** Returns true when AWS_S3_RELAY_CLEANUP=true. */
16
+ /** Returns true unless AWS_S3_RELAY_CLEANUP=false (cleanup is enabled by default). */
15
17
  export declare function isS3RelayCleanupEnabled(): boolean;
16
18
  /**
17
19
  * Uploads a local video file to S3 and returns a presigned GET URL valid for
@@ -39,6 +41,17 @@ export declare function trackRelayKey(key: string): void;
39
41
  * Errors from individual deletes are silently swallowed.
40
42
  */
41
43
  export declare function flushRelayKeys(): Promise<void>;
44
+ /**
45
+ * Lists and deletes all objects under the `video-mcp-relay/` prefix in the
46
+ * configured S3 bucket. Intended to be called once at startup to clean up
47
+ * orphaned relay objects from previous sessions that could not flush on exit
48
+ * (e.g. SIGKILL, crash, Windows `process.on('exit')` async limitation).
49
+ *
50
+ * No-op when cleanup is disabled (`AWS_S3_RELAY_CLEANUP === 'false'`) or
51
+ * when no S3 bucket is configured. Errors are silently ignored — this is
52
+ * always called as fire-and-forget.
53
+ */
54
+ export declare function sweepStaleRelayKeys(): Promise<number>;
42
55
  /**
43
56
  * Registers process exit handlers to call flushRelayKeys() at session end.
44
57
  * Idempotent — safe to call multiple times (registers only once).
@@ -1 +1 @@
1
- {"version":3,"file":"s3Relay.d.ts","sourceRoot":"","sources":["../../src/services/s3Relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0CH,qDAAqD;AACrD,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,mDAAmD;AACnD,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBvC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAKpD;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAkB7C"}
1
+ {"version":3,"file":"s3Relay.d.ts","sourceRoot":"","sources":["../../src/services/s3Relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,eAAO,MAAM,4BAA4B,OAAO,CAAA;AA2BhD,qDAAqD;AACrD,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,sFAAsF;AACtF,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBvC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAKpD;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CA+B3D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAkB7C"}
@@ -5,17 +5,18 @@
5
5
  * presigned GET URL is returned so GLM/Qwen can fetch the video directly —
6
6
  * bypassing the 10–12 MB base64 encode limit.
7
7
  *
8
- * Cleanup is opt-in via AWS_S3_RELAY_CLEANUP=true and runs at session end
9
- * (process exit), not per-call. All keys uploaded in the current process are
10
- * tracked in a module-level Set and deleted together when the process exits.
8
+ * Cleanup is enabled by default and runs at session end (process exit), not
9
+ * per-call. Set AWS_S3_RELAY_CLEANUP=false to keep objects in the bucket for
10
+ * reuse across sessions. All keys uploaded in the current process are tracked
11
+ * in a module-level Set and deleted together when the process exits.
11
12
  */
12
13
  import * as fs from 'fs/promises';
13
14
  import * as path from 'path';
14
15
  import { randomUUID } from 'crypto';
15
- import { S3Client, PutObjectCommand, DeleteObjectCommand, GetObjectCommand, } from '@aws-sdk/client-s3';
16
+ import { S3Client, PutObjectCommand, DeleteObjectCommand, GetObjectCommand, ListObjectsV2Command, } from '@aws-sdk/client-s3';
16
17
  import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
17
18
  // ── Constants ────────────────────────────────────────────────────────────────
18
- const PRESIGNED_URL_EXPIRY_SECONDS = 3600;
19
+ export const PRESIGNED_URL_EXPIRY_SECONDS = 3600;
19
20
  const S3_KEY_PREFIX = 'video-mcp-relay';
20
21
  // ── Module-level relay key tracking ─────────────────────────────────────────
21
22
  const _trackedKeys = new Set();
@@ -38,9 +39,9 @@ function createS3Client() {
38
39
  export function isS3RelayConfigured() {
39
40
  return getS3Bucket().length > 0;
40
41
  }
41
- /** Returns true when AWS_S3_RELAY_CLEANUP=true. */
42
+ /** Returns true unless AWS_S3_RELAY_CLEANUP=false (cleanup is enabled by default). */
42
43
  export function isS3RelayCleanupEnabled() {
43
- return process.env.AWS_S3_RELAY_CLEANUP === 'true';
44
+ return process.env.AWS_S3_RELAY_CLEANUP !== 'false';
44
45
  }
45
46
  /**
46
47
  * Uploads a local video file to S3 and returns a presigned GET URL valid for
@@ -92,6 +93,42 @@ export async function flushRelayKeys() {
92
93
  _trackedKeys.clear();
93
94
  await Promise.allSettled(keys.map(deleteS3Object));
94
95
  }
96
+ /**
97
+ * Lists and deletes all objects under the `video-mcp-relay/` prefix in the
98
+ * configured S3 bucket. Intended to be called once at startup to clean up
99
+ * orphaned relay objects from previous sessions that could not flush on exit
100
+ * (e.g. SIGKILL, crash, Windows `process.on('exit')` async limitation).
101
+ *
102
+ * No-op when cleanup is disabled (`AWS_S3_RELAY_CLEANUP === 'false'`) or
103
+ * when no S3 bucket is configured. Errors are silently ignored — this is
104
+ * always called as fire-and-forget.
105
+ */
106
+ export async function sweepStaleRelayKeys() {
107
+ if (!isS3RelayCleanupEnabled() || !isS3RelayConfigured())
108
+ return 0;
109
+ const bucket = getS3Bucket();
110
+ const client = createS3Client();
111
+ let deleted = 0;
112
+ let continuationToken;
113
+ do {
114
+ const resp = await client.send(new ListObjectsV2Command({
115
+ Bucket: bucket,
116
+ Prefix: S3_KEY_PREFIX + '/',
117
+ ContinuationToken: continuationToken,
118
+ }));
119
+ const keys = (resp.Contents ?? [])
120
+ .map((o) => o.Key)
121
+ .filter(Boolean);
122
+ if (keys.length > 0) {
123
+ await Promise.allSettled(keys.map((k) => deleteS3Object(k)));
124
+ deleted += keys.length;
125
+ }
126
+ continuationToken = resp.IsTruncated
127
+ ? resp.NextContinuationToken
128
+ : undefined;
129
+ } while (continuationToken);
130
+ return deleted;
131
+ }
95
132
  /**
96
133
  * Registers process exit handlers to call flushRelayKeys() at session end.
97
134
  * Idempotent — safe to call multiple times (registers only once).
@@ -1 +1 @@
1
- {"version":3,"file":"s3Relay.js","sourceRoot":"","sources":["../../src/services/s3Relay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3Relay.js","sourceRoot":"","sources":["../../src/services/s3Relay.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"analyzeVideo.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,KAAK,kBAAkB,GAAG,OAAO,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAExE,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,kBAAkB,KACzB,OAAO,CAAC,cAAc,CA6FxB,CAAA"}
1
+ {"version":3,"file":"analyzeVideo.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeVideo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,KAAK,kBAAkB,GAAG,OAAO,KAAK,EAAE,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAuDxE,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,kBAAkB,KACzB,OAAO,CAAC,cAAc,CA0ExB,CAAA"}