CinvanaAI
← All projects

Tool · Conversations & archives / Games & interaction

Conversation Archive for Discord

Turn a local conversation collection into an ordered Discord archive, previewing changes before sending.

Repository: CinvanaAI/cinvana-discord-engine

Recorded synthetic example. Source with a complete offline example.

See the idea in action.

A year/category, month/channel and two dated threads are planned with real source bindings. Publication remains paused and Discord receives zero calls.

Example input
Two synthetic Conversation Engine chunks on consecutive days.
Captured result
{
  "mode": "Synthetic CE chunks; actual archive projection",
  "source_messages": [
    "First, review the fixture.",
    "Then, record the result."
  ],
  "projection": {
    "guild_key": "demo",
    "source_system": "synthetic-ce",
    "start": "2026-01-01",
    "end": "2026-01-02",
    "chunks_projected": 2,
    "days_with_content": 2,
    "placeholders_removed": 0,
    "categories": 1,
    "channels": 1,
    "threads": 2,
    "messages": 4,
    "projection_states": {
      "unpublished": 2
    }
  },
  "publication_paused": true,
  "remaining_actions": {
    "categories": 1,
    "channels": 1,
    "threads": 2,
    "messages": 4
  },
  "sample": [
    {
      "day_date": "2026-01-01",
      "category_name": "2026",
      "channel_name": "2026-01",
      "thread_name": "2026-01-01",
      "intended_messages": 2,
      "created_messages": 0
    },
    {
      "day_date": "2026-01-02",
      "category_name": "2026",
      "channel_name": "2026-01",
      "thread_name": "2026-01-02",
      "intended_messages": 2,
      "created_messages": 0
    }
  ],
  "queue_plan": {
    "guild_key": "demo",
    "generation_id": 1,
    "canceled_stale_operations": 0,
    "enqueued_operations": 8,
    "relinked_slots": 0,
    "containers_checked": 2,
    "operations_by_type": {
      "CREATE_CATEGORY": 1,
      "CREATE_CHANNEL": 1,
      "CREATE_THREAD_STARTER": 2,
      "CREATE_THREAD": 2,
      "CREATE_MESSAGE": 2
    }
  },
  "queue_summary": {
    "pending": 8
  },
  "operations": [
    {
      "type": "CREATE_CATEGORY",
      "priority": 10,
      "payload": {
        "category_key": "demo:category:year:2026"
      }
    },
    {
      "type": "CREATE_CHANNEL",
      "priority": 20,
      "payload": {
        "category_key": "demo:category:year:2026",
        "channel_key": "demo:channel:month:2026-01"
      }
    },
    {
      "type": "CREATE_THREAD_STARTER",
      "priority": 30,
      "payload": {
        "channel_key": "demo:channel:month:2026-01",
        "message_key": "demo:message:day:2026-01-01:starter",
        "thread_key": "demo:thread:day:2026-01-01"
      }
    },
    {
      "type": "CREATE_THREAD_STARTER",
      "priority": 30,
      "payload": {
        "channel_key": "demo:channel:month:2026-01",
        "message_key": "demo:message:day:2026-01-02:starter",
        "thread_key": "demo:thread:day:2026-01-02"
      }
    },
    {
      "type": "CREATE_THREAD",
      "priority": 31,
      "payload": {
        "channel_key": "demo:channel:month:2026-01",
        "starter_message_key": "demo:message:day:2026-01-01:starter",
        "thread_key": "demo:thread:day:2026-01-01"
      }
    },
    {
      "type": "CREATE_THREAD",
      "priority": 31,
      "payload": {
        "channel_key": "demo:channel:month:2026-01",
        "starter_message_key": "demo:message:day:2026-01-02:starter",
        "thread_key": "demo:thread:day:2026-01-02"
      }
    },
    {
      "type": "CREATE_MESSAGE",
      "priority": 51,
      "payload": {
        "container_key": "demo:thread:day:2026-01-01",
        "message_key": "demo:message:ce:message-1:private:1",
        "slot_index": 1
      }
    },
    {
      "type": "CREATE_MESSAGE",
      "priority": 51,
      "payload": {
        "container_key": "demo:thread:day:2026-01-02",
        "message_key": "demo:message:ce:message-2:private:1",
        "slot_index": 1
      }
    }
  ],
  "discord_calls": 0
}

Try the example.

From the repository root, follow the dependency requirements in the README. This example uses supplied synthetic material.

python -m pip install -e .
python -m examples.offline_demo

A year/category, month/channel and two dated threads are planned with real source bindings. Publication remains paused and Discord receives zero calls.

Complete setup and instructions ↗

The interesting part.

Desired archive order and physical Discord message slots are distinct; stable slots can be edited instead of rebuilding the whole archive.

Integrated source snapshot

Where it came from.

Reviewed source snapshot of CinvanaAI Discord Engine.

Retains source, tests and configuration with private runtime state and machine paths excluded.

It consumes configured Conversation Engine data; live publication also requires a visitor-owned Discord setup.

Source ↗

Follow the family: Conversation source, migration and Discord archives

  • Focused extractionDiscord Topology Reconciler

    Inspect or reuse this boundary without navigating the whole application. The smaller package re-expresses the retained planning mechanics through a new in-memory contract.

    Source ↗
  • Reads its source fromConversation Engine

    Understand the archive source that live projection reads. A configured source integration, not a shared-code ancestry claim.

    Source ↗