チェンジログ
何が新しいの?
プラットフォームのすべての改良 それが出荷される
· KlusterServices
独自にスケーラブル(HPA、マルチノード)
単一ノード ピンを取除き、1 Pod モデルのキャッシュに転換して下さい従って pods はできます 任意のノードでスケジュールし、HPA(min 1 / max 4, CPU 75%, deliberate)を追加 スケールアップにより、モデルのコールドスタートが遅くなります。 whisper-asr は共有された転写です ミーティング録画とVOIP録画/ボイスメールの両方のバックエンド.
· KlusterServices
Guacamoleクライアント接続ステータステキストをKamoDesktopにリブランドする
オーバーライド **************************** なので、 'Guacamoleに接続...'画面(および関連するステータス)は、KamoDesktopを読み込みます.
· MediaService
インジェスト、保持/クォータ、貯蔵の使用法、要約のパイプラインを記録する
- MeetRecordingController:内部(X-Internal-Auth)は、jibriをエンドポイントします。 finalize.sh 投稿が録画を終了しました。 - MeetRecordingService: アップロードされた録音をパーオーガニ(ミージメット録画)に、 persists MeetingRecording メタデータ, org ストレージ クォータを強制します。 (最も古い), postMeetingSummaryEnabledのとき — 概要パイプラインを実行します: transcribe (EmailService ミーティング概要テンプレート) - MeetRecordingRetentionSweep:過去の保持を記録するスケジュールされた削除。 - MeetConfigController: 実際の設定ストレージメーターの /recording-usage を取得します。 - application.yml:変換/ai/emailベースURL +内部のauthの秘密。 要求(ops):KamoInitializerはMEETING RECORDINGSを作成するために動く; メニュー 値は、MediaService、jibri、および コンバージョンサービス.
· EmailService
ミーティングのテンプレートプレビュー用のvarsのサンプル
新規ミーティングのテンプレートのsampleVariablesケースを追加して、スチュワード プレビュー UI は現実的なコンテンツをレンダリングします.
· kamo-shared-library
会議概要の観音テンプレート
"meeting-summary" トランザクションテンプレートを追加(+ ブランドの HTML を サブジェクト) {{roomName}} と 生 {{summaryHtml}}) で、CANONICAL KEYS で登録します。 オルガごとの種。 ポストミーティングAIサマリー配信で使用 また正しい loader のテストの主計算.
· KlusterServices
Prosody のモデレーター モジュール、ウィスパー ザー、ジブリの録音のアップロード
- Meet-prosody:カスタムプラグインのConfigMapをバージョン管理(キャプチャ) 既存の token verification の no-op オーバーライドは、バンドから作成されました) canonical mod token moderation モジュールを追加します。 メニュー JWT `moderator` クレームを作る authoritative — 会員は所有者になり、ゲスト/匿名は所有者をつかむことができません。 - ウィスパー・アサー:自己ホストされたスピーチ・ツー・テキスト(高速・ホスパーCPU、外部キーなし) ポスト・ミーティングの転写のため。 - ミート・ジブリ:finalize.shは、メディアサービスに完成した録画をアップロードしました ************************ X-Internal-Auth で上陸 MinIO + ドライブ保持/クォータ + 要約。 秘密はオプションなので、ジブリはまだ unset で起動します.
· ConversionService
ポストミーティングの要約のための記録転写エンドポイント
POST /api/conversion/meet/transcribe(X-Internal-Auth):アップロードされた正規化 新しい添加剤FfmpegServiceヘルパーを介して16kHzモノWAVへの会議録画、 セルフホスト型のウィスパーサーサービスに転送し、{トランスクリプト}を返します。 kamo.services.whisper.urlからURLをホイスパーします.
· kamo-internal
スケジュールされた会議のためのカレンダーの統合+実記録の貯蔵のメートル
- calendarIntegrationEnabled:時、予定されているクラブハウス会議も 作成者のカレンダー(既存のカレンダーシステム経由)に追加 認証 /meet/join リンク 参加者のリマインダーは、 バックエンドのスイーパー, ので、重複のアッセンブリーメールなし. - 記録設定:ストレージメーターは、REAL per-orgの使用状況をここから表示します GET /api/meet/recording-usage(削除されたプレースホルダーの交換).
· kamo-shared-library
MeetingRecording のエンティティティ + キャプチャされた録音のためのリポジトリ
新しいMEETING RECORDINGSテーブル(例えば、会議の ref、部屋、Minoのバケツ/オブジェ キー、 サイズ、期間、キャプチャ/有効期限タイムスタンプ、サマリーステータス) — 親レコード 完成したJibriの録音ファイル、運転の保持/クォータおよびポスト会議のため 要約処理。 次のKamoInitializerの実行でテーブルが作成されます.
· kamo-internal
マーケティングアプリ、設定ハブ、カンバ材料
ファーストクラスのorg-enableアプリをマーケティングし、Canva-poweredを出荷する 材料の経験。 アプリの有効化: - AppType.MARKETINGミラー、Organization.isMarketingゲッター - ゲートマーケティングnav(navRegistry)+権利セクション(permissionAppSections) 組織の SecurityRoleManager - FeaturesManagerのマーケティングカード(/settings/account?tab=apps) 設定: - 新しい /settings/features/marketing ハブ(一般 / ソーシャルメディアプロバイダー / Canva) - ソーシャルメディアプロバイダをCRM設定からマーケティングに移動 - 更新される3つのnavの場所(設定の着陸、設定メニュー、設定ボタンアイコン); ソーシャルタイムラインの空のリンクをリセット キャンバス: - CanvaIntegrationManagerの設定タブ+プラットフォームのcanva ProviderDef OAuth レジストリ (+ ロゴ) - /api/canva/* プロキシ (status、connect-start、設計、輸出、輸出プロキシ、 接続解除 → メディアサービス - /marketing/materials: ライブラリーグリッド(MATERIALS assoc)、アップロード、 Create-in-Canva, Import-from-Canva, return-nav 自動インポート
· ConversionService
マーケティング資料のビデオポスターフレームサムネイル
Canva MP4エクスポート(および任意のビデオアップロード)はDocs PDFパスをスキップし、取得 失敗の代わりに、単一のffmpegポスターフレームサムネイル( thumb p0.png)。 メニュー ビデオカテゴリブランチ メニュー
· MediaService
CanvaはOAuth +の設計/輸出バックエンドを接続します
- CanvaApiClient: PKCE の承認、トークン交換/返金/ユーザー、 デザイン(作成/リスト)、ジョブのエクスポート、バイトのフェッチ - CanvaTokenService:暗号化されたパーメンバートークン(PlatformSecretCipher)、 単一フライトのプロアクティブなリフレッシュ(Canvaリフレッシュトークンはシングルユース/回転) - CanvaOAuthController (permit-all): 意図した → /start → /callback を接続して下さい、 帰路着陸 - CanvaController(authed):状態、接続開始、作成/リストの設計、 エクスポート(create+poll+cache)、バイトエクスポートプロキシ、切断
· kamo-shared-library
Canva の統合 + org 対応アプリとしてのマーケティング
メニュー — プラットフォーム Canva Connect クライアント登録 - ImageAssocType.MATERIALS(13、画像素材) - オルガマーケティングアセットバケット メニュー サービスタイプ - ServiceType.MARKETING(24) → 必須/有効であるため、実際のアプリになります (FeatureController は、CRM などの org ごとに自動提案) - CanvaConnection のエンティティティエント + リポ: 暗号化された (access+refresh) トークンごとに
· KlusterServices
Guacamole json-auth SSO + KamoDesktop rebrandを有効にする
- 共有デスクトップからguacamoleのJSON SECRET KEY(オプション)は、秘密が有効 バンドルされた guacamole-auth-json は、God-SSO のリンクを検証します。 - kamo-branding拡張子(title=KamoDesktop、kamocrmロゴ+ファビコン) デスクトップ/guacamole/branding/ .jar に、バイナリ configmap として出荷され、シード initContainerを使ってGUACAMOLE HOMEへ。 - CI は、両方の名前空間で共有署名キーを作成します。 (guacamole の desktop-sso, GUAC SIGNING KEY の秘密からセキュリティサービス用の guac-sso; 決してコミットしません.
· kamo-internal
神のみのKamoDesktopアイコン(Linux + Windows)が自動接続セッションを開く
アナリティクスの左にある2つのnavアイコンは、神のみに示されています(isGodは追加しました) NavGateContext(NavGateContext)は、 各 fetches は、SecurityService から SSO のリンクをショート ライブし、 KamoDesktop ゲートウェイを新しいウィンドウに、そのインスタンスに自動接続します。 コミットを使用する ******************** マーク.
· SecurityService
神メンバーのためのKamoDesktop SSOトークンエンドポイント
メニュー (god-eligible only) ミント エクステンションごとの5分のguacamole-auth-jsonトークン(HMAC-SHA256 + AES-128-CBC) ワイヤーフォーマット)およびKamoDesktopのための自動ログイン+自動接続URLを戻して下さい ゲートウェイ。 署名キー + RDP パスワードは guac-sso の秘密から注入しました; 決して コミット (blank-safe: SSO は構成されるまで無効にとどまります).
· kamo-internal
Org-scopedルーム名、ルーム名形式、カレンダーカモ会議、リマインダー開始、i18n設定
- useMeeting/MeetingDialog: ルーム名は org トークンによって名前空間化されているため、2 orgsは同じProsodyの会議に衝突し、orgの名誉を認めません roomNameFormat (RANDOM 対 DISPLAY NAME RANDOM) 会員のエイリアスを使用する。 - MeetingComposer(カレンダー):「Kamo Meeting」ボタンは、org-scopedルームを生成します イベント URL を /meet/join クリックタイム OTK リンクにセットするので、カレンダー +リマインダーの受取人が確認されたメンバーとして署名されます。 - MeetReminderPopup: /topic/meet/reminder/{memberId} (メディアサービス) への購読 sweeper と "meeting start" のトーストを結合ボタンで表示します。 共有チャットWSのPresenceWrapper。 - 設定タブを満たします:ハードコードされた英語のトースト/エラー文字列を一緒に置き換えます メニュー
· MediaService
予定開始リマインダー+ゲストリンク
- MeetingReminderSweep:リアルタイムを発射する@Scheduledスイーパー "meeting start" 招待されたメンバーにリマインダーを呼び起こします(スタート - メモMinutesBefore) on**************** でミーティングのスケジュールを遷移 デュースに。 過去の開始時刻を1時間以上経過した会議は、 リマインダー(バックフィルスパムなし) クライアントは認証されたjoinリンクを構築します 独自の原点から。 -********************は、ゲストLinkExpiryHoursを表彰しました:会議 org の構成されたウィンドウよりも古い (スケジュールされた開始時に選択) 作成)は、結合できないように処理されます(0 = 期限切れ).
· kamo-internal
チャットリストでメンバーの可用性を表示します。 タブをディレクトリに名前を変更します
1:1 チャット列は、カウンターパートのライブプレゼンス+可用性を表面化 ディレクトリタブが同じように — 同じ useAvailability/usePresence ソースと MemberItem(dot + topcase label)と同じ色/ラベル、時脈動 オンライン、オフラインで灰色)、ツールチップ付き。 グループチャットは「誰かの」を維持します オンライン「アバタードット;社会的/サポート行は変更されません。 メンバータブは「Directory」(i18nのみ)に改名され、クリアーも チャット「メンバー」サブタブグループと命名するコリジョン.
· KlusterServices
堅くされたKubeVirtのリモート・デスクトップ+ Guacamoleの入り口
デプロイワークフローで、GitOps-applied をフルリモートデスクトップスタックに追加します。 - KubeVirt + CDI はデプロイ時にインストールします (pinned-stable release URL) - デスクトップ1:Kubuntu 24.04 VM、8 vCPU / 16Gi / 500Gi ロングホーンのブロック ディスク, マスカレードネット(ネイティブクラスターDNS)、xrdp KDEセッション、クラウドインitインストール クロム、VSコード、NetBeans、テムリンJDK 21+17、ヘッドランプ、ケイト、LibreOffice Firefoxを削除 - Apache Guacamole (guacamole + guacd + Postgres config DB) で デスクトップ.kamocrm.com;guacdはk1m1でホストネットワークを実行しますので、WoL-broadcastをすることができます RDP は 192.168.4.0/22 LAN に直接アクセスし、 VM を経由してアクセスします。 クラスターFirstWithHostNet DNS - LANのWindows PC (192.168.4.44、MAC f4:4d:30:62:8a:68)は関係として加えました Guacamole ネイティブ Wake-on-LAN (接続上のマジックパケット、30秒待ち) - 端の堅くなること: Traefik TLS +堅いデスクトップrate-limit +保証ヘッダー、 プラス Guacamole 組み込み per-IP brute-force ban - auto-cert:デスクトップ.kamocrm.comがSTATIC DOMAINS +クロスnsミラーに追加 cert-managerの問題/tls-desktop-kamocrm-comをデスクトップnsに更新 - Credentials: ユーザーの 'sage'; CI の秘密 DESKTOP PASSWORD から注入されるパスワード 導入時間(envsubst/sed + 衝動的な秘密) - 決して約束しません
· kamo-internal
チャットグループ用のサブタブ、最後に開いたタブを記憶
チャットリストは、マルチセレクトの丸いチップの列でフィルタリング チャットタブの下の場所。 単一選択のサブタブバーに置き換える (グループごとに1つのタブ:チームメンバー/メンバー/ソーシャル/サポート) 親メンバー/チャットタブなので、選択したグループのリストが全体に埋め込まれます コンテンツエリア - アクティブバケットのセットの代わりに単一のActiveBucket; 今フェッチサーバー 選択したカテゴリのみをプルします。 - チームメンバーにデフォルトで、メンバーごとに最後の開いたタブを主張します。 デバイス)ui-preferencesストア(キーチャットActiveBucket)を介して、 保存されたタブが解決するまで最初のフェッチで、直接ロードします.
· kamo-internal
電子メールが構成されていない場合の説明; ゲートの構成
/messages inbox は org のときにも、そのフルシェルをレンダーしました。 電子メールプロバイダがなかったり、会員がメールボックスがなかったり、すべて無事に失敗した API 呼び出し。 共有された useEmailAvailability のホックを加えて下さい、電子メールかを解決します 可能で、もしそうでなければ、なぜ(provider が設定されていないとメールボックスなし) 現在のメンバーが自分の権利に基づいて修正をセルフサービスできるかどうか。 - MessageBrowserは、代わりにエレガントなEmailNotConfiguredパネルを表示します 空の受信トレイ, コピー付き + 理由とメンバーに適応するCTA 権利(MANAGE EMAIL SETTINGS のメールプロバイダの設定、または MANAGE EMAIL ACCOUNTS のメールボックスタブ。 それ以外の場合は管理者に拒否)。 - MailButtonはメールが完全に準備されるまで「新しいメールを構成する」ことを無効にします 理由固有のツールチップ; NavToolButtonは、無効/ツールチップ項目のサポートを獲得します。 - `messages/` gitignore ルールをリポジトリのルートに固定するため、また停止します。 app/components/messages/ を無視します。(新しいファイルをサイレントに落とします).
· kamo-internal
全タイプ チャットリスト+ブラウザタブの注意
サブタブのチャットは、メンバー、グループ、サポート、ソーシャルの会話をリストします 複数選択フィルタ(チームメンバー/ メンバー/ソーシャル/サポート。最初の2つは、orgのカスタムラベルを使用する。 チームメンバーとメンバーは、カウンターパートメンバーで分割されます。サポート行 相手が代理人であるか否かを示す;各行は、その ネイティブツールウィンドウ(チャット/サポート/ソーシャル) TabAttention: ファビコンバッジ+フラッシュドキュメントを追加します。 そこにタイトル チャットタイプ(赤のカウント)または保留中の受信拒否のメッセージ (amber ⚡ ボルト, リード/CRM アイコンをマッチング; 優先します). 読む 既存のUnreadContext + LeadAlertContext なので、新しいバックエンドはありません.
· MediaService
会員/サポート/社会セッションを通じたチャット配信の統一
GET /api/media/sessions/chat は `categories` フィルター (chat) を受け付けています。 サポート、社会;デフォルトすべて)、および1つのグローバルに最も有効な優先順位を戻して下さい、 特定のクエリをマージします。 各行は運びます: - sessionType(CHAT|SUPPORT|SOCIAL)+会員[].memberType クライアント 内部チャットをチームメンバーとメンバーに分割できます。 - ticketId + supportRole (AGENT|REQUESTOR — サポートは双方向) サポート行とプロバイダー + 接続 社会的行のタイトル、 そのため、各行がネイティブツールウィンドウを開きます.
· kamo-shared-library
サポート+ソーシャルチャットセッションのPagedクエリ
ユニファイド・インタラクション・センター・チャット・リストには、すべての種類を含めることができます。 - サポート(TYPE ID=2):会員が割り当てられたエージェントまたは リクエスト(リクエストは、チケットID + 行のエージェントIDを返す)。 - SOCIAL(TYPE ID=3):会員が所有する社会的なつながりに関するセッション 組織.
· kamo-internal
終わりのリードビューのヘッダーの行為+コールバック
・ヘッダ:電話(ワーク)/電話(個人)に電話をかける (会員が登録されていない場合、退会)メールが開きます 作曲、テキスト -> comms/texts、Note はルールとblinks で左に移動し、 最後の再割り当て以来、メモが配置されます。 タスクボタンを削除します。 - ステータス:無効な変更ステータスメニューをドロップし、ステータスの編集を解除します。 STATUS > サブスタタスを選ぶ必要があるSUB-STATUS行を追加します。 変更時に更新を有効にします。 - コールバック: ダイアログ(日付/時刻 + タイムゾーン + コメント)、保留/残余リスト マークコンタクト/キャセルのプロンプトと、リードApi +プロキシの詳細はタブ スケジュール/リスト/リスト/リストのためのルート.
· EmailService
会員のカレンダーイベントを作成/作成する内部エンドポイント
POST /api/internal/calendar/events (X-Internal-Auth gated) がメンバーを解決 → user -> プライマリ カレンダー(必要に応じてデフォルトを編集)してイベントを作成します。 SecurityService がメンバーのカレンダーにリードコールバックをミラーリングするために使用されます.
· SecurityService
リードコールバックエンドポイント(schedule/list/resolve)
メニュー コントローラー + サービス: 主張します コールバック、投稿スケジューリング/アウトカムノートをリードのメディアストリームに投稿し、 メールサービスによるスケジューリングメンバーのカレンダーにコールバックをミラーリング 内部カレンダーエンドポイント(最善の努力).
· kamo-shared-library
LeadCallback のエンティティティティ、ステータスエンム、リポジトリの追加
リードビューコールバック機能:リード所有のコールバックレコード (PENDING/CONTACTED/CANCELED) は鉛を、柔らかい参照の先取りしました ミラー化されたメールサービス カレンダー イベント.
· kamo-internal
MemberIds が開いたグループチャットのセッションを作成します
ChatTool は props.memberIds を無視しました: グループが空に現れます userId と no sessionGuid なので 1:1 createSession は初期と ウィンドウはセッションがなかった。 MemberIds が ChatTool を提示する際の今 POST /sessions/chat/find-or-create でセッションを解決します。 (同じエンドポイント ChatBox の初期MemberIds パスの使用; バックエンドの追加 呼び出し者自体)。 会員リストは安定したソート文字列としてキー化されますので、 効果は配列のアイデンティティで再ファイアされず、解決された guid フロー グループウィンドウがGUID-anchoredであるので、既存の書き込みバックを通して バックアップ.
