task-summary-extractor 8.1.0 → 9.0.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/.env.example +38 -0
- package/ARCHITECTURE.md +116 -15
- package/EXPLORATION.md +164 -101
- package/QUICK_START.md +5 -2
- package/README.md +70 -18
- package/bin/taskex.js +11 -4
- package/package.json +39 -6
- package/process_and_upload.js +7 -100
- package/prompt.json +199 -131
- package/src/config.js +52 -3
- package/src/{utils → modes}/deep-dive.js +2 -2
- package/src/{utils → modes}/dynamic-mode.js +2 -2
- package/src/{utils → modes}/focused-reanalysis.js +4 -3
- package/src/{utils → modes}/progress-updater.js +2 -2
- package/src/phases/_shared.js +43 -0
- package/src/phases/compile.js +101 -0
- package/src/phases/deep-dive.js +118 -0
- package/src/phases/discover.js +178 -0
- package/src/phases/init.js +192 -0
- package/src/phases/output.js +238 -0
- package/src/phases/process-media.js +633 -0
- package/src/phases/services.js +104 -0
- package/src/phases/summary.js +86 -0
- package/src/pipeline.js +431 -1462
- package/src/renderers/docx.js +531 -0
- package/src/renderers/html.js +672 -0
- package/src/renderers/markdown.js +15 -183
- package/src/renderers/pdf.js +90 -0
- package/src/renderers/shared.js +211 -0
- package/src/schemas/analysis-compiled.schema.json +381 -0
- package/src/schemas/analysis-segment.schema.json +380 -0
- package/src/services/doc-parser.js +346 -0
- package/src/services/gemini.js +105 -48
- package/src/services/git.js +0 -29
- package/src/services/video.js +123 -8
- package/src/utils/adaptive-budget.js +6 -6
- package/src/utils/{progress.js → checkpoint.js} +2 -1
- package/src/utils/cli.js +161 -113
- package/src/utils/colors.js +83 -0
- package/src/utils/confidence-filter.js +138 -0
- package/src/utils/context-manager.js +0 -4
- package/src/utils/diff-engine.js +2 -4
- package/src/utils/global-config.js +6 -5
- package/src/utils/health-dashboard.js +11 -9
- package/src/utils/json-parser.js +5 -3
- package/src/utils/learning-loop.js +3 -3
- package/src/utils/progress-bar.js +286 -0
- package/src/utils/quality-gate.js +4 -8
- package/src/utils/retry.js +13 -5
- package/src/utils/schema-validator.js +314 -0
- package/src/utils/prompt.js +0 -32
- /package/src/{utils → modes}/change-detector.js +0 -0
package/README.md
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
# Task Summary Extractor
|
|
2
2
|
|
|
3
|
-
> **
|
|
3
|
+
> **v9.0.0** — AI-powered content analysis CLI — meetings, recordings, documents, or any mix. Install globally, run anywhere.
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<img src="https://img.shields.io/badge/node-%3E%3D18.0.0-green" alt="Node.js" />
|
|
7
7
|
<img src="https://img.shields.io/badge/gemini-2.5--flash-blue" alt="Gemini" />
|
|
8
8
|
<img src="https://img.shields.io/badge/firebase-11.x-orange" alt="Firebase" />
|
|
9
|
-
<img src="https://img.shields.io/badge/version-
|
|
9
|
+
<img src="https://img.shields.io/badge/version-9.0.0-brightgreen" alt="Version" />
|
|
10
|
+
<img src="https://img.shields.io/badge/tests-285%20passing-brightgreen" alt="Tests" />
|
|
10
11
|
<img src="https://img.shields.io/badge/npm-task--summary--extractor-red" alt="npm" />
|
|
11
12
|
</p>
|
|
12
13
|
|
|
13
|
-
**
|
|
14
|
+
**Analyze any content → get a structured task document.** Feed it meeting recordings, audio files, documents, or any mix — it extracts work items, action items, blockers, and more. Or point it at any folder and generate docs from context.
|
|
14
15
|
|
|
15
16
|
📖 **New here?** Jump to [Setup (3 steps)](#setup-3-steps) — you'll be running in under 5 minutes.
|
|
16
17
|
|
|
@@ -18,9 +19,9 @@
|
|
|
18
19
|
|
|
19
20
|
## What It Does
|
|
20
21
|
|
|
21
|
-
### 🎥
|
|
22
|
+
### 🎥 Content Analysis (default mode)
|
|
22
23
|
|
|
23
|
-
Drop a recording in a folder → run the tool → get a Markdown task document with:
|
|
24
|
+
Drop a recording (video/audio) or documents in a folder → run the tool → get a Markdown task document with:
|
|
24
25
|
|
|
25
26
|
- **Tickets** — ID, title, status, assignee, confidence score
|
|
26
27
|
- **Change Requests** — what changed, where, how, why
|
|
@@ -168,6 +169,9 @@ These are the ones you'll actually use:
|
|
|
168
169
|
| `--resume` | Continue an interrupted run | `--resume` |
|
|
169
170
|
| `--reanalyze` | Force fresh analysis (ignore cache) | `--reanalyze` |
|
|
170
171
|
| `--dry-run` | Preview what would run, without running | `--dry-run` |
|
|
172
|
+
| `--format <type>` | Output format: `md`, `html`, `json`, `pdf`, `docx`, `all` (default: `md`) | `--format html` |
|
|
173
|
+
| `--min-confidence <level>` | Filter items by confidence: `high`, `medium`, `low` | `--min-confidence high` |
|
|
174
|
+
| `--no-html` | Suppress HTML report generation | `--no-html` |
|
|
171
175
|
|
|
172
176
|
**Typical usage:**
|
|
173
177
|
|
|
@@ -191,7 +195,7 @@ Choose what the tool does. Only use one at a time:
|
|
|
191
195
|
|
|
192
196
|
| Flag | Mode | What You Get |
|
|
193
197
|
|------|------|-------------|
|
|
194
|
-
| *(none)* | **
|
|
198
|
+
| *(none)* | **Content analysis** | `results.md` + `results.html` — structured task document |
|
|
195
199
|
| `--dynamic` | **Doc generation** | `INDEX.md` + 3–15 topic documents |
|
|
196
200
|
| `--deep-dive` | **Topic explainers** | `INDEX.md` + per-topic deep-dive docs |
|
|
197
201
|
| `--update-progress` | **Progress check** | `progress.md` — item status via git |
|
|
@@ -257,6 +261,8 @@ CONFIG --gemini-key --firebase-key --firebase-project
|
|
|
257
261
|
--firebase-bucket --firebase-domain
|
|
258
262
|
MODES --dynamic --deep-dive --update-progress
|
|
259
263
|
CORE --name --model --skip-upload --resume --reanalyze --dry-run
|
|
264
|
+
OUTPUT --format <md|html|json|pdf|docx|all> --min-confidence <high|medium|low>
|
|
265
|
+
--no-html
|
|
260
266
|
UPLOAD --force-upload --no-storage-url
|
|
261
267
|
SKIP --skip-compression --skip-gemini
|
|
262
268
|
DYNAMIC --request <text>
|
|
@@ -271,11 +277,12 @@ INFO --help (-h) --version (-v)
|
|
|
271
277
|
|
|
272
278
|
## Output
|
|
273
279
|
|
|
274
|
-
###
|
|
280
|
+
### Content Analysis
|
|
275
281
|
|
|
276
282
|
```
|
|
277
283
|
my-meeting/runs/{timestamp}/
|
|
278
284
|
├── results.md ← Open this — your task document
|
|
285
|
+
├── results.html ← Interactive HTML report (self-contained)
|
|
279
286
|
├── results.json ← Full pipeline data
|
|
280
287
|
└── compilation.json ← All extracted items (JSON)
|
|
281
288
|
```
|
|
@@ -312,12 +319,12 @@ my-meeting/runs/{timestamp}/
|
|
|
312
319
|
|
|
313
320
|
## Folder Setup Tips
|
|
314
321
|
|
|
315
|
-
Drop
|
|
322
|
+
Drop content files and supporting docs in a folder. **More context = better extraction.**
|
|
316
323
|
|
|
317
324
|
```
|
|
318
325
|
my-meeting/
|
|
319
|
-
├── Recording.mp4 ← Video (
|
|
320
|
-
├── Recording.vtt ← Subtitles (highly recommended)
|
|
326
|
+
├── Recording.mp4 ← Video recording (primary for video mode)
|
|
327
|
+
├── Recording.vtt ← Subtitles (highly recommended for recordings)
|
|
321
328
|
├── agenda.md ← Loose docs at root are fine
|
|
322
329
|
│
|
|
323
330
|
├── .tasks/ ← Gets priority weighting (optional)
|
|
@@ -328,7 +335,7 @@ my-meeting/
|
|
|
328
335
|
└── requirements.md
|
|
329
336
|
```
|
|
330
337
|
|
|
331
|
-
**Supported formats:** `.mp4` `.mkv` `.webm` `.avi` `.mov` (video) · `.vtt` `.srt` `.txt` `.md` `.csv` `.pdf` (docs)
|
|
338
|
+
**Supported formats:** `.mp4` `.mkv` `.webm` `.avi` `.mov` (video) · `.mp3` `.wav` `.ogg` `.m4a` (audio) · `.vtt` `.srt` `.txt` `.md` `.csv` `.pdf` (docs)
|
|
332
339
|
|
|
333
340
|
The tool **recursively scans all subfolders**. `.tasks/` gets highest priority weighting but everything is included.
|
|
334
341
|
|
|
@@ -406,7 +413,7 @@ GEMINI_API_KEY=your-key-here
|
|
|
406
413
|
|
|
407
414
|
| Feature | Description |
|
|
408
415
|
|---------|-------------|
|
|
409
|
-
| **Video Compression** | H.264 CRF 24, text-optimized sharpening, configurable speed |
|
|
416
|
+
| **Video/Audio Compression** | H.264 CRF 24, text-optimized sharpening, configurable speed |
|
|
410
417
|
| **Smart Segmentation** | ≤5 min chunks with boundary-aware splitting |
|
|
411
418
|
| **Cross-Segment Continuity** | Ticket IDs, names, and context carry forward |
|
|
412
419
|
| **Document Discovery** | Auto-finds docs in all subfolders |
|
|
@@ -423,6 +430,11 @@ GEMINI_API_KEY=your-key-here
|
|
|
423
430
|
| **Git Progress Tracking** | Correlates commits with extracted items |
|
|
424
431
|
| **Deep Dive** | Explanatory docs per topic discussed |
|
|
425
432
|
| **Dynamic Mode** | Generate docs from any content mix |
|
|
433
|
+
| **Progress Bar** | Real-time visual progress with phase tracking, ETA, and cost display |
|
|
434
|
+
| **HTML Report** | Self-contained HTML report with collapsible sections, filtering, dark mode |
|
|
435
|
+
| **JSON Schema Validation** | Validates AI output against JSON Schema (segment + compiled) |
|
|
436
|
+
| **Confidence Filter** | `--min-confidence` flag to exclude low-confidence items from output |
|
|
437
|
+
| **Multi-Format Output** | `--format` flag: Markdown, HTML, JSON, PDF, DOCX, or all formats at once |
|
|
426
438
|
| **Interactive CLI** | Run with no args → guided experience |
|
|
427
439
|
| **Resume / Checkpoint** | `--resume` continues interrupted runs |
|
|
428
440
|
| **Firebase Upload** | Team access via cloud (optional) |
|
|
@@ -468,23 +480,57 @@ Your call folders, `.env`, logs, and videos are all `.gitignore`d — nothing ge
|
|
|
468
480
|
task-summary-extractor/
|
|
469
481
|
├── bin/
|
|
470
482
|
│ └── taskex.js Global CLI entry point
|
|
471
|
-
├── process_and_upload.js Backward-compatible entry
|
|
483
|
+
├── process_and_upload.js Backward-compatible entry (delegates to bin/taskex)
|
|
472
484
|
├── setup.js First-time setup & validation
|
|
473
485
|
├── package.json Dependencies, scripts, bin config
|
|
474
486
|
├── prompt.json Gemini extraction prompt
|
|
487
|
+
├── vitest.config.js Test configuration
|
|
475
488
|
│
|
|
476
489
|
├── src/
|
|
477
490
|
│ ├── config.js Config, model registry, env vars
|
|
478
491
|
│ ├── logger.js Structured JSONL logger (triple output)
|
|
479
|
-
│ ├── pipeline.js Multi-mode orchestrator (
|
|
492
|
+
│ ├── pipeline.js Multi-mode orchestrator (~920 lines)
|
|
493
|
+
│ ├── phases/ Decomposed pipeline phases (9 modules)
|
|
494
|
+
│ │ ├── _shared.js Shared phase utilities
|
|
495
|
+
│ │ ├── init.js Phase 1: CLI parsing, config validation
|
|
496
|
+
│ │ ├── discover.js Phase 2: Find videos, docs, resolve user
|
|
497
|
+
│ │ ├── services.js Phase 3: Firebase auth, Gemini init
|
|
498
|
+
│ │ ├── process-media.js Phase 4: Compress, upload, analyze
|
|
499
|
+
│ │ ├── compile.js Phase 5: Cross-segment compilation
|
|
500
|
+
│ │ ├── output.js Phase 6: Write JSON, render MD + HTML
|
|
501
|
+
│ │ ├── summary.js Phase 8: Save learning, print summary
|
|
502
|
+
│ │ └── deep-dive.js Phase 9: Optional deep-dive generation
|
|
480
503
|
│ ├── services/
|
|
481
504
|
│ │ ├── gemini.js Gemini AI — 3-strategy file resolution + External URL support
|
|
482
505
|
│ │ ├── firebase.js Firebase Storage (async I/O)
|
|
483
506
|
│ │ ├── video.js ffmpeg compression
|
|
484
|
-
│ │
|
|
507
|
+
│ │ ├── git.js Git CLI wrapper
|
|
508
|
+
│ │ └── doc-parser.js Document text extraction (DOCX, XLSX, PPTX, etc.)
|
|
509
|
+
│ ├── modes/ AI-heavy pipeline phase modules
|
|
510
|
+
│ │ ├── deep-dive.js Topic discovery & deep-dive doc generation
|
|
511
|
+
│ │ ├── dynamic-mode.js Dynamic document planning & generation
|
|
512
|
+
│ │ ├── focused-reanalysis.js Targeted reanalysis of weak segments
|
|
513
|
+
│ │ ├── progress-updater.js Git-based progress assessment
|
|
514
|
+
│ │ └── change-detector.js Git change correlation engine
|
|
485
515
|
│ ├── renderers/
|
|
486
|
-
│ │
|
|
487
|
-
│
|
|
516
|
+
│ │ ├── markdown.js Markdown report renderer
|
|
517
|
+
│ │ ├── html.js HTML report renderer (self-contained)
|
|
518
|
+
│ │ ├── pdf.js PDF report renderer (HTML → PDF via puppeteer)
|
|
519
|
+
│ │ ├── docx.js DOCX report renderer (programmatic Word document)
|
|
520
|
+
│ │ └── shared.js Shared renderer utilities
|
|
521
|
+
│ ├── schemas/
|
|
522
|
+
│ │ ├── analysis-segment.schema.json Segment analysis JSON Schema
|
|
523
|
+
│ │ └── analysis-compiled.schema.json Compiled analysis JSON Schema
|
|
524
|
+
│ └── utils/ Pure utilities — parsing, retry, budget, config
|
|
525
|
+
│ ├── colors.js Zero-dep ANSI color utility
|
|
526
|
+
│ ├── progress-bar.js Visual progress bar (TTY-aware)
|
|
527
|
+
│ ├── confidence-filter.js Confidence level filtering
|
|
528
|
+
│ ├── schema-validator.js JSON Schema validation (ajv)
|
|
529
|
+
│ └── ... (15 more utility modules)
|
|
530
|
+
│
|
|
531
|
+
├── tests/ Test suite — 285 tests across 13 files (vitest)
|
|
532
|
+
│ ├── utils/ Utility module tests
|
|
533
|
+
│ └── renderers/ Renderer tests
|
|
488
534
|
│
|
|
489
535
|
├── QUICK_START.md Step-by-step setup guide
|
|
490
536
|
├── ARCHITECTURE.md Technical deep dive
|
|
@@ -505,6 +551,9 @@ task-summary-extractor/
|
|
|
505
551
|
| `npm run check` | Validate environment |
|
|
506
552
|
| `npm start` | Run the pipeline |
|
|
507
553
|
| `npm run help` | Show CLI help |
|
|
554
|
+
| `npm test` | Run test suite (285 tests) |
|
|
555
|
+
| `npm run test:watch` | Run tests in watch mode |
|
|
556
|
+
| `npm run test:coverage` | Run tests with coverage report |
|
|
508
557
|
|
|
509
558
|
---
|
|
510
559
|
|
|
@@ -512,6 +561,9 @@ task-summary-extractor/
|
|
|
512
561
|
|
|
513
562
|
| Version | Highlights |
|
|
514
563
|
|---------|-----------|
|
|
564
|
+
| **v9.0.0** | **CLI UX upgrade** — colors & progress bar, HTML reports, PDF & DOCX output (via puppeteer and docx npm package), JSON Schema validation, confidence filter (`--min-confidence`), pipeline decomposition (`src/phases/` — 9 modules), test suite (285 tests via vitest), multi-format output (`--format`: md/html/json/pdf/docx/all), doc-parser service, shared renderer utilities |
|
|
565
|
+
| **v8.3.0** | **Universal content analysis** — prompt v4.0.0 supports video, audio, documents, and mixed content; input type auto-detection; timestamps conditional on content type; gemini.js bridge text generalized; all markdown docs updated |
|
|
566
|
+
| **v8.2.0** | **Architecture cleanup** — `src/modes/` for AI pipeline phases, `retry.js` self-contained defaults, dead code removal, export trimming, `process_and_upload.js` slim shim, `progress.js` → `checkpoint.js`, merged `prompt.js` into `cli.js` |
|
|
515
567
|
| **v8.1.0** | **Smart global config** — `taskex config` persistent setup (`~/.taskexrc`), first-run prompting, 5-level config resolution, production audit fixes, shared CLI flag injection, boolean flag parser fix |
|
|
516
568
|
| **v8.0.0** | **npm package** — `npm i -g task-summary-extractor`, `taskex` global CLI, `--gemini-key` / `--firebase-*` config flags, run from anywhere, CWD-first `.env` resolution |
|
|
517
569
|
| **v7.2.3** | Production hardening — cross-platform ffmpeg, shell injection fix, auto git init for progress tracking, `runs/` excluded from doc discovery |
|
|
@@ -541,4 +593,4 @@ task-summary-extractor/
|
|
|
541
593
|
|
|
542
594
|
## License
|
|
543
595
|
|
|
544
|
-
|
|
596
|
+
Proprietary — © 2026 Youssef Adel. All rights reserved.
|
package/bin/taskex.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* taskex — AI-powered meeting analysis & document generation.
|
|
4
4
|
*
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* Usage: taskex [options] [folder]
|
|
8
8
|
*
|
|
9
9
|
* Subcommands:
|
|
10
|
+
* taskex setup Full interactive setup (prerequisites, deps, .env, sample folder)
|
|
11
|
+
* taskex setup --check Validation only (no changes)
|
|
10
12
|
* taskex config Interactive global config setup (~/.taskexrc)
|
|
11
13
|
* taskex config --show Show saved config (masked secrets)
|
|
12
14
|
* taskex config --clear Remove global config file
|
|
@@ -24,7 +26,7 @@
|
|
|
24
26
|
|
|
25
27
|
'use strict';
|
|
26
28
|
|
|
27
|
-
// ── Handle
|
|
29
|
+
// ── Handle subcommands before anything else ──────────────────────────────
|
|
28
30
|
const rawArgs = process.argv.slice(2);
|
|
29
31
|
if (rawArgs[0] === 'config') {
|
|
30
32
|
const hasShow = rawArgs.includes('--show');
|
|
@@ -36,6 +38,10 @@ if (rawArgs[0] === 'config') {
|
|
|
36
38
|
process.stderr.write(`\nError: ${err.message}\n`);
|
|
37
39
|
process.exit(1);
|
|
38
40
|
});
|
|
41
|
+
} else if (rawArgs[0] === 'setup') {
|
|
42
|
+
// Delegate to setup.js — supports --check and --silent
|
|
43
|
+
const setupPath = require('path').join(__dirname, '..', 'setup.js');
|
|
44
|
+
require('child_process').execFileSync(process.execPath, [setupPath, ...rawArgs.slice(1)], { stdio: 'inherit' });
|
|
39
45
|
} else {
|
|
40
46
|
// ── Inject CLI config flags into process.env ────────────────────────────
|
|
41
47
|
// Must run BEFORE any require() that touches config.js / dotenv
|
|
@@ -44,6 +50,7 @@ if (rawArgs[0] === 'config') {
|
|
|
44
50
|
|
|
45
51
|
// ── Delegate to pipeline ────────────────────────────────────────────────
|
|
46
52
|
const { run, getLog } = require('../src/pipeline');
|
|
53
|
+
const { c } = require('../src/utils/colors');
|
|
47
54
|
|
|
48
55
|
run().catch(err => {
|
|
49
56
|
if (err.code === 'HELP_SHOWN' || err.code === 'VERSION_SHOWN') {
|
|
@@ -57,8 +64,8 @@ if (rawArgs[0] === 'config') {
|
|
|
57
64
|
log.step('FAILED');
|
|
58
65
|
log.close();
|
|
59
66
|
}
|
|
60
|
-
process.stderr.write(`\
|
|
61
|
-
process.stderr.write(`${err.stack || ''}\n`);
|
|
67
|
+
process.stderr.write(`\n${c.error(`FATAL: ${err.message || err}`)}\n`);
|
|
68
|
+
process.stderr.write(`${c.dim(err.stack || '')}\n`);
|
|
62
69
|
process.exit(1);
|
|
63
70
|
});
|
|
64
71
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-summary-extractor",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0",
|
|
4
4
|
"description": "AI-powered meeting analysis & document generation CLI — video + document processing, deep dive docs, dynamic mode, interactive CLI with model selection, confidence scoring, learning loop, git progress tracking",
|
|
5
5
|
"main": "process_and_upload.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"taskex": "
|
|
7
|
+
"taskex": "bin/taskex.js"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"bin/",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"prompt.json",
|
|
13
13
|
"process_and_upload.js",
|
|
14
14
|
"setup.js",
|
|
15
|
+
".env.example",
|
|
15
16
|
"README.md",
|
|
16
17
|
"QUICK_START.md",
|
|
17
18
|
"ARCHITECTURE.md",
|
|
@@ -19,15 +20,37 @@
|
|
|
19
20
|
],
|
|
20
21
|
"scripts": {
|
|
21
22
|
"setup": "node setup.js",
|
|
22
|
-
"check": "node setup.js --check",
|
|
23
|
+
"setup:check": "node setup.js --check",
|
|
24
|
+
"setup:silent": "node setup.js --silent",
|
|
23
25
|
"start": "node process_and_upload.js",
|
|
24
26
|
"process": "node process_and_upload.js",
|
|
25
27
|
"process:local": "node process_and_upload.js --skip-upload",
|
|
26
28
|
"process:resume": "node process_and_upload.js --resume",
|
|
29
|
+
"process:reanalyze": "node process_and_upload.js --reanalyze",
|
|
27
30
|
"process:dry-run": "node process_and_upload.js --dry-run",
|
|
31
|
+
"process:fast": "node process_and_upload.js --parallel 5 --parallel-analysis 3",
|
|
32
|
+
"process:turbo": "node process_and_upload.js --parallel 8 --parallel-analysis 3",
|
|
33
|
+
"process:serial": "node process_and_upload.js --parallel 1 --parallel-analysis 1",
|
|
34
|
+
"process:minimal": "node process_and_upload.js --skip-upload --no-focused-pass --no-learning --no-diff",
|
|
35
|
+
"process:no-ai": "node process_and_upload.js --skip-gemini",
|
|
36
|
+
"process:upload-only": "node process_and_upload.js --skip-compression --skip-gemini",
|
|
37
|
+
"deep-dive": "node process_and_upload.js --deep-dive",
|
|
38
|
+
"deep-dive:local": "node process_and_upload.js --deep-dive --skip-upload",
|
|
39
|
+
"deep-dive:fast": "node process_and_upload.js --deep-dive --parallel 5 --parallel-analysis 3",
|
|
40
|
+
"deep-dive:resume": "node process_and_upload.js --deep-dive --resume",
|
|
28
41
|
"dynamic": "node process_and_upload.js --dynamic",
|
|
42
|
+
"dynamic:local": "node process_and_upload.js --dynamic --skip-upload",
|
|
43
|
+
"dynamic:fast": "node process_and_upload.js --dynamic --parallel 5 --parallel-analysis 3",
|
|
44
|
+
"dynamic:resume": "node process_and_upload.js --dynamic --resume",
|
|
45
|
+
"progress": "node process_and_upload.js --update-progress",
|
|
46
|
+
"config": "node process_and_upload.js config",
|
|
47
|
+
"config:show": "node process_and_upload.js config --show",
|
|
48
|
+
"config:clear": "node process_and_upload.js config --clear",
|
|
29
49
|
"help": "node process_and_upload.js --help",
|
|
30
|
-
"version": "node process_and_upload.js --version"
|
|
50
|
+
"version": "node process_and_upload.js --version",
|
|
51
|
+
"test": "vitest run",
|
|
52
|
+
"test:watch": "vitest",
|
|
53
|
+
"test:coverage": "vitest run --coverage"
|
|
31
54
|
},
|
|
32
55
|
"keywords": [
|
|
33
56
|
"meeting",
|
|
@@ -51,13 +74,23 @@
|
|
|
51
74
|
"url": "https://github.com/youssefadel94/task-summary-extractor/issues"
|
|
52
75
|
},
|
|
53
76
|
"author": "Youssef Adel",
|
|
54
|
-
"license": "
|
|
77
|
+
"license": "UNLICENSED",
|
|
55
78
|
"dependencies": {
|
|
56
79
|
"@google/genai": "^1.42.0",
|
|
80
|
+
"ajv": "^8.18.0",
|
|
81
|
+
"docx": "^9.6.0",
|
|
57
82
|
"dotenv": "^17.3.1",
|
|
58
|
-
"firebase": "^12.9.0"
|
|
83
|
+
"firebase": "^12.9.0",
|
|
84
|
+
"mammoth": "^1.11.0",
|
|
85
|
+
"officeparser": "^6.0.4",
|
|
86
|
+
"puppeteer": "^24.37.5",
|
|
87
|
+
"xlsx": "^0.18.5"
|
|
59
88
|
},
|
|
60
89
|
"engines": {
|
|
61
90
|
"node": ">=18.0.0"
|
|
91
|
+
},
|
|
92
|
+
"devDependencies": {
|
|
93
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
94
|
+
"vitest": "^4.0.18"
|
|
62
95
|
}
|
|
63
96
|
}
|
package/process_and_upload.js
CHANGED
|
@@ -1,107 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Backward-compatible entry point — delegates to bin/taskex.js.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* For global installs, use the `taskex` CLI command directly.
|
|
6
|
+
* This file exists for `node process_and_upload.js` and `npm start` compatibility.
|
|
7
7
|
*
|
|
8
8
|
* Usage:
|
|
9
|
-
* taskex [options] [folder]
|
|
10
|
-
* node process_and_upload.js [options]
|
|
9
|
+
* taskex [options] [folder] (recommended)
|
|
10
|
+
* node process_and_upload.js [options] [folder] (legacy)
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
* --gemini-key <key> Gemini API key
|
|
14
|
-
* --firebase-key <key> Firebase API key
|
|
15
|
-
* --firebase-project <id> Firebase project ID
|
|
16
|
-
* --firebase-bucket <bucket> Firebase storage bucket
|
|
17
|
-
* --firebase-domain <domain> Firebase auth domain
|
|
18
|
-
*
|
|
19
|
-
* Options:
|
|
20
|
-
* --name <name> Your name (skips interactive prompt)
|
|
21
|
-
* --model <id> Gemini model (default: gemini-2.5-flash)
|
|
22
|
-
* --skip-upload Skip Firebase Storage uploads
|
|
23
|
-
* --force-upload Upload even if remote file exists
|
|
24
|
-
* --no-storage-url Disable Storage URL strategy for Gemini
|
|
25
|
-
* --skip-compression Skip video compression (use existing segments)
|
|
26
|
-
* --skip-gemini Skip Gemini AI analysis
|
|
27
|
-
* --resume Resume from last checkpoint
|
|
28
|
-
* --reanalyze Force re-analysis of all segments
|
|
29
|
-
* --parallel <n> Max parallel uploads (default: 3)
|
|
30
|
-
* --parallel-analysis <n> Max concurrent Gemini analyses (default: 2)
|
|
31
|
-
* --thinking-budget <n> Gemini thinking token budget
|
|
32
|
-
* --compilation-thinking-budget <n> Compilation thinking budget
|
|
33
|
-
* --log-level <level> Log level: debug, info, warn, error
|
|
34
|
-
* --output <dir> Custom output directory
|
|
35
|
-
* --dry-run Show what would be done without executing
|
|
36
|
-
* --dynamic Document-only mode (no video required)
|
|
37
|
-
* --deep-dive Generate deep-dive documents after analysis
|
|
38
|
-
* --request <text> Custom research prompt for deep-dive/dynamic
|
|
39
|
-
* --update-progress Smart change detection & progress update
|
|
40
|
-
* --repo <path> Git repo path for progress tracking
|
|
41
|
-
* --no-focused-pass Disable focused re-analysis pass
|
|
42
|
-
* --no-learning Disable learning loop
|
|
43
|
-
* --no-diff Disable diff against previous run
|
|
44
|
-
* --help, -h Show help
|
|
45
|
-
* --version, -v Show version
|
|
46
|
-
*
|
|
47
|
-
* Project structure:
|
|
48
|
-
* src/
|
|
49
|
-
* config.js — Environment-based config with validation
|
|
50
|
-
* logger.js — Buffered dual-file logger with levels
|
|
51
|
-
* pipeline.js — Main orchestrator with CLI flags & progress
|
|
52
|
-
* services/
|
|
53
|
-
* firebase.js — Firebase init, upload with retry, exists checks
|
|
54
|
-
* gemini.js — Gemini init, segment analysis with retry
|
|
55
|
-
* git.js — Git CLI wrapper for change detection
|
|
56
|
-
* video.js — ffmpeg compression, segmentation, probing
|
|
57
|
-
* renderers/
|
|
58
|
-
* markdown.js — Action-focused Markdown renderer
|
|
59
|
-
* utils/
|
|
60
|
-
* adaptive-budget.js — Transcript complexity → thinking budget
|
|
61
|
-
* change-detector.js — Git + document change correlation engine
|
|
62
|
-
* cli.js — CLI argument parser & interactive prompts
|
|
63
|
-
* context-manager.js — Smart context prioritization for Gemini
|
|
64
|
-
* cost-tracker.js — Model-specific token cost tracking
|
|
65
|
-
* deep-dive.js — AI topic discovery & document generation
|
|
66
|
-
* diff-engine.js — Compilation diff between runs
|
|
67
|
-
* dynamic-mode.js — Document-only analysis mode
|
|
68
|
-
* focused-reanalysis.js — Second-pass extraction for weak dimensions
|
|
69
|
-
* format.js — Duration/size formatting helpers
|
|
70
|
-
* fs.js — Recursive file discovery
|
|
71
|
-
* health-dashboard.js — Quality report builder
|
|
72
|
-
* json-parser.js — Robust JSON extraction from AI output
|
|
73
|
-
* learning-loop.js — Cross-run history & trend analysis
|
|
74
|
-
* progress.js — Pipeline checkpoint/resume persistence
|
|
75
|
-
* progress-updater.js — Smart progress assessment & rendering
|
|
76
|
-
* prompt.js — Interactive CLI prompts (stdin/stdout)
|
|
77
|
-
* quality-gate.js — Multi-dimension confidence scoring
|
|
78
|
-
* retry.js — Exponential backoff retry with parallelMap
|
|
12
|
+
* Run `taskex --help` for full CLI reference.
|
|
79
13
|
*/
|
|
80
|
-
|
|
81
|
-
'use strict';
|
|
82
|
-
|
|
83
|
-
// ── Inject CLI config flags into process.env ──────────────────────────────
|
|
84
|
-
// Must run BEFORE any require() that touches config.js / dotenv
|
|
85
|
-
const { injectCliFlags } = require('./src/utils/inject-cli-flags');
|
|
86
|
-
injectCliFlags();
|
|
87
|
-
|
|
88
|
-
// ── Delegate to pipeline ──────────────────────────────────────────────────
|
|
89
|
-
const { run, getLog } = require('./src/pipeline');
|
|
90
|
-
|
|
91
|
-
run().catch(err => {
|
|
92
|
-
// showHelp() throws with code HELP_SHOWN — clean exit, not an error
|
|
93
|
-
if (err.code === 'HELP_SHOWN' || err.code === 'VERSION_SHOWN') {
|
|
94
|
-
process.exit(0);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const log = getLog();
|
|
98
|
-
if (log) {
|
|
99
|
-
log.error(`FATAL: ${err.message || err}`);
|
|
100
|
-
log.error(err.stack || '');
|
|
101
|
-
log.step('FAILED');
|
|
102
|
-
log.close();
|
|
103
|
-
}
|
|
104
|
-
process.stderr.write(`\nFATAL: ${err.message || err}\n`);
|
|
105
|
-
process.stderr.write(`${err.stack || ''}\n`);
|
|
106
|
-
process.exit(1);
|
|
107
|
-
});
|
|
14
|
+
require('./bin/taskex');
|