Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)
    1. Docs
    2. /Development
    3. /Autonomous Newsroom (Grok)

    Updated Jun 9, 20264 min listen

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Docs
    2. /Development
    3. /Autonomous Newsroom (Grok)

    Updated Jun 9, 20264 min listen

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Docs
    2. /Development
    3. /Autonomous Newsroom (Grok)

    Updated Jun 9, 20264 min listen

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Autonomous Newsroom (xAI Grok)

    One-message autonomous newsroom: Grok researches the web (web_search + x_search), writes a cited HTML article, picks category and tags, generates a featured image (ImageConductor), optional narration (AudioConductor), and saves a draft for one-tap Telegram approval. On approval, linked translations spawn for other supported locales (en, uk, ru).

    Architecture

    text
    
    Telegram / MCP / Admin UI
      → generateNewsArticle()  (features/news/services/article-generator.ts)
        → TextConductor (Grok /v1/responses + web_search)
        → ImageConductor (featured 16:9)
        → AudioConductor (TTS mp3 → ring-filebase)
        → createNewsArticleForAuthor() → db.create('news', draft)
        → Telegram approval keyboard (optional)
      → approveMainPagePublication
        → generateArticleTranslations (other locales)
    LayerPath
    Textlib/text/ — TextConductor, providers/xai.provider.ts
    Audiolib/audio/ — AudioConductor, Grok /v1/tts
    Orchestratorfeatures/news/services/article-generator.ts
    Translationsfeatures/news/services/article-translation.ts
    Auth-free createcreateNewsArticleForAuthor() in news-service.ts
    Approval UIfeatures/news/services/news-telegram-approval.ts

    Surfaces (universal)

    All surfaces call the same generateNewsArticle() service.

    SurfaceEntry
    Telegram admin botTool generate_news_article — { source, value, instruction? }
    MCPring-news-generate → POST /api/mcp/v1/news/generate
    Admin UIGenerateArticleDialog on news list + create editor
    Session APIPOST /api/news/generate (Auth.js admin)

    Telegram flow

    1. Admin sends a URL or topic (e.g. “write article about https://…”).
    2. Claude routes to generate_news_article.
    3. Draft created with mainPageStatus: awaiting_admin_approval.
    4. Inline keyboard: Approve / Reject / View / Counter.
    5. Approve → approveMainPagePublication → publish + translation fan-out.

    entity_crud / entity_report in the decision tree alias to ring_crud / ring_report in the executor.

    MCP example

    Admin UI

    • News manager → Generate with AI
    • Create article → Generate with AI → redirects to edit draft

    Request body

    FieldRequiredValues
    sourceYesurl | search | text
    valueYesURL, search query, or raw source text
    instructionNoEditorial angle / tone
    localeNoHint; Grok auto-detects detectedLocale
    enableAudioNoDefault true (NEWS_AUTOGEN_ENABLE_AUDIO)
    enableImageNoDefault true

    Response (201):

    Structured output schema

    Grok returns JSON via /v1/responses + json_schema:

    FieldDescription
    titleArticle headline
    contentHTML body (citations appended as Sources footer)
    excerptPlain text, ≤300 chars
    tagsSemantic tag array
    categoryOne of 11 NewsCategory values (invalid → other)
    detectedLocaleen, uk, or ru
    summaryOne paragraph — used as image prompt

    Categories: platform-updates, partnerships, community, industry-news, events, announcements, security, press-releases, tutorials, other, blogs.

    Translation on approval

    generateArticleTranslations(articleId) runs fire-and-forget after approveMainPagePublication:

    • Loads source article and translationGroupId.
    • For each locale in SUPPORTED_LOCALES except source: TextConductor translate (no web search).
    • Creates linked sibling articles; updates availableTranslations on all group members.

    Environment

    Reuses XAI_API_KEY and XAI_API_BASE_URL from Generative images.

    Also requires ImageConductor env for featured images and ring-filebase for uploads.

    News article fields

    FieldAutogen value
    statusdraft
    mainPageStatusawaiting_admin_approval
    promoteToMainPagetrue
    translationGroupIdNew UUID per generation
    audioUrlCDN URL when TTS succeeds
    featuredImage / seo.ogImageFrom ImageConductor

    Programmatic usage

    Verification

    Manual: Telegram URL → draft with Sources footer, category, tags, image, audio → Approve → published + uk/ru siblings share translationGroupId.

    Out of scope (future)

    • grok-build code endpoint, streaming responses
    • X-thread auto-posting
    • Per-locale audio (source locale only today)
    • Translated audio tracks

    Security

    • Store XAI_API_KEY only in .env.local / k8s secrets — never commit or paste in chat.
    • Rotate keys if exposed.
    • Telegram bot uses PALADIN layers (webhook secret, whitelist, output validation).

    See also: News module · Ring MCP · Generative images

    Autonomous Newsroom (xAI Grok)

    One-message autonomous newsroom: Grok researches the web (web_search + x_search), writes a cited HTML article, picks category and tags, generates a featured image (ImageConductor), optional narration (AudioConductor), and saves a draft for one-tap Telegram approval. On approval, linked translations spawn for other supported locales (en, uk, ru).

    Architecture

    text
    
    Telegram / MCP / Admin UI
      → generateNewsArticle()  (features/news/services/article-generator.ts)
        → TextConductor (Grok /v1/responses + web_search)
        → ImageConductor (featured 16:9)
        → AudioConductor (TTS mp3 → ring-filebase)
        → createNewsArticleForAuthor() → db.create('news', draft)
        → Telegram approval keyboard (optional)
      → approveMainPagePublication
        → generateArticleTranslations (other locales)
    LayerPath
    Textlib/text/ — TextConductor, providers/xai.provider.ts
    Audiolib/audio/ — AudioConductor, Grok /v1/tts
    Orchestratorfeatures/news/services/article-generator.ts
    Translationsfeatures/news/services/article-translation.ts
    Auth-free createcreateNewsArticleForAuthor() in news-service.ts
    Approval UIfeatures/news/services/news-telegram-approval.ts

    Surfaces (universal)

    All surfaces call the same generateNewsArticle() service.

    SurfaceEntry
    Telegram admin botTool generate_news_article — { source, value, instruction? }
    MCPring-news-generate → POST /api/mcp/v1/news/generate
    Admin UIGenerateArticleDialog on news list + create editor
    Session APIPOST /api/news/generate (Auth.js admin)

    Telegram flow

    1. Admin sends a URL or topic (e.g. “write article about https://…”).
    2. Claude routes to generate_news_article.
    3. Draft created with mainPageStatus: awaiting_admin_approval.
    4. Inline keyboard: Approve / Reject / View / Counter.
    5. Approve → approveMainPagePublication → publish + translation fan-out.

    entity_crud / entity_report in the decision tree alias to ring_crud / ring_report in the executor.

    MCP example

    Admin UI

    • News manager → Generate with AI
    • Create article → Generate with AI → redirects to edit draft

    Request body

    FieldRequiredValues
    sourceYesurl | search | text
    valueYesURL, search query, or raw source text
    instructionNoEditorial angle / tone
    localeNoHint; Grok auto-detects detectedLocale
    enableAudioNoDefault true (NEWS_AUTOGEN_ENABLE_AUDIO)
    enableImageNoDefault true

    Response (201):

    Structured output schema

    Grok returns JSON via /v1/responses + json_schema:

    FieldDescription
    titleArticle headline
    contentHTML body (citations appended as Sources footer)
    excerptPlain text, ≤300 chars
    tagsSemantic tag array
    categoryOne of 11 NewsCategory values (invalid → other)
    detectedLocaleen, uk, or ru
    summaryOne paragraph — used as image prompt

    Categories: platform-updates, partnerships, community, industry-news, events, announcements, security, press-releases, tutorials, other, blogs.

    Translation on approval

    generateArticleTranslations(articleId) runs fire-and-forget after approveMainPagePublication:

    • Loads source article and translationGroupId.
    • For each locale in SUPPORTED_LOCALES except source: TextConductor translate (no web search).
    • Creates linked sibling articles; updates availableTranslations on all group members.

    Environment

    Reuses XAI_API_KEY and XAI_API_BASE_URL from Generative images.

    Also requires ImageConductor env for featured images and ring-filebase for uploads.

    News article fields

    FieldAutogen value
    statusdraft
    mainPageStatusawaiting_admin_approval
    promoteToMainPagetrue
    translationGroupIdNew UUID per generation
    audioUrlCDN URL when TTS succeeds
    featuredImage / seo.ogImageFrom ImageConductor

    Programmatic usage

    Verification

    Manual: Telegram URL → draft with Sources footer, category, tags, image, audio → Approve → published + uk/ru siblings share translationGroupId.

    Out of scope (future)

    • grok-build code endpoint, streaming responses
    • X-thread auto-posting
    • Per-locale audio (source locale only today)
    • Translated audio tracks

    Security

    • Store XAI_API_KEY only in .env.local / k8s secrets — never commit or paste in chat.
    • Rotate keys if exposed.
    • Telegram bot uses PALADIN layers (webhook secret, whitelist, output validation).

    See also: News module · Ring MCP · Generative images

    Autonomous Newsroom (xAI Grok)

    One-message autonomous newsroom: Grok researches the web (web_search + x_search), writes a cited HTML article, picks category and tags, generates a featured image (ImageConductor), optional narration (AudioConductor), and saves a draft for one-tap Telegram approval. On approval, linked translations spawn for other supported locales (en, uk, ru).

    Architecture

    text
    
    Telegram / MCP / Admin UI
      → generateNewsArticle()  (features/news/services/article-generator.ts)
        → TextConductor (Grok /v1/responses + web_search)
        → ImageConductor (featured 16:9)
        → AudioConductor (TTS mp3 → ring-filebase)
        → createNewsArticleForAuthor() → db.create('news', draft)
        → Telegram approval keyboard (optional)
      → approveMainPagePublication
        → generateArticleTranslations (other locales)
    LayerPath
    Textlib/text/ — TextConductor, providers/xai.provider.ts
    Audiolib/audio/ — AudioConductor, Grok /v1/tts
    Orchestratorfeatures/news/services/article-generator.ts
    Translationsfeatures/news/services/article-translation.ts
    Auth-free createcreateNewsArticleForAuthor() in news-service.ts
    Approval UIfeatures/news/services/news-telegram-approval.ts

    Surfaces (universal)

    All surfaces call the same generateNewsArticle() service.

    SurfaceEntry
    Telegram admin botTool generate_news_article — { source, value, instruction? }
    MCPring-news-generate → POST /api/mcp/v1/news/generate
    Admin UIGenerateArticleDialog on news list + create editor
    Session APIPOST /api/news/generate (Auth.js admin)

    Telegram flow

    1. Admin sends a URL or topic (e.g. “write article about https://…”).
    2. Claude routes to generate_news_article.
    3. Draft created with mainPageStatus: awaiting_admin_approval.
    4. Inline keyboard: Approve / Reject / View / Counter.
    5. Approve → approveMainPagePublication → publish + translation fan-out.

    entity_crud / entity_report in the decision tree alias to ring_crud / ring_report in the executor.

    MCP example

    Admin UI

    • News manager → Generate with AI
    • Create article → Generate with AI → redirects to edit draft

    Request body

    FieldRequiredValues
    sourceYesurl | search | text
    valueYesURL, search query, or raw source text
    instructionNoEditorial angle / tone
    localeNoHint; Grok auto-detects detectedLocale
    enableAudioNoDefault true (NEWS_AUTOGEN_ENABLE_AUDIO)
    enableImageNoDefault true

    Response (201):

    Structured output schema

    Grok returns JSON via /v1/responses + json_schema:

    FieldDescription
    titleArticle headline
    contentHTML body (citations appended as Sources footer)
    excerptPlain text, ≤300 chars
    tagsSemantic tag array
    categoryOne of 11 NewsCategory values (invalid → other)
    detectedLocaleen, uk, or ru
    summaryOne paragraph — used as image prompt

    Categories: platform-updates, partnerships, community, industry-news, events, announcements, security, press-releases, tutorials, other, blogs.

    Translation on approval

    generateArticleTranslations(articleId) runs fire-and-forget after approveMainPagePublication:

    • Loads source article and translationGroupId.
    • For each locale in SUPPORTED_LOCALES except source: TextConductor translate (no web search).
    • Creates linked sibling articles; updates availableTranslations on all group members.

    Environment

    Reuses XAI_API_KEY and XAI_API_BASE_URL from Generative images.

    Also requires ImageConductor env for featured images and ring-filebase for uploads.

    News article fields

    FieldAutogen value
    statusdraft
    mainPageStatusawaiting_admin_approval
    promoteToMainPagetrue
    translationGroupIdNew UUID per generation
    audioUrlCDN URL when TTS succeeds
    featuredImage / seo.ogImageFrom ImageConductor

    Programmatic usage

    Verification

    Manual: Telegram URL → draft with Sources footer, category, tags, image, audio → Approve → published + uk/ru siblings share translationGroupId.

    Out of scope (future)

    • grok-build code endpoint, streaming responses
    • X-thread auto-posting
    • Per-locale audio (source locale only today)
    • Translated audio tracks

    Security

    • Store XAI_API_KEY only in .env.local / k8s secrets — never commit or paste in chat.
    • Rotate keys if exposed.
    • Telegram bot uses PALADIN layers (webhook secret, whitelist, output validation).

    See also: News module · Ring MCP · Generative images

    json
    
    {
      "source": "url",
      "value": "https://example.com/article",
      "instruction": "Focus on platform impact for developers",
      "locale": "en",
      "enableAudio": true,
      "enableImage": true
    }
    json
    
    {
      "success": true,
      "articleId": "uuid",
      "title": "…",
      "locale": "en",
      "featuredImage": "https://cdn…/generated/…",
      "audioUrl": "https://cdn…/generated/audio/…"
    }
    bash
    
    # TextConductor (Grok /v1/responses)
    TEXT_GEN_PROVIDER=xai
    XAI_TEXT_MODEL=grok-4.3
    XAI_TEXT_MAX_TOKENS=8000
    XAI_TEXT_WEBSEARCH=true
    XAI_TEXT_XSEARCH=true
    TEXT_GEN_POLL_TIMEOUT_MS=180000
    
    # AudioConductor (TTS)
    TTS_PROVIDER=xai
    XAI_TTS_ENABLED=true
    XAI_TTS_VOICE=eve
    AUDIO_STORAGE_PREFIX=generated/audio
    
    # Article defaults
    NEWS_AUTOGEN_DEFAULT_VISIBILITY=public
    NEWS_AUTOGEN_ENABLE_AUDIO=true
    typescript
    
    import { generateNewsArticle } from '@/features/news/services/article-generator'
    
    const result = await generateNewsArticle({
      source: 'search',
      value: 'Ring Platform open source release',
      author: { id: actorId, name: 'Editor' },
      enableAudio: true,
      enableImage: true,
    })
    bash
    
    # MCP tool count (includes ring-news-generate)
    node AI-RING/ring-mcp/ring-mcp-server.js --test
    # → "tools": 57
    text
    
    ring-news-generate source url value https://example.com/press-release instruction "neutral tone, platform-updates angle"
    json
    
    {
      "source": "url",
      "value": "https://example.com/article",
      "instruction": "Focus on platform impact for developers",
      "locale": "en",
      "enableAudio": true,
      "enableImage": true
    }
    json
    
    {
      "success": true,
      "articleId": "uuid",
      "title": "…",
      "locale": "en",
      "featuredImage": "https://cdn…/generated/…",
      "audioUrl": "https://cdn…/generated/audio/…"
    }
    bash
    
    # TextConductor (Grok /v1/responses)
    TEXT_GEN_PROVIDER=xai
    XAI_TEXT_MODEL=grok-4.3
    XAI_TEXT_MAX_TOKENS=8000
    XAI_TEXT_WEBSEARCH=true
    XAI_TEXT_XSEARCH=true
    TEXT_GEN_POLL_TIMEOUT_MS=180000
    
    # AudioConductor (TTS)
    TTS_PROVIDER=xai
    XAI_TTS_ENABLED=true
    XAI_TTS_VOICE=eve
    AUDIO_STORAGE_PREFIX=generated/audio
    
    # Article defaults
    NEWS_AUTOGEN_DEFAULT_VISIBILITY=public
    NEWS_AUTOGEN_ENABLE_AUDIO=true
    typescript
    
    import { generateNewsArticle } from '@/features/news/services/article-generator'
    
    const result = await generateNewsArticle({
      source: 'search',
      value: 'Ring Platform open source release',
      author: { id: actorId, name: 'Editor' },
      enableAudio: true,
      enableImage: true,
    })
    bash
    
    # MCP tool count (includes ring-news-generate)
    node AI-RING/ring-mcp/ring-mcp-server.js --test
    # → "tools": 57
    text
    
    ring-news-generate source url value https://example.com/press-release instruction "neutral tone, platform-updates angle"
    json
    
    {
      "source": "url",
      "value": "https://example.com/article",
      "instruction": "Focus on platform impact for developers",
      "locale": "en",
      "enableAudio": true,
      "enableImage": true
    }
    json
    
    {
      "success": true,
      "articleId": "uuid",
      "title": "…",
      "locale": "en",
      "featuredImage": "https://cdn…/generated/…",
      "audioUrl": "https://cdn…/generated/audio/…"
    }
    bash
    
    # TextConductor (Grok /v1/responses)
    TEXT_GEN_PROVIDER=xai
    XAI_TEXT_MODEL=grok-4.3
    XAI_TEXT_MAX_TOKENS=8000
    XAI_TEXT_WEBSEARCH=true
    XAI_TEXT_XSEARCH=true
    TEXT_GEN_POLL_TIMEOUT_MS=180000
    
    # AudioConductor (TTS)
    TTS_PROVIDER=xai
    XAI_TTS_ENABLED=true
    XAI_TTS_VOICE=eve
    AUDIO_STORAGE_PREFIX=generated/audio
    
    # Article defaults
    NEWS_AUTOGEN_DEFAULT_VISIBILITY=public
    NEWS_AUTOGEN_ENABLE_AUDIO=true
    typescript
    
    import { generateNewsArticle } from '@/features/news/services/article-generator'
    
    const result = await generateNewsArticle({
      source: 'search',
      value: 'Ring Platform open source release',
      author: { id: actorId, name: 'Editor' },
      enableAudio: true,
      enableImage: true,
    })
    bash
    
    # MCP tool count (includes ring-news-generate)
    node AI-RING/ring-mcp/ring-mcp-server.js --test
    # → "tools": 57
    text
    
    ring-news-generate source url value https://example.com/press-release instruction "neutral tone, platform-updates angle"