Continue AI features and improve protocol support

This commit is contained in:
2026-02-15 16:57:32 +00:00
parent 2d3b8fdac6
commit 85e97e895d
62 changed files with 5472 additions and 441 deletions

View File

@@ -48,6 +48,13 @@ if DEBUG:
SETTINGS_EXPORT = ["BILLING_ENABLED"]
SIGNAL_NUMBER = getenv("SIGNAL_NUMBER")
SIGNAL_HTTP_URL = getenv("SIGNAL_HTTP_URL", "http://signal:8080")
WHATSAPP_ENABLED = getenv("WHATSAPP_ENABLED", "false").lower() in trues
WHATSAPP_HTTP_URL = getenv("WHATSAPP_HTTP_URL", "http://whatsapp:8080")
INSTAGRAM_ENABLED = getenv("INSTAGRAM_ENABLED", "false").lower() in trues
INSTAGRAM_HTTP_URL = getenv("INSTAGRAM_HTTP_URL", "http://instagram:8080")
XMPP_ADDRESS = getenv("XMPP_ADDRESS")
XMPP_JID = getenv("XMPP_JID")

View File

@@ -18,14 +18,15 @@ from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.auth.views import LogoutView
from django.urls import include, path
from django.views.generic import TemplateView
from two_factor.urls import urlpatterns as tf_urls
from core.views import (
ais,
base,
compose,
groups,
identifiers,
instagram,
manipulations,
messages,
notifications,
@@ -34,6 +35,7 @@ from core.views import (
queues,
sessions,
signal,
whatsapp,
workspace,
)
@@ -56,11 +58,31 @@ urlpatterns = [
signal.Signal.as_view(),
name="signal",
),
path(
"services/whatsapp/",
whatsapp.WhatsApp.as_view(),
name="whatsapp",
),
path(
"services/instagram/",
instagram.Instagram.as_view(),
name="instagram",
),
path(
"services/signal/<str:type>/",
signal.SignalAccounts.as_view(),
name="signal_accounts",
),
path(
"services/whatsapp/<str:type>/",
whatsapp.WhatsAppAccounts.as_view(),
name="whatsapp_accounts",
),
path(
"services/instagram/<str:type>/",
instagram.InstagramAccounts.as_view(),
name="instagram_accounts",
),
path(
"services/signal/<str:type>/contacts/<str:pk>/",
signal.SignalContactsList.as_view(),
@@ -81,6 +103,41 @@ urlpatterns = [
signal.SignalAccountAdd.as_view(),
name="signal_account_add",
),
path(
"services/whatsapp/<str:type>/add/",
whatsapp.WhatsAppAccountAdd.as_view(),
name="whatsapp_account_add",
),
path(
"services/instagram/<str:type>/add/",
instagram.InstagramAccountAdd.as_view(),
name="instagram_account_add",
),
path(
"compose/page/",
compose.ComposePage.as_view(),
name="compose_page",
),
path(
"compose/widget/",
compose.ComposeWidget.as_view(),
name="compose_widget",
),
path(
"compose/send/",
compose.ComposeSend.as_view(),
name="compose_send",
),
path(
"compose/thread/",
compose.ComposeThread.as_view(),
name="compose_thread",
),
path(
"compose/widget/contacts/",
compose.ComposeContactsDropdown.as_view(),
name="compose_contacts_dropdown",
),
# AIs
path(
"ai/workspace/",
@@ -97,6 +154,21 @@ urlpatterns = [
workspace.AIWorkspacePersonWidget.as_view(),
name="ai_workspace_person",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/insights/graphs/",
workspace.AIWorkspaceInsightGraphs.as_view(),
name="ai_workspace_insight_graphs",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/insights/help/",
workspace.AIWorkspaceInsightHelp.as_view(),
name="ai_workspace_insight_help",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/insights/<str:metric>/",
workspace.AIWorkspaceInsightDetail.as_view(),
name="ai_workspace_insight_detail",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/run/<str:operation>/",
workspace.AIWorkspaceRunOperation.as_view(),
@@ -118,50 +190,65 @@ urlpatterns = [
name="ai_workspace_mitigation_create",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/<uuid:plan_id>/chat/",
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/chat/",
workspace.AIWorkspaceMitigationChat.as_view(),
name="ai_workspace_mitigation_chat",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/<uuid:plan_id>/export/",
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/export/",
workspace.AIWorkspaceExportArtifact.as_view(),
name="ai_workspace_mitigation_export",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/<uuid:plan_id>/artifact/create/<str:kind>/",
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/artifact/create/<str:kind>/",
workspace.AIWorkspaceCreateArtifact.as_view(),
name="ai_workspace_mitigation_artifact_create",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/<uuid:plan_id>/artifact/<str:kind>/<uuid:artifact_id>/save/",
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/artifact/<str:kind>/<uuid:artifact_id>/save/",
workspace.AIWorkspaceUpdateArtifact.as_view(),
name="ai_workspace_mitigation_artifact_save",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/<uuid:plan_id>/artifact/<str:kind>/<uuid:artifact_id>/delete/",
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/artifact/<str:kind>/<uuid:artifact_id>/delete/",
workspace.AIWorkspaceDeleteArtifact.as_view(),
name="ai_workspace_mitigation_artifact_delete",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/<uuid:plan_id>/artifact/<str:kind>/delete-all/",
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/artifact/<str:kind>/delete-all/",
workspace.AIWorkspaceDeleteArtifactList.as_view(),
name="ai_workspace_mitigation_artifact_delete_all",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/<uuid:plan_id>/engage/share/",
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/engage/share/",
workspace.AIWorkspaceEngageShare.as_view(),
name="ai_workspace_mitigation_engage_share",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/<uuid:plan_id>/auto/",
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/auto/",
workspace.AIWorkspaceAutoSettings.as_view(),
name="ai_workspace_mitigation_auto",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/<uuid:plan_id>/fundamentals/save/",
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/fundamentals/save/",
workspace.AIWorkspaceUpdateFundamentals.as_view(),
name="ai_workspace_mitigation_fundamentals_save",
),
path(
"ai/workspace/<str:type>/person/<uuid:person_id>/mitigation/"
"<uuid:plan_id>/meta/save/",
workspace.AIWorkspaceUpdatePlanMeta.as_view(),
name="ai_workspace_mitigation_meta_save",
),
path(
"ai/<str:type>/",
ais.AIList.as_view(),