{ "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
One file to upload as part of a message. For end-to-end encrypted channels the stream\nis already ciphertext,
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
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.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
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.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.ApiResponseA file attached to a message.
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.
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.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.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.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.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.
\nDesign: 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.
\nDerivation: 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.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.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 Uploads section preserves the historical built-in limits.
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.
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.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.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/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.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" } ] }