Changelog
Ce qui est nouveau.
Chaque amélioration apportée à la plateforme, à mesure qu'elle est livrée.
· kamo-internal
L'adhéritation en vrac d'une part prise de vue à un membre de l'équipe
La grille avait déjà des cases à cocher multi-select mais rien à voir avec une sélection. La vérification des rangées révèle maintenant une action de réévaluation à côté des autres actions de lead, fermées sur REASSIGN-LEADS-MANUALLY (le serveur le re-contrôle, c'est de la commodité seulement). Utilise la vérificationDroite plutôt que la vérification Rôle de Dieu donc le mode dieu correspond à l'héberge Conduite et checkRole ne court-circuitent pas et divergeraient pour les utilisateurs de divinité. Le dialogue choisit un membre de destination par recherche, prend une note facultative, et dit de l'avant que le membre sera envoyé par courriel, puisque c'est le point de la caractéristique. Indigo/bleu plutôt que Hot Reassign's orange/rose: il s'agit d'un une action d'administration en nombre volontaire, pas un transfert d'appel d'urgence. La case à cocher de l'en-tête sélectionne chaque ligne dans la grille côté client - milliers pour un gros org - donc le plafond 250 est appliqué ici aussi. Sinon, le titre "sélectionner tout et réassigner" le flux ne faillirait côté serveur qu'après que l'utilisateur avait remplis dans tout le dialogue, avec une erreur non traduite. La sélection est approuvée par sélectionIdsRef avant le rechargement: loadLeads re-sélectionne quoi que soit ce que ref détient, donc le laisser de la population serait de nouveau vérifier le les lignes viennent de se déplacer. Le message de résultat est composé plutôt qu'une chaîne autre-si-si, car un lot peut être à la fois partiel et non notifié et que la chaîne n'a été signalée que la première.
· SecurityService
Critère d'évaluation de la réattribution en gros, fermé sur REASSIGN-LEADS-MANUALLY
POST : déplace un lot de leads sur une équipe membre et adressez-vous à ce membre une fois pour l'ensemble du lot. L'autorisation utilise REASSIGN-LEADS-MANUELY (149) - la droite pour laquelle exactement ceci. C'est plus strict que le chemin à simple plomb sur PUT /leads/-id, qui Vérification de l'ASINSG-LEADS; la réaffectation d'une centaine de sondes est un rayon de souffle différent; de la réaffectation de l'un d'eux et des deux droits, de sorte qu'ils peuvent être accordés séparément. Le niveau de visibilité non affecté est également appliqué à cet égard. L'affectation est une visibilité concédant: une fois qu'un plomb est affecté à l'appelant, il est libellé comme "assigné à moi", qui soulève lecture non attribuée 403 et saute le masque d'info de contact. Sans cela vérifier qu'un appelant détenait 149 mais pas de VOIR-UNASSIGNE-LEADS pourrait s'auto-affecter des pistes la grille les cache et les blancpte en une seule lecture. Écclérissement Les pistes notent NOT-FOUND - correspondent à ce que leur propre grille montre - donc la réponse ne peut pas énumérer des pistes cachées ou étrangères. Le lot n'est délibérément pas tout ou rien: chaque assigner Lead court dans son propre transaction et un mauvais id devient un saut, parce que jeter neuf good les réaffectations au cours du dixième sont pires que les rapports que l'on n'a pas pris. Capuchonné à 250 par appel pour lier à la fois les serrures de rangée et le ventilateur en temps réel. Le notifiant résout ses données dans une courte transaction au moyen d'un haricot séparé et envoie ensuite, donc un appel sortant avec une temporisation de lecture des années 30 ne pincent jamais a Connexion CRDB. Le franchissement de la limite des haricots est aussi ce qui rend «Transactionnel» s'appliquer à tout cas - l'auto-invocation fonctionnerait silencieusement sans transaction et L'association d'utilisateurs de L'Accupation lancerait.
· EmailService
Variables d'échantillonnage pour le modèle LEADS-ASSIGNED
Sans le cas ici, l'éditeur de modèle d'administration Preview rend le nouveau modèle avec chaque caselé, qui se lit comme un modèle cassé plutôt qu'un noteBlock est pré-rendu HTML parce que le moteur de rendu n'a pas conditionnel - l'émetteur s'effondre à "" quand il n'y a pas de note.
· kamo-shared-library
Modèle de courrier électronique LEADS-ASSIGNED; durcir l'assignationLead pour une utilisation en vrac
assignLead n'avait aucun appel d'appel et n'avait jamais été mis en production. Avant le câblage la voie de retransmission en masse à celui-ci, lui donner les garanties que le chemin a besoin: - prendre l'ordonnance et vérifier à la fois le plomb et le nouveau cessionnaire y appartiennent, de sorte que la réaffectation ne peut pas être portée à l'autre des locataires (rapporté comme "non trouvé" plutôt que "interdit" de sorte que l'erreur ne peut pas être utilisée pour sonder des ids de plomb étrangers) - verrouiller la ligne avec findByUidForUpdate: une réaffectation manuelle et une commande concurrente Résider le même chef de file et se retrouverait autrement dans une perte mise à jour - nettoyer les drapeaux de pool, en miroir CreditLeadAssignmentService. Une tête marquée pour l'auto-assignation reste par ailleurs dans la piscine après avoir été réclamée à la main et se retire de son nouveau propriétaire - publier le routage de discussion, comme le fait updateLead déjà, de sorte que l'emprunteur est ouvert en direct le chat suit l'avance au lieu de rester avec l'ancien officier Ajoutez également le modèle canonique LEADS-ASSIGNED. La clé doit être en CANONICAL-KEYS ou il ne peut jamais être ensemencé et ne peut jamais se guérir, et chaque envoyer retourne un titulaire 404 permanent.
· kamo-shared-library
Ajouter MANAGE-ORG-BRANDING (174)
Les points de terminaison d'étude de l'orgue (logos, couleurs, fonds d'information, provisionnement de thèmes) étaient propriétaire-ou-dieu seulement, ne laissant aucun moyen de déléguer l'image de marque sans remettre la propriété de l'ordonnance. Ajoute le droit délégable; le propriétaire vérifie que les séjours en tant que l'octroi implicite, de sorte que les propriétaires existants continuent à travailler sans qu'on leur en ait été affecté.
· kamo-internal
Matrices d'éligibilité des auteurs du panel du catalogue
En l'absence d'une matrice couvrant l'occupation et l'objectif d'un scénario, les prix ne sont pas rentables Avant cela, seul un prix d'achat d'une résidence principale pourrait être effectué. Les auteurs de la forme matrice et ses cellules pour un type limite, occupation et destination choisie, avec addition/supprimer cellule lignes, à côté du formulaire de lock-policy dans le même panneau. Laisser les auteurs non mis en place du produit une matrice par produit ACTIVE de l'investisseur, car la gamme de produits de la matrice n'est PAS NULL et ne peut pas exprimer "tous les produits" en une seule ligne.
· SecurityService
L'auteur de la matrice d'admissibilité au relais; la reconstruction reprend la reprise SUSPENDE
Relais POST - par l'intermédiaire de l'écriture d'org-estamping existante aide, donc un steward auteur ne représente que pour leur propre locataire. Cette poussée reconstruit également contre le changement de dcommun, qui permet à un prêt SUSPENDED de reprendre. kamo-library n'a pas d'IC propre - chaque clone de service et le construit à partir de la source - Cette correction n'atteint ce service que lorsque ce service reconstruit.
· kamo-internal
Reconstruire le studio d'agent en tant qu'espace de travail pleine largeur
La suppression du capuchon de largeur n'était pas la fixation; l'agencement lui-même devait être conçu pour l'espace plutôt que de le tolérer. Le studio est maintenant à trois zones côte à côte: - "Fil d'entrée" - les sections, avec l'actuel en surbrillance lorsque vous faites défiler (IntersectionObserver, pondéré en haut, de sorte qu'une section devient courante lorsque son en-tête atteint là où l'attention est réellement). Les sections écrites à la main sont marquées, de sorte qu'un Une partie manuscrite est trouvée plus tard sans ouvrir tout le monde. - "Editor" - les sections elles-mêmes, en carrelage dans autant de colonnes que dans les colonnes la garde d'affichage tient au lieu d'un ruban étroit. - Une vraie colonne sur un large affichage, pas une bande qui s'effondre le contenu lorsqu'il est ouvert. C'est la boucle d'édition et de veille du studio existe pour: changer une instruction, voir le changement de réponse, sans naviguer. Une instance TestDrivePanel, repositionnée plutôt que dupliquée et la monte deux fois commencerait deux séances de jeun. En dessous de xl, il tombe sous l'éditeur en tant que une ligne pleine largeur plutôt que de serrer une troisième colonne sur un affichage sans place pour l'un, et le rail se cache entièrement sur de petits écrans.
· kamo-internal
Politiques de verrouillage de l'auteur - sans une, aucun taux ne peut être verrouillé du tout
RateCommitmentService refuse une écluse chaque fois que le résultat au prix n'est pas élevé lockPolicyVersionId («lock-policy version est requise»), et un résultat ne porte qu'un si l'investisseur dispose d'une version publiée de lock-policy. Aucune interface utilisateur ne pouvait en publier une, donc le blocage du taux était inaccessible pour chaque locataire - alors que le point d'extrémité lui-même était déjà construit, org-g-g-g-g-g-g-g-g-g-g-g-g-g-g et se superposant correctement. Seule la méthode cliente et ce formulaire manquaient. Le formulaire prend les périodes de verrouillage offertes comme liste ordonnée parce que le PRELIER devient le par défaut, donc il ne les trie pas délibérément; entrées qui ne sont pas un tout positif nombre de jours sont supprimés plutôt qu'en tant que mauvais délai de verrouillage.
· kamo-internal
Montrer comment chaque agent se porte
Ajoute une section de performance au sommet du studio d'agent: conversations, comment souvent, une personne a pris le relais et ce qui l'a déclenché, les résultats de la sensibilisation et le coût. Écrit donc aucun chiffre ne peut induire en erreur: - zéro rend le mot "Non", jamais 0. - Une part ne rend que lorsqu'il y a un dénominateur; sinon "Pas de conversations encore à comparer avec". Il n'y a pas de pourcentages de décénominateur à zéro. - Lorsque rien dans la période considérée n'a été payée, on ne montre aucun chiffre de coût - une explication selon laquelle la tarification a été établie après le trafic. Partiellement La couverture indique le montant plus le nombre de réponses qui en sont absentes. - La sensibilisation est présentée comme suit: "Ceux-ci sont maintenus Il s'agit de votre dossier sur la raison pour laquelle quelqu'un n'a pas été contacté. - Les codes enum inconnus se dégradent en texte lisible plutôt qu'en un chemin de clé brut. Les colonnes de message de perversion et de transfert ont été supprimées: l'API n'a pas agrégé. par version, donc ces cellules auraient rendu un 0 fabriqué comme si elle ont été mesurées. Les conversations à elles seules répondent à quoi sert le tableau - qui a permis de sauver copie manipulée quel trafic. Plie dans le document de studio à défilement existant plutôt que dans un nouvel onglet, et tenu à l'écart de la liste des agents, où un 0 nu contre chaque agent serait exact erreurs de lecture évitées.
· AIService
Carte de notation par agent
Ce que chaque agent a effectivement fait: conversations, combien de fois une personne a dû prendre le relais Et pourquoi, les résultats de la sensibilisation, y compris ceux qui ont été retenus, et ce qu'il en coûte. Chaque nombre est un nombre que les données peuvent réellement supporter. Trois choses sont délibérément N'est pas ici : Ils sont réels sur le chemin de synchronisation et fabriqués sur le la diffusion en continu (content.length()/4), de sorte que tout total est en partie inventé. Réponses en matière de coûts la même question honnêtement, parce qu'elle est nulle plutôt que devinée où le prix est inconnu. - Pas de résolution ni de taux de déviction. Rien n'observe si une conversation Il s'est bien terminé, et "aucun transfert ne s'est produit" n'est pas la preuve du succès. - Pas de nombre de messages parversion ou de transfert. version, et émettre 0 pour eux serait une fabrication rendue en tant que mesure - la défaillance précise que cet écran existe à éviter. Le coût porte un drapeau filtré explicite et un montant nul plutôt que 0 lorsque rien dans la fenêtre n'a été payé, donc un og dont le trafic est antérieur à la tarification voit 'non enregistré' au lieu d'une confiance de 0,00 dollars. prixCalls est l'autorité plutôt que la somme, donc un vrai zéro des appels free-tiers à prix est toujours dit comme suivis. La prose de la transcription est fermée sur la base de VIS-SALES-AGENT-TRANSCRIPTS séparément de la count - le résumé du modèle d'un visiteur spécifique est le contenu de la conversation, pas un métrique. Les agents sans trafic renvoient une carte de bordure vide structurellement complète: un agent manquant dans la liste se lit comme un bogue, un agent présent avec zéros lit comme la vérité. parseHandoffArguments est maintenant partagé avec le chemin de discussion plutôt que réimplémenté, Ainsi, la contrainte de raisons inventées à AUTRE ne peut dériver entre les deux. La suite est 150 tests, vert.
· kamo-shared-library
Demandes agrégées groupées pour le tableau de bord de l'agent
Douze agrégats de qualité entre les sessions, les messages, les dossiers d'utilisation et les sorties touches, donc un tableau de bord est une poignée de requêtes groupées plutôt que de chargement de lignes en mémoire. Deux propriétés sont appliquées dans les prédicats plutôt que de les laisser aux appelants: - Les séances d'essai sont exclues dans la requête elle-même. Les véhicules d'essai de l'auteur seraient autrement la plupart des données, et un appelant qui Les oublis de filtre produisent des nombres qui semblent réels et ne le sont pas. - Le nombre de coûts (coût-coût) ne compte que les coûts de NON-NULL. Le tableau de bord distingue "rien n'a été évalué" de "il coûte zéro" - s'effondrant Ceux-ci mettraient 0,00 dollars en confiance devant un orgif dont la circulation est antérieure à la tarification. Les touches sortantes sont regroupées par décision plutôt que filtrées en envoyant. Le les refus sont la moitié la plus intéressante: un agent dont les touches sont presque toutes SUPPRESSED-QUIET-HOURS est mal configuré, et c'est invisible si les décodeurs sont jetés.
· kamo-internal
Éditer ce que coûte chaque modèle
Ajout l'édition par modèle de prix à l'écran de configuration du fournisseur. Les prix sont ensemencés à partir de le prix de la liste publié par chaque fournisseur où nous le connaissons, et en blanc où nous ne le faisons pas - un coût moyen vierge n'est tout simplement pas suivi pour ce modèle, ce qui est mieux qu'un nombre qui est trompeur en toute confiance. Copy demande aux gens de vérifier les chiffres en tête de liste par rapport à leur propre facture plutôt qu'à les présenter comme faisant autorité. Résout un bogue d'affichage pris en revue: la garniture à zéro traînante aurait rendu un prix de 10 comme 1. Il ne stripe maintenant que les zéros après la virgule.
· AIService
Catalogue de prix modèle, chemin d'écriture et remblai
La comptabilité analytique ne pourrait jamais fonctionner: AiModel a des colonnes de prix, AiModelCutteur Il les lit et ChatOrchestrationService les lit pour calculer le coûtEstimé - mais Rien ne les a écrites nulle part. Les modèles ne sont créés que par la découverte du fournisseur, et pas de prix de l'API fournisseur. 140 modèles, 0 prix, pas de chemin par lequel pourrait changer. Les colonnes étaient structurellement inaccessibles. Trois parties: - Prix du LIST à la découverte pour le vendeur de semences de base, correspondant à un identificateur normalisé avec une règle de préfixe lié aux traits d'union de sorte que gpt-4 ne peut jamais claim gpt-4o. Les modèles autres quechat (TTS, intégrations, temps réel) sont rejetés par réutiliser le contrôle de modalité existant - ils facturent une feuille différente. - Critère d'évaluation de PATCH - UI afin qu'un organisme puisse corriger ou effacer un prix. Org-scope défini exactement comme le DELETE existant. - Le remblai ne remplit que les colonnes NULL, par colonne indépendamment, et jamais écrase ce qu'un org a fixé - sinon rendre les prix modifiables serait un mentir. Idémpotent, et emballé pour que la comptabilité des coûts ne puisse jamais bloquer le démarrage. «Un modèle dont nous n'avons pas confiance pour obtenir un prix de NO plus qu'un modèle deviné.» GPT-5, o3, la plupart des Mistral, DeepSeek, xAI, Cohere et Meta sont délibérément vierges; OpenRouter et HuggingFace ne correspondent jamais à la conception, puisqu'ils facturent leurs propres taux et d'hériter de la tarification en amont serait une supposition. Un mauvais prix produit un un chiffre en forme de facture qui est irréprochable - la même raison est toujours le même coût non calculées sur le chemin de roulage, où sont fabriqués des nombres de jetons. La conversion en colonne per-1k utilise RoundingMode.UNNECESSAIRE exprès: un prix nécessitant plus de 6 décimales lancer à la classe de classe - et plutôt que de stocker silencieusement un la raison et est laissée en blanc. La suite fait 145 tests, verts.
· kamo-internal
Montrer le contexte de transfert de l'IA à l'agent prenant le relais
Rend un événement système AI-HANDOFF en tant que carte avec la raison, le résumé de l'IA, et une transcription écrasable de la conversation jusqu'à présent - de sorte que l'emprunteur le fait ne pas avoir à se réexpliquer à nouveau à la personne qui prend. Les trois états dégradés sont explicites et visibles plutôt que silencieux: transcription indisponible, transcrit tronqué et charge utile décapuchonnée en transit. Un agent doit Ne restez jamais à croire qu'ils ont le plein contexte quand ils ne le font pas. Le visiteur et l'agent partagent un sujet STOMP, de sorte que le cadre en direct arrive caviardé (le Le résumé de l'IA est son évaluation privée du visiteur et ne peut pas aller à son navigateur). Plutôt que de dire à l'agent de recharger, la carte relit la ligne complète une fois à partir de son propre point d'extrémité authentifié. La relecture est validée avant d'être adopté - une réponse qui est revenue encore à la fois est rejetée plutôt que utilisée, L'avertissement ne peut donc jamais être clair que lorsque le contexte a réellement été acquis. Tout échec retombe au message de rechargement.
· APIService
Proxydation de la voie de transfert de l'Ain-ACI
Ajout de POST - mandaté à MediaService parallèlement à sa créationSupportSession frère. Sans cela, la fonction de transfert était morte à l'arrivée : le point d'extrémité de MediaService les besoins tours X-Internal-Auth, X-Public-Chat-Org-Id et X-Public-Chat-Key-Hash, qui seule cette passerelle injecte, donc le widget est POST 404'd ici et jamais Il y est parvenu. Porte la même condition et garde la même condition que la createSupportSession. Coureurs de main le chemin complet de création de session, donc le fanaxé nue aurait laissé un Un itinéraire de création de billets qui contourne la preuve de travail que son frère ou sœur applique.
· MediaService
Porter la conversation de l'IA dans le fil humain en main
Crée ou réutilise la session de soutien, copie la transcription de l'IA dans un système unique Événement, l' itinéraires, et indique honnêtement au visiteur ce qui se passe ensuite. La confidentialité est divisée par le public, que le premier passage a fait marche arrière. Le Résumé et raison d'IASperspecter de son évaluation privée du visiteur, et une charge utile complète atteignait le navigateur du visiteur par deux portes REST et la trame STOMP alors que l'agent ne voyait rien. La rédaction s'applique maintenant à tous les le chemin orienté vers le visiteur; la ligne persistante maintient la charge utile complète pour l'agent. chat.session.-guid est un sujet unique auquel les deux publics s'abonnent, donc le live la trame est coupée à ce que le visiteur peut voir et l'agent UI relit la ligne complète à partir de son propre point de terminaison authentifiée. L'imdépotabilité est mise à l'écoute d'un guidon, d'un guillecle, et vérifiée AVANT la création n'importe quoi. Clé de la session et vérification après la création - l'évidence la forme - est inutile précisément quand cela compte: un réessai qui a perdu sa session Un jeton passe toujours le chèque et produit un ticket dupliqué et un second agent page. transcriptAttached rapporte maintenant ce qui s'est réellement passé. Il est revenu précédemment vrai même quand l'écriture avait silencieusement échoué, ce qui est le pire possible combinaison: le visiteur est informé que leur contexte est rencontré, le fil de l'agent est vide, et aucune des parties ne le sait. Copie sur la main, pas la migration : l'IA tourne quand les analyses les lit.
· AIService
L'agent a lancé un envoi à un être humain, dans son contexte
L'IA ne pouvait pas auparavant demander une personne: les règles d'escalade ont atteint le modèle via l'invite compilée, mais il n'y avait pas de signal lisible par machine à en arrière, donc le Le modèle ne pouvait que dire qu'il allait chercher quelqu'un et rien ne s'est passé. - L'outil synthétique kamo-request - humain, décrit du propre moteur activé de l'agent les titres des règles d'escalade, de sorte que le modèle voit des conditions de déclenchement identiques dans la prompt et l'outil. Intercepté avant l'expédition MCP - c'est un signal, pas un l'appel réel de l'outil - et la ligne d'appel d'Oulle, il persiste, c'est ce qui rend la raison durable et d'analyses avec zéro nouvelle colonne. - Fixé UNIQUEMENT lorsque la chaîne dispose effectivement d'un soutien en temps réel. Remise d'une Un outil qui promet un humain qui ne peut jamais arriver est pire que n'ayant pas d'outil: le widget n'a pas d'angle de support, donc le signal est abandonné et le Un visiteur est laissé en attente pour quelqu'un qui n'est jamais venu. - Le nouveau critère d'évaluation interne revient la raison d'être du transfert, le résumé de l'IA pour qui prend le relais, et la transcription UTILISATEUR/ASSISTANT. Les lignes OUTIL et SYSTEME sont exclus - l'homme a besoin de la conversation, pas de la machine. - la raison Détail et le résumé sont délibérément cachés du navigateur du visiteur: c'est l'évaluation privée du modèle du visiteur. Seulement «demandée, MediaService récupère le côté serveur de repos. - Les tours d'IA ne sont jamais déplacés ou supprimés. AiChatMessage reste le système d'analyse de l'enregistrement; le côté humain obtient une copie. Corrige également un bogue latent trouvé sur le chemin: le bloc d'outils a ignoré le par modèle soutient l'utilisation du drapeau, de sorte qu'un modèle explicitement signalé comme n'a pas été conçu les envoyaient toujours. 31 des 140 modèles sont signalés faux; ai-mcp-server-configs est Le rayon de souffle aujourd'hui est nul. La suite est 124 tests, vert.
· MediaService
Accepter la portée d'un fil d'emprunteur ouvert par un agent
L'agent de transit de l'agent de proximité d'Alig. Sans elle l'ensemble chemin sortant terminé dans un enregistrement 404 - la porte a autorisé un toucher, Un message a été composé, et il n'y avait nulle part où le dire. L'appropriation reste divisée délibérément: AIService décide d'une touche et écrit le texte, ce service le place. Rédaction de ces lignes d'AIService permettrait à la demande de publicité pour la transcription du service qui n'est propriétaire ni la discussion ni la douille. Deux choses que ça ne fera pas. Il ne crée jamais une conversation - la sensibilisation peut reprendre un fil de discussion que le visiteur a déjà ouvert, ne jamais évoquer une fenêtre de discussion à quelqu'un qui non. Et il ne croise jamais les orgs: un plomb uid se résolvant au ticket d'une autre séance d'orge mettrait l'agent d'un org dans la conversation d'une ou d'une autre g/orgo, donc l'orge est vérifié par rapport au ticket plutôt qu'à la confiance de l'appelant. Le message est attribué au membre de la session, exactement comme un message de visiteur. N'est pas à l'agent responsable. Rendre un message composé d'IA comme bien qu'une personne nommée, une personne autorisée a écrit que c'est ce qu'une règle d'information sur l'IA existe pour prévenir. s'assurer l'Abonnement précédele la publication de NATS parce que le consommateur utilise DeliverPolicy.Nouveau: publier d'abord le message persisterait, mais l'abandonnerait de chaque client connecté. Retourne à la fois id et messageId afin que le relevé d'audit de sensibilisation référencent au message plutôt qu'au fil. 404 lorsqu'il n'existe pas de fil ouvert, donc l'appelant enregistre une défaillance nette au lieu de supposer la livraison.
· AIService
Déclencheurs sortants, expéditeurs de calendrier et expédition web-chat
Fait en fait le feu de la colonne vertébrale. La porte, l'état de contact, le consentement et l'audit existait déjà; rien n'a fait l'objet d'une évaluation. - NATS activé pour AIService via son propre k8s/configmap.yaml (chaque service Java porte son propre k8s dir; KlusterServices ne détient que le cluster infra). JetStream est délibérément laissé à l'étude: NatsConfig affirme son propre facteur de réplication contre les flux mis sous réserve centralisées au démarrage, et AIService n'adhère qu'au cœur NATS et ne publie rien, ce qui permettrait de ne rien obtenir et de risquer une seconde service affirmant les répliques. - AgentOutboundConsumer a souscrit security.leads.rt. et consomme UNIQUEMENT LEIDA-CREATED/LEAD-UPDATED. L'éditeur émet également des événements de verrouillage et de statistiques - tendre la main à une personne parce qu'un collègue a pris un verrouillage d'édition sur son dossier n'est pas défendable. Les Ids arrivent comme cordes de l'éditeur, donc ils sont analysés en tant que texte plutôt qu'en tant que Long(). - AgentOutboundScheduler évalue les déclencheurs de calendrier sous quatre bornes : ensemble d'orges dérivé d'agents qui ont effectivement une portée sur (bouchon), un mince glissement taillé de temps donc coût suit le taux de nouvelle avance plutôt que le total des fils, une ligne par embout un capot, et un amortisseur de réévaluation, de sorte qu'un croisement de plomb pendant les heures de tranquillité est re-scène une fois plutôt que chaque tique pendant une journée. - Composition seed textComplet avec l'invite compilée de la version PUBLISÉE, Jamais le projet, plus l'intention de déclenchement. les relevés de défaillance de la composition; il n'y a pas de message de repli en boîte. - L'expédition WEB-CHAT ne poursuit qu'un thread existant. Les services de sensibilisation peuvent reprendre un conversation du visiteur ouvert; il ne peut pas évoquer une fenêtre de discussion chez quelqu'un qui n'en a jamais ouvert. - itinéraire SMS/EMAIL/SOCIAL-DM vers une comptabilité FAILLE enregistrée désignant la non-conformité plomberie, donc un org pointant un déclencheur sur SMS voit pourquoi dans le journal de proximité immédiatement au lieu de rien ne se passera. 23 nouveaux tests; suite 68 et vert.
· kamo-internal
Éditeur de texte requis; réglages généraux de dedupe AI; bascule de modèle de fixation
Ajout d'un éditeur pour le texte d'ouverture/fermeture obligatoire à l'échelle de l'ordre - le compilateur et Il existait des colonnes mais rien ne pouvait les fixer, de sorte que la capacité était morte. Copie indique clairement que les agents ne peuvent pas l'enlever et que l'épargne l'applique à tous agent immédiatement, et le toast rapporte combien d'agents ont été republiés plutôt qu'un "Sauvegardé", parce que les agents vivants ont changé ce qu'ils disent. Deux bugs préexistants trouvés en cours de route: - L'interrupteur "Auto-select best disponible" n'a jamais fonctionné. Le front-end lire data.autoSelectModel et envoyé autoSelectModel, mais le backend retour et s'attend à autoModelEnabled - donc la bascule toujours rendue vraie et sa valeur a été jetés sur chaque épargne. Fixation frontale; pas de changement de serveur nécessaire. - AiGeneralSettings.tsx était un code mort, jamais importé, tandis que in extenso Doublon a vécu en bas de SecurityModelsTab.tsx. Plutôt que de mettre en œuvre texte requis deux fois, le duplicata est supprimé et SecurityModelsTab importe composante partagée. Se substitue également à la pointe de l'aide des agents de vente, qui a toujours dit aux utilisateurs que la fonction était à venir bientôt.
· AIService
Persister à l'ordre du texte requis et l'appliquer immédiatement
AiOrgSettings a déjà obtenu le prix forcéPréambule/fordFooter et SalesAgentCompiler les pliers dans chaque agent, mais le contrôleur des paramètres ne lisait ni n'écrit Ils - donc la capacité était morte: un épargne semblait réussir et est revenu en blanc à rechargement. GET retourne maintenant les deux champs (y compris dans les valeurs par défaut de non-réglage) et PUT les persistent, normalisant l'ébauche à null, donc l'efface un champ efface en fait plutôt que de laisser une filte vide à plier comme un séparateur errant. Le texte requis prend désormais effet IMMEDIATEMENT, en recompilant et en republiant chaque agent publié dans l'ordonnance. Le laisser s'appliquer à la prochaine publication de chaque agent était moins cher et est un piège: un administrateur qui ajoute "toujours dire que vous êtes un automatièrement automatisé Assistant croira que c'est en direct, et un agent ne se trouve republier continueraient à parler sans elle indéfiniment. Une ligne requise qui fait silencieusement ne s'appliquent pas, c'est pire que de ne pas en offrir un. Chaque agent affecté est sauvé un nouvel agent Copie intitulée « Why, et les rapports de réponse, combien ont été republiés» l'UI peut dire ce qui s'est réellement passé au lieu de simplement "Sauvegardé".
· kamo-internal
Studio de vente d'IA d'une page complète, remplaçant les modals
L'éditeur de l'agent était un MUI Dialog de 800px dont la surface entière était une surface de 10 rangs. zone textarea, sur l'un des ongles d'IA qui utilisait un dialogue. Il s'agit maintenant d'un thème dédié route, et le modèle d'édition derrière lui est structuré plutôt qu'un seul blob. - /sets/ai/sales-agents/nouveaux colonnes de 720px, pas le studio. Cartes de modèle (la carte est l'industrie, donc pas de liste déroulante), puis deux champs: nom et une phrase sur l'entreprise. Un agent de mesure en moins d'une minute. - /sets/ai/sales-agents/[id) pleine largeur, UN document à défilement avec collant en-têtes de section, bouclés en contenu à 880px, donc les entrées monoligne ne sont pas étirées sur un écran 4K. Pas 240px nav rail: neuf sections est un travail de défilement, pas un nav job. - Essayer-it-out est une bascule d'en-tête plutôt qu'une colonne réservée de façon permanente. An vide de champ de discussion à côté d'un agent flambant neuf est un espace perdu qui lit comme le l'échec de l'utilisateur à le combler. - L'état de préparation est une liste ordonnée et dénonçante de ce qui aiderait - jamais une fraction. Une fraction dit à quelqu'un qu'il échouent ; une liste lui dit ce qu'il faut faire ensuite. - Les règles verrouillées rendent verrouillé et inamovible, et prendre une section à la main avertit quand il en contient un (le compilateur les ré-appose quand même). - L'en-tête indique clairement que les modifications n'affectent que les nouvelles conversations, parce que prompt est pris en compte lors de la création de sessions et les utilisateurs s'en concluraient autrement. Leur changement n'a pas fonctionné. - outboundEnabled n'est envoyé que lorsqu'il est effectivement modifié: le serveur 403s l'ensemble PUT si ce champ est présent sans MANAGE-SALES-AGENT-OUTREACH, y compris Dans chaque sac d'automobiles cassait le studio pour quiconque qui n'avait pas ce droit. Retirait également la case "Oid système d'invite IA" brute du double du canal de discussion éditeur. C'était un deuxième endroit, plus faible pour l'auteur de la même chose, sans la version, pas de règles verrouillées et pas d'historique - quel que soit l'éditeur que vous vous trouviez ouvert a décidé ce que les clients ont entendu. Les mesures de résolution actuelles sont toujours résolues; les canaux l'utilisation d'un avis maintenant pointant des agents. Copy ne porte pas de jargon d'IA par conception, et le tableau de l'industrie anglaise encodé est remplacé par des étiquettes traduites.
· AIService
Compilateur de l'agent de vente, versioning, portail de vulgarisation; rejeu de l'outil de correction
Configuration d'agent structuré se compile à l'invite du système, gèle par publication la version, et prend la porte où un agent doit passer avant d'initier le contact. Compilateur AgentConfig et SalesAgentCompiler: compilateur pur et déterministe de structure configement dans une prompte sectionnée. Les sections vides sont omises, de sorte qu'une règle à trois degrés agent ne compile pas pour un document qui est pour la plupart des rubriques. - Passation au niveau de la section ("écrivez cette partie vous-même") plutôt qu'un niveau de document commutateur à éditer brut: un auteur obtient un pouvoir d'expression complet sur une section pendant chaque section Une autre section ne cesse de compiler, conserve ses règles verrouillées et maintient le versioning. - Ce même mécanisme rend la migration identique à l'octet - une prose d'agent préconfigureux est stocké en totalité-document l'emporte et compile à nouveau inchangé, de sorte que la migration Le jour est un non-op pour les agents qui parlent déjà aux clients. Prouvé par l'essai. - PhraseBank est délibérément deux dimensions, avec la bonne prose sur le TEMPLATE. Une banque mondiale prise en compte sur chaque combinaison d'enum a besoin de 90 paragraphes manuscrits, dégénère en clauses empilées, et rendrait chaque org ouvert avec la même la phrase - qui détruit la seule chose qu'un organisme achète. - Six modèles (département avant et tête de file entrante: ils sont horizontaux et couvrent toute barre dont la verticale n'est pas énumérée). Chaque navire a verrouillé les règles de conformité a Le modèle ne peut jamais enlever, vérifié par essai. Cycle de vie et autorisation - Publier les gels "config, documentPrompt, hachage, modèle, fournisseur"; rollback repointe et restaure le brouillon afin que le studio ne puisse jamais montrer une chose pendant l'agent en sert un autre. - Le contrôleur est tenu pour la première fois par des droits. ÉTAT A ÉTAT A ÉTAT A ÉTAT Un membre de quelque org que puisse réécrire ce que cette gencive dit à ses clients. Retour des chutes à MANAGE-AI-SETTINGS donc aucun administrateur existant n'est verrouillé lors du déploiement. - Le chat public préfère l'invite gelée de la version publiée en direct trainingContext, et timbres ventesAgentId/versionId sur la session - l'agent y était déjà résolu et était mis au rebut. - Rédaction assistée par l'IA : une phrase dans laquelle il est procédé à une ordonnance, qui peut être vérifiée. Règles verrouillées sont reporté en code, jamais montré au modèle, de sorte qu'une ligne de conformité ne peut jamais être supprimé par la suite de l'instruction. Porte de proximité (les 14 règles testées) - L'exclusion bat tous les autres chèques ET en est la raison, parce que La raison accusée de refus est elle-même la preuve. - SMS sans avis de consentement est refusé : en vertu de la TCPA, la charge de la preuve incombe à la l'expéditeur, donc l'absence d'enregistrement est l'absence de consentement. - Des heures calmes sont jugées là où se trouve le CONTACT, et non là où se trouve l'entreprise. - Les appels à l'échec ne dépensent pas le budget de contact; les appels supprimés ne le font pas non plus, ou Un bloc se casserait en cassant tout ce qui aurais obsé. - La porte échoue FERMÉE - une porte de proximité qui ouvre les erreurs envoie des messages autorisé, le seul échec qui ne peut être annulé. Corrections trouvées en cours de route - La rediffusion de l'historique des écoutes d'outils a été rompue: la ligne OUTO n'a pas été satisfaite et l'outil d'aide - le tour de consommation n'a jamais persisté, donc le virage 2 a envoyé un contenu nul blocs. Les outils habilitants auraient échoué à chaque conversation multi-tour. - texteComplete n'avait pas de temporisation (blocage de .get(), épinglage d'un fil sur un fil lent fournisseur) et n'a enregistré aucun usage, rendant chaque appel d'assistance invisible à la facturation. - La partition du système dans l'installation de contexte était non coiffée, de sorte qu'un agent verbeux plus un RAG Le bloc pourrait évincer toute l'histoire. - coûtEstimate n'est maintenant peuplé que sur la voie de la synchronisation, à partir de vrais jetons de fournisseur. Le streaming reste nul: il fabrique des jetons comme contenu.length()/4 et multipliant qu'à partir d'un prix réel, on obtient un nombre en forme de facture qui est faux.
· kamo-shared-library
Configuration structurée en agent de vente, version vertébrale et état de proximité
Remplace le seul blob de configuration par un agent structuré et version l'un destinable modèle, et ajoute le rachis par contact qu'un agent a besoin avant qu'il puisse initier plutôt que de ne faire que de réponse. - SalesAgent gains configJson (jsonb-as-String, matching WebChatIntegration .designConfig), hasConfig, a publiéVersionId, public et outboundEnabled. formationContext est retenu comme la SORTIE COMPLÉE, de sorte que chaque consommateur existant continue de travailler intact. hasConfig est explicite plutôt que déduit de trainingContext étant vierge, parce qu'une fois qu'il est compilé, il n'est jamais l'épreuve de blanc et toute épreuve de blanc ne serait pas accessible. - SalesAgentVersion gèle la version codifiée, compiléePrompt, compiléHash, modelId, par publication. Le modèle est épinglé à côté de l'invite: gel instructions alors que les auto-routes du modèle feraient de l'artefact une demi-vérité. - AiChatSession/AiUsageRecord gains SalesAgentId et salesAgentVersionId. Précédemment " quel agent manipulait cela?" ne pouvait être résolu en marchant le mutable, nullable, non-FK WebChatIntegration.salesAgentId hop, réaffectant ainsi un canal a-t-il simulé à nouveau toute l'histoire. - AiOrgSettings gagne forcePreamble/forceFooter comme NOUVELLE colonnes annulables plutôt que la réutilisation par défautSystemPrompt, donc la concaténation est une non-op jusqu'à un administrateur remplit un dedans. Réutiliser le domaine existant aurait changé de comportement pour chaque org qui avait déjà une personne peuplée, le jour du déploiement. - AgentContactState et AgentOutboundTouch: suppression par contact transversal, les colonnes d'opt-out explicites par canal et le consentement estampillé. L'opt-out est stocké comme de vraies colonnes plutôt que JSON parce que "prouver ce nombre a été supprimé sur cette date" ne doit pas dépendre de l'extraction de la trajectoire JSON. Les enregistrements du journal tactile REFUSALS ainsi qu'envoie - un journal d'envois prouve ce que vous avez fait, un journal de Les décisions prouvent ce que vous ne feriez pas. - Droits 168-173 répartis et off MANAGE-AI-SETTINGS(53), qui n'en a pas reçu auparavant.
· kamo-internal
AI Aire des agents de vente - affectation par agent
Construit des décombres/paramètres/ai?tab-sales-agents (était un stub): des orgs créent des agents pour leur industrie de vente, soit à partir d'un modèle intégré, soit en écrivant le contexte de la formation eux-mêmes, puis éditer/activer/supprimer. Les canaux de chat (/régères/caractéristiques/chat) peuvent désormais chaque choix de l'agent qui conduit L'IA du canal, indépendamment - l'agent annule l'invite brute au système.
· SecurityService
Enrichir le routage du chat de l'emprunteur et l'état de capture subject-propriété
le routage de discussion renvoie désormais le NMLS de l'officier affecté, le titre, la photo, le téléphone, le courrier électronique et s'ils sont titulaires d'une licence valide pour l'État de propriété, plus s'il nous dit lui-même et si nous devons encore le demander. Reuses la carte SAFE-Act des données résolues afin que le chat ne puisse jamais montrer une identité fabriquée. Ajout POST/portal/subject-state: lorsque le chef de file n'a pas encore d'état de propriété, l'emprunteur peut le mettre à l'abri de la chatte; il s'écoule à travers le patchEstimate (et sa cession la rentrée de pool) comme tout autre fait revendiqué, qui déverrouille la ligne de licence.
· MediaService
Affecter un agent de vente par canal et rapport LO disponible
- WebChatIntegration CRUD threads salesAgentId (noule l'assignation) - la lo-présence rend désormais la disponibilité du membreStatus aux côtés de l'Internet, de sorte que Le widget peut montrer un statut réel au lieu d'un point nu. Sondes en or croisées encore ne retourner que « en ligne :fil».
· AIService
agent de vente CRUD, modèle de prêt hypothécaire et prompte de discussion axée sur les agents
- AiSalesAgentCartonneur (api/ai/sales-agents): RCUD et GET/modèles SalesAgentTemplateRegistre: modèles de démarrage intégrés, en commençant par un Assistant d'emprunt hypothécaire (connaissement de la conformité: pas de cotation de taux contraignants, non les promesses d'approbation, le report au fonctionnaire de prêt agréé, demande l'État soumis à la responsabilité) - PublicAiChatService: la formation de l'agent de vente qui lui est assignéContext devient le sommet niveau de la chute d'eau rapide (agent -- prompte d'intégration -orge - générique)
· kamo-shared-library
Entité d'agent de vente et d'affectation par agent par canal
Agents de vente d'IA configurables en ORg: un agent nommé pour une industrie de vente, programmé avec un contexte de formation les auteurs d'org (d'un modèle ou à la main), assignables à des canaux pour piloter l'IA de ce canal. Kamo dessert toutes les industries et le prêt hypothécaire est Un seul modèle. - Entité d'agent de vente (dao/bes et haricots/ai) et SalesAgentRepository et SalesAgentDTO - WebChatIntegration.salesAgentId (lien souple nylon) et champ DTO

Votre univers vous attend.
Commencez gratuitement en quelques minutes. Ajoutez des produits quand vous êtes prêt. Pas de migration, pas de nouvelles connexions.
Gratuit pour toujours — aucune carte de crédit requise