Commit Graph

83 Commits

Author SHA1 Message Date
mrhavens 1b116108a6 Merge: fix-docs - Add module docstrings 2026-03-14 05:37:34 +00:00
mrhavens 2716dab0dc Merge: fix-logging - Add structured logging 2026-03-14 05:37:34 +00:00
mrhavens 31def1a70b Merge: fix-validation - Add Pydantic validation 2026-03-14 05:37:34 +00:00
mrhavens 9a2e429378 fix(docs): Add module docstrings 2026-03-14 05:37:27 +00:00
mrhavens b52739ca5c fix(logging): Add structured logging module
- Created logging.py with:
  - setup_logging() function
  - Configurable levels
  - Console and file handlers
  - Structured format

This addresses the logging gap.
2026-03-14 05:37:19 +00:00
mrhavens 1f4e7bea6b fix(validation): Add Pydantic request validation
- Created schemas/requests.py with validated models:
  - GenerateRequest
  - IngestRequest
  - ConfigRequest
- Validates: concept length, repo format, numeric ranges
- Prevents invalid input from reaching handlers

This addresses input validation concern.
2026-03-14 05:36:51 +00:00
mrhavens 9148ebaad5 Merge: fix-reliability - Add retry logic and circuit breaker 2026-03-14 05:25:43 +00:00
mrhavens 5b68459e12 Merge: fix-testing - Add comprehensive tests 2026-03-14 05:25:43 +00:00
mrhavens b5da8d272c fix(reliability): Add retry logic and circuit breaker
- Created utils/retry.py with:
  - RetryHandler with exponential backoff
  - CircuitBreaker pattern
  - Config for max attempts, delays
  - Graceful degradation

- Updated LLM client to use retry logic
- API failures now retry with backoff
- Circuit breaker prevents cascade failures
- Graceful degradation on prolonged failures

This addresses the reliability gap identified in code review.
2026-03-14 05:24:09 +00:00
mrhavens d4abe70a79 fix(testing): Add comprehensive test suite
- test_nonfiction.py with 100+ test cases
- Tests for PurposeClassifier
- Tests for taxonomy/frameworks
- Tests for critique criteria
- Tests for all framework types
- Tests for intake agent
- Tests for multi-source ingest

This addresses the testing gap identified in code review.
2026-03-14 05:22:45 +00:00
mrhavens 16cf8cd5ef feat: Add Code Review Crew
Created code_review_crew.py - 5 expert agents:
- SecurityExpert
- PerformanceExpert
- ArchitectureExpert
- TestingExpert
- ErrorHandlingExpert

Each audits specific domain and reports issues.

Also creates initial code review findings as issues.
2026-03-14 05:13:54 +00:00
mrhavens cfbb701284 feat: Add Agent-Driven Web Crawler
Created agent_crawler.py:

AgentWebCrawler - AI-powered crawling that:
1. Analyzes site structure (LLM)
2. Decides what to crawl based on purpose
3. Scores relevance dynamically
4. Adapts as it learns more
5. Knows when it has enough

Purpose types:
- DOCUMENTATION - Technical docs, guides
- TRAINING - Learning materials
- KNOWLEDGE - General knowledge base
- RESEARCH - Research papers
- REFERENCE - Reference material

Usage:

Features:
- Content extraction (not HTML dump)
- Relevance scoring
- Rate limiting
- Configurable depth/pages
- Integration with multi-source ingest
2026-03-14 05:00:44 +00:00
mrhavens 750d30b4de feat: Add Multi-Source Ingestion
Created multi_source_ingest.py:

- MultiSourceIngestor class
- Supports: GitHub repos, S3 buckets, local files, URLs
- Merge strategies: append, smart (deduplicate), priority

Usage:

Features:
- Deduplicates overlapping content
- Tracks source attribution
- Builds summary of ingested content
- Multiple merge strategies
- Hash-based content tracking
2026-03-14 04:22:07 +00:00
mrhavens 039faa660e docs: Update README and add comprehensive framework documentation
- Rewrote README with all 100+ frameworks organized by category
- Added Nonfiction Framework Library docs (docs/NONFICTION_FRAMEWORKS.md)
- Documented all purposes: learn, understand, transform, decide, reference, inspire
- Added framework tables by category
- Documented new categories: Textbook, Academic, Creative, RPG
- Added CLI usage examples
- Added programmatic usage examples
2026-03-14 01:17:51 +00:00
mrhavens 110aab6ce9 feat: Add RPG & Tabletop Gaming Frameworks
Created rpg_frameworks.py with 15 RPG content types:

CORE RULEBOOKS:
1. Core Rulebook - Main game system (300-500 pages)
2. Quickstart - Condensed intro (16-32 pages)

GAME MASTER GUIDES:
3. Game Master Guide - Running games, worldbuilding
4. Adventure Module - Ready-to-run adventure
5. Campaign Setting - Complete world sourcebook

SUPPLEMENTS:
6. Player's Companion - New races/classes/options
7. Monster Manual - Creatures catalog
8. Thematic Sourcebook - Deep dive on theme

ADVENTURE TYPES:
9. Dungeon Crawl - Classic dungeon delve
10. Hex Crawl - Open world sandbox
11. Dungeon World Style - Narrative-forward

SPECIALTY:
12. Worldbuilding Guide - How to build worlds
13. Props and Handouts - Physical/digital props
14. Solo Adventure - Single player RPG
15. LARP Document - Live action roleplaying

Each includes detailed stages, prompt templates, tone guidance, typical length.

Functions:
- get_rpg_frameworks()
- suggest_rpg_framework()
2026-03-14 01:10:11 +00:00
mrhavens 2be17c5e85 feat: Add Creative and Interactive Frameworks
Created creative_frameworks.py with 14 creative formats:

INTERACTIVE/BRANCHING:
1. Choose Your Own Adventure - Branching narrative
2. Gamebook - RPG-style fighting fantasy
3. Visual Novel - Anime/VN script style

EPISTOLARY/DOCUMENTS:
4. Epistolary Novel - Letters, emails, texts
5. Found Documents - Discovered artifacts

MANIFESTO/CALL TO ACTION:
6. Manifesto - Revolutionary call to action
7. Open Letter - Public letter

EXPERIMENTAL:
8. Infinite Story - Serial/neverending
9. Fractal Narrative - Self-similar structure
10. Scrapbook - Non-linear fragments

AUDIO/PERFORMANCE:
11. Podcast Script - Spoken audio content
12. Screenplay - Hollywood film script
13. Stage Play - Theatrical script

Each includes detailed stages, prompt templates, tone guidance.
2026-03-14 01:04:40 +00:00
mrhavens 2778d98e0d feat: Add Academic Paper Frameworks
Created academic_papers.py with 12 established academic paper types:

RESEARCH PAPERS:
1. Empirical Paper - experiments, data collection
2. Theoretical Paper - concepts, models, proofs
3. Methodology Paper - new methods/techniques
4. Case Study Paper - in-depth single case
5. Survey Paper - comprehensive field overview

ARGUMENTATIVE:
6. Position Paper - argue for a stance
7. Policy Brief - recommendations to decision-makers

CRITICAL ANALYSIS:
8. Critical Review - evaluate existing work
9. Meta-Analysis - statistical synthesis

SHORT FORMS:
10. Short Communication - brief findings report
11. Conference Proposal - conference abstract
12. Thesis Proposal - graduate research proposal

Each includes:
- Detailed stages
- Prompt templates
- Tone guidance
- Typical length
- Audience

Functions:
- get_academic_paper_types()
- suggest_academic_paper()
2026-03-14 00:51:12 +00:00
mrhavens 2c7f5a7fca feat: Add Textbook & Academic Frameworks
Created textbook_frameworks.py with 10 educational frameworks:

TEXTBOOK & ACADEMIC (10):
1. Comprehensive Textbook - Complete academic textbook
2. Textbook Chapter - Single modular chapter
3. Online Course / MOOC - Video-friendly course structure
4. Curriculum / Syllabus - Course planning document
5. Study Guide - Exam prep with practice
6. Academic Research Paper - IMRAD format
7. Literature Review - Systematic synthesis
8. Thesis / Dissertation - Graduate research
9. Workbook / Practice Book - Interactive exercises
10. Quick Reference Guide - Cheat sheet / scannable
11. Knowledge Base / Wiki - Organized articles

Each includes:
- Detailed stages
- Purpose mapping
- Prompt templates
- Tone guidance
- Typical length
- Target audience

Functions:
- get_textbook_frameworks()
- suggest_textbook_framework()

These are the foundational 'Field Anchors' for structured learning.
2026-03-14 00:10:17 +00:00
mrhavens ef932973cd feat: Add --thread-id and --resume flags for checkpointing
- Add --thread-id flag to CLI for checkpointing
- Add --resume flag to resume from checkpoint
- Generate UUID if no thread_id provided
- Display thread_id for user to save for resume

Usage:
  opus generate --concept "My book" --thread-id abc123
  # If fails:
  opus generate --concept "My book" --thread-id abc123 --resume
2026-03-13 23:24:41 +00:00
mrhavens 14b22fc8f6 feat: Issue #15 - Research Agent Integration
Created research_integration.py to connect research agent to pipeline:

ResearchIntegrator class:
- research_for_book(): Research for entire book
- research_chapter(): Research specific chapter
- should_use_research(): Determine if purpose needs research
- get_research_stages(): When to integrate research

Research stages:
- Pre-writing: Gather research before writing
- Per-chapter: Research each chapter
- Verification: Check facts post-writing
- Enhancement: Strengthen content with research

Purpose-specific research config:
- UNDERSTAND: Deep research, include academic
- DECIDE: Deep, studies, data, comparisons
- TRANSFORM: Case studies, success stories
- LEARN_HANDS_ON: Best practices, methods
- REFERENCE: Comprehensive documentation
- BE_INSPIRED: Stories, journeys, examples

Functions:
- get_research_config_for_purpose()

The research agent is now integrated into the nonfiction pipeline.
2026-03-13 23:09:57 +00:00
mrhavens f1a5a24504 feat: Issue #22 - Expand Framework Library (35+ Expert Frameworks)
Created expanded_frameworks.py with 35+ top-tier frameworks:

**BUSINESS & LEADERSHIP (8)**
- Big Idea (Jim Collins)
- The One Thing (Gary Keller)
- Blue Ocean Strategy
- Four Disciplines of Execution
- Good to Great

**MEMOIR & PERSONAL NARRATIVE (5)**
- Mountain Structure Memoir
- Loss and Gain
- Scene-Driven Memoir
- Single-Moment Pivot
- Addiction & Recovery

**PHILOSOPHY & IDEAS (3)**
- Socratic Method
- Argumentative Essay
- Danish Philosopher (Kierkegaard)

**SCIENCE & EXPLANATION (4)**
- Discovery Narrative
- Personal Experiment
- Explainer (Pinker style)
- Mental Models

**HISTORY (4)**
- Chronological Narrative
- Thematic History
- Comparative History
- Cause-and-Effect Chain

**HOW-TO NON-TECHNICAL (4)**
- Problem-Agitation-Solution
- Reverse Engineering
- Minimalist How-To
- Challenge-Response

**THOUGHT LEADERSHIP (3)**
- Contrarian + Proof
- Future + Now
- Mistake → Learning

**SPIRITUALITY & WELLNESS (2)**
- Spiritual Journey
- Healing Narrative

**RELATIONSHIPS (2)**
- Relationship Blueprint
- Communication Mastery

Each framework includes:
- Detailed description
- Purpose mapping
- Structure pattern
- 6-9 stage breakdown
- Prompt template
- Tone guidance
- Typical length
- Target audience

Functions:
- get_frameworks_by_category()
- suggest_framework_for_book()
- get_total_framework_count()
2026-03-13 23:04:32 +00:00
mrhavens d3bc43daca feat: Issue #21 - Purpose-Based Critique Criteria
Created critique_criteria.py with purpose-specific evaluation:

TUTORIAL:
- Clarity (30%), Completeness (25%), Progressiveness (20%)
- Actionability (15%), Error Prevention (10%)

EXPLAINER:
- Analogy Quality (25%), Examples (25%), Mental Model (20%)
- Depth (15%), Misconceptions (15%)

TRANSFORMATION:
- Emotional Honesty (30%), Relatability (25%), Hope (20%)
- Specificity (15%), Actionability (10%)

DECIDE:
- Evidence Quality (30%), Balance (25%), Credibility (20%)
- Clarity (15%), Completeness (10%)

REFERENCE:
- Accuracy (35%), Completeness (30%), Organization (20%)
- Examples (15%)

INSPIRED:
- Emotional Impact (30%), Vision (25%), Authenticity (25%)
- Story Quality (20%)

Each criterion has:
- Weight
- Description
- Evaluation questions
- Pass threshold

Functions:
- get_critique_criteria(purpose) → CritiqueCriteriaSet
- evaluate_chapter(content, purpose) → scores
- get_evaluation_prompt(content, purpose) → LLM prompt
- list_all_criteria() → overview
2026-03-13 22:30:26 +00:00
mrhavens be64111515 feat: Issue #20 - Purpose-Based Agent Selection
Created purpose-specific writing agents:

- purpose_writers.py with 6 specialized agents:
  - TutorialWriter: Hands-on learning (steps, exercises, encouragement)
  - ExplainerWriter: Conceptual understanding (analogies, mental models)
  - TransformationWriter: Personal change (emotional honesty, journey)
  - EvidenceWriter: Data-driven decisions (evidence, tradeoffs)
  - ReferenceWriter: Comprehensive reference (completeness, accuracy)
  - VisionaryWriter: Inspirational content (emotion, vision)

Each agent has:
- 100+ line specialized system prompt
- Purpose-specific writing rules
- Structure guidance
- Tone guidance
- Example phrases

Factory functions:
- get_writer_for_purpose(purpose) → BaseAgent
- select_writer_agent(purpose) → str
- list_available_writers() → dict

This completes Issue #20.
2026-03-13 22:26:24 +00:00
mrhavens 8cf833c729 feat: Content-Based Purpose Inference
Added content_infer.py - analyzes existing content to infer purpose:

- ContentPurposeInferer class
- Analyzes blog posts, articles, text
- Detects signals: tutorials, explainers, transformation stories, etc.
- Returns purpose, confidence, reasoning

Updated intake.py to weight all signals:
1. Explicit flags (weight: 1.0)
2. Content inference (weight: 0.4) - NEW
3. Keyword classification (weight: 0.3)
4. Conversational (weight: 0.5)

Now if you point at a blog:
- Tutorial posts → LEARN_HANDS_ON
- Explainers → UNDERSTAND
- Transformation stories → TRANSFORM
- Reviews/Comparisons → DECIDE
- Reference docs → REFERENCE
- Journey/Biography → BE_INSPIRED
2026-03-13 20:50:36 +00:00
mrhavens b46e87ff76 feat: Nonfiction Intake System - All Three Paths
This commit completes Issue #18 (Purpose Classifier), adds Intake Agent
and CLI integration:

1. PURPOSE CLASSIFIER (Issue #18 - DONE earlier)
   - Keyword-based classification into 6 ReaderPurposes
   - LLM-enhanced classification for nuanced cases

2. INTAKE AGENT (NEW - addresses Issue #20, #23)
   - Created opus_orchestrator/nonfiction/intake.py
   - Intelligent agent that combines:
     * Explicit flags (--purpose, --category)
     * Keyword classification (auto-detect)
     * Conversational questions (when ambiguous)
   - IntakeAgent class with process() method
   - determine_intake() convenience function
   - get_questions() for conversational mode
   - Source tracking: explicit | classifier | intake | hybrid

3. CLI INTEGRATION (Issue #23)
   - Added --purpose flag: learn, understand, transform, decide, reference, inspire
   - Added --category flag: business, leadership, memoir, etc.
   - Both passed to orchestrator

Usage:
  # Explicit
  opus generate --book-type nonfiction --purpose transform --category self_help

  # Auto-classify
  opus generate --book-type nonfiction --concept "How to build a startup"

  # Programmatic
  result = await determine_intake(
    concept="Leadership for introverts",
    purpose="transform",  # or None for auto
    category="leadership",
    mode="auto"  # or "conversational"
  )
2026-03-13 20:46:06 +00:00
mrhavens 0b8bf3123a feat: Issue #19 - Taxonomy Integration in Orchestrator
- Added imports for nonfiction taxonomy (PurposeClassifier, ReaderPurpose, etc.)
- Modified OpusOrchestrator.__init__ to accept purpose and category params
- Added _classify_purpose_from_intent() - classifies purpose from intent
- Added _select_nonfiction_framework() - selects framework based on purpose
- Added get_framework_context() - returns framework info for agents
- Added generate_stage_outline() - generates outlines from framework stages

New params:
- purpose: Optional reader purpose (learn, understand, transform, decide, reference, inspire)
- category: Optional nonfiction category (business, self_help, memoir, etc.)

The orchestrator now:
1. Classifies purpose from book intent using keyword classifier
2. Selects appropriate framework from taxonomy based on purpose
3. Generates stage scaffolding from framework definition
4. Provides framework context to agents

This is the core integration (Issue #19).
2026-03-13 20:32:48 +00:00
mrhavens 4b4addedf7 feat: Issue #18 - Purpose Classifier for Nonfiction
- Created opus_orchestrator/nonfiction/classifier.py
  - PurposeClassifier class with keyword-based classification
  - LLM-enhanced classification (optional)
  - ReaderPurpose enum (6 purposes)
  - ClassificationResult dataclass

- Keyword classification covers:
  - LEARN_HANDS_ON: how to, learn to, tutorial, skills, etc.
  - UNDERSTAND: understand, why, concept, mental model, etc.
  - TRANSFORM: change, become, improve, habits, etc.
  - DECIDE: decide, choose, compare, vs, analysis
  - REFERENCE: manual, handbook, comprehensive, API
  - BE_INSPIRED: inspire, story, journey, biography

- Tests pass for all 6 purposes with high confidence

This is the foundation for the entire nonfiction pipeline (Issue #18).
2026-03-13 20:15:20 +00:00
mrhavens d98ef622d9 feat: Add nonfiction taxonomy - Purpose × Structure matrix
- Created nonfiction_taxonomy.py with:
  - ReaderPurpose enum (6 purposes)
  - StructuralPattern enum (7 patterns)
  - PURPOSE_STRUCTURE_MATRIX for intelligent selection
  - NONFICTION_FRAMEWORKS (14+ frameworks)
  - select_framework() function

- Created docs/NONFICTION_PIPELINE.md documenting the workflow

This is the foundation for Issue #16 (Nonfiction Underdeveloped)
2026-03-13 20:00:30 +00:00
mrhavens b59c265966 fix: Restore missing UploadFile/File imports after merge 2026-03-13 19:05:20 +00:00
mrhavens 8374d50516 Merge: Team 5 - Features (resolved conflict) 2026-03-13 18:22:32 +00:00
mrhavens 164851e096 Merge: Team 4 - Architecture 2026-03-13 18:22:24 +00:00
mrhavens b7f072a3ce Merge: Team 3 - Infrastructure 2026-03-13 18:22:24 +00:00
mrhavens e3026b997f Merge: Team 2 - Agent/Workflow 2026-03-13 18:22:23 +00:00
mrhavens 2e0399c2cd Merge: Team 1 - Critical Bugs 2026-03-13 18:22:23 +00:00
mrhavens e05370fc69 feat: Tests and streaming endpoint
Team 5: Features & Polish

Implemented:
- #7: Added comprehensive test suite
  - TestConfig: Configuration validation tests
  - TestSchemas: Pydantic schema validation tests
  - TestFrameworks: Story framework prompt tests
  - TestGitHubIngestor: GitHub ingestion tests
  - TestAgentResponse: Agent response tests
  - TestLLMClient: Mocked LLM client tests

- #8: Added streaming endpoint
  - /generate/stream returns Server-Sent Events
  - Yields progress updates
  - TODO: Full streaming from LangGraph workflow

Not implemented (TODO):
- #13: Monolith file refactoring - Split into separate PR
- #15: Research agent integration - Requires design work
- #16: Nonfiction support - Requires framework expansion
2026-03-13 18:19:39 +00:00
mrhavens aab4014859 fix: Architecture - state adapter, agent validation
Team 4: Architecture & Design

Fixed:
- #6: Created unified state adapter (state_adapter.py)
  - StateAdapter class to convert between OpusState and OpusGraphState
  - create_unified_state() for initializing either system
  - graph_to_opus() and opus_to_graph() converters

- #11: Added output validation to BaseAgent
  - validate_output() method that parses JSON and validates against Pydantic schemas
  - Extracts JSON from markdown code blocks
  - Returns validated model or error message

- #12: Already properly handled (orchestrator imports get_framework_prompt)
2026-03-13 18:18:03 +00:00
mrhavens f55570ceeb fix: Infrastructure - GitHub token, API validation, cost controls
Team 3: Infrastructure & Config

Fixed:
- #4: GitHub Ingestor now works without token for public repos
  - Token is now optional
  - Uses unauthenticated requests (with rate limit warning) when no token
  - Private repos still require token

- #14: Added startup API key validation
  - get_config() now validates API keys at startup
  - Raises clear error if neither OPENAI_API_KEY nor MINIMAX_API_KEY is set
  - Fail-fast instead of silent failures

- #10: Added CostConfig for rate limiting and budget controls
  - max_tokens_per_run: limit tokens per generation
  - max_cost_usd: budget cap in dollars
  - track_usage: enable/disable usage tracking
  - price_per_million_tokens: pricing by model
2026-03-13 18:16:38 +00:00
mrhavens c711cf0156 fix: Agent/workflow bugs - CrewAI config, AutoGen revision
Team 2: Agent & Workflow Repair Crew

Fixed:
- #5: CrewAI LLM factory now properly uses provider/model params
  - Supports openai, anthropic, and minimax
  - Raises error for unknown providers instead of silently using OpenAI
  - Validates API keys are present

- #2: AutoGen critique now actually revises chapters
  - iterate_chapter() now applies revision suggestions
  - Uses Writer agent to revise based on critique feedback
  - Returns revised_content in the result
2026-03-13 18:15:24 +00:00
mrhavens 452c3daec1 fix: Critical bugs - LLM client, server imports, error handling
Team 1: Critical Bug Fix Squad

Fixed:
- #1: LLM Client async methods use undefined self.client
  Changed to self._async_client in utils/llm.py
- #3: Server Upload endpoint missing UploadFile/File imports
  Added to server.py imports
- #17: LangGraph workflow error recovery
  - Replaced fake fallback with proper error raising
  - Enabled MemorySaver checkpointing for state persistence
  - Added traceback printing for debugging
2026-03-13 18:14:11 +00:00
mrhavens b584e42d65 Fix: Default to MiniMax provider 2026-03-13 09:30:46 +00:00
mrhavens 0f647e4e93 Add rigorous nonfiction frameworks
NEW frameworks:
- Diátaxis Tutorial - Learn by doing a project
- Diátaxis How-To - Accomplish a specific task
- Diátaxis Explanation - Clarify and deepen understanding
- Diátaxis Reference - Complete information lookup
- Technical Manual - From foundations to mastery
- Codebase Tour - Document code systematically
- API Documentation - Complete API reference

NonfictionGenerator class to use these frameworks.
CLI integration with --framework flag.

Example:
opus generate --framework codebase-tour --concept 'Linux Kernel'
2026-03-13 08:43:54 +00:00
mrhavens 81bfe8994a Witness ALL data: Include source code in ingestion
- LocalIngestor: Include ALL files by default (source code, configs, etc.)
- GitHubIngestor: Include ALL files by default
- AI witnesses everything and transforms it into documentation
- Filter only build artifacts (.pyc, .so, dist, build)

Philosophy: Don't filter what the AI can see - let it decide
what's relevant. The AI can document code directly!
2026-03-13 05:59:03 +00:00
mrhavens 8cb29889cc Add live research capabilities with innovation detection
Research Tools:
- SearchTool: Multiple backends (Tavily, Serper, Brave, DuckDuckGo)
- WikipediaTool: Wikipedia lookup
- AcademicSearchTool: CrossRef, Semantic Scholar
- ResearchOrchestrator: Comprehensive multi-source research

ResearchAgent:
- NOT just fact-checking - actively discovers NEW information
- Identifies trends beyond training data cutoff
- Generates innovations from cross-referencing sources
- Deep research with subtopics

VerifiedFactChecker:
- Live claim verification against web sources
- Confidence scoring
- Citation needed detection

Dependencies added: tavily, wikipedia, arxiv, duckduckgo-search
2026-03-13 05:03:52 +00:00
mrhavens 6766e93c3d Final cleanup: Merge LLM, add Dockerfile
- Merge llm.py + llm_sync.py into single unified client
- Remove llm_sync.py (now just llm.py with both sync/async)
- Add requests to dependencies
- Add Dockerfile for containerized deployment
- Add .dockerignore

All issues resolved!
2026-03-13 04:47:01 +00:00
mrhavens 8e92e99205 Fix: Remove hardcoded paths - now fully standalone
- Changed all load_dotenv() calls to use relative path (just load_dotenv())
- No OpenClaw dependencies
- Works anywhere after pip install
2026-03-13 04:34:22 +00:00
mrhavens 8f577fc998 Clean up: Remove dead code and add config template
- Remove workflow.py (dead code, 614 lines)
- Add config.example.yaml template

Cleanup complete.
2026-03-13 04:11:46 +00:00
mrhavens fbecbdda19 Add one-line installer and pip extras
- install.sh: One-line installer with options
- Pip extras: [server], [storage], [all]
- Updated README with install instructions
2026-03-13 03:58:53 +00:00
mrhavens 25bf417e20 Update README with web UI and API endpoints 2026-03-13 03:55:44 +00:00
mrhavens f946bb3714 Add web UI and S3 upload endpoints
- Web UI: novice-friendly interface at / and /ui
- Upload endpoint: /upload for file uploads
- S3 upload: /upload/s3 for uploading to S3/MinIO
- CLI: opus ui command to start web UI only
- Full HTML/CSS/JS interface with drag-drop, tabs, etc.
2026-03-13 03:55:10 +00:00
mrhavens 45b5af079c Update README with local ingestion and output options 2026-03-13 03:47:23 +00:00