video-context-mcp-server 0.29.1-beta → 0.30.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.
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.29.1-beta";
1
+ export declare const VERSION = "0.30.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.29.1-beta';
2
+ export const VERSION = '0.30.0-beta';
3
3
  //# sourceMappingURL=version.js.map
package/dist/index.js CHANGED
@@ -34,7 +34,7 @@ async function main() {
34
34
  /**
35
35
  * Wrap a tool handler to:
36
36
  * 1. Trigger the background update-check on the first call (fire-and-forget)
37
- * 2. Prepend any pending update notice to the response (single-shot)
37
+ * 2. Insert any pending update notice as the first content item (single-shot)
38
38
  */
39
39
  const withUpdateCheck = (handler) => async (params) => {
40
40
  triggerUpdateCheck();
@@ -15,6 +15,7 @@ export declare class GeminiClient {
15
15
  /**
16
16
  * Wait for a file to finish processing
17
17
  * @param name - The file name returned from uploadVideo()
18
+ * @throws Error if the file fails to process or if polling exceeds the timeout
18
19
  */
19
20
  waitForFileProcessing(name: string | undefined): Promise<void>;
20
21
  /**
@@ -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;AASpE,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;;;OAGG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;;;;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,MAAM,CAAC;IAO9D;;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;AASpE,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,MAAM,CAAC;IAO9D;;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"}
@@ -27,14 +27,22 @@ export class GeminiClient {
27
27
  /**
28
28
  * Wait for a file to finish processing
29
29
  * @param name - The file name returned from uploadVideo()
30
+ * @throws Error if the file fails to process or if polling exceeds the timeout
30
31
  */
31
32
  async waitForFileProcessing(name) {
32
33
  if (!name)
33
34
  throw new Error('File upload did not return a name.');
35
+ const MAX_POLL_ATTEMPTS = 300; // 300 × 2 s = 10 minutes
34
36
  let file = await this.client.files.get({ name });
37
+ let attempts = 0;
35
38
  while (file.state === 'PROCESSING') {
39
+ if (attempts >= MAX_POLL_ATTEMPTS) {
40
+ throw new Error(`Gemini file processing timed out after ${MAX_POLL_ATTEMPTS * 2} seconds. ` +
41
+ 'The file may still be processing. Please try again later.');
42
+ }
36
43
  await new Promise((resolve) => setTimeout(resolve, 2000));
37
44
  file = await this.client.files.get({ name });
45
+ attempts++;
38
46
  }
39
47
  if (file.state === 'FAILED') {
40
48
  throw new Error('Video processing failed in Gemini API.');
@@ -1 +1 @@
1
- {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2B,MAAM,eAAe,CAAA;AAEpE;;;GAGG;AAEH,MAAM,YAAY,GAAG,wBAAwB,CAAA;AAM7C,MAAM,OAAO,YAAY;IACf,MAAM,CAAa;IAE3B,YAAY,OAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,QAAiB;QACnD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YAChD,IAAI,EAAE,QAAQ;YACd,GAAG,CAAC,QAAQ,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC;SAC1C,CAAC,CAAA;QAEF,OAAO,UAAU,CAAA;IACnB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,qBAAqB,CAAC,IAAwB;QAClD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAChE,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QAChD,OAAO,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;YACzD,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAChB,UAAsB,EACtB,QAAgB;QAEhB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;YACxD,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE;wBACL;4BACE,QAAQ,EAAE;gCACR,OAAO,EAAE,UAAU,CAAC,GAAG;gCACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;6BAC9B;yBACF;wBACD;4BACE,IAAI,EAAE,QAAQ;yBACf;qBACF;iBACF;aACF;SACF,CAAC,CAAA;QAEF,OAAO,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAA;IAC5B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,UAAsB;QACzC,MAAM,MAAM,GAAG;;;;0CAIuB,CAAA;QAEtC,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC9C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CACnB,UAAsB,EACtB,KAAa;QAEb,MAAM,MAAM,GAAG,yEAAyE,KAAK;sIACqC,CAAA;QAElI,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC9C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,UAAsB;QAC1C,MAAM,MAAM,GACV,8EAA8E;YAC9E,+GAA+G,CAAA;QACjH,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,MAAiD,EACjD,MAAc;QAEd,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,UAAU,EAAE;gBACV,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB;SACF,CAAC,CAAC,CAAA;QAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;YACxD,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE;wBACL,GAAG,UAAU;wBACb;4BACE,IAAI,EAAE,MAAM;yBACb;qBACF;iBACF;aACF;SACF,CAAC,CAAA;QAEF,OAAO,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAA;IAC5B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AACrC,CAAC"}
1
+ {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/services/geminiClient.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * On the first tool call, spawns `npm outdated -g video-context-mcp-server --json`
5
5
  * as a fire-and-forget background process. If an update is available, stores a
6
- * one-line notice that is prepended to the next tool call response (single-shot).
6
+ * one-line notice that is appended to the next tool call response (single-shot).
7
7
  *
8
8
  * When running via npx, the package is not globally installed, so
9
9
  * `npm outdated -g` returns `{}` — no special npx detection is needed.
@@ -35,14 +35,15 @@ export declare function waitForUpdateCheck(timeoutMs?: number): Promise<void>;
35
35
  */
36
36
  export declare function getUpdateNotice(): string | null;
37
37
  /**
38
- * If an update notice is stored, prepend it to the tool result's content
39
- * array and clear the stored notice (single-shot — appears only once per session).
38
+ * If an update notice is stored, insert it as the **first** content item and
39
+ * clear the stored notice (single-shot — appears only once per session).
40
40
  * Returns the result unchanged when no notice is available.
41
41
  *
42
- * The notice is appended to the **last** text content item so that the LLM
43
- * (which processes tool results in VS Code Copilot Chat) treats it as part of
44
- * the response and relays it to the user. A separate content item would be
45
- * silently ignored by the LLM.
42
+ * The notice is inserted at index 0 with explicit "Please inform the user"
43
+ * framing so the LLM (which processes tool results in VS Code Copilot Chat)
44
+ * encounters it first and is reliably prompted to relay it to the user.
45
+ * `logProgress` is also called as a backup so the notice appears in the
46
+ * VS Code Output panel even if the LLM skips it.
46
47
  */
47
48
  export declare function wrapWithUpdateNotice(result: CallToolResult): CallToolResult;
48
49
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"updateCheck.d.ts","sourceRoot":"","sources":["../../src/utils/updateCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAUxE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAuCzC;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAqB3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
1
+ {"version":3,"file":"updateCheck.d.ts","sourceRoot":"","sources":["../../src/utils/updateCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAUxE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAuCzC;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAc3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
@@ -3,13 +3,13 @@
3
3
  *
4
4
  * On the first tool call, spawns `npm outdated -g video-context-mcp-server --json`
5
5
  * as a fire-and-forget background process. If an update is available, stores a
6
- * one-line notice that is prepended to the next tool call response (single-shot).
6
+ * one-line notice that is appended to the next tool call response (single-shot).
7
7
  *
8
8
  * When running via npx, the package is not globally installed, so
9
9
  * `npm outdated -g` returns `{}` — no special npx detection is needed.
10
10
  */
11
11
  import { exec } from 'node:child_process';
12
- import { logWarning } from './logger.js';
12
+ import { logProgress, logWarning } from './logger.js';
13
13
  const PACKAGE_NAME = 'video-context-mcp-server';
14
14
  const TIMEOUT_MS = 15_000;
15
15
  let _checkTriggered = false;
@@ -83,35 +83,28 @@ export function getUpdateNotice() {
83
83
  return _updateNotice;
84
84
  }
85
85
  /**
86
- * If an update notice is stored, prepend it to the tool result's content
87
- * array and clear the stored notice (single-shot — appears only once per session).
86
+ * If an update notice is stored, insert it as the **first** content item and
87
+ * clear the stored notice (single-shot — appears only once per session).
88
88
  * Returns the result unchanged when no notice is available.
89
89
  *
90
- * The notice is appended to the **last** text content item so that the LLM
91
- * (which processes tool results in VS Code Copilot Chat) treats it as part of
92
- * the response and relays it to the user. A separate content item would be
93
- * silently ignored by the LLM.
90
+ * The notice is inserted at index 0 with explicit "Please inform the user"
91
+ * framing so the LLM (which processes tool results in VS Code Copilot Chat)
92
+ * encounters it first and is reliably prompted to relay it to the user.
93
+ * `logProgress` is also called as a backup so the notice appears in the
94
+ * VS Code Output panel even if the LLM skips it.
94
95
  */
95
96
  export function wrapWithUpdateNotice(result) {
96
97
  const notice = _updateNotice;
97
98
  if (!notice)
98
99
  return result;
99
100
  _updateNotice = null;
100
- const content = [...result.content];
101
- // Find the last text content item and append the notice to it
102
- let appended = false;
103
- for (let i = content.length - 1; i >= 0; i--) {
104
- const item = content[i];
105
- if (item.type === 'text') {
106
- content[i] = { ...item, text: item.text + '\n\n---\n\n' + notice };
107
- appended = true;
108
- break;
109
- }
110
- }
111
- if (!appended) {
112
- content.push({ type: 'text', text: notice });
113
- }
114
- return { ...result, content };
101
+ // Fire-and-forget backup channel via the VS Code Output panel
102
+ void logProgress(`[video-mcp] ${notice}`);
103
+ const noticeItem = {
104
+ type: 'text',
105
+ text: `⚠️ Please inform the user about this update:\n\n${notice}`,
106
+ };
107
+ return { ...result, content: [noticeItem, ...result.content] };
115
108
  }
116
109
  /**
117
110
  * Reset all module-level state.
@@ -1 +1 @@
1
- {"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/utils/updateCheck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updateCheck.js","sourceRoot":"","sources":["../../src/utils/updateCheck.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.29.1-beta",
3
+ "version": "0.30.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",