video-context-mcp-server 0.30.1-beta → 0.32.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.
- package/README.md +20 -0
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/downloadCache.d.ts +13 -0
- package/dist/utils/downloadCache.d.ts.map +1 -1
- package/dist/utils/downloadCache.js +52 -0
- package/dist/utils/downloadCache.js.map +1 -1
- package/dist/utils/tempFiles.d.ts +11 -3
- package/dist/utils/tempFiles.d.ts.map +1 -1
- package/dist/utils/tempFiles.js +42 -2
- package/dist/utils/tempFiles.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -295,11 +295,31 @@ Set `AUDIO_MCP_DEFAULT_PROVIDER` to change the default.
|
|
|
295
295
|
|
|
296
296
|
### Caching
|
|
297
297
|
|
|
298
|
+
Downloaded videos are cached in a persistent directory to skip re-downloading during retries or follow-up questions.
|
|
299
|
+
|
|
298
300
|
| Variable | Description | Default |
|
|
299
301
|
| ----------------------------- | -------------------------------------------------------------------------------------- | ------- |
|
|
300
302
|
| `VIDEO_MCP_CACHE_TTL_MINUTES` | How long downloaded videos are cached across tool calls (minutes). Set `0` to disable. | `30` |
|
|
301
303
|
| `VIDEO_MCP_CACHE_MAX_ENTRIES` | Max entries in the download cache. LRU eviction. Set `0` for unbounded. | `100` |
|
|
302
304
|
|
|
305
|
+
#### Cache Storage Location
|
|
306
|
+
|
|
307
|
+
The cache is stored in a `video-mcp-cache` folder within your system's temporary directory:
|
|
308
|
+
|
|
309
|
+
- **Windows:** `%TEMP%\video-mcp-cache`
|
|
310
|
+
(e.g., `C:\Users\<you>\AppData\Local\Temp\video-mcp-cache`)
|
|
311
|
+
- **macOS:** `$TMPDIR/video-mcp-cache`
|
|
312
|
+
(e.g., `/var/folders/xx/yyyy/T/video-mcp-cache`)
|
|
313
|
+
- **Linux:** `/tmp/video-mcp-cache`
|
|
314
|
+
|
|
315
|
+
#### Automatic Cleanup
|
|
316
|
+
|
|
317
|
+
The server automatically manages the cache by:
|
|
318
|
+
|
|
319
|
+
1. **Startup Sweep:** Removing any files older than the TTL at server startup.
|
|
320
|
+
2. **LRU Eviction:** Deleting the oldest files when the `VIDEO_MCP_CACHE_MAX_ENTRIES` limit is reached.
|
|
321
|
+
3. **Manual deletion:** You can safely delete the entire `video-mcp-cache` folder at any time to reclaim space.
|
|
322
|
+
|
|
303
323
|
### Video Summarization
|
|
304
324
|
|
|
305
325
|
| Variable | Description | Default |
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.32.0-beta";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,8 @@ import { getVideoInfoTool } from './tools/getVideoInfo.js';
|
|
|
10
10
|
import { transcribeVideoTool } from './tools/transcribeVideo.js';
|
|
11
11
|
import { setLoggerServer } from './utils/logger.js';
|
|
12
12
|
import { initLicenseValidation } from './utils/license.js';
|
|
13
|
+
import { sweepStaleTempDirs } from './utils/tempFiles.js';
|
|
14
|
+
import { sweepExpiredCacheFiles } from './utils/downloadCache.js';
|
|
13
15
|
import { triggerUpdateCheck, waitForUpdateCheck, wrapWithUpdateNotice, } from './utils/updateCheck.js';
|
|
14
16
|
import { VERSION } from './generated/version.js';
|
|
15
17
|
import { analyzeVideoSchema, summarizeVideoSchema, extractFramesSchema, searchTimestampSchema, getVideoInfoSchema, transcribeVideoSchema, } from './tools/schemas.js';
|
|
@@ -29,6 +31,10 @@ async function main() {
|
|
|
29
31
|
});
|
|
30
32
|
// Wire up the logger so tools can emit progress notifications
|
|
31
33
|
setLoggerServer(server);
|
|
34
|
+
// Clean up orphaned temp directories from previous runs that were killed mid-call
|
|
35
|
+
sweepStaleTempDirs().catch(() => { }); // fire-and-forget
|
|
36
|
+
// Remove expired files from the persistent video download cache
|
|
37
|
+
sweepExpiredCacheFiles().catch(() => { }); // fire-and-forget
|
|
32
38
|
// Validate the pro license (offline Ed25519 + online heartbeat if key is set)
|
|
33
39
|
await initLicenseValidation();
|
|
34
40
|
/**
|
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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"}
|
|
@@ -56,6 +56,19 @@ export declare function getCachedDownload(url: string): Promise<string | null>;
|
|
|
56
56
|
* @param filePath - Absolute path to the local file (should be inside the cache dir)
|
|
57
57
|
*/
|
|
58
58
|
export declare function registerCachedDownload(url: string, filePath: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Scans the persistent cache directory and removes any video files whose
|
|
61
|
+
* last-modified time is older than the current TTL.
|
|
62
|
+
*
|
|
63
|
+
* This is **independent of the in-memory map** so it works correctly after a
|
|
64
|
+
* server restart (when the map is empty but stale files remain on disk).
|
|
65
|
+
*
|
|
66
|
+
* Designed to be called once at server startup, fire-and-forget.
|
|
67
|
+
* Individual removal errors are silently ignored.
|
|
68
|
+
*
|
|
69
|
+
* @returns The number of files removed.
|
|
70
|
+
*/
|
|
71
|
+
export declare function sweepExpiredCacheFiles(): Promise<number>;
|
|
59
72
|
/**
|
|
60
73
|
* Returns a local file path for `url`, downloading it at most once even when
|
|
61
74
|
* multiple concurrent callers request the same URL simultaneously.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloadCache.d.ts","sourceRoot":"","sources":["../../src/utils/downloadCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA8BH;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAM3C;AAMD;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAMtD;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqB3E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI1E;AAkDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
1
|
+
{"version":3,"file":"downloadCache.d.ts","sourceRoot":"","sources":["../../src/utils/downloadCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA8BH;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAM3C;AAMD;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAMtD;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqB3E;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI1E;AAkDD;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,CAoC9D;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
|
@@ -170,6 +170,58 @@ function evictLRUEntries() {
|
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
// ---------------------------------------------------------------------------
|
|
173
|
+
// Startup sweep of expired cache files
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
/**
|
|
176
|
+
* Scans the persistent cache directory and removes any video files whose
|
|
177
|
+
* last-modified time is older than the current TTL.
|
|
178
|
+
*
|
|
179
|
+
* This is **independent of the in-memory map** so it works correctly after a
|
|
180
|
+
* server restart (when the map is empty but stale files remain on disk).
|
|
181
|
+
*
|
|
182
|
+
* Designed to be called once at server startup, fire-and-forget.
|
|
183
|
+
* Individual removal errors are silently ignored.
|
|
184
|
+
*
|
|
185
|
+
* @returns The number of files removed.
|
|
186
|
+
*/
|
|
187
|
+
export async function sweepExpiredCacheFiles() {
|
|
188
|
+
const ttl = getCacheTTLMs();
|
|
189
|
+
if (ttl === 0)
|
|
190
|
+
return 0; // caching disabled — nothing to sweep
|
|
191
|
+
let cacheDir;
|
|
192
|
+
try {
|
|
193
|
+
cacheDir = await ensureCacheDir();
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return 0;
|
|
197
|
+
}
|
|
198
|
+
let entries;
|
|
199
|
+
try {
|
|
200
|
+
entries = await fs.readdir(cacheDir);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return 0;
|
|
204
|
+
}
|
|
205
|
+
const now = Date.now();
|
|
206
|
+
let removed = 0;
|
|
207
|
+
for (const name of entries) {
|
|
208
|
+
const fullPath = path.join(cacheDir, name);
|
|
209
|
+
try {
|
|
210
|
+
const stat = await fs.stat(fullPath);
|
|
211
|
+
if (!stat.isFile())
|
|
212
|
+
continue;
|
|
213
|
+
if (now - stat.mtimeMs > ttl) {
|
|
214
|
+
await fs.unlink(fullPath);
|
|
215
|
+
removed++;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// best-effort — locked or already deleted
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return removed;
|
|
223
|
+
}
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
173
225
|
// In-flight deduplication (Promise coalescing)
|
|
174
226
|
// ---------------------------------------------------------------------------
|
|
175
227
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloadCache.js","sourceRoot":"","sources":["../../src/utils/downloadCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AASzC,oCAAoC;AACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAA;AAE3C;;;GAGG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAA;AAE3D,yDAAyD;AACzD,IAAI,aAAa,GAAkB,IAAI,CAAA;AAEvC,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE,CAAA;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,GAAG,MAAM,CAAA,CAAC,iCAAiC;IACxE,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,CAAC,CAAA,CAAC,mCAAmC;IAC9D,OAAO,OAAO,GAAG,MAAM,CAAA;AACzB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,EAAE,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE,CAAA;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAChC,IAAI,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,CAAA,CAAC,8BAA8B;IAC5D,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,CAAA,CAAC,oCAAoC;IAC9D,OAAO,MAAM,CAAA;AACf,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAA;IAClD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,aAAa,GAAG,GAAG,CAAA;IACnB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,MAAM,GAAG,GAAG,aAAa,EAAE,CAAA;IAC3B,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;QAClD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2CAA2C;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAC/B,gDAAgD;QAChD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACrB,OAAO,KAAK,CAAC,QAAQ,CAAA;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,QAAgB;IAClE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACnD,mBAAmB,EAAE,CAAA;IACrB,eAAe,EAAE,CAAA;AACnB,CAAC;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,mFAAmF;AACnF,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAA;IAC3B,IAAI,GAAG,KAAK,CAAC;QAAE,OAAM;IAErB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YAChC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACjB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACnC,iBAAiB;YACnB,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe;IACtB,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAA;IAChC,IAAI,GAAG,KAAK,CAAC;QAAE,OAAM,CAAC,eAAe;IAErC,OAAO,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;QACxB,8DAA8D;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAA;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAClC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACpB,IAAI,QAAQ,EAAE,CAAC;YACb,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACtC,iBAAiB;YACnB,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,UAAiC;IAEjC,oEAAoE;IACpE,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACxB,OAAO,UAAU,EAAE,CAAA;IACrB,CAAC;IAED,yBAAyB;IACzB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,wDAAwD;IACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACzC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,WAAW,CAAC,2CAA2C,CAAC,CAAA;QAC9D,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,mDAAmD;IACnD,MAAM,eAAe,GAAG,UAAU,EAAE;SACjC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjB,sBAAsB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACrC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACtB,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,GAAG,CAAA;IACX,CAAC,CAAC,CAAA;IAEJ,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;IAC1C,OAAO,eAAe,CAAA;AACxB,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,KAAK,CAAC,KAAK,EAAE,CAAA;IACb,aAAa,GAAG,IAAI,CAAA;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,gBAAgB,CAAC,KAAK,EAAE,CAAA;AAC1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"downloadCache.js","sourceRoot":"","sources":["../../src/utils/downloadCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Temp directory manager for frame extraction operations
|
|
3
|
-
*/
|
|
4
1
|
/**
|
|
5
2
|
* Create a temporary directory for video processing
|
|
6
3
|
* @returns Path to the created temp directory
|
|
7
4
|
*/
|
|
8
5
|
export declare function createTempDir(): Promise<string>;
|
|
6
|
+
/**
|
|
7
|
+
* Remove orphaned `video-mcp-*` temp directories left behind by previous
|
|
8
|
+
* server runs that were killed before their `finally` blocks could clean up.
|
|
9
|
+
*
|
|
10
|
+
* Skips the persistent `video-mcp-cache` directory used by the download cache.
|
|
11
|
+
* Errors on individual entries are silently ignored so a single locked file
|
|
12
|
+
* doesn't block startup.
|
|
13
|
+
*
|
|
14
|
+
* Call once at server startup (fire-and-forget is fine).
|
|
15
|
+
*/
|
|
16
|
+
export declare function sweepStaleTempDirs(): Promise<number>;
|
|
9
17
|
/**
|
|
10
18
|
* Clean up a temporary directory
|
|
11
19
|
* @param dirPath - Path to the temp directory to clean up
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tempFiles.d.ts","sourceRoot":"","sources":["../../src/utils/tempFiles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tempFiles.d.ts","sourceRoot":"","sources":["../../src/utils/tempFiles.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAErD;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CA0B1D;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI9D"}
|
package/dist/utils/tempFiles.js
CHANGED
|
@@ -1,15 +1,55 @@
|
|
|
1
1
|
import * as path from 'path';
|
|
2
|
-
import { mkdtemp, rm } from 'fs/promises';
|
|
2
|
+
import { mkdtemp, readdir, rm, stat } from 'fs/promises';
|
|
3
3
|
import { tmpdir } from 'os';
|
|
4
4
|
/**
|
|
5
5
|
* Temp directory manager for frame extraction operations
|
|
6
6
|
*/
|
|
7
|
+
/** Prefix used for per-call temp directories (e.g. "video-mcp-Ab3xYz") */
|
|
8
|
+
const TEMP_PREFIX = 'video-mcp-';
|
|
9
|
+
/** Persistent cache directory name — must NOT be swept */
|
|
10
|
+
const CACHE_DIR_NAME = 'video-mcp-cache';
|
|
7
11
|
/**
|
|
8
12
|
* Create a temporary directory for video processing
|
|
9
13
|
* @returns Path to the created temp directory
|
|
10
14
|
*/
|
|
11
15
|
export async function createTempDir() {
|
|
12
|
-
return await mkdtemp(path.join(tmpdir(),
|
|
16
|
+
return await mkdtemp(path.join(tmpdir(), TEMP_PREFIX));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Remove orphaned `video-mcp-*` temp directories left behind by previous
|
|
20
|
+
* server runs that were killed before their `finally` blocks could clean up.
|
|
21
|
+
*
|
|
22
|
+
* Skips the persistent `video-mcp-cache` directory used by the download cache.
|
|
23
|
+
* Errors on individual entries are silently ignored so a single locked file
|
|
24
|
+
* doesn't block startup.
|
|
25
|
+
*
|
|
26
|
+
* Call once at server startup (fire-and-forget is fine).
|
|
27
|
+
*/
|
|
28
|
+
export async function sweepStaleTempDirs() {
|
|
29
|
+
const base = tmpdir();
|
|
30
|
+
let entries;
|
|
31
|
+
try {
|
|
32
|
+
entries = await readdir(base);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return 0; // Can't read tmpdir — nothing to sweep
|
|
36
|
+
}
|
|
37
|
+
const candidates = entries.filter((name) => name.startsWith(TEMP_PREFIX) && name !== CACHE_DIR_NAME);
|
|
38
|
+
let removed = 0;
|
|
39
|
+
for (const name of candidates) {
|
|
40
|
+
const fullPath = path.join(base, name);
|
|
41
|
+
try {
|
|
42
|
+
const st = await stat(fullPath);
|
|
43
|
+
if (!st.isDirectory())
|
|
44
|
+
continue;
|
|
45
|
+
await rm(fullPath, { recursive: true, force: true });
|
|
46
|
+
removed++;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Locked or already gone — skip
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return removed;
|
|
13
53
|
}
|
|
14
54
|
/**
|
|
15
55
|
* Clean up a temporary directory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tempFiles.js","sourceRoot":"","sources":["../../src/utils/tempFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"tempFiles.js","sourceRoot":"","sources":["../../src/utils/tempFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAE3B;;GAEG;AAEH,0EAA0E;AAC1E,MAAM,WAAW,GAAG,YAAY,CAAA;AAEhC,0DAA0D;AAC1D,MAAM,cAAc,GAAG,iBAAiB,CAAA;AAExC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAA;IACrB,IAAI,OAAiB,CAAA;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAA,CAAC,uCAAuC;IAClD,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,KAAK,cAAc,CAClE,CAAA;IAED,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC/B,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;gBAAE,SAAQ;YAC/B,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACpD,OAAO,EAAE,CAAA;QACX,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACzD,OAAO,GAAG,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE,CAAA;AAC7C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "video-context-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0-beta",
|
|
4
4
|
"description": "A Model Context Protocol server that gives GitHub Copilot the ability to understand and analyze video content",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|