@aiscene/aiserver 1.8.4 → 1.8.5

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.
@@ -0,0 +1,97 @@
1
+ /**
2
+ * capture-manager.ts — 采集会话生命周期管理
3
+ *
4
+ * 浏览器模式:headed Playwright 启动浏览器,前端通过截图API实时预览,
5
+ * 用户在前端点击时通过操作API转发给后端执行,定时自动截屏提取内容
6
+ */
7
+ import type { CaptureStatusResponse, StartCaptureRequest, PageSnapshot } from './types.js';
8
+ /**
9
+ * 采集会话管理器 — 单例
10
+ */
11
+ export declare class CaptureManager {
12
+ private sessions;
13
+ /** 自动截屏定时器 */
14
+ private autoSnapshotTimers;
15
+ private updateScreenshot;
16
+ /**
17
+ * 启动采集会话
18
+ */
19
+ startCapture(request: StartCaptureRequest): Promise<CaptureStatusResponse>;
20
+ /**
21
+ * 启动浏览器采集 — headed Playwright 打开目标 URL
22
+ * 前端通过截图API实时查看页面,用户操作通过操作API转发
23
+ */
24
+ private startBrowserCapture;
25
+ /**
26
+ * 启动自动截屏定时器 — 每隔 AUTO_SNAPSHOT_INTERVAL 自动截屏并提取内容
27
+ */
28
+ private startAutoSnapshot;
29
+ /**
30
+ * 停止自动截屏定时器
31
+ */
32
+ private stopAutoSnapshot;
33
+ /**
34
+ * 获取当前页面截图(用于前端实时预览)
35
+ */
36
+ getScreenshot(sessionId: string): Promise<string>;
37
+ /**
38
+ * 获取缓存的最新截图(不重新截图,性能好)
39
+ */
40
+ getCachedScreenshot(sessionId: string): string;
41
+ /**
42
+ * 启动 App 采集
43
+ */
44
+ private startAppCapture;
45
+ private getAndroidActivityName;
46
+ private captureAppSnapshot;
47
+ /**
48
+ * 手动触发一次页面快照提取
49
+ */
50
+ takeSnapshot(sessionId: string): Promise<PageSnapshot>;
51
+ /**
52
+ * 停止采集并触发知识梳理+上传
53
+ */
54
+ stopCapture(sessionId: string): Promise<CaptureStatusResponse>;
55
+ /**
56
+ * 获取采集会话状态
57
+ */
58
+ getStatus(sessionId: string): CaptureStatusResponse;
59
+ /**
60
+ * 获取所有采集会话列表
61
+ */
62
+ listSessions(): CaptureStatusResponse[];
63
+ /**
64
+ * 删除采集会话
65
+ */
66
+ deleteSession(sessionId: string): void;
67
+ /**
68
+ * 浏览器模式:导航到新 URL 并提取快照
69
+ */
70
+ navigateAndSnapshot(sessionId: string, url: string): Promise<PageSnapshot>;
71
+ /**
72
+ * 浏览器模式:在页面上执行点击操作
73
+ * 前端将点击坐标发过来,后端用 Playwright 执行
74
+ */
75
+ clickAt(sessionId: string, x: number, y: number): Promise<{
76
+ snapshot: PageSnapshot;
77
+ screenshot: string;
78
+ }>;
79
+ /**
80
+ * 浏览器模式:在页面输入框中输入文字
81
+ */
82
+ typeText(sessionId: string, selector: string, text: string): Promise<{
83
+ snapshot: PageSnapshot;
84
+ screenshot: string;
85
+ }>;
86
+ /**
87
+ * 浏览器模式:滚动页面
88
+ */
89
+ scrollPage(sessionId: string, direction: 'up' | 'down', pixels?: number): Promise<{
90
+ snapshot: PageSnapshot;
91
+ screenshot: string;
92
+ }>;
93
+ private toStatusResponse;
94
+ }
95
+ /** 全局单例 */
96
+ export declare const captureManager: CaptureManager;
97
+ //# sourceMappingURL=capture-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-manager.d.ts","sourceRoot":"","sources":["../../src/capture/capture-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAGV,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AAgBpB;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAqC;IACrD,cAAc;IACd,OAAO,CAAC,kBAAkB,CAAqD;YAEjE,gBAAgB;IAe9B;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAqChF;;;OAGG;YACW,mBAAmB;IA+BjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvD;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAQ9C;;OAEG;YACW,eAAe;YAUf,sBAAsB;YActB,kBAAkB;IA2BhC;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuB5D;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA4DpE;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB;IAQnD;;OAEG;IACH,YAAY,IAAI,qBAAqB,EAAE;IAIvC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAkBtC;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAchF;;;OAGG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAmB/G;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAkB1H;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAmB5I,OAAO,CAAC,gBAAgB;CAwBzB;AAED,WAAW;AACX,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -0,0 +1,426 @@
1
+ /**
2
+ * capture-manager.ts — 采集会话生命周期管理
3
+ *
4
+ * 浏览器模式:headed Playwright 启动浏览器,前端通过截图API实时预览,
5
+ * 用户在前端点击时通过操作API转发给后端执行,定时自动截屏提取内容
6
+ */
7
+ import { randomUUID } from 'node:crypto';
8
+ import { createLogger } from '../core/logger.js';
9
+ import { chromium } from 'playwright';
10
+ import { extractAppSnapshotFromHierarchy, extractPageSnapshot, } from './page-extractor.js';
11
+ import { processCaptureSession } from './knowledge-organizer.js';
12
+ import { captureAndroidScreenState, runAdb, } from '../recorder/android-ui-hierarchy.js';
13
+ const logger = createLogger('CaptureManager');
14
+ /** 自动截屏间隔(毫秒) */
15
+ const AUTO_SNAPSHOT_INTERVAL = 8000;
16
+ /**
17
+ * 采集会话管理器 — 单例
18
+ */
19
+ export class CaptureManager {
20
+ sessions = new Map();
21
+ /** 自动截屏定时器 */
22
+ autoSnapshotTimers = new Map();
23
+ async updateScreenshot(session, quality = 70) {
24
+ if (!session.page) {
25
+ return session.lastScreenshot || '';
26
+ }
27
+ try {
28
+ const screenshot = await session.page.screenshot({ type: 'jpeg', quality });
29
+ session.lastScreenshot = 'data:image/jpeg;base64,' + screenshot.toString('base64');
30
+ }
31
+ catch (error) {
32
+ logger.warn('Screenshot update failed, keep cached preview: ' + error.message);
33
+ }
34
+ return session.lastScreenshot || '';
35
+ }
36
+ /**
37
+ * 启动采集会话
38
+ */
39
+ async startCapture(request) {
40
+ const sessionId = randomUUID();
41
+ const name = request.name || (request.mode === 'browser' ? '浏览器采集' : 'App采集');
42
+ const session = {
43
+ id: sessionId,
44
+ mode: request.mode,
45
+ status: 'pending',
46
+ name,
47
+ knowledgeBaseId: request.knowledgeBaseId,
48
+ knowledgeBaseApiUrl: request.knowledgeBaseApiUrl || '',
49
+ knowledgeBaseToken: request.knowledgeBaseToken || '',
50
+ relativeFolder: request.relativeFolder || '',
51
+ url: request.url,
52
+ deviceId: request.deviceId,
53
+ packageName: request.packageName,
54
+ snapshots: [],
55
+ createdAt: new Date(),
56
+ };
57
+ this.sessions.set(sessionId, session);
58
+ try {
59
+ if (request.mode === 'browser') {
60
+ await this.startBrowserCapture(session);
61
+ }
62
+ else {
63
+ await this.startAppCapture(session);
64
+ }
65
+ }
66
+ catch (error) {
67
+ session.status = 'failed';
68
+ session.errorMessage = error.message;
69
+ logger.error('Failed to start capture: ' + session.errorMessage);
70
+ }
71
+ return this.toStatusResponse(session);
72
+ }
73
+ /**
74
+ * 启动浏览器采集 — headed Playwright 打开目标 URL
75
+ * 前端通过截图API实时查看页面,用户操作通过操作API转发
76
+ */
77
+ async startBrowserCapture(session) {
78
+ if (!session.url) {
79
+ throw new Error('浏览器模式需要提供 url 参数');
80
+ }
81
+ logger.info('Starting browser capture (headed): ' + session.url);
82
+ // headed 模式启动,用户可以看到浏览器窗口
83
+ const browser = await chromium.launch({ headless: false });
84
+ const context = await browser.newContext({ viewport: { width: 1280, height: 800 } });
85
+ const page = await context.newPage();
86
+ // 导航到目标页面
87
+ await page.goto(session.url, { waitUntil: 'domcontentloaded', timeout: 30000 });
88
+ // 提取第一次快照
89
+ const firstSnapshot = await extractPageSnapshot(page);
90
+ session.snapshots.push(firstSnapshot);
91
+ session.browser = browser;
92
+ session.browserContext = context;
93
+ session.page = page;
94
+ session.status = 'running';
95
+ await this.updateScreenshot(session, 60);
96
+ // 启动自动截屏定时器
97
+ this.startAutoSnapshot(session.id);
98
+ logger.info('Browser capture started: ' + session.url + ' (first snapshot: ' + firstSnapshot.title + ')');
99
+ }
100
+ /**
101
+ * 启动自动截屏定时器 — 每隔 AUTO_SNAPSHOT_INTERVAL 自动截屏并提取内容
102
+ */
103
+ startAutoSnapshot(sessionId) {
104
+ this.stopAutoSnapshot(sessionId);
105
+ const timer = setInterval(async () => {
106
+ const session = this.sessions.get(sessionId);
107
+ if (!session || session.status !== 'running' || !session.page) {
108
+ this.stopAutoSnapshot(sessionId);
109
+ return;
110
+ }
111
+ try {
112
+ // 自动提取快照
113
+ const snapshot = await extractPageSnapshot(session.page);
114
+ // 只在页面内容有变化时记录(对比标题+URL)
115
+ const lastSnapshot = session.snapshots[session.snapshots.length - 1];
116
+ if (!lastSnapshot || lastSnapshot.title !== snapshot.title || lastSnapshot.url !== snapshot.url) {
117
+ session.snapshots.push(snapshot);
118
+ logger.info('Auto snapshot: ' + snapshot.title + ' (total: ' + session.snapshots.length + ')');
119
+ }
120
+ // 更新预览图
121
+ await this.updateScreenshot(session, 60);
122
+ }
123
+ catch (error) {
124
+ logger.warn('Auto snapshot failed: ' + error.message);
125
+ }
126
+ }, AUTO_SNAPSHOT_INTERVAL);
127
+ this.autoSnapshotTimers.set(sessionId, timer);
128
+ }
129
+ /**
130
+ * 停止自动截屏定时器
131
+ */
132
+ stopAutoSnapshot(sessionId) {
133
+ const timer = this.autoSnapshotTimers.get(sessionId);
134
+ if (timer) {
135
+ clearInterval(timer);
136
+ this.autoSnapshotTimers.delete(sessionId);
137
+ }
138
+ }
139
+ /**
140
+ * 获取当前页面截图(用于前端实时预览)
141
+ */
142
+ async getScreenshot(sessionId) {
143
+ const session = this.sessions.get(sessionId);
144
+ if (!session) {
145
+ throw new Error('采集会话不存在: ' + sessionId);
146
+ }
147
+ if (!session.page) {
148
+ throw new Error('无活跃页面');
149
+ }
150
+ const screenshot = await this.updateScreenshot(session, 70);
151
+ if (!screenshot) {
152
+ throw new Error('当前页面截图不可用,请稍后重试');
153
+ }
154
+ return screenshot;
155
+ }
156
+ /**
157
+ * 获取缓存的最新截图(不重新截图,性能好)
158
+ */
159
+ getCachedScreenshot(sessionId) {
160
+ const session = this.sessions.get(sessionId);
161
+ if (!session) {
162
+ throw new Error('采集会话不存在: ' + sessionId);
163
+ }
164
+ return session.lastScreenshot || '';
165
+ }
166
+ /**
167
+ * 启动 App 采集
168
+ */
169
+ async startAppCapture(session) {
170
+ if (!session.deviceId) {
171
+ throw new Error('App模式需要提供 deviceId 参数');
172
+ }
173
+ logger.info('Starting app capture: device=' + session.deviceId + ', package=' + (session.packageName || ''));
174
+ session.status = 'running';
175
+ logger.info('App capture session created (manual snapshots only)');
176
+ }
177
+ async getAndroidActivityName(deviceId) {
178
+ try {
179
+ const output = await runAdb(deviceId, ['shell', 'dumpsys', 'window'], 8000);
180
+ const line = output
181
+ .split('\n')
182
+ .find(item => item.includes('mCurrentFocus') || item.includes('mFocusedApp'));
183
+ const match = line?.match(/([A-Za-z0-9_.]+\/[A-Za-z0-9_.$]+)/);
184
+ return match?.[1];
185
+ }
186
+ catch (error) {
187
+ logger.warn('Get Android activity failed: ' + error.message);
188
+ return undefined;
189
+ }
190
+ }
191
+ async captureAppSnapshot(session, logPrefix = 'App snapshot') {
192
+ if (session.mode !== 'android') {
193
+ throw new Error('当前 App 采集暂只支持 Android 设备快照');
194
+ }
195
+ if (!session.deviceId) {
196
+ throw new Error('App模式需要提供 deviceId 参数');
197
+ }
198
+ const [state, activityName] = await Promise.all([
199
+ captureAndroidScreenState(session.deviceId),
200
+ this.getAndroidActivityName(session.deviceId),
201
+ ]);
202
+ const snapshot = extractAppSnapshotFromHierarchy(state.xml, state.screenshotBase64, session.packageName, activityName);
203
+ session.snapshots.push(snapshot);
204
+ if (state.screenshotBase64) {
205
+ session.lastScreenshot = 'data:image/png;base64,' + state.screenshotBase64;
206
+ }
207
+ logger.info(logPrefix + ': ' + snapshot.title + ' (total: ' + session.snapshots.length + ')');
208
+ return snapshot;
209
+ }
210
+ /**
211
+ * 手动触发一次页面快照提取
212
+ */
213
+ async takeSnapshot(sessionId) {
214
+ const session = this.sessions.get(sessionId);
215
+ if (!session) {
216
+ throw new Error('采集会话不存在: ' + sessionId);
217
+ }
218
+ if (session.status !== 'running') {
219
+ throw new Error('采集会话状态不是 running: ' + session.status);
220
+ }
221
+ if (session.mode === 'browser' && session.page) {
222
+ const snapshot = await extractPageSnapshot(session.page);
223
+ session.snapshots.push(snapshot);
224
+ logger.info('Manual snapshot: ' + snapshot.title + ' (total: ' + session.snapshots.length + ')');
225
+ return snapshot;
226
+ }
227
+ if (session.mode === 'android') {
228
+ return this.captureAppSnapshot(session, 'Manual app snapshot');
229
+ }
230
+ throw new Error('当前模式不支持手动快照提取');
231
+ }
232
+ /**
233
+ * 停止采集并触发知识梳理+上传
234
+ */
235
+ async stopCapture(sessionId) {
236
+ const session = this.sessions.get(sessionId);
237
+ if (!session) {
238
+ throw new Error('采集会话不存在: ' + sessionId);
239
+ }
240
+ logger.info('Stopping capture session: ' + sessionId);
241
+ // 停止自动截屏
242
+ this.stopAutoSnapshot(sessionId);
243
+ // 最终截一张完整快照
244
+ if (session.mode === 'browser' && session.page) {
245
+ try {
246
+ const finalSnapshot = await extractPageSnapshot(session.page);
247
+ const lastSnapshot = session.snapshots[session.snapshots.length - 1];
248
+ if (!lastSnapshot || lastSnapshot.title !== finalSnapshot.title || lastSnapshot.url !== finalSnapshot.url) {
249
+ session.snapshots.push(finalSnapshot);
250
+ logger.info('Final snapshot added: ' + finalSnapshot.title);
251
+ }
252
+ }
253
+ catch (e) {
254
+ logger.warn('Final snapshot failed: ' + e.message);
255
+ }
256
+ }
257
+ // 关闭浏览器资源
258
+ if (session.mode === 'browser') {
259
+ try {
260
+ if (session.page)
261
+ await session.page.close();
262
+ if (session.browserContext)
263
+ await session.browserContext.close();
264
+ if (session.browser)
265
+ await session.browser.close();
266
+ }
267
+ catch (e) {
268
+ logger.warn('Error closing browser: ' + e.message);
269
+ }
270
+ session.page = undefined;
271
+ session.browserContext = undefined;
272
+ session.browser = undefined;
273
+ }
274
+ // 触发知识梳理+上传
275
+ if (session.snapshots.length > 0) {
276
+ session.status = 'organizing';
277
+ try {
278
+ const result = await processCaptureSession(session);
279
+ session.status = 'completed';
280
+ session.completedAt = new Date();
281
+ logger.info('Capture completed and uploaded: ' + result.fileName);
282
+ }
283
+ catch (error) {
284
+ session.status = 'failed';
285
+ session.errorMessage = error.message;
286
+ logger.error('Knowledge processing failed: ' + session.errorMessage);
287
+ }
288
+ }
289
+ else {
290
+ session.status = 'stopped';
291
+ session.completedAt = new Date();
292
+ logger.info('Capture stopped with no snapshots');
293
+ }
294
+ return this.toStatusResponse(session);
295
+ }
296
+ /**
297
+ * 获取采集会话状态
298
+ */
299
+ getStatus(sessionId) {
300
+ const session = this.sessions.get(sessionId);
301
+ if (!session) {
302
+ throw new Error('采集会话不存在: ' + sessionId);
303
+ }
304
+ return this.toStatusResponse(session);
305
+ }
306
+ /**
307
+ * 获取所有采集会话列表
308
+ */
309
+ listSessions() {
310
+ return Array.from(this.sessions.values()).map(s => this.toStatusResponse(s));
311
+ }
312
+ /**
313
+ * 删除采集会话
314
+ */
315
+ deleteSession(sessionId) {
316
+ const session = this.sessions.get(sessionId);
317
+ if (!session)
318
+ return;
319
+ this.stopAutoSnapshot(sessionId);
320
+ if (session.mode === 'browser') {
321
+ try {
322
+ if (session.page)
323
+ session.page.close();
324
+ if (session.browserContext)
325
+ session.browserContext.close();
326
+ if (session.browser)
327
+ session.browser.close();
328
+ }
329
+ catch { }
330
+ }
331
+ this.sessions.delete(sessionId);
332
+ logger.info('Session deleted: ' + sessionId);
333
+ }
334
+ /**
335
+ * 浏览器模式:导航到新 URL 并提取快照
336
+ */
337
+ async navigateAndSnapshot(sessionId, url) {
338
+ const session = this.sessions.get(sessionId);
339
+ if (!session || session.mode !== 'browser' || !session.page) {
340
+ throw new Error('浏览器采集会话不存在或无活跃页面');
341
+ }
342
+ logger.info('Navigating to: ' + url);
343
+ await session.page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
344
+ const snapshot = await extractPageSnapshot(session.page);
345
+ session.snapshots.push(snapshot);
346
+ return snapshot;
347
+ }
348
+ /**
349
+ * 浏览器模式:在页面上执行点击操作
350
+ * 前端将点击坐标发过来,后端用 Playwright 执行
351
+ */
352
+ async clickAt(sessionId, x, y) {
353
+ const session = this.sessions.get(sessionId);
354
+ if (!session || session.mode !== 'browser' || !session.page) {
355
+ throw new Error('浏览器采集会话不存在或无活跃页面');
356
+ }
357
+ logger.info('Click at: ' + x + ', ' + y);
358
+ await session.page.mouse.click(x, y);
359
+ // 等待页面响应
360
+ await session.page.waitForTimeout(500);
361
+ const snapshot = await extractPageSnapshot(session.page);
362
+ session.snapshots.push(snapshot);
363
+ const screenshot = await this.updateScreenshot(session, 70);
364
+ return { snapshot, screenshot };
365
+ }
366
+ /**
367
+ * 浏览器模式:在页面输入框中输入文字
368
+ */
369
+ async typeText(sessionId, selector, text) {
370
+ const session = this.sessions.get(sessionId);
371
+ if (!session || session.mode !== 'browser' || !session.page) {
372
+ throw new Error('浏览器采集会话不存在或无活跃页面');
373
+ }
374
+ logger.info('Type text into: ' + selector);
375
+ await session.page.fill(selector, text);
376
+ await session.page.waitForTimeout(300);
377
+ const snapshot = await extractPageSnapshot(session.page);
378
+ session.snapshots.push(snapshot);
379
+ const screenshot = await this.updateScreenshot(session, 70);
380
+ return { snapshot, screenshot };
381
+ }
382
+ /**
383
+ * 浏览器模式:滚动页面
384
+ */
385
+ async scrollPage(sessionId, direction, pixels = 400) {
386
+ const session = this.sessions.get(sessionId);
387
+ if (!session || session.mode !== 'browser' || !session.page) {
388
+ throw new Error('浏览器采集会话不存在或无活跃页面');
389
+ }
390
+ logger.info('Scroll ' + direction + ' by ' + pixels);
391
+ const delta = direction === 'down' ? pixels : -pixels;
392
+ await session.page.mouse.wheel(0, delta);
393
+ await session.page.waitForTimeout(500);
394
+ const snapshot = await extractPageSnapshot(session.page);
395
+ session.snapshots.push(snapshot);
396
+ const screenshot = await this.updateScreenshot(session, 70);
397
+ return { snapshot, screenshot };
398
+ }
399
+ toStatusResponse(session) {
400
+ return {
401
+ sessionId: session.id,
402
+ status: session.status,
403
+ mode: session.mode,
404
+ name: session.name,
405
+ url: session.url,
406
+ deviceId: session.deviceId,
407
+ packageName: session.packageName,
408
+ snapshotCount: session.snapshots.length,
409
+ snapshots: session.snapshots.map(s => ({
410
+ id: s.id,
411
+ title: s.title,
412
+ url: s.url,
413
+ contentLength: s.content.length,
414
+ imageCount: s.images.length,
415
+ linkCount: s.links.length,
416
+ capturedAt: s.capturedAt,
417
+ })),
418
+ createdAt: session.createdAt.toISOString(),
419
+ completedAt: session.completedAt?.toISOString(),
420
+ errorMessage: session.errorMessage,
421
+ };
422
+ }
423
+ }
424
+ /** 全局单例 */
425
+ export const captureManager = new CaptureManager();
426
+ //# sourceMappingURL=capture-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-manager.js","sourceRoot":"","sources":["../../src/capture/capture-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * knowledge-organizer.ts — LLM 知识梳理 + 上传到后端知识库
3
+ *
4
+ * 采集的页面快照数据交给 LLM 梳理成知识 Markdown 条目,
5
+ * 然后上传到 guada_ai 后端的知识库文件 API
6
+ */
7
+ import type { PageSnapshot, OrganizedKnowledge, CaptureSession } from './types.js';
8
+ /**
9
+ * 用 LLM 梳理采集的页面快照,生成 Markdown 文档
10
+ */
11
+ export declare function organizeSnapshots(snapshots: PageSnapshot[], sessionName: string): Promise<string>;
12
+ /**
13
+ * 将梳理后的 Markdown 上传到后端知识库
14
+ */
15
+ export declare function uploadToKnowledgeBase(session: CaptureSession, markdownContent: string): Promise<OrganizedKnowledge>;
16
+ /**
17
+ * 完整的采集 -> 梳理 -> 上传流程
18
+ */
19
+ export declare function processCaptureSession(session: CaptureSession): Promise<OrganizedKnowledge>;
20
+ //# sourceMappingURL=knowledge-organizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-organizer.d.ts","sourceRoot":"","sources":["../../src/capture/knowledge-organizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiKnF;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,YAAY,EAAE,EACzB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAwCD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAmD7B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,kBAAkB,CAAC,CAW7B"}