Changelog
O que há de novo.
Cada melhoria para a plataforma, como ele envia.
· AIService
A voz do Assistente SI vira para Alexa
Programa Assistente de Voz (2026-10-27) P3-1, P3-5. POST **************** (interno, X-Internal-Auth): a própria conversa do assistente do membro através da mesma orquestração de sincronização, com um estilo de voz (duas frases curtas faladas, nada clínico ou secreto), sem ferramentas de PHI (EHR / pacotes de saúde nunca, e Ferramentas sensíveis a PHI em organizações de PHI), chamadas arriscadas realizadas e perguntadas como "Devo... dizer sim ou não" (envios, dinheiro, segurança e dispositivos precisam do PIN falado antes que o sim seja tomado), um prazo após que o turno mantém em execução e levanta SI_ASSISTANT_REPLY com push de telefone, 'me colocar através de <SI>' com a própria sessão desse SI (kamoai-service K5; SIs pausados ou aposentados recusados), e 'enviar isso para o meu telefone'. Os ganchos de orquestração são aditivos: TurnOptions em handleMessageSyncDetailed, SyncTurn.held, um filtro de ferramenta em AssistantService.withTools, PlaneTool.phiSensitive do _meta do Plano de Ferramentas.
· EmailService
Canais de telefone e voz por tipo, o espelho de voz e SI_ASSISTANT_REPLY
Programa Assistente de Voz (2026-10-27) P3-5, P4-1, P4-2, P4-4. - GET / PUT /api/notificações/canais e PUT **************** por-tipo de telefone / voz escolhas (BELL sempre ligado), horas silenciosas de voz (padrão 21:00-08:00 zona de membros), limite diário de voz (padrão 10). - raise (): o telefone push honra a escolha PHONE; NotificationVoiceSender envia um cartão de passagem após o compromisso para IoTService /api/iot/internal/voice/notify (horas silenciosas de voz, Kamo Não perturbe, um evento de calendário em execução e O cap mantém-no a menos que URGENT; RPM_ALERT e SI_AUTH_REQUEST nunca). - **************** e /read para 'pergunte Kamo Universe o que há de novo'. - SI_ASSISTANT_REPLY pertence a nenhum aplicativo; listado após SI_AUTH_REQUEST.
· SecurityService
Terminar um SI a partir de seu status, contagens de status, sem exclusões em /account
- O status Terminado de um SI executa o ciclo de vida de aposentadoria do SI após o resto do salvar (corridas interrompidas, linha telefônica, assento e licença liberados, credencial e sessões revogadas, tarefas entregues, histórico mantido). Necessidades MANAGE_AI_WORKFORCE como o Retire faz, mais o próprio status MANAGE_MEMBER_SECURITY; um SI nunca termina a si mesmo; a escolha da estação de trabalho segue. Outros estados são rejeitado em palavras SI simples; um SI terminado é dito claramente que não pode retornar. - GET **************** **************** customers/status-counts: uma consulta agrupada e limitada à organização cada. - POST members-subscribers/status (Terminar/Ativar: apenas members.is_active, nunca o usuário; MANAGE_MEMBERS) e clientes/status (Desativar/Ativar: accounts.is_active somente; EDIT_ACCOUNTS ou DELETE_ACCOUNTS). - members-subscribers?include=all lista membros terminados para /account. - DELETE customers/{uid} é apenas para operadores de plataforma (janela aberta).
· kamo-shared-library
Escolhas de canal por tipo, horas e limite de silêncio de voz, SI_ASSISTANT_REPLY, tipos de atividade de voz
Programa Voice Assistant (2026-10-27) P3-5, P3-6, P4-1. Declara o que foi aplicado manualmente: member_notification_channels (membro, tipo, TELEFONE|VOZ, habilitado), **************** **************** **************** e IotActivityKind VOICE_ASSISTANT_TURN, VOICE_ALERT_SENT adicionados por último.
· kamo-internal
Registros de DNS de domínio de alias, alias padrão de um colega, o endereço real de envio como
Configurações -> E-mail -> Domínios -> Domínios Alias: cada domínio mostra se ele é pronto ou à espera de DNS, e uma caixa de diálogo de registros de DNS lista o MX, SPF e DKIM registros que precisa (do EmailService), cada um verificado ao vivo, com botões de cópia. A composição como um colega agora abre em seu alias padrão, a mesma regra do O próprio padrão do membro segue (colleagueDefaultAlias). A aba "Sai como" do membro lê o sendsAs do servidor em vez de adivinhar da primeira cópia de alias-domínio, o que estava errado quando nenhum domínio de alias é o por defeito.
· kamo-shared-library
Declare as colunas e tabelas de links de assistente de voz (links pessoais, último erro, PINs, perfis de voz)
Colunas em iot_alexa_links (last_error_code/at, pending_grant_choice, owner_kind, owner_member_id, site_id, notifications_enabled) e as tabelas iot_voice_org_settings, iot_voice_persons, iot_voice_pins, aplicadas manualmente do iot-service **************** para que KamoInitializer possa recriá-los.
· MCPGatewayService
Meetings_join_external, **************** meetings_cancel_external (TPEXTMEET)
Um SI entra em uma reunião externa (Zoom, Teams, Meet, Webex, GoTo, qualquer provedor) a partir dos detalhes fornecidos por um colega de equipe, agora ou no início do convite, por telefone.JOIN_MEETING (o guarda de identidade mantém-lo em canais não comprovados), direitos VIEW_MEETINGS + ACCESS_VOIP (verificado novamente no kamoai-service com a união do solicitante), somente em um servidor verificado solicitação (citada, a própria execução, uma confirmação ou uma linha de reunião de um colega de equipe); nunca na própria SI Os códigos de acesso e as chaves nunca retornam ao modelo. meetings_join pontos fora dos links aqui. Guardas: não revelando (o público da chamada é de fora), não conteúdo, frases de aprovação, goldens regenerados.
· kamo-internal
Relatórios de empréstimos hipotecários acessíveis a partir de qualquer tela do MLOS, aberto já filtrado
- Links de relatório agora podem pré-preencher parâmetros: **************** (data predefinições ou intervalos de início..fim, listas de vírgulas para seleções múltiplas) O relatório declara que são honrados; um link nunca amplia o que um membro vê. - ReportQuickLinks: menu Relatórios de uma tela de trabalho. Ele pergunta ao servidor quais relatórios o membro pode executar (uma vez por página) e oferecer apenas aqueles, então ele não renderiza nada para um membro que não pode abrir nenhum. - Colocado na barra de ferramentas Pipeline, página HMDA LAR, Conselho, Documentos, Capital e Risco, Telas de Subscrição, Preços e Governança; na página do empréstimo, cada relatório abre filtrado para esse empréstimo (auditoria de status, tempo TRID, condições, documentos, bloqueios, eventos de bloqueio, pedidos de fornecedores, decisões de SI); configurações de mercado histórico de configuração completo (o painel de prontidão mostra apenas os últimos seis). - A faixa "Empréstimos justos - em breve" da Governança desapareceu: Resultados justos de empréstimos é um verdadeiro relatório agora. - O tipo de prateleira de empréstimos hipotecários e ícones. Emparelha com kamo-shared-library 17a7a233 e SecurityService 6ce48d17.
· kamo-internal
Os administradores podem editar a função de administrador, com seu direito de bloqueio fixado em
A função de Administrador (Acesso total) foi exibida como Protegida e não pôde ser aberta envia lockedRights (o chamador detém esse papel), o papel abre com seus direitos editáveis e aqueles A concessão/revogação de ramificação agora passa por cima de forçar e revogar a autorização de um usuário Os modelos de segurança da função permanecem somente de leitura.The role's security models stay read-only.
· KlusterServices
Postfix aprende domínios de alias do banco de dados de e-mail
Os domínios alias de uma organização (Configurações -> Email -> Domínios) costumavam precisar virtual_alias_domains e um mapa escrito à mão editado aqui. EmailService agora mantém uma tabela alias_domains no servidor de e-mail (KamoMailAliasDomains), e o postfix a lê: mysql-virtual-alias-domains.cf aceita o domínio, e **************** entrega local@alias para local@target somente quando essa é uma conta real ou alias, então nomes desconhecidos são recusados no RCPT. Aditivo: os domínios estáticos e o mapa da plataforma kamouniverse.com ficam à frente A tabela já existe ao vivo (criada à mão e pelo EmailService em start); um mapa nomeando uma tabela ausente falharia em todas as pesquisas, então também está em mysql-init-configmap.yaml para um novo banco de dados.
· SecurityService
Membros com a função de Administrador podem editar seus direitos
PUT /api/security/roles/{id} encaminha os direitos da função de Administrador através **************** ANTES de qualquer outra escrita, então um recusado salvar escreve Somente um chamador que tenha esse papel (ou tenha uma janela de deus aberta) pode; CONFIGURE_SYSTEM sozinho Um save que desligaria o CONFIGURE_SYSTEM é um 400 com uma razão simples: o sistema está desligado. A função lê carry lockedRights para tal chamador.Os modelos de segurança na função permanecem bloqueados.
· kamo-shared-library
Os administradores podem editar os direitos da função de administrador, nunca desligando CONFIGURE_SYSTEM
A função de Administrador (Acesso Total) é armazenada isAllowEditSecurity=false, para que ninguém possa alterar **************** é a única porta de entrada: ela aceita somente o que está dentro dela org role_admin_id role e recusa qualquer salvamento (após normalizar o nível) que deixe um direito em Esse conjunto é CONFIGURE_SYSTEM mais seus antepassados: o direito que abre Configurações > Essencial e cada papel escrever, para que seus titulares sempre podem voltar. SecurityRoleDTO.lockedRights diz ao editor quais switches são fixados.
· EmailService
Domínios de alias recebem e assinam por conta própria; padrões de colega e auto
O servidor de e-mail agora aprende domínios de alias de uma organização de EmailService em vez de config postfix editado à mão. KamoMailAliasDomains mantém uma tabela alias_domains em o banco de dados KamoMail MySQL (criado no início; o postfix o lê - veja klusterservices mail/), roteando local@alias para local@target onde isso é um real Adicionar/remover a sincronização, e uma inicialização reconcilia as linhas de rotas que - Não o faça. Cada domínio alias que não é um host de plataforma recebe uma chave DKIM lá, e EmailSmtpService.sendAsMember assina o e-mail de um membro a partir dele com o Os hosts da plataforma mantêm as chaves do rspamd, então o e-mail do kamouniverse.com é GET **************** lista os endereços MX, SPF e DKIM registra as necessidades do domínio, cada uma verificada ao vivo. Além disso: - AliasView.sendsAs: o endereço que um alias padrão realmente sai como (sua cópia no domínio alias DEFAULT da org, caso contrário, o próprio) - a guia de configurações adivinhou. - /sendable marca a caixa de correio primária de um colega (isPrimary), de modo a compor como eles podem abrir em seu alias padrão. - Um membro pode definir seu próprio remetente padrão sem MANAGE_EMAIL_ACCOUNTS.
· SecurityService
Agente de empréstimo e seletores de investidores para os relatórios de empréstimos hipotecários, comprovados no Hibernate da frota
- mortgageLoanOfficers: membros designados como responsáveis pelo empréstimo em pelo menos um dos negócios da organização (mais restrito do que cada membro, então o selecionador lista nomes que empréstimos de jogo). - mortgageInvestors: nomes de investidores nos snapshots de preços da organização. **************** executa todos os dezoito relatórios (kamo-shared-library 17a7a233) no Hibernate 6.2 deste serviço sem banco de dados: cada instrução cada relatório é compilado contra o mapeamento real, com padrões e com cada parâmetro definido, e a consulta de empréstimo da organização responde a um empréstimo sintético de modo que o A biblioteca é baseada na versão 6.5, e o Java CI não executa nenhuma versão anterior testes, então este é o único lugar onde uma incompatibilidade 6.2 seria mostrada antes de um membro abriu o relatório.
· kamo-shared-library
Uma prateleira de empréstimos hipotecários de dezoito relatórios de auditoria, conformidade e operações
O Report Studio não tinha relatórios de hipotecas; o MLOS tinha um relatório de conformidade real (o HMDA LAR page) e um conjunto de telas de trabalho que não podiam filtrar, exportar ou agendar. Isso adiciona uma pasta de empréstimos hipotecários e dezoito relatórios, todos com escopo organizacional, todos fechados em View Mortgage Pipeline, todos com drill-through, visualizações salvas, agendamento e exportação CSV/Excel/PDF: - Regulatório: HMDA LAR Review, HMDA Edit Checks, Fair Lending Outcomes (triagem por grupo de requerentes, bandeira de quatro quintos), Planilha de Relatório de Chamada de Hipoteca, TRID Tempo de divulgação (geral vs dias úteis específicos, regra de caixa de correio), adverso Oportunidade de Ação (Reg B 30 dias) - Pipeline & Produção: Envelhecimento do Pipeline, Produção & Tempo de Ciclo, Refluxo & Pull-Through - Lock Desk: Taxa de expiração de bloqueio, extensões de bloqueio, Relocks & Breaks - Subscrição e Operações: Condições de Envelhecimento e Renúncias, Requisitos de Documentos, Turnaround da ordem do fornecedor - Auditoria: Auditoria de Alteração de Status de Empréstimo, SI Decision & Override Audit, Licenciamento Conformidade, auditoria de alteração de configuração Framework: ReportFolder.MORTGAGE e ReportRowFilter — filtro de um membro aplicado para linhas concluídas, com os mesmos significados de operadores que o caminho SQL, para relatórios cujas colunas são calculadas (dias em status, resultados do prazo). MortgageReportSupport mantém cada empréstimo ler uma projeção escalar delimitada pela organização (LoanFile -> AppMortgage -> organization), uma vez que a maioria das tabelas de hipotecas não carregam nenhuma coluna de organização e os carregamentos de entidade disparam uma consulta por filho um-para-um. O texto de ajuda de cada relatório diz o que ele não pode ver: sem taxas detalhadas (sem tolerância verificação), nenhum registro de intenção de prosseguir, avisos enviados fora do sistema, LAR não preenchido
· kamo-shared-library
Entidade AiExternalMeeting para junções SI de reuniões de terceiros (TPEXTMEET)
Declara o ai_external_meeting (kamoai-service **************** aplicado) para que KamoInitializer possa recriá-lo.
· AIService
Sessões GPT-Live através do relé (tickets LIVE_AUDIO), sondadas com uma sessão ao vivo
TPGPTLIVE (proprietário 2026-10-27, piloto). O WebSocket primário do GPT-Live leva apenas a chave do projeto, então um ticket LIVE_AUDIO roteia a ordem REALTIME_AUDIO da org, mantém seus modelos ao vivo e retransmite wss://…/v1/live/sessions com a chave adicionada Um segredo de cliente em tempo real nunca é criado para um modelo ao vivo; o segredo de cliente em tempo real nunca é criado para um modelo A sonda REALTIME_AUDIO de um modelo ao vivo abre uma sessão GPT-Live (session.start -> session.started -> close) leva <base>/live/sessions, o caminho do plugin LiveKit. Nome dica gpt-live-* = REALTIME_AUDIO; modelo conhecido gpt-live-1.
· SecurityService
Semente os dez direitos da calculadora de hipoteca de CALC_SIMPLE
Quem pode abrir a calculadora hoje encontra Calculadora -> Hipoteca na inicialização que adiciona CALC_MORTGAGE_* (shared-lib 1ae01ae8); cada um é então concedido ou retirado por conta própria.
· kamo-internal
Domínios de alias em Configurações e na guia da caixa de correio do membro
Configurações -> Email -> Domínios ganha um cartão de domínios Alias: adicione um verificado domínio, remova um, escolha o padrão ou nenhum. A guia E-mail e caixa de correio do membro agora mostra os endereços da caixa de correio principal em cada domínio de alias (Dylan@kamocrm.com também é Dylan@kamouniverse.com), e o formulário add-alias recebe um seletor de domínio para que um alias possa ir direto para um alias de domínio. O proxy não limita mais os aliases ao único domínio padrão da organização; O EmailService já recusa um domínio que a organização não possui.
· EmailService
Gerenciar os domínios de alias da organização e permitir aliases neles
org_alias_domains só existiu por SQL escrito à mão. Novo /api/email/alias-domains lista-os (qualquer membro da organização) e adiciona, remove e define o padrão (MANAGE_EMAIL_ACCOUNTS). Um domínio só pode ser adicionado quando a organização tem provado que o mantém, e nunca uma de suas caixas de correio já vive. KamoMail createAlias agora aceita um alias em um domínio de alias (sales@kamouniverse.com): o domínio não tem linha virtual_domains, então o alias é arquivado sob o domínio da caixa de correio de destino; postfix procura aliases por source sozinho e já lista o domínio em virtual_alias_domains. Também corrige AliasResponseMemberIsTextTest, que o commit anterior quebrou por adicionando aliasDomainAddresses ao AliasView.
· kamo-internal
Dez calculadoras de hipoteca em Calculadora → Hipoteca
Pagamento mensal, acessibilidade de compra, montante do empréstimo do pagamento, pagamento inicial, custos de fechamento Estimador, dinheiro para fechar, DTI, LTV (com CLTV e HCLTV), pagamento extra / pagamento antecipado e um Calendário de amortização, cada um com um modo de calculadora em sua própria janela de ferramenta, construído a partir de um kit compartilhado (mortgageUi.tsx): resultados de contagem, rosquinhas coloridas, barras, medidores e curvas de equilíbrio, dinheiro e campos percentuais com controles deslizantes, entradas mantidas com a janela, movimento reduzido respeitado. Cada um é controlado por seu próprio direito CALC_MORTGAGE_* (shared-lib 1ae01ae8, ids 650-659). Os grupos nav eles sob um pai de hipoteca; um membro que detém apenas um recebe essa calculadora em seu lugar vive em lib/mortgage/calculatorMath.ts em cima de payment.ts/affordability.ts, com testes. O O tour da calculadora ganha um passo de Hipoteca; a cópia está no dicionário (aa98d5f2).
· kamo-shared-library
Dez direitos de calculadora de hipoteca em Calculadora (650-659)
CALC_MORTGAGE_PAYMENT, _AFFORDABILITY, _LOAN_FROM_PAYMENT, _DOWN_PAYMENT, _CLOSING_COSTS, _CASH_TO_CLOSE, _DTI, _LTV, _EXTRA_PAYMENT e _AMORTIZATION: um por calculadora de hipoteca, ServiceType.CALCULATOR ao lado dos nove modos existentes, cada um com uma raiz autônoma. RoleRightHierarchyTest: valores 403 -> 413, autônomo 79 -> 89, raízes 124 -> 134.
· KlusterServices
A identidade de cada ocupante da reunião é sua própria sessão verificada (mod_kamo_presence_identity)
TPMEETAUTH (ordem do proprietário 2026-10-26): o ouvido do SI lê quem cada endpoint O estoque presence_identity remove a identidade de um cliente do banco de dados <identity> somente para sessões de token, então um guest.meet.Meet anônimo ou um A perna de Jigasi poderia apresentar um forjado. Este módulo MUC desnuda todos os clientes identidade e escreve apenas o contexto JWT da sessão (o sidecar assina-o do próprio membro ***; convidados carregam guest-<hex>). Testado em unidades no Prosody pod (identidade forjada removida, identidade de token escrita). Aplicado 2026-10-27 04:32Z com nenhuma conferência ao vivo (jicofo estatísticas: 0 conferências, 0 Participantes); Jicofo e Jigasi reconectados, convidados recebem tokens.
· MCPGatewayService
Em uma reunião, o próprio orador da linha decide a autoridade (o supervisor registrado ordena, o colega de equipe pergunta, o convidado é qualquer um)
TPMEETAUTH (ordem do proprietário 2026-10-26). kamoai-voice nomeia a linha de reunião a respostas de chamada (X-Kamo-Meeting-Turn, nunca o modelo); MeetingTurns pergunta kamoai-service que disse isso, a partir do próprio fluxo desse endpoint e verificou A sua identidade: - SUPERVISOR (conectado, ou um convidado que eles confirmaram): a sua ordem, o No União de insubordinação (orderRef meet:<turn> ou auth:<id>), sem pop-up; - TEAM_MEMBER: autenticado, o guardião de identidade deixa o SI agir com sua Apenas direitos PRÓPRIOS; - NONE / não lido / não correspondido no fluxo do orador: nível de qualquer um. As ordens são mantidas por linha, nunca sob a chave da corrida, então a ordem de um orador A identidade_confirmação_de_solicitação em uma reunião é para o alto-falante da linha (about=meet-turn:<turn>). Testes: ToolCallPipelineMeetingTest (6), IdentityPackTest (+1); suíte completa 2013 verde.
· SecurityService
Uma linha de reunião que um supervisor conectado disse que é uma ordem que o Plano de Ferramentas pode emprestar (meet:<turn id>)
TPMEETAUTH (ordem do proprietário 2026-10-26): em Kamo Meet um supervisor registrado O pedido é a sua ordem direta (Não há união de insubordinação) verifica a linha através da atribuição de alto-falante do kamoai-service (cada microfone do próprio participante) e cita-o como meet:<turn id>.
· kamo-internal
Mostrar os endereços de um alias nos domínios de alias da organização
Em cada alias na guia E-mail e caixa de correio do membro, liste o mesmo alias na org's alias domains, e sob o chip de remetente padrão, o endereço que ele realmente sai como.
· EmailService
Um alias funciona em todos os domínios de alias, como a caixa de correio principal
Os domínios alias da organização (org_alias_domains) já espelharam o primário do membro caixa de correio no compositor (erik@kamocrm.com também oferecido como erik@kamouniverse.com) mas nunca seus aliases, então eric.white@kamocrm.com não poderia enviar como eric.white@kamouniverse.com - embora o mapa de alias de plataforma do postfix já exista entrega esse endereço para o alias. Cada alias agora obtém as mesmas linhas de espelho em /sendable, que canSendAs lê, então Uma cópia de um alias padrão no alias padrão da organização domínio assume o padrão, como o primário faz. A listagem de aliases de membros retorna aliasDomainAddresses para que o Settings possa mostrá-los.
· MCPGatewayService
Proteção contra falsificação — uma conversa não verificada recebe apenas o que qualquer pessoa pode pedir até que o membro confirme em Kamo
Proprietário 2026-10-26 (TPCALLTOOLS B): alguém que só DIZ ser um membro, um supervisor ou alguém com autoridade não deve fazer o SI fazer nada prejudicial ou que se baseie nessa alegação, mesmo dentro dos próprios direitos do SI; enforced server-side. IdentityGuard (novo feijão, um construtor; conectado pelo setter): para a escrita de um SI em uma corrida em um canal que prova ninguém (chamada, reunião, texto, não provado e-mail, chat web/social, seus follow-ups; kamoai-service /auth-requests/identity), sem confirmação permanente, ordem do companheiro de equipe, verified onRequestOf ou aprovação humana, apenas as gravações de nível de qualquer um passam (mensagens internas, novos registros, tarefas, notas, reservas, contabilidade própria) e responde à contraparte da própria conversa sem anexos. Tudo o mais responde a IDENTITY_UNVERIFIED (auditado DENIED) naming identity_request_confirmation. Uma pesquisa com falha mantém gravações protegidas. identity_request_confirmation responde ao id da solicitação (uma chamada em tempo real aguarda it); uma resposta APPROVED marca a execução confirmada, então OrderDelegation levanta sua manteve 'nenhuma ordem' de uma vez (a confirmação é então a ordem da execução, auth:<id>, Sem direitos sindicais de insubordinação).
· kamo-internal
Escolher um alias como remetente padrão de um membro
A guia E-mail e caixa de correio do membro ganha uma coluna de remetente padrão nos aliases table: faça um alias o padrão, ou entregue-o de volta para a caixa de correio primária. O compositor abre seu campo De nesse alias onde quer que ele de outra forma abriria abrir na caixa de correio principal do membro: uma nova mensagem, e nova, resposta e Uma caixa de correio partilhada, secundária ou de um colega é uma caixa de correio O alias mantém a identidade de envio do primário, mas não a identidade de envio do secundário e modelo de assinatura, como um alias escolhido a dedo já fez.
· EmailService
Um membro pode enviar de um alias por padrão
PUT **************** escolhe qual alias fica em para a caixa de correio principal do membro (nulo a limpa). Um alias por membro, no máximo carrega is_default; a coluna já existia e nunca foi definida. /sendable e /from-addresses agora relatam isDefault em linhas de alias, que é o que o compositor abre seu campo De.

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