video-context-mcp-server 0.33.0-beta → 0.34.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 +39 -1
- package/dist/commands/cache.d.ts +41 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +355 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -318,7 +318,45 @@ The server automatically manages the cache by:
|
|
|
318
318
|
|
|
319
319
|
1. **Startup Sweep:** Removing any cache entries older than the TTL at server startup.
|
|
320
320
|
2. **LRU Eviction:** Evicting the least-recently-used video entry (all its artifacts together) when the `VIDEO_MCP_CACHE_MAX_ENTRIES` limit is reached.
|
|
321
|
-
|
|
321
|
+
|
|
322
|
+
#### Cache Management CLI
|
|
323
|
+
|
|
324
|
+
`video-context-mcp` ships with built-in cache management commands. Run them from any terminal — they complete immediately and do **not** start the MCP server.
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
# Show cache location, size, entry count, TTL, and per-entry breakdown
|
|
328
|
+
video-context-mcp cache status
|
|
329
|
+
|
|
330
|
+
# Print the cache directory path (useful for scripting)
|
|
331
|
+
video-context-mcp cache path
|
|
332
|
+
cd "$(video-context-mcp cache path)"
|
|
333
|
+
|
|
334
|
+
# Copy the entire cache tree to ./video-mcp-cache (or a custom path)
|
|
335
|
+
video-context-mcp cache copy
|
|
336
|
+
|
|
337
|
+
# macOS / Linux — absolute path
|
|
338
|
+
video-context-mcp cache copy --dest=/Users/alice/projects/cache-backup
|
|
339
|
+
video-context-mcp cache copy --dest=/tmp/cache-backup
|
|
340
|
+
|
|
341
|
+
# Windows — absolute path (both \ and / are supported)
|
|
342
|
+
video-context-mcp cache copy --dest=C:\Users\alice\projects\cache-backup
|
|
343
|
+
video-context-mcp cache copy --dest=C:/Users/alice/projects/cache-backup
|
|
344
|
+
|
|
345
|
+
# Relative path (resolved from CWD — works on all platforms)
|
|
346
|
+
video-context-mcp cache copy --dest=./backup
|
|
347
|
+
video-context-mcp cache copy --dest=../sibling/cache
|
|
348
|
+
|
|
349
|
+
# Paths with spaces — wrap the value in quotes
|
|
350
|
+
video-context-mcp cache copy --dest="/Users/alice/My Projects/cache-backup"
|
|
351
|
+
video-context-mcp cache copy --dest="C:\Users\alice\My Documents\cache-backup"
|
|
352
|
+
|
|
353
|
+
# Remove only entries older than the TTL (same as the startup sweep)
|
|
354
|
+
video-context-mcp cache clear:expired
|
|
355
|
+
|
|
356
|
+
# Delete ALL cache entries — prompts for confirmation
|
|
357
|
+
video-context-mcp cache clear:all
|
|
358
|
+
video-context-mcp cache clear:all --yes # skip confirmation
|
|
359
|
+
```
|
|
322
360
|
|
|
323
361
|
### Video Summarization
|
|
324
362
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache CLI command handlers
|
|
3
|
+
*
|
|
4
|
+
* Handles `video-context-mcp cache <action>` subcommands.
|
|
5
|
+
* Called by src/index.ts when process.argv[2] === 'cache', before the MCP
|
|
6
|
+
* server starts. Imports only Node.js stdlib + config helpers from
|
|
7
|
+
* artifactCache.ts — never loads the MCP SDK or AI clients.
|
|
8
|
+
*
|
|
9
|
+
* Subcommands:
|
|
10
|
+
* cache status — show cache location, size, entry count, TTL
|
|
11
|
+
* cache path — print cache directory path (scriptable)
|
|
12
|
+
* cache copy — copy full cache tree to ./video-mcp-cache in CWD
|
|
13
|
+
* cache copy --dest=DIR — copy to a custom destination
|
|
14
|
+
* cache clear:expired — remove only TTL-expired entries
|
|
15
|
+
* cache clear:all — delete the entire cache (--yes skips confirmation)
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Parse and dispatch a `cache` subcommand from CLI arguments.
|
|
19
|
+
* args should be process.argv sliced past the 'cache' token.
|
|
20
|
+
* Exits with code 1 on invalid subcommand.
|
|
21
|
+
*/
|
|
22
|
+
export declare function handleCacheCommand(args: string[]): Promise<void>;
|
|
23
|
+
/** Format a byte count as a human-readable string (B / KB / MB / GB). */
|
|
24
|
+
export declare function formatBytes(bytes: number): string;
|
|
25
|
+
/** Return a human-readable age string for an mtime value. */
|
|
26
|
+
export declare function getEntryAge(mtimeMs: number): string;
|
|
27
|
+
/** Recursively sum the sizes of all files under a directory. */
|
|
28
|
+
export declare function walkDirSize(dirPath: string): Promise<number>;
|
|
29
|
+
interface ArtifactCounts {
|
|
30
|
+
videos: number;
|
|
31
|
+
frames: number;
|
|
32
|
+
audios: number;
|
|
33
|
+
transcripts: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Count files in each artifact subdirectory for a per-video cache entry.
|
|
37
|
+
* videos/ and audios/ count direct files; frames/ counts recursively.
|
|
38
|
+
*/
|
|
39
|
+
export declare function countArtifacts(entryPath: string): Promise<ArtifactCounts>;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAmBH;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCtE;AA0OD,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED,gEAAgE;AAChE,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBlE;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAQzB"}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache CLI command handlers
|
|
3
|
+
*
|
|
4
|
+
* Handles `video-context-mcp cache <action>` subcommands.
|
|
5
|
+
* Called by src/index.ts when process.argv[2] === 'cache', before the MCP
|
|
6
|
+
* server starts. Imports only Node.js stdlib + config helpers from
|
|
7
|
+
* artifactCache.ts — never loads the MCP SDK or AI clients.
|
|
8
|
+
*
|
|
9
|
+
* Subcommands:
|
|
10
|
+
* cache status — show cache location, size, entry count, TTL
|
|
11
|
+
* cache path — print cache directory path (scriptable)
|
|
12
|
+
* cache copy — copy full cache tree to ./video-mcp-cache in CWD
|
|
13
|
+
* cache copy --dest=DIR — copy to a custom destination
|
|
14
|
+
* cache clear:expired — remove only TTL-expired entries
|
|
15
|
+
* cache clear:all — delete the entire cache (--yes skips confirmation)
|
|
16
|
+
*/
|
|
17
|
+
import * as fs from 'fs/promises';
|
|
18
|
+
import * as path from 'path';
|
|
19
|
+
import { tmpdir } from 'os';
|
|
20
|
+
import * as readline from 'readline';
|
|
21
|
+
import { getCacheTTLMs, getMaxCacheEntries } from '../utils/artifactCache.js';
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Constants
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
const CACHE_DIR = path.join(tmpdir(), 'video-mcp-cache');
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Public entry point
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/**
|
|
30
|
+
* Parse and dispatch a `cache` subcommand from CLI arguments.
|
|
31
|
+
* args should be process.argv sliced past the 'cache' token.
|
|
32
|
+
* Exits with code 1 on invalid subcommand.
|
|
33
|
+
*/
|
|
34
|
+
export async function handleCacheCommand(args) {
|
|
35
|
+
const sub = args[0];
|
|
36
|
+
switch (sub) {
|
|
37
|
+
case 'status':
|
|
38
|
+
await cacheStatus();
|
|
39
|
+
break;
|
|
40
|
+
case 'path':
|
|
41
|
+
await cachePath();
|
|
42
|
+
break;
|
|
43
|
+
case 'copy': {
|
|
44
|
+
const destArg = args.find((a) => a.startsWith('--dest='));
|
|
45
|
+
const dest = path.resolve(destArg
|
|
46
|
+
? destArg.slice('--dest='.length)
|
|
47
|
+
: path.join(process.cwd(), 'video-mcp-cache'));
|
|
48
|
+
await cacheCopy(dest);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case 'clear:expired':
|
|
52
|
+
await cacheClearExpired();
|
|
53
|
+
break;
|
|
54
|
+
case 'clear:all': {
|
|
55
|
+
const skipConfirm = args.includes('--yes');
|
|
56
|
+
await cacheClearAll(skipConfirm);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
default:
|
|
60
|
+
printUsage();
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Subcommand handlers
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
/** Print cache location, config, and per-entry statistics. */
|
|
68
|
+
async function cacheStatus() {
|
|
69
|
+
const ttlMs = getCacheTTLMs();
|
|
70
|
+
const maxEntries = getMaxCacheEntries();
|
|
71
|
+
const ttlLabel = ttlMs === 0 ? 'disabled' : `${Math.round(ttlMs / 60_000)} minutes`;
|
|
72
|
+
const maxLabel = maxEntries === 0 ? 'unlimited' : String(maxEntries);
|
|
73
|
+
let entries = [];
|
|
74
|
+
try {
|
|
75
|
+
const all = await fs.readdir(CACHE_DIR, { withFileTypes: true });
|
|
76
|
+
entries = all.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// cache dir doesn't exist yet
|
|
80
|
+
}
|
|
81
|
+
if (entries.length === 0) {
|
|
82
|
+
console.log(`Cache directory : ${CACHE_DIR}`);
|
|
83
|
+
console.log(`TTL : ${ttlLabel}`);
|
|
84
|
+
console.log(`Max entries : ${maxLabel}`);
|
|
85
|
+
console.log(`Entries : 0`);
|
|
86
|
+
console.log(`Total size : 0 B`);
|
|
87
|
+
console.log();
|
|
88
|
+
console.log('Cache is empty.');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const infos = await Promise.all(entries.map(async (name) => {
|
|
92
|
+
const entryPath = path.join(CACHE_DIR, name);
|
|
93
|
+
const [size, artifacts, st] = await Promise.all([
|
|
94
|
+
walkDirSize(entryPath),
|
|
95
|
+
countArtifacts(entryPath),
|
|
96
|
+
fs.stat(entryPath),
|
|
97
|
+
]);
|
|
98
|
+
return { name, size, artifacts, mtimeMs: st.mtimeMs };
|
|
99
|
+
}));
|
|
100
|
+
// Sort newest first
|
|
101
|
+
infos.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
102
|
+
const totalSize = infos.reduce((sum, e) => sum + e.size, 0);
|
|
103
|
+
console.log(`Cache directory : ${CACHE_DIR}`);
|
|
104
|
+
console.log(`TTL : ${ttlLabel}`);
|
|
105
|
+
console.log(`Max entries : ${maxLabel}`);
|
|
106
|
+
console.log(`Entries : ${infos.length}`);
|
|
107
|
+
console.log(`Total size : ${formatBytes(totalSize)}`);
|
|
108
|
+
console.log();
|
|
109
|
+
for (const info of infos) {
|
|
110
|
+
const { videos, frames, audios, transcripts } = info.artifacts;
|
|
111
|
+
const parts = [];
|
|
112
|
+
parts.push(pluralise(videos, 'video'));
|
|
113
|
+
parts.push(pluralise(frames, 'frame'));
|
|
114
|
+
parts.push(pluralise(audios, 'audio'));
|
|
115
|
+
parts.push(pluralise(transcripts, 'transcript'));
|
|
116
|
+
const age = getEntryAge(info.mtimeMs);
|
|
117
|
+
const sizePad = formatBytes(info.size).padStart(10);
|
|
118
|
+
console.log(` ${info.name} ${sizePad} ${parts.join(' · ')} (${age})`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** Print the cache directory path to stdout — designed for shell scripting. */
|
|
122
|
+
async function cachePath() {
|
|
123
|
+
console.log(CACHE_DIR);
|
|
124
|
+
}
|
|
125
|
+
/** Copy the full cache tree to a destination directory. */
|
|
126
|
+
async function cacheCopy(dest) {
|
|
127
|
+
let dirs;
|
|
128
|
+
try {
|
|
129
|
+
const all = await fs.readdir(CACHE_DIR, { withFileTypes: true });
|
|
130
|
+
dirs = all.filter((e) => e.isDirectory());
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
console.error('Error: Cache directory does not exist or is empty.');
|
|
134
|
+
process.exit(1);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (dirs.length === 0) {
|
|
138
|
+
console.error('Error: Cache is empty — nothing to copy.');
|
|
139
|
+
process.exit(1);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const totalSize = await walkDirSize(CACHE_DIR);
|
|
143
|
+
await fs.mkdir(dest, { recursive: true });
|
|
144
|
+
await fs.cp(CACHE_DIR, dest, { recursive: true });
|
|
145
|
+
console.log(`Copied ${dirs.length} entries (${formatBytes(totalSize)}) → ${dest}`);
|
|
146
|
+
}
|
|
147
|
+
/** Remove only TTL-expired cache entries with verbose output. */
|
|
148
|
+
async function cacheClearExpired() {
|
|
149
|
+
const ttlMs = getCacheTTLMs();
|
|
150
|
+
if (ttlMs === 0) {
|
|
151
|
+
console.log('Caching is disabled (VIDEO_MCP_CACHE_TTL_MINUTES=0). Nothing to prune.');
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
let entries;
|
|
155
|
+
try {
|
|
156
|
+
entries = await fs.readdir(CACHE_DIR);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
console.log('Cache directory does not exist. Nothing to prune.');
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const now = Date.now();
|
|
163
|
+
let removed = 0;
|
|
164
|
+
let freedBytes = 0;
|
|
165
|
+
for (const name of entries) {
|
|
166
|
+
const full = path.join(CACHE_DIR, name);
|
|
167
|
+
try {
|
|
168
|
+
const st = await fs.stat(full);
|
|
169
|
+
if (!st.isDirectory())
|
|
170
|
+
continue;
|
|
171
|
+
if (now - st.mtimeMs > ttlMs) {
|
|
172
|
+
const size = await walkDirSize(full);
|
|
173
|
+
await fs.rm(full, { recursive: true, force: true });
|
|
174
|
+
freedBytes += size;
|
|
175
|
+
removed++;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// best-effort
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (removed === 0) {
|
|
183
|
+
console.log('No expired entries found.');
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
console.log(`Removed ${removed} expired ${removed === 1 ? 'entry' : 'entries'} (${formatBytes(freedBytes)} freed)`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/** Delete the entire cache directory. Prompts for confirmation unless --yes. */
|
|
190
|
+
async function cacheClearAll(skipConfirm) {
|
|
191
|
+
// Check if cache exists
|
|
192
|
+
let entryCount;
|
|
193
|
+
let totalSize;
|
|
194
|
+
try {
|
|
195
|
+
const all = await fs.readdir(CACHE_DIR);
|
|
196
|
+
const dirs = (await Promise.all(all.map(async (name) => {
|
|
197
|
+
try {
|
|
198
|
+
const st = await fs.stat(path.join(CACHE_DIR, name));
|
|
199
|
+
return st.isDirectory() ? name : null;
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
}))).filter((n) => n !== null);
|
|
205
|
+
entryCount = dirs.length;
|
|
206
|
+
totalSize = await walkDirSize(CACHE_DIR);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
console.log('Cache directory does not exist. Nothing to clear.');
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (entryCount === 0) {
|
|
213
|
+
console.log('Cache is already empty.');
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (!skipConfirm) {
|
|
217
|
+
const confirmed = await confirm(`Clear all ${entryCount} cache ${entryCount === 1 ? 'entry' : 'entries'} (${formatBytes(totalSize)})? [y/N] `);
|
|
218
|
+
if (!confirmed) {
|
|
219
|
+
console.log('Aborted.');
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
await fs.rm(CACHE_DIR, { recursive: true, force: true });
|
|
224
|
+
console.log(`Cleared all cache entries (${entryCount} ${entryCount === 1 ? 'entry' : 'entries'}, ${formatBytes(totalSize)} freed)`);
|
|
225
|
+
}
|
|
226
|
+
// ---------------------------------------------------------------------------
|
|
227
|
+
// Helper: usage
|
|
228
|
+
// ---------------------------------------------------------------------------
|
|
229
|
+
function printUsage() {
|
|
230
|
+
console.error(`
|
|
231
|
+
Usage: video-context-mcp cache <command> [options]
|
|
232
|
+
|
|
233
|
+
Commands:
|
|
234
|
+
status Show cache location, size, entry count, and TTL
|
|
235
|
+
path Print cache directory path (for scripting)
|
|
236
|
+
copy [--dest=<dir>] Copy cache tree to ./video-mcp-cache or a custom destination
|
|
237
|
+
clear:expired Remove only TTL-expired entries
|
|
238
|
+
clear:all [--yes] Delete all cache entries (prompts unless --yes is passed)
|
|
239
|
+
|
|
240
|
+
Examples:
|
|
241
|
+
video-context-mcp cache status
|
|
242
|
+
video-context-mcp cache path
|
|
243
|
+
video-context-mcp cache copy --dest=/tmp/my-backup
|
|
244
|
+
video-context-mcp cache clear:expired
|
|
245
|
+
video-context-mcp cache clear:all --yes
|
|
246
|
+
cd "$(video-context-mcp cache path)"
|
|
247
|
+
`.trim());
|
|
248
|
+
}
|
|
249
|
+
// ---------------------------------------------------------------------------
|
|
250
|
+
// Helpers: formatting + filesystem
|
|
251
|
+
// ---------------------------------------------------------------------------
|
|
252
|
+
/** Format a byte count as a human-readable string (B / KB / MB / GB). */
|
|
253
|
+
export function formatBytes(bytes) {
|
|
254
|
+
if (bytes < 1024)
|
|
255
|
+
return `${bytes} B`;
|
|
256
|
+
if (bytes < 1024 * 1024)
|
|
257
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
258
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
259
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
260
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
|
|
261
|
+
}
|
|
262
|
+
/** Return a human-readable age string for an mtime value. */
|
|
263
|
+
export function getEntryAge(mtimeMs) {
|
|
264
|
+
const diffMs = Date.now() - mtimeMs;
|
|
265
|
+
const secs = Math.round(diffMs / 1000);
|
|
266
|
+
if (secs < 60)
|
|
267
|
+
return `${secs} sec ago`;
|
|
268
|
+
const mins = Math.round(secs / 60);
|
|
269
|
+
if (mins < 60)
|
|
270
|
+
return `${mins} min ago`;
|
|
271
|
+
const hrs = Math.round(mins / 60);
|
|
272
|
+
if (hrs < 24)
|
|
273
|
+
return `${hrs} hr ago`;
|
|
274
|
+
const days = Math.round(hrs / 24);
|
|
275
|
+
return `${days} day${days === 1 ? '' : 's'} ago`;
|
|
276
|
+
}
|
|
277
|
+
/** Recursively sum the sizes of all files under a directory. */
|
|
278
|
+
export async function walkDirSize(dirPath) {
|
|
279
|
+
let total = 0;
|
|
280
|
+
let entries;
|
|
281
|
+
try {
|
|
282
|
+
entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
return 0;
|
|
286
|
+
}
|
|
287
|
+
for (const entry of entries) {
|
|
288
|
+
const full = path.join(dirPath, entry.name);
|
|
289
|
+
if (entry.isDirectory()) {
|
|
290
|
+
total += await walkDirSize(full);
|
|
291
|
+
}
|
|
292
|
+
else if (entry.isFile()) {
|
|
293
|
+
try {
|
|
294
|
+
const st = await fs.stat(full);
|
|
295
|
+
total += st.size;
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
// skip
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return total;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Count files in each artifact subdirectory for a per-video cache entry.
|
|
306
|
+
* videos/ and audios/ count direct files; frames/ counts recursively.
|
|
307
|
+
*/
|
|
308
|
+
export async function countArtifacts(entryPath) {
|
|
309
|
+
const [videos, frames, audios, transcripts] = await Promise.all([
|
|
310
|
+
countFiles(path.join(entryPath, 'videos'), false),
|
|
311
|
+
countFiles(path.join(entryPath, 'frames'), true),
|
|
312
|
+
countFiles(path.join(entryPath, 'audios'), false),
|
|
313
|
+
countFiles(path.join(entryPath, 'transcripts'), false),
|
|
314
|
+
]);
|
|
315
|
+
return { videos, frames, audios, transcripts };
|
|
316
|
+
}
|
|
317
|
+
/** Count files in a directory, optionally recursively. */
|
|
318
|
+
async function countFiles(dirPath, recursive) {
|
|
319
|
+
let entries;
|
|
320
|
+
try {
|
|
321
|
+
entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return 0;
|
|
325
|
+
}
|
|
326
|
+
let count = 0;
|
|
327
|
+
for (const entry of entries) {
|
|
328
|
+
if (entry.isFile()) {
|
|
329
|
+
count++;
|
|
330
|
+
}
|
|
331
|
+
else if (entry.isDirectory() && recursive) {
|
|
332
|
+
count += await countFiles(path.join(dirPath, entry.name), true);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return count;
|
|
336
|
+
}
|
|
337
|
+
/** Return "1 video" / "3 videos" etc. */
|
|
338
|
+
function pluralise(n, noun) {
|
|
339
|
+
return `${n} ${noun}${n === 1 ? '' : 's'}`;
|
|
340
|
+
}
|
|
341
|
+
/** Prompt user for y/N confirmation. Returns true if they answer y/yes. */
|
|
342
|
+
async function confirm(question) {
|
|
343
|
+
const rl = readline.createInterface({
|
|
344
|
+
input: process.stdin,
|
|
345
|
+
output: process.stdout,
|
|
346
|
+
});
|
|
347
|
+
return new Promise((resolve) => {
|
|
348
|
+
rl.question(question, (answer) => {
|
|
349
|
+
rl.close();
|
|
350
|
+
const trimmed = answer.trim().toLowerCase();
|
|
351
|
+
resolve(trimmed === 'y' || trimmed === 'yes');
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.
|
|
1
|
+
export declare const VERSION = "0.34.0-beta";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -90,8 +90,20 @@ async function main() {
|
|
|
90
90
|
await server.connect(transport);
|
|
91
91
|
// Server is now running, listening for tool calls from Copilot
|
|
92
92
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
})
|
|
93
|
+
// Handle cache CLI subcommands — intercept before starting the MCP server
|
|
94
|
+
if (process.argv[2] === 'cache') {
|
|
95
|
+
import('./commands/cache.js')
|
|
96
|
+
.then(({ handleCacheCommand }) => handleCacheCommand(process.argv.slice(3)))
|
|
97
|
+
.then(() => process.exit(0))
|
|
98
|
+
.catch((err) => {
|
|
99
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
100
|
+
process.exit(1);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
main().catch((error) => {
|
|
105
|
+
console.error('Fatal error starting video-mcp server:', error);
|
|
106
|
+
process.exit(1);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
97
109
|
//# sourceMappingURL=index.js.map
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "video-context-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.34.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",
|