Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· kamo-shared-library
Repositori query untuk exact- cocok, daftar paged, penerimaan
· kamo-shared-library
Tambahkan dateLastViewed ke MediaSesi Anggota untuk penanda waktu penerimaan
· kamo-shared-library
Tambah bendera yang Aksesorik Dikembalikan untuk kendali akses per- lampiran
· kamo-marketing
Distinguish actively-translating vs queued messages
The translation queue was already sequential, but every queued bubble rendered "Translating…". Now the single in-flight message shows "Translating…" with a pulsing dot and the rest show "Pending Translation…" with a static dot, so the visitor can see the queue progressing.
· kamo-internal
Distinguish actively-translating vs queued messages
The streaming queue was already strictly sequential (one fetch at a time), but every queued message rendered "Translating…" because they all shared the same pendingTranslation flag. Split that into two states: the single message currently in flight shows "Translating…" with a pulsing dot, all the other queued messages show "Pending Translation…" with a static dot. Live (just-arrived) messages are translated alone and start in the active state.
· kamo-marketing
Show error icon when a message fails to translate
When the per-message translate call returns translated:false, errors out, or times out, the chat bubble now renders an AlertTriangle icon in red with tooltip "Failed to translate message." instead of silently leaving the bubble in the original language.
· kamo-internal
Show error icon when a message fails to translate
When the per-message translate call returns translated:false, errors out, or times out, the chat bubble now renders a small red ErrorOutline icon in place of the translate badge with tooltip "Failed to translate message." instead of silently leaving the bubble in the original language. The flag is reset whenever the user picks a new language so a re-attempt can succeed without the stale error sticking around.
· kamo-marketing
Stream translations newest-first for visitor history
When the visitor lands on a non-English locale and the support chat has existing English messages, every bubble flagged needsTranslation by the backend now shows a "Translating…" placeholder while a streaming queue fills them in one at a time, starting from the newest message. A generation counter prevents stale queues from clobbering current state.
· kamo-internal
Stream message translations newest-first on language switch
When the user picks a new language (or opens an existing chat in a language different from the messages' source), every bubble that needs translation immediately renders a "Translating…" placeholder and the translations stream in one at a time starting from the most recent message and working backwards. This includes the user's own past messages — anything authored in a different language than the viewer is now translated. A generation counter cancels in-flight queues if the user changes language again.
· kamo-marketing
Auto-translate visitor and agent messages
Live agent replies arriving in a language other than the visitor's URL locale now show a "Translating…" bubble while the TranslateService call resolves, then swap to the translated text with a Languages badge whose tooltip shows the source language and the original message. Visitor messages are tagged with the URL locale on send so the agent's chat can translate them into the agent's profile language. Messages loaded into history are translated up front via the new ?lang=<locale> query param on /api/chat/support.
· kamo-internal
Translate chat messages into the viewer's language
Adds a "My Language" flag picker in NavTop (left of the email tool, separated by a vertical rule). Selecting a language writes back to Member.language and syncs the locale cookie so the entire UI switches; it also broadcasts an event that any open ChatBox uses to re-fetch its history in the new language. ChatBox now fetches messages with ?lang=<locale>, renders translated bubbles with a small Translate badge whose tooltip shows the original text and source language, and shows a "Translating…" placeholder for live messages until the TranslateService call returns. The send path tags every outbound message with the author's locale so other viewers can translate it on demand.
· APIService
Proxy support-message translate endpoint
Adds a passthrough route for the new MediaService endpoint that translates a single support-chat message into the visitor's URL locale. The marketing-side chat widget hits **************** which the gateway now forwards to MediaService with the standard public-chat auth and rate-limit checks.
· MediaService
On-demand translation for chat and support messages
Captures the source language for every chat / support message and adds an optional ?lang=XX param on the message-fetch endpoints plus a per-message POST /translate endpoint. MediaService now talks to TranslateService via TranslationServiceClient, and MessageTranslationService caches results in MediaObjMsgTranslation so the same translation is never paid for twice. Wires the same flow into the public-chat (visitor) path: visitors send their URL locale as sourceLanguage, and the agent / visitor sides each pull translations into their own preferred language. Adds the translate-service secret to the MediaService deployment so the new client can authenticate.
· kamo-shared-library
Translation cache for chat messages
Adds the MediaObjMsgTranslation entity (one row per (message, language) pair) and an optional sourceLanguageId column on MediaObjMsg so chat messages can be translated on demand and re-served instantly to other viewers in the same language. ChatMessageDto carries sourceLanguageId so live recipients know whether they need to translate. MediaService.createMessage gains an overload that takes the authoring language, falling back to Member.language for legacy callers.
· kamo-internal
Tambahkan Percakapan / Dokumen / Catatan / KB / HRS bagian
Indeks / pengaturan tidak menunjukkan daerah ke bukan-admin karena setiap daerah yang ada digated pada hak admin (CONFIGURE _ SISTEM, Mengelola _ * _ SETTINGS, Manage _ ACCESS _ RULES). Seorang anggota tim biasa dengan hanya hak dukungan melihat persis 3 kartu (Topics, Analytics, Scheduled Dukungan) dan tidak ada yang lain. Tambahkan bagian Pribadi yang selalu terlihat (Profil saya, Audio & Video, Aktivitas Akun, dan Plan & Billing pada organ anak) yang menghubungkan ke layar sendiri / pengaturan / anggota / < myId > - jadi pengaturan tidak pernah kosong, Terlepas dari hak tingkat org-. Juga permukaan previously-hilang Chat / Docs / Catatan / Pengetahuan Daerah Base / HRS - masing-masing digated pada tanda fitur org yang berhubungan plus yang sesuai Kelangsangan _ * _ SETTINGS benar - untuk mencocokkan yang didedikasikan / settings / features / < app > halaman yang sudah ada bagi aplikasi tersebut.
· kamo-internal
Rotasi pembukaan tujuan berdasarkan rasio aspek viewport
Frame tujuan sekarang tilts oleh ata2 (viewport H, viewport) sehingga terbuka sisi kanan bertujuan menuju viewport diagonal - untuk 16: 9 monitor membuka titik ~ 29 ° selatan timur; untuk potret itu menunjuk lebih dekat ke selatan. Membaca cara pengguna secara alami membuang kepala dari sebagian besar layar kembali ke sudut atas kiri. Fisika: tabrakan gawang sekarang berjalan dalam koord-LOKAL. Setiap dilemparkan pusat kepala + kecepatan berputar ke dalam bingkai lokal, AABB yang ada tabrakan terhadap aksis - dinding selaras berjalan tak berubah, maka apapun push-out dan refleksi kecepatan berputar kembali ke ruang dunia. The pemeriksaan zona skor juga dilakukan dalam koord lokal sehingga kepala benar-benar memasuki pembukaan (diputar) masih mencetak skor. Visual: frame SVG + entry-side glow hidup di dalam rotasi kontainer; perayaan overlay (GOAL!) dan caption REMOVE duduk di luar rotasi sehingga teks tetap dapat dibaca. Nona-goyang sekarang Berosilasi di sekitar sudut dasar bukan nol. Sudut tujuan dihitung ulang pada viewport ubah ukuran melalui sebuah negara setter, dengan a paralel ref sehingga throw RAF membaca nilai terbaru setiap frame tanpa membuat ulang callback.
· kamo-internal
Jatuh- untuk- menghapus tujuan dengan skor / miss perayaan
A 132 × 132 frame gol muncul di upper- kiri ketika kepala berada di tarik atau active- lempar, ofset 56px dari sudut sehingga kepala dapat miss past or behind it. Tiga dinding padat (atas, kiri, bawah) bertindak sebagai elastic bouncing permukaan (0.65 restitusi); sisi kanan adalah terbuka Masuk. Sebuah X merah tebal di panel belakang membuat "menghapus" maksud tidak salah, dan indikator entri berdenyut menandai sisi terbuka. Ketika pusat kepala dilemparkan melintasi ke zona skor, itu dihapus dari peta throw, jendela alat yang mendasari ditutup melalui alat: tutup, dan kepala dihapus melalui removeHead. Radial hijau Flash, 18- partikel ledakan emas / oranye, dan GOAL memantul! overlay Tembak pada skor. Ketika kepala dilempar hanya memantul dari setiap tujuan dinding (Debounced by 350ms so a single fail doesn 't spam event), the goal getar merah dan LESS! Pukulan overlay masuk Stabilitas: kehidupan tabrakan tujuan seluruhnya di dalam lingkaran RAF (tidak ada pertengkaran sistem spring-), dan HexHeadGoalZone memiliki semua perayaan negara internal - mesin hanya kebakaran peristiwa. Murni fitur addititif; bukan-throw drag / drop paths tidak berubah.
· kamo-internal
Melemparkan fisika dengan pool- tabel tabrakan dan komet jejak
Flicking a head past the throw threshold launches it across the viewport di bawah eksplisit fisika (gesekan, ujung memantul, kepala-vs- kepala elastik Tabrakan). Tetes lambat masih mendarat persis di mana dirilis. Sementara kepala dalam gerakan... gaya jalur api mengikutinya. Lemparan dibagi dengan kecepatan rilis (> = 650 px / s rata-rata atas terakhir ~ 110 ms) dan total jarak seret (> = 30 px) sehingga cepat posisi kembali tidak pernah sengaja memicu lemparan. Buta adalah capped di 3200 px / s untuk menjaga edge- of- deteksi berkedip jinak. The throw RAF loop drive motion- value menulis langsung melalui .set () - melewati framer-motion springs ketika dalam penerbangan - dan diri berhenti ketika Semua kepala di bawah batas kecepatan. placeHomeCluster dan softPushCluster melewati jangkar apapun saat ini dalam peta throw sehingga Sistem musim semi tidak pernah memerangi integrator fisika. Struck heads detach from any cluster, prompt to a solo cluster, and bergabung dengan simulasi melempar dengan impuls diimparasi oleh tabrakan. Merender trail: SVG lapis dengan radial- gradien bara sepanjang baru-baru ini posisi, mixing -blend- mode: layar untuk penandaan cahaya, blur CSS tunggal filter untuk kelembutan - arcade estetika, dekat-nol biaya CPU.
· kamo-internal
Gunakan server-minted OTK untuk beralih ke org baru
Lebih suka otk dikembalikan oleh POST / api / keamanan / org selama follow- up / api / keamanan / masuk - sebagai bundaran - perjalanan. Server sekarang menanamkan pemilik segar sesi sebagai bagian dari penciptaan org, jadi post- buat redirect ke yang baru org / validate adalah deterministik - tidak ada ras dengan pembuatan domain, tidak ada diam-masuk sebagai kegagalan meninggalkan pencipta pada sesi parent- org.
· SecurityService
Pemilik mint * * * + OTK pada pembuatan org
Setelah CreateOrganisasi Pemilik, mint segar * * terikat dengan pemilik baru Anggota Tim dan kembalikan OTK nya bersama id / anggota. Tanpa ini pencipta tetap pada sesi parent- org - hak terbatas dan adalah Pemilik Organisasi = false - jadi halaman pengaturan anak org baru muncul gated dan Plan & Billing tersembunyi sampai mereka secara manual masuk kembali.
· kamo-shared-library
Self- menyembuhkan perintah COMP tanpa penjelasan pada startup
Pada @ PostConstruct, pindai semua perintah COMP APPROVED dan penyediaan apapun yang kekurangan AccountSubscription. Idempotent - find-or-create berarti aman untuk lari berulang kali.
· kamo-internal
Pindahkan status tersedia dropdown ke sisi kiri sebelum My Businesses
Mengaktifkan ulang pil status dari batang aksi kanan ke bagian penyambutan kiri, menempatkannya antara pemisah salam dan My Businesses dengan pembagi. Hapus aturan vertikal yatim piatu yang sebelumnya memisahkan status dari tombol ikon.
· kamo-internal
Tambahkan target Organisasi ke Tipe Sub-Urutan dan CreateSubscription Order
· SecurityService
Tambahkan provision- comp titik akhir untuk mengaktifkan langganan COMP dari urutan yang disetujui
POST * * * * * * * * * * * * * * * * panggilan * * * * * * * * * * * * * * kemudian invalidates hak untuk target org melalui Layanan Entitlements.
· kamo-shared-library
CoMP perintah persetujuan auto- ketentuan AccountSubscription dan lisensi assigns
- Subscription Order: tambahkan target Organisasi (nulable FK ke orgs) - * * * * * * * * * * * * * * * menambah target dari string Organisasi - AccountRepositori: tambahkan findByPrimaryAnggota _ Id untuk pencarian akun oleh anggota pemegang - Subscription Service: injeksi billing repos; provisionComplascription creation / upserts * * * * * * * * * * * * * * * Anggota Subscription Member, dan ACTIVE AccountLicense untuk anggota target-org; Persetujuan panggilan untuk metode pembayaran COMP; pengaktifan Ordo untuk penyediaan retroaktif dari perintah COMP APPROVED yang telah ada
· kamo-internal
Ganti click -to-open dengan aksi popover + size control
Mengklik kepala hex sekarang membuka kaca dipopover morfisme dengan aksi kontekstual daripada langsung membuka jendela alat nya. Anggota kepala obrolan mengekspos: Buka Chat, Lihat Akun, Email, Undang ke Rapat, Panggilan (ketika kedua belah pihak memiliki ekstensi VOIP terdaftar); tool heads mengekspos Buka < toolName >. Menu Ukuran sub- memungkinkan pengguna memilih kecil / sedang / besar untuk kepala tertentu (bertahan setiap anggota melalui baru Penyimpanan Anggota UiPreference) ditambah slider skala global yang mempengaruhi setiap hex kepala pada mesin ini (bertahan di LocalStorage). Alat jendela sekarang lebar / tinggi lengkung ke viewport sehingga mereka tidak pernah membuka sebagian off - layar bahkan dengan jendela shrunken.
· InitializerService
Tambah tabel MEMBER _ UI _ PREFERENCES (urutan 60)
Idempotent CREATE untuk backup penyimpanan per- anggota UI- Hex- head popover ukuran pemilih dan masa depan per- anggota pengaturan UI. Skema mencerminkan konvensi EmbRecordState (is _ active, date _ created, date _ updated) digunakan di tempat lain dalam model data.
· SecurityService
Add MemberUiPreferenceController for per-member UI settings
Backs the new hex-head popover size selector and any future small per- member UI preference. Endpoints under /api/security/members/me/ui- preferences resolve the member from the OTK session and read/write JSON values keyed by an opaque prefKey string.
· kamo-shared-library
Add MemberUiPreference entity for per-member UI prefs
Generic per-member UI preference store (memberId, prefKey, JSONB value) for small persisted UI settings. First consumer is the hex-head popover size selector.
· kamo-internal
Wire FeaturesManager ke platform subscription untuk duding anak-org
Fitur Manajer telah memanggil legacy * * * * * * * * * * * * * * * * yang melempar (fallback ungated) daripada membaca platform nyata berlangganan. Sekarang panggilan * * * * * * * * * * * * * * yang queries akar org Perintah berlangganan perdagangan untuk keanggotaan pemanggil. Ketika pemanggil memiliki urutan COMP APPROVED pada root org, semua gerbang fitur terbuka sebagai diduga untuk comped child-org admins.

Alam semestamu menunggu.
Mulai gratis dalam beberapa menit. Tambahkan produk kapanpun Anda siap — tidak ada migrasi, tidak ada login baru.
Gratis selamanya — tidak diperlukan kartu kredit