Files

14 KiB
Raw Permalink Blame History

ThinkStorm

Frictionless Anonymous Idea Intake, Autonomous AI Research, and Project Incubation Engine.

ThinkStorm captures unformed ideas with zero friction, preserves original submissions immutably, and orchestrates self-hosted AI models to research the landscape, synthesize feasibility, and incubate full Gitea projects.


🌟 Key Features

1. Frictionless Anonymous Intake & Reference Images

  • Zero Required Metadata: Submit raw, free-form thoughts without mandatory titles, categories, or tags.
  • Optional Single-Image Reference Artifacts: Upload architectural sketches, whiteboards, or UI blueprints (JPEG, PNG, WebP) directly through the web form or attach them via Signal.
  • Privacy & Sanitization: Strips EXIF, GPS location tags, camera signatures, and embedded comments automatically, while preserving correct image orientation.
  • Token-Optimized Multimodal Processing: Images exceeding 1536px max dimension are automatically bounded to minimize downstream vision LLM token consumption.
  • Signal Gateway Integration: Inbound encrypted Signal messages automatically create ideas, following the strict One-Image Rule (accepts first valid image, ignores non-images and extra attachments).
  • Embedded URL Isolation & Safety Scanner: URLs inside submissions are extracted and evaluated via VirusTotal. Unsafe or suspicious links are automatically quarantined for administrator review before any model processing runs.
  • Immutable Prompt Preservation: The original submission prompt and reference image are permanently preserved and displayed verbatim across all views.

2. Multi-Stage Research & Evaluation Pipeline

  • Image Context Interpretation (IMAGE_CONTEXT): Evaluates attached reference images as supporting context using versioned prompt templates and multimodal vision models, with resilient heuristic failover if vision models are unavailable.
  • Title & Summary Extraction: AI extracts semantic titles, executive summaries, and initial taxonomies.
  • Duplicate & Relationship Mapping: Automatically identifies conceptual overlaps and clusters related ideas.
  • Prior Art & Competitor Search: Queries live web indices via SearXNG and Perplexica to discover similar projects, existing tools, and architectural differentiators.
  • Deep Technical Feasibility & Risk Critique: Generates feasibility scores (010), technical constraints, implementation roadmaps, and risk matrices.

3. Canonical Gitea Project Repositories

  • Ideas and generated Work Track artifacts remain local until a Gitea-linked user claims the idea and deliberately publishes it.
  • Claimants can publish or re-sync an idempotent repository under the thinkstorm organization (for example, https://git.labyricorn.com/thinkstorm/ts-0032) and receive write access for normal Git pushes.
  • Repositories include:
    • README.md: Executive summary, prompt quotation, reference image metadata, lifecycle badge, and project structure guide.
    • metadata.json: Machine-readable metadata schema.
    • research/: prior-art.md, analysis.md, feasibility.md, image-context.md.
    • outputs/: Multi-modal work track deliverables organized by track.
    • provenance/: Execution run logs and token attribution telemetry.
  • Full Git history, branch management, issue tracking, and SSH/HTTPS cloning (git clone ...) are natively supported.

4. Multi-Modal Work Tracks & Versioning

  • Ideas can be claimed by authenticated users to unlock specialized Work Tracks:
    • 📄 Article & Whitepaper: Structured long-form analysis and publication drafts.
    • 💻 Coding Project: Software architectures, API specs, and codebase scaffolds.
    • ✍️ Blog Entry: Conversational announcement posts and technical retrospectives.
    • 🎬 YouTube Video: Audience-focused video outlines, production-ready scripts, and targeted promotion plans.
  • Iterative Deliverable Versioning: Subsequent workflow runs archive previous outputs as versions (v1, v2, v3) with model attribution, allowing fine-grained deletion and draft comparison.

5. Authentication & Access Control

  • Gitea OAuth2 Single Sign-On: Log in with your Gitea account with automatic profile provisioning.
  • Local Fallback Authentication: Secure bcrypt password authentication for administrative and local accounts.
  • Role-Based Access Control (RBAC): Supports ANONYMOUS, USER, and ADMIN permission tiers.

6. Administration, Queue & Provenance

  • Background Job Queue: Asynchronous, non-blocking pipeline execution with foreground prioritization and retry controls.
  • Prompt Catalog & Semantic Versioning: Edit prompt templates dynamically with version tracking and profile activation.
  • Token Accounting & Model Telemetry: Comprehensive auditing of input/output token usage, provider durations, and execution status.

🏗️ Architecture & Technology Stack

graph TD
    User([User / Browser]) -->|Submit / Browse| Web[FastAPI Web Server]
    Signal([Signal Gateway]) -->|Inbound Webhook| Sig[Signal Ingestion Adapter]
    Sig --> Web
    Web -->|Store / Query| DB[(SQLite WAL Database)]
    Web -->|Enqueue Jobs| Queue[Background Queue Worker]

    Queue --> P0[0. Image Context & Vision]
    Queue --> P1[1. Safety & URL Evaluator]
    Queue --> P2[2. Semantic Title & Tag Extractor]
    Queue --> P3[3. Duplicate & Cluster Detector]
    Queue --> P4[4. Prior Art Search]
    Queue --> P5[5. Feasibility & Risk Synthesis]

    P0 -->|Multimodal Vision| Omni[OmniRoute Vision Router]
    P1 -->|Scan URLs| VT[VirusTotal API]
    P4 -->|Web Search| SearXNG[SearXNG & Perplexica]
    P2 & P3 & P4 & P5 -->|LLM Synthesis| Omni

    Web -->|Claimant-triggered publish| Gitea[Gitea Project Host]
    Queue -->|Push Gist Snippets| OpenGist[OpenGist Service]
  • Backend: Python 3.13, FastAPI, Uvicorn, AsyncIO, Pydantic, Pillow
  • Database: SQLite 3 with Write-Ahead Logging (WAL), Foreign Keys, and automated migrations
  • Frontend: Jinja2 Templates, Vanilla Modern CSS (Dark Mode, Glassmorphism), Modular JavaScript
  • AI Orchestration: OmniRoute (Ollama, OpenAI, Anthropic, vLLM endpoints with Vision routing)
  • Web Search: SearXNG (Meta-search API) & Perplexica (Search Backend)
  • Messaging Integration: Signal Gateway (Bearer authenticated webhooks & durable event tracking)
  • Code & Version Control: Gitea (OAuth2 SSO & Git Repositories), OpenGist (Gist Dossiers)
  • Security & Safety: VirusTotal API (URL domain risk analysis)

📁 Repository Structure

.
├── thinkstorm/                  # Core application package
│   ├── main.py                  # FastAPI application entrypoint & middleware
│   ├── config.py                # Service configuration & dynamic .env loader
│   ├── database.py              # SQLite database schema, migrations & seed defaults
│   ├── models.py                # Dataclasses, Enums, and Pydantic models
│   ├── auth.py                  # Password hashing, JWT sessions & RBAC
│   ├── api/                     # REST API routers
│   │   ├── ideas.py             # Idea submission, claiming, work tracks & image serving
│   │   ├── auth_routes.py       # Local login & Gitea OAuth2 SSO callback
│   │   ├── signal_integration.py# Signal Gateway inbound webhook & idempotency
│   │   └── admin.py             # Service testing, queue retry, quarantine moderation
│   ├── processors/              # Pipeline execution engine
│   │   └── pipeline.py          # Vision & bounded processors 1-5, work track workflows
│   ├── prompts/                 # Prompt definitions & profile catalog
│   │   └── catalog.py           # System prompts, profile alignment & versioning
│   ├── queue/                   # Background job queue
│   │   └── worker.py            # Async worker queue with foreground priority
│   ├── services/                # External service adapters
│   │   ├── image_handler.py     # Image validation, EXIF stripping & token downscaling
│   │   ├── signal_gateway.py    # Signal Gateway client
│   │   ├── gitea.py             # Gitea repository creation & file sync
│   │   ├── opengist.py          # OpenGist REST sync adapter
│   │   ├── omniroute.py         # LLM completion, vision & streaming adapter
│   │   ├── searxng.py           # Live meta-search adapter
│   │   ├── perplexica.py        # Perplexica search backend adapter
│   │   └── virustotal.py        # URL reputation scanner adapter
│   ├── templates/               # Jinja2 HTML templates
│   │   ├── base.html            # Core layout, navigation & status bar
│   │   ├── index.html           # Frictionless hero intake page with file picker
│   │   ├── ideas.html           # Filterable ideas list with lifecycle states
│   │   ├── idea_detail.html     # Comprehensive idea dossier, image viewer & work tracks
│   │   ├── login.html           # Gitea SSO & local login portal
│   │   ├── prompt_catalog.html  # Prompt template editor & version manager
│   │   └── admin.html           # Service health & queue management
│   └── static/                  # Static assets
│       ├── css/style.css        # Glassmorphic dark design system
│       └── js/app.js            # Interactive tab navigation, toasts & multipart upload
├── tests/                       # Test suite
│   ├── test_api.py              # API endpoint & permission tests
│   ├── test_image_intake.py     # Single-image intake, Signal & vision tests
│   ├── test_signal_gateway.py   # Signal Gateway integration tests
│   ├── test_youtube_work_track.py # YouTube video package workflow tests
│   ├── test_artifact_versioning.py # Versioning & deliverable tests
│   └── test_lifecycle.py        # End-to-end idea lifecycle tests
├── .labyricorn/                 # Labyricorn exhibition & devlog space
│   ├── project/contents.lr      # Project exhibition record
│   └── devlog/                  # Public development logs
├── data/                        # Persistent local data & SQLite store
└── README.md                    # This documentation file

⚙️ Configuration (.env)

ThinkStorm loads environment settings from /root/.env, .env, and thinkstorm/.env:

Variable Description Default / Example
OMNIROUTE_URL OmniRoute LLM API base endpoint https://omni.godno.de/v1
OMNIROUTE_API_KEY Bearer token for LLM routing <your-omniroute-api-key>
SEARXNG_URL SearXNG meta-search instance https://sx.godno.de
PERPLEXICA_URL Perplexica backend instance https://px.godno.de
GITEA_URL Gitea instance public URL https://git.labyricorn.com
GITEA_API_TOKEN Gitea admin/user access token <your-gitea-api-token>
GITEA_CLIENT_ID Gitea OAuth2 Application Client ID <your-gitea-client-id>
GITEA_CLIENT_SECRET Gitea OAuth2 Application Secret <your-gitea-client-secret>
OPENGIST_URL OpenGist public URL https://gist.labyricorn.com
OPENGIST_API_TOKEN OpenGist Personal Access Token <your-opengist-api-token>
VIRUSTOTAL_API_KEY VirusTotal API Key for URL safety <your-virustotal-api-key>
SIGNAL_GATEWAY_BASE_URL Signal Gateway endpoint http://10.138.4.46:8000
SIGNAL_GATEWAY_CALLBACK_SECRET Secret token for Signal webhooks <your-callback-secret>
ADMIN_BOOTSTRAP_KEY Default admin account password <your-admin-bootstrap-password>

🚀 Getting Started

1. Installation

# Clone the repository
git clone https://git.labyricorn.com/thinkstorm/thinkstorm.git
cd thinkstorm

# Install Python dependencies
pip install fastapi uvicorn pydantic jinja2 requests pytest pytest-asyncio httpx Pillow

2. Running the Server

# Start ThinkStorm on port 8000
python3 -m uvicorn thinkstorm.main:app --host 0.0.0.0 --port 8000 --proxy-headers --forwarded-allow-ips='*'

Access the application in your browser at http://localhost:8000 (or your domain e.g. https://ts.labyricorn.com).

3. Running Automated Tests

python3 -m pytest tests/ -v

📖 API Endpoints Summary

  • POST /api/ideas: Anonymous idea submission (JSON or Multipart with optional single image).
  • GET /api/ideas: Filterable list of ideas by lifecycle state, category, or tag.
  • GET /api/ideas/{idea_id}: Full idea details, provenance, research, reference image, and work tracks.
  • GET /api/ideas/{idea_id}/image: Stream canonical reference image artifact.
  • POST /api/integrations/signal/events: Inbound Signal Gateway webhook for mobile idea capture.
  • POST /api/ideas/{idea_id}/claim: Claim an available idea for incubation.
  • POST /api/ideas/{idea_id}/activate: Activate an idea into active development.
  • POST /api/ideas/{idea_id}/sync-gitea: Push or re-sync dossier files to Gitea repository.
  • POST /api/ideas/work-tracks/{track_id}/activate: Run or re-run a work track workflow.
  • DELETE /api/ideas/work-tracks/outputs/{output_id}: Delete specific deliverable version.
  • POST /api/auth/login: Local username/password authentication.
  • GET /api/auth/gitea/url: Get Gitea OAuth2 authorization URL.
  • GET /auth/gitea/callback: OAuth2 redirect callback & session issuer.
  • POST /api/admin/services/{service_id}/test: Real-time health check for external services.

📄 License & Attribution

Developed by Labyricorn. Licensed under the MIT License.