@nosserb/prmt 0.0.0-stage → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +191 -2
- package/bin/prmt.mjs +174 -0
- package/dist/assets/AuditModule-BOO_iRy8.js +1 -0
- package/dist/assets/Audits-yUBm0EpW.js +1 -0
- package/dist/assets/BrainPage-FIWO_9Nc.js +3 -0
- package/dist/assets/BrainPage-XQCEGRc5.css +1 -0
- package/dist/assets/Carte-CPuiR1Ha.css +1 -0
- package/dist/assets/Carte-xycu1mQn.js +1 -0
- package/dist/assets/Dashboard-DKvCQcX8.js +2 -0
- package/dist/assets/Dashboard-XdhC6_hM.css +1 -0
- package/dist/assets/Field-C7c2mCbb.js +2 -0
- package/dist/assets/Journal-BLIIlh80.css +1 -0
- package/dist/assets/Journal-BaelFjwV.js +1 -0
- package/dist/assets/Landing-B2jxV3zs.css +1 -0
- package/dist/assets/Landing-Dr612Zdu.js +26 -0
- package/dist/assets/Register-DA_Aq5f8.js +1 -0
- package/dist/assets/Reports-8wfDNSxH.js +1 -0
- package/dist/assets/Reports-B8GXN95N.css +1 -0
- package/dist/assets/SavoirPage-BTxbH3LY.css +1 -0
- package/dist/assets/SavoirPage-Dp3eUCHp.js +1 -0
- package/dist/assets/SettingsPage-BElIP46c.css +1 -0
- package/dist/assets/SettingsPage-BiQbnw3o.js +1 -0
- package/dist/assets/Shell-BAyHVljp.css +1 -0
- package/dist/assets/Shell-CQRlx9-V.js +2 -0
- package/dist/assets/Table-DUmGel5e.js +1 -0
- package/dist/assets/Tabs-CfhbELZk.js +1 -0
- package/dist/assets/Terminal-Bv1IJfi9.js +3 -0
- package/dist/assets/Terminal-CEfj38NV.css +1 -0
- package/dist/assets/arrow-right-Cx3pAEhl.js +1 -0
- package/dist/assets/auditViews-BMza2Sdz.js +1 -0
- package/dist/assets/auditViews-BePWj26h.css +1 -0
- package/dist/assets/bricolage-grotesque-latin-ext-opsz-normal-IcJDqblK.woff2 +0 -0
- package/dist/assets/bricolage-grotesque-latin-opsz-normal-Cre6nC2_.woff2 +0 -0
- package/dist/assets/bricolage-grotesque-vietnamese-opsz-normal-D9N6E8K1.woff2 +0 -0
- package/dist/assets/charts-BcijSJ4J.js +1 -0
- package/dist/assets/circle-stop-C33BAcKW.js +1 -0
- package/dist/assets/command-ChA49Xk7.js +1 -0
- package/dist/assets/command-Ck4pdQCv.css +1 -0
- package/dist/assets/download-CeuKOenD.js +1 -0
- package/dist/assets/eye-CXXHBBpr.js +1 -0
- package/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/assets/habillage-B5mMBadn.js +1 -0
- package/dist/assets/index-BH1etemR.css +1 -0
- package/dist/assets/index-COSiM-R9.js +14 -0
- package/dist/assets/jetbrains-mono-cyrillic-ext-wght-normal-EocZY2iu.woff2 +0 -0
- package/dist/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- package/dist/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- package/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/dist/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- package/dist/assets/layers-2x-Bpkbi35X.png +0 -0
- package/dist/assets/layers-BWBAp2CZ.png +0 -0
- package/dist/assets/markdown-DF87LQh1.css +1 -0
- package/dist/assets/markdown-o5sMhPHN.js +4 -0
- package/dist/assets/marker-icon-hN30_KVU.png +0 -0
- package/dist/assets/play-Daw4K_73.js +1 -0
- package/dist/assets/plus-D_QHm8ud.js +1 -0
- package/dist/assets/trash-DLpHM-s8.js +1 -0
- package/dist/assets/web-6j1-aY67.js +1 -0
- package/dist/favicon.svg +1 -0
- package/dist/index.html +18 -0
- package/docs/ANALYSE.md +87 -0
- package/docs/SECURITE.md +188 -0
- package/lib/scripts/lier.js +15 -0
- package/lib/scripts/searxng.js +91 -0
- package/lib/server/app.js +444 -0
- package/lib/server/audits/modules/local.js +429 -0
- package/lib/server/audits/modules/network.js +331 -0
- package/lib/server/audits/modules/web.js +302 -0
- package/lib/server/audits/net.js +141 -0
- package/lib/server/audits/registry.js +202 -0
- package/lib/server/audits/types.js +58 -0
- package/lib/server/brain/brain.js +624 -0
- package/lib/server/brain/conversations.js +82 -0
- package/lib/server/brain/ollama.js +197 -0
- package/lib/server/brain/prompt.js +188 -0
- package/lib/server/brain/provider.js +1 -0
- package/lib/server/cli/bridge.js +292 -0
- package/lib/server/cli/pont.js +62 -0
- package/lib/server/config.js +68 -0
- package/lib/server/engine/analyzer.js +205 -0
- package/lib/server/engine/catalog.js +229 -0
- package/lib/server/engine/decoder.js +91 -0
- package/lib/server/engine/engine.js +194 -0
- package/lib/server/engine/paths.js +129 -0
- package/lib/server/engine/policy.js +397 -0
- package/lib/server/engine/relax.js +10 -0
- package/lib/server/engine/runner.js +193 -0
- package/lib/server/errors.js +23 -0
- package/lib/server/http/guard.js +75 -0
- package/lib/server/http/router.js +154 -0
- package/lib/server/http/static.js +76 -0
- package/lib/server/index.js +40 -0
- package/lib/server/journal.js +139 -0
- package/lib/server/lien.js +33 -0
- package/lib/server/savoir/base.js +284 -0
- package/lib/server/savoir/lecture.js +406 -0
- package/lib/server/savoir/memoire.js +115 -0
- package/lib/server/search/categories.js +179 -0
- package/lib/server/search/fiche.js +326 -0
- package/lib/server/search/lieux.js +134 -0
- package/lib/server/search/overpass.js +216 -0
- package/lib/server/search/searxng.js +223 -0
- package/lib/server/search/tiles.js +103 -0
- package/lib/server/status.js +157 -0
- package/lib/server/stores.js +141 -0
- package/lib/server/telephone/acces.js +457 -0
- package/lib/server/telephone/certificat.js +79 -0
- package/lib/server/telephone/qr.js +308 -0
- package/lib/shared/analysis.js +40 -0
- package/lib/shared/schemas.js +105 -0
- package/lib/shared/types.js +10 -0
- package/package.json +81 -4
- package/searxng/settings.yml +35 -0
- package/tui/Modelfile +23 -0
- package/tui/README.md +103 -0
- package/tui/prmt_tui.py +65 -0
- package/tui/promethee/__init__.py +1 -0
- package/tui/promethee/__main__.py +4 -0
- package/tui/promethee/accueil.py +66 -0
- package/tui/promethee/agents.py +220 -0
- package/tui/promethee/app/__init__.py +4 -0
- package/tui/promethee/app/application.py +299 -0
- package/tui/promethee/app/clavier.py +99 -0
- package/tui/promethee/app/commandes_slash.py +164 -0
- package/tui/promethee/app/contexte.py +188 -0
- package/tui/promethee/app/definitions.py +518 -0
- package/tui/promethee/app/ecran.py +177 -0
- package/tui/promethee/app/envoi.py +141 -0
- package/tui/promethee/app/historique.py +373 -0
- package/tui/promethee/app/modele.py +108 -0
- package/tui/promethee/app/notes.py +63 -0
- package/tui/promethee/app/outils.py +589 -0
- package/tui/promethee/app/plateforme.py +409 -0
- package/tui/promethee/app/saisie.py +100 -0
- package/tui/promethee/app/taches.py +92 -0
- package/tui/promethee/app/tour.py +539 -0
- package/tui/promethee/app/validation.py +210 -0
- package/tui/promethee/appels.py +35 -0
- package/tui/promethee/commandes.py +154 -0
- package/tui/promethee/completion.py +140 -0
- package/tui/promethee/config.py +12 -0
- package/tui/promethee/consignes.py +278 -0
- package/tui/promethee/conversation.py +94 -0
- package/tui/promethee/etat.py +253 -0
- package/tui/promethee/fichiers.py +354 -0
- package/tui/promethee/journal.py +116 -0
- package/tui/promethee/logo.py +132 -0
- package/tui/promethee/memoire.py +50 -0
- package/tui/promethee/ollama.py +52 -0
- package/tui/promethee/plan.py +91 -0
- package/tui/promethee/politique.py +429 -0
- package/tui/promethee/preferences.py +65 -0
- package/tui/promethee/presse_papiers.py +44 -0
- package/tui/promethee/recherche.py +581 -0
- package/tui/promethee/securite.py +204 -0
- package/tui/promethee/shell.py +190 -0
- package/tui/promethee/textes.py +190 -0
- package/tui/promethee/theme.py +92 -0
- package/tui/promethee/widgets.py +493 -0
- package/tui/requirements.txt +1 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import{$ as e,A as t,Et as n,G as r,J as i,K as a,Ot as o,S as s,U as c,X as l,Y as u,Z as d,_ as f,ct as p,et as m,ft as h,g,ht as _,it as v,mt as y,nt as b,p as x,rt as S,tt as C}from"./index-COSiM-R9.js";import{a as w,i as T,l as E,n as D,r as O,s as k}from"./Register-DA_Aq5f8.js";import{t as A}from"./Table-DUmGel5e.js";import{f as j,l as M,p as N,u as P}from"./Field-C7c2mCbb.js";import{t as F}from"./arrow-right-Cx3pAEhl.js";import{t as I}from"./play-Daw4K_73.js";import{n as ee,t as te}from"./markdown-o5sMhPHN.js";import{n as ne,r as re,t as L}from"./Tabs-CfhbELZk.js";var R={name:`pause`,size:24,node:[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]};R.node;var ie=n(R),z=o(),B=e();function V({id:e,letter:t,name:n,word:r,title:i,lead:a,children:o}){let s=(0,z.useId)();return(0,B.jsx)(`section`,{id:e,className:`vue partie`,"data-vue":`presentation`,"aria-labelledby":s,children:(0,B.jsxs)(`div`,{className:`vue-contenu partie-grille`,children:[(0,B.jsxs)(`p`,{className:`partie-marge`,children:[(0,B.jsx)(k,{letter:t,name:n}),(0,B.jsx)(`span`,{className:`partie-mot`,children:r})]}),(0,B.jsxs)(`div`,{className:`partie-corps`,children:[(0,B.jsx)(`h2`,{id:s,className:`t-titre-1 partie-titre`,children:i}),a?(0,B.jsx)(`p`,{className:`partie-chapeau`,children:a}):null,o]})]})})}var ae=`Non, et dire à Prométhée quoi faire autrement (Esc)`,oe=e=>`Oui, et ne plus demander pour ${e} pendant cette session`,se=`politique stricte`;function ce(e,t,n,r=!1,i){let a=[[`b`,e],[`dim`,t],[n?`lecture`:`sensible`,se]];return i&&a.push([`dim`,` contacte : ${i}`]),{t:`prompt`,title:`Exécuter une commande`,body:a,q:`Veux-tu exécuter cette commande ?`,opts:n?[`Oui`,oe(n.map(e=>`« ${e} »`).join(`, `)),ae]:[`Oui`,ae],fast:r}}var le=[[` `,`pub fn capitalize_first(input: &str) -> String {`],[`-`,` input.to_uppercase()`],[`+`,` let mut chars: Vec<char> = input.chars().collect();`],[`+`,` if !chars.is_empty() {`],[`+`,` chars[0] = chars[0].to_ascii_uppercase();`],[`+`,` }`],[`+`,` chars.into_iter().collect()`],[` `,`}`]];function H(e,t,n,r,i,a,o){return[...o?[{t:`spin`,verb:o,ms:650}]:[],{t:`tool`,id:e,label:`PowerShell`,cmd:t},ce(t,n,r?[r]:null,!0,`cible.example`),{t:`run`,id:e,ms:750},{t:`result`,id:e,lines:i},{t:`tick`,i:a}]}var ue=`Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess`,U={ports:{label:`Observer la machine`,ops:[{t:`type`,text:`quels ports écoutent sur ma machine ?`},{t:`spin`,verb:`Énumération`,ms:1500},{t:`tool`,id:`a`,label:`PowerShell`,cmd:ue},ce(ue,`Liste les ports en écoute et le processus qui ouvre chacun.`,[`get-nettcpconnection`,`select-object`]),{t:`run`,id:`a`,ms:900},{t:`result`,id:`a`,lines:[`LocalAddress LocalPort OwningProcess`,`------------ --------- -------------`,`0.0.0.0 135 1204`,`0.0.0.0 445 4`,`127.0.0.1 11434 8836`]},{t:`spin`,verb:`Analyse`,ms:900},{t:`answer`,md:"Trois ports écoutent sur ta machine :\n- **135** (RPC) et **445** (SMB) : des services Windows, ouverts sur toutes les interfaces (`0.0.0.0`).\n- **11434** : Ollama, le serveur qui fait tourner le modèle. Il n’écoute qu’en local (`127.0.0.1`)."}]},code:{label:`Corriger du code`,ops:[{t:`type`,text:`/permissions autoriser cargo`},{t:`notice`,color:`var(--tui-alerte)`,text:`⎿ Ajoutée à ta liste blanche : cargo. Ses arguments ne sont pas contrôlés : chaque exécution te sera montrée.`},{t:`type`,text:`corrige capitalize_first dans src/lib.rs, test_capitalize_first échoue`},{t:`notice`,color:`var(--tui-code)`,text:`⇄ IA de code : qwen3.5:9b prend la main pour cette demande (Prométhée reprend ensuite).`},{t:`model`,text:`qwen3.5:9b (code)`,color:`var(--tui-code)`},{t:`spin`,verb:`Forge`,ms:1100},{t:`tool`,id:`r`,label:`Lire`,cmd:`capitalizing\\src\\lib.rs`,wait:`Lecture…`},{t:`text`,id:`r`,summary:`61 lignes`},{t:`spin`,verb:`Rétro-ingénierie`,ms:1e3},{t:`tool`,id:`m`,label:`Modifier`,cmd:`capitalizing\\src\\lib.rs`},{t:`prompt`,title:`Modifier un fichier`,body:[[`b`,`capitalizing\\src\\lib.rs`],[`dim`,`Ne met en majuscule que la première lettre, au lieu de toute la chaîne.`]],diff:le,q:`Appliquer ces modifications ?`,opts:[`Oui`,`Oui, et autoriser toutes les modifications de fichiers pendant cette session`,ae]},{t:`text`,id:`m`,summary:`+5 −1 lignes`,diff:le},{t:`tool`,id:`c`,label:`PowerShell`,cmd:`cargo test --manifest-path capitalizing\\Cargo.toml`},ce(`cargo test --manifest-path capitalizing\\Cargo.toml`,`Lance les tests du projet pour vérifier la correction.`,null),{t:`run`,id:`c`,ms:1600},{t:`result`,id:`c`,lines:[`running 3 tests`,`test tests::test_capitalize_first ... ok`,`test tests::test_change_case ... ok`,`test tests::test_title_case ... ok`,``,`test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out`]},{t:`answer`,md:"`capitalize_first` passait toute la chaîne en majuscules. Elle ne change plus que le premier caractère et garde le reste tel quel.\n\n`cargo test` : 3 tests passés, 0 échec."}]},audit:{label:`Auditer un site`,ops:[{t:`type`,text:`/perimetre ajouter cible.example`},{t:`prompt`,title:`Déclarer une cible`,body:[[`b`,`cible.example`],[`dim`,`Les tests ne sont permis que sur des systèmes qui t’appartiennent ou pour lesquels tu as une`],[`dim`,`autorisation écrite. Cette attestation est datée et inscrite au journal.`]],q:`Ajouter cette cible à ton périmètre ?`,opts:[`J’atteste que cette cible m’appartient ou que j’ai une autorisation écrite`,`J’atteste la même chose pour ce domaine et ses sous-domaines`,`Annuler (Esc)`]},{t:`notice`,color:`var(--tui-ok)`,text:`⎿ Cible ajoutée au périmètre : cible.example. /perimetre retirer pour l’enlever.`},{t:`type`,text:`fais un audit de sécurité de mon site cible.example`},{t:`tasks`,items:[`Résolution DNS`,`Ports et services (nmap)`,`En-têtes HTTP`,`Configuration TLS`,`robots.txt`,`Rapport final`]},...H(`d`,`Resolve-DnsName cible.example`,`Adresses IP et serveurs DNS du domaine.`,`resolve-dnsname`,[`Name Type TTL Section IPAddress`,`---- ---- --- ------- ---------`,`cible.example A 300 Answer 203.0.113.24`],0,`Recherche de failles`),...H(`n`,`nmap -Pn -sV --top-ports 100 cible.example`,`Ports ouverts et versions des services.`,null,[`PORT STATE SERVICE VERSION`,`80/tcp open http nginx 1.24.0`,`443/tcp open ssl/http nginx 1.24.0`],1,`Énumération`),...H(`h`,`curl.exe -sI https://cible.example`,`En-têtes HTTP : serveur, HSTS, CSP, cookies.`,null,[`HTTP/1.1 200 OK`,`Server: nginx/1.24.0`,`Strict-Transport-Security: max-age=31536000`,`Set-Cookie: session=8f3a…; Path=/`],2),...H(`s`,`nmap -Pn -p 443 --script ssl-enum-ciphers cible.example`,`Versions TLS et suites de chiffrement.`,null,[`443/tcp open https`,`| ssl-enum-ciphers:`,`| TLSv1.2: …`,`| TLSv1.3: …`,`|_ least strength: A`],3,`Déchiffrement`),...H(`b`,`curl.exe -s https://cible.example/robots.txt`,`Chemins déclarés dans robots.txt.`,null,[`User-agent: *`,`Disallow: /admin/`],4),{t:`spin`,verb:`Attise les braises`,ms:1e3},{t:`answer`,md:"**Audit de cible.example** (203.0.113.24)\n- Ports ouverts : 80 et 443, nginx 1.24.0. La version s’affiche aussi dans l’en-tête `Server`.\n- TLS : versions 1.2 et 1.3 seulement, note A.\n- En-têtes absents : `Content-Security-Policy` et `X-Frame-Options`. Le cookie `session` n’a ni `Secure` ni `HttpOnly`.\n- `robots.txt` déclare `/admin/`.\n\nRecommandations : ajouter les deux en-têtes, passer le cookie en `Secure; HttpOnly`, masquer la version (`server_tokens off`) et vérifier que `/admin/` demande une authentification."},{t:`tick`,i:5}]},refus:{label:`Refus de la politique`,ops:[{t:`type`,text:`supprime le dossier build`},{t:`spin`,verb:`Analyse`,ms:1200},{t:`tool`,id:`x`,label:`PowerShell`,cmd:`Remove-Item -Recurse .\\build`,wait:`Contrôle de la politique…`},{t:`refus`,id:`x`,reason:`Remove-Item est une commande destructrice (supprime des fichiers ou leur contenu), refusée par défaut.`,advice:`/permissions autoriser remove-item`},{t:`spin`,verb:`Réflexion`,ms:900},{t:`answer`,md:"La politique de sécurité refuse cette commande : `Remove-Item` est destructrice. Rien n’a été supprimé.\n\nSi tu veux la permettre, tape `/permissions autoriser remove-item`. Elle te sera alors montrée avant chaque exécution, signalée en rouge."}]}},W=[{title:`Interpréteur`,text:`Un appel très court (environ 0,3 s) classe ta demande : action, si tu veux que Prométhée fasse ou vérifie quelque chose, ou explication, pour un cours, une définition ou un avis. Il repère aussi les demandes de programmation.`,chip:`18 demandes sur 19 bien classées`},{title:`Modèle`,text:`Prométhée répond avec RedSage-Qwen3-8B. Une demande de code passe à qwen3.5:9b le temps d’une réponse, avec la même conversation, les mêmes outils et la même validation, puis Prométhée reprend la main.`,chip:`⇄ IA de code`},{title:`Choix de l’outil`,text:`Le modèle appelle un outil : executer_commande pour PowerShell, lire_fichier, ecrire_fichier, modifier_fichier, chercher_fichiers, chercher_texte, ou lancer_agent pour confier la tâche à un agent.`,chip:`7 outils`},{title:`Vérification avant affichage`,text:`Avant de t’être montrée, la commande est testée sur la machine : erreur de syntaxe, programme absent, curl remplacé par curl.exe. Elle est corrigée si besoin.`,chip:`avant que tu la voies`},{title:`Politique`,text:`Le moteur de la console analyse la commande sans l’exécuter : liste blanche, arguments, dossiers d’écriture, cibles réseau. Lecture ou sensible, elle continue. Hors liste blanche, destructrice ou hors périmètre, elle est refusée sans t’être proposée, et le modèle reçoit la raison.`,chip:`refus par défaut`},{title:`Ta validation`,text:`1 Oui, 2 Oui et ne plus demander jusqu’à la fin de la session (pour une lecture seulement), 3 ou Esc Non. Pour un fichier, tu vois le diff en couleur avant l’écriture.`,chip:`1 · 2 · 3`},{title:`Exécution`,text:`PowerShell 5.1, arrêt automatique au bout de 5 minutes, Esc pour couper avant. La sortie revient au modèle, limitée à 3 500 caractères, et il enchaîne jusqu’à 12 allers-retours par message.`,chip:`5 min · 3 500 caractères · 12 étapes`},{title:`Réponse contrôlée`,text:`Les adresses IP et les ports cités dans la réponse sont cherchés dans les sorties des commandes. Ceux qui n’y sont pas s’affichent en jaune, avec la mention « À vérifier ».`,chip:`après chaque réponse`}],de=[{name:`RedSage-Qwen3-8B`,score:2,shown:`2,00`,s42:1.94,s7:2.06,pick:!0,tip:[`Seed 42 : 1,94 · seed 7 : 2,06`,`Hallucinations : 10 et 9 sur 17`,`60 tokens/s · 100 % GPU · 150 mots par réponse`]},{name:`qwen3.5:4b`,score:1.97,shown:`1,97`,s42:2.18,s7:1.76,tip:[`Seed 42 : 2,18 · seed 7 : 1,76`,`Hallucinations : 9 et 13 sur 17`,`80 tokens/s · 100 % GPU · 195 mots par réponse`]},{name:`qwen3.5:9b`,score:1.82,shown:`1,82`,s42:1.82,tip:[`Une seule seed`,`Hallucinations : 14 sur 17`,`42 tokens/s · 87 % GPU, 13 % CPU · 309 mots par réponse`]},{name:`foundation-sec`,score:1.735,shown:`1,74`,s42:1.88,s7:1.59,tip:[`Seed 42 : 1,88 · seed 7 : 1,59`,`Hallucinations : 10 et 9 sur 17`,`61 tokens/s · 100 % GPU · 290 mots par réponse`]},{name:`deephat`,score:1.65,shown:`1,65`,s42:1.65,tip:[`Une seule seed, contexte 8 192`,`Hallucinations : 9 sur 17`,`58 tokens/s · 100 % GPU · 230 mots par réponse`]},{name:`WhiteRabbitNeo`,score:1,shown:`≈ 1,0`,tip:[`Environ 1,0, quels que soient la température, repeat_penalty ou le prompt système`,`Invente à chaque fois la fausse CVE et la fausse option nmap`]}],fe=[[`RedSage-Qwen3-8B`,`1,94`,`2,06`,`10 / 9`,`60`,`100 %`,`150`],[`qwen3.5:4b`,`2,18`,`1,76`,`9 / 13`,`80`,`100 %`,`195`],[`foundation-sec`,`1,88`,`1,59`,`10 / 9`,`61`,`100 %`,`290`],[`qwen3.5:9b`,`1,82`,`–`,`14`,`42`,`87 %`,`309`],[`deephat`,`1,65`,`–`,`9`,`58`,`100 %`,`230`]],pe=[{seen:`Vu pendant les tests`,title:`« Explique netstat » lançait netstat`,text:`Sur une question de cours, le modèle exécutait la commande au lieu de l’expliquer. Un appel court classe maintenant chaque demande en action ou en explication avant la réponse.`,wide:!0,before:[`Avant`,`4 fois sur 4`],after:[`Après`,`18 sur 19 bien classées`]},{seen:`Vu pendant les tests`,title:`Un « merci » qui relançait tout`,text:`Après une réponse de l’IA de code, un simple « merci ! » refaisait toute la demande. Un rappel ajouté au retour vers Prométhée a réglé ça.`,before:[`Avant`,`3 sur 4`],after:[`Après`,`0 sur 4`]},{seen:`Piège de PowerShell`,title:`Le faux curl`,text:`Sous PowerShell 5.1, curl est un alias d’Invoke-WebRequest. Chaque commande est vérifiée avant de t’être montrée (syntaxe, programme installé) et curl devient curl.exe.`,tag:`vérifié avant affichage`},{seen:`Vu pendant les tests`,title:`Des ports qui n’existent pas`,text:`Le modèle a « listé » les ports 19444 à 19459, absents de la machine. Chaque adresse IP et chaque port d’une réponse est maintenant comparé aux sorties des commandes, et ce qui n’y figure pas t’est signalé :`,wide:!0,sample:`À vérifier : ces valeurs n’apparaissent dans aucune sortie de commande (le modèle a pu les inventer) : 19444, 19445, 19446, 19447, 19448, 19449, 19450, 19451… (+8)`},{seen:`Vu en Rust`,title:`Ça compile, mais ça ne marche pas`,text:`Un programme compilé, jamais lancé, ne trouvait aucune ligne : il cherchait « Failed password from » au lieu de « Failed password for root from ». Après une compilation réussie, l’IA de code doit lancer le programme sur un fichier d’exemple et comparer la sortie.`,tag:`compiler, puis lancer`},{seen:`Vu en Rust`,title:`Un succès annoncé après deux erreurs`,text:`Projet jamais créé, deux commandes en échec, puis « compilé correctement ». Quand la dernière commande a échoué, ce genre de réponse est renvoyé une fois au modèle, puis un avertissement s’ajoute au rapport.`,tag:`code de sortie vérifié`},{seen:`Vu pendant les tests`,title:`Lire un dossier comme un fichier`,text:`Pour « trouve les .log », le modèle essayait de lire le dossier. Deux outils de recherche en lecture seule tournent maintenant sans validation. Les 15 autres demandes testées gardent le bon outil.`,before:[`Avant`,`3 ratés sur 3`],after:[`Après`,`3 réussis sur 3`]},{seen:`Vu pendant les tests`,title:`Des commandes écrites au lieu d’être lancées`,text:`Quand tu demandes une action et que le modèle répond avec des commandes en texte, annonce « passons au scan » sans le lancer, ou demande « je l’exécute ? », il est relancé automatiquement.`,tag:`relance automatique`},{seen:`Mode plan`,title:`Des cmdlets inventées`,text:`En mode plan, chaque cmdlet citée est cherchée sur le PC. Si l’une n’existe pas, le plan repart au modèle avec son nom, pour qu’il le réécrive.`,tag:`vérifié sur la machine`},{seen:`Audit`,title:`Un audit qui démarre vraiment`,text:`Pour une demande d’audit, une méthode en 5 étapes (DNS, ports, en-têtes HTTP, TLS, robots.txt) s’ajoute à la demande, et la liste des tâches se coche d’après les commandes réellement exécutées.`,after:[`Mesuré`,`8 audits sur 8 démarrent avec l’outil`]}],G=[{key:`❯`,char:`❯`,label:`Demande`,example:`analyse @auth.log`,text:`Une demande normale. @fichier joint le contenu du fichier à ta question : en tapant @, la liste des fichiers du dossier s’affiche. @dossier joint la liste de son contenu.`},{key:`!`,char:`!`,label:`Commande directe`,example:`ipconfig /all`,text:`Tu tapes la commande PowerShell toi-même. Une lecture part tout de suite. Une commande sensible ou risquée te demande une confirmation, et un refus de la politique vaut aussi pour toi. Sa sortie rejoint la conversation et tu peux demander à Prométhée de l’expliquer.`},{key:`#`,char:`#`,label:`Mémoire`,example:`ma VM Kali est en 192.168.56.10`,text:`La note va dans PROMETHEE.md, la mémoire globale ou celle du dossier courant. Prométhée la relit à chaque message, tu n’as plus à répéter ton contexte.`},{key:`⇧⇥`,char:`❯`,label:`Mode plan`,example:`vérifie la configuration du pare-feu`,text:`Shift+Tab. Prométhée propose un plan numéroté sans rien exécuter. Tu le relis, tu l’affines, puis tu lances l’exécution et la liste des tâches se coche au fil des commandes.`},{key:`@`,char:`❯`,label:`Agent`,example:`@agent-analyste-logs analyse @auth.log`,text:`L’agent travaille dans son propre contexte : ses longues sorties de commandes n’encombrent pas la conversation, et il renvoie seulement son rapport. Tu valides toujours ses commandes.`}],me=[[`/aide`,[`help`,`?`,`h`],`afficher l’aide`],[`/etat`,[`état`,`status`,`statut`],`état de la plateforme : IA, moteur, périmètre, activité`],[`/clear`,[`nouveau`,`reset`,`new`],`nouvelle conversation`],[`/compact`,[`compacter`,`resumer`,`résumer`],`résumer la conversation pour libérer le contexte`],[`/reprendre`,[`resume`,`continuer`,`sessions`,`historique`],`reprendre une conversation précédente`],[`/memoire`,[`memory`,`mémoire`],`voir la mémoire PROMETHEE.md (/memoire ouvrir : la modifier)`],[`/plan`,[],`activer ou couper le mode plan (aussi Shift+Tab)`],[`/agents`,[`agent`],`créer, voir et gérer les agents (sous-agents)`],[`/code`,[],`IA de code : bascule automatique (on / off) et modèle utilisé`],[`/commandes`,[`commands`],`créer, voir et gérer tes commandes personnalisées`],[`/init`,[],`écrire la mémoire PROMETHEE.md de ce dossier (Prométhée l’explore)`],[`/contexte`,[`context`],`ce qui remplit le contexte du modèle`],[`/modele`,[`model`,`modèle`,`models`,`modeles`,`modèles`],`lister les modèles ou en changer`],[`/copier`,[`copy`,`cp`],`copier la dernière réponse (/copier code : les blocs de code)`],[`/sortie`,[`output`],`sortie complète de la dernière commande`],[`/politique`,[`policy`],`politique d’exécution : stricte ou souple, liste blanche`],[`/permissions`,[`perms`,`autorisations`],`autorisations de la session, débloquer ou ajouter une commande`],[`/perimetre`,[`périmètre`,`scope`,`cibles`],`cibles réseau que tu as le droit de tester`],[`/journal`,[`log`,`logs`],`dernières actions : commandes exécutées, refusées, fichiers écrits`],[`/theme`,[`thème`,`fond`],`fond de l’interface : promethee ou terminal`],[`/sauver`,[`save`,`enregistrer`],`exporter la conversation en Markdown`],[`/quitter`,[`exit`,`quit`,`bye`,`q`],`quitter Prométhée`]],he=[[`prmt`,`interface de discussion`],[`prmt -c`,`reprendre la dernière conversation`],[`prmt -r`,`choisir une conversation à reprendre`],[`prmt "ta question"`,`réponse unique, puis retour au terminal`],[`type fichier.txt | prmt "analyse ce fichier"`,`analyser un fichier en une commande`],[`prmt -m deephat`,`l’interface avec un autre modèle`],[`prmt --classic`,`ancien mode, avec ollama run`]],K=[{id:`plateforme`,lettre:`α`,nom:`section 1`,mot:`Console web`},{id:`validation`,lettre:`β`,nom:`section 2`,mot:`Validation`},{id:`demo`,lettre:`γ`,nom:`section 3`,mot:`Démo`},{id:`fonctionnement`,lettre:`δ`,nom:`section 4`,mot:`Fonctionnement`},{id:`modele`,lettre:`ε`,nom:`section 5`,mot:`Modèle`},{id:`controles`,lettre:`ζ`,nom:`section 6`,mot:`Contrôles`},{id:`fonctions`,lettre:`η`,nom:`section 7`,mot:`Modes`},{id:`commandes`,lettre:`θ`,nom:`section 8`,mot:`Commandes`},{id:`demarrer`,lettre:`ι`,nom:`section 9`,mot:`Démarrer`}];function q(e){let t=K.find(t=>t.id===e);if(!t)throw Error(`Section inconnue : ${e}`);return t}function ge(e){return e===`statique`?{href:`#demarrer`,libelle:`Installer la console`,court:`Installer`}:{href:`#console`,libelle:e===`online`?`Ouvrir la console`:`La console`,court:`Console`}}function _e({courante:e}){let t=f(x.large),[n,i]=(0,z.useState)(!1),a=(0,z.useRef)(null),o=(0,z.useRef)(null),s=(0,z.useId)(),c=n&&!t;return(0,z.useEffect)(()=>{if(!c)return;let e=e=>{e.key===`Escape`&&(i(!1),o.current?.focus({preventScroll:!0}))},t=e=>{a.current?.contains(e.target)||i(!1)};return document.addEventListener(`keydown`,e),document.addEventListener(`pointerdown`,t),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`pointerdown`,t)}},[c]),(0,B.jsxs)(`nav`,{ref:a,className:`presentation-sections`,"aria-label":`Sections de la présentation`,onBlur:e=>{c&&!e.currentTarget.contains(e.relatedTarget)&&i(!1)},children:[(0,B.jsx)(r,{ref:o,variant:`nu`,className:`presentation-sections-bouton`,"aria-expanded":c,"aria-controls":s,iconEnd:(0,B.jsx)(N,{"aria-hidden":`true`}),onClick:()=>i(e=>!e),children:`Sections`}),(0,B.jsx)(`ul`,{id:s,className:`presentation-sections-liste`,hidden:!t&&!n,children:K.map(t=>(0,B.jsx)(`li`,{children:(0,B.jsxs)(`a`,{className:`presentation-sections-lien`,href:`#${t.id}`,"aria-current":e===t.id?`true`:void 0,onClick:()=>i(!1),children:[(0,B.jsx)(`span`,{className:`presentation-sections-lettre`,"aria-hidden":`true`,children:t.lettre}),t.mot]})},t.id))})]})}function ve({courante:e}){let{phase:t}=s(),{href:n,libelle:r,court:i}=ge(t);return(0,B.jsx)(`header`,{className:`vue presentation-barre`,"data-vue":`presentation`,children:(0,B.jsxs)(`div`,{className:`vue-contenu presentation-barre-contenu`,children:[(0,B.jsxs)(`a`,{className:`presentation-marque`,href:`#accueil`,children:[(0,B.jsx)(u,{className:`presentation-flamme`}),(0,B.jsx)(`span`,{className:`presentation-marque-nom`,children:`Prométhée`})]}),(0,B.jsx)(_e,{courante:e}),(0,B.jsxs)(a,{variant:`contour`,className:`presentation-console`,href:n,"aria-label":r,children:[(0,B.jsx)(`span`,{className:`presentation-console-long`,children:r}),(0,B.jsx)(`span`,{className:`presentation-console-court`,"aria-hidden":`true`,children:i})]})]})})}var ye=(e,t)=>e?(0,B.jsx)(`span`,{className:`controles-mesure`,children:e[0]===t?h(e[1]):h(`${e[0]} : ${e[1]}`)}):null,be=[{key:`erreur`,label:`Erreur`,render:e=>(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`strong`,{className:`controles-titre`,children:h(e.title)}),(0,B.jsx)(`span`,{className:`controles-texte`,children:h(e.text)}),e.sample?(0,B.jsx)(`span`,{className:`t-donnee controles-exemple`,children:h(e.sample)}):null,e.tag?(0,B.jsx)(`span`,{className:`controles-garde`,children:e.tag}):null]})},{key:`vue`,label:`Vue`,render:e=>e.seen},{key:`avant`,label:`Avant`,render:e=>ye(e.before,`Avant`)},{key:`apres`,label:`Après`,render:e=>ye(e.after,`Après`)}];function xe(){let e=q(`controles`),t=(0,z.useId)(),n=f(x.etroit),[r,i]=(0,z.useState)(!1);return(0,B.jsxs)(V,{id:e.id,letter:e.lettre,name:e.nom,word:e.mot,title:`Les erreurs vues pendant les tests, et ce qui les rattrape`,lead:`Chaque contrôle ci-dessous part d’une erreur réelle du modèle dans la TUI. Quand elle a été mesurée, tu as le chiffre avant et après.`,children:[(0,B.jsx)(`div`,{id:`${t}-releve`,className:`controles-releve`,"data-plie":!n&&!r?``:void 0,children:(0,B.jsx)(A,{caption:`Les erreurs vues pendant les tests, et ce qui les rattrape`,columns:be,rows:pe,rowKey:e=>e.title,stack:`44`,className:`controles-tableau`})}),n?null:(0,B.jsx)(`button`,{type:`button`,className:`controles-plier`,"aria-expanded":r,"aria-controls":`${t}-releve`,onClick:()=>i(e=>!e),children:r?`Replier la liste`:`Tout afficher (${pe.length} contrôles)`})]})}var Se=110,Ce=22;function we(e,t,n,r){let i=t.largeur<x.etroit*n,a=t.hauteur<30*n?3:t.hauteur*.25/Ce,o=(i?[4,3,2]:[8,6,4,3,2]).find(t=>t*Se<=e&&t<=a)??2,s=Math.max(2,Math.round(o*r));for(;s>2&&(Se*s/r>e+.01||s/r>a+.001);)s--;return{palier:o,cellule:s/r}}function Te(e){let[t,n]=(0,z.useState)(null);return(0,z.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let r=()=>{let e=t.getBoundingClientRect().width,r=we(e,{largeur:window.innerWidth,hauteur:window.innerHeight},g(),window.devicePixelRatio||1);n(e=>e?.palier===r.palier&&e.cellule===r.cellule?e:r)};r();let i=typeof ResizeObserver==`function`?new ResizeObserver(r):null;return i?.observe(t),window.addEventListener(`resize`,r),()=>{i?.disconnect(),window.removeEventListener(`resize`,r)}},[e]),t}var Ee={online:{kind:`reussie`,mot:`Console locale en marche`},connecting:{kind:`en-cours`,mot:`Recherche de la console locale…`},offline:{kind:`neutre`,mot:`La console ne répond pas`},statique:{kind:`neutre`,mot:`Console injoignable depuis cette page`},appairage:{kind:`a-toi`,mot:`Téléphone à appairer`}};function De(e){let t=(0,z.useRef)(!1),[n,r]=(0,z.useState)(!1);return(0,z.useEffect)(()=>{e===`online`?(t.current&&r(!0),t.current=!1):(e===`offline`&&(t.current=!0),r(!1))},[e]),n}function Oe({phase:e,adresse:t,frais:n,className:r}){let{kind:i,mot:a}=Ee[e];return(0,B.jsxs)(`p`,{className:p(`presentation-ligne-etat`,r),"data-ton":e===`online`?`sur`:void 0,"data-frais":n?``:void 0,children:[(0,B.jsx)(c,{kind:i}),(0,B.jsx)(`span`,{className:`presentation-ligne-etat-mot`,children:a}),e===`online`&&t?(0,B.jsx)(`span`,{className:`t-donnee presentation-ligne-etat-adresse`,children:t}):null]})}var ke=(0,B.jsx)(`span`,{className:`t-donnee`,children:`127.0.0.1`});function Ae({rubrique:e,issue:t,className:n,children:r}){return(0,B.jsx)(D,{children:(0,B.jsxs)(`p`,{className:n?`hero-releve-ligne ${n}`:`hero-releve-ligne`,children:[(0,B.jsx)(`span`,{className:`hero-releve-rubrique`,children:e}),(0,B.jsxs)(`span`,{className:`hero-releve-valeur`,children:[t?(0,B.jsx)(c,{kind:t}):null,r]})]})})}function je({phase:e,statut:t}){let n=e===`online`?t:null,r=n?n.ollama.available?n.models.selected?[void 0,(0,B.jsx)(`span`,{className:`t-donnee`,children:n.models.selected})]:[`a-toi`,n.models.installed.length===0?`aucun modèle installé`:`aucun modèle choisi`]:[`echec`,`Ollama injoignable`]:[void 0,(0,B.jsx)(`span`,{className:`t-donnee`,children:`\xA0`})],i=n?n.engine.available?[void 0,(0,B.jsxs)(B.Fragment,{children:[`PowerShell `,n.engine.version?(0,B.jsx)(`span`,{className:`t-donnee`,children:n.engine.version}):null]})]:[`echec`,`PowerShell indisponible`]:[void 0,`\xA0`];return(0,B.jsxs)(`div`,{className:`hero-releve`,"data-etat":n?`lu`:`vide`,children:[(0,B.jsx)(`p`,{className:`hero-releve-titre`,children:`Console locale`}),(0,B.jsxs)(`div`,{className:`hero-releve-corps`,children:[(0,B.jsxs)(w,{columns:1,label:`Console locale`,className:`hero-releve-lignes`,children:[(0,B.jsx)(Ae,{rubrique:`Cerveau`,issue:r[0],children:r[1]}),(0,B.jsx)(Ae,{rubrique:`Moteur`,issue:i[0],children:i[1]}),(0,B.jsx)(Ae,{rubrique:`Politique`,className:`hero-releve-politique`,children:n?`Refus par défaut : ${y(n.policy.read+n.policy.sensitive)}\u00a0commandes autorisées, ${y(n.policy.destructive)}\u00a0destructrices`:`\xA0`})]}),e===`offline`||e===`statique`?(0,B.jsxs)(`div`,{className:`hero-releve-phrase`,children:[e===`statique`?(0,B.jsxs)(`p`,{children:[`La console est un serveur local. Telle qu’elle est livrée, elle n’écoute que sur `,ke,`\xA0`,`: une page publiée ne peut pas la joindre.`]}):(0,B.jsxs)(`p`,{children:[`La console est un serveur local. Si elle est arrêtée, lance `,(0,B.jsx)(j,{code:`npm start`}),` dans le dossier du projet.`]}),(0,B.jsx)(`a`,{className:`presentation-lien`,href:`#demarrer`,"data-seul":``,children:`Voir l’installation`})]}):null]})]})}function Me({statut:e}){let{phase:t}=s(),n=(0,z.useRef)(null),r=(0,z.useRef)(null),o=Te(r),c=De(t),u=(0,z.useId)(),d=o===null?void 0:{"--hero-cellule":`${o.cellule}px`};return(0,B.jsx)(`section`,{className:`vue hero-bande`,"data-vue":`presentation`,"data-palier":o?.palier,"aria-labelledby":u,children:(0,B.jsxs)(`div`,{className:`vue-contenu hero-contenu`,children:[(0,B.jsx)(`p`,{className:`hero-ouverture`,children:h(`Προμηθεύς, « celui qui pense avant »`)}),(0,B.jsxs)(`div`,{ref:r,className:`hero-foyer`,style:d,children:[(0,B.jsx)(i,{anchor:n,className:`hero-braises`}),(0,B.jsx)(l,{className:`hero-logo`,svgRef:n,entrance:`inscription`})]}),(0,B.jsxs)(`div`,{className:`hero-corps`,children:[(0,B.jsxs)(`div`,{className:`hero-principal`,children:[(0,B.jsx)(`h1`,{id:u,className:`t-affiche hero-titre`,children:`Une IA de cybersécurité qui tourne sur ton PC et ne modifie rien sans toi.`}),(0,B.jsx)(`p`,{className:`t-chapeau hero-phrase`,children:h(`Prométhée lance des commandes PowerShell, lit et modifie tes fichiers, et audite les systèmes que tu as le droit de tester. Le modèle tourne en local avec Ollama. Avant qu’une commande change quoi que ce soit, tu la vois en entier et tu réponds oui ou non.`)}),(0,B.jsxs)(`div`,{className:`hero-etat`,role:`region`,"aria-label":`État de la console locale`,children:[(0,B.jsxs)(`div`,{className:`hero-rangee`,children:[t===`online`?(0,B.jsx)(a,{variant:`feu`,size:`l`,href:`#console`,iconEnd:(0,B.jsx)(F,{"aria-hidden":`true`}),children:`Ouvrir la console`}):(0,B.jsx)(a,{variant:`feu`,size:`l`,href:`#demarrer`,iconEnd:(0,B.jsx)(F,{"aria-hidden":`true`}),children:`Installer la console`}),(0,B.jsx)(a,{variant:`contour`,size:`l`,href:`#demo`,children:`Voir une session`})]}),(0,B.jsx)(Oe,{phase:t,adresse:e?.server.listen??null,frais:c,className:t===`statique`?void 0:`hero-ligne-etat`})]})]}),(0,B.jsx)(je,{phase:t,statut:e})]}),(0,B.jsxs)(w,{columns:4,narrowColumns:2,className:`hero-reperes`,children:[(0,B.jsx)(D,{label:`Modèle`,children:(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`span`,{className:`t-donnee`,children:`RedSage-Qwen3-8B`}),`, quantifié en `,(0,B.jsx)(`span`,{className:`t-donnee`,children:`Q4_K_M`})]})}),(0,B.jsx)(D,{label:`Contexte`,children:(0,B.jsx)(`span`,{children:h(`8 192 tokens`)})}),(0,B.jsx)(D,{label:`Vitesse`,children:(0,B.jsxs)(`span`,{children:[`≈`,`\xA0`,`60`,`\xA0`,`tokens/s sur une RTX 5060 Laptop`]})}),(0,B.jsx)(D,{label:`Deux interfaces`,children:(0,B.jsx)(`span`,{children:`Console web locale, et TUI dans le terminal`})})]})]})})}function J({commande:e,texte:t,children:n,...r}){return(0,B.jsxs)(`li`,{className:`demarrer-ligne`,...r,children:[(0,B.jsxs)(`div`,{className:`demarrer-commande`,children:[(0,B.jsx)(j,{code:e}),(0,B.jsx)(`span`,{className:`demarrer-note`,children:typeof t==`string`?h(t):t}),(0,B.jsx)(M,{text:e,subject:`la commande ${e}`})]}),n]})}function Ne({statut:e}){let{phase:t}=s(),n=De(t),[r,i]=(0,z.useState)(!1);(0,z.useEffect)(()=>{t===`offline`&&i(!0)},[t]);let a=q(`demarrer`);return(0,B.jsxs)(V,{id:a.id,letter:a.lettre,name:a.nom,word:a.mot,title:`Lancer Prométhée`,lead:h(`Deux façons de l’utiliser, qui partagent le même modèle et le même principe de validation.`),children:[(0,B.jsxs)(`div`,{className:`demarrer-voies`,children:[(0,B.jsxs)(`div`,{className:`demarrer-voie`,children:[(0,B.jsx)(`h3`,{className:`t-titre-3 demarrer-titre`,children:`La console web`}),(0,B.jsxs)(`ul`,{className:`demarrer-lignes`,children:[(0,B.jsx)(J,{commande:`npm install`,texte:`une fois, pour les dépendances`}),(0,B.jsx)(J,{commande:`npm run build`,texte:`construit l’interface`}),(0,B.jsx)(J,{commande:`npm start`,texte:(0,B.jsxs)(B.Fragment,{children:[`démarre le serveur local sur `,(0,B.jsx)(`span`,{className:`t-donnee`,children:`127.0.0.1:4317`})]}),children:r&&t!==`statique`?(0,B.jsx)(Oe,{phase:t,adresse:e?.server.listen??null,frais:n,className:`demarrer-etat`}):null})]}),(0,B.jsx)(`p`,{className:`demarrer-prerequis`,children:h(`Prérequis : Windows, Node.js 24 ou plus, Ollama et un modèle installé. PowerShell 5.1 est déjà dans Windows.`)})]}),(0,B.jsxs)(`div`,{className:`demarrer-voie`,children:[(0,B.jsx)(`h3`,{className:`t-titre-3 demarrer-titre`,children:`La TUI dans le terminal`}),(0,B.jsx)(E,{shown:3,label:`commandes`,className:`demarrer-lignes`,children:he.map(([e,t])=>(0,B.jsx)(J,{commande:e,texte:t},e))}),(0,B.jsx)(`p`,{className:`demarrer-prerequis`,children:h(`Prérequis : Windows 11, Ollama et Python. L’interface utilise Textual, installé dans un environnement virtuel à côté du script.`)})]})]}),(0,B.jsxs)(`p`,{className:`demarrer-cadre`,children:[(0,B.jsx)(`strong`,{className:`demarrer-cadre-titre`,children:`Cadre d’usage.`}),` `,h(`Prométhée est pensé pour les étudiants en cybersécurité. Il t’aide à apprendre, à te défendre et à t’entraîner en CTF, sur des machines et des sites que tu as le droit de tester.`)]})]})}var Pe=new Set,Fe=Array.from({length:21},(e,t)=>t/20);function Y(e,t,n=.6){let r=v(),[i,a]=(0,z.useState)(!1);return(0,z.useEffect)(()=>{let i=e.current;if(!i||r||typeof IntersectionObserver!=`function`||Pe.has(t))return;let o=new IntersectionObserver(e=>{for(let r of e){if(!r.isIntersecting)continue;let e=r.rootBounds?.height??window.innerHeight;if((r.boundingClientRect.height>e?r.intersectionRect.height>=n*e-.5:r.intersectionRatio>=n-.001)&&!Pe.has(t)){Pe.add(t),o.disconnect(),a(!0);return}}},{threshold:[...new Set([...Fe,n])].sort((e,t)=>e-t)});return o.observe(i),()=>o.disconnect()},[e,t,n,r]),i}function X(e,t){let[n,r]=(0,z.useState)(0),[i,a]=(0,z.useState)(`avant`),[o,s]=(0,z.useState)(!1),[c,l]=(0,z.useState)(()=>typeof document<`u`&&document.hidden),u=(0,z.useRef)(null),d=S(t??u),[f,p]=(0,z.useState)(0),m=(0,z.useRef)(null),h=(0,z.useRef)(e);(0,z.useEffect)(()=>{h.current=e},[e]);let g=Math.max(0,e.length-1),_=(0,z.useCallback)(()=>{b()||h.current.length===0?(r(Math.max(0,h.current.length-1)),a(`fini`)):(p(e=>e+1),r(0),s(!1),a(`joue`))},[]),v=(0,z.useCallback)(()=>s(!0),[]),y=(0,z.useCallback)(()=>s(!1),[]),x=(0,z.useCallback)(()=>{s(!1),a(e=>e===`joue`?`fini`:e)},[]);(0,z.useEffect)(()=>{let e=()=>l(document.hidden);return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]);let C=i===`joue`&&!o&&!c&&d;return(0,z.useEffect)(()=>{if(!C)return;let e=m.current,t=e&&e.tour===f&&e.index===n?e.restant:h.current[n]??0;m.current=null;let i=Date.now(),o=!1,s=window.setTimeout(()=>{o=!0,n>=g?a(`fini`):r(n+1)},t);return()=>{window.clearTimeout(s),o||(m.current={tour:f,index:n,restant:Math.max(0,t-(Date.now()-i))})}},[C,n,g,f]),(0,z.useEffect)(()=>{let e=t?.current;if(!e||i!==`joue`)return;let n=e=>{e.target?.closest?.(`[data-commande-sequence]`)||x()};return e.addEventListener(`pointerdown`,n),e.addEventListener(`keydown`,n),()=>{e.removeEventListener(`pointerdown`,n),e.removeEventListener(`keydown`,n)}},[t,i,x]),{index:n,etat:i,enPause:o,jouer:_,pause:v,reprendre:y,arreter:x}}var Ie=`⏺︎`,Le=`☑︎`,Re=[`·`,`✢`,`✳︎`,`✶`,`✻`,`✽`,`✻`,`✶`,`✳︎`,`✢`];function ze({diff:e}){return(0,B.jsx)(`span`,{className:`tui-ecart`,children:e.map(([e,t],n)=>(0,B.jsxs)(`span`,{"data-diff":e===` `?void 0:e,"data-ton":e===` `?`dim`:void 0,children:[e===` `?` `:`${e} `,t,`
|
|
2
|
+
`]},n))})}function Be(e){let t=e.trim().split(/\s+/)[0]??``;return/^[aeiouàâéèêëîïôöùûü]/i.test(t)?`Sortie d’${t}`:`Sortie de ${t}`}function Ve({cmd:e,lignes:t}){let n=(0,z.useRef)(null),[r,i]=(0,z.useState)({deborde:!1,fin:!0}),a=(0,z.useCallback)(e=>{let t=e.scrollWidth>e.clientWidth+1,n=e.scrollLeft+e.clientWidth>=e.scrollWidth-1;i(e=>e.deborde===t&&e.fin===n?e:{deborde:t,fin:n})},[]);(0,z.useEffect)(()=>{let e=n.current;if(!e)return;a(e);let t=!0;if(document.fonts?.ready.then(()=>{t&&a(e)}),typeof ResizeObserver>`u`)return()=>void(t=!1);let r=new ResizeObserver(()=>a(e));return r.observe(e),()=>{t=!1,r.disconnect()}},[a]);let{deborde:o,fin:s}=r;return(0,B.jsx)(`pre`,{ref:n,className:`tui-bloc`,"data-deborde":o?``:void 0,"data-fin":o&&s?``:void 0,tabIndex:o?0:void 0,role:o?`region`:void 0,"aria-label":o?Be(e):void 0,onScroll:o?e=>a(e.currentTarget):void 0,children:t.join(`
|
|
3
|
+
`)})}function He({appel:e,frais:t=!1,onFraisFini:n,live:r=!1}){return(0,B.jsxs)(`div`,{className:`tui-appel`,"data-etat":e.etat,"data-frais":t?``:void 0,onAnimationEnd:e=>{e.target===e.currentTarget&&n?.()},children:[(0,B.jsxs)(`p`,{className:`tui-appel-tete`,children:[(0,B.jsx)(`span`,{className:`tui-puce`,children:Ie}),` `,(0,B.jsx)(`b`,{children:e.label}),(0,B.jsx)(`span`,{"data-ton":`dim`,children:`(`}),e.cmd,(0,B.jsx)(`span`,{"data-ton":`dim`,children:`)`})]}),(0,B.jsxs)(`div`,{className:`tui-appel-sortie`,"aria-live":r?`polite`:void 0,children:[(0,B.jsx)(`span`,{"data-ton":`dim`,children:`⎿`}),e.etat===`refus`?(0,B.jsxs)(`pre`,{className:`tui-bloc`,"data-pli":``,children:[(0,B.jsx)(`b`,{"data-ton":`danger`,children:`✕ Refusée par la politique`}),` : `,e.texte,e.conseil?`
|
|
4
|
+
`:null,e.conseil?(0,B.jsxs)(`span`,{"data-ton":`dim`,children:[`Pour la permettre : `,e.conseil]}):null]}):e.lignes?(0,B.jsx)(Ve,{cmd:e.cmd,lignes:e.lignes}):(0,B.jsxs)(`pre`,{className:`tui-bloc`,"data-pli":``,"data-ton":e.ton??(e.etat===`ok`?void 0:`dim`),children:[e.texte,e.diff?`
|
|
5
|
+
`:null,e.diff?(0,B.jsx)(ze,{diff:e.diff}):null]})]})]})}var Ue=[{id:`demande`,nom:`Demande`},{id:`politique`,nom:`Politique`},{id:`validation`,nom:`Ta validation`},{id:`execution`,nom:`Exécution`},{id:`reponse`,nom:`Réponse`}];function We(e){let t=/var\(\s*--([\w-]+)\s*\)/.exec(e)?.[1];return t===`tui-alerte`?{ton:`alerte`}:t===`tui-ok`?{ton:`ok`}:t===`tui-code`?{mode:`code`}:{}}var Ge=3,Ke=e=>Math.max(1,Math.round(e/120))*120;function qe(e){let t=[],n=[],r={elements:[],saisie:``,attente:null,taches:null,invite:null,appui:!1,modele:{texte:`promethee`,teinte:{ton:`accent`}},phase:null,sautees:[]},i=e=>{t.push(r),n.push(e)},a=e=>{r={...r,...e}},o=(e,t)=>a({elements:r.elements.map(n=>n.k===`appel`&&n.appel.id===e?{k:`appel`,appel:{...n.appel,...t}}:n)});return i(480),e.forEach((t,n)=>{switch(t.t){case`type`:a({phase:`demande`,sautees:[]});for(let e=Ge;e<t.text.length;e+=Ge)a({saisie:t.text.slice(0,e)}),i(120);a({saisie:t.text}),i(360),a({saisie:``,elements:[...r.elements,{k:`moi`,texte:t.text}]});break;case`notice`:a({elements:[...r.elements,{k:`avis`,texte:t.text,teinte:We(t.color)}]});break;case`model`:a({modele:{texte:t.text,teinte:We(t.color)}});break;case`spin`:{e.slice(n+1).find(e=>![`spin`,`notice`,`model`,`tick`].includes(e.t))?.t===`answer`&&a({phase:`reponse`});let r=Math.max(1,Math.round(t.ms/120));for(let e=0;e<r;e++)a({attente:{verbe:t.verb,image:e}}),i(120);a({attente:null});break}case`tool`:a({phase:`politique`,elements:[...r.elements,{k:`appel`,appel:{id:t.id,label:t.label,cmd:t.cmd,etat:`attente`,texte:t.wait??`En attente de ta validation…`,lignes:null,diff:null}}]}),i((t.wait?4:2)*120);break;case`prompt`:a({invite:t,appui:!1,phase:`validation`}),i((t.fast?9:22)*120),a({appui:!0}),i(240),a({invite:null,appui:!1});break;case`run`:o(t.id,{etat:`execution`,texte:`Exécution…`}),a({phase:`execution`}),i(Ke(t.ms));break;case`result`:o(t.id,{etat:`ok`,lignes:t.lines});break;case`refus`:o(t.id,{etat:`refus`,texte:t.reason,conseil:t.advice}),a({phase:`politique`,sautees:[`validation`,`execution`]});break;case`text`:o(t.id,{etat:`ok`,texte:t.summary,lignes:null,diff:t.diff??null}),a({phase:`execution`});break;case`tasks`:a({taches:{items:t.items,faites:0}});break;case`tick`:r.taches&&a({taches:{...r.taches,faites:t.i+1}});break;case`answer`:{a({phase:`reponse`});let e=h(t.md),n=e.split(`
|
|
6
|
+
`),o=r.elements.length;for(let e=1;e<n.length;e++){if((n[e-1]??``).trim()===``)continue;let t=n.slice(0,e).join(`
|
|
7
|
+
`);a({elements:[...r.elements.slice(0,o),{k:`reponse`,md:t}]}),i(240)}a({elements:[...r.elements.slice(0,o),{k:`reponse`,md:e}]});break}}}),i(0),{ecrans:t,pas:n}}var Je=Object.fromEntries(Object.keys(U).map(e=>[e,qe(U[e].ops)])),Ye=`/aide · Shift+Tab plan · Esc interrompre · Ctrl+C ×2 quitter`,Xe=`↑↓ choisir · Entrée valider (ou tape le numéro) · Esc refuser`;function Ze(){return(0,B.jsxs)(`div`,{className:`tui-accueil`,children:[(0,B.jsxs)(`b`,{children:[(0,B.jsx)(`span`,{"data-ton":`accent`,children:`✻`}),` Bienvenue dans Prométhée !`]}),`
|
|
8
|
+
`,(0,B.jsx)(`span`,{"data-ton":`dim`,children:` IA locale de cybersécurité · hors ligne · tes données restent sur ta machine
|
|
9
|
+
|
|
10
|
+
modèle `}),(0,B.jsx)(`span`,{"data-ton":`ok`,children:`●`}),` promethee · 8.19B Q4_K_M · prêt
|
|
11
|
+
`,(0,B.jsx)(`span`,{"data-ton":`dim`,children:` politique `}),(0,B.jsx)(`span`,{"data-ton":`ok`,children:`●`}),` stricte · liste blanche et périmètre partagés avec la console
|
|
12
|
+
`,(0,B.jsx)(`span`,{"data-ton":`dim`,children:` commandes `}),(0,B.jsx)(`span`,{"data-ton":`accent`,children:`tu valides chaque commande`}),` avant qu’elle s’exécute`]})}function Qe({invite:e,appui:t}){return(0,B.jsxs)(`div`,{className:`tui-demande`,children:[(0,B.jsx)(`b`,{"data-ton":`accent`,children:e.title}),`
|
|
13
|
+
`,e.body.map(([e,t],n)=>e===`lecture`||e===`sensible`?(0,B.jsxs)(`span`,{children:[`
|
|
14
|
+
`,(0,B.jsx)(`b`,{"data-ton":e===`lecture`?`ok`:`alerte`,children:e===`lecture`?`● lecture`:`▲ sensible`}),(0,B.jsxs)(`span`,{"data-ton":`dim`,children:[` · `,t]}),`
|
|
15
|
+
`]},n):(0,B.jsxs)(`span`,{"data-ton":e===`dim`?`dim`:void 0,children:[`
|
|
16
|
+
`,e===`b`?(0,B.jsx)(`b`,{children:t}):t]},n)),e.diff?(0,B.jsxs)(B.Fragment,{children:[`
|
|
17
|
+
|
|
18
|
+
`,(0,B.jsx)(ze,{diff:e.diff})]}):null,(0,B.jsx)(`p`,{className:`tui-demande-question`,children:(0,B.jsx)(`b`,{children:e.q})}),e.opts.map((e,n)=>(0,B.jsxs)(`div`,{className:`tui-option`,"data-choisi":n===0?``:void 0,"data-appui":n===0&&t?``:void 0,children:[n===0?`❯`:` `,` `,n+1,`. `,e]},e))]})}function $e({taches:e}){return(0,B.jsxs)(`div`,{className:`tui-liste`,children:[(0,B.jsxs)(`b`,{"data-ton":`dim`,children:[`Tâches `,e.faites,`/`,e.items.length]}),e.items.map((t,n)=>{let r=n<e.faites;return(0,B.jsxs)(`div`,{"data-ton":r?`dim`:void 0,children:[` `,(0,B.jsx)(`span`,{"data-ton":r?`ok`:n===e.faites?`accent`:`dim`,children:r?Le:`☐`}),` `,(0,B.jsx)(`span`,{"data-ton":n>e.faites?`dim`:void 0,children:t})]},t)})]})}function et({ecran:e,fluxRef:t}){return(0,B.jsxs)(`div`,{className:`tui-vue demo-vue`,children:[(0,B.jsxs)(`div`,{className:`tui-flux`,ref:t,tabIndex:0,role:`region`,"aria-label":`Session de la TUI`,children:[(0,B.jsx)(Ze,{}),e.elements.map((e,t)=>e.k===`moi`?(0,B.jsxs)(`div`,{className:`tui-tour`,children:[(0,B.jsx)(`span`,{"data-ton":`accent`,children:`❯`}),` `,e.texte]},t):e.k===`avis`?(0,B.jsx)(`div`,{className:`tui-avis`,"data-ton":e.teinte.ton,"data-mode":e.teinte.mode,children:e.texte},t):e.k===`appel`?(0,B.jsx)(He,{appel:e.appel},t):(0,B.jsxs)(`div`,{className:`tui-rep`,children:[(0,B.jsx)(`span`,{"data-ton":`accent`,children:Ie}),(0,B.jsx)(te,{source:e.md})]},t))]}),(0,B.jsxs)(`div`,{className:`tui-pied`,children:[e.attente?(0,B.jsxs)(`p`,{className:`tui-attente`,children:[Re[e.attente.image%Re.length],` `,e.attente.verbe,`… `,(0,B.jsx)(`span`,{"data-ton":`dim`,children:`(Esc pour interrompre)`})]}):null,e.taches?(0,B.jsx)($e,{taches:e.taches}):null,e.invite?(0,B.jsx)(Qe,{invite:e.invite,appui:e.appui}):(0,B.jsxs)(`div`,{className:`tui-boite`,children:[(0,B.jsx)(`b`,{className:`tui-car`,"data-mode":`demande`,children:`❯`}),(0,B.jsxs)(`span`,{children:[e.saisie,(0,B.jsx)(`span`,{className:`tui-curseur`})]})]}),(0,B.jsxs)(`div`,{className:`tui-etat`,children:[(0,B.jsx)(`span`,{className:`tui-etat-aide`,children:e.invite?Xe:Ye}),(0,B.jsxs)(`span`,{className:`tui-etat-modele`,children:[(0,B.jsx)(`span`,{"data-ton":e.modele.teinte.ton,"data-mode":e.modele.teinte.mode,children:e.modele.texte}),` `,`· politique stricte`]})]})]})]})}var tt=Object.keys(U).map(e=>({id:e,label:U[e].label})),nt={code:`Reprend un vrai exercice Rust fait avec Prométhée.`};function rt(){let[e,t]=(0,z.useState)(`ports`),[n,i]=(0,z.useState)(!1),a=(0,z.useRef)(null),o=(0,z.useRef)(null),s=!v()&&typeof IntersectionObserver==`function`,{ecrans:c,pas:l}=Je[e],{index:d,etat:f,enPause:p,jouer:m,pause:h,reprendre:g}=X(l,a),_=Y(a,`demo`);(0,z.useEffect)(()=>{_&&f===`avant`&&m()},[_,f,m]);let y=c.length-1,b=c[s?f===`avant`?0:f===`joue`?Math.min(d,y):y:y]??c[y],x=(0,z.useRef)({actif:!0,laisse:0}),S=(0,z.useCallback)(()=>{let e=o.current;if(!e)return;let t=x.current,n=e.scrollHeight-e.clientHeight;e.scrollTop<Math.min(t.laisse,n)-1?t.actif=!1:e.scrollTop>=n-8&&(t.actif=!0),t.actif&&(e.scrollTop=e.scrollHeight),t.laisse=e.scrollTop},[]);(0,z.useLayoutEffect)(()=>S(),[b,S]),(0,z.useEffect)(()=>{let e=o.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(()=>S());t.observe(e);for(let n of e.children)t.observe(n);return()=>t.disconnect()},[b,S]);let C=(0,z.useCallback)(e=>{x.current={actif:!0,laisse:0},i(!0),t(e),s&&m()},[s,m]),w=()=>{x.current={actif:!0,laisse:0},i(!0),m()},T=()=>{f===`joue`&&(p?g():h())},E=b?.phase??null,D=b?.sautees??[],O=e=>Ue.find(t=>t.id===e)?.nom??``,k=E?`${O(E)}.${D.length?` ${D.map(O).join(` et `)} : non atteintes.`:``}`:``;return(0,B.jsxs)(`div`,{className:`demo`,children:[(0,B.jsxs)(`div`,{className:`demo-tete`,children:[(0,B.jsx)(re,{id:`demo-scenarios`,label:`Scénarios de démo`,value:e,onChange:C,tabs:tt,className:`demo-scenarios`}),s?(0,B.jsxs)(`div`,{className:`demo-commandes`,children:[(0,B.jsx)(r,{variant:`contour`,icon:p?(0,B.jsx)(I,{"aria-hidden":`true`}):(0,B.jsx)(ie,{"aria-hidden":`true`}),"aria-disabled":f!==`joue`||void 0,"data-commande-sequence":``,onClick:T,children:(0,B.jsxs)(`span`,{className:`demo-bascule`,"data-etat":p?`reprendre`:void 0,children:[(0,B.jsx)(`span`,{children:`Pause`}),(0,B.jsx)(`span`,{children:`Reprendre`})]})}),(0,B.jsx)(r,{variant:`contour`,icon:(0,B.jsx)(ee,{"aria-hidden":`true`}),"data-commande-sequence":``,onClick:w,children:`Rejouer`})]}):null]}),(0,B.jsxs)(ne,{tabs:`demo-scenarios`,id:e,active:!0,className:`demo-panneau`,children:[nt[e]?(0,B.jsx)(`p`,{className:`demo-description`,children:nt[e]}):null,(0,B.jsxs)(`div`,{className:`tui-cadre demo-cadre`,"data-cadre":`tui`,ref:a,children:[(0,B.jsxs)(`div`,{className:`tui-chrome`,"aria-hidden":`true`,children:[(0,B.jsxs)(`div`,{className:`tui-chrome-onglet`,children:[(0,B.jsx)(u,{className:`tui-chrome-flamme`}),` Prométhée`]}),(0,B.jsx)(`span`,{className:`tui-chrome-plus`,children:`+ ⌄`}),(0,B.jsxs)(`div`,{className:`tui-chrome-fenetre`,children:[(0,B.jsx)(`span`,{children:`─`}),(0,B.jsx)(`span`,{children:`☐`}),(0,B.jsx)(`span`,{children:`✕`})]})]}),b?(0,B.jsx)(et,{ecran:b,fluxRef:o}):null]})]}),(0,B.jsx)(`ol`,{className:`demo-fil`,"aria-label":`Phases de la commande`,children:Ue.map(e=>{let t=D.includes(e.id);return(0,B.jsxs)(`li`,{className:`demo-phase`,"aria-current":E===e.id?`step`:void 0,"data-etat":t?`non-atteinte`:void 0,children:[e.nom,t?`\xA0: non atteinte`:null]},e.id)})}),(0,B.jsx)(`p`,{className:`sr`,"aria-live":n?`polite`:`off`,children:k})]})}function it(){let e=q(`demo`);return(0,B.jsx)(V,{id:e.id,letter:e.lettre,name:e.nom,word:e.mot,title:`La TUI, telle qu’elle s’affiche`,lead:h(`Démo reconstituée : rien ne s’exécute, les sorties sont des exemples.`),children:(0,B.jsx)(rt,{})})}var Z=W.length,Q=4,at=5,ot=Z-1,st=e=>`Étape ${e+1} sur ${Z} : ${W[e]?.title??``}.`,ct=e=>W.map((t,n)=>n<e?`passee`:n===e?`courante`:`a-venir`),lt=`Lecture : les ${Z} étapes.`,ut=`Refusée à l’étape 5 : ni validation ni exécution.`,dt=e=>W.map((t,n)=>n===Q?`refusee`:n===at||n===6?`non-atteinte`:n===ot?e?`passee`:`courante`:`passee`),ft={lecture:[...W.map((e,t)=>({etats:ct(t),legende:st(t)})),{etats:W.map(()=>`passee`),legende:lt}],refus:[...W.slice(0,5).map((e,t)=>({etats:ct(t),legende:st(t)})),{etats:dt(!1),legende:ut},{etats:dt(!0),legende:ut}]},pt={lecture:W.map((e,t)=>(t===Q?4:t===at?6:2)*120).concat(0),refus:[...W.slice(0,Q).map(()=>240),480,240,0]},mt=[{value:`lecture`,label:`En lecture`},{value:`refus`,label:`Refusée`}];function ht(){let e=!v()&&typeof IntersectionObserver==`function`,t=(0,z.useRef)(null),n=(0,z.useRef)(null),r=(0,z.useId)(),[i,a]=(0,z.useState)(`lecture`),[o,s]=(0,z.useState)(!1),[c,l]=(0,z.useState)(!1),u=f(x.etroit),[d,p]=(0,z.useState)(!1),{index:m,etat:g,jouer:_}=X(pt[i],n),y=Y(t,`fonctionnement`);(0,z.useEffect)(()=>{y&&_()},[y,_]);let b=ft[i],S=b.length-1,C=b[e?g===`avant`?0:g===`joue`?m:S:S]??b[S],w=i===`refus`&&C.etats[Q]===`refusee`;return(0,z.useEffect)(()=>{w&&e&&p(!0)},[w,e]),(0,B.jsxs)(`div`,{className:`trajet`,ref:t,children:[(0,B.jsxs)(`div`,{className:`trajet-tete`,children:[(0,B.jsx)(L,{label:`Trajet d’une commande`,value:i,onChange:e=>{a(e),s(!0),p(!1),_()},options:mt,className:`trajet-choix`}),(0,B.jsx)(`p`,{className:`trajet-legende`,"aria-live":o?`polite`:`off`,children:h(C.legende)})]}),(0,B.jsx)(`ol`,{ref:n,id:`${r}-etapes`,className:`trajet-etapes`,"data-plie":!u&&!c?``:void 0,children:W.map((e,t)=>{let n=C.etats[t]??`a-venir`;return(0,B.jsxs)(`li`,{className:`trajet-etape`,"data-etat":n,"data-frais":d&&t===Q&&n===`refusee`?``:void 0,"aria-current":n===`courante`?`step`:void 0,onAnimationEnd:()=>p(!1),children:[(0,B.jsxs)(`span`,{className:`trajet-marque`,children:[(0,B.jsx)(`span`,{className:`trajet-numero`,children:String(t+1).padStart(2,`0`)}),n===`refusee`?(0,B.jsx)(`span`,{className:`trajet-mot`,children:`Refusée`}):n===`non-atteinte`?(0,B.jsx)(`span`,{className:`trajet-mot`,children:`Non atteinte`}):null]}),(0,B.jsx)(`h3`,{className:`t-titre-3 trajet-titre`,children:e.title}),(0,B.jsx)(`p`,{className:`trajet-fait`,children:h(e.chip)}),(0,B.jsx)(`p`,{className:`trajet-texte`,children:h(e.text)})]},e.title)})}),u?null:(0,B.jsx)(`button`,{type:`button`,className:`trajet-plier`,"aria-expanded":c,"aria-controls":`${r}-etapes`,onClick:()=>l(e=>!e),children:c?`Masquer le détail des étapes`:`Afficher le détail des ${Z} étapes`})]})}function gt(){let e=q(`fonctionnement`);return(0,B.jsx)(V,{id:e.id,letter:e.lettre,name:e.nom,word:e.mot,title:`Ce qui se passe entre ta demande et la réponse`,lead:h(`Le modèle fait 8 milliards de paramètres et tourne sur la carte graphique d’un portable. Autour de lui, l’interface classe la demande, vérifie les commandes, attend ton accord et contrôle la réponse.`),children:(0,B.jsx)(ht,{})})}var _t=(e,t)=>{let n=Number(e.replace(`≈`,``).replace(`,`,`.`).trim());return Number.isFinite(n)?n:t};function vt(e,t){if(t===`moyenne`||e.s42===void 0&&e.s7===void 0)return{valeur:_t(e.shown,e.score),texte:e.shown};let n=t===`s42`?e.s42:e.s7;return n===void 0?null:{valeur:n,texte:n.toLocaleString(`fr-FR`,{minimumFractionDigits:2,maximumFractionDigits:2})}}var $={s42:{titre:`Note sur 3, seed 42`,phrase:`Les 17 questions, une passe avec la seed 42.`,aide:!0},s7:{titre:`Note sur 3, seed 7`,phrase:`La même passe avec la seed 7. qwen3.5:9b et deephat n’ont tourné qu’avec la seed 42.`,aide:!1},moyenne:{titre:`Note moyenne sur 3`,phrase:`Moyenne des seeds 42 et 7 quand le modèle a tourné deux fois.`,aide:!0}},yt={survol:`Survole une barre pour le détail.`,toucher:`Touche une barre pour le détail.`},bt=e=>e.pointerType===`touch`,xt=[`s42`,`s7`,`moyenne`];function St({image:e}){let[t,n]=(0,z.useState)(null);return(0,z.useEffect)(()=>{if(!t)return;let e=e=>{e.target?.closest?.(`.graphe-banc-ligne`)||n(null)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[t]),(0,B.jsxs)(`figure`,{className:`graphe-banc`,children:[(0,B.jsx)(`div`,{className:`graphe-banc-tete`,children:xt.map(t=>(0,B.jsxs)(`div`,{className:`graphe-banc-image`,"data-etat":t===e?`montre`:void 0,"aria-hidden":t!==e||void 0,children:[(0,B.jsx)(`h3`,{className:`t-titre-3 graphe-banc-titre`,children:$[t].titre}),(0,B.jsxs)(`p`,{className:`graphe-banc-phrase`,children:[h($[t].phrase),$[t].aide?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`graphe-banc-aide`,"data-pointeur":`survol`,children:` ${yt.survol}`}),yt.toucher?(0,B.jsx)(`span`,{className:`graphe-banc-aide`,"data-pointeur":`toucher`,children:` ${h(yt.toucher)}`}):null]}):null]})]},t))}),(0,B.jsx)(`div`,{className:`graphe-banc-lignes`,role:`list`,"aria-label":$[e].titre,children:de.map(r=>{let i=vt(r,e);return(0,B.jsxs)(`div`,{className:`graphe-banc-ligne`,"data-choisi":r.pick?``:void 0,role:`listitem`,tabIndex:0,"aria-label":`${r.name}${r.pick?`, le modèle de Prométhée`:``} : ${i?`${i.texte} sur 3`:`une seule seed, pas de note pour la seed 7`}. ${r.tip.join(`. `)}`,onPointerEnter:e=>{bt(e)||n(r.name)},onPointerLeave:e=>{bt(e)||n(null)},onPointerDown:e=>{bt(e)&&n(r.name)},onFocus:()=>n(r.name),onBlur:()=>n(null),onKeyDown:e=>{e.key===`Escape`&&n(null)},children:[(0,B.jsxs)(`span`,{className:`graphe-banc-nom`,children:[r.name,r.pick?(0,B.jsx)(`span`,{className:`graphe-banc-choix`,children:`Prométhée`}):null]}),(0,B.jsxs)(`span`,{className:`graphe-banc-piste`,style:i?{"--valeur":i.valeur}:void 0,"data-mesure":i?void 0:`aucune`,children:[i?(0,B.jsx)(`span`,{className:`graphe-banc-barre`}):null,(0,B.jsx)(`span`,{className:`graphe-banc-valeur`,children:i?i.texte:`une seule seed`})]}),t===r.name?(0,B.jsxs)(`span`,{className:`graphe-banc-bulle`,role:`tooltip`,children:[(0,B.jsx)(`b`,{children:r.name}),r.tip.map(e=>(0,B.jsx)(`span`,{children:h(e)},e))]}):null]},r.name)})}),(0,B.jsx)(`div`,{className:`graphe-banc-axe`,"aria-hidden":`true`,children:[0,1,2,3].map(e=>(0,B.jsx)(`span`,{children:e},e))}),(0,B.jsx)(`figcaption`,{className:`graphe-banc-pied`,children:h(`Entre deux seeds, la note d’un même modèle bouge jusqu’à 0,4. RedSage et qwen3.5:4b sont donc à égalité.`)})]})}var Ct=[`s42`,`s7`,`moyenne`],wt=[m,m,0],Tt=[{value:`s42`,label:`Seed 42`},{value:`s7`,label:`Seed 7`},{value:`moyenne`,label:`Moyenne`}],Et=[`Modèle`,`Seed 42`,`Seed 7`,`Hallucinations sur 17`,`Tokens/s`,`Sur GPU`,`Mots par réponse`],Dt=`Les 13 thèmes : reconnaissance réseau, web, revue de code, analyse de logs, élévation de privilèges sous Linux, examen d’un poste Windows, crypto, CTF, Active Directory, programmation en Python, pièges à\xA0hallucination, concision et conversation à plusieurs tours.`,Ot={s42:1,s7:2,moyenne:null};function kt(){let e=!v()&&typeof IntersectionObserver==`function`,t=(0,z.useRef)(null),[n,r]=(0,z.useState)(null),{index:i,etat:a,jouer:o,arreter:s}=X(wt,t),c=Y(t,`modele`);(0,z.useEffect)(()=>{c&&o()},[c,o]);let l=n??(e?a===`avant`?`s42`:a===`joue`?Ct[i]??`moyenne`:`moyenne`:`moyenne`);return(0,B.jsxs)(`div`,{className:`modele-banc`,ref:t,children:[(0,B.jsx)(L,{label:`Image du banc d’essai`,value:l,onChange:e=>{s(),r(e)},options:Tt,className:`modele-images`}),(0,B.jsx)(St,{image:l}),(0,B.jsx)(`p`,{className:`sr`,"aria-live":n?`polite`:`off`,children:n?`${$[l].titre}.`:``}),(0,B.jsx)(At,{lue:Ot[l]})]})}function At({lue:e}){let t=(0,z.useId)(),n=f(x.etroit),[r,i]=(0,z.useState)(!1),[a,o]=(0,z.useState)(!1),s=(0,z.useRef)(null),c=!n&&!r,l=e=>{e&&o(e.scrollLeft+e.clientWidth>=e.scrollWidth-1)};return(0,z.useEffect)(()=>{let e=s.current;if(!e||(l(e),typeof ResizeObserver>`u`))return;let t=new ResizeObserver(()=>l(e));return t.observe(e),()=>t.disconnect()},[c]),(0,B.jsxs)(`div`,{className:`modele-detail`,children:[(0,B.jsx)(`p`,{className:`modele-detail-legende`,id:`${t}-legende`,children:`Le détail, modèle par modèle`}),n?null:(0,B.jsx)(`button`,{type:`button`,className:`modele-plier`,"aria-expanded":r,"aria-controls":`${t}-zone`,onClick:()=>i(e=>!e),children:r?`Replier le détail`:`Afficher le détail (${fe.length} modèles)`}),(0,B.jsx)(`p`,{id:`${t}-themes`,className:`modele-detail-themes`,"data-plie":c?``:void 0,children:h(Dt)}),(0,B.jsx)(`div`,{ref:s,id:`${t}-zone`,className:`modele-tableau-zone`,role:`region`,"aria-labelledby":`${t}-legende`,tabIndex:0,"data-plie":c?``:void 0,"data-fin":a?``:void 0,onScroll:e=>l(e.currentTarget),children:(0,B.jsxs)(`table`,{className:`modele-tableau`,children:[(0,B.jsx)(`caption`,{className:`sr`,children:`Le détail, modèle par modèle`}),(0,B.jsx)(`thead`,{children:(0,B.jsx)(`tr`,{children:Et.map((t,n)=>(0,B.jsx)(`th`,{scope:`col`,"data-lue":n===e?``:void 0,children:t},t))})}),(0,B.jsx)(`tbody`,{children:fe.map((t,n)=>(0,B.jsx)(`tr`,{"data-choisie":n===0?``:void 0,children:t.map((t,n)=>n===0?(0,B.jsx)(`th`,{scope:`row`,children:t},n):(0,B.jsx)(`td`,{"data-lue":n===e?``:void 0,children:h(t)},n))},t[0]))})]})})]})}function jt(){let e=(0,z.useId)(),t=f(x.etroit),[n,r]=(0,z.useState)(!1);return(0,B.jsxs)(`div`,{className:`modele-fiche`,children:[(0,B.jsx)(`h3`,{className:`t-titre-3 modele-fiche-titre`,children:`Ce qui tourne sous Prométhée`}),t?null:(0,B.jsx)(`button`,{type:`button`,className:`modele-plier`,"aria-expanded":n,"aria-controls":`${e}-fiche`,onClick:()=>r(e=>!e),children:n?`Replier la fiche`:`Afficher la fiche et l’extrait du prompt`}),(0,B.jsxs)(`div`,{id:`${e}-fiche`,className:`modele-fiche-corps`,"data-plie":!t&&!n?``:void 0,children:[(0,B.jsxs)(O,{children:[(0,B.jsx)(T,{label:`Base`,children:`RedSage-Qwen3-8B-DPO (RISys-Lab, ICLR 2026)`}),(0,B.jsx)(T,{label:`Fichier`,children:`GGUF quantifié en Q4_K_M`}),(0,B.jsx)(T,{label:`Contexte`,children:h(`8 192 tokens, cache KV en q8_0 : environ 72 Ko par token, 600 Mo au total`)}),(0,B.jsx)(T,{label:`Réglages`,children:h(`température 0,5 · top_p 0,9 · 2 048 tokens max par réponse`)}),(0,B.jsx)(T,{label:`Carte`,children:h(`100 % sur le GPU d’une RTX 5060 Laptop`)})]}),(0,B.jsxs)(`figure`,{className:`modele-citation`,children:[(0,B.jsx)(`blockquote`,{children:h(`« Si tu n’es pas sûr d’une information (numéro de CVE, version, option de commande), dis-le clairement au lieu d’inventer. »`)}),(0,B.jsx)(`figcaption`,{children:`Extrait du prompt système`})]})]})]})}function Mt(){let e=q(`modele`);return(0,B.jsxs)(V,{id:e.id,letter:e.lettre,name:e.nom,word:e.mot,title:`Le modèle, choisi sur un banc d’essai`,lead:(0,B.jsx)(`span`,{className:`modele-chapeau`,children:h(`Les mêmes 17 questions en français pour chaque modèle, notées à la main de 0 à 3.`)}),children:[(0,B.jsx)(kt,{}),(0,B.jsxs)(`div`,{className:`modele-suite`,children:[(0,B.jsx)(jt,{}),(0,B.jsxs)(`ul`,{className:`modele-constats`,children:[(0,B.jsxs)(`li`,{className:`modele-constat`,children:[(0,B.jsx)(`strong`,{children:`Même RedSage invente.`}),` `,h(`Il a reçu le drapeau « hallucination » sur 10 des 17 questions avec la seed 42, et sur 9 avec la seed 7.`)]}),(0,B.jsxs)(`li`,{className:`modele-constat`,children:[(0,B.jsx)(`strong`,{children:`Aucun modèle testé ne décode correctement le Base64 du CTF.`}),` Ils inventent le flag ou ne le donnent pas.`]})]})]})]})}function Nt(){let{phase:e}=s(),{href:t,libelle:n}=ge(e);return(0,B.jsx)(`footer`,{className:`vue presentation-pied`,"data-vue":`presentation`,children:(0,B.jsxs)(`div`,{className:`vue-contenu presentation-pied-contenu`,children:[(0,B.jsx)(d,{className:`presentation-pied-frise`}),(0,B.jsxs)(`div`,{className:`presentation-pied-tete`,children:[(0,B.jsx)(`p`,{className:`presentation-pied-signature`,"aria-hidden":`true`,children:`ΠΡΟΜΗΘΕΥΣ`}),(0,B.jsx)(`a`,{className:`presentation-pied-lien`,href:t,children:n})]}),(0,B.jsx)(`p`,{className:`presentation-pied-note`,children:h(`Prométhée, « celui qui pense avant ». IA locale de cybersécurité.`)}),(0,B.jsx)(`p`,{className:`presentation-pied-note`,children:h(`Console : TypeScript, React, Node.js · TUI : Python, Textual · Ollama`)})]})})}var Pt=[{nom:`Tableau de bord`,texte:`L’état d’Ollama, le modèle chargé, le moteur PowerShell, les dernières opérations et les alertes. Tout est mesuré sur la machine.`,lien:`#console`,action:`Voir l’état`},{nom:`Terminal`,texte:`PowerShell sous liste blanche. Chaque commande est analysée par le parseur de PowerShell et classée lecture, sensible ou refusée. Ce qui n’est pas refusé s’exécute après ton accord, avec la sortie en direct.`,lien:`#console-terminal`,action:`Taper une commande`},{nom:`Cerveau`,texte:`Une conversation avec le modèle local. Quand il veut agir, il propose une commande que tu relis avant de l’exécuter.`,lien:`#console-ia`,action:`Poser une question`},{nom:`Audits`,texte:`Huit modules : surface d’attaque, ports autorisés, en-têtes HTTP, TLS, sécurité web, mauvaises configurations, configuration de la machine, analyse de fichiers. Sur cette machine ou une cible que tu as déclarée.`,lien:`#console-audits`,action:`Choisir un module`}],Ft=[[`Refus par défaut.`,`Une commande passe seulement si chaque élément est autorisé : commandes, appels de méthode, chemins écrits, cibles réseau.`],[`Rien n’est simulé.`,`Sans serveur local, la console affiche qu’elle est déconnectée. Elle n’invente ni sortie ni statistique.`],[`Un journal en ajout seul.`,`Les commandes exécutées ou refusées, les audits, les cibles déclarées ou retirées et les changements de réglages y sont écrits.`]];function It(){let e=q(`plateforme`);return(0,B.jsxs)(V,{id:e.id,letter:e.lettre,name:e.nom,word:e.mot,title:`La console web locale`,lead:(0,B.jsxs)(B.Fragment,{children:[`Depuis la version 2, Prométhée a une console dans le navigateur. Elle tourne sur ta machine et, par défaut, n’écoute que sur `,(0,B.jsx)(`span`,{className:`t-donnee`,children:`127.0.0.1`}),`. Comme dans la TUI, le modèle propose, tu valides.`]}),children:[(0,B.jsx)(w,{columns:1,className:`plateforme-espaces`,children:Pt.map(e=>(0,B.jsxs)(D,{className:`plateforme-espace`,children:[(0,B.jsx)(`h3`,{className:`t-titre-3 plateforme-nom`,children:e.nom}),(0,B.jsx)(`p`,{className:`plateforme-texte`,children:h(e.texte)}),(0,B.jsxs)(`a`,{className:`plateforme-lien`,href:e.lien,children:[e.action,(0,B.jsx)(F,{"aria-hidden":`true`})]})]},e.nom))}),(0,B.jsx)(`ul`,{className:`plateforme-garanties`,children:Ft.map(([e,t])=>(0,B.jsxs)(`li`,{className:`plateforme-garantie`,children:[(0,B.jsx)(`strong`,{className:`plateforme-garantie-titre`,children:e}),` `,h(t)]},e))})]})}var Lt=[`help`,`log`,`scope`];function Rt(){let[e,t]=(0,z.useState)(`/`),[n,i]=(0,z.useState)(0),[a,o]=(0,z.useState)(null),[s,c]=(0,z.useState)(!1),l=(0,z.useRef)(null),u=(0,z.useRef)(null),d=(0,z.useId)(),f=!v()&&typeof IntersectionObserver==`function`,p=e.trim().toLowerCase().replace(/^\//,``),m=(0,z.useMemo)(()=>me.filter(([e,t])=>e.slice(1).startsWith(p)||t.some(e=>e.startsWith(p))),[p]),h=Math.min(n,Math.max(0,m.length-1)),{index:g,etat:y,jouer:b}=X((0,z.useMemo)(()=>a?Array.from(a,(e,t)=>t===a.length-1?0:120):[0],[a]),l);(0,z.useEffect)(()=>{a&&(y===`joue`?t(`/${a.slice(0,g+1)}`):y===`fini`&&(t(`/${a}`),o(null)))},[a,y,g]),(0,z.useLayoutEffect)(()=>{let e=u.current,t=e?.querySelector(`[aria-selected="true"]`);if(!e)return;if(!t){e.scrollTop=0;return}let n=t.getBoundingClientRect().top-e.getBoundingClientRect().top+e.scrollTop;n<e.scrollTop?e.scrollTop=n:n+t.offsetHeight>e.scrollTop+e.clientHeight&&(e.scrollTop=n+t.offsetHeight-e.clientHeight)},[h,m]);let x=e=>{c(!0),i(0),f?(t(`/`),o(e),b()):(o(null),t(`/${e}`))},S=e=>{m.length!==0&&(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),i((h+(e.key===`ArrowDown`?1:m.length-1))%m.length))},C=m.length>0?`${d}-option-${h}`:void 0;return(0,B.jsxs)(`div`,{className:`palette-bloc`,ref:l,children:[(0,B.jsxs)(`div`,{className:`palette-essais`,role:`group`,"aria-labelledby":`${d}-essaie`,children:[(0,B.jsx)(`span`,{id:`${d}-essaie`,className:`palette-essais-titre`,children:`Essaie`}),Lt.map(e=>(0,B.jsx)(r,{variant:`contour`,size:`s`,className:`palette-essai`,onClick:()=>x(e),children:e},e))]}),(0,B.jsxs)(`div`,{className:`tui-cadre palette-cadre`,"data-cadre":`tui`,children:[(0,B.jsxs)(`label`,{className:`tui-boite palette-boite`,children:[(0,B.jsx)(`b`,{className:`tui-car`,"data-mode":`demande`,children:`❯`}),(0,B.jsx)(`input`,{className:`palette-champ`,value:e,onChange:e=>{o(null),t(e.target.value),i(0)},onKeyDown:S,spellCheck:!1,autoComplete:`off`,"aria-label":`Filtrer les commandes de la TUI`,"aria-controls":`${d}-liste`,"aria-activedescendant":C})]}),(0,B.jsx)(`ul`,{ref:u,id:`${d}-liste`,className:`palette-liste`,role:`listbox`,"aria-label":`Commandes de la TUI`,tabIndex:0,"aria-activedescendant":C,hidden:m.length===0,onKeyDown:S,children:m.map(([e,n,r],a)=>{let s=p&&!e.slice(1).startsWith(p)?n.find(e=>e.startsWith(p)):void 0;return(0,B.jsxs)(`li`,{id:`${d}-option-${a}`,role:`option`,"aria-selected":a===h,className:`palette-option`,onMouseEnter:()=>i(a),onClick:()=>{o(null),t(e),i(0)},children:[(0,B.jsx)(`span`,{className:`palette-nom`,"data-ton":a===h?`accent`:void 0,children:e}),(0,B.jsxs)(`span`,{className:`palette-texte`,children:[r,s?(0,B.jsxs)(`span`,{"data-ton":`dim`,children:[` (`,s,`)`]}):null]})]},e)})}),m.length===0?(0,B.jsxs)(`p`,{className:`palette-vide`,"data-ton":`dim`,children:[`Aucune commande ne commence par «\xA0`,p,`\xA0».`]}):null]}),(0,B.jsx)(`p`,{className:`sr`,"aria-live":`polite`,children:s&&!a?_(m.length,`commande`,`commandes`):``})]})}var zt={"❯":`demande`,"!":`direct`,"#":`memoire`,"⇧⇥":`plan`,"@":`agent`},Bt={demande:{texte:`/aide · Shift+Tab plan · Esc interrompre · Ctrl+C ×2 quitter`},direct:{texte:`! mode commande : une lecture part directement, le reste te demande une confirmation`,mode:`direct`},memoire:{texte:`# mode mémoire : Entrée enregistre cette note (mémoire globale ou du dossier)`,mode:`memoire`},plan:{texte:`⏸ mode plan : Prométhée propose un plan sans rien exécuter · Shift+Tab pour quitter`,mode:`plan`},agent:{texte:`/aide · Shift+Tab plan · Esc interrompre · Ctrl+C ×2 quitter`},code:{texte:`/aide · Shift+Tab plan · Esc interrompre · Ctrl+C ×2 quitter`}},Vt=Math.max(0,G.findIndex(e=>zt[e.key]===`direct`));function Ht(e){let t=G[e]?.example??``;return[1,2,3,4,5].map(n=>({i:e,texte:t.slice(0,Math.ceil(t.length*n/5))}))}var Ut=[{i:0,texte:``},{i:Vt,texte:``},...Ht(Vt)],Wt=[480,240,120,120,120,120,0],Gt=[120,120,120,120,120,0];function Kt(){let[e,t]=(0,z.useState)(0),[n,r]=(0,z.useState)(`entree`),[i,a]=(0,z.useState)(!1),o=(0,z.useRef)(null),s=!v()&&typeof IntersectionObserver==`function`,c=(0,z.useMemo)(()=>n===`entree`?Ut:[{i:e,texte:``},...Ht(e)],[n,e]),{index:l,etat:u,jouer:d}=X(n===`entree`?Wt:Gt,o),f=Y(o,`modes`);(0,z.useEffect)(()=>{f&&u===`avant`&&n===`entree`&&(t(Vt),d())},[f,u,n,d]);let p={i:e,texte:G[e]?.example??``},m=s?u===`avant`?Ut[0]??p:u===`joue`?c[l]??p:p:p,g=G[m.i]??G[0],_=(g&&zt[g.key])??`demande`,y=Bt[_];return g?(0,B.jsxs)(`div`,{className:`modes-demo`,ref:o,children:[(0,B.jsx)(L,{label:`Modes de la zone de saisie`,value:_,onChange:e=>{let n=G.findIndex(t=>zt[t.key]===e);n<0||(a(!0),r(`geste`),t(n),s&&d())},options:G.map(e=>({value:zt[e.key]??`demande`,label:e.label})),className:`modes-choix`}),(0,B.jsxs)(`div`,{className:`tui-cadre modes-cadre`,"data-cadre":`tui`,children:[(0,B.jsxs)(`div`,{className:`tui-boite`,children:[(0,B.jsx)(`b`,{className:`tui-car`,"data-mode":_===`plan`?`demande`:_,children:g.char}),(0,B.jsxs)(`span`,{children:[m.texte,(0,B.jsx)(`span`,{className:`tui-curseur`})]})]}),(0,B.jsx)(`p`,{className:`tui-aide`,"data-mode":y.mode,children:y.texte})]}),(0,B.jsx)(`div`,{className:`modes-textes`,children:G.map((e,t)=>(0,B.jsx)(`p`,{className:`modes-texte`,"data-etat":t===m.i?`montre`:void 0,children:h(e.text)},e.key))}),(0,B.jsx)(`p`,{className:`sr`,"aria-live":`polite`,children:i?g.label:``})]}):null}var qt=[[[`Entrée`],`envoyer`],[[`Ctrl`,`J`],`nouvelle ligne`],[[`↑`,`↓`],`historique de tes messages`],[[`Shift`,`Tab`],`mode plan`],[[`Esc`],`interrompre la réponse ou la commande`],[[`Esc`,`Esc`],`revenir à un message précédent`],[[`Ctrl`,`O`],`détail du travail des agents`],[[`Ctrl`,`C`],`copier la sélection, sinon interrompre, deux fois pour quitter`]],Jt=[[`PROMETHEE.md · /init · /memoire`,`Une mémoire qu’il relit à chaque message`,`L’équivalent de CLAUDE.md pour Claude Code. Il y a une mémoire globale et une par dossier. /init explore le dossier courant et écrit sa mémoire, que tu valides avant l’écriture.`],[`/agents · @agent-nom`,`Des agents qui travaillent à part`,`Deux sont intégrés. explorateur fouille les fichiers en lecture seule, analyste-logs repère la force brute, les scans et les connexions suspectes, et rend un rapport chiffré. Pour en créer un, tu le décris et Prométhée écrit sa définition.`],[`/commandes · $ARGUMENTS`,`Tes propres commandes`,`Un fichier nom.md devient la commande /nom, et $ARGUMENTS y est remplacé par ce que tu tapes après. /rust-cours explique une notion à partir du livre Rust en français. /rust-erreur lance rustc --explain et cherche dans le même livre.`],[`/code`,`Une IA de code qui vérifie avant de conclure`,`Pour écrire, corriger ou expliquer du code, qwen3.5:9b prend la main le temps d’une réponse. Il écrit le code dans un fichier, le compile et le lance. Un succès annoncé après un échec lui est renvoyé, puis signalé.`],[`/reprendre · /compact · Esc Esc`,`Des conversations qu’on reprend`,`Elles sont enregistrées dans Documents\\Promethee\\sessions, et la console web les affiche en lecture seule. prmt -c reprend la dernière. /compact résume la conversation, automatiquement à 80 % du contexte.`]];function Yt(){let e=q(`fonctions`),t=q(`commandes`);return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(V,{id:e.id,letter:e.lettre,name:e.nom,word:e.mot,title:`Dans la TUI, le premier caractère choisit le mode`,children:(0,B.jsxs)(`div`,{className:`modes-section`,children:[(0,B.jsx)(Kt,{}),(0,B.jsxs)(`div`,{className:`modes-raccourcis`,children:[(0,B.jsx)(`h3`,{className:`t-titre-3 modes-raccourcis-titre`,children:`Raccourcis`}),(0,B.jsx)(E,{shown:2,label:`raccourcis`,className:`modes-raccourcis-liste`,children:qt.map(([e,t])=>(0,B.jsx)(`li`,{className:`modes-raccourci`,children:(0,B.jsxs)(`span`,{className:`modes-raccourci-ligne`,children:[(0,B.jsx)(`span`,{className:`modes-touches`,children:e.map((e,t)=>(0,B.jsx)(P,{children:e},t))}),(0,B.jsx)(`span`,{children:t})]})},t))})]})]})}),(0,B.jsxs)(V,{id:t.id,letter:t.lettre,name:t.nom,word:t.mot,title:`Toutes les commandes de la TUI`,lead:h(`Dans le terminal, taper / affiche la liste. Ici aussi : filtre-la au clavier, par nom ou par alias anglais.`),children:[(0,B.jsx)(E,{shown:1,label:`outils`,className:`commandes-outils`,children:Jt.map(([e,t,n])=>(0,B.jsxs)(`li`,{className:`commandes-outil`,children:[(0,B.jsx)(`h3`,{className:`t-titre-3 commandes-outil-titre`,children:t}),(0,B.jsx)(`p`,{className:`t-donnee commandes-outil-cles`,children:e}),(0,B.jsx)(`p`,{className:`commandes-outil-texte`,children:h(n)})]},t))}),(0,B.jsx)(Rt,{})]})]})}var Xt=`Non, et dire à Prométhée quoi faire autrement (Esc)`,Zt={safe:{cmd:`Get-ChildItem .\\logs -Filter *.log`,why:`Liste les fichiers .log du dossier logs.`,prefix:`get-childitem`,out:[` Répertoire : C:\\Users\\toi\\Desktop\\logs`,``,`Mode LastWriteTime Length Name`,`---- ------------- ------ ----`,`-a---- 12/11/2026 09:14 48213 auth.log`,`-a---- 11/11/2026 22:47 9120 ancien.log`]},write:{cmd:`Set-Content .\\notes.txt "scan du 12/11"`,why:`Écrit la note dans notes.txt.`,prefix:``,out:[]},refused:{cmd:`Remove-Item .\\logs\\ancien.log`,why:`Supprime l’ancien journal.`,prefix:``,out:[]}},Qt=`Remove-Item est une commande destructrice (supprime des fichiers ou leur contenu), refusée par défaut.`,$t=`/permissions autoriser remove-item`,en=[{value:`safe`,label:`Lit`},{value:`write`,label:`Écrit`},{value:`refused`,label:`Supprime`}],tn=[480,0],nn=[240,720,0],rn=[240,0],an=[720,0];function on({onKind:e}){let[t,n]=(0,z.useState)(`safe`),[i,a]=(0,z.useState)(0),[o,s]=(0,z.useState)(null),[c,l]=(0,z.useState)(!1),[u,d]=(0,z.useState)(!1),[f,p]=(0,z.useState)(!1),m=(0,z.useRef)(null),g=(0,z.useRef)(null),_=(0,z.useRef)(null),y=(0,z.useRef)(null),b=(0,z.useId)(),x=!v()&&typeof IntersectionObserver==`function`,S=Zt[t],C=t===`write`,w=t===`refused`,T=C?[[`yes`,`Oui`],[`no`,Xt]]:[[`yes`,`Oui`],[`always`,`Oui, et ne plus demander pour « ${S.prefix} » pendant cette session`],[`no`,Xt]],E=X(tn,m),D=Y(m,`validation`),{jouer:O,etat:k}=E;(0,z.useEffect)(()=>{D&&!u&&k===`avant`&&O()},[D,u,k,O]);let A=X(c?an:o===`no`?rn:nn,m),j=x&&A.etat===`joue`,M=w?`refusee`:o===null?x&&!u&&(k===`avant`||k===`joue`&&E.index===0)?`controle`:`attente`:c?j&&A.index===0?`execution`:`sortie`:o===`no`?j&&A.index===0?`appui`:`refusee`:j?[`appui`,`execution`,`sortie`][A.index]??`sortie`:`sortie`;(0,z.useEffect)(()=>{let e=y.current===`recommencer`?g.current:y.current===`invite`?_.current:null;e&&(y.current=null,e.focus())},[o]);let N=()=>{d(!0)},F=(r=t)=>{N(),n(r),a(0),s(null),l(!1),p(r===`refused`),e?.(r)},I=(e,t)=>{o||(N(),y.current=t?`recommencer`:null,a(Math.max(0,T.findIndex(([t])=>t===e))),s(e),x&&A.jouer())},ee=()=>{M===`sortie`&&(N(),l(!0),x&&A.jouer())},te=e=>{o||(e.key===`ArrowDown`||e.key===`ArrowUp`?(e.preventDefault(),N(),a(t=>(t+(e.key===`ArrowDown`?1:T.length-1))%T.length)):e.key===`Enter`?(e.preventDefault(),I(T[i]?.[0]??`no`,!0)):e.key===`Escape`?(e.preventDefault(),I(`no`,!0)):/^[1-9]$/.test(e.key)&&Number(e.key)<=T.length&&(e.preventDefault(),I(T[Number(e.key)-1]?.[0]??`no`,!0)))},ne={id:t,label:`PowerShell`,cmd:S.cmd,lignes:null,diff:null,...M===`refusee`&&w?{etat:`refus`,texte:Qt,conseil:$t}:M===`controle`?{etat:`attente`,texte:`Contrôle de la politique…`}:M===`attente`||M===`appui`?{etat:`attente`,texte:`En attente de ta validation…`}:M===`refusee`?{etat:`attente`,texte:`Refusée`,ton:`alerte`}:M===`execution`?{etat:`execution`,texte:`Exécution…${o===`always`?` (autorisée pour la session)`:``}`}:S.out.length>0?{etat:`ok`,texte:``,lignes:S.out}:{etat:`ok`,texte:`(aucune sortie)`,ton:`dim`}},re=M===`attente`||M===`appui`,R=M===`controle`,ie=o!==null&&!w;return(0,B.jsxs)(`div`,{className:`validation-demo`,children:[(0,B.jsx)(L,{label:`Ce que fait la commande`,value:t,onChange:e=>F(e),options:en,className:`validation-types`}),(0,B.jsxs)(`div`,{className:`tui-cadre validation-cadre`,"data-cadre":`tui`,ref:m,children:[(0,B.jsx)(He,{appel:ne,frais:f&&w,onFraisFini:()=>p(!1),live:u}),w?(0,B.jsx)(`p`,{className:`validation-tui-note`,"data-ton":`dim`,children:`Elle ne t’est pas proposée et rien ne s’exécute. Prométhée reçoit la raison du refus, et te dit quoi taper pour l’autoriser.`}):re||R?(0,B.jsxs)(`div`,{ref:R?void 0:_,className:`tui-demande validation-invite`,"data-variante":C?`danger`:void 0,"data-reserve":R?``:void 0,"aria-hidden":R?!0:void 0,inert:R,tabIndex:R?void 0:0,role:R?void 0:`listbox`,"aria-label":R?void 0:`Veux-tu exécuter cette commande ?`,"aria-activedescendant":R?void 0:`${b}-option-${i}`,onKeyDown:R?void 0:te,children:[(0,B.jsx)(`b`,{"data-ton":C?`danger`:`accent`,children:`Exécuter une commande`}),`
|
|
19
|
+
|
|
20
|
+
`,(0,B.jsx)(`b`,{children:S.cmd}),`
|
|
21
|
+
`,(0,B.jsx)(`span`,{"data-ton":`dim`,children:S.why}),`
|
|
22
|
+
|
|
23
|
+
`,(0,B.jsx)(`b`,{"data-ton":C?`alerte`:`ok`,children:C?`▲ sensible`:`● lecture`}),(0,B.jsx)(`span`,{"data-ton":`dim`,children:` · politique stricte`}),C?(0,B.jsx)(`span`,{"data-ton":`dim`,children:`
|
|
24
|
+
écrit\xA0: C:\\Users\\toi\\Desktop\\notes.txt`}):null,C?(0,B.jsxs)(B.Fragment,{children:[`
|
|
25
|
+
|
|
26
|
+
`,(0,B.jsxs)(`b`,{"data-ton":`danger`,children:[`⚠ Cette commande peut modifier ou supprimer des choses sur ta machine`,`\xA0`,`: lis-la bien.`]})]}):null,(0,B.jsx)(`p`,{className:`tui-demande-question`,children:(0,B.jsxs)(`b`,{children:[`Veux-tu exécuter cette commande`,`\xA0`,`?`]})}),T.map(([e,t],n)=>(0,B.jsxs)(`div`,{id:R?void 0:`${b}-option-${n}`,role:R?void 0:`option`,"aria-selected":R?void 0:n===i,className:`tui-option validation-option`,"data-choisi":n===i?``:void 0,"data-appui":M===`appui`&&n===i?``:void 0,onClick:R?void 0:()=>I(e,!1),onMouseEnter:R?void 0:()=>{o||a(n)},children:[n===i?`❯`:` `,` `,n+1,`. `,t]},e))]}):o===`no`&&M===`refusee`?(0,B.jsx)(`p`,{className:`validation-tui-note`,"data-ton":`dim`,children:`Prométhée attend que tu lui dises quoi faire autrement.`}):o===`always`&&M===`sortie`?(0,B.jsxs)(`p`,{className:`validation-tui-note`,"data-ton":`dim`,children:[`Les prochaines commandes `,S.prefix,` passeront sans question jusqu’à la fin de la session.`]}):null]}),w?(0,B.jsx)(`p`,{className:`validation-aide`,children:h(`Rien à valider ici : choisis « Lit » ou « Écrit » au-dessus pour essayer les réponses.`)}):ie?(0,B.jsxs)(`div`,{className:`validation-actions`,children:[(0,B.jsx)(r,{ref:g,variant:`contour`,onClick:()=>{y.current=`invite`,F()},children:`Recommencer`}),o===`always`&&(M===`sortie`||c)?(0,B.jsx)(r,{variant:`contour`,"aria-disabled":M!==`sortie`||void 0,onClick:ee,children:`Rejouer la commande`}):null]}):(0,B.jsxs)(`p`,{className:`validation-aide`,children:[h(`Essaie : choisis une réponse dans l’encadré. Au clavier : `),(0,B.jsx)(P,{children:`1`}),`, `,(0,B.jsx)(P,{children:`2`}),T.length===3?(0,B.jsxs)(B.Fragment,{children:[`, `,(0,B.jsx)(P,{children:`3`})]}):null,`, ou `,(0,B.jsx)(P,{children:`↑`}),` `,(0,B.jsx)(P,{children:`↓`}),` puis `,(0,B.jsx)(P,{children:`Entrée`}),`.`]})]})}var sn=[{titre:`Commande en lecture`,texte:`Prométhée a pour consigne de n’en proposer aucune autre de lui-même. Affichée avec une phrase d’explication et son verdict. « Ne plus demander » vaut pour son nom, jusqu’à la fin de la session.`,joue:`safe`},{titre:`Commande sensible`,texte:`Elle écrit, contacte le réseau ou vient de ta liste personnelle : redemandée à chaque fois, avec ce qu’elle écrit et qui elle contacte.`,joue:`write`},{titre:`Commande qui modifie ou supprime`,texte:`Encadré rouge et avertissement. Une commande destructrice est refusée tant que tu ne l’as pas débloquée avec /permissions autoriser.`,joue:`refused`},{titre:`Cible hors périmètre`,texte:`Un test de ports ou un scan n’est permis que sur cette machine et sur les cibles déclarées avec /perimetre, après attestation.`},{titre:`Création ou modification de fichier`,texte:`Diff en couleur, puis Oui, Oui pour toutes les modifications de la session, ou Non.`},{titre:`Fichier hors de ton dossier utilisateur`,texte:`Signalé en rouge, validation demandée à chaque fois.`},{titre:`Lecture et recherche de fichiers`,texte:`Sans question : c’est de la lecture seule.`},{titre:`Fichier relu ou exécuté plus tard`,texte:`Mémoire PROMETHEE.md, agents, profil PowerShell, dossiers cachés : montrés à chaque fois, même si tu as autorisé toutes les modifications de la session.`},{titre:`! commande`,texte:`Tu l’as tapée toi-même : une lecture part directement, une commande sensible demande une confirmation, un refus de la politique vaut aussi pour toi.`}];function cn(){let e=q(`validation`),[t,n]=(0,z.useState)(`safe`);return(0,B.jsx)(V,{id:e.id,letter:e.lettre,name:e.nom,word:e.mot,title:`Tu valides chaque commande`,lead:h(`La politique refuse ce qui sort de la liste blanche ou du périmètre, sans te le proposer. Tu tranches ensuite sur la commande exacte.`),children:(0,B.jsxs)(`div`,{className:`validation-grille`,children:[(0,B.jsx)(on,{onKind:n}),(0,B.jsx)(E,{shown:3,label:`règles`,className:`validation-regles`,children:sn.map(e=>(0,B.jsxs)(`li`,{className:`validation-regle`,"aria-current":e.joue===t?`true`:void 0,children:[(0,B.jsx)(`strong`,{className:`validation-regle-titre`,children:e.titre}),(0,B.jsx)(`span`,{children:h(e.texte)})]},e.titre))})]})})}function ln(){let[e,t]=(0,z.useState)(null);return(0,z.useEffect)(()=>{if(typeof IntersectionObserver!=`function`)return;let e=new Set,n=new IntersectionObserver(n=>{for(let t of n)t.isIntersecting?e.add(t.target.id):e.delete(t.target.id);t(K.find(t=>e.has(t.id))?.id??null)},{rootMargin:`-33% 0px -66% 0px`});for(let e of K){let t=document.getElementById(e.id);t&&n.observe(t)}return()=>n.disconnect()},[]),e}function un(){let{phase:e}=s(),[n,r]=(0,z.useState)(null);return(0,z.useEffect)(()=>{if(e!==`online`){r(null);return}let n=!0;return t(`GET`,`/api/status`).then(e=>{n&&r(e)}).catch(()=>void 0),()=>{n=!1}},[e]),n}function dn({anchor:e}){(0,z.useEffect)(()=>{if(!e||e===`accueil`)return;let t=requestAnimationFrame(()=>document.getElementById(e)?.scrollIntoView());return()=>cancelAnimationFrame(t)},[e]);let t=ln(),n=un();return(0,B.jsxs)(`div`,{className:`presentation`,id:`accueil`,onClickCapture:C,children:[(0,B.jsx)(`a`,{className:`presentation-evitement`,href:`#contenu`,children:`Aller au contenu`}),(0,B.jsx)(ve,{courante:t}),(0,B.jsxs)(`main`,{id:`contenu`,children:[(0,B.jsx)(Me,{statut:n}),(0,B.jsx)(It,{}),(0,B.jsx)(cn,{}),(0,B.jsx)(it,{}),(0,B.jsx)(gt,{}),(0,B.jsx)(Mt,{}),(0,B.jsx)(xe,{}),(0,B.jsx)(Yt,{}),(0,B.jsx)(Ne,{statut:n})]}),(0,B.jsx)(Nt,{})]})}export{dn as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as e,Ot as t,ct as n,pt as r}from"./index-COSiM-R9.js";var i=t(),a=e();function o({children:e,as:t=`span`,className:r}){return(0,a.jsx)(t,{className:n(`t-etiquette rubrique`,r),children:e})}function s({letter:e,name:t}){return(0,a.jsxs)(`span`,{className:`ordinal`,children:[(0,a.jsx)(`span`,{"aria-hidden":`true`,children:e}),(0,a.jsx)(`span`,{className:`sr`,children:t})]})}function c({title:e,children:t,actions:n}){return(0,a.jsxs)(`header`,{className:`tete-page`,children:[(0,a.jsxs)(`div`,{className:`tete-page-titres`,children:[(0,a.jsx)(`h1`,{className:`t-titre-2`,tabIndex:-1,children:e}),t?(0,a.jsx)(`p`,{className:`tete-page-phrase`,children:r(t)}):null]}),n?(0,a.jsx)(`div`,{className:`tete-page-actions`,children:n}):null]})}function l({shown:e,label:t,children:n,as:r=`ul`,className:o,partout:s=!1}){let[c,l]=(0,i.useState)(!1),u=(0,i.useId)(),d=i.Children.toArray(n),f=Math.max(0,d.length-e);return(0,a.jsxs)(`div`,{className:`repli`,"data-ouvert":c?``:void 0,"data-partout":s?``:void 0,children:[(0,a.jsx)(r,{id:u,className:o,children:d.map((t,n)=>n>=e&&(0,i.isValidElement)(t)?(0,i.cloneElement)(t,{"data-replie":``}):t)}),f>0?(0,a.jsx)(`button`,{type:`button`,className:`repli-bouton`,"aria-expanded":c,"aria-controls":u,onClick:()=>l(e=>!e),children:c?`Replier la liste`:`Tout afficher (${d.length} ${t})`}):null]})}function u({head:e,actions:t,children:r,className:i,labelledBy:o}){return(0,a.jsxs)(`section`,{className:n(`bandeau`,i),"aria-labelledby":o,children:[e||t?(0,a.jsxs)(`div`,{className:`bandeau-tete`,children:[e,t?(0,a.jsx)(`div`,{className:`bandeau-actions`,children:t}):null]}):null,r]})}function d({columns:e=4,narrowColumns:t=1,label:r,children:i,className:o}){return(0,a.jsx)(`div`,{className:n(`registre`,o),role:r?`group`:void 0,"aria-label":r,children:(0,a.jsx)(`div`,{className:`registre-grille`,"data-colonnes":e,"data-etroit":t===2?`2`:void 0,style:{"--registre-colonnes":e},children:i})})}function f({label:e,as:t=`div`,children:r,className:i}){return(0,a.jsxs)(t,{className:n(`cellule`,i),children:[e?(0,a.jsx)(o,{className:`cellule-rubrique`,children:e}):null,r]})}function p({layout:e=`ligne`,children:t,className:r}){return(0,a.jsx)(`dl`,{className:n(`liste-faits`,r),"data-disposition":e,children:t})}function m({label:e,literal:t=!1,children:n}){return(0,a.jsxs)(`div`,{className:`fait`,children:[(0,a.jsx)(`dt`,{children:e}),(0,a.jsx)(`dd`,{className:t?`t-donnee`:void 0,children:n})]})}export{d as a,c,m as i,l,f as n,o,p as r,s,u as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./arrow-right-Cx3pAEhl.js";import{$ as t,A as n,D as r,I as i,L as a,O as o,Ot as s,P as c,R as l,a as u,at as d,ft as f,ht as p,lt as m,n as h,ot as g,w as _}from"./index-COSiM-R9.js";import{n as v}from"./charts-BcijSJ4J.js";import{c as y,l as b,s as x,t as S}from"./Register-DA_Aq5f8.js";import{t as C}from"./Tabs-CfhbELZk.js";import{_ as w,a as T,d as ee,f as te,g as ne,h as re,m as E,n as D,o as O,r as k,s as A,t as j,u as M}from"./auditViews-BMza2Sdz.js";var N=s(),P=t();function F(){let t=_(`/api/audits/findings`),s=_(`/api/audits/history`),F=_(`/api/audits/modules`),{status:I,refresh:L}=r(),R=o(),[z,B]=(0,N.useState)(`tous`),[V,H]=(0,N.useState)(null),[U,W]=(0,N.useState)(null),G={constats:(0,N.useId)(),couverture:(0,N.useId)(),historique:(0,N.useId)()},K=e=>F.data?.modules.find(t=>t.id===e)?.title??e,q=(0,N.useMemo)(()=>(t.data?.runs??[]).flatMap(e=>e.findings.map(t=>({finding:t,run:e}))),[t.data]),J=(0,N.useMemo)(()=>re(q.map(e=>e.finding)),[q]),Y=(0,N.useMemo)(()=>w(q,e=>e.finding.severity).filter(e=>z===`tous`||e.finding.severity===z),[q,z]),X=I?.audits??[],Z=X.filter(e=>e.last).length,Q=F.data?.modules.length??X.length,ie=M(J),$=s.data?.runs??[],ae=async e=>{try{H(await n(`GET`,`/api/audits/${e}`))}catch(e){R(`erreur`,`Passage illisible`,c(e))}},oe=[{value:`tous`,label:`Tous`,count:q.length},...[`critical`,`high`,`medium`,`low`,`info`].filter(e=>J[e]>0).map(e=>({value:e,label:d[e],count:J[e]}))];return(0,P.jsx)(`div`,{className:`vue`,children:(0,P.jsxs)(`div`,{className:`vue-contenu rapports-page`,children:[(0,P.jsx)(y,{title:`Rapports de vulnérabilités`,children:I?te(Z,Q,ie,`points`):null}),(0,P.jsxs)(`div`,{className:`rapports-grille`,children:[(0,P.jsxs)(S,{labelledBy:G.constats,className:`rapports-constats`,head:(0,P.jsxs)(`div`,{className:`audits-bande-titre`,children:[(0,P.jsx)(`h2`,{id:G.constats,className:`t-titre-3`,children:`Constats ouverts`}),(0,P.jsx)(`p`,{className:`phrase-note`,children:f(`Ils viennent du dernier passage réussi de chaque module sur chaque cible.`)})]}),children:[t.error?(0,P.jsx)(a,{message:t.error,onRetry:t.reload}):null,t.loading&&!t.data?(0,P.jsx)(l,{label:`Chargement des constats`}):q.length===0&&t.data?(0,P.jsx)(i,{action:{label:`Choisir un module`,href:h({page:`audits`}),icon:(0,P.jsx)(e,{"aria-hidden":`true`})},children:$.length===0?`Aucun audit n’a encore été lancé.`:`Aucun constat sur ${p(Z,`module lancé`,`modules lancés`)} sur ${Q}.`}):q.length>0?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(v,{counts:J}),(0,P.jsx)(C,{label:`Filtrer par gravité`,value:z,onChange:e=>B(e),options:oe,collapse:!0}),(0,P.jsx)(`div`,{className:`audit-constats`,children:Y.map(({finding:e,run:t})=>(0,P.jsx)(D,{finding:e,context:(0,P.jsxs)(P.Fragment,{children:[K(t.module),` sur `,(0,P.jsx)(j,{target:t.target,enPhrase:!0}),`, `,g(t.startedAt)]})},`${t.id}-${e.id}`))})]}):null]}),(0,P.jsx)(S,{labelledBy:G.couverture,className:`rapports-couverture`,head:(0,P.jsxs)(`h2`,{id:G.couverture,className:`t-titre-3`,children:[`Couverture `,(0,P.jsx)(`span`,{className:`audit-compte`,children:`${Z} sur ${Q}`})]}),children:(0,P.jsx)(b,{shown:0,label:`modules`,as:`ol`,className:`rapports-modules`,children:(F.data?.modules??[]).map(e=>{let t=X.find(t=>t.module===e.id)?.last??null;return(0,P.jsx)(`li`,{children:(0,P.jsxs)(`div`,{className:`rapports-module`,children:[(0,P.jsx)(`span`,{className:`rapports-module-ordinal`,children:(0,P.jsx)(x,{letter:e.letter,name:ne(e.letter)})}),(0,P.jsx)(`a`,{className:`rapports-module-lien`,href:h({page:`audit`,module:e.id}),children:e.title}),(0,P.jsx)(`span`,{className:`rapports-module-etat`,children:t?(0,P.jsx)(T,{run:t}):(0,P.jsx)(`span`,{className:`audit-second`,children:`Jamais lancé`})}),t?(0,P.jsx)(`span`,{className:`audit-second rapports-module-date`,children:g(t.startedAt)}):null]})},e.id)})})})]}),(0,P.jsxs)(S,{labelledBy:G.historique,className:`rapports-historique`,head:(0,P.jsxs)(`h2`,{id:G.historique,className:`t-titre-3`,children:[`Historique des audits `,(0,P.jsx)(`span`,{className:`audit-compte`,children:p($.length,`passage`,`passages`)})]}),children:[s.error?(0,P.jsx)(a,{message:s.error,onRetry:s.reload}):null,s.data&&$.length===0?(0,P.jsx)(i,{children:`Chaque passage reste ici avec ses résultats jusqu’à ce que tu le supprimes. Il s’exporte en Markdown.`}):$.length>0?(0,P.jsx)(k,{caption:`Historique des audits`,runs:$,titreDuModule:K,onVoir:e=>void ae(e.id),onSupprimer:W}):null]}),V?(0,P.jsx)(u,{title:`${K(V.module)} sur ${E(V.target)}`,litteraux:[E(V.target)],subtitle:m(V.startedAt),size:`xl`,onClose:()=>H(null),children:(0,P.jsx)(O,{run:V})}):null,U?(0,P.jsx)(A,{run:U,titre:K(U.module),apres:ee(U,$),onClose:()=>W(null),onSupprime:e=>{W(null),V?.id===e&&H(null),t.reload(),s.reload(),L()}}):null]})})}export{F as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer pages{.rapports-page{align-content:start;row-gap:var(--esp-5);padding-block-end:var(--esp-8);display:grid}.rapports-page :is(a[href],button,summary,input,select,[tabindex="0"]){scroll-margin-block:var(--esp-4)}.rapports-page :is(h2,h3){margin:0}.rapports-grille{align-items:start;gap:var(--esp-5) var(--esp-6);grid-template-columns:minmax(0,1fr);display:grid}@container page (width>=44rem){.rapports-grille{grid-template-columns:minmax(0,3fr) minmax(0,2fr)}.rapports-constats{grid-area:1/1}.rapports-couverture{grid-area:1/2}}.rapports-constats{align-content:start;gap:var(--esp-4);min-inline-size:0;display:grid}.rapports-modules{margin:0;padding:0;list-style:none}.rapports-module{grid-template-columns:var(--esp-5) minmax(0, 1fr) auto;align-items:center;column-gap:var(--esp-2);border-block-end:1px solid var(--trait);grid-template-areas:"ordinal lien date"".etat etat";padding-block-end:var(--esp-2);display:grid}.rapports-module-ordinal{grid-area:ordinal}.rapports-module-lien{min-block-size:var(--ligne-min);color:var(--texte);grid-area:lien;align-items:center;display:flex}.rapports-module-etat{grid-area:etat}.rapports-module-date{grid-area:date}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer pages{.savoir-page{align-content:start;row-gap:var(--esp-5);padding-block-end:var(--esp-8);display:grid}.savoir-page :where(a[href],button,summary,input,select,[tabindex="0"]){scroll-margin-block:var(--esp-4)}.savoir-page :is(h2,h3){margin:0}.savoir-explication{justify-items:start;gap:var(--esp-2);max-inline-size:72ch;display:grid}.savoir-lien{align-items:center;gap:var(--esp-2);min-block-size:var(--ctl-m);color:var(--or);font:var(--t-interface);font-weight:var(--graisse-moyenne);text-underline-offset:.2em;text-decoration:underline;display:inline-flex}.savoir-lien:hover{color:var(--texte)}.savoir-lien>svg{inline-size:var(--ico-s);block-size:var(--ico-s);stroke-width:var(--ico-trait);flex:none}.savoir-tete{gap:var(--esp-1);display:grid}.savoir-taille{font-variant-numeric:tabular-nums}.savoir-recherche{max-inline-size:28rem}.savoir-liste{border-block-start:1px solid var(--trait);margin:0;padding:0;list-style:none}.savoir-ligne{justify-content:space-between;align-items:center;gap:var(--esp-1) var(--esp-3);min-block-size:var(--ligne-min);padding-block:var(--esp-2);border-block-end:1px solid var(--trait);flex-wrap:wrap;display:flex}.savoir-ligne-texte{justify-items:start;gap:var(--esp-1);flex:20rem;min-inline-size:0;display:grid}.savoir-titre{color:var(--or);font:var(--t-interface);font-weight:var(--graisse-moyenne);text-align:start;text-underline-offset:.2em;overflow-wrap:anywhere;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.savoir-titre:hover{color:var(--texte)}.savoir-titre:focus-visible{outline:2px solid var(--anneau);outline-offset:2px}.savoir-meta{column-gap:var(--esp-2);font:var(--t-note);color:var(--texte-2);overflow-wrap:anywhere;flex-wrap:wrap;margin:0;display:flex}.savoir-meta>*+:before{content:"·";margin-inline-end:var(--esp-2)}.savoir-requete{font:var(--t-note);color:var(--texte-2);overflow-wrap:anywhere;margin:0}.savoir-requete-texte{color:var(--texte);overflow-wrap:anywhere}.savoir-actions{gap:var(--esp-2);flex-wrap:wrap;flex:none;display:flex}.savoir-objet{color:var(--texte);font-weight:var(--graisse-moyenne);overflow-wrap:anywhere}.savoir-texte{gap:var(--esp-3);max-inline-size:72ch;display:grid}.savoir-texte>p{color:var(--texte);white-space:pre-line;overflow-wrap:anywhere;margin:0}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as e,A as t,Et as n,G as r,I as i,K as a,L as o,O as ee,Ot as s,P as c,R as l,a as u,ft as d,ht as f,i as p,mt as m,n as te,st as ne,w as h}from"./index-COSiM-R9.js";import{l as re}from"./Shell-CQRlx9-V.js";import{t as g}from"./trash-DLpHM-s8.js";import{a as _,n as v}from"./Field-C7c2mCbb.js";import{c as y,t as b}from"./Register-DA_Aq5f8.js";import{t as x}from"./web-6j1-aY67.js";var S={name:`external-link`,size:24,node:[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]};S.node;var C=n(S),w=s(),T=e(),E=200,D=250,O=`Les pages que Prométhée a lues en entier après une recherche web. Elles restent sur ce PC, dans data/savoir.db.`,k=d(`Le modèle lui-même ne change pas : avant de répondre, il relit les passages de ces pages qui collent à ta question et les cite comme des sources. Une page oubliée ici n’est plus relue.`);function A(e){let t=new Date(e);return Number.isNaN(t.getTime())?null:t.toLocaleDateString(`fr-FR`,{day:`numeric`,month:`short`,year:`numeric`})}var j=e=>e<=0?`jamais relue`:e===1?`relue une fois`:`relue ${m(e)} fois`,M=e=>`/api/savoir?${new URLSearchParams(e?{q:e,limit:`200`}:{limit:`200`})}`;function N({page:e,onLire:t,onOublier:n}){let i=A(e.learnedAt);return(0,T.jsxs)(`li`,{className:`savoir-ligne`,children:[(0,T.jsxs)(`div`,{className:`savoir-ligne-texte`,children:[(0,T.jsx)(`button`,{type:`button`,className:`savoir-titre`,"aria-haspopup":`dialog`,onClick:t,children:e.title||e.host}),(0,T.jsxs)(`p`,{className:`savoir-meta`,children:[(0,T.jsx)(`span`,{className:`t-donnee`,children:e.host}),i?(0,T.jsx)(`span`,{children:`lue le ${i}`}):null,(0,T.jsx)(`span`,{children:j(e.uses)})]}),e.query?(0,T.jsxs)(`p`,{className:`savoir-requete`,children:[`Recherche`,`\xA0`,`: «`,`\xA0`,(0,T.jsx)(`span`,{className:`savoir-requete-texte`,children:e.query}),`\xA0`,`»`]}):null]}),(0,T.jsxs)(`div`,{className:`savoir-actions`,children:[x(e.url)?(0,T.jsx)(a,{variant:`nu`,size:`s`,icon:(0,T.jsx)(C,{"aria-hidden":`true`}),href:e.url,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Ouvrir ${e.title||e.host}`,children:`Ouvrir`}):null,(0,T.jsx)(r,{variant:`nu`,size:`s`,icon:(0,T.jsx)(g,{"aria-hidden":`true`}),"aria-label":`Oublier ${e.title||e.host}`,onClick:n,children:`Oublier`})]})]})}function P({lecture:e,onReessayer:t}){if(e.etat===`attente`)return(0,T.jsx)(l,{label:`Lecture du texte retenu`});if(e.etat===`echec`)return(0,T.jsx)(o,{message:e.message,onRetry:t});let n=e.text.split(/\n{2,}/).filter(e=>e.trim()!==``);return n.length===0?(0,T.jsx)(`p`,{className:`phrase-note`,children:`Aucun texte retenu pour cette page.`}):(0,T.jsx)(`div`,{className:`savoir-texte`,children:n.map((e,t)=>(0,T.jsx)(`p`,{children:e},t))})}function F(){let e=ee(),n=h(`/api/settings`),[s,S]=(0,w.useState)(``),[E,j]=(0,w.useState)(``),F=h(M(E)),[I,L]=(0,w.useState)(null),[R,z]=(0,w.useState)(null),[B,V]=(0,w.useState)(!1),[H,U]=(0,w.useState)(!1),W=(0,w.useRef)(null),G=(0,w.useRef)(null),K=(0,w.useRef)(!1),q=(0,w.useId)();(0,w.useEffect)(()=>{let e=setTimeout(()=>j(s.trim()),D);return()=>clearTimeout(e)},[s]),(0,w.useEffect)(()=>{K.current&&!F.loading&&(K.current=!1,(G.current??W.current?.querySelector(`h1`))?.focus())},[F.data,F.loading]);let J=(0,w.useCallback)(async e=>{L({page:e,etat:`attente`});try{let{text:n}=await t(`GET`,`/api/savoir/${encodeURIComponent(e.id)}`);L(t=>t?.page.id===e.id?{page:e,etat:`pret`,text:n}:t)}catch(t){L(n=>n?.page.id===e.id?{page:e,etat:`echec`,message:c(t)}:n)}},[]),Y=async n=>{U(!0);try{await t(`DELETE`,`/api/savoir/${encodeURIComponent(n.id)}`),e(`ok`,`Page oubliée`,n.title||n.host),I?.page.id===n.id&&L(null),K.current=!0,F.reload()}catch(t){e(`erreur`,`Oubli impossible`,c(t))}finally{U(!1),z(null)}},ie=async()=>{U(!0);try{let{removed:n}=await t(`DELETE`,`/api/savoir`);e(`ok`,`Savoir effacé`,f(n,`page oubliée`,`pages oubliées`)),L(null),S(``),j(``),K.current=!0,F.reload()}catch(t){e(`erreur`,`Oubli impossible`,c(t))}finally{U(!1),V(!1)}},X=F.data,Z=X?.total??0,Q=X?.pages??[],$=n.data?.search,ae=te({page:`settings`,partie:`recherche`});return(0,T.jsx)(`div`,{className:`vue`,ref:W,children:(0,T.jsxs)(`div`,{className:`vue-contenu savoir-page`,children:[(0,T.jsx)(y,{title:`Savoir`,actions:Z>0?(0,T.jsx)(r,{icon:(0,T.jsx)(g,{"aria-hidden":`true`}),onClick:()=>V(!0),children:`Tout oublier`}):null,children:O}),(0,T.jsxs)(`div`,{className:`savoir-explication`,children:[(0,T.jsx)(`p`,{className:`phrase-note`,children:k}),$&&!$.learn?(0,T.jsx)(`p`,{className:`phrase-note`,children:d(`L’apprentissage est coupé : aucune page n’est plus retenue, et ce savoir n’est plus relu. Ce qui est ici reste jusqu’à ce que tu l’oublies.`)}):$&&!$.enabled?(0,T.jsx)(`p`,{className:`phrase-note`,children:d(`La recherche web est coupée : aucune nouvelle page n’arrive.`)}):null,(0,T.jsxs)(`a`,{className:`savoir-lien`,href:ae,children:[(0,T.jsx)(re,{"aria-hidden":`true`}),`Régler l’apprentissage`]})]}),F.error?(0,T.jsx)(o,{message:F.error,onRetry:F.reload}):null,!X&&F.loading?(0,T.jsx)(l,{label:`Lecture du savoir`}):null,X&&Z===0?(0,T.jsx)(i,{children:`Rien de retenu pour l’instant. Les pages lues après une recherche web arrivent ici.`}):null,X&&Z>0?(0,T.jsxs)(b,{labelledBy:q,className:`savoir-bande`,head:(0,T.jsxs)(`div`,{className:`savoir-tete`,children:[(0,T.jsx)(`h2`,{id:q,className:`t-titre-3`,children:`Pages retenues`}),(0,T.jsx)(`p`,{className:`phrase-note savoir-taille`,children:d(`${f(Z,`page`,`pages`)}, ${m(X.chars)} caractères de texte, ${ne(X.bytes)} sur le disque`)})]}),children:[(0,T.jsx)(v,{label:`Chercher dans le savoir`,hideLabel:!0,className:`savoir-recherche`,children:(0,T.jsx)(_,{ref:G,value:s,onChange:e=>S(e.target.value),placeholder:`Titre, site, mot du texte…`})}),E?(0,T.jsxs)(`p`,{className:`phrase-note`,role:`status`,children:[Q.length===0?`Aucune page`:f(Q.length,`page`,`pages`),` sur `,m(Z)]}):null,E&&Q.length===0?(0,T.jsxs)(i,{action:{label:`Effacer la recherche`,onClick:()=>{S(``),G.current?.focus()}},children:[`Aucune page retenue ne contient «`,`\xA0`,(0,T.jsx)(`span`,{className:`savoir-requete-texte`,children:E}),`\xA0`,`».`]}):(0,T.jsx)(`ul`,{className:`savoir-liste`,"aria-labelledby":q,children:Q.map(e=>(0,T.jsx)(N,{page:e,onLire:()=>void J(e),onOublier:()=>z(e)},e.id))}),Q.length>=200?(0,T.jsx)(`p`,{className:`phrase-note`,children:d(`Les ${m(200)} plus récentes sont montrées. La recherche trouve les autres.`)}):null]}):null,I?(0,T.jsx)(u,{title:I.page.title||I.page.host,litteraux:[I.page.title],subtitle:[I.page.host,A(I.page.learnedAt)?`lue le ${A(I.page.learnedAt)}`:null,I.page.chars>0?d(`${m(I.page.chars)} caractères`):null].filter(Boolean).join(` · `),size:`l`,onClose:()=>L(null),footer:x(I.page.url)?(0,T.jsx)(a,{icon:(0,T.jsx)(C,{"aria-hidden":`true`}),href:I.page.url,target:`_blank`,rel:`noopener noreferrer`,children:`Ouvrir la page d’origine`}):void 0,children:(0,T.jsx)(P,{lecture:I,onReessayer:()=>void J(I.page)})}):null,R?(0,T.jsxs)(p,{title:`Oublier cette page ?`,tone:`danger`,confirmLabel:`Oublier`,confirmIcon:(0,T.jsx)(g,{"aria-hidden":`true`}),busy:H,onCancel:()=>z(null),onConfirm:()=>void Y(R),children:[(0,T.jsx)(`p`,{className:`savoir-objet`,children:R.title||R.host}),(0,T.jsx)(`p`,{children:d(`Son texte sort du savoir : Prométhée ne la relira plus. Une prochaine recherche pourra la lire à nouveau.`)})]}):null,B?(0,T.jsxs)(p,{title:`Tout oublier ?`,tone:`danger`,confirmLabel:`Tout oublier`,confirmIcon:(0,T.jsx)(g,{"aria-hidden":`true`}),busy:H,onCancel:()=>V(!1),onConfirm:()=>void ie(),children:[(0,T.jsx)(`p`,{className:`savoir-objet`,children:Z>1?`Les ${m(Z)} pages retenues`:`La page retenue`}),(0,T.jsx)(`p`,{children:d(`${Z>1?`Leur texte sort`:`Son texte sort`} du savoir : Prométhée ne relira plus rien avant de répondre, jusqu’à la prochaine recherche web.`)})]}):null]})})}export{E as LIMITE,M as cheminDuSavoir,F as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer pages{.telephone-appairage{align-items:flex-start;gap:var(--esp-5);flex-wrap:wrap;display:flex}.telephone-qr{aspect-ratio:1;forced-color-adjust:none;flex:none;block-size:auto;inline-size:15rem;max-inline-size:100%;display:block}.telephone-qr-fond{fill:var(--texte)}.telephone-qr-modules{fill:var(--fond)}.telephone-faits{justify-items:start;gap:var(--esp-3);flex:18rem;min-inline-size:0;display:grid}.telephone-faits>:first-child{justify-self:stretch}.telephone-adresse,.telephone-empreinte{overflow-wrap:anywhere;display:block}.telephone-code{font:var(--t-commande);color:var(--texte);display:block}.telephone-echeance{color:var(--texte-2);display:block}.telephone-appareils{gap:var(--esp-2);display:grid}.telephone-appareils-titre{color:var(--texte);margin:0}.telephone-liste{border-block-start:1px solid var(--trait);margin:0;padding:0;list-style:none}.telephone-appareil{justify-content:space-between;align-items:center;gap:var(--esp-3);min-block-size:var(--ligne-min);padding-block:var(--esp-1);border-block-end:1px solid var(--trait);display:flex}.telephone-appareil-texte{min-inline-size:0;display:grid}.telephone-appareil-nom{color:var(--texte);overflow-wrap:anywhere}.telephone-appareil-dates{font:var(--t-note);color:var(--texte-2)}.reglages-page{--blanche-niveau:8rem;--blanche-action:9.5rem;align-content:start;row-gap:var(--esp-5);padding-block-end:var(--esp-8);display:grid}.reglages-page :where(a[href],button,summary,input,select,[tabindex="0"]){scroll-margin-block:var(--esp-4)}.reglages-titre{margin:0;scroll-margin-block-start:var(--esp-4)}.reglages-ancres{gap:var(--esp-1) var(--esp-2);flex-wrap:wrap;margin-block-start:calc(var(--esp-4) * -1);display:flex}.reglages-colonnes{align-items:start;column-gap:var(--esp-6);grid-template-columns:minmax(0,1fr);display:grid}.reglages-partie{align-content:start;gap:var(--esp-4);min-inline-size:0;display:grid}.reglages-tete{gap:var(--esp-1);display:grid}.reglages-vers-savoir{justify-self:start}.reglages-cyber{gap:var(--esp-2);display:grid}.reglages-cyber[data-actif]{padding:var(--esp-3);border:1px solid color-mix(in srgb, var(--feu) 45%, transparent);border-radius:var(--r-controle);background-color:color-mix(in srgb, var(--feu) 7%, transparent)}.reglages-cyber-cadre{color:var(--texte-2);font:var(--t-note);margin:0}.reglages-rangee,.reglages-ajout{align-items:flex-start;gap:var(--esp-3);flex-wrap:wrap;display:flex}:is(.reglages-rangee,.reglages-ajout)>.reglages-champ{flex-basis:100%}.reglages-champ{flex:auto;min-inline-size:0}.reglages-action{font:var(--t-interface);flex:none}.reglages-ajout-note{flex:1 0 100%;margin:0}.reglages-dossiers{border-block-start:1px solid var(--trait);margin:0;padding:0;list-style:none}.reglages-dossier{justify-content:space-between;align-items:center;gap:var(--esp-3);min-block-size:var(--ligne-min);padding-block:var(--esp-1);border-block-end:1px solid var(--trait);display:flex}.reglages-dossier>span{overflow-wrap:anywhere;min-inline-size:0}.reglages-objet{overflow-wrap:anywhere}.reglages-du-pc{display:contents}.blanche-filtres{gap:var(--esp-2);padding-block:var(--esp-2);border-block-end:1px solid var(--trait-2);background:var(--fond);display:grid}.blanche-filtres[data-collante]{z-index:var(--z-collant);position:sticky;inset-block-start:var(--ossature-barre)}.blanche-outils{align-items:center;gap:var(--esp-2) var(--esp-3);flex-wrap:wrap;display:flex}.blanche-recherche{flex:auto}.blanche-compte{font:var(--t-note);color:var(--texte-2);margin:0}.blanche-table{border-collapse:collapse;inline-size:100%;font:var(--t-interface);color:var(--texte)}.blanche-table,.blanche-table :where(thead,tbody,tr,th,td){display:block}.blanche-table>thead{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}.blanche-table th[scope=col]{color:var(--texte-2);text-align:start;white-space:nowrap}.blanche-table button{scroll-margin-block-start:calc(var(--blanche-collant,0px) + var(--ligne-min) + var(--esp-4))}.blanche-groupe>th{border-block-end:1px solid var(--trait);text-align:start;padding:0}.blanche-groupe-bouton{align-items:center;gap:var(--esp-2);inline-size:100%;min-block-size:var(--rangee);padding:0 var(--esp-2);color:var(--texte);font:var(--t-interface);font-weight:var(--graisse-moyenne);text-align:start;cursor:pointer;transition:background-color var(--mvt-survol);background:0 0;border:0;border-radius:0;display:flex}.blanche-groupe-bouton:focus-visible{outline-offset:-2px}.blanche-chevron{inline-size:var(--ico-s);block-size:var(--ico-s);color:var(--texte-2);transition:rotate var(--duree-1) var(--courbe-standard);flex:none}.blanche-groupe-bouton[aria-expanded=true]>.blanche-chevron{rotate:90deg}.blanche-groupe-compte{color:var(--texte-2);font:var(--t-note);font-variant-numeric:tabular-nums}@media (hover:hover){.blanche-groupe-bouton:hover{background-color:color-mix(in srgb, var(--texte) 4%, transparent)}}.blanche-ligne{align-items:center;gap:var(--esp-1) var(--esp-3);padding:var(--esp-3) var(--esp-2);border-block-end:1px solid var(--trait);grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"nom niveau""effet effet""action action";display:grid}.blanche-ligne>td{min-inline-size:0;padding:0}.blanche-nom{overflow-wrap:anywhere;grid-area:nom}.blanche-niveau{grid-area:niveau}.blanche-ligne>.blanche-niveau{justify-items:start;gap:2px;display:grid}.blanche-etat{color:var(--texte-2);font:var(--t-note)}.blanche-effet{grid-area:effet}.blanche-ligne>.blanche-effet{color:var(--texte-2)}.blanche-action{grid-area:action}.blanche-ligne>.blanche-action{justify-self:end}.blanche-ligne>.blanche-action:empty{display:none}@container page (width>=28rem){.reglages-rangee{flex-wrap:nowrap}:is(.reglages-rangee,.reglages-ajout)>.reglages-champ{flex-basis:auto}.reglages-action{padding-block-start:calc(1lh + var(--esp-1))}.blanche-table>thead{clip-path:none;background:var(--fond);block-size:auto;inline-size:auto;position:static;overflow:visible}.blanche-table[data-collante]>thead{z-index:var(--z-collant);position:sticky;inset-block-start:calc(var(--ossature-barre) + var(--blanche-collant,0px))}.blanche-table thead>tr,.blanche-ligne{grid-template-columns:minmax(0, 1fr) var(--blanche-niveau) var(--blanche-action);column-gap:var(--esp-3);display:grid}.blanche-table thead>tr{padding:var(--esp-2);border-block-end:1px solid var(--trait-2);grid-template-areas:"nom niveau action"}.blanche-table thead .blanche-effet{display:none}.blanche-table thead .blanche-action{text-align:end}.blanche-ligne{padding-block:var(--esp-2);grid-template-areas:"nom niveau action""effet effet.";align-items:baseline}.blanche-ligne>.blanche-action{align-self:start}.blanche-ligne>.blanche-action:empty{display:block}}@container page (width>=44rem){.reglages-colonnes{grid-template-columns:repeat(2,minmax(0,1fr))}.blanche-table thead>tr,.blanche-ligne{grid-template-columns:minmax(0, 2fr) var(--blanche-niveau) minmax(0, 3fr) var(--blanche-action);grid-template-areas:"nom niveau effet action"}.blanche-table thead .blanche-effet{display:block}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./arrow-right-Cx3pAEhl.js";import{n as t,r as n,t as r}from"./habillage-B5mMBadn.js";import{$ as i,A as a,D as o,Et as s,G as c,H as l,I as u,K as d,L as ee,O as te,Ot as f,P as ne,R as re,S as ie,Tt as ae,ft as p,g as m,ht as h,i as g,l as oe,mt as _,n as v,ot as y,r as b,w as x,wt as se,z as ce}from"./index-COSiM-R9.js";import{t as S}from"./plus-D_QHm8ud.js";import{t as C}from"./trash-DLpHM-s8.js";import{a as le,i as w,n as T,o as ue,r as E,s as D}from"./Field-C7c2mCbb.js";import{c as de,i as O,r as k,t as A}from"./Register-DA_Aq5f8.js";import{t as j}from"./Tabs-CfhbELZk.js";import{a as fe,o as pe}from"./Shell-CQRlx9-V.js";var M={name:`lock-open`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 9.9-1`,key:`1mm8w8`}]],aliases:[`unlock`]};M.node;var me=s(M),N={name:`lock`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]};N.node;var P=s(N),F=f(),I=i(),he=3e3,L=4,ge=e=>e.length===8?`${e.slice(0,4)}-${e.slice(4)}`:e;function _e(e,t=L){let n=``;return e.forEach((e,r)=>{let i=0;for(;i<e.length;){if(e[i]!==`1`){i++;continue}let a=i;for(;a<e.length&&e[a]===`1`;)a++;n+=`M${i+t} ${r+t}h${a-i}v1h-${a-i}z`,i=a}}),n}function R({lignes:e,label:t}){let n=(e[0]?.length??0)+8;return(0,I.jsxs)(`svg`,{className:`telephone-qr`,viewBox:`0 0 ${n} ${n}`,role:`img`,"aria-label":t,shapeRendering:`crispEdges`,"data-modules":e[0]?.length??0,children:[(0,I.jsx)(`rect`,{className:`telephone-qr-fond`,width:n,height:n}),(0,I.jsx)(`path`,{className:`telephone-qr-modules`,d:_e(e)})]})}var z=e=>new Date(e).toLocaleTimeString(`fr-FR`,{hour:`2-digit`,minute:`2-digit`}),B=e=>new Date(e).toLocaleDateString(`fr-FR`,{day:`numeric`,month:`long`}),V=e=>e.split(`:`).slice(0,4).join(`:`),ve=p(`Ouvert, l’accès rend la console joignable depuis ton réseau local, en HTTPS, par les téléphones que tu appaires avec un code. Avec Tailscale installé sur ce PC et sur le téléphone, elle l’est aussi de l’extérieur, sans rien ouvrir sur internet. La liste blanche, les dossiers autorisés et les protections du moteur ne se changent que sur ce PC.`);function ye(){let e=te(),{report:t}=ie(),{refresh:n}=o(),[r,i]=(0,F.useState)(null),[s,l]=(0,F.useState)(null),[u,d]=(0,F.useState)(0),[f,m]=(0,F.useState)(()=>Date.now()),[h,_]=(0,F.useState)(!1),[v,b]=(0,F.useState)(null),[x,se]=(0,F.useState)(null),S=(0,F.useRef)(0);(0,F.useEffect)(()=>{let e=++S.current,n=new AbortController;return a(`GET`,`/api/telephone`,void 0,n.signal).then(t=>{e===S.current&&(i(t),l(null),m(Date.now()))}).catch(r=>{n.signal.aborted||(t(r),e===S.current&&l(ne(r)))}),()=>n.abort()},[u,t]);let le=r?.active===!0;(0,F.useEffect)(()=>{if(!le)return;let e=window.setInterval(()=>d(e=>e+1),he);return()=>window.clearInterval(e)},[le]);let w=async(r,a,o,s)=>{let c=++S.current;se(r);try{let t=await a();c===S.current&&(i(t),l(null),m(Date.now())),o&&e(o[0],o[1]),n()}catch(n){t(n),e(`erreur`,s,ne(n))}finally{se(null)}},T=()=>{_(!1),w(`ouverture`,()=>a(`PUT`,`/api/telephone`,{active:!0}),[`info`,`Accès téléphone ouvert`],`Ouverture refusée`)},ue=()=>void w(`fermeture`,()=>a(`PUT`,`/api/telephone`,{active:!1}),[`ok`,`Accès téléphone fermé`],`Fermeture refusée`),E=()=>void w(`code`,()=>a(`POST`,`/api/telephone/code`),null,`Nouveau code refusé`),de=e=>{b(null),w(`retrait`,()=>a(`DELETE`,`/api/telephone/appareils/${encodeURIComponent(e.id)}`),[`ok`,`Téléphone retiré`],`Retrait refusé`)};if(!r)return s?(0,I.jsx)(ee,{message:s,onRetry:()=>d(e=>e+1)}):(0,I.jsx)(re,{label:`Lecture de l’accès téléphone`});let A=r.pairing,j=A!==null&&Date.parse(A.expiresAt)<=f;return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`p`,{className:`phrase-note`,children:ve}),(0,I.jsx)(D,{label:`Accès depuis le téléphone`,description:`Sur ton réseau local et par Tailscale, en HTTPS, pour les appareils appairés.`,checked:r.active,disabled:x===`ouverture`||x===`fermeture`,onChange:e=>e?_(!0):ue()}),r.error?(0,I.jsx)(ce,{issue:`echec`,word:`Injoignable`,children:oe(r.error)}):null,r.active&&!r.error?(0,I.jsxs)(`div`,{className:`telephone-appairage`,children:[A&&!j?(0,I.jsx)(R,{lignes:A.qr,label:`QR code d’appairage : il ouvre la console sur le téléphone et l’appaire`}):null,(0,I.jsxs)(`div`,{className:`telephone-faits`,children:[(0,I.jsxs)(k,{layout:`pile`,children:[(0,I.jsx)(O,{label:r.urls.length>1?`Adresses`:`Adresse`,literal:!0,children:r.urls.map(e=>(0,I.jsx)(`span`,{className:`telephone-adresse`,children:e},e))}),(0,I.jsx)(O,{label:`Code d’appairage`,children:A?j?`Expiré`:(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`span`,{className:`t-donnee telephone-code`,children:ge(A.code)}),(0,I.jsx)(`span`,{className:`telephone-echeance`,children:p(`Valable une fois, jusqu’à ${z(A.expiresAt)}`)})]}):`Aucun en cours`}),r.fingerprint?(0,I.jsx)(O,{label:`Empreinte du certificat`,literal:!0,children:(0,I.jsx)(`span`,{className:`telephone-empreinte`,children:r.fingerprint})}):null]}),(0,I.jsx)(c,{icon:(0,I.jsx)(ae,{"aria-hidden":`true`}),busy:x===`code`,onClick:E,children:`Nouveau code`}),r.fingerprint?(0,I.jsx)(`p`,{className:`phrase-note`,children:p(`À la première visite, le navigateur du téléphone affiche un avertissement : le certificat a été fabriqué par ce PC, aucune autorité ne l’a signé. Dans le détail du certificat, vérifie que l’empreinte SHA-256 commence par ${V(r.fingerprint)}, puis continue vers le site.`)}):null]})]}):null,r.devices.length>0?(0,I.jsxs)(`div`,{className:`telephone-appareils`,children:[(0,I.jsx)(`h3`,{className:`t-interface telephone-appareils-titre`,children:`Appareils appairés`}),(0,I.jsx)(`ul`,{className:`telephone-liste`,children:r.devices.map(e=>(0,I.jsxs)(`li`,{className:`telephone-appareil`,children:[(0,I.jsxs)(`span`,{className:`telephone-appareil-texte`,children:[(0,I.jsx)(`span`,{className:`telephone-appareil-nom`,children:e.name}),(0,I.jsxs)(`span`,{className:`telephone-appareil-dates`,children:[`Appairé le `,B(e.pairedAt),`, `,e.lastSeenAt?`vu ${y(e.lastSeenAt)}`:`pas encore revenu`]})]}),(0,I.jsx)(c,{variant:`nu`,size:`s`,icon:(0,I.jsx)(C,{"aria-hidden":`true`}),"aria-label":`Retirer ${e.name}, appairé le ${B(e.pairedAt)}`,disabled:x===`retrait`,onClick:()=>b(e),children:`Retirer`})]},e.id))})]}):null,h?(0,I.jsxs)(g,{title:`Ouvrir la console au téléphone ?`,tone:`contour`,confirmLabel:`Ouvrir`,onCancel:()=>_(!1),onConfirm:T,children:[(0,I.jsx)(`p`,{children:`La console devient joignable depuis ton réseau local, et par Tailscale s’il est installé, en HTTPS, par les appareils que tu appaires avec un code. Un appareil qui n’est pas appairé voit la page d’appairage et rien d’autre.`}),(0,I.jsx)(`p`,{children:p(`Le certificat est fabriqué par ce PC : à la première visite, le navigateur du téléphone affiche un avertissement. Depuis le téléphone, la liste blanche, les dossiers autorisés et les protections du moteur ne se changent pas.`)})]}):null,v?(0,I.jsxs)(g,{title:`Retirer ce téléphone ?`,tone:`contour`,confirmLabel:`Retirer`,confirmIcon:(0,I.jsx)(C,{"aria-hidden":`true`}),onCancel:()=>b(null),onConfirm:()=>de(v),children:[(0,I.jsx)(`p`,{className:`reglages-objet`,children:v.name}),(0,I.jsx)(`p`,{children:`Il ne pourra plus ouvrir la console. Pour revenir, il lui faudra un nouveau code.`})]}):null]})}function be({appareil:e}){return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(k,{children:(0,I.jsx)(O,{label:`Cet appareil`,children:e??`Ce téléphone`})}),(0,I.jsx)(`p`,{className:`phrase-note`,children:p(`L’accès depuis le téléphone se gère sur le PC, dans Réglages, Téléphone : c’est là que tu le fermes ou que tu retires un appareil.`)})]})}var xe=[{id:`moteur`,label:`Moteur`},{id:`cerveau`,label:`Cerveau`},{id:`recherche`,label:`Recherche web`},{id:`dossiers`,label:`Dossiers`},{id:`blanche`,label:`Liste blanche`},{id:`serveur`,label:`Serveur`},{id:`telephone`,label:`Téléphone`}],Se=[{level:`read`,label:`Lecture`,effet:`Confirmation simple.`},{level:`sensitive`,label:`Sensible`,effet:`Confirmation renforcée.`},{level:`destructive`,label:`Destructrice`,effet:`Refusée tant que tu ne la débloques pas.`},{level:`forbidden`,label:`Interdite`,effet:`Jamais exécutable depuis Prométhée.`}],Ce=Object.fromEntries(Se.map(e=>[e.level,e.effet])),we=`Sans dialogue si tu la tapes. Avec ton accord si le modèle la propose.`,H=(e,t)=>e===`read`&&t?we:Ce[e],Te={constrainedLanguage:{titre:`Désactiver le mode contraint ?`,perte:`PowerShell ne bloquera plus lui-même les appels .NET pendant l’exécution. La liste blanche reste appliquée.`,fait:`Mode contraint désactivé`},confirmRead:{titre:`Ne plus confirmer les lectures ?`,perte:`Une commande de lecture tapée dans le terminal partira sans dialogue. Les commandes proposées par le modèle demandent toujours ton accord.`,fait:`Lectures du terminal sans confirmation`}},Ee={constrainedLanguage:`Mode contraint activé`,confirmRead:`Confirmation des lectures activée`},U={toutDeSuite:!0},W={ton:`info`},De=`liste personnelle`,Oe=p(`Les réglages sont enregistrés sur cette machine, et chaque changement est écrit au journal.`),ke=e=>e.replace(/\.exe$/,``),Ae=e=>e.charAt(0).toUpperCase()+e.slice(1),je=.2;function Me(e,n){let[i,a]=(0,F.useState)({collante:!1,hauteur:0});return(0,F.useEffect)(()=>{if(!e||typeof ResizeObserver>`u`)return;let i=()=>{let r=window.innerHeight,i=t(),o=Math.ceil(e.getBoundingClientRect().height),s=n?.getBoundingClientRect().height??0,c=s>1?Math.ceil(s):0,l=r>=30*m()&&i+o+c<=r*je;a(e=>e.collante===l&&e.hauteur===o?e:{collante:l,hauteur:o})};i();let o=new ResizeObserver(i);o.observe(e),n&&o.observe(n);let s=new MutationObserver(i);return s.observe(document.documentElement,{attributes:!0,attributeFilter:[...r]}),window.addEventListener(`resize`,i),()=>{o.disconnect(),s.disconnect(),window.removeEventListener(`resize`,i)}},[e,n]),i}function Ne({label:e,help:t,value:n,min:r,max:i,step:a,onCommit:o}){let[s,c]=(0,F.useState)(null),l=(0,F.useRef)(null),u=(0,F.useRef)(o);(0,F.useEffect)(()=>{u.current=o}),(0,F.useEffect)(()=>{let e=l.current;if(!e)return;let t=0,n=()=>{window.clearTimeout(t),t=window.setTimeout(()=>{u.current(Number(e.value)).then(e=>e||c(null))},400)};return e.addEventListener(`change`,n),()=>{e.removeEventListener(`change`,n),window.clearTimeout(t)}},[]),(0,F.useEffect)(()=>{s===n&&c(null)},[n,s]);let d=s??n;return(0,I.jsx)(T,{label:e,help:t,children:(0,I.jsx)(w,{ref:l,min:r,max:i,step:a,value:d,valueText:`${d} s`,onChange:e=>c(Number(e.target.value))})})}var Pe=(0,F.memo)(function({item:e,lectureAussitot:t,onDebloquer:n,onReverrouiller:r,onRetirer:i,duPc:a}){return(0,I.jsxs)(`tr`,{role:`row`,className:`blanche-ligne`,children:[(0,I.jsx)(`td`,{role:`cell`,className:`blanche-nom`,children:(0,I.jsx)(`span`,{className:`t-donnee`,children:e.name})}),(0,I.jsxs)(`td`,{role:`cell`,className:`blanche-niveau`,children:[(0,I.jsx)(l,{level:e.level}),e.unlocked?(0,I.jsx)(`span`,{className:`blanche-etat`,children:`Débloquée`}):null]}),(0,I.jsx)(`td`,{role:`cell`,className:`blanche-effet`,children:e.note?Ae(e.note):H(e.level,t)}),(0,I.jsx)(`td`,{role:`cell`,className:`blanche-action`,children:e.unlocked===!1?(0,I.jsx)(c,{size:`s`,icon:(0,I.jsx)(me,{"aria-hidden":`true`}),"aria-label":`Débloquer ${e.name}`,disabled:a,onClick:()=>n(e),children:`Débloquer`}):e.unlocked?(0,I.jsx)(c,{size:`s`,icon:(0,I.jsx)(P,{"aria-hidden":`true`}),"aria-label":`Reverrouiller ${e.name}`,disabled:a,onClick:()=>r(e),children:`Reverrouiller`}):e.custom?(0,I.jsx)(c,{variant:`nu`,size:`s`,icon:(0,I.jsx)(C,{"aria-hidden":`true`}),"aria-label":`Retirer ${e.name}`,disabled:a,onClick:()=>i(e),children:`Retirer`}):null})]})}),Fe=p(`Quand une question le demande, Prométhée cherche sur internet avant de répondre, et la conversation montre la requête et les sources. La requête part vers SearXNG, sur cette machine, qui interroge Google, Bing, DuckDuckGo et Brave. La carte d’un lieu vient d’OpenStreetMap.`),Ie=`Après chaque recherche, Prométhée lit en entier les 3 premières pages et garde leur texte dans data/savoir.db, pour le relire avant de répondre. Ces sites voient ton adresse IP, comme quand tu les ouvres.`,Le=`Le modèle répond alors sans retenue sur l’offensif : exploitation, payloads, élévation de privilèges, post-exploitation, contournement de protections. Il reste exact et ne touche pas aux protections d’exécution.`,Re=`Pour un usage white hat autorisé : tes machines, un CTF, ou un pentest pour lequel tu as une autorisation écrite. Le créateur de Prométhée décline toute responsabilité. Tu es seul responsable de la légalité de ce que tu fais.`,ze=20,Be=`À partir d’un but, Prométhée exécute lui-même les commandes autorisées, les unes après les autres, sans validation à chaque fois, jusqu’à ${ze} commandes. Tu peux l’arrêter à tout moment.`;function Ve({active:e,etat:t}){return e&&t?.enabled&&!t.available?(0,I.jsx)(ce,{issue:`echec`,word:`Injoignable`,children:oe(t.error??`SearXNG ne répond pas.`)}):(0,I.jsx)(k,{children:(0,I.jsx)(O,{label:`État de SearXNG`,children:e?t?.enabled&&t.available?(0,I.jsxs)(I.Fragment,{children:[`Répond en `,(0,I.jsxs)(`span`,{className:`t-donnee`,children:[t.latencyMs??`?`,`\xA0`,`ms`]})]}):(0,I.jsx)(`span`,{className:`t-donnee`,children:`…`}):`Désactivée`})})}var G=`Se règle sur le PC.`;function He({distant:e,children:t}){return(0,I.jsx)(`fieldset`,{className:`reglages-du-pc`,disabled:e,children:t})}function K({partie:e,children:t}){return(0,I.jsx)(`h2`,{id:`reglages-${e}`,className:`t-titre-3 reglages-titre`,tabIndex:-1,children:t})}function q({partie:t}){let r=x(`/api/settings`),i=x(`/api/policy`),{status:s,refresh:l}=o(),{remote:f,device:ae}=ie(),p=x(s?.ollama.available?`/api/models`:null,[s?.ollama.available]),m=te(),[oe,y]=(0,F.useState)(null),w=oe??r.data,M=(0,F.useRef)(0),[N,P]=(0,F.useState)(null),[he,L]=(0,F.useState)(!1),[ge,_e]=(0,F.useState)(!1),[R,z]=(0,F.useState)(null),[B,V]=(0,F.useState)(null),[ve,we]=(0,F.useState)(``),[H,je]=(0,F.useState)(null),[q,Ue]=(0,F.useState)(null),[We,Ge]=(0,F.useState)(null),[Ke,qe]=(0,F.useState)(``),[Je,Ye]=(0,F.useState)(``),[Xe,Ze]=(0,F.useState)(`sensitive`),[Qe,J]=(0,F.useState)(null),[Y,$e]=(0,F.useState)(`all`),[X,et]=(0,F.useState)(``),[tt,nt]=(0,F.useState)(()=>new Set),rt=(0,F.useRef)(null),it=(0,F.useRef)(null),[at,ot]=(0,F.useState)(null),[st,ct]=(0,F.useState)(null),{collante:lt,hauteur:ut}=Me(at,st),dt=w!=null;(0,F.useEffect)(()=>{if(!t||!dt)return;let e=requestAnimationFrame(()=>{let e=document.getElementById(t===`liste-blanche`?`reglages-blanche`:`reglages-${t}`);e&&(b()&&e.focus({preventScroll:!0}),e.scrollIntoView({block:`start`}))});return()=>cancelAnimationFrame(e)},[t,dt]);let Z=async(e,t,{toutDeSuite:n=!1,ton:o=`ok`,surRefus:s}={})=>{let c=++M.current;n&&y(t=>{let n=t??r.data;return n?{model:e.model===void 0?n.model:e.model,engine:{...n.engine,...e.engine},allowlist:{...n.allowlist,...e.allowlist},ollama:{...n.ollama,...e.ollama},search:{...n.search,...e.search},fullCyber:e.fullCyber??n.fullCyber,autoRun:e.autoRun??n.autoRun}:t});try{let n=await a(`PUT`,`/api/settings`,e);return c===M.current&&y(n),m(o,t),e.allowlist&&i.reload(),e.model!==void 0&&p.reload(),l(),!0}catch(e){return c===M.current&&(y(null),r.reload()),m(`erreur`,`Réglage refusé`,ne(e)),s?.(ne(e)),!1}},ft=(0,F.useRef)({s:w,save:Z});(0,F.useEffect)(()=>{ft.current={s:w,save:Z}});let pt=(0,F.useCallback)(e=>{we(``),V(e)},[]),mt=(0,F.useCallback)(e=>{let{s:t,save:n}=ft.current;t&&n({allowlist:{unlocked:t.allowlist.unlocked.filter(t=>t!==ke(e.name))}},`${e.name} reverrouillée`)},[]),ht=(0,F.useCallback)(e=>{let{s:t,save:n}=ft.current;t&&n({allowlist:{custom:t.allowlist.custom.filter(t=>t.name!==e.name)}},`${e.name} retirée de ta liste`).then(e=>e&&it.current?.focus())},[]),Q=(0,F.useMemo)(()=>i.data?.items??[],[i.data]),gt=Y!==`all`||X.trim()!==``,$=(0,F.useMemo)(()=>{let e=X.trim().toLowerCase();return Q.filter(t=>(Y===`all`||t.level===Y)&&(!e||t.name.toLowerCase().includes(e)||t.category.toLowerCase().includes(e)||t.note.toLowerCase().includes(e)))},[Q,X,Y]),_t=(0,F.useMemo)(()=>{let e=new Map;for(let t of $){let n=e.get(t.category);n?n.push(t):e.set(t.category,[t])}return[...e].sort(([e],[t])=>Number(t===De)-Number(e===De))},[$]),vt=(0,F.useMemo)(()=>{let e={read:0,sensitive:0,destructive:0,forbidden:0};for(let t of Q)e[t.level]++;return e},[Q]);if(!w)return(0,I.jsx)(`div`,{className:`vue`,children:(0,I.jsxs)(`div`,{className:`vue-contenu reglages-page`,children:[(0,I.jsx)(de,{title:`Réglages`,children:Oe}),r.error?(0,I.jsx)(ee,{message:r.error,onRetry:r.reload}):(0,I.jsx)(re,{label:`Lecture des réglages`})]})});let yt=e=>(gt||e===De)!==tt.has(e),bt=e=>{let t=document.getElementById(`reglages-${e}`);t?.focus({preventScroll:!0}),t?.scrollIntoView({block:`start`})},xt=(e,t)=>{t?Z({engine:{[e]:!0}},Ee[e]):P(e)},St=e=>{e.preventDefault();let t=Ke.trim();t&&(J(`dossier`),Z({engine:{roots:[...w.engine.roots,t]}},`Dossier autorisé ajouté`,W).then(e=>{J(null),e&&qe(``)}))},Ct=e=>{e.preventDefault();let t=Je.trim();t&&(J(`commande`),Z({allowlist:{custom:[...w.allowlist.custom.filter(e=>e.name.toLowerCase()!==t.toLowerCase()),{name:t,level:Xe}]}},`${t} ajoutée à ta liste`,W).then(e=>{J(null),e&&Ye(``)}))},wt=(e,t)=>{$e(e),et(t),nt(new Set)},Tt=e=>nt(t=>{let n=new Set(t);return n.delete(e)||n.add(e),n}),Et=p.data?.installed??[],Dt=[{value:`all`,label:`Toutes`,count:Q.length},...Se.map(e=>({value:e.level,label:e.label,count:vt[e.level]}))],Ot=i.data?gt?h($.length,`commande trouvée`,`commandes trouvées`):h(Q.length,`commande`,`commandes`):null;return(0,I.jsx)(`div`,{className:`vue`,children:(0,I.jsxs)(`div`,{className:`vue-contenu reglages-page`,style:{"--blanche-collant":lt?`${ut}px`:`0px`},children:[(0,I.jsx)(de,{title:`Réglages`,children:Oe}),(0,I.jsx)(`nav`,{className:`reglages-ancres`,"aria-label":`Parties des réglages`,children:xe.map(e=>(0,I.jsx)(c,{variant:`nu`,size:`s`,onClick:()=>bt(e.id),children:e.label},e.id))}),(0,I.jsxs)(`div`,{className:`reglages-colonnes`,children:[(0,I.jsxs)(A,{labelledBy:`reglages-moteur`,className:`reglages-partie`,head:(0,I.jsx)(K,{partie:`moteur`,children:`Moteur d’exécution`}),children:[(0,I.jsx)(D,{label:`Mode de langage contraint`,description:`PowerShell bloque lui-même les appels .NET pendant l’exécution, en plus de la liste blanche.${f?` ${G}`:``}`,checked:w.engine.constrainedLanguage,disabled:f,onChange:e=>xt(`constrainedLanguage`,e)}),(0,I.jsx)(D,{label:`Confirmer aussi les commandes de lecture`,description:`Sans cette option, une lecture tapée dans le terminal part directement. Les commandes proposées par le modèle demandent toujours ton accord.${f?` ${G}`:``}`,checked:w.engine.confirmRead,disabled:f,onChange:e=>xt(`confirmRead`,e)}),(0,I.jsx)(Ne,{label:`Délai maximal d’une commande`,help:`De 10 à 300 s.`,value:w.engine.timeoutSec,min:10,max:300,step:10,onCommit:e=>Z({engine:{timeoutSec:e}},`Délai enregistré`,U)})]}),(0,I.jsxs)(A,{labelledBy:`reglages-cerveau`,className:`reglages-partie`,head:(0,I.jsx)(K,{partie:`cerveau`,children:`Cerveau`}),children:[(0,I.jsxs)(`div`,{className:`reglages-cyber`,"data-actif":w.fullCyber?``:void 0,children:[(0,I.jsx)(D,{label:`Mode full cyber`,description:`${Le}${f?` ${G}`:``}`,checked:w.fullCyber,disabled:f,onChange:e=>e?L(!0):void Z({fullCyber:!1},`Mode full cyber désactivé`)}),w.fullCyber?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`p`,{className:`reglages-cyber-cadre`,children:Re}),(0,I.jsx)(D,{label:`Exécuter les commandes automatiquement (mode auto)`,description:Be,checked:w.autoRun,disabled:f,onChange:e=>e?_e(!0):void Z({autoRun:!1},`Mode auto désactivé`)})]}):null]}),(0,I.jsx)(T,{label:`Modèle utilisé`,help:`Seuls les modèles qui gèrent les outils peuvent proposer des commandes.`,children:(0,I.jsxs)(ue,{value:w.model??p.data?.selected??``,disabled:Et.length===0,onChange:e=>void Z({model:e.target.value},`Modèle changé`,U),children:[Et.length===0?(0,I.jsx)(`option`,{value:``,children:s?.ollama.available?`Chargement des modèles`:`Ollama injoignable`}):null,Et.map(e=>(0,I.jsx)(`option`,{value:e.name,children:e.capabilities.includes(`tools`)?e.name:`${e.name} (texte seulement)`},e.name))]})}),(0,I.jsxs)(`form`,{className:`reglages-rangee`,onSubmit:e=>{e.preventDefault(),H!==null&&Z({ollama:{baseUrl:H.trim()}},`Adresse d’Ollama enregistrée`,U).then(e=>e&&je(null))},children:[(0,I.jsx)(T,{label:`Adresse d’Ollama`,help:`Par défaut, la variable OLLAMA_HOST, sinon 127.0.0.1:11434.${f?` ${G}`:``}`,className:`reglages-champ`,children:(0,I.jsx)(E,{mono:!0,value:H??w.ollama.baseUrl,onChange:e=>je(e.target.value),spellCheck:!1,autoComplete:`off`,disabled:f})}),(0,I.jsx)(`span`,{className:`reglages-action`,children:(0,I.jsx)(c,{type:`submit`,disabled:f||H===null||H.trim()===w.ollama.baseUrl,children:`Enregistrer`})})]}),(0,I.jsx)(Ne,{label:`Délai avant la première réponse`,help:`De 30 à 600 s. Il couvre le chargement du modèle en mémoire.`,value:w.ollama.replyTimeoutSec,min:30,max:600,step:30,onCommit:e=>Z({ollama:{replyTimeoutSec:e}},`Délai enregistré`,U)})]})]}),(0,I.jsxs)(A,{labelledBy:`reglages-recherche`,className:`reglages-partie`,head:(0,I.jsx)(K,{partie:`recherche`,children:`Recherche web`}),children:[(0,I.jsx)(`p`,{className:`phrase-note`,children:Fe}),(0,I.jsx)(D,{label:`Chercher sur internet quand une question le demande`,description:`Désactivée, aucune requête ne part et aucune carte ne s’affiche.`,checked:w.search.enabled,onChange:e=>void Z({search:{enabled:e}},e?`Recherche web activée`:`Recherche web désactivée`,e?W:{})}),(0,I.jsx)(D,{label:`Apprendre des pages lues`,description:Ie,checked:w.search.learn,onChange:e=>void Z({search:{learn:e}},e?`Apprentissage activé`:`Apprentissage coupé`,e?W:{})}),(0,I.jsx)(d,{variant:`nu`,size:`s`,className:`reglages-vers-savoir`,href:v({page:`savoir`}),iconEnd:(0,I.jsx)(e,{"aria-hidden":`true`}),children:`Voir le savoir`}),(0,I.jsxs)(`form`,{className:`reglages-rangee`,onSubmit:e=>{e.preventDefault(),q!==null&&(Ge(null),Z({search:{url:q.trim()}},`Adresse de SearXNG enregistrée`,{toutDeSuite:!0,surRefus:e=>Ge(e.replace(/^search\.url : /,``))}).then(e=>e&&Ue(null)))},children:[(0,I.jsx)(T,{label:`Adresse de SearXNG`,help:(0,I.jsxs)(I.Fragment,{children:[`Sur cette machine seulement. `,(0,I.jsx)(`span`,{className:`t-donnee`,children:`npm run searxng`}),` l’installe et le démarre sur `,(0,I.jsx)(`span`,{className:`t-donnee`,children:`http://127.0.0.1:8888`}),`.`,f?` ${G}`:null]}),error:We??void 0,className:`reglages-champ`,children:(0,I.jsx)(E,{mono:!0,value:q??w.search.url,onChange:e=>{Ue(e.target.value),Ge(null)},spellCheck:!1,autoComplete:`off`,disabled:f})}),(0,I.jsx)(`span`,{className:`reglages-action`,children:(0,I.jsx)(c,{type:`submit`,disabled:f||q===null||q.trim()===w.search.url,children:`Enregistrer`})})]}),(0,I.jsx)(Ve,{active:w.search.enabled,etat:s?.search??null})]}),(0,I.jsxs)(A,{labelledBy:`reglages-dossiers`,className:`reglages-partie`,head:(0,I.jsx)(K,{partie:`dossiers`,children:`Dossiers autorisés`}),children:[(0,I.jsx)(`p`,{className:`phrase-note`,children:`Les commandes s’exécutent dans ces dossiers, et la politique refuse les écritures en dehors, sauf pour une commande ajoutée à la main.`}),f?(0,I.jsx)(`p`,{className:`phrase-note`,children:G}):null,(0,I.jsx)(`ul`,{className:`reglages-dossiers`,children:w.engine.roots.map(e=>(0,I.jsxs)(`li`,{className:`reglages-dossier`,children:[(0,I.jsx)(`span`,{className:`t-donnee`,children:e}),(0,I.jsx)(c,{variant:`nu`,size:`s`,icon:(0,I.jsx)(C,{"aria-hidden":`true`}),"aria-label":`Retirer ${e}`,disabled:f||w.engine.roots.length===1,onClick:()=>z(e),children:`Retirer`})]},e))}),w.engine.roots.length===1?(0,I.jsx)(`p`,{className:`phrase-note`,children:`Il faut garder au moins un dossier.`}):null,(0,I.jsx)(He,{distant:f,children:(0,I.jsxs)(`form`,{className:`reglages-rangee`,onSubmit:St,children:[(0,I.jsx)(T,{label:`Ajouter un dossier`,className:`reglages-champ`,children:(0,I.jsx)(E,{ref:rt,mono:!0,value:Ke,onChange:e=>qe(e.target.value),placeholder:`D:\\Labo`,spellCheck:!1,autoComplete:`off`})}),(0,I.jsx)(`span`,{className:`reglages-action`,children:(0,I.jsx)(c,{type:`submit`,icon:(0,I.jsx)(S,{"aria-hidden":`true`}),busy:Qe===`dossier`,disabled:!Ke.trim(),children:`Ajouter`})})]})})]}),(0,I.jsxs)(A,{labelledBy:`reglages-blanche`,className:`reglages-partie reglages-blanche`,head:(0,I.jsxs)(`div`,{className:`reglages-tete`,children:[(0,I.jsx)(K,{partie:`blanche`,children:`Liste blanche`}),(0,I.jsxs)(`p`,{className:`phrase-note`,children:[`Tout ce qui n’y figure pas est refusé.`,f?` ${G}`:``]})]}),children:[(0,I.jsx)(He,{distant:f,children:(0,I.jsxs)(`form`,{className:`reglages-ajout`,onSubmit:Ct,children:[(0,I.jsx)(T,{label:`Ajouter une commande à ta liste`,className:`reglages-champ`,children:(0,I.jsx)(E,{ref:it,mono:!0,value:Je,onChange:e=>Ye(e.target.value),placeholder:`cargo, git, Get-Clipboard…`,spellCheck:!1,autoComplete:`off`})}),(0,I.jsx)(`span`,{className:`reglages-action`,children:(0,I.jsx)(j,{label:`Niveau de la commande ajoutée`,value:Xe,onChange:e=>Ze(e===`read`?`read`:`sensitive`),options:[{value:`read`,label:`Lecture`},{value:`sensitive`,label:`Sensible`}]})}),(0,I.jsx)(`span`,{className:`reglages-action`,children:(0,I.jsx)(c,{type:`submit`,icon:(0,I.jsx)(S,{"aria-hidden":`true`}),busy:Qe===`commande`,disabled:!Je.trim(),children:`Ajouter`})}),(0,I.jsx)(`p`,{className:`phrase-note reglages-ajout-note`,children:`Les arguments d’une commande ajoutée à la main ne sont pas contrôlés. Les commandes interdites (interpréteurs, code dynamique) restent refusées même si tu les ajoutes.`})]})}),(0,I.jsxs)(`div`,{ref:ot,className:`blanche-filtres`,"data-collante":lt?``:void 0,children:[(0,I.jsx)(j,{label:`Niveau`,value:Y,onChange:e=>wt(e,X),options:Dt,collapse:!0}),(0,I.jsxs)(`div`,{className:`blanche-outils`,children:[(0,I.jsx)(T,{label:`Rechercher une commande`,hideLabel:!0,className:`blanche-recherche`,children:(0,I.jsx)(le,{value:X,onChange:e=>wt(Y,e.target.value),placeholder:`get-content, réseau, nmap…`})}),(0,I.jsx)(`p`,{className:`blanche-compte`,role:`status`,children:Ot}),gt&&$.length>0?(0,I.jsx)(c,{variant:`nu`,size:`s`,icon:(0,I.jsx)(se,{"aria-hidden":`true`}),onClick:()=>wt(`all`,``),children:`Effacer les filtres`}):null]})]}),i.error?(0,I.jsx)(ee,{message:i.error,onRetry:i.reload}):null,i.data?$.length===0?(0,I.jsx)(u,{action:{label:`Effacer les filtres`,onClick:()=>wt(`all`,``),icon:(0,I.jsx)(se,{"aria-hidden":`true`})},children:`Aucune commande ne correspond à ces filtres.`}):(0,I.jsxs)(`table`,{role:`table`,className:`blanche-table`,"data-collante":lt?``:void 0,children:[(0,I.jsx)(`caption`,{className:`sr`,children:`Liste blanche, par catégorie`}),(0,I.jsx)(`thead`,{ref:ct,role:`rowgroup`,children:(0,I.jsxs)(`tr`,{role:`row`,children:[(0,I.jsx)(`th`,{role:`columnheader`,scope:`col`,className:`t-etiquette blanche-nom`,children:`Commande`}),(0,I.jsx)(`th`,{role:`columnheader`,scope:`col`,className:`t-etiquette blanche-niveau`,children:`Niveau`}),(0,I.jsx)(`th`,{role:`columnheader`,scope:`col`,className:`t-etiquette blanche-effet`,children:`Effet`}),(0,I.jsx)(`th`,{role:`columnheader`,scope:`col`,className:`t-etiquette blanche-action`,children:`Action`})]})}),_t.map(([e,t])=>{let r=yt(e);return(0,I.jsxs)(`tbody`,{role:`rowgroup`,children:[(0,I.jsx)(`tr`,{role:`row`,className:`blanche-groupe`,children:(0,I.jsx)(`th`,{role:`rowheader`,scope:`rowgroup`,colSpan:4,children:(0,I.jsxs)(`button`,{type:`button`,className:`blanche-groupe-bouton`,"aria-expanded":r,onClick:()=>Tt(e),children:[(0,I.jsx)(n,{className:`blanche-chevron`,"aria-hidden":`true`}),(0,I.jsx)(`span`,{children:Ae(e)}),` `,(0,I.jsx)(`span`,{className:`blanche-groupe-compte`,children:_(t.length)})]})})}),r?t.map(e=>(0,I.jsx)(Pe,{item:e,lectureAussitot:!w.engine.confirmRead,onDebloquer:pt,onReverrouiller:mt,onRetirer:ht,duPc:f},`${e.name}-${e.custom?`c`:`b`}`)):null]},e)})]}):i.loading?(0,I.jsx)(re,{label:`Lecture de la liste blanche`}):null]}),(0,I.jsx)(A,{labelledBy:`reglages-serveur`,className:`reglages-partie`,head:(0,I.jsx)(K,{partie:`serveur`,children:`Serveur local`}),children:(0,I.jsxs)(k,{children:[(0,I.jsx)(O,{label:`Version`,literal:!0,children:s?.server.version??`…`}),(0,I.jsx)(O,{label:`Écoute`,children:s?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`span`,{className:`t-donnee`,children:s.server.listen}),`, `,fe(s.server.listen)?`inaccessible`:`accessible`,` depuis le réseau`]}):(0,I.jsx)(`span`,{className:`t-donnee`,children:`…`})}),(0,I.jsx)(O,{label:`Données`,literal:!0,children:s?.server.dataDir??`…`}),(0,I.jsx)(O,{label:`Protection de l’API`,children:`Jeton de session, contrôle de l’hôte et de l’origine`}),(0,I.jsx)(O,{label:`Téléphone`,children:s?s.server.phone.active?(0,I.jsxs)(I.Fragment,{children:[`Ouvert sur `,(0,I.jsx)(`span`,{className:`t-donnee`,children:pe(s.server.phone.urls[0]??``)}),`, `,h(s.server.phone.devices,`appareil appairé`,`appareils appairés`)]}):`Fermé`:(0,I.jsx)(`span`,{className:`t-donnee`,children:`…`})})]})}),(0,I.jsx)(A,{labelledBy:`reglages-telephone`,className:`reglages-partie`,head:(0,I.jsx)(K,{partie:`telephone`,children:`Téléphone`}),children:f?(0,I.jsx)(be,{appareil:ae}):(0,I.jsx)(ye,{})}),N?(0,I.jsx)(g,{title:Te[N].titre,tone:`contour`,confirmLabel:`Désactiver`,onCancel:()=>P(null),onConfirm:()=>{let e=N;P(null),Z({engine:{[e]:!1}},Te[e].fait,W)},children:(0,I.jsx)(`p`,{children:Te[N].perte})}):null,he?(0,I.jsxs)(g,{title:`Activer le mode full cyber ?`,tone:`contour`,confirmLabel:`Activer`,onCancel:()=>L(!1),onConfirm:()=>{L(!1),Z({fullCyber:!0},`Mode full cyber activé`,W)},children:[(0,I.jsx)(`p`,{children:`Prométhée répondra comme un assistant de sécurité offensive sans retenue, et détaillera l’exploitation, les payloads, l’élévation de privilèges, la post-exploitation et le contournement de protections.`}),(0,I.jsx)(`p`,{children:`C’est fait pour un usage white hat : tes propres machines, un CTF, ou un pentest pour lequel tu as une autorisation écrite. Le créateur de Prométhée décline toute responsabilité, et tu es seul responsable de la légalité de ce que tu fais.`}),(0,I.jsx)(`p`,{children:`Ce mode change ce que le modèle explique. Il ne touche pas aux protections d’exécution : la liste blanche, la confirmation de chaque commande et le périmètre réseau restent en place.`})]}):null,ge?(0,I.jsxs)(g,{title:`Activer le mode auto ?`,tone:`contour`,confirmLabel:`Activer`,onCancel:()=>_e(!1),onConfirm:()=>{_e(!1),Z({autoRun:!0},`Mode auto activé`,W)},children:[(0,I.jsxs)(`p`,{children:[`À partir d’un but que tu donnes dans le Cerveau, Prométhée exécutera lui-même les commandes, les unes après les autres, sans te les faire valider une par une, jusqu’à `,ze,` commandes. Tu peux l’arrêter à tout moment avec « Arrêter ».`]}),(0,I.jsx)(`p`,{children:`Les garde-fous durs tiennent : une commande destructrice, interdite ou visant une cible hors du périmètre déclaré n’est jamais lancée automatiquement, elle reste refusée. En revanche, les commandes de lecture et les commandes sensibles, qui écrivent dans tes dossiers autorisés ou contactent le réseau, partent sans confirmation.`})]}):null,R?(0,I.jsxs)(g,{title:`Retirer ce dossier autorisé ?`,tone:`contour`,confirmLabel:`Retirer`,confirmIcon:(0,I.jsx)(C,{"aria-hidden":`true`}),onCancel:()=>z(null),onConfirm:()=>{let e=R;z(null),Z({engine:{roots:w.engine.roots.filter(t=>t!==e)}},`Dossier retiré`).then(e=>e&&rt.current?.focus())},children:[(0,I.jsx)(`p`,{className:`t-donnee reglages-objet`,children:R}),(0,I.jsx)(`p`,{children:`Les commandes ne pourront plus s’y exécuter, et la politique y refusera les écritures.`})]}):null,B?(0,I.jsxs)(g,{title:`Débloquer ${B.name} ?`,tone:`contour`,confirmLabel:`Débloquer`,confirmIcon:(0,I.jsx)(me,{"aria-hidden":`true`}),confirmDisabled:ve.trim().toLowerCase()!==B.name.toLowerCase(),initialFocus:`field`,onCancel:()=>V(null),onConfirm:()=>{let e=B;V(null),Z({allowlist:{unlocked:[...w.allowlist.unlocked,ke(e.name)]}},`${e.name} débloquée`,W)},children:[(0,I.jsx)(ce,{level:B.level,children:B.note?Ae(B.note):Ce[B.level]}),(0,I.jsx)(`p`,{children:`Une fois débloquée, elle pourra s’exécuter après une confirmation renforcée, y compris quand c’est le modèle qui la propose. Les écritures restent limitées à tes dossiers autorisés.`}),(0,I.jsx)(T,{label:`Nom de la commande`,help:(0,I.jsxs)(I.Fragment,{children:[`Tape `,(0,I.jsx)(`span`,{className:`t-donnee`,children:B.name}),` pour confirmer.`]}),children:(0,I.jsx)(E,{mono:!0,value:ve,onChange:e=>we(e.target.value),spellCheck:!1,autoComplete:`off`})})]}):null]})})}export{q as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer pages{:root:has(.ossature[data-forme=large]){--calque-colonne:var(--lat-l);scroll-padding-block-start:0}:root:has(.ossature-barre){--notifications-haut:calc(var(--barre-h) + var(--esp-2));scroll-padding-block-start:var(--barre-h)}.ossature{--ossature-habillage:0px;--ossature-barre:var(--ossature-habillage);background:var(--fond);min-block-size:100dvh;color:var(--texte);font:var(--t-interface)}.ossature[data-forme=large]{grid-template-columns:var(--lat-l) minmax(0, 1fr);align-items:start;display:grid}.ossature[data-forme=etroite]{--ossature-habillage:var(--barre-h)}:root[data-notifications-erreurs] .ossature{--ossature-pile:max(0px, var(--notifications-erreurs-bas) + var(--esp-2) - var(--ossature-habillage));--ossature-barre:calc(var(--ossature-habillage) + var(--ossature-pile))}:root[data-notifications-erreurs] .ossature>.ossature-contenu{padding-block-start:var(--ossature-pile)}.ossature-evitement{z-index:var(--z-calque);min-block-size:var(--ctl-m);padding:0 var(--esp-3);border:1px solid var(--trait-2);border-radius:var(--r-controle);background:var(--surface-2);color:var(--texte);font:var(--t-interface);font-weight:var(--graisse-moyenne);cursor:pointer;position:fixed;inset-block-start:var(--esp-2);inset-inline-start:var(--esp-2)}.ossature-evitement:not(:focus){clip-path:inset(50%);white-space:nowrap;border:0;block-size:1px;min-block-size:0;inline-size:1px;padding:0;overflow:hidden}.ossature-lat{gap:var(--esp-5);block-size:100dvh;padding-block:var(--esp-4);overscroll-behavior:contain;border-inline-end:1px solid var(--trait);flex-direction:column;display:flex;position:sticky;inset-block-start:0;overflow-y:auto}.ossature-marque{align-items:center;gap:var(--esp-3);padding-inline:var(--esp-4);margin:0;display:flex}.ossature-flamme{inline-size:var(--flamme);flex:none;block-size:auto;display:block}.ossature-nom{color:var(--texte);display:grid}.ossature-sous-nom{font:var(--t-note);color:var(--texte-2)}.ossature-liens{margin:0;padding:0;list-style:none;display:grid}.ossature-liens>li[data-ecart]{margin-block-start:var(--esp-3)}.ossature-lien{align-items:center;gap:var(--esp-3);min-block-size:var(--ligne-min);padding-inline:calc(var(--esp-4) - 2px) var(--esp-4);color:var(--texte-2);font:var(--t-interface);font-weight:var(--graisse-moyenne);transition:color var(--mvt-survol), background-color var(--mvt-survol);border-inline-start:2px solid #0000;text-decoration:none;display:flex}.ossature-lien>svg{inline-size:var(--ico-s);block-size:var(--ico-s);stroke-width:var(--ico-trait);flex:none}.ossature-lien>svg>*{vector-effect:non-scaling-stroke}.ossature-lien[aria-current]{border-inline-start-color:var(--or);background-color:var(--surface-2);color:var(--texte)}.ossature-lien:focus-visible{outline-offset:-2px}.ossature-nav[data-tiroir] .ossature-lien{min-block-size:var(--cible-min)}.ossature-pied{gap:var(--esp-2);grid-template-columns:minmax(0,1fr);margin-block-start:auto;display:grid}.ossature-etat{gap:var(--esp-2);padding:var(--esp-3) var(--esp-4) 0 calc(var(--esp-4) - (var(--esp-5) - var(--ico-s)) / 2);border-block-start:1px solid var(--trait);grid-template-columns:minmax(0,1fr);display:grid}.ossature-systemes{gap:var(--esp-1);grid-template-columns:minmax(0,1fr);margin:0;display:grid}.ossature-systeme{align-items:baseline;column-gap:var(--esp-3);grid-template-columns:auto minmax(0,1fr);display:grid}.ossature-systeme-nom{align-items:center;gap:var(--esp-2);font:var(--t-note);font-weight:var(--graisse-moyenne);color:var(--texte);display:flex}.ossature-systeme-valeur{text-align:end;text-overflow:ellipsis;white-space:nowrap;font:var(--t-note);color:var(--texte-2);margin:0;overflow:hidden}.ossature-instance{grid-template-columns:minmax(0,1fr);display:grid}.ossature-version,.ossature-ecoute{font:var(--t-note);color:var(--texte-2);margin:0;padding-inline-start:calc(var(--esp-5) + var(--esp-2))}.ossature-ecoute[data-exposee]{align-items:center;gap:var(--esp-2);font-weight:var(--graisse-moyenne);color:var(--texte);padding-inline-start:0;display:flex}.ossature-ecoute-adresse{font:var(--t-donnee);color:var(--texte-2);overflow-wrap:anywhere;margin:0;padding-inline-start:calc(var(--esp-5) + var(--esp-2))}.ossature-retour{align-items:center;gap:var(--esp-3);min-block-size:var(--ligne-min);padding-inline:var(--esp-4);color:var(--texte-2);font:var(--t-interface);font-weight:var(--graisse-moyenne);transition:color var(--mvt-survol), background-color var(--mvt-survol);text-decoration:none;display:flex}.ossature-retour>svg{inline-size:var(--ico-s);block-size:var(--ico-s);stroke-width:var(--ico-trait);flex:none}.ossature-retour:focus-visible{outline-offset:-2px}.ossature-tiroir .ossature-retour{min-block-size:var(--cible-min)}@media (hover:hover){:is(.ossature-lien,.ossature-retour):hover{background-color:color-mix(in srgb, var(--texte) 4%, transparent);color:var(--texte)}}.ossature-tiroir{gap:var(--esp-5);min-block-size:calc(100% + var(--esp-4) * 2);margin:calc(var(--esp-4) * -1);padding-block:0 var(--esp-4);flex-direction:column;display:flex}.ossature-barre{z-index:var(--z-barre);align-items:center;gap:var(--esp-2);block-size:var(--barre-h);padding-inline:calc(var(--esp-gouttiere) - (var(--cible-min) - var(--ico-m)) / 2) var(--esp-gouttiere);border-block-end:1px solid var(--trait);background:var(--fond);display:flex;position:sticky;inset-block-start:0}.ossature-menu{--bouton-h:var(--cible-min);flex:none}.ossature-barre-page{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;font:var(--t-interface);font-weight:var(--graisse-moyenne);color:var(--texte);flex:1;margin:0;overflow:hidden}.ossature-barre-action{align-items:center;gap:var(--esp-2);flex:none;display:flex}.ossature-barre-action:empty{display:none}.ossature-barre-action>*{--bouton-h:var(--cible-min)}.ossature-contenu{min-inline-size:0}.ossature-contenu:focus-visible{outline-offset:-2px}.ossature-ecran{--vue-max:40rem;justify-items:start;gap:var(--esp-4);padding-block:var(--esp-7);display:grid}.ossature-ecran>h1{color:var(--texte);margin:0}.ossature-ecran>h1:focus-visible{outline-offset:4px}.ossature-ecran-texte{max-inline-size:60ch;color:var(--texte-2);text-wrap:pretty;margin:0}.ossature-ecran-pas{gap:var(--esp-2);color:var(--texte-2);justify-self:stretch;display:grid}.ossature-ecran-pas>p{margin:0}.ossature-ecran-actions{gap:var(--esp-3);flex-wrap:wrap;display:flex}.ossature-appairage{justify-items:start;gap:var(--esp-3);inline-size:min(100%,20rem);display:grid}.ossature-appairage>:first-child{justify-self:stretch}.ossature-attente{padding-block:var(--esp-7)}@media (height<30rem){.ossature-lat,.ossature-barre{position:static}.ossature-lat{block-size:auto;min-block-size:100dvh;overflow:visible}:root:has(.ossature-barre){scroll-padding-block-start:0}}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Dashboard-DKvCQcX8.js","assets/arrow-right-Cx3pAEhl.js","assets/index-COSiM-R9.js","assets/index-BH1etemR.css","assets/charts-BcijSJ4J.js","assets/Table-DUmGel5e.js","assets/Field-C7c2mCbb.js","assets/Register-DA_Aq5f8.js","assets/Dashboard-XdhC6_hM.css","assets/Terminal-Bv1IJfi9.js","assets/circle-stop-C33BAcKW.js","assets/command-ChA49Xk7.js","assets/play-Daw4K_73.js","assets/command-Ck4pdQCv.css","assets/Tabs-CfhbELZk.js","assets/Terminal-CEfj38NV.css","assets/BrainPage-FIWO_9Nc.js","assets/eye-CXXHBBpr.js","assets/plus-D_QHm8ud.js","assets/trash-DLpHM-s8.js","assets/markdown-o5sMhPHN.js","assets/web-6j1-aY67.js","assets/markdown-DF87LQh1.css","assets/BrainPage-XQCEGRc5.css","assets/SavoirPage-Dp3eUCHp.js","assets/SavoirPage-BTxbH3LY.css","assets/Audits-yUBm0EpW.js","assets/auditViews-BMza2Sdz.js","assets/download-CeuKOenD.js","assets/auditViews-BePWj26h.css","assets/AuditModule-BOO_iRy8.js","assets/Reports-8wfDNSxH.js","assets/Reports-B8GXN95N.css","assets/Journal-BaelFjwV.js","assets/habillage-B5mMBadn.js","assets/Journal-BLIIlh80.css","assets/SettingsPage-BiQbnw3o.js","assets/SettingsPage-BElIP46c.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{$ as e,At as t,B as n,C as r,Dt as i,E as a,Et as o,G as s,K as c,Ot as l,R as u,S as d,T as f,Tt as p,U as m,Y as h,_ as ee,h as te,n as g,o as ne,q as re,r as ie,t as _,x as ae,y as oe}from"./index-COSiM-R9.js";import{f as se,n as ce,r as le}from"./Field-C7c2mCbb.js";var v={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};v.node;var y=o(v),b={name:`book-open`,size:24,node:[[`path`,{d:`M12 5v16`,key:`1f6ucr`}],[`path`,{d:`M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z`,key:`1fyvmf`}]]};b.node;var x=o(b),S={name:`brain`,size:24,node:[[`path`,{d:`M12 18V5`,key:`adv99a`}],[`path`,{d:`M15 13a4.17 4.17 0 01-3-4 4.17 4.17 0 01-3 4`,key:`5nuw1p`}],[`path`,{d:`M17.707 6.294A3 3 0 1012 5a3 3 0 10-5.707 1.294`,key:`18ldcf`}],[`path`,{d:`M17.996 5.125a4 4 0 012.526 5.77`,key:`1sdu8q`}],[`path`,{d:`M18 18a4 4 0 002-7.465`,key:`7xqqvr`}],[`path`,{d:`M19.967 17.482a4 4 0 11-7.967.517 4 4 0 11-7.967-.517`,key:`t46ysz`}],[`path`,{d:`M6 18a4 4 0 01-2-7.465`,key:`1y2m15`}],[`path`,{d:`M6.004 5.125a4 4 0 00-2.526 5.77`,key:`3cw1ss`}]]};S.node;var C=o(S),w={name:`file-text`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]};w.node;var T=o(w),E={name:`layout-dashboard`,size:24,node:[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]};E.node;var ue=o(E),D={name:`menu`,size:24,node:[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]};D.node;var de=o(D),O={name:`radar`,size:24,node:[[`path`,{d:`M19.07 4.93A10 10 0 0 0 6.99 3.34`,key:`z3du51`}],[`path`,{d:`M4 6h.01`,key:`oypzma`}],[`path`,{d:`M2.29 9.62A10 10 0 1 0 21.31 8.35`,key:`qzzz0`}],[`path`,{d:`M16.24 7.76A6 6 0 1 0 8.23 16.67`,key:`1yjesh`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}],[`path`,{d:`M17.99 11.66A6 6 0 0 1 15.77 16.67`,key:`1u2y91`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}],[`path`,{d:`m13.41 10.59 5.66-5.66`,key:`mhq4k0`}]]};O.node;var fe=o(O),k={name:`scroll-text`,size:24,node:[[`path`,{d:`M15 12h-5`,key:`r7krc0`}],[`path`,{d:`M15 8h-5`,key:`1khuty`}],[`path`,{d:`M19 17V5a2 2 0 0 0-2-2H4`,key:`zz82l3`}],[`path`,{d:`M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3`,key:`1ph1d7`}]]};k.node;var pe=o(k),A={name:`settings`,size:24,node:[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]};A.node;var j=o(A),M={name:`smartphone`,size:24,node:[[`rect`,{width:`14`,height:`20`,x:`5`,y:`2`,rx:`2`,ry:`2`,key:`1yt0o3`}],[`path`,{d:`M12 18h.01`,key:`mhygvu`}]]};M.node;var me=o(M),N={name:`square-terminal`,size:24,node:[[`path`,{d:`m7 11 2-2-2-2`,key:`1lz0vl`}],[`path`,{d:`M11 13h4`,key:`1p7l4v`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}]],aliases:[`terminal-square`]};N.node;var he=o(N),P=l(),ge=i(),F=(0,P.createContext)(null);function _e(){return(0,P.useContext)(F)!==null}function ve({children:e}){let t=(0,P.useContext)(F);return t?(0,ge.createPortal)(e,t):null}var ye=/^(?:127(?:\.\d{1,3}){3}|localhost|::1|\[::1\]|::ffff:127(?:\.\d{1,3}){3}|\[::ffff:127(?:\.\d{1,3}){3}\])(?::\d+)?$/i;function I(e){return ye.test(e.trim())}var L=`Cette machine seulement`,R=`Console ouverte au\xA0réseau`,z=`Ouverte aussi au\xA0téléphone`,B=e=>e.replace(/^https?:\/\//i,``).replace(/\/$/,``),be=t({default:()=>$}),V=e(),xe=(0,P.lazy)(()=>_(()=>import(`./Dashboard-DKvCQcX8.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8]))),Se=(0,P.lazy)(()=>_(()=>import(`./Terminal-Bv1IJfi9.js`),__vite__mapDeps([9,10,2,3,6,11,12,7,13,14,15]))),Ce=(0,P.lazy)(()=>_(()=>import(`./BrainPage-FIWO_9Nc.js`),__vite__mapDeps([16,6,2,3,10,17,18,19,11,12,7,13,20,21,22,23]))),we=(0,P.lazy)(()=>_(()=>import(`./SavoirPage-Dp3eUCHp.js`),__vite__mapDeps([24,2,3,19,6,7,21,25]))),Te=(0,P.lazy)(()=>_(()=>import(`./Audits-yUBm0EpW.js`),__vite__mapDeps([26,1,2,3,7,27,28,17,18,19,4,5,6,29]))),Ee=(0,P.lazy)(()=>_(()=>import(`./AuditModule-BOO_iRy8.js`),__vite__mapDeps([30,12,2,3,18,6,7,27,28,17,19,4,5,29]))),H=(0,P.lazy)(()=>_(()=>import(`./Reports-8wfDNSxH.js`),__vite__mapDeps([31,1,2,3,4,5,7,14,6,27,28,17,18,19,29,32]))),De=(0,P.lazy)(()=>_(()=>import(`./Journal-BaelFjwV.js`),__vite__mapDeps([33,2,3,34,28,6,7,14,21,11,12,13,35]))),Oe=(0,P.lazy)(()=>_(()=>import(`./SettingsPage-BiQbnw3o.js`),__vite__mapDeps([36,1,2,3,34,18,19,6,7,14,37]))),U=[{route:{page:`dashboard`},label:`Tableau de bord`,Icon:ue},{route:{page:`terminal`},label:`Terminal`,Icon:he,ecart:!0},{route:{page:`brain`},label:`Cerveau`,Icon:C},{route:{page:`savoir`},label:`Savoir`,Icon:x},{route:{page:`audits`},label:`Audits`,Icon:fe,ecart:!0},{route:{page:`reports`},label:`Rapports`,Icon:T},{route:{page:`journal`},label:`Journal`,Icon:pe,ecart:!0},{route:{page:`settings`},label:`Réglages`,Icon:j,ecart:!0}],W=(e,t)=>e.page===t.page||e.page===`audits`&&t.page===`audit`,G=e=>U.find(t=>W(t.route,e))?.label??`Console`;function K({route:e,tiroir:t=!1,lienCourant:n,onChoix:r}){return(0,V.jsx)(`nav`,{className:`ossature-nav`,"aria-label":`Navigation de la console`,"data-tiroir":t?``:void 0,children:(0,V.jsx)(`ul`,{className:`ossature-liens`,children:U.map(({route:t,label:i,Icon:a,ecart:o})=>{let s=W(t,e);return(0,V.jsx)(`li`,{"data-ecart":o?``:void 0,children:(0,V.jsxs)(`a`,{className:`ossature-lien`,href:g(t),"aria-current":s?`page`:void 0,ref:s?n:void 0,onClick:r,children:[(0,V.jsx)(a,{"aria-hidden":`true`}),i]})},i)})})})}function q({issue:e,nom:t,children:n}){return(0,V.jsxs)(`div`,{className:`ossature-systeme`,children:[(0,V.jsxs)(`dt`,{className:`ossature-systeme-nom`,children:[(0,V.jsx)(m,{kind:e}),t]}),(0,V.jsx)(`dd`,{className:`ossature-systeme-valeur`,children:n})]})}function ke({listen:e,telephone:t}){return e===null?(0,V.jsx)(`p`,{className:`ossature-ecoute`,children:(0,V.jsx)(n,{signs:18})}):I(e)&&t?.active?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`p`,{className:`ossature-ecoute`,children:z}),t.urls[0]?(0,V.jsx)(`p`,{className:`ossature-ecoute-adresse`,children:B(t.urls[0])}):null]}):I(e)?(0,V.jsx)(`p`,{className:`ossature-ecoute`,children:L}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`p`,{className:`ossature-ecoute`,"data-exposee":``,children:[(0,V.jsx)(m,{kind:`a-toi`}),R]}),(0,V.jsx)(`p`,{className:`ossature-ecoute-adresse`,children:e})]})}function J(){let e=a(),{version:t}=d(),i=f(),o=r(),s=Math.max(e?.engine.running??0,o),c=e?e.ollama.available?e.models.selected?[`reussie`,e.models.selected]:[`a-toi`,`aucun modèle`]:[`echec`,`injoignable`]:[`neutre`,(0,V.jsx)(n,{signs:12},`s`)],l=e?e.engine.available?s>0?[`en-cours`,`${s} en cours`]:[`reussie`,`PowerShell ${e.engine.version?.split(`.`).slice(0,2).join(`.`)??``}`.trim()]:[`echec`,`indisponible`]:[`neutre`,(0,V.jsx)(n,{signs:14},`s`)];return(0,V.jsxs)(`div`,{className:`ossature-etat`,children:[(0,V.jsxs)(`dl`,{className:`ossature-systemes`,children:[(0,V.jsx)(q,{issue:c[0],nom:`Ollama`,children:c[1]}),(0,V.jsx)(q,{issue:l[0],nom:`Moteur`,children:l[1]}),i>o?(0,V.jsx)(q,{issue:`en-cours`,nom:`Activité`,children:`en cours`}):null]}),(0,V.jsxs)(`div`,{className:`ossature-instance`,children:[(0,V.jsxs)(`p`,{className:`ossature-version`,children:[`Prométhée`,t?` ${t}`:``]}),(0,V.jsx)(ke,{listen:e?.server.listen??null,telephone:e?.server.phone??null})]})]})}function Y(){return(0,V.jsxs)(`a`,{className:`ossature-retour`,href:`#accueil`,children:[(0,V.jsx)(y,{"aria-hidden":`true`}),`Présentation`]})}function Ae(){let{retry:e,phase:t}=d();return t===`statique`?(0,V.jsx)(`div`,{className:`vue`,children:(0,V.jsxs)(`div`,{className:`vue-contenu ossature-ecran`,children:[(0,V.jsx)(`h1`,{className:`t-titre-2`,tabIndex:-1,children:`Console injoignable depuis cette page`}),(0,V.jsxs)(`p`,{className:`ossature-ecran-texte`,children:[`La console est un serveur local. Telle qu’elle est livrée, elle n’écoute que sur 127.0.0.1`,`\xA0`,`: une page publiée ne peut pas la joindre.`]}),(0,V.jsxs)(`div`,{className:`ossature-ecran-actions`,children:[(0,V.jsx)(c,{variant:`feu`,href:`#demarrer`,children:`Installer la console`}),(0,V.jsx)(c,{variant:`nu`,href:`#accueil`,icon:(0,V.jsx)(y,{"aria-hidden":`true`}),children:`Retour à la présentation`})]})]})}):(0,V.jsx)(`div`,{className:`vue`,children:(0,V.jsxs)(`div`,{className:`vue-contenu ossature-ecran`,children:[(0,V.jsx)(`h1`,{className:`t-titre-2`,tabIndex:-1,children:`Le serveur local ne répond pas`}),(0,V.jsx)(`p`,{className:`ossature-ecran-texte`,children:`La console ne simule rien. Sans le serveur local de Prométhée, elle ne peut ni exécuter une commande, ni interroger le modèle, ni lancer un audit.`}),(0,V.jsxs)(`div`,{className:`ossature-ecran-pas`,children:[(0,V.jsxs)(`p`,{children:[`Dans le dossier du projet`,`\xA0`,`:`]}),(0,V.jsx)(se,{as:`bloc`,code:`npm start`}),(0,V.jsx)(`p`,{children:`puis ouvre l’adresse affichée, ou recharge cette page.`})]}),(0,V.jsxs)(`div`,{className:`ossature-ecran-actions`,children:[(0,V.jsx)(s,{icon:(0,V.jsx)(p,{"aria-hidden":`true`}),onClick:e,children:`Réessayer`}),(0,V.jsx)(c,{variant:`nu`,href:`#accueil`,icon:(0,V.jsx)(y,{"aria-hidden":`true`}),children:`Retour à la présentation`})]}),(0,V.jsx)(`p`,{className:`phrase-note`,children:`Nouvelles tentatives automatiques, de plus en plus espacées.`})]})})}function je(){let{pair:e,pairingError:t}=d(),[n,r]=(0,P.useState)(``),[i,a]=(0,P.useState)(!1),o=n.replace(/[^A-Z0-9]/g,``);return(0,V.jsx)(`div`,{className:`vue`,children:(0,V.jsxs)(`div`,{className:`vue-contenu ossature-ecran`,children:[(0,V.jsx)(`h1`,{className:`t-titre-2`,tabIndex:-1,children:`Appairer ce téléphone`}),(0,V.jsx)(`p`,{className:`ossature-ecran-texte`,children:`La console tourne sur ton PC. Pour l’ouvrir ici, ce téléphone doit être appairé une fois avec elle.`}),(0,V.jsx)(`p`,{className:`ossature-ecran-texte`,children:`Sur le PC, ouvre Réglages, Téléphone. Scanne le QR code avec l’appareil photo, ou tape ici le code affiché.`}),(0,V.jsxs)(`form`,{className:`ossature-appairage`,onSubmit:t=>{t.preventDefault(),o.length!==8||i||(a(!0),e(o).then(e=>{e&&a(!1)}))},children:[(0,V.jsx)(ce,{label:`Code d’appairage`,help:`8 caractères, valable 10 minutes.`,error:t??void 0,children:(0,V.jsx)(le,{mono:!0,value:n,onChange:e=>r(e.target.value.toUpperCase()),maxLength:9,placeholder:`ABCD-EFGH`,autoComplete:`off`,autoCapitalize:`characters`,autoCorrect:`off`,inputMode:`text`,spellCheck:!1})}),(0,V.jsx)(s,{type:`submit`,variant:`feu`,icon:(0,V.jsx)(me,{"aria-hidden":`true`}),busy:i,disabled:o.length!==8,children:`Appairer`})]})]})})}function X({label:e}){return(0,V.jsx)(`div`,{className:`vue`,children:(0,V.jsx)(`div`,{className:`vue-contenu ossature-attente`,children:(0,V.jsx)(u,{label:e})})})}function Me({route:e}){switch(e.page){case`dashboard`:return(0,V.jsx)(xe,{});case`terminal`:return(0,V.jsx)(Se,{});case`brain`:return(0,V.jsx)(Ce,{});case`savoir`:return(0,V.jsx)(we,{});case`audits`:return(0,V.jsx)(Te,{});case`audit`:return(0,V.jsx)(Ee,{module:e.module},e.module);case`reports`:return(0,V.jsx)(H,{});case`journal`:return(0,V.jsx)(De,{});case`settings`:return(0,V.jsx)(Oe,{partie:e.partie})}}var Z=e=>typeof e.checkVisibility==`function`?e.checkVisibility():!e.closest(`[style*="display: none"]`);function Q(e){let t=[...e.querySelectorAll(`h1`)].find(Z)??null;return t&&!t.hasAttribute(`tabindex`)&&(t.tabIndex=-1),t}function Ne(e,t){(0,P.useEffect)(()=>{let e=t.current;if(!e||!ie())return;let n=()=>{let t=document.activeElement;if(t instanceof HTMLElement&&t!==e&&e.contains(t)&&Z(t))return!0;let n=Q(e);return n?(n.focus({preventScroll:!0}),!0):!1},r=new MutationObserver(()=>{n()&&r.disconnect()}),i=requestAnimationFrame(()=>{n()||r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`style`]})}),a=window.setTimeout(()=>r.disconnect(),1e4);return()=>{cancelAnimationFrame(i),r.disconnect(),window.clearTimeout(a)}},[e,t])}function $({route:e}){let{phase:t}=d(),n=ee(te),r=ae(),i=(0,P.useRef)(null),a=(0,P.useRef)(null),[o,s]=(0,P.useState)(null),c=t===`online`||t===`connecting`,l=g(e),[u,f]=(0,P.useState)(`ferme`),[p,m]=(0,P.useState)(l);return p!==l&&(m(l),u===`ouvert`&&f(`choisi`)),(n||!c)&&u===`ouvert`&&f(`ferme`),Ne(t===`online`?l:t,i),(0,P.useEffect)(()=>(document.title=`${G(e)} · Prométhée`,()=>{document.title=`Prométhée`}),[e]),(0,V.jsx)(oe,{children:(0,V.jsxs)(`div`,{className:`ossature`,"data-forme":n?`large`:`etroite`,children:[(0,V.jsx)(`button`,{type:`button`,className:`ossature-evitement`,onClick:()=>{let e=i.current;e&&(Q(e)??e).focus()},children:`Aller au contenu`}),n?(0,V.jsxs)(`div`,{className:`ossature-lat`,children:[(0,V.jsxs)(`p`,{className:`ossature-marque`,children:[(0,V.jsx)(h,{className:`ossature-flamme`,animated:r}),(0,V.jsxs)(`span`,{className:`ossature-nom`,children:[(0,V.jsx)(`span`,{className:`t-titre-3`,children:`Prométhée`}),(0,V.jsx)(`span`,{className:`ossature-sous-nom`,children:`console locale`})]})]}),c?(0,V.jsx)(K,{route:e}):null,(0,V.jsxs)(`div`,{className:`ossature-pied`,children:[t===`online`?(0,V.jsx)(J,{}):null,(0,V.jsx)(Y,{})]})]}):(0,V.jsxs)(`header`,{className:`ossature-barre`,children:[c?(0,V.jsx)(re,{className:`ossature-menu`,label:`Ouvrir le menu`,icon:(0,V.jsx)(de,{}),"aria-haspopup":`dialog`,"aria-expanded":u===`ouvert`,onClick:()=>f(`ouvert`)}):null,(0,V.jsx)(h,{className:`ossature-flamme`,animated:r}),(0,V.jsx)(`p`,{className:`ossature-barre-page`,children:c?G(e):`Prométhée`}),(0,V.jsx)(`div`,{ref:s,className:`ossature-barre-action`,id:`ossature-action`})]}),!n&&c?(0,V.jsx)(ne,{side:`gauche`,title:`Menu`,hideTitle:!0,closeLabel:`Fermer le menu`,open:u===`ouvert`,instant:u===`choisi`,onClose:()=>f(`ferme`),initialFocus:a,children:(0,V.jsxs)(`div`,{className:`ossature-tiroir`,children:[(0,V.jsx)(K,{route:e,tiroir:!0,lienCourant:a,onChoix:()=>f(`choisi`)}),(0,V.jsxs)(`div`,{className:`ossature-pied`,children:[t===`online`?(0,V.jsx)(J,{}):null,(0,V.jsx)(Y,{})]})]})}):null,(0,V.jsx)(`main`,{ref:i,id:`contenu`,className:`ossature-contenu`,tabIndex:-1,children:t===`online`?(0,V.jsx)(F.Provider,{value:n?null:o,children:(0,V.jsx)(P.Suspense,{fallback:(0,V.jsx)(X,{label:`Chargement de la page`}),children:(0,V.jsx)(Me,{route:e})})}):t===`connecting`?(0,V.jsx)(X,{label:`Connexion au serveur local`}):t===`appairage`?(0,V.jsx)(je,{}):(0,V.jsx)(Ae,{})})]})})}export{I as a,_e as c,C as d,$ as default,x as f,z as i,j as l,R as n,B as o,y as p,L as r,ve as s,be as t,T as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as e,ct as t}from"./index-COSiM-R9.js";var n=e();function r({caption:e,showCaption:r=!1,columns:i,rows:a,rowKey:o,stack:s=`44`,selected:c,className:l}){return(0,n.jsx)(`div`,{className:`releve-zone`,children:(0,n.jsxs)(`table`,{className:t(`releve`,l),role:`table`,"data-empile":s,children:[(0,n.jsx)(`caption`,{className:r?`releve-legende`:`sr`,children:e}),(0,n.jsx)(`thead`,{role:`rowgroup`,children:(0,n.jsx)(`tr`,{role:`row`,children:i.map(e=>(0,n.jsx)(`th`,{role:`columnheader`,scope:`col`,className:`t-etiquette`,"data-priorite":e.priority??1,"data-align":e.align??`debut`,children:e.label},e.key))})}),(0,n.jsx)(`tbody`,{role:`rowgroup`,children:a.map(e=>(0,n.jsx)(`tr`,{role:`row`,"data-choisie":c?.(e)?``:void 0,children:i.map(t=>(0,n.jsx)(`td`,{role:`cell`,"data-rubrique":t.label,"data-priorite":t.priority??1,"data-align":t.align??`debut`,children:t.render(e)},t.key))},o(e)))})]})})}export{r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as e,Ot as t,ct as n,g as r,m as i}from"./index-COSiM-R9.js";import{o as a}from"./Field-C7c2mCbb.js";var o=t(),s=e(),c=(e,t)=>`${e}-onglet-${t}`,l=(e,t)=>`${e}-panneau-${t}`;function u({id:e,label:t,value:r,onChange:i,tabs:a,className:o}){let u=t=>{t&&(i(t.id),document.getElementById(c(e,t.id))?.focus())};return(0,s.jsx)(`div`,{className:n(`onglets`,o),role:`tablist`,"aria-label":t,onKeyDown:e=>{let t=a.findIndex(e=>e.id===r),n=a.length,i=e.key===`ArrowRight`?a[(t+1)%n]:e.key===`ArrowLeft`?a[(t-1+n)%n]:e.key===`Home`?a[0]:e.key===`End`?a[n-1]:void 0;i&&(e.preventDefault(),u(i))},children:a.map(t=>{let n=t.id===r;return(0,s.jsxs)(`button`,{type:`button`,role:`tab`,id:c(e,t.id),className:`onglet`,"aria-selected":n,"aria-controls":l(e,t.id),tabIndex:n?0:-1,onClick:()=>i(t.id),children:[t.icon,t.label]},t.id)})})}var d=`a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])`;function f({tabs:e,id:t,active:r,children:i,className:a}){let u=(0,o.useRef)(null),[f,p]=(0,o.useState)(!0);return(0,o.useLayoutEffect)(()=>{let e=u.current;e&&p(!e.querySelector(d))}),(0,s.jsx)(`div`,{ref:u,role:`tabpanel`,id:l(e,t),"aria-labelledby":c(e,t),hidden:!r,tabIndex:f?0:void 0,className:n(`onglet-panneau`,a),children:i})}function p({label:e,value:t,onChange:r,options:i,collapse:c=!1,className:l}){let u=(0,o.useRef)(null),d=m(u,c&&i.length>4),f=e=>e.count===void 0?e.label:`${e.label} (${e.count})`;return(0,s.jsx)(`div`,{ref:u,className:n(`segmente`,l),"data-replie":d?``:void 0,children:d?(0,s.jsx)(a,{"aria-label":e,value:t,onChange:e=>r(e.target.value),children:i.map(e=>(0,s.jsx)(`option`,{value:e.value,children:f(e)},e.value))}):(0,s.jsx)(`div`,{className:`segmente-groupe`,role:`group`,"aria-label":e,children:i.map(e=>(0,s.jsxs)(`button`,{type:`button`,className:`segment`,"aria-pressed":e.value===t,onClick:()=>r(e.value),children:[e.label,e.count===void 0?null:` `,e.count===void 0?null:(0,s.jsx)(`span`,{className:`segment-compte num`,children:e.count})]},e.value))})})}function m(e,t){let[n,a]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{let n=e.current;if(!t||!n||typeof ResizeObserver>`u`){a(!1);return}let o=r(),s=new ResizeObserver(([e])=>a((e?.contentRect.width??1/0)<i*o));return s.observe(n),()=>s.disconnect()},[e,t]),n}export{f as n,u as r,p as t};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{t as e}from"./circle-stop-C33BAcKW.js";import{$ as t,A as n,Ct as r,E as i,Et as a,G as o,H as s,I as c,L as l,M as u,O as ee,Ot as d,P as f,R as p,S as te,V as m,_ as ne,_t as h,b as re,dt as g,f as _,g as v,mt as y,n as b,o as ie,p as ae,w as x,yt as S,z as C}from"./index-COSiM-R9.js";import{c as oe,d as w,f as T,u as E}from"./Field-C7c2mCbb.js";import{o as se,s as ce,t as D}from"./command-ChA49Xk7.js";import{n as O,r as k}from"./Tabs-CfhbELZk.js";import{c as le,s as ue}from"./Shell-CQRlx9-V.js";var A={name:`corner-down-left`,size:24,node:[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`,key:`6o5b7l`}],[`path`,{d:`m9 10-5 5 5 5`,key:`1kshq7`}]]};A.node;var de=a(A),j={name:`folder-open`,size:24,node:[[`path`,{d:`m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2`,key:`usdka0`}]]};j.node;var fe=a(j),M={name:`list-checks`,size:24,node:[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}]]};M.node;var pe=a(M),N=d(),P=t(),F=4e5,I=[{label:`Ports en écoute`,command:`Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess | Sort-Object LocalPort`},{label:`Configuration réseau`,command:`ipconfig /all`},{label:`État du pare-feu`,command:`Get-NetFirewallProfile | Select-Object Name, Enabled`},{label:`Processus les plus gourmands`,command:`Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU`},{label:`Comptes locaux`,command:`Get-LocalUser | Select-Object Name, Enabled, LastLogon`},{label:`Identité et privilèges`,command:`whoami /all`},{label:`Résolution DNS`,command:`Resolve-DnsName example.org`},{label:`Modèles Ollama installés`,command:`ollama list`}],L=[{cle:`cd <dossier>`,role:`changer de dossier (dans tes dossiers autorisés)`},{cle:`clear`,role:`effacer l’affichage`},{cle:`aide`,role:`afficher ce rappel`}],R=[{touches:[`Entrée`],lien:``,role:`analyser puis exécuter`},{touches:[`Maj`,`Entrée`],lien:` + `,role:`nouvelle ligne`},{touches:[`↑`,`↓`],lien:` / `,role:`historique`},{touches:[`Échap`],lien:``,role:`annuler la commande en cours`}],z=`Toute autre saisie est une commande PowerShell. Elle est analysée, puis classée dans l’un de ces niveaux\xA0:`,B=[`Invoke-Expression`,`cmd`,`powershell`],me=[`Commandes du terminal`,...L.map(e=>` ${e.cle.padEnd(14)} ${e.role}`),``,`Touches`,...R.map(e=>` ${e.touches.join(e.lien).padEnd(14)} ${e.role}`),``,z].join(`
|
|
2
|
+
`);function he(e,t){let n=e[e.length-1],r=n&&n.stream===t.stream?[...e.slice(0,-1),{stream:n.stream,text:n.text+t.text}]:[...e,t],i=r.reduce((e,t)=>e+t.text.length,0);for(;i>F&&r.length>1;)i-=r.shift()?.text.length??0;return r}var V=e=>e.split(`\\`).pop()||e;function H(e){let[t,n]=(0,N.useState)(()=>Date.now());return(0,N.useEffect)(()=>{if(e===null)return;let t=setInterval(()=>n(Date.now()),1e3);return()=>clearInterval(t)},[e]),e===null?null:Math.max(0,Math.floor((t-e)/1e3))}var U=e=>e<60?`${e}\u00a0s`:`${Math.floor(e/60)}\u00a0min ${e%60}\u00a0s`;function ge({entry:t,onCancel:n}){let{end:i,preview:a}=t,c=a?r(a.verdict.level):null,l=H(t.status===`running`?t.startedAt:null),u=i?S(i):null;return(0,P.jsxs)(`div`,{className:`terminal-cmd`,"data-etat":t.status,"aria-busy":t.status===`running`||void 0,children:[(0,P.jsxs)(`div`,{className:`terminal-invite`,children:[(0,P.jsxs)(`span`,{className:`terminal-prompt`,children:[V(t.cwd),(0,P.jsx)(`span`,{"aria-hidden":`true`,children:` ❯`})]}),(0,P.jsx)(T,{as:`bloc`,className:`terminal-tapee`,code:t.command})]}),t.status===`analyzing`?(0,P.jsx)(p,{label:`Analyse de la commande`}):null,t.status===`refused`&&t.preview?(0,P.jsx)(D,{verdict:t.preview.verdict,frais:!0,className:`terminal-pleine`}):null,t.output.length>0?(0,P.jsx)(w,{className:`terminal-sortie`,children:t.output.map((e,t)=>e.stream===`stderr`?(0,P.jsx)(`span`,{className:`terminal-err`,children:e.text},t):e.text)}):null,t.status===`error`?(0,P.jsx)(C,{issue:`echec`,word:`Échec`,className:`terminal-pleine`,children:t.error??`Erreur inconnue.`}):null,t.status===`awaiting`?(0,P.jsx)(`p`,{className:`terminal-etat`,children:(0,P.jsx)(m,{kind:`a-toi`})}):null,t.status===`dismissed`?(0,P.jsx)(`p`,{className:`terminal-etat`,children:(0,P.jsx)(m,{kind:h.kind,mot:h.mot})}):null,t.status===`running`?(0,P.jsxs)(`p`,{className:`terminal-etat`,children:[(0,P.jsx)(m,{kind:`en-cours`,detail:l!==null&&l>=1?U(l):void 0}),(0,P.jsx)(o,{size:`s`,className:`terminal-arreter`,icon:(0,P.jsx)(e,{"aria-hidden":`true`}),onClick:n,children:`Annuler`})]}):null,u&&i?(0,P.jsxs)(`p`,{className:`terminal-etat`,children:[(0,P.jsx)(m,{kind:u.kind,mot:u.mot}),(0,P.jsx)(`span`,{children:g(i.durationMs)}),c?(0,P.jsx)(s,{level:c}):null,i.truncated?(0,P.jsxs)(`span`,{children:[`sortie coupée à 1`,`\xA0`,`Mo`]}):null,t.output.length===0&&!i.cancelled?(0,P.jsx)(`span`,{children:`aucune sortie`}):null]}):null]})}function _e(e){let[t,n]=(0,N.useState)(()=>typeof ResizeObserver>`u`);return(0,N.useLayoutEffect)(()=>{let t=e.current;if(!t||typeof ResizeObserver>`u`)return;let r=()=>_[2]*v(),i=getComputedStyle(t);n(t.clientWidth-Number.parseFloat(i.paddingLeft)-Number.parseFloat(i.paddingRight)>=r());let a=new ResizeObserver(([e])=>{e&&n(e.contentRect.width>=r())});return a.observe(t),()=>a.disconnect()},[e]),t}var W=[{id:`exemples`,label:`Exemples`},{id:`historique`,label:`Historique`},{id:`aide`,label:`Aide`}];function ve({onglet:e,onOnglet:t,onChoisir:n,past:r,journalCharge:i,autorisees:a,verrouillees:o,lectureAussitot:l}){let u=(0,N.useId)();return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(k,{id:u,label:`Aide à la saisie`,value:e,onChange:e=>t(e),tabs:W}),(0,P.jsxs)(`div`,{className:`terminal-panneau-defile`,children:[(0,P.jsx)(O,{tabs:u,id:`exemples`,active:e===`exemples`,children:(0,P.jsx)(`ul`,{className:`terminal-exemples`,children:I.map(e=>(0,P.jsx)(`li`,{children:(0,P.jsxs)(`button`,{type:`button`,className:`terminal-exemple`,onClick:()=>n(e.command),children:[(0,P.jsx)(`span`,{className:`terminal-exemple-nom`,children:e.label}),(0,P.jsx)(T,{code:e.command})]})},e.command))})}),(0,P.jsx)(O,{tabs:u,id:`historique`,active:e===`historique`,children:r.length>0?(0,P.jsx)(`ul`,{className:`terminal-exemples`,children:r.map(e=>(0,P.jsx)(`li`,{children:(0,P.jsx)(`button`,{type:`button`,className:`terminal-exemple`,onClick:()=>n(e),children:(0,P.jsx)(T,{code:e})})},e))}):i?(0,P.jsx)(p,{label:`Lecture du journal`}):(0,P.jsx)(c,{children:`Aucune commande pour l’instant. Celles que tu lances s’ajoutent ici, lues dans le journal.`})}),(0,P.jsx)(O,{tabs:u,id:`aide`,active:e===`aide`,children:(0,P.jsxs)(`div`,{className:`terminal-aide-corps`,children:[(0,P.jsx)(`dl`,{className:`terminal-aide-liste`,children:L.map(e=>(0,P.jsxs)(`div`,{className:`terminal-aide-ligne`,children:[(0,P.jsx)(`dt`,{children:(0,P.jsx)(T,{code:e.cle})}),(0,P.jsx)(`dd`,{children:e.role})]},e.cle))}),(0,P.jsx)(`dl`,{className:`terminal-aide-liste`,children:R.map(e=>(0,P.jsxs)(`div`,{className:`terminal-aide-ligne`,children:[(0,P.jsx)(`dt`,{children:e.touches.map((t,n)=>(0,P.jsxs)(`span`,{children:[n>0?e.lien:null,(0,P.jsx)(E,{children:t})]},t))}),(0,P.jsx)(`dd`,{children:e.role})]},e.role))}),(0,P.jsxs)(`div`,{className:`terminal-aide-corps-niveaux`,children:[(0,P.jsx)(`p`,{className:`terminal-aide-phrase`,children:z}),(0,P.jsx)(`dl`,{className:`terminal-aide-liste`,children:G(l).map(e=>(0,P.jsxs)(`div`,{className:`terminal-aide-ligne`,children:[(0,P.jsx)(`dt`,{children:(0,P.jsx)(s,{level:e.level})}),(0,P.jsx)(`dd`,{children:e.suite})]},e.level))})]}),(0,P.jsxs)(`p`,{className:`phrase-note`,children:[`Jamais exécutés`,`\xA0`,`:`,` `,B.map(e=>(0,P.jsxs)(`span`,{children:[(0,P.jsx)(T,{code:e}),`,`,` `]},e)),`appels .NET, scripts lancés par chemin.`]})]})})]}),(0,P.jsxs)(`p`,{className:`phrase-note terminal-politique`,children:[`Refus par défaut`,a!==null&&o!==null?` : ${y(a)}\u00a0commandes autorisées, ${y(o)}\u00a0destructrices`:``,`.`,` `,(0,P.jsx)(`a`,{className:`terminal-lien`,href:b({page:`settings`,partie:`liste-blanche`}),children:`Voir la liste blanche`})]})]})}var G=e=>[{level:`read`,suite:e?`lancée aussitôt`:`après ton accord`},{level:`sensitive`,suite:`case à cocher`},{level:`destructive`,suite:`refusée par défaut`},{level:`forbidden`,suite:`refusée`}];function K(e,t){let[n,r]=(0,N.useState)(!1);return(0,N.useLayoutEffect)(()=>{let t=e.current;if(!t||typeof ResizeObserver>`u`)return;let n=()=>{let e=[...t.children],n=(Number.parseFloat(getComputedStyle(t).columnGap)||0)*(e.length-1);for(let t of e){let e=[...t.children];n+=(Number.parseFloat(getComputedStyle(t).columnGap)||0)*(e.length-1);for(let t of e){let e=document.createRange();e.selectNodeContents(t),n+=e.getBoundingClientRect().width}}r(n+1<=t.getBoundingClientRect().width)};n();let i=new ResizeObserver(n);return i.observe(t),document.fonts?.ready.then(n),()=>i.disconnect()},[e,t]),n}function ye({lectureAussitot:e}){let t=(0,N.useRef)(null),n=G(e),r=K(t,n.map(e=>e.suite).join());return(0,P.jsx)(`ul`,{ref:t,className:`terminal-niveaux`,"aria-label":`Niveaux des commandes`,"data-suites":r?``:void 0,children:n.map(e=>(0,P.jsxs)(`li`,{className:`terminal-niveau`,children:[(0,P.jsx)(s,{level:e.level}),` `,(0,P.jsx)(`span`,{className:`terminal-niveau-suite`,children:e.suite})]},e.level))})}function q(){let e=i(),{report:t}=te(),r=ee(),a=x(`/api/settings`),s=a.data?.engine.confirmRead===!1,c=x(`/api/journal?kind=command&limit=40`),[d,p]=(0,N.useState)(null),[m,h]=(0,N.useState)([]),[g,_]=(0,N.useState)(``),[v,y]=(0,N.useState)([]),[b,S]=(0,N.useState)(null),[w,E]=(0,N.useState)(null),[D,O]=(0,N.useState)(!1),[k,A]=(0,N.useState)(`exemples`),[j,M]=(0,N.useState)(!1),F=ne(ae.etroit),I=(0,N.useRef)(1),L=(0,N.useRef)(null),R=(0,N.useRef)(null),z=(0,N.useRef)(null),B=(0,N.useRef)(!0),V=(0,N.useRef)(!1),H=_e(L),U=le();(0,N.useEffect)(()=>{n(`GET`,`/api/engine/cwd`).then(e=>p(e.cwd)).catch(e=>{t(e),h(t=>[...t,{kind:`note`,id:I.current++,tone:`erreur`,text:f(e)}])})},[t]);let W=e!==null&&!e.engine.available,G=d!==null&&!W;(0,N.useEffect)(()=>{G&&z.current?.focus()},[G]),(0,N.useEffect)(()=>{!D&&!j&&V.current&&(V.current=!1,z.current?.focus())},[D,j]),(0,N.useEffect)(()=>{H&&M(!1)},[H]),(0,N.useEffect)(()=>{let e=R.current;e&&B.current&&(e.scrollTop=e.scrollHeight)},[m]);let K=(0,N.useMemo)(()=>{let e=new Set,t=[];for(let n of c.data?.entries??[]){let r=typeof n.data?.command==`string`?n.data.command:null;r&&!e.has(r)&&(e.add(r),t.push(r))}return t.slice(0,20)},[c.data]),q=(0,N.useCallback)((e,t)=>{h(n=>n.map(n=>n.kind===`command`&&n.id===e?t(n):n))},[]),J=(0,N.useCallback)((e,t=`info`)=>{h(n=>[...n,{kind:`note`,id:I.current++,tone:t,text:e}])},[]),Y=(0,N.useCallback)(async(e,n,r,i)=>{q(e,e=>({...e,status:`running`,startedAt:Date.now()}));let a=re();try{await u(`/api/engine/run`,{ticket:n.ticket,confirm:!0,acknowledge:r,confirmation:i},t=>{t.type===`start`?q(e,e=>({...e,execId:t.execId})):t.type===`out`?q(e,e=>({...e,output:he(e.output,{stream:t.stream,text:t.text})})):t.type===`end`?q(e,e=>({...e,status:`done`,end:t})):q(e,e=>({...e,status:`error`,error:t.message}))}),q(e,e=>e.status===`running`?{...e,status:`error`,error:`La connexion s’est interrompue avant la fin de la commande.`}:e)}catch(n){t(n),q(e,e=>({...e,status:`error`,error:f(n)}))}finally{a()}c.reload()},[q,t,c]),X=(0,N.useCallback)(async e=>{let r=e.trim();if(!r||d===null)return;if(_(``),S(null),y(e=>e[e.length-1]===r?e:[...e,r].slice(-100)),B.current=!0,/^(clear|cls)$/i.test(r))return h([]);if(/^(aide|help|\?)$/i.test(r))return J(me);let i=/^(?:cd|chdir|sl|set-location)(?:\s+(.+))?$/i.exec(r);if(i){let e=i[1]?.trim().replace(/^["']|["']$/g,``);if(!e)return J(d);try{let t=await n(`POST`,`/api/engine/cwd`,{from:d,to:e});p(t.cwd),J(`Dossier courant\u00a0: ${t.cwd}`)}catch(e){t(e),J(f(e),`erreur`)}return}let o=I.current++;h(e=>[...e,{kind:`command`,id:o,command:r,cwd:d,status:`analyzing`,preview:null,output:[],execId:null,startedAt:null,end:null,error:null}]);try{let e=await n(`POST`,`/api/engine/preview`,{command:r,cwd:d});if(!e.ticket||!ce(e)){q(o,t=>({...t,status:`refused`,preview:e}));return}q(o,t=>({...t,status:`awaiting`,preview:e})),e.verdict.level===`read`&&a.data?.engine.confirmRead===!1?Y(o,e,!1,`auto`):(E({id:o,preview:e}),O(!0))}catch(e){t(e),q(o,t=>({...t,status:`error`,error:f(e)}))}},[d,J,q,t,Y,a.data]),Z=(0,N.useCallback)(async e=>{if(e.execId)try{await n(`POST`,`/api/engine/cancel`,{execId:e.execId})}catch(e){r(`erreur`,`Annulation impossible`,f(e))}},[r]),Q=m.find(e=>e.kind===`command`&&e.status===`running`),be=e=>{if(e.key===`Enter`&&!e.shiftKey)e.preventDefault(),X(g);else if(e.key===`Escape`&&Q)e.preventDefault(),Z(Q);else if((e.key===`ArrowUp`||e.key===`ArrowDown`)&&!g.includes(`
|
|
3
|
+
`)&&v.length>0){e.preventDefault();let t=b===null?e.key===`ArrowUp`?v.length-1:null:b+(e.key===`ArrowUp`?-1:1);if(t===null||t>=v.length)S(null),_(``);else{let e=Math.max(0,t);S(e),_(v[e]??``)}}},xe=e=>{_(e),S(null),j?(V.current=!0,M(!1)):z.current?.focus()},$=()=>{V.current=!0,O(!1)},Se=(0,P.jsx)(ve,{onglet:k,onOnglet:A,onChoisir:xe,past:K,journalCharge:c.loading,autorisees:e?e.policy.read+e.policy.sensitive:null,verrouillees:e?e.policy.destructive:null,lectureAussitot:s}),Ce=H?null:(0,P.jsx)(o,{size:U?void 0:`s`,icon:(0,P.jsx)(pe,{"aria-hidden":`true`}),className:`terminal-ouvrir`,"aria-haspopup":`dialog`,"aria-expanded":j,onClick:()=>M(!0),children:`Exemples`});return(0,P.jsxs)(`div`,{className:`vue terminal-vue`,children:[(0,P.jsxs)(`div`,{ref:L,className:`vue-contenu terminal-page`,children:[(0,P.jsx)(ue,{children:Ce}),(0,P.jsxs)(`header`,{className:`terminal-entete`,"data-barre":U?``:void 0,children:[(0,P.jsx)(`h1`,{className:U?`t-titre-2 terminal-titre sr`:`t-titre-2 terminal-titre`,tabIndex:-1,children:`Terminal`}),(0,P.jsxs)(`p`,{className:`terminal-moteur`,children:[e?.engine.version?(0,P.jsxs)(`span`,{className:`terminal-version`,children:[`PowerShell `,e.engine.version]}):null,(0,P.jsx)(`span`,{children:e?.engine.constrained===!1?`langage complet`:`langage contraint`})]}),(0,P.jsxs)(`p`,{className:`terminal-cwd`,children:[(0,P.jsx)(fe,{"aria-hidden":`true`}),(0,P.jsxs)(`span`,{className:`terminal-chemin`,children:[(0,P.jsx)(`span`,{className:`sr`,children:`Dossier courant : `}),(0,P.jsx)(`bdi`,{children:d??`…`})]})]}),U?null:Ce]}),W?(0,P.jsx)(l,{message:`Le moteur d’exécution n’est pas disponible : ${(e.engine.error??`PowerShell ne répond pas`).replace(/\.$/,``)}. Aucune commande ne peut s’exécuter.`}):null,(0,P.jsxs)(`div`,{className:`terminal-corps`,children:[(0,P.jsxs)(`div`,{className:`terminal-poste`,children:[(0,P.jsxs)(`div`,{ref:R,className:`terminal-affichage`,role:`log`,"aria-label":`Écran du terminal`,onScroll:e=>{let t=e.currentTarget;B.current=t.scrollHeight-t.scrollTop-t.clientHeight<40},onClick:e=>{e.target===e.currentTarget&&z.current?.focus()},children:[m.length===0?(0,P.jsx)(`p`,{className:`terminal-vide`,children:`Tape une commande PowerShell ou choisis un exemple.`}):null,m.map(e=>e.kind===`note`?e.tone===`erreur`?(0,P.jsx)(C,{issue:`echec`,word:`Échec`,children:e.text},e.id):(0,P.jsx)(`pre`,{className:`terminal-note`,children:e.text},e.id):(0,P.jsx)(ge,{entry:e,onCancel:()=>void Z(e)},e.id))]}),(0,P.jsxs)(`div`,{className:`terminal-ligne`,onClick:e=>{e.target.closest(`button, textarea`)||z.current?.focus()},children:[(0,P.jsx)(`span`,{className:`terminal-vive`,"aria-hidden":`true`,children:`❯`}),(0,P.jsxs)(`div`,{className:`terminal-zone`,children:[(0,P.jsx)(`div`,{className:`terminal-reflet`,"aria-hidden":`true`,children:(0,P.jsx)(T,{as:`bloc`,className:`terminal-reflet-code`,code:`${g}`})}),(0,P.jsx)(oe,{ref:z,mono:!0,className:`terminal-champ`,value:g,onChange:e=>{_(e.target.value),S(null)},onKeyDown:be,rows:1,spellCheck:!1,autoCapitalize:`off`,autoComplete:`off`,autoCorrect:`off`,disabled:!G,placeholder:d===null?`Connexion au moteur…`:`Get-Process`,"aria-label":`Commande PowerShell`})]}),(0,P.jsx)(o,{className:`terminal-analyser`,icon:(0,P.jsx)(de,{"aria-hidden":`true`}),onClick:()=>void X(g),disabled:!g.trim()||!G,children:(0,P.jsx)(`span`,{className:`terminal-analyser-mot`,children:`Analyser`})})]}),(0,P.jsx)(ye,{lectureAussitot:s})]}),H?(0,P.jsx)(`aside`,{className:`terminal-panneau`,"aria-label":`Exemples, historique et aide`,children:Se}):null]})]}),H?null:(0,P.jsx)(ie,{side:F?`droite`:`bas`,title:`Exemples, historique et aide`,open:j,onClose:()=>M(!1),children:(0,P.jsx)(`div`,{className:`terminal-volet`,children:Se})}),w?(0,P.jsx)(se,{open:D,preview:w.preview,origine:`toi`,onCancel:()=>{q(w.id,e=>({...e,status:`dismissed`})),$()},onConfirm:e=>{$(),Y(w.id,w.preview,e,`human`)}}):null]})}export{q as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer pages{.terminal-vue{padding-block-end:var(--esp-4)}.terminal-page{gap:var(--esp-3);flex-direction:column;display:flex}@media (height>=30rem){.terminal-vue{block-size:calc(100dvh - var(--ossature-barre,0px))}.terminal-page{block-size:100%}}.terminal-entete{align-items:center;column-gap:var(--esp-4);min-block-size:var(--barre-h);border-block-end:1px solid var(--trait);display:flex}.terminal-titre{color:var(--texte);flex:none}.terminal-titre:focus-visible{outline-offset:4px}.terminal-moteur{column-gap:var(--esp-3);font:var(--t-note);color:var(--texte-2);white-space:nowrap;flex:none;margin:0;display:flex}.terminal-cwd{justify-content:flex-end;align-items:center;gap:var(--esp-2);min-inline-size:0;font:var(--t-donnee);color:var(--texte-2);flex:1 1 0;margin:0;display:flex}.terminal-cwd>svg{inline-size:var(--ico-s);block-size:var(--ico-s);stroke-width:var(--ico-trait);flex:none}.terminal-chemin{text-overflow:ellipsis;white-space:nowrap;direction:rtl;min-inline-size:0;position:relative;overflow:hidden}.terminal-ouvrir{flex:none}.terminal-entete[data-barre]{min-block-size:2.25rem}@container page (width<28rem){.terminal-entete{column-gap:var(--esp-3);min-block-size:var(--ligne-min)}.terminal-titre,.terminal-version{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}}.terminal-corps{gap:var(--esp-5);flex:auto;grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,1fr);min-block-size:0;display:grid}@container page (width>=56rem){.terminal-corps{grid-template-columns:minmax(0,1fr) 20rem}}.terminal-poste{gap:var(--esp-2);grid-template-rows:minmax(0,1fr) auto auto;min-block-size:0;display:grid;container:poste/inline-size}.terminal-affichage{align-content:start;gap:var(--esp-4);min-block-size:0;padding:var(--esp-3) var(--esp-4) var(--esp-4) var(--esp-2);overscroll-behavior:contain;border:1px solid var(--trait-2);border-radius:var(--r-controle);background:var(--creux);color:var(--texte);font:var(--t-code);display:grid;overflow-y:auto}@media (height<30rem){.terminal-affichage{min-block-size:50dvh}}.terminal-vide{font:var(--t-interface);color:var(--texte-2);margin:0;padding-inline-start:var(--esp-5)}.terminal-note{color:var(--texte-2);font:var(--t-code);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding-inline-start:var(--esp-5)}.terminal-cmd{grid-template-columns:var(--esp-5) minmax(0, 1fr);row-gap:var(--esp-2);display:grid}.terminal-cmd>*{grid-column:2;min-inline-size:0}.terminal-pleine,.terminal-etat{grid-column:1/-1}.terminal-invite{align-items:baseline;column-gap:var(--esp-2);display:flex}.terminal-prompt{color:var(--texte-2);font:var(--t-saisie);font-weight:var(--graisse-moyenne);white-space:nowrap;flex:none}.terminal-tapee{min-inline-size:0;font:var(--t-saisie);background:0 0;border:0;flex:1 1 0;padding:0}.terminal-sortie{max-block-size:min(26.25rem,60dvh);overflow-y:auto}.terminal-err{color:var(--ton-danger-texte)}.terminal-etat{align-items:center;column-gap:var(--esp-3);row-gap:var(--esp-1);font:var(--t-note);color:var(--texte-2);font-variant-numeric:tabular-nums;flex-wrap:wrap;margin:0;display:flex}.terminal-arreter{animation:apparait var(--duree-2) linear var(--attente) backwards}.terminal-ligne{align-items:center;gap:var(--esp-2);min-block-size:var(--esp-7);padding:var(--esp-1) var(--esp-1) var(--esp-1) var(--esp-3);border:1px solid var(--trait-fort);border-radius:var(--r-controle);background:var(--creux);transition:border-color var(--mvt-survol);display:flex}@media (hover:hover){.terminal-ligne:hover:not(:focus-within){border-color:var(--texte-3)}}.terminal-ligne:has(.terminal-champ:focus-visible){outline:2px solid var(--anneau);outline-offset:2px}.terminal-vive{padding-block:var(--esp-2);color:var(--ambre);font:var(--t-saisie);font-weight:var(--graisse-forte);flex:none;align-self:flex-start}.terminal-zone{min-inline-size:0;max-block-size:min(calc(6lh + 2 * var(--esp-2)), 30dvh);font:var(--t-saisie);flex:1 1 0;display:grid;overflow-y:auto}.terminal-reflet,.terminal-champ{grid-area:1/1}.terminal-reflet{pointer-events:none}.terminal-reflet-code{padding:var(--esp-2) 0;font:inherit;background:0 0;border:0}.terminal-champ{min-block-size:var(--ligne-min);padding:var(--esp-2) 0;color:#0000;caret-color:var(--ambre);font:inherit;font-variant-ligatures:none;white-space:pre-wrap;overflow-wrap:anywhere;resize:none;background:0 0;border:0;align-self:stretch;overflow:hidden}.terminal-champ:focus-visible{outline:none}.terminal-champ:disabled{cursor:not-allowed;background:0 0}.terminal-ligne:has(.terminal-champ:disabled){border-color:var(--trait-2)}.terminal-analyser{flex:none}@container page (width<28rem){.terminal-analyser{min-inline-size:var(--bouton-h);padding-inline:0}.terminal-analyser-mot{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}}.terminal-niveaux{align-items:center;gap:var(--esp-1) var(--esp-3);min-block-size:1.75rem;font:var(--t-note);color:var(--texte-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.terminal-niveau{align-items:baseline;gap:var(--esp-1);white-space:nowrap;display:inline-flex}@container poste (width<28rem){.terminal-niveaux{grid-template-columns:repeat(2,max-content);display:grid}}.terminal-niveaux:not([data-suites]) .terminal-niveau-suite{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}.terminal-panneau{gap:var(--esp-3);min-block-size:0;border-inline-start:1px solid var(--trait);grid-template-rows:auto minmax(0,1fr) auto;padding-inline-start:var(--esp-5);display:grid}.terminal-volet{gap:var(--esp-3);display:grid}.terminal-panneau-defile{overscroll-behavior:contain;min-block-size:0;overflow-y:auto}.terminal-exemples{margin:0;padding:0;list-style:none;display:grid}.terminal-exemple{gap:var(--esp-1);inline-size:100%;min-block-size:var(--cible-min);padding:var(--esp-3) var(--esp-2);border:0;border-block-end:1px solid var(--trait);color:var(--texte);font:var(--t-interface);text-align:start;cursor:pointer;transition:background-color var(--mvt-survol);background:0 0;border-radius:0;display:grid}@media (hover:hover){.terminal-exemple:hover{background-color:var(--surface-2)}}.terminal-exemple:focus-visible{outline-offset:-2px}.terminal-exemple-nom{font-weight:var(--graisse-moyenne)}.terminal-aide-corps{gap:var(--esp-4);padding-block:var(--esp-3);font:var(--t-interface);color:var(--texte);display:grid}.terminal-aide-liste{gap:var(--esp-2);margin:0;display:grid}.terminal-aide-ligne{align-items:baseline;column-gap:var(--esp-3);grid-template-columns:8.5rem minmax(0,1fr);display:grid}.terminal-aide-ligne>dd{color:var(--texte-2);margin:0}.terminal-aide-phrase{margin:0}.terminal-aide-corps-niveaux{gap:var(--esp-2);display:grid}.terminal-politique{border-block-start:1px solid var(--trait);margin:0;padding-block-start:var(--esp-3)}.terminal-lien{color:var(--or);text-underline-offset:.2em;text-decoration:underline}@media (hover:hover){.terminal-lien:hover{color:var(--texte)}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Et as e}from"./index-COSiM-R9.js";var t={name:`arrow-right`,size:24,node:[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]};t.node;var n=e(t);export{n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./download-CeuKOenD.js";import{t}from"./eye-CXXHBBpr.js";import{t as n}from"./plus-D_QHm8ud.js";import{t as r}from"./trash-DLpHM-s8.js";import{$ as i,A as a,F as o,G as s,L as c,N as l,O as u,Ot as d,P as f,U as p,V as m,W as h,a as ee,c as g,dt as _,ft as v,ht as y,i as b,lt as x,mt as S,ot as C,q as w,v as te,w as T,z as ne}from"./index-COSiM-R9.js";import{a as E,n as D}from"./charts-BcijSJ4J.js";import{d as re,n as O,r as k,t as A}from"./Field-C7c2mCbb.js";import{t as j}from"./Register-DA_Aq5f8.js";import{t as M}from"./Table-DUmGel5e.js";var N=d();function P(e){let t={critical:0,high:0,medium:0,low:0,info:0};for(let n of e)t[n.severity]++;return t}var F=e=>e.critical+e.high+e.medium+e.low,I={none:`Cette machine`,path:`Fichier local`,target:`Cible réseau`,url:`Site web`},L=e=>e.toLowerCase()===I.none.toLowerCase(),R=e=>L(e)?e.toLowerCase():e,z=e=>e===`target`||e===`url`,ie={α:`alpha`,β:`bêta`,γ:`gamma`,δ:`delta`,ε:`epsilon`,ζ:`zêta`,η:`êta`,θ:`thêta`},ae=e=>`module ${ie[e]??e}`,B=e=>e===0?`Rien à corriger`:y(e,`constat à corriger`,`constats à corriger`);function oe(e,t,n,r){if(e===0)return t===1?`Le module d’audit n’a pas été lancé.`:`Aucun des ${S(t)} modules d’audit n’a été lancé.`;let i=`${y(e,`module lancé`,`modules lancés`)} sur ${t}`,a=n===0?`rien à corriger`:y(n,`constat à corriger`,`constats à corriger`);return r===`modules`?`${i}, ${a}.`:`${a.charAt(0).toUpperCase()}${a.slice(1)}, ${i}.`}var V={target:`la cible`,url:`l’adresse du site`,path:`le fichier ou le dossier`,ports:`les ports à tester`,expected:`les ports attendus ouverts`},H=e=>e.length<2?e[0]??``:`${e.slice(0,-1).join(`, `)} et ${e.at(-1)}`;function U(e){let t=e.filter(e=>V[e.key]).map(e=>V[e.key]),n=e.filter(e=>!V[e.key]).map(e=>`«\u00a0${e.label}\u00a0»`),r=n.length===0?``:`${n.length>1?`les champs`:`le champ`} ${H(n)}`;return t.length&&r?`Indique ${H(t)} et remplis ${r} pour lancer le module.`:t.length?`Indique ${H(t)} pour lancer le module.`:`Remplis ${r} pour lancer le module.`}var W=e=>e.status===`error`?`echec`:`reussie`;function G(e,t,n){let r=null;for(let i of e)i.status===`done`&&i.module===t&&i.target===n&&(!r||r.startedAt<i.startedAt)&&(r=i);return r}function K(e,t){if(G(t,e.module,e.target)?.id!==e.id)return{cas:`inchange`};let n=G(t.filter(t=>t.id!==e.id),e.module,e.target);return n?{cas:`relais`,passage:n}:{cas:`plus-rien`}}var q=(e,t)=>E.flatMap(n=>e.filter(e=>t(e)===n)),J={pass:{kind:`reussie`,mot:`Conforme`},fail:{kind:`echec`,mot:`À corriger`},warn:{kind:`neutre`,mot:`À surveiller`},info:{kind:`neutre`,mot:`Information`},skip:{kind:`neutre`,mot:`Non vérifié`}},Y=i();function X({run:e}){let t=F(e.counts);return(0,Y.jsxs)(`span`,{className:`audit-resultat`,children:[(0,Y.jsx)(m,{kind:W(e)}),e.status===`error`?null:(0,Y.jsx)(`span`,{className:`audit-reste`,children:B(t)})]})}function Z(){let e=u();return async t=>{try{o(`promethee-${t.module}-${t.startedAt.slice(0,10)}.md`,await l(`/api/audits/${t.id}/report`),`text/markdown`)}catch(t){e(`erreur`,`Export impossible`,f(t))}}}function Q({target:e,className:t,enPhrase:n=!1}){if(L(e))return(0,Y.jsx)(`span`,{className:t,children:n?R(e):e});let r=(0,Y.jsx)(`span`,{className:`t-donnee`,children:e});return t?(0,Y.jsx)(`span`,{className:t,children:r}):r}function se({checks:e}){return(0,Y.jsx)(M,{caption:`Vérifications`,showCaption:!0,columns:[{key:`libelle`,label:`Vérification`,render:({c:e})=>v(e.label)},{key:`etat`,label:`État`,render:({c:e})=>(0,Y.jsxs)(`span`,{className:`audit-verif`,children:[(0,Y.jsx)(p,{kind:J[e.status].kind}),J[e.status].mot]})},{key:`valeur`,label:`Valeur relevée`,render:({c:e})=>(0,Y.jsx)(`span`,{className:`audit-valeur`,children:e.value})}],rows:e.map((e,t)=>({c:e,i:t})),rowKey:({c:e,i:t})=>`${t}-${e.label}`,stack:`28`})}function $({finding:e,context:t}){return(0,Y.jsxs)(`article`,{className:`audit-constat`,children:[(0,Y.jsxs)(`p`,{className:`audit-constat-tete`,children:[(0,Y.jsx)(h,{severity:e.severity}),t?(0,Y.jsx)(`span`,{className:`audit-constat-origine`,children:t}):null]}),(0,Y.jsx)(`h3`,{className:`t-interface audit-constat-titre`,children:g(e.title)}),(0,Y.jsx)(`p`,{className:`audit-constat-detail`,children:v(e.detail)}),e.evidence?(0,Y.jsx)(re,{label:`Preuve\u00a0: ${g(e.title)}`,className:`audit-constat-preuve`,children:e.evidence}):null,e.recommendation?(0,Y.jsxs)(`p`,{className:`audit-constat-correction`,children:[(0,Y.jsx)(`span`,{className:`audit-constat-mot`,children:`Correction.`}),` `,v(e.recommendation)]}):null]})}function ce({run:t,titre:n,titreId:r}){let i=Z(),[a,o]=(0,N.useState)(!1),l=P(t.findings),u=q(t.findings,e=>e.severity),d=(0,Y.jsxs)(`div`,{className:`audit-passage`,children:[n?(0,Y.jsx)(`h2`,{id:r,className:`t-titre-3`,children:n}):null,(0,Y.jsxs)(`p`,{className:`audit-passage-ligne`,children:[(0,Y.jsx)(m,{kind:W(t)}),(0,Y.jsx)(Q,{target:t.target}),(0,Y.jsx)(`span`,{className:`num`,children:x(t.startedAt)}),(0,Y.jsx)(`span`,{className:`num`,children:_(t.durationMs)})]})]});return(0,Y.jsxs)(`div`,{className:`audit-resultat-zone`,children:[(0,Y.jsxs)(`div`,{className:`audit-resultat-tete`,children:[d,(0,Y.jsx)(s,{size:`s`,icon:(0,Y.jsx)(e,{"aria-hidden":`true`}),busy:a,onClick:()=>{o(!0),i(t).finally(()=>o(!1))},children:`Rapport Markdown`})]}),t.status===`error`?(0,Y.jsx)(c,{message:t.error??`Le module n’a pas pu aller au bout.`}):(0,Y.jsx)(`p`,{className:`audit-resume`,children:v(t.summary)}),t.findings.length>0?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(D,{counts:l}),(0,Y.jsx)(`div`,{className:`audit-constats`,children:u.map(e=>(0,Y.jsx)($,{finding:e},e.id))})]}):null,t.checks.length>0?(0,Y.jsx)(se,{checks:t.checks}):null]})}function le({runs:n,titreDuModule:i,courant:a,onVoir:o,onSupprimer:c,caption:l}){let u=Z(),d=e=>`${i?`« ${i(e.module)} » `:``}du ${x(e.startedAt)}`,f=[{key:`date`,label:`Date`,render:e=>(0,Y.jsx)(`time`,{className:`num audit-date`,dateTime:e.startedAt,title:x(e.startedAt),children:C(e.startedAt)})},...i?[{key:`module`,label:`Module`,render:e=>(0,Y.jsxs)(`span`,{className:`audit-empile`,children:[(0,Y.jsx)(`span`,{children:i(e.module)}),(0,Y.jsx)(Q,{target:e.target,className:`audit-second`})]})}]:[{key:`cible`,label:`Cible`,render:e=>(0,Y.jsx)(Q,{target:e.target})}],{key:`resultat`,label:`Résultat`,render:e=>(0,Y.jsxs)(`span`,{className:`audit-empile`,children:[(0,Y.jsx)(X,{run:e}),(0,Y.jsx)(`span`,{className:`num audit-second`,children:_(e.durationMs)})]})},{key:`actions`,label:`Actions`,align:`fin`,render:n=>(0,Y.jsxs)(`span`,{className:`audit-actions`,children:[(0,Y.jsx)(s,{size:`s`,variant:`nu`,icon:(0,Y.jsx)(t,{"aria-hidden":`true`}),"aria-label":`Voir le passage ${d(n)}`,"aria-current":n.id===a?`true`:void 0,onClick:()=>o(n),children:`Voir`}),(0,Y.jsx)(w,{size:`s`,label:`Télécharger le rapport ${d(n)}`,icon:(0,Y.jsx)(e,{"aria-hidden":`true`}),onClick:()=>void u(n)}),(0,Y.jsx)(w,{size:`s`,label:`Supprimer le passage ${d(n)}`,icon:(0,Y.jsx)(r,{"aria-hidden":`true`}),onClick:()=>c(n)})]})}];return(0,Y.jsx)(M,{caption:l,columns:f,rows:n,rowKey:e=>e.id,stack:`28`,selected:a?e=>e.id===a:void 0,className:`audit-historique`})}function ue({run:e,titre:t,apres:n,onClose:i,onSupprime:o}){let s=u(),[c,l]=(0,N.useState)(!1),d=async()=>{l(!0);try{await a(`DELETE`,`/api/audits/${e.id}`),s(`ok`,`Passage supprimé`,`${t}, ${x(e.startedAt)}`),o(e.id)}catch(e){s(`erreur`,`Suppression impossible`,f(e)),l(!1),i()}};return(0,Y.jsxs)(b,{title:`Supprimer ce passage ?`,tone:`danger`,confirmLabel:`Supprimer`,confirmIcon:(0,Y.jsx)(r,{"aria-hidden":`true`}),busy:c,onConfirm:()=>void d(),onCancel:i,children:[(0,Y.jsxs)(`p`,{className:`audit-objet`,children:[t,` sur `,(0,Y.jsx)(Q,{target:e.target,enPhrase:!0}),`, `,x(e.startedAt),`.`]}),(0,Y.jsxs)(`p`,{children:[`Ses constats et ses vérifications sont effacés du disque. Le journal garde la ligne de ce passage, avec son résumé.`,n.cas===`relais`?` Les rapports et le tableau de bord reprendront les constats du passage du ${x(n.passage.startedAt)}.`:n.cas===`plus-rien`?` Les rapports et le tableau de bord n’auront plus aucun constat de ce module pour cette cible. Rien n’est corrigé pour autant.`:null]})]})}function de({titreId:e}){let t=T(`/api/scope`),[i,a]=(0,N.useState)(!1),[o,l]=(0,N.useState)(null),u=t.data?.targets??[];return(0,Y.jsxs)(j,{labelledBy:e,className:`audits-perimetre`,head:(0,Y.jsxs)(`div`,{className:`audits-bande-titre`,children:[(0,Y.jsx)(`h2`,{id:e,className:`t-titre-3`,children:`Périmètre autorisé`}),(0,Y.jsx)(`p`,{className:`phrase-note`,children:`Hors de cette machine, un audit refuse toute cible qui n’est pas déclarée ici.`})]}),actions:(0,Y.jsx)(s,{icon:(0,Y.jsx)(n,{"aria-hidden":`true`}),className:`audits-declarer`,onClick:()=>a(!0),children:`Déclarer une cible`}),children:[t.error?(0,Y.jsx)(c,{message:t.error,onRetry:t.reload}):null,(0,Y.jsxs)(`ul`,{className:`audits-cibles`,children:[(0,Y.jsxs)(`li`,{className:`audits-cible`,children:[(0,Y.jsx)(`span`,{className:`t-donnee`,children:`127.0.0.1`}),(0,Y.jsx)(`span`,{className:`audits-cible-note`,children:`cette machine, toujours autorisée`})]}),u.map(e=>(0,Y.jsxs)(`li`,{className:`audits-cible`,children:[(0,Y.jsxs)(`span`,{className:`t-donnee`,children:[e.includeSubdomains?`*.`:``,e.host]}),(0,Y.jsxs)(`span`,{className:`audits-cible-note`,children:[e.note?`${e.note}, `:``,`attestée `,C(e.attestedAt)]}),(0,Y.jsx)(w,{size:`s`,className:`audits-cible-retirer`,label:`Retirer ${e.host} du périmètre`,icon:(0,Y.jsx)(r,{"aria-hidden":`true`}),onClick:()=>l(e)})]},e.id))]}),t.data&&u.length===0?(0,Y.jsxs)(`p`,{className:`phrase-note audits-perimetre-note`,children:[`Aucune cible extérieure`,`\xA0`,`: les audits ne peuvent viser que cette machine.`]}):null,i?(0,Y.jsx)(pe,{onClose:()=>a(!1),onAjoutee:()=>{a(!1),t.reload()}}):null,o?(0,Y.jsx)(fe,{cible:o,onClose:()=>l(null),onRetiree:()=>{l(null),t.reload()}}):null]})}function fe({cible:e,onClose:t,onRetiree:n}){let i=u(),[o,s]=(0,N.useState)(!1),c=async()=>{s(!0);try{await a(`DELETE`,`/api/scope/${e.id}`),i(`ok`,`Cible retirée`,e.host),n()}catch(e){i(`erreur`,`Retrait impossible`,f(e)),s(!1),t()}};return(0,Y.jsxs)(b,{title:`Retirer cette cible ?`,tone:`contour`,confirmLabel:`Retirer du périmètre`,confirmIcon:(0,Y.jsx)(r,{"aria-hidden":`true`}),busy:o,onConfirm:()=>void c(),onCancel:t,children:[(0,Y.jsx)(`p`,{className:`audit-objet`,children:(0,Y.jsx)(`span`,{className:`t-donnee`,children:e.host})}),(0,Y.jsx)(`p`,{children:`Les audits vers cette cible seront refusés. L’historique de ses audits est conservé.`})]})}function pe({onClose:e,onAjoutee:t}){let r=u(),i=(0,N.useId)(),o=te(),c=(0,N.useRef)(null),l=(0,N.useRef)(null),d=(0,N.useRef)(null);(0,N.useLayoutEffect)(()=>{document.activeElement===document.body&&d.current&&(d.current===`ajouter`?c:l).current?.focus()},[o]);let[p,m]=(0,N.useState)(``),[h,g]=(0,N.useState)(``),[_,v]=(0,N.useState)(!1),[y,b]=(0,N.useState)(!1),[x,S]=(0,N.useState)(null),[C,w]=(0,N.useState)(!1),T=async e=>{if(e.preventDefault(),y&&p.trim()&&!C){w(!0),S(null);try{let e=await a(`POST`,`/api/scope`,{host:p.trim().replace(/^https?:\/\//i,``).replace(/[/:].*$/,``),note:h,includeSubdomains:_,attest:!0});r(`ok`,`Cible ajoutée au périmètre`,e.host),t()}catch(e){S(f(e)),w(!1)}}},E=o?`s`:`m`,D=(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(s,{ref:c,type:`submit`,form:`form-cible`,variant:`feu`,size:E,icon:(0,Y.jsx)(n,{"aria-hidden":`true`}),busy:C,disabled:!y||!p.trim(),onFocus:()=>{d.current=`ajouter`},children:`Ajouter au périmètre`}),(0,Y.jsx)(s,{ref:l,size:E,onClick:e,onFocus:()=>{d.current=`annuler`},children:`Annuler`})]});return(0,Y.jsx)(ee,{title:`Déclarer une cible`,subtitle:`Un nom d’hôte ou une adresse IP que tu as le droit de tester.`,onClose:e,footer:o?(0,Y.jsx)(`div`,{className:`audits-declaration-pied`,"data-pied-serre":``,children:D}):D,children:(0,Y.jsxs)(`form`,{id:`form-cible`,className:`audits-declaration`,onSubmit:e=>void T(e),children:[(0,Y.jsx)(O,{label:`Nom d’hôte ou adresse IP`,help:`Une cible à la fois : ni plage d’adresses, ni masque.`,error:x,children:(0,Y.jsx)(k,{mono:!0,value:p,onChange:e=>m(e.target.value),placeholder:`exemple.fr`,"data-autofocus":``,autoComplete:`off`,spellCheck:!1})}),(0,Y.jsx)(O,{label:`Note`,optional:!0,children:(0,Y.jsx)(k,{value:h,onChange:e=>g(e.target.value),placeholder:`Mon site personnel, labo du cours, autorisation du 12/11…`,maxLength:200})}),(0,Y.jsx)(A,{label:`Inclure aussi ses sous-domaines`,checked:_,onChange:v}),(0,Y.jsxs)(`div`,{className:`audits-declaration-loi`,children:[(0,Y.jsx)(ne,{id:i,issue:`a-toi`,word:`Attention`,variant:`securite`,children:`Accéder à un système sans autorisation est un délit (article 323-1 du Code pénal). Cette déclaration est écrite au journal.`}),(0,Y.jsx)(A,{label:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`audits-atteste`,children:`J’atteste`}),` que cette cible m’appartient, ou que j’ai une autorisation écrite de son propriétaire pour la tester.`]}),checked:y,onChange:b,"aria-describedby":i})]})]})})}export{q as _,X as a,I as c,K as d,oe as f,ae as g,P as h,de as i,z as l,R as m,$ as n,ce as o,U as p,le as r,ue as s,Q as t,F as u,B as v};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer pages{.audits-page,.audit-page{align-content:start;row-gap:var(--esp-5);padding-block-end:var(--esp-8);display:grid}.audits-bande-titre{gap:var(--esp-1);display:grid}.audits-bande-titre>:is(h2,p),.audit-page :is(h2,h3){margin:0}.audit-compte{font:var(--t-note);color:var(--texte-2);margin-inline-start:var(--esp-2)}.audit-second{font:var(--t-note);color:var(--texte-2)}.audit-empile{gap:var(--esp-1);display:grid}.audits-cibles{margin:0;padding:0;list-style:none}.audits-cible{align-items:center;gap:var(--esp-1) var(--esp-3);min-block-size:var(--ligne-min);padding-block:var(--esp-1);border-block-end:1px solid var(--trait);flex-wrap:wrap;display:flex}.audits-cible-note{font:var(--t-note);color:var(--texte-2)}.audits-cible-retirer{margin-inline-start:auto}.audits-perimetre-note{margin-block:var(--esp-3) 0}.audits-declarer{inline-size:100%}@container page (width>=28rem){.audits-declarer{inline-size:auto}}.audits-declaration{gap:var(--esp-4);display:grid}.audits-atteste{font-weight:var(--graisse-forte)}.audits-declaration-loi{gap:var(--esp-4);display:grid}@media (height<30rem){.audits-declaration-loi{gap:var(--esp-2)}}.audits-declaration-pied{align-items:center;gap:var(--esp-3);flex-wrap:wrap;display:flex}.audits-liste{border-block-start:1px solid var(--trait);margin:0;padding:0;list-style:none}.audits-liste>li{border-block-end:1px solid var(--trait)}.audits-module{grid-template-columns:var(--esp-5) auto minmax(0, 1fr) var(--ico-s);align-items:baseline;gap:var(--esp-1) var(--esp-3);min-block-size:5.5rem;padding:var(--esp-3) var(--esp-2);color:var(--texte);transition:background-color var(--mvt-survol);grid-template-areas:"ordinal titre titre fleche"".etat etat fleche"".type objectif fleche";text-decoration:none;display:grid}.audits-module:focus-visible{outline-offset:-2px}@media (hover:hover){.audits-module:hover{background-color:color-mix(in srgb, var(--texte) 4%, transparent)}}.audits-module-ordinal{grid-area:ordinal}.audits-module-titre{font-weight:var(--graisse-forte);grid-area:titre}.audits-module-type{font:var(--t-note);color:var(--texte-2);white-space:nowrap;grid-area:type}.audits-module-objectif{min-inline-size:0;font:var(--t-note);color:var(--texte-2);grid-area:objectif}.audits-module-etat{align-items:baseline;gap:var(--esp-1) var(--esp-3);flex-wrap:wrap;grid-area:etat;display:flex}.audits-module-date,.audits-module-jamais{font:var(--t-note);color:var(--texte-2)}.audits-module-fleche{inline-size:var(--ico-s);block-size:var(--ico-s);stroke-width:var(--ico-trait);color:var(--texte-3);grid-area:fleche;align-self:center}@container page (width>=28rem){.audits-module{grid-template-columns:var(--esp-5) minmax(0, 1fr) auto var(--ico-s);grid-template-areas:"ordinal titre etat fleche"".objectif type fleche";min-block-size:4.5rem}.audits-module-etat,.audits-module-type{justify-self:end}}@container page (width>=44rem){.audits-module{grid-template-columns:var(--esp-5) minmax(10rem, max-content) minmax(0, 1fr) 7.5rem 16rem var(--ico-s);min-block-size:4rem;padding-block:var(--esp-2);grid-template-areas:"ordinal titre objectif type etat fleche";align-items:center}.audits-module-etat,.audits-module-type{justify-self:start}.audits-module-objectif{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}.audit-resultat{align-items:baseline;column-gap:var(--esp-2);flex-wrap:wrap;display:inline-flex}.audit-reste{color:var(--texte)}.audit-grille{align-items:start;gap:var(--esp-5) var(--esp-6);grid-template-columns:minmax(0,1fr);display:grid}.audit-principal{row-gap:var(--esp-5);min-inline-size:0;display:grid}@container page (width>=44rem){.audit-grille{grid-template:"principal lancer""principal explication"1fr/minmax(0,3fr) minmax(0,2fr)}.audit-lancer{grid-area:lancer}.audit-principal{grid-area:principal}.audit-explication{grid-area:explication}}@container page (width>=56rem){.audit-grille{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}}.audit-formulaire{gap:var(--esp-4);display:grid}:is(.audits-page,.audit-page) :is(a[href],button,summary,input,[tabindex="0"]),.audit-refus{scroll-margin-block:var(--esp-4)}.audit-formulaire>p{margin:0}.audit-puces{align-items:center;gap:var(--esp-2);flex-wrap:wrap;margin-block-start:calc(var(--esp-2) * -1);display:flex}.audit-puces-etiquette{font:var(--t-note);color:var(--texte-2)}.audit-puce{font-family:var(--f-code)}.audit-envoi,.audit-progression{justify-items:start;gap:var(--esp-2);display:grid}.audit-progression-etape{font:var(--t-note);color:var(--texte-2)}.audit-resultat-zone{gap:var(--esp-4);min-inline-size:0;display:grid}.audit-resultat-tete{justify-content:space-between;align-items:flex-start;gap:var(--esp-3);flex-wrap:wrap;display:flex}.audit-passage{gap:var(--esp-1);display:grid}.audit-passage-ligne{align-items:baseline;gap:var(--esp-1) var(--esp-3);font:var(--t-note);color:var(--texte-2);flex-wrap:wrap;margin:0;display:flex}.audit-resume{margin:0}.audit-date{white-space:nowrap}.audit-actions{justify-content:flex-end;gap:var(--esp-3);flex-wrap:wrap;display:inline-flex}.audit-constats{display:grid}.audit-constat{gap:var(--esp-2);min-inline-size:0;padding-block:var(--esp-4);border-block-start:1px solid var(--trait);display:grid}.audit-constat>*{margin:0}.audit-constat-tete{align-items:center;gap:var(--esp-1) var(--esp-4);flex-wrap:wrap;display:flex}.audit-constat-origine{font:var(--t-note);color:var(--texte-2)}.audit-constat-titre{font:var(--t-interface);font-weight:var(--graisse-forte)}.audit-constat-detail{color:var(--texte-2)}.audit-constat-mot{font-weight:var(--graisse-moyenne)}.audit-verif{white-space:nowrap;align-items:center;display:inline-flex}.audit-valeur{overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.audit-details{margin-block-start:var(--esp-3)}.audit-details>summary{min-block-size:var(--ctl-m);color:var(--texte);cursor:pointer;align-items:center;display:flex}.audit-commandes-liste{gap:var(--esp-2);margin:0;padding:0;list-style:none;display:grid}.audit-details .audit-commandes-liste{margin-block-start:var(--esp-2)}.audit-objet{font-weight:var(--graisse-moyenne);margin:0}.audit-commandes{gap:var(--esp-2);display:grid}.audit-commandes-titre{font:var(--t-note);color:var(--texte-2);margin:0}.audit-commandes-defile[data-bloc]{overscroll-behavior:contain;max-block-size:min(15rem,35dvh);overflow-y:auto}}
|
|
Binary file
|