Mergi la conținut
KAMOUniverse

Jurnal de schimbări

Ce e nou.

Fiecare îmbunătățire a platformei, pe măsură ce se livrează.

  1. · kamo-shared-library

    Interogatorie depozit pentru găsirea exact-meci, lista paged, chitanțe

  2. · kamo-shared-library

    Adaugă dataUltimaVizualizare la MediaMembrie pentru timbrul de primire

  3. · kamo-shared-library

    Add isAccessRepoked flag for per-attachment access control

  4. · 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.

  5. · 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.

  6. · 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.

  7. · 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.

  8. · 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.

  9. · 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.

  10. · 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.

  11. · 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.

  12. · 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.

  13. · 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.

  14. · 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.

  15. · kamo-internal

    Adaugă personal + Chat/Docs/Note/KB/HRS secțiuni

    Indexul/setărilor nu a arătat nicio secţiune pentru non-admini pentru că fiecare secțiunea existentă a fost deschisă pe un dreapta admin (CONFIGURE SISTEM, Manage * settings, managere access rules). Un membru regulat al echipei numai cu drepturile de suport văzut exact 3 cărți (Topics, Analytics, Programate Sprijin) şi nimic altceva. Adăugați o secțiune personală întotdeauna vizibilă (Profilul meu, Audio & Video, Activitatea contului și planurile și facturarea pe orgurile copiilor) care se leagă de propria /setări /membru / <myId> file indiferent de drepturile de nivel org. De asemenea, suprafaţa chat-ul anterior lipsă / Docs / Note / Cunoaştere Secțiuni de bază / HRS plus MANAGE * SETTINGS right pagini care există deja pentru aceste aplicații.

  16. · kamo-internal

    Rotește deschiderea obiectivului pe baza raportului de aspect al viewport

    Cadrul de gol acum înclinați de atan2 (vizualportH, viewportW) astfel încât deschis partea dreaptă vizează spre viewport puncte de deschidere ~29° sud de est; pentru portretul se arată mai aproape de Sud. Citește modul în care utilizatorii arunca în mod natural capete din cea mai mare parte a ecran înapoi spre colţul din stânga sus. Fizica: ciocnirea golului rulează acum în coardele gol-LOCAL. Fiecare aruncat centrul capului + viteza roti în cadrul local, AABB existent coliziunea împotriva pereților aliniați la axe nu se schimbă, apoi orice Push-out și reflexia de viteză se rotește înapoi în spațiul mondial. ă Scor zona de verificare se face, de asemenea, în coords locale astfel încât un cap cu adevărat introducerea (rotat) de deschidere încă scoruri. Vizual: cadrul SVG + strălucirea de intrare-side trăiesc într-o rotație container; celebrare suprapuse (GOAL!/Miss!) și titlul REMOVE Stai în afara rotației astfel încât textul rămâne lizibil. Miss-shake acum oscilează în jurul unghiului de bază în loc de zero. Unghiul golului este rezumat pe viewport resize prin intermediul unui setter de stare, cu un ref paralel astfel încât arunca RAF citește ultima valoare fiecare cadru fără a recrea apelul.

  17. · kamo-internal

    Throw-to-remove goal with score/miss celebrations

    A 132×132 gol cadru apare în partea de sus-stânga ori de câte ori un cap este în solo-drag sau activ-aruncă, offset 56px de colț astfel încât capetele pot Dor de trecut sau în spatele ei. Trei ziduri solide (sus, stânga, jos) acționează ca suprafete elastice sarituri (0,65 restituire); partea dreapta este deschisa Intrare. Un X roşu îngroşat în panoul din spate face ca "eliminarea" intenţiei Nemişcat şi un indicator pulsant marchează partea deschisă. Când centrul unui cap aruncat trece în zona de scor, este eliminat din harta arunca, fereastra instrument de bază este închis prin instrument:închide, și capul este eliminat prin scoateHead. Un radial verde Flash, 18-particule aur / explozie portocaliu, și un gol viguros! suprapusă Foc la scor. Când un cap aruncat doar sare de pe orice perete gol (debuzate de 350ms astfel încât un singur eșec nu spam evenimente), scopul se agită roșu și un DRS! Overlay pumni inch Stabilitate: coliziunea scop trăiește în întregime în interiorul bucla arunca RAF (nici un conflict de primăvară-sistem) și HexHeadGoalZone deține toate celebrare stat pe plan intern motorul doar incendii evenimente. Pur caracteristica aditivă; căile de tragere/drop fără aruncare sunt neschimbate.

  18. · kamo-internal

    Arunca fizica cu coliziuni piscină-table și traseul cometei

    Lovind cu capul de pragul aruncării, îl lansează prin teleportare. sub fizica explicita (frigitare, saritura margine, cap-vs-cap elastic coliziuni). Picături lente încă aterizează exact unde a fost eliberat. În timp ce capul este în mişcare o urmă de foc în stil arcade o urmează. Aruncarea este poartată de ambele viteze de eliberare (> = 650 px/s medie peste ultima ~110 ms) și distanța totală de tragere (> = 30 px) astfel încât o precizie rapidă Repoziţia nu declanşează niciodată accidental o aruncare. Magnitudinea este limitată la 3200 px/s pentru a păstra marginea-detectie flick-uri îmblânzi. Bucla de aruncare RAF conduce valoarea de mișcare scrie direct prin .set() ocolirea arcurilor cu cadru de mișcare în timpul zborului și auto-oprește atunci când toate capetele coboară sub pragul de viteză. loculHomeCluster și softPushCluster sări orice ancoră în prezent în harta arunca astfel încât Sistemul de primăvară nu luptă niciodată cu integratorul fizicii. Capete lovite se detaşează de orice grup, promovează un grup solo şi să se alăture simulării aruncării cu impulsul transmis de coliziune. Reglarea traseului: strat SVG cu jgheab radial gradient de-a lungul recentelor poziții, modul amestec-amestec: ecran pentru strălucire aditivă, vedere CSS unică filtru pentru moliciune arcade estetic, aproape zero CPU cost.

  19. · kamo-internal

    Utilizați serverul-mentat OTK pentru a comuta în org nou

    Preferați otk returnat de Post /api/security/org peste follow-up /api/security/enter-as round-trip. Serverul acum menteaza un proprietar nou sesiune ca parte a creației org, astfel încât post-create redirecționare către noul org /validat este determinist intrare tăcută-ca eșec lăsând creatorul pe sesiunea părinte-org.

  20. · SecurityService

    Proprietar menta ***+OTK pe org crea

    După ce a creatOwner de organizare, menta un *** proaspăt legat de noul proprietar Membru al echipei și returnați OTK-ul său alături de ID/membri. Fără asta... creator rămâne pe sesiunea părinte-org isOrganizationOwner= Gaated and Plans & Billing este ascuns până când reintră manual.

  21. · kamo-shared-library

    Comenzi COMP nepreluate la pornire

    Pe @PostConstruct, scanează toate comenzile APROBAT COMP și furnizează orice lipsa unui AccountSubscription. Idempotent Alerga în mod repetat.

  22. · kamo-internal

    Mută starea disponibilității în partea stângă înainte de My Businesses

    Relocă pilula de stare de la bara de acțiune dreapta la secțiunea de bun venit stânga, plasarea-l între separatorul de salut și My Businesses cu un separator. Elimină regula verticală acum-orfană care a separat anterior starea de butoanele de pictogramă.

  23. · kamo-internal

    Adaugă țintăOrganizareId la tipuri de comenzi Abonare și creareAbonare Ordine

  24. · SecurityService

    Adăugați criteriul de evaluare pentru a activa abonamentul COMP din ordinul aprobat

    POST *************** apeluri *********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************.

  25. · kamo-shared-library

    Comanda COMP auto-provizionare Cont Abonaţi şi atribuie licenţă

    - SubscriptionOrder: add targetOrganization (nullable FK to orgs) - *************** adaugati tintaOrganizationId string - AccountRepository: add findByPrimaryMember Id for account search up by holder member - SubscriptionService: injecteaza repo-uri de facturare; providementCompSubscription creates/upserts Nu-ţi face griji. SubscriptionMember, and SUBSTANcy AccountLicense for the target-org member; aprobOrder calls it for COMP payment methods; new activedCompOrder for retroactivy provideing of existing APROBATE COMP comments

  26. · kamo-internal

    Înlocuiți clic-la-deschis cu acţiune popover + dimensiunea de control

    Faceți clic pe un cap hex deschide acum o sticlă lustruit-morfism popover cu acțiuni contextuale în loc să-și deschidă imediat fereastra de instrumente. Membru chat-uri expuse: Open Chat, View Account, Email, Invita la Întâlnire, Apel (atunci când ambele părți au o extensie înregistrată VOIP); capete de unelte Expunere Open <toolName>. Un sub-meniu de dimensiune permite utilizatorului alege mic / mediu / mare pentru acel cap specific (persistent per membru prin intermediul noului Magazinul de referinţă pentru statele membre) plus un slider global care afectează fiecare cap hex pe această mașină (persistent în Storage locale). Ferestre unelte acum lățimea/înălțimea pensei la viewport astfel încât acestea să nu se deschidă parțial off- ecran chiar și cu ferestre mici.

  27. · InitializerService

    Adaugă tabel MEMBRU UI PREFERENȚE (Ordona 60)

    CREATE de substitut pentru suport generic pe membru UI-preference magazin selectorul de dimensiuni hex-cap popover și setările viitoare pe membru UI. Schema reflectă Convenția EmbRecordState (is activă, data creată, data actualizată) utilizată în altă parte în modelul de date.

  28. · 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.

  29. · 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.

  30. · kamo-internal

    Wire FeaturesManager la abonament platforma pentru gating copii-org

    Caracteristici Manager a fost de asteptare mostenire *** *** *** *** *** care aruncări (retragere în mișcare) în loc să citească abonamentul real al platformei. Acum sună *************** care pune intrebari despre root org ordinele de abonament la comerț pentru calitatea de membru interorg apelantului. Când Apelantul are un ordin COMP aprobat pe root org, toate porțile caracteristică deschise ca asteptate pentru copii-org admins comped.

Universul tău te așteaptă.

Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.

Gratuit pentru totdeauna — nu este necesar un card de credit