@nathanvale/chatline 0.0.1 → 0.0.2-next.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/CHANGELOG.md +6 -0
- package/dist/bin/index.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/cli/commands/clean.d.ts +0 -17
- package/dist/cli/commands/clean.d.ts.map +0 -1
- package/dist/cli/commands/clean.js +0 -142
- package/dist/cli/commands/clean.js.map +0 -1
- package/dist/cli/commands/doctor.d.ts +0 -17
- package/dist/cli/commands/doctor.d.ts.map +0 -1
- package/dist/cli/commands/doctor.js +0 -202
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/enrich-ai.d.ts +0 -17
- package/dist/cli/commands/enrich-ai.d.ts.map +0 -1
- package/dist/cli/commands/enrich-ai.js +0 -371
- package/dist/cli/commands/enrich-ai.js.map +0 -1
- package/dist/cli/commands/index.d.ts +0 -16
- package/dist/cli/commands/index.d.ts.map +0 -1
- package/dist/cli/commands/index.js +0 -16
- package/dist/cli/commands/index.js.map +0 -1
- package/dist/cli/commands/ingest-csv.d.ts +0 -17
- package/dist/cli/commands/ingest-csv.d.ts.map +0 -1
- package/dist/cli/commands/ingest-csv.js +0 -138
- package/dist/cli/commands/ingest-csv.js.map +0 -1
- package/dist/cli/commands/ingest-db.d.ts +0 -17
- package/dist/cli/commands/ingest-db.d.ts.map +0 -1
- package/dist/cli/commands/ingest-db.js +0 -159
- package/dist/cli/commands/ingest-db.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -17
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -110
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/normalize-link.d.ts +0 -16
- package/dist/cli/commands/normalize-link.d.ts.map +0 -1
- package/dist/cli/commands/normalize-link.js +0 -144
- package/dist/cli/commands/normalize-link.js.map +0 -1
- package/dist/cli/commands/render-markdown.d.ts +0 -17
- package/dist/cli/commands/render-markdown.d.ts.map +0 -1
- package/dist/cli/commands/render-markdown.js +0 -218
- package/dist/cli/commands/render-markdown.js.map +0 -1
- package/dist/cli/commands/stats.d.ts +0 -17
- package/dist/cli/commands/stats.d.ts.map +0 -1
- package/dist/cli/commands/stats.js +0 -175
- package/dist/cli/commands/stats.js.map +0 -1
- package/dist/cli/commands/validate.d.ts +0 -17
- package/dist/cli/commands/validate.d.ts.map +0 -1
- package/dist/cli/commands/validate.js +0 -152
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/index.d.ts +0 -13
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -121
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/types.d.ts +0 -93
- package/dist/cli/types.d.ts.map +0 -1
- package/dist/cli/types.js +0 -7
- package/dist/cli/types.js.map +0 -1
- package/dist/cli/utils.d.ts +0 -29
- package/dist/cli/utils.d.ts.map +0 -1
- package/dist/cli/utils.js +0 -53
- package/dist/cli/utils.js.map +0 -1
- package/dist/cli.d.ts +0 -9
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -1805
- package/dist/config/generator.d.ts +0 -90
- package/dist/config/generator.d.ts.map +0 -1
- package/dist/config/generator.js +0 -320
- package/dist/config/generator.js.map +0 -1
- package/dist/config/loader.d.ts +0 -107
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -251
- package/dist/config/loader.js.map +0 -1
- package/dist/config/schema.d.ts +0 -107
- package/dist/config/schema.d.ts.map +0 -1
- package/dist/config/schema.js +0 -169
- package/dist/config/schema.js.map +0 -1
- package/dist/enrich/audio-transcription.d.ts +0 -77
- package/dist/enrich/audio-transcription.d.ts.map +0 -1
- package/dist/enrich/audio-transcription.js +0 -370
- package/dist/enrich/audio-transcription.js.map +0 -1
- package/dist/enrich/checkpoint.d.ts +0 -137
- package/dist/enrich/checkpoint.d.ts.map +0 -1
- package/dist/enrich/checkpoint.js +0 -205
- package/dist/enrich/checkpoint.js.map +0 -1
- package/dist/enrich/idempotency.d.ts +0 -90
- package/dist/enrich/idempotency.d.ts.map +0 -1
- package/dist/enrich/idempotency.js +0 -188
- package/dist/enrich/idempotency.js.map +0 -1
- package/dist/enrich/image-analysis.d.ts +0 -62
- package/dist/enrich/image-analysis.d.ts.map +0 -1
- package/dist/enrich/image-analysis.js +0 -264
- package/dist/enrich/image-analysis.js.map +0 -1
- package/dist/enrich/index.d.ts +0 -60
- package/dist/enrich/index.d.ts.map +0 -1
- package/dist/enrich/index.js +0 -74
- package/dist/enrich/index.js.map +0 -1
- package/dist/enrich/link-enrichment.d.ts +0 -37
- package/dist/enrich/link-enrichment.d.ts.map +0 -1
- package/dist/enrich/link-enrichment.js +0 -202
- package/dist/enrich/link-enrichment.js.map +0 -1
- package/dist/enrich/pdf-video-handling.d.ts +0 -49
- package/dist/enrich/pdf-video-handling.d.ts.map +0 -1
- package/dist/enrich/pdf-video-handling.js +0 -325
- package/dist/enrich/pdf-video-handling.js.map +0 -1
- package/dist/enrich/progress-tracker.d.ts +0 -120
- package/dist/enrich/progress-tracker.d.ts.map +0 -1
- package/dist/enrich/progress-tracker.js +0 -220
- package/dist/enrich/progress-tracker.js.map +0 -1
- package/dist/enrich/providers/firecrawl.d.ts +0 -18
- package/dist/enrich/providers/firecrawl.d.ts.map +0 -1
- package/dist/enrich/providers/firecrawl.js +0 -48
- package/dist/enrich/providers/firecrawl.js.map +0 -1
- package/dist/enrich/providers/generic.d.ts +0 -16
- package/dist/enrich/providers/generic.d.ts.map +0 -1
- package/dist/enrich/providers/generic.js +0 -36
- package/dist/enrich/providers/generic.js.map +0 -1
- package/dist/enrich/providers/index.d.ts +0 -14
- package/dist/enrich/providers/index.d.ts.map +0 -1
- package/dist/enrich/providers/index.js +0 -13
- package/dist/enrich/providers/index.js.map +0 -1
- package/dist/enrich/providers/instagram.d.ts +0 -16
- package/dist/enrich/providers/instagram.d.ts.map +0 -1
- package/dist/enrich/providers/instagram.js +0 -43
- package/dist/enrich/providers/instagram.js.map +0 -1
- package/dist/enrich/providers/spotify.d.ts +0 -16
- package/dist/enrich/providers/spotify.d.ts.map +0 -1
- package/dist/enrich/providers/spotify.js +0 -45
- package/dist/enrich/providers/spotify.js.map +0 -1
- package/dist/enrich/providers/twitter.d.ts +0 -16
- package/dist/enrich/providers/twitter.d.ts.map +0 -1
- package/dist/enrich/providers/twitter.js +0 -43
- package/dist/enrich/providers/twitter.js.map +0 -1
- package/dist/enrich/providers/types.d.ts +0 -47
- package/dist/enrich/providers/types.d.ts.map +0 -1
- package/dist/enrich/providers/types.js +0 -15
- package/dist/enrich/providers/types.js.map +0 -1
- package/dist/enrich/providers/youtube.d.ts +0 -16
- package/dist/enrich/providers/youtube.d.ts.map +0 -1
- package/dist/enrich/providers/youtube.js +0 -43
- package/dist/enrich/providers/youtube.js.map +0 -1
- package/dist/enrich/rate-limiting.d.ts +0 -118
- package/dist/enrich/rate-limiting.d.ts.map +0 -1
- package/dist/enrich/rate-limiting.js +0 -258
- package/dist/enrich/rate-limiting.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/ingest/dedup-merge.d.ts +0 -82
- package/dist/ingest/dedup-merge.d.ts.map +0 -1
- package/dist/ingest/dedup-merge.js +0 -262
- package/dist/ingest/dedup-merge.js.map +0 -1
- package/dist/ingest/ingest-csv.d.ts +0 -62
- package/dist/ingest/ingest-csv.d.ts.map +0 -1
- package/dist/ingest/ingest-csv.js +0 -300
- package/dist/ingest/ingest-csv.js.map +0 -1
- package/dist/ingest/ingest-db.d.ts +0 -64
- package/dist/ingest/ingest-db.d.ts.map +0 -1
- package/dist/ingest/ingest-db.js +0 -172
- package/dist/ingest/ingest-db.js.map +0 -1
- package/dist/ingest/link-replies-and-tapbacks.d.ts +0 -53
- package/dist/ingest/link-replies-and-tapbacks.d.ts.map +0 -1
- package/dist/ingest/link-replies-and-tapbacks.js +0 -381
- package/dist/ingest/link-replies-and-tapbacks.js.map +0 -1
- package/dist/normalize/date-converters.d.ts +0 -45
- package/dist/normalize/date-converters.d.ts.map +0 -1
- package/dist/normalize/date-converters.js +0 -166
- package/dist/normalize/date-converters.js.map +0 -1
- package/dist/normalize/path-validator.d.ts +0 -65
- package/dist/normalize/path-validator.d.ts.map +0 -1
- package/dist/normalize/path-validator.js +0 -221
- package/dist/normalize/path-validator.js.map +0 -1
- package/dist/normalize/validate-normalized.d.ts +0 -45
- package/dist/normalize/validate-normalized.d.ts.map +0 -1
- package/dist/normalize/validate-normalized.js +0 -144
- package/dist/normalize/validate-normalized.js.map +0 -1
- package/dist/render/embeds-blockquotes.d.ts +0 -84
- package/dist/render/embeds-blockquotes.d.ts.map +0 -1
- package/dist/render/embeds-blockquotes.js +0 -204
- package/dist/render/embeds-blockquotes.js.map +0 -1
- package/dist/render/grouping.d.ts +0 -78
- package/dist/render/grouping.d.ts.map +0 -1
- package/dist/render/grouping.js +0 -134
- package/dist/render/grouping.js.map +0 -1
- package/dist/render/index.d.ts +0 -47
- package/dist/render/index.d.ts.map +0 -1
- package/dist/render/index.js +0 -245
- package/dist/render/index.js.map +0 -1
- package/dist/render/reply-rendering.d.ts +0 -88
- package/dist/render/reply-rendering.d.ts.map +0 -1
- package/dist/render/reply-rendering.js +0 -196
- package/dist/render/reply-rendering.js.map +0 -1
- package/dist/schema/message.d.ts +0 -125
- package/dist/schema/message.d.ts.map +0 -1
- package/dist/schema/message.js +0 -331
- package/dist/schema/message.js.map +0 -1
- package/dist/utils/delta-detection.d.ts +0 -107
- package/dist/utils/delta-detection.d.ts.map +0 -1
- package/dist/utils/delta-detection.js +0 -199
- package/dist/utils/delta-detection.js.map +0 -1
- package/dist/utils/enrichment-merge.d.ts +0 -135
- package/dist/utils/enrichment-merge.d.ts.map +0 -1
- package/dist/utils/enrichment-merge.js +0 -280
- package/dist/utils/enrichment-merge.js.map +0 -1
- package/dist/utils/human.d.ts +0 -15
- package/dist/utils/human.d.ts.map +0 -1
- package/dist/utils/human.js +0 -27
- package/dist/utils/human.js.map +0 -1
- package/dist/utils/incremental-state.d.ts +0 -133
- package/dist/utils/incremental-state.d.ts.map +0 -1
- package/dist/utils/incremental-state.js +0 -237
- package/dist/utils/incremental-state.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -40
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -176
- package/dist/utils/logger.js.map +0 -1
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PDF and Video Handling Module (ENRICH--T03)
|
|
3
|
-
*
|
|
4
|
-
* Implements PDF/video enrichment without heavy processing:
|
|
5
|
-
* - AC01: PDF summarization via Gemini with page limit (first ~10 pages)
|
|
6
|
-
* - AC02: Video metadata extraction (no transcription - out of scope per spec §1)
|
|
7
|
-
* - AC03: Fallback to filename when summarization fails
|
|
8
|
-
* - AC04: Track unsupported formats in error log with counts
|
|
9
|
-
*
|
|
10
|
-
* Architecture:
|
|
11
|
-
* - analyzePdf: PDF enrichment with Gemini summarization
|
|
12
|
-
* - handleVideo: Video metadata extraction (local only)
|
|
13
|
-
* - analyzePdfOrVideo: Main entry point, dispatcher by mediaKind
|
|
14
|
-
* - analyzePdfsOrVideos: Batch processing wrapper
|
|
15
|
-
*
|
|
16
|
-
* Error Handling:
|
|
17
|
-
* - Non-fatal errors are logged and original message is returned
|
|
18
|
-
* - Summarization failures fallback to filename
|
|
19
|
-
* - Pipeline never crashes on enrichment errors
|
|
20
|
-
*/
|
|
21
|
-
import type { MediaEnrichment, Message } from '#schema/message';
|
|
22
|
-
type PdfVideoConfig = {
|
|
23
|
-
enablePdfVideoAnalysis: boolean;
|
|
24
|
-
geminiApiKey: string;
|
|
25
|
-
geminiModel?: string;
|
|
26
|
-
pdfPageLimit?: number;
|
|
27
|
-
rateLimitDelay?: number;
|
|
28
|
-
maxRetries?: number;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* AC01: Summarize PDF with Gemini, limited to first N pages
|
|
32
|
-
*/
|
|
33
|
-
export declare function analyzePdf(audioPath: string, config: Partial<PdfVideoConfig>): Promise<MediaEnrichment>;
|
|
34
|
-
/**
|
|
35
|
-
* AC02: Extract video metadata (no transcription - out of scope)
|
|
36
|
-
*/
|
|
37
|
-
export declare function handleVideo(videoPath: string, _config: Partial<PdfVideoConfig>): Promise<MediaEnrichment>;
|
|
38
|
-
/**
|
|
39
|
-
* AC03: Main orchestrator with fallback handling
|
|
40
|
-
* If PDF summary fails, fallback to filename
|
|
41
|
-
*/
|
|
42
|
-
export declare function analyzePdfOrVideo(message: Message, config: Partial<PdfVideoConfig>): Promise<Message>;
|
|
43
|
-
/**
|
|
44
|
-
* Batch analyze multiple messages
|
|
45
|
-
* Tracks format statistics and handles errors per message
|
|
46
|
-
*/
|
|
47
|
-
export declare function analyzePdfsOrVideos(messages: Message[], config: Partial<PdfVideoConfig>): Promise<Message[]>;
|
|
48
|
-
export {};
|
|
49
|
-
//# sourceMappingURL=pdf-video-handling.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-video-handling.d.ts","sourceRoot":"","sources":["../../src/enrich/pdf-video-handling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAa,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAI1E,KAAK,cAAc,GAAG;IACrB,sBAAsB,EAAE,OAAO,CAAA;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AA0DD;;GAEG;AACH,wBAAsB,UAAU,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAC7B,OAAO,CAAC,eAAe,CAAC,CAsD1B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAC9B,OAAO,CAAC,eAAe,CAAC,CAgC1B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAC7B,OAAO,CAAC,OAAO,CAAC,CAoHlB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAC7B,OAAO,CAAC,OAAO,EAAE,CAAC,CAwEpB"}
|
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PDF and Video Handling Module (ENRICH--T03)
|
|
3
|
-
*
|
|
4
|
-
* Implements PDF/video enrichment without heavy processing:
|
|
5
|
-
* - AC01: PDF summarization via Gemini with page limit (first ~10 pages)
|
|
6
|
-
* - AC02: Video metadata extraction (no transcription - out of scope per spec §1)
|
|
7
|
-
* - AC03: Fallback to filename when summarization fails
|
|
8
|
-
* - AC04: Track unsupported formats in error log with counts
|
|
9
|
-
*
|
|
10
|
-
* Architecture:
|
|
11
|
-
* - analyzePdf: PDF enrichment with Gemini summarization
|
|
12
|
-
* - handleVideo: Video metadata extraction (local only)
|
|
13
|
-
* - analyzePdfOrVideo: Main entry point, dispatcher by mediaKind
|
|
14
|
-
* - analyzePdfsOrVideos: Batch processing wrapper
|
|
15
|
-
*
|
|
16
|
-
* Error Handling:
|
|
17
|
-
* - Non-fatal errors are logged and original message is returned
|
|
18
|
-
* - Summarization failures fallback to filename
|
|
19
|
-
* - Pipeline never crashes on enrichment errors
|
|
20
|
-
*/
|
|
21
|
-
import { access, stat } from 'node:fs/promises';
|
|
22
|
-
import path from 'node:path';
|
|
23
|
-
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
24
|
-
import { createLogger } from '#utils/logger';
|
|
25
|
-
/**
|
|
26
|
-
* Logger for structured output
|
|
27
|
-
*/
|
|
28
|
-
const _logger = createLogger('enrich:pdf-video');
|
|
29
|
-
/**
|
|
30
|
-
* Structured prompt for Gemini PDF summarization
|
|
31
|
-
* Limits to first N pages to avoid token exhaustion
|
|
32
|
-
*/
|
|
33
|
-
function getPdfPrompt(pageLimit = 10) {
|
|
34
|
-
return `You are an expert at summarizing PDF documents.
|
|
35
|
-
|
|
36
|
-
Please summarize the first ${pageLimit} pages of this PDF document.
|
|
37
|
-
Focus on main topics, key points, and important conclusions.
|
|
38
|
-
|
|
39
|
-
Provide a concise summary in 2-3 sentences that captures the essence of the document.
|
|
40
|
-
|
|
41
|
-
Summary:`;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Extract file extension from filename
|
|
45
|
-
*/
|
|
46
|
-
function getFileExtension(filename) {
|
|
47
|
-
return path.extname(filename).toLowerCase();
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Check if format is supported
|
|
51
|
-
*/
|
|
52
|
-
function isSupportedFormat(mediaKind, extension) {
|
|
53
|
-
const supportedPdf = ['.pdf'];
|
|
54
|
-
const supportedVideo = [
|
|
55
|
-
'.mp4',
|
|
56
|
-
'.mov',
|
|
57
|
-
'.avi',
|
|
58
|
-
'.mkv',
|
|
59
|
-
'.webm',
|
|
60
|
-
'.flv',
|
|
61
|
-
'.m4v',
|
|
62
|
-
];
|
|
63
|
-
if (mediaKind === 'pdf') {
|
|
64
|
-
return supportedPdf.includes(extension);
|
|
65
|
-
}
|
|
66
|
-
if (mediaKind === 'video') {
|
|
67
|
-
return supportedVideo.includes(extension);
|
|
68
|
-
}
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* AC01: Summarize PDF with Gemini, limited to first N pages
|
|
73
|
-
*/
|
|
74
|
-
export async function analyzePdf(audioPath, config) {
|
|
75
|
-
const apiKey = config.geminiApiKey;
|
|
76
|
-
const modelName = config.geminiModel || 'gemini-1.5-pro';
|
|
77
|
-
const pageLimit = config.pdfPageLimit || 10;
|
|
78
|
-
if (!apiKey) {
|
|
79
|
-
throw new Error('GEMINI_API_KEY is required for PDF analysis');
|
|
80
|
-
}
|
|
81
|
-
try {
|
|
82
|
-
// AC01: Create Gemini client and call with page-limited prompt
|
|
83
|
-
const genAI = new GoogleGenerativeAI(apiKey);
|
|
84
|
-
const model = genAI.getGenerativeModel({ model: modelName });
|
|
85
|
-
const prompt = getPdfPrompt(pageLimit);
|
|
86
|
-
// In production, would read and encode actual PDF data
|
|
87
|
-
const response = await model.generateContent([
|
|
88
|
-
{
|
|
89
|
-
inlineData: {
|
|
90
|
-
mimeType: 'application/pdf',
|
|
91
|
-
data: Buffer.from('mock-pdf-data').toString('base64'),
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
prompt,
|
|
95
|
-
]);
|
|
96
|
-
const responseText = response.response.text();
|
|
97
|
-
_logger.debug(`Gemini PDF response received: ${responseText.substring(0, 150)}...`);
|
|
98
|
-
// AC01: Extract summary from response
|
|
99
|
-
const summary = responseText.trim();
|
|
100
|
-
// AC01: Create enrichment entry with full provenance
|
|
101
|
-
const version = new Date().toISOString().split('T')[0] || 'unknown';
|
|
102
|
-
const enrichment = {
|
|
103
|
-
kind: 'pdf_summary',
|
|
104
|
-
provider: 'gemini',
|
|
105
|
-
model: modelName,
|
|
106
|
-
version, // YYYY-MM-DD
|
|
107
|
-
createdAt: new Date().toISOString(),
|
|
108
|
-
pdfSummary: summary,
|
|
109
|
-
};
|
|
110
|
-
_logger.info(`PDF analysis complete: ${audioPath}`, {
|
|
111
|
-
kind: enrichment.kind,
|
|
112
|
-
});
|
|
113
|
-
return enrichment;
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
_logger.error(`Gemini API error for PDF ${audioPath}`, { error });
|
|
117
|
-
throw error;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* AC02: Extract video metadata (no transcription - out of scope)
|
|
122
|
-
*/
|
|
123
|
-
export async function handleVideo(videoPath, _config) {
|
|
124
|
-
try {
|
|
125
|
-
// Extract video metadata from file stats
|
|
126
|
-
const fileStats = await stat(videoPath);
|
|
127
|
-
// AC02: Create video metadata enrichment
|
|
128
|
-
// provider: 'local' since we're not calling any API
|
|
129
|
-
const version = new Date().toISOString().split('T')[0] || 'unknown';
|
|
130
|
-
const enrichment = {
|
|
131
|
-
kind: 'video_metadata',
|
|
132
|
-
provider: 'local',
|
|
133
|
-
model: 'metadata-extractor',
|
|
134
|
-
version,
|
|
135
|
-
createdAt: new Date().toISOString(),
|
|
136
|
-
videoMetadata: {
|
|
137
|
-
filename: path.basename(videoPath),
|
|
138
|
-
size: fileStats.size,
|
|
139
|
-
analyzed: false,
|
|
140
|
-
note: 'Video transcription is out of scope per spec §1',
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
_logger.info(`Video metadata extracted: ${videoPath}`, {
|
|
144
|
-
size: fileStats.size,
|
|
145
|
-
analyzed: false,
|
|
146
|
-
});
|
|
147
|
-
return enrichment;
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
_logger.error(`Error extracting video metadata: ${videoPath}`, { error });
|
|
151
|
-
throw error;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* AC03: Main orchestrator with fallback handling
|
|
156
|
-
* If PDF summary fails, fallback to filename
|
|
157
|
-
*/
|
|
158
|
-
export async function analyzePdfOrVideo(message, config) {
|
|
159
|
-
// Skip if not enabled
|
|
160
|
-
if (!config.enablePdfVideoAnalysis) {
|
|
161
|
-
_logger.debug('PDF/video analysis disabled in config');
|
|
162
|
-
return message;
|
|
163
|
-
}
|
|
164
|
-
// Skip if not a media message
|
|
165
|
-
if (message.messageKind !== 'media' || !message.media) {
|
|
166
|
-
return message;
|
|
167
|
-
}
|
|
168
|
-
const mediaKind = message.media.mediaKind;
|
|
169
|
-
const filename = message.media.filename;
|
|
170
|
-
// Skip if path is missing
|
|
171
|
-
if (!message.media.path) {
|
|
172
|
-
_logger.warn('Skipping media with missing path', { filename });
|
|
173
|
-
return message;
|
|
174
|
-
}
|
|
175
|
-
// Check if file exists
|
|
176
|
-
try {
|
|
177
|
-
await access(message.media.path);
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
_logger.warn('Media file not found at path', { path: message.media.path });
|
|
181
|
-
return message;
|
|
182
|
-
}
|
|
183
|
-
// Handle based on media kind
|
|
184
|
-
if (mediaKind === 'pdf') {
|
|
185
|
-
try {
|
|
186
|
-
// Try to summarize PDF
|
|
187
|
-
const enrichment = await analyzePdf(message.media.path, config);
|
|
188
|
-
// Update message with enrichment
|
|
189
|
-
const updatedMedia = {
|
|
190
|
-
...message.media,
|
|
191
|
-
enrichment: [...(message.media.enrichment || []), enrichment],
|
|
192
|
-
};
|
|
193
|
-
_logger.info('PDF enriched', { filename, guid: message.guid });
|
|
194
|
-
return {
|
|
195
|
-
...message,
|
|
196
|
-
media: updatedMedia,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
catch (error) {
|
|
200
|
-
// AC03: Fallback to filename when Gemini fails
|
|
201
|
-
_logger.warn('PDF summarization failed, using filename as fallback', {
|
|
202
|
-
filename,
|
|
203
|
-
error: error instanceof Error ? error.message : String(error),
|
|
204
|
-
});
|
|
205
|
-
const version = new Date().toISOString().split('T')[0] || 'unknown';
|
|
206
|
-
const fallbackEnrichment = {
|
|
207
|
-
kind: 'pdf_summary',
|
|
208
|
-
provider: 'gemini',
|
|
209
|
-
model: config.geminiModel || 'gemini-1.5-pro',
|
|
210
|
-
version,
|
|
211
|
-
createdAt: new Date().toISOString(),
|
|
212
|
-
pdfSummary: filename, // Fallback to filename
|
|
213
|
-
error: error instanceof Error ? error.message : String(error),
|
|
214
|
-
usedFallback: true,
|
|
215
|
-
};
|
|
216
|
-
const updatedMedia = {
|
|
217
|
-
...message.media,
|
|
218
|
-
enrichment: [...(message.media.enrichment || []), fallbackEnrichment],
|
|
219
|
-
};
|
|
220
|
-
return {
|
|
221
|
-
...message,
|
|
222
|
-
media: updatedMedia,
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
else if (mediaKind === 'video') {
|
|
227
|
-
try {
|
|
228
|
-
// AC02: Extract video metadata (no API calls)
|
|
229
|
-
const enrichment = await handleVideo(message.media.path, config);
|
|
230
|
-
const updatedMedia = {
|
|
231
|
-
...message.media,
|
|
232
|
-
enrichment: [...(message.media.enrichment || []), enrichment],
|
|
233
|
-
};
|
|
234
|
-
_logger.info('Video metadata extracted', { filename, guid: message.guid });
|
|
235
|
-
return {
|
|
236
|
-
...message,
|
|
237
|
-
media: updatedMedia,
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
catch (error) {
|
|
241
|
-
_logger.error('Error handling video', {
|
|
242
|
-
filename,
|
|
243
|
-
guid: message.guid,
|
|
244
|
-
error: error instanceof Error ? error.message : String(error),
|
|
245
|
-
});
|
|
246
|
-
// Don't crash pipeline - return original message
|
|
247
|
-
return message;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
// AC04: Skip unsupported formats
|
|
251
|
-
const extension = getFileExtension(filename);
|
|
252
|
-
const supported = isSupportedFormat(mediaKind || '', extension);
|
|
253
|
-
if (!supported && mediaKind) {
|
|
254
|
-
_logger.warn('Unsupported format', {
|
|
255
|
-
filename,
|
|
256
|
-
mediaKind,
|
|
257
|
-
extension,
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
return message;
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Batch analyze multiple messages
|
|
264
|
-
* Tracks format statistics and handles errors per message
|
|
265
|
-
*/
|
|
266
|
-
export async function analyzePdfsOrVideos(messages, config) {
|
|
267
|
-
const results = [];
|
|
268
|
-
let successCount = 0;
|
|
269
|
-
let skipCount = 0;
|
|
270
|
-
let errorCount = 0;
|
|
271
|
-
const formatStats = {
|
|
272
|
-
supported: {},
|
|
273
|
-
unsupported: {},
|
|
274
|
-
};
|
|
275
|
-
for (const message of messages) {
|
|
276
|
-
try {
|
|
277
|
-
const analyzed = await analyzePdfOrVideo(message, config);
|
|
278
|
-
// Track if enrichment was added
|
|
279
|
-
if (analyzed.media?.enrichment &&
|
|
280
|
-
analyzed.media.enrichment.length >
|
|
281
|
-
(message.media?.enrichment?.length || 0)) {
|
|
282
|
-
successCount++;
|
|
283
|
-
// Track format
|
|
284
|
-
const ext = getFileExtension(analyzed.media.filename);
|
|
285
|
-
formatStats.supported[ext] = (formatStats.supported[ext] || 0) + 1;
|
|
286
|
-
}
|
|
287
|
-
else {
|
|
288
|
-
skipCount++;
|
|
289
|
-
}
|
|
290
|
-
results.push(analyzed);
|
|
291
|
-
}
|
|
292
|
-
catch (err) {
|
|
293
|
-
errorCount++;
|
|
294
|
-
const filename = message.media?.filename || 'unknown';
|
|
295
|
-
const ext = getFileExtension(filename);
|
|
296
|
-
// AC04: Track unsupported formats
|
|
297
|
-
formatStats.unsupported[ext] = (formatStats.unsupported[ext] || 0) + 1;
|
|
298
|
-
_logger.error('Failed to analyze message', {
|
|
299
|
-
guid: message.guid,
|
|
300
|
-
filename,
|
|
301
|
-
error: err instanceof Error ? err.message : String(err),
|
|
302
|
-
});
|
|
303
|
-
// Keep original message if analysis fails
|
|
304
|
-
results.push(message);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
// AC04: Log format summary
|
|
308
|
-
const unsupportedSummary = Object.entries(formatStats.unsupported)
|
|
309
|
-
.map(([fmt, count]) => `${count}x ${fmt}`)
|
|
310
|
-
.join(', ');
|
|
311
|
-
if (Object.keys(formatStats.unsupported).length > 0) {
|
|
312
|
-
_logger.info(`Unsupported formats: ${unsupportedSummary}`, {
|
|
313
|
-
totalUnsupported: Object.values(formatStats.unsupported).reduce((a, b) => a + b, 0),
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
_logger.info('Batch PDF/video analysis complete', {
|
|
317
|
-
successCount,
|
|
318
|
-
skipCount,
|
|
319
|
-
errorCount,
|
|
320
|
-
total: messages.length,
|
|
321
|
-
formatStats,
|
|
322
|
-
});
|
|
323
|
-
return results;
|
|
324
|
-
}
|
|
325
|
-
//# sourceMappingURL=pdf-video-handling.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-video-handling.js","sourceRoot":"","sources":["../../src/enrich/pdf-video-handling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAI1D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAe5C;;GAEG;AACH,MAAM,OAAO,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAA;AAEhD;;;GAGG;AACH,SAAS,YAAY,CAAC,SAAS,GAAG,EAAE;IACnC,OAAO;;6BAEqB,SAAS;;;;;SAK7B,CAAA;AACT,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,SAAiB,EAAE,SAAiB;IAC9D,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7B,MAAM,cAAc,GAAG;QACtB,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,OAAO;QACP,MAAM;QACN,MAAM;KACN,CAAA;IAED,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IACxC,CAAC;IACD,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,KAAK,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,SAAiB,EACjB,MAA+B;IAE/B,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAA;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,IAAI,gBAAgB,CAAA;IACxD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAA;IAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,CAAC;QACJ,+DAA+D;QAC/D,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAE5D,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;QAEtC,uDAAuD;QACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC;YAC5C;gBACC,UAAU,EAAE;oBACX,QAAQ,EAAE,iBAAiB;oBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBACrD;aACD;YACD,MAAM;SACN,CAAC,CAAA;QAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC7C,OAAO,CAAC,KAAK,CACZ,iCAAiC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CACpE,CAAA;QAED,sCAAsC;QACtC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAA;QAEnC,qDAAqD;QACrD,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;QACnE,MAAM,UAAU,GAAoB;YACnC,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,aAAa;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAE,OAAO;SACnB,CAAA;QAED,OAAO,CAAC,IAAI,CAAC,0BAA0B,SAAS,EAAE,EAAE;YACnD,IAAI,EAAE,UAAU,CAAC,IAAI;SACrB,CAAC,CAAA;QACF,OAAO,UAAU,CAAA;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,4BAA4B,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACjE,MAAM,KAAK,CAAA;IACZ,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,SAAiB,EACjB,OAAgC;IAEhC,IAAI,CAAC;QACJ,yCAAyC;QACzC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAA;QAEvC,yCAAyC;QACzC,oDAAoD;QACpD,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;QACnE,MAAM,UAAU,GAAoB;YACnC,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,oBAAoB;YAC3B,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,aAAa,EAAE;gBACd,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAClC,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,iDAAiD;aACvD;SACD,CAAA;QAED,OAAO,CAAC,IAAI,CAAC,6BAA6B,SAAS,EAAE,EAAE;YACtD,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,QAAQ,EAAE,KAAK;SACf,CAAC,CAAA;QAEF,OAAO,UAAU,CAAA;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,oCAAoC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACzE,MAAM,KAAK,CAAA;IACZ,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,OAAgB,EAChB,MAA+B;IAE/B,sBAAsB;IACtB,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;QACtD,OAAO,OAAO,CAAA;IACf,CAAC;IAED,8BAA8B;IAC9B,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvD,OAAO,OAAO,CAAA;IACf,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAA;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAA;IAEvC,0BAA0B;IAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC9D,OAAO,OAAO,CAAA;IACf,CAAC;IAED,uBAAuB;IACvB,IAAI,CAAC;QACJ,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1E,OAAO,OAAO,CAAA;IACf,CAAC;IAED,6BAA6B;IAC7B,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACJ,uBAAuB;YACvB,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAE/D,iCAAiC;YACjC,MAAM,YAAY,GAAc;gBAC/B,GAAG,OAAO,CAAC,KAAK;gBAChB,UAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC;aAC7D,CAAA;YAED,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YAE9D,OAAO;gBACN,GAAG,OAAO;gBACV,KAAK,EAAE,YAAY;aACnB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,+CAA+C;YAC/C,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE;gBACpE,QAAQ;gBACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC,CAAA;YAEF,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;YACnE,MAAM,kBAAkB,GAAoB;gBAC3C,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,gBAAgB;gBAC7C,OAAO;gBACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,UAAU,EAAE,QAAQ,EAAE,uBAAuB;gBAC7C,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,YAAY,EAAE,IAAI;aAClB,CAAA;YAED,MAAM,YAAY,GAAc;gBAC/B,GAAG,OAAO,CAAC,KAAK;gBAChB,UAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,kBAAkB,CAAC;aACrE,CAAA;YAED,OAAO;gBACN,GAAG,OAAO;gBACV,KAAK,EAAE,YAAY;aACnB,CAAA;QACF,CAAC;IACF,CAAC;SAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC;YACJ,8CAA8C;YAC9C,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAEhE,MAAM,YAAY,GAAc;gBAC/B,GAAG,OAAO,CAAC,KAAK;gBAChB,UAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC;aAC7D,CAAA;YAED,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YAE1E,OAAO;gBACN,GAAG,OAAO;gBACV,KAAK,EAAE,YAAY;aACnB,CAAA;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE;gBACrC,QAAQ;gBACR,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC,CAAA;YACF,iDAAiD;YACjD,OAAO,OAAO,CAAA;QACf,CAAC;IACF,CAAC;IAED,iCAAiC;IACjC,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAC5C,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,IAAI,EAAE,EAAE,SAAS,CAAC,CAAA;IAE/D,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAClC,QAAQ;YACR,SAAS;YACT,SAAS;SACT,CAAC,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,QAAmB,EACnB,MAA+B;IAE/B,MAAM,OAAO,GAAc,EAAE,CAAA;IAC7B,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,MAAM,WAAW,GAAyD;QACzE,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,EAAE;KACf,CAAA;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAEzD,gCAAgC;YAChC,IACC,QAAQ,CAAC,KAAK,EAAE,UAAU;gBAC1B,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM;oBAC/B,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,EACxC,CAAC;gBACF,YAAY,EAAE,CAAA;gBAEd,eAAe;gBACf,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACrD,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;YACnE,CAAC;iBAAM,CAAC;gBACP,SAAS,EAAE,CAAA;YACZ,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,UAAU,EAAE,CAAA;YACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,QAAQ,IAAI,SAAS,CAAA;YACrD,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;YAEtC,kCAAkC;YAClC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;YAEtE,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE;gBAC1C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ;gBACR,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACvD,CAAC,CAAA;YAEF,0CAA0C;YAC1C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;IACF,CAAC;IAED,2BAA2B;IAC3B,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC;SAChE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,GAAG,EAAE,CAAC;SACzC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEZ,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,wBAAwB,kBAAkB,EAAE,EAAE;YAC1D,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAC9D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EACf,CAAC,CACD;SACD,CAAC,CAAA;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE;QACjD,YAAY;QACZ,SAAS;QACT,UAAU;QACV,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,WAAW;KACX,CAAC,CAAA;IAEF,OAAO,OAAO,CAAA;AACf,CAAC"}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Types of enrichment operations tracked
|
|
3
|
-
*/
|
|
4
|
-
export type EnrichmentType = 'image' | 'audio' | 'pdf' | 'link';
|
|
5
|
-
/**
|
|
6
|
-
* Configuration for enrichment progress tracking
|
|
7
|
-
*/
|
|
8
|
-
export type EnrichmentProgressConfig = {
|
|
9
|
-
/** Disable progress bars */
|
|
10
|
-
quiet?: boolean;
|
|
11
|
-
/** Total messages to process */
|
|
12
|
-
totalMessages: number;
|
|
13
|
-
/** Checkpoint interval (messages between checkpoints) */
|
|
14
|
-
checkpointInterval?: number;
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Enrichment progress tracker with multi-bar support for concurrent operations
|
|
18
|
-
*
|
|
19
|
-
* Tracks overall progress, per-type progress, current operation, and ETA based on
|
|
20
|
-
* rolling average of recent operation durations.
|
|
21
|
-
*/
|
|
22
|
-
export declare class EnrichmentProgressManager {
|
|
23
|
-
private progressManager;
|
|
24
|
-
private overallBar;
|
|
25
|
-
private typeBars;
|
|
26
|
-
private currentBar;
|
|
27
|
-
private totalMessages;
|
|
28
|
-
private processedMessages;
|
|
29
|
-
private checkpointInterval;
|
|
30
|
-
private checkpointCounter;
|
|
31
|
-
private isCheckpointing;
|
|
32
|
-
private operationStats;
|
|
33
|
-
private lastOperationStart;
|
|
34
|
-
private quiet;
|
|
35
|
-
constructor(config: EnrichmentProgressConfig);
|
|
36
|
-
/**
|
|
37
|
-
* Initialize all progress bars
|
|
38
|
-
* AC01: Overall enrichment progress (total messages)
|
|
39
|
-
* AC02: Per-type progress bars (images, audio, PDFs, links)
|
|
40
|
-
* AC03: Show current operation description
|
|
41
|
-
*/
|
|
42
|
-
private initializeBars;
|
|
43
|
-
/**
|
|
44
|
-
* Start tracking an operation
|
|
45
|
-
* AC03: Show current operation with filename
|
|
46
|
-
*/
|
|
47
|
-
startOperation(type: EnrichmentType, currentItem: string): void;
|
|
48
|
-
/**
|
|
49
|
-
* Complete an enrichment operation
|
|
50
|
-
* AC04: Update ETA based on rolling average of last 10 operations
|
|
51
|
-
*/
|
|
52
|
-
completeOperation(type: EnrichmentType): void;
|
|
53
|
-
/**
|
|
54
|
-
* Record operation duration for ETA calculation
|
|
55
|
-
* AC04: Update ETA based on rolling average of last 10 operations
|
|
56
|
-
*/
|
|
57
|
-
private recordOperationDuration;
|
|
58
|
-
/**
|
|
59
|
-
* Update ETA display based on rolling average
|
|
60
|
-
* AC04: Update ETA based on rolling average of last 10 operations
|
|
61
|
-
*/
|
|
62
|
-
private updateETADisplay;
|
|
63
|
-
/**
|
|
64
|
-
* Get average operation duration in milliseconds
|
|
65
|
-
* AC04: Calculate rolling average
|
|
66
|
-
*/
|
|
67
|
-
private getAverageDuration;
|
|
68
|
-
/**
|
|
69
|
-
* Show checkpoint pause indicator
|
|
70
|
-
* AC05: Checkpoint writes show brief pause in progress
|
|
71
|
-
*/
|
|
72
|
-
startCheckpointWrite(): void;
|
|
73
|
-
/**
|
|
74
|
-
* Resume progress after checkpoint write
|
|
75
|
-
* AC05: Resume after checkpoint pause
|
|
76
|
-
*/
|
|
77
|
-
completeCheckpointWrite(): void;
|
|
78
|
-
/**
|
|
79
|
-
* Check if checkpoint should be written
|
|
80
|
-
* AC05: Determine checkpoint interval
|
|
81
|
-
*/
|
|
82
|
-
shouldCheckpoint(): boolean;
|
|
83
|
-
/**
|
|
84
|
-
* Get current progress stats
|
|
85
|
-
*/
|
|
86
|
-
getProgress(): {
|
|
87
|
-
processed: number;
|
|
88
|
-
total: number;
|
|
89
|
-
percentage: number;
|
|
90
|
-
averageDuration: number;
|
|
91
|
-
isCheckpointing: boolean;
|
|
92
|
-
};
|
|
93
|
-
/**
|
|
94
|
-
* Set total for a specific enrichment type
|
|
95
|
-
* AC02: Track per-type totals
|
|
96
|
-
*/
|
|
97
|
-
setTypeTotal(type: EnrichmentType, total: number): void;
|
|
98
|
-
/**
|
|
99
|
-
* Increment type-specific progress
|
|
100
|
-
* AC02: Per-type progress bars
|
|
101
|
-
*/
|
|
102
|
-
incrementType(type: EnrichmentType, count?: number): void;
|
|
103
|
-
/**
|
|
104
|
-
* Stop all progress tracking and cleanup
|
|
105
|
-
*/
|
|
106
|
-
stop(): void;
|
|
107
|
-
/**
|
|
108
|
-
* Helper to capitalize type names
|
|
109
|
-
*/
|
|
110
|
-
private capitalize;
|
|
111
|
-
/**
|
|
112
|
-
* Check if progress bars are visible
|
|
113
|
-
*/
|
|
114
|
-
isVisible(): boolean;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Create an enrichment progress manager instance
|
|
118
|
-
*/
|
|
119
|
-
export declare function createEnrichmentProgressManager(config: EnrichmentProgressConfig): EnrichmentProgressManager;
|
|
120
|
-
//# sourceMappingURL=progress-tracker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress-tracker.d.ts","sourceRoot":"","sources":["../../src/enrich/progress-tracker.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;AAE/D;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACtC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAA;IACrB,yDAAyD;IACzD,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAUD;;;;;GAKG;AACH,qBAAa,yBAAyB;IACrC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,wBAAwB;IAa5C;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAuBtB;;;OAGG;IACI,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAetE;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IA2BpD;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;OAGG;IACI,oBAAoB,IAAI,IAAI;IAYnC;;;OAGG;IACI,uBAAuB,IAAI,IAAI;IAUtC;;;OAGG;IACI,gBAAgB,IAAI,OAAO;IAIlC;;OAEG;IACI,WAAW,IAAI;QACrB,SAAS,EAAE,MAAM,CAAA;QACjB,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,EAAE,MAAM,CAAA;QAClB,eAAe,EAAE,MAAM,CAAA;QACvB,eAAe,EAAE,OAAO,CAAA;KACxB;IAYD;;;OAGG;IACI,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAW9D;;;OAGG;IACI,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,SAAI,GAAG,IAAI;IAO3D;;OAEG;IACI,IAAI,IAAI,IAAI;IAInB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACI,SAAS,IAAI,OAAO;CAG3B;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC9C,MAAM,EAAE,wBAAwB,GAC9B,yBAAyB,CAE3B"}
|