Changelog
Cosa c'è di nuovo.
Ogni miglioramento alla piattaforma, come si spedisce.
· kamo-internal
Tipi di attività, la sessione e lead client, e due volte nella zona del membro
· kamo-shared-library
Colonne di attività, link, commenti, tipo Posta in arrivo, link di note e autorizzazione
· kamo-shared-library
Informativa sulla firma dell'IA sulla configurazione del campo di firma
· KlusterServices
Pinned, hash-verified modello fetch e un warm-up che tiene il pod fino a quando ogni modello è residente
Il riscaldamento scende anche un modello il cui carico è fallito: Speaches 0.9.0-rc.3 mantiene il ingresso di un carico fallito, quindi la prossima startupProbe otterrebbe 409 e /api/ps elencare un modello che non ha mai caricato.
· kamo-shared-library
Diritti dell'intelligenza artificiale, tipo di modello ARTIFICIAL, eventi di accesso AI-log
· kamo-internal
Libreria client AI e proxy BFF
Il cliente per lo stato di un membro dell'IA, pausa/resume/retire, assumendo la lista di controllo e retry, sedili, controlli della forza lavoro dell'organizzazione e la piattaforma uccidere Interruttore, più quattro relè a SecurityService. Un relè rifiuta un segmento . o .. con 404 prima dell'inoltro: encodeURIComponent lascia i punti intatti e l'URL le costruzioni di fetch li risolverebbero sopra il prefisso relèed.
· kamo-shared-library
Limitato di ricorrenza, coder di promemoria e entità EXDATE; default zona UTC
· TranslateService
Token a monte di Kamo presente a bergamotto e libretranslate
· SecurityService
La scheda Compiti è compiti — serviti da KBService, gated qui come il piombo stesso
· RAGService
Presentare la chiave API TEI ai modelli di incorporazione e reranking
· kamo-shared-library
STRING Registro di sistema enums, 24 tipi di fornitori, convertitori di livello digitale
· APIService
Percorso del centro di notifica per il telefono
· DaemonService
Il lavoro di Kamoai-hire-steps guida la spazzata a rate di SecurityService ogni minuto
· KBService
Lo schema SP06 — compiti, link, commenti, casella di posta, link di nota e autorizzazione
· kamo-shared-library
Stato membro AI, org pausa e colonne kill-switch (solo in JPA)
· KlusterServices
Svc ai pubblica ai.registry.changed.> (KamoAI SP01)
· kamo-shared-library
Stato delle attività, priorità, tipo di record-link, sezioni di Inbox e master-note
· KlusterServices
Svc security pubblica kamoai.platform.state, svc kamoai abbona ad esso (KamoAI SP02)
SecurityService annuncia la piattaforma AI kill switch su kamoai.platform.state e KamoAI Service lo ascolta. rt.org. svc security pubblica già rt.org.>.
· KlusterServices
Retire il login kamo svc condiviso
· kamo-internal
Le bolle d'immagine disegnano un'anteprima 480px; il lightbox mantiene l'originale
Un'immagine di chat è disegnata al massimo 240x240 CSS px e la bolla ha scaricato l'intero originale per farlo — 3-8 MB per foto del telefono, per visualizzatore. AttachmentChip ora disegna Non e' vero. WebP 480px di MediaService (tenute di KB), fatto la prima volta che qualcuno chiede e risponde con l'originale ogni volta che un immagine non ha nessuno (un'animazione, un vettore). Il lightbox, download, video e audio continuare a leggere l'originale. Fallback: se l'anteprima fallisce la bolla prova l'originale allo stesso URL generazione, e solo il fallimento di ORIGINAL entra in usoAttachmentSource recupero (cookie re-plant, quindi il verdetto HEAD) — un'anteprima rotta non è mai segnalato come un file mancante. Il chip ricorda che url l'anteprima ha fallito, così un recupero che cambia l'url (il ri-pianto, Retry) prova l'anteprima di nuovo invece di lasciare l'intero originale nella bolla. /api/media/* non è un prefisso proxied, quindi l'anteprima ha il proprio file di percorso. Entrambi i percorsi ora condividono app/lib/imagingProxyRelay.ts (stesso OTK forward, stesso passaggio del CSP/nosniff/disposizione di MediaService, più x-attachment-rendition), e rifiutare un id che non è un UUID prima di costruire l'URL a monte. Distribuire AFTER MediaService (l'endpoint /preview). Se questo atterra prima il richiesta di anteprima 404s a monte e ogni bolla rientra all'originale — Il comportamento di oggi, una piccola richiesta in più.
· MediaService
Gli allegati delle immagini sono tratti da un'anteprima 480px, non l'originale
Una bolla di chat disegna un'immagine al massimo 240x240 CSS px e ogni visualizzatore scaricato l'originale per farlo — 3-8 MB per foto del telefono. G Ora risponde a un WebP limitato a 480px sul suo lungo bordo; il punto finale originale, il lightbox e i download sono invariato. Una anteprima per file memorizzati (ImgDat), non per allegato: <imgDatId> thumb 480.webp nel secchio di imaging, accanto all'originale. L'infisso thumb è ciò Le bollette OrgObjectStorageSweep di SecurityService come derivato di quel dat. È deliberatamente non la libreria di immagini è thumb p0.png (a 640px PNG DocsService serve sotto diritti di documento e bandiere sul dat condiviso). Realizzato in upload e su prima richiesta. Entrambi collegano i percorsi (upload, e il dedup link) in coda in background; una richiesta che non trova nessuno lo fa su spot via ConversionService /api/conversion/image/preview — così ogni esistente l'attaccamento ottiene uno la prima volta che qualcuno guarda, senza backfill. Concorrenza richieste per lo stesso contenuto uniscono una generazione; alla maggior parte dei due run per pod; il la coda di sfondo scende piuttosto che cresce. Un rifiuto (animazione, indecisa, non più piccolo) è ricordato come un oggetto di byte zero e l'originale è servito da allora in poi; un fallimento (busy, down, a 404 da un ConversionService senza endpoint) non è ricordato. Ogni volta che non c'è anteprima, il endpoint serve l'originale esattamente come /imaging/proxy/{id} fa, quindi un <img> ha indicato ad esso ottiene sempre una foto. X-Attachment-Rendition dice quale. Accesso: entrambi gli endpoint passano attraverso uno autorizza() — autenticazione, esistenza, revoca, rimozione dei messaggi, contenuto mancante, appartenenza alla sessione, stesso ordine, stesse risposte — prima che il negozio di anteprima è toccato. Un allegato revocato l'anteprima è rifiutata allo stesso istante del suo originale. ImagingProxyPreviewAccessTest perni ogni rifiuto all'originale (status e corpo, GET e HEAD); un controllo negativo (controllo di adesione saltato per anteprima) fallisce. Un'anteprima GET registra il primo download del membro, come l'intero file GET del l'originale ha fatto quando le bolle hanno disegnato l'originale. Distribuire il servizio di conversione AFTER f7729d9 (il punto finale). Prima che atterra ogni la richiesta di anteprima non è morbida all'originale; nulla è segnato.
· ConversionService
/image/preview taglia una foto di chat in un WebP 480px
Un allegato dell'immagine di chat è disegnato al massimo 240x240 CSS px e ogni visualizzatore scaricato l'originale per farlo — una foto del telefono è 3-8 MB. MediaService memorizzare un'anteprima per file memorizzati (ImgDat) e servire a bolle di chat; questo è la taglierina che chiama. ImagePreviewService si adatta al bordo lungo a 480 (2x la scatola), mai upscale, e scrive WebP perdente senza metadati. L'orientamento EXIF è cotto in un ritratto l'anteprima della foto sarebbe altrimenti giacere sul suo lato accanto al suo originale verticale), con autorotato di ffmpeg fuori in modo che nessuna costruzione può ruotare due volte. Vettori, animazioni (GIF, APNG, WebP animato), byte indescrivibili, sorgenti di grandi dimensioni e le anteprime non più piccole dell'originale sono REFUSED — 422 con X-Preview-Refused, che il chiamante può ricordare. Busy/timeout/ffmpeg fallimento è 503 e dice niente dell'immagine. Memoria, dopo la scala logo OOM-ucciso entrambi i pod: ffmpeg corre uno alla volta, E' solo un'idea. 1), scale prima di ruotare, e decodifica un JPEG a 1/2^k nell'IDCT (-basse, mantenendo 2x il bordo di anteprima). Picco RSS misurato con /usr/bin/time -f %M sull'esatto comando: 12 MP JPEG 68 MB, 48 MP JPEG 123 MB, progressivo 12 MP 92 MB, 16 MP PNG 115 MB (184 MB per puro rumore). Ceilings: JPEG 52 MP, PNG/WebP/GIF 16.8 MP, fonte 40 MiB. Solo internamente sul segreto pubblico MediaService presenta già a /transcribe; fallisce chiuso.
· kamo-internal
Disegna i loghi delle varianti predimensionate del server, mai l'originale multi-MB
Un membro ha visto il logo dell'intestazione org piccolo nel compositore ma un'immagine >3 MB in la posta inviata: ogni superficie del logo collegata `img/logo-full.svg` / `img/logo.svg`, che per un raster-logo org è un SVG che avvolge l'intero caricamento (crm: 2.95 MB), disegnato 24-120 px alto - e in e-mail, in un formato Outlook non mostra. # Ora scrivi. # accanto agli originali (LOGO VARIANTS CONTRACT). In questo modo ogni consumatore di logo attraverso un aiutante e mantiene l'originale come il fallback, perché varianti sarà mancante sul secchio vivo per un po ': - No, no. LOGO RUNGS, pickLogoRung (piccolo rung >= cssPx x 2, altri 1024), logoVariantUrl, logoDisplayCap, la sonda (probeImage, cache per scheda), cachedRemoteImageExists (HEAD, 10 min) e invio-email colonizza/verificare le rungs PNG. useLogoVariant.ts: useLogoVariantSrc ( <img>: variante, poi originale su errore, poi il proprio fallback del chiamante), utilizzareProbedLogoUrl (CSS/mask/canvas: '' fino a probed, mai entrambi), utilizzareEmailLogoLadders, utilizzareRemoteImageVerdicts. - ThemeLogo sceglie il rung dalla propria scatola (NavPri 64, home 128, impostazioni 128, caricamento 256, validare 192, filigrane/pane 1024) e ricade sull'errore; la maschera di sovrapposizione segue. Backdrop/error/non-found watermarks, la pagina-transizione copertura (chooseCoverLogo + sonda), esign watermark (1024) e picker (64), scacchi mark (192), Hosted Computer launch page (128, data-fallback onerror), Meet anteprime di marca (128), anteprime dell'editor del modello di e-mail, /network chips (via il proxy immagine, variante -> originale -> iniziale) e il volto del chip Hold'em (128). - Email: Risolto Le immagini portano la scala PNG di ogni logo (probabile); l'intestazione, firma e marcatori stampano la rung per le dimensioni che disegnano. Ogni inviare il percorso conferma ogni rung stampato con un HEAD e mette il retro originale dove manca (composer + il suo invito di riunione, campagna / avvolgimenti, il percorso di incontro). I badge a piè di pagina caricati chiedono EmailService per `?h= (Io= 128). Archiviato segnaposto HTML non porta mai una rung. Il percorso di incontro ora legge il tema dall'alias org invece della cartella pre-alias FQDN. - Sinistra sugli originali per design: LabelManager, setup-wizard LogosStep, faviconi. Test: rung pick, forma URL, sonda/HEAD cache, entrambi fallback, ThemeLogo, copertura scelta, catena OrgLogo, lancio-page fallback, distintivo ?h=, e un cablaggio guardia che rende ogni layout di intestazione / firma con un logo scalato e fallisce su qualsiasi URL /img/logo grezzo o percorso di invio non verificato.
· kamo-register
Registrare i loghi caricare una copia pre-dimensionata, e l'originale quando manca
Ogni cartella tema ora porta img/sized/μstem>/h <rung>.webp accanto a ogni logo. Un org PNG logo.svg / logo-full.svg è il suo intero caricamento avvolto in base64 (several MB), disegnato 30-72px alto qui; la rung è la più piccola altezza che copre la dimensione disegnata a 2x. - logoVariants.ts: la scala rung, pickLogoRung, URL variante e un record per-tab di varianti che ha fallito. - ThemeLogo prova prima la variante, rung legge la sua altezza numerica: il logo di atterraggio (72) h192, l'intestazione di flusso (30/44) h64/h96, lo schermo di completamento (52), /org (60) e /sorry (64) h128. Non aveva alcun errore di gestione affatto; ora una variante fallita mostra l'URL originale esattamente come esso è stato costruito prima. Il <img> nascosto è la sonda che segue la maschera di sovrapposizione.
· kamo-login
I loghi Sign-in caricano una copia pre-dimensionata, e l'originale quando manca
Ogni cartella tema ora porta img/sized/μstem>/h <rung>.webp accanto a ogni logo. Un org PNG logo.svg / logo-full.svg è il suo intero caricamento avvolto in base64 (several MB), disegnato 30-140px alto qui; la rung è la più piccola altezza che copre la dimensione disegnata a 2x. - logoVariants.ts: la scala rung, pickLogoRung, URL variante, un record per-tab di varianti che fallito, e utilizzareLogoVariantSrc per le immagini che non sono un ThemeLogo. - ThemeLogo prova la variante prima (rung read off altezza / maxHeight / larghezza): il sign-in e recuperare il logo (maxHeight 140) h384, il logo di dialogo (96) h192, reset-password e verifica-email-change (52) h128, logout (120) h256. Su un errore mostra esattamente l'URL originale come è stato costruito prima, poi cammina l'estensione fallback come ha sempre fatto. Il segreto <img> è la sonda segue la maschera di sovrapposizione. - Il segno d'animazione 48px sul sign-in e recuperare: h96, poi l'originale. Il suo precarico attende montare, così il rendering idratante non fetches più l'intero originale. - WorkspacePicker righe (~30px): h64, poi il logo dell'orgUrl, poi il monogramma.
· EmailService
Loghi PNG in linea pre-dimensionati; badge a piè di pagina serviti all'altezza disegnata
Le e-mail transazionali hanno inlineato solo un logo quando l'originale era un SVG sotto 512 KB. Il logo di un PNG org ha collegato l'intero upload invece — crm 2.2 MB logo-full.png per un intestazione disegnato al massimo 48px alto. - EmailTemplateService chiede EmailLogoService per il servizio di sicurezza PNG pre-dimensionato ora taglia accanto a ogni logo (img/sized/logo-full/h96.png per l'intestazione 48px, img/sized/logo/h64.png per il marchio 28px footer), inlineato come cid: parti e 10 min. Per logo, il vecchio percorso (rasterizzare l'originale SVG, altrimenti collegarlo) rimane il fallback mentre le copie di un org non esistono ancora. - No, no. prende ?h=: un distintivo PNG/JPEG più alto del altezza richiesta (smontata fino a 32/48/64/96/128) è ridimensionata con area mediazione e cache in-process; GIF/WebP/SVG, badge corti e eventuali guasti il byte memorizzato, così ogni URL in posta già inviato è invariato.
· SecurityService
Copie predimensionate di ogni logo org accanto all'originale
Ogni superficie disegnava logo org dal caricamento originale: 2.2 MB per il logo completo di crm a 30-56px nav/header, 2.95 MB (il suo stand-in .svg) nel compositore di e-mail, 4.3 MB per il suo stile di vita tracciato SVG. ThemeLogoVariantService ora mantiene E' il momento giusto. + manifesto.json per tutte le otto slot di logo (stem = il nome del file originale), tagliate da ConversionService /image/logo-varianti. I clienti scelgono il più piccolo rung >= altezza disegnata x 2 e caduta torna all'originale. Gli originali sono intatti. - upload-logo: le vecchie copie del logo vengono cancellate prima (non c'è mai niente di stallo servito), poi i nuovi sono tagliati; la richiesta aspetta al massimo 20s, il resto finiture in background. Dopo che l'est è salvato. - provisionFull/provisionUpdate: garantireTutte le ri-tagliole solo gambi la cui fonte bytes cambiato (SHA-256 nel manifesto), gocce copie di un logo che è andato. Prima writeConfigFiles, come i faviconi. - DataLoader: un backfill di sfondo per ogni org live (non sul percorso di avvio). - img/sized/ non è mai seme dal tema base.
· kamo-signer-monorepo
Disegna il logo dell'org dalla sua variante pre-dimensionata, l'originale solo se manca
Una pagina di firma ha disegnato il logo caricato dell'org — il logo-full.svg di crm è 2.95 MB — a 28-44px di altezza. Il servizio tema ora taglia img/sized/hystem>/h <rung>.webp accanto ad ogni logo; chiedere rung più piccolo che è tagliente a dpr 2 e rientrare all'URL originale, esattamente come è stato costruito prima, su qualsiasi errore (cartelle non ancora riempite, una generazione fallita). - pacchetti/teme logoVariant.ts: LOGO RUNGS, pickLogoRung (dpr 2), logoVariant Url, logoVariantFromUrl; esportato dal pacchetto tema. - ThemeLogo: la variante è il primo tentativo, dimensionato dall'altezza numerica del chiamante, altrimenti maxHeight, altrimenti la larghezza legata (non vincolata: l'originale, come prima). Un errore su di esso va a l'originale, poi l'estensione esistente camminare e fallbackText. La maschera di sovrapposizione segue il <img> nascosto, che è la sonda. TopBar h64. - Quote letterhead (max-height 56 -> h128): QuoteLogo deriva la variante da branding.logoUrl al momento del render, quindi cita ThemeAlias legge ancora la cartella dall'URL invariato. La pagina è server-rendered, quindi il supporto cattura anche una variante che 404ed prima dell'idratazione.
· kamo-apps
Il logos chiede una variante pre-dimensionata e torna all'originale
Il logo di un'organizzazione è disegnato 30-180px alto qui ma scaricato tutto: crm'è logo-full.png 2.2 MB, il suo stand-in 2.95 MB. ThemeLogo ora chiede per img/sized/hystem>/h <rung>.webp prima, il rung ha formato due volte il più alto può essere disegnata (leggere fuori la propria altezza/massima altezza/larghezza puntelli: la ferrovia 128, la barra superiore 64, l'intestazione ricevuta 96, il portale sign-in 384, il portale shell 64). Una variante mancante torna all'originale esattamente come era costruito prima, e solo allora cammina la lista di estensione. La maschera di sovrapposizione vernici con una variante solo dopo che l'immagine nascosta lo ha caricato. La foto dell'ufficiale di prestito chiede il taglio 150px md invece del pieno upload; il suo errore torna all'originale, poi alle iniziali.
· ConversionService
/image/logo-variants taglia un logo in file PNG pre-dimensionate + WebP
I loghi Org vengono caricati una volta e disegnati ovunque a 24-120px, e ogni superficie scaricato l'originale: crm's logo-full.png è 2.2 MB (il suo stand-in 2.95 MB, che è ciò che il compositore e-mail collega a 40-48px), il suo stile di vita tracciato SVG 4.3 MB. LogoVariantService rende qualsiasi logo (SVG via Batik, raster via ffmpeg con un pinned demuxer) ad una scala di altezza 32..1024 in entrambi PNG (email) e WebP perdente con alfa (web, mobile), mai upscaling un raster e larghezza di tappatura a 4096. Uno processo per logo. Il punto finale risponde a una zip di h <rung>.png/.webp + manifest.json. SVG: dati incorporati: le immagini sono consentite (le esportazioni di Figma sono una), tutte le altre risorse e tutti gli script sono rifiutati; un semplice SVG 1.1 DOCTYPE (Illustrator) è caduto, uno con un sottoinsieme interno è rifiutato. Misurato su loghi reali: crm logo-full h128 = 67 KB PNG / 19 KB WebP.

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