Changelog
Was ist neu?
Jede Verbesserung an der Plattform, wie sie geliefert wird.
· KlusterServices
Benötigen Sie den API-Schlüssel und geben Sie nur RAGService
· EmailService
Das Versenden von Post braucht einen Sitzplatz, für Menschen und KI-Mitglieder gleichermaßen
Ein Mitglied ohne lizenzierten Sitz wird mit dem gemeinsam genutzten 403 SEAT_REQUIRED Körper abgelehnt bevor irgendetwas gesendet wird: POST /api/email/send, das Shared-Mail-Postfach-Sende und die vier Strecken einladen (Senden, aktualisieren, stornieren, antworten). Ein Kalender-Ereignis speichern fragt nach der nur, wenn sie ihre Gäste per E-Mail einlädt (sendEingeladene wahr, benachrichtigenByEmail nicht falsch): der Kalenderdialog und KamoMobile senden benachrichtigenByEmail wahr auf jede speichern, so dass Ein Eintrag im Kalender steht allen offen. Interne Routen fragen nie. Der Einsatz nimmt auch die eigene NATS-Login des Dienstes (nats-user-email), die Redis ACL Login (redis-auth) und das KamoAI interne Geheimnis.
· MediaService
Meetings, Gruppenchats, Anhänge und Anrufe benötigen den Sitzplatz, der sie enthält
· kamo-internal
Der Chat-Picker listet nur die Modelle auf, die das Mitglied auswählen darf
Der Picker las die Modellliste des Administrators (403 ohne MANAGE_AI_MODELS) und bot Anbieter an, die nie ein Modell ausgewählt. Es liest jetzt GET /api/ai/models/selectable über eine neue BFF-Route, lässt die Anbieter-Optionen, verschenkt ein Anbieter-gepinntes Gespräch zurück zu Auto, und behält die Der Anbieter bestellt AIService sendet (die Priorität der Organisation), anstatt sie nach Namen neu zu sortieren.
· InitializerService
Migration für org_alias_domains, Aussaat der Plattform org zwei
Erstellt ************ und sät die Plattform org (is_top_level) mit kamouniverse.com (Standard, das Alte vorwärtstragen fleigcod. platform.mail.domain) und kontak.kamocrm.com (zusätzlich, nicht Standard). Direkt auf die Produktion vor dieser Verpflichtung angewendet - dieser Service wird manuell gegen die DB ausgeführt, nicht eingesetzt - so dass die Tabelle bereits existiert; Dies ist die Quelle der Aufzeichnung für die nächste frische Umgebung oder Wiederholung. Kamo-Shared-Bibliothek auf 1.6.2 für **************** gestoßen
· EmailService
Lesen Sie den Alias-Domain-Standard des Komponisten von org_alias_domains
**************** benutzte eine Hardkodcode-Domain (platform.mail.domain, kamouniverse.com) als synthetisches Senden-als Standard, und nur für die Plattform oder g ************ OrgAliasDomainRepository statt: jede org kann eine beliebige Anzahl von Alias registrieren Domains jetzt, jeder angeboten als Send-as Identität auf der primären Mitglied Mailbox, mit der standardmäßigen Zeile der org noch als die Die Verzugswürdige des Komponisten genau so, wie kamouniverse.com war. Kamo-Shared-Bibliothek auf 1.6.2 für ************ gestoßen
· kamo-shared-library
Hinzufügen org_alias_domains, die Per-Or-Form der Plattform-Mail-Domain
Verallgemeinert die einzelne hardcoded platform.mail.domain (kamouniverse.com, und nur für die Plattform org) in eine Tabelle kann eine beliebige Anzahl von Zeilen halten in. EmailService's SendableMailboxService liest es, um jede Domain als eine anzubieten send-as-Identität auf der primären Mailbox jedes Mitglieds, der gleiche Mechanismus wie zuvor.
· SecurityService
Der KI-Killerschalter kann von dem gelesen werden, der sein Recht hält
· kamo-internal
AI Platform Services und AI Kill Switch Plattformrechte
· kamo-internal
Die AI Workforce App und ihre vier Rechte; die App-Spiegel-Wache liest Java wieder
· AIService
Eine Routentabelle entscheidet, wer jede AIService-Route anrufen darf
· kamo-shared-library
Ein privates Posteingangspräfix für neue Dienste, und der LOS Webhook-Mitarbeiter ist Opt-in
· kamo-shared-library
Dienste loggen sich bei Redis mit Benutzername und Passwort ein
· kamo-shared-library
Eine Sitzregel für die Konsole und jeden Dienst, der sie durchsetzt
Der Entwickler liest das Mitglied mit seiner Organisation geholt und öffnet keine Transaktion von eigenen, so dass ein Sitz richtig auf einem Gewinde mit Nein entschieden wird Persistenz-Kontext (die KI WebSocket) und eine misslungene lesen wirklich nicht offen anstatt UnexpectedRollbackException am Fang vorbei zu werfen.
· KlusterServices
Melden Sie sich bei Redis als mail_rspamd an
rspamd liest sein Passwort von Secret mail/rspamd-redis-auth, enthalten in local.d/redis.conf. Die Hülse gewinnt fsGroup 11333: Das Bild läuft als 11333 und eine root:root 0440 Secret-Datei ist eine fatale Erlaubnis, die bei Konfigurationslast verweigert wird.
· kamo-shared-library
KI-Plattform-Dienste und Kill-Schaltrechte, und die Spalte des Schalters
· KlusterServices
ACL-Anwender für die Plattform, rspamd und Operatoren (Standard noch offen)
· kamo-shared-library
Die KI-Belegschaft anzeigen, überwachen, genehmigen und verwalten (329-332)
· KlusterServices
Ein Login pro Arbeitslast im KAMO-Konto, neben kamo_svc
· kamo-shared-library
AI Workforce App, außerhalb der PHI-Grenze und nie automatisch
· kamo-internal
Wählen Sie, wie eine veröffentlichte Bewerbung ihre Fragen stellt
"Stellen Sie diese Anwendung auf" (Einstellungen - Features - CRM - Anbieter & Produkte) trägt drei Möglichkeiten neben dem Chat, jeweils ein Paar Karten, die sagen, was sie sagen Mittels: - Typ: Normal (ein paar verwandte Fragen pro Schritt) oder Squeeze (eine Frage pro Bildschirm, jeder in Klartext erklärt). - Kontakt info: Start (Name, E-Mail und Telefon zuerst, gespeichert, sobald sie sind eingegeben, so dass ein aufgegebener Antrag noch eine Blei) oder Last (das Darlehen zuerst, Kontaktdaten kurz vor dem Versand; bis dahin nichts gespeichertes). - Felder: Volle oder Basic (nur das, was ein erster Anruf braucht). Eine Live-Vorschau neben ihnen zieht den ersten Bildschirm, die Sektion bestellen (Kontakt sichtbar gleitet zum Ende) und was der Kreditnehmer erfüllen wird - wie viele Fragen, und wenn die Führung gespeichert ist. Der Dialog ist "md", so dass beide Seite an Seite passen. Die Auswahlmöglichkeiten liegen auf der bestehenden PUT .../Anwendung (Security Service d345869), Rundreise durch die Anbieterliste und vorab, wenn der Dialog wieder geöffnet wird. Beim Wiedereröffnen einer Live-Seite heißt es nun "Änderungen speichern" / "Anwendungseinstellungen gespeichert". anstatt es wieder zu veröffentlichen, und seine Zeile Symbol ist ein Einstellungen Schieberegler eher als eine Chat-Blase, da es mehr als der Chat öffnet.
· kamo-apps
Die Layout-Wahl des Kreditgebers - Squeeze, Kontakt zuerst oder zuletzt, Basis
Die Hypothek Anwendung legt sich nun, wie das Produkt veröffentlicht wurde (Einstellungen - Features - CRM - Veröffentlichung dieser Anwendung): - Typ. NORMAL ist die fünf gruppierten Schritte wie bisher. SQUEEZE stellt eine Frage pro Bildschirm: eine Augenbraue, die sagt, wo Sie sind, die Frage im Display Gesicht, eine Klartext-Zeile darüber, was es bedeutet und warum es gefragt wird, dann Antwort. Felder teilen sich einen Bildschirm nur, wenn sie Teile einer Antwort sind (ein Name, eine Adresse, ein Agent und deren Firma). Tippen eine Wahl bewegt sich nach einem die Tastatur mit Pfeilen auswählen und mit Enter weiter. Die Schiene füllt sich Frage für Frage. - Kontakt info. START fragt, wer der Kreditnehmer ist der erste, und spart die Führung der Moment gibt es einen Namen und eine E-Mail - hinter einem unsichtbaren Proof-of-work, die gleiche der Senden-Button braucht - fügt dann jede spätere Antwort zu diesem Lead durch ein Token, und die endgültige senden beendet es, anstatt eine zweite. Die Seite sagt das neben den Kontaktfragen. LAST verschiebt Kontakt zu kurz vorher Zustimmung, und nichts wird gespeichert, bis das Formular gesendet wird. - Felder. BASIC behält Name, E-Mail, Telefon, Zweck, wie das Haus verwendet wird, Staat und ZIP, Preis oder Wert, Anzahlung oder Saldo, und Kredit. Hilfetext geht davon aus, dass der Leser nichts weiß: Anzahlung, Bonitätsnote, HOA, Steuern, Versicherungen, die Darlehensprogramme und die Immobilientypen werden jeweils erklärt wo sie gefragt werden. Unbeantwortete Ja/Nein-Fragen bleiben null (ausgespringt oder noch nicht anstelle der Ankunft als "Nein". Auch behoben, beide leben heute: die Zustimmung Absatz nie benannte der Kreditgeber ("Sie Ihre ausdrückliche schriftliche Zustimmung geben, Sie zu kontaktieren" - eine Funktion, die als eine Intensiv-Argument machte nichts), und die Quittung "Eine Kopie ist auf dem Weg zu ". ließ die Adresse auf die gleiche Weise. Die Zustimmung Lead-in beginnt nicht mehr mit einem Kleinbuchstaben "jemand". Proxies: ************ (POST) und /progress/{token' (PUT), die X-Forwarded-For-Handlung mit der Einreichung teilen. benötigt Sicherheitsdienst d345869 für das Layout und die Fortschrittsendpunkte; gegen ein älteres Backend das Formular ist das gruppierte, volle, Kontakt-erste Formular und das erste frühzeitig sparen 404s einmal und stoppt.
· kamo-internal
Der Session-Tab stoppt das Tragen von Guacamoles Icon
Ein Session-Tab ist Guacamoles Dokument, also sein eigener <link rel="icon" href="images/logo-64.png" besitzt die Registerkarte, und ein Mitglied, das den Computer ihrer Firma öffnet, sieht das Symbol in eine Dritte Partei. Halten Sie die Registerkarte auf Kamo Herkunft und Rahmung der Sitzung hätte die das Symbol der Organisation; das Gateway beantwortet jeden Computer.* Route mit X-Frame-Optionen: DENY, so ist das nicht verfügbar. Das Gateway beantwortet diese beiden Dateien statt. WHOSE ICON IST AUS DER HOST, UND SOMETIMES DER ANTWORT IST NOBODY'S. Eine Icon-Anfrage ist ein einfaches Bild GET ausgestellt, während der Browser macht eine dritte Partei Dokument. Es trägt keine Sitzung und kein Token, so dass der Host ist das einzige Signal gibt es. Auf einem Organisationseigene Computer.<domain", das ist eine vollständige Antwort. Auf der gemeinsamen Plattform Host ist es nicht: Auflösung durch Host gibt Namen der PLATFORM, wie layout.tsx bereits sagt . Niemand ist Mieter". Also beschließt der Plattform-Host absichtlich keine Organisation und bekommt eine markenlose Glyphe. Jede Organisation, deren Domäne noch nicht live ist, teilt diesen Host und malt KamoCRMs Marke auf der Registerkarte eines Mieters ist genau das, was ein weißes Etikett existiert, um zu verhindern, während man sieht, hier, ununterscheidbar von der Arbeit. Es ist auch nicht von der richtigen Antwort für KamoCRMs eigene Mitglieder, weshalb es für sie keine Ausnahme gibt. Nichts muss ändern für eine Organisation, um ein eigenes Symbol zu bekommen: der Moment, seine Computer Host ist live, die hostnament und die Route löst es. Die Glyphe ist eine schlichte Monitor-Umriss in Schiefer, überhaupt keine Marke, in den beiden Größen Guacamole erklärt. Das eigene Symbol einer Organisation ist alias - config.json -- favicon set, das gleiche Kette DynamicMetaLoader verwendet, und jeder Ausfall entlang es fällt zurück auf die Glyphe: ein favicon ist nicht wert scheitern eine Seite vorbei, und eine falsche Marke ist schlimmer als keine Marke. THE ROUTE LIVES IN Kamo, NICHT BESIDE THE REST OF THE GATEWAY IN Hosted-Computern. Traefik-Läufe mit allowCrossNamespace und allowExternalNameServices sowohl bei ihrer Standardeinstellung von false, so ein IngressRoute dort kann Kamowebinternal-Service nicht erreichen, und das Einschalten einer der beiden Flaggen ist eine Cluster-weite Änderung, um ein Favicon zu erreichen. Das Zertifikat ist bereits in diesem Namensraum ausgestellt, so die Route sitzt neben dem Dienst, den es weiterleitet und CI es mit dem Code. themePublicBase wird extrahiert, so dass das Layout des Buckets einmal aufgeschrieben wird: Theme.tsx ist "Verwenden Sie Client" und der Server benötigte die gleiche Form.
· kamo-internal
Arive in CRM-Märkten, auf der Startseite und auf Mitgliedsprofilen
- Märkte: "Aive" schließt sich dem MLOS Dropdown an, und der Konfigurierdialog hält die vier Zapier Haken (nur mit Schreib-nur, maskiert), die Arive - Kamo Adressen an Einfügen in Zaps, die Bühne - Statuskarte, die Lead-Creation und Stage-Push-Schalter, eine Setup-Anleitung und das Aktivitätsprotokoll der Verbindung. Konfigurieren ist jetzt eine erlaubte Liste: ein Anbieter mit nichts zu konfigurieren keine länger bekommt eine aktivierte Taste, die nichts tut. - Startseite: LosHeaderActions macht die Zustände jedes Anbieters wieder unverändert; Arive schaffen - Warten auf Arive (Wiederbestätigbar nach 15 min, mit eine Bestätigung) in Arive mit seiner Bühne öffnen, für eine Arive Blei konvertieren, und ein Sync-Problem-Chip. Ein anstehender Link re-lest die Marktkonfiguration jeder 10 s so wird es in "Open in Arive" ohne eine erneute Last. - Profil: die Lender Anmeldedaten Karte rettet wieder (es konnte nicht, da die Profil-Umbau, c20bac57). Jede Marktreihe bearbeitet sich für sich: MeridianLink nimmt Benutzername + geheim, Arive die Arive Login E-Mail des Mitglieds. - MarketConfig.mlosProvider ist die Anbietergewerkschaft, keine nackte Schnur. Spec: ****************
· SecurityService
Layout-Auswahl, und Speichern Kontaktdaten, wie sie gehen
Der Veröffentlichungsdialog wählt nun aus, wie sich der öffentliche Hypothekenantrag legt out (kamo-shared-library ac83bea1): NORMAL oder SQUEEZE, Kontaktdaten am START oder LAST, FULL oder BASIC Fragen. - PUT ************ nimmt AnwendungLayout, AnwendungContactStep und AnwendungFieldSet; ein fehlendes behält, was ist gespeichert, so dass eine Seite in den Ruhestand nie sein Layout zurückgesetzt. Die Reaktion spiegelt sie wider. - GET /public/loan-application/{p> antwortet layout {type, contactStep, fieldSet, immer gelöst. - POST ************ - nur für ein START-Produkt (404 anderweitig): *** ausfallgeschlossen, IP-Budget, Name + E-Mail erforderlich. Erstellt die Leitung mit der Quelle "Online Loan Application (unfertig) " ein 256-Bit-Token in Redis für einen Tag gehalten, innerhalb der Transaktion geschrieben, so dass ein Redis-Ausfall rollt den Vorsprung zurück, anstatt ein Duplikat zu garantieren. - PUT ************ fügt Antworten zu diesem Lead hinzu durch updateLead (abwesend = unverändert). Token an das Produkt gebunden. - POST /public/loan-application/{p> mit progressToken beendet die Führung (Quelle "Online Loan Application", Empfang wie bisher) statt der Einreichung eines ein zweites; ein unbekannter oder abgelaufener Token reicht wie zuvor ein neues Lead ein. - Bleibesitz wird geprüft VOR UpdateLead statt durch den Fang seiner Ausnahme: es ist @Transactional und würde die Anfrage Rollback-only markieren. Ratsche Basis: Start-Fortschritt und sparenProgress mit ihren Gründen hinzugefügt, und byHost (auf Haupt von 81e0756 ohne Linie hinzugefügt, die die Ratsche rot gelassen hat).
· kamo-shared-library
Layout-Auswahl für einen veröffentlichten Leihantrag
Drei Spalten zu LEAD_VENDOR_PRODUCTS, ausgewählt im Publikationsdialog und gelesen von Kamo-apps, um die öffentliche Hypothek Form zu legen: - APPLICATION_LAYOUT NORMAL (Gruppenschritte) | SQUEEZE (eine Frage pro Bildschirm) - APPLICATION_CONTACT_STEP START (Kontakt zuerst, gespeichert, wie sie gehen) | LAST - APPLICATION_FIELD_SET FULL | BASIC Einfache Strings, nicht @Aufgezählt, also friert keine ddl-auto CHECK Einschränkung den Wert ein gesetzt. Null liest sich als NORMAL / START / FULL, die Form, wie es war. Die DTO trägt die aufgelöste Werte; setProductApplication gewinnt eine Überlastung unternimmt die Optionen, mit null Mitglieder, die "halten" bedeuten, und die alte Unterschrift delegiert sich unverändert. DDL hat sich bereits auf den Cluster als Eigentümer beworben: ALTER TABLE public.lead_vendor_products ADD COLUMN IF NOT EXISTS application_layout varchar(16); ALTER TABLE public.lead_vendor_products ADD COLUMN IF NOT EXISTS application_contact_step varchar(16); ALTER TABLE public.lead_vendor_products ADD COLUMN IF NOT EXISTS application_field_set varchar(16);
· InitializerService
Die Spalten und Aktivitäten protokollieren die Arive-Integrationskarten
**************** (einzigartig), die Arive Link Felder auf lead_los_links (Art, GUID, Deep Link, Stage, pending- since, last error) und los_sync_events. Alles annullierbar, keine Verfüllung; @Bestellen(0) weil die Entitäten sie zu kartografieren. Bereits auf Yugabyte von Hand (als Besitzer, kamo) vor der Shared-Bibliothek Push; dies hält eine frische Umgebung im Gleichschritt.
· APIService
Die öffentliche Ansprache Zapier postet Arive-Veranstaltungen an
POST ************ Auslöser Der AriveInboundController von SecurityService, dem der Token-Check gehört. Die query string (das Ereignis) überquert den Hop, eine Formkörper der Behälter bereits parsed wird von seinen Parametern umgebaut, und der Status von SecurityService wird weitergegeben durch as-is: Zapier zeigt eine Nicht-2xx-Aufgabe als fehlerfrei, wo die Leute, die den Zap beibehalten, werden hinschauen. Ein missgebildetes Token verlässt nie den Rand.
· SecurityService
Arive über Zapier - Verbindung, eingehende Ereignisse und Aktionen pro-Lead
Ein Markt, der an Arive gebunden ist, bekommt eine Verbindung (vier Zapier Catch Hooks für erstellen-Darlehen, Update-Leitung und Konvertierungs-Lead, plus eine eingehende URL dessen Token als AHB gespeichert ist) bei ************ mit einem Aktivitätsprotokoll, Token-Rotation und "sendet eine Probe", so dass Zapier die Felder jedes Hooks lernen kann. Arives Auslöser Post zu ************ JSON oder forme Körper (Zapiers Standard), anerkannt von unserem crmReferenceId, dem Arive GUID, die Display-ID, oder für eine in Arive konvertierte Leine - der Kreditnehmer E-Mail. Anerkannte Rekorde wenden Arive-gewinne an; eine neue Etappe bewegt den Kamo status durch die Bühnenkarte der Verbindung; unbekannte Aufzeichnungen werden zu Leads dem Mitglied Arive Namen als Offizier zugewiesen, und unsere uid wird zurückgeschickt. Jedes Ergebnis wird protokolliert, und nichts beantwortet eine stille 200. Die Lead-Seite erstellen / offene Sendungen auf dem Markt: Arive Antworten 202 PENDING (es bestätigt asynchron) und fügt /convert. Mitgliederkarte sich zu ihrer Arive E-Mail (kein Geheimnis, kein NMLS, ein Mitglied pro E-Mail pro Markt). Der LO-XML-Anwendungsbereich Endpunkt verweigert jetzt nicht-MeridianLink Anbieter statt der Anwendung eines All-Null-Patch.
· kamo-internal
Starten Sie eine Coder-Sitzung in der Cloud und zeigen Sie sie auf dem Fenster
die die git Kassen auf der dev-Maschine auflistet (zuletzt in Modell und Mühe des Mitglieds. Die Maschine baut den Befehl, mit CCR_FORCE_BUNDLE=1, so dass die lokale Kasse hochgeladen und nicht geklont wird von einer GitHub-Fernbedienung haben wir nicht. Das Terminal, das es öffnet, trägt "Cloud: true" in seinen Requisiten, und der Titel bar und maximierte Registerkarte ziehen eine Wolke über seine Terminal-Symbol (windowIcon). Eine Requisite statt eines Icon-Kennzeichens, so dass es eine Nachladung überlebt; Wiedereröffnung von die Terminalliste trägt die eigene Marke der Maschine zurück zum Fenster.

Euer Universum wartet.
Fügen Sie Produkte hinzu, wann immer Sie möchten – keine Migration, keine neuen Anmeldungen.
Für immer kostenlos – keine Kreditkarte erforderlich