Skip to main content

Az opcionális Complexity custom runtime előkészítése

Tartsd a COMPLEXITY_CUSTOM_RUNTIME_ENABLED=0 értéket, amíg a kiválasztott host nem teljesíti az izolációs ellenőrzéseket. A gyökérben lévő Compose-konfiguráció ezt az alapértéket használja.

A runtime egyedi React-nézeteket ad a meglévő displayOpenUI toolhoz, 4-es verzióként. A native 1–3-as verziók továbbra is támogatottak. A tool kiválasztása, a chatjogosultság és a csoportos engedélyek továbbra is szükségesek.

A backend előkészítése​

A támogatott cél Linux x86_64 glibc-vel, legalább Python 3.10-zel és libseccomp.so.2 könyvtárral. A csomagolt policy pontosan a libseccomp 2.5.4 vagy 2.5.5 verzióját fogadja el, a megfelelő policy-hashekkel. A verziószám önmagában nem igazolja a működőképességet.

A mailGen/msmicroservices-architexture/ mappából készítsd elő a kiválasztott forrást:

pnpm build
pnpm complexity:runtime:prepare

A pnpm build a vendored asseteket a dist/lib/complexity/custom-runtime/assets/ mappába másolja. Nem készíti elő a Pythont. A backend közös buildjéhez nem szükséges az opcionális Python runtime.

A pnpm complexity:runtime:prepare kifejezetten a /usr/bin/python3 programot futtatja. A csomagolt, hash alapján ellenőrzött QuickJS wheelből létrehozza a dist/lib/complexity/custom-runtime/python/ mappát. Az előkészítés nem tölt le fájlokat, és nem használ pipet. Eltérő wheel- vagy native-extension-hash esetén az előkészítés leáll.

Az előkészítést azon a hoston vagy containerben végezd, amely a ComplexityService-t futtatja. A generált környezet és az assetek legyenek olvashatók az alacsony jogosultságú gyermekfolyamatnak. Ne helyettesítsd a csomagolt interpretert vagy wheelt tetszőleges változattal.

Engedélyezés az izoláció ellenőrzése után​

Tartsd letiltva a flaget, amíg a kiválasztott host nem teljesíti a csomagolt izolációs ellenőrzéseket. A COMPLEXITY_CUSTOM_RUNTIME_ENABLED=1 értéket csak az ellenőrzött deploymenthez állítsd be.

A ComplexityService indulásakor a backend először a runtime v1 próbáját futtatja. Sikeres v1 próba után ellenőrzi a v2 secret-completion frissítéseket. A sikeres v2 próba engedélyezi a secretCompletion funkciót és a v2 authoringot. Ha a v2 elérhetetlent jelez, az authoring megtartja a v1-et megbízható secretbevitel nélkül. A meglévő v1 kimenetek megtartják a pontos v1 runtime csomagjukat.

Az indulási próba az authoring elérhetővé válása előtt lefut. Ellenőrzi az assetek hashét, az elfogadott policyt és az aktuális kernelállapotot. A gyermekfolyamat rootjog nélkül, korlátozott rendszerhívásokkal és kizárólag a standard input, output, valamint error descriptorokkal futhat.

A rootjogú Node parent alacsony jogosultságú identitással indítja a gyermekfolyamatot és a kernel observert. Az observer a tényleges gyermekfolyamatot ellenőrzi. A gyermekfolyamat readiness üzenete önmagában nem elegendő.

Ha az előkészítés vagy az indulási próba sikertelen, a custom authoring nem érhető el. Az opcionális próba nem akadályozza meg a native chat indulását. Nem támogatott hoston a native nézetek és a custom kimenet olvasható fallback tartalma megmaradnak.

Release előtti engedélyezéshez olvasd el a deployment követelményeit.

A runtime határai és korlátai​

A Node parent külön Python-folyamatot vezérel QuickJS-sel. A generált forrás ott fut, nem a böngészőben. A guest nem nyithat fájlt, nem indíthat kimenő hálózati kapcsolatot, és nem érheti el az alkalmazás DOM-ját. A megbízható böngészőkomponensek csak ellenőrzött frame-eket rajzolnak ki.

A rögzített könyvtárkészlet React 18.3.1-et tartalmaz. Az engedélyezett hostelemek: div, span, button, svg, circle, canvas és state. Ez nem korlátlan React- vagy böngészőkörnyezet.

ErőforrásKorlát
Eredeti forrás12 000 UTF-16 kódegység
Guest heap32 MiB
Folyamat címtartománya128 MiB
Folyamat összesített CPU-ideje1 másodperc soft limit, 2 másodperc hard limit
QuickJS megszakítási célérték250 ms kiértékelési fázisonként, nem általános határidő
Független parent watchdog1500 ms függő kérésenként
Folyamat élettartama60 másodperc
Egyidejű gyermekfolyamatokKoordinátorfolyamatonként 8, tulajdonosonként 2
Egyidejű kérésekSessionönként 1

A parent watchdog a guest futásától függetlenül leállítja a gyermekfolyamat csoportját. A lejárat vagy hibás session nem indít automatikusan új generálást.

A custom canvas frame legfeljebb 128 körrajzoló parancsot enged, 512 × 256 koordinátatérben. Nem tölthet be külső képet, és nem futtathat rajzoló scriptet. A felhasználói működéshez lásd a custom nézet vezérlőit.

Host actionök és a külön draft gate​

A custom runtime működőképessége csak a custom nézeteket engedélyezi. Nem engedélyez mailboxírást. A host actionökhöz működő, jóváhagyott hostimplementáció és a pontos, befejezett kimenethez tartozó aktuális backend capability szükséges.

A megbízható actiongombok a generált guest fán kívül jelennek meg. A guest callbackjei nem hajthatnak végre mailboxműveletet. Minden hostkattintás ellenőrzi az aktuális jogosultságokat, a kiválasztott toolokat, a mailbox tulajdonosát, a kimenet azonosságát és a revíziókat. A mount, a preview, az újratöltés és az újracsatlakozás nem hajt végre actiont.

A ComplexityService induláskor meghívja a configureUiDraftActions(true) függvényt. A draft actionökhöz a complexity.ui_action_intents tábla, valamint friss tool- és mailbox-jogosultság is kell. Ez a gate független a COMPLEXITY_CUSTOM_RUNTIME_ENABLED beállítástól és a v1/v2 próbáktól. A configureUiDraftActions(false) letiltja a draft capabilityket.

A ledger nélkül az engedélyezett openMail action használhatja a csak olvasó útvonalat. Az intent státusza ekkor UI_ACTION_INTENT_NOT_FOUND értéket ad vissza. Az adatbázishiba hibának számít, nem a tábla hiányát igazolja.

A host action nem indít új chat decision turnt. A kanonikus draft writer meghívja a writer modellt, és kvótát fogyaszt. A szokásos sikeres mentéshez nem kell külön jóváhagyás. Csak a review-t igénylő javaslat használja a megbízható host Apply/cancel folyamatát. Az Apply a tárolt javaslatot és egy verzióhoz kötött kanonikus baseline-t használ. Nem futtatja újra a writert. Az elvetés nem töröl meglévő draftot.

Lásd a piszkozat-ellenőrzést és helyreállítást, valamint a ledger deploymentjének lépéseit.