Lightweight containerized prosody tooling + moved auth scripts + xmpp reconnect/auth stabilization

This commit is contained in:
2026-03-05 02:18:12 +00:00
parent 0718a06c19
commit 2140c5facf
69 changed files with 3767 additions and 144 deletions

View File

@@ -0,0 +1,165 @@
import uuid
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("core", "0034_codexrun_codexpermissionrequest_and_more"),
]
operations = [
migrations.CreateModel(
name="ConversationEvent",
fields=[
("id", models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
("ts", models.BigIntegerField(db_index=True, help_text="Event timestamp (unix ms).")),
(
"event_type",
models.CharField(
choices=[
("message_created", "Message Created"),
("message_edited", "Message Edited"),
("message_deleted", "Message Deleted"),
("reaction_added", "Reaction Added"),
("reaction_removed", "Reaction Removed"),
("read_receipt", "Read Receipt"),
("typing_started", "Typing Started"),
("typing_stopped", "Typing Stopped"),
("participant_added", "Participant Added"),
("participant_removed", "Participant Removed"),
("delivery_receipt", "Delivery Receipt"),
],
max_length=64,
),
),
(
"direction",
models.CharField(
choices=[("in", "Inbound"), ("out", "Outbound"), ("system", "System")],
max_length=16,
),
),
("actor_identifier", models.CharField(blank=True, default="", max_length=255)),
(
"origin_transport",
models.CharField(
blank=True,
choices=[
("signal", "Signal"),
("whatsapp", "WhatsApp"),
("xmpp", "XMPP"),
("instagram", "Instagram"),
("web", "Web"),
],
default="",
max_length=32,
),
),
("origin_message_id", models.CharField(blank=True, default="", max_length=255)),
("origin_chat_id", models.CharField(blank=True, default="", max_length=255)),
("payload", models.JSONField(blank=True, default=dict)),
("raw_payload", models.JSONField(blank=True, default=dict)),
("trace_id", models.CharField(blank=True, default="", max_length=64)),
("created_at", models.DateTimeField(auto_now_add=True)),
(
"session",
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="core.chatsession"),
),
(
"user",
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
],
options={
"ordering": ["ts", "created_at"],
},
),
migrations.CreateModel(
name="AdapterHealthEvent",
fields=[
("id", models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
(
"service",
models.CharField(
choices=[
("signal", "Signal"),
("whatsapp", "WhatsApp"),
("xmpp", "XMPP"),
("instagram", "Instagram"),
],
max_length=32,
),
),
(
"status",
models.CharField(
choices=[
("ok", "OK"),
("degraded", "Degraded"),
("down", "Down"),
("recovering", "Recovering"),
],
max_length=32,
),
),
("reason", models.TextField(blank=True, default="")),
("retry_meta", models.JSONField(blank=True, default=dict)),
(
"ts",
models.BigIntegerField(
db_index=True,
help_text="Health transition timestamp (unix ms).",
),
),
("created_at", models.DateTimeField(auto_now_add=True)),
(
"user",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"ordering": ["-ts", "-created_at"],
},
),
migrations.AddIndex(
model_name="conversationevent",
index=models.Index(fields=["user", "session", "ts"], name="core_conver_user_id_96580b_idx"),
),
migrations.AddIndex(
model_name="conversationevent",
index=models.Index(
fields=["origin_transport", "origin_message_id"],
name="core_conver_origin__283534_idx",
),
),
migrations.AddIndex(
model_name="conversationevent",
index=models.Index(fields=["trace_id"], name="core_conver_trace_i_4ed2ec_idx"),
),
migrations.AddIndex(
model_name="conversationevent",
index=models.Index(
fields=["event_type", "created_at"],
name="core_conver_event_t_a16f3e_idx",
),
),
migrations.AddIndex(
model_name="adapterhealthevent",
index=models.Index(fields=["service", "ts"], name="core_adapte_service_f6e8d4_idx"),
),
migrations.AddIndex(
model_name="adapterhealthevent",
index=models.Index(
fields=["status", "created_at"],
name="core_adapte_status_6529f5_idx",
),
),
]