@pan-sec/notebooklm-mcp 1.6.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/events/event-emitter.d.ts +45 -0
- package/dist/events/event-emitter.d.ts.map +1 -0
- package/dist/events/event-emitter.js +100 -0
- package/dist/events/event-emitter.js.map +1 -0
- package/dist/events/event-types.d.ts +124 -0
- package/dist/events/event-types.d.ts.map +1 -0
- package/dist/events/event-types.js +18 -0
- package/dist/events/event-types.js.map +1 -0
- package/dist/gemini/gemini-client.d.ts +45 -0
- package/dist/gemini/gemini-client.d.ts.map +1 -0
- package/dist/gemini/gemini-client.js +211 -0
- package/dist/gemini/gemini-client.js.map +1 -0
- package/dist/gemini/index.d.ts +8 -0
- package/dist/gemini/index.d.ts.map +1 -0
- package/dist/gemini/index.js +8 -0
- package/dist/gemini/index.js.map +1 -0
- package/dist/gemini/types.d.ts +136 -0
- package/dist/gemini/types.d.ts.map +1 -0
- package/dist/gemini/types.js +10 -0
- package/dist/gemini/types.js.map +1 -0
- package/dist/index.js +76 -3
- package/dist/index.js.map +1 -1
- package/dist/library/notebook-library.d.ts +25 -2
- package/dist/library/notebook-library.d.ts.map +1 -1
- package/dist/library/notebook-library.js +142 -2
- package/dist/library/notebook-library.js.map +1 -1
- package/dist/library/types.d.ts +15 -0
- package/dist/library/types.d.ts.map +1 -1
- package/dist/notebook-creation/audio-manager.d.ts +56 -0
- package/dist/notebook-creation/audio-manager.d.ts.map +1 -0
- package/dist/notebook-creation/audio-manager.js +335 -0
- package/dist/notebook-creation/audio-manager.js.map +1 -0
- package/dist/notebook-creation/discover-creation-flow.d.ts +8 -0
- package/dist/notebook-creation/discover-creation-flow.d.ts.map +1 -0
- package/dist/notebook-creation/discover-creation-flow.js +177 -0
- package/dist/notebook-creation/discover-creation-flow.js.map +1 -0
- package/dist/notebook-creation/discover-quota.d.ts +8 -0
- package/dist/notebook-creation/discover-quota.d.ts.map +1 -0
- package/dist/notebook-creation/discover-quota.js +195 -0
- package/dist/notebook-creation/discover-quota.js.map +1 -0
- package/dist/notebook-creation/discover-source-dialog.d.ts +8 -0
- package/dist/notebook-creation/discover-source-dialog.d.ts.map +1 -0
- package/dist/notebook-creation/discover-source-dialog.js +134 -0
- package/dist/notebook-creation/discover-source-dialog.js.map +1 -0
- package/dist/notebook-creation/discover-sources.d.ts +8 -0
- package/dist/notebook-creation/discover-sources.d.ts.map +1 -0
- package/dist/notebook-creation/discover-sources.js +273 -0
- package/dist/notebook-creation/discover-sources.js.map +1 -0
- package/dist/notebook-creation/discover-text-input.d.ts +7 -0
- package/dist/notebook-creation/discover-text-input.d.ts.map +1 -0
- package/dist/notebook-creation/discover-text-input.js +135 -0
- package/dist/notebook-creation/discover-text-input.js.map +1 -0
- package/dist/notebook-creation/index.d.ts +12 -0
- package/dist/notebook-creation/index.d.ts.map +1 -0
- package/dist/notebook-creation/index.js +12 -0
- package/dist/notebook-creation/index.js.map +1 -0
- package/dist/notebook-creation/notebook-creator.d.ts +95 -0
- package/dist/notebook-creation/notebook-creator.d.ts.map +1 -0
- package/dist/notebook-creation/notebook-creator.js +689 -0
- package/dist/notebook-creation/notebook-creator.js.map +1 -0
- package/dist/notebook-creation/notebook-sync.d.ts +93 -0
- package/dist/notebook-creation/notebook-sync.d.ts.map +1 -0
- package/dist/notebook-creation/notebook-sync.js +370 -0
- package/dist/notebook-creation/notebook-sync.js.map +1 -0
- package/dist/notebook-creation/run-discovery.d.ts +11 -0
- package/dist/notebook-creation/run-discovery.d.ts.map +1 -0
- package/dist/notebook-creation/run-discovery.js +151 -0
- package/dist/notebook-creation/run-discovery.js.map +1 -0
- package/dist/notebook-creation/selector-discovery.d.ts +65 -0
- package/dist/notebook-creation/selector-discovery.d.ts.map +1 -0
- package/dist/notebook-creation/selector-discovery.js +421 -0
- package/dist/notebook-creation/selector-discovery.js.map +1 -0
- package/dist/notebook-creation/selectors.d.ts +150 -0
- package/dist/notebook-creation/selectors.d.ts.map +1 -0
- package/dist/notebook-creation/selectors.js +225 -0
- package/dist/notebook-creation/selectors.js.map +1 -0
- package/dist/notebook-creation/source-manager.d.ts +73 -0
- package/dist/notebook-creation/source-manager.d.ts.map +1 -0
- package/dist/notebook-creation/source-manager.js +486 -0
- package/dist/notebook-creation/source-manager.js.map +1 -0
- package/dist/notebook-creation/test-create.d.ts +8 -0
- package/dist/notebook-creation/test-create.d.ts.map +1 -0
- package/dist/notebook-creation/test-create.js +72 -0
- package/dist/notebook-creation/test-create.js.map +1 -0
- package/dist/notebook-creation/types.d.ts +173 -0
- package/dist/notebook-creation/types.d.ts.map +1 -0
- package/dist/notebook-creation/types.js +5 -0
- package/dist/notebook-creation/types.js.map +1 -0
- package/dist/quota/index.d.ts +8 -0
- package/dist/quota/index.d.ts.map +1 -0
- package/dist/quota/index.js +8 -0
- package/dist/quota/index.js.map +1 -0
- package/dist/quota/quota-manager.d.ts +125 -0
- package/dist/quota/quota-manager.d.ts.map +1 -0
- package/dist/quota/quota-manager.js +330 -0
- package/dist/quota/quota-manager.js.map +1 -0
- package/dist/session/session-manager.d.ts +5 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +6 -0
- package/dist/session/session-manager.js.map +1 -1
- package/dist/tools/definitions/gemini.d.ts +12 -0
- package/dist/tools/definitions/gemini.d.ts.map +1 -0
- package/dist/tools/definitions/gemini.js +135 -0
- package/dist/tools/definitions/gemini.js.map +1 -0
- package/dist/tools/definitions/notebook-management.d.ts.map +1 -1
- package/dist/tools/definitions/notebook-management.js +525 -0
- package/dist/tools/definitions/notebook-management.js.map +1 -1
- package/dist/tools/definitions/system.d.ts.map +1 -1
- package/dist/tools/definitions/system.js +158 -0
- package/dist/tools/definitions/system.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +2 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/handlers.d.ts +257 -0
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +1097 -0
- package/dist/tools/handlers.js.map +1 -1
- package/dist/webhooks/index.d.ts +8 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +8 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/types.d.ts +57 -0
- package/dist/webhooks/types.d.ts.map +1 -0
- package/dist/webhooks/types.js +5 -0
- package/dist/webhooks/types.js.map +1 -0
- package/dist/webhooks/webhook-dispatcher.d.ts +120 -0
- package/dist/webhooks/webhook-dispatcher.d.ts.map +1 -0
- package/dist/webhooks/webhook-dispatcher.js +519 -0
- package/dist/webhooks/webhook-dispatcher.js.map +1 -0
- package/package.json +2 -1
package/dist/config.d.ts
CHANGED
|
@@ -50,6 +50,10 @@ export interface Config {
|
|
|
50
50
|
cleanupInstancesOnShutdown: boolean;
|
|
51
51
|
instanceProfileTtlHours: number;
|
|
52
52
|
instanceProfileMaxCount: number;
|
|
53
|
+
geminiApiKey: string | null;
|
|
54
|
+
geminiDefaultModel: string;
|
|
55
|
+
geminiDeepResearchEnabled: boolean;
|
|
56
|
+
geminiTimeoutMs: number;
|
|
53
57
|
}
|
|
54
58
|
/**
|
|
55
59
|
* Global configuration instance
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,mJACkH,CAAC;AAEnJ,MAAM,WAAW,MAAM;IAErB,WAAW,EAAE,MAAM,CAAC;IAGpB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAG5C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAGvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAG3B,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAGnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAG3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAG3B,eAAe,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChD,sBAAsB,EAAE,OAAO,CAAC;IAChC,yBAAyB,EAAE,OAAO,CAAC;IACnC,0BAA0B,EAAE,OAAO,CAAC;IACpC,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,mJACkH,CAAC;AAEnJ,MAAM,WAAW,MAAM;IAErB,WAAW,EAAE,MAAM,CAAC;IAGpB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAG5C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAGvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAG3B,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAGnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAG3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAG3B,eAAe,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChD,sBAAsB,EAAE,OAAO,CAAC;IAChC,yBAAyB,EAAE,OAAO,CAAC;IACnC,0BAA0B,EAAE,OAAO,CAAC;IACpC,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAGhC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yBAAyB,EAAE,OAAO,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;CACzB;AA+ID;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAAsB,CAAC;AAE5C;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAaxC;AAGD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,CAAC,EAAE,cAAc,EACxB,iBAAiB,CAAC,EAAE,OAAO,GAC1B,MAAM,CAuCR"}
|
package/dist/config.js
CHANGED
|
@@ -68,6 +68,11 @@ const DEFAULTS = {
|
|
|
68
68
|
cleanupInstancesOnShutdown: true,
|
|
69
69
|
instanceProfileTtlHours: 72,
|
|
70
70
|
instanceProfileMaxCount: 20,
|
|
71
|
+
// Gemini API defaults
|
|
72
|
+
geminiApiKey: null,
|
|
73
|
+
geminiDefaultModel: "gemini-2.5-flash",
|
|
74
|
+
geminiDeepResearchEnabled: true,
|
|
75
|
+
geminiTimeoutMs: 30000,
|
|
71
76
|
};
|
|
72
77
|
/**
|
|
73
78
|
* Parse boolean from string (for env vars)
|
|
@@ -133,6 +138,11 @@ function applyEnvOverrides(config) {
|
|
|
133
138
|
cleanupInstancesOnShutdown: parseBoolean(process.env.NOTEBOOK_CLEANUP_ON_SHUTDOWN, config.cleanupInstancesOnShutdown),
|
|
134
139
|
instanceProfileTtlHours: parseInteger(process.env.NOTEBOOK_INSTANCE_TTL_HOURS, config.instanceProfileTtlHours),
|
|
135
140
|
instanceProfileMaxCount: parseInteger(process.env.NOTEBOOK_INSTANCE_MAX_COUNT, config.instanceProfileMaxCount),
|
|
141
|
+
// Gemini API
|
|
142
|
+
geminiApiKey: process.env.GEMINI_API_KEY || config.geminiApiKey,
|
|
143
|
+
geminiDefaultModel: process.env.GEMINI_DEFAULT_MODEL || config.geminiDefaultModel,
|
|
144
|
+
geminiDeepResearchEnabled: parseBoolean(process.env.GEMINI_DEEP_RESEARCH_ENABLED, config.geminiDeepResearchEnabled),
|
|
145
|
+
geminiTimeoutMs: parseInteger(process.env.GEMINI_TIMEOUT_MS, config.geminiTimeoutMs),
|
|
136
146
|
};
|
|
137
147
|
}
|
|
138
148
|
/**
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,6DAA6D;AAC7D,wCAAwC;AACxC,uDAAuD;AACvD,qCAAqC;AACrC,qFAAqF;AACrF,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC;AAEvD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,gJAAgJ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Emitter for NotebookLM MCP
|
|
3
|
+
*
|
|
4
|
+
* Central event bus for system-wide events.
|
|
5
|
+
* Events can trigger webhook notifications, logging, or other actions.
|
|
6
|
+
*/
|
|
7
|
+
import type { SystemEvent, EventType } from "./event-types.js";
|
|
8
|
+
export type EventHandler = (event: SystemEvent) => void | Promise<void>;
|
|
9
|
+
declare class EventEmitter {
|
|
10
|
+
private handlers;
|
|
11
|
+
private eventHistory;
|
|
12
|
+
private maxHistorySize;
|
|
13
|
+
/**
|
|
14
|
+
* Subscribe to an event type
|
|
15
|
+
*/
|
|
16
|
+
on(eventType: EventType | "*", handler: EventHandler): () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Subscribe to an event type (one-time only)
|
|
19
|
+
*/
|
|
20
|
+
once(eventType: EventType | "*", handler: EventHandler): () => void;
|
|
21
|
+
/**
|
|
22
|
+
* Emit an event
|
|
23
|
+
*/
|
|
24
|
+
emit(event: SystemEvent): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Get recent events
|
|
27
|
+
*/
|
|
28
|
+
getHistory(limit?: number): SystemEvent[];
|
|
29
|
+
/**
|
|
30
|
+
* Get events by type
|
|
31
|
+
*/
|
|
32
|
+
getEventsByType(eventType: EventType, limit?: number): SystemEvent[];
|
|
33
|
+
/**
|
|
34
|
+
* Clear event history
|
|
35
|
+
*/
|
|
36
|
+
clearHistory(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get handler count for debugging
|
|
39
|
+
*/
|
|
40
|
+
getHandlerCount(): Record<string, number>;
|
|
41
|
+
}
|
|
42
|
+
declare const eventEmitter: EventEmitter;
|
|
43
|
+
export { eventEmitter };
|
|
44
|
+
export default eventEmitter;
|
|
45
|
+
//# sourceMappingURL=event-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAExE,cAAM,YAAY;IAChB,OAAO,CAAC,QAAQ,CAAmD;IACnE,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAO;IAE7B;;OAEG;IACH,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAgBjE;;OAEG;IACH,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAUnE;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B7C;;OAEG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAKzC;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAKpE;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAO1C;AAGD,QAAA,MAAM,YAAY,cAAqB,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Emitter for NotebookLM MCP
|
|
3
|
+
*
|
|
4
|
+
* Central event bus for system-wide events.
|
|
5
|
+
* Events can trigger webhook notifications, logging, or other actions.
|
|
6
|
+
*/
|
|
7
|
+
import { log } from "../utils/logger.js";
|
|
8
|
+
class EventEmitter {
|
|
9
|
+
handlers = new Map();
|
|
10
|
+
eventHistory = [];
|
|
11
|
+
maxHistorySize = 100;
|
|
12
|
+
/**
|
|
13
|
+
* Subscribe to an event type
|
|
14
|
+
*/
|
|
15
|
+
on(eventType, handler) {
|
|
16
|
+
const handlers = this.handlers.get(eventType) || [];
|
|
17
|
+
handlers.push(handler);
|
|
18
|
+
this.handlers.set(eventType, handlers);
|
|
19
|
+
// Return unsubscribe function
|
|
20
|
+
return () => {
|
|
21
|
+
const currentHandlers = this.handlers.get(eventType) || [];
|
|
22
|
+
const index = currentHandlers.indexOf(handler);
|
|
23
|
+
if (index > -1) {
|
|
24
|
+
currentHandlers.splice(index, 1);
|
|
25
|
+
this.handlers.set(eventType, currentHandlers);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Subscribe to an event type (one-time only)
|
|
31
|
+
*/
|
|
32
|
+
once(eventType, handler) {
|
|
33
|
+
const wrappedHandler = (event) => {
|
|
34
|
+
unsubscribe();
|
|
35
|
+
return handler(event);
|
|
36
|
+
};
|
|
37
|
+
const unsubscribe = this.on(eventType, wrappedHandler);
|
|
38
|
+
return unsubscribe;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Emit an event
|
|
42
|
+
*/
|
|
43
|
+
async emit(event) {
|
|
44
|
+
log.dim(`📢 Event: ${event.type}`);
|
|
45
|
+
// Add to history
|
|
46
|
+
this.eventHistory.push(event);
|
|
47
|
+
if (this.eventHistory.length > this.maxHistorySize) {
|
|
48
|
+
this.eventHistory.shift();
|
|
49
|
+
}
|
|
50
|
+
// Get specific handlers
|
|
51
|
+
const specificHandlers = this.handlers.get(event.type) || [];
|
|
52
|
+
// Get wildcard handlers
|
|
53
|
+
const wildcardHandlers = this.handlers.get("*") || [];
|
|
54
|
+
const allHandlers = [...specificHandlers, ...wildcardHandlers];
|
|
55
|
+
// Execute all handlers
|
|
56
|
+
for (const handler of allHandlers) {
|
|
57
|
+
try {
|
|
58
|
+
await handler(event);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
log.error(`Event handler error for ${event.type}: ${error}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get recent events
|
|
67
|
+
*/
|
|
68
|
+
getHistory(limit) {
|
|
69
|
+
const count = limit || this.maxHistorySize;
|
|
70
|
+
return this.eventHistory.slice(-count);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get events by type
|
|
74
|
+
*/
|
|
75
|
+
getEventsByType(eventType, limit) {
|
|
76
|
+
const filtered = this.eventHistory.filter((e) => e.type === eventType);
|
|
77
|
+
return limit ? filtered.slice(-limit) : filtered;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Clear event history
|
|
81
|
+
*/
|
|
82
|
+
clearHistory() {
|
|
83
|
+
this.eventHistory = [];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get handler count for debugging
|
|
87
|
+
*/
|
|
88
|
+
getHandlerCount() {
|
|
89
|
+
const counts = {};
|
|
90
|
+
for (const [type, handlers] of this.handlers) {
|
|
91
|
+
counts[type] = handlers.length;
|
|
92
|
+
}
|
|
93
|
+
return counts;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Singleton instance
|
|
97
|
+
const eventEmitter = new EventEmitter();
|
|
98
|
+
export { eventEmitter };
|
|
99
|
+
export default eventEmitter;
|
|
100
|
+
//# sourceMappingURL=event-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Types for Webhook Notifications
|
|
3
|
+
*
|
|
4
|
+
* Defines all events that can trigger webhook notifications.
|
|
5
|
+
*/
|
|
6
|
+
export type EventType = "question_answered" | "notebook_created" | "notebook_deleted" | "source_added" | "source_removed" | "session_created" | "session_expired" | "auth_required" | "rate_limit_hit" | "security_incident" | "quota_warning" | "audio_generated" | "batch_complete";
|
|
7
|
+
export interface BaseEvent {
|
|
8
|
+
type: EventType;
|
|
9
|
+
timestamp: string;
|
|
10
|
+
source: "notebooklm-mcp";
|
|
11
|
+
version: string;
|
|
12
|
+
}
|
|
13
|
+
export interface QuestionAnsweredEvent extends BaseEvent {
|
|
14
|
+
type: "question_answered";
|
|
15
|
+
payload: {
|
|
16
|
+
question_length: number;
|
|
17
|
+
answer_length: number;
|
|
18
|
+
session_id: string;
|
|
19
|
+
notebook_url?: string;
|
|
20
|
+
duration_ms: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface NotebookCreatedEvent extends BaseEvent {
|
|
24
|
+
type: "notebook_created";
|
|
25
|
+
payload: {
|
|
26
|
+
notebook_url: string;
|
|
27
|
+
name: string;
|
|
28
|
+
source_count: number;
|
|
29
|
+
topics?: string[];
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface NotebookDeletedEvent extends BaseEvent {
|
|
33
|
+
type: "notebook_deleted";
|
|
34
|
+
payload: {
|
|
35
|
+
notebook_id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface SourceAddedEvent extends BaseEvent {
|
|
40
|
+
type: "source_added";
|
|
41
|
+
payload: {
|
|
42
|
+
notebook_url: string;
|
|
43
|
+
source_type: "url" | "text" | "file";
|
|
44
|
+
source_title?: string;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export interface SourceRemovedEvent extends BaseEvent {
|
|
48
|
+
type: "source_removed";
|
|
49
|
+
payload: {
|
|
50
|
+
notebook_url: string;
|
|
51
|
+
source_id: string;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export interface SessionCreatedEvent extends BaseEvent {
|
|
55
|
+
type: "session_created";
|
|
56
|
+
payload: {
|
|
57
|
+
session_id: string;
|
|
58
|
+
notebook_url?: string;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export interface SessionExpiredEvent extends BaseEvent {
|
|
62
|
+
type: "session_expired";
|
|
63
|
+
payload: {
|
|
64
|
+
session_id: string;
|
|
65
|
+
reason: "timeout" | "manual" | "error";
|
|
66
|
+
age_seconds: number;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export interface AuthRequiredEvent extends BaseEvent {
|
|
70
|
+
type: "auth_required";
|
|
71
|
+
payload: {
|
|
72
|
+
reason: "expired" | "invalid" | "missing";
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface RateLimitHitEvent extends BaseEvent {
|
|
76
|
+
type: "rate_limit_hit";
|
|
77
|
+
payload: {
|
|
78
|
+
limit_type: "query" | "notebook" | "api";
|
|
79
|
+
current_count: number;
|
|
80
|
+
limit: number;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export interface SecurityIncidentEvent extends BaseEvent {
|
|
84
|
+
type: "security_incident";
|
|
85
|
+
payload: {
|
|
86
|
+
severity: "low" | "medium" | "high" | "critical";
|
|
87
|
+
incident_type: string;
|
|
88
|
+
description: string;
|
|
89
|
+
blocked?: boolean;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export interface QuotaWarningEvent extends BaseEvent {
|
|
93
|
+
type: "quota_warning";
|
|
94
|
+
payload: {
|
|
95
|
+
resource: "notebooks" | "sources" | "queries";
|
|
96
|
+
used: number;
|
|
97
|
+
limit: number;
|
|
98
|
+
percent: number;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
export interface AudioGeneratedEvent extends BaseEvent {
|
|
102
|
+
type: "audio_generated";
|
|
103
|
+
payload: {
|
|
104
|
+
notebook_url: string;
|
|
105
|
+
duration_seconds?: number;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export interface BatchCompleteEvent extends BaseEvent {
|
|
109
|
+
type: "batch_complete";
|
|
110
|
+
payload: {
|
|
111
|
+
operation: "create_notebooks" | "sync_library";
|
|
112
|
+
total: number;
|
|
113
|
+
succeeded: number;
|
|
114
|
+
failed: number;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export type SystemEvent = QuestionAnsweredEvent | NotebookCreatedEvent | NotebookDeletedEvent | SourceAddedEvent | SourceRemovedEvent | SessionCreatedEvent | SessionExpiredEvent | AuthRequiredEvent | RateLimitHitEvent | SecurityIncidentEvent | QuotaWarningEvent | AudioGeneratedEvent | BatchCompleteEvent;
|
|
118
|
+
/**
|
|
119
|
+
* Create an event with standard fields
|
|
120
|
+
*/
|
|
121
|
+
export declare function createEvent<T extends EventType>(type: T, payload: Extract<SystemEvent, {
|
|
122
|
+
type: T;
|
|
123
|
+
}>["payload"]): SystemEvent;
|
|
124
|
+
//# sourceMappingURL=event-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-types.d.ts","sourceRoot":"","sources":["../../src/events/event-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Types for Webhook Notifications
|
|
3
|
+
*
|
|
4
|
+
* Defines all events that can trigger webhook notifications.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create an event with standard fields
|
|
8
|
+
*/
|
|
9
|
+
export function createEvent(type, payload) {
|
|
10
|
+
return {
|
|
11
|
+
type,
|
|
12
|
+
timestamp: new Date().toISOString(),
|
|
13
|
+
source: "notebooklm-mcp",
|
|
14
|
+
version: "1.7.0",
|
|
15
|
+
payload,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=event-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-types.js","sourceRoot":"","sources":["../../src/events/event-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4JH;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,IAAO,EACP,OAAqD;IAErD,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,OAAO;QAChB,OAAO;KACO,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini Interactions API Client
|
|
3
|
+
*
|
|
4
|
+
* Provides access to Gemini models and the Deep Research agent
|
|
5
|
+
* via the Interactions API for stable, API-based research capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import type { ProgressCallback } from "../types.js";
|
|
8
|
+
import type { GeminiQueryOptions, GeminiInteraction, DeepResearchOptions } from "./types.js";
|
|
9
|
+
export { DEEP_RESEARCH_AGENT } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Client for Gemini Interactions API
|
|
12
|
+
*/
|
|
13
|
+
export declare class GeminiClient {
|
|
14
|
+
private client;
|
|
15
|
+
constructor(apiKey?: string);
|
|
16
|
+
/**
|
|
17
|
+
* Check if the client is available (API key configured)
|
|
18
|
+
*/
|
|
19
|
+
isAvailable(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Perform a quick query to Gemini
|
|
22
|
+
*/
|
|
23
|
+
query(options: GeminiQueryOptions): Promise<GeminiInteraction>;
|
|
24
|
+
/**
|
|
25
|
+
* Start deep research using the Deep Research agent
|
|
26
|
+
*/
|
|
27
|
+
deepResearch(options: DeepResearchOptions): Promise<GeminiInteraction>;
|
|
28
|
+
/**
|
|
29
|
+
* Get an existing interaction by ID
|
|
30
|
+
*/
|
|
31
|
+
getInteraction(interactionId: string): Promise<GeminiInteraction>;
|
|
32
|
+
/**
|
|
33
|
+
* Poll for interaction completion
|
|
34
|
+
*/
|
|
35
|
+
pollForCompletion(interactionId: string, maxWaitMs: number, progressCallback?: ProgressCallback): Promise<GeminiInteraction>;
|
|
36
|
+
/**
|
|
37
|
+
* Delete a stored interaction
|
|
38
|
+
*/
|
|
39
|
+
deleteInteraction(interactionId: string): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Map SDK response to our interface
|
|
42
|
+
*/
|
|
43
|
+
private mapInteraction;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=gemini-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-client.d.ts","sourceRoot":"","sources":["../../src/gemini/gemini-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;gBAE9B,MAAM,CAAC,EAAE,MAAM;IAU3B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+CpE;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwC5E;;OAEG;IACG,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAevE;;OAEG;IACG,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,iBAAiB,CAAC;IAgD7B;;OAEG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D;;OAEG;IACH,OAAO,CAAC,cAAc;CA6CvB"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini Interactions API Client
|
|
3
|
+
*
|
|
4
|
+
* Provides access to Gemini models and the Deep Research agent
|
|
5
|
+
* via the Interactions API for stable, API-based research capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import { GoogleGenAI } from "@google/genai";
|
|
8
|
+
import { log } from "../utils/logger.js";
|
|
9
|
+
import { CONFIG } from "../config.js";
|
|
10
|
+
// Re-export the agent constant
|
|
11
|
+
export { DEEP_RESEARCH_AGENT } from "./types.js";
|
|
12
|
+
/**
|
|
13
|
+
* Client for Gemini Interactions API
|
|
14
|
+
*/
|
|
15
|
+
export class GeminiClient {
|
|
16
|
+
client = null;
|
|
17
|
+
constructor(apiKey) {
|
|
18
|
+
const key = apiKey || CONFIG.geminiApiKey;
|
|
19
|
+
if (key) {
|
|
20
|
+
this.client = new GoogleGenAI({ apiKey: key });
|
|
21
|
+
log.info("Gemini client initialized");
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
log.info("Gemini client not initialized (no API key)");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if the client is available (API key configured)
|
|
29
|
+
*/
|
|
30
|
+
isAvailable() {
|
|
31
|
+
return this.client !== null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Perform a quick query to Gemini
|
|
35
|
+
*/
|
|
36
|
+
async query(options) {
|
|
37
|
+
if (!this.client) {
|
|
38
|
+
throw new Error("Gemini API key not configured. Set GEMINI_API_KEY environment variable.");
|
|
39
|
+
}
|
|
40
|
+
const model = options.model || CONFIG.geminiDefaultModel || "gemini-2.5-flash";
|
|
41
|
+
log.info(`Gemini query to ${model}: ${options.query.substring(0, 50)}...`);
|
|
42
|
+
try {
|
|
43
|
+
// Build tools array - use 'as any' to bypass strict SDK typing
|
|
44
|
+
const tools = [];
|
|
45
|
+
if (options.tools) {
|
|
46
|
+
for (const tool of options.tools) {
|
|
47
|
+
tools.push({ type: tool });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Build input - just use string for simplicity
|
|
51
|
+
let input = options.query;
|
|
52
|
+
// If URLs are provided, append them to the query
|
|
53
|
+
if (options.urls && options.urls.length > 0) {
|
|
54
|
+
input = `${options.query}\n\nPlease analyze these URLs:\n${options.urls.join("\n")}`;
|
|
55
|
+
}
|
|
56
|
+
// Create interaction - use 'as any' to handle SDK type strictness
|
|
57
|
+
const response = await this.client.interactions.create({
|
|
58
|
+
model,
|
|
59
|
+
input,
|
|
60
|
+
tools: tools.length > 0 ? tools : undefined,
|
|
61
|
+
previousInteractionId: options.previousInteractionId,
|
|
62
|
+
store: true,
|
|
63
|
+
generationConfig: options.generationConfig ? {
|
|
64
|
+
temperature: options.generationConfig.temperature,
|
|
65
|
+
maxOutputTokens: options.generationConfig.maxOutputTokens,
|
|
66
|
+
thinkingLevel: options.generationConfig.thinkingLevel,
|
|
67
|
+
} : undefined,
|
|
68
|
+
});
|
|
69
|
+
return this.mapInteraction(response);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
73
|
+
log.error(`Gemini query failed: ${msg}`);
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Start deep research using the Deep Research agent
|
|
79
|
+
*/
|
|
80
|
+
async deepResearch(options) {
|
|
81
|
+
if (!this.client) {
|
|
82
|
+
throw new Error("Gemini API key not configured. Set GEMINI_API_KEY environment variable.");
|
|
83
|
+
}
|
|
84
|
+
if (!CONFIG.geminiDeepResearchEnabled) {
|
|
85
|
+
throw new Error("Deep Research is disabled. Set GEMINI_DEEP_RESEARCH_ENABLED=true to enable.");
|
|
86
|
+
}
|
|
87
|
+
log.info(`Starting deep research: ${options.query.substring(0, 50)}...`);
|
|
88
|
+
try {
|
|
89
|
+
// Start research in background - use 'as any' to handle SDK type strictness
|
|
90
|
+
const response = await this.client.interactions.create({
|
|
91
|
+
input: options.query,
|
|
92
|
+
agent: "deep-research-pro-preview-12-2025",
|
|
93
|
+
background: options.background !== false,
|
|
94
|
+
store: true,
|
|
95
|
+
});
|
|
96
|
+
const interaction = this.mapInteraction(response);
|
|
97
|
+
log.info(`Deep research started: ${interaction.id}`);
|
|
98
|
+
// If waiting for completion, poll
|
|
99
|
+
if (options.waitForCompletion !== false) {
|
|
100
|
+
return this.pollForCompletion(interaction.id, options.maxWaitMs || 300000, // 5 minutes default
|
|
101
|
+
options.progressCallback);
|
|
102
|
+
}
|
|
103
|
+
return interaction;
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
107
|
+
log.error(`Deep research failed: ${msg}`);
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get an existing interaction by ID
|
|
113
|
+
*/
|
|
114
|
+
async getInteraction(interactionId) {
|
|
115
|
+
if (!this.client) {
|
|
116
|
+
throw new Error("Gemini API key not configured.");
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
const response = await this.client.interactions.get(interactionId);
|
|
120
|
+
return this.mapInteraction(response);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
124
|
+
log.error(`Failed to get interaction ${interactionId}: ${msg}`);
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Poll for interaction completion
|
|
130
|
+
*/
|
|
131
|
+
async pollForCompletion(interactionId, maxWaitMs, progressCallback) {
|
|
132
|
+
const startTime = Date.now();
|
|
133
|
+
const pollInterval = 10000; // 10 seconds
|
|
134
|
+
let lastStatus = null;
|
|
135
|
+
log.info(`Polling for completion: ${interactionId} (max ${maxWaitMs / 1000}s)`);
|
|
136
|
+
while (Date.now() - startTime < maxWaitMs) {
|
|
137
|
+
const interaction = await this.getInteraction(interactionId);
|
|
138
|
+
const elapsed = Math.round((Date.now() - startTime) / 1000);
|
|
139
|
+
// Report progress - ProgressCallback signature is (message, progress?, total?)
|
|
140
|
+
if (progressCallback && interaction.status !== lastStatus) {
|
|
141
|
+
const progress = Math.min(90, Math.round((elapsed / (maxWaitMs / 1000)) * 100));
|
|
142
|
+
await progressCallback(`Research ${interaction.status}... (${elapsed}s elapsed)`, progress, 100);
|
|
143
|
+
lastStatus = interaction.status;
|
|
144
|
+
}
|
|
145
|
+
// Check if done
|
|
146
|
+
if (interaction.status === "completed") {
|
|
147
|
+
if (progressCallback) {
|
|
148
|
+
await progressCallback("Research complete", 100, 100);
|
|
149
|
+
}
|
|
150
|
+
log.success(`Research completed in ${elapsed}s`);
|
|
151
|
+
return interaction;
|
|
152
|
+
}
|
|
153
|
+
if (interaction.status === "failed") {
|
|
154
|
+
if (progressCallback) {
|
|
155
|
+
await progressCallback("Research failed", 100, 100);
|
|
156
|
+
}
|
|
157
|
+
log.error(`Research failed: ${interaction.error || "Unknown error"}`);
|
|
158
|
+
return interaction;
|
|
159
|
+
}
|
|
160
|
+
// Wait before next poll
|
|
161
|
+
await new Promise(resolve => setTimeout(resolve, pollInterval));
|
|
162
|
+
}
|
|
163
|
+
// Timeout
|
|
164
|
+
const elapsed = Math.round((Date.now() - startTime) / 1000);
|
|
165
|
+
throw new Error(`Research timed out after ${elapsed} seconds`);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Delete a stored interaction
|
|
169
|
+
*/
|
|
170
|
+
async deleteInteraction(interactionId) {
|
|
171
|
+
if (!this.client) {
|
|
172
|
+
throw new Error("Gemini API key not configured.");
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
await this.client.interactions.delete(interactionId);
|
|
176
|
+
log.info(`Deleted interaction: ${interactionId}`);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
180
|
+
log.error(`Failed to delete interaction: ${msg}`);
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Map SDK response to our interface
|
|
186
|
+
*/
|
|
187
|
+
mapInteraction(response) {
|
|
188
|
+
// The SDK returns an object with id, model, status, outputs, usage
|
|
189
|
+
const r = response;
|
|
190
|
+
const outputs = (r.outputs || []).map(o => ({
|
|
191
|
+
type: o.type || "text",
|
|
192
|
+
text: o.text,
|
|
193
|
+
name: o.name,
|
|
194
|
+
arguments: o.arguments,
|
|
195
|
+
id: o.id,
|
|
196
|
+
}));
|
|
197
|
+
return {
|
|
198
|
+
id: r.id || "",
|
|
199
|
+
model: r.model,
|
|
200
|
+
status: r.status || "pending",
|
|
201
|
+
outputs,
|
|
202
|
+
usage: r.usage ? {
|
|
203
|
+
totalTokens: r.usage.totalTokens || r.usage.total_tokens || 0,
|
|
204
|
+
promptTokens: r.usage.promptTokens || r.usage.prompt_tokens,
|
|
205
|
+
completionTokens: r.usage.completionTokens || r.usage.completion_tokens,
|
|
206
|
+
} : undefined,
|
|
207
|
+
error: r.error,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=gemini-client.js.map
|