@pan-sec/notebooklm-mcp 2026.2.1 → 2026.2.11
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 -18
- package/dist/auth/auth-manager.d.ts +37 -2
- package/dist/auth/auth-manager.d.ts.map +1 -1
- package/dist/auth/auth-manager.js +133 -11
- package/dist/auth/auth-manager.js.map +1 -1
- package/dist/auth/mcp-auth.d.ts +25 -4
- package/dist/auth/mcp-auth.d.ts.map +1 -1
- package/dist/auth/mcp-auth.js +145 -29
- package/dist/auth/mcp-auth.js.map +1 -1
- package/dist/compliance/retention-engine.js +1 -1
- package/dist/compliance/retention-engine.js.map +1 -1
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +56 -8
- package/dist/config.js.map +1 -1
- package/dist/gemini/gemini-client.d.ts.map +1 -1
- package/dist/gemini/gemini-client.js +58 -20
- package/dist/gemini/gemini-client.js.map +1 -1
- package/dist/index.js +87 -180
- package/dist/index.js.map +1 -1
- package/dist/notebook-creation/audio-manager.js +2 -2
- package/dist/notebook-creation/audio-manager.js.map +1 -1
- package/dist/notebook-creation/data-table-manager.d.ts +13 -3
- package/dist/notebook-creation/data-table-manager.d.ts.map +1 -1
- package/dist/notebook-creation/data-table-manager.js +70 -32
- package/dist/notebook-creation/data-table-manager.js.map +1 -1
- package/dist/notebook-creation/discover-creation-flow.js +1 -1
- package/dist/notebook-creation/discover-creation-flow.js.map +1 -1
- package/dist/notebook-creation/discover-quota.js +1 -1
- package/dist/notebook-creation/discover-quota.js.map +1 -1
- package/dist/notebook-creation/discover-sources.js +1 -1
- package/dist/notebook-creation/discover-sources.js.map +1 -1
- package/dist/notebook-creation/notebook-creator.d.ts.map +1 -1
- package/dist/notebook-creation/notebook-creator.js +49 -26
- package/dist/notebook-creation/notebook-creator.js.map +1 -1
- package/dist/notebook-creation/notebook-sync.js +1 -1
- package/dist/notebook-creation/notebook-sync.js.map +1 -1
- package/dist/notebook-creation/selectors.d.ts +21 -16
- package/dist/notebook-creation/selectors.d.ts.map +1 -1
- package/dist/notebook-creation/selectors.js +37 -20
- package/dist/notebook-creation/selectors.js.map +1 -1
- package/dist/notebook-creation/source-manager.d.ts.map +1 -1
- package/dist/notebook-creation/source-manager.js +29 -6
- package/dist/notebook-creation/source-manager.js.map +1 -1
- package/dist/notebook-creation/video-manager.d.ts +10 -1
- package/dist/notebook-creation/video-manager.d.ts.map +1 -1
- package/dist/notebook-creation/video-manager.js +103 -42
- package/dist/notebook-creation/video-manager.js.map +1 -1
- package/dist/quota/quota-manager.d.ts.map +1 -1
- package/dist/quota/quota-manager.js +46 -15
- package/dist/quota/quota-manager.js.map +1 -1
- package/dist/session/browser-session.d.ts.map +1 -1
- package/dist/session/browser-session.js +21 -14
- package/dist/session/browser-session.js.map +1 -1
- package/dist/tools/definitions/notebook-management.d.ts.map +1 -1
- package/dist/tools/definitions/notebook-management.js +64 -0
- package/dist/tools/definitions/notebook-management.js.map +1 -1
- package/dist/tools/handlers/ask-question.d.ts +18 -0
- package/dist/tools/handlers/ask-question.d.ts.map +1 -0
- package/dist/tools/handlers/ask-question.js +236 -0
- package/dist/tools/handlers/ask-question.js.map +1 -0
- package/dist/tools/handlers/audio-video.d.ts +42 -0
- package/dist/tools/handlers/audio-video.d.ts.map +1 -0
- package/dist/tools/handlers/audio-video.js +356 -0
- package/dist/tools/handlers/audio-video.js.map +1 -0
- package/dist/tools/handlers/auth.d.ts +41 -0
- package/dist/tools/handlers/auth.d.ts.map +1 -0
- package/dist/tools/handlers/auth.js +171 -0
- package/dist/tools/handlers/auth.js.map +1 -0
- package/dist/tools/handlers/gemini.d.ts +142 -0
- package/dist/tools/handlers/gemini.d.ts.map +1 -0
- package/dist/tools/handlers/gemini.js +626 -0
- package/dist/tools/handlers/gemini.js.map +1 -0
- package/dist/tools/handlers/index.d.ts +295 -0
- package/dist/tools/handlers/index.d.ts.map +1 -0
- package/dist/tools/handlers/index.js +197 -0
- package/dist/tools/handlers/index.js.map +1 -0
- package/dist/tools/handlers/notebook-creation.d.ts +75 -0
- package/dist/tools/handlers/notebook-creation.d.ts.map +1 -0
- package/dist/tools/handlers/notebook-creation.js +598 -0
- package/dist/tools/handlers/notebook-creation.js.map +1 -0
- package/dist/tools/handlers/notebook-management.d.ts +64 -0
- package/dist/tools/handlers/notebook-management.d.ts.map +1 -0
- package/dist/tools/handlers/notebook-management.js +214 -0
- package/dist/tools/handlers/notebook-management.js.map +1 -0
- package/dist/tools/handlers/session-management.d.ts +68 -0
- package/dist/tools/handlers/session-management.d.ts.map +1 -0
- package/dist/tools/handlers/session-management.js +238 -0
- package/dist/tools/handlers/session-management.js.map +1 -0
- package/dist/tools/handlers/system.d.ts +102 -0
- package/dist/tools/handlers/system.d.ts.map +1 -0
- package/dist/tools/handlers/system.js +275 -0
- package/dist/tools/handlers/system.js.map +1 -0
- package/dist/tools/handlers/types.d.ts +19 -0
- package/dist/tools/handlers/types.d.ts.map +1 -0
- package/dist/tools/handlers/types.js +5 -0
- package/dist/tools/handlers/types.js.map +1 -0
- package/dist/tools/handlers/webhooks.d.ts +34 -0
- package/dist/tools/handlers/webhooks.d.ts.map +1 -0
- package/dist/tools/handlers/webhooks.js +122 -0
- package/dist/tools/handlers/webhooks.js.map +1 -0
- package/dist/tools/handlers.d.ts +27 -0
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +226 -5
- package/dist/tools/handlers.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/utils/cleanup-manager.d.ts.map +1 -1
- package/dist/utils/cleanup-manager.js +8 -10
- package/dist/utils/cleanup-manager.js.map +1 -1
- package/dist/utils/file-permissions.d.ts.map +1 -1
- package/dist/utils/file-permissions.js +41 -6
- package/dist/utils/file-permissions.js.map +1 -1
- package/docs/improvement-sprint-2026.2.10.md +210 -0
- package/package.json +6 -3
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio, Video, and Data Table handler functions
|
|
3
|
+
*
|
|
4
|
+
* Extracted from the monolithic ToolHandlers class.
|
|
5
|
+
*/
|
|
6
|
+
import { log } from "../../utils/logger.js";
|
|
7
|
+
import { validateNotebookUrl } from "../../utils/security.js";
|
|
8
|
+
import { AudioManager, } from "../../notebook-creation/audio-manager.js";
|
|
9
|
+
import { VideoManager, } from "../../notebook-creation/video-manager.js";
|
|
10
|
+
import { DataTableManager, } from "../../notebook-creation/data-table-manager.js";
|
|
11
|
+
export async function handleGenerateAudioOverview(ctx, args) {
|
|
12
|
+
log.info(`🔧 [TOOL] generate_audio_overview called`);
|
|
13
|
+
try {
|
|
14
|
+
// Resolve notebook URL
|
|
15
|
+
let notebookUrl = args.notebook_url;
|
|
16
|
+
if (!notebookUrl && args.notebook_id) {
|
|
17
|
+
const notebook = ctx.library.getNotebook(args.notebook_id);
|
|
18
|
+
if (!notebook) {
|
|
19
|
+
throw new Error(`Notebook not found in library: ${args.notebook_id}`);
|
|
20
|
+
}
|
|
21
|
+
notebookUrl = notebook.url;
|
|
22
|
+
log.info(` Resolved notebook: ${notebook.name}`);
|
|
23
|
+
}
|
|
24
|
+
else if (!notebookUrl) {
|
|
25
|
+
const active = ctx.library.getActiveNotebook();
|
|
26
|
+
if (active) {
|
|
27
|
+
notebookUrl = active.url;
|
|
28
|
+
log.info(` Using active notebook: ${active.name}`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
throw new Error("No notebook specified. Provide notebook_id or notebook_url.");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Validate URL
|
|
35
|
+
const safeUrl = validateNotebookUrl(notebookUrl);
|
|
36
|
+
// Get the shared context manager from session manager
|
|
37
|
+
const contextManager = ctx.sessionManager.getContextManager();
|
|
38
|
+
// Generate audio
|
|
39
|
+
const audioManager = new AudioManager(ctx.authManager, contextManager);
|
|
40
|
+
const result = await audioManager.generateAudioOverview(safeUrl);
|
|
41
|
+
if (result.success) {
|
|
42
|
+
log.success(`✅ [TOOL] generate_audio_overview completed (status: ${result.status.status})`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
log.warning(`⚠️ [TOOL] generate_audio_overview: ${result.error}`);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
success: result.success,
|
|
49
|
+
data: result,
|
|
50
|
+
...(result.error && { error: result.error }),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
55
|
+
log.error(`❌ [TOOL] generate_audio_overview failed: ${errorMessage}`);
|
|
56
|
+
return {
|
|
57
|
+
success: false,
|
|
58
|
+
error: errorMessage,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export async function handleGetAudioStatus(ctx, args) {
|
|
63
|
+
log.info(`🔧 [TOOL] get_audio_status called`);
|
|
64
|
+
try {
|
|
65
|
+
// Resolve notebook URL
|
|
66
|
+
let notebookUrl = args.notebook_url;
|
|
67
|
+
if (!notebookUrl && args.notebook_id) {
|
|
68
|
+
const notebook = ctx.library.getNotebook(args.notebook_id);
|
|
69
|
+
if (!notebook) {
|
|
70
|
+
throw new Error(`Notebook not found in library: ${args.notebook_id}`);
|
|
71
|
+
}
|
|
72
|
+
notebookUrl = notebook.url;
|
|
73
|
+
log.info(` Resolved notebook: ${notebook.name}`);
|
|
74
|
+
}
|
|
75
|
+
else if (!notebookUrl) {
|
|
76
|
+
const active = ctx.library.getActiveNotebook();
|
|
77
|
+
if (active) {
|
|
78
|
+
notebookUrl = active.url;
|
|
79
|
+
log.info(` Using active notebook: ${active.name}`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
throw new Error("No notebook specified. Provide notebook_id or notebook_url.");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Validate URL
|
|
86
|
+
const safeUrl = validateNotebookUrl(notebookUrl);
|
|
87
|
+
// Get the shared context manager from session manager
|
|
88
|
+
const contextManager = ctx.sessionManager.getContextManager();
|
|
89
|
+
// Get status
|
|
90
|
+
const audioManager = new AudioManager(ctx.authManager, contextManager);
|
|
91
|
+
const status = await audioManager.getAudioStatus(safeUrl);
|
|
92
|
+
log.success(`✅ [TOOL] get_audio_status completed (status: ${status.status})`);
|
|
93
|
+
return {
|
|
94
|
+
success: true,
|
|
95
|
+
data: status,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
100
|
+
log.error(`❌ [TOOL] get_audio_status failed: ${errorMessage}`);
|
|
101
|
+
return {
|
|
102
|
+
success: false,
|
|
103
|
+
error: errorMessage,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export async function handleDownloadAudio(ctx, args) {
|
|
108
|
+
log.info(`🔧 [TOOL] download_audio called`);
|
|
109
|
+
try {
|
|
110
|
+
// Resolve notebook URL
|
|
111
|
+
let notebookUrl = args.notebook_url;
|
|
112
|
+
if (!notebookUrl && args.notebook_id) {
|
|
113
|
+
const notebook = ctx.library.getNotebook(args.notebook_id);
|
|
114
|
+
if (!notebook) {
|
|
115
|
+
throw new Error(`Notebook not found in library: ${args.notebook_id}`);
|
|
116
|
+
}
|
|
117
|
+
notebookUrl = notebook.url;
|
|
118
|
+
log.info(` Resolved notebook: ${notebook.name}`);
|
|
119
|
+
}
|
|
120
|
+
else if (!notebookUrl) {
|
|
121
|
+
const active = ctx.library.getActiveNotebook();
|
|
122
|
+
if (active) {
|
|
123
|
+
notebookUrl = active.url;
|
|
124
|
+
log.info(` Using active notebook: ${active.name}`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
throw new Error("No notebook specified. Provide notebook_id or notebook_url.");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Validate URL
|
|
131
|
+
const safeUrl = validateNotebookUrl(notebookUrl);
|
|
132
|
+
// Get the shared context manager from session manager
|
|
133
|
+
const contextManager = ctx.sessionManager.getContextManager();
|
|
134
|
+
// Download audio
|
|
135
|
+
const audioManager = new AudioManager(ctx.authManager, contextManager);
|
|
136
|
+
const result = await audioManager.downloadAudio(safeUrl, args.output_path);
|
|
137
|
+
if (result.success) {
|
|
138
|
+
log.success(`✅ [TOOL] download_audio completed: ${result.filePath}`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
log.warning(`⚠️ [TOOL] download_audio: ${result.error}`);
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
success: result.success,
|
|
145
|
+
data: result,
|
|
146
|
+
...(result.error && { error: result.error }),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
151
|
+
log.error(`❌ [TOOL] download_audio failed: ${errorMessage}`);
|
|
152
|
+
return {
|
|
153
|
+
success: false,
|
|
154
|
+
error: errorMessage,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export async function handleGenerateVideoOverview(ctx, args) {
|
|
159
|
+
log.info(`🔧 [TOOL] generate_video_overview called`);
|
|
160
|
+
try {
|
|
161
|
+
// Resolve notebook URL
|
|
162
|
+
let notebookUrl = args.notebook_url;
|
|
163
|
+
if (!notebookUrl && args.notebook_id) {
|
|
164
|
+
const notebook = ctx.library.getNotebook(args.notebook_id);
|
|
165
|
+
if (!notebook) {
|
|
166
|
+
throw new Error(`Notebook not found in library: ${args.notebook_id}`);
|
|
167
|
+
}
|
|
168
|
+
notebookUrl = notebook.url;
|
|
169
|
+
log.info(` Resolved notebook: ${notebook.name}`);
|
|
170
|
+
}
|
|
171
|
+
else if (!notebookUrl) {
|
|
172
|
+
const active = ctx.library.getActiveNotebook();
|
|
173
|
+
if (active) {
|
|
174
|
+
notebookUrl = active.url;
|
|
175
|
+
log.info(` Using active notebook: ${active.name}`);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
throw new Error("No notebook specified. Provide notebook_id or notebook_url.");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Validate URL
|
|
182
|
+
const safeUrl = validateNotebookUrl(notebookUrl);
|
|
183
|
+
// Get the shared context manager from session manager
|
|
184
|
+
const contextManager = ctx.sessionManager.getContextManager();
|
|
185
|
+
// Generate video
|
|
186
|
+
const videoManager = new VideoManager(ctx.authManager, contextManager);
|
|
187
|
+
const result = await videoManager.generateVideoOverview(safeUrl, args.style || "auto-select", args.format || "explainer");
|
|
188
|
+
if (result.success) {
|
|
189
|
+
log.success(`✅ [TOOL] generate_video_overview completed (status: ${result.status.status})`);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
log.warning(`⚠️ [TOOL] generate_video_overview: ${result.error}`);
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
success: result.success,
|
|
196
|
+
data: result,
|
|
197
|
+
...(result.error && { error: result.error }),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
202
|
+
log.error(`❌ [TOOL] generate_video_overview failed: ${errorMessage}`);
|
|
203
|
+
return {
|
|
204
|
+
success: false,
|
|
205
|
+
error: errorMessage,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
export async function handleGetVideoStatus(ctx, args) {
|
|
210
|
+
log.info(`🔧 [TOOL] get_video_status called`);
|
|
211
|
+
try {
|
|
212
|
+
// Resolve notebook URL
|
|
213
|
+
let notebookUrl = args.notebook_url;
|
|
214
|
+
if (!notebookUrl && args.notebook_id) {
|
|
215
|
+
const notebook = ctx.library.getNotebook(args.notebook_id);
|
|
216
|
+
if (!notebook) {
|
|
217
|
+
throw new Error(`Notebook not found in library: ${args.notebook_id}`);
|
|
218
|
+
}
|
|
219
|
+
notebookUrl = notebook.url;
|
|
220
|
+
log.info(` Resolved notebook: ${notebook.name}`);
|
|
221
|
+
}
|
|
222
|
+
else if (!notebookUrl) {
|
|
223
|
+
const active = ctx.library.getActiveNotebook();
|
|
224
|
+
if (active) {
|
|
225
|
+
notebookUrl = active.url;
|
|
226
|
+
log.info(` Using active notebook: ${active.name}`);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
throw new Error("No notebook specified. Provide notebook_id or notebook_url.");
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Validate URL
|
|
233
|
+
const safeUrl = validateNotebookUrl(notebookUrl);
|
|
234
|
+
// Get the shared context manager from session manager
|
|
235
|
+
const contextManager = ctx.sessionManager.getContextManager();
|
|
236
|
+
// Get status
|
|
237
|
+
const videoManager = new VideoManager(ctx.authManager, contextManager);
|
|
238
|
+
const status = await videoManager.getVideoStatus(safeUrl);
|
|
239
|
+
log.success(`✅ [TOOL] get_video_status completed (status: ${status.status})`);
|
|
240
|
+
return {
|
|
241
|
+
success: true,
|
|
242
|
+
data: status,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
247
|
+
log.error(`❌ [TOOL] get_video_status failed: ${errorMessage}`);
|
|
248
|
+
return {
|
|
249
|
+
success: false,
|
|
250
|
+
error: errorMessage,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
export async function handleGenerateDataTable(ctx, args) {
|
|
255
|
+
log.info(`🔧 [TOOL] generate_data_table called`);
|
|
256
|
+
try {
|
|
257
|
+
// Resolve notebook URL
|
|
258
|
+
let notebookUrl = args.notebook_url;
|
|
259
|
+
if (!notebookUrl && args.notebook_id) {
|
|
260
|
+
const notebook = ctx.library.getNotebook(args.notebook_id);
|
|
261
|
+
if (!notebook) {
|
|
262
|
+
throw new Error(`Notebook not found in library: ${args.notebook_id}`);
|
|
263
|
+
}
|
|
264
|
+
notebookUrl = notebook.url;
|
|
265
|
+
log.info(` Resolved notebook: ${notebook.name}`);
|
|
266
|
+
}
|
|
267
|
+
else if (!notebookUrl) {
|
|
268
|
+
const active = ctx.library.getActiveNotebook();
|
|
269
|
+
if (active) {
|
|
270
|
+
notebookUrl = active.url;
|
|
271
|
+
log.info(` Using active notebook: ${active.name}`);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
throw new Error("No notebook specified. Provide notebook_id or notebook_url.");
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Validate URL
|
|
278
|
+
const safeUrl = validateNotebookUrl(notebookUrl);
|
|
279
|
+
// Get the shared context manager from session manager
|
|
280
|
+
const contextManager = ctx.sessionManager.getContextManager();
|
|
281
|
+
// Generate data table
|
|
282
|
+
const dataTableManager = new DataTableManager(ctx.authManager, contextManager);
|
|
283
|
+
const result = await dataTableManager.generateDataTable(safeUrl);
|
|
284
|
+
if (result.success) {
|
|
285
|
+
log.success(`✅ [TOOL] generate_data_table completed (status: ${result.status.status})`);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
log.warning(`⚠️ [TOOL] generate_data_table: ${result.error}`);
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
success: result.success,
|
|
292
|
+
data: result,
|
|
293
|
+
...(result.error && { error: result.error }),
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
298
|
+
log.error(`❌ [TOOL] generate_data_table failed: ${errorMessage}`);
|
|
299
|
+
return {
|
|
300
|
+
success: false,
|
|
301
|
+
error: errorMessage,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
export async function handleGetDataTable(ctx, args) {
|
|
306
|
+
log.info(`🔧 [TOOL] get_data_table called`);
|
|
307
|
+
try {
|
|
308
|
+
// Resolve notebook URL
|
|
309
|
+
let notebookUrl = args.notebook_url;
|
|
310
|
+
if (!notebookUrl && args.notebook_id) {
|
|
311
|
+
const notebook = ctx.library.getNotebook(args.notebook_id);
|
|
312
|
+
if (!notebook) {
|
|
313
|
+
throw new Error(`Notebook not found in library: ${args.notebook_id}`);
|
|
314
|
+
}
|
|
315
|
+
notebookUrl = notebook.url;
|
|
316
|
+
log.info(` Resolved notebook: ${notebook.name}`);
|
|
317
|
+
}
|
|
318
|
+
else if (!notebookUrl) {
|
|
319
|
+
const active = ctx.library.getActiveNotebook();
|
|
320
|
+
if (active) {
|
|
321
|
+
notebookUrl = active.url;
|
|
322
|
+
log.info(` Using active notebook: ${active.name}`);
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
throw new Error("No notebook specified. Provide notebook_id or notebook_url.");
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// Validate URL
|
|
329
|
+
const safeUrl = validateNotebookUrl(notebookUrl);
|
|
330
|
+
// Get the shared context manager from session manager
|
|
331
|
+
const contextManager = ctx.sessionManager.getContextManager();
|
|
332
|
+
// Get data table
|
|
333
|
+
const dataTableManager = new DataTableManager(ctx.authManager, contextManager);
|
|
334
|
+
const result = await dataTableManager.getDataTable(safeUrl);
|
|
335
|
+
if (result.success) {
|
|
336
|
+
log.success(`✅ [TOOL] get_data_table completed (${result.table?.totalRows} rows x ${result.table?.totalColumns} cols)`);
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
log.warning(`⚠️ [TOOL] get_data_table: ${result.error}`);
|
|
340
|
+
}
|
|
341
|
+
return {
|
|
342
|
+
success: result.success,
|
|
343
|
+
data: result,
|
|
344
|
+
...(result.error && { error: result.error }),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
349
|
+
log.error(`❌ [TOOL] get_data_table failed: ${errorMessage}`);
|
|
350
|
+
return {
|
|
351
|
+
success: false,
|
|
352
|
+
error: errorMessage,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=audio-video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-video.js","sourceRoot":"","sources":["../../../src/tools/handlers/audio-video.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth domain handlers — setup_auth & re_auth
|
|
3
|
+
*/
|
|
4
|
+
import type { HandlerContext } from "./types.js";
|
|
5
|
+
import type { BrowserOptions } from "../../config.js";
|
|
6
|
+
import type { ToolResult, ProgressCallback } from "../../types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Handle setup_auth tool
|
|
9
|
+
*
|
|
10
|
+
* Opens a browser window for manual login with live progress updates.
|
|
11
|
+
* The operation waits synchronously for login completion (up to 10 minutes).
|
|
12
|
+
*/
|
|
13
|
+
export declare function handleSetupAuth(ctx: HandlerContext, args: {
|
|
14
|
+
show_browser?: boolean;
|
|
15
|
+
browser_options?: BrowserOptions;
|
|
16
|
+
}, sendProgress?: ProgressCallback): Promise<ToolResult<{
|
|
17
|
+
status: string;
|
|
18
|
+
message: string;
|
|
19
|
+
authenticated: boolean;
|
|
20
|
+
duration_seconds?: number;
|
|
21
|
+
}>>;
|
|
22
|
+
/**
|
|
23
|
+
* Handle re_auth tool
|
|
24
|
+
*
|
|
25
|
+
* Performs a complete re-authentication:
|
|
26
|
+
* 1. Closes all active browser sessions
|
|
27
|
+
* 2. Deletes all saved authentication data (cookies, Chrome profile)
|
|
28
|
+
* 3. Opens browser for fresh Google login
|
|
29
|
+
*
|
|
30
|
+
* Use for switching Google accounts or recovering from rate limits.
|
|
31
|
+
*/
|
|
32
|
+
export declare function handleReAuth(ctx: HandlerContext, args: {
|
|
33
|
+
show_browser?: boolean;
|
|
34
|
+
browser_options?: BrowserOptions;
|
|
35
|
+
}, sendProgress?: ProgressCallback): Promise<ToolResult<{
|
|
36
|
+
status: string;
|
|
37
|
+
message: string;
|
|
38
|
+
authenticated: boolean;
|
|
39
|
+
duration_seconds?: number;
|
|
40
|
+
}>>;
|
|
41
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAInE;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IACJ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,cAAc,CAAC;CAClC,EACD,YAAY,CAAC,EAAE,gBAAgB,GAC9B,OAAO,CACR,UAAU,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC,CACH,CAwFA;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE;IACJ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,cAAc,CAAC;CAClC,EACD,YAAY,CAAC,EAAE,gBAAgB,GAC9B,OAAO,CACR,UAAU,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC,CACH,CA0FA"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth domain handlers — setup_auth & re_auth
|
|
3
|
+
*/
|
|
4
|
+
import { log } from "../../utils/logger.js";
|
|
5
|
+
import { audit } from "../../utils/audit-logger.js";
|
|
6
|
+
/**
|
|
7
|
+
* Handle setup_auth tool
|
|
8
|
+
*
|
|
9
|
+
* Opens a browser window for manual login with live progress updates.
|
|
10
|
+
* The operation waits synchronously for login completion (up to 10 minutes).
|
|
11
|
+
*/
|
|
12
|
+
export async function handleSetupAuth(ctx, args, sendProgress) {
|
|
13
|
+
const { show_browser } = args;
|
|
14
|
+
// CRITICAL: Send immediate progress to reset timeout from the very start
|
|
15
|
+
await sendProgress?.("Initializing authentication setup...", 0, 10);
|
|
16
|
+
log.info(`🔧 [TOOL] setup_auth called`);
|
|
17
|
+
if (show_browser !== undefined) {
|
|
18
|
+
log.info(` Show browser: ${show_browser}`);
|
|
19
|
+
}
|
|
20
|
+
// Guard: setup_auth ALWAYS clears all saved credentials before re-logging in.
|
|
21
|
+
// Calling it headlessly will wipe auth and then fail to restore it, leaving
|
|
22
|
+
// all sessions permanently unauthenticated. Require show_browser:true.
|
|
23
|
+
if (!show_browser) {
|
|
24
|
+
log.error("❌ setup_auth requires show_browser:true — cannot login interactively in headless mode");
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
authenticated: false,
|
|
28
|
+
error: "setup_auth requires show_browser:true. " +
|
|
29
|
+
"Calling it without a visible browser wipes your saved credentials then fails to restore them. " +
|
|
30
|
+
"Run the auth-now.mjs script instead, or pass show_browser:true.",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const startTime = Date.now();
|
|
34
|
+
try {
|
|
35
|
+
// Progress: Starting
|
|
36
|
+
await sendProgress?.("Preparing authentication browser...", 1, 10);
|
|
37
|
+
log.info(` 🌐 Opening browser for interactive login...`);
|
|
38
|
+
// Progress: Opening browser
|
|
39
|
+
await sendProgress?.("Opening browser window...", 2, 10);
|
|
40
|
+
// Perform setup with progress updates; pass show_browser so the caller
|
|
41
|
+
// can force a visible browser even when HEADLESS=true is set in env
|
|
42
|
+
const success = await ctx.authManager.performSetup(sendProgress, show_browser);
|
|
43
|
+
const durationSeconds = (Date.now() - startTime) / 1000;
|
|
44
|
+
if (success) {
|
|
45
|
+
// Progress: Complete
|
|
46
|
+
await sendProgress?.("Authentication saved successfully!", 10, 10);
|
|
47
|
+
log.success(`✅ [TOOL] setup_auth completed (${durationSeconds.toFixed(1)}s)`);
|
|
48
|
+
// Audit: successful authentication
|
|
49
|
+
await audit.auth("setup_auth", true, { duration_seconds: durationSeconds });
|
|
50
|
+
await audit.tool("setup_auth", {}, true, Date.now() - startTime);
|
|
51
|
+
return {
|
|
52
|
+
success: true,
|
|
53
|
+
data: {
|
|
54
|
+
status: "authenticated",
|
|
55
|
+
message: "Successfully authenticated and saved browser state",
|
|
56
|
+
authenticated: true,
|
|
57
|
+
duration_seconds: durationSeconds,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
log.error(`❌ [TOOL] setup_auth failed (${durationSeconds.toFixed(1)}s)`);
|
|
63
|
+
// Audit: failed authentication
|
|
64
|
+
await audit.auth("setup_auth", false, { reason: "cancelled_or_failed" });
|
|
65
|
+
await audit.tool("setup_auth", {}, false, Date.now() - startTime, "Authentication failed or was cancelled");
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
error: "Authentication failed or was cancelled",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
74
|
+
const durationSeconds = (Date.now() - startTime) / 1000;
|
|
75
|
+
log.error(`❌ [TOOL] setup_auth failed: ${errorMessage} (${durationSeconds.toFixed(1)}s)`);
|
|
76
|
+
// Audit: auth error
|
|
77
|
+
await audit.auth("setup_auth", false, { error: errorMessage });
|
|
78
|
+
await audit.tool("setup_auth", {}, false, Date.now() - startTime, errorMessage);
|
|
79
|
+
return {
|
|
80
|
+
success: false,
|
|
81
|
+
error: errorMessage,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Handle re_auth tool
|
|
87
|
+
*
|
|
88
|
+
* Performs a complete re-authentication:
|
|
89
|
+
* 1. Closes all active browser sessions
|
|
90
|
+
* 2. Deletes all saved authentication data (cookies, Chrome profile)
|
|
91
|
+
* 3. Opens browser for fresh Google login
|
|
92
|
+
*
|
|
93
|
+
* Use for switching Google accounts or recovering from rate limits.
|
|
94
|
+
*/
|
|
95
|
+
export async function handleReAuth(ctx, args, sendProgress) {
|
|
96
|
+
const { show_browser } = args;
|
|
97
|
+
await sendProgress?.("Preparing re-authentication...", 0, 12);
|
|
98
|
+
log.info(`🔧 [TOOL] re_auth called`);
|
|
99
|
+
if (show_browser !== undefined) {
|
|
100
|
+
log.info(` Show browser: ${show_browser}`);
|
|
101
|
+
}
|
|
102
|
+
// Guard: re_auth requires a visible browser — Google login is interactive.
|
|
103
|
+
// Calling without show_browser:true would wipe saved credentials then fail,
|
|
104
|
+
// leaving all sessions permanently unauthenticated.
|
|
105
|
+
if (!show_browser) {
|
|
106
|
+
log.error("❌ re_auth requires show_browser:true — cannot login interactively in headless mode");
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
error: "re_auth requires show_browser:true. Google login is interactive and cannot complete " +
|
|
110
|
+
"in headless mode. Calling re_auth headlessly wipes your saved credentials then fails to " +
|
|
111
|
+
"restore them, destroying auth for all concurrent sessions. Pass show_browser:true.",
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const startTime = Date.now();
|
|
115
|
+
try {
|
|
116
|
+
// 1. Close all active sessions
|
|
117
|
+
await sendProgress?.("Closing all active sessions...", 1, 12);
|
|
118
|
+
log.info(" 🛑 Closing all sessions...");
|
|
119
|
+
await ctx.sessionManager.closeAllSessions();
|
|
120
|
+
log.success(" ✅ All sessions closed");
|
|
121
|
+
// 2. Clear all auth data
|
|
122
|
+
await sendProgress?.("Clearing authentication data...", 2, 12);
|
|
123
|
+
log.info(" 🗑️ Clearing all auth data...");
|
|
124
|
+
await ctx.authManager.clearAllAuthData();
|
|
125
|
+
log.success(" ✅ Auth data cleared");
|
|
126
|
+
// 3. Perform fresh setup
|
|
127
|
+
await sendProgress?.("Starting fresh authentication...", 3, 12);
|
|
128
|
+
log.info(" 🌐 Starting fresh authentication setup...");
|
|
129
|
+
const success = await ctx.authManager.performSetup(sendProgress);
|
|
130
|
+
const durationSeconds = (Date.now() - startTime) / 1000;
|
|
131
|
+
if (success) {
|
|
132
|
+
await sendProgress?.("Re-authentication complete!", 12, 12);
|
|
133
|
+
log.success(`✅ [TOOL] re_auth completed (${durationSeconds.toFixed(1)}s)`);
|
|
134
|
+
// Audit: successful re-auth
|
|
135
|
+
await audit.auth("re_auth", true, { duration_seconds: durationSeconds });
|
|
136
|
+
await audit.tool("re_auth", {}, true, Date.now() - startTime);
|
|
137
|
+
return {
|
|
138
|
+
success: true,
|
|
139
|
+
data: {
|
|
140
|
+
status: "authenticated",
|
|
141
|
+
message: "Successfully re-authenticated with new account. All previous sessions have been closed.",
|
|
142
|
+
authenticated: true,
|
|
143
|
+
duration_seconds: durationSeconds,
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
log.error(`❌ [TOOL] re_auth failed (${durationSeconds.toFixed(1)}s)`);
|
|
149
|
+
// Audit: failed re-auth
|
|
150
|
+
await audit.auth("re_auth", false, { reason: "cancelled_or_failed" });
|
|
151
|
+
await audit.tool("re_auth", {}, false, Date.now() - startTime, "Re-authentication failed or was cancelled");
|
|
152
|
+
return {
|
|
153
|
+
success: false,
|
|
154
|
+
error: "Re-authentication failed or was cancelled",
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
160
|
+
const durationSeconds = (Date.now() - startTime) / 1000;
|
|
161
|
+
log.error(`❌ [TOOL] re_auth failed: ${errorMessage} (${durationSeconds.toFixed(1)}s)`);
|
|
162
|
+
// Audit: re-auth error
|
|
163
|
+
await audit.auth("re_auth", false, { error: errorMessage });
|
|
164
|
+
await audit.tool("re_auth", {}, false, Date.now() - startTime, errorMessage);
|
|
165
|
+
return {
|
|
166
|
+
success: false,
|
|
167
|
+
error: errorMessage,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/tools/handlers/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAmB,EACnB,IAGC,EACD,YAA+B;IAS/B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE9B,yEAAyE;IACzE,MAAM,YAAY,EAAE,CAAC,sCAAsC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpE,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACxC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,8EAA8E;IAC9E,4EAA4E;IAC5E,uEAAuE;IACvE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAC;QACnG,OAAO;YACL,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,KAAK;YACpB,KAAK,EAAE,yCAAyC;gBAC9C,gGAAgG;gBAChG,iEAAiE;SAC7D,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,YAAY,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEnE,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAE1D,4BAA4B;QAC5B,MAAM,YAAY,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEzD,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAE/E,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QAExD,IAAI,OAAO,EAAE,CAAC;YACZ,qBAAqB;YACrB,MAAM,YAAY,EAAE,CAAC,oCAAoC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAEnE,GAAG,CAAC,OAAO,CAAC,kCAAkC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAE9E,mCAAmC;YACnC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC;YAC5E,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YAEjE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,MAAM,EAAE,eAAe;oBACvB,OAAO,EAAE,oDAAoD;oBAC7D,aAAa,EAAE,IAAI;oBACnB,gBAAgB,EAAE,eAAe;iBAClC;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,+BAA+B,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEzE,+BAA+B;YAC/B,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACzE,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,wCAAwC,CAAC,CAAC;YAE5G,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,wCAAwC;aAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACxD,GAAG,CAAC,KAAK,CAAC,+BAA+B,YAAY,KAAK,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE1F,oBAAoB;QACpB,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC;QAEhF,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAmB,EACnB,IAGC,EACD,YAA+B;IAS/B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE9B,MAAM,YAAY,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACrC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,oDAAoD;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;QAChG,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,sFAAsF;gBAC3F,0FAA0F;gBAC1F,oFAAoF;SACvF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,+BAA+B;QAC/B,MAAM,YAAY,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QACzC,MAAM,GAAG,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAC5C,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAEvC,yBAAyB;QACzB,MAAM,YAAY,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC7C,MAAM,GAAG,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;QACzC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAErC,yBAAyB;QACzB,MAAM,YAAY,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAEjE,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QAExD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,YAAY,EAAE,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5D,GAAG,CAAC,OAAO,CAAC,+BAA+B,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAE3E,4BAA4B;YAC5B,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC;YACzE,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YAE9D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,MAAM,EAAE,eAAe;oBACvB,OAAO,EACL,yFAAyF;oBAC3F,aAAa,EAAE,IAAI;oBACnB,gBAAgB,EAAE,eAAe;iBAClC;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,CAAC,4BAA4B,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEtE,wBAAwB;YACxB,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACtE,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,2CAA2C,CAAC,CAAC;YAE5G,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,2CAA2C;aACnD,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;QACxD,GAAG,CAAC,KAAK,CACP,4BAA4B,YAAY,KAAK,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC5E,CAAC;QAEF,uBAAuB;QACvB,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC;QAE7E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;AACH,CAAC"}
|