チェンジログ
何が新しいの?
プラットフォームのすべての改良 それが出荷される
· EmailService
IMAP/SMTP バックアップ送信、フォルダ、クラウドスタブの検索
IMAP/SMTP デリゲーションパターンを AbstractImapBackedCloudProvider に抽出 Zoho、IceWarp、Exchange、Google Workspace、Microsoft 365の拡張機能 お問い合わせ ベースクラスはMailSender、MailReader、フォルダManager、および 電子メールImapService、EmailSmtpService、SearchServiceの上部にあるSearchProvider — 同じサービスKamoMail は、以下のような機能を使用します。 - SMTP の資格情報を持つ任意のクラウド プロバイダーの send/saveDraft 作業。 - すべてのフォルダ操作(作成/名前変更/削除/移動/setFlags/ deleteMessageはIMAPで動作します。 - 既存のSearchServiceに委任する検索。 - 読書操作およびインライン cid: レンダリングは流れ続けます 共有メールImapServiceパーサ。 各コンクリートプロバイダの残りのスタブ — RealtimeNotifier (場所) 適用される)、 DomainManager、MailboxProvisioner — 本当に必要 プロバイダーネイティブ管理 API(Microsoft Graph、Google Admin SDK、Zoho Admin) このコードベースに配線されていない API、EWS、IceWarp 管理者)。 詳しくはこちら stub は、実装する API を命名する TODO スタイルのコメントを処理します.
· EmailService
IMAP-backed MailReader クラウド provider のスタブ
Zoho、IceWarp、Exchange、Google Workspace、およびMicrosoft 365はすべてIMAPを公開します。 そのため、EmailImapService を通じて、各クラウドprovider の stub の MailReader メソッドをそれぞれ自動化します。 unsupportedOperationException をスローする代わりに。 これは: - IMAP の認証情報のみでメッセージの読み込みをブロック解除する 構成(今日の最も一般的な展開)。 - 新しい contentId/inline の添付メタデータを均一に流れさせます すべてのプロバイダは、EmailImapServiceが単一のパーサであるためです。 - インライン画像エンドポイントは、任意のプロバイダの引用語句を解決してみましょう。 残りのクラウドproviderメソッド(送信、フォルダ管理、プロビジョニング) ドメインのオプ)はまだサポートされていないOperationExceptionです。 provider-native API と、ここのスコープにはありません。 また、MailContext.toMailCredentials() を追加し、プロバイダ(および既存のプロバイダ) KamoMailReader アダプターは、単一の認証情報変換ヘルパーを共有します.
· kamo-internal
レンダリングインライン cid: 新しいメールサービスエンドポイントによる画像
メッセージがインライン部品(contentIdを運ぶ各)を公開する場合、メール renderer は <img src="cid:..."> をリライトしました。 マウント時の参照 ************************************************************ Cache-Control を転送すると、ブラウザはフェッチされたイメージをキャッシュします。 - メール添付ファイル(会話タイプとローカルコピーの両方) MessageBrowser は contentId とインラインフィールドを付与します。 - SanitizedEmailRendererは、inlineImageBaseUrl + inlineContentIdsを受け入れます。 cid: 既知の cids を書き換え、残りの部分を非表示にする imgs onerror ハンドラは、他の壊れたイメージを非表示にします。 - サニタイザーに住んでいた専用のシドストリッピングが再変換されます — メッセージのコンテキストが存在するレンダー時にリライティングが所属しています。 - ThreadDetailView と MessageBrowser で表示される添付ファイルリスト インラインパーツをフィルタアウトするので、埋め込まれたシグネチャロゴが現れない ダウンロード可能な添付ファイル.
· EmailService
インラインイメージをサーブ MIME の部品および表面 コンテンツ ID メタデータ
Render <img src="cid:..."> インライン部分を公開することで、メッセージ UI で HTML ボディ参照。 - AttachmentInfo は contentId (角度ブラケットなし) とインラインフラグを獲得します。 - parseMultipart と getAttachment は 1 つの isAttachmentPart の述語です そして再帰的な歩行者、従ってインライン部品は複数の部分/関連の中でネストしました キャプチャ(インデックスは2つのメソッドに整列する) 以前は、親の添付ファイルリストを上書きします。 また、ネストされた構造物に実際の添付ファイルをドロップします。 - 添付ファイルは現在、非インライン部品のみによって駆動されます — 署名ロゴなし すべてのメッセージでペーパークリップを点灯させる。 - 双方の新しいエンドポイント GET **************************** EmailController と SharedMailboxMailController ; cid を経由して解決します。 parsed AttachmentInfo, コンテンツDisposition の部分をストリーム: インライン と Cache-Control: プライベート, max-age=3600.
· KlusterServices
Add プライシング@kamocrm.comメールボックスと外部IMAPノードポート
- 新サービスメール/dovecot-imap-external (NodePort 30143 -> 143) など IMAPは、$NODE:30143でクラスターの外から到達することができます。 - mysql-initでシードprices@kamocrm.comは、新しいDBブートストラップ メールボックスを再作成します。ライブ行は既にMySQLに存在しています.
· kamo-internal
Redesign ChatsList 行 — エレガントなレイアウト、水平スクロール、オンライン ドット、未読のバッジ、相対的なタイムスタンプ
· MediaService
Add GET /sessions/{guid}/members endpoint with display-name priority
Returns member list with name resolved via usernameAlias → fullName → alias → username, matching the same priority as the chat sessions list. This feeds ChatBox.loadMembers() so the tool window title bar can show the correct preferred name.
· kamo-internal
Derive and dispatch tool window title from session members
Adds onMembersChange callback to ChatBox; ChatTool derives the title (single name for 1-on-1, or '<name> (+N more)' for groups) and dispatches tool:title to update the ToolWindowShell title bar dynamically.
· kamo-internal
Lift search above tab strip, share query across Members and Chats tabs
Moves the search TextField from MemberList into NavTopPanel above the Tabs. Passes searchQuery as a prop to both MemberList and ChatsList so a single field filters both tabs. ChatsList filters rows by matching any non-self member's name.
· MediaService
チャットリストの更新のためのACTIVITYペイロードで拡張未読放送
· kamo-internal
NATS未読チャネルによるライブチャットリストの更新
· kamo-internal
インタラクションセンターパネルでメンバー/チャットのためのタブ
· kamo-internal
無限スクロールでチャットリスト、IntersectionObserverで仮想化
· kamo-internal
グループチャットを開始するためのMemberListで複数選択
· kamo-internal
アバタースタック、タイトルポップアップ、メンバーピッカー付きチャットヘッダー
· kamo-internal
ドラッグドロップ、エンドアタッチメントチップ、マルチライン入力対応
· kamo-internal
アバター、ホバーアクション、見られたインジケーターでメッセージバブル
· kamo-internal
インラインアタッチメントレンダリングとライトボックス
· kamo-internal
セッション、レシート、添付ファイル用のクライアントタイプとホック
· kamo-internal
プロキシは、検索または作成、メンバー、添付ファイル、イメージングプロキシ、ミュート、レボケのルートをルート
共有の抽出************************ヘルパーは、app/lib/mediaServiceUrl.ts.ts. プロキシ ルートを追加します。: 発見または作成, メンバー, 領収書, 添付ファイル (ストリーミング), ミュート, 見直し,
· MediaService
Configmap entries for attachment limits and multipart
· MediaService
Paged chat list with previews, members, unread counts
that returns ChatListRowDto rows including last message preview, member summaries, per-session unread counts, and ownLastViewedAt.
· kamo-shared-library
Add countUnreadAfter(guid, memberId, since) to MediaObjRepository
Needed by paged chat-list endpoint to compute per-session unread counts when ownLastViewedAt is a LocalDateTime pointer rather than a message UUID.
· MediaService
Real NATS publisher impl and READ_RECEIPT broadcast
· MediaService
Per-viewer mute endpoint and message filter
· kamo-shared-library
MediaSessionMuteRepositoryに****************を追加
· MediaService
Imaging proxy with HTTP Range support and per-member download tracking
· kamo-shared-library
Add MediaObjImgDownloadRepository with existsByObjImgIdAndMemberId
Required by ImagingProxyService (Task 10) to deduplicate per-member download tracking without a full table scan.
· kamo-shared-library
Add CHAT_ATTACHMENT assoc type with imaging-chat-attachments bucket
· kamo-shared-library
Service methods for exact-match find/create, member add, mute, revoke, read
