Ir para o conteúdo
KAMOUniverse

Changelog

O que há de novo.

Cada melhoria para a plataforma, como ele envia.

  1. · kamo-marketing

    Unidade de herói de vídeo polonês com animações e otimizações modernas

    - Adicionar imagem de cartaz para feedback visual instantâneo durante a carga de vídeo - Implementar o esqueleto de carga com animação pulsante - Iniciar o vídeo mudo (compliance da política de reprodução automática do navegador) - Adicionar pré-carregamento="metadados" para carregamento de vídeo eficiente - Melhorar o estilo do botão: maior (h-12 w-12), melhor raio de borda (rounded-xl) - Melhore a sombra com efeito de dupla camada (24px + 8px) - Implementar a animação desbotamento suave recipiente (0,8s easyOut) - Adicionar AnimatePresence para transições suaves de ícones mudos/desmuta - Melhore os efeitos do hover com transições de escala, sombra e fundo - Adicionar animação de toque para feedback táctil (escala 0.95) - Acompanhe o estado de carga de vídeo para transições de opacidade suaves

  2. · KlusterServices

    Pasta partilhada do KAMOTEAM em cada área de trabalho

    desktop-1 hospeda /srv/kamoteam e exporta-o para NFSv4; cada usuário de VM recebe ~/Desktop/KAMOTEAM como link simbólico (via /etc/skel para novas contas e o agente para as existentes/adotadas), e a estação de trabalho monta o mesmo diretório. A VM detém os dados porque é o lado sempre-no - a estação de trabalho é um laptop WiFi no DHCP, então hospedar lá iria soltar a pasta para usuários de VM cada tempo que dorme e quebra o seu monte sempre que o seu endereço se move. A leitura/escrita completa precisa de três coisas juntas, e omitir qualquer um dá uma parte que parece certo até que a segunda pessoa escreve: o grupo kamoteam, setgid plus uma DEFAULT POSIX ACL (sem ela uma 022 umask faz com que os arquivos de cada usuário sejam lidos apenas para todos os outros), e NFS all squash para uma identidade fixa para uid da estação de trabalho 1000 não é tratada silenciosamente como UID 1000 da VM. NFSv4 apenas: uma porta, sem rpcbind, que é o que faz com que seja retransponível através KubeVirt mascarada. Exposto à LAN como NodePort 32049.

  3. · kamo-marketing

    Substituir a unidade de texto herói com vídeo promocional de reprodução automática

    Trocar a cópia do herói homepage, CTAs, e estatísticas para um vídeo em looping mudo, mantendo o tratamento de fundo rotativo.

  4. · KlusterServices

    Alerta sobre OOMKills, e sobre a ocupação que os precede

    Nada estava a ver a memória. MediaService foi morto a cada poucas horas para a maioria de um dia e EmailService seis vezes, e a forma como alguém descobriu foi um chat janela que tinha parado silenciosamente de carregar mensagens — um recipiente morrendo e reiniciar dentro de uma segunda leitura como um recurso quebrado, não como uma falha. Três regras. ContainerOOMMatou incêndios no evento; ContainerOOMKillLoop separa uma única opção de uma cápsula ser morta repetidamente, que reinicia rapidamente suficiente para ainda mostrar 1/1 correndo. ContainerMemoryNearLimit é o que faria Apanharam estes dias mais cedo: >85% do limite mantido durante 30 minutos. Para uma JVM ligada MaxRAMPercentagem que não é uma cápsula ocupada, é uma cápsula sentado em seu teto de pilha com não-peso empilhado no topo, que é o estado estacionário imediatamente antes da O kernel intervém. Um quarto recipiente, informacional, bandeiras sem limite em todos — eles não podem ser OOMMatados pelo seu próprio cgroup, mas podem derrubar um nó. Verificado contra dados reais em vez de supor: as expressões foram avaliadas neste cluster, e consultando as últimas 12 horas mostra rance="OOMKilled" série para exatamente kamowsemail (18:33-01:28 UTC) e kamowsmedia (21:28-01:03 UTC) — As duas cápsulas que estavam a falhar. As regras teriam disparado contra ambos. Um alerta que silenciosamente não corresponde a nada é o mesmo fracasso que nenhum alerta, de modo que O cheque era mais importante do que o YAML. Aplicado à mão; a monitorização/ não é um objectivo de aplicação da IC.

  5. · KlusterServices

    Bloquear SSH de saída, exceto sage, resolver k1m1/k3m1, empacotar a dir agente

    Outbound tcp/22 é rejeitado para cada UID, exceto raiz e sage, chaveado no socket proprietário, por isso as contas futuras são cobertas sem repetir nada. Reaplicado em arranque por uma unidade systemd, uma vez que as regras nftables não sobrevivem a uma reinicialização. É um guardrail, não um limite: o kamodev tem o apt sudo sem senha, que é radicular equivalente — os dois requisitos estão em tensão e isso está documentado. as entradas das máquinas k1m1/k3m1 vão para o TEMPLATE de início na nuvem, bem como /etc/hosts, porque manager etc hosts regenera o arquivo em cada inicialização e um anexo simples Desaparece silenciosamente. Utiliza IPs LAN; as sobreposições WireGuard/CGNAT são aposentados e 10.0.50.1 é apenas a ligação nó a nó. nuvem-init agora carrega desktop / agente / como um tarball determinístico em vez de um placeholder por arquivo — o conjunto foi de três arquivos para dez, e cada adição do contrário significava editar o modelo e o passo de renderização do CI também.

  6. · KlusterServices

    Cadeia de ferramentas padrão, pinos de barra de tarefas e instalações sem senha para todos os usuários

    Adiciona krita e maven **************** já estavam presentes, pins Chrome, VS Code, Kate, Spectacle e Krita para a barra de tarefas para cada usuário, e permite que os usuários dev instalem software sem senha de administrador. Necessidades de instalação sem senha Ambas as metades: sudoers cobre o terminal, polkit cobre Discover e qualquer outro instalador gráfico. Âmbito de aplicação do pacote gestão através do grupo kamodev em vez de raiz manta — veja os comentários em Cada arquivo para o porquê é um raio de explosão menor, mas não um limite de segurança. Barra de tarefas: novas contas herdam o modelo do /etc/skel na hora de adição do utilizador; contas existentes recebem apenas seus lançadores= linha reescrita, então um personalizado painel não é jogado fora para corrigir uma lista de ícones.

  7. · kamo-internal

    Gate o ícone de desktop Linux em uma provisão, não em deus

    O ícone agora aparece exatamente quando a conexão por trás dele funcionará — o SSO Endpoint aplica a mesma regra, então os dois não podem discordar. Janelas e Mestre Ainda partilham uma só credencial, por isso permanecem em Deus.

  8. · kamo-internal

    Janela da máquina Dev no cartão de administrador

    Mantém três estados separados que uma alternância iria colapsar: nunca provido (necessita de uma senha), fornecido mas bloqueado (precisa apenas do interruptor), e falhou (precisa do erro e de uma repetição). O interruptor não pode inventar uma senha que ninguém tenha escolhido.

  9. · kamo-internal

    Módulo cliente e rotas proxy

    *** é enviado explicitamente — buildForwardHeaders define X-OTK mas não o token de sessão, e os endpoints dev-machine resolvem o chamador a partir dele. O segmento de ação é verificado com um conjunto fixo em vez de passado.

  10. · SecurityService

    Credenciais SSO por membro e um pré-voo que explica falhas

    Linux é fechado em uma provisão permitida em vez de deus, e servido com o credenciais próprias dos membros. A conexão é omitida do token inteiramente quando não têm nenhum — oferecendo uma que será recusada superfícies como Guacamole erro genérico, que é a falha não acionável que isto remove.

  11. · SecurityService

    Serviços e controladores de máquinas Dev

    O nome de usuário deriva do e-mail de Conta do membro, não do email de trabalho do membro da equipe — um endereço de trabalho pode sentar-se em outro domínio e silenciosamente produzir um nome da conta. Reset-password requer GD e GodModeActive juntos.

  12. · SecurityService

    Cliente HTTP para o agente de provisionamento de máquinas dev

    health() engole falhas de transporte e responde false para que o pré- voo SSO possa devolver um 503 acionável em vez de um 500.

  13. · SecurityService

    AES-GCM codec secreto e derivação de nome de usuário POSIX

    Codec é deliberadamente reversível — auto-login RDP precisa de uma senha real — e usa o GCM para que uma linha de teclas adulterada ou incorreta falhe alto ao invés de descriptografar ruído que seria entregue a Guacamole.

  14. · kamo-shared-library

    Dev machin accounts entity, status enum e repositório

    status e habilitado são deliberadamente separados: uma conta provisionada mas desativada mantém o seu diretório home, então re-ativar restaura o acesso em vez de reconstruir.

  15. · KlusterServices

    Segredos de agente em CI, vida em guacamole, alertas de disponibilidade

    Expressões de alerta verificadas contra o Prometheus vivo. Usa kube-state-metrics em vez de kubevirt * — o endpoint das métricas de KubeVirt não é raspado aqui, então regras escritas contra ele iria ler como cobertura enquanto nunca disparar. Selector label is release=kps to match the Prometheus CR's ruleSelector. O tratamento secreto é executado com xtrace desligado para que os valores fiquem fora do registro CI.

  16. · KlusterServices

    Instalador de agente idempotente, compartilhado por instalação em nuvem e ao vivo

    Estágio em /opt/kamo-desktop-agent para install-agent.sh tem uma fonte distinta e destino. Covers netplan-by-driver, cloud-init network disable, xrdp política de sessão, /etc/skel/.xsession e o próprio agente.

  17. · KlusterServices

    Adicione o agente de provisionamento e seus testes unitários

    Apenas stdlib Python 3. Cada mutação executa subprocesso com uma lista argv, nunca shell string; senhas vão para o chpasswd no stdin para que fiquem fora do /proc.

  18. · SecurityService

    Enviar IDs int64 para o navegador como strings, sem tocar em sessões

    Os IDs do BarataDB unique rowid() são 19 dígitos, passados Número. MAX SAFE INTEGER, então um ID enviado como um número JSON chega no navegador com seus dígitos baixos arredondados e cada procura feita com ele falha. 163 respostas de manipulador colocar em bruto Long org e membros IDs em Mapas ad-hoc, então isso não era algo DTO-por-DTO trabalho poderia fechar. A razão pela qual ficou aberto é que a solução óbvia derruba a plataforma. O cartógrafo que serve respostas é o mesmo bean KSessionService escreve o mapa de sessão *** para Redis com, e ids são lidos de volta para fora desse mapa por ((Número) ...).longValue() -- 65 vezes neste serviço, e novamente em DocsService, MediaService e ConversõesService, que lê a mesma carga útil. Citação longa sobre o feijão e cada um desses lançamentos. Assim, a regra é anexada aos conversores de mensagens MVC, em vez disso, em uma cópia. Respostas obter ele; sessões, editores NATS e os clientes de serviço a serviço manter o mapper numérico Eles sempre tiveram. Também não é um cobertor Longo -> String. Long não é sinônimo de id aqui: epoch milis no SecurityRoleDTO e nos DTOs tipo ramo e modelo de segurança, LeadIntakeEndpointDTO contadores, Page.getTotalElements(), bytes e durações são todos Longs o navegador faz aritmética e novo Date() on, e a maioria chega dentro de Mapas onde um mix-in não tem nenhuma chave para anexar. O serializador muda de valor: acima do intervalo seguro JS escreve uma string, abaixo dela um número. Cada único rowid está acima, cada timestamp, contagem e o tamanho está abaixo, e os campos que ninguém classificou ainda são tratados pela mesma regra. Verificado contra os pares que leram estas respostas: KamoJwtService e DavAuthFilter já aceitar qualquer forma (instanceof Number ? ... : Long.parseLong(...)).

  19. · kamo-login

    Substituir o alerta de stock por uma placa de estado animada

    As mensagens de login em linha ("Login bem sucedido! Reencaminhando...", "Invalid nome de usuário e/ou senha.") usou o Alerta padrão do MUI, cujo preenchimento pastel plus texto pastel correspondente lido como genérico contra o cartão de login de vidro. StatusMessage inverte essa fórmula: uma placa quase branca geada na mesma família de vidro como o cartão, com a cor de gravidade concentrada em um ícone chip, uma lavagem que desvanece antes do texto, uma borda de linha de cabelo e um suave halo. Tinta fica perto do preto com um sussurro do sotaque misturado, por isso mantém contraste com qualquer org's -- cor-primária. Mensagens neutras/info emprestadas As primárias de org em vez de um azul de stock. Moção é uma entrada orquestrada - a placa entra, o ícone desenha o seu próprio curso, e um único destaque especular atravessa. «pendentes» adiciona uma linha de cabelo para o trabalho ainda em voo, ligada ao existente `redirecting' estado assim "Redirecting..." mostra progresso em vez de apenas A reclamar. Os erros têm um impulso de fixação curto. prefere o movimento reduzido colapsa tudo a um simples desbotamento. Erros anunciados como role="alert"/assertivo, tudo o resto permanece educado. Aplicado ao login, recuperar, reset-password e páginas de erro OAuth.

  20. · kamo-marketing

    Adicionar o selo de 25 anos de aniversário

    Dois estágios, ambos escolhidos para os quais o pedido já está a ser apresentado: Footer — 60px, ao lado de "© 2001–<ano> ... estabeleceu 2025". Em todo o sítio, agrupado com a marca registada como outra marca de confiança. Cerca de — 168px, abrindo a seção da missão. Essa página é onde o 25 anos de história é o argumento em vez de uma nota passageira. Não no herói de casa: esse título foi despojado de volta para um deliberado efeito, e um medalhão de ouro ao lado dele iria desfazer a contenção. Um componente AniversárioBadge por trás de ambos, então o ativo, seu texto alt, e o ano que comemora se aposentar de um único arquivo. A fonte PNG foi de 2,4 MB a 1254px. Redimensionado para 512px e codificado para WebP é 95 KB, e uma vez que próxima / otimização de imagem está ligada, o que realmente AVIF derivado por colocação: 8,3 KB para o rodapé em 2x, 35 KB para About.

  21. · kamo-marketing

    Mostrar o intervalo de direitos autorais de 2001 e o ano de incorporação

    Renders "© 2001–<year> KamoCRM. KamoCRM Inc. estabeleceu 2025. Todos os direitos reservado." O início do intervalo é codificado ao lado do ano final dinâmico, em vez disso do que viver na corda traduzida, para que nenhum local possa danificá-la.

  22. · kamo-marketing

    Adicione as integrações de reunião e folha de pagamento

    Zoom e Microsoft Teams para reuniões, e os dez fornecedores de folha de pagamento — ADP Força de trabalho agora, BambuHR, Dayforce, Gusto, Paychex Flex, Paycor, Paylocity, Rippling, UKG, Workday. 33 integrações para 45, com um novo Payroll & HR categoria e Videoconferência promovido ao lado da Voz. Cada página reflete o que seu provedor realmente implementa em vez de um modelo uniforme. Paylocity não tem calendário de período de pagamento ou saldos de PTO, Dayforce não tem calendário de período de pagamento, e nem Paychex nem Rippling empurra alocação de trabalho, então nenhuma dessas páginas alega o contrário; a história de autenticação Difere também por vendedor (OAuth for Gusto, Paycor, Rippling and BambooHR, a certificado para ADP, um token de atualização para Workday, contas de serviço para UKG e Dayforce) e cada fluxo de configuração diz isso. Logos são os ativos do fornecedor do público/logo/{meet, payroll} da kamo-internal. O conjunto de folha de pagamento são WORDMARKS que vão de 0,72:1 (Dayforce) a 6,2:1 (Paychex): renderizado na placa quadrada que os logotipos do ícone usam, uma marca 6:1 vem e alguns pixels de altura. Integração agora carrega o ativo intrínseco LogoLargura/logoAltura, e onde esses são definidos o cartão hub e página de detalhes renderizar a uma altura fixa com largura automática numa placa que cresça para caber — a mesma correção kamo-internal feita para os mesmos ativos. Logotipos quadrados são intocada. Os metadados do Hub nomearam apenas as antigas cinco categorias e codificaram "31 native integrações"; agora abrange reuniões e folha de pagamento e conta o registro.

  23. · kamo-marketing

    Contar aplicativos e integrações separadamente com números reais

    "Apps & Integrations" foi uma leitura de telha 31+. Agora são dois, cada um com um valor que pode ser re-derivado em vez de estimado: Apps 64 — Projectos Forgejo de propriedade do «kamo», excluídos Integrações 64 — APIs de terceiros distintas com código de cliente operacional A contagem de integração sai dos registos de prestadores (AiProviderType, BulkTextProviderType, SocialProviderType, VoipProviderType, IdentityProviderType, VarejoProviderType, MlosIntegration) mais a folha de pagamento, adaptadores de fechamento de reunião e MLOS. Enum entradas sem nada atrás deles são excluídos, então os 18 provedores de calendário não implementados, Encompass e Xbox fazem Não conte. Ambos os números são mantidos à mão; o comentário registra como Verifica-os novamente. Quatro peças precisam de uma grade quatro-up, então a linha de estatísticas agora vai 1/2/4 através do pontos de paragem com o revestimento de azulejos e tipo escalado para corresponder.

  24. · kamolos

    Activar o ProxyHmacFilter — passo 2, o X-Org-Id é agora um cabeçalho comprovado

    los.proxy-hmac.enabled tem caído para o seu falso padrão desde este serviço implantado, então o ProxyHmacFilter existiu e nunca foi executado. X-Org-Id — o cabeçalho cada consulta de org-scoped neste trusts de serviço — não foi assinada e em forma de cliente em um API de empréstimo multi-doente ao vivo. Seguro para habilitar agora porque o passo 1 pousou primeiro: monta kamo-internal o mesmo los-proxy-hmac secret e seu pod em execução está assinando, verificado antes Empurrei. A ordem inversa teria rejeitado todos os pedidos de empréstimo na plataforma. Verificado antes de o virar: - o filtro ignora /actuator/**, por isso as sondas Passo. Se os tivesse apanhado, a cápsula nunca ficaria pronta. Ele próprio de volta. - ignora o /api/los/webhooks/**, pelo que o Stripe continua a trabalhar — são verificados pela assinatura de Stripe. - Kamo-internal é o único chamador do serviço kamowslos, por isso não há nenhum sinal caminho serviço-a-serviço deixado para trás. Isto não substitui as verificações de org em LoanService e LoanScope. Levanta o que X-Org-Id significa de "um cabeçalho que alguém enviou" para "um cabeçalho que este proxy enviou", enquanto que decidem se o org nomeado pode ver a linha. Defesa em profundidade: nem é Basta sozinho.

  25. · kamo-internal

    Assinar os cabeçalhos de identidade do proxy — passo 1 de activar o ProxyHmacFilter

    O KamoLOS confia no X-Org-Id e no X-Membro-ID deste proxy. O ProxyHmacFilter existe para provar que esses cabeçalhos realmente vieram daqui, mas está desativado na produção: o implantation sets no LOS PROXY HMAC ENABLED e nenhum segredo compartilhado existia até agora, então los.proxy-hmac.enabled cai para false e os cabeçalhos não são assinados em um live API empréstimo multi-doente com 15 empréstimos reais sobre ele. A rota LOS já calcula a assinatura — ela apenas salta quando LOS PROXY HMAC SECRET está ausente. Montar o novo segredo Los-proxy-hmac é o que Ativar. Este lado vai primeiro de propósito. KamoLOS ignora a assinatura até o seu próprio los.proxy-hmac.enabled é verdadeiro, então este commit não altera nenhum comportamento em nenhum lugar; ele apenas começa a anexar X-Proxy-Assinatura e X-Proxy-Timestamp. Fazer de outra forma — validação antes da assinatura — rejeitaria todos os pedidos de empréstimo na plataforma. Passo 2 define LOS PROXY HMAC ENABLED=true e o mesmo segredo na implantação de kamowslos, Depois que este lançamento for confirmado.

  26. · SecurityService

    Resolver a sobreposição do logotipo KamoMeet em config.json

    KamoMeet é um garfo Meet sem acesso ao OrgContext, então ele aprende org branding do tema config.json este serviço assa. A org guarda uma sobreposição TOKEN; isso resolve-o contra a paleta da própria org e escreve o feitiço acabado como kamomeetLogoOverlayColor. Resolvendo aqui em vez de enviar a mesa de treze token para o garfo é o ponto: que repo já carrega o slideshow de fundo org como um de nove cópias independentes, e um segundo tal tabela derivaria o mesmo Muito bem. Fazer uma cor resolvida também não é o "xex congelado" esta característica evita no banco de dados — config.json é regenerado em cada gravação de marca, alterações de cor incluídas. A correspondência prefixa é explícita em vez de "não SEGUNDARIA significa PRIMÁRIO". A o teste captou o que a versão solta fez: "#FF0000" é exatamente tão longo quanto "PRIMÁRIO", por isso deixou um passo vazio e resolveu para a base primária — um cor ninguém escolheu, chegando em uma tela ninguém no lado da plataforma nunca Olha. Tokens desconhecidos e tons não definidos são omitidos do config.json É assim que todos os clientes lêem "sem sobreposição". A tabela token deve ficar em passo com o logotipo do kamo-internalOverlay.ts; o testes são o que fazem uma divergência uma falha de construção.

  27. · InitializerService

    Adicionar a coluna kamomeet logo overlay

    Terceira superfície de sobreposição: o ecrã de pré-reunião KamoMeet. A mesma forma que o Outros dois — nullable, sem backfill, sem DEFAULT. O guarda de deriva só precisava de seu nome de campo acrescentando, porque itera o campos de sobreposição da entidade em vez de nomeá-los um de cada vez. Este é o todo o ponto de ter escrito dessa forma.

  28. · kamo-shared-library

    Carregar o logotipo KamoMeet sobreposição na Organização

    Terceira e última sobreposição da superfície, mesmo vocabulário dos seus dois irmãos, mais seu branch no caminho genérico do patch. Este é diferente em onde acaba. A página inicial e tela de carregamento ler o seu token diretamente OrgContext; KamoMeet é um garfo Meet sem acesso a isso, assim que SecurityService resolve este token contra o org's paleta e assa a cor final no tema config.json o garfo Já vai buscar. O token, portanto, nunca deixa a plataforma, e o treze opções existem em um lugar ao invés de serem copiadas em um garfo que já acumulou nove cópias independentes do fundo Apresentação de slides. Null resolve para NENHUMA, então cada org existente começa sem sobreposição. A a coluna kamomeet logo overlay já está aplicada (KamoInitializer).

  29. · kamo-internal

    Uma sobreposição de logotipo para o ecrã de pré- reunião KamoMeets

    Terceira e última superfície, oferecida ao lado dos outros dois — mesmo treze opções, sua própria configuração, padrão No Overlay. Escondido a menos que o org possa realmente chegar a essa tela: o aplicativo Reuniões ligado e KamoMeets escolhido como o provedor. Uma org no Zoom ou Equipas nunca renderiza uma tela de pré-reunião KamoMeets, e uma org sem o aplicativo Nunca abre um, então o campo seria um controle ligado a nada. A armazenado valor sobrevive enquanto escondido, por isso voltar Reuniões em restaura o escolha em vez de a limpar silenciosamente. O provedor é obtido uma vez na montagem. Até que atenda o campo fica oculto, então ele aparece em vez de piscar; uma pesquisa falha resolve para KAMO MEET, que é o que a infra- estrutura faz para uma org sem provedor linha — melhor mostrar uma configuração inofensiva do que esconder uma real porque um O pedido falhou. Ao contrário de seus dois irmãos, este símbolo nunca atinge a superfície que governa. KamoMeet é um garfo Meet sem acesso ao OrgContext, então SecurityService resolve a sombra e assa a cor final no tema dessa org config.json. Apenas as configurações UI aqui lêem o token.

  30. · InitializerService

    Expurgar os relatórios e linhas do painel, e parar de semear View DASHBOARD

    VER DASHBOARD (0), VER REPORTS (1) e EXPORT REPORTS (2) foram suprimidos de RoleRightType hoje, juntamente com as duas páginas que nomearam. Isto remove o que eles deixados para trás, em ambas as codificações. **************************** listado VER DASHBOARD entre os direitos Concedida a todas as novas organizações, por isso também sai. Essa foi a única referência fora de um site de definição, e o compilador foi o que o encontrou — um lembrete de que regar para um nome certo e ler o enum não são a mesma pesquisa. VER TASKS está deliberadamente ausente da purga: app/tasks parece idêntico ao páginas apagadas na fonte, mas está agendada para ser concluída. Id 0 é um id real — o predicado lista-o explicitamente, e qualquer coisa neste caminho que apoiado na verdade iria silenciosamente pular as linhas de View DASHBOARD.

Seu universo está esperando.

Comece gratuitamente em minutos.Adicione produtos sempre que estiver pronto — sem migração, sem novos logins.

Gratuito para sempre — não é necessário cartão de crédito