@nomad-e/bluma-cli 0.6.8 → 0.7.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 CHANGED
@@ -78,7 +78,6 @@ Tools are now modularly structured in `src/app/agent/tools/` with separate UI co
78
78
  - **Coordinator Mode**: Product Owner + Engineering Manager hybrid that delegates to specialist workers
79
79
  - **Parallel Execution**: Launch multiple workers concurrently for research, implementation, and verification
80
80
  - **Mailbox IPC**: **Bidirectional file-based communication** between coordinator and workers
81
- - **send_message**: Send follow-ups to running workers without re-spawning
82
81
  - **list_mailbox_messages**: Read progress updates, permission requests, and results
83
82
  - **poll_mailbox**: Poll for new messages from workers
84
83
  - **signal_mailbox**: Send ack/nack/progress/heartbeat signals
@@ -18,6 +18,13 @@ license: Proprietary. LICENSE.txt has complete terms
18
18
  > design agency, not a script. Typography, spacing, color, and hierarchy are
19
19
  > not optional — they are the foundation of a credible document.
20
20
 
21
+ ## Prerequisites
22
+
23
+ - **Python 3.10+** installed and available in PATH
24
+ - Install dependencies: `pip install reportlab pypdf`
25
+ - If any script fails with `command not found` or `ModuleNotFoundError`, Python or its
26
+ packages are missing — install them before proceeding
27
+
21
28
  ## MANDATORY workflow — new multi-page reports (read first)
22
29
 
23
30
  Ad-hoc 30-line ReportLab scripts are the #1 cause of “cheap PDF” output (no
@@ -46,8 +46,24 @@ from pathlib import Path
46
46
  from typing import Any
47
47
  from xml.sax.saxutils import escape
48
48
 
49
- from reportlab.lib.pagesizes import A4
50
- from reportlab.lib.units import cm
49
+ MIN_PYTHON = (3, 10)
50
+ if sys.version_info < MIN_PYTHON:
51
+ print(
52
+ f"Error: Python {'.'.join(map(str, MIN_PYTHON))}+ is required "
53
+ f"(found {'.'.join(map(str, sys.version_info[:3]))})",
54
+ file=sys.stderr,
55
+ )
56
+ sys.exit(1)
57
+
58
+ try:
59
+ from reportlab.lib.pagesizes import A4
60
+ from reportlab.lib.units import cm
61
+ except ImportError:
62
+ print(
63
+ "Error: reportlab is required. Install with: pip install reportlab",
64
+ file=sys.stderr,
65
+ )
66
+ sys.exit(1)
51
67
  from reportlab.lib.colors import HexColor
52
68
  from reportlab.lib.styles import ParagraphStyle
53
69
  from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY
@@ -8,6 +8,15 @@ Usage:
8
8
  import argparse
9
9
  import sys
10
10
 
11
+ MIN_PYTHON = (3, 10)
12
+ if sys.version_info < MIN_PYTHON:
13
+ print(
14
+ f"Error: Python {'.'.join(map(str, MIN_PYTHON))}+ is required "
15
+ f"(found {'.'.join(map(str, sys.version_info[:3]))})",
16
+ file=sys.stderr,
17
+ )
18
+ sys.exit(1)
19
+
11
20
  def merge_pdfs(input_files: list[str], output_path: str) -> None:
12
21
  try:
13
22
  from pypdf import PdfWriter, PdfReader
@@ -16,6 +16,14 @@ license: Proprietary. LICENSE.txt has complete terms
16
16
 
17
17
  # XLSX — Spreadsheet Creation, Editing & Analysis
18
18
 
19
+ ## Prerequisites
20
+
21
+ - **Python 3.10+** installed and available in PATH
22
+ - Install dependencies: `pip install openpyxl pandas`
23
+ - **LibreOffice** installed (required by `recalc.py` for formula recalculation)
24
+ - If any script fails with `command not found` or `ModuleNotFoundError`, Python or its
25
+ packages are missing — install them before proceeding
26
+
19
27
  ## Core Principle
20
28
 
21
29
  > **Formulas, not hardcodes.** Every calculated value MUST be an Excel
@@ -19,6 +19,15 @@ import os
19
19
  import sys
20
20
  import time
21
21
 
22
+ MIN_PYTHON = (3, 10)
23
+ if sys.version_info < MIN_PYTHON:
24
+ print(
25
+ f"Error: Python {'.'.join(map(str, MIN_PYTHON))}+ is required "
26
+ f"(found {'.'.join(map(str, sys.version_info[:3]))})",
27
+ file=sys.stderr,
28
+ )
29
+ sys.exit(1)
30
+
22
31
  SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
23
32
  sys.path.insert(0, SCRIPT_DIR)
24
33