task-summary-extractor 8.1.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/README.md ADDED
@@ -0,0 +1,544 @@
1
+ # Task Summary Extractor
2
+
3
+ > **v8.1.0** — AI-powered meeting analysis & document generation CLI. Install globally, run anywhere.
4
+
5
+ <p align="center">
6
+ <img src="https://img.shields.io/badge/node-%3E%3D18.0.0-green" alt="Node.js" />
7
+ <img src="https://img.shields.io/badge/gemini-2.5--flash-blue" alt="Gemini" />
8
+ <img src="https://img.shields.io/badge/firebase-11.x-orange" alt="Firebase" />
9
+ <img src="https://img.shields.io/badge/version-8.1.0-brightgreen" alt="Version" />
10
+ <img src="https://img.shields.io/badge/npm-task--summary--extractor-red" alt="npm" />
11
+ </p>
12
+
13
+ **Record a meeting → get a structured task document.** Or point it at any folder and generate docs from context.
14
+
15
+ 📖 **New here?** Jump to [Setup (3 steps)](#setup-3-steps) — you'll be running in under 5 minutes.
16
+
17
+ ---
18
+
19
+ ## What It Does
20
+
21
+ ### 🎥 Video Analysis (default mode)
22
+
23
+ Drop a recording in a folder → run the tool → get a Markdown task document with:
24
+
25
+ - **Tickets** — ID, title, status, assignee, confidence score
26
+ - **Change Requests** — what changed, where, how, why
27
+ - **Action Items** — who does what, by when
28
+ - **Blockers** — severity, owner, proposed resolution
29
+ - **Scope Changes** — added, removed, deferred items
30
+ - **Your Tasks** — personalized list scoped to your name
31
+
32
+ ```bash
33
+ taskex --name "Jane" "my-meeting"
34
+ ```
35
+
36
+ ### 📝 Dynamic Mode (`--dynamic`)
37
+
38
+ No video needed. Point at a folder with docs, tell it what you want:
39
+
40
+ ```bash
41
+ taskex --dynamic --request "Plan migration from MySQL to Postgres" "db-specs"
42
+ ```
43
+
44
+ Generates 3–15 Markdown documents: overviews, guides, checklists, decision records, etc.
45
+
46
+ ### 🔍 Deep Dive (`--deep-dive`)
47
+
48
+ After video analysis, generate standalone docs for every topic discussed:
49
+
50
+ ```bash
51
+ taskex --deep-dive --name "Jane" "my-meeting"
52
+ ```
53
+
54
+ ### 📊 Progress Tracking (`--update-progress`)
55
+
56
+ Check which items from a previous analysis have been completed, using git evidence:
57
+
58
+ ```bash
59
+ taskex --update-progress --repo "C:\my-project" "my-meeting"
60
+ ```
61
+
62
+ > **v7.2.3**: If the call folder isn't a git repo, the tool auto-initializes one for baseline tracking.
63
+
64
+ > See all modes explained with diagrams → [ARCHITECTURE.md](ARCHITECTURE.md#pipeline-phases)
65
+
66
+ ---
67
+
68
+ ## Setup (3 Steps)
69
+
70
+ ### What You Need First
71
+
72
+ | Requirement | How to Check | Get It |
73
+ |-------------|-------------|--------|
74
+ | **Node.js ≥ 18** | `node --version` | [nodejs.org](https://nodejs.org/) |
75
+ | **ffmpeg** | `ffmpeg -version` | [gyan.dev/ffmpeg](https://www.gyan.dev/ffmpeg/builds/) — add to PATH |
76
+ | **Gemini API Key** | — | [Google AI Studio](https://aistudio.google.com/apikey) — free tier available |
77
+
78
+ > **Git** is optional — only needed for `--update-progress` mode.
79
+
80
+ ### Step 1: Install
81
+
82
+ **Option A — npm global install (recommended):**
83
+
84
+ ```bash
85
+ npm install -g task-summary-extractor
86
+ ```
87
+
88
+ Now `taskex` is available system-wide. Done.
89
+
90
+ **Option B — Clone & install (development):**
91
+
92
+ ```bash
93
+ git clone https://github.com/youssefadel94/task-summary-extractor.git
94
+ cd task-summary-extractor
95
+ node setup.js
96
+ ```
97
+
98
+ The setup script does everything: installs dependencies, creates your `.env`, prompts for your API key, validates the pipeline. **Follow the prompts — it takes 1 minute.**
99
+
100
+ ### Step 2: Add your recording
101
+
102
+ Create a folder and drop your video in it:
103
+
104
+ ```
105
+ my-meeting/
106
+ ├── Recording.mp4 ← your video file
107
+ └── Recording.vtt ← subtitles (optional, improves quality a lot)
108
+ ```
109
+
110
+ > You can also add docs (`.md`, `.pdf`, `.txt`, `.csv`) in any subfolders — the tool finds everything automatically. More context → better results.
111
+
112
+ ### Step 3: Run
113
+
114
+ ```bash
115
+ taskex --name "Your Name" "my-meeting"
116
+ ```
117
+
118
+ Or just run `taskex` inside a folder — it'll walk you through everything interactively.
119
+
120
+ **First time? Save your API key globally (one time):**
121
+
122
+ ```bash
123
+ taskex config
124
+ ```
125
+
126
+ This saves your Gemini key to `~/.taskexrc` — you'll never need to pass it again.
127
+
128
+ **Or pass it inline (no setup needed):**
129
+
130
+ ```bash
131
+ taskex --gemini-key "YOUR_KEY" --name "Your Name" "my-meeting"
132
+ ```
133
+
134
+ **Done.** Your results are in `my-meeting/runs/{timestamp}/results.md`.
135
+
136
+ > 🎓 **Full walkthrough** with examples, folder structures, and troubleshooting → [QUICK_START.md](QUICK_START.md)
137
+
138
+ ---
139
+
140
+ ## CLI Flags
141
+
142
+ Every flag is optional. Run with no flags for fully interactive mode.
143
+
144
+ ### Configuration Flags
145
+
146
+ Pass API keys and config directly — no `.env` file needed:
147
+
148
+ | Flag | What It Does | Example |
149
+ |------|-------------|---------|
150
+ | `--gemini-key <key>` | Gemini API key | `--gemini-key "AIza..."` |
151
+ | `--firebase-key <key>` | Firebase API key | `--firebase-key "AIza..."` |
152
+ | `--firebase-project <id>` | Firebase project ID | `--firebase-project "my-proj"` |
153
+ | `--firebase-bucket <bucket>` | Firebase storage bucket | `--firebase-bucket "my-proj.appspot.com"` |
154
+ | `--firebase-domain <domain>` | Firebase auth domain | `--firebase-domain "my-proj.firebaseapp.com"` |
155
+
156
+ > Config flags override `.env` values. You can mix both — flags take priority.
157
+
158
+ ### Everyday Flags
159
+
160
+ These are the ones you'll actually use:
161
+
162
+ | Flag | What It Does | Example |
163
+ |------|-------------|---------|
164
+ | `--name <name>` | Set your name (skips prompt) | `--name "Jane"` |
165
+ | `--model <id>` | Pick a Gemini model (skips selector) | `--model gemini-2.5-pro` |
166
+ | `--skip-upload` | Don't upload to Firebase (local only) | `--skip-upload` |
167
+ | `--force-upload` | Re-upload files even if they already exist | `--force-upload` |
168
+ | `--resume` | Continue an interrupted run | `--resume` |
169
+ | `--reanalyze` | Force fresh analysis (ignore cache) | `--reanalyze` |
170
+ | `--dry-run` | Preview what would run, without running | `--dry-run` |
171
+
172
+ **Typical usage:**
173
+
174
+ ```bash
175
+ # Interactive — picks folder, model, prompts for name
176
+ taskex
177
+
178
+ # Specify everything upfront
179
+ taskex --name "Jane" --model gemini-2.5-pro --skip-upload "my-meeting"
180
+
181
+ # Resume a run that crashed halfway
182
+ taskex --resume "my-meeting"
183
+
184
+ # Pass API key directly (no .env needed)
185
+ taskex --gemini-key "AIza..." --name "Jane" "my-meeting"
186
+ ```
187
+
188
+ ### Mode Flags
189
+
190
+ Choose what the tool does. Only use one at a time:
191
+
192
+ | Flag | Mode | What You Get |
193
+ |------|------|-------------|
194
+ | *(none)* | **Video analysis** | `results.md` — structured task document |
195
+ | `--dynamic` | **Doc generation** | `INDEX.md` + 3–15 topic documents |
196
+ | `--deep-dive` | **Topic explainers** | `INDEX.md` + per-topic deep-dive docs |
197
+ | `--update-progress` | **Progress check** | `progress.md` — item status via git |
198
+
199
+ **Dynamic mode** also uses:
200
+
201
+ | Flag | Purpose | Example |
202
+ |------|---------|---------|
203
+ | `--request <text>` | Tell the AI what to generate | `--request "Create onboarding guide"` |
204
+
205
+ **Progress tracking** also uses:
206
+
207
+ | Flag | Purpose | Example |
208
+ |------|---------|---------|
209
+ | `--repo <path>` | Git repo to check for evidence | `--repo "C:\my-project"` |
210
+
211
+ ### Skip Flags
212
+
213
+ Skip parts of the pipeline you don't need:
214
+
215
+ | Flag | What It Skips | When to Use |
216
+ |------|--------------|-------------|
217
+ | `--skip-upload` | Firebase upload | Running locally, no Firebase configured |
218
+ | `--force-upload` | Skip-existing checks | Re-upload files that already exist in Storage |
219
+ | `--no-storage-url` | Storage URL optimization | Force Gemini File API upload (debugging) |
220
+ | `--skip-compression` | Video compression | You already compressed/segmented the video |
221
+ | `--skip-gemini` | AI analysis entirely | You just want to compress & upload |
222
+
223
+ ### Tuning Flags
224
+
225
+ **You probably don't need these.** The defaults work well. These are for power users:
226
+
227
+ | Flag | Default | What It Controls |
228
+ |------|---------|-----------------|
229
+ | `--thinking-budget <n>` | `24576` | AI thinking tokens per segment — higher = more thorough, slower, costlier |
230
+ | `--compilation-thinking-budget <n>` | `10240` | AI thinking tokens for the final cross-segment compilation |
231
+ | `--parallel <n>` | `3` | Max concurrent Firebase uploads |
232
+ | `--parallel-analysis <n>` | `2` | Max concurrent AI segment analyses |
233
+ | `--log-level <level>` | `info` | `debug` / `info` / `warn` / `error` |
234
+ | `--output <dir>` | auto | Custom output directory (default: `runs/{timestamp}`) |
235
+ | `--no-focused-pass` | enabled | Disable targeted re-analysis of weak segments |
236
+ | `--no-learning` | enabled | Disable auto-tuning from historical run data |
237
+ | `--no-diff` | enabled | Disable diff comparison with the previous run |
238
+
239
+ ### Available Models
240
+
241
+ Use `--model <id>` or run without it for an interactive picker:
242
+
243
+ | Model ID | Speed | Cost | Best For |
244
+ |----------|-------|------|----------|
245
+ | `gemini-2.5-flash` | ⚡ Fast | $ | **Default** — best price-performance |
246
+ | `gemini-2.5-flash-lite` | ⚡⚡ Fastest | ¢ | High volume, budget runs |
247
+ | `gemini-2.5-pro` | 🧠 Slower | $$ | Deep reasoning, complex meetings |
248
+ | `gemini-3-flash-preview` | ⚡ Fast | $ | Latest flash model |
249
+ | `gemini-3.1-pro-preview` | 🧠 Slower | $$$ | Most capable overall |
250
+
251
+ ### Cheat Sheet
252
+
253
+ ```
254
+ taskex [flags] [folder]
255
+
256
+ CONFIG --gemini-key --firebase-key --firebase-project
257
+ --firebase-bucket --firebase-domain
258
+ MODES --dynamic --deep-dive --update-progress
259
+ CORE --name --model --skip-upload --resume --reanalyze --dry-run
260
+ UPLOAD --force-upload --no-storage-url
261
+ SKIP --skip-compression --skip-gemini
262
+ DYNAMIC --request <text>
263
+ PROGRESS --repo <path>
264
+ TUNING --thinking-budget --compilation-thinking-budget --parallel
265
+ --parallel-analysis --log-level --output
266
+ --no-focused-pass --no-learning --no-diff
267
+ INFO --help (-h) --version (-v)
268
+ ```
269
+
270
+ ---
271
+
272
+ ## Output
273
+
274
+ ### Video Analysis
275
+
276
+ ```
277
+ my-meeting/runs/{timestamp}/
278
+ ├── results.md ← Open this — your task document
279
+ ├── results.json ← Full pipeline data
280
+ └── compilation.json ← All extracted items (JSON)
281
+ ```
282
+
283
+ ### Dynamic Mode
284
+
285
+ ```
286
+ my-project/runs/{timestamp}/
287
+ ├── INDEX.md ← Open this — document index
288
+ ├── dm-01-overview.md
289
+ ├── dm-02-guide.md
290
+ └── dynamic-run.json
291
+ ```
292
+
293
+ ### Deep Dive
294
+
295
+ ```
296
+ my-meeting/runs/{timestamp}/deep-dive/
297
+ ├── INDEX.md ← Open this — topic index
298
+ ├── dd-01-topic.md
299
+ ├── dd-02-topic.md
300
+ └── deep-dive.json
301
+ ```
302
+
303
+ ### Progress Update
304
+
305
+ ```
306
+ my-meeting/runs/{timestamp}/
307
+ ├── progress.md ← Status report with git evidence
308
+ └── progress.json
309
+ ```
310
+
311
+ ---
312
+
313
+ ## Folder Setup Tips
314
+
315
+ Drop docs alongside your video to give the AI context. **More context = better extraction.**
316
+
317
+ ```
318
+ my-meeting/
319
+ ├── Recording.mp4 ← Video (required for video mode)
320
+ ├── Recording.vtt ← Subtitles (highly recommended)
321
+ ├── agenda.md ← Loose docs at root are fine
322
+
323
+ ├── .tasks/ ← Gets priority weighting (optional)
324
+ │ ├── code-map.md ← What each module/component does
325
+ │ └── current-sprint.md ← Current sprint goals and tickets
326
+
327
+ └── specs/ ← Any subfolder name works
328
+ └── requirements.md
329
+ ```
330
+
331
+ **Supported formats:** `.mp4` `.mkv` `.webm` `.avi` `.mov` (video) · `.vtt` `.srt` `.txt` `.md` `.csv` `.pdf` (docs)
332
+
333
+ The tool **recursively scans all subfolders**. `.tasks/` gets highest priority weighting but everything is included.
334
+
335
+ | What Helps Most | Why |
336
+ |-----------------|-----|
337
+ | **Subtitles** (`.vtt`/`.srt`) | Dramatically improves name/ID extraction |
338
+ | **Team roster** (`.csv`) | Accurate attribution of action items |
339
+ | **Code map / architecture docs** | AI matches changes to actual files |
340
+ | **Sprint / board exports** | Status context for discussed items |
341
+
342
+ ---
343
+
344
+ ## Configuration
345
+
346
+ ### Global Config (recommended)
347
+
348
+ Save your API keys once — they persist across all projects:
349
+
350
+ ```bash
351
+ taskex config # Interactive setup — saves to ~/.taskexrc
352
+ taskex config --show # View saved config (secrets masked)
353
+ taskex config --clear # Delete saved config
354
+ ```
355
+
356
+ **First-run experience:** If no Gemini key is found anywhere, the tool prompts you to enter one and offers to save it globally.
357
+
358
+ ### Config Resolution Priority
359
+
360
+ Highest wins:
361
+
362
+ 1. **CLI flags** — `--gemini-key`, `--firebase-key`, etc.
363
+ 2. **Environment variables** — `export GEMINI_API_KEY=...`
364
+ 3. **CWD `.env` file** — project-specific config
365
+ 4. **`~/.taskexrc`** — global persistent config
366
+ 5. **Package root `.env`** — development fallback
367
+
368
+ All methods are fully backward-compatible.
369
+
370
+ ### CLI Config Flags
371
+
372
+ Pass keys directly — no files needed:
373
+
374
+ ```bash
375
+ taskex --gemini-key "AIza..." --name "Jane" "my-meeting"
376
+ ```
377
+
378
+ ### `.env` File
379
+
380
+ For repeated use, create a `.env` in your **working directory**. Run `node setup.js` (from the cloned repo) to generate one automatically.
381
+
382
+ Only `GEMINI_API_KEY` is required — everything else has defaults:
383
+
384
+ ```env
385
+ # Required
386
+ GEMINI_API_KEY=your-key-here
387
+
388
+ # Optional — uncomment to customize
389
+ # GEMINI_MODEL=gemini-2.5-flash
390
+ # VIDEO_SPEED=1.5
391
+ # THINKING_BUDGET=24576
392
+ # LOG_LEVEL=info
393
+
394
+ # Optional — Firebase (or just use --skip-upload)
395
+ # FIREBASE_API_KEY=...
396
+ # FIREBASE_AUTH_DOMAIN=...
397
+ # FIREBASE_PROJECT_ID=...
398
+ # FIREBASE_STORAGE_BUCKET=...
399
+ ```
400
+
401
+ > Full variable list + video encoding parameters → [ARCHITECTURE.md](ARCHITECTURE.md#tech-stack)
402
+
403
+ ---
404
+
405
+ ## Features
406
+
407
+ | Feature | Description |
408
+ |---------|-------------|
409
+ | **Video Compression** | H.264 CRF 24, text-optimized sharpening, configurable speed |
410
+ | **Smart Segmentation** | ≤5 min chunks with boundary-aware splitting |
411
+ | **Cross-Segment Continuity** | Ticket IDs, names, and context carry forward |
412
+ | **Document Discovery** | Auto-finds docs in all subfolders |
413
+ | **Storage URL Optimization** | Firebase download URLs reused as Gemini External URLs — skips separate File API upload |
414
+ | **Upload Control Flags** | `--force-upload` to re-upload, `--no-storage-url` to force File API — full control over upload behavior |
415
+ | **3-Strategy File Resolution** | Reuse URI → Storage URL → File API upload (zero redundant uploads) |
416
+ | **Gemini File Cleanup** | Auto-deletes File API uploads after analysis completes |
417
+ | **Quality Gate** | 4-dimension scoring with auto-retry |
418
+ | **Focused Re-Analysis** | Targeted second pass on weak areas |
419
+ | **Learning Loop** | Auto-tunes budgets from past run quality |
420
+ | **Diff Engine** | Shows what changed between runs |
421
+ | **Confidence Scoring** | Every item rated HIGH/MEDIUM/LOW with evidence |
422
+ | **Model Selection** | 5 Gemini models — interactive picker or `--model` |
423
+ | **Git Progress Tracking** | Correlates commits with extracted items |
424
+ | **Deep Dive** | Explanatory docs per topic discussed |
425
+ | **Dynamic Mode** | Generate docs from any content mix |
426
+ | **Interactive CLI** | Run with no args → guided experience |
427
+ | **Resume / Checkpoint** | `--resume` continues interrupted runs |
428
+ | **Firebase Upload** | Team access via cloud (optional) |
429
+
430
+ > Technical details on each feature → [ARCHITECTURE.md](ARCHITECTURE.md)
431
+
432
+ ---
433
+
434
+ ## Updating
435
+
436
+ **npm global install:**
437
+
438
+ ```bash
439
+ npm update -g task-summary-extractor
440
+ ```
441
+
442
+ **Git clone:**
443
+
444
+ ```bash
445
+ git checkout main && git pull
446
+ ```
447
+
448
+ Your call folders, `.env`, logs, and videos are all `.gitignore`d — nothing gets lost.
449
+
450
+ ---
451
+
452
+ ## Troubleshooting
453
+
454
+ | Problem | Fix |
455
+ |---------|-----|
456
+ | `ffmpeg not found` | [Download](https://www.gyan.dev/ffmpeg/builds/) → add to PATH |
457
+ | `GEMINI_API_KEY not set` | Run `taskex config` to save globally, or edit `.env` → paste key from [AI Studio](https://aistudio.google.com/apikey) |
458
+ | `ECONNREFUSED` | Check your internet — Gemini API needs network |
459
+ | Videos are slow | Normal — ~30-60s per 5-min segment |
460
+ | JSON parse warnings | Expected — the parser has 5 fallback strategies |
461
+ | Something else broken | `node setup.js --check` validates everything |
462
+
463
+ ---
464
+
465
+ ## Project Structure
466
+
467
+ ```
468
+ task-summary-extractor/
469
+ ├── bin/
470
+ │ └── taskex.js Global CLI entry point
471
+ ├── process_and_upload.js Backward-compatible entry point
472
+ ├── setup.js First-time setup & validation
473
+ ├── package.json Dependencies, scripts, bin config
474
+ ├── prompt.json Gemini extraction prompt
475
+
476
+ ├── src/
477
+ │ ├── config.js Config, model registry, env vars
478
+ │ ├── logger.js Structured JSONL logger (triple output)
479
+ │ ├── pipeline.js Multi-mode orchestrator (1,985 lines)
480
+ │ ├── services/
481
+ │ │ ├── gemini.js Gemini AI — 3-strategy file resolution + External URL support
482
+ │ │ ├── firebase.js Firebase Storage (async I/O)
483
+ │ │ ├── video.js ffmpeg compression
484
+ │ │ └── git.js Git CLI wrapper
485
+ │ ├── renderers/
486
+ │ │ └── markdown.js Report renderer
487
+ │ └── utils/ 21 modules — see ARCHITECTURE.md
488
+
489
+ ├── QUICK_START.md Step-by-step setup guide
490
+ ├── ARCHITECTURE.md Technical deep dive
491
+ └── EXPLORATION.md Roadmap & future features
492
+ ```
493
+
494
+ > Full module map with line counts → [EXPLORATION.md](EXPLORATION.md#full-module-map)
495
+
496
+ ---
497
+
498
+ ## npm Scripts
499
+
500
+ > If installed globally, just use `taskex` directly. These scripts are for development use with the cloned repo.
501
+
502
+ | Script | What |
503
+ |--------|------|
504
+ | `npm run setup` | First-time setup |
505
+ | `npm run check` | Validate environment |
506
+ | `npm start` | Run the pipeline |
507
+ | `npm run help` | Show CLI help |
508
+
509
+ ---
510
+
511
+ ## Version History
512
+
513
+ | Version | Highlights |
514
+ |---------|-----------|
515
+ | **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
+ | **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
+ | **v7.2.3** | Production hardening — cross-platform ffmpeg, shell injection fix, auto git init for progress tracking, `runs/` excluded from doc discovery |
518
+ | **v7.2.2** | Upload control flags (`--force-upload`, `--no-storage-url`), production-ready docs |
519
+ | **v7.2.1** | Storage URL optimization, 3-strategy file resolution, Gemini file cleanup, codebase audit fixes |
520
+ | **v7.2** | Interactive model selector, `--model` flag, 5-model registry |
521
+ | **v7.1** | `--dynamic` processes videos too — any content mix |
522
+ | **v7.0** | Dynamic mode, interactive folder selection |
523
+ | **v6.2** | `--deep-dive` → topic docs |
524
+ | **v6.1** | Git progress tracking, `--update-progress` |
525
+ | **v6** | Confidence scoring, learning loop, diff engine |
526
+ | **v5** | Quality gate, adaptive budgets |
527
+ | **v4** | 8-phase pipeline, cost tracking |
528
+ | **v3** | Logger, retry logic, checkpoints |
529
+
530
+ ---
531
+
532
+ ## Documentation
533
+
534
+ | Doc | What's In It | When to Read |
535
+ |-----|-------------|-------------|
536
+ | 📖 **[QUICK_START.md](QUICK_START.md)** | Full setup walkthrough, examples, troubleshooting | First time using the tool |
537
+ | 🏗️ **[ARCHITECTURE.md](ARCHITECTURE.md)** | Pipeline phases, algorithms, Mermaid diagrams | Understanding how it works |
538
+ | 🔭 **[EXPLORATION.md](EXPLORATION.md)** | Module map, line counts, future roadmap | Contributing or extending |
539
+
540
+ ---
541
+
542
+ ## License
543
+
544
+ MIT — © 2026 Youssef Adel
package/bin/taskex.js ADDED
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * taskex — AI-powered meeting analysis & document generation.
4
+ *
5
+ * Global CLI entry point for the task-summary-extractor package.
6
+ * Install: npm i -g task-summary-extractor
7
+ * Usage: taskex [options] [folder]
8
+ *
9
+ * Subcommands:
10
+ * taskex config Interactive global config setup (~/.taskexrc)
11
+ * taskex config --show Show saved config (masked secrets)
12
+ * taskex config --clear Remove global config file
13
+ *
14
+ * Config flags (override .env and global config):
15
+ * --gemini-key <key> Gemini API key
16
+ * --firebase-key <key> Firebase API key
17
+ * --firebase-project <id> Firebase project ID
18
+ * --firebase-bucket <bucket> Firebase storage bucket
19
+ * --firebase-domain <domain> Firebase auth domain
20
+ *
21
+ * Config resolution (highest wins):
22
+ * CLI flags → process.env → CWD .env → ~/.taskexrc → package .env
23
+ */
24
+
25
+ 'use strict';
26
+
27
+ // ── Handle `taskex config` subcommand before anything else ────────────────
28
+ const rawArgs = process.argv.slice(2);
29
+ if (rawArgs[0] === 'config') {
30
+ const hasShow = rawArgs.includes('--show');
31
+ const hasClear = rawArgs.includes('--clear');
32
+ const { interactiveSetup } = require('../src/utils/global-config');
33
+ interactiveSetup({ showOnly: hasShow, clear: hasClear }).then(() => {
34
+ process.exit(0);
35
+ }).catch(err => {
36
+ process.stderr.write(`\nError: ${err.message}\n`);
37
+ process.exit(1);
38
+ });
39
+ } else {
40
+ // ── Inject CLI config flags into process.env ────────────────────────────
41
+ // Must run BEFORE any require() that touches config.js / dotenv
42
+ const { injectCliFlags } = require('../src/utils/inject-cli-flags');
43
+ injectCliFlags();
44
+
45
+ // ── Delegate to pipeline ────────────────────────────────────────────────
46
+ const { run, getLog } = require('../src/pipeline');
47
+
48
+ run().catch(err => {
49
+ if (err.code === 'HELP_SHOWN' || err.code === 'VERSION_SHOWN') {
50
+ process.exit(0);
51
+ }
52
+
53
+ const log = getLog();
54
+ if (log) {
55
+ log.error(`FATAL: ${err.message || err}`);
56
+ log.error(err.stack || '');
57
+ log.step('FAILED');
58
+ log.close();
59
+ }
60
+ process.stderr.write(`\nFATAL: ${err.message || err}\n`);
61
+ process.stderr.write(`${err.stack || ''}\n`);
62
+ process.exit(1);
63
+ });
64
+ }
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "task-summary-extractor",
3
+ "version": "8.1.0",
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
+ "main": "process_and_upload.js",
6
+ "bin": {
7
+ "taskex": "./bin/taskex.js"
8
+ },
9
+ "files": [
10
+ "bin/",
11
+ "src/",
12
+ "prompt.json",
13
+ "process_and_upload.js",
14
+ "setup.js",
15
+ "README.md",
16
+ "QUICK_START.md",
17
+ "ARCHITECTURE.md",
18
+ "EXPLORATION.md"
19
+ ],
20
+ "scripts": {
21
+ "setup": "node setup.js",
22
+ "check": "node setup.js --check",
23
+ "start": "node process_and_upload.js",
24
+ "process": "node process_and_upload.js",
25
+ "process:local": "node process_and_upload.js --skip-upload",
26
+ "process:resume": "node process_and_upload.js --resume",
27
+ "process:dry-run": "node process_and_upload.js --dry-run",
28
+ "dynamic": "node process_and_upload.js --dynamic",
29
+ "help": "node process_and_upload.js --help",
30
+ "version": "node process_and_upload.js --version"
31
+ },
32
+ "keywords": [
33
+ "meeting",
34
+ "analysis",
35
+ "gemini",
36
+ "ai",
37
+ "video",
38
+ "transcription",
39
+ "task-extraction",
40
+ "document-generation",
41
+ "cli",
42
+ "firebase",
43
+ "ffmpeg"
44
+ ],
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "git+https://github.com/youssefadel94/task-summary-extractor.git"
48
+ },
49
+ "homepage": "https://github.com/youssefadel94/task-summary-extractor#readme",
50
+ "bugs": {
51
+ "url": "https://github.com/youssefadel94/task-summary-extractor/issues"
52
+ },
53
+ "author": "Youssef Adel",
54
+ "license": "MIT",
55
+ "dependencies": {
56
+ "@google/genai": "^1.42.0",
57
+ "dotenv": "^17.3.1",
58
+ "firebase": "^12.9.0"
59
+ },
60
+ "engines": {
61
+ "node": ">=18.0.0"
62
+ }
63
+ }