feat: Add various tools for document processing and management

- Introduced `docx-extractor` for extracting content and metadata from Word .docx files.
- Added `docx2md` for converting Word .docx files to Markdown format.
- Implemented `gpt` for generating text using OpenAI's GPT models.
- Created `html2text` for converting HTML content to plain text.
- Developed `mbox2eml` for converting MBOX mailbox files to individual .eml files.
- Added `md2pdf` for converting Markdown files to PDF format.
- Introduced `mdscraper` for combining text files into a single markdown document.
- Created `pdf-extractor` for extracting content and metadata from PDF files.
- Developed `pdf2md` for converting PDF files to Markdown format.
- Implemented `protonmail` for managing ProtonMail emails via Bridge.
- Added `schedule` for managing systemd timers and services.
- Introduced `search` for managing searchable collections of files.
- Added `text-extractor` for extracting content and metadata from text files.
- Removed outdated recommendations document.
This commit is contained in:
2026-02-22 22:18:41 -08:00
parent eab6f8b535
commit 6d0332e32b
75 changed files with 62 additions and 235 deletions

View File

@@ -14,8 +14,7 @@ def _get_project_dir(config: CastleConfig, project_name: str) -> Path:
if project_name not in config.components:
raise ValueError(f"Unknown component: {project_name}")
manifest = config.components[project_name]
cwd = manifest.run.working_dir if manifest.run else None
working_dir = cwd or project_name
working_dir = manifest.source_dir or project_name
return config.root / working_dir
@@ -59,8 +58,7 @@ def run_test(args: argparse.Namespace) -> int:
# Run all
all_passed = True
for name, manifest in config.components.items():
cwd = manifest.run.working_dir if manifest.run else None
working_dir = cwd or name
working_dir = manifest.source_dir or name
project_dir = config.root / working_dir
tests_dir = project_dir / "tests"
if not tests_dir.exists():
@@ -98,8 +96,7 @@ def run_lint(args: argparse.Namespace) -> int:
# Run all
all_passed = True
for name, manifest in config.components.items():
cwd = manifest.run.working_dir if manifest.run else None
working_dir = cwd or name
working_dir = manifest.source_dir or name
project_dir = config.root / working_dir
if not _has_pyproject(project_dir):
continue