> Ir-reviżjoni lingwistika ta’ din it-traduzzjoni għadha għaddejja. Jekk xi silta mhijiex ċara, ara t-[test oriġinali bl-Ingliż](https://www.sm.ch-j.eu/docs/i18n/en/remote-editor-latency.md). # Iffrankar mill-bogħod tal-edituri u monitoraġġ tad-dewmien ## Il-kawżi tal-għeruq L-editur ta' qabel tella' l-fajl ta' ħidma tiegħu fid-direttorju prinċipali tal-mira, li spiss ma jkunx jista' jinkiteb mill-kont SSH taħt `/etc` jew `/var`. L-isem tal-isem SFTP ma pprovda l-ebda passaġġ sudo awtorizzat, verifika tal-kunflitt fil-linja bażi, verifika tas-sigurtà tal-metadejta jew semantika ta' min joqgħod fuqha. Il-handler tal-iżbalji ħassar il-kopja temporanja, u neħħa l-materjal ta' rkupru anki meta t-tlestija ma kinitx ċerta. L-istatus tas-sessjoni qabel kien espost biss l-istat ta' konnessjoni. Ma kien hemm l-ebda kejl tar-rispons SSH tal-ICMP jew awtentikat li jitma' l-indikatur terminali. ## Ħlief il-protokoll 1. A helper SSH fiss jiftaħ fajl regolari, uniku link bl-użu deskrizzjoni relattiva operazzjonijiet u `O_NOFOLLOW` għal kull komponent tal-passaġġ. Hija tkopri l-kontenut, SHA-256 hash, apparat/inode, UID, GID, bits permess komplut, nanotieni modifikazzjoni / tibdil ħinijiet u l-attributi estiżi li jinqraw kollha. Ewlieni jivverifika l-hash u jiddekowdja stretti UTF-8, preservazzjoni BOM. Kull dokument gets `editId` opak, ambitu għall-plugin tiegħu, sessjoni terminali u l-identità server. 2. Operazzjoni ta' tħejjija mhux privileġġata ssolvi l-kont awtentikat dar permezz `pwd.getpwuid(os.getuid())`, toħloq `$HOME/ch-j-sm/` bil-mod `0700` u joħloq privat, ġurnal esklussiv ta 'rkupru. Dar mhux sikura, spazju tax-xogħol ta' symlink, jew spazju tax- xogħol li jkun proprjetà ta' kont ieħor hija miċħuda. 3. Ewlieni uploads a moħbija, 128-bit `.tmp` dossier ħidma permezz SFTP ma ' ħolqien esklużiv (`wx`), modalità `0600` u t-tieni u sittin kanal/upload timeout. Il-ġurnal fih il-mira, il-linja bażi oriġinali u l-hash ta' ħidma mistennija; ma fih l-ebda kredenzjali. 4. **Wieħed SSH exec twettaq il-finalizzazzjoni kollha**, b'mod fakultattiv permezz ta' eżekutur sudo eżistenti. L-ajjutant jiftaħ b'mod sigur u jħaffef il-kopja taxxogħol privat u jifflaxxjah. Hija tillokkja l-inode oriġinali, kontrolli tal-linja bażi tagħha, toħloq fajl destinazzjoni esklussiva ħdejn il-mira, jikteb kontenut kollu, japplika u jivverifika metadata, jivverifika l-oriġinal mill-ġdid, u fwawar is-sostituzzjoni. 5. L-istess Direttorju `os.replace` jissostitwixxi l-mira. Il-kumpanija prinċipali direttorju huwa mlaħalħa u l-passaġġ finali, hash, inode u metadata huma vverifikati. Il-passaġġ oriġinali jibqa' disponibbli sakemm jinbidel. Il-fajl ta' ħidma qatt ma jiċċaqlaq tul is-sistemi tal-fajls u qatt ma jitneħħa mill-finalizzazzjoni. 6. Wara Core jirċievi suċċess verifikat, a tindif separati terġa 'tiċċekkja l-finali il-kontenut u l-metadejta tas-sigurtà qabel ma jitneħħa l-fajl ta' ħidma u l-ġurnal. Il-falliment tat-tindif għadu jirrapporta ffrankar ikkonfermat b'`recoveryAvailable: true`. A upload fallew, sodo fallew, kunflitt, żball metadata jew is-sostituzzjoni naqset iżomm l-oriġinali u kwalunkwe materjal fi stadji. It-tlugħ mhux komplut huwa identifikat bħala tali u ma jistax jiġi rkuprat bħala dokument editjat komplet. Mitlufa SSH komunikazzjoni, status ta' ħruġ nieqes, timeouts u riżultati ta' finalizzazzjoni mhux mistennija huma rrapportati bħala **mhux magħruf**, qatt kif salvati. Il-qalba timblokka ieħor ħlief fuq dokument inċert; m'hemm l-ebda rery ta' sostituzzjoni awtomatika. ## Metadejta, privileġġi u limiti tas-sikurezza L-ajjutant jippreserva u jivverifika UID, GID u l-bits kollha ta 'permess POSIX, inklużi eżekutabbli, setuid, bits settid u li jwaħħal. Hija tirriproduċi l-attributi estiżi Linux byte għall-byte, inklużi l-PCLs POSIX, il-kapaċitajiet u t-tikketti SELinux. Sjieda u l-kontenut tal-fajl huma stabbiliti qabel attributi tas-sigurtà, għaliex kitbiet / chown jistgħu ċar kapaċitajiet jew bits permess speċjali. L-attributi tad-destinazzjoni li jintirtu li ma jinstabux fuq l-oriġinal jitneħħew. Ħin ta' modifika jirrifletti l-kitba l-ġdida u ma jkunx ikkopjat mill-oriġinal. Attribut li ma jistax jinqara jew li ma jistax jiġi rrappreżentat jasortja l-operazzjoni; il-metadejta ma titwaqqax skiet. Il-firem tal-IMA/EVM huma espliċitament miċħuda għaliex il-kontenut tal-ikkupjar/firem ta' integrità marbutin mal-inode jinvalidawhom. Simlinks fil-mira jew mogħdija dar, fajls hard link u fajls mhux regolari huma miċħuda. Ma tintuża l-ebda fallback fil-post jew aktar dgħajfa ta' SFTP. Jiffranka writable ordinarja run bħala l-kont SSH. L-iffrankar protett jeħtieġ `{ sudo: true }` espliċitu; password sodo hija fakultattiva għal sudo passwordless. Passwords huma vvalidati u mgħoddija biss fuq stdin kanal, qatt ġewwa l-kmand, ġurnal, fajl ta 'ħidma, logger jew żball remot. Sessjonijiet SSH għeruq jużaw l-eżekutur għeruq diretti eżistenti. L-awtorizzazzjoni li ma tkunx ġiet awtorizzata tħalli l-kopja oriġinali u dik li taħdem intatta. Kollha ħlief esegwiti bħala għerq (għerq dirett SSH jew sudo) jirrifjuta wkoll direttorji fil-mira / benefiċjarji proprjetà jew writable minn kontijiet oħra, jew li jġorru aċċess ACL, minflok fiduċja a pathname privileġġat ikkontrollata minn kont ieħor. Il-helper fiss runs ma `python3 -I -B`: jinjora l-utent Python mogħdijiet, il-direttorju tax-xogħol u pakketti sit utent, u jikteb ebda bytecode. L-argumenti dwar it-toroq u dwar JSON huma kkwotati fil-qoxra fil-qalba. Plugins qatt ma jirċievu exec arbitrarji SSH jew SFTP manki. Sandbox eżistenti, CSP, permessi manifest, verifika host-key u aġġornament verifika jibqgħu jintużaw. ## Plugin API u l-integrazzjoni ta' Monaco li jifdal **L-IU distribwit separatament Monako/Maniġer tal-Fili hija nieqsa minn dan checkout. Integrazzjoni UI tagħha, sudo fil-pront, mmaniġġar maħmuġ u traduzzjonijiet ma setgħux jiġu implimentati jew ittestjati hawn.** Is-sors plugin poold huwa l-Hash & Checksum plugin. L-ebda sors sostitut Maniġer Fajl ma ġiet ivvintata. Il-metodi eżistenti jibqgħu disponibbli. Il-metodi/għażliet ta' addittivi huma esposti mill-pretagħbija magħluqa u l-ħin tar-running ikkontrollat bil-permess: ```js const opened = await chjPlugin.files.readText(sessionId, path); // For a protected read, explicitly pass { sudo: true, sudoPassword }. const result = await chjPlugin.files.saveText(sessionId, path, editor.getValue(), { editId: opened.editId, sudo: true, // Include only after the user authorizes elevation. sudoPassword // Omit for passwordless sudo; never persist this value. }); if (result.ok && result.value.status === "saved") { // Mark this exact submitted editor version as saved. Later edits stay dirty. } else { // Keep the Monaco model dirty. Translate result.error.code/status. // result.error.recoveryId/recoveryPath identify retained working material. } await chjPlugin.files.closeText(opened.editId); const recovery = await chjPlugin.files.listRecovery(sessionId); const copy = await chjPlugin.files.readRecovery(sessionId, recoveryId); // Review copy.status and copy.text; open a fresh document before another save. await chjPlugin.files.cleanupRecovery(sessionId, recoveryId); // Cleanup rejects anything whose target is not currently confirmed. ``` Il-metodi ta' rkupru jaċċettaw argument finali fakultattiv dwar `{ sudo: true, sudoPassword }` meta wieħed jispezzjona mira jeħtieġ elevazzjoni. Huma jżommu l-ispazju tax-xogħol tal-utent awtentikat anke meta eżegwiti permezz ta 'Sodo. Il-Ġurnali jibqgħu ħajjin app jerġgħu jibdew u SSH jerġa' jaqbad; l-irkupru qatt ma jirrepeti awtomatikament il-finalizzazzjoni. Irrevedi bafer irkuprat meta mqabbel ma' mira miftuħa mill-ġdid qabel ma tiffrankah b'mod espliċitu. Il-gwardji `files.read` jaqraw, jispezzjonaw u jimmaniġġjaw ir-rilaxx. Il-gwardji `files.write` jiffrankaw u jirkupraw it-tindif. `writeText` xorta tirrifjuta fuq il-falliment għall plugins eżistenti; `saveText` jirritorna pakkett `{ ok, value/error }` strutturat minħabba Electron qtar proprjetajiet tad-dwana fuq oġġetti żball miċħuda. `writeText` legat jista' juża l-linja bażi ta' dokument wieħed miftuħ. Dokumenti multipli ħajjin għall-istess triq jeħtieġu `editId`; sejħiet storiċi ambigwa jonqsu b'mod sikur minflok jagħżlu linja bażi ta 'dokument ieħor. Plugins għandhom jerħu manki mhux użati. L-IU esterna trid turi ffrankar immedjatament, iżżomm buffers maħmuġa mal-falliment, toffri sudo biss wara l-permessi/fallimenti ta 'awtentikazzjoni, juru kunflitti mingħajr kitba żejda, u joffru rkupru wara telf ta' konnessjoni jew riżultat mhux magħruf. Għandu jittraduċi dawn l-istati biċ-Ċek, bil-Ġermaniż u bl-Ingliż. Kopja tal-istat issuġġerit: | State | Czech | German | English | | --- | --- | --- | --- | | Saving | Ukládání… | Wird gespeichert… | Saving… | | Confirmed | Uloženo | Gespeichert | Saved | | Failure | Uložení selhalo | Speichern fehlgeschlagen | Save failed | | Sudo required | Vyžadováno oprávnění sudo | sudo-Autorisierung erforderlich | Sudo authorization required | | Conflict | Původní soubor byl změněn | Originaldatei wurde geändert | Original file changed | | Disconnected | Spojení bylo přerušeno | Verbindung unterbrochen | Connection lost | | Unknown | Výsledek uložení není znám | Speicherergebnis unbekannt | Save result unknown | | Recovery | Obnova je dostupná | Wiederherstellung verfügbar | Recovery available | ## Id-definizzjonijiet tal-latenza u ċ-ċiklu tal-ħajja **Ping** hija l-mandat irrappurtat minn eku klijent-naħa reali eku tweġiba għall-PI solvuti użati minn SSH. Il-qalba tinvoka l-pjattaforma ping eżekutibbli b'mod sinkronizzat ma 'arranġament argument fiss, mingħajr qafas jew amministratur rekwiżit startup. L-argumenti Linux, macOS (inklużi `ping6`) u Windows jintgħażlu separatament. ICMP imblukkata, eżekutorabbli nieqsa, timeout, produzzjoni invalida jew risposta Windows biss li hija marbuta ma' fuq bħal `<1ms` tipproduċi valur mhux disponibbli, mhux numru inventat. **SSH RTT** hija l-monotonika `performance.now()` tul ta' żmien fiss `true` Talba exec fuq l-awtentikazzjoni eżistenti SSH il-klijent. Dan jinkludi l-issettjar tal-kanali, l-ipproċessar tas-server u t-twassil tar-rispons; mhuwiex it-tul ta' żmien tal-login tan-netwerk pur RTT jew SSH. Il-ponta għodda indikatur tradotti jispjega din id-distinzjoni. Il-monitoraġġ jibda hekk kif it-terminal jgħaqqad. Probes taħdem fl-istess ħin u b'mod sinkroniku, ma 'ħames-tieni talba / proċess timeout. Il-kampjun li jmiss huwa skedat tnax-il sekonda wara li l-kampjun ta' qabel jitlesta, u b'hekk ma jkunx hemm koinċidenza. Diskonnettja aborts ICMP, ċar tenders, tikkanċella pendenti SSH xogħol u jikklerja valuri. Il-kontrolli tal-identità tar-rekords jipprevjenu konnessjoni minn qabel milli tippubblika wara r-rikonnessjoni. Falliment tal-ICMP qatt ma jibdel l-istat ta' konnessjoni SSH. Latenza jivvjaġġa ġewwa l-avveniment `state` eżistenti / `ssh:state` IPC payload: ```js latency: { pingMs: 24.1, sshRttMs: 31.25, measuredAt: "…" } ``` Numru mhux disponibbli huma `null`. L-indikatur tat-terminal kumpatt juża millisekondi, lokalizzat test mhux disponibbli u Ċek/German/English tikketti. Hija tinħeba fuq skonnettjar. Ma kienet meħtieġa l-ebda kapaċità addizzjonali ta' eżekuzzjoni ta' former jew talba IPC. ## Validazzjoni u limiti operattivi - Iġri minn `app/`: `npm ci`, imbagħad `npm test`. - Riżultat finali lokali: **179 testijiet; 163 għadda, 0 falla, 16 skipped**. Il-qċaċet kollha huma l-każijiet Linux filesystem fuq dan ospitanti macOS. `npm ci`, kumpilazzjoni tas-sintassi tal-Python u `git diff --check` tlestew b'suċċess. - It-testijiet ikopru l-Core savings/irkupru, il-protokoll sodo u l-azzjoni mill-ġdid tal-password, Kwota reali tal-qoxra POSIX ta' mogħdijiet ostili, kunflitti, uploads, tindif li ma rnexxiex, riżultati inċerti, dokumenti konkurrenti, permessi tal-IPC u ċiklu ta' ħajja ta' latenza. - Testijiet Linux filesystem jeżerċitaw il-punt tad-dħul Python mibgħuta, bl-użu ta 'privat test account-home lookup: proprjetà/mode/xattrs, POSIX ACLs, symlinks/hardlinks, FIFOs, upload and metadata fails, sostituzzjoni fallimenti, tlielaq fil-mira, riżultati mhux magħrufa wara t-tibdil u rkupru. Cross-filesystem istadju użi `/dev/shm` u ieħor filesystem meta disponibbli. Dawn it-testijiet jaqbżu fuq ospiti mhux Linux; il-faċilitajiet neqsin ta' ACL/sistema separata ta' file huma espliċitament skiped. - L-Linux GitHub Azzjonijiet xogħol runs l-sett komplut u repetizzjonijiet fajlsistema każijiet bħala għeruq. Dan il - fluss tax - xogħol ma ntbagħatx minn din is - siġra li taħdem. - Il-validazzjoni lokali kienet fuq macOS. Sintassi sors Python kien iċċekkjat mal- Kmand Line Tools Python eżekutibbli. A reali macOS loopback ICMP verifika tad-duħħan rritorna `0.071 ms`. Ma ġie ttestjat l-ebda server SSH mill-bogħod live, ħin ta' runtime Windows, ħin runtime ta' Linux jew użu ta' SELinux jew UI estern ta' Monaco. - L-editjar b'test mill-bogħod issa jeħtieġ Linux u Python 3 b'deskrizzjoni relattiva sistema tal-fajl/appoġġ tax-xattr. Interpretu nieqes jonqos b'mod espliċitu. Dan il-Kors intenzjonalment jirrifjuta metadejta mhux sikura, links u konfigurazzjonijiet tad-direttorju. - Locking huwa konsultattiv: proċessi li ma jikkooperawx xorta jistgħu razza fil-ftit l-intervall bejn l-aħħar verifika tal-linja bażi u l-isem mill-ġdid atomiku. Linux ma jipprovdi l-ebda operazzjoni ġenerali ta' tqabbil u ta' sostituzzjoni tal-kontenut atomiku. Il-kontrolli jidentifikaw il-bidliet qabel dak l-intervall; wara dan, il-kopji tax-xogħol miżmuma jappoġġjaw l-irkupru. - Id-dejta dwar l-irkupru tibqa' fuq il-kont remot sakemm jiġi kkonfermat tindif. Mhux komplut, Ir - rivisti li ma jkunux f'kunflitt u li ma jkunux jistgħu jiġu spezzjonati qatt ma jintremew bla skiet. M'hemm l-ebda skadenza awtomatika ta 'irkupru fajl u l-ebda għażla sfurzata overwrite. - `npm ci` (ara sezzjoni 4. 4) 17 sejbiet tal-verifika tad-dipendenza (9 moderata, 8 għolja). Din il-bidla ma jbiddilx id-dipendenza jew il-mudell ta' fiduċja aġġornat tal-applikazzjoni. L-utent talab li jżomm il-bidliet fis-siġra tax-xogħol eżistenti, bħalissa `feature/hash-checksum-plugin`; ma sar l-ebda swiċċ tal-fergħa jew tindif mhux relatat. ## Fajls mibdula għal dan il-kompitu - `src/main/files/remoteFileService.js` - `src/main/files/remoteEditor.py` (ġdid) - `src/main/sessions/sessionManager.js` - `src/main/sessions/latencyMonitor.js` (ġdid) - `src/main/plugins/pluginRuntime.js` - `src/preload/pluginPreload.js` - `src/renderer/app.js` - `src/renderer/index.html` - `src/renderer/styles.css` - `src/renderer/i18n.js` - `test/remoteFileService.test.js` - `test/sessionManager.test.js` - `test/pluginRuntime.test.js` - `test/remoteEditor.test.js` (ġdid) - `test/remoteEditorProtocol.test.js` (ġdid) - `test/remoteEditorLinux.test.js` (ġdid) - `test/fixtures/remoteEditorLinux.py` (ġdid) - `test/latencyMonitor.test.js` (ġdid) - `README.md` - `docs/remote-editor-latency.md` (dan il-fajl) - `../.github/workflows/remote-editor-tests.yml` (ġdid)