Salta al contenuto
KAMOUniverse

Changelog

Cosa c'è di nuovo.

Ogni miglioramento alla piattaforma, come si spedisce.

  1. · kamo-shared-library

    Domande di repository per la ricerca esatta, elenco di pagine, ricevute

  2. · kamo-shared-library

    Aggiungi la dataUltima vista a MediaSessionMember per i timestamp di ricezione

  3. · kamo-shared-library

    Add isAccessSegnala avocata per il controllo dell'accesso per attacco

  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

    Aggiungi Personal + Chat/Docs/Notes/KB/HRS sezioni

    L'indice /settings non ha mostrato sezioni ai non amministratori perché ogni la sezione esistente è stata gated su un diritto di amministratore (CONFIGURE SYSTEM, MANAGE * SETTINGS, MANAGE ACCESS RULES). Un membro del team regolare con solo diritti di supporto hanno visto esattamente 3 carte (Architetture, Analytics, Pianificato Supporto) e nient'altro. Aggiungi una sezione personale sempre visibile (Il mio profilo, Audio & Video, Attività Account, e Piani & Fatturazione su bambini ogs) che collegano al le schede dello spettatore /settings/member/hymyId> — così le impostazioni non sono mai vuote, indipendentemente dai diritti di livello org. Inoltre superficie la Chat / Docs / Note / Conoscenza Sezioni di base / HRS — ciascuna gated sul corrispondente org caratteristica bandiera più il diritto MANAGE * SETTINGS appropriato — per abbinare il dedicato /settings/features/ <app> pagine che esistono già per quelle applicazioni.

  16. · kamo-internal

    Apertura dell'obiettivo ruotata in base al rapporto aspetto viewport

    Il telaio dell'obiettivo ora si inclina di atan2(viewportH, viewportW) così il suo aperto lato destro mira verso la diagonale viewport — per 16:9 monitora i punti di apertura ~29° a sud di est; per ritratto indica più vicino a A sud. Legge il modo in cui gli utenti naturalmente gettano le teste dalla maggior parte del schermo verso l'angolo in alto a sinistra. Fisica: la collisione dell'obiettivo ora corre in coordi goal-LOCAL. Ogni gettato centro della testa + velocità ruotare nella cornice locale, la AABB esistente la collisione contro le pareti allineate dell'asse scorre invariata, quindi qualsiasi la riflessione push-out e la velocità ruota indietro nello spazio mondiale. The controllo zona punteggio è anche fatto in coordi locali in modo da una testa entrare nel (rotato) apertura ancora punteggi. Visuale: il telaio SVG + il bagliore lato ingresso live all'interno di una rotazione contenitore; overlay di celebrazione (GOAL!/MISS!) e la capzione REMOVE sedersi fuori della rotazione così il testo rimane leggibile. Miss-shake adesso oscilla intorno all'angolo di base invece di zero. L'angolo di gol è ricomputato su viewport ridimensiona tramite un setter di stato, con un ref parallelo in modo che il lancio RAF legge l'ultimo valore ogni frame senza ricreare il callback.

  17. · kamo-internal

    Obiettivo di lancio-to-remove con punteggio/miss celebrazioni

    Un telaio porta 132×132 appare nella parte superiore sinistra quando una testa è in solo-drag o attivo-doccia, offset 56px dall'angolo in modo che le teste possono manca il passato o dietro di esso. Tre pareti solide (in alto, a sinistra, in basso) agiscono come superfici elastiche di rimbalzo (0.65 restituzione); il lato destro è aperto entrata. Un audace X rosso nel pannello posteriore rende l'intento "remove" inconfondibile, e un indicatore di ingresso pulsante segna il lato aperto. Quando un centro della testa gettata attraversa la zona di punteggio, è rimosso dalla mappa di lancio, la finestra di strumento sottostante è chiusa tramite strumento: chiudi, e la testa viene rimossa via removeHead. Un radiale verde lampeggiare, 18 particella oro / arancio scoppiare, e un rimbalzante GOAL! overlay fuoco sul punteggio. Quando una testa lanciata semplicemente rimbalza da qualsiasi parete di obiettivo (debounced by 350ms in modo che un singolo fallimento non eventi spam), l'obiettivo scuote rosso e un MISS! Colpi di overlay. Stabilità: la collisione dell'obiettivo vive interamente all'interno del loop RAF (nessuna conformazione del sistema primaverile), e HexHeadGoalZone possiede tutti celebrazione stato internamente — il motore solo incendi eventi. Purissima funzione additiva; i percorsi di trascinamento/goccia non di lancio sono invariati.

  18. · kamo-internal

    Gettare la fisica con collisioni da tavolo da biliardo e comet trail

    Flicking una testa oltre la soglia di lancio lo lancia attraverso il viewport sotto fisica esplicita (frizione, rimbalzo del bordo, elastico testa-vs-testa collisioni). Le gocce lente atterrano ancora esattamente dove rilasciato. Mentre la testa è in movimento un sentiero di fuoco in stile arcade lo segue. La velocità di rilascio (>= 650 px/s mediati sopra la velocità di rilascio) ultima ~110 ms) e distanza totale di trascinamento (>= 30 px) in modo rapido preciso riposizione mai accidentalmente innesca un lancio. La magnitudine è bloccata 3200 px/s per mantenere la dome di flick di bordo di rilevamento. Il loop di lancio RAF guida moto-valore scrive direttamente via .set() — bypassare le molle di framer-motion durante il volo — e autostops quando tutte le teste cadono sotto la soglia di stop-speed. placeHomeCluster e softPushCluster saltare qualsiasi ancora attualmente nella mappa di lancio in modo da sistema di primavera non combatte mai l'integratore di fisica. Le teste di arresto staccano da qualsiasi cluster, promuovono a un cluster solo, e unire la simulazione di tiro con l'impulso impartito dalla collisione. Rivestimento del sentiero: strato SVG con bracci radiali lungo i recenti posizioni, mix-blend-mode: schermo per lucentezza additiva, singolo CSS blur filtro per morbidezza — estetica arcade, costi della CPU vicino zero.

  19. · kamo-internal

    Utilizzare OTK a mente server per passare in un nuovo org

    Preferire l'otk restituito da POST /api/security/org sul follow-up /api/security/enter-as round-trip. Il server ora inganna un proprietario fresco sessione come parte della creazione org, in modo che il post-create reindirizzare al nuovo org's /validate è deterministico — nessuna gara con creazione di dominio, no silenzioso enter-as fallimento lasciando il creatore sulla sessione genitore-org.

  20. · SecurityService

    Mint proprietario ***+OTK su org creare

    Dopo creareOrganizationOwner, menta un fresco *** legato al nuovo proprietario TeamMember e restituire OTK insieme a id/members. Senza questo creatore rimane sulla sessione di genitore-org — diritti limitati e isOrganizationOwner=false — così la pagina delle impostazioni del nuovo org del bambino appare gated e Plans & Billing è nascosto fino a quando non entrano manualmente.

  21. · kamo-shared-library

    Auto-guarigione ordini COMP non previsti all'avvio

    Su @PostConstruct, eseguire la scansione di tutti gli ordini APPROVED COMP e fornire qualsiasi cosa manca un AccountSubscription. Idempotent — trovare o creare mezzi sicuri correre più volte.

  22. · kamo-internal

    Spostare lo stato di disponibilità a sinistra prima di My Businesses

    Riloca la pillola di stato dalla barra di azione destra alla sezione di benvenuto sinistra, ponendola tra il separatore di saluto e My Businesses con un divisore. Rimuove la regola verticale ora orfana che in precedenza separava lo stato dai pulsanti dell'icona.

  23. · kamo-internal

    Aggiungi targetOrganizationId a SubscriptionOrder tipi e creareSubscription Ordine

  24. · SecurityService

    Aggiunta del punto finale del provision-comp per attivare l'abbonamento COMP dall'ordine approvato

    # POST # chiamate ******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************.

  25. · kamo-shared-library

    Auto-provisioni dell'approvazione dell'ordine COMP ContoSubscription e assegna la licenza

    - AbbonamentoOrdina: aggiungere targetOrganization (nullable FK to orgs) # Add to targetOrganizationId string # - AccountRepository: aggiungere findByPrimaryMember Id per la ricerca account da parte del titolare - Servizio di sottoscrizione: repos di fatturazione iniettato; provisionCompSubscription crea/upserts E' il momento giusto. SubscriptionMember e ACTIVE AccountLicense per il membro target-org; approvaOrdina lo chiama per il metodo di pagamento COMP; nuova attivazioneCompOrdina per la fornitura retroattiva degli ordini APPROVATI COMP esistenti

  26. · kamo-internal

    Sostituisci click-to-open con popover azione + controlli di dimensione

    Fare clic su una testa di esagonale ora apre un popover vetro-morfismo lucido con azioni contestuali invece di aprire immediatamente la finestra degli strumenti. Membro chat teste espongono: Chat aperta, Visualizza Account, E-mail, Invita a Meeting, Chiamata (quando entrambe le parti hanno un'estensione VOIP registrata); teste degli strumenti esporre Open <toolName>. Un sub-menu formato consente all'utente di scegliere piccolo/medio/ grande per quel capo specifico (perso per membro tramite il nuovo MemberUiPreference store) più uno slider scala globale che colpisce ogni testa hex su questa macchina (persisted in localStorage). Finestre utensili ora larghezza del morsetto/altezza alla vista in modo da non aprire in parte fuori schermo anche con finestre shrunken.

  27. · InitializerService

    Aggiungi la tabella MEMBER UI PREFERENCEs (ordine 60)

    CREATO Idempotent per il supporto generico del negozio UI-preference il selettore esagonale e le impostazioni future dell'interfaccia utente. Schema rispecchia la convenzione EmbRecordState (is active, date created, date updated) utilizzato altrove nel modello di dati.

  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 alla piattaforma di abbonamento per gating

    Manager stava chiamando legacy. getta (ritorno registrato) invece di leggere l'abbonamento reale della piattaforma. Ora chiama E' una cosa che si fa sentire. ordini di abbonamenti di commercio per l'adesione cross-org del chiamante. Quando chiamante ha un ordine COMP APPROVATO sulla radice org, tutte le porte della caratteristica aperto come previsto per gli amministratori di Facebook.

Il tuo universo ti sta aspettando.

Aggiungi i prodotti quando sei pronto: nessuna migrazione, nessun nuovo login, nessuna richiesta di pagamento.

Gratis per sempre — nessuna carta di credito richiesta