From 677eb823e3229e3350a06e21343e66e80e2f107a Mon Sep 17 00:00:00 2001
From: Till-JS <101404291+Till-JS@users.noreply.github.com>
Date: Thu, 29 Jan 2026 13:07:21 +0100
Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(mana-search):=20fix=20SearXN?=
=?UTF-8?q?G=20docker=20config=20for=20local=20development?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Remove :ro flag from volume mounts (SearXNG needs write access)
- Simplify limiter.toml to match current SearXNG schema
- Disable link_token for API usage without browser
---
apps/matrix/apps/web/package.json | 4 +-
apps/matrix/apps/web/src/app.css | 2 +-
.../src/lib/components/chat/Message.svelte | 96 +--
.../src/lib/components/chat/RoomHeader.svelte | 79 ++-
.../src/lib/components/chat/RoomItem.svelte | 6 +-
.../src/lib/components/chat/Timeline.svelte | 22 +-
.../crypto/EmojiVerification.svelte | 158 +++++
.../crypto/RecoveryKeyDialog.svelte | 374 ++++++++++++
.../crypto/VerificationDialog.svelte | 244 ++++++++
.../web/src/lib/components/crypto/index.ts | 4 +
apps/matrix/apps/web/src/lib/matrix/client.ts | 6 +-
apps/matrix/apps/web/src/lib/matrix/crypto.ts | 137 +++++
apps/matrix/apps/web/src/lib/matrix/index.ts | 1 +
.../apps/web/src/lib/matrix/store.svelte.ts | 562 +++++++++++++++++-
apps/matrix/apps/web/src/lib/matrix/types.ts | 102 +++-
.../web/src/routes/(app)/chat/+page.svelte | 11 +-
.../src/routes/(app)/settings/+page.svelte | 229 +++++--
apps/matrix/apps/web/vite.config.ts | 13 +
packages/bot-services/src/ai/ai.service.ts | 28 +-
packages/bot-services/src/ai/types.ts | 24 +
.../bot-services/src/clock/clock.service.ts | 14 +-
services/mana-search/docker-compose.dev.yml | 4 +-
services/mana-search/searxng/limiter.toml | 13 +-
23 files changed, 1950 insertions(+), 183 deletions(-)
create mode 100644 apps/matrix/apps/web/src/lib/components/crypto/EmojiVerification.svelte
create mode 100644 apps/matrix/apps/web/src/lib/components/crypto/RecoveryKeyDialog.svelte
create mode 100644 apps/matrix/apps/web/src/lib/components/crypto/VerificationDialog.svelte
create mode 100644 apps/matrix/apps/web/src/lib/components/crypto/index.ts
create mode 100644 apps/matrix/apps/web/src/lib/matrix/crypto.ts
diff --git a/apps/matrix/apps/web/package.json b/apps/matrix/apps/web/package.json
index 1d852c2a3..85ef0874b 100644
--- a/apps/matrix/apps/web/package.json
+++ b/apps/matrix/apps/web/package.json
@@ -31,6 +31,7 @@
},
"dependencies": {
"matrix-js-sdk": "^37.1.0",
+ "@matrix-org/matrix-sdk-crypto-wasm": "^13.0.0",
"buffer": "^6.0.3",
"events": "^3.3.0",
"@manacore/shared-auth": "workspace:*",
@@ -41,8 +42,5 @@
"lucide-svelte": "^0.509.0",
"date-fns": "^4.1.0",
"svelte-i18n": "^4.0.1"
- },
- "overrides": {
- "@matrix-org/matrix-sdk-crypto-nodejs": "npm:empty-npm-package@1.0.0"
}
}
diff --git a/apps/matrix/apps/web/src/app.css b/apps/matrix/apps/web/src/app.css
index c4976f67c..0d82a0a39 100644
--- a/apps/matrix/apps/web/src/app.css
+++ b/apps/matrix/apps/web/src/app.css
@@ -16,7 +16,7 @@
}
body {
- @apply bg-base-100 text-base-content;
+ @apply bg-background text-foreground;
}
}
diff --git a/apps/matrix/apps/web/src/lib/components/chat/Message.svelte b/apps/matrix/apps/web/src/lib/components/chat/Message.svelte
index e6a180563..14dcd92e5 100644
--- a/apps/matrix/apps/web/src/lib/components/chat/Message.svelte
+++ b/apps/matrix/apps/web/src/lib/components/chat/Message.svelte
@@ -12,17 +12,32 @@
FileIcon,
Play,
Image as ImageIcon,
+ Lock,
+ AlertTriangle,
} from 'lucide-svelte';
interface Props {
message: SimpleMessage;
showAvatar?: boolean;
showTimestamp?: boolean;
+ showEncryptionBadge?: boolean;
onReply?: (message: SimpleMessage) => void;
onEdit?: (message: SimpleMessage) => void;
}
- let { message, showAvatar = true, showTimestamp = false, onReply, onEdit }: Props = $props();
+ let {
+ message,
+ showAvatar = true,
+ showTimestamp = false,
+ showEncryptionBadge = false,
+ onReply,
+ onEdit,
+ }: Props = $props();
+
+ // Check if message is a decryption error (body starts with "Unable to decrypt:")
+ let isDecryptionError = $derived(
+ message.body.startsWith('Unable to decrypt:') || message.body.includes('** Unable to decrypt')
+ );
let showActions = $state(false);
let imageLoading = $state(true);
@@ -78,15 +93,15 @@
{#if showTimestamp}
-
-
{formattedDate()}
-
+
+
{formattedDate()}
+
{/if}
{#if showAvatar && !message.isOwn}
-
-
- {initials}
-
+
+ {initials}
{/if}
@@ -111,9 +126,12 @@
{message.isOwn ? 'Du' : message.senderName}
-
{formattedTime}
+
{formattedTime}
{#if message.edited}
-
(bearbeitet)
+
(bearbeitet)
+ {/if}
+ {#if showEncryptionBadge}
+
{/if}
{/if}
@@ -121,28 +139,36 @@
{#if message.replyTo && message.replyToBody}
-
- {message.replyToBody}
+
+ {message.replyToBody}
{/if}
{#if message.redacted}
-
Nachricht wurde gelöscht
+
Nachricht wurde gelöscht
+ {:else if isDecryptionError}
+
+
+
+
+ Nachricht kann nicht entschlüsselt werden. Möglicherweise fehlen Schlüssel.
+
+
{:else if message.type === 'm.image' && thumbnailUrl}
{#if imageLoading}
-
-
+
+
{/if}
{#if imageError}
-
-
Bild konnte nicht geladen werden
+
+
Bild konnte nicht geladen werden
{:else}
{message.media?.filename || message.body}
-
+
{formatFileSize(message.media?.size)}
{#if message.media?.mimetype}
• {message.media.mimetype.split('/')[1]?.toUpperCase()}
{/if}
-
+
{:else if message.type === 'm.emote'}
-
* {message.senderName} {message.body}
+
* {message.senderName} {message.body}
{:else if message.type === 'm.notice'}
-
{message.body}
+
{message.body}
{:else}
{message.body}
{/if}
{#if !showAvatar}
-
+
{formattedTime}
{/if}
@@ -219,25 +247,19 @@
{#if showActions && !message.redacted}
-
-