{ "source_base_path": "/home/runner/work/EchoHub/EchoHub/docs", "xrefmap": "xrefmap.yml", "files": [ { "type": "Resource", "output": { "resource": { "relative_path": "index.json" } } }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.AppOrchestrator.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.AppOrchestrator.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.AppOrchestrator", "Summary": "

Central orchestrator for the EchoHub TUI client.\nWires UI events to service calls and connection events to UI updates.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Commands.CommandHandler.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Commands.CommandHandler.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Commands.CommandHandler", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Commands.CommandResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Commands.CommandResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Commands.CommandResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Commands.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Commands.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Commands", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.AccountPreset.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.AccountPreset.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.AccountPreset", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.ClientConfig.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.ClientConfig.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.ClientConfig", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.ConfigManager.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.ConfigManager.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.ConfigManager", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.NotificationConfig.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.NotificationConfig.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.NotificationConfig", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.SavedServer.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.SavedServer.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config.SavedServer", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Config.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Config.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Config", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ApiClient.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ApiClient.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ApiClient", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.AsyncRunner.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.AsyncRunner.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.AsyncRunner", "Summary": "

Eliminates repeated Task.Run/try/catch/app.Invoke(ShowError) boilerplate.\nRuns async work on a background thread and routes exceptions to the UI.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.AudioPlaybackService.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.AudioPlaybackService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.AudioPlaybackService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.BackupInfo.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.BackupInfo.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.BackupInfo", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ChannelPasswordRequiredException.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ChannelPasswordRequiredException.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ChannelPasswordRequiredException", "Summary": "

Thrown when joining a channel fails because a password is required or incorrect.\nThe UI catches this to prompt the user and retry.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ClientEncryptionService.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ClientEncryptionService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ClientEncryptionService", "Summary": "

Client-side encryption service. Uses the same AES-256-GCM format as the server\nso messages are encrypted end-to-end between client and server.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ClipboardFiles.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ClipboardFiles.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ClipboardFiles", "Summary": "

Reads file paths that live on the OS clipboard as a file list (e.g. after copying a file in\nExplorer/Finder/Nautilus), which terminals do not paste as text. Lets Ctrl+V attach a copied\nfile directly instead of requiring the user to paste a raw path.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.ClipboardImage.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.ClipboardImage.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.ClipboardImage", "Summary": "

Reads raw image data from the OS clipboard (e.g. an image copied from a browser, or a\nWin+Shift+S screenshot), which terminals cannot paste as text. Always returns PNG bytes:\nclipboard PNG data is passed through, clipboard bitmaps (CF_DIB) are re-encoded.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.EchoHubConnection.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.EchoHubConnection.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.EchoHubConnection", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.FolderPickResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.FolderPickResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.FolderPickResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.JoinOutcome.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.JoinOutcome.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.JoinOutcome", "Summary": "

Result of joining a channel: decrypted history plus, for end-to-end encrypted\nchannels, the key envelope needed to unlock the room content key.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.NativeFolderPicker.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.NativeFolderPicker.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.NativeFolderPicker", "Summary": "

Opens the OS-native folder chooser (Windows Explorer, macOS Finder, Linux GTK/KDE) by shelling\nout, so the TUI doesn't need a GUI toolkit reference. Returns \nwhen no native dialog can run, so callers can fall back to a configured path.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.NotificationSoundService.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.NotificationSoundService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.NotificationSoundService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.OutgoingAttachment.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.OutgoingAttachment.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.OutgoingAttachment", "Summary": "

One file to upload as part of a message. For end-to-end encrypted channels the stream\nis already ciphertext, is set (image/audio/file), and\n holds the room-encrypted ASCII art for images.\nFor normal channels only and are set.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.PathSetup.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.PathSetup.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.PathSetup", "Summary": "

Ensures the application's directory is on the system PATH so users\ncan run 'echohub' from any terminal session.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.PickerOutcome.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.PickerOutcome.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.PickerOutcome", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.RoomKeyProtector.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.RoomKeyProtector.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.RoomKeyProtector", "Summary": "

Encrypts cached room content keys at rest so the client config never holds them as\nplain base64. Windows uses DPAPI (current-user scope, format prefix "dp1:"). On other\nplatforms the keys are AES-GCM encrypted with a per-user master key file stored next\nto the config with 0600 permissions (prefix "k1:") — without an OS keychain that is\nfile-permission-level protection, not zero-knowledge: anyone who can read both the\nconfig and the key file can recover the room keys. Values with no recognized prefix\nare legacy plain-base64 keys from older clients; they load once and are re-encrypted.\nThe room passphrase itself is never stored in any form.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.RoomKeyStore.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.RoomKeyStore.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.RoomKeyStore", "Summary": "

Holds room content keys for end-to-end encrypted channels: in-memory for the\nactive session, persisted per-server in the client config (like saved sessions)\nso users don't retype the passphrase every launch. Keys never leave this machine\nand are encrypted at rest by . Also tracks which\nchannels are known to be end-to-end encrypted, so senders can refuse to emit\nplaintext into a room whose key isn't cached yet.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.RoomLockedException.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.RoomLockedException.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.RoomLockedException", "Summary": "

Thrown when sending into an end-to-end encrypted channel whose room key isn't cached:\nwithout the key the message would leave the client as plaintext, which must never happen.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.UpdateBackupService.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.UpdateBackupService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.UpdateBackupService", "Summary": "

Manages pre-update backups and rollback restoration for the auto-updater.\nBackup location: ~/.echohub/update-backup/

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.UpdateChecker.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.UpdateChecker.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services.UpdateChecker", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Services.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Services.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Services", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Themes.Theme.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Themes.Theme.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Themes.Theme", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Themes.ThemeColors.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Themes.ThemeColors.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Themes.ThemeColors", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Themes.ThemeManager.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Themes.ThemeManager.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Themes.ThemeManager", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.Themes.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.Themes.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.Themes", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.AttachmentAction.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.AttachmentAction.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.AttachmentAction", "Summary": "

An action a click on an attachment line can trigger.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.AttachmentActionSpan.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.AttachmentActionSpan.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.AttachmentActionSpan", "Summary": "

Inclusive column range on a chat line that triggers an attachment action when clicked.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatColors.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatColors.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatColors", "Summary": "

Shared color attributes for chat rendering (timestamps, system messages).

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatLine.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatLine.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatLine", "Summary": "

A single line in the chat, composed of colored segments.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatListSource.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatListSource.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatListSource", "Summary": "

Custom list data source for chat messages with per-segment coloring.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatMessageManager.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatMessageManager.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatMessageManager", "Summary": "

Owns chat message storage, formatting, and mutation.\nFires when a channel's message list is modified\nso the UI layer can refresh.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.ChatSegment.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.ChatSegment.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat.ChatSegment", "Summary": "

A colored text segment within a chat line.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Chat.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Chat.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Chat", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.AudioPlayerDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.AudioPlayerDialog", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ChannelPasswordDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ChannelPasswordDialog", "Summary": "

Prompts for a channel password when joining a protected channel.\nReturns the entered password, or null if the user cancels.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ConnectDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ConnectDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ConnectDialog", "Summary": "

A Terminal.Gui dialog for entering server connection and authentication details.\nIncludes a saved servers selector when saved servers are available.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ConnectDialogResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ConnectDialogResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ConnectDialogResult", "Summary": "

Result returned from the connect dialog.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.CreateChannelDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.CreateChannelDialog", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.CreateChannelResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.CreateChannelResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.CreateChannelResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ProfileAction.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ProfileAction.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ProfileAction", "Summary": "

Action selected by the user in their own profile dialog.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ProfileEditDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ProfileEditDialog", "Summary": "

A Terminal.Gui dialog for editing the user's profile (display name, bio, nickname color).

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ProfileEditResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ProfileEditResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ProfileEditResult", "Summary": "

Result returned from the profile edit dialog.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.ProfileViewDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.ProfileViewDialog", "Summary": "

Dialog for viewing a user's server profile.\nShows Edit Profile / Set Status buttons when viewing own profile.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.SearchDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.SearchDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.SearchDialog", "Summary": "

Command-palette style search dialog (Ctrl+K) for navigating channels and triggering app actions.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.SearchResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.SearchResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.SearchResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.SearchResultType.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.SearchResultType.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.SearchResultType", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.StatusDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.StatusDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.StatusDialog", "Summary": "

A Terminal.Gui dialog for setting the user's status and status message.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.StatusDialogResult.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.StatusDialogResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.StatusDialogResult", "Summary": "

Result returned from the status dialog.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.UpdateConfirmDialog.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs.UpdateConfirmDialog", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Dialogs.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Dialogs.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Dialogs", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.DroppedFileParser.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.DroppedFileParser.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers.DroppedFileParser", "Summary": "

Recognizes a dragged-and-dropped file (or files) that a terminal delivers into the input as an\nabsolute path. Terminals differ: some paste the whole path at once, others send it character by\ncharacter; either way this checks whether the current input text resolves to existing file(s).

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.EmojiHelper.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.EmojiHelper.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers.EmojiHelper", "Summary": "

Converts emoji grapheme clusters to text shortcodes for safe TUI rendering.\nTerminal width calculations for emoji are unreliable across different terminals,\nso we replace them with fixed-width ASCII shortcodes for display only.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.HexColorHelper.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.HexColorHelper.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers.HexColorHelper", "Summary": "

Helper to parse hex colors to Terminal.Gui Attributes.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.NickColorHelper.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.NickColorHelper.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers.NickColorHelper", "Summary": "

Deterministic per-nick colors for users who haven't picked a nickname color.\nThe same nick always maps to the same palette entry (classic IRC client behavior),\nso a busy channel stays scannable without any configuration.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.Helpers.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.Helpers.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.Helpers", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.ListSources.ChannelListSource.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.ListSources.ChannelListSource.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.ListSources.ChannelListSource", "Summary": "

Custom list data source for colored channel list rendering.\nActive channel gets a > indicator, unread channels are bright with a count badge.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.ListSources.SearchListSource.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.ListSources.SearchListSource.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.ListSources.SearchListSource", "Summary": "

List data source for the search dialog with filtering and colored rendering.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.ListSources.UserListSource.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.ListSources.UserListSource.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.ListSources.UserListSource", "Summary": "

Custom list data source for the online users panel with per-user nickname colors.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.ListSources.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.ListSources.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.ListSources", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.MainWindow.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.MainWindow.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI.MainWindow", "Summary": "

Main Terminal.Gui window for the EchoHub chat client.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.UI.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.UI.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client.UI", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/client/EchoHub.Client.yml", "output": { ".html": { "relative_path": "api/client/EchoHub.Client.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Client", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Constants.HubConstants.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Constants.HubConstants.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Constants.HubConstants", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Constants.MessageConventions.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Constants.MessageConventions.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Constants.MessageConventions", "Summary": "

Cross-protocol message conventions. Action messages (/me) use the IRC CTCP ACTION\nwire format 0x01 + "ACTION " + text + 0x01 as the stored content, so IRC clients\ninteroperate natively (irssi's /me arrives in exactly this shape) and the TUI renders\n"* nick text". In end-to-end encrypted rooms the marker encrypts along with the text.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Constants.ValidationConstants.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Constants.ValidationConstants.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Constants.ValidationConstants", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Constants.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Constants.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Constants", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.ChannelListItem.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.ChannelListItem.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.ChannelListItem", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IChannelService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IChannelService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IChannelService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IChatBroadcaster.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IChatBroadcaster.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IChatBroadcaster", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IChatService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IChatService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IChatService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IEchoHubClient.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IEchoHubClient.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IEchoHubClient", "Summary": "

Methods the server can invoke on connected clients.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IMessageEncryptionService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IMessageEncryptionService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IMessageEncryptionService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.IUserService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.IUserService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts.IUserService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Contracts.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Contracts.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Contracts", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ApiResponse-1.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ApiResponse-1.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ApiResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ApiResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ApiResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ApiResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.AssignRoleRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.AssignRoleRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.AssignRoleRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.AttachmentDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.AttachmentDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.AttachmentDto", "Summary": "

A file attached to a message. holds the color-tag art for\nimages (null otherwise). For end-to-end encrypted channels the content behind\n and the preview are ciphertext the server cannot read.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.AvatarUploadResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.AvatarUploadResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.AvatarUploadResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.BanRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.BanRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.BanRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelCryptoDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelCryptoDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelCryptoDto", "Summary": "

Public crypto metadata for a channel — enough for a client to derive its join\ncredential from a passphrase. Never includes the wrapped room key.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelError.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelError.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelError", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelMetaDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelMetaDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelMetaDto", "Summary": "

Human-facing summary of a channel (the /meta command). For encrypted channels the\nserver still knows these figures — count, timestamps, and stored blob sizes — even though it\ncannot read the content itself. is the sum of stored\nattachment blob sizes plus message text length, so it is an estimate, not an exact on-disk total.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ChannelOperationResult.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ChannelOperationResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ChannelOperationResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.CreateChannelRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.CreateChannelRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.CreateChannelRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.CreateInviteRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.CreateInviteRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.CreateInviteRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.DeleteAccountRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.DeleteAccountRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.DeleteAccountRequest", "Summary": "

Password re-confirmation for destructive self-service account actions.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.EmbedDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.EmbedDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.EmbedDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.EncryptionKeyResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.EncryptionKeyResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.EncryptionKeyResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ErrorResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ErrorResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ErrorResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ExportedAttachmentDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ExportedAttachmentDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ExportedAttachmentDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ExportedMessageDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ExportedMessageDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ExportedMessageDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.InviteDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.InviteDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.InviteDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.JoinChannelResult.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.JoinChannelResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.JoinChannelResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.KickRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.KickRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.KickRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.LoginRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.LoginRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.LoginRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.LoginResponse.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.LoginResponse.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.LoginResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.MessageDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.MessageDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.MessageDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.MuteRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.MuteRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.MuteRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.PaginatedResponse-1.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.PaginatedResponse-1.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.PaginatedResponse", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.RefreshRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.RefreshRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.RefreshRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.RegisterRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.RegisterRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.RegisterRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.RekeyChannelRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.RekeyChannelRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.RekeyChannelRequest", "Summary": "

Passphrase change for an encrypted channel: the client proves knowledge of the old\npassphrase (old auth key), then supplies the re-wrapped room key under the new one.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ReplyRefDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ReplyRefDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ReplyRefDto", "Summary": "

Reference to the message a reply targets. is treated exactly like\nmessage content on the wire: transport-encrypted, and for end-to-end encrypted rooms it is\nroom ciphertext the client must decrypt (the server truncates only plaintext snippets).\nNull on a when the original message no longer exists.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.SendMessageRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.SendMessageRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.SendMessageRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.SendUrlRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.SendUrlRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.SendUrlRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.ServerStatusDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.ServerStatusDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.ServerStatusDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UpdateProfileRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UpdateProfileRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UpdateProfileRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UpdateStatusRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UpdateStatusRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UpdateStatusRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UpdateTopicRequest.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UpdateTopicRequest.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UpdateTopicRequest", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserDataExportDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserDataExportDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserDataExportDto", "Summary": "

Everything the server holds about a user, as stored. For end-to-end encrypted rooms the\nmessage content in here is room ciphertext — the server cannot include plaintext it never had.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserError.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserError.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserError", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserOperationResult.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserOperationResult.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserOperationResult", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserPresenceDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserPresenceDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserPresenceDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.UserProfileDto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.UserProfileDto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs.UserProfileDto", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.DTOs.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.DTOs.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.DTOs", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.Attachment.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.Attachment.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.Attachment", "Summary": "

A file attached to a message (image, audio, or any file). A message may carry\nzero or more attachments alongside its text content (Discord-style).

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.AttachmentKind.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.AttachmentKind.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.AttachmentKind", "Summary": "

The kind of a message attachment. Determines how the client renders it\n(ASCII preview for images, a play affordance for audio, a download line for files).

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.Channel.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.Channel.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.Channel", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.ChannelMembership.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.ChannelMembership.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.ChannelMembership", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.InviteCode.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.InviteCode.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.InviteCode", "Summary": "

A registration invite code. When the server runs with Server:Registration = "invite",\nnew accounts (REST and IRC alike) require a valid, unexpired, not-fully-used code.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.Message.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.Message.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.Message", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.MessageType.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.MessageType.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.MessageType", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.RefreshToken.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.RefreshToken.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.RefreshToken", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.ServerRole.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.ServerRole.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.ServerRole", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.ServerStatsReport.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.ServerStatsReport.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.ServerStatsReport", "Summary": "

A snapshot of server activity over one reporting window, produced periodically by the\nstats-report background job. Each report is logged as pretty-printed JSON and persisted\nfor historical trend analysis. The window is "since the previous report" (or since startup\nfor the first report of a run).

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.User.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.User.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.User", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.UserStatus.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.UserStatus.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models.UserStatus", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Models.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Models.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Models", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Security.RoomCrypto.DerivedKeys.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Security.RoomCrypto.DerivedKeys.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Security.RoomCrypto.DerivedKeys", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Security.RoomCrypto.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Security.RoomCrypto.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Security.RoomCrypto", "Summary": "

Client-side envelope encryption for private (end-to-end encrypted) channels.

\n

Design: at creation the client generates a random 256-bit room content key (RCK)\nthat encrypts all room content. The RCK is stored on the server wrapped\n(AES-GCM encrypted) by a key derived from the passphrase, next to a BCrypt hash\nof a separately derived auth key used as the join gate. The passphrase, the\nkey-encryption key, and the RCK never leave the client, so the server can gate\njoins and count/measure content without being able to read it. Changing the\npassphrase only re-wraps the RCK — history is never re-encrypted.

\n

Derivation: PBKDF2-SHA256(passphrase, salt, 210000 iterations) → 64 bytes;\nfirst 32 bytes are the auth key (sent to the server as lowercase hex),\nlast 32 bytes are the key-encryption key (never sent).

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Security.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Security.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Security", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Services.AsciiBannerService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Services.AsciiBannerService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Services.AsciiBannerService", "Summary": "

Renders short text as a 5-row block-character banner (the /banner command).\nEntirely local — a hand-rolled figlet-style font, no dependencies, no network.\nOutput is plain message content, so it travels (and encrypts) like any other text.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Services.FileValidationHelper.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Services.FileValidationHelper.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Services.FileValidationHelper", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Services.ImageToAsciiService.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Services.ImageToAsciiService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Services.ImageToAsciiService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/core/EchoHub.Core.Services.yml", "output": { ".html": { "relative_path": "api/core/EchoHub.Core.Services.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Core.Services", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcBroadcaster.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcBroadcaster.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcBroadcaster", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcClientConnection.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcClientConnection.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcClientConnection", "Summary": "

Manages a single IRC client TCP connection.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcCommandHandler.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcCommandHandler.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcCommandHandler", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcGatewayService.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcGatewayService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcGatewayService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcMessage.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcMessage.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcMessage", "Summary": "

Parsed representation of an IRC protocol line.\nFormat: [:prefix] COMMAND [params...] [:trailing]

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcMessageFormatter.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcMessageFormatter.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcMessageFormatter", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcNumericReply.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcNumericReply.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcNumericReply", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcOptions.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcOptions.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcOptions", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.IrcServiceExtensions.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.IrcServiceExtensions.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc.IrcServiceExtensions", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server-irc/EchoHub.Server.Irc.yml", "output": { ".html": { "relative_path": "api/server-irc/EchoHub.Server.Irc.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Irc", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Auth.JwtTokenService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Auth.JwtTokenService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Auth.JwtTokenService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Auth.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Auth.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Auth", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Config.ServerLogsOptions.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Config.ServerLogsOptions.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Config.ServerLogsOptions", "Summary": "

Live server-log room settings, bound from the "ServerLogs" config section (env override:\nServerLogs__Enabled etc.). When enabled, a read-only system channel is auto-created\nand log events are streamed to it live — log lines are never stored as messages in the\ndatabase; the rolling Serilog log files remain the only persistence.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Config.SpamOptions.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Config.SpamOptions.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Config.SpamOptions", "Summary": "

Anti-spam thresholds, bound from the "Spam" config section. Defaults are lenient enough\nthat a fast typist never trips them; Mods and above are always exempt.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Config.StatsOptions.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Config.StatsOptions.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Config.StatsOptions", "Summary": "

Periodic server-stats report settings, bound from the "Stats" config section (env override:\nStats__Enabled etc.). When enabled, a background job periodically snapshots server\nactivity, logs it as pretty-printed JSON, and persists it to the database.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Config.UploadLimits.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Config.UploadLimits.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Config.UploadLimits", "Summary": "

Admin-configurable upload limits, bound from the Uploads configuration section.\nSizes are expressed in megabytes in configuration; the *Bytes accessors convert them\nfor enforcement. Every default mirrors so an absent or partial\nUploads section preserves the historical built-in limits.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Config.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Config.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Config", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.AuthController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.AuthController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.AuthController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.ChannelsController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.ChannelsController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.ChannelsController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.FilesController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.FilesController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.FilesController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.InvitesController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.InvitesController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.InvitesController", "Summary": "

Invite-code management for invite-gated registration (Admin+ only).\nCodes live in this server's own database — there is no central service.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.ModerationController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.ModerationController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.ModerationController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.ServerController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.ServerController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.ServerController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.UsersController.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.UsersController.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers.UsersController", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Controllers.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Controllers.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Controllers", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.EchoHubDbContext.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.EchoHubDbContext.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.EchoHubDbContext", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddAttachmentFileSize.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddAttachmentFileSize", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddChannelEncryptionEnvelope", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelIsPublic.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddChannelIsPublic", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelIsSystem.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelIsSystem.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddChannelIsSystem", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelMembership.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelMembership.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddChannelMembership", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddChannelPasswordHash.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddChannelPasswordHash.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddChannelPasswordHash", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddEncryptionSupport.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddEncryptionSupport", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddInvitesAndReplies.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddInvitesAndReplies.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddInvitesAndReplies", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddMessageAttachments.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddMessageAttachments.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddMessageAttachments", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddMessageEmbed.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddMessageEmbed.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddMessageEmbed", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddModerationRoles.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddModerationRoles.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddModerationRoles", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.AddServerStatsReports.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.AddServerStatsReports.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.AddServerStatsReports", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.InitialCreate.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.InitialCreate.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations.InitialCreate", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.Migrations.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.Migrations.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data.Migrations", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Data.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Data.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Data", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Hubs.ChatHub.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Hubs.ChatHub.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Hubs.ChatHub", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Hubs.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Hubs.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Hubs", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ChannelService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ChannelService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ChannelService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ChatService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ChatService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ChatService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.DirectoryClaimStore.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.DirectoryClaimStore.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.DirectoryClaimStore", "Summary": "

Persists and exposes the EchoHubSpace directory claim — the opaque token issued on first\nregistration and the row's stable ServerId. Also surfaces ephemeral registration\nstatus (success/failure code, conflicting hosts) for operator-facing endpoints.

\n

Persistence uses atomic write (tmp + rename). Treat the file contents as a secret.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.FileCleanupService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.FileCleanupService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.FileCleanupService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.FileStorageService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.FileStorageService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.FileStorageService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.LinkEmbedService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.LinkEmbedService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.LinkEmbedService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.MessageEncryptionService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.MessageEncryptionService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.MessageEncryptionService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.MuteExpirationService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.MuteExpirationService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.MuteExpirationService", "Summary": "

Background service that periodically unmutes users whose timed mute has expired.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.PresenceTracker.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.PresenceTracker.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.PresenceTracker", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.RegistrationStatus.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.RegistrationStatus.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.RegistrationStatus", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ServerDirectoryService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ServerDirectoryService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ServerDirectoryService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ServerLogs.LogBacklogEntry.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ServerLogs.LogBacklogEntry.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ServerLogs.LogBacklogEntry", "Summary": "

A backlog entry read from the log file: one timestamped log line plus any continuation\nlines (exception stack traces) that followed it.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ServerLogs.ServerLogsService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ServerLogs.ServerLogsService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ServerLogs.ServerLogsService", "Summary": "

Shared logic for the live log room: room identity, the role gate, and reading the backlog\ntail from the current rolling log file. The file stays the only persistence — log lines\nare never stored as messages.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ServerLogs.ServerLogsSink.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ServerLogs.ServerLogsSink.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ServerLogs.ServerLogsSink", "Summary": "

Serilog sink feeding the live log room. Events are queued in a bounded drop-oldest buffer\nand consumed by ; nothing is written to the database.\nEvents emitted by the streaming pipeline itself (the stream service and SignalR transport\ninternals) are dropped here so a broadcast that logs — e.g. a transport warning on a dead\nconnection — can never enter a log → broadcast → log feedback loop.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ServerLogs.ServerLogsStreamService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ServerLogs.ServerLogsStreamService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ServerLogs.ServerLogsStreamService", "Summary": "

Streams queued log events to the live log room as ephemeral messages: SignalR only (the\nIRC gateway never sees them) and no database rows. Ensures the room exists before\nstreaming, recreating it on the fly if it was deleted.

\n

This class must never log from its streaming path — its namespace is excluded by\n as a second line of defense, but the primary rule is simply\nnot to log per event, otherwise every streamed line would spawn another.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.ServerLogs.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.ServerLogs.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.ServerLogs", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.SignalRBroadcaster.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.SignalRBroadcaster.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.SignalRBroadcaster", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.SpamGuard.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.SpamGuard.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.SpamGuard", "Summary": "

In-memory, per-user spam protection consulted from (messages,\njoins) and (channel creation), so every ingress protocol —\nSignalR and IRC alike — shares the same limits. State is per-process and never persisted;\nauto-mutes land in the normal mute store. Operates only on content the server already\nstores (for end-to-end encrypted rooms that is ciphertext) — nothing is decrypted.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.SpamVerdict.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.SpamVerdict.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.SpamVerdict", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.SpamVerdictKind.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.SpamVerdictKind.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.SpamVerdictKind", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.Stats.ServerStatsCollector.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.Stats.ServerStatsCollector.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.Stats.ServerStatsCollector", "Summary": "

Thread-safe, in-memory accumulator for server-activity counters that have no natural\ndatabase timestamp to query after the fact — session connects/disconnects, moderation\nactions, and peak concurrency. The periodic stats-report job snapshots and resets these\nonce per reporting window. Registered as a singleton; every increment is lock-free so it\nis safe to call from hot paths (connect/disconnect).

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.Stats.ServerStatsReportService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.Stats.ServerStatsReportService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.Stats.ServerStatsReportService", "Summary": "

Background job that periodically snapshots server activity over a window, logs it as\npretty-printed JSON (which also surfaces in the live server-logs room), and persists it to\nthe database for historical trends. Interval and retention are configurable via the "Stats"\nsection; the default cadence is every 6 hours.

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.Stats.StatsCounters.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.Stats.StatsCounters.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.Stats.StatsCounters", "Summary": "

Immutable snapshot of the counters held by .

\n" }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.Stats.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.Stats.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.Stats", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.UserService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.UserService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services.UserService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Services.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Services.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Services", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Setup.DataMigrationService.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Setup.DataMigrationService.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Setup.DataMigrationService", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Setup.DatabaseSetup.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Setup.DatabaseSetup.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Setup.DatabaseSetup", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Setup.FirstRunSetup.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Setup.FirstRunSetup.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Setup.FirstRunSetup", "Summary": null }, { "type": "ManagedReference", "source_relative_path": "_api_meta/server/EchoHub.Server.Setup.yml", "output": { ".html": { "relative_path": "api/server/EchoHub.Server.Setup.html" } }, "version": "", "Uid": null, "IsMRef": true, "Title": "EchoHub.Server.Setup", "Summary": null }, { "type": "Conceptual", "source_relative_path": "api/client-articles/index.md", "output": { ".html": { "relative_path": "api/client-articles/index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "api/client-articles/toc.yml", "output": { ".html": { "relative_path": "api/client-articles/toc.html" }, ".json": { "relative_path": "api/client-articles/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "api/core-articles/index.md", "output": { ".html": { "relative_path": "api/core-articles/index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "api/core-articles/toc.yml", "output": { ".html": { "relative_path": "api/core-articles/toc.html" }, ".json": { "relative_path": "api/core-articles/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "api/index.md", "output": { ".html": { "relative_path": "api/index.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "api/server-articles/index.md", "output": { ".html": { "relative_path": "api/server-articles/index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "api/server-articles/toc.yml", "output": { ".html": { "relative_path": "api/server-articles/toc.html" }, ".json": { "relative_path": "api/server-articles/toc.json" } }, "version": "" }, { "type": "Toc", "source_relative_path": "api/toc.yml", "output": { ".html": { "relative_path": "api/toc.html" }, ".json": { "relative_path": "api/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/architecture.md", "output": { ".html": { "relative_path": "articles/architecture.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/configuration.md", "output": { ".html": { "relative_path": "articles/configuration.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/docker.md", "output": { ".html": { "relative_path": "articles/docker.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/encrypted-rooms.md", "output": { ".html": { "relative_path": "articles/encrypted-rooms.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/encryption.md", "output": { ".html": { "relative_path": "articles/encryption.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/getting-started.md", "output": { ".html": { "relative_path": "articles/getting-started.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/irc-gateway.md", "output": { ".html": { "relative_path": "articles/irc-gateway.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/messages-and-attachments.md", "output": { ".html": { "relative_path": "articles/messages-and-attachments.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/moderation.md", "output": { ".html": { "relative_path": "articles/moderation.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/notification-sounds.md", "output": { ".html": { "relative_path": "articles/notification-sounds.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "articles/toc.yml", "output": { ".html": { "relative_path": "articles/toc.html" }, ".json": { "relative_path": "articles/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "articles/tui-guide.md", "output": { ".html": { "relative_path": "articles/tui-guide.html" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Agent/README.md", "output": { "resource": { "relative_path": "auriondocs/Agent/README.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Agent/repo-map.md", "output": { "resource": { "relative_path": "auriondocs/Agent/repo-map.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Agent/symbol-graph.json", "output": { "resource": { "relative_path": "auriondocs/Agent/symbol-graph.json" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/index.md", "output": { "resource": { "relative_path": "auriondocs/Code/index.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/AppOrchestrator.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/AppOrchestrator.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Commands/CommandHandler.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Commands/CommandHandler.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Config/ClientConfig.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Config/ClientConfig.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Config/ConfigManager.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Config/ConfigManager.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Program.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Program.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ApiClient.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ApiClient.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/AsyncRunner.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/AsyncRunner.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/AudioPlaybackService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/AudioPlaybackService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/AvatarHelper.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/AvatarHelper.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ClientEncryptionService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ClientEncryptionService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ClipboardFiles.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ClipboardFiles.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ClipboardImage.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ClipboardImage.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ConnectionManager.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/ConnectionManager.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/EchoHubConnection.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/EchoHubConnection.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/NativeFolderPicker.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/NativeFolderPicker.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/NotificationSoundService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/NotificationSoundService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/OutgoingAttachment.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/OutgoingAttachment.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/PathSetup.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/PathSetup.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/RoomKeyProtector.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/RoomKeyProtector.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/RoomKeyStore.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/RoomKeyStore.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/UpdateBackupService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/UpdateBackupService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/UpdateChecker.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/UpdateChecker.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Services/UserSession.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Services/UserSession.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Themes/Theme.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Themes/Theme.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/Themes/ThemeManager.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/Themes/ThemeManager.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatColors.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatColors.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatLine.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatLine.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatListSource.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatListSource.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatMessageManager.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatSegment.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/ChatSegment.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/RenderHelpers.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/RenderHelpers.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/WelcomeBanner.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Chat/WelcomeBanner.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/AudioPlayerDialog.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/AudioPlayerDialog.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/ChannelPasswordDialog.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/ConnectDialog.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/CreateChannelDialog.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/ProfileEditDialog.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/ProfileViewDialog.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/ProfileViewDialog.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/SearchDialog.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/StatusDialog.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/UpdateConfirmDialog.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Dialogs/UpdateConfirmDialog.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Helpers/DroppedFileParser.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Helpers/EmojiHelper.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Helpers/EmojiHelper.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Helpers/HexColorHelper.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Helpers/HexColorHelper.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Helpers/NickColorHelper.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/Helpers/NickColorHelper.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/ListSources/ChannelListSource.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/ListSources/SearchListSource.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/ListSources/SearchListSource.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/ListSources/UserListSource.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/ListSources/UserListSource.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Client/UI/MainWindow.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Client/UI/MainWindow.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Constants/HubConstants.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Constants/HubConstants.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Constants/MessageConventions.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Constants/MessageConventions.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Constants/ValidationConstants.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Constants/ValidationConstants.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IChannelService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IChannelService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IChatBroadcaster.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IChatBroadcaster.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IChatService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IChatService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IEchoHubClient.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IEchoHubClient.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IMessageEncryptionService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IMessageEncryptionService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IUserService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Contracts/IUserService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/AccountDtos.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/AccountDtos.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/AuthDtos.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/AuthDtos.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/ChatDtos.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/ChatDtos.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/CommonDtos.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/CommonDtos.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/InviteDtos.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/InviteDtos.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/ModerationDtos.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/ModerationDtos.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/ProfileDtos.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/ProfileDtos.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/ServerDtos.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/DTOs/ServerDtos.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/Attachment.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/Attachment.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/AttachmentKind.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/AttachmentKind.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/Channel.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/Channel.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/ChannelMembership.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/ChannelMembership.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/InviteCode.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/InviteCode.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/Message.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/Message.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/MessageType.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/MessageType.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/RefreshToken.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/RefreshToken.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/ServerRole.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/ServerRole.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/ServerStatsReport.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/ServerStatsReport.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/User.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/User.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Models/UserStatus.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Models/UserStatus.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Security/RoomCrypto.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Security/RoomCrypto.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Services/AsciiBannerService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Services/AsciiBannerService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Services/FileValidationHelper.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Services/FileValidationHelper.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Core/Services/ImageToAsciiService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Core/Services/ImageToAsciiService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcBroadcaster.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcBroadcaster.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcClientConnection.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcClientConnection.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcCommandHandler.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcCommandHandler.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcGatewayService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcGatewayService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcMessage.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcMessage.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcMessageFormatter.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcMessageFormatter.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcNumericReply.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcNumericReply.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcOptions.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcOptions.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcServiceExtensions.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server.Irc/IrcServiceExtensions.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Auth/JwtTokenService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Auth/JwtTokenService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Config/ServerLogsOptions.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Config/ServerLogsOptions.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Config/SpamOptions.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Config/SpamOptions.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Config/StatsOptions.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Config/StatsOptions.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Config/UploadLimits.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Config/UploadLimits.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/AuthController.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/AuthController.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/ChannelsController.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/ChannelsController.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/FilesController.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/FilesController.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/InvitesController.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/InvitesController.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/ModerationController.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/ModerationController.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/ServerController.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/ServerController.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/UsersController.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Controllers/UsersController.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Data/EchoHubDbContext.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Data/EchoHubDbContext.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Hubs/ChatHub.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Hubs/ChatHub.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Program.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Program.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ChannelService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ChannelService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ChatService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ChatService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/DirectoryClaimStore.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/DirectoryClaimStore.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/FileCleanupService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/FileCleanupService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/FileStorageService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/FileStorageService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/LinkEmbedService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/LinkEmbedService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/MessageEncryptionService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/MessageEncryptionService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/MuteExpirationService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/MuteExpirationService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/PresenceTracker.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/PresenceTracker.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ServerDirectoryService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ServerDirectoryService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ServerLogs/ServerLogsService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ServerLogs/ServerLogsService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ServerLogs/ServerLogsSink.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ServerLogs/ServerLogsSink.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ServerLogs/ServerLogsStreamService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/ServerLogs/ServerLogsStreamService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/SignalRBroadcaster.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/SignalRBroadcaster.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/SpamGuard.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/SpamGuard.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/Stats/ServerStatsCollector.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/Stats/ServerStatsCollector.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/Stats/ServerStatsReportService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/Stats/ServerStatsReportService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Services/UserService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Services/UserService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Setup/DataMigrationService.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Setup/DataMigrationService.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Setup/DatabaseSetup.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Setup/DatabaseSetup.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Server/Setup/FirstRunSetup.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Server/Setup/FirstRunSetup.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Code/src/EchoHub.Tests/Irc/TestHelpers.cs.md", "output": { "resource": { "relative_path": "auriondocs/Code/src/EchoHub.Tests/Irc/TestHelpers.cs.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/README.md", "output": { "resource": { "relative_path": "auriondocs/README.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/Architecture.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/Architecture.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/Onboarding.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/Onboarding.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/Workflows/controller.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/Workflows/controller.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/Workflows/service.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/Workflows/service.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/api-client-authentication.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/api-client-authentication.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/attachments-transfer.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/attachments-transfer.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/clipboard-tools.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/clipboard-tools.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/command-handling.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/command-handling.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/encryption-roomkeys.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/encryption-roomkeys.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/real-time-connection.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/real-time-connection.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/ui-theming.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/ui-theming.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/Synthesis/update-management.md", "output": { "resource": { "relative_path": "auriondocs/Synthesis/update-management.md" } }, "version": "" }, { "type": "Resource", "source_relative_path": "auriondocs/index.html", "output": { "resource": { "relative_path": "auriondocs/index.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/index.md", "output": { ".html": { "relative_path": "changelog/index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "changelog/toc.yml", "output": { ".html": { "relative_path": "changelog/toc.html" }, ".json": { "relative_path": "changelog/toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.1.0.md", "output": { ".html": { "relative_path": "changelog/v0.1.0.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.1.1.md", "output": { ".html": { "relative_path": "changelog/v0.1.1.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.0.md", "output": { ".html": { "relative_path": "changelog/v0.2.0.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.1.md", "output": { ".html": { "relative_path": "changelog/v0.2.1.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.10.md", "output": { ".html": { "relative_path": "changelog/v0.2.10.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.11.md", "output": { ".html": { "relative_path": "changelog/v0.2.11.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.12.md", "output": { ".html": { "relative_path": "changelog/v0.2.12.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.13.md", "output": { ".html": { "relative_path": "changelog/v0.2.13.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.14.md", "output": { ".html": { "relative_path": "changelog/v0.2.14.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.15.md", "output": { ".html": { "relative_path": "changelog/v0.2.15.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.16.md", "output": { ".html": { "relative_path": "changelog/v0.2.16.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.17.md", "output": { ".html": { "relative_path": "changelog/v0.2.17.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.2.md", "output": { ".html": { "relative_path": "changelog/v0.2.2.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.3.md", "output": { ".html": { "relative_path": "changelog/v0.2.3.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.4.md", "output": { ".html": { "relative_path": "changelog/v0.2.4.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.5.md", "output": { ".html": { "relative_path": "changelog/v0.2.5.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.6.md", "output": { ".html": { "relative_path": "changelog/v0.2.6.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.7.md", "output": { ".html": { "relative_path": "changelog/v0.2.7.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.8.md", "output": { ".html": { "relative_path": "changelog/v0.2.8.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "changelog/v0.2.9.md", "output": { ".html": { "relative_path": "changelog/v0.2.9.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/authentication.md", "output": { ".html": { "relative_path": "flows/authentication.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/channels.md", "output": { ".html": { "relative_path": "flows/channels.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/connection.md", "output": { ".html": { "relative_path": "flows/connection.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/flows.md", "output": { ".html": { "relative_path": "flows/flows.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/media.md", "output": { ".html": { "relative_path": "flows/media.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/messaging.md", "output": { ".html": { "relative_path": "flows/messaging.html" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "flows/moderation.md", "output": { ".html": { "relative_path": "flows/moderation.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "flows/toc.yml", "output": { ".html": { "relative_path": "flows/toc.html" }, ".json": { "relative_path": "flows/toc.json" } }, "version": "" }, { "type": "Resource", "source_relative_path": "images/hue_icon.svg", "output": { "resource": { "relative_path": "images/hue_icon.svg" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "index.md", "output": { ".html": { "relative_path": "index.html" } }, "version": "" }, { "type": "Toc", "source_relative_path": "toc.yml", "output": { ".html": { "relative_path": "toc.html" }, ".json": { "relative_path": "toc.json" } }, "version": "" }, { "type": "Conceptual", "source_relative_path": "todo.md", "output": { ".html": { "relative_path": "todo.html" } }, "version": "" } ], "groups": [ { "xrefmap": "xrefmap.yml" } ] }