sgcWebSockets 2026.10 is uit. Drie lijnen lopen erdoorheen: sgcHTML heeft de onderdelen gekregen die een zakelijke webapplicatie nodig heeft en die je niet meer met de hand hoeft te schrijven, de cryptografie is post-quantum geworden zonder ook maar één externe library toe te voegen, en een nieuwe reeks Enterprise-authenticatiecomponenten neemt het inlogscherm over.
Webapplicaties: het saaie werk, klaar
Sessies, login en CSRF. De nieuwe component TsgcHTMLAuth en de bijbehorende session stores houden de cookie bij, beantwoorden de login- en logoutaanvragen, sluiten inactieve sessies af en beperken mislukte inlogpogingen. Het CSRF-token reist mee in een meta tag, htmx voegt het vanzelf toe aan elk verzoek, en de server wijst een post af die het niet meestuurt.
FAuth := TsgcHTMLAuth.Create(Self);
FAuth.SessionStore := TsgcHTMLSessionStore_Memory.Create(Self);
FAuth.CookieName := 'app_session';
FEngine.Auth := FAuth;
Routes die lezen als routes. Padparameters, een methodefilter, en toegang tot de headers, de cookies en de body:
with FRouter.Routes.Add do
begin
Path := '/customers/{id}/edit';
Methods := [hrmGet, hrmPost];
RequireLogin := True;
RequireRoles := 'admin,sales';
end;
Pagina's die je kunt testen. DispatchDirect beantwoordt een verzoek zonder dat er een socket achter zit, en een nieuwe unit leest de gegenereerde HTML, vindt elementen op id, klasse, tag of attribuut en vergelijkt een pagina met een opgeslagen kopie, zodat een onbedoelde wijziging in de markup wordt opgemerkt door een test in plaats van door een klant.
Navigatie die aanvoelt als een applicatie. Pagina's veranderen zonder volledige herlaadbeurt en behouden de scrollpositie en wat de gebruiker aan het typen was, met een laadbalk, een dialoogvenster wanneer de verbinding wegvalt en een melding wanneer een verzoek mislukt. Dit alles standaard uitgeschakeld.
De vier hoofdfuncties
Elk van deze heeft een eigen artikel, aan het einde gelinkt, dus hier alleen wat het is:
- MCP Apps. Een MCP-tool die antwoordt met een pagina in plaats van een alinea, gerenderd binnen ChatGPT, Claude of VS Code, opgebouwd uit dezelfde componenten als elke andere sgcHTML-pagina.
- De AI-paginagenerator. Beschrijf een pagina, of geef de designer een screenshot, en hij bouwt hem op uit je geregistreerde componenten als een kandidaat die je accepteert of verwerpt.
- Het CRUD-component. Lijst, zoeken, paginering, formulier, verwijderen en het schrijfpad van één dataset, over een TDataSet of over je eigen SQL, met een IDE-wizard en een generator vanaf de command line.
- Het AI Data Pack. Stel een grid, een data table of een draaitabel een vraag in gewone taal, met een regelgebaseerde parser die antwoordt zelfs als er helemaal geen API-sleutel is.
Push, op twee manieren
Server sent events kunnen nu de updates dragen in plaats van een WebSocket, met herhaling van wat er gemist is terwijl de verbinding verbroken was, en het werkt met de gewone HTTP-server. Web Push bereikt een browser die gesloten is. Er komen een berichten-inbox en een voorkeurentabel bij, en het notificatiecomponent bepaalt welk kanaal een bepaalde gebruiker krijgt.
Een EventSource-client voor Delphi
De nieuwe TsgcSSEClient consumeert elke Server-Sent Events-stream en wordt in elke editie meegeleverd. Hij herverbindt zelfstandig en stuurt Last-Event-ID, zodat de server hervat waar de stream stopte. Het door de server verzonden retry:-veld wordt gerespecteerd, OnEvent geeft je het event-type, de data en het id, en ReconnectOptions voegt backoff en jitter toe. TLS, proxy en authenticatie worden ingesteld in OnBeforeConnect, dat je de door het component gebruikte HTTP-client geeft.
FSSE := TsgcSSEClient.Create(Self);
FSSE.URL := 'https://example.com/events';
FSSE.ReconnectOptions.Backoff := True;
FSSE.ReconnectOptions.MaxInterval := 30000;
FSSE.ReconnectOptions.Jitter := 0.2;
FSSE.OnEvent := DoSSEEvent;
FSSE.Open;
procedure TForm1.DoSSEEvent(Sender: TObject; const aEvent: TsgcSSEEvent);
begin
Memo1.Lines.Add(aEvent.EventType + ': ' + aEvent.Data);
end;
De parser erachter, TsgcSSEParser, is publiek. Voer hem de bytes van elke text/event-stream in stukken van willekeurige grootte, precies wat een LLM-streamingresponse of een MCP Streamable HTTP-antwoord is.
FParser := TsgcSSEParser.Create;
FParser.OnEvent := DoSSEEvent;
FParser.Feed('event: delta' + #10 + 'data: {"text":"Hel"}' + #10#10);
Een nieuwe demo, Demos\20.HTTP_Protocol\17.SSE_Client_Component, laat het end-to-end zien.
AI: antwoorden waar je iets mee kunt
TsgcAIChat kan nu via de nieuwe methode ChatJSON vragen om JSON dat een door jou opgegeven schema volgt, bij OpenAI, Anthropic, Gemini, DeepSeek, Ollama, Grok en Mistral; de methode ontleedt het antwoord en vraagt nogmaals, met de parsefout erbij, wanneer het niet te lezen is. Het chatcomponent verstuurt en ontvangt nu ook afbeeldingen, en BaseUrl wordt nu door elke provider gerespecteerd en niet meer alleen door Ollama, zodat elk van hen naar een proxy of een lokale gateway kan worden gewezen.
Documentextractie: van PDF naar gevalideerde JSON
De nieuwe TsgcAIDocumentExtractor neemt een PDF of een afbeelding en een JSON-schema, en levert JSON terug die tegen dat schema is gecontroleerd. OpenAI, Anthropic en Gemini lezen de PDF rechtstreeks, de andere visionmodellen lezen afbeeldingen. De ingebouwde presets dekken facturen, bonnetjes en identiteitsdocumenten (dpInvoice, dpReceipt, dpIDCard), en elk veld krijgt een confidence mee, zodat OnLowConfidence je vertelt welke waarden onder MinConfidence een tweede blik verdienen. Wanneer het antwoord niet valideert, vraagt het component nogmaals, met de fouten erbij (ValidationRetries).
FExtractor := TsgcAIDocumentExtractor.Create(Self);
FExtractor.AIChat := AIChat1;
FExtractor.Preset := dpInvoice;
FExtractor.MinConfidence := 0.8;
FExtractor.OnLowConfidence := DoLowConfidence;
Memo1.Lines.Text := FExtractor.ExtractFile('invoice.pdf');
if FExtractor.LastResult.FieldConfidence('total') < 0.8 then
ShowMessage('Check the total by hand');
Koppel een TsgcAIOCRTesseract, of een TsgcAIOCRWindows die de in Windows 10 en hoger ingebouwde OCR gebruikt zonder dat er iets geïnstalleerd hoeft te worden, en zet OCRMode op domFallback of domAlways, en de tekst wordt eerst lokaal herkend, zodat zelfs een tekst-only model dat op Ollama draait de extractie kan uitvoeren. Voor je eigen prompts krijgt TsgcAIChat er ChatWithDocument, ChatWithDocumentBase64, ChatWithAttachments en ChatJSONWithAttachments bij, die een of meerdere bestanden, gehouden in een TsgcAIChatAttachments-lijst, samen met het bericht versturen.
Een spraakagent die luistert, terugpraat en tools aanroept
De nieuwe TsgcAIVoiceAgent is één component dat luistert, detecteert wanneer de gebruiker zijn beurt heeft afgerond, met zijn eigen stem antwoordt en je tools aanroept, via OpenAI Realtime of Gemini Live. Het spreekt WebSocket, of WebRTC met OpenAI, en draait op Windows, Android en iOS. Beurten worden gedetecteerd via server-VAD, semantische VAD, een VAD aan de clientzijde of handmatig (vtdServerVAD, vtdSemanticVAD, vtdClientVAD, vtdManual). Met BargeIn kan de gebruiker onderbreken, waarna de agent stopt met praten en zijn antwoord afbreekt op het punt waar het werd onderbroken. OnTranscript levert live transcripties van zowel de gebruiker als de agent.
FAgent := TsgcAIVoiceAgent.Create(Self);
FAgent.Provider := vapOpenAI;
FAgent.OpenAIOptions.ApiKey := 'sk-...';
FAgent.Instructions := 'You are the shop assistant. Keep answers short.';
FAgent.TurnDetection.Mode := vtdSemanticVAD;
FAgent.BargeIn := True;
oTool := FAgent.Tools.Add;
oTool.Name := 'find_product';
oTool.Description := 'Looks up a product by name';
oTool.Parameters :=
'{"type":"object","properties":{"name":{"type":"string"}}}';
FAgent.OnTranscript := DoTranscript;
FAgent.OnToolCall := DoToolCall;
FAgent.Start;
procedure TForm1.DoToolCall(Sender: TObject; const aCallId, aName,
aArguments: string; var aResult: string; var aHandled: Boolean);
begin
if aName = 'find_product' then
begin
aResult := FindProduct(aArguments);
aHandled := True;
end;
end;
Tools komen van OnToolCall, en wanneer een TsgcWSAPI_Client_MCP aan MCPClient wordt toegewezen, worden de tools van die MCP-server automatisch aan het model aangeboden. Voor telefonie schakelt Audio.Format over naar G.711 mu-law of A-law op 8 kHz (vafG711ULaw, vafG711ALaw). De spraakagent is beschikbaar van Delphi 7 tot Delphi 13 en voor .NET, en een nieuwe demo maakt er een spraakwinkelassistent van bovenop een TDataSet.
Cryptografie: post-quantum, in Object Pascal
ML-KEM (FIPS 203), ML-DSA (FIPS 204) en SLH-DSA (FIPS 205), hybride sleutelencapsulatie met X-Wing, post-quantum X.509-certificaten en certificaatautoriteiten, en JWT's ondertekend met ML-DSA. Dit alles geschreven in Object Pascal in het sgcCrypto-pakket, zonder externe library, gevalideerd tegen de bekende NIST-testvectoren.
Daarbovenop staat een native TLS 1.3- en TLS 1.2-engine, ook in puur Pascal: een client of een server spreekt TLS zonder OpenSSL en zonder SChannel, en onderhandelt daarbij over de hybride post-quantumgroepen van RFC 10024, met ALPN, S N I, clientcertificaten en optioneel gebruik van de vertrouwensopslag van het besturingssysteem. TLS 1.2 is er voor de peers die nog geen TLS 1.3 kunnen, met standaard forward-secret AES-GCM- en ChaCha20-Poly1305-suites, extended master secret en downgradebescherming, en TLSOptions.Version stelt de laagst toegestane versie in. De hybride groepen blijven voorbehouden aan TLS 1.3.
De klassieke kant is in dezelfde slag verstevigd: geblindeerde RSA in constante tijd, scalaire vermenigvuldiging op elliptische krommen in constante tijd en Ed25519, tabelvrije AES en GHASH, geïmporteerde privésleutels die tegen hun publieke helft worden gecontroleerd, en niet-minimale DER-handtekeningen die worden geweigerd.
Authenticatie: de login waar iedereen om vraagt
Een nieuwe reeks authenticatiecomponenten beantwoordt de vragen die elke klant over het inlogscherm stelt. Ze zitten in de edities Enterprise en All-Access en in de sgcAuth-pack, en dezelfde componenten horen bij sgcWebSockets .NET.
- Passkeys. De WebAuthn-server meldt een gebruiker aan zonder dat er een gebruikersnaam wordt getypt, biedt de passkeys aan in de autofill-lijst van de browser zelf, bewaart meerdere passkeys per gebruiker, onderscheidt een gesynchroniseerde passkey van een die aan één apparaat vastzit, en geeft een event zodat de credentials in je eigen database staan.
- SAML Single Sign-On.
TsgcSAMLServiceProvidermaakt van je applicatie een SAML 2.0 service provider voor Entra ID, Okta, AD FS, Google Workspace, Keycloak of elke andere identity provider. - Active Directory en LDAP.
TsgcLDAPClientmeldt gebruikers aan met hun directorywachtwoord over LDAPS of StartTLS en leest hun groepslidmaatschap, geneste groepen inbegrepen. - Codes uit een authenticator-app.
TsgcTOTPAuthenticatormaakt en controleert de codes van Google Authenticator, Microsoft Authenticator en vergelijkbare apps, met de aanmeldlink voor de QR-code, bescherming tegen hergebruik en herstelcodes. - OpenID Connect.
TsgcHTTP_OIDC_Clientmeldt gebruikers aan bij elke OpenID-provider via het discovery-document en valideert de ID-tokens en de bearer-tokens die je eigen API bereiken. - Mail zonder opgeslagen wachtwoord.
TsgcMailOAuth2haalt en vernieuwt de OAuth2-tokens van Microsoft 365 en Gmail die SMTP, IMAP en POP3 nu verwachten.
Reparaties die het noemen waard zijn
- Het ondertekenen en valideren van JWT met RSA- en ECDSA-sleutels, en geheugencorruptie in 32-bit applicaties, wanneer OpenSSL statisch is gelinkt.
- De SChannel-handler die bij elke verbinding met een PFX-bestand een kopie van de privésleutel achterliet in de Windows-sleutelopslag, en die op recente Windows-versies het clientcertificaat niet verstuurde.
- Gelijktijdige SChannel-verbindingen met een certificaat uit de Windows-opslag die de handshake lieten mislukken.
- De OAuth2-server die DPoP-bewijzen afwees die met RSA-sleutels waren ondertekend.
- Ondertekende CloudFront-URL's waarvan de handtekening niet URL-veilig gecodeerd was.
.NET
De .NET-library houdt gelijke tred: auth en sessies met een ClaimsPrincipal-brug voor ASP.NET Core, de router, de testhulpmiddelen, SPA-navigatie, het SSE-transport met een native endpoint, gestructureerde output, documentextractie met beide OCR-engines, de realtime spraakagent, het AI Data Pack, Web Push, MCP Apps, het CRUD-component met zijn adapters en de nieuwe TsgcSSEClient, allemaal met dezelfde API-namen als in Delphi.
Razor Tag Helpers voor ASP.NET Core. sgcHTML past nu in een MVC- of Razor Pages-applicatie zoals Telerik UI en DevExpress dat doen. Tag Helpers zoals <sgc-grid>, <sgc-form>, <sgc-autocomplete>, <sgc-dialog> en <sgc-chart>, en hun fluent tegenhangers onder Html.Sgc(), renderen Bootstrap 5 aan de serverkant en praten via htmx met je controllers, zonder JavaScript-framework. Het grid pagineert, sorteert, filtert, doorzoekt en exporteert naar XLSX en PDF over een IQueryable, zodat EF Core alles als SQL uitvoert:
<sgc-grid name="orders" key="Id" items="Model"
asp-action="Read" asp-export-action="Export" export="xlsx,pdf"
page-size="15" sortable="true" filterable="true"
searchable="true" push-url="true">
<sgc-column field="Reference" searchable="true" />
<sgc-column field="Customer" searchable="true" />
<sgc-column field="OrderDate" title="Date" format="{0:yyyy-MM-dd}" filter="range" />
<sgc-column field="Total" format="{0:N2}" align="right" filter="range" />
</sgc-grid>
// OrdersController
public IActionResult Read(SgcDataRequest request) => this.SgcGrid(request, Rows());
Invoer bindt met asp-for en toont de ModelState-fouten, en this.SgcCloseDialog("edit-order", refresh: "orders") sluit een bewerkdialoog en laadt het grid opnieuw. Wat de anderen niet hebben is server push: een grafiek met live="true" tekent opnieuw in elke geopende browser wanneer een achtergrondservice hub.BroadcastChartAsync(...) aanroept, via de sgcHTML WebSocket en zonder SignalR-code. Het wordt geleverd in het NuGet-pakket esegece.sgcHTML.AspNetCore, inclusief de Community-editie, en de demo 22.RazorMvc is het bekende ordervoorbeeld daarmee opnieuw opgebouwd.
Upgraden
Alles wat nieuw is, is additief en standaard uitgeschakeld. Zet de nieuwe units erbij, herbouw je packages, en een bestaande applicatie gedraagt zich precies zoals daarvoor.
De volledige versies
- Draai je Delphi-app binnen ChatGPT en Claude
- Zet een screenshot om in een Delphi-webpagina
- Delphi TLS 1.3 zonder OpenSSL-DLL's
- Een Delphi-CRUD-webpagina in vijf minuten
- Stel je Delphi-grid een vraag in gewoon Engels
- Een gesloten browser bereiken, vanuit Delphi
- Delphi-login met Passkeys, SAML SSO, LDAP en TOTP 2FA
- SAML Single Sign-On in Delphi met Entra ID, Okta en AD FS
Bekijk het
Er is een korte video hierover op het eSeGeCe-kanaal.
Vragen, feedback of hulp bij migratie? Neem contact op — je krijgt antwoord van de mensen die de code hebben geschreven.
